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

[ROZWIĄZANE] Sprawdzenie poprawności pluginu, szybko :P


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


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

#1 SKCr0well

    Zaawansowany

  • Użytkownik

Reputacja: 2
Nowy

  • Postów:99
  • Imię:Mariusz
  • Lokalizacja:Konin
Offline

Napisano 04.03.2014 19:50

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


  • +
  • -
  • 0

#2 Mister Silenzo

    Zaawansowany

  • Użytkownik

Reputacja: 39
Życzliwy

  • Postów:83
  • Lokalizacja:BD
Offline

Napisano 04.03.2014 21:13

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?


  • +
  • -
  • 0
Moje pluginy:

Kick All (administracja) - Wyrzuca graczy nakładając hasło na serwer.

Zlecenie Zabójstwa (4FUN) - Przyjmij zlecenie, wykonaj je, zdobądź punkty, a następnie wydaj je na dodatki, które pozwolą ci skuteczniej i szybciej wykonywać zlecenia.

#3 Mister Silenzo

    Zaawansowany

  • Użytkownik

Reputacja: 39
Życzliwy

  • Postów:83
  • Lokalizacja:BD
Offline

Napisano 04.03.2014 21:59   Najlepsza odpowiedź

#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

  • +
  • -
  • 1
Moje pluginy:

Kick All (administracja) - Wyrzuca graczy nakładając hasło na serwer.

Zlecenie Zabójstwa (4FUN) - Przyjmij zlecenie, wykonaj je, zdobądź punkty, a następnie wydaj je na dodatki, które pozwolą ci skuteczniej i szybciej wykonywać zlecenia.

#4 SKCr0well

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:99
  • Imię:Mariusz
  • Lokalizacja:Konin
Offline

Napisano 04.03.2014 22:16

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


  • +
  • -
  • 0




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

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