Дмитрий |
Дата: Четверг, 05.04.2012, 20:45 | Сообщение # 1 | Сообщить о нерабочей теме
|
Регистрация: | 03.12.2011
|
Страна: | Российская Федерация |
Репутация: |
14
|
Сообщений: | 1421 |
Награды: |
4
+
|
Статус: |
|
| Здравствуйте!Суть системы думаю понятна из названия. Набираем нужную нам скорость и фиксируем её с помощью системы круиз контроля, то есть авто двигается с постоянной скоростью.
И так ко всем глобальным переменным добавляем:
Code [size=14]new Ctrl = KEY_ACTION; new Float:CruiseSpeed[MAX_PLAYERS]; new Float:PlayerHeadingAngle[MAX_PLAYERS]; new bool:Control[MAX_PLAYERS]; [/size]
Далее ко всем forward's:
Code [size=14]forward CruiseControl(playerid); [/size]
В public OnPlayerConnect(playerid):
Code Control[playerid] = false;
Добавим команду в public OnPlayerCommandText(playerid, cmdtext[]):
Code [size=14]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; } [/size]
Добавим активацию системы по кнопке LCTRL в public OnPlayerKeyStateChange(playerid, newkeys, oldkeys):
Code [size=13]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, "* Круиз контроль включен");
} [/size]
В конец мода добавим функции системы:
Code [size=13]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); } [/size]
Вот и всё. Cruise Control готов, садимся в автомобиль, набираем нужную нам скорость и жмем левый CTRL. Для остановки жмём также CTRL или просто тормозим.
From Russia With Love!
|
|
|
|