Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Specyficzny handling damage


  • Zamknięty Temat jest zamknięty
19 odpowiedzi w tym temacie

#1 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 06.03.2009 21:47

#include <amxmodx>
#include <fun>
#include <fakemeta>
#include <hamsandwich>
new hitbox[33]

public plugin_init() 
{
	register_plugin("Real damage","1.0","grankee")
	RegisterHam(Ham_TakeDamage, "player", "hook_TakeDamage")
	RegisterHam(Ham_TraceAttack,"player","func_TraceAttack")
	register_forward(FM_Spawn,"spawne")
}
public spawne(id)
{
	hitbox[id]=0
}
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(!is_user_alive(Attacker))
		return HAM_IGNORED
	new Ateam[6],Vteam[6]
	get_user_team(Attacker,Ateam,5)
	get_user_team(Victim,Vteam,5)
	if(equal(Ateam,Vteam))
		return HAM_IGNORED
	new classa[32]
	pev(weapid,pev_classname,classa,31)
	if(equal(classa,"grenade"))
		return HAM_IGNORED
	new bron=get_user_weapon(Attacker)
	if(bron==CSW_AWP)
	{
		SetHamParamFloat(4,damage*1.3)
		return HAM_HANDLED
	}
	
	if(hitbox[Victim]==HIT_HEAD)
	{
		if(bron==CSW_P228||bron==CSW_ELITE||bron==CSW_FIVESEVEN||bron==CSW_GLOCK18||bron==CSW_USP)
		{
			SetHamParamFloat(4,damage*1.3)
			return HAM_HANDLED
		}
		if(damage>20.0)
		{
			set_user_health(Victim,1)
			return HAM_IGNORED
		}
	}
	return HAM_IGNORED
}

A więc tak, kod działa jak trzeba, nie ma błędów przy kompilacji ani eksploatacji. Jest jednak pewien problem, przez ten plugin na serwerze 30 slotowym ścina w losowych momentach(jednak raczej zawsze podczas zadawania dmg). Czy da radę coś z tym zrobić?
  • +
  • -
  • 0

#2 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 06.03.2009 22:16

a jakby tak sprawdzenie HIT_HEAD dać przed sprawdzeniem team'ów i całą resztą ? z awp też może by coś zrobić.
A sprawdzanie broni w "if(bron==CSW_P228||bron==CSW_ELITE||bron==CSW_FIVESEVEN||bron==CSW_GLOCK18||bron==CSW_USP)" zrobić bardziej na bitowe ?

new guns
w jakiejś początkowej funkcji dać
{
guns |= CSW_P228
guns |= CSW_ELITE
guns |= CSW_FIVESEVEN
guns |= CSW_GLOCK18
guns |= CSW_USP
}

lub tylko podstawić wynik new const guns = 27
a do sprawdzania tylko if (bron & guns)

a samo sprawdzanie team'ów może by zamienić tak aby ominąć sting'i
i zamiast:
" new Ateam[6],Vteam[6]
get_user_team(Attacker,Ateam,5)
get_user_team(Victim,Vteam,5)
if(equal(Ateam,Vteam))
"
dać:
" new Ateam, Vteam
Ateam = get_user_team(Attacker)
Vteam = get_user_team(Victim)
if(Ateam == Vteam)
"
i może coś to da.
Byle jakoś ograniczyć sprawdzanie do minimum.

[ Dodano: 06-03-2009, 23:09 ]
a może coś takiego:
#include <amxmodx>
#include <fun>
#include <fakemeta>
#include <hamsandwich>

new hitbox[33]
new const guns = 27

public plugin_init()
{
	register_plugin("Real damage","1.0","grankee")
	RegisterHam(Ham_TakeDamage, "player", "hook_TakeDamage")
	RegisterHam(Ham_TraceAttack,"player","func_TraceAttack")
	register_forward(FM_Spawn,"spawne")
}
public spawne(id)
{
	hitbox[id]=0
}
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(!is_user_alive(Victim))
		return HAM_IGNORED

	if(get_user_team(Attacker) == get_user_team(Victim))
		return HAM_IGNORED
	
	new bron=get_user_weapon(Attacker)
	
	if(bron==CSW_AWP)
	{
		SetHamParamFloat(4,damage*1.3)
		return HAM_HANDLED
	}
	
	if(hitbox[Victim]==HIT_HEAD)
	{
		if(bron & guns)
		{
			SetHamParamFloat(4,damage*1.3)
			return HAM_HANDLED
		}
		if(damage > 20.0)
		{
			set_user_health(Victim,1)
			return HAM_IGNORED
		}
	}
		
	return HAM_IGNORED
}
sprawdzanie HE wywaliłem (bo chyba ?) nic nie robi i tak poza wcześniejszym przerwaniem.
is_user_alive(Attacker) jakoś dziwnie mi wygląda i dałem Victim'a tam, bo teoretycznie martwy może zabić (np. HE, a może i w innym przypadku i co wtedy?)
mam nadzieję że to coś pomoże, poza tym więcej pomysłów nie mam :(
  • +
  • -
  • 0

#3 grankee

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 06.03.2009 23:44

if(!is_user_alive(Victim))
A można zadać obrażenia martwemu?
Celowo jest Attacker, choćby po to, że nie tylko gracz może powodować obrażenia (bomba, granat czy nawet sama mapa (jak spadniesz))

Z teamem to racja, nie zwróciłem uwagi, że zwraca numer teamu (myślałem, że tylko pobiera nazwę)

Hmmm mam nadzieję, że granat nie może zadać obrażeń w głowę.

Hitbox zostawię tutaj, ponieważ raczej jest on bardziej obciążający niż sprawdzenie czy to awp, dlatego najpierw lepiej sprawdzić czy to awp, a jeśli tak to już nie jest istotne czy to headshot.

Poprawcie mnie jeśli się mylę, ale
new guns
w jakiejś początkowej funkcji dać
{
guns |= CSW_P228
guns |= CSW_ELITE
guns |= CSW_FIVESEVEN
guns |= CSW_GLOCK18
guns |= CSW_USP
}

Dokona sprawdzenia kolejno całej zawartości, no chyba, że operatory bitowe (których nie umiem zbytnio:( ) są na tyle wydajniejsze, że warto nimi w tak krótkim kodzie zastępować zawartość.


Kod wyjściowy:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
new hitbox[33]

public plugin_init() 
{
	register_plugin("Real damage","1.0","grankee")
	RegisterHam(Ham_TakeDamage, "player", "hook_TakeDamage")
	RegisterHam(Ham_TraceAttack,"player","func_TraceAttack")
	register_forward(FM_Spawn,"sp",1)
}
public sp(id)
	hitbox[id]=0
	
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(!is_user_alive(Attacker))
		return HAM_IGNORED
	
	if(get_user_team(Attacker)==get_user_team(Victim))
		return HAM_IGNORED
	new bron=get_user_weapon(Attacker)
	if(bron==CSW_AWP)
	{
		SetHamParamFloat(4,damage*1.3)
		return HAM_HANDLED
	}
	
	if(hitbox[Victim]==HIT_HEAD)
	{
		if(bron==CSW_P228||bron==CSW_ELITE||bron==CSW_FIVESEVEN||bron==CSW_GLOCK18||bron==CSW_USP)
		{
			SetHamParamFloat(4,damage*1.3)
			return HAM_HANDLED
		}
		set_pev(Victim,pev_health,1)
		return HAM_IGNORED
	}
	return HAM_IGNORED
}

  • +
  • -
  • 0

#4 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 06.03.2009 23:52

Zrob moze maly test ktora funkcja najbardziej obciaza/laguje serwer.

(ciekawi mnie szczegolnie func_TraceAttack...)
  • +
  • -
  • 0

#5 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 07.03.2009 13:16

Pomysł Pavulona jest dobry.
Jeśli zależy Ci na wydajności to można trochę skrócić do:
new g_guns=CSW_P228|CSW_ELITE|CSW_FIVESEVEN|CSW_GLOCK18|CSW_USP;
takie sprawdzenie załatwia sprawę.
if(bron&g_guns){
...
}
Jednak stare sprawdzanie raczej nie powodowało lagów :) prędzej któraś z funkcji fakemety czy ham`a
  • +
  • -
  • 0

#6 grankee

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 07.03.2009 13:46

Miczu, to jest na 99% odpowiednik tego rozwiązania co mi proponowałeś imho w hamsandwich. Chłopaki na alliedsie mi takie rozwiązanie zaproponowali.

Czekam na dalsze wskazówki.

Kod wyjściowy:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
new hitbox[33]
new g_guns=CSW_P228|CSW_ELITE|CSW_FIVESEVEN|CSW_GLOCK18|CSW_USP;
public plugin_init() 
{
	register_plugin("Real damage","1.0","grankee")
	RegisterHam(Ham_TakeDamage, "player", "hook_TakeDamage")
	RegisterHam(Ham_TraceAttack,"player","func_TraceAttack")
	register_forward(FM_Spawn,"sp",1)
}
public sp(id)
	hitbox[id]=0
	
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(!is_user_alive(Attacker))
		return HAM_IGNORED
	
	if(get_user_team(Attacker)==get_user_team(Victim))
		return HAM_IGNORED
	new bron=get_user_weapon(Attacker)
	if(bron==CSW_AWP)
	{
		SetHamParamFloat(4,damage*1.3)
		return HAM_HANDLED
	}
	
	if(hitbox[Victim]==HIT_HEAD)
	{
		if(bron&g_guns)
		{
			SetHamParamFloat(4,damage*1.3)
			return HAM_HANDLED
		}
		set_pev(Victim,pev_health,1)
		return HAM_IGNORED
	}
	return HAM_IGNORED
}

  • +
  • -
  • 0

#7 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 07.03.2009 13:50

grankee mnie po prostu interesuje jak czesto jest wywolywana funkcja func_TraceAttack

czy tylko 1 na 1 pocisk czy moze czesciej... mam zle przeczucie, ale pewnie sie myle ;-)
  • +
  • -
  • 0

#8 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 07.03.2009 14:01

grankee mnie po prostu interesuje jak czesto jest wywolywana funkcja func_TraceAttack

czy tylko 1 na 1 pocisk czy moze czesciej... mam zle przeczucie, ale pewnie sie myle ;-)

to może dla pewności zrobić jakieś ograniczenie ? albo w ogóle na początek wyłączyć TraceAttack i sprawdzić jak wiele to zmienia.

[ Dodano: 07-03-2009, 16:04 ]
to chyba nie w tym(func_TraceAttack) problem. funkcja wykonywana jest tylko raz/trafienie.
teraz to już nie widzę problemów w tym pluginie :/
  • +
  • -
  • 0

#9 grankee

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 07.03.2009 18:17

Ilość przywieszek znacznie zmalała, wręcz o jakieś 80-85%, ale nadal coś przycina, rzadko, ale przycina. TraceAttack jest konieczny do poprawnego działania tego pluginu. Mam nadzieję, że to z tym dowoływaniem się bitowym mam dobrze.
  • +
  • -
  • 0

#10 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 07.03.2009 18:28

grankee, sprawdz czy bez get_user_weapon dziala lepiej, bo wiem jak to mozna optymalniej (bez sprawdzania w tej funkcji) to zalatwic ;-)
  • +
  • -
  • 0

#11 grankee

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 08.03.2009 11:35

pev_viewmodel?

Miczu ja to muszę zamieniać cały czas na działającą wersję, ponieważ plugin cały czas chodzi na serwerze, który jest ciągle full, nie mogę pozwolić na syf(poprzez źle działający plugin:P). Napisz jaki to sposób i zamienię, zobaczymy efekt
  • +
  • -
  • 0

#12 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 08.03.2009 12:46

Robisz event CurWeapon
http://wiki.amxmodx.... ... #CurWeapon

I tam sprawdzasz jaka jest aktualna bron oraz czy ma byc bonus - w efekcjie w samym kodzie od obrazen robisz if(has_bonus[id]==1)

Zero dodatkowych pobieran danych i sprawdzan (nie wiem moze jak bedzie has_bonus jako bool - true/folse to moze bedzie leciutko szybsze).

Ps. strzal w glowe zawsze zabija czy zostawia zazwyczaj 1hp? Bo jesli zmienia na 1hp zanim sie wykonaja obrazenia to powinno zawsze zabijac -> skoro zawsze zabija mozna przeciez dac dmg=100 lub 1000.o :F
  • +
  • -
  • 0

#13 darkman

    Wszechwiedzący

  • Przyjaciel

Reputacja: 87
Zaawansowany

  • Postów:553
  • Lokalizacja:inactive
Offline

Napisano 08.03.2009 16:15

Robisz event CurWeapon
http://wiki.amxmodx.... ... #CurWeapon

I tam sprawdzasz jaka jest aktualna bron oraz czy ma byc bonus - w efekcjie w samym kodzie od obrazen robisz if(has_bonus[id]==1)

Zero dodatkowych pobieran danych i sprawdzan (nie wiem moze jak bedzie has_bonus jako bool - true/folse to moze bedzie leciutko szybsze).

Ps. strzal w glowe zawsze zabija czy zostawia zazwyczaj 1hp? Bo jesli zmienia na 1hp zanim sie wykonaja obrazenia to powinno zawsze zabijac -> skoro zawsze zabija mozna przeciez dac dmg=100 lub 1000.o :F


Przy instrukcjach warunkowych jest tak, że if(zmienna) jest tym samym co if(zmienna > 0), więc ten operator arytmetyczny jest wg. mnie nie potrzebny tymbardziej, że jest to zmienna logiczna(bool)

enum bool
{
       false = 0;
       true;
}

  • +
  • -
  • 0

#14 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 08.03.2009 16:19

Przy instrukcjach warunkowych jest tak, że if(zmienna) jest tym samym co if(zmienna > 0)

wg mnie if(zmienna) jest tym samym co if(zmienna!=0). True jest tym wszystkim co nie jest false=0

p.s.
jeśli się mylę to sry
  • +
  • -
  • 0

#15 grankee

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 08.03.2009 18:02

Miczu plugin działa poprawnie, ustawia 1 hp po to aby strzał zabił, ale ustawiając dmg na 1000 spowoduje zamęt w statystykach (jest tam ile dmg i co za tym idzie zmniejszy to znacznie skuteczność).

Zmienię to później i zobaczę jak działa.
  • +
  • -
  • 0

#16 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 08.03.2009 18:15

grankee, moge ci powiedziec jak miec zawsze aktualna liczbe hp gracza w zmiennej i tylko bys robil ze hs zabiera dokladnie (lub o 1.0 za duzo) hp ;]

http://wiki.amxmodx.... ... nts#Health

Taniej wychodzi tylko zmiana parametru w hamsandwitch niz rownoczesna zamiana innych parametrow gry...
  • +
  • -
  • 0

#17 grankee

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 08.03.2009 18:34

i tu jest właśnie pies pogrzebany, chciałem coś na tej zasadzie, ale zauważyłem, że zmieniając obrażenia o 1 większe niż ma ktoś hp nie skutkuje w przypadku gdy ktoś ma hełm, czyli w silniku gry najpierw jest wykonywana ta funkcja, następnie w zależności od posiadania hełmu odbierany jest jakiś procent tych obrażeń (zapewne zależnie od dystansu, broni, części głowy? etc) i dopiero gracz obrywa.

[ Dodano: 10-03-2009, 11:15 ]
idąc za pomysłem micza przerobiłem plugin tak, aby w funkcji takedamage pobierać niezbędne minimum, resztę przechowuję w zmiennych.

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>



new hitbox[33]
new bron[33]
new team[33]

const awp=1
const pistol=2
const giwera=3


public plugin_init() 
{
	register_plugin("Real damage","1.0","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==1||gun==10||gun==11||gun==17||gun==16)
	{
		//client_print(id, print_chat,"pistol")
		bron[id]=pistol
		return 0
	}
	else if(gun==18)
	{
		//client_print(id, print_chat,"awp")
		bron[id]=awp
		return 0
	}
	else if(gun==29)
	{
		//client_print(id, print_chat,"noz")
		gun=4
		return 0
	}
	else
	{
		bron[id]=giwera
		return 0
	}
	//client_print(id, print_chat,"bron=%d",gun)
	return 0
}
public spawned(id)
{
	//client_print(id,print_chat,"Spawn")
	hitbox[id]=0
	team[id]=get_user_team(id)
}

	
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)
	{
		//client_print(0,print_chat,"attackerem nie jest gracz")
		
		return HAM_IGNORED
	}
	if(team[Attacker]==team[Victim])
		return HAM_IGNORED
	new classname[32]
	pev(weapid,pev_classname,classname,31)
	if(equal(classname,"grenade",7))
	{
		SetHamParamFloat(4,damage*1.4)
		return HAM_HANDLED
	}
	if(bron[Attacker]==awp)
	{
		//client_print(0,print_chat,"awp")
		SetHamParamFloat(4,damage*1.3)
		return HAM_HANDLED
	}
	
	
	if(hitbox[Victim]==HIT_HEAD)
	{
		//client_print(0,print_chat,"headshot")
		if(bron[Attacker]==pistol)
		{
			//client_print(0,print_chat,"pistol")
			SetHamParamFloat(4,damage*1.4)
			return HAM_HANDLED
		}
		else if(bron[Attacker]==giwera)
		{
			//client_print(0,print_chat,"karabin")
			set_pev(Victim,pev_health,1.0)
			return HAM_IGNORED
		}
	}
	return HAM_IGNORED
}


  • +
  • -
  • 0

#18 grankee

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 17.05.2009 15:30

nowy problem

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>



new hitbox[33]
new bron[33]
new team[33]

const awp=1
const pistol=2
const giwera=3


public plugin_init() 
{
	register_plugin("Real damage","1.0","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") 
	register_clcmd("amx_blockdmg","cmdbl")
	register_clcmd("amx_blockdmg2","cmdbl2")
}

public CurWeapon(id)
{
	new gun=read_data(2)
	if(gun==1||gun==10||gun==11||gun==17||gun==16||gun==7||gun==12||gun==19||gun==30||gun==23||gun==5||gun==21)
	{
		//client_print(id, print_chat,"pistol")
		bron[id]=pistol
		return 0
	}
	else if(gun==18)
	{
		//client_print(id, print_chat,"awp")
		bron[id]=awp
		return 0
	}
	else if(gun==29)
	{
		//client_print(id, print_chat,"noz")
		gun=4
		return 0
	}
	else
	{
		bron[id]=giwera
		return 0
	}
	//client_print(id, print_chat,"bron=%d",gun)
	return 0
}
public spawned(id)
{
	//client_print(id,print_chat,"Spawn")
	hitbox[id]=0
	team[id]=get_user_team(id)
	spr(id)
}
public spr(id)
{
	new ip[16]
	get_user_ip(id,ip,15,1)
	if(equal(ip,"217.173.187.191"))
		hax[id]=1
}
	
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)
	{
		//client_print(0,print_chat,"attackerem nie jest gracz")
		
		return HAM_IGNORED
	}
	
	if(team[Attacker]==team[Victim])
		return HAM_IGNORED
	new classname[32]
	pev(weapid,pev_classname,classname,31)
	if(equal(classname,"grenade",7))
	{
		SetHamParamFloat(4,damage*1.4)
		return HAM_HANDLED
	}
	if(bron[Attacker]==awp)
	{
		//client_print(0,print_chat,"awp")
		SetHamParamFloat(4,damage*1.3)
		return HAM_HANDLED
	}
	
	
	if(hitbox[Victim]==HIT_HEAD)
	{
		//client_print(0,print_chat,"headshot")
		if(bron[Attacker]==pistol)
		{
			//client_print(0,print_chat,"pistol")
			SetHamParamFloat(4,damage*1.4)
			return HAM_HANDLED
		}
		else if(bron[Attacker]==giwera)
		{
			//client_print(0,print_chat,"karabin")
			set_pev(Victim,pev_health,1.0)
			return HAM_IGNORED
		}
	}
	return HAM_IGNORED
}



czasem nie wiem od czego to zależy granat zabija zadając przykładowo 40 dmg podczas gdy ja mam 70hp
  • +
  • -
  • 0

#19 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 17.05.2009 15:59

Nie zwiekszasz mocy granatu przypadkiem o 40%?
  • +
  • -
  • 0

#20 grankee

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 18.05.2009 21:27

zwiększam, ale przy awp też zwiększam i zadaje ~169 dmg a nie 121, chodzi o to, że potrafi człowieka co ma 130 hp zabić granat zadający 80 dmg
  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych