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

Описание: Уроки по скриптингу
Модератор: SJplayer

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 6 мая 2013, 11:03

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

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

Код: Выделить всё

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 вставляем:

Код: Выделить всё

 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) вставляем:

Код: Выделить всё

 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 и так же глохнуть по нажатию этой клавиши.

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

Код: Выделить всё

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


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

Код: Выделить всё

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


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

Код: Выделить всё

 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) после этого:

Код: Выделить всё

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


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

Код: Выделить всё

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


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

Код: Выделить всё

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


Ivan
Аватара
Ivan

#2 Ivan » 8 августа 2021, 16:26

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

Pinger
Мл. сержант
Мл. сержант
Аватара
Pinger
Мл. сержант
Мл. сержант
Сообщения: 34
Зарегистрирован: 6 февраля 2014
С нами: 10 лет 1 месяц

#3 Pinger » 8 августа 2021, 19:13

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


Вернуться в «Уроки»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 4 гостя