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? ![]()


Dodatki SourceMod



Temat jest zamknięty








