Question

Вообщем, при выдаче брони через команду /setarmour, при получении урона броня кончается, и выдается опять, и вот так до бесконечности, так скажем ГМ
Как пофиксить?

setarmour:

 

CMD:setarmour(playerid, params[])
{
    if(PI[playerid][pAdmin] < 2return SCM(playerid, COLOR_RED, NO_DOSTUP_TEXT);
    if(!ADuty{playerid}) return SCM(playerid, COLOR_GREY, NO_DUTY_TEXT);
    new target, Float:armour;
    if(sscanf(params, "uf", target, armour)) return SCM(playerid, COLOR_RED, !"Используйте: /setarmour [id] [ammount]");
    if(armour > 1000.0return SCM(playerid, COLOR_RED, !"Используйте: /setarmour [id] am < 1000");
    if(armour < 0.0return SCM(playerid, COLOR_RED, !"Используйте: /setarmour [id] am > 0");
    if(target == INVALID_PLAYER_ID) return 0;
    J_SetPlayerArmour(target, armour);
    SendAdminsMessagef(COLOR_GREY, "[A] Администратор %s установил игроку %s[%i] показатель брони на %.0f", PN(playerid), PN(target), target, armour);
    return 1;
}

 

Edited by acatsuci

Share this post


Link to post

3 answers to this question

  • 0

Такое может быть если выдаётся больше кол-во брони, то есть если выдать те же 500 брони, то полоска отображения не будет выходить за рамки, а как бы делить всю броню "по 100", то есть сначала она показывает условные от 400 до 500 ед. брони, если снять игроку до значений 300-400, то показывать будет соответственно от 300 до 400 и так далее. Это "исправить" можно только запретив выдавать более 100 брони.

Share this post


Link to post
  • 0

Нет бро, это происходит при выдаче 100 единиц брони, тоесть ты выдал 100 единиц брони и при снятии этих 100 единиц сразу же появляется новые 100 единиц, тоесть броня так скажем респавнится.

я создавал такую же тему на другом форуме под названием pawn-wiki, но на нем меня забанили за то что я забыл взять текст в рамки CODE
и там человек мне написал то что:

В твоём случае, скорее всего, прикол в этой проверке, находящейся в OnPlayerTakeDamage:
 

if(PI[playerid][pShield] >= 10.0)
            {
                GetPlayerHealth(playerid, Health);
                Health += 10;
                if(Health > 100) Health = 100;
                J_SetPlayerHealth(playerid, Health);
                PI[playerid][pShield] -= 10.0;
            }


То бишь, могу предположить, что внутри функции J_SetPlayerHealth имеется ещё и установка единиц брони игроку.


С его слов могу сделать вывод что дело в функции J_SetPlayerHealth 
Вот тебе эта функция, может найдешь в чем проблема)

J_SetPlayerHealth:

stock J_SetPlayerHealth(playerid, Float:hp, shareping = 0)
{
    if(hp < 1 && PlayerCure(playerid)) return J_SetPlayerArmour(playerid, 0), PlayerSpawn(playerid);
    new Float:health;
    GetPlayerHealth(playerid, health);
    PI[playerid][pHealth] = hp;
    UpdatePlayerDataFloat(playerid, "HP", PI[playerid][pHealth]);
    if(!shareping)
    {
        str_2[0] = EOS, f(str_2, sizeof(str_2),"+%.0f HP", (health-hp));
        SetPlayerChatBubble(playerid, str_2, COLOR_GREEN, 10.05000);
    }
    if(InventStatus{playerid})
    {
        f(str_2,sizeof(str_2),"HP: %.0f", hp),
        PlayerTextDrawSetString(playerid, Invent[playerid][38], str_2);
    }
    return SetPlayerHealth(playerid, hp);
}



Нашел еще какую то функцию связанную с setarmour, возможно она будет полезна в решении этой проблемы, вот она:

J_SetPlayerArmour:

stock J_SetPlayerArmour(playerid, Float:arm)
{
    new Float:armour;
    GetPlayerArmour(playerid, armour);
    if(InventStatus{playerid}) PlayerTextDrawSetStringf(playerid, Invent[playerid][37], "ARM: %.0f", arm);
    return SetPlayerArmour(playerid, PI[playerid][pArmour] = arm);
}

 

Share this post


Link to post
  • 0

@acatsuci,

В 30.07.2023 в 02:16, acatsuci сказал:

при снятии этих 100 единиц

 

Каким образом "снимаете"? Что у вас в OnPlayerTakeDamage? Используется ли эта функция в каких-нибудь регулярно вызываемых функциях (OnPlayerUpdate или таймеры)?

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0