←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Mniejsze Obrazenia

Zablokowany

Daj buziaka - zdjęcie Daj buziaka 13.08.2013

Witam. Chciałbym dodać aby każdy kto do mnie strzela aby zadawał mi obrażenia :

 

1 strzał = 2 DMG

 

próbowałem zrobić ale nie działa xD

Odpowiedz

  • +
  • -
Droso - zdjęcie Droso 13.08.2013

#include <amxmodx>
#include <hamsandwich>

#define PLUGIN "Obrazenia za 2"
#define VERSION "1.0"
#define AUTHOR "hubertTM"


public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	RegisterHam(Ham_TakeDamage, "player", "Event_TakeDamage", 0);
}

public Event_TakeDamage(this, inf, attacker, Float:damage){
	if(this == attacker)
	return HAM_IGNORED;
	
	if(inf != attacker)  /* Z granata sa normalne DMG jak cos to usun to */
	return HAM_IGNORED;  /* to tez */
	
	if(!is_user_connected(attacker))
	return HAM_IGNORED;
	
	if(!is_user_alive(this))
	return HAM_IGNORED;
	
	if(get_user_weapon(attacker) == CSW_KNIFE) /* Z noza sa normalne DMG jak cos to usun to */
	return HAM_IGNORED; /* to tez */
	
	SetHamParamFloat(4, 2.0);
	
	return HAM_HANDLED;
}

Użytkownik HubertTM edytował ten post 13.08.2013 19:24
Odpowiedz

Daj buziaka - zdjęcie Daj buziaka 13.08.2013

zaraz przetestuje i dzięki za szybką odpowiedź :P

Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 13.08.2013

#include <amxmodx>
#include <hamsandwich>

#define PLUGIN "Obrazenia za 2"
#define VERSION "1.0"
#define AUTHOR "hubertTM"


public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	RegisterHam(Ham_TakeDamage, "player", "Event_TakeDamage", 0);
}

public Event_TakeDamage(this, inf, attacker, Float:damage){
	if(this == attacker)
	return HAM_IGNORED;
	
	if(inf != attacker)  /* Z granata sa normalne DMG jak cos to usun to */
	return HAM_IGNORED;  /* to tez */
	
	if(!is_user_alive(attacker))
	return HAM_IGNORED;
	
	if(!is_user_connected(this))
	return HAM_IGNORED;
	
	if(get_user_weapon(attacker) == CSW_KNIFE) /* Z noza sa normalne DMG jak cos to usun to */
	return HAM_IGNORED; /* to tez */
	
	SetHamParamFloat(4, 2.0);
	
	return HAM_IGNORED;
}

Sprawdzasz, czy gracz zadający obrażenia jest żywy, a czy gracz dostający jest połączony z serwerem. Chyba się pomyliłeś, bo powinno się robić na odwrót (trzeba brać pod uwagę obrażenia z HE) oraz z tym sprawdzaniem broni też nie do końca bym się zgodził, ale to akurat zależy od paru rzeczy. Do tego na końcu wypadało by zwracać coś innego.
Odpowiedz

  • +
  • -
Droso - zdjęcie Droso 13.08.2013

Obrażenia HE zostały wykluczone przez

if(inf != attacker)
return HAM_IGNORED;

,ale poprawię, bo może autor tematu, chce, żeby DMG działało też dla HE.

 

Na końcu można zwrócić HAM_HANDLED zaraz poprawię.

 

@edit .Sma poprawione.

 

Co do sprawdzania broni, to powiem tak, jak autor chce, żeby HE zadawało normalne obrażenia, a nóż nie, to niech napiszę, a przerobię to pod jego prośbę :)


Użytkownik HubertTM edytował ten post 13.08.2013 19:27
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 13.08.2013

Obrażenia HE zostały wykluczone przez:

if(inf != attacker)
return HAM_IGNORED;

Tu by można się sprzeczać ;]
1. Sam tam napisałeś, że można ten warunek usunąć.
2. To że inf != attacker nie musi oznaczać, że obrażenia zadane są granatem, ale to raczej dotyczy tylko jakichś modów, dlatego też napisałem, że to zależy od paru rzeczy.
Odpowiedz

Daj buziaka - zdjęcie Daj buziaka 13.08.2013

