Dezmont_Mailz
Умник
Всем здрасте вот решил дать всем свой ограничитель скорости оч.хороший 1) убран баг со сбрасыванием 2) убран баг когда при большой скорости включаешь огран машина взлетает 3) Скорость ровная не больше не меньше почти не считая что может превышать 1-2 км/ч что не чего не меняет!
для начала мы идём в pInfo и добавим туда
потом в паблик регистрации OnPlayerRegister(playerid, password[]) и в паблик сохранения аккаунта OnPlayerUpdate_RA(playerid)
Вот это
Идём в паблик OnPlayerLogin(playerid,password[]) и добовляем
дальше находим if(newstate == PLAYER_STATE_DRIVER) и добовляем туда
дальше ищем паблик OnVehicleDamageStatusUpdate(vehicleid, playerid) и добовляем туда
в начало
в конец
Дальше идём в 5-ти минутный таймер не секундный не минутный а таймер который обновляется каждые 5 мин. и добовляем
Теперь мы добовляем в конец два паблика
Ну и под конец находим колбек OnPlayerUpdate(playerid) если нету то создаём и добовляем туда
не забываем про переменую new car = GetPlayerVehicleID(playerid); в начало колбека
Для тех кто не знает что вот это такое
То просто добавьте в конец 3 паблика
И ещё в колбек OnPlayerConnect(playerid) добовляем
В колбек OnPlayerCommandText(playerid, cmdtext[])
В колбек OnPlayerKeyStateChange(playerid, newkeys, oldkeys) для того что бы работало на CTRL
На этом всё вырезаем вставляем тестируем и остовляем отзовы об ограничителе!
Скрины для хорошо понимающих!
для начала мы идём в pInfo и добавим туда
PHP:
pCarSkill
Вот это
PHP:
iniSetInt(File,"Ogran",PlayerInfo[playerid][pCarSkill]);
PHP:
iniGetInt(File,"Ogran",PlayerInfo[playerid][pCarSkill]);
PHP:
SetPVarInt(playerid,"Arrester", PlayerInfo[playerid][pCarSkill]);
if(PlayerInfo[playerid][pCarSkill] == 0) SetPVarInt(playerid,"Arrester", 1);
в начало
PHP:
SetPVarInt(playerid,"vrezalsya",GetPVarInt(playerid,"vrezalsya") + 1);
PHP:
if(vehicleid && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
if(GetPVarInt(playerid,"vrezalsya") >= 6)
{
if(!IsAPlane(vehicleid) && !IsABoat(vehicleid) && !IsANoSpeed(vehicleid))
{
if(PlayerInfo[playerid][pCarSkill] < 4)
{
PlayerInfo[playerid][pCarSkill] += 1;
DeletePVar(playerid,"vrezalsya");
SetPVarInt(playerid,"Arrester", PlayerInfo[i][pCarSkill]);
SendClientMessage(playerid,COLOR_RED,"Ваш навык вождения понижен! Соблюдайте /pdd для его повышения!");
}
}
}
}
Дальше идём в 5-ти минутный таймер не секундный не минутный а таймер который обновляется каждые 5 мин. и добовляем
PHP:
if(IsPlayerInAnyVehicle(i) && GetPlayerState(i) == PLAYER_STATE_DRIVER)//
{
if(!IsAPlane(carid) && !IsABoat(carid) && !IsANoSpeed(carid))
{
if(GetPlayerVehicleID(i))
{
if(PlayerInfo[i][pCarSkill] >= 1)
{
SendClientMessage(i, COLOR_GREEN, "Навык вашего вождения повышен вы можете ехать быстрее");
PlayerInfo[i][pCarSkill] -=1;
SetPVarInt(i,"Arrester", PlayerInfo[i][pCarSkill]);
DeletePVar(i,"vrezalsya");
if(PlayerInfo[i][pCarSkill] == 0) SetPVarInt(i,"Arrester", 1),SendClientMessage(i, COLOR_GREEN, "Нажмите CTRL для отключения ограничителя");
}
}
}
}
PHP:
stock GetVehicleSpeed(vehicleid)
{
new Float:ST[3];
GetVehicleVelocity(vehicleid, ST[0], ST[1], ST[2]);
return floatround(floatsqroot(ST[0]*ST[0] + ST[1]*ST[1] + ST[2]*ST[2])*100.3);
}
stock setVehicleSpeed(vehicleid, speed_mph)
{
if (speed_mph < 1) speed_mph = 1;
new Float: v[3], cur_speed_mph;
GetVehicleVelocity(vehicleid, v[0], v[1], v[2]);
cur_speed_mph = floatround(100.3 *floatsqroot(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]),floatround_floor);
if (cur_speed_mph <= 0)
{
new Float: zAngle;
GetVehicleZAngle(vehicleid, zAngle);
new Float:newVelX = floatcos((zAngle -= 270.0), degrees) *speed_mph / 100.3;
SetVehicleVelocity(vehicleid, newVelX, floattan(zAngle,degrees) *newVelX, 0.0);
return;
}
new Float: vMultiplier = float(speed_mph) / float(cur_speed_mph);
SetVehicleVelocity(vehicleid, v[0] *vMultiplier, v[1] *vMultiplier, v[2] *vMultiplier);
}
Ну и под конец находим колбек OnPlayerUpdate(playerid) если нету то создаём и добовляем туда
не забываем про переменую new car = GetPlayerVehicleID(playerid); в начало колбека
PHP:
if(!IsAPlane(car) && !IsABoat(car) && !IsANoSpeed(car))
{
switch(GetPVarInt(playerid,"Arrester"))
{
case 1:
{
if(GetVehicleSpeed(car) > 50) setVehicleSpeed(car, 49);
}
case 2:
{
if(GetVehicleSpeed(car) > 45) setVehicleSpeed(car, 44);
}
case 3:
{
if(GetVehicleSpeed(car) > 40) setVehicleSpeed(car, 39);
}
case 4:
{
if(GetVehicleSpeed(car) > 35) setVehicleSpeed(car, 34);
}
}
}
PHP:
if(!IsAPlane(car) && !IsABoat(car) && !IsANoSpeed(car))
PHP:
stock IsABoat(carid)
{
switch(GetVehicleModel(carid))
{
case 472,473,493,595,484,430,452..454,446: return true;
}
return false;
}
stock IsAPlane(carid)
{
switch(GetVehicleModel(carid))
{
case 592,577,511,512,593,520,553,476,519,460,513,548,417,487,488,497,563,447,469: return true;
}
return false;
}
stock IsANoSpeed(carid)
{
switch(GetVehicleModel(carid))
{
case 441,448,449,450,462,464,465,481,501,509,510,537,538,564,569,570,590,591,594,606,607,608,610,611: return true;
}
return false;
}
И ещё в колбек OnPlayerConnect(playerid) добовляем
PHP:
PlayerInfo[playerid][pCarSkill] = 0;
PHP:
if(strcmp(cmd,"/slimit",true) == 0)
{
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER && !IsAPlane(carid) && !IsABoat(carid) && !IsANoSpeed(carid))
{
if(PlayerInfo[playerid][pCarSkill] >= 1) return SendClientMessage(playerid, COLOR_GREY, "У вас низкий навык вождения соблюдайте /pdd для его повышения");
if(GetPVarInt(playerid,"Arrester") == 0) SetPVarInt(playerid,"Arrester", 1);
else DeletePVar(playerid,"Arrester");
return true;
}
else return SendClientMessage(playerid, COLOR_GREY, "Надо быть за рулём");
}
PHP:
if(newkeys == KEY_ACTION && IsPlayerInAnyVehicle(playerid)) OnPlayerCommandText(playerid, "/slimit");
Скрины для хорошо понимающих!
Последнее редактирование:
