-
Подсчёт через floatround
Решил склепать так чтобы заправлялось авто на заправках и можно было контролировать залитые литры в бак, но почему то пишет что не достаточно денег и много цифр выводит, хотя цена в разы меньше если раскомментировать участок кода то будет заправять больше чем надо и денег снимать в раз 5 больше чем подсчитанная цена, вообщем я вошел в тупит, в обычной команде без диалогов подсчёт через такую формулу пашет, а вот в диалог засунул и что то не так, помогите :wacko:
Команда
Открыть/закрыть
PHP код:
if(strcmp(cmdtext, "/fill", true) == 0)
{
if(!IsPlayerConnected(playerid)) return SendClientMessage(playerid,COLOR_GREY,"Не авторизован!");
for(new b = 0; b < sizeof(SBizzInfo); b++)
{
if(PlayerToPoint(10.0, playerid, SBizzInfo[b][sEntranceX], SBizzInfo[b][sEntranceY], SBizzInfo[b][sEntranceZ]))
{
if(SBizzInfo[b][sLocked] == 1) return SendClientMessage(playerid,COLOR_GREY,"Заправка не робит.");
new vehicleid = GetPlayerVehicleID(playerid);
if(Fuell[vehicleid] > 99) return SendClientMessage(playerid,COLOR_GREY,"Ваш бензобак и так полон.");
SPD(playerid,5378,DIALOG_STYLE_INPUT,"Заправить","Сколько литров?","Залить","Нет");
}
}
return 1;
}
Диалог
Открыть/закрыть
PHP код:
case 5378:
{
if(response)
{
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,COLOR_GREY,"Вы не в автомобиле!");
for(new b = 0; b < sizeof(SBizzInfo); b++)
{
new Vob = strval(inputtext);
if(!strlen(inputtext))
return SPD(playerid,5378,DIALOG_STYLE_INPUT,"Заправить","Сколько литров?","Залить","Нет");
if(Vob < 1 || Vob > 100)
{
SendClientMessage(playerid, COLOR_GREY, "Минимально - 1 л, максимально - 100 л!");
SPD(playerid,5378,DIALOG_STYLE_INPUT,"Заправить","Сколько литров?","Залить","Нет")
return 1;
}
new vehicleid = GetPlayerVehicleID(playerid);
new Float:benz = 100.0 - Fuell[vehicleid];
/*if(Vob > floatround(benz))
{
SendClientMessage(playerid, COLOR_GREY, "Вы пытаетесь залить больше чем вместится в ваш бак(Max V = 100 л!)");
SPD(playerid,5378,DIALOG_STYLE_INPUT,"Заправить","Сколько литров?","Залить","Нет")
return 1;
}*/
new cenabenz = SBizzInfo[b][sPrice]*floatround(benz);
if(PlayerInfo[playerid][pCash] < cenabenz)
return SendMes(playerid,COLOR_GREY,"Вам не хватает денюжек, стоимость %d вирт",cenabenz);
PlayerInfo[playerid][pCash] -= cenabenz;
SBizzInfo[b][sTill] += cenabenz;
SBizzInfo[b][sBenz] -= Vob;
Fuell[vehicleid] += Vob;
SendMes(playerid,COLOR_GREY,"Вы залили %d литров бензина за %d вирт.",Vob,cenabenz);
}
}
}
-
Выложите код с нормальной кодировкой.
-
-
Выхлоп логов сюда:
PHP код:
case 5378:
{
if(response)
{
if(!IsPlayerInAnyVehicle(playerid))
return SendClientMessage(playerid,COLOR_GREY,"Вы не в автомобиле!");
for(new b = 0; b < sizeof(SBizzInfo); b++) // Зачем?!
{
printf("DEBUG | Вводимый текст = \"%s\"", inputtext);
new Vob = strval(inputtext);
printf("DEBUG | Vob = %d", Vob);
printf("DEBUG | Размер строки = %d", strlen(inputtext));
if(!strlen(inputtext))
return SPD(playerid,5378,DIALOG_STYLE_INPUT,"Заправить","Сколько литров?","Залить","Нет");
if(Vob < 1 || Vob > 100)
{
print(#DEBUG | 1) Проверка выполняться);
SendClientMessage(playerid, COLOR_GREY, "Минимально - 1 л, максимально - 100 л!");
SPD(playerid,5378,DIALOG_STYLE_INPUT,"Заправить","Сколько литров?","Залить","Нет")
return 1;
}
new vehicleid = GetPlayerVehicleID(playerid);
printf("DEBUG | ID cars = %d", vehicleid);
printf("DEBUG | Fuell[vehicleid] = %d", Fuell[vehicleid]);
new Float:benz = 100.0 - Fuell[vehicleid];
printf("DEBUG | Переменная benz = %1.2f", , benz);
printf("DEBUG | floatround(benz) = %d", floatround(benz))
if(Vob > floatround(benz))
{
print(#DEBUG | 2) Проверка выполняться);
SendClientMessage(playerid, COLOR_GREY, "Вы пытаетесь залить больше чем вместится в ваш бак(Max V = 100 л!)");
SPD(playerid,5378,DIALOG_STYLE_INPUT,"Заправить","Сколько литров?","Залить","Нет")
return 1;
}
new cenabenz = SBizzInfo[b][sPrice]*floatround(benz);
printf("DEBUG | cenabenz = %d", cenabenz);
static const msg[] = "Вам не хватает денюжек, стоимость %d вирт";
new str[sizeof(msg) - 2 + 1];
format(str, sizeof(str), msg, cenabenz);
if(PlayerInfo[playerid][pCash] < cenabenz)
return SendClientMessage(playerid, COLOR_GREY, msg);
PlayerInfo[playerid][pCash] -= cenabenz;
SBizzInfo[b][sTill] += cenabenz;
SBizzInfo[b][sBenz] -= Vob;
Fuell[vehicleid] += Vob;
static const msg1[] = "Вы залили %d литров бензина за %d вирт.";
new str1[sizeof(msg) - 4 + 1];
format(str1, sizeof(str1), msg1, Vob,cenabenz);
SendClientMessage(playerid, COLOR_GREY, str1);
}
}
}
P.S: Выхлоп - в serverlog.txt, надеюсь Вы отсортируете логи от команды. Иначе, копайтесь в своих логах сами.
-
Дома буду посмотрим что логи покажут, а так то если попробовать объявить переменную допустим
PHP код:
new Vob2 = floatround(benz);
Или как правильнее
new Float:Vob2 = floatround(benz);
И засунуть её вместо всех floatround(benz) разница будет или так же всё?
-
Вот пару раз сделал заправку в 2ух авто:
Открыть/закрыть
PHP код:
[00:47:41] DEBUG | Вводимый текст = "1"
[00:47:41] DEBUG | Vob = 1
[00:47:41] DEBUG | Размер строки = 1
[00:47:41] DEBUG | ID cars = 235
[00:47:41] DEBUG | Fuell[vehicleid] = 1111794642
[00:47:41] DEBUG | Переменная benz = 50.84
[00:47:41] DEBUG | floatround(benz) = 51
[00:47:41] DEBUG | cenabenz = 255000
[00:47:41] DEBUG | Вводимый текст = "1"
[00:47:41] DEBUG | Vob = 1
[00:47:41] DEBUG | Размер строки = 1
[00:47:41] DEBUG | ID cars = 235
[00:47:41] DEBUG | Fuell[vehicleid] = 1317310792
[00:47:41] DEBUG | Переменная benz = -1112056704.00
[00:47:41] DEBUG | floatround(benz) = -1112056704
[00:47:41] DEBUG | 2 Проверка выполняться
//////////
[00:48:04] DEBUG | Вводимый текст = "2"
[00:48:04] DEBUG | Vob = 2
[00:48:04] DEBUG | Размер строки = 1
[00:48:04] DEBUG | ID cars = 233
[00:48:04] DEBUG | Fuell[vehicleid] = 1111647838
[00:48:04] DEBUG | Переменная benz = 51.40
[00:48:04] DEBUG | floatround(benz) = 51
[00:48:04] DEBUG | cenabenz = 255000
[00:48:04] DEBUG | Вводимый текст = "2"
[00:48:04] DEBUG | Vob = 2
[00:48:04] DEBUG | Размер строки = 1
[00:48:04] DEBUG | ID cars = 233
[00:48:04] DEBUG | Fuell[vehicleid] = 1317311693
[00:48:04] DEBUG | Переменная benz = -1112172032.00
[00:48:04] DEBUG | floatround(benz) = -1112172032
[00:48:04] DEBUG | 2 Проверка выполняться
- - - Добавлено - - -
* с заправок бензин не снимается при такой заправке..
-
Покажите инициализацию массива - Fuell
-
PHP код:
new Float:Fuell[MAX_VEHICLES]
- - - Добавлено - - -
Вот именно через диалог такая туфта, а если делать через команду чисто без диалога то там всё корректно пашет.