Убрать повреждения от своей гранаты

Статус
В этой теме нельзя размещать новые ответы.

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #1
Собственно в названии всё сказано.

Сделал так:
PHP:
public Action:Event_PlayerHurt(Handle:event, String:name[], bool:dontBroadcast)
{
new victim = GetClientOfUserId(GetEventInt(event, "userid"));
new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
if (attacker && attacker == victim)
{
decl String:weapon[64]; 
GetEventString(event, "weapon", weapon, sizeof(weapon)-1);
if(strcmp(weapon, "hegrenade") == 0)
{
new dhealth = GetEventInt(event, "dmg_health");
new darmor = GetEventInt(event, "dmg_armor");
new health = GetEventInt(event, "health");
new armor = GetEventInt(event, "armor");

if (dhealth > 0)
SetEntProp(victim, Prop_Send, "m_iHealth", (health + dhealth), 1);
if (darmor > 0)
SetEntProp(victim, Prop_Send, "m_ArmorValue", (armor + darmor), 1);
return Plugin_Changed;
}
}
return Plugin_Continue;
}

Но этот код имеет недостатки. К примеру, у игрока 30 хп, он кидает гранату и снимает себе -60 хп, в итоге у него становится 60 хп.

Каким еще способом можно кбрать повреждение от своей гранаты?
 
Последнее редактирование:

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
Re: Убрать повреждение от своей гранаты

C-подобный:
new         g_iHealthOffset,
            g_iArmorValueOffset;

public OnPluginStart()
{   
    g_iHealthOffset     = FindSendPropOffs("CCSPlayer", "m_iHealth");
    g_iArmorValueOffset = FindSendPropOffs("CCSPlayer", "m_ArmorValue");
    HookEvent("player_hurt", Ev_PlayerHurt, EventHookMode_Pre);
}

public Action:Ev_PlayerHurt(Handle:hEvent, const String:sEvName[], bool:bDontBroadcast)
{
    new iClient     = GetClientOfUserId(GetEventInt(hEvent, "userid")),
        iAttacker   = GetClientOfUserId(GetEventInt(hEvent, "attacker"));
    
    if ( iClient == iAttacker )
    {
        decl String:sWeapon[32];
        GetEventString(hEvent, "weapon", sWeapon, sizeof(sWeapon) - 1);
        
        if ( StrEqual(sWeapon, "hegrenade") )
        {
            new iDamage = GetEventInt(hEvent, "dmg_health"),
                iArmor  = GetEventInt(hEvent, "dmg_armor"),
                iHealth = GetEntData(iClient, g_iHealthOffset),
                iArmor2 = GetEntData(iClient, g_iArmorValueOffset);
            
            if ( iDamage > 0 )
            {
                SetEntData(iClient, g_iHealthOffset, (iHealth + iDamage));
            }
            if ( iArmor > 0 )
            {
                SetEntData(iClient, g_iArmorValueOffset, (iArmor + iArmor2));
            }
        }
    }
    
    return Plugin_Continue;
}
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #4
semjef, но нагрузка больше будет
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #6
closed.


Reiko1231, Спасибо.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу