Бензин
#1

PHP код:
public FuelTimer()
{
    for(new 
0;iMAX_VEHICLES;i++)
    {
        if(
tick[i] < 10)return tick[i]+=1;
        if(
tick[i] >= 10 && cInfo[i][Engine] == 1)cInfo[i][Fuel] -= GetFuelCost(cInfo[i][Model]);
        
tick[i] = 0;
    }
    return 
true;
}
forward Float:GetFuelCost(vehicleid);
Float:GetFuelCost(vehicleid)  
{  
    new 
Float:FuelC;  
    switch(
vehicleid)  
    {  
        case 
400FuelC 0.66,printf("%f",FuelC);//40 Литров  
        
case 522FuelC 1.2,printf("%f",FuelC);  
    }  
    return 
FuelC;  

По сути не работает. Не знаю почему. Не вызывается даже Float:GetFuelCost.
Reply
#2

Не работает даже без функции (Заменял на -1)
Reply
#3

Для начала функциям не нужен forward, но функция должна быть объявлена до момента первого вызова.
Во-вторых, жить надо проще:
pawn Код:
Float:GetFuelCost(vehicleModel) {
    if (vehicleModel== 400) return 0.66;
    else if (vehicleModel== 522) return 1.2;
    else return 0.0;
}
public FuelTimer() {
    for (new i = 0; i< MAX_VEHICLES; i++) {
        if (tick[i] < 10) return tick[i]+=1;
        else if (cInfo[i][Engine] == 1) cInfo[i][Fuel] -= GetFuelCost(cInfo[i][Model]);
        tick[i] = 0;
    }
    return 1;
}
Начнем с простого, дебаг:
  1. определяем вызывается ли FuelTimer
  2. если да, определяем выполняются ли условия
Я вижу одну грубую ошибку, твой цикл обрывается на первой же машине у которой выполняется условие tick[i] < 10, и остальные машины просто не проверяются.
Reply
#4

Quote:

Для начала функциям не нужен forward, но функция должна быть объявлена до момента первого вызова.

чтобы она не была должна объявлена до первого вызова юзается forward
я не люблю, когда у меня где-то в начале или в середине мода торчит какая-то функция лишь потому, что её нужно объявить выше вызова. У меня сначала все глобальные переменные, потом колбеки, потом всё остальное
Reply
#5

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Для начала функциям не нужен forward, но функция должна быть объявлена до момента первого вызова.
Во-вторых, жить надо проще:
pawn Код:
Float:GetFuelCost(vehicleModel) {
    if (vehicleModel== 400) return 0.66;
    else if (vehicleModel== 522) return 1.2;
    else return 0.0;
}
public FuelTimer() {
    for (new i = 0; i< MAX_VEHICLES; i++) {
        if (tick[i] < 10) return tick[i]+=1;
        else if (cInfo[i][Engine] == 1) cInfo[i][Fuel] -= GetFuelCost(cInfo[i][Model]);
        tick[i] = 0;
    }
    return 1;
}
Начнем с простого, дебаг:
  1. определяем вызывается ли FuelTimer
  2. если да, определяем выполняются ли условия
Я вижу одну грубую ошибку, твой цикл обрывается на первой же машине у которой выполняется условие tick[i] < 10, и остальные машины просто не проверяются.
Как лучше сделать это?
Reply
#6

Quote:
Originally Posted by DartfoL
Посмотреть сообщение
чтобы она не была должна объявлена до первого вызова юзается forward
я не люблю, когда у меня где-то в начале или в середине мода торчит какая-то функция лишь потому, что её нужно объявить выше вызова. У меня сначала все глобальные переменные, потом колбеки, потом всё остальное
Инклуды тебе в помощь.
Quote:
Originally Posted by Aizov
Посмотреть сообщение
Как лучше сделать это?
pawn Код:
public FuelTimer() {
    for (new i = 0; i< MAX_VEHICLES; i++) {
        if (tick[i] < 10) tick[i]+=1;
        else if (cInfo[i][Engine] == 1) {
            cInfo[i][Fuel] -= GetFuelCost(cInfo[i][Model]);
            tick[i] = 0;//вот тут не уверен, логики вашей не знаю, если сбрасывается только когда движок заведен то верно, если в любом случае то нужно продублировать ещё и для отключенного двигателя
        }
    }
}
Reply
#7

Логика вообще не ясна, зачем тики считать?
PHP код:
new Float:FuelCost[212]={1.0, ...};//массив с ценами для транспорта.
public FuelTimer()
{
    for(new 
0iMAX_VEHICLESi++)
    {
        if(
tick[i] < 10)
        {
            ++
tick[i];
        }
        else if(
cInfo[i][Engine])
        {
            
cInfo[i][Fuel] -= FuelCost[cInfo[i][Model]];//FuelCost[cInfo[i][Model]-400] если не используется смещение моделей
            
tick[i] = 0;
        }
    }
    return 
true;

Reply
#8

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Инклуды тебе в помощь.

pawn Код:
public FuelTimer() {
    for (new i = 0; i< MAX_VEHICLES; i++) {
        if (tick[i] < 10) tick[i]+=1;
        else if (cInfo[i][Engine] == 1) {
            cInfo[i][Fuel] -= GetFuelCost(cInfo[i][Model]);
            tick[i] = 0;//вот тут не уверен, логики вашей не знаю, если сбрасывается только когда движок заведен то верно, если в любом случае то нужно продублировать ещё и для отключенного двигателя
        }
    }
}
Это как часики тикают. Его не нужно трогать)
Reply
#9

Quote:
Originally Posted by White_116
Посмотреть сообщение
Логика вообще не ясна, зачем тики считать?
PHP код:
new Float:FuelCost[212]={1.0, ...};//массив с ценами для транспорта.
public FuelTimer()
{
    for(new 
0iMAX_VEHICLESi++)
    {
        if(
tick[i] < 10)
        {
            ++
tick[i];
        }
        else if(
cInfo[i][Engine])
        {
            
cInfo[i][Fuel] -= FuelCost[cInfo[i][Model]];//FuelCost[cInfo[i][Model]-400] если не используется смещение моделей
            
tick[i] = 0;
        }
    }
    return 
true;

Мне так проще. Заодно учусь функции писать
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)