#define MAX_SPEED 100// Максимально допустимая скорсть (ещё можно создать переменной для изменения в процессе игры)
new Warnings[MAX_PLAYERS];//Глобальная переменная, отвечающая за предупреждения
Если у вас есть повторяющейся таймер на 1 секунду, то следующий код надо вставить туда, если нет то в паблик OnGameModeInit()
Код
SetTimer("UpdatePlayersSpeed",1000,true);//Создадим таймер на 1 секунду, работающий с повторением
Тут я тоже придумал 2 варианта. Содержание паблика: 1 Вариант.
Код
forward UpdatePlayersSpeed(); public UpdatePlayersSpeed() { new Float:X,Float:Y,Float:Z,str[128]; for(new i; i < GetMaxPlayers(); i++) { if(!IsPlayerConnected(i)) continue; if(IsPlayerInAnyVehicle(i) && GetVehicleSpeed(i) > MAX_SPEED) { if(Warnings[i] > 3) { RemovePlayerFromVehicle(i); Warnings[i] = 0; SendClientMessage(i,0xF60000AA,"Вы набрали больше {FFFFFF}трех {F60000}предупреждений! Будеть добры покинуть машину!"); } else { Warnings[i]++; format(str,sizeof(str),"Превышение скорости зафиксировано ({FFFFFF}%.1f km/h{F60000}). Ваша скорость сброшана!",GetVehicleSpeed(i)); SendClientMessage(i,0xF60000AA,str); format(str,sizeof(str),"~r~Warning ~w~%d",Warnings[i]); GameTextForPlayer(i,str,1500,1); GetPlayerPos(i,X,Y,Z); SetVehiclePos(GetPlayerVehicleID(i),X,Y,Z); } } } return 1; }
2 Вариант.
Код
forward UpdatePlayersSpeed(); public UpdatePlayersSpeed() { new Float:X,Float:Y,Float:Z,str[128]; for(new i; i < GetMaxPlayers(); i++) { if(!IsPlayerConnected(i)) continue; if(IsPlayerInAnyVehicle(i) && GetVehicleSpeed(i) > MAX_SPEED) { if(Warnings[i] > 3) { RemovePlayerFromVehicle(i); Warnings[i] = 0; SendClientMessage(i,0xF60000AA,"Вы набрали больше {FFFFFF}трех {F60000}предупреждений! Будеть добры покинуть машину!"); } else { Warnings[i]++; format(str,sizeof(str),"Превышение скорости зафиксировано ({FFFFFF}%.1f km/h{F60000}). Ваша скорость сброшана!",GetVehicleSpeed(i)); SendClientMessage(i,0xF60000AA,str); format(str,sizeof(str),"~r~Warning ~w~%d",Warnings[i]); GameTextForPlayer(i,str,1500,1); GetVehicleVelocity(GetPlayerVehicleID(i),X,Y,Z); SetVehicleVelocity(GetPlayerVehicleID(i),X*0.1,Y*0.1,Z);//Снижаем скорость плавнее чем в 1 варианте. } } } return 1; }
Я придумал довольно простой способ, но он хорошо работает на деле, при превышении скорости. Думаю содержимое паблика всем будет понятно. Все функции очень известны и очень просты в применении. Тут есть нестандартная функция, получения скорости машины.
А смысл выталкивать игрока из машины? Не все игроки могут так хорошо соблюдать скорость. Лучше выталкивание убрать и оставить только автоснижение скорости! Вот и тебе анти превышение!