Вывод значений в текст
#1

Я беру жизни playerid, *умножаю на 120 и через %d вывожу на экран но показывает чтото такое 142531525 если вывожу через %f 120000.00000 что впринципе и нужно но без .0000. Так вот, как мне юыть как вывести так, что показывало 12000
Reply
#2

Сделай %d, но само умноженное значение возьми в floatround()
Например:
new Float:health = 100.0;
new str[50];
format(str, sizeof(str), "Health: %d", floatround(health*120));
print(str);

В лог напишет - Health: 12000
Reply
#3

Вики читать стало не модно?
https://sampwiki.blast.hk/wiki/GetPlayerHealth
Какой тип у переменной health? Правильно float. И вопрос, какого .. выводим через %d?

PHP код:
new Float:health;
GetPlayerHealth(playerid,health);
new 
health2 floatround(health 120.0);
printf("%d",health2); 
GameMan, не напрягайте человеку мозг лишними функциями, ex. floatmul
Reply
#4

Спасибо.
Reply
#5

а еще? ниже скрипт CNPC который указывает ботам кого и когда атаковать, когда на серве один игрок боты отрабатывают исправно, но когда больше они либо вообще не агряться либо агряться только на 1
pawn Код:
GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
    for_npcs(i)
    {
    if(IsPlayersNear(playerid,i,30))
    {
    NPC_RunTo(i,(random(5) - random(5) + pos[0]),(random(5) - random(5) + pos[1]),pos[2],0);
    NPC_ShotAt(i,pos[0],pos[1],pos[2]);
    //NPC_AimAt(i,pos[0],pos[1],pos[2]);
    //NPC_LookAt(i,pos[0],pos[1],pos[2]);
    }else{
    OnNPCMovingComplete(i);
    }
    }
    /*}*/
}

stock IsPlayersNear(playerid,targetid,Float:range)
{
    new Float:pos[3];
    GetPlayerPos(targetid,pos[0],pos[1],pos[2]);
    if(IsPlayerInRangeOfPoint(playerid,range,pos[0],pos[1],pos[2]))return true;
    return false;
}
Reply
#6

else OnNPCMovingComplete(i); я так понимаю останавливает бота.
либо вы запоминайте атакует ли бот кого либо и соответственно не включайте его уже в проверку
или пускай бот сам выбирает кого он атакует. У вас же какой-то бардак. Игрок выбирает бота и если он должен атаковать вы не исключаете его из проверки для следующего игрока.
Reply
#7

Quote:
Originally Posted by -Stranger-
Посмотреть сообщение
Вики читать стало не модно?
https://sampwiki.blast.hk/wiki/GetPlayerHealth
Какой тип у переменной health? Правильно float. И вопрос, какого .. выводим через %d?

PHP код:
new Float:health;
GetPlayerHealth(playerid,health);
new 
health2 floatround(health 120.0);
printf("%d",health2); 
GameMan, не напрягайте человеку мозг лишними функциями, ex. floatmul
*rofl*
Никто про %.0f не знает что ле? xD
Reply
#8

Quote:
Originally Posted by SDraw
Посмотреть сообщение
*rofl*
Никто про %.0f не знает что ле? xD
Эмм, неа
Я знаю про %0.1f %0.2f, а про %0.0f не знал
Reply
#9

Quote:
Originally Posted by GameMan
Посмотреть сообщение
Эмм, неа
Я знаю про %0.1f %0.2f, а про %0.0f не знал
Значит знайте, а то не надо костыли серверу ставить
Код:
new Float:health,str[12];
GetPlayerHealth(playerid,health);
format(str,12,"%.0f",floatmul(health,120.0));
TextDrawSetString(Text:id,str); // или же PlayerTextDrawSetString(playerid,PlayerText:id,str); //для примера :)
Reply
#10

SDraw, %.0f и есть костыль, если нужно показать Int...
Reply
#11

Quote:
Originally Posted by -Stranger-
Посмотреть сообщение
SDraw, %.0f и есть костыль, если нужно показать Int...
Не смешите...
Топикстартеру нужно только целая часть числа, значит, нужно откинуть дробную часть, что и есть %.0f...
Quote:
Originally Posted by lost13
Посмотреть сообщение
если вывожу через %f 120000.00000 что впринципе и нужно но без .0000
Reply
#12

А что такое целая часть числа без дробной части? Случаем это не int?
С вашей логикой, число можно конвертнуть в строчку и обрезать личнее...
Reply
#13

Quote:
Originally Posted by -Stranger-
Посмотреть сообщение
А что такое целая часть числа без дробной части? Случаем это не int?
С вашей логикой, число можно конвертнуть в строчку и обрезать личнее...
Ну, ладно, пусть будет по Вашему с помощью floatround...Но ведь оно же при обычном округлении (floatround_round) из, к примеру, 12.8457 даст 13, а это уже не то. Придется использовать floatround_floor, что уже означает ошибку в примерах (не мои примеры) выше
Reply
#14

SDraw, тут я с Вами полностью согласен.
TS нужно выбрать более оптимальный метод округление для конкретного случая: https://sampwiki.blast.hk/wiki/Floatround_method
Reply
#15

Начиная с каких-то последних версий сампа по сети жизнь и бронька передается целым беззнаковым байтом, так что проблем с округлением быть особо не должно.
Reply
#16

Quote:
Originally Posted by dimonml
Посмотреть сообщение
Начиная с каких-то последних версий сампа по сети жизнь и бронька передается целым бесзнаковым байтом, так что проблем с округлением быть особо не должно.
Да и ещё в диапазоне от 0 до 255 включая.
Reply
#17

Quote:
Originally Posted by White_116
Посмотреть сообщение
else OnNPCMovingComplete(i); я так понимаю останавливает бота.
либо вы запоминайте атакует ли бот кого либо и соответственно не включайте его уже в проверку
или пускай бот сам выбирает кого он атакует. У вас же какой-то бардак. Игрок выбирает бота и если он должен атаковать вы не исключаете его из проверки для следующего игрока.
Ниче не понял, но спасибо, попробую разобраться.
Reply
#18

Quote:
Originally Posted by lost13
Посмотреть сообщение
Ниче не понял, но спасибо, попробую разобраться.
Так и не разобрался, они все равно агряться только на ид 0
Reply
#19

Quote:
Originally Posted by lost13
Посмотреть сообщение
Так и не разобрался, они все равно агряться только на ид 0
http://forum.sa-mp.com/showpost.php?...48&postcount=5
Чему равен playerid? Цикл на всех игроков не забыли?
Reply
#20

Quote:
Originally Posted by AirKite
Посмотреть сообщение
http://forum.sa-mp.com/showpost.php?...48&postcount=5
Чему равен playerid? Цикл на всех игроков не забыли?
В паблике указан playerid т.е. public zombie(playerid,npcid)
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)