Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Cruise Control - удержание постоянной скорости автомобиля.

Статус
В этой теме нельзя размещать новые ответы.

Skinni

Компетентный
Здравствуйте пользователи Pawno-Info как то на просторах форума видел, что не которые искали подобную систему, а кто-то даже хотел её купить. Мне удалось её найти.
Суть системы думаю понятна из названия. Набираем нужную нам скорость и фиксируем её с помощью системы круиз контроля, то есть авто двигается с постоянной скоростью.

Не люблю болтать не по делу, поэтому начнём:

  • И так ко всем глобальным переменным добавляем:

    PHP:
    new Ctrl = KEY_ACTION;
    new Float:CruiseSpeed[MAX_PLAYERS];
    new Float:PlayerHeadingAngle[MAX_PLAYERS];
    new bool:Control[MAX_PLAYERS];
  • Далее ко всем forward's:

    PHP:
    forward CruiseControl(playerid);
  • В public OnPlayerConnect(playerid):

    PHP:
    Control[playerid] = false;
  • Добавим команду в public OnPlayerCommandText(playerid, cmdtext[]):

    PHP:
    if(strcmp(cmd, "/chelp", true) == 0)
    	{
    		if(IsPlayerConnected(playerid))
    		{
    			SendClientMessage(playerid, COLOR_GREEN," ________________________________________________________________________");
    			SendClientMessage(playerid, COLOR_GRAD3," Cистема круиз контроля для поддержания постоянной скорости автомобиля.");
    			SendClientMessage(playerid, COLOR_GRAD4," Включение: наберите нужную скорость и нажмите левый CTRL");
    			SendClientMessage(playerid, COLOR_GRAD4," Выключение: нажмите также левый CTRL или просто остановите авто");
    			SendClientMessage(playerid, COLOR_GREEN," ________________________________________________________________________");
    		}
    		return true;
    	}
  • Добавим активацию системы по кнопке LCTRL в public OnPlayerKeyStateChange(playerid, newkeys, oldkeys):

    PHP:
    if (CruiseSpeed[playerid] != 0.00 && (newkeys & Ctrl) && Control[playerid] == true)
    	{
    		CruiseSpeed[playerid] = 0.00;
    		Control[playerid] = false;
    		return true;
    	}
    	if ((newkeys & Ctrl) && !(oldkeys & Ctrl) && IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    	{
    		new vid = GetPlayerVehicleID(playerid);
    		if(GetVehicleModel(vid) == 510 || GetVehicleModel(vid) == 481 || vid == 186 || vid ==  187 || vid ==  188 || vid ==  189) return false;
    		if (GetVehicleSpeed(vid) == 0) return false;
    		new Float:x, Float:y, Float:z;
    		GetVehicleVelocity(vid, x, y, z);
    		Control[playerid] = true;
    		GetVehicleZAngle(vid, PlayerHeadingAngle[playerid]);
    		DistanceFlat(0, 0, x, y, CruiseSpeed[playerid]);
    		SetTimerEx("CruiseControl", 500, false, "d", playerid);
    		SendClientMessage(playerid, 0x2641FEAA, "* Круиз контроль включен");
    
                             }
  • В конец мода добавим функции системы:
    PHP:
    public CruiseControl(playerid)
    {
    	new vid = GetPlayerVehicleID(playerid);
    	new Float:x, Float:y, Float:z;
    	GetVehicleVelocity(vid, x, y, z);
    
    	new keysp, ud, lr;
    	GetPlayerKeys(playerid, keysp, ud, lr);
    
    	new Float:angle, Float:heading, Float:speed;
    	GetVehicleZAngle(vid, angle);
    	GetVehicleHeadingAngle(vid, heading);
    	DistanceFlat(0, 0, x, y, speed);
    	
    	if (CruiseSpeed[playerid] == 0.00 || GetPlayerState(playerid) != PLAYER_STATE_DRIVER || (speed < 0.7 * CruiseSpeed[playerid]) || z > 1 ||
    			(floatabs(angle - heading) > 50 && floatabs(angle - heading) < 310))
    	{                                  
    		CruiseSpeed[playerid] = 0.00;
    		Control[playerid] = false;
    		SendClientMessage(playerid, 0x2641FEAA, "* Круиз контроль выключен"); 
    		return false;
    	}
    	GetVehicleZAngle(vid, PlayerHeadingAngle[playerid]);
    	GetXYVelocity(vid, x, y, CruiseSpeed[playerid]);
    	SetVehicleVelocity(vid, x, y, z);
    	return SetTimerEx("CruiseControl", 500, false, "d", playerid);
    }
    
    GetXYVelocity(vehicleid, &Float:x, &Float:y, Float:speed)
    {
    	new Float:a;
    	x = 0.0;
    	y = 0.0;
    	GetVehicleZAngle(vehicleid, a);
    	x += (speed * floatsin(-a, degrees));
    	y += (speed * floatcos(-a, degrees));
    }
    
    GetAngleToXY(Float:X, Float:Y, Float:CurrentX, Float:CurrentY, &Float:Angle)
    {
    	Angle = atan2(Y-CurrentY, X-CurrentX);
    	Angle = floatsub(Angle, 90.0);
    	if(Angle < 0.0) Angle = floatadd(Angle, 360.0);
    }
    
    GetVehicleHeadingAngle(vehicleid, &Float:a)
    {
    	new Float:x, Float:y, Float:z;
    	GetVehicleVelocity(vehicleid, x, y, z);
    	GetAngleToXY(x, y, 0, 0, a);
    }
    GetVehicleSpeed(vehicleid)
    {
    	new Float:Vx, Float:Vy, Float:Vz;
    	GetVehicleVelocity(vehicleid, Vx, Vy, Vz);
    	new Float:rtn;
    	rtn = floatsqroot(floatpower(Vx*100,2) + floatpower(Vy*100,2));
    	rtn = floatsqroot(floatpower(rtn,2) + floatpower(Vz*100,2));
    	return floatround(rtn);
    }
    DistanceFlat(Float:ax, Float:ay, Float:bx,Float:by, &Float:distance)
    {
    	distance = floatsqroot(floatpower(bx-ax,2)+floatpower(by-ay,2));
    	return floatround(distance);
    }
Вот и всё. Cruise Control готов, садимся в автомобиль, набираем нужную нам скорость и жмем левый CTRL.
Радуемся Ставим "+".
Для остановки жмём также CTRL или просто тормозим.

P.S Автора не знаю.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу