Witam, jak w temacie.
Od dnia wczorajszego zaobserwowałem dziwne zjawisko, a mianowicie stosując funkcję
if(weapon == CSW_HEGRENADE && damage > 20.0) cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits);
Nie otrzymujemy 1/1 na zabicie jak powinno być a raczej różne rodzaje DMG.
Poczynając od 700 (Jeżeli mamy w granicach 1000 hp) do nawet 3700 (Jeżeli mamy w granicach 4500 hp)
Czyli jak widać funkcja niezbyt poprawnie działa, dodatkowo tylko pierwszy strzał jest tak mocny, a pozostałe już są standardowe, zwiększone zgodnie z DMG klasy lub zmniejszone odpowiednio do tego co pisałem na górze czyli wartości pozostałego HP u gracza przeciwnego.
następną sprawą jest, że kompletnie nie działa mi (bynajmniej tak mi się zdaje, lub działa tak jak to powyżej) 1/x z danej broni
if(weapon == CSW_M4A1 && damage > 20.0 && random_num(1,6) == 1) cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits);
Przykładowo to.
A cała funkcja wygląda u mnie tak:
public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits) { if(!is_user_connected(idattacker)) return HAM_IGNORED; if(!ma_klase[idattacker]) return HAM_IGNORED; if(damagebits & DMG_BULLET) { new weapon = get_user_weapon(idattacker); if(weapon == CSW_HEGRENADE && damage > 20.0) cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits); if(weapon == CSW_M4A1 && damage > 20.0 && random_num(1,6) == 1) cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits); if(weapon == CSW_AK47 && damage > 20.0 && random_num(1,6) == 1) cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits); if(weapon == CSW_DEAGLE && damage > 20.0 && random_num(1,6) == 1) cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits); if(get_user_team(this) != get_user_team(idattacker) && get_user_weapon(idattacker) == CSW_M4A1 && damagebits & DMG_BULLET) cod_inflict_damage(idattacker, this, 100.0, 1.0, idinflictor, damagebits); } return HAM_IGNORED; }
Zdziwiło mnie to, lecz kolega dla faktu 1/1 stwierdził, że lepszym rozwiązaniem będzie użycie
SetParamFloat
Więc zastosowałem to tak:
if(weapon == CSW_KNIFE && damage > 20.0) { SetParamFloat(4, get_user_health(this))
I tutaj ku mojemu ogromnemu zdziwieniu ....
publicTakeDamage(this, idinflictor, idattacker, Float:damage, damagebits) { if(!is_user_connected(idattacker)) return HAM_IGNORED; if(!ma_klase[idattacker]) return HAM_IGNORED; if(damagebits & DMG_BULLET) { new weapon = get_user_weapon(idattacker); if(weapon == CSW_KNIFE && damage > 20.0) { SetParamFloat(4, get_user_health(this)) return HAM_HANDLED; } } return HAM_IGNORED }
Tak wygląda funkcja, a mianowicie w oczy rzuca się dla mnie to :
publicTakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
Jak widać bez zastosowanej spacji, wtedy nie wyskakują errory z niezdefiniowanym symbolem (już nie pamiętam jakim), natomiast po oddzieleniu spacją wyskakuje własnie takowy error.
A tak to tutaj tylko warrning wyskakuje, że symbol nie jest (był) nigdzie używany(użyty).
Czy ktoś mi może odpowiedzieć co tutaj mogłoby szlag trafić i nie działać?
Ponieważ to bardzo irytujące
Ogólnie podstawy jak:
#define DMG_BULLET (1<<1) RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
są zawarte w kodzie.
Jakieś pomysły?