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

"Zrozumieć Plugin."


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
21 odpowiedzi w tym temacie

#1 dasiek

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Junior Admin

Reputacja: 2 077
Godlike

  • Postów:5 706
  • Imię:Adaś
  • Lokalizacja:No teraz trochę dalej od WWy
Offline

Napisano 30.11.2012 21:26

*
Popularny

Na wstępnie - nie jestem jakiś pr0 - jednak chciałbym wam przybliżyć pisanie pluginów przez ten poradnik ponieważ żeby zacząć cokolwiek robić trzeba to zrozumieć ;)
Pragnę wam przedstawić mój sposób rozumienia pisania pluginów. Co prawda może być w nim wiele sprzeczności, nie dopowiedzeń i innych badziewów ale chcę uniknąć pisania regułek definicji i innych sformułowań których 98% z was (w tym i ja) nie zrozumie...

Zacznijmy stwierdzeniem ze plugin to 'opisany zestaw czynności' które serwer wykonuje. Nie jasne?
Wyobraźmy Sobie że człowiek to taki 'serwer' i ma ochotę na zupę chińską w 5 minut (który jest pluginem). Więc bierze opakowanie z zupką otwiera ją , wlewa do jakiegoś tam garnka z wodą miesza, gotuje, wlewa do miski , bierze łyżkę i je. Na opakowaniu mamy zestaw takowych instrukcji co mamy wykonać zeby zrobić zupkę - które człowiek rozumie. Tak samo nasz plugin - gdy chcemy np dać graczowi hp za zabójstwo musimy opisać w pluginie takowe dodawanie.

Do scriptingu nie wiele nam potrzeba. Wystarczy dowolne narzędzie do edycji plików tekstowych (tak jak nontatnik , notepad++ etc) otwieramy plik i piszemy. Jak wiadomo - plugin na serwer ma rozszerzenie amxx. Ale nasze kody mają rozszerzenie sma których serwer nie rozumie. Etap zmiany pliku sma na amxx to kompilacja (nie komplikacjia, konfrontacja, konwencja czy inne stwierdzenia z tego forum) czyli zamiana naszego pluginu na taką postać którą zrozumie nasz serwer. Odwołując się do przykładu wyżej. Zupa chińska jak sama nazwa wskazuje jest po chińsku i nie wszyscy rozumieją ten język. Więc ludzie z biedry (tu jako kompilator) przetłumaczyli instrukcje robienia takowej zupki tak żeby każdy polak ją zrozumiał.i Wuola.

Czas na trochę teori (tak tak, obiecałem że jej nie będzie ale cuż - niektórych rzeczy inaczej się wyjaśnić nie da) opisanej Łopatologicznie.
Na początku ważna rzecz. Nasz plugin (w innych językach programowania jest ta sama bajka) musi działać (to wiadomo), być jak najkrótszy (Plugin dłuższy nie oznacza że jest lepszy ale o optymalizacji Kodu powiem potem) i być jak najszybszy (i nie chodzi tu o to żeby zamiast czegoś na 5 sekund dawać na 3 - chodzi o szybkie działanie - To też przybliżę potem).

Patrząc na sam początek widzimy biblioteki. Są one zbiorem konkrenych funkcji z których będziemy korzystać aby nasz plugin działał tak jak chcemy. Bardzo Trudno mi to opisać więc odwołam się do naszego smakowitego przykładu - Zapakowana zupa chińska. Aby cokolwiek z nią zrobić trzeba ją najpierw otworzyć. Więc zaglądamy do szuflady i tam znajdujemy nożyczki. Bierzemy je i przecinamy opakowanie. Gdy chcemy wsypać jej zawartość szukamy naczynia, więc bierzemy miskę i do niej wsypujemy makaron z niej. Przydało by się wstawić gorącą wodę na nią i zalać miskę , więc bierzemy czajnik z kuchenki , podchodzimy do kranu, nalewamy wodę do niego i wstawiamy. W tym przykładzie Kolejno szuflada, Szafka z miskami, Kuchenka i Kran to biblioteki a w nich znajdują się konkretne rzeczy. Nie rozumiecie? Trochę wyobraźni. To teraz trzasnę kodzik do "przygotowania zupy" to co już tu opisałem :)

Uświadamiamy naszemu pseudo "serwerowi" żeby przygotował się na skorzystanie z tych rzeczy

#include <szuflada>
#include <szafka>
#include <kuchenka>
#include <kran>

No dobra. Czas na funkcje.

