No nie dokońca, bytem atakującym w tym przypadku jest jakiś randomowy ent z przedziału [1-30], bo get_user_weapon zwraca nam id broni, a nie id entity:
oczywiście, że kod, który zacytowałem jest niepoprawny.
ale jak chcesz aby silnik csa znalazł poprawnie broń, którą trzyma gracz to należy podać id gracza w miejsce bytu atakującego (to napisałem wyżej, ale chyba nie zrozumiałeś)
kod z poprawnym wyświetlaniem broni:
public odbicie_obrazen(ofiara, idinflictor, atakujacy, Float:obrazenia, damagebits)
{
if (!is_user_connected(atakujacy)) {
return HAM_IGNORED;
}
if (!random(5)) {
ExecuteHamB(Ham_TakeDamage, atakujacy, ofiara, ofiara, obrazenia, (1<<1));
return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}
kod z "czachą" (w przypadku zabicia poprzez odbicie) nie tworząc nowego enta (w kodzie od tibacka to różne rezultaty by były, nie zawsze czacha):
public odbicie_obrazen(ofiara, idinflictor, atakujacy, Float:obrazenia, damagebits)
{
if (!is_user_connected(atakujacy)) {
return HAM_IGNORED;
}
if (!random(5)) {
ExecuteHamB(Ham_TakeDamage, atakujacy, 0, ofiara, obrazenia, (1<<1));
return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}
a w takim przypadku będzie "czacha" i w konsoli napis, że gracz został zabity przez odbicie:
public odbicie_obrazen(ofiara, idinflictor, atakujacy, Float:obrazenia, damagebits)
{
if (!is_user_connected(atakujacy)) {
return HAM_IGNORED;
}
if (!random(5)) {
new new_inflictor = create_entity("info_target");
entity_set_string(new_inflictor ,EV_SZ_classname, "reflection");
ExecuteHamB(Ham_TakeDamage, atakujacy, new_inflictor, ofiara, obrazenia, (1<<1));
remove_entity(new_inflictor);
return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}