←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Hook walnięcia nożem/ blokada innych obrażeń

Zablokowany

  • +
  • -
DarkGL - zdjęcie DarkGL 28.11.2010

Chciałem przechwycić uderzenie nożem w ent a resztę damage zablokować
zrobiłem to tak
public spawn(){
	new Float:origin[3]
	if(SsGetOrigin(origin))
	{
		new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
		if(ent){
			engfunc(EngFunc_SetModel, ent, "models/present1.mdl")
			engfunc(EngFunc_SetOrigin, ent, origin)
			set_pev(ent, pev_classname, "prezent");
			set_pev(ent,pev_takedamage,DAMAGE_YES)
			set_pev(ent,pev_health,999999.0)
			set_pev(ent,pev_max_health,999999.0)
			set_pev(ent,pev_solid,SOLID_BBOX) 
			engfunc(EngFunc_SetSize,ent,Float:{-15.0,-15.0,-2.0},Float:{15.0,15.0,15.0}) 
			set_pev(ent,pev_movetype,MOVETYPE_TOSS)
			set_pev(ent,pev_gravity,1.0)
			RegisterHamFromEntity(Ham_TakeDamage, ent, "fwTakeDamage", 1)
		}
	}
}
model sie spawnuje
public fwTakeDamage(this, idinflictor, idattacker, Float:damage, damagebits){
	if((damagebits&(1<<2)) && is_user_alive(idattacker)){
		punkty[idattacker]++;
		remove_entity(this);
		return HAM_SUPERCEDE;
	}
	else
	{
		return HAM_SUPERCEDE;
	}
	return HAM_SUPERCEDE;
}

i nie wykrywa nawalam tym nożem po encie ale warunek nigdy nie jest spełniony :/
Odpowiedz

  • +
  • -
Ortega - zdjęcie Ortega 28.11.2010

Rejestrujesz jako post, a robisz supercede, które jest wtedy bezsensowne ale czemu nie wykrywa bits to nie wiem ;)
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 28.11.2010

1=pre
0=post
Odpowiedz

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

1=pre
0=post


no chyba nie

ewentualnie sprobuj traceattack
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 28.11.2010

odświeżam panowie :) dla testó wyświetliłem sobie wartość damagebits co się okazuje przy strzale ma ona taką samo wartość jak przy uderzeniu nożem
Odpowiedz

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

hmm a myslales o sprawdzeniu broni gracza w pre* obrazen :?:
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 28.11.2010

if(get_user_weapon(idattacker, _, _)==CSW_KNIFE && is_user_alive(idattacker)){
		punkty[idattacker]++;
		remove_entity(this);
		return HAM_SUPERCEDE;
	}
server leży :D
Odpowiedz

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

wypisz sobie this oraz idattacker i wtedy napisz ze popelniles blad :D
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 28.11.2010

client_print(0,print_chat,"%d | %d | %d",this,idinflictor, idattacker)
pokazuje 101 | 1 | 1 czyli dobrze id enta i dalej id gracza
Odpowiedz

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

hmm a pokaz caly kod albo wyswietl sobie rezultat tego

get_user_weapon(idattacker, _, _)

bo najwyrazniej w tym tkwi blad

a logow zadnych nie masz :?: qconsole?
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 28.11.2010

if(	bitsDamageType == DMG_BULLET | DMG_NEVERGIB
	&&	iInflictor == iAttacker
	&&	IsPlayer(iAttacker)
	&&	get_user_weapon(iAttacker) == CSW_KNIFE
	&&	pev(this, pev_dmg_take) > 0	){
		punkty[iAttacker]++;
		set_pev(this,pev_takedamage,DAMAGE_NO)
		set_pev(this,pev_dmg_take,DAMAGE_NO)
		set_pev(this,pev_solid,SOLID_NOT) 
		set_pev(this, pev_effects, (pev(this, pev_effects) | 128) )
	}
work ;P
Odpowiedz
Zablokowany