Głowna funkcją w naszych pluginach będzie plugin_init() . Służy on tak naprawdę do przygotowania serwera na pewne wydarzenia i rzeczy. W nim rejestrujemy moment śmierci, Obrażeń, startu rundy, odrodzeniu gracza i wszystkiego innego co dzieje się na serwerze (a jest tego naprawdę dużo). Rejestracje omówię na podstawie - czyli rejestracji wpisanej rzeczy w kosnoli.
register_clcmd (żeby zrozumieć przetłumaczę - rejestruj_klientakomende) uświadamiamy nasz plugin żeby zwrócił uwagę gdy gracz wpisze coś w konsoli. Po otwarciu nawiasów wpisujemy to na co ma plugin zwrócić uwagę - przecinek - co ma wykonać (funckje) po wpisaniu tego (złapaniu momentu).
Tyle chyba o tym. Brak takiej funkcji nie spodoba się serwerowi i odmówi on posłuszeństwa (plugin nie będzie działał).

Drugą funkcją z której często będziecie korzystać to plugin_precache. Łopatologicznie - w nim przygotowujemy pliki z których będziemy korzystać w pluginie tj. modele, dźwięki, spr'y i inne. Bez takiego przygotowania plików plugin Nie będzie działał a nawet wyłączy nam serwer. Znasz uczucie kiedy robisz Sobie płatki na mleku, wsypujesz płatki do miski a okazuje się że nie ma mleka? "Nasz serwer czuje to samo!" kiedy chce skorzystać z modelu/dźwięku na któy nie był przygotowany.

Dobra - żeby nie było że jesteśmy sadystami. Serwer ma swoje ograniczenia Większość może zapytać - jak to ? Czemu? A temu. Sytuacja jest podobna jak święta lub rodzinne spotkania u babci. Siedzisz , nigdzie nie wyjdziesz a na dodatek słyszysz miłe babcine "Może coś jeszcze? Na pewno nie jesteś głodny?" i mimo wyraźnego i stanowczego "Oj nie babciu" dostajesz porcje "dla pułku wojska". Wedle świętej zasady "nie czyń drugiemu co Tobie nie miłe" dotyczącej również naszych serwerów i stanowisk pracy nie mścimy się na nim po babcinych obiadach. Im serwer ma więcej modeli/dźwięków/Sprów/Plików/wadów itp do obsłużenia tym woliej pracuje i gracze są niezadowoleni. Oczywiście nie dotyczy się tylko i wyłącznie plików obsługiwanych. Również zmienne ( o których później ) mają swoje ograniczenia. Wszystko starajmy się robić jak najprościej.

To lecimy ze zmiennymi. Po co one? Bez nich ciężko cokolwiek pisać (aczkolwiek - można) Są to "rzeczy" którymi operujemy w pluginie żeby ułatwić sobie (i naszemu serwerowi) życie. Nie jasne? To teraz spróbuje to wyjaśnić.
Przyjmijmy że interesuje nas Życie gracza. Naszym pluginem pytamy o to serwer.
My - "Siema Serwer. Słuchaj - rzuć informacją o życiu Gracza o ID 1" (przypominam że (prawie) wszystko bazuje na liczbach)
Serwer - "Ty Stary no ja nie wiem."
Co w takim razie? W dokumentacji znajdujemy że w pewnej bibliotece jest możliwość zapytania o życie gracza. Więc dajemy znać serwerowi.

My - "Serwer słuchaj - amxmodx wie ile Gracz 1 ma hp. Weź go zapytaj bo ja nie umiem"
Serwer - "Te amxmodx Ile gracz 1 ma hp"
amxmodx - "100!"
Serwer - "Ma 100 Hp "
My - "dzięki"

W tym momencie mamy 5 operacji. Każemy serwerowi pytać o daną rzecz bibliotekę serwer wykonuję tą operacje, operacja zwraca wynik, wynik jest przejmowany przez serwer i serwer przekazuje go nam. No dobra Wszystko fajnie tylko to dla nas nie korzystne gdy robimy kilka operacji.

My - "Serwer rzuć hp gracza 2"
Serwer - "amxmodx daj hp gracza 2"
amxmodx - "95"
Serwer - "95"
My - "dzięki."
--Wykonuje operacje--
My - "Daj znowu hp gracza 2 bo nie pamiętam"
Serwer - amxmodx-serwer-my
-- operacja --
My - "daj znowu"

Serwer-amxmodx-serwer-my

Nie długo? Nie łatwiej byłoby Stworzyć zmienną w której zapamietamy takowe Hp? Wtedy wykonamy tylko jedno zapytanie - wykorzystamy serwer raz i wszyscy będą zadowoleni.


My - "Serwer rzuć hp 3 - ja zapiszę sobie ją"
Serwer - "amxmodx daj hp 3ki"
amxmodx - "50"
Serwer - "50!"
My - zapisujemy 50 do zmiennej.


Pomaga to też zautomatyzować plugin. wyobraź Sobie - że do życia mamy dodać 5. i co szybciej wykonać? Stworzyć zmienną i do niej dodać 5 czy sprawdzić każdą mozliwą kombinacje? Odpowiedź wiadoma ;)

Wracając do Funkcji. Z nimi jest zasada podobna jak ze zmiennymi - ułatwiamy Sobie nimi życie. Nie we wszystkich miejscach możemy operować konkretnymi danymi (sprawdzenie zadanych obrażeń gracza przy jego Respie - chyba ze w odpowiednim momencie Zapiszemy ją do zmiennej) ale przede wszystkim by zmienić nasze 100 linijek w 20. Jak? z Grubsza wyjaśnię to na zasadzie dodawania kilku broni do gracza.

Jeśli nasz gracz "Zrobi coś!" ma dodawać mu 3 bronie i ammo do nich. Za to jak gracz zrobi "Co innego!" ma mu dodać tamte 3 bronie , ammo do nich i dodatkowe dwie. Jak to wygląda?

if(Zrobi coś)
{
//Dodaje Bron1//Dodaje Ammo2

//Dodaje Bron2
//Dodaje Ammo2
//Dodaje Bron3
//Dodaje Ammo4
}
if(Coś innego!)
{

//Dodaje Bron1//Dodaje Ammo2

//Dodaje Bron2
//Dodaje Ammo2
//Dodaje Bron3
//Dodaje Ammo4

//Dodaje Bron_dodatkową1//Dodaje Ammo_dodatkową2

//Dodaje Bron_dodatkową2
//Dodaje Ammo_dodatkową2
}


Działa? No zadziała. Ale to nie to. Wykonamy jedna rzecz dla obu i kiedy będziemy chcieli zmienić musimy to robic w dwóch miejscach. A gdybyśmy uświadomili serwerowi żeby wykonał jedną rzecz w której będzie dodawanie 3 broni a w "Cos innego!" dodali dodatkowe dwie? Wygląda to tak


public nasza_funkcja()
{

//Dodaje Bron1//Dodaje Ammo2

//Dodaje Bron2
//Dodaje Ammo2
//Dodaje Bron3
}
if(Zrobi coś)
{
nasza_funkcja();
}
if(Coś innego!)
{

nasza_funkcja();
//Dodaje Ammo4

//Dodaje Bron_dodatkową1//Dodaje Ammo_dodatkową2

//Dodaje Bron_dodatkową2
//Dodaje Ammo_dodatkową2
}

Jakim Cudem To działa? O.o Otóż w momencie kiedy gracz "Zrobi Coś!" Dajemy znak serwerowi żeby Wykonał nasza_funkcja() a jak już wykona to żeby dalej Działał od momentu wywołania Funkcji. Czyli w "Coś Innego!" doda bronie i doda Dodatkową. Tworzenie funkcji jest nam potrzebne w wyłapaniu momentów (Eventów) na serwerze - a w niej dajemy obsługę. Tadam :)


Mam nadzieję ze w pewnym sensie "Rozjaśniłem" wam Sprawę z Kodowaiem. Poradnik ten będzie Uzupełniany w miarę potrzeb (jak będzie kilka osób które czegoś nie rozumieją proszę pisać - swoimi sławami będe to dodawał o ile będe miał o tym pojęcie:D )

Niedługo zrobie na nim porządki - pogrupuję Poradnik tak żeby był przejrzysty. ;)

ZAKAZ KOPIOWANIA! Poradnik ma prawo być tylko tu i na moim blogu.
dasiek (30.11.2012 21:30):
Dziękuję chłopakom z ekipy Forum (modom, Adminom i ST) za pomysły i propozycję do poradnika. Co prawda - nie dałem wszystkich ale jak już wcześniej wspomniałem będę nadrabiał. :)
dasiek (30.11.2012 21:30):
Jeśli coś jest nie jasnego, gdzieś jest błąd, coś nie tak - napisz!
(30.11.2012 21:47):
A Juniorom to już nie podziękowałeś :foch:
dasiek (30.11.2012 21:50):
Oczywiście - Najlepiej na mnie zwalić wszystko
Panel Admina Masz? - Jesteś Adminem.
Nie komplikuj Sobie "Juniorze" (żeby nie pisać Gówniarzu) życia :P
(30.11.2012 21:50):
btw.
Plugin - AmxModX - Metamod:P - HLDS - Metamod:P - AmxModX - Plugin
Serwer nie jest pośrednikiem, to AMXX jest pośrednikiem, który korzysta z pomocy Metamoda:P
Reszta zdaje się być ok.
(30.11.2012 21:52):
Ja sobie życie kompiluję :) Dostaję istny life.amxx
btw. Bardzo dobry poradnik. Poczułem się jak przedszkolak.
dasiek (30.11.2012 21:57):
Tak jak na początku wspomniałem - może zawierać on nie dociągnięcia, sprzeczności "i innych badziewów" - chodziło mi o wytłumaczenie sposobu rozumowania.

Wielkie dzięki ;)
speedkill (01.12.2012 08:47):
Gratulacje ;)

  • +
  • -
  • 49

#2 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1 679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Napisano 30.11.2012 21:43

O, też tak właśnie zawsze rozumiałem ogólnie programy :)
  • +
  • -
  • 0

#3 Nestea****Lemon

    Herbata ?!

  • Użytkownik

Reputacja: 81
Zaawansowany

  • Postów:313
  • GG:
  • Imię:Dawid
  • Lokalizacja:Radzyń Podlaski
Offline

Napisano 01.12.2012 08:01

Ta zupka chińska to rzeczywiście dobry przykład , aby wytłumaczyć działanie pluginu :D
  • +
  • -
  • 0

cY2lZ.gif

http://nestea-tdm.cba.pl <---- Nestea****Lemon Blog


Aktualnie tworzę moda do Minecrafta ^D^


#4 K!113r

    Teraz to chyba Sławek kek

  • Power User

Reputacja: 387
Wszechpomocny

  • Postów:868
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Piotrków Tryb.
Offline

Napisano 01.12.2012 23:07

Trafne porównania, na pewno przemówią do zielonych (nie chodzi mi o moderatorów ^^ ).

Kilka literówek (znalazłem 3)
Nie ma takiego edytora "nontatnik" :D

(funckje) po wpisaniu tego (złapaniu momentu)


swoimi sławami będe to dodawał


Która grupa użytkowników to sławy? Przyjaciele? :D
dasiek (02.12.2012 10:52):
Miało być słowami i notatnik panie czepialski :<

  • +
  • -
  • 2

DarkGL to mój autorytet.

skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować


#5 Jamdzam

    Wszechwidzący

  • Użytkownik

Reputacja: 74
Pomocny

  • Postów:296
  • GG:
  • Imię:Kacuś
  • Lokalizacja:Bytom
Offline

Napisano 07.12.2012 20:44

ja akutrat w ferie i swieta sie będę zanjmowac jakimis projektami w PAWN'ie bo w szkole to pascala zaczolem i trzeba bylo by sie troszke jezykow pouczyc wiec ten poradnik mi moze sie przydac oczywisci plusik dla cb
  • +
  • -
  • 0

Sprawdź to !

COD By Jamdzam_v3

 


#6 Filip1512

    Wszechmogący

  • Power User

Reputacja: 137
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 13.12.2012 02:02

ja akutrat w ferie i swieta sie będę zanjmowac jakimis projektami w PAWN'ie bo w szkole to pascala zaczolem i trzeba bylo by sie troszke jezykow pouczyc wiec ten poradnik mi moze sie przydac oczywisci plusik dla cb


Z taką składnią to pozostaje mi życzyć powodzenia.

@Topic
A gdzie cały kod na zrobienie chińskiej zupki?: (
dasiek (13.12.2012 10:13):
Mam nadzieje że na tym poradniku nie skończy się - w dalszych poradnikach będę go rozszerzał.

  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#7 Olcia

    Życzliwy

  • Girl

Reputacja: 0
Nowy

  • Postów:22
  • Imię:Aleksandra
  • Lokalizacja:Nowy Tomyśl
Offline

Napisano 14.08.2013 23:01

Zrozumiałam tak:

plugin_init-głowny plugin odpowiadający za yy nie wiem dokłądnie.

plugin_precache-podrzedny plugin odpowiadajacy za dzwieki modele itp

register_clcmd- nie rozumiem za bardzo.

 

Jestem w tym zielona więc wybacz moje być może głupie pytanie: czy to jest cała budowa pluginu?

Jakbyś mógł to mi wytłumacz co nieco :)


  • +
  • -
  • 0

Paczka WesternMod [7%]

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

 

Poszukuję nauczyciela od pisania pluginów ! :D

Kontakt gg: 32131961


#8 Kot-CSHH

    Wszechwidzący

  • Użytkownik

Reputacja: 51
Pomocny

  • Postów:272
  • Imię:Patryk
  • Lokalizacja:Żory
Offline

Napisano 14.08.2013 23:09

Zrozumiałam tak:

plugin_init-głowny plugin odpowiadający za yy nie wiem dokłądnie.

plugin_precache-podrzedny plugin odpowiadajacy za dzwieki modele itp

register_clcmd- nie rozumiem za bardzo.

 

Jestem w tym zielona więc wybacz moje być może głupie pytanie: czy to jest cała budowa pluginu?

Jakbyś mógł to mi wytłumacz co nieco :)

 

register_clcmd rejestrujesz komendę na czacie, na say lub say_team, można wykorzystać w ten sposób:

register_clcmd("say /menu", "funkcja")

  • +
  • -
  • 0

