Skinni
Компетентный
Здравствуйте пользователи Pawno-Info как то на просторах форума видел, что не которые искали подобную систему, а кто-то даже хотел её купить. Мне удалось её найти.
Суть системы думаю понятна из названия. Набираем нужную нам скорость и фиксируем её с помощью системы круиз контроля, то есть авто двигается с постоянной скоростью.
Не люблю болтать не по делу, поэтому начнём:
Радуемся Ставим "+".
Для остановки жмём также CTRL или просто тормозим.
P.S Автора не знаю.
Суть системы думаю понятна из названия. Набираем нужную нам скорость и фиксируем её с помощью системы круиз контроля, то есть авто двигается с постоянной скоростью.
Не люблю болтать не по делу, поэтому начнём:
- И так ко всем глобальным переменным добавляем:
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); }
Радуемся Ставим "+".
Для остановки жмём также CTRL или просто тормозим.
P.S Автора не знаю.
Последнее редактирование:
