Scydo 397 Odesláno: 23. Září, 2016 Share Odesláno: 23. Září, 2016 YSI_Coding\y_hooks***** Jeden ze snad nejlehčích includů na naučení z knihovny. Abych vás uvedl do obrazu, tak hned tu pro vás mám kód. V případě, že děláte nějaký include, který chcete publikovat ostatním uživatelům, ale potřebovali jste využít některé callbacky, které obsahuje a_samp. Tak uděláte jednu ze snad nejstarších a nejznámějších metod. Přidáte vlastní callback, a v návodě zmíní, ať ho uživatelé pak ve svém gm/fs/jiné volají, a dopadá to nějak následovně:forward House_OnPlayerConnect(playerid); forward House_OnPlayerDisconnect(playerid); forward House_OnFilterScriptInit(); forward House_OnFilterScriptExit(); public OnPlayerConnect(playerid) { House_OnPlayerConnect(playerid); DHS_OnPlayerConnect(playerid); DPS_OnPlayerConnect(playerid); Nem_OnPlayerConnect(playerid); return 1; } public OnPlayerDisconnect(playerid) { House_OnPlayerDisconnect(playerid); DHS_OnPlayerDisconnect(playerid); DPS_OnPlayerDisconnect(playerid); Nem_OnPlayerDisconnect(playerid); return 1; } public OnFilterScriptInit() { House_OnFilterScriptInit(); DHS_OnFilterScriptInit(); DPS_OnFilterScriptInit(); Nem_OnFilterScriptInit(); return 1; } public OnFilterScriptExit() { House_OnFilterScriptExit(); DHS_OnFilterScriptExit(); DPS_OnFilterScriptExit(); Nem_OnFilterScriptExit(); return 1; } Takový zmatek, že ano? Samozřejmě, pak je složitější, ale lepší možnost ještě využít tzv. _ALS_:public OnPlayerConnect(playerid) { #if defined Prefix_OnPlayerConnect return Prefix_OnPlayerConnect(playerid); #else return 1; #endif } #if defined _ALS_OnPlayerConnect #undef OnPlayerConnect #else #define _ALS_OnPlayerConnect #endif #define OnPlayerConnect Prefix_Function #if defined Prefix_Function forward Prefix_Function(playerid); #endif Ale to je pro některé uživatele skutečně těžké na naučení, a navíc tohle je _ALS_ jen na jediný callback. Pak je tu ale ještě jedna možnost, a to za pomocí y_hooks. Je to velice jednoduché, stačí napsat inf. slovíčko pro kompiler hook a jméno callbacku, které chcete hookovat, například:hook OnPlayerConnect(playerid) { return 1; } public OnPlayerConnect(playerid) { SendClientMessage(playerid, -1, "Ahoj, kompiler ti nenapíše error, že OPC je již definován!"); return 1; } Využití snad ani nemusím říkat, ale například při tvorbě include, který chcete publikovat a obsahuje callbacky ze a_sampu. Také je mužete využít do gamemode, aby jste si zkrátili obrovský obsah v jednom callbacku.Jednoduché a prosté. Avšak je tu pár věcí, co by jste o y_hooks měli vědět: musíte y_hooks nahrávat z celé knihovny jako nejdříve - některé hookované callbacky se ani nevyvolají. Stačí y_hooks nahrávat co pokud možno nejdříve a bude po problému. hookovaný callback se volá dříve než obyčejný lze hookovat pouze jednou jeden callback - v jednom zdrojovém kódu. lze hookovat vícekrát, ale nefunguje to - i když to bude znít, že si protiřečím, tak v případě, že chcete skutečně hookovat vícekrát jeden callback a vyhnout se chybám, jde to pokud ihned za jménem hookovaného callbacku přiřadíte číslo. Sice se vám úspěšně kompiluje kód, ale vyvolá se jen public a první hook. nelze si hookovat vlastní callbacky - alespoň co vím. Dle informací by to mělo být možné od nejnovější(a zároveň poslední) verze YSI. Scydovy YSI návody, hlavní topic: odkaz Link to comment Share on other sites More sharing options...
Globální moderátor HighPrint 177 Odesláno: 23. Září, 2016 Globální moderátor Share Odesláno: 23. Září, 2016 Ještě by bylo fajn zmínit dva speciální returny z y_hooks a to -2, kde ukončuje celej ten callback (ten prvotní na kterej se hookuje) a vrátí hodnotu 1, -1 ukončí celej callback a vrátí 0 Link to comment Share on other sites More sharing options...
Scydo 397 Odesláno: 23. Září, 2016 Author Share Odesláno: 23. Září, 2016 Ještě by bylo fajn zmínit dva speciální returny z y_hooks a to -2, kde ukončuje celej ten callback (ten prvotní na kterej se hookuje) a vrátí hodnotu 1, -1 ukončí celej callback a vrátí 0 Ono toho je více zajímavého, co by se hodilo alespoň zmínit se v návodu ohledně y_hooks. Například, že i ten má zajímavé funkce. Nebo, že pod y_hooks spadají ještě pár includů pro pokročilejší uživatele. Avšak jsem fakt chtěl vytknout jen to nejpodstatnější. Nějaké tipy, triky a další dodatky k YSI jsem si chtěl schovat na speciální topic ještě(ps, za ty roky, jsem ty returny nikdy nepoužil ) Link to comment Share on other sites More sharing options...
Globální moderátor HighPrint 177 Odesláno: 23. Září, 2016 Globální moderátor Share Odesláno: 23. Září, 2016 Ja je pouzivam docela casto a to jsem zacal po dlouhe dobe neco delat treba se hodi na detekci klaves kdyz vis ze se ma triggnout jen jedna akce a uz je zbytecne provolavavat zbytek callbacku. Dalsi vec co me napada je interakce s botama, kde nechces aby se triggly user veci (napr. onplayerspawn). No ja jsem teprv zacal s YSI a dost me nadchla, takze prave doufam, ze se dozvim vic Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now