←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

[problem] Scout zabicie hs-em

Zablokowany

  • +
  • -
stasekstaskowy - zdjęcie 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:
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)
}
}

}
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie 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 xD
Odpowiedz

  • +
  • -
stasekstaskowy - zdjęcie stasekstaskowy 09.06.2010

dzięki tego szukalem ;)
Odpowiedz

  • +
  • -
grankee - zdjęcie 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.


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

  • +
  • -
R3X - zdjęcie R3X 11.06.2010

ee, jest get_user_attacker() xD
Odpowiedz

  • +
  • -
grankee - zdjęcie 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.
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 11.06.2010

set_pev(Victim,pev_health,1.0)

mozna tez

ExecuteHam(Ham_TakeDamage,...

Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 11.06.2010

GoQ mój Ty uczniu :D 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
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie 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 :D
Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 11.06.2010

My student :D
Nie ogarniasz :D

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
Odpowiedz

  • +
  • -
grankee - zdjęcie 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ś.
Odpowiedz
Zablokowany