←  Pytania dotyczące pluginów

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Sprawdzenie poprawności plugi...


Najlepsza odpowiedź Mister Silenzo 04.03.2014 21:59

#include <amxmodx>
#include <fun>
#include <colorchat>

public plugin_init() {
	register_plugin("2 Fragi", "Autorska", "Mister Silenzo");
	register_event("DeathMsg", "EventDeath", "a"); // Wydarzenie odpowiedzialne za wyłapywanie zabójstw
}

public EventDeath() {
	new kid = read_data(1); // Numer ID osoby, która zabiła 
	new vid = read_data(2); // Numer ID osoby, która ZOSTAŁA zabita
	new hs = read_data(3); // Zwraca 1 jeżeli zabójstwo było przez headshot, lub 0 gdy było strzałem/kosą w ciało
	// read_data() służy do odczytywania parametrów wydarzenia, jeżeli użyłem złego słowa do opisania tej funkcji i jej funkcji to proszę o poprawienie mnie xd
	
	if(kid == vid || kid == 0) return; // Jeżeli OFIARĄ jest ZABÓJCA (czyt. samobójstwo) lub ZABÓJCA jest zerem (KID jest równe 0 gdy spada się z wysokości, lub admin używa SLAY ;-;)
	
	new name[2][32]; // Tablica dwuwymiarowa o dwóch polach z indeksami od 0 do 31 (Jeżeli źle wytłumaczyłem to proszę o poprawienie mnie ;/)
	if(get_user_weapon(kid) == CSW_KNIFE) { // Jeżeli bronią ZABÓJCY jest NÓŻ
		get_user_name(kid, name[0], 31); // Pobierz nick ZABÓJCY do pierwszego pola tablicy.
		get_user_name(vid, name[1], 31); // Pobierz nick OFIARY do drugiego pola tablicy.
		ColorChat(kid, RED, "^1Zdobywasz dodatkowego fraga za zabicie ^4%s^1 z ^4NOZA^1!", name[1]); // Wyświetl ZABÓJCY informację o dodaniu fraga
		for(new i = 0; i < get_maxplayers(); i++) { /* Tutaj spotykamy się ze słowem kluczowym "for", które definiuje pętlę. 
								W pętli tworzymy nową zmienną "new i" i przypisujemy jej wartość zero "new i = 0;". 
								Warunek obrotu pętli, czyli "i < get_maxplayers();", co ma się stać po obrocie pętli, czyli "i++".*/
				if(!is_user_connected(i) || is_user_bot(i) || is_user_hltv(i) || i == kid) continue; /* I jest numerem ID gracza w tej pętli, 
														więc jeżeli gracz z pętli jest zabójcą, jest niepołączony, jest botem lub hltv to go pomijamy :P
														Pomijamy zabójcę w pętli, ponieważ dla niego wiadomość została wyświetlona wcześniej, więc nie ma potrzeby pokazywać mu
														po raz kolejny tego samego, prawda? :P*/
				ColorChat(i, RED, "^4%s ^1zdobywa dodatkowego fraga za zabicie ^4%s ^1NOZEM!", name[0], name[1]);
		}
		set_user_frags(kid, get_user_frags(kid) + 1); // Dodajemy do obecnej ilości fragów ZABÓJCY jednego fraga.
		return; // Przerywa dalsze działanie kodu, gdyż gdyby zabójstwo nożem odbyło by się poprzez HS gracz dostał by dwa dodatkowe fragi zamiast jednego.
	}
	// Tutaj robimy to samo co powyżej z tą różnicą, że funkcja nie rozpoczyna się od sprawdzenia czy gracz ma nóż, lecz czy zabójstwo odbyło się poprzez HS.	
	if(hs == 1) {
		get_user_name(kid, name[0], 31);
		get_user_name(vid, name[1], 31);
		ColorChat(kid, RED, "^1Zdobywasz dodatkowego fraga za zabicie ^4%s HEADSHOTEM^1!", name[1]);
		for(new i = 0; i < get_maxplayers(); i++) {
				if(!is_user_connected(i) || is_user_bot(i) || is_user_hltv(i) || i == kid) continue;
				ColorChat(i, RED, "^4%s ^1zdobywa dodatkowego fraga za zabicie ^4%s ^1HEADSHOTEM!", name[0], name[1]);
		}
		set_user_frags(kid, get_user_frags(kid) + 1);
		return;
	}
	/*
	Mam nadzieję, że nauczyłeś się czegokolwiek XD Jeżeli czegoś nie wiesz to zapraszam na PW, bądź pisz w temacie, chętnie "pouczę" podstaw, gdyż jak na razie sam znam tylko podstawy :P
	*/
}
Proszę, oto kompletny kod z komentarzami, miłej lektury (o ile chcesz się czegoś nauczyć xD Jeżeli nie to wrzuć w kompilator i tyle :P). Przejdź do postu
Zablokowany

  • +
  • -
SKCr0well - zdjęcie SKCr0well 04.03.2014

Krótko i na temat, za dużo nie umiem zrobić z pluginami, ale oto co mi się udało zrobić. I teraz prośba do was czy to w ogóle zadziała?

W załączniku daje plik. Już wyjaśniam o co mi w nim chodziło, po pierwsze by za zabójstwo z HS i z noża dodawał dodatkowego fraga a przy tym powiadamiał wszystkich na say'u kto to zrobił.

Jeżeli coś nie tak to proszę o przybliżenie błędu:D

Załączone pliki

  • Załączony plik  2fragi.sma   958 bajtów   32 Ilość pobrań
Odpowiedz

  • +
  • -
Mister Silenzo - zdjęcie Mister Silenzo 04.03.2014

Nie musiałeś używać Hamsandwitcha :D Wystarczy zwykły DeathMsg, pewnie nie rozumiesz o co chodzi, więc tutaj masz "wydarzenia" w czasie rozgrywki http://amxx.pl/topic/1680-eventy/. DeathMsg jest eventem odpowiedzialnym za śmierć gracza, event przekazuje identyfikator zabijającego i zabitego oraz info o zabójstwie, a mianowicie czy odbyło się przez HS czy nie. Moje pytanie, z jakich broni ma dodawać ten jeden kill?

Odpowiedz

  • +
  • -
Najlepsza odpowiedź Mister Silenzo - zdjęcie Mister Silenzo 04.03.2014

#include <amxmodx>
#include <fun>
#include <colorchat>

public plugin_init() {
	register_plugin("2 Fragi", "Autorska", "Mister Silenzo");
	register_event("DeathMsg", "EventDeath", "a"); // Wydarzenie odpowiedzialne za wyłapywanie zabójstw
}

public EventDeath() {
	new kid = read_data(1); // Numer ID osoby, która zabiła 
	new vid = read_data(2); // Numer ID osoby, która ZOSTAŁA zabita
	new hs = read_data(3); // Zwraca 1 jeżeli zabójstwo było przez headshot, lub 0 gdy było strzałem/kosą w ciało
	// read_data() służy do odczytywania parametrów wydarzenia, jeżeli użyłem złego słowa do opisania tej funkcji i jej funkcji to proszę o poprawienie mnie xd
	
	if(kid == vid || kid == 0) return; // Jeżeli OFIARĄ jest ZABÓJCA (czyt. samobójstwo) lub ZABÓJCA jest zerem (KID jest równe 0 gdy spada się z wysokości, lub admin używa SLAY ;-;)
	
	new name[2][32]; // Tablica dwuwymiarowa o dwóch polach z indeksami od 0 do 31 (Jeżeli źle wytłumaczyłem to proszę o poprawienie mnie ;/)
	if(get_user_weapon(kid) == CSW_KNIFE) { // Jeżeli bronią ZABÓJCY jest NÓŻ
		get_user_name(kid, name[0], 31); // Pobierz nick ZABÓJCY do pierwszego pola tablicy.
		get_user_name(vid, name[1], 31); // Pobierz nick OFIARY do drugiego pola tablicy.
		ColorChat(kid, RED, "^1Zdobywasz dodatkowego fraga za zabicie ^4%s^1 z ^4NOZA^1!", name[1]); // Wyświetl ZABÓJCY informację o dodaniu fraga
		for(new i = 0; i < get_maxplayers(); i++) { /* Tutaj spotykamy się ze słowem kluczowym "for", które definiuje pętlę. 
								W pętli tworzymy nową zmienną "new i" i przypisujemy jej wartość zero "new i = 0;". 
								Warunek obrotu pętli, czyli "i < get_maxplayers();", co ma się stać po obrocie pętli, czyli "i++".*/
				if(!is_user_connected(i) || is_user_bot(i) || is_user_hltv(i) || i == kid) continue; /* I jest numerem ID gracza w tej pętli, 
														więc jeżeli gracz z pętli jest zabójcą, jest niepołączony, jest botem lub hltv to go pomijamy :P
														Pomijamy zabójcę w pętli, ponieważ dla niego wiadomość została wyświetlona wcześniej, więc nie ma potrzeby pokazywać mu
														po raz kolejny tego samego, prawda? :P*/
				ColorChat(i, RED, "^4%s ^1zdobywa dodatkowego fraga za zabicie ^4%s ^1NOZEM!", name[0], name[1]);
		}
		set_user_frags(kid, get_user_frags(kid) + 1); // Dodajemy do obecnej ilości fragów ZABÓJCY jednego fraga.
		return; // Przerywa dalsze działanie kodu, gdyż gdyby zabójstwo nożem odbyło by się poprzez HS gracz dostał by dwa dodatkowe fragi zamiast jednego.
	}
	// Tutaj robimy to samo co powyżej z tą różnicą, że funkcja nie rozpoczyna się od sprawdzenia czy gracz ma nóż, lecz czy zabójstwo odbyło się poprzez HS.	
	if(hs == 1) {
		get_user_name(kid, name[0], 31);
		get_user_name(vid, name[1], 31);
		ColorChat(kid, RED, "^1Zdobywasz dodatkowego fraga za zabicie ^4%s HEADSHOTEM^1!", name[1]);
		for(new i = 0; i < get_maxplayers(); i++) {
				if(!is_user_connected(i) || is_user_bot(i) || is_user_hltv(i) || i == kid) continue;
				ColorChat(i, RED, "^4%s ^1zdobywa dodatkowego fraga za zabicie ^4%s ^1HEADSHOTEM!", name[0], name[1]);
		}
		set_user_frags(kid, get_user_frags(kid) + 1);
		return;
	}
	/*
	Mam nadzieję, że nauczyłeś się czegokolwiek XD Jeżeli czegoś nie wiesz to zapraszam na PW, bądź pisz w temacie, chętnie "pouczę" podstaw, gdyż jak na razie sam znam tylko podstawy :P
	*/
}
Proszę, oto kompletny kod z komentarzami, miłej lektury (o ile chcesz się czegoś nauczyć xD Jeżeli nie to wrzuć w kompilator i tyle :P).
Użytkownik Mister Silenzo edytował ten post 04.03.2014 22:01
Odpowiedz

  • +
  • -
SKCr0well - zdjęcie SKCr0well 04.03.2014

Nie spodziewałem się aż takiego wytłumaczenia. Jestem Ci bardzo wdzięczny :D 

Komentarze bardzo mi pomogły to zrozumieć, bez komentarzy bym tego nie zrozumiał.

Jeszcze raz dzięki:P

Odpowiedz
Zablokowany