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.
#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