Заводка двигателя и бензин

Description: Уроки по скриптингу
Moderator: SJplayer

Дим M
Topic author, Администратор
Администратор
Avatar
Дим M
Topic author, Администратор
Администратор
Posts: 1605
Joined: 5 Apr 2013
With us: 10 years 5 months

#1by Дим » 6 May 2013, 11:03

Заводка двигателя и бензин
Автор: Dieggo_Klemente

Чтобы велосипеды не имели у нас двигателей создаём функцию:

Code: Select all

forward IsAVelik(carid);//Форвард
public IsAVelik(carid)//Функция
{
    new 
model GetVehicleModel(carid);
    if(
model==509||model==481||model==510)//Если это велик
    
{
        return 
1;//тогда ретурн
    
}
    return 
0;
}   


Создаём цикл и каждой машине ставим параметры engine - false. В public OnGameModeInit вставляем:

Code: Select all

 for(new car=0car<MAX_VEHICLEScar++)
{
if(!
IsAVelik(car))
{
new 
engine,lights,alarm,doors,bonnet,boot,objective;
GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
SetVehicleParamsEx(car,false,lights,alarm,doors,bonnet,boot,objective);
}
}   


Теперь компилируем. Если ошибок нет то продолжаем...Если есть то проверьте всё.
Теперь переходим к запуску двигателя. В public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) вставляем:

Code: Select all

 new vid GetPlayerVehicleID(playerid);
new 
engine,lights,alarm,doors,bonnet,boot,objective;
if (
newkeys == 512 && IsPlayerInVehicle(playerid,vid) && !IsAVelik(vid))
{
GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
    if(!
engine){SetVehicleParamsEx(vid,true,lights,alarm,doors,bonnet,boot,objective); }
    else if(
engine){SetVehicleParamsEx(vid,false,lights,alarm,doors,bonnet,boot,objective);}
}   


Всё готово теперь двигатель будет запускаться по нажатию 2 и так же глохнуть по нажатию этой клавиши.

Так переходим к бензину. В самом начале создаем переменную.

Code: Select all

 new fuel[500];//500 - сколько у вас авто в моде, не обязательно ставить точное кол-во можно больше но не меньше у меня 2000   


В этой переменной у нас будет храниться кол-во бензина.
Теперь надо сделать чтоб бензин у нас отнимался. В public OnGameModeInit() вставляем:

Code: Select all

 SetTimer("FuelCheck"100001);// FuelCheck - функция которая будет срабатывать. 10000 - кол-во милисекунд   


Идем дальше. Теперь сама функция. В конец мода вставляем:

Code: Select all

 forward FuelCheck(playerid);
public 
FuelCheck(playerid)
{
for(new 
car=0car<MAX_VEHICLEScar++)//Каждые 10сек будет срабатывать этот цикл
{
if(!
IsAVelik(car))//Проверка на велик
{
new 
engine,lights,alarm,doors,bonnet,boot,objective;
GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
if(
engine)//если двигатель у проверяемой машины работает
{
fuel[car]-=1;//отнимаем 1 литр
if(fuel[car] <= 0)//Если бензина нет
        
{
        
SetVehicleParamsEx(car,false,lights,alarm,doors,bonnet,boot,objective);//вырубаем двигатель
        
}
}
}
}
}   


И теперь сделаем так что если бензина нет то он не может завести машину.
В public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) после этого:

Code: Select all

if (newkeys == 512 && IsPlayerInVehicle(playerid,vid) && !IsAVelik(vid))
    {   


Вставляем это:

Code: Select all

if(fuel[vid] <= 0) return SendClientMessage(playerid0xbb0000ff"Нет бензина!");   


Чтобы установить кол во бензина в машинах в public OnGameModeInit, в цикл который мы делали ранее добавляем это:

Code: Select all

//Вставляем после проверки на велик
fuel[car] = 300;//Где 300 это кол во бензина   
i love you mxIni Mysql

Image


Ivan
Avatar
Ivan

#2by Ivan » 8 Aug 2021, 16:26

Что делать если ошибка error 021: symbol already defined: "OnPlayerKeyStateChange" ?


Pinger
Мл. сержант
Мл. сержант
Avatar
Pinger
Мл. сержант
Мл. сержант
Posts: 34
Joined: 6 Feb 2014
With us: 9 years 7 months

#3by Pinger » 8 Aug 2021, 19:13

Если по простому - то значит есть уже где то обозначение паблика OnPlayerKeyStateChange



Return to “Уроки”

Who is online (over the past 5 minutes)

Users browsing this forum: 1 guest