Jump to content
Fivem-DEV.cz

Search the Community

Showing results for tags 'fivem'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Informace
    • Pravidla
    • Informace
    • Vyhlášení
  • rcore
    • Release
  • Fivem Dev
    • Pomoc
    • Upravené verze
    • Veřejně dostupné
    • Prezentace
    • Hledám / Nabizím
    • Návody
  • Fivem servery
    • Prezentace serverů
    • Recenze serverů
  • Temná doba
    • Cheateři / Buggeři
    • Podvodník
    • Ostatní

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 16 results

  1. Ahoj, chtěl bych se zpetat na jednu věc. Mám na fivem serveru unicorn job a v sql bylo pár drinků, ale pokaždé když si drink givnu nemůžu ho pít ani jeden ani z jiných s scriptu který jsem zkoušel. Pokuď někdo ví proč tak bych byl rád za radu..Děkuju
  2. Zdravím. Hledáme Fivem developera, který nám pomůže dodělat server, který je na 85% hotový. Dobře zaplatíme.
  3. Zdravíčko! Vítám Vás u jednoduchého a začátečnického počteníčka, jak začít se lua skriptováním v prostředí FiveM. Budu se snažit vysvětlit většinu věcí, co nejvíce do detailu, aby to pochopil doopravdy i jednotlivci. Předtím, než se vrhneme do FiveM by bylo fajn se seznámit s lua jazykem. Lua jako každý jiný jazyk (programovací / skriptovací) má vlastnosti, které můžete i nemusíte znát. Ovšem jsou sdílené napříč skoro všemi jazyky a tím, že budete dělat skripty se můžete začít zajímat i o reálné programování a svět okolo kódování. Pojďme si říct o těch vlastnostech. Proměnné / funkce / tipy Nejvíce základní věci všech jazyků jsou právě proměnné. Proměnné mají mnoho typů a také mají svojí takzvanou "dálku vidění" (scope) v daném kódu. V samotném lua jazyce existuje mnoha funkcí / metod, které jsou velmi užitečné a nemuseli jste je do teď znát. Jdeme si uvést příklady, se kterými se v lua skriptování můžeme potkat. -- Typy proměnných v lue -- Proměnnou si představte něco jako "úložiště" pro data. variable = nil -- Proměnná variable nemá hodnotu. variable = "string" -- Proměnná variable je string. A tento string obsahuje text "string". variable = 0 -- Proměnná variable je integer (v lue se používá number). Hodnotou je 0. -- POZOR!! -- V případě, že nastane případ, kdy proměnná variable vypadá takto: variable = "0" -- Tak se typově už NEJEDNÁ o number, ale o string. Nutno si toto rozlišit. Jak si to převést? variable = "0" alterVariable = tonumber(variable) -- Tato lua funkce nám zajistí, že ve stringu najde tu danou 0 a převede jí na 0. (proměnná se uvede jako number). -- tonumber() funkce se také dá použít jako check zda string obsahuje číslo, pokud ne vrátí Vám hodnotu nil (která se také beré jako false při podmínce) if tonumber("dfdf") then -- string "dfdf" obsahuje číslo (neobsahuje) else -- string "dfdf" neobsahuje číslo (neobsahuje) end -- Tato funkce je dosti používaná při pracování s daty, které jsou ve právě stringu. -- variable = {} -- table / pole, které může mít své vlastnosti. variable = true; variable = false -- boolean / pravda, nepravda. Na tomdle asi není, co víc vysvětlovat. -- Na závěr dodám, že existuje ještě jedna fajn lua funkce a tou je: type(variable) -- Zjistí Vám to typ dané proměnné. (string, number, table, boolean) -- -- Cykly -- Hlavní cykly -> for a while. Uvedeme si příklady použití obou. local locations = {"Praha", "Brno"} -- for ... do for i=1, #locations do -- Lua indexuje od 1. Tímpádem si vytvoříme proměnnou i, která bude mít počáteční hodnotu 1 a cyklus se provede tolikrát, dokud i nebude mít hodnotu #locations. (#locations je v našem případě délka tohoto pole. V tomto případě 2.) print(locations[i]) -- ukaž mi hodnotu v locations na indexu i. end -- while ... do local showingOnScreen = true -- ukazuje se něco na obrazovce? Ano. while showingOnScreen do -- jeden z mnoha příkladů -- VE FIVEM SE MUSÍ VE WHILE CYKLU ČEKAT! Citizen.Wait(počet milisekund) -- operace, která se bude provádět neustále dokud proměnná showingOnScreen nebude nepravda / false. end -- -- Scopes / viditelnost v kódu -- Mezi proměnnými v lua skriptování existují 2 scopy. local / global local variable = nil -- < Toto je lokální proměnná. variable = nil -- < Proměnná bez určení scopu je vždy globální. -- Kdy se s tímdle reálně setkáme ? -- Vytvoříme si nějakou funkci. useDefaultName = true -- Vytvoříme si proměnnou defaultName, která bude globální playerName = getPlayerName() -- Vytvoříme si proměnnou playerName, která bude globální. Tato proměnná zavolá metodu getPlayerName. function getPlayerName() -- Metoda / funkce. V rámci jednoduchosti tomu budeme říkat prostě funkce. local name -- Určíme si lokální proměnnou name. Aktuálně nemá hodnotu (nil). Jde používat pouze v rámci té funkce, kdekoliv jinde Vám bude později vracet nil. Tato proměnná pokaždé při zavolání této funkce nebude mít hodnotu. Nějakou hodnotu jí přidělíme. if useDefaultName then -- Uděláme si podmínku, která by se dala přeložit takto (pokud proměnná useDefaultName je pravda tak proveď) name = "Pavel" -- výše uvedená lokální proměnná name bude mít hodnotu Pavel (string), protože se zde její hodnota upravila za pomocí proměnné, která je "globální". else -- Pokud je podmínka nepravda (false) tak proveď operaci: name = "Franta" -- výše uvedená lokální proměnná name bude mít hodnotu Franta (string). end return name -- Metoda vrátí výše uvedenou proměnnou name. V našem případě vrátí Pavla. end -- Nyní se přesuneme na skriptování ve FiveM, protože tyto znalosti nám aktuálně stačí k tomu si vytvořit jednoduchý skript pro nakupování itemů (postavené na ESX). !! Upozorňuju, že Vás zde nebudu učit, jak vytvořit server / zapnout ho nebo jak dát resource do server.cfg. To snad víte všichni už. !! Vytvoříme si složku se skriptem. Např. strin_example pro moje účely. Do této složky si vytvoříme základní soubory (lua soubory) Můžeme si to uspořádat takhle: Ovšem já mám radši větší pořádek, a tak si to rozdělím pro lepší přehlednost. Do client a server složky si udělám: Tento soubor nám bude v obou případech sloužit jako hlavní skript mezi všemi v těch složkách. Nyní se vrátíme zpět a koukneme se do fxmanifestu. Ten by měl vypadat přibližně takto: fx_version 'cerulean' -- FX verze. resource_manifest_version je "deprecated" (zastaralé), nový výraz je fx_version game 'gta5' -- Hra, na kterou je resource / skript tvořen. (gta5 / rdr3 nebo i oboje -> games {gta5, rdr3}) client_scripts { -- Skripty, které se načtou clientovi. 'client/*.lua', -- Osobně využívám "globbing". Tedy nepíšu furt nové řádky 'client/jméno_skriptu.lua', ale napíšu 'client/*.lua' a to mi načte veškeré soubory ve složce client s příponou .lua 'config.lua' -- Soubor, který bude obsahovat konstanty / Config, bude sdílený pro clienta i server a nebude se měnit. } server_scripts { -- Skripty, které se načtou serveru. 'server/*.lua', -- opět "globbing". 'config.lua' -- opět sdílený soubot. } Nyní, když půjdeme na náš server a do F8 napíšeme refresh by nám mělo FiveM napsat, že soubor byl úspěšně načten. Takže resource máme ready a můžeme se do toho vrhnout. Jako první destinaci si dáme config.lua. Zde si napíšeme data, které chceme, aby používal client i server. Jelikož budeme dělat jako příklad shopy, tak si dáme tento kód. -- Zde si budu psát proměnné caps lockem. Vytvoříme si takové "fake" konstanty (nepřepisovatelné proměnné). -- Jelikož je lua case-sensitive tak nám toto nejvíce zaručí, že si to nepřepíšeme. ONESYNC = true -- Pokud jsme uživatelé onesyncu tak tato proměnná bude pravda. (Onesync je dobrá věc zejména díky server-side zabezpečení -> uvidíte později) ESX_VERSION = 1.1 -- Určení jaké ESX máme 1.1 a níže nebo 1.2 / v1-final. AMOUNT_TO_BUY = 1 -- Kolik si hráč koupí při jedné návštěvě? SHOP_LOCATIONS = { -- proměnná SHOP_LOCATIONS, která je pole a obsahuje vectory. vector3(20.33268737793,-1106.1296386719,29.797008514404), -- vector3 je víceméně table, které má 3 numerické hodnoty x, y, z a používá se ke koordinacím. vector3(25.747142791748,-1344.9035644531,29.497022628784), } SHOP_ITEMS = { -- table / pole SHOP_ITEMS pro itemy {name = 'bread', label = 'Chleba', price = 40}, -- další pole pro jednotlivý item {name = 'beer', label = 'Pivo', price = 60} } Základní data v configu máme a teď s nimi jdeme na client pracovat! :) Otevřeme si client/main.lua, v prohlížeči https://docs.fivem.net/natives/ a začneme. ESX = nil -- globální proměnná ESX Citizen.CreateThread(function() -- "vlákno", které nám načte ESX while ESX == nil do TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) Citizen.Wait(0) end end) Citizen.CreateThread(function() -- naše hlavní "vlákno" AddTextEntry('OPEN_SHOPS:FIVEMDEV', '~INPUT_CONTEXT~ Otevrit obchod') -- Na začátku vlákna si vytvoříme text entry pro otevření obchodu. while true do -- cyklus while, který poběží vždy dokud pravda bude pravda. (To se chápeme, že vždy) Citizen.Wait(0) -- FiveM čekání lehce řečeno. (Pokud cyklus while nemá čekání tak se Vám FiveM freeze). V našem případě budeme chtít prozatím každý frame. local ped = PlayerPedId() -- Proměnná ped, která nám získa ID peda clienta. local coords = GetEntityCoords(ped) -- Proměnná coords, která získa koordinace entity. (pro nás to bude náš ped) local distanceToShop = 10000.0 -- Proměnná, která nám bude držet nejbližší distanci k jakémukoliv shopu for i=1, #SHOP_LOCATIONS do -- cyklus for local distance = #(coords - SHOP_LOCATIONS[i]) -- length operátor -> #(Naše koordinace - koordinace obchodu) if distance < distanceToShop then distanceToShop = distance end if distance < 50.0 then -- Pokud je vzdálenost menší, než 50 tak proveď DrawMarker( 21, -- typ markeru SHOP_LOCATIONS[i], -- naše koordinace na indexu i z cyklu for 0, -- směr X 0, -- směr Y 0, -- směr Z 0, -- rotace markeru X 0, -- rotace markeru Y 0, -- rotace markeru Z 0.5, -- šírka X 0.5, -- šírka Y 0.5, -- šírka Z 30, -- červená 50, -- modrá 100, -- zelená 140, -- alpha / opacity. 0 až 255 false, -- chceme, aby marker skákal? false, -- chceme, aby se marker otáčel ve směru hráčova vidění? nil, -- nemá vliv true -- chceme, aby se marker točil? ) -- vykresli marker. end if distance < 3.0 then -- Pokud je vzdálenost menší, než 3 tak proveď DisplayHelpTextThisFrame('OPEN_SHOPS:FIVEMDEV') -- Ukaž help text každý frame. if IsControlJustReleased(0, 38) then -- Pokud je zrovna spuštěna klávesa E, tak proveď openShopMenu() -- Zavolej funkci na otevření menu obchodu. end end end if distanceToShop > 60 then -- pokud je distance větší, než 60 tak nám čekej v tomto cyklu sekundu. (Značná optimalizace) Citizen.Wait(1000) end end end) function openShopMenu() -- funkce na otevření menu obchodu local elements = {} -- lokální proměnná elements, která nám bude sloužit jako pole pro elementy itemů -- Tato část je dost o pochopení ESX menu. Doporučuju se kouknout přímo na dokumentaci ESX. for i=1, #SHOP_ITEMS do -- cyklus for, používáme na itemy local item = SHOP_ITEMS[i] -- SHOP_ITEMS na indexu i (určité pole z SHOP_ITEMS) local itemLabel = string.format('%s - $%s / %sks', item.label, item.price * AMOUNT_TO_BUY, AMOUNT_TO_BUY) --[[ využijeme lua funkce string.format a uděláme si pěkný label pro náš item. string.format nahrazuje %s ve stringu námi udanými hodnotami. ]] table.insert(elements, {label = itemLabel, value = i}) --[[ vkládáme do pole elements pole, která má hodnoty label & value label bude mít hodnotu itemLabel a value bude mít hodnotu i (indexu itemu v poli) ]] end ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'shop_menu', { title = 'Obchod', -- Nadpis menu align = 'center', -- Kde se menu bude nacházet elements = elements, -- elementy menu }, function(data, menu) -- on select callback menu.close() -- Zavři menu po zakoupení itemu. TriggerServerEvent('strin_example:buyItem', data.current.value) -- Zavoláme server event na koupení itemu s udáním indexu na daný item. end, function(data, menu) -- on cancel callback menu.close() -- Zavři menu, když ho hráč chce zavřít. end) end Teď, když máme napsaný client se podíváme do server/main.lua. o_o ESX = nil TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end) --[[ opět si načteme esx, ovšem tentokrát na serveru. ]] RegisterNetEvent('strin_example:buyItem') -- Registrace network eventu. (server eventu) AddEventHandler('strin_example:buyItem', function(itemIndex) -- na tento event mi přidej handler s funkcí: local _source = source --[[ uložíme si ID sourcu. (source je vždy server ID clienta, který zavolal tento event) ukládáme si ho, abychom ho neztratili. ]] local xPlayer = ESX.GetPlayerFromId(_source) -- přes ESX si zjistíme hráče skrze ID if isPlayerNearShop(_source) then -- V této podmínce si zavoláme funkci zda je hráč blízko shopu a předáme jí ID hráče. local item = SHOP_ITEMS[itemIndex] -- uvedeme si jaký item si hráč zakoupil. V tomto případě item na indexu itemIndex local price = item.price * AMOUNT_TO_BUY -- cena na kus if canPlayerCarryItem(_source, item.name, AMOUNT_TO_BUY) then -- naše funkce, která nám zkontroluje zda hráč může dostat tolik itemu. if doesPlayerHaveEnoughMoney(_source, price) then -- naše funkce nám zkontroluje zda hráč má dostatek peněz. xPlayer.removeMoney(price) -- odečti cenu z hráčových kapes. xPlayer.addInventoryItem(item.name, AMOUNT_TO_BUY) -- xPlayer funkce na přidaní itemu TriggerClientEvent('esx:showNotification', _source, string.format('Koupil jste %s - %sx za $%s', item.label, AMOUNT_TO_BUY, price)) -- esx notify event end else TriggerClientEvent('esx:showNotification', _source, 'Máš plné bágly brácho') --[[ Jelikož nevím zda používám ESX 1.1 nebo výše, tak si to ujistím eventem, který mají obě verze. O tomto eventu si více můžete zjistit v ESX dokumentaci. ]] end else print('??') end end) function isPlayerNearShop(id) if ONESYNC then -- Uděláme si podmínku na to zda je ONESYNC proměnná v configu uvedená jako pravda. Pokud ano proveď: local ped = GetPlayerPed(id) -- zde používám GetPlayerPed(id) za účelem toho, že musím získat peda daného hráče a na serveru PlayerPedId()... To snad dojde všem, že ne. :D local coords = GetEntityCoords(ped) -- opět získáme koordinace local distanceToShop = 100 for i=1, #SHOP_LOCATIONS do -- opět for cyklus jako na clientovi local distance = #(coords - SHOP_LOCATIONS[i]) -- opět vypočteme vzdálenost if distance < distanceToShop then distanceToShop = distance end if distanceToShop > 10 then -- pokud vzdálenost od jakéhokoli shopu je větší, než 10 (budeme více tolerantní) tak proveď return false -- není blízko obchodu, vracím false end end end return true -- Na konec funkce si zapíšeme, že hráč je blízko shopu a vrátíme true. (v průběhu této funkce nám to může vrátit nějaký return dřív.) end function canPlayerCarryItem(id, item, count) local xPlayer = ESX.GetPlayerFromId(id) -- získáme si opět pomocí ESX hráče skrz ID if ESX_VERSION >= 1.2 then -- pokud je ESX verze nad 1.2 tak proveď: if xPlayer.canCarryItem(item, count) then -- xPlayer funkce to už řeší za nás. return true -- vrať true, hráč může nosit item end else local xPlayerItem = xPlayer.getInventoryItem(item) -- tato xPlayer funkce nám zjistí informace o itemu a stavu o itemu u hráče. if (xPlayerItem.count + count) <= xPlayerItem.limit then -- pokud je nový počet itemu u hráče menší, než limit nebo se rovná limitu tak proveď: return true -- vrať true, hráč můž nosit item end end return false -- vrať false, hráč má plný bágl PepegaClap end function doesPlayerHaveEnoughMoney(id, price) local xPlayer = ESX.GetPlayerFromId(id) -- získáme si opět pomocí ESX hráče skrz ID if (xPlayer.getMoney() - price) < 0 then -- odečti od aktuálních peněz, co má u sebe hráč cenu itemů. Pokud je to menší, než 0 tak nemá prachy. return false -- vrať false, hráč nemá na rohlík end return true -- vrať true, hráč může roztáčet prašule end No a pomocí těchto kroků se dokážete naučit psát jednoduché skripty. Není to hitparáda nějaká, ale tydle malé zkušenosti Vás můžou dovést k velkým věcem. Vždy je to o tom se učit a nechat si radit od zkušenějších. Snad Vám tento "tutoriál" nějak pomohl k sebe rozvoji a ještě si na závěr dodáme in-game ukázku. V blízkosti - 0.02 / 0.03 Idle - 0.01 Ozkoušet si to můžete sami, děkuju za pozornost. :) Pokud jsem na něco zapomněl nebo napsal blbost, tak se omlouvám. Píšu to už 3 hodiny a je 3:30. Dobrou noc. :D
  4. Zdravím, mám problém s jobom esx_ambulancejob, je to jediný job, v ktorom bolo automaticky pridané bossmenu, takže preto som sa rozhodol požiadať o Vašu pomoc. Job nebol od začiatku úplne v poho a musel som ho fixovať napr. nešlo brať bandáže ani medkity. Menu na shop funguje, ale keď dám buy a kliknem Enter na auto, ktoré chcem, tak mi ho nekúpi. Žiadny error v f8 nieje, ani v celkovom log viewe. Ďakujem za každú pomoc. :D
  5. Ahoj, potřeboval bych pomoct když hodím inventář na server a dám F2 tak se mi nic neukazuje vůbec žádny item či zbran ale givl sem si je a vidím je i v DB v consoli se mi ukáže toto : es_extended: TriggerServerCallback => [esx_inventoryhud:getPlayerInventory] does not exist Budu rád za každou radu dekuji es_extended 1.1.0 download: https://github.com/Trsak/esx_inventoryhud
  6. Chtěl bych vám říct příběh o jednom člověku co si říká "developer" na discordu se jmenuje Franzyku, co udělal? Jeho develop funguje buď to jde nebo ne,? Neví ani co je DB. Neumí ani změnit název serveru ale abych začal úplně od začátku. Začal jsem se učit developovat snažil jsem se zlepšovat. Učil jsem se to kvůli svému kamarádoj (jeniiik). Protože náš starý developer dával každý script leak. Ale to zas odbočuji. Zámek první script co jsem přidal byl /carry a říkal jsem si že mě tohle baví a budu se v tom zlepšovat. Časem co jsem se naučil "developovat" jsem začal nastavovat kamarádovi server byl "docela úspěšný" pak přišel novej developer co po pár dnech smazal server a já si řekl, že půjdu někam jinám ozval se mi "streamer" (za tu dobu co jsem developoval kamarádovi server jsem se toho hodně naučil udělat custom hud atd) Potom co mě streamer ukázal co má na serveru byl to leak, za leakem [nevědělani co to je :kekw:] A ja mu řekl že je to na reinstalaci moc se mu do toho nechtělo a on se pak rozhodl že ano, když jsem jíž měl prostor developovat tak jsem začal, přidal jsem základní scripty esx_society, es_extend atd, snažil jsem se u každé joby aby byla hezky udělaná a výjimečná, když jsem tam byl já tak de tam držel nějaký řád, pak přišel pan franzyk řekl že chce být car adder tak jsme se ho zeptali na nějaké základní otázky, jak zistím spawncode a tohle Podezřele dlouho mu to trvalo, usoudil jsem že to při tom někde čte [byl to můjsubjektvní názor] když jsem mu řekl ne tak se nasral a udělal si ticket odpověděl jsem mu tam znovu a slušně že ne, a majitel se najednou nasral a vyhodil mě a vzal pa a franzyka jeho develop probíhal nějak takhle: stahnul script přidal to do server.cfg a buď to půjde nebo ne, Neuměl ani změnit název serveru, pak přišel kluk co začal všem na jednom serveru posílat inv na ten luckyRP {byl jsem tam dev} oznámil jsem slušně majiteloj že mu dám ban za reklamu majitel řekl ano souhlasím, dostal ban, a najednou mě napsal do pm že jsem nejhorší dev, q že nic neumím, a já jsem mu řekl že ten jejích dev neumí ani změnit jméno, začal mě nadávat do rodiny, atd. Po 20 minutách hádání si uvědomil že najednou nemá šanci protože jeho argument ná větu; že jejích dev neumí ani opravit chat. Tak začal říkat že jsem zbytečný člověk. Tak řekl kamarádům ze školy aby všude napsali že jsem čůrák. Byl jsem z toho smutnější jak si takovou kokotinu může někdo někam napsat. Neřešil jsem a řekl jsem si že s něma to nemá cenu. Proto všechny 🚨upozorňuji 🚨 aby pana franzyka nebrali jako deva je to leaker,a developer buď to půjde nebo ne. Pardon za gramatické chybi psal jsem to na rychlo. 🎫Rád va vše zodpovím, klidně se ptejte🎫
  7. Zdravím, mám problém. Dnes jsem nainstaloval kashacters a vše fungovalo jak má. Každopádně když jsem vymazal stávající usery v databázi a chtěl si vytvořit nový přes kashacters tak také vše fungovalo, každopádně až do doby co jsem leavnul server a znova zvolil ten stejný charakter a spawnulo mě to s npc postavou. Nevíte někdo kde by mohla být chyba? Žádný error mi to v F8 nevyhazuje. 🤔😕
  8. Hľadám schopného developera ktorý by zvládol nastaviť server, tak aby fungoval. Ak by to nastavil tak by bola aj finančná odmena Discord: Fifko#8832
  9. BaspelOp

    Názor

    Zdravím, potřebuju znát názory více lidí. Jedná se o názor na https://www.fivem-store.com/ Z doslechu jsem se dozvěděl, že tam je docela dost leaknutých scriptů. Takže kde je zakopaná pravda?
  10. Jednoduchý script pro plynovou masku Použitím si ji nasadíte a následně nedostáváte žádný damage od plynu. Github: https://github.com/Marvisak/esx_gasmask FiveM: https://forum.cfx.re/t/release-esx-gasmask/1790186
  11. Návod na vytvorenie mapy YMAP cez CodeWalker Budete potrebovať : Codewalker : https://www.gta5-mods.com/tools/codewalker-gtav-interactive-3d-map A nainštalované GTA 5 ČASŤ PRVÁ - NASTAVENIE CODEWALKERU Krok 1 - Otvorte menu v Codewalker. Pre pepíkov : Musíte kliknúť na tlačítko, ktoré je zakrúžkované na obrázku. Krok 2 - Zapnite si DLC možnosť. Zasa pre pepíkov : Zaškrtnite políčko "Enable DLC" viz. na obrázku. Krok 3 - Otvorte sekciu Selection a tam si zapnite Mouse Select a Mód si nastavte na Entity Pre pepíkov : Záver : Super a teraz ste pripravený pridávať objekty! ČASŤ DRUHÁ - PRIDÁVANIE OBJEKTOV Krok 1 - Stlačte písmeno T a mal by sa vám objaviť tento Tool Bar. Krok 3 - Vytvorte YMAPU a pridajte tam objekt. Kliknite na new file a potom na New ymap file Malo by sa vám otvoriť toto okienko : Premenujte si mapu. Kliknite na políčko Ymap hore a kliknite New Entity. Malo by sa vám vytvoriť entita v podobe vajíčka. S entitou môžete hýbať a otáčať pomocou toolbaru. Entitu môžete zmeniť tu : Nejaké propy môžete nájsť na tomto webe: https://plebmasters.de/?app=objects Ja použijem: prop_palm_med_01b Položte si entitu na nejaké miesto kde chcete. Ja si moju palmu dám na HL. Garáže Entitu môžete duplikovať pomocou klávesy LSHIFT. - Pre pepíkov Ľavý Shift. Ja som si na HL. Garáže pridal palmy. ČASŤ TRETIA - EXPORT Stlačte Calculate all flags a Calculate all extents. Potom už len súbor uložte ako .ymap do hocijakého priečinka. Potom nezabudnite na Manifest! Skopírujte si celý kód manifestu, a dajte ho do textového editora a uložte to ako formát .ymf (Odporúčam Notepad++) (v starších verziach ide rovno stiahnuť súbor _manifest.ymf) Vytvorte si priečinok napr. MojaMapa, tam vytvorte ďalší priečinok s názvom stream a tam presuňte vaš YMAP a YMF súbor. Už len stačí keď interiér nainštalujete pomocou tohto návodu : https://fivem-dev.cz/index.php?/topic/186-jak-přidávat-mapu-na-server-ymap/ ZÁVER Ak by náhodou niečo nefungovalo, alebo som sem niečo napísal zle, nebojte sa mi to povedať :D Som občas krypel a niečo pokazím. Neviem čím sa tu hodnotia príspevky, ale poteším sa za každý like alebo upvote. Za dostatočný počet upvotov urobím aj návod na retextúrovanie budov a interiérov :D Pre nejaké dotazy ma môžete kontaktovať na discorde : Bromomento#2778 Ale prosím nevolajte mi, alebo nepíšte mi o polnoci. Díky <3
  12. Shiney

    Měna

    l
  13. 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" Další návody na c#
  14. 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í 🙂 kdyby měl někdo nějaký dotaz rád ho zodpovím. Další návody na c#
  15. Ahoj komunito, Chtěl bych se zeptat, jestli jde pro kashacters (multi character) práva. To znamená, že normální hráč si bude moc vytvořit 1 postavu, VIP 2 postavy a admin třeba 3 postavy. Děkuji za rady 😀 DrGumik.
  16. 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 Jestli jste postupovali podle návodu, tak by vám to mělo jít a vypisovat toto v konzoli + ve hře. Pak si logicky musíte napsat fxmanifest.lua zde máte jeden úžasný návod jak to udělat Akorát místo client_scripts { 'client/*.lua' } Dáte client_scripts { 'JMÉNO DLL SOUBORU.net.dll' } u mě je to tedy client_scripts { 'FivemResource.net.dll' } pro serverScript server_script { "server.net.dll", } Obrázky ze hry + konzole Další návody na c#

Our partners

rcore.cz
K4mb1
SLTH
×
×
  • Create New...