hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.04.28. 09:35



Jelenlévő felhasználók

Jelenleg 526 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 526 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználó az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Lezárt fórum  A témát lezárták, nem szerkesztheted a hozzászólásaid, és nem küldhetsz új hozzászólást.  [ 11 hozzászólás ]  Oldal 1 2 Következő
Szerző Üzenet
 Hozzászólás témája: Plugin írás.
HozzászólásElküldve: 2013.10.15. 19:43 
Offline
Jómunkásember

Csatlakozott: 2013.02.11. 16:06
Hozzászólások: 491
Megköszönt másnak: 96 alkalommal
Megköszönték neki: 50 alkalommal
[kozep]Hello.[/kozep]
Nem igazán vagyok kezdő a scriptelésbe, minden tutorialt megcsináltam, végignéztem stb, de ebben a topicban mindenki írja le, amit tud a plugin írásban, és ezálltal, ha valaki nem tud valamit, talán megtanúlja, és ő is írhat valamit, hogy felvilágosítson másokat. Ezáltal pl azt értem, hogy kell elkezdeni egy plugin (azaz az incek)
Például, ami eszembe jut, erről kéne kicsit mesélni:
plugin_init
new get user healtg(id) vagy akármilyen más, amit new-vel kell írni
define
if, else if
És még a fontosabb dolgok, és aki valamit tudni akar, ebben a témában kérdezze, és remélhetőleg válaszol rá valaki, aki tudja.

_________________
Rengeteg új beszólás eléréséhez kattints IDE (Ezek alapból sank soundshoz készültek)

Steam profil:
[steam]http://steamcommunity.com/profiles/76561198089487307[/steam]


Hozzászólás jelentése
Vissza a tetejére
   
 
 Hozzászólás témája: Re: Plugin írás.
HozzászólásElküldve: 2013.10.15. 20:57 
Offline
Felfüggesztve
Avatar

Csatlakozott: 2013.06.09. 18:47
Hozzászólások: 2004
Megköszönt másnak: 1 alkalommal
Megköszönték neki: 220 alkalommal
[kozep]INC KÉSZÍTÉSE[/kozep]

Sziasztok!
Most azt fogom fogom leírni, hogyan készítsünk inc-et. Ezeket sok mindenre lehet használni. Pl.: Pluginok közötti kommunikáció, stock több pluginban alkalmazása, forward készítése stb.

1. Inc fájl kezdete, fájlnév:
Az inc fájloknak az első négy sorának igy kell kinéznie:
SMA Forráskód: [ Mindet kijelol ]
  1. #if defined _pelda_included
  2. #endinput
  3. #endif
  4. #define _pelda_included

A példa szerint nekem majd ezt kell a plugin elejére írnom:
SMA Forráskód: [ Mindet kijelol ]
  1. #include <pelda>

És a fájl neve ez lesz:
Kód:
pelda.inc

Értelemszerűen ha a "pelda" szót megváltoztathatod.

2. Stock
Az inc fájlba lehet stock-ot írni. Ezzel azt érjük el, hogy ha egy stock-ot több plugin-ba szeretnénk használni, akkor nem kell az összesbe beleírni.
Egy példa: Színes chat + ékezetek
De hogy itt is legyen valami írok még egy példát:
(Ha valakit érdekel bomba csíkot lehet vele csinálni :mrgreen:)
Van például ez a stock-om:
SMA Forráskód: [ Mindet kijelol ]
  1. stock progress_bar(index,pbtime)
  2. {
  3. message_begin(MSG_ONE,108,{0,0,0},index)
  4. write_byte(pbtime)
  5. write_byte(0)
  6. message_end()
  7. }

Ezt szeretném több plugin-ban használni, inc-et csinálok neki.
Kezdés:
SMA Forráskód: [ Mindet kijelol ]
  1. #if defined _progressbar_included
  2. #endinput
  3. #endif
  4. #define _progressbar_included

Stocknál ha másik inc-et használunk azt is fel kell tüntetni:
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>

Es a végére a stock:
SMA Forráskód: [ Mindet kijelol ]
  1. stock progress_bar(index,pbtime)
  2. {
  3. message_begin(MSG_ONE,108,{0,0,0},index)
  4. write_byte(pbtime)
  5. write_byte(0)
  6. message_end()
  7. }

És végül így fog kinézni:
SMA Forráskód: [ Mindet kijelol ]
  1. #if defined _progressbar_included
  2. #endinput
  3. #endif
  4. #define _progressbar_included
  5.  
  6. #include <amxmodx> //stock-hoz szükséges include
  7.  
  8. stock progress_bar(index,pbtime) //a stock
  9. {
  10. message_begin(MSG_ONE,108,{0,0,0},index)
  11. write_byte(pbtime)
  12. write_byte(0)
  13. message_end()
  14. }

Egy inc-be több stock-ot is rakhatunk.

3. Forward
Amit az előbbiben leírtam nem fogom még egyszer leírni! A forward-ot arra lehet használni, amikor "történik valami" a játékban (pl.: Zombi módban megfertőznek, stb.) arra valamilyen funkciót rakni. Sokszor ezt több plugin-ban is használni szeretnénk erre vannak az inc-ek.
Szükségünk lesz egy vezérlő plugin-ra, ebből fogjuk irányítani...
A kezdést nem írom le. Az esemény amit használni fogok, az ha valaki chat-be írja a "teszt" szót.
Példa: forwardtest.inc:
SMA Forráskód: [ Mindet kijelol ]
  1. #if defined _forwardtest_included
  2. #endinput
  3. #endif
  4. #define _forwardtest_included
  5.  
  6. forward test_command(id) //forward amit_szeretnél(pl:játékos ID)

"vezér plugin":
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2.  
  3. new fwd_testcmd //Egy változóra lesz szükségünk a forward-hoz
  4.  
  5. public plugin_init()
  6. {
  7. register_plugin("[INC] Forward teszt","1.0","Nandee") //Plugin neve, verzió, készítő
  8. fwd_testcmd=CreateMultiForward("test_command", ET_IGNORE, FP_CELL) //Funkciók: 1.amit az incbe a "forward" és a "(" közé írtunk
  9. register_clcmd("say teszt","cmd_teszt")
  10. }
  11.  
  12. public cmd_teszt(id)
  13. {
  14. client_print(id,print_chat,"Beirtad a chat-be a teszt szot!") //Chat üzenet
  15. new fwdtestret
  16. ExecuteForward(fwd_testcmd,fwdtestret,id) //1. a változó amitez elején megadtunk, 2.visszatérés, 3. A játékos ID-je
  17. }

Forward használata:
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <forwardtest> //inc
  3.  
  4. public plugin_init()
  5. {
  6. register_plugin("[INC] Forward teszt próba","1.0","Nandee") //Plugin neve, verzió, készítő
  7. }
  8.  
  9. public test_command(id)
  10. {
  11. client_print(id,print_chat,"A forward mukodik!") //Visszajelzés a chat-ben
  12. }


4. Native
Ehhez is ugyanúgy "vezér plugin"-ra lesz szükségünk mint a forward-hoz. Ez is sok mindenre használható, én a példámban egy olyan változót fogok készíteni, mint zombi módban a lőszer csomag(aki nem ismeri fizető eszköz). Ehhez már csak példákat írok szerintem ezekből már érteni lehet ;)
forintmod.inc:
SMA Forráskód: [ Mindet kijelol ]
  1. #if defined _forintmod_included
  2. #endinput
  3. #endif
  4. #define _forintmod_included
  5.  
  6. native get_user_forint(id)
  7. native set_user_forint(id,amount)

Vezér plugin:
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2.  
  3. new forint[33] //Egy változó amin a forintot tároljuk
  4.  
  5. public plugin_init()
  6. {
  7. register_plugin("[INC] Forint mod","1.0","Nandee") //Plugin neve, verzió, készítő
  8. }
  9.  
  10. public plugin_natives()
  11. {
  12. register_native("set_user_forint","native_set_user_forint",1)
  13. register_native("get_user_forint","native_get_user_forint",1)
  14. }
  15.  
  16. public native_get_user_forint(index)
  17. {
  18. return forint[index]
  19. }
  20. public native_set_user_forint(index,amount)
  21. {
  22. forint[index]=amount
  23. }

Példa a felhasználásra:
SMA Forráskód: [ Mindet kijelol ]
  1. #include <amxmodx>
  2. #include <forintmod> //inc
  3.  
  4. public plugin_init()
  5. {
  6. register_plugin("[INC] Forint mod teszt","1.0","Nandee") //Plugin neve, verzió, készítő
  7. register_clcmd("say /penz","cmd_penz") //játékos parancs
  8. register_clcmd("say /penzkell","cmd_penzkell") //játékos parancs
  9. }
  10.  
  11. public cmd_penz(id)
  12. {
  13. client_print(id,print_chat,"A penzed:%d",get_user_forint(id))
  14. }
  15.  
  16. public cmd_penzkell(id)
  17. {
  18. client_print(id,print_chat,"Kaptal 300 forintot!")
  19. set_user_forint(id,get_user_forint(id)+300)
  20. }


Vége!
UI:
Szerintem elég konyhanyelven fogalmaztam, aki nem érti az írjon hozzászólást, aki érti és hibát talált vagy valamit jobban írna le az jelezzen nekem.
Aki nem találja a köszönöm gombot annak a hozzászólás jobb alsó sarkában van :)

EDIT: Kicsit keresgetnem kellet :D itt van még néhány tut, ami RÉSZLETESEN LEÍRJA, mit hogyan! Köszönet Metal -nak

_________________
Ha elnyerte valamelyik témában a hozzászólásom a tetszésedet melyet olvastál, akkor egy egyszerű gombnyomással kifejezheted, hogy tetszett.


A hozzászólást 1 alkalommal szerkesztették, utoljára Anonymous1337 2013.10.15. 21:00-kor.

Hozzászólás jelentése
Vissza a tetejére
   
 
 Hozzászólás témája: Re: Plugin írás.
HozzászólásElküldve: 2013.10.15. 20:59 
Offline
Fanatikus
Avatar

Csatlakozott: 2013.03.23. 14:55
Hozzászólások: 162
Megköszönt másnak: 2 alkalommal
Megköszönték neki: 27 alkalommal
Minek köszönné meg valaki HA EZT NÁNDI ÍRTA KI?
Nem kell itt köszi gombot vadászni....
Én is kimásolom az összes tutot és kapok 6001 köszit...

_________________
Fehér lányra nézni fault,fehér lányhoz szólni technikai fault,fehér lányhoz érni,na azért lincselés jár!


Hozzászólás jelentése
Vissza a tetejére
   
 
 Hozzászólás témája: Re: Plugin írás.
HozzászólásElküldve: 2013.10.15. 21:01 
Offline
Felfüggesztve
Avatar

Csatlakozott: 2013.06.09. 18:47
Hozzászólások: 2004
Megköszönt másnak: 1 alkalommal
Megköszönték neki: 220 alkalommal
Super Nova írta:
Minek köszönné meg valaki HA EZT NÁNDI ÍRTA KI?
Nem kell itt köszi gombot vadászni....
Én is kimásolom az összes tutot és kapok 6001 köszit...


Elmondanám, Nandee írta oda, azt a szöveget is :) Én csak kimásoltam :D Szerinted én írtam ezt mind, röpke 5 perc alatt? ;)

_________________
Ha elnyerte valamelyik témában a hozzászólásom a tetszésedet melyet olvastál, akkor egy egyszerű gombnyomással kifejezheted, hogy tetszett.


Hozzászólás jelentése
Vissza a tetejére
   
 
 Hozzászólás témája: Re: Plugin írás.
HozzászólásElküldve: 2013.10.15. 21:03 
Offline
Fanatikus
Avatar

Csatlakozott: 2013.03.23. 14:55
Hozzászólások: 162
Megköszönt másnak: 2 alkalommal
Megköszönték neki: 27 alkalommal
Ne keverd már össze...Ez a topic nem váltja le a tutorial topicot....
Itt SEGÍTSÉGET KÉRHETNEK

_________________
Fehér lányra nézni fault,fehér lányhoz szólni technikai fault,fehér lányhoz érni,na azért lincselés jár!


Hozzászólás jelentése
Vissza a tetejére
   
 
 Hozzászólás témája: Re: Plugin írás.
HozzászólásElküldve: 2013.10.15. 21:07 
Offline
Felfüggesztve
Avatar

Csatlakozott: 2013.06.09. 18:47
Hozzászólások: 2004
Megköszönt másnak: 1 alkalommal
Megköszönték neki: 220 alkalommal
Super Nova írta:
Ne keverd már össze...Ez a topic nem váltja le a tutorial topicot....
Itt SEGÍTSÉGET KÉRHETNEK


Szerintem fölösleges..

Mindent leírt Metal, amit tudni kell.. Aki abból se tud megtanulni, az ne is foglalkozzon AMXX el..

Rengeted tutorial van, szépen át kell olvasni, 1x, 2x, 3x, 4x, 5x Egyszer csak megtanulsz plugint írni.. Ide is ugyan azt írnák mint a tutba :)

Szerintem fölösleges ez a téma, de majd a modik eldöntik!

Részemről ennyi!

További jó tanulgatást!





Üdv.
Anonymous1337

_________________
Ha elnyerte valamelyik témában a hozzászólásom a tetszésedet melyet olvastál, akkor egy egyszerű gombnyomással kifejezheted, hogy tetszett.


Hozzászólás jelentése
Vissza a tetejére
   
 
 Hozzászólás témája: Re: Plugin írás.
HozzászólásElküldve: 2013.10.15. 21:26 
Offline
Fanatikus
Avatar

Csatlakozott: 2013.03.23. 14:55
Hozzászólások: 162
Megköszönt másnak: 2 alkalommal
Megköszönték neki: 27 alkalommal
Szerintem senki se metál tutjából tanult meg plugint írni.
Metál nagyon szaknyelven írja a dolgokat,amiket nehéz megérteni ha nem értesz hozzá.

_________________
Fehér lányra nézni fault,fehér lányhoz szólni technikai fault,fehér lányhoz érni,na azért lincselés jár!


Hozzászólás jelentése
Vissza a tetejére
   
 
 Hozzászólás témája: Re: Plugin írás.
HozzászólásElküldve: 2013.10.15. 21:34 
[kozep]Változók létrehozása, jelentése, kiíratása.[/kozep]
Üdv, most a változókról fogok beszélni.
Mi is a változó egyszerűen? - Egy értéket lehet neki megadni!
Van több féle típusú változó.
Érték.
[kozep]
SMA Forráskód: [ Mindet kijelol ]
  1. new VALTOZO; /*<-- ennek pl. betű,szám értéket adhatsz meg!*/
[/kozep]
Igaz/hamis.
[kozep]
SMA Forráskód: [ Mindet kijelol ]
  1. new bool:VALTOZO=true/*or false*/;/*<-- Igaz(true)-Hamis(false) értéket adhatunk meg neki.*/
[/kozep]
Tizedestört.
[kozep]
SMA Forráskód: [ Mindet kijelol ]
  1. new float:VALTOZO=2.55; /*<-- Tizedestört.*/
[/kozep]
stb-stb.. sorolhatnám.
VISZONT van még egy olyan minek értéket lehet megadni.
[kozep]
SMA Forráskód: [ Mindet kijelol ]
  1. #define DEFINE "ERTEK"; /*<-- Itt bármit meglehet neki adni,de nem úgy működik mint a változó.*/
[/kozep]
Változókról, ennyit, remélem érted úgy tudom 7.általánosban tanítják mi az a változó.
KIÍRÁS & FELTÉTELEKBEN ELHELYEZKEDÉSE.
Kiíratni valahogy így tudunk.
[kozep]
SMA Forráskód: [ Mindet kijelol ]
  1. new VALTOZO;
  2. VALTOZO="1";
  3. public client_connect()
  4. {
  5. client_print(0,print_chat,"A valtozo erteke %s",VALTOZO);
  6. }
[/kozep]
Feltételben az elhelyezkedése:
[kozep]
SMA Forráskód: [ Mindet kijelol ]
  1. if (VALTOZO <= 1)
[/kozep]

[kozep]
SMA Forráskód: [ Mindet kijelol ]
  1. if (%s <= 1, VALTOZO) /*WRONG!*/
[/kozep]


Hozzászólás jelentése
Vissza a tetejére
   
 
 Hozzászólás témája: Re: Plugin írás.
HozzászólásElküldve: 2013.10.15. 21:37 
Offline
Fanatikus
Avatar

Csatlakozott: 2013.03.23. 14:55
Hozzászólások: 162
Megköszönt másnak: 2 alkalommal
Megköszönték neki: 27 alkalommal
Static és a new között mi a különbség? Valaki elmagyarázná?

Edit: Konyhanyelven,ha lehet!

_________________
Fehér lányra nézni fault,fehér lányhoz szólni technikai fault,fehér lányhoz érni,na azért lincselés jár!


Hozzászólás jelentése
Vissza a tetejére
   
 
 Hozzászólás témája: Re: Plugin írás.
HozzászólásElküldve: 2013.10.15. 21:56 
Super Nova írta:
Static és a new között mi a különbség? Valaki elmagyarázná?

Edit: Konyhanyelven,ha lehet!

By: metal nem konyhanyelven:
Üdv

a "kevesebb cpu" érdekes kifejezés, bár valóban "jobb" ha jó helyen használják.

Bevezetőül:
Változót deklarálhatunk az alábbi kulcsszavak egyikével:
new, stock, public, static

Mindegyik változót hoz létre, de mindegyik kicsit eltér a másiktól, futási és/vagy fordítási különbségeket teremtve.
new: allokálja a memóriaterületet. Ha ez eljárásban történni, akkor az eljárás végén törlődik.
stock: hasonló a newhoz, a különbség fordítás időben történik: Amennyiben a változó nincs használva sehol sem, akkor a fordító nem építi bele a p-kódba. (kisebb memóriahasználatot vonva maga után, ami jó), s ezzel el tudjátok kerülni a variable is unused warningot.
public: new + az absztrakt gépe felküldi a változó nevét, s így az más pluginból elérhetővé válik (szerkeszthető, módosítható). Jó dolog, de inkább a natív az elterjedt, mivel az biztosít valamiféle interface-t, protokollt, s így szabályok is adhatóak a módosításához stb.
static: mint a new, de ha eljárásban definiálod, nem törlődik a memóriában, hanem ott marad. (Allokálási idő nem lesz, csak egyszer foglalja le, s az értékét is megtartja)

Továbbá tisztázzuk, hogy vannak
1) globális változók és
2) lokális változók

( Általában az okos, hozzáértő scriptelek (itt nem sok van, hehe :P) a globális változókat egy helyre gyűjtik, g_ pefixel (vagy simán g prefixel) ellátva, hogy tudják, ez elérhető bárhonnan, hisz a globális területen lett definiálva.)

A globális változók mindenhol elérhetőek (tehát mindig léteznek), így felesleges is staticcal deklarálni, mivel azok elérhetőek, tartalmukkal együtt.
A lokális változók azoka változók, amiket eljárásokban deklarálunk. Ezek , az eljárás lefutása végén eltűnnek a memóriából.
DE ha az eljárásban staticcal hozol létre változót, az nem törlődik ki.

newra és staticra mutatok egy egyszerű példascriptet.
Tesztelni nem teszteltem, csak szemléltetni akarom a kommentekben (isten ments, hogy valaki ezt feltegye valahova.... de ha vállalja a körberöhögést, felőlem :D), mikor "mi történik" a változóval
SMA Forráskód: [ Mindet kijelol ]
  1.  
  2. #include <amxmodx>
  3.  
  4. new bool:g_isAlive[33]
  5.  
  6. public plugin_init()
  7. {
  8. // Code
  9. }
  10.  
  11. public client_disconnect(id)
  12. {
  13. g_isAlive[id] = false; // Globális változó, ez bárhonnan elérhető
  14. }
  15.  
  16. public client_connect(id)
  17. {
  18. new Float:delay = 5.0; // csak lokális, eljárás után megszűnik
  19. set_task(delay, "print_task", id + 1337);
  20. g_isAlive[id] = false; // Globális változó, ez bárhonnan elérhető
  21. }
  22.  
  23.  
  24. public print_task(taskid)
  25. {
  26. new id = taskid - 1337;
  27.  
  28. static message[100]; // Egyszer lefoglalod, s a memóriában bent marad
  29. client_print(id, print_chat, message); // Elso futaskor ures stringet fog irni. majd ezt: "Ez itt egy udvozlo szovegecske"
  30. // A masodik plaernek meg ezt fogja irni 2*: "Ez itt egy udvozlo szovegecske"
  31.  
  32. if (!is_user_alive(id))
  33. {
  34. // set_task(Delay, "print_task", taskid); // Itt hiba lesz, delay csak a connect fgvben definiált. Átírjuk így 5.0-ra:
  35. set_task(5.0, "print_task", taskid);
  36. }
  37. else
  38. {
  39. format(message, 100, "Ez itt egy udvozlo szovegecske")
  40. client_print(id, print_chat, message);
  41. }
  42. }

Konyhanyelven:
Szinte ugyan az (ugyan arra lehet használni)


Hozzászólás jelentése
Vissza a tetejére
   
 
Hozzászólások megjelenítése:  Rendezés  
Lezárt fórum  A témát lezárták, nem szerkesztheted a hozzászólásaid, és nem küldhetsz új hozzászólást.  [ 11 hozzászólás ]  Oldal 1 2 Következő


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 18 vendég


Nem nyithatsz témákat ebben a fórumban.
Nem válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole