Начнем с того, что все айди в pawno хранятся в формате integer, расставлены по порядку. То есть когда вы создаете объект, машину, пикап и так далее, ему выдается свой порядковый айди. Раньше я думал что перед машиной к которой прикрепляешь какое то действие переменную, в ней сохраняется айди в каком то левом формате. То есть без переменных никак. Я ошибался.
Для чего я все это сказал? Это поможет нам сделать маленький код требования бензина для авто, который будет распространятся на все авто и будет иметь маленький размер именно благодаря этому.
В
Code
public OnGameModeInt
Code
SetTimer("FuelCheck",10000,1);
Мы создали таймер, этот таймер будет вызывать public FuelCheck раз в 10 000 миллисекунд (10 сек), повторяя этот цикл до бесконечности.
Такс, у нас есть таймер для паблика, но у нас нет public, давайте создадим его В любое свободное место вне public
Code
new Fuel[2000]; //Переменная котороя отвечает за бензин в машинах forward FuelCheck(); //Функция создания public public FuelCheck() //Действия public { for(new i; i<GetMaxPlayers();) //запускаем цикл, он будет повторятся пока i не будет ровна //Максимальному количеству игроков установленному в Server.cfg { if(IsPlayerInAnyVehicle(i)) //Если игрок с айди = i, сидит в любой машине { Fuel[GetPlayerVehicleID(i)] -= 1; //Отнимаем 1 литр бензина у машины игрока if(Fuel[GetPlayerVehicleID(i)] > 1 ) //Если бензина в машине игрока меньше 1 литра { RemovePlayerFromVehicle(i); //Выставляем игрока из машины SendClientMessage(i,0xffd400aa,"В этой машине нет бензина"); //отправляем игроку сообщение } ++i; } }
return 1; }
И так, теперь раз в 10 секунд от у каждой машины отнимается по 1 литру бензина. Если в это время игрок сидит в машине без бензина, его выкидывает из авто. Но что если игрок сел в машину без бензина? Давайте сделаем так, если игрок сел в машину без бензина, его из нее выкидывало. Я думаю вы подумали о public OnPlayerEnterVehicle? он срабатывает тогда когда игрок нажимает F у машины. А когда игрок садится в машину, его нельзя выбросить из нее, это происходит потому что игрок еще не в машине, но он садится в нее. Нам нужен public OnPlayerStateChange. В него вставляем
Code
if(newstate == 2) //Если игрок водитель авто, зачем нам выкидывать пассажиров? { if(Fuel[GetPlayerVehicleID(playerid)] < 1) //Если в тачке нет бензина { RemovePlayerFromVehicle(playerid); //Выкидываем игрока SendClientMessage(playerid,0xffd400aa,"В этой машине нет бензина"); //и отправляем ему сообщение } }
Ну вот и все. Как все? А где заправка? Где выдача арендованного бензина? У вас в головах. Я показал вам принцип, объяснил как это сделать. Я могу вам только показать путь, а вы уже сами идете по нему. Такова моя логика. Как я могу вас научить, если вы будите просто копировать мой код? Скажу так, если вы будите додумывать сами, решать проблемы сами, вы научитесь. А иначе просто пропустите мимо глаз.