[problem] Scout zabicie hs-em
stasekstaskowy
08.06.2010
Witam!
Chcialbym aby strzal ze scouta w glowe odbieral cale zycie przeciwnikowi. Mam cos takiego, ale nie dziala i sie nie dziwie , bo dopiero po trafieniu moze sprawdzic. Jesli ktos moglby mi pomoc będę wdzieczny. O to kod:
Chcialbym aby strzal ze scouta w glowe odbieral cale zycie przeciwnikowi. Mam cos takiego, ale nie dziala i sie nie dziwie , bo dopiero po trafieniu moze sprawdzic. Jesli ktos moglby mi pomoc będę wdzieczny. O to kod:
public client_damage(attacker,victim,damage,weapon,hitplace,ta)
{
if(!attacker || !victim )
return;
static nick[32];
get_user_name(attacker,nick,31);
if(hitplace == HIT_HEAD)
{
if(weapon == CSW_SCOUT)
{
new health = get_user_health(victim);
new cash = cs_get_user_money(attacker);
damage=(health);
cs_set_user_money(attacker, cash + 550)
}
}
}
G[o]Q
09.06.2010
uzywasz eventu ktory nie pozwala modyfikowac danych musisz uzyc ham_sandwich masz w tutorialach poradnik R3X'a o zmianie dmg wiec sobie poczytaj
grankee
11.06.2010
Będziesz się borykał z problemem jak wykryć, że to strzał w głowę, w Ham_TakeDamage niestety nie da się przechwycić gdzie padł strzał. Da się to zrobić za pomocą fakemety i get_traceline czy jakoś tak.
Użytkownik grankee edytował ten post 11.06.2010 10:44
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
new hitbox[33]
new bron[33]
new team[33]
public plugin_init() {
register_plugin("ScoutHeadKill","0.1","grankee")
RegisterHam(Ham_TakeDamage, "player", "hook_TakeDamage")
RegisterHam(Ham_TraceAttack,"player","func_TraceAttack")
RegisterHam(Ham_Spawn,"player","spawned")
register_event("CurWeapon","CurWeapon","be", "1=1")
}
public CurWeapon(id)
{
new gun=read_data(2)
if(gun==3)// scout ma numer 3
bron[id]=1
else
bron[id]=0
return PLUGIN_CONTINUE
}
public spawned(id)
{
hitbox[id]=0
team[id]=get_user_team(id)
return HAM_IGNORED
}
public func_TraceAttack(id,idattacker,Float:damage,Float:direction[3],traceresult,damagebits)
{
hitbox[id] = get_tr2(traceresult,TR_iHitgroup)
return HAM_IGNORED
}
public hook_TakeDamage(Victim, weapid, Attacker, Float:damage, damagebits)
{
if(Attacker<1||Attacker>32)
{
return HAM_IGNORED
}
if(team[Attacker]==team[Victim]) // line1 - |skomentowanie line1 i line2 spowoduje, że będzie to działało też na swoich
return HAM_IGNORED // line2 - |działanie nie uwzględnia friendlyfire więc należy wziąć to pod uwagę
if(bron[Attacker]==1&&hitbox[Victim]==HIT_HEAD)
{
set_pev(Victim,pev_health,1.0)//ustawia 1 hp graczowi tak, aby po zadaniu jakichkolwiek obrażeń zginął
//SetHamParamFloat(4,101.0)//tutaj drugi paramert jest nową wartością obrażeń, można go zmienić, można też wpisać np. damage*2.0 co podwoi obrażenia
return HAM_HANDLED
}
return HAM_IGNORED
}
Użytkownik grankee edytował ten post 11.06.2010 10:44
grankee
11.06.2010
Też kiedyś z tym kombinowałem, nawet ktoś mi to na alliedzie napisał, ale szwankowało, dlatego wybrałem tą metodę. Ten kod działał u mnie długi czas.
grankee
11.06.2010
GoQ mój Ty uczniu Nie zastanowiło Cię czemu ustawiłem 1hp zamiast np. podwoić lub potroić obrażenia? W obu przypadkach strzał w głowę zabije, ale w pierwszym przypadku ustawienia 1hp nie będę przynajmniej przekłamywał statystyk, które zliczają zadany damage.
Użytkownik grankee edytował ten post 11.06.2010 11:26
Użytkownik grankee edytował ten post 11.06.2010 11:26
G[o]Q
11.06.2010
no tak ale z drugiej strony po co dodatkowo uzywac fakemeta skoro mozna 1hp ustawic za pomoca Ham'a + pobranie hitboxa przy pomocy get_user_attacker
11 czerwiec 2010 - 12:41:
My master
11 czerwiec 2010 - 12:41:
My master
grankee
11.06.2010
My student
Nie ogarniasz
Tak więc fakemeta i tak potrzebna.
Użytkownik grankee edytował ten post 11.06.2010 11:52
Nie ogarniasz
hitbox[id] = get_tr2(traceresult,TR_iHitgroup)
Tak więc fakemeta i tak potrzebna.
Użytkownik grankee edytował ten post 11.06.2010 11:52
grankee
11.06.2010
Ciupciu, get_user_attacker nabiera wartości jak ktoś kogoś zrani, a przechwycenie damage przez hamsandwich jest pre, czyli przed tym jak obrażenia zostaną zadane, może dlatego to nie działało jak tak próbowałem kiedyś.