Jump to content

Search the Community

Showing results for tags 'návod'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • FiveM
    • Pomoc
    • Resources
    • Návody
    • Ostatní
  • Hlavní informace
    • Oznámení
    • Soutěže

Categories

  • Scripty
  • Mapy
  • Ostatní
  • Abandoned

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me

Found 8 results

  1. Ahoj, část z vás si pamatuje na staré fórum s starým návodem, který nefungoval správně všem tak znova a lépe přece jen 2 roky jsou 2 roky. Co se zde naučíme? Naučíme se zde jak přidat do FiveM nový font, jak ho streamovat a jak ho používat ve scriptech. Příprava Vytvoříme si jednu složku někde na disku, kde si budeme ukládat všechny naše nástroje. Krom toho, že je to dobré tak pak v tom nemáme bordel. Já si například vytvořím složku na disku C s názvem streamovani_fontu vy si vytvořte, kde co chcete hlavně ať vše dáváš do jednoho. Stažení vybraného fontu Vybraný font potřebujeme stáhnout ve formátu TTF (TrueType) s tím počítá zbytek návodu fonty můžeme najít například na https://www.1001freefonts.com/ Složku rozbalte a najděte si soubor fontu, který chcete používat, může jich tam být více například bold, italic a různé variace. Já si vybral regular a zkontroloval přes vlastnosti (pravé kliknutí na soubor -> vlastnosti), že je to typ soubory, který potřebuji. Stažení swfmill nástroje Pro streamování fontu potřebujeme stáhnout nástroj swfmill, který nám dovolí změnit TTF (typ souboru pro fonty) soubor do SWF formátu. Otevři webovou stránku https://www.swfmill.org/ a klikni na stáhnout, máš tu dvě verze buď pro linux nebo pro windows, já si vyberu pro windows protože tento návod píšu na windows stroji. Soubor uložím do naší složky a jdeme dál. Získání GFX exportu Nemohu vám tu dát soubory, které by jste si mohli stáhnout na to nemám práva ale můžu vás nasměrovat, kde se takový gfx export nachází. GFX export je součástí cry enginu, který si může každý stáhnout. Zde je návod na používání GFX exportu přímo od cry enginu. https://docs.cryengine.com/display/CEMANUAL/Chapter+2+-+Flash+and+Gfx 1) Stáhneme si CryEngine https://www.cryengine.com/download a nainstalujeme - po otevření launcheru se zaregistrujte/přihlašte a zmáčkněte na tlačítko download engine 2) Vytvoříme si složku GFXExport v naší složce, do které vložíme pozdější obsah 3) Otevřeme složku, kde se engine nachází - přejděte na položku Engines, klikněte na 3 tečky a stiskněte tlačítko Reveal in explorer. 4) Po otevření najděte složku tools a v ní GFxExport a Scaleform3 (Tools\GFxExport\Scaleform3) 5) Zkopírujte její obsah do naší složku GFXExport, kterou jsme si vytvořili předtím mělo by to vypadat asi takto Vytváření fontu Vytvoření stuktury složek a kopírování potřebných souborů 1) Vytvoříme si složku fonts v streamovani_fontu 2) Do ní vytvoříme novou složku s názvem našeho fontu osobně budu tyto složky pojmenovávat font_nazevfontu takže v našem případě tvořím font s názvem dancing takže vytvořím složku font_dancing 3) Do této složky vložím náš vybraný font soubor pro mě DancingScript-Regular.ttf 4) Vytvořím nový XML soubor font.xml, můžete použít editor jaký chcete visual studio, notepad++ nebo cokoliv jiného. Pro zjednodušení si klidně otevřete přímo složku v editoru toto nechám na vás. Do tohoto souboru vložíme tento kód <?xml version="1.0" encoding="iso-8859-1" ?> <movie version="8" width="320" height="240" framerate="12"> <frame> <library> <font id="Dancing" import="DancingScript-Regular.ttf" name="Dancing"/> </library> </frame> </movie> ℹ U každého jiného fontu musíte upravit id a name parametry Konvertování XML to SWF 1) Extrahujeme swfmill zip soubor a vytvořenou složku přejmenuji na swfmill 2) Otevřu si konzoli v editoru nebo cmd ve windows a vložím do něho příkaz C:\streamovani_fontu\swfmill\swfmill.exe simple C:\streamovani_fontu\fonty\font_dancing\font.xml C:\streamovani_fontu\fonty\font_dancing\font.swf Cesty si upravte podle toho, kde jste danou složku vytvořili. Pro vysvětlení parametru: swfmill.exe simple CESTA_PRO_XML CESTA_PRO_VYSLEDNY_SWF_SOUBOR Po odeslání příkazu by to nemělo napsat žádné chyby a měl by se vytvořit SWF soubor. Konvertování SWF do GFX 1) Otevři konzoli a vlož příkaz C:\streamovani_fontu\GFXExport\gfxexport.exe C:\streamovani_fontu\fonty\font_dancing\font.swf Jako u i předchozího kroku změn cestu tak, jak potřebuješ. Po odeslání vypíše něco jako A uvidíme nový GFX soubor v naší složce. Použití ve FiveM Vytvoření resourcu 1) Jelikož se jedná o banální věc, připravil jsem vám již preset, který si stáhněte zde 2) Vložte do stream složky náš font.gfx 3) Otevřete fxmanifest.lua a upravte font_name a font_file Font name dáme stejný, jako jsme dávali name do XML souboru a font_file je název souboru v stream složce. Pro mě tedy 4) Přejmenujte složku z font_preset na váš název pro mě font_dancing 5) Vložte do složky resources 6) Do server.cfg spustě pomocí ensure font_dancing 🔴 Fonty musíte zapnout vždy před ostatními scripty, které je mají využít! font_name 'Dancing' font_file 'font.gfx' --font file name in stream folder Takový resource se dá použít už ve hře. Hodím tedy tento resource do FiveM serveru do složky resources v další části si ukážeme, jak toto využívat ve scriptech. Využití v kódu Pozornější z vás si všimli, že preset má v sobě i client.lua část, kde se registruje font a zároveň jsem přidal i event, díky kterému se ID fontu bude moci jednoduše načíst v jiném scriptu. Nebudu vám sem popisovat kód pro vypsání 3D textu ale ukážu vám jakým způsobem získat ID a jak ho například v 3D textu používat. Získání ID V presetu je zároveň i přidaný event, kterým budeme získávat naše registrované ID fontu. Event nese název NAZEV_RESOURCE:getFontId takže v našem případě je to font_dancing:getFontId, tento event má jeden parametr a to je callback, tento parametr vrací fontId TriggerEvent('font_dancing:getFontId', function(fontId) print('Naše font ID: ', fontId) end) Pro použití v 3D textu se dá tento font nastavit pomocí nativní funkce SetTextFont(fontId) https://docs.fivem.net/natives/?_0x66E0276CC5F6B9DA
  2. Upozornění: Tento návod byl napsán v roce 2020 již nemusí takto fungovat a nebo většina z vás už nepoužívá esx_inventoryhud. Zdravíčko, pro ty z vás, co neví, jak si jednoduše upravit inventory_hud aby při dvojkliku na předmět se předmět použil tak Vám tu přikládám tento kus kodu který stačí dát do části kde se používá jquery draggable, používám inventory_hud, který již nemá podporu ale vím,že hodně z vás ho používá též. najdeme se inventory.js řádek cca 23 a měli by jsme tam najít tento kód $('.item').draggable({ helper: 'clone', appendTo: 'body', zIndex: 99999, revert: 'invalid', start: function (event, ui) { $(this).css('background-image', 'none'); itemData = $(this).data("item"); if (!itemData.canRemove) { $("#drop").addClass("disabled"); $("#give").addClass("disabled"); } if (!itemData.usable) { $("#use").addClass("disabled"); } }, stop: function () { itemData = $(this).data("item"); $(this).css('background-image', 'url(\'img/items/' + itemData.name + '.png\''); $("#drop").removeClass("disabled"); $("#use").removeClass("disabled"); $("#give").removeClass("disabled"); } }) A my na konec přidáme tady tento event na double click a použití předmětu. .dblclick(function () { itemData = $(this).data("item"); if (itemData.usable) { $.post("http://esx_inventoryhud/UseItem", JSON.stringify({ item: itemData })); } }); Takže finální podoba bude: $('.item').draggable({ helper: 'clone', appendTo: 'body', zIndex: 99999, revert: 'invalid', start: function (event, ui) { $(this).css('background-image', 'none'); itemData = $(this).data("item"); if (!itemData.canRemove) { $("#drop").addClass("disabled"); $("#give").addClass("disabled"); } if (!itemData.usable) { $("#use").addClass("disabled"); } }, stop: function () { itemData = $(this).data("item"); $(this).css('background-image', 'url(\'img/items/' + itemData.name + '.png\''); $("#drop").removeClass("disabled"); $("#use").removeClass("disabled"); $("#give").removeClass("disabled"); } }).dblclick(function () { itemData = $(this).data("item"); if (itemData.usable) { $.post("http://esx_inventoryhud/UseItem", JSON.stringify({ item: itemData })); } }); Není zač 🙂
  3. Jelikož mi to přišlo do PM, jak to udělat hodím to sem 🙂 Jedná se o základní chat přímo od CFX, který je v každém serveru. tak si ukážeme, jak toto pozadí odstranit jednoduše aby to mohl udělat každý. 1) Otevřeme si resources/[gameplay]/chat/html/config.ts 2) Najdeme style objekt, který můžeme změnit k obrazu svému, my chceme transparentní pozadí Vypadá takto: export default { defaultTemplateId: 'default', //This is the default template for 2 args1 defaultAltTemplateId: 'defaultAlt', //This one for 1 arg templates: { //You can add static templates here 'default': '<b>{0}</b>: {1}', 'defaultAlt': '{0}', 'print': '<pre>{0}</pre>', 'example:important': '<h1>^2{0}</h1>' }, fadeTimeout: 7000, suggestionLimit: 5, style: { background: 'rgba(52, 73, 94, 0.7)', width: '38vw', height: '22%', } }; Jak vidíme, je tam background , která definuje barvu pozadí. Změníme tedy parametr z rgba hodnoty na transparent. export default { defaultTemplateId: 'default', //This is the default template for 2 args1 defaultAltTemplateId: 'defaultAlt', //This one for 1 arg templates: { //You can add static templates here 'default': '<b>{0}</b>: {1}', 'defaultAlt': '{0}', 'print': '<pre>{0}</pre>', 'example:important': '<h1>^2{0}</h1>' }, fadeTimeout: 7000, suggestionLimit: 5, style: { background: 'transparent', width: '38vw', height: '22%', } }; Po restartu by se měl aktivovat webpack a zkompilovat to znovu, protože došlo ke změnám na server konzoli se vám objeví hláška s buildem. Až bude build hotový stačí restartovat resource 🙂 Do té doby resource nepůjde nastartovat nelekněte se.
  4. Zdravíčko, tentokráte se podíváme na věc, kterou již pár z vás jistě vyzkoušela, přidáte addon vozidla na server a v garáži nebo někde jinde se místo jeho jména zobrazuji NIL / NULL, jak toto opravit? Je to v celku jednoduché. Pokud používáte esx_advancedgarage tak můžete vytvořit tento script uvnitř této složky ať to máte pohromadě ale jedná se o client script, který lze vložit všude. 1) Vytvoříme si vehicle_names.lua soubor 2) V souboru vytvoříme nové vlákno Citizen.CreateThread(function() end) 3) Přidáváme názvy do tohoto vlákna Citizen.CreateThread(function() --Example 1: AddTextEntry('SPAWN_NAME_HERE', 'VEHICLE_NAME_HERE') AddTextEntry('18performante', 'Lamborghiny Huracan') end) 4) Přidáme do fxmanifest.lua zápis našeho nové resourcu nezapomeňte přidat verzi hry a další potřebné věci client_script { 'vehicle_names.lua' }
  5. 1) Otevřeme si server.cfg 2) Nejdříve si musíme vybrat, který build vlastně chceme používat. 3) Před startování scriptů si vložíme tento text sv_enforceGameBuild [Build] ([BUILD] nahradíme číslem buildu) 4) Ted už jen složku uložíme a restartujeme server. Seznam dostupných buildu (18.02.2023)
  6. Zdravím, připravil jsem si pro Vás malý návod. Obtížnost tutoriálu: 1/5 List funkcí/věcí které použijeme dnes: Attributes EventHandlers["eventjmeno"] new Action<...>() TriggerEvent TriggerServerEvent Event je událost kterou lze volat jen u daného hráče nebo všem hráčům na serveru.. Takovéto eventy se dají využít i na server side čistě.. Bez dalších řečí pojďme se podívat jak registrovat a volat eventy.. Ukážu zde zase více příkladů jak registrovat eventy. Takto se tvoří jak serverové tak klientské eventy. //Vytvoříme funkci kterou pak budeme volat skrze TriggerEvent public void fullArmour() { API.SetPedArmour(API.PlayerPedId(), 100); } //Vytvoříme funkci s paramterama kde budeme hračovi přidávat armour, a budeme volat skrze TriggerEvent. public void giveArmour(int armour) { int playerPed = API.PlayerPedId(); API.SetPedArmour(playerPed, API.GetPedArmour(playerPed) + armour); } //[EventHandler("...")] je attribute který předává "vlastnosti" //dané funkci která půjde volat srkze event, veškeré parametry co zde jsou //tak půjdou volat skrze TriggerEvent. [EventHandler("giveWeapon")] public void giveWeapon(string weapon,int ammo) { API.GiveWeaponToPed(API.PlayerPedId(), (uint)API.GetHashKey(weapon), ammo, false, true); } public MainClass() { //Action nám zapouzdruje metodu kterou lze zapouzdrovat i pomocí //annonymních funkcích, lze přidávat parametry do action které si //ukážeme dóle, tento event nám doplní věškeré HP a lze volat pomocí TriggerEvent EventHandlers["fullHeal"] += new Action(() => { API.SetEntityHealth(API.PlayerPedId(), 250); }); //jak padlo nahoře, tento event bude příjmat datový typ INT //jak už naznačuje annonymní funkce i název eventu, tento event //nám bude léčit hráče ve hře. Lze vyvolat tento event pomocí TriggerEvent. EventHandlers["giveHeal"] += new Action<int>((health) => { int playerPed = API.PlayerPedId(); API.SetEntityHealth(playerPed, API.GetEntityHealth(playerPed) + health); }); //Zapouzdří nám funkci "fullArmour" lze volat pomocí TriggerEvent EventHandlers["fullArmour"] += new Action(fullArmour); //Zapouzdří nám funkci "giveArmour" lze volat pomocí TriggerEvent EventHandlers["giveArmour"] += new Action<int>(giveArmour); } a jak vyvolám takový event ? úplně jednoduše. Pomocí funkce "TriggerEvent" který má parametry takové String eventName params object[] parametry Ale pozor! Jestli chcete volat eventy které jsou čistě client side, musíte použít funkci "TriggerEvent" ale jestli chcete volat event který je na serveru tak musíte použít "TriggerServerEvent" [Command("healme")] void heal() { //Vyvolá event který jsme si registrovali nahoře. //v našem případě nás to vyléčí. TriggerEvent("fullHeal"); } [Command("weapon")] void giveWeapon() { //Vyvolá event který jsme si registrovali nahoře. //v našem případě nám toto dá zbraň pistol a 250 nábojů. TriggerEvent("giveWeapon","WEAPON_PISTOL",250); } a jak můžu "přenášet" proměnné z funkce ? [EventHandler("testValue")] void passValue(dynamic testValue) { //Typovost musí být vždy dynamic, protože jí lze deklarovat //jako dynamickou metodu.. a volá se jako normální funkce. //lze dávat více argumentů do této dynamické funkce. testValue("joujoujou cum na to"); } [EventHandler("testMoreValue")] void passMoreValue(dynamic testValue) { //příklad více parametrů. testValue("string",true,0.1f); } [Command("event")] void cmd() { //Zde musíme "zaobalit" tu dynamickou funkci kterou jsme si //deklarovali v eventu "testValue" jelikož vracíme string //tak budeme deklarovat new Action se stringem. TriggerEvent("testValue", new Action<string>((value) => { //Vypíšeme do konzole jaká je hodnota z dynamické funkce, //respektivě jeho parametry. Debug.WriteLine("string" + value); })); //Jen mezera do konzole ať lépe rozeznáme který text je který. Debug.WriteLine(" "); Debug.WriteLine(" "); TriggerEvent("testMoreValue", new Action<string,bool,float>((value,boolean,floatik) => { //to samé jako nahoře, akorát máme více parametrů. Debug.WriteLine($"{value}"); Debug.WriteLine($"{boolean}"); Debug.WriteLine($"{floatik}"); })); } Jelikož tento návod je pouze o eventech a jen jak NAČÍST esx. tak tady ukážu jen jak načíst esx jak client, tak server side. Jestli vás zajímá jaké funkce má ESX tak zde je jejich dokumentace: https://esx-org.github.io/es_extended/ client //Napíšeme si statickou dynamickou proměnnu //kterou budeme deklarovat hned jak se resource spustí. public static dynamic esx; public ClientMain() { //while je smyčka která se bude opakovat do té doby //dokud esx nebude mít null hodnotu. //proč chceme smyčku vůbec ? Protože se může stát že omylem //se náš script načte dřív jak ESX a nezapíše nic do "dynamic esx" while (esx == null) { //je lepší vždy dávat delay nad všechny funkce, jestli jedna //z funkci bude mít nějakou chybu tak se "Delay" nikdy nevyvolá //a crashne hra.. //Co vlastně tato funkce dělá ? //Vytváří úlohu která bude pozastavena po určitém čase, v našem případě //za 10 milisekund, ano čas se udává v milisekundách 1000 ms = 1 sekunda Delay(10); //Vyvoláme event který nám bude vracet dynamické metody //a ty zapíšeme do proměnné "esx" TriggerEvent("esx:getSharedObject", new Action<dynamic>(esxObj => { esx = esxObj; })); } } server //Napíšeme si statickou dynamickou proměnnu //kterou budeme deklarovat hned jak se resource spustí. public static dynamic esx; public main() { //Vyvoláme event který nám bude vracet dynamické metody //a ty zapíšeme do proměnné "esx" TriggerEvent("esx:getSharedObject", new Action<dynamic>(esxObj => { esx = esxObj; })); } Ještě se pojďme podívat na server side eventy, protože budete chtít někdy v budoucnu zjištovat jaký hráč trigroval event atd, tak pojďme si rovnou ukázat jak na to! //[FromSource] player, fivem handluje docela trošku zvláštně toto.. tento parametr //"Player" nemusíte vůbec nikde dávat do eventu aby tam byl. Kdykoliv vyvoláte //funkci "TriggerServerEvent" tak tento parametr se tam sám přenese. [EventHandler("sourcePlayerTest")] public void giveWeapon([FromSource] Player player,string text) { Debug.WriteLine(player.Name + " string value: " + text); } public serverClass() { //Bylo vysvětleno nahoře, zde jestli chcete zjištovat kdo event vyvolal, tak musíte //dát do parametrů Action "Player" jelikož to není funkce ale annonymní funkce tak //zde musíte dávat jenom datový typ Player a ne Attribute [FromSource] EventHandlers["AnotherTestSourcePlayer"] += new Action<Player, string>((player, text) => { //Vypíše do konzole jméno hráče a string z parametru "text" Debug.WriteLine(player.Name + " string value: " + text); }); } Jak takový event vyvolám ? Ale pozor! Jestli chcete volat eventy které jsou čistě server side, musíte použít funkci "TriggerEvent" ale jak vyvolám eventy ze serveru pro hráče ? Máme tady 2 funkce které budeme volat pro hráče... player.TriggerEvent("eventName") toto nám vyvolá jen u daného hráče event. TriggerClientEvent("eventName") Tato funkce vyvolá daný event úplně u všech lidí na serveru... Ale pozor, jestli ovládáte luU tak víte že musíte vyplnít "-1" aby se to vyvolalo u všech lidí na serveru, zde nemusíte specifikovat hráče protože to dělá funkce co jsme si ukazovali nad náma. Příklad client side: [Command("serverevent")] void playerCommand() { //Vyvolá event na serveru se jménem "AnotherTestSourcePlayer" TriggerServerEvent("AnotherTestSourcePlayer","textik lulik"); } //registrujeme příkaz "healplayer" a musíme kontrolovat i parametry //logicky když to chceme vyvolávat u určitého hráče tak musíme //řešit jeho ID... stím nám pomůže "string[] args" který nám bude //vracet co vlastně za parametry zadal do příkazu //musíte zadat /healplayer <ID> [Command("healplayer")] void addGroup(string[] args) { //Jelikož c# začíná s číslem 0 a ne 1 jako lua tak zadáme 0. //Jelikož c# řeší typovost, tak musíme ze stringu udělat int //a stím nám pomůže funkce Parse. Která nám ze stringu udělá int TriggerServerEvent("HealPlayerFromId", Int64.Parse(args[0])); } Příklad server side: [EventHandler("AnotherTestSourcePlayer")] void testEvent() { //vyvolá u všech lidí na serveru event "fullHeal" TriggerClientEvent("fullHeal"); } //Logicky budeme potřebovat ID hráče takže si napíšeme parametr "ID" //který pak budeme volat skrze client/server odkud chcete. [EventHandler("HealPlayerFromId")] void fromId(int id) { //toto nám vratí instanci daného hráče z ID. Player player = new PlayerList()[id]; player.TriggerEvent("fullHeal"); } Výsledek: Client event "fullHeal" event "testValue" a "testMoreValue" event "giveWeapon" server Jedná se o event "sourcePlayerTest"
  7. 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í 🙂
  8. Zdravím, připravil jsem si pro Vás návod pro Fivem c# resource. Obtížnost tutoriálu: 1/5 List věcí které budeme potřebovat: Visual studio Fivem client Fivem server Visual studio Vytvoříte nový projekt který bude v jazyku C# a jako předloho vyberete "Class Library (.NET Framework)". Až vybere tuto předlohu tak máte ještě jednu možnost a to vybrat verzi FrameWorku, tak si vyberete ".NET FrameWork 4.5.2" Výsledek by měl vypadat nějak takto (Jestli nemáte ale Visual studio 2017 tak nemáte takovéto UI bude vypadat jinak ale furt tam máte stejné možnosti jako zde!) Až se Vám dotvoří projekt tak se Vám ukáže toto: Vás bude aktuálně zajímat "FivemResource" (Záleží jak jste si pojmenovali projekt, může to být odlišné od toho jak jste si to pojmenovali.) Pravým kliknutím na "FivemResource" vám vyjedou různé možnosti, a Vy musíte najít "Properties" a kliknout na to. Když jste udělal tento postup tak Vám vyjede takové nastavení, a Vás budou zajímat pouze 2 tabulky a to "Application" a "Build". Nejdříve půjdeme do "Application" a tam máme input se jménem "Assembly name" za ten název tam musíte přidat .net jestli nepřidáte .net tak se Váš resource nespustí! Nadále půjdeme do nastavení "Build" a tam je sekce "Output" a změníme akorát output path do naší složky kde máme fivem server -> resources Pak všechen postup uložíte zkratkou "CTRL + S" Všechny kroky pak vypadají takto: A teď musime přidat "CitizenFX.Core.dll" knihovnu do našeho projektu ve visual studiu. Nejdříve si musíte rozkliknout Váš projekt a tam pak uvidíte "References" pravým klikem vám vyjede pár možností a Vás bude zajímat: "Add reference". Tam pak máte tlačítko "Browse" a z dole uvedené cesty si přidáte tuto knihovnu. Knihovna se nachází ve Vaší Fivem složce (hra) najdete jí zde "...\FiveM.app\citizen\clr2\lib\mono\4.5". Pak už kliknete jen na "OK". Knihovna je importovaná už v projektu, ale musíte ještě nastavit aby se Vám tato knihovna při kompilaci projektu ne-exportovala s projektem. Rozkliknete si zase "Properties" aby jste viděl všechny itemy, najdete "CitizenFX.Core" kliknete pravým tlačítkem na "properties". Ukáže se Vám tabulka "properties" tam najdete "Copy Local" a hodnotu z "true" změníte na "false" Teď půjdeme na kódovaní! Nejdříve si musíme implementovat naší třídu "BaseScriptem" aby Fivem dokázalo spustit náš resource. na červenej text najedete myškou a zmáčknete alt + enter Dále si můžeme vytvořit jednoduchý příkaz jen aby jsme veděli že resource funguje A takto vypadá client side 🙂 Další na řade je server side... Pravým tlačítkem kliknete na "Solution 'FivemResource'" a dáte add -> new project -> Class Library (.NET Framework) akorát si to pojmenujete "server" Další na řadě je zase knihovna... úplně stejný postup akorát jiná cesta 🙂 Knihovnu najdete v "..../FiveM_server\citizen\clr2\lib\mono\4.5" a tam zase najdete "CitizenFX.Core.dll" v kódovaní je stejný postup... Class1 : BaseScript Poslední krok je export... a to stačí kliknout pouze F5 Pak si vytvoříme akorát fxmanifest.lua který bude mít tyto soubory v clientu + serveru client_scripts { 'FivemResource.net.dll' } server_script { "server.net.dll", } Obrázky ze hry + konzole
×
×
  • Create New...