←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Po zadaniu obrażeń nie tracimy punktów kam...

  • +
  • -
Andrzejek - zdjęcie Andrzejek 13.12.2013

Witam, mam takie pytanko powiedzcie mi czemu nie tracimy punktów kamizelki po zadaniu obrażeń? Poniżej załączam przykładowy kod:

 

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    RegisterHam(Ham_TakeDamage, "player", "player_damage");
    RegisterHam(Ham_TraceAttack, "player", "player_attack");
}
public player_damage(id, ent, attacker, Float:damage, damagebits)
    return ObrazeniaGracza(id, attacker, damage, damagebits, true);

public player_attack(id, attacker, Float:damage, Float:direction[3], tracehandle, damagebits)
    return ObrazeniaGracza(id, attacker);    

ObrazeniaGracza(this, idattacker, Float:damage=0.0, damagebits=0, bool:obrazenia=false)
{
    if(!is_user_connected(this) || !is_user_connected(idattacker) || this == idattacker)
        return HAM_IGNORED
                
    if(obrazenia) {    
        
        if(get_user_weapon(attacker) == CSW_KNIFE && damagebits & DMG_BULLET)
                SetHamParamFloat(4, damage*0.5);
    }
    return HAM_IGNORED
}

 

Co miał bym dodać żeby kamizelka redukowała obrażenia

Odpowiedz

  • +
  • -
FORMOZA - zdjęcie FORMOZA 13.12.2013

Ustaw na PreThink moze jakis :D

cs_set_user_armor(index, 100, CS_ARMOR_VESTHELM)

 i tyle ;) 

Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 13.12.2013

W odrodzeniu gracza mam ustawione ^^ Chyba że ci o coś innego chodzi, jak byś mógł wytłumaczyć :)

Odpowiedz

  • +
  • -
FORMOZA - zdjęcie FORMOZA 13.12.2013

Sorry, źle zrozumiałem myślalałem ze chcesz na stałe kamizelke ;P

i mi sie wydaje ze cos to z SetHamParamFloat 

a spróbuj wykonać z 
ExecuteHam(Ham_TakeDamage, pid, ent, attacker, float(hp), 1);
 

Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 13.12.2013

Dokładnie, popatrz do kodu i podeślij próbkę :)

Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 14.12.2013

Wywołanie Ham_TakeDamage w evencie Ham_TakeDamage? Ktoś tu się prosi o problemy. Tak się nie robi, chyba że chcesz zadać zupełnie inne obrażenia, np dodać tzw mirror damage. A i tak trzeba odpowiednie warunki ustawić, żeby wykonywało się to tylko w odpowiednich okolicznościach (żeby mirror damage nie wywołał następnego mirror damage).

Taka zasada dotyczy wszystkich eventów.
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 14.12.2013

czyli np.

 

set_user_armor(ofiara, get_user_armor(ofiara)-damage)
    if(get_user_armor(ofiara) > 0) damage = (damage)/2;
    
    if(obrazenia) {
        if(get_user_weapon(attacker) == CSW_KNIFE && damagebits & DMG_BULLET)
            SetHamParamFloat(4, damage*0.5);
    }

 

Bo coś innego na razie mi nie wchodzi do głowy :(

Odpowiedz