Бензин -
Aizov - 08.06.2014
PHP код:
public FuelTimer()
{
for(new i = 0;i< MAX_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 400: FuelC = 0.66,printf("%f",FuelC);//40 Литров
case 522: FuelC = 1.2,printf("%f",FuelC);
}
return FuelC;
}
По сути не работает. Не знаю почему. Не вызывается даже Float:GetFuelCost.
Re: Бензин -
Aizov - 08.06.2014
Не работает даже без функции (Заменял на -1)
Re: Бензин -
Stepashka - 08.06.2014
Для начала функциям не нужен
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;
}
Начнем с простого, дебаг:
- определяем вызывается ли FuelTimer
- если да, определяем выполняются ли условия
Я вижу одну грубую ошибку, твой цикл обрывается на первой же машине у которой выполняется условие
tick[i] < 10, и остальные машины просто не проверяются.
Re: Бензин -
DartfoL - 08.06.2014
Quote:
Для начала функциям не нужен forward, но функция должна быть объявлена до момента первого вызова.
|
чтобы она не была должна объявлена до первого вызова юзается forward
я не люблю, когда у меня где-то в начале или в середине мода торчит какая-то функция лишь потому, что её нужно объявить выше вызова. У меня сначала все глобальные переменные, потом колбеки, потом всё остальное
Re: Бензин -
Aizov - 08.06.2014
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; }
Начнем с простого, дебаг: - определяем вызывается ли FuelTimer
- если да, определяем выполняются ли условия
Я вижу одну грубую ошибку, твой цикл обрывается на первой же машине у которой выполняется условие tick[i] < 10, и остальные машины просто не проверяются.
|
Как лучше сделать это?
Re: Бензин -
Stepashka - 08.06.2014
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;//вот тут не уверен, логики вашей не знаю, если сбрасывается только когда движок заведен то верно, если в любом случае то нужно продублировать ещё и для отключенного двигателя
}
}
}
Re: Бензин -
White_116 - 08.06.2014
Логика вообще не ясна, зачем тики считать?
PHP код:
new Float:FuelCost[212]={1.0, ...};//массив с ценами для транспорта.
public FuelTimer()
{
for(new i = 0; i< MAX_VEHICLES; i++)
{
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;
}
Re: Бензин -
Aizov - 08.06.2014
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;//вот тут не уверен, логики вашей не знаю, если сбрасывается только когда движок заведен то верно, если в любом случае то нужно продублировать ещё и для отключенного двигателя } } }
|
Это как часики тикают. Его не нужно трогать)
Re: Бензин -
Aizov - 08.06.2014
Quote:
Originally Posted by White_116
Логика вообще не ясна, зачем тики считать?
PHP код:
new Float:FuelCost[212]={1.0, ...};//массив с ценами для транспорта.
public FuelTimer()
{
for(new i = 0; i< MAX_VEHICLES; i++)
{
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;
}
|
Мне так проще. Заодно учусь функции писать