←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Zabójstwo z nożna + napis w hud

  • +
  • -
IntelCom - zdjęcie IntelCom 01.01.2015

Witam,

 

Jak zrobić by po zabiciu wroga z knife (noża) pokazywała się wszystkim graczom na serwerze wiadomość w hud.

"Nick zabójcy" zabił "Nick ofiary"

 

Przykład:

 

Florek poćwiartował Anyes.

 

 

Dodałem do funkcji plugin init, event zdarzenia śmierci, ale nie za bardzo wiem co dalej?

 

 

 

 

Odpowiedz

  • +
  • -
Droso - zdjęcie Droso 01.01.2015

#include <amxmodx>


#define PLUGIN "Zabicie z noza"
#define VERSION "1.0"
#define AUTHOR "Drozduuuu"


public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_event("DeathMsg", "DeathMsg", "a")
}


public DeathMsg()
{
	new kid = read_data(1);
	new vid = read_data(2);	
	new weapon[64];
	read_data(4,weapon,63);
	
	if(kid == 0 || kid == vid)
	return;
	
	if(containi(weapon, "knife") == -1) // sprawdzamy czy z noza
	return;
	
	if(!is_user_connected(kid) || !is_user_connected(vid))
	return;
	
	new name_kid[32], name_vid[32];
	get_user_name(kid, name_kid, 31)
	get_user_name(vid, name_vid, 31);
	
	set_hudmessage(0, 255, 0, -1.0, 0.3, 0, 6.0, 5.0)
	show_hudmessage(0, "%s pocwiartowal %s", name_kid, name_vid)
}
Odpowiedz

  • +
  • -
IntelCom - zdjęcie IntelCom 01.01.2015

1.Dlaczego zmienna new weapon ma wartość zapisaną w tablicy [64]?

new weapon[64]; 

2.Tej linijki wogóle. nie rozumiem.

read_data(4,weapon,63);

3.Dlaczego ten warunek przyjmuje takie wartości i co oznacza ta nazwa containi?

if(containi(weapon, "knife") == -1)

4.No i ten fragment kodu, nie zbyt jasny dla mnie.

new name_kid[32], name_vid[32];
get_user_name(kid, name_kid, 31)
get_user_name(vid, name_vid, 31);
Odpowiedz

  • +
  • -
Droso - zdjęcie Droso 01.01.2015


1.Dlaczego zmienna new weapon ma wartość zapisaną w tablicy [64]?

Jest to jej rozmiar, to pewnie wiesz, w niej przechowuję nazwę broni, ogólnie pewnie może być krótsza (bo 64 to na pewno starczy, a pewnie i by 32 wystarczyło), bo zawiera nazwę broni bez "weapon_" na początku.

Lista broni: http://amxx.pl/topic...ive-item-speed/(brakuje noża w tej tabelce, ale ma on weapon_knife - ID 29)

 

 

 

 


2.Tej linijki w ogóle. nie rozumiem.

read_data(4,weapon,63);

4 - oznacza, z którego elementu pobieram informacje.

Ogólnie 4 parametr w Evencie DeathMsg to krótka nazwa broni.

weapon, 63 - pobieram do tej tablicy, którą uprzednio stworzyłem ;)

Czyli tutaj pobieram nazwę broni.

 

 

 

 


3.Dlaczego ten warunek przyjmuje takie wartości i co oznacza ta nazwa containi?

if(containi(weapon, "knife") == -1)

containi <-

Sprawdzam czy tablica "weapon" zawiera "fraze" "knife", jeżeli nie zawiera (czyli zwraca -1, według jej definicji :D, to koncze prace)

Jeżeli == -1 czyli wtedy to nie jest ta broń, czyli kończę funkcję przez zwracanie "return"

 

 

4.No i ten fragment kodu, nie zbyt jasny dla mnie.

new name_kid[32], name_vid[32];
get_user_name(kid, name_kid, 31)
get_user_name(vid, name_vid, 31);

Najpierw tworzę tablice dla zabójcy i ofiary, aby pobrać ich nick (nick ma maksymalnie 32 znaki, dlatego 32).

Później pobieram ;)

get_user_name


Użytkownik Droso edytował ten post 01.01.2015 17:22
Odpowiedz

  • +
  • -
IntelCom - zdjęcie IntelCom 01.01.2015

Ten warunek nie jest dla mnie taki do końca zrozumiały, te returny są potrzebne.Co jak by ich nie było?

Odpowiedz

  • +
  • -
Droso - zdjęcie Droso 01.01.2015

Ten warunek nie jest dla mnie taki do końca zrozumiały, te returny są potrzebne.Co jak by ich nie było?

Ah widzisz te returny, zatrzymują wykonywanie się funkcji dalej.

Czyli jeżeli warunek się spełni i zwrócimy return, to wtedy to co jest po tym warunku już się nie wykona ;)

 

Więc mamy tablice weapon (rozmiar 64)

Pobieramy nazwe broni z jakiej zabiliśmy w evencie DeathMsg do tablicy weapon.

 

Robimy warunek + containi czyli sprawdzamy czy tablica zawiera w sobie "knife" jeżeli zawiera zwróci liczbę większa od -1, a jak nie znajdzie, zwróci -1.

Dlatego

 

jeżeli containi == -1, kończymy funkcje returnem, bo tablica weapon nie zawiera w sobie "knife"


Użytkownik Droso edytował ten post 01.01.2015 19:14
Odpowiedz

  • +
  • -
IntelCom - zdjęcie IntelCom 02.01.2015

A skąd mam wiedzieć, że liczba większa od -1(np. -2;-5;-7;-9) to knife, a równa -1 to jakaś inna broń?
Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 02.01.2015


containi <-
Sprawdzam czy tablica "weapon" zawiera "fraze" "knife", jeżeli nie zawiera (czyli zwraca -1, według jej definicji , to koncze prace)
Jeżeli == -1 czyli wtedy to nie jest ta broń, czyli kończę funkcję przez zwracanie "return"
Odpowiedz

  • +
  • -
Droso - zdjęcie Droso 02.01.2015

Przeczytaj definicje containi

Trochę może się to wydawać ciężkie na początek, więc możesz wrócić do tego później ;P

Odpowiedz