Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation since 05/06/20 in all areas

  1. Shrnutí Tento script využívá ox_lib pro vykreslení meníčka ve hře (dependency, jednoduše předělatelné), xSound pro spouštění a synchronizaci hudby (dependency) ve hře a v neposlední řadě také ox_target (optional). Hudbu lze pozastavit a obnovit. Můžete také měnit hlasitost z 0,01 až na 1 (nejhlasitější). Požadavky xSound: https://github.com/Xogy/xsound ox_lib: https://github.com/overextended/ox_lib Dobrovolný ox_target: https://github.com/overextended/ox_target Vlastnosti / Funkce Můžete přidat nespočet míst Změnit dosah hudby Hudba je synchronní s ostatními hráči V této fázi podporuje jen ESX Vše je jednoduše konfigurovatelné pomocí configu Script je open source, jednoduše si ho můžete předělat Podporuje ox_target Můžete si vytvořit svůj vlastní playlist skrz config Náhled / Upoutávka Odkazy ke stažení GitHub: https://github.com/BaspelOp/dj_baspel Direct download:
    6 points
  2. V článku SQL - Základní informace jsme si řekli základní informace o SQL a ukázali si možnost založení uživatele. V tomto článku se probereme více možnostmi pro práci s uživatelem. Příkaz CREATE v jazyce SQL slouží k vytváření nových objektů v databázi, jako jsou tabulky, pohledy, indexy, procedury, funkce, uživatelé atd. Možnosti příkazu CREATE jsou specifické pro každý typ objektu, který se vytváří. Níže uvádím některé z možností příkazu CREATE pro nejčastěji používané typy objektů v databázi: CREATE TABLE: vytvoří novou tabulku v databázi CREATE VIEW: vytvoří nový pohled na tabulku nebo pohledy v databázi CREATE INDEX: vytvoří nový index na tabulku nebo pohled v databázi CREATE PROCEDURE: vytvoří novou uloženou proceduru v databázi CREATE FUNCTION: vytvoří novou uloženou funkci v databázi CREATE TRIGGER: vytvoří nový trigger (spouštěč) pro sledování událostí v databázi CREATE USER: vytvoří nového uživatele databáze CREATE DATABASE: vytvoří novou databázi Každý z těchto příkazů má mnoho dalších možností a specifických syntaxí, které se používají pro vytváření konkrétních objektů v databázi. Pro vytvoření uživatele tedy budeme potřebovat CREATE USER CREATE USER user_name IDENTIFIED BY 'password'; Tento příkaz vytváří nového uživatele a přiděluje mu heslo pro přihlášení. user_name je jméno uživatele a password je heslo. Příkaz CREATE USER vytváří uživatele bez jakýchkoli oprávnění. Klíčové slovo IDENTIFIED BY slouží k přidělení hesla Když budeme chtít takto vytvořeného uživatele přiřadit k nějaké databázi a nastavit mu oprávnění, budeme potřebovat příkaz GRANT Příkaz GRANT slouží k udělení přístupových práv uživatelům v databázi. Mezi hlavní možnosti patří: GRANT SELECT - umožňuje uživateli číst data v tabulkách GRANT INSERT - umožňuje uživateli vkládat data do tabulek GRANT UPDATE - umožňuje uživateli aktualizovat data v tabulkách GRANT DELETE - umožňuje uživateli odstraňovat data z tabulek GRANT CREATE - umožňuje uživateli vytvářet nové databáze, tabulky nebo indexy GRANT DROP - umožňuje uživateli odstraňovat databáze, tabulky nebo indexy GRANT ALTER - umožňuje uživateli měnit strukturu tabulek GRANT ALL PRIVILEGES - umožňuje uživateli přístup ke všem funkcím databáze GRANT EXECUTE - umožňuje uživateli spouštět uložené procedury nebo funkce Při použití příkazu GRANT může být uvedeno i specifikum, jako je určení konkrétní tabulky nebo databáze, ke které se přístupová práva vztahují, a také specifikace konkrétního uživatele, kterým se práva přidělují Například GRANT SELECT, INSERT, UPDATE ON database_name.* TO user_name@'localhost' IDENTIFIED BY 'password'; Pozor, localhost v příkazu přiděluje oprávnění uživateli pro připojení pouze z lokálního serveru, ale pokud chcete umožnit připojení i z jiných míst, můžete změnit localhost za '%'. Použití localhost je vhodné když chcete mít jistotu v zabezpečení jako další faktor před manipulaci s daty cizí osobou. Nejčastěji se používá přímo pro aplikace která je spuštěna na stejném serveru jako je databáze. Tímto způsobem si můžete u uživatele nastavit oprávnění. Nyní ale potřebujeme změnu oprávnění. Přidělení nového oprávnění použijeme opět příkaz GRANT. V opačném případě je potreba příkaz REVOKE Mezi základní možnosti patří: REVOKE ALL: Odebere všechna oprávnění uživateli pro daný objekt. REVOKE [název oprávnění]: Odebere konkrétní oprávnění uživateli pro daný objekt. REVOKE [název oprávnění] ON [název objektu] FROM [název uživatele]: Odebere konkrétní oprávnění uživateli pro daný objekt. Například: REVOKE SELECT ON database_name.table_name FROM 'user_name'@'%'; A jako poslední práci s uživatelem změníme uživatele heslo. Pro změnu hesla existuje v SQL příkaz ALTER. Příkaz ALTER v SQL slouží k úpravě již existujících objektů v databázi, jako jsou tabulky, pohledy, funkce, procedury, uživatelé atd. Možnosti příkazu ALTER se liší v závislosti na objektu, který chcete upravit. Zde je několik příkladů: ALTER TABLE: slouží ke změně struktury tabulky, např. přidání/odebrání sloupců, změna datového typu sloupců nebo změna primárního klíče. ALTER VIEW: slouží k úpravě definice pohledu. ALTER FUNCTION nebo ALTER PROCEDURE: slouží ke změně těla funkce nebo procedury. ALTER USER: slouží ke změně vlastností uživatele, jako je například změna hesla nebo limitu připojení. Každý typ objektu má své vlastní specifické možnosti úpravy pomocí příkazu ALTER. Pro změnu hesla použijeme ALTER USER Například: ALTER USER 'user_name'@'%' IDENTIFIED BY 'user_new_password';
    6 points
  3. Teorie: SQL (Structured Query Language) je standardní programovací jazyk pro ukládání, manipulaci a vyhledávání dat v relačních databázích. SQL znamená strukturovaný dotazovací jazyk. SQL byl vyvinut v 70. letech společností IBM Relační databáze Existuje mnoho typů databázových serverů,nejčastěji používané: MySQL/MariaDB: Jedná se o open-source relační databázový server. Je to velmi populární volba pro webové aplikace, protože je snadno použitelný a podporuje mnoho programovacích jazyků. Microsoft SQL Server: Tento relační databázový server je vyvinutý společností Microsoft a je často používán v podnikových prostředích. Podporuje mnoho funkcí pro zpracování dat, jako jsou OLAP a data mining. Oracle Database: Je to jeden z nejvýkonnějších relačních databázových serverů a je často používán v podnikových prostředích. Podporuje mnoho funkcí, jako jsou replikace dat, zálohování a obnovení a mnoho dalších. PostgreSQL: Open-source relační databázový server s vysokou úrovní funkčnosti a rozšířenosti. Je často používán pro webové aplikace, ale také pro podnikové aplikace a GIS. MongoDB: NoSQL databázový server, který ukládá data ve formátu JSON a podporuje škálovatelnost a vysokou dostupnost. Je často používán pro aplikace, které pracují s nestrukturovanými daty, jako jsou aplikace sociálních médií nebo mobilní aplikace. Pomocí SQL můžeme provádět určité operace na existující databázi a také můžeme použít tento jazyk k vytvoření databáze. SQL používá určité příkazy, jako jsou Create, Drop, Insert atd., k provedení požadovaných úkolů. Tyto příkazy SQL jsou hlavně rozděleny do pěti kategorií jako: DDL – Data Definition Language - definuje strukturu databáze DQL – Data Query Language - slouží k získávání dat z databáze DML – Data Manipulation Language - se používá ke změně dat v databázi DCL – Data Control Language - řídí přístup k datům v databázi TCL – Transaction Control Language - řídí transakce v databázi Příklad: Pro chod FiveM vám stačí pouze toto: DDL - CREATE, ALTER DML - INSERT, UPDATE DQL - SELECT Příklad na vytvoření takového uživatele: CREATE USER 'fivem_server_user'@'%' IDENTIFIED BY 'password'; GRANT CREATE, ALTER ON fivem_server_database.* TO 'fivem_server_user'@'%'; GRANT SELECT, INSERT, UPDATE ON fivem_server_database.* TO 'fivem_server_user'@'%'; REVOKE ALTER USER ON *.* FROM 'fivem_server_user'@'%'; Příkazy jsou ukázkové pro vytvoření uživatele "fivem_server_user" a jeho hesla "password" a musí již existovat databáze "fivem_server_database" Příklad pro vytvoření databáze: CREATE DATABASE fivem_server_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Pozor! Databáze musí být vytvořena předtím než mají být nastaveny oprávnění pro uživatele. Takto vytvořený uživatel a databáze vám zajistí základní zabezpečení v práci s daty, uživatel nemůže vytvářet jiné uživatele a databáze a změnit si heslo.
    6 points
  4. V článku SQL - Práce s uživatelem jsme si řekli základní informace o práci s uživatelem a ukázali si možnost založení uživatele a změnu jeho práv. V tomto článku si ukážeme základní operace s daty. Vytvoříme si v naší testovací databázi dvě tabulky. Na vytvoření použijeme příkaz CREATE s možností TABLE CREATE TABLE Customers ( CustomerID INT NOT NULL PRIMARY KEY, FirstName VARCHAR(50), LastName VARCHAR(50), Address VARCHAR(100), City VARCHAR(50), Country VARCHAR(50) ); A druhá tabulka CREATE TABLE Orders ( OrderID INT NOT NULL PRIMARY KEY, CustomerID INT NOT NULL, OrderDate DATE, TotalAmount DECIMAL(10, 2), FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) ); Takto si vytvoříme dvě tabulky s názvem customers a orders. První tabulka obsahuje sloupce: CustomerID,FirstName,LastName,Address,City,Country Hint: CustomerID INT NOT NULL PRIMARY KEY definuje sloupec CustomerID v tabulce Customers. Popisuje následující informace o sloupci: INT určuje datový typ sloupce jako celočíselný. NOT NULL určuje, že sloupec nemůže obsahovat hodnoty NULL - nesmí být prázdný. PRIMARY KEY určuje, že tento sloupec je primárním klíčem této tabulky. Primární klíč slouží k jednoznačné identifikaci každého záznamu v tabulce. Každá tabulka musí mít právě jeden primární klíč a musí být definován pomocí jednoho nebo více sloupců. Takto vytvořené tabulky jsou ale prázdné, potřebujeme tedy nějaké data do tabulek vložit. K vložení dat použijeme příkaz INSERT INSERT INTO Customers (CustomerID, FirstName, LastName, Address, City, Country) VALUES (1, 'Pepa', 'Novak', '123 Main St', 'Anytown', 'USA'), (2, 'Jane', 'Smith', '456 Oak Ave', 'Othertown', 'USA'), (3, 'Bob', 'Johnson', '789 Elm St', 'Somewhere', 'CR'); Druhá tabulka INSERT INTO Orders (OrderID, CustomerID, OrderDate, TotalAmount) VALUES (1, 1, '2022-02-15', 100.00), (2, 1, '2022-02-17', 50.00), (3, 2, '2022-02-18', 200.00), (4, 3, '2022-02-20', 75.00); Tyto dva insert příkazy vkládají více řádků, příklad pouze pro jeden řádek: INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); Možnost je vkládání dat i z jiné tabulky do jiné tabulky, tomu se říká poddotaz nebo vnořený dotaz: INSERT INTO table_name (column1, column2, column3, ...) SELECT column1, column2, column3, ... FROM another_table WHERE condition; Práce s daty - SELECT Struktura příkazu SELECT, některé jsou volitelné a mohou být vynechány/nepoužity SELECT column1, column2, column3, ... FROM table_name WHERE condition GROUP BY column1 HAVING condition ORDER BY column1 ASC/DESC LIMIT number; Význam: SELECT specifikuje seznam sloupců, které chceme získat z tabulky. FROM specifikuje jméno tabulky, ze které chceme data získat. WHERE specifikuje podmínky pro výběr řádků. GROUP BY specifikuje sloupce, podle kterých se řádky seskupují. HAVING specifikuje podmínky pro výběr skupin. ORDER BY specifikuje sloupec nebo sloupce, podle kterých se výsledky řadí a směr řazení. LIMIT specifikuje maximální počet řádků, které chceme získat. Vyber všechny sloupce z tabulky SELECT * FROM Customers; Vyber pouze zvolené sloupce z tabulky SELECT CustomerID, FirstName, Country, ... FROM Customers; Vyber zákazníků, kteří mají bydliště v USA SELECT * FROM Customers WHERE Country = 'USA'; Seřaď zákazníky podle abecedy jejich křestního jména (Nedojde ke změně dat, pouze zobrazovaného výstupu) SELECT * FROM Customers ORDER BY FirstName ASC; V další části si ukážeme změnu dat v tabulce, UPDATE, DELETE, ALTER
    4 points
  5. Vítám Vás opět u dalšího návodu, dneska se podíváme na přidávání oblečení jako Addon. Opět budu postupovat v krocích, aby to pro Vás bylo snadší. Upozorňuji, že pro tuto akci je třeba mít zakoupený Patreon, který nám dovoluje streamovat oblečení !!! Abych vysvětlil, jak funguje tento proces, tak do GTAV se přidává oblečení pomocí vytváření nového DLC, jistě víte, že GTAV má mnoho DLCček, ve kterém jsou také oblečení, to také můžeme pozorovat na předponách souborů při nahrávání oblečení jako replace (př. mp_m_freemode_01_mp_m_battle^jbib_002_u.ydd - jedná se o DLC Battle). My si tedy vytvoříme vlastní DLC, které nám zajistí, že oblečení, které v něm bude, najdeme na posledních pozicí v obchodě. Můžeme použít několik programů, já uvedu ten, který je zdarma, možná je s ním někdy více práce, ale nemusí se za něj platit a práci dokáže vykonat. Já osobně používám dva programy na vytváření a správu oblečení a provedu Vás tím prvním, vytváření nového DLC pro FiveM. Budeme si potřebovat stáhnout následující program alt:V Cloth Tool. Jedná se o open-source program, který se sice už dlouho dobu neupdatuje, ale stále funguje a je hlavně zdarma. Rychlé rozebrání uživatelského rozhraní programu: Připravíme si tedy testovací oblečení, na kterém Vás provedu. Použiji čepici od sergeantfranki (zdroj). Stáhneme si tedy oblečení, otevřeme, vytáhneme si věci pro FiveM do externí složky a rozdělíme podle pohlaví postav ve hře (male / female). Celé by to tedy mělo vypadat nějak takto. (kroky děláme to u obou pohlaví, já budu ukazovat pouze jedno) Aby to mohl náš program zpracovat, musíme tomu odstranit předpony. Takže po úpravě by to mělo vypadat následovně. (doporučuji vždy začínat od _000) Nyní můžeme vše nahrát do programu, doporučuji kontrolovat, jestli se nám automaticky nahrály všechny textury, jestli ne, můžete je nahrát ručně. Vytvoříme a zvolíme output složku a projekt můžeme buildnout. Když Vám to napíše hlášku Resource built!, tento krok jste zvládli, pokud Vám program crashnul, udělejte to znova a postupujte pečlivě. Vrhneme se tedy na úpravu složky, ještě to není vše. Máme tedy takto vytvořenou složku a otevřeme si fxmanifest.lua pomocí Vámi zvoleného programu, klidně můžete použít Notepad od Microsoftu a vnitřek upravíme následově. fx_version 'cerulean' game 'gta5' files { "mp_f_freemode_01_mp_f_tutorial.meta", "mp_m_freemode_01_mp_m_tutorial.meta" } data_file "SHOP_PED_APPAREL_META_FILE" "mp_f_freemode_01_mp_f_tutorial.meta" data_file "SHOP_PED_APPAREL_META_FILE" "mp_m_freemode_01_mp_m_tutorial.meta" Uložíme pomocí klávesové zkratky Ctrl + S. Na složku stream šahat nebudeme, ta už je připravená. Nyní jen vložíme složku tutorial do resources na našem serveru, přidáme ensure tutorial do server.cfg a můžeme zapnout server. Na serveru tyto čepice najdeme mezi posledními. Občasné problémy s programem Může se Vám stát vícero problémů, program bude crashovat, zmizí UI atd. Berte v potaz stáří programu a to, že už není aktualizovaný. Stačí program restartovat a máte hotovo. Co vše lze nahrát (nejpoužívanější) berd feet hair accs uppr task lowr decl hand jbib p_head p_eyes p_ears p_lwrist p_rwrist předpopa p = prop Pravidla pro importování do programu alt:V Aby Vám mohlo vše fungovat ve hře, je důležité dodržovat správné koncovky, a to následovně. .ydd feet _r lowr _r berd _r ost. _u .ytd podle anglické abecedy od _a_uni do _z_uni (26 různých textur) _uni = univerzální textura Upozornění Maximální počet modelů na jedno pohlavení v jednom packu je 128, doporučuji radši max. 127, potom to může způsobovat problémy. Taktéž existujstuje maximální počet custom DLC, které můžete vytvořit, to však netuším, kolik je. Ale může to být obtíž a bral bych to v potaz. Durty Cloth Na základě alt:V Cloth Toolu vznikl Durty Cloth, v základní verzi nabízí strašně málo možností, pro více možností je třeba si zaplatit, za to ale nabízí více výhod, kdo by měl zájem, přikládám odkaz. Bude to tedy vše, děkuji za přečtení mého návodu a doufám, že jsem Vám pomohl. Budu rád, za vypíchnutí případných chyb. Taktéž, kdyby měl někdo jakékoli otázky, obraťte se tady do komentářů na fóru, rád Vám odpovím, pokud to bude v mých silách. Budu rád za případné 🤍
    3 points
  6. Jednotlivé příkazy které spustíme v BASH a jsou spuštěny tak, že čekají na ukončení. (Tzn: že běží stále) běží vždy dokud nejsou násilně ukončeny nebo není uzavřeno spojení s BASH. Příklad: Když spustíme FiveM server, tak daný script běží do doby než nastanou tyto tři možnosti: Server není ukončen chybou scriptu Server není ukončen ze strany uživatele Server není ukončen dokud není ukončeno spojení s BASH Cílem je tedy potřeba spustit script tak aby běžel i po ukončení BASH spojení. Pro tuto potřebu se nejčastěji používá příkaz SCREEN Příkaz "screen" je nástroj pro práci s více okny nebo terminály v jednom sezení. Screen umožňuje uživatelům vytvářet, spouštět a přepínat mezi více pracovními plochami (tzv. "screens"), což umožňuje uživatelům spustit více úkolů nezávisle na sobě v jednom sezení terminálu. Ukázkové použití pro FiveM server Zapnutí serveru pomocí screen screen -L -d -m -S NazevServeru bash /cesta/k/nasemu/serveru/fivem_server/run.sh +set serverProfile dev_server +set txAdminPort 40120 Parametry: -L Tento parametr umožňuje zapnout záznam výstupu ze screenu do souboru. Po zapnutí této funkce bude každý výstup z screenového sezení zapsán do souboru "screenlog.n", kde "n" je číslo screenu. -d session_name: Tento parametr umožňuje uživateli odpojit se od aktivního screenu s daným názvem, aniž by zastavil běžící procesy v tomto screenovém sezení. -m: Tento parametr umožňuje uživateli spustit nový proces v novém screenovém sezení, aniž by bylo třeba se připojovat k němu. Tento režim je užitečný pro spuštění skriptů nebo programů na pozadí, aniž by uživatel musel být aktivně připojen k screenu. -S session_name: Tento parametr umožňuje uživateli specifikovat název screenu pro vytvoření nového sezení. Vypnutí serveru pomocí screen screen -X -S NazevServeru kill -S session_name: Tento parametr umožňuje uživateli specifikovat název screenu pro vytvoření nového sezení. -X: Tento parametr umožňuje uživateli posílat příkazy do běžícího screenového sezení. + použijeme příkaz kill screen -X -S NazevServeru [command] Pozor! Příkaz screen nemusí být v základní instalaci vaší distribuce nainstalován. V případě že nelze přípak použít, musíte si program screen nainstalovat pomocí vašeho balíčkovacího systému. Například: apt-get install screen #nebo yum install screen
    3 points
  7. Pro hlubší či složitější práci s daty si bohužel nevystačíme pouze s SQL dotazem SELECT, některé data potřebují být při zobrazení různě spojována, nahrazována a nebo přidávány virtuální sloupce. Jedná se pouze o zobrazení, takže níže uvedené dotazy nemění žádné data, ale pouze vytváří zobrazovaný pohled na data. V tomto příkladu budeme používat SQL klíčové slova JOIN, UNION, CASE a dále si ukážeme Subquery. Vytvoříme si nové data: První tabulka: CREATE TABLE Zakaznici ( id INT PRIMARY KEY, jmeno VARCHAR(50) NOT NULL, prijmeni VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL, adresa VARCHAR(200) NOT NULL, mesto VARCHAR(50) NOT NULL, stat VARCHAR(50) NOT NULL, psc VARCHAR(10) NOT NULL ); INSERT INTO Zakaznici (id, jmeno, prijmeni, email, adresa, mesto, stat, psc) VALUES (1, 'Jan', 'Novák', 'jan.novak@email.com', 'Hlavní 1', 'Praha', 'Česká republika', '100 00'), (2, 'Petr', 'Svoboda', 'petr.svoboda@email.com', 'Náměstí 2', 'Brno', 'Česká republika', '602 00'), (3, 'Kateřina', 'Veselá', 'katerina.vesela@email.com', 'Hrad 3', 'Olomouc', 'Česká republika', '779 00'), (4, 'Miroslav', 'Kučera', 'miroslav.kucera@email.com', 'Dlouhá 4', 'Liberec', 'Česká republika', '460 01'), (5, 'Lucie', 'Novotná', 'lucie.novotna@email.com', 'Hradčany 5', 'Praha', 'Česká republika', '110 00'); Druhá tabulka: CREATE TABLE Objednavky ( id INT PRIMARY KEY, zakaznik_id INT NOT NULL, produkt VARCHAR(100) NOT NULL, mnozstvi INT NOT NULL, cena DECIMAL(10, 2) NOT NULL, datum DATE NOT NULL, FOREIGN KEY (zakaznik_id) REFERENCES Zakaznici(id) ); INSERT INTO Objednavky (id, zakaznik_id, produkt, mnozstvi, cena, datum) VALUES (1, 1, 'Kávovar', 1, 2499.00, '2022-01-15'), (2, 1, 'Mixér', 2, 1799.00, '2022-01-18'), (3, 2, 'Myčka', 1, 8999.00, '2022-01-22'), (4, 3, 'Trouba', 1, 5999.00, '2022-01-25'), (5, 4, 'Klimatizace', 1, 12999.00, '2022-02-01'), (6, 5, 'Prádelní stroj', 1, 8499.00, '2022-02-05'), (7, 2, 'Lednice', 1, 7999.00, '2022-02-07'), (8, 4, 'Tablet', 2, 5699.00, '2022-02-11'); JOIN Spojení dvou tabulek pomocí sloupce, který mají obě nebo více tabulek společný. Ukázka: SELECT Objednavky.id, Zakaznici.jmeno, Zakaznici.prijmeni, Objednavky.produkt, Objednavky.mnozstvi, Objednavky.cena FROM Objednavky JOIN Zakaznici ON Objednavky.zakaznik_id = Zakaznici.id; Výstup dat: Výsledkem je tabulka obsahující sloupce id, jmeno, prijmeni, produkt, mnozstvi a cena spojená z tabulek Objednavky a Zakaznici. UNION spojení výsledků dvou a více dotazů do jednoho výstupu. Ukázka: SELECT produkt, mnozstvi, cena, zakaznik_id FROM Objednavky WHERE zakaznik_id = 1 UNION SELECT produkt, mnozstvi, cena, zakaznik_id FROM Objednavky WHERE zakaznik_id = 3; V tomto případě dotaz kombinuje výsledky dvou dotazů pomocí UNION. První SELECT vrací všechny řádky z tabulky Objednavky, kde má zákazník id 1. Druhý SELECT vrací všechny řádky z tabulky Objednavky, kde má zákazník id 3. UNION pak spojí výsledky obou dotazů do jedné tabulky a odstraní duplicity. Výsledkem dotazu bude tabulka obsahující řádky pro produkty, které si objednali zákazníci s id 1 nebo id 3. CASE použití podmínky pro generování nového sloupce za určitých podmínek dle specifikovaných podmínek. Ukázka: SELECT produkt, mnozstvi, cena, CASE WHEN cena < 5000 THEN 'levný' WHEN cena >= 5000 AND cena < 10000 THEN 'střední' ELSE 'drahý' END AS cena_kategorie FROM Objednavky; Výsledkem bude tabulka obsahující sloupce produkt, mnozstvi, cena a cena_kategorie. Poslední sloupec je vytvořen pomocí podmínky CASE, která rozděluje produkty do tří kategorií podle jejich cen. SubQUERY V některých případech pro zobrazení dat potřebujeme první část dat nějak vyfiltrovat, na toto jsou vhodné subquery, jak je jasné z názvu, tak to znamená že je jeden příkaz vnořený do druhého. Takže pro použití výsledku jednoho dotazu jako vstup do druhého. Ukázka: SELECT jmeno, prijmeni FROM Zakaznici WHERE id IN ( SELECT zakaznik_id FROM Objednavky WHERE produkt = 'Klimatizace' ); Výsledkem bude tabulka obsahující sloupce jmeno a prijmeni pro zákazníky, kteří si objednali klimatizaci. Vnitřní SELECT vrací seznam ID zákazníků, kteří si objednali klimatizaci, a vnější SELECT používá tento seznam jako podmínku pro výběr zákazníků z tabulky Zakaznici.
    3 points
  8. Pokračování návodu SQL - Práce s daty 1 Vrátíme se k založeným tabulkám CREATE TABLE Customers ( CustomerID INT NOT NULL PRIMARY KEY, FirstName VARCHAR(50), LastName VARCHAR(50), Address VARCHAR(100), City VARCHAR(50), Country VARCHAR(50) ); CREATE TABLE Orders ( OrderID INT NOT NULL PRIMARY KEY, CustomerID INT NOT NULL, OrderDate DATE, TotalAmount DECIMAL(10, 2), FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) ); INSERT INTO Customers (CustomerID, FirstName, LastName, Address, City, Country) VALUES (1, 'Pepa', 'Novak', '123 Main St', 'Anytown', 'USA'), (2, 'Jane', 'Smith', '456 Oak Ave', 'Othertown', 'USA'), (3, 'Bob', 'Johnson', '789 Elm St', 'Somewhere', 'CR'); INSERT INTO Orders (OrderID, CustomerID, OrderDate, TotalAmount) VALUES (1, 1, '2022-02-15', 100.00), (2, 1, '2022-02-17', 50.00), (3, 2, '2022-02-18', 200.00), (4, 3, '2022-02-20', 75.00); UPDATE V ukázce provedeme změnu obsahu daných tabulkek. K tomu slouží příkaz UPDATE Příkaz UPDATE slouží k aktualizaci stávajících záznamů v databázové tabulce. Jeho syntaxe vypadá následovně: UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition; Jednotlivé parametry tohoto příkazu: table_name: Název tabulky, kterou chcete aktualizovat. column1, column2, ...: Názvy sloupců v tabulce, které chcete aktualizovat. value1, value2, ...: Nové hodnoty, které chcete přiřadit k jednotlivým sloupcům. condition: Podmínka, která určuje, které řádky v tabulce budou aktualizovány. Pokud tuto podmínku neuvedete, příkaz UPDATE aktualizuje všechny řádky v tabulce. Například: UPDATE Customers SET Address = 'Nova Adresa 123' WHERE CustomerID = 1; UPDATE Customers SET FirstName = 'Alice' WHERE CustomerID = 3; Je důležité kontrolovat to, aby podmínka byla dostatečně specifická, aby nedošlo k aktualizaci nechtěných řádků. Příklad pro update více hodnot v jednom příkazu: UPDATE Customers SET Address = 'Adresa 123', City = 'Mesto', Country = 'CZ' WHERE CustomerID = 1; Příklad pro update více řádků a hodnot v jednom příkazu: UPDATE Orders SET TotalAmount = 150.00; Tento příkaz změní u všech řádků hodnotu sloupce TotalAmount na hodnotu 150.00 DELETE Příkaz DELETE slouží ke smazání záznamů z databázové tabulky. Příkaz DELETE může mít nevratné dopady, pokud není správně použit. Pokud smažete řádky z tabulky, "nelze je obnovit" Je důležité dbát na to, aby podmínka byla dostatečně specifická, aby neodstranila nechtěné řádky v tabulce. DELETE FROM table_name WHERE condition; Jednotlivé parametry tohoto příkazu: table_name: Název tabulky, ze které chcete smazat záznamy. condition: Podmínka, která určuje, které řádky v tabulce budou smazány. Pokud tuto podmínku neuvedete, příkaz DELETE smaže všechny záznamy v tabulce. Příklady: Smazání zákazníka s ID 1 z tabulky Customers DELETE FROM Customers WHERE CustomerID = 1; Smazání všech objednávek s datem objednání starším než "2022-02-19" DELETE FROM Orders WHERE OrderDate < '2022-02-19'; !!Smazání všech dat z dané tabulky!! DELETE FROM Orders; ALTER Příkaz ALTER v SQL slouží ke změně struktury existující tabulky. Jeho syntaxe se liší v závislosti na tom, co chcete změnit. Zde jsou vysvětleny jednotlivé parametry, které můžete použít v příkazu ALTER TABLE: Určuje název tabulky, kterou chcete změnit. ADD: Používá se ke přidání nového sloupce do tabulky. Například: TABLE: Určuje název tabulky, kterou chcete změnit. ADD: Používá se ke přidání nového sloupce do tabulky. ALTER TABLE table_name ADD column_name data_type; DROP: Používá se ke smazání sloupce z tabulky. ALTER TABLE table_name DROP COLUMN column_name; MODIFY: Používá se ke změně datového typu existujícího sloupce. ALTER TABLE table_name MODIFY COLUMN column_name new_data_type; RENAME: Používá se ke změně názvu tabulky nebo sloupce. ALTER TABLE table_name RENAME TO new_table_name; ALTER TABLE table_name RENAME COLUMN column_name TO new_column_name; Reálné příkazy pro naše tabulky: Přidání sloupce Phone do tabulky Customers ALTER TABLE Customers ADD Phone VARCHAR(20); Odstranění sloupce TotalAmount z tabulky Orders ALTER TABLE Orders DROP COLUMN TotalAmount; Změna datového typu sloupce Address v tabulce Customers z VARCHAR(100) na VARCHAR(200) ALTER TABLE Customers MODIFY COLUMN Address VARCHAR(200); Přejmenování tabulky Customers na Clients ALTER TABLE Customers RENAME TO Clients; Přejmenování sloupce City v tabulce Customers na Location ALTER TABLE Customers RENAME COLUMN City TO Location;
    3 points
  9. Hledáte script, který vám dokáže smazat auta na serveru ale ignoruje vozidla obsazená hráči? Tak je tohle přímo pro vás 🙂 V configu lze nastavit počet minut po kolika minutách se budou vozidla mazat.
    3 points
  10. Zdravím, vím, jak jsou světýlka populární na CZ scéně 😅 tak přináším free propy ke stažení. Spawnujte je s rozumem. Velké množství světel na jednom místě způsobuje drop FPS. Když si ale dáte někam 2-3 světýlka, tak vám to nic neudělá 😉 Barvy: bílá žlutá oranžová růžová fialová červená modrá zelená Nejde to sem nahrát😅 Ke stažení: https://bzzz.tebex.io/package/5650689
    2 points
  11. Vítám Vás u začátků svých návodů na oblečení, dnes bychom se podívali na replace, kdy s Vámi projdu krok po kroku, co dělat, abyste replacnuli danou věc ve hře. Tento proces je velice jednoduchý a není třeba vědět příliš, avšak přidám i část teorie, ať víte, co znamená, co a orientujete se v tomto též. Na serveru nám stačí mít pouze 1 složku na replace, na pojmenování nezáleží, v mém případě to bude složka replace, do ní vytvoříme další složku s názvem stream (tuto složku nepřejmenovávat) a ještě fxmanifest.lua, finální složka by tedy měla vypadat následovně. Nyní si otevřeme fxmanifest.lua a upravíme ho do správné podoby, je na Vás, v čem ho budete upravovat, můžete klidně použít klidně klasický notepad od Microsoftu. Uvnitř dáte následující: fx_version 'cerulean' game 'gta5' Toto nám bude stačit a soubor můžete uložit pomocí klávesové zkratky Ctrl + S. Teďka na složku stream, tady už je na Vás, co byste chtěli čím replacnout. Předem podotknu, čtete si readme soubory, jsou většinu času opravdu důležité. Prošel bych tedy název souborů a specificky jejich předpony, ty totiž určují, za kterou věc to dáte. ^ (stříška) bude vždy oddělovat umístnění v GTAV a specifická část oblečení. Můžete nahradit cokoli a čímkoli, je to jen na Vás. Přikládám užitečné stránky, kde se můžete podívat, jak se určité věci jmenují v GTAV souborech a jak je pojmenovat. Tobii PrebMasters Dostali jsme přímo FiveM verzi od autora Jako příklad zde použiji čepici od sergeantfranki (zdroj). Soubor si stáhneme a otevřeme. V tomto případě nám autor vložil přímo verzi pro FiveM, takže se nemusíme ničeho obávat. A jenom vezmeme všechny soubory a vložíme je do naší složky stream. V složce stream to tedy bude vypadat následovně, kde máme nyní 36 položek. Nyní jen vložíme složku replace do resources na našem serveru, přidáme ensure replace do server.cfg a můžeme zapnout server. Nedostali jsme přímo FiveM verzi od autora Může se nám také stát, že nám autor nedodá přímou verzi pro FiveM a dostaneme pouze soubory. Jestli v readme souboru máme specifikované DLC, tak ho jenom doplníme jako předponu. Pokud nemáme specifikované DLC, můžete si zvolit, za co to nahradíte. Najděte si věc co chcete replacnout pomocí stránek výše a jednoduše přepište názvy určitých souborů. Když budete mít hotovo, opět soubory vložte do složky stream, složku replace do resources na našem serveru, přidáme ensure replace do server.cfg a můžeme zapnout server. Bude to tedy vše, děkuji za přečtení mého návodu a doufám, že jsem Vám pomohl. Kdyby někdo nečemu nerozuměl, tak to prosím napiště, pokusím se to předělat tak, aby to bylo pro všechny srozumitelné, takže budu rád, za vypíchnutí případných chyb. Taktéž, kdyby měl někdo jakékoli otázky, obraťte se tady do komentářů na fóru, rád Vám odpovím, pokud to bude v mých silách. Budu rád za případné 🤍
    2 points
  12. Přikladám malou funkci, která je užitečná pro získání jména hráče plus mít tag na uživatele. function findDiscordIdentifier(source) local discordId for _, id in ipairs(GetPlayerIdentifiers(source)) do if string.match(id, "discord:") then discordId = string.gsub(id, "discord:", "") end end return discordId end function getNameWithDiscordTag(playerId) local discordLicense = findDiscordIdentifier(playerId) if discordLicense then return string.format('%s <@%s>', GetPlayerName(playerId), discordLicense) end return GetPlayerName(playerId) end Vrací textový řetězec ve formátu SteamJméno <@DISCORD_ID> čili například Isigar <@DISCORD_ID> pak to na discordu vypadá takto
    2 points
  13. V nastavení repozotáře najdeš položku webhook Jen je potřeba za URL dodat /github Ukázková url: https://discord.com/api/webhooks/101263453245sadghsakdjlgsafdkjsadgfsdakjWyPVZdOJYBOQile2-MXsadkjglsakjdm6bo25C3RjP/github
    2 points
  14. Pro práci se základními příkazy budeme potřebovat BASH - interpret příkazového řádku. Nejčastějším nástrojem pro vzdálené připojení k OS s BASH z OS Windows je např: SSH, Putty, mRemoteNG. Mnoho začínajících uživatelů již při připojování zaskočí že nevidí zda-li píšou heslo, nebo alespon zástupné *** znaky. Bash nepoužívá při zadávání hesla ani jiných citlivých údajů standardní výstup na obrazovce, aby se zabránilo jejich zobrazení nebo zaznamenání. Místo toho Bash používá speciální techniku nazývanou "přímý výstup" (angl. "direct output"), když uživatel zadává heslo, kód se automaticky skryje a na obrazovce se nezobrazuje. MAN Téměř každý příkaz v Linuxu má své parametry, dle kterých defingujeme způsob výstupu daného příkazu. Aby nebylo potřeba si všechny parametry pamatovat, můžeme nejčastěji použít příkaz -help Ale pro náročnější uživatele a celkové pochopení parametrů jsou nám k většině příkazů dostupné manuálové stránky. Parametry uvedené v hranatých závorkách nejsou povinné. Je-li v závorkách uvedeno několik možností oddělených svislou čárou (znak | „ pajpa “), znamená to, že si můžeme vybrat jen jednu z nabízených možností parametru Pozor! Linux je case sensitive!! "a" není "A" Adresářová struktura Aktuální adresář - ten existuje vždy, neexistuje možnost nebýt v aktuálním adresáře můžeme používat: relativní cesty cd ../../.. cat mujpodadresar/fivem.txt absolutní cesty cat /home/mujpodadresar/fivem.txt Spustitelný soubor se nehledá v aktuálním adresáři ale hledá se v cestách z proměnné PATH (= proměnná daného prostředí) # prikaz.sh i když existuje prikaz.sh, nespustí se musí se explicitně říct, že chcete pustit soubor v aktuálním adresáři ./prikaz.sh „.“ je aktuální adresář Soubory a složky v Linuxu je všechno soubor, neexistuje složka, skutečné soubory jsou data na disku Adresář - je jen soubor se seznamem souborů a informací Sokety - jsou soubory, které reprezentují síťové spojení Zařízení - disky, partition , klávesnice, periferie Protože je vše reprezentováno jako soubor, lze se vším pracovat způsobem: open, close, read, write, delete Linux nelpí na koncovkách, jsou mu zcela jedno. Spustitelný soubor nemá žádnou koncovku "exe". Spustitelný je, pokud má nastavený příznak (x) v oprávnění souboru. Zástupné znaky Zástupné znaky lze používat i na úrovni bash Shell vždy rozloží příkaz, která až následně vyvolá a zpracuje. * - cokoliv, i nic ? - jeden znak [a-f], [0-9] – jen určitý znak z dané množiny cat *.txt je ve skutečnosti: # cat a.txt b.txt c.txt ..atd Vstupy a výstupy Každý proces v Linux má 2 vstupy a 3 výstupy Vstupy (do procesu vstupuje) parametry na příkazovém řádku standardní vstup (stdin) Výstupy standardní výstup (stdout) chybový výstup (stderr) návratová hodnoty ● stdin, stdout a strerr lze různě propojovat a přesměrovávat a ukládat Ve výchozím stavu je v Linuxu stdin napojen vždy na klávesnici program < vstup.txt roura (pipe) | (pajpa) propojí stdout procesu nalevo se stdin procesu vpravo cat vstup.txt | grep ‚pepa‘ Pajp může být více a slouží k různému „filtrování“ a hledání v obsahu (např logu) Několik primitivních prográmků se spojí v silný nástroj cat soubor.txt | grep “Jiri“ | sort | head -n 10 Vezme jen řádky obsahující „Jiri“, setřídí, vypíše prvních 10 Např cat soubor.txt | bzip2 > soubor.txt.bz2 Ve výchozím stavu je vždy v Linuxu stdout nasměrován na obrazovku (terminál) program > vysledky.txt přesměrování do souboru (soubor se vytvoří či přepíše) program >> vysledky.txt přidání na konec souboru Např yes >> yes Přesměrování na vstup jiného programu (roura) program | tee vysledek.txt tee čte vstup, zapisuje jej do souboru a posílá na výstup STDERR - Proč má Linux dvě výstupové hodnoty? Proč nestačí mít jen jednu? Standardně nechceme aby se nám míchal obsah výstupu. Cílem je oddělit standardní výstup a chybový výstup program > vystup.txt výstup končí v souboru, chyby se vypisují na obrazovku program 2> chyby.txt výstup končí na obrazovce, chyby se zapisují do souboru program 2>&1 > vystup.txt obojí dostanu do souboru, nejprve přesměruji stderr do stdout, stdout pak do souboru Ukázka základních příkazů: man, cd, pwd, mkdir, rmdir, ls, cat, chmod/chown, reboot, date, free, uptime, top/htop, kill, nice, ps, time, useradd, su, passwd, host, ping man: zobrazí nápovědu k danému příkazu man ls cd: změní aktuální pracovní adresář cd /home/user/directory pwd: zobrazí aktuální pracovní adresář pwd mkdir: vytvoří nový adresář mkdir new_directory rmdir: odstraní prázdný adresář rmdir empty_directory ls: vypíše obsah aktuálního adresáře ls cat: vypíše obsah souboru cat file.txt chmod/chown: změní oprávnění přístupu nebo vlastníka souboru/adresáře chmod 755 file.txt chown user:group file.txt reboot: restartuje systém reboot date: zobrazí aktuální datum a čas date free: zobrazí informace o paměti free uptime: zobrazí čas běhu systému uptime top/htop: zobrazí informace o běžících procesech a jejich využití systémových zdrojů top htop kill: ukončí běžící proces kill 1234 nice: nastavuje prioritu běžícího procesu nice -n 10 command ps: zobrazí seznam běžících procesů ps aux time: měří časovou náročnost běžícího procesu time command useradd: vytvoří nového uživatele useradd newuser su: přepíná uživatele su username passwd: změní heslo uživatele passwd username host: zobrazí informace o doméně host example.com ping: testuje konektivitu sítě ping google.com
    2 points
  15. Jak přidat ymap už někdo psal ale jak ho vytvořit by bylo taky dobré xd Co budeme potřebovat? 1. codewalker ->https://www.gta5-mods.com/tools/codewalker-gtav-interactive-3d-map 2. pevné nervy Příprava: 1. Stáhneme si codewalker. 2. Vytvoříme si script ve kterém bude složka stream a soubor fxmanifest.lua 3 Do fxmanifest.lua vložíme tohle: fx_version 'cerulean' game 'gta5' this_is_map 'yes' Postup: 1. Otevřeme si codewalker a po mapě si najdeme object který chceme poupravit (já budu dělat barikádu proti stunterů) 2. Zmáčkneme T aby se nám ukázala taková tabulka: 3. stiskneme CTRL+N tak aby se nám otevřelo tohle: Klikneme na File->New->Ymap File a dostaneme tohle: Půjdeme do Ymap (v horní navigaci) a tam na new entity a otevře se nám tohle: Půjdeme na stránku https://gtahash.ru/ a zde si vybereme prop který potřebujeme a vezmeme z něho Object Name zkopírujeme si ho a vložíme do archetype v codewalkeru tuhle tabulku minimalizujeme a vlevo nahoře zvolíme možnost pohybovat s propem Prop napasujeme tam kam chceme (zde jsou potřeba nervy) Po napasování tam kam pořebujeme půjdeme zpátky sem: klikneme na ymap file (v mém případě barikada.ymap), klikneme na calculate all flags a calculate extents Klikneme na file a save [to vaše jméno].ymap as Budeme to navigovat do složky stream kterou jste si vytvořily v postupu a váš výtvor bude vytvořen :DD
    2 points
  16. 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 points
  17. 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)
    2 points
  18. 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"
    2 points
  19. 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 points
  20. 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
    2 points
  21. Je to tu, dřívější systém fóra byl zastaralý a měl hromadu problémů tak jsme aktualizovali ale nese to jednu špatnou zprávu a to tu, že obsah musíme vytvořit nový již brzy spustíme i staré fórum pod subdoménou aby se obsah dal přenést. Do té doby tuto věc využijeme rovnou jako možnost přeorganizovat celé fórum. Těším se na nové společné chvíle! PS: Již brzy aby jsme Vás motivovali tak dárky o hodnotné ceny 🙂
    2 points
  22. 1) Verze Půjdeme do esx_textui/TextUI.lua najdeme si : exports['esx_textui']:showTextUI(message) Následně esx_textui nahradíme ox_lib : exports['ox_lib']:showTextUI(message) Taktéž by to mělo vypadat i u hideTextUI : exports['ox_lib']:hideTextUI() 2) Verze Půjdeme do esx_textui/TextUI.lua najdeme si : SendNUIMessage({ action = 'show', message = message and message or 'ESX-TextUI', type = type(typ) == "string" and typ or 'info' }) Následně toto celé vymažeme a nahradíme : exports['ox_lib']:showTextUI(message) Taktéž by to mělo vypadat i u hideTextUI : exports['ox_lib']:hideTextUI()
    1 point
  23. Propy rostlin cibule bzzz_onion.zip salát a dýně bzzz_salad_pumpkin.zip Preview: Více rostlin si můžete prohlídnout přes můj profil 😛 bzzz_onion.zip bzzz_salad_pumpkin.zip
    1 point
  24. V kódech sice moc nejedu, ale napadlo mě sem vložit kódy pro animace, které může být obtížné pro někoho najít. Třeba je někdo využije 🙂 Minning - kopání s krumpáčem ["minning"] = {"melee@large_wpn@streamed_core", "ground_attack_on_spot", "Minning", AnimationOptions = { Prop = "prop_tool_pickaxe", PropBone = 57005, PropPlacement = {0.08, -0.4, -0.10, 80.0, -20.0, 175.0}, EmoteLoop = true, EmoteMoving = false, }}, Digging - kopání s velkou lopatou ["digging"] = {"random@burial", "a_burial", "Digging with a shovel", AnimationOptions = { Prop = "prop_tool_shovel", PropBone = 28422, PropPlacement = { 0.0, 0.0, 0.24, 0.0, 0.0, 0.0}, --EmoteLoop = true, -- EmoteMoving = true, }},
    1 point
  25. Propy pro psy Originální prop je z GTA a nemá kolize; pod názvem: ch2_05c_b1_chophse Tady je jako addon rozdělen na několik propů, aby je šlo používat samostatně. Obrázky pro inventář jsou v zipu. Propy je možné používat pro free i placené scripty. Download: [PROPS] Psí bouda
    1 point
  26. 1) Najdeme si nějakou mapu, u které je napsáno [YMAP] (Např. https://www.gta5-mods.com/maps/map-housse-fivem) 2) Tuto mapu si stáhněte do svého počítače. 3) Udělejte si složku s názvem vaší mapy (V mém případě house) 4) V této složce udělejte složku stream a tam přetáhněte .ymap soubor 5) V prvmí složce vytvořte soubor __resource.lua 6) Poté už jen přejděte do server.cfg a zapěnte složku s vaši mapou. (ensure house)
    1 point
  27. na ftp servery na win najdeš na google hromadu navodu
    1 point
  28. Nevím zda si uvědomuješ co vlastně chceš udělat a co je winscp. Aby jsi toto mohl na 100% udelat tak by jsi potřeboval opravdu veřejnou ipv4(6) adresu(mnoho lidi si myslí že jí ma a vlastně nemá), na svém síťovém zařízení měl nastavený routing portu na tvuj počítač, na počítači povolený ten port a pak to zásadnější, nějaký ftp server se správou uživatelů. To co by jsi ty rád bohatě a 1000x bezpečnejsi pro tebe zajištuje GIT, nauč se sním pracovat a budeš mít vystarano a nebudeš muset delat obrovnou bezpečnostní díru do svého pc a to nemluvím že bude moci nahravat jen když tvuj pc bude zapnutý a bude mít net...
    1 point
  29. Zdravíčko, chtěl bych, když se někdo připojí na server, aby mu to dalo do invu např. ID cardu a třeba když udělá autoškolu tak by mu to dalo řidičák. Slyšel jsem že se to dá nastavit přímo v ox_inventory, který já používám, ale nenašel jsem to tam. Neporadil by někdo?
    1 point
  30. Zdravim vás, Jsem si jistý, že někdo tápe, tak jsem vypsal tento návod. Tak začneme. Za 1. budete muset mít koupený patreon, který vám dovoluje streamovat oblečení. Za 2. Vyberte si nějaké oblečení které podporují přidání do FiveM. Za 3. stáhněte si Durty Cloth Tool, používám starší verzi ale postup by měl být stejný. Za 4. si doporučuji rozdělit oblečení, podle toho zda se jedná o kalhoty. Nebo trička viz. screen. Za 5. si otevřete Altv Cloth Tool a vyberte si podle toho zda je to oblečení pro Male nebo Female character Za 6. po kliknuti na Male nebo Female, se vám otevře prohledávání vašeho PC. Tam si vyberte oblečení, podle toho kam jste si ho uložily. Označte vše a dejte otevřít. Za 7. udělejte si vedle složku, do které se vám poté uloží hotové oblečení na addon sloty. Za 8. když máte všechno oblečení vybrané dejte v Alt v Cloth Tool build project, a dejte fivem resource. Nějak to v tom políčku pojmenujte např: mujprvniaddonslot. Za 9. v tom políčku které vám vyskočilo si vyberte tu složku kterou jste si udělali, na to oblečení hotové na addon sloty a dejte build. Za 10. přetáhněte celou složku, již s hotovýma addon slotama do vaší resource složky, zapište do server.cfg a dejte restart, nebo zapněte server. Doufám, že vám to pomohlo. Předem podotýkám, že ne na všechno oblečení to jde. Mějte se.
    1 point
  31. Zdravím, tento script bol robený na ESX 1.1 takže pochybujem že ti na novom bude bežať keď máš o neho záujem napíš do PM na discorde a pošlem ti ho. Meno: SLAVIK#2986 Prajem pekný zvyšok dňa
    1 point
  32. Zdravím koukal sem že dost lidí schaní při prohledavaní progressbar nebo animaci. 😄 Potřebujete: Ox_lib / Ox_inventory 1. Krok otevřeme si ox_inventory/client.lua nasledně si najdeme openNearbyInventory (pokud nemate upravovaný client, bývá to na řádku 542) local function openNearbyInventory() 2. Krok Vložíme tento source pod local který vidíte v kroku 1. (source by měl začínat pod local function openNearbyInventory() končit před exports('openNearbyInventory', openNearbyInventory) ) if canOpenInventory() then local targetId, targetPed = Utils.GetClosestPlayer() if targetId and (client.hasGroup(shared.police) or canOpenTarget(targetPed)) then Utils.PlayAnim(1000, 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@', 'machinic_loop_mechandplayer', 1.0, 1.0, -1, 50, 0.0, 0, 0, 0) exports.ox_inventory:Progress({ duration = 1000, label = 'Prohledáváš osobu', useWhileDead = false, canCancel = false, disable = { move = true, car = true, combat = true, mouse = false }, }, function(cancel) end) Utils.PlayAnim(2000, 'mp_common', 'givetake1_a', 1.0, 1.0, -1, 50, 0.0, 0, 0, 0) client.openInventory('player', GetPlayerServerId(targetId)) end end end' 3. Krok (konečná verze) Celý source by měl vypadat takto: (nasledně si mužete měnit time prohlevaní nebo animace) local function openNearbyInventory() if canOpenInventory() then local targetId, targetPed = Utils.GetClosestPlayer() if targetId and (client.hasGroup(shared.police) or canOpenTarget(targetPed)) then Utils.PlayAnim(1000, 'anim@amb@clubhouse@tutorial@bkr_tut_ig3@', 'machinic_loop_mechandplayer', 1.0, 1.0, -1, 50, 0.0, 0, 0, 0) exports.ox_inventory:Progress({ duration = 1000, label = 'Prohledáváš osobu', useWhileDead = false, canCancel = false, disable = { move = true, car = true, combat = true, mouse = false }, }, function(cancel) end) Utils.PlayAnim(2000, 'mp_common', 'givetake1_a', 1.0, 1.0, -1, 50, 0.0, 0, 0, 0) client.openInventory('player', GetPlayerServerId(targetId)) end end end exports('openNearbyInventory', openNearbyInventory)
    1 point
  33. Ahoj jmenuji se Dominik, a dnes s vámi projdu takovou záležitost. Jak vytvořit server. Ano čteš správně, jak vytvořit server od samotné nuly. Projdeme si různé rubriky a budeme se prodírat tvorbou serveru, budování komunity atd.. Co si musíš uvědomit a vzít v potaz! Máme zde několik zásadních bodů co si musíš prvně uvědomit: Velká konkurence Finanční náročnost Časová náročnost 1. Na CZ/SK Fivem scéně je obrovská konkurence, a bojuješ zde o každého hráče! Musíš přijít s originálními nápady co lidi zaujmou a nadchnout natolik, aby zůstaly na tvém serveru. Jenže to není tak lehké, jelikož každému se líbí něco jiného. Jeden má rád realismus druhý zase arkádu. A dnešní velké servery (Většina z nich.) mají něco čím své hráče udržely. 2. V dnešní době není nic zadarmo. A u fivem jakbysmet, jsou zde dvě povinné věci co musíš platit. První je hosting a druhý Patreon. Jestliže chceš splnit věci z bodu 1, tak k seznamu si můžeme připsat: Developera, skripty, marketing, web, doménu, modeláře na mapy/auta/objekty/oblečení/zbraně. A věř mi nejsou to levné položky. Nejdražší projekt v CZ/SK byl LSRP, který platil měsíčně okolo 45 tisíc za všechny tyto věci. V EN scéně nejdražší NoPixel, zde se to pohybuje přes 100 tisíc měsíčně. (Jedná se můj průzkum, je možné že některé z těch dvou informací jsou možná milné.) Takže měsíčně nás to může, ale i nemusí přijít draho. 3. Tvorba vlastního serveru nás nestojí jen peníze, ale i čas. Jen na samotné tvorbě strávíte stovky ne-li tisíce hodin, ale tak i na údržbě a vylepšování. Nejen to, ale taky vymýšlení nových věcí vám zabere spousty hodin. Každý jeden z těchto návodů budu častou aktualizovat, takže se nebojte psát pokud vás něco napadne nebo pokud jsem na něco zapomněl.
    1 point
  34. shell není jen příkazový řádek pro jednotlivé příkazy je to programovací jazyk pro psaní skriptů skript je soubor obsahující posloupnost příkazů Nezáleží na koncovce, nemusí být, je zvykem .sh Na prvním řádku označení interpretu (jaký program má tento skript zpracovat) BASH (shell): #!/bin/bash Např PHP #!/bin/php -f Existují dva druhy příkazů interní příkazy BASHe externí programy Základy SHELLu Obvykle 1 příkaz na řádek více příkazů na řádek cd /; echo “Text“; mkdir samnick Jeden příkaz na více řádků (pro přehlednost) prikaz --parametr1 --parametr2 \ --parametr3 Komentář: # Parametry Parametry jsou odděleny mezerou ./skript.sh parametr1 parametr2 Parametr uzavřeme do uvozovek ./skript.sh “toto je parametr 1“ parametr2 Pozor na víceslovné adresáře a soubory cat Program Files\soubor.txt Ve skript se k hodnotám parametrů dostaneme přes $N $1 – první parametr $2 – druhý parametr atd. $0 – název skriptu (skript.sh) $$ - PID aktuálního procesu $# - počet parametrů Proměnné Vytvoření proměnné zadáním hodnoty Nepsaným standardem je psát proměnné velkými písmeny CESTA=/files/server SOUBOR=“$1“ ZDROJ=“$CESTA/$SOUBOR“ CIL=/fivem cp “$ZDROJ“ “$CIL“ Pozor na víceslovné hodnoty Je vždy lepší používat uvozovky Tento příkaz nefunguje a výsledkem je něco jiného SOUBOR=nazev souboru Složitější situace s názvem proměnné a následujícího textu echo $PREFIX_nasledujici_text # špatně echo ${PREFIX}_nasledujici_text Pro získání výstupu příkazu se používá opačný apostrof ` ADRESAR=`pwd` POCET=`ls $ADRESAR | wc -l` echo “v adresari $ADRESAR je $POCET souboru“ Přečtení jedné hodnoty = čte řádek ze vstupu, tj. čeká na ENTER echo -n “Zadej sve jmeno: “ read JMENO echo “Tve jmeno je $JMENO“ Příkaz test = [] Příkaz test vyhodnocuje logickou podmínku Podle toho vrátí návratovou hodnotu (0 = true) Zkrácený zápis pomocí závorek [] Pozor na mezery kolem závorek a operátorů!!! test “$1“ == “fivem“ [ “$1“ == “fivem“ ] # stejný zápis Příklad [ -n “$1“ ] || ( echo “První parametr je prazdny“; exit 1 ) if if podminka; then command elif podminka; then command fi Zavolá se příkaz podmínka, rozhoduje se dle návratové hodnoty if [ -f “$1“ ]; then echo “Vypis souboru $1“; cat “$1“ else echo “Soubor neexistuje“ exit 1 fi for for PROM in VSTUP; do echo $PROM done Postupně bere slova za in (odděleno mezerami) a dosazuje to do proměnné PROM for ROK in 2001 2002 2003 2004; do mkdir rok_$ROK done Použití většího interval for ROK in `seq 2001 2020`; do ... cyklus se soubory v adresáři for folder in *.txt; do # komentar if [ ! -f “$folder“ ]; then continue; fi # pauza if [ “$folder“ = “end.txt“ ]; then break; fi echo “je tu soubor $folder“ done while Opakuje cyklus dokud je splněna podmínka, takže volaný příkaz v podmínce má návratovou hodnotu 0 Upřesnění příkazu read Uvedením názvů více proměnný se vstup rozdělí dle mezer Do poslední proměnné se dá zbytek z řádku na vstupu Read vrací 0, když je ještě něco na vstupu, 1 znamená konec while read JMENO PRIJMENI; do echo “jmeno: $JMENO, prijmeni: $PRIJMENI“ done Pozn: musíme ale počítat že jsou na vstupu dodány dva parametry subshell Pomocí kulatých závorek lze spustit subshell a pracovat s jeho vstupem a výstupem. Např. chceme číst řádky ze souboru a s nimi postupně provádět další operace cat /etc/passwd | ( while read -d “:“ UZIV FOO; do echo “uzivatel: $UZIV“ done ) > vystup.txt Parametrem -d změníme oddělování funkce - podprogramy V případě používání funkcí jsou parametry $1, $2 atd. parametry funkce a nikoliv skriptu. Ve funkci se nelze dostat k parametrům scriptu. Ostatní proměnné jsou globální. FIVEM=/fivem start() { tar jcf $FIVEM/$1.tar.bz $2 } start scipts /fivem_scipts start data /fivem_data V příloze jsou uloženy dvě PDF kde jsou podrobnosti bash_script.pdf bash_ocima_bohdana_milara.pdf
    1 point
  35. Na začátek si musíme říct že Linux není jen ta černá console/terminál kde bliká kurzor kam se cosi píše a Linux to udělá. Linux je operační systém založený na jádře Linux, který byl původně vytvořen Linusem Torvaldsem v roce 1991. Je to svobodný a otevřený software, což znamená, že uživatelé mají svobodu spouštět, kopírovat, distribuovat, studovat, změnit a vylepšovat software. Pro práci s Linuxem je důležité mít určité znalosti a dovednosti, jako je práce s příkazovým řádkem, správa balíčků a souborového systému. Nicméně existují také grafická uživatelská rozhraní pro Linux, která umožňují práci s operačním systémem bez nutnosti znalostí příkazové řádky, ale tyto grafické nadstavby jsou určeny spíše pro osobní počítače, než-li pro serverové využití. Linux tedy můžeme dál upravovat i prodávat, ale tento scénář se neděje. Protože licenční model je postaven tak, že pokud chcete upravit Linux a distribuovat ho dále, musíte zajistit, že vaše verze Linuxu bude stále svobodná a otevřená. To znamená, že musíte poskytnout zdrojový kód vaší verze Linuxu a zaručit, že každý, kdo dostane vaši verzi Linuxu, má stejné práva jako vy, včetně práva upravovat a distribuovat software dále. Standardně se pak používá model na bázi supportu, OS je free, ale support je paid. Linux se dodává v mnoha různých distribucích, což jsou různé verze operačního systému, které se liší v závislosti na způsobu instalace, balíčkovacím systému a správě softwaru. Mezi nejznámější distribuce patří Ubuntu, Debian, Red Hat, Fedora a CentOS. Linux je možné používat na velké sféře zařízení a účelem použití. Může být osobním počítači, serveru, mobilním zařízení, superpočítače či různé BYOD zařízení. Linux můžeme používat i na Desktop počítačích, tedy jako standardní OS pro práci s počítačem. Pro tyto účely bylo vytvořeno velké množství grafických nadstaveb pro Linux. Nejznámější jsou: GNOME, KDE, Xfce, LXDE, Unity(Pozor, neplést si s game engine). Občas můžeme vidět několik dalších zkratek jako je UNIX, GNU, BASH, Kernel, KDE a nebo Xfce. Níže se popíšeme co znamenají. UNIX Unix je starší operační systém, který byl původně vyvinut v AT&T Bell Labs v roce 1969. Unix je uzavřený operační systém a jeho zdrojový kód není volně dostupný. Unix byl původně určen pro minipočítače a vysokovýkonné počítače. Unix byl původně navržen pro architekturu procesorů typu minipočítačů a vysokovýkonných počítačů (Nikoliv tedy pro x86). Závěrem lze říci, že Linux a Unix jsou oba operační systémy s podobnými funkcemi, ale liší se v mnoha klíčových oblastech, jako je licence, zdrojový kód, architektura, rozšiřitelnost a dostupnost. GNU GNU je projekt svobodného software, který byl založen Richardem Stallmanem v roce 1983. GNU je zkratka pro "GNU's Not Unix" (GNU není Unix). Cílem projektu GNU bylo vytvořit kompletní operační systém s otevřeným zdrojovým kódem, který by byl kompatibilní s Unixem, ale bez závislosti na Unixových licenčních podmínkách. GNU je také spojeno s konceptem copyleft, což je právní mechanismus pro ochranu svobodného softwaru. Copyleft zajišťuje, že jakýkoli software vytvořený na základě GNU projektu musí zůstat svobodný a otevřený pro další uživatele. Projekt GNU je dnes velmi rozšířený a mnoho moderních operačních systémů, jako je právě Linux, používá mnoho komponentů z projektu GNU. V současné době je projekt GNU stále aktivní a pokračuje ve vývoji a šíření svobodného softwaru. Proto je často používáno spojení GNU/Linux BASH Bash (Bourne-Again SHell) je příkazový interpret a skriptovací jazyk pro Unixové a Unixově podobné operační systémy, včetně Linuxu. Bash je standardním příkazovým interpretem pro většinu distribucí Linuxu a je také součástí macOS. Bash umožňuje uživatelům spouštět příkazy v příkazové řádce nebo vytvářet skripty, což jsou soubory obsahující seznam příkazů, které mohou být spuštěny jako celek. Bash podporuje mnoho příkazů a funkcí, které umožňují uživatelům automatizovat různé úkoly nebo interagovat s operačním systémem a souborovým systémem. Více o BASH je v dalším díle Linux - Základní příkazy Kernel Kernel (česky jádro) je základní část operačního systému, která představuje prostředníka mezi hardwarem počítače a softwarovými aplikacemi běžícími na tomto počítači. Jádro operačního systému řídí všechny aspekty systému, včetně správy paměti, správy procesů, vstupů a výstupů, sítě, správy souborů a zařízení a dalších funkcí. Poskytuje také rozhraní pro komunikaci mezi aplikacemi a hardwarem. Linux jádro (kernel) existuje pouze jedno. Na společném vývoji pracují desítky/stovky firem a vývojářů. KDE a Xfce: jsou další populární grafické uživatelské rozhraní pro Linux. KDE je to velmi konfigurovatelné rozhraní, které umožňuje uživatelům přizpůsobit vzhled a chování systému podle svých potřeb. KDE používá mnoho widgetů a efektů, což umožňuje uživatelům pracovat s více aplikacemi najednou. Xfce je lehké grafické uživatelské rozhraní pro Linux, které je ideální pro starší počítače a zařízení s omezenými prostředky. Xfce má jednoduchý a elegantní vzhled a nabízí uživatelům snadný přístup k aplikacím a funkcím. Trocha čísel: Podle statistik je poměr mezi Linuxem a Windows na osobních PC stále poměrně výrazný. Podle odhadů používá Linux na osobních počítačích méně než 2% uživatelů, zatímco Windows používá přes 75% uživatelů. Zbylých 23% je macOS, Chrome OS. Mnohem lepší situace pro Linux je pak ale ve využití jako serverový OS. Podle statistik je poměr použití Linuxu a Windows na serverech relativně vyrovnaný, přičemž Linux má v této oblasti podstatně větší podíl na trhu než na osobních počítačích. Podle statistik, které byly publikovány v srpnu 2021 společností W3Techs, Linux je operačním systémem používaným na více než 96% webových serverů, zatímco Windows je používán na méně než 1% webových serverů. To znamená, že Linux je prakticky dominantní operační systém na webových serverech. Na druhé straně jsou Windows serverové operační systémy stále populární pro určité účely, jako je například běh aplikací vyvinutých pro platformu Windows. Windows také nabízí některé funkce a vlastnosti, které jsou pro určité účely vhodnější než Linux. Případně aplikace přímo vyvíjené od Microsoft. Co je distribuce? Distribuce se skládá z: základních programů shell interpretu - terminál/příkazová řádka GUI KDE, GNOME - Grafické rozhraní ovládacích scriptů instalační, aktualizační nástroje a balíčkovací systém vlastní aplikace
    1 point
  36. Co se zde naučíme? Jak si přidat vlastní vzhled blipů Co je k tomu potřeba? budeme potřebovat: 1. open IV ->https://openiv.com/ 2. program který dokáže poupravit dds soubory já použiju https://www.getpaint.net/ 3. program na export a import ->https://www.gta5-mods.com/tools/texture-toolkit Postup Vytvoříme si složku ve které to celé budeme provádět ať v tom není bordel. Otevřeme OpenIV zvolíme GTAV a do vyhledání napíšeme blips. Oba dds soubory označíme a vložíme do již vytvořené složky. Soubory si otevřete ve svém malovacím programu (já v https://www.getpaint.net/ ) a vybereme si blip který chceme poupravit a poupravíte si ho jak chcete. Uděláte si primitivní script ve kterém bude fxmanifest.lua a složka stream. Do fxmanifest.lua přidáme: fx_version 'adamant' game 'gta5' Otevřeme si TextureTool.exe zde dáme File a new poté edit a dáme Import vybereme si naše upravené dds soubory a importujeme je. Půjdeme do File a dáme save as.. vybereme zde naší stream složku a pojmenujeme to minimap.ytd Předpřipravený script zde vám dávám předpřipravený script a jeho ukázku tbx_blip.rar
    1 point
  37. Co je potřeba: - OX_LIB (https://github.com/overextended/ox_lib) Jako první se ujistěte zda máte v fxmanifest.lua v es_extended tento řádek v sekci shared_scripts '@ox_lib/init.lua', Pokud máte, tak můžeme jít na výplaty. Začneme tím, že půjdeme do es_extended --> server --> paycheck.lua Zde budeme nahrazovat různé notifikace. Toto nahradíme: TriggerClientEvent('esx:showAdvancedNotification', player, TranslateCap('bank'), TranslateCap('received_paycheck'), TranslateCap('received_help', salary), 'CHAR_BANK_MAZE', 9) Tímto: TriggerClientEvent('ox_lib:notify', xPlayer.source, { title = 'Banka', icon= 'bank', position = 'top', description = 'Obdrželi jste výplatu ve výši ' ..salary..'$'}) Toto nahradíme: TriggerClientEvent('esx:showAdvancedNotification', player, TranslateCap('bank'), TranslateCap('received_paycheck'), TranslateCap('received_salary', salary), 'CHAR_BANK_MAZE', 9) Tímto: TriggerClientEvent('ox_lib:notify', xPlayer.source, { title = 'Banka', icon= 'bank', position = 'top', description = 'Obdrželi jste výplatu ve výši ' ..salary..'$'}) Toto nahradíme: TriggerClientEvent('esx:showAdvancedNotification', player, TranslateCap('bank'), TranslateCap('received_paycheck'), TranslateCap('received_salary', salary),'CHAR_BANK_MAZE', 9) Tímto: TriggerClientEvent('ox_lib:notify', xPlayer.source, { title = 'Banka', icon= 'bank', position = 'top', description = 'Obdrželi jste výplatu ve výši ' ..salary..'$'}) Toto nahradíme: TriggerClientEvent('esx:showAdvancedNotification', player, TranslateCap('bank'), TranslateCap('received_paycheck'), TranslateCap('received_salary', salary), 'CHAR_BANK_MAZE', 9) Tímto: TriggerClientEvent('ox_lib:notify', xPlayer.source, { title = 'Banka', icon= 'bank', position = 'top', description = 'Obdrželi jste výplatu ve výši ' ..salary..'$'}) Pokud by byl jakýkoliv problém, přikládám zde svůj starší paycheck.lua ze starší verze es_extended. paycheck.lua
    1 point
  38. 1 point
  39. Version 1.0.0

    62 downloads

    Preset pro registraci addon fontu do FiveM pro tutorial
    1 point
  40. 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č 🙂
    1 point
  41. Dovolím si tvůj post trošku upravit. 1) Najdeme si nějakou mapu, u které je napsáno [YMAP] (Např. https://www.gta5-mods.com/maps/map-housse-fivem) 2) Tuto mapu si stáhněte do svého počítače. 3) Udělejte si složku s názvem vaší mapy (V mém případě house) 4) V této složce house udělejte složku stream a tam přetáhněte .ymap soubor 5) Ve složce house vytvořte soubor fxmanifest.lua 6) Do fxmanifest.lua zapíšeme toto: fx_version 'cerulean' game 'gta5' this_is_a_map 'yes' 7) Poté už jen přejděte do server.cfg a zapěnte složku s vaši mapou. (ensure house) Složka poté bude vypadat takto:
    1 point
  42. V nějakých překladech je i tak potřeba udělat změnu, jelikož esx využívá i barvy např. ~g~ atp. Co je potřeba: - OX_LIB (https://github.com/overextended/ox_lib) Návod: Půjdeme do es_extended --> client --> functions.lua Vyhledáme si tuto funkci: function ESX.ShowNotification Přepíšeme celou funkci na: function ESX.ShowNotification(Title, Message, Type, Position) lib.notify({ title = Title, description = Message, type = Type, position = "top" }) end Poté půjdete do fxmanifest.lua v es_extended kde si do shared_scripts sekce přidáte tento řádek: '@ox_lib/init.lua', Hotovo
    1 point
  43. Ok zkus ten soubor otevřít dát encoding -> convert to UTF-8 (without BOM) a uložit soubor znovu, přepiš ty názvy do správných hodnot a ulož to zase přesně takto. Tady obrázek z české lokalize notepadu ++
    1 point
  44. 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' }
    1 point
  45. @Dejdik můžeš sem poslat fotku toho? Protože mě to osobně připadá, jak kdyby si to ukládal ve špatném formátu souboru a kvůli tomu se to dělo. Ne kvůli fontu jako takovém. Přidávám odkaz na stackoverflow, kde řeší visual code, který má asi každý pokud to ukládáš v nějakém jiném programu ujisti se, že to ukládáš v UTF-8. https://stackoverflow.com/questions/30082741/change-the-encoding-of-a-file-in-visual-studio-code
    1 point
×
×
  • Create New...