Xogos Posted February 18, 2023 Share Posted February 18, 2023 Zdravím, připravil jsem si pro Vás malý návod. Obtížnost tutoriálu: 2/5 List funkcí které použijeme dnes: new Func<T1,Return Value(datový typ)>(nazevFunkce) new Action<T1,...>() Exports.Add("Nazev exportu", delegate) Exports["Nazev resource"] Co je to export? Export je Dictionary mapa která ukládá delegate funkce a lze tyto funkce dědit do ostatních resourců.. jestli je ještě někdo z maten co je to Dictionary a delegate, tak to rychle vysvětlím. Není to nic těžkého. Dictionary Je mapa klíčů a hodnot do které můžete ukládat skoro cokoliv.Delegate Je odkaz který odkazuje na funkci s parametrama. To samé platí pro "new Action<...>() , new Func...>" Zapouzdruje metodu, je tady jeden rozdíl akorát. New action nevrací hodnotu a new Func vrací hodnotu. Dám několik příkladů jakýma způsobama lze vytvářet exporty, na Vás je pak si vybrat který se vám bude nejvíce "líbit" nebo lépe používat... Pojďme se na to vrhnout teda. //Deklarujeme delegate která má jenom parametr string public delegate void MessageFunction(string msg); //Tvoříme funkci která nám zobrazovat Subtitles do hry public void showSubtitles(string message) { //Tato funkce nám zobrazí titulky ve hře.. Screen.ShowSubtitle(message); } //Funkce která bude sloužit k vyvolání eventu "chatMessage" která posílá zprávu do chatu.. public void ZpravaDoChatu(string message) { TriggerEvent("chatMessage", "<Zprava>", new[] { 255, 0, 0 }, message); } public MainClass() { //abstraktuje funkci "showSubtitles" MessageFunction subtitle = showSubtitles; //přidáváme export se jménem "showSubtitles" Exports.Add("showSubtitles", subtitle); //Annonymní funkce Exports.Add("sendMessage", new Action<string>((message) => { TriggerEvent("chatMessage", "<Zprava>", new[] { 255, 0, 0 }, message); })); //abstraktuje funkci "ZpravaDoChatu" Exports.Add("anotherMessage", new Action<string>(ZpravaDoChatu)); } Jak pak něco takového vyvolám vůbec ? [Command("testprikaz")] void myCommand() { //Exports vrací DynamicMethod, "xCoreMaster" je název mého resourcu. Může se lišit od vašeho.. dynamic xCoreMaster = Exports["xCoreMaster"]; xCoreMaster.showSubtitles("test subtitles"); xCoreMaster.sendMessage("Zprava v chatu lel"); xCoreMaster.anotherMessage("dalsi zprava"); } Výsledek: Jak vracet hodnoty z export funkcí ? //Deklarujeme delegate která bude vracet datový typ "string" public delegate string namePlayer(); //vytvoříme funkci getPlayerName public string getPlayerName() { // Pokaždé když se zavolá tato funkce, tak se vratí string v podobě "(Jmeno hráče) z exportu lel" return Game.Player.Name + " z exportu lel"; } //Jenom příklad, funkce banka reprezentuje jenom funkci pro vracení datového typu. public int banka() { //Pokaždé když zavoláme funkci tak nám bude vracet 559. return 559; } public MainClass() { //abstraktuje funkci "getPlayerName" namePlayer name = getPlayerName; Exports.Add("getPlayerName", name); Exports.Add("moneyBank", new Func<int>(banka)); //Jak už se psalo nahoře, new Func<...> dokáže vracet hodnoty.. Mám takovou domněnku že fivem nerado čte třídy.. //tzn není dobré vracet Player třídu, nebo vlastní třídy. //Annonymní funkce která když se zavolá vratí true/false podle toho jeslti hráč je naživu. Exports.Add("isAlive", new Func<bool>(() => { if(Game.PlayerPed.Health < 0) return false; return true; })); } [Command("testprikaz")] void myCommand() { //Exports vrací DynamicMethod, "xCoreMaster" je název mého resourcu. Může se lišit od vašeho.. dynamic xCoreMaster = Exports["xCoreMaster"]; xCoreMaster.sendMessage("Jmeno: " + xCoreMaster.getPlayerName()); xCoreMaster.sendMessage("Banka: " + xCoreMaster.moneyBank()); xCoreMaster.sendMessage("Jsem naživu: " + xCoreMaster.isAlive()); } Výsledek: Děkuji za prečtení 🙂 2 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.