jeden problem jeszcze mam.

ponieważ chcę to dodać do sklepu a chce aby tylko działało na jedną runde po zakupie.

 

ale coś nie działa xD

Załączone pliki

  • Załączony plik  dmg.sma   1,62 KB   12 Ilość pobrań
Odpowiedz

  • +
  • -
Droso - zdjęcie Droso 13.08.2013

Generalnie autor chciał, żeby HE i Knife też miały DMG za 2, więc poprawiłem Ci plugin miałeś literówkę.

one[attacker] trzeba było zamienić na one[this] - bo to dostający obrażenia ma mieć małe DMG ;) (Już poprawione w .sma)

 

Jednak jak ktoś nadal jest ciekaw tych poprawek sebula to macie kod :)

#include <amxmodx>
#include <hamsandwich>

#define PLUGIN "Obrazenia za 2"
#define VERSION "1.0"
#define AUTHOR "hubertTM"


#define DMG_NEVERGIB (1<<12) 
#define DMG_BULLET (1<<1) 
#define DMG_KNIFE     ( DMG_NEVERGIB | DMG_BULLET )
#define DMG_HEGRENADE (1<<24) 

#define GRANAT 1  // postaw // przed #define aby granat mialy DMG 2
#define NOZ 1 // postaw // przed #define aby noz mial DMG 2


public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	RegisterHam(Ham_TakeDamage, "player", "Event_TakeDamage", 0);
}

public Event_TakeDamage(this, inf, attacker, Float:damage, damagebits){
	if(this == attacker)
	return HAM_IGNORED;
	
	if(!is_user_connected(attacker))
	return HAM_IGNORED;
	
	if(!is_user_alive(this))
	return HAM_IGNORED;
	
	#if defined NOZ
	if((damagebits & DMG_KNIFE)) 
	return HAM_IGNORED;
	#endif
	
	#if defined GRANAT
	if(damagebits & DMG_HEGRENADE) 
	return HAM_IGNORED;
	#endif
	
	SetHamParamFloat(4, 2.0);
	
	return HAM_HANDLED;
}

sebul (13.08.2013 20:25):
A co jeśli zadałbym niestandardowe obrażenia z (damagebits & DMG_HEGRENADE)? To oczywiście taki przypadek mało spotykany, ale jest to możliwe, a wtedy samo sprawdzenie damagebits nie wystarczy.
W każdym razie ten kod, raczej autorowi tematu powinien wystarczyć.
Droso (13.08.2013 20:30):
Fakt, ale jeśli ktoś używa damagebits DMG_HEGRENADE u np. jakiegoś bossa, to albo to jest nielogiczne, albo ten boss rzuca granatami :D
Tutaj już wpływ jest drugiego modera, wszystkiego przewidzieć się nie da.

+został jakiś sposób, żeby sprawdzić czy to HE?
sebul (13.08.2013 20:42):
Wystarczy dodatkowo sprawdzić, czy nazwa klasy bytu zadającego obrażenia to "grenade" ^^
sebul (13.08.2013 20:46):
Oczywiście nazwę klasy też można ustawić każdemu bytowi na jaką się chce, ale kto będzie ustawiał "grenade" tworzonemu bytowi przez siebie, skoro to zapewne nie będzie zwykły granat, a jak będzie zwykły, to nie trzeba tworzyć nowego bytu, tylko po prostu dać zwykły granat.
Droso (13.08.2013 21:06):
Zupełnie zapomniałem hah :D, tak samo można powiedzieć kto ustawia bytowi DMG_GRENADE :D
sebul (13.08.2013 21:16):
Jeśli obrażenia są od jakiegoś wybuchu czegoś latającego, to czemu by nie ustawiać (1<<24) albo w połączeniu jeszcze z czymś, na pewno bardziej to jest prawdopodobne, niż żeby ustawiać nowemu bytowi nazwę granatu.

Załączone pliki

  • Załączony plik  dmg.sma   1,54 KB   20 Ilość pobrań

Użytkownik HubertTM edytował ten post 13.08.2013 21:07
Odpowiedz

  • +
  • -
d0naciak - zdjęcie d0naciak 13.08.2013

Wywal jeszcze to

#define IsPlayer(%1) (1 <= %1 <= 32)
Odpowiedz
Zablokowany