Zapraszam na najlepszy Surf XP Mod w sieci: 31.186.83.188:27069

b_350_20_692108_381007_FFFFFF_000000.png


#9 Olcia

    Życzliwy

  • Girl

Reputacja: 0
Nowy

  • Postów:22
  • Imię:Aleksandra
  • Lokalizacja:Nowy Tomyśl
Offline

Napisano 14.08.2013 23:16

Czyli register odpowiada za komendy na czacie?

Podałeś przykład.

Po wpisaniu /menu wyskoczy ta "funkcja" tak?

A jak tą funkcje nwm zakodować :D ?


  • +
  • -
  • 0

Paczka WesternMod [7%]

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

 

Poszukuję nauczyciela od pisania pluginów ! :D

Kontakt gg: 32131961


#10 Czajken

    Nowy

  • Użytkownik

Reputacja: 4
Nowy

  • Postów:5
  • Imię:Tomasz
  • Lokalizacja:Gorzów
Offline

Napisano 14.08.2013 23:27

register_clcmd("say /menu", "jakasfunkcja")

 

/menu - po wpisaniu takiego tekstu wywoła nam się funkcja 

jakasfunkcja - nazwa funkcji ktora zostaje wywołana poprzez komende /menu

 

I teraz w tej funkcji mozemy dodać wyswietlanie jakiegos tekstu na czacie.

 

Na przykład:

#include <amxmodx> // główny moduł 

public plugin_init() 
{
	register_plugin("Plugin", "Version", "Autor") // rejestracja pluginu
	
	register_clcmd("say /menu", "jakasfunkcja")   // przypisujemy komende pod ktora ma zostac wywolana funkcja
}
public jakasfunkcja(id)
{
	if(!is_user_alive(id))		// jesli gracz jest martwy to
		return PLUGIN_HANDLED	// funkcja zostaje zatrzymana, plugin nie patrzy na dalszy kod w tym publicu
	
	client_print(id, print_chat, "Uzyles funkcje jakasfunkcja") // wypisujemy na czacie tekst podany w nawiasie
	return PLUGIN_HANDLED // zwracamy wartosc ( chyba tak to sie nazywa jeszcze wszystkiego nie wiem :D )
}

  • +
  • -
  • 0

#11 Olcia

    Życzliwy

  • Girl

Reputacja: 0
Nowy

  • Postów:22
  • Imię:Aleksandra
  • Lokalizacja:Nowy Tomyśl
Offline

Napisano 14.08.2013 23:39

 

register_clcmd("say /menu", "jakasfunkcja")

 

/menu - po wpisaniu takiego tekstu wywoła nam się funkcja 

jakasfunkcja - nazwa funkcji ktora zostaje wywołana poprzez komende /menu

 

I teraz w tej funkcji mozemy dodać wyswietlanie jakiegos tekstu na czacie.

 

Na przykład:

#include <amxmodx> // główny moduł 

public plugin_init() 
{
	register_plugin("Plugin", "Version", "Autor") // rejestracja pluginu
	
	register_clcmd("say /menu", "jakasfunkcja")   // przypisujemy komende pod ktora ma zostac wywolana funkcja
}
public jakasfunkcja(id)
{
	if(!is_user_alive(id))		// jesli gracz jest martwy to
		return PLUGIN_HANDLED	// funkcja zostaje zatrzymana, plugin nie patrzy na dalszy kod w tym publicu
	
	client_print(id, print_chat, "Uzyles funkcje jakasfunkcja") // wypisujemy na czacie tekst podany w nawiasie
	return PLUGIN_HANDLED // zwracamy wartosc ( chyba tak to sie nazywa jeszcze wszystkiego nie wiem :D )
}

 

 

Sam to napisałeś?

    register_clcmd("say /menu", "jakasfunkcja") // przypisujemy komende pod ktora ma zostac wywolana funkcja

Tego np nie rozumiem.

Ogólnie większości nie kapuję.


  • +
  • -
  • 0

Paczka WesternMod [7%]

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

 

Poszukuję nauczyciela od pisania pluginów ! :D

Kontakt gg: 32131961


#12 Kot-CSHH

    Wszechwidzący

  • Użytkownik

Reputacja: 51
Pomocny

  • Postów:272
  • Imię:Patryk
  • Lokalizacja:Żory
Offline

Napisano 15.08.2013 00:37

 

 

register_clcmd("say /menu", "jakasfunkcja")

 

/menu - po wpisaniu takiego tekstu wywoła nam się funkcja 

jakasfunkcja - nazwa funkcji ktora zostaje wywołana poprzez komende /menu

 

I teraz w tej funkcji mozemy dodać wyswietlanie jakiegos tekstu na czacie.

 

Na przykład:

#include <amxmodx> // główny moduł 

public plugin_init() 
{
	register_plugin("Plugin", "Version", "Autor") // rejestracja pluginu
	
	register_clcmd("say /menu", "jakasfunkcja")   // przypisujemy komende pod ktora ma zostac wywolana funkcja
}
public jakasfunkcja(id)
{
	if(!is_user_alive(id))		// jesli gracz jest martwy to
		return PLUGIN_HANDLED	// funkcja zostaje zatrzymana, plugin nie patrzy na dalszy kod w tym publicu
	
	client_print(id, print_chat, "Uzyles funkcje jakasfunkcja") // wypisujemy na czacie tekst podany w nawiasie
	return PLUGIN_HANDLED // zwracamy wartosc ( chyba tak to sie nazywa jeszcze wszystkiego nie wiem :D )
}

 

 

Sam to napisałeś?

    register_clcmd("say /menu", "jakasfunkcja") // przypisujemy komende pod ktora ma zostac wywolana funkcja

Tego np nie rozumiem.

Ogólnie większości nie kapuję.

 

 

 

Ogólnie wziąłem to z pluginu Surf XP Professional, tam jest wykorzystana ta komenda, masz tak: 

register_clcmd("say /komenda", "wywoływana funkcja")

a później tylko

public nazwa funkcji
{
co ona ma robić
}

  • +
  • -
  • 0

Zapraszam na najlepszy Surf XP Mod w sieci: 31.186.83.188:27069

b_350_20_692108_381007_FFFFFF_000000.png


#13 dasiek

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Autor tematu
  • Junior Admin

Reputacja: 2 077
Godlike

  • Postów:5 706
  • Imię:Adaś
  • Lokalizacja:No teraz trochę dalej od WWy
Offline

Napisano 15.08.2013 09:23


Zrozumiałam tak:
plugin_init-głowny plugin odpowiadający za yy nie wiem dokłądnie.

Funkcja - nie plugin. 

 


plugin_precache-podrzedny plugin odpowiadajacy za dzwieki modele itp

funkcja - dalej powiedzmy ok. 


register_clcmd- nie rozumiem za bardzo.

 


register_clcmd (żeby zrozumieć przetłumaczę - rejestruj_klientakomende) uświadamiamy nasz plugin żeby zwrócił uwagę gdy gracz wpisze coś w konsoli. Po otwarciu nawiasów wpisujemy to na co ma plugin zwrócić uwagę - przecinek - co ma wykonać (funckje) po wpisaniu tego (złapaniu momentu).

 


Jestem w tym zielona więc wybacz moje być może głupie pytanie: czy to jest cała budowa pluginu?
Jakbyś mógł to mi wytłumacz co nieco

 

Nie do końca wiem co masz na myśli "budowa pluginu". Jeśli rozszerzysz ten termin - chętnie go wytłumaczę ;)

 

 


  • +
  • -
  • 0

#14 Pr0-Sc0uT

    Profesjonalista

  • Zbanowany

Reputacja: 23
Życzliwy

  • Postów:154
  • Imię:Aleksander
  • Lokalizacja:Kościerzyna
Offline

Napisano 15.08.2013 13:16

CheQ jak dla mnie Olcia chciała powiedzieć:

 

Czy plugin jest wystarczająco gotowy w użyciu na serwer?


Użytkownik ProScout edytował ten post 15.08.2013 13:39

Diablo mod Quests = Koniec

Surf EXP Mod = [ | | | | | | | | | | ]


#15 Olcia

    Życzliwy

  • Girl

Reputacja: 0
Nowy

  • Postów:22
  • Imię:Aleksandra
  • Lokalizacja:Nowy Tomyśl
Offline

Napisano 15.08.2013 17:52

Tak.

Ogólnie jeszcze mam taki problem.

 

#include <amxmodx> // główny moduł

public plugin_init()
{
    register_plugin("Plugin", "Version", "Autor") // rejestracja pluginu
    
    register_clcmd
("say /menu", "jakasfunkcja") // przypisujemy komende pod ktora ma zostac wywolana funkcja
}
public jakasfunkcja(id)
{
    if(!is_user_alive(id))        // jesli gracz jest martwy to
        return PLUGIN_HANDLED    // funkcja zostaje zatrzymana, plugin nie patrzy na dalszy kod w tym publicu
    
    client_print
(id, print_chat, "Uzyles funkcje jakasfunkcja") // wypisujemy na czacie tekst podany w nawiasie
    return PLUGIN_HANDLED // zwracamy wartosc ( chyba tak to sie nazywa jeszcze wszystkiego nie wiem :D )

 

 

Skąd mam wiedzieć kiedy public piasc is_user_alve moge czymś zastąpić? Nie rozumiem nadal :D


  • +
  • -
  • 0

Paczka WesternMod [7%]

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

 

Poszukuję nauczyciela od pisania pluginów ! :D

Kontakt gg: 32131961


#16 K!113r

    Teraz to chyba Sławek kek

  • Power User

Reputacja: 387
Wszechpomocny

  • Postów:868
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Piotrków Tryb.
Offline

Napisano 15.08.2013 21:01

Nie rozumiem czego nie rozumiesz, chodź rozumiem, że możesz czegoś nie rozumieć.

"public" - odsyłam do tutorialu dotyczącym rodzajów funkcji w pawnie (public i_ten_napis_za_nią(tu_możesz_mieć_pewne_argumenty) taki zapis sprawia, że tworzysz sobie publiczną funkcje [jej własności poznasz w tutorialu, o którym wcześniej napisałem] fraza po "public" to nazwa funkcji, coś jak imię, w nawiasach może nic nie być [jak przy plugin_init()], lecz może coś być)

[troche źle napisałem tego posta, myśle że się połapiesz, nie chce mi się tego przerabiać :D]

 

tutaj przykład

(...)
public plugin_init()
{
register_plugin("da", "da", "da")
register_clcmd("say /test1", "funkcja_komendy1")
register_clcmd("say /test2", "funkcja_komendy2")
}
(...) // jakiś kod pomiędzy
public funkcja1()
{
client_print(0, 3, "To sie wyswietla kazdemu")
}
// teraz czas wywołać tą funkcje w jakimś momencie
public funkcja_komendy1(id) // register_clcmd przesyła jako pierwszy argument id gracza który wpisał daną fraze w konsoli, możemy to zawsze użyć :)
{
funkcja1() //tak wywołujemy, nie podajemy żadnych parametrów do przesłania dla funkcja1 gdyż przy tworzeniu sobie tego nie zażyczyliśmy
}
public funkcja2(liczba) // funkcja posiada parametr, jest nią liczba całkowita, więc możemy sobie przy wywołaniu tej funkcji coś przesłać
// niech to będzie funkcja zwiększająca liczbę o 5
{
new wynik = liczba + 5 //do zmiennej która ma być wynikiem przypisujemy wartość argumentu i od razu dodajemy 5
return wynik //nasza funkcja będzie nad wyraz ciekawa, gdyż od razu będzie nam zwracała wynik
}
public funkcja_komendy2(id)
{
// tu sobie wywołamy powyższą funkcje i wyślemy liczbe którą chcemy powiększyć o 5, lecz przygotujmy się też na wynik
new zwracany_wynik_funkcji
zwracany_wynik_funkcji = funkcja2(8) // w zmiennej zwracany_wynik_funkcji będzie się znajdować liczba 13
// teraz ją wypiszemy jeszcze, a co
client_print(id, print_chat, "zwrocona zostala liczba %d", zwracany_wynik_funkcji) // można użyć print_chat lub 3, jest to to samo, gdyż w enum'ie za fraze print_chat podstawiane jest 3, poczytaj również o enumach ^^
// więcej nie ma co mieszać w funkcji

is_user_alive() używamy gdy chcemy sprawdzić czy gracz żyje (najlepiej przed działaniami na graczu), po co zastępować takie coś? to wystarczy :)

 

Napisz czego nie rozumiesz w drobniejszych szczegółach to na pewno pomożemy, bo tak to ja nie rozumiem,

}


  • +
  • -
  • 1

DarkGL to mój autorytet.

skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować


#17 Olcia

    Życzliwy

  • Girl

Reputacja: 0
Nowy

  • Postów:22
  • Imię:Aleksandra
  • Lokalizacja:Nowy Tomyśl
Offline

Napisano 15.08.2013 21:07

No tak. Jak chciałabym, żeby "funkcja" zastąpić powiedzmy 5killi w jedner rundzie= dodatkowe 4000$ to co mam wpisać, jak mam to uzupełnić? To mnie nurtuje.

Ten poradnik skupia się głownia wokół ffa itp tak? A co powiedzmy z chowanym, zombie itp ??


  • +
  • -
  • 0

Paczka WesternMod [7%]

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

 

Poszukuję nauczyciela od pisania pluginów ! :D

Kontakt gg: 32131961


#18 Filip1512

    Wszechmogący

  • Power User

Reputacja: 137
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 15.08.2013 22:35

No tak. Jak chciałabym, żeby "funkcja" zastąpić powiedzmy 5killi w jedner rundzie= dodatkowe 4000$ to co mam wpisać, jak mam to uzupełnić? To mnie nurtuje.
Ten poradnik skupia się głownia wokół ffa itp tak? A co powiedzmy z chowanym, zombie itp ??


Nie ma takiej zasady, że "poradnik jest na ffa itp", poradnik jest dla każdego moda, tylko w przypadku dodatkowych bibliotek są dostępne kolejne funkcje do wykorzystania.
W przypadku gdzie chcesz zrobić, aby za 5 fragów w 1 rundzie było +4000$ to napisałem kod, który myślę, ze powinien działać i myślę, że jest w nim w miare jasno wszystko opisane.

#include <amxmodx>
#include <cstrike>

#define PLUGIN "4000$ za 5 fragow"
#define VERSION "1.0"
#define AUTHOR "Filip / `NN"

new fragi[33];	// tworzymy nowa tablice 33-elementowa zeby byla dla kazdego gracza

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_event("DeathMsg", "DeathMsgEvent", "a")	// rejestrujemy zdarzenie smierci
	register_event("HLTV", "NowaRunda", "a", "1=0", "2=0")	// rejestrujemy zdarzenie nowej rundy
}

public DeathMsgEvent(){
	new zabojca = read_data(1)	// tworzymy nowa zmienna w ktorej bedzie zapisywany id zabojcy
	// new ofiara = read_data(2)	// ta zmienna nie jest potrzebna w tym pluginie, ale warto wiedziec, ze drugi parametr funkcji DeathMsg to id ofiary
	// new hs = read_data(3)	// jak wyzej, nie jest potrzebna w tym pluginie, ta zmienna sprawdza czy "był" headshot
	
	if(zabojca && is_user_connected(zabojca)){	// tworzymy petle, sprawdzamy, jesli "zabojca" cos zrobil, a dla optymalnego kodu sprawdzamy czy zabojca nadal jest polaczony z serwerem
		if(fragi[zabojca]++ == 5)	// jesli tak, to sprawdzamy czy jesli zwiekszymy wartosc tablicy "fragi" o 1, to czy bedzie ona rowna 5
			cs_set_user_money(zabojca, cs_get_user_money(zabojca)+4000)	// jesli tak, to wykonuje sie dalsza czesc funkcji, czyli dodane kasy
	}
}

public NowaRunda(id){
	fragi[id] = 0	// tutaj ustawiamy wartosc tablicy jaka ma sie ustawic kazdemu graczowi ustawic podczas nowej rundy, w tym przypadku chcemy ja wyzerowac, wiec nadajemy jej wartosc "0"
}

  • +
  • -
  • 1
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#19 Olcia

    Życzliwy

  • Girl

Reputacja: 0
Nowy

  • Postów:22
  • Imię:Aleksandra
  • Lokalizacja:Nowy Tomyśl
Offline

Napisano 16.08.2013 00:32

Ogólnie rozumiem już tylko nie wiem skąd powiedzmy to wytrzasnąłeś.

    new zabojca = read_data(1)    // tworzymy nowa zmienna w ktorej bedzie zapisywany id zabojcy
    // new ofiara = read_data(2)    // ta zmienna nie jest potrzebna w tym pluginie, ale warto wiedziec, ze drugi parametr funkcji DeathMsg to id ofiary    // new hs = read_data(3)    // jak wyzej, nie jest potrzebna w tym pluginie, ta zmienna sprawdza czy "był" headshot    

Sam to napisałeś? czy wzorując się? Kwestia doświadczenia czy jak?


  • +
  • -
  • 0

Paczka WesternMod [7%]

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

 

Poszukuję nauczyciela od pisania pluginów ! :D

Kontakt gg: 32131961


#20 dasiek

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Autor tematu
  • Junior Admin

Reputacja: 2 077
Godlike

  • Postów:5 706
  • Imię:Adaś
  • Lokalizacja:No teraz trochę dalej od WWy
Offline

Napisano 16.08.2013 08:12


Ten poradnik skupia się głownia wokół ffa itp tak? A co powiedzmy z chowanym, zombie itp ??

 

poradnik ten skupia się na wszystkim co łączy i ffa , i 4fun i zombie i chowany i coda. skupia się na scriptingu tych rzeczy . 


Sam to napisałeś? czy wzorując się? Kwestia doświadczenia czy jak?

 

Filip1512 przygotował serwer żeby reagował na śmierć gracza. o czym mówi ta linijka


register_event("DeathMsg", "DeathMsgEvent", "a") // rejestrujemy zdarzenie smierci

 

W ten sposób plugin zareaguje za każdym razem gdy będzie "śmierć" i wykona funkcje (w tym przypadku - DeathMsgEvent) 

Dodatkowo kolega Filip1512 wie że wydarzenie śmierci ma swoje rzeczy bo żeby ktoś zginął jest wymagany ktoś kto zabije , kogoś kogo się zabija i broń , jak można w liście eventów HL1 znaleźć dodatkowo ten event zawiera informacje czy zabito HS'em.

szybki link.: http://wiki.amxmodx....Events#DeathMsg tu akurat o evencie Śmierci. 


  • +
  • -
  • 1




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

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