GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: Naretev - 2017. augusztus 11. - 19:35:28

Cím: Includeben lévő függvény hookolása?
Írta: Naretev - 2017. augusztus 11. - 19:35:28
Sziasztok!
 
Már elég régóta foglalkoztatnak az Includeok mechanikája és hasonló dolgok, elkezdtem ezen gondolkozni, példa fájlokat írogatni, kisebb nagyobb sikerrel. Azonban, egy kisebb problémába ütköztem.
 
A probléma alapvetően az, hogy amelyik függvény már benne van a játékmódban, azt ha fel akarom használni az Includeban, akkor már hibát ír ki miszerint már definiálva van, jogosan merül fel ez a hibaüzenet.
 
Az esetemben, az OnPlayerConnect függvényt szeretném felhaszálni a módban, és az Includeban is egyaránt. Ugyebár ez alapjáraton nem lehetséges, ezért gondolkoztam, és arra a következtetésre jutottam, hogy lehetséges, hogy Hookolni kellene a függvényt és talán úgy lenne jó, de nem vagyok benne biztos.
 
Nem arra kérlek titeket, hogy a hookolást írjátok le mivel arról van \"Tons of Topic\" a fórumokon, hanem azt, hogy ez lehetne a jó mód, van-e rá jobb megoldás és hasonló dolgok. Illetve, ha hookolni kell akkor mindkettőt vagy csak az egyiket, illetve miért. Minden hasznos dolgot róla.
 
 
 
A válaszokat nagyon szépen köszönöm!
Cím: Includeben lévő függvény hookolása?
Írta: kos - 2017. augusztus 11. - 21:22:40
butaság... az include mi is valójában? - az eredeti mód kiegészítője.
 
Ha az OnPlayerConnect függvényt felhasználod, akkor az eredeti módosul (használatban).
 
De mi van akkor, ha ezt és azt is használni akarod?... A válasz egyszerű, egy új függvényt kell létrehoznod, majd beledefiniálni az onplayerconnect függvénybe hogy abban fusson le az eredetiben. Így mind két helyen az onplayerconnect függvényt használod. De persze sok értelmét nem látom gondolatodnak, hogy miért raknád include függvénybe... de m1
 
Remélem egyszerű és érthető magyarázatott adtam. 
Cím: Includeben lévő függvény hookolása?
Írta: Naretev - 2017. augusztus 11. - 21:34:56
Igazából nemsokat értek az includekhez ezért is akarom megtanulni, hogy azoknál milyen tényezők vannak illetve, mit hogyan kellene.
 
Az includek mellet még a modular scriptinghez is szükséges ez a hook tudás ahol szintén két azonos függvényt kell két különböző helyen elkülniteni, és ott is hasznos lehet, azonban nem tudom, hogyan kellene.
 
Ahhoz, hogy bele definiáljam azt hookolni kell nem?
 
Ez a probléma, hogy nem értek hozzá, és angol fórumon azokra a kérdésekre nem kapok választ sehol amit ténylegesen tudni akarok, ezért gondoltam, hogy itt kérdem meg, de itt meg hülyének fognak nézni, ha elírok 1 betűt is pl. :/
Cím: Includeben lévő függvény hookolása?
Írta: kos - 2017. augusztus 11. - 22:27:20
Idézetet írta: Naretev date=1502480096


   
      Igazából nemsokat értek az includekhez ezért is akarom megtanulni, hogy azoknál milyen tényezők vannak illetve, mit hogyan kellene.
   
   
      Az includek mellet még a modular scriptinghez is szükséges ez a hook tudás ahol szintén két azonos függvényt kell két különböző helyen elkülniteni, és ott is hasznos lehet, azonban nem tudom, hogyan kellene.
   
   
      Ahhoz, hogy bele definiáljam azt hookolni kell nem?
   
   
      Ez a probléma, hogy nem értek hozzá, és angol fórumon azokra a kérdésekre nem kapok választ sehol amit ténylegesen tudni akarok, ezért gondoltam, hogy itt kérdem meg, de itt meg hülyének fognak nézni, ha elírok 1 betűt is pl. :/
   


nem fog leszólni senki, mert etéren okosodni akarsz, másrészt a hookolást hagyd békén, az teljesen más tészta, az nem a mostani problémádhoz kell.
 
ajánlom nézd át az új i_zcmd include-t... abban ott van hogy az onplayertext(valami) funkcióját ledefiniálja így ki kell törölni a módból. és az új include álltal megadott fügvényeket kell használni amit. azonban ha az inlcudeban hozod létre az új függvényedet és beágyazod a meglévőbe akkor helyesen fog lefutni.
 
példa van x a módban és x a függvényedben utána y is a függvényben
 
x x használat nem lesz jó
 
x y használat se lesz jó
 
x y(x(praméter)) lesz a jó neked
 
a régi zcmd nem iktatja ki mert definiálja, míg az új i_zcmd módosítja a két include példájából rá kell jönnöd h hogyan csinálhatod, ha a példámból nem is világos számodra.
Cím: Includeben lévő függvény hookolása?
Írta: Naretev - 2017. augusztus 12. - 08:54:46
Megnéztem amit írtál ki is próbáltam de nem nagyon müködött :/
 
Megpróbálkoztam a hookolással, mivel a gondolat meneteim során a hook jött ki megoldásnak. Ezt a két kódot készítettem, az első az Include-ban lévő hook, a második pedig a GM-ben lévő hook.
 
\"nDCHQp3.png\"
 
\"Oxvjnaq.png\"
 
Nem teszteltem még le, de a compiler hibát nem ír ki, úgyhogy lehetséges, hogy müködik. De viszont erről is szeretnék véleményt kikérni, hogy mi lehet a hibája, vagy valamit rosszul csináltam-e.
Cím: Includeben lévő függvény hookolása?
Írta: kos - 2017. augusztus 12. - 11:29:33
Idézetet írta: Naretev date=1502520886


   
      Megnéztem amit írtál ki is próbáltam de nem nagyon müködött :/
   
   
      Megpróbálkoztam a hookolással, mivel a gondolat meneteim során a hook jött ki megoldásnak. Ezt a két kódot készítettem, az első az Include-ban lévő hook, a második pedig a GM-ben lévő hook.
   
   
      \"nDCHQp3.png\"
   
      \"Oxvjnaq.png\"
   
      Nem teszteltem még le, de a compiler hibát nem ír ki, úgyhogy lehetséges, hogy müködik. De viszont erről is szeretnék véleményt kikérni, hogy mi lehet a hibája, vagy valamit rosszul csináltam-e.
   


nem a legjobb megoldás, mert még mindig nem más fügvénnyel dolgozol h beágyazd az onplayerconnect alá hanem konkrétan az onplayerconnectre erőlteted.
 
nagyon egyszerűen :
 
megcsinálsz egy sima alap include-t
 
forward blabla(paraméter);
 
majd a Public OnPlayerConnect hez h mit akarsz, végűl a CallLocalFunction(blabla, paraméterek.... stb
 
nem kell semmi hookolás.
 
ja meg az értékeket ad meg különben mindig meghívódik, és az is eredményezhet nem megfelelő működést.
Cím: Includeben lévő függvény hookolása?
Írta: Naretev - 2017. augusztus 12. - 11:48:05
De én nem saját függvény akarok forwardolni, hanem azt, hogy az OnPlayerConnect mindkét helyen müködjön, a saját függvénye alatt, úgy hogy ne irjon ki hibát, hogy \"onPlayerConnect already defined\" stb.
Cím: Includeben lévő függvény hookolása?
Írta: kos - 2017. augusztus 12. - 11:56:52
Idézetet írta: Naretev date=1502531285


   
      De én nem saját függvény akarok forwardolni, hanem azt, hogy az OnPlayerConnect mindkét helyen müködjön, a saját függvénye alatt, úgy hogy ne irjon ki hibát, hogy \"onPlayerConnect already defined\" stb.
   


látom nem érted.
 
van a pwn. amiben van az onplayerconnect.
 
van az include ami a pwn. onplayerconnectjét használja, ezt azonban úgy teheted meg, ha új függvényt hozol létre (forward segítségével) majd az include-ban az onplayerconnect alá beágyazod a calllocalfuncióval hogy ne legyen ugyan az a nevük. Érted már? Error azért lesz mert két ugyan azon néven nem lehet használni létező függvényt. Ergó ideiglenesen létre hozol egyet amit beágyazol az onplayerconnect alá h azzal működjön.
 
Önmagában nem lehet használni, mert duplikációnak fogja érzékelni. Ez átugorható a hookolással, de azt nem ilyeneknél szokták használni, hanem többszörös ismétlődő ellenőrzéseknél.
Cím: Includeben lévő függvény hookolása?
Írta: Naretev - 2017. augusztus 12. - 12:45:55
Nagyjából értem talán. De szerintem hagyom ezt az Includes dolgot, viszont mi történik akkor, ha ezt egy másik .pwn-ből akarom használni?
 
mert .pwn fájlokat is be tudom #include-olni. Viszont az már nem .inc-ként fog viselkedni.
 
Ott a hookolás javaslot, ha igen hogyan? Vagy hasonlóképpen, mint ez, habár mivel ott már egyoldalú a téma, ezért nem hiszem, hogy CallLocal function müködne.
 
Valami ötlet?
Cím: Includeben lévő függvény hookolása?
Írta: kos - 2017. augusztus 12. - 17:34:50
a pwn tág fogalma a dolgoknak.
 
van a mód a filter és az include alapesetekben.
 
a mód és a filter is pwn. azonban a filter önmagában nem használható.
 
a mód tud használni, filter és include fáljokat
 
a filter tud includét használni
 
de az include nem tud filtert használni, csak mód pwnt.
 
a hookolással természetesen itt már opcionális dolgozni, ha filtert akarsz incluolni és módba definiálni includ meghívással
 
 
 
mikor elindítasz egy módot, külső program használat nélkül, csak egy mód futhat egy időben (pwn)
 
ehhez kapcsolható filter és include
 
az include tartalmazhatja a filter meghívását hogy a módba használd ez a hookolás megoldás lényegében.
 
 
 
meg mondom őszintén, nem tudom mit akarsz kezdeni ezzel a pwn include pwn dologgal ezt játék készítéskor szokták használni, itt a sampban fölös mert csak módolsz nem pedig készíted a játékot.
 
 
 
a válasz pedig mi történik ha include másik pwnből? lehetséges módból és filterből is egyaránt egy másik módba definiálni include által.
 
filtert vagy include beolvasással a módba tudsz, vagy filterscript beolvasással a szerver cfg ben
 
de fölös egy filtert includdal módba illeszteni, meg mondom miért. mert ugyan olyan mintha filterként párosítanád include nélkül..
 
 
 
remélem érthetően írtam, mobilról írtam sry előre is 
 
 
 
ja igen, csak halk megjegyzés  amx amit használ nem pwn. a pwn az a kezelőfelülete a kódolásnak.
 
lényegében a játék és az include is amx et értelmez a pwn az csak a nyers forma mely szerkeszthető.
Cím: Includeben lévő függvény hookolása?
Írta: Naretev - 2017. augusztus 12. - 18:14:11
Nos, először is köszönöm szépen, hogy ennyi időt fordítasz a segítség nyújtásban.Viszont, az lenne a probléma, hogy nem csak filterscriptet és includet tudsz a módba #include-val belerakni.
 
Akár egy .txt fájl is lehet, a kiterjesztés teljesen mindegy egy bizonyos kritériumok között. Az esetemben ez a .pwn lenne.Leírom, hogy pontosan mit akarok. Mert eddig csak vázlat szerűen ábrázoltam.
 
Van egy fő .pwn fájlom, ez a (main) rész, maga a Gamemode.
 
Illetve egy másik fájlt (szintén .pwn) akarok hozzá csatolni amiben pl. enumokat kezeli, definiciók vannak benne, változók, rendszerek, hasonló dolgok, az én esetemben az adatbázishoz való csatlakozást akarom megoldani.
 
Igen, tudom, hogy ezért fölösleges külön fájl + stb, de így jobban átláthatóbb ha külön fájlban van.
 
\"lcdTkHw.png\"
 
\"wIWf6bK.png\"
 
\"2ayI4tG.png\"
 
Az első képen látható, a (main) játékmód .pwn-je, a második képen, a segédfájl .pwn-je a harmadikon pedig a konzol, miszerint kiolvasta a fájlból az értéket, ergó müködik.
 
De, hogyha belerakom a \"public OnGameModeInit()\" függvényt, akkor már errort ír ki mivel 2 defined függvény van. És ezt szeretném megcsinálni, hogy ne vesszen össze vele, ezért gondoltam, hogy hook kell.
 
Igen, átnevezhetném vagy csinálhatnék új függvényt, de akkor azokat meg kellene jegyezgetni, így meg sokkal egyszerűbb, hogyha ugyanazon a néven, csak hookolva futnak le.
 
Erre valami ötlet?
Cím: Includeben lévő függvény hookolása?
Írta: gbr333 - 2017. augusztus 12. - 19:29:39
Nyugodtan használj hook-ot,átláthatóbb lesz tőle a modod.(Ha modulokra akarod szedni.)
 
Ajánlom az y_hooks include-ot.
 
\"1Tf7pzl.png\"
 
\"yPs3iNn.png\"
 
output:
 
\"tcOAfJW.png\"
 
 
Cím: Includeben lévő függvény hookolása?
Írta: Naretev - 2017. augusztus 12. - 19:57:03
Írtam PM :) Give me answers <3
 
 
Cím: Includeben lévő függvény hookolása?
Írta: gbr333 - 2017. augusztus 12. - 20:00:59
Nem jött semmi :$
Cím: Includeben lévő függvény hookolása?
Írta: kos - 2017. augusztus 13. - 13:46:54
Nm, és persze, hogy tudom, hogy más fáljokat is lehet, csak példa értékkel írtam le az alapokat.
 
mysql esetben a hookolás ideális, mert több helyre mehet vele az adat.. bár ezt külön külön feltöltve honlapra is lehetséges és egyben beolvasni a mysquelt.
 
m1 ízlések és pofonok 
 
viszont attól h az enumokat és a definíciókat külön akarod, fölös, mert attól nem lesz átláthatóbb  (szerintem)
 
am a y_hookolás kicsit régebbi fajta, nem tudom van e új  de ha igen akkor az biztos gyorsabb.
 
ugyan is nagyon fontos a sebessége a külön beolvasó megoldásoknak ez esetben.
 
mellékesen txt. fájlokat nem a legbiztonságosabb használni, mert azok nem titkosítottak.
Cím: Includeben lévő függvény hookolása?
Írta: Naretev - 2017. augusztus 13. - 15:16:55
Nagyjából sikerült azóta megoldalom :D
 
Most az lenne a kérdésem, hogy a sorrend nem mindegy szerint hogyan tölti be, és ezzel akadt gondom.
 
Elsőnek a játékmód Initjét kellene betölteni és utána a hookokat nem?
 
Visszafele is ugyanígy, tehát az Exit-nél elsőnek a hookok utána pedig a GM?
 
 
 
Mert jelenleg nekem az SQL egy külön PWN fájlban van, és hogyha azt hamarabb bezárja, minthogy a másik fájlban lévő Hook lementené a rensdzert akkor kiesik a mentés, ezért gondolom kell a sorrend. Csak nemtudom hogyan lehet szabályozni.
Cím: Includeben lévő függvény hookolása?
Írta: gbr333 - 2017. augusztus 13. - 15:42:47

#include <a_samp>
main(){}
public OnGameModeInit()
{
print(\"OnGameModeInIt [ MAIN ]\");

#if defined main_OnGameModeInit
   return main_OnGameModeInit();
#else
   return 1;
#endif
}
#if defined _ALS_OnGameModeInit
#undef OnGameModeInit
#else
#define _ALS_OnGameModeInit
#endif
#define OnGameModeInit main_OnGameModeInit
#if defined main_OnGameModeInit
forward main_OnGameModeInit();
#endif
#include \"../gamemodes/myVar.pwn\"

 
 
Cím: Includeben lévő függvény hookolása?
Írta: Naretev - 2017. augusztus 13. - 16:01:22
Sajnos ígyis ugyanúgy fut le :/
 
Hook 1, Hook 2 és OnGameModeInit [ MAIN ]
 
 
Cím: Includeben lévő függvény hookolása?
Írta: gbr333 - 2017. augusztus 13. - 16:08:03
Az y_hooks-ot csak ez után includeold ( ha szükséges ).
 
 
 

#include <a_samp>
main(){}
public OnGameModeInit()
{
print(\"OnGameModeInIt [ MAIN ]\");

#if defined main_OnGameModeInit
   return main_OnGameModeInit();
#else
   return 1;
#endif
}
#if defined _ALS_OnGameModeInit
#undef OnGameModeInit
#else
#define _ALS_OnGameModeInit
#endif
#define OnGameModeInit main_OnGameModeInit
#if defined main_OnGameModeInit
forward main_OnGameModeInit();
#endif
#include <YSI\\y_hooks>
#include \"../gamemodes/myVar.pwn\"
 

 
 
 
Amúgy a tegnapi PM-emet megkaptad? :D
Cím: Includeben lévő függvény hookolása?
Írta: Naretev - 2017. augusztus 13. - 16:22:35
Persze megkaptam :) Illetve köszönöm szépen, még annyit kérdeznék, hogy OnGameModeExit-nél a Main-ben lévő függvényt nem kell hookolni, de a többi kell ugye?
 
 
Cím: Includeben lévő függvény hookolása?
Írta: gbr333 - 2017. augusztus 13. - 16:25:19
Azt nem kell.
Cím: Includeben lévő függvény hookolása?
Írta: Naretev - 2017. augusztus 13. - 16:31:20
Mármint a többit kell csak a Main-t nem, mert ha egyiket sem hookolom akkor \"Already defined error\" :D
Cím: Includeben lévő függvény hookolása?
Írta: kos - 2017. augusztus 13. - 18:03:57
minden féle képpen kell, mert ha külön szedsz mindent, akkor mentés betöltés is külön van, hisz akkor van értelme tényleg külön rakni. 
Cím: Includeben lévő függvény hookolása?
Írta: Naretev - 2017. augusztus 13. - 18:09:27
Azt értem, hogy a modulokat behookolod, de az Exitnél a Main-t kell-e hookolni vagy nem? Mert az ígyis úgyis lefut, max sorrendtől függ, ezért kérdem, hogy kell-e azt vagy nem?
Cím: Includeben lévő függvény hookolása?
Írta: kos - 2017. augusztus 14. - 09:09:18
tudtommal nem, ha nem használod, mert azt kb senki sem szokta használni, még én sem használom, max szerver védelemnél mikor írom de kb ennyi.