Перейти к содержанию
MrFoxy3010

Как изменить максимальную скорость авто?

Рекомендуемые сообщения

MrFoxy3010

 

SetVehicleSpeed(vehicleid, Float:speed)
{
	    new Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, Float:a;
	    GetVehicleVelocity(vehicleid, x1, y1, z1);
	    GetVehiclePos(vehicleid, x2, y2, z2);
	    GetVehicleZAngle(vehicleid, a);
		a = 360 - a;
	    x1 = (floatsin(a, degrees) * (speed/100) + floatcos(a, degrees) * 0 + x2) - x2;
	    y1 = (floatcos(a, degrees) * (speed/100) + floatsin(a, degrees) * 0 + y2) - y2;
	    SetVehicleVelocity(vehicleid, x1, y1, z1);
}

создал массив

static const max_veh_speed[] = {
	280,210,300,120,310,265,110,170,110,210,260,260,280,160,140,350,255,200,150,260,280,240,
	165,145,240,240,220,240,280,200,180,130,180,280,200,240,180,280,300,160,260,280,150,240,200,
	165,280,200,190,150,280,240,190,190,190,140,160,240,165,160,220,190,190,190,75,280,180,160,
	190,220,170,160,190,180,240,160,220,200,280,280,200,220,150,120,190,160,150,200,200,220,180,
	180,160,410,240,180,200,200,160,240,240,240,280,240,240,260,220,180,140,120,140,200,200,200,240,
	240,220,220,200,330,330,310,200,220,220,220,260,220,180,160,60,70,220,220,220,200,160,110,220,360,
	180,280,160,180,240,160,160,160,180,220,240,165,200,200,170,180,200,200,180,200,200,200,180,240,220,
	200,160,160,170,110,200,90,160,180,60,180,220,200,180,180,165,190,200,170,220,165,200,220,140,200,110,
	120,200,200,60,190,260,200,240,220,185,110,220,240,240,285,160,160,160,140,160,160};

Вопрос: Как изменить скорость? Хотя бы идею подскажите

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
16Shadows

Вызывать SetVehicleSpeed раз в некоторый промежуток времени, если скорость ниже желаемой максимальной, но больше или примерно равна максимальной стандартной, и игрок жмёт кнопку вперёд.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
PhNst27

Я лично сделал так:

1) Создал таймер вот-такой таймер для каждого т/с на сервере

new CarSpeedTimer[MAX_VEHICLES];

Создал функцию:

forward CarSpeed(playerid);
public CarSpeed(playerid)
{
	new State = GetPlayerState(playerid); //узнаем место игрока
	if (State != PLAYER_STATE_DRIVER) return 1;// если игрок не на месте водителя
	new Float:D[4],vid, Float:nowspeed, maxspeed; // Переменные D[4] - вектор перемещения, nowspeed текущяя скорость, maxspeed максимальная скорость
	maxspeed = CarInfo[vid][cSpeed];
	vid = GetPlayerVehicleID(playerid);
	GetVehicleVelocity(vid, D[0], D[1], D[2]);
	nowspeed = floatsqroot(floatpower(floatabs(D[0]), 2.0) + floatpower(floatabs(D[1]), 2.0) + floatpower(floatabs(D[2]), 2.0)) * 100.3;
 	//dis- это коефициент ускорения, лично я сделал по формуле dis увеличивается каждую секунду на (1/время разгона до 100 км/ч)
	if(dis <= 0.2)
	{
		if(nowspeed <=10)
  		{
	 		dis = 0;
		}else if(nowspeed >= maxspeed){
			dis = 0;
		}else{
		dis = dis+(1/CarInfo[vid][cSecToHu]);
		}
	}
	GetVehicleZAngle(vid, D[3]);
	SetVehicleVelocity(vid,floatadd(D[0],floatmul(dis,floatsin(-D[3],degrees))), floatadd(D[1],floatmul(dis,floatcos(-D[3],degrees))), D[2]);
	return 1;
}

и в OnPlayerKeyStateChange добавляем проверку на зажатую клавишу W 

if (PRESSED(KEY_SPRINT))
   	{
   		CarSpeedTimer[GetPlayerVehicleID(playerid)]=SetTimer("CarSpeed", 1000, 1);
   	}
   	else if (RELEASED(KEY_SPRINT))
   	{
   		KillTimer(CarSpeedTimer[GetPlayerVehicleID(playerid)]);
   		dis = 0.0;
   		//SendClientMessage(playerid, COLOR_RED, "Вы ее отпустили");
   	}
	return true;

 

  • Thanks 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
16Shadows

Если у Вас таймер выполняется для каждого игрока, то Вам нет смысла создавать массив размером MAX_VEHICLES. Стандартный лимит машин больше лимита игроков.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
павел200608
В 3/9/2020 в 7:02 PM, PhNst27 сказал:

Я лично сделал так:

1) Создал таймер вот-такой таймер для каждого т/с на сервере

new CarSpeedTimer[MAX_VEHICLES];

Создал функцию:

forward CarSpeed(playerid);
public CarSpeed(playerid)
{
	new State = GetPlayerState(playerid); //узнаем место игрока
	if (State != PLAYER_STATE_DRIVER) return 1;// если игрок не на месте водителя
	new Float:D[4],vid, Float:nowspeed, maxspeed; // Переменные D[4] - вектор перемещения, nowspeed текущяя скорость, maxspeed максимальная скорость
	maxspeed = CarInfo[vid][cSpeed];
	vid = GetPlayerVehicleID(playerid);
	GetVehicleVelocity(vid, D[0], D[1], D[2]);
	nowspeed = floatsqroot(floatpower(floatabs(D[0]), 2.0) + floatpower(floatabs(D[1]), 2.0) + floatpower(floatabs(D[2]), 2.0)) * 100.3;
 	//dis- это коефициент ускорения, лично я сделал по формуле dis увеличивается каждую секунду на (1/время разгона до 100 км/ч)
	if(dis <= 0.2)
	{
		if(nowspeed <=10)
  		{
	 		dis = 0;
		}else if(nowspeed >= maxspeed){
			dis = 0;
		}else{
		dis = dis+(1/CarInfo[vid][cSecToHu]);
		}
	}
	GetVehicleZAngle(vid, D[3]);
	SetVehicleVelocity(vid,floatadd(D[0],floatmul(dis,floatsin(-D[3],degrees))), floatadd(D[1],floatmul(dis,floatcos(-D[3],degrees))), D[2]);
	return 1;
}

и в OnPlayerKeyStateChange добавляем проверку на зажатую клавишу W 

if (PRESSED(KEY_SPRINT))
   	{
   		CarSpeedTimer[GetPlayerVehicleID(playerid)]=SetTimer("CarSpeed", 1000, 1);
   	}
   	else if (RELEASED(KEY_SPRINT))
   	{
   		KillTimer(CarSpeedTimer[GetPlayerVehicleID(playerid)]);
   		dis = 0.0;
   		//SendClientMessage(playerid, COLOR_RED, "Вы ее отпустили");
   	}
	return true;

 

помоги . ошибки при компиляции
(3602) : error 017: undefined symbol "CarInfo"
C:\Users\Rider\Desktop\ \ENTER RP\SKARIUS CRMP RP 2018\gamemodes\JRP.pwn(3602) : warning 215: expression has no effect
C:\Users\Rider\Desktop\ \ENTER RP\SKARIUS CRMP RP 2018\gamemodes\JRP.pwn(3602) : error 001: expected token: ";", but found "]"
C:\Users\Rider\Desktop\ \ENTER RP\SKARIUS CRMP RP 2018\gamemodes\JRP.pwn(3602) : error 029: invalid expression, assumed zero
C:\Users\Rider\Desktop\ \ENTER RP\SKARIUS CRMP RP 2018\gamemodes\JRP.pwn(3602) : fatal error 107: too many error messages on one line

вот строки:
forward CarSpeed(playerid);
public CarSpeed(playerid)
{
    new State = GetPlayerState(playerid); //узнаем место игрока
    if (State != PLAYER_STATE_DRIVER) return 1;// если игрок не на месте водителя
    new Float:D[4],vid, Float:nowspeed, maxspeed; // Переменные D[4] - вектор перемещения, nowspeed текущяя скорость, maxspeed максимальная скорость
    maxspeed = CarInfo[vid][cSpeed];<<<< ТУТ ОШИБКА<<<<<
    vid = GetPlayerVehicleID(playerid);
    GetVehicleVelocity(vid, D[0], D[1], D[2]);
    nowspeed = floatsqroot(floatpower(floatabs(D[0]), 2.0) + floatpower(floatabs(D[1]), 2.0) + floatpower(floatabs(D[2]), 2.0)) * 100.3;
     //dis- это коефициент ускорения, лично я сделал по формуле dis увеличивается каждую секунду на (1/время разгона до 100 км/ч)
    if(dis <= 0.2)
    {
        if(nowspeed <=10)
          {
             dis = 0;
        }else if(nowspeed >= maxspeed){
            dis = 0;
        }else{
        dis = dis+(1/CarInfo[vid][cSecToHu]);
        }
    }
    GetVehicleZAngle(vid, D[3]);
    SetVehicleVelocity(vid,floatadd(D[0],floatmul(dis,floatsin(-D[3],degrees))), floatadd(D[1],floatmul(dis,floatcos(-D[3],degrees))), D[2]);
    return 1;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
PhNst27
В 5/21/2020 в 3:04 PM, павел200608 сказал:

помоги . ошибки при компиляции
(3602) : error 017: undefined symbol "CarInfo"
C:\Users\Rider\Desktop\ \ENTER RP\SKARIUS CRMP RP 2018\gamemodes\JRP.pwn(3602) : warning 215: expression has no effect
C:\Users\Rider\Desktop\ \ENTER RP\SKARIUS CRMP RP 2018\gamemodes\JRP.pwn(3602) : error 001: expected token: ";", but found "]"
C:\Users\Rider\Desktop\ \ENTER RP\SKARIUS CRMP RP 2018\gamemodes\JRP.pwn(3602) : error 029: invalid expression, assumed zero
C:\Users\Rider\Desktop\ \ENTER RP\SKARIUS CRMP RP 2018\gamemodes\JRP.pwn(3602) : fatal error 107: too many error messages on one line

вот строки:
forward CarSpeed(playerid);
public CarSpeed(playerid)
{
    new State = GetPlayerState(playerid); //узнаем место игрока
    if (State != PLAYER_STATE_DRIVER) return 1;// если игрок не на месте водителя
    new Float:D[4],vid, Float:nowspeed, maxspeed; // Переменные D[4] - вектор перемещения, nowspeed текущяя скорость, maxspeed максимальная скорость
    maxspeed = CarInfo[vid][cSpeed];<<<< ТУТ ОШИБКА<<<<<
     vid = GetPlayerVehicleID(playerid);
    GetVehicleVelocity(vid, D[0], D[1], D[2]);
    nowspeed = floatsqroot(floatpower(floatabs(D[0]), 2.0) + floatpower(floatabs(D[1]), 2.0) + floatpower(floatabs(D[2]), 2.0)) * 100.3;
     //dis- это коефициент ускорения, лично я сделал по формуле dis увеличивается каждую секунду на (1/время разгона до 100 км/ч)
    if(dis <= 0.2)
    {
        if(nowspeed <=10)
          {
             dis = 0;
        }else if(nowspeed >= maxspeed){
            dis = 0;
        }else{
        dis = dis+(1/CarInfo[vid][cSecToHu]);
        }
    }
    GetVehicleZAngle(vid, D[3]);
    SetVehicleVelocity(vid,floatadd(D[0],floatmul(dis,floatsin(-D[3],degrees))), floatadd(D[1],floatmul(dis,floatcos(-D[3],degrees))), D[2]);
    return 1;
}

enum cInfo
{
     cId,
    cModel,
    cPlayer[MAX_PLAYER_NAME],
    cFuelType[48],
    Float:cSpeed,
    Float:cFuel,
}
new CarInfo[MAX_VEHICLES][cInfo];

CarInfo - это мой массив в котором я храню характеристики авто, в данном случае cSpeed - это максимальная скорость авто.

Если остались вопросы, то спрашивай, помогу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
павел200608
19 часов назад, PhNst27 сказал:

enum cInfo
{
     cId,
    cModel,
    cPlayer[MAX_PLAYER_NAME],
    cFuelType[48],
    Float:cSpeed,
    Float:cFuel,
}
new CarInfo[MAX_VEHICLES][cInfo];

CarInfo - это мой массив в котором я храню характеристики авто, в данном случае cSpeed - это максимальная скорость авто.

Если остались вопросы, то спрашивай, помогу.

куда это вставлять? просто я новичок в павно

 

Изменено пользователем павел200608

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.