Scripting Introduction
Resource neboli Zdroje jsou klíčovou součástí MTA. Zdroj(Resource) je v podstatě složka nebo soubor ZIP, který obsahuje kolekci souborů, meta soubor, který popisuje na serveru, jak má být zdroj načten, a jaké soubory obsahuje. Resource je jako program v operačním systému - je možné jej spustit a zastavit, a více resource může běžet najednou.
Všechno, co má co do činění s skriptování děje ve resourcích, co resource se definuje, zda je to gamemode, mapa nebo něco jiného. MTA přichází s prostředky, které můžete volitelně použít ve svých gamemodech, jako maplimits aby playings do hrací plochy nebo deathpickups vytvořit zbraň Kleště.
Tip: Váš první krok k zahájení Lua skriptů by mělo být pomocí editoru Lua. To umožňuje skriptování mnohem jednodušší. Doporučujeme Notepad + + nebo LuaEdit. K dispozici je také neoficiální MTA Script Editor. (V work-in-progress stavu), které si můžete vyzkoušet |
Vytvoření pracovní skriptu
Nejprve se dozvíte, jak vytvořit základní skript, který umožňuje hráč chodit po městě, krok za krokem.
Kde jsou všechny skripty?
Pojďme se podívat na skript je strukturou souborů. Jděte do složky serveru MTA, a po cestě níže:
server / mods / deathmatch / resources /
Uvidíte spoustu .Zip souborů,nebo složek, které jsou balené ukázkové skripty dodávané s MTA. Každý soubor je "zdrojem", a budou všechny rozbaleny(pouze ZIP soubory) a načteny na serveru, když se server spustí. Chcete-li vytvořit svůj vlastní resource, prostě udělejte složku s jakýkoliv jménem(Bez mezer,teček, místo mezer použijte _ ).My použijeme "myserver" pro nyní.
Nyní byste měli být v tomto adresáři:
server / mods / deathmatch / resources / myserver /
Identifikace zdroje
Aby server věděl,co obsahuje resource, musí meta.xml být vytvořen na seznamu obsahu resource(v resource). Musí být umístěn ve zdrojovém kořenovém adresáři, který je "myserver" složka v našem případě. Takže vytvořte textový soubor a pojmenujte jej "meta.xml", a otevřete jej v programu Poznámkový blok.
Zadejte následující kódy v meta.xml souboru: <syntaxhighlight lang="lua"> [xml] <meta> <info author="VaseJmeno" type="gamemode" name="My server" description="Můj první MTA server" /> <script src="script.lua" /> </meta> </ Code> V <Info /> tagu, je tu "type" pole, které označuje, že zdroj je typu 'gamemode', mohou být i typu mapy, které budou vysvětleny později. Gamemode je to, co budete potřebovat, aby se "rozjel" server.
<script /> Tag určuje soubory skriptů obsažených v prostředku, které vytvoří další.
Vytváření jednoduchého skriptu
Všimněte si, že v <script /> tag výše Lua soubor není pod jiným adresářem. Proto budeme vytvářet soubor ve stejné složce jako meta.xml. Nyní můžete zkopírovat a vložit následující kód do script.lua: <syntaxhighlight lang="lua"> [lua] local spawnX, spawnY, spawnZ = 1959,55, -1714.46, 10 function joinHandler () spawnPlayer (source, spawnX, spawnY, spawnZ) fadeCamera (source, true) setCameraTarget (source, source) outputChatBox ("Vítejte na mém serveru", source) end addEventHandler ("onPlayerJoin", getRootElement (), joinHandler) </ Code> Skript vás spawne(vytvoří/narodí) na souřadnici (x, y, z) která uvedena výše, když se připojíte do hry. Všimněte si, že funkce fadeCamera musí být použita ,neboť by byla obrazovka černá. Také ve verzích po DP2, musíte nastavit pozici kamery (jinak by hráč viděl, jen modré nebe).
Source proměnná určuje, kdo spustil událost. Vzhledem k tomu,že hráč se připojil při spuštění kódu, můžete použít tuto proměnnou aby jste se podívali, kdo se připojil. Takže to bude spawnovat, že hráč namísto každého nebo náhodnou osobu.
Pokud bychom se blíže podívali na addEventHandler, můžete vidět 3 věci(argumenty): "onPlayerJoin", což znamená, když je spuštěna hra(Při připojení hráče na server). getRootElement (), ukazuje o co / kdo to může být spuštěna. (GetRootElement () je všechno / všichni) A joinHandler, který indikuje funkci, která má být spuštěna po aktivaci události. Další podrobnosti budou vysvětleny později v jiném příkladu, teď pojďme ,stačí spustit server a zkuste to!
Spuštění skriptu
Chcete-li spusit server, stačí spustit spustitelný soubor v adresáři /server. Seznam serverů ve statistikách se vám ukážou jako první, poznamenejte si číslo portu, které budete potřebovat při vstupu do hry. Pak server načte všechny resource v rámci mods / deathmatch / resources / adresáře, a pak "připraven přijímat připojení!"
Před připojením k serveru, musíte spustit gamemode. Napište "myserver" nebo "start myserver" a stiskněte klávesu Enter. Server spustí gamemode,který jste právě vytvořili, a také ukáže všechny chyby a varování. Nyní můžete spustit klienta MTA, a "Quick Connect" pomocí IP adresy vašeho serveru a číslo portu, který jste viděli dříve. Pokud vše půjde dobře, po několika sekundách se vaše postava bude chodit po ulicích Los Santos.
Další přidáme příkaz do skriptu, že hráči mohou použít, aby se vedle hráče vytvořilo vozidlo. Můžete přeskočit,na pokročilé skriptování s Map Manager, který pokračuje tento návod. Další odbočka z tohoto tutoriálu je Úvod do Skriptování GUI, můžete sledovat,učit se, jak na Graphical User Interface v MTA(Grafické Uživatelské Rozhraní).
Vytvoření jednoduchého příkazu
Pojďme zpět k obsahu script.lua souboru. Jak již bylo zmíněno výše, chceme nabídnout příkaz k vytvoření vozidlo vedle vaší aktuální polohy ve hře. Za prvé musíme vytvořit funkci chceme použít, a příkaz psovoda, který vytvoří příkaz hráč bude moci vstoupit do konzole.
<syntaxhighlight lang="lua"> [lua] - Vytvoření funkce, příkazu , s argumenty: thePlayer, příkaz, vehicleModel function createVehicleForPlayer(thePlayer, command, vehicleModel) - Vytvoří vozidlo a další věci end
- Vytvoří příkaz addCommandHandler ("createvehicle", createVehicleForPlayer) </ Code>
Poznámka: Funkce jména jsou v příkladech kódu na wiki a je spojena s dokumentací funkcí ".
O příkazech
Prvním argumentem addCommandHandler je název příkazu,který bude moci hráč použít, druhý argument je funkce která se použije, v tomto případě createVehicleForPlayer.
Pokud jste již zkušení s skriptováním, budete vědět, že jste požili funkce, jako je tato: <syntaxhighlight lang="lua"> [lua] functionName (argument1, argument2, argument3, ..) </ Code> <syntaxhighlight lang="lua"> [lua] functionName (thePlayer, commandName, argument3, ..) </ Code> Pokud bychom se blíže podívali na spodní příklad výše, můžeme vidět argument1 je thePlayer a argument2 commandName. thePlayer je prostě ten, kdo napsal příkaz, tak jak se tomu říká, bude proměnná obsahovat hráče, který aktivuje příkaz. commandName je prostě příkaz, který zadali. Takže v případě, že zadaný "/ pozdravit", bude tento argument obsahovat "pozdravil". Argument 3 je něco navíc,co zadal hráč, budete se učit trochu dále v tutoriálu. Nikdy nezapomeňte, že první 2 argumenty jsou standardní argumenty, ale můžete pojmenovat na cokoliv budete chtít.
My nazýváve addCommandHandler funkci tímto způsobem již od kroku createVehicleForPlayer je funkce příliš, může to být nazýván tímto způsobem také. Ale my se pomocí příkazového ovladače pro to, který volá jej v příbuznými způsoby, vnitřně.
Například: někdo zadá "createvehicle 468" ve hře vytvoří(spawne) Sanchez, příkaz handler volá createVehicleForPlayer funkci, jako, pokud budeme mít tento řádek kódu ve skriptu: <syntaxhighlight lang="lua"> [lua] createVehicleForPlayer (thePlayer, "createvehicle", "468") - thePlayer je hráč prvkem hráče, který použil příkaz </ Code> Jak můžeme vidět, že poskytuje několik parametrů: hráč, který volal příkaz, příkaz vstoupil a co textu měl po tom, v tomto případě "468" vozidla jako ID pro Sanchez. První dva parametry jsou stejné jako u všech velitelských manipulátory, které si můžete přečíst na addEventHandler stránce. Pro tuto skutečnost, budete vždy definovat alespoň ty dva parametry použijete některý poté (například ke zpracování textu, který byl zadán po příkazu, jako v našem příkladu model vozidla id).
Poznámka: Musíte přidat příkaz poté, co jste definovali funkci manipulačního, jinak to nemůže najít. Pořadí exekučních věcech.
Psaní funkci
Za účelem vyplnění funkci jsme vytvořili, musíme přemýšlet o tom, co máme dělat:
- Získejte hráčovu pozici, takže víme, kde se vytvoří vozidla (chceme aby se objevilo vedle hráče)
- Výpočet pozici chceme, aby vozidlo bylo vedle hráče(nechceme, aby bylo v hráči)
- Vytvořit vozidlo
- Zkontrolovat, zda byl spawn úspěšný, nebo neuspěšný
Za účelem dosažení našich cílů, musíme použít několik funkcí. Chcete-li najít funkci, musíme použít, měli bychom navštívit Server Seznam funkcí. Nejprve potřebujeme funkci dostat hráčovu pozici. Protože hráči jsou prvky, nejprve přejdeme na 'Elementy funkcí', kde najdeme getElementPosition funkci. Kliknutím na název funkce v seznamu, se dostanete na popis funkce. Tam vidíme syntaxi, co to udělá a obvykle příklad. Syntaxe nám ukazuje, jaké argumenty můžeme nebo musí být sepsány.
Pro getElementPosition, syntaxe je: <syntaxhighlight lang="lua"> [lua] float, float, float getElementPosition (element theElement) </ Code>
Tři argumenty před názvem funkce jsou návratový typ. V tomto případě to znamená, že funkce vrátí tři argumenty s desetinnou čárkou čísla. (X, y a z) Uvnitř závorek, můžete vidět, jaké argumenty musíte předložit. V tomto případě pouze prvek, jehož pozici chcete dostat, což je hráč v našem příkladu.
<syntaxhighlight lang="lua"> [lua] function createVehicleForPlayer (thePlayer, command, vehicleModel) - Získá pozici x, y, z . - (local znamená, proměnná existuje pouze v aktuálním rozsahu, v tomto případě, funkce) local x, y, z = getElementPosition (thePlayer) end </ Code>
Další chceme zajistit, že vozidlo nebude spawnuto přímo v hráčovi, takže jsme přidali několik jednotek na x proměnnou, která bude dělat to, že přidá něco na východ od hráče.
<syntaxhighlight lang="lua"> [lua] function createVehicleForPlayer (thePlayer, command, vehicleModel) local x, y, z = getElementPosition (thePlayer) - Získá pozici hráče x = x + 5 - Přidá 5 do polohy X end </ Code>
Nyní potřebujeme jinou funkci, jeden, aby se vytvořilo vozidlo. Jsme opět vyhledali ji na Server Seznam funkcí, tentokrát - od hovoříme o vozidlech - v 'Vehicle funkcí' sekce, kde budeme chtít createVehicle . V této funkci se syntaxí, máme pouze jednu návratový typ (což je častější), vozidlo prvek, který odkazuje na vozidle jsme právě vytvořili. Také vidíme, že některé argumenty jsou uzavřeny v [], což znamená, že jsou to volitelné.
Máme již všechny argumenty, které potřebujeme pro createVehicle v naší funkce: poloha prostě počítá v X, Y, Z proměnných a modelu ID, které jsme poskytli prostřednictvím příkazu ("createvehicle 468") a přístup do funkce jako' vehicleModel proměnné.
<syntaxhighlight lang="lua"> [lua] function createVehicleForPlayer (thePlayer, command, vehicleModel) local x, y, z = getElementPosition (thePlayer) - Získá pozici hráče x = x + 5 - Přidá 5 do polohy X - Vytvořit vozidlo a uložení vrácené vozidla prvek v' createdVehicle proměnné local createdVehicle = createVehicle (tonumber (vehicleModel), x, y, z) end </ Code>
Samozřejmě, že tento kód se může zlepšit v mnoha ohledech, ale aspoň chceme přidat kontrolu, zda vozidlo bylo vytvořeno správně nebo ne. Jak se můžeme dočíst na createVehicle strana pod 'se vrací, tato funkce vrací false, když script nemohl vytvořit vozidlo. Proto jsme zkontrolovali hodnotu' createVehicle proměnné.
Nyní máme kompletní skript: <syntaxhighlight lang="lua"> [lua] function createVehicleForPlayer (thePlayer, command, vehicleModel) local x, y, z = getElementPosition (thePlayer) - Získá pozici hráče x = x + 5 - Přidá 5 do polohy X local createdVehicle = createVehicle (tonumber (vehicleModel), x, y, z) - Zkontroluje zda je hodnota false if (createdVehicle == false) then - Pokud ano, vypíše zprávu do chatu , ale pouze hráči co příkaz použil. outputChatBox ("Nepodařilo se vytvořit vozidlo.", thePlayer) end end addCommandHandler ("createvehicle", createVehicleForPlayer) </ Code>
Jak můžete vidět, jsme zavedli jinou funkci s outputChatBox. Do teď, měli byste být schopni prozkoumat funkce v dokumentaci stranu sám. Pro více pokročilé skriptování, prosím, podívejte se Map Manager.
Co byste měli vědět
Už jste si některé věci, o prostředcích, které manipulují s velitelskými a hledání funkcí v dokumentaci v prvním odstavci, ale tam je hodně co učit. Tato sekce vám spíše krátký přehled nad některými z těchto věcí, a zároveň odkazují na související stránky, pokud je to možné.
Clientside a serverside skripty
Možná jste si již všimli, tyto nebo příbuznými pojmy (Server / Client) někde na této wiki, většinou ve spojení s funkcemi. MTA nejen podporuje skripty, které běží na serveru a poskytují příkazy (jako ta, kterou jsme napsali výše) nebo jiné funkce, ale také skripty, které běží na straně klienta MTA hráči použít k připojení k serveru. Důvodem pro to je, že některé funkce MTA poskytuje musí být clientside (jako GUI - Graphical User Interface), ostatní by měli být proto, že lépe pracovat a ještě jiní jsou na tom lépe být serverside, nebo prostě nefungují clientside.
Většina skriptů budete dělat (gamemodes, mapy) bude pravděpodobně serverside, jako ten, který jsme napsali v první části. Pokud se dostanete do něčeho, co nemůže být serverside, budete pravděpodobně muset dělat clientside. Pro clientside skript například, byste vytvořili obyčejný soubor skriptu (například s názvem client.lua) a specifikovat v meta.xml, jako je toto: <syntaxhighlight lang="lua"> [xml] <script src="client.lua" type="client" /> </ Code> Typ atribut výchozí "server", takže stačí zadat to pro clientside skriptů. Když to uděláte, bude clientside skript stáhnut na hráčově počítači jakmile se připojí k serveru. Přečtěte si více o skripty na straně klienta.
Složitější zdroje
Předchozí část ukázala krátce, jak přidat clientside skripty ke zdroji, ale je zde také mnohem více je to možné. Jak již bylo zmíněno na samém vrcholu této stránky, mohou být zdroje skoro všechno. Jejich účelem je definována tím, co dělají. Pojďme si některé teoretické zdroje, při pohledu na soubory, které obsahuje, na meta.xml a to, co mohl udělat:
První příklad - script
<syntaxhighlight lang="lua"> [xml] / Admin_commands / Meta.xml / Commands.lua / Client.lua </ Code> <syntaxhighlight lang="lua"> [xml] <meta> <Info author="Someguy" description="admin commands" /> <script src="commands.lua" /> <script src="client.lua" type="client" /> </ Meta> </ Code>
- ' Commands.lua poskytuje některé admin příkazy, jako ban hráče, mute nebo něco jiného, co lze použít k admin serveru
- ' Client.lua poskytuje GUI, aby mohli provádět uvedené akce snadno
Tento příklad by mohl být spuštěn po celou dobu (možná i auto-start při startu serveru), jak je to užitečné v průběhu celého herního zážitku a také zvyklý v rozporu s hratelností, pokud admin podnikne nějakou akci samozřejmě.
Druhý příklad - gamemode
<syntaxhighlight lang="lua"> [xml] / Counterstrike / Meta.xml / Counterstrike.lua / Buymenu.lua </ Code> <syntaxhighlight lang="lua"> [xml] <meta> <Info author="Someguy" description="Counterstrike remake" type="gamemode" /> <script src="counterstrike.lua" /> <script src="buymenu.lua" type="client" /> </ Meta> </ Code>
- ' Counterstrike.lua obsahuje příbuznými na následující funkce:
- Ať hráči mohou vybrat svůj tým a hraje s nimi
- Poskytněte jim zbraně, a pokyny (možná čtení z mapy, viz níže)
- Definujte Pravidla hry, např. Kdy kolo končí, co se stane, když hráč zemře
- .. a možná některé další
- ' Buymenu.lua je clientside skript a vytváří nabídku k nákupu zbraní
Tento příklad může být nazýván gamemodu, protože to není jen intereferes s hratelností, ale ve skutečnosti definuje pravidla ní. Typ atribut označuje, že tento příklad pracuje s Map manager, další zdroj, který byl napsán v QA týmu pro správu gamemodes a mapu loading. Důrazně se doporučuje, aby si založit své gamemodes na techniky, které poskytuje.
To také znamená, že gamemodu pravděpodobně nelze spustit bez mapy. Gamemodes by měly být vždy možné míře všeobecné. Příkladem mapě je uvedeno v následujícím příkladu.
Třetí příklad - Mapa
<syntaxhighlight lang="lua"> [xml] / Cs-letiště / Meta.xml / Airport.map / Airport.lua </ Code> <syntaxhighlight lang="lua"> [xml] <meta> <Info author="Someguy" description="Counterstrike letiště map" type="map" gamemodes="counterstrike" /> <map src="airport.map" /> <script src="airport.lua" /> </ Meta> </ Code>
- ' Airport.map v souboru XML, který poskytuje informace o mapě na gamemodu, mohou zahrnovat:
- Pokud hráči by měli plodit, s tím, co zbraně, jaké týmy tam jsou
- Jaké jsou cíle
- Počasí, Světový čas, časový limit
- Poskytovat vozidla
- ' Airport.lua může obsahovat mapu specifické rysy, které mohou zahrnovat:
- Otevření nějaké dveře / udělat něco explodovat, když se něco stane zvláštní
- Vytvoření nebo přesunout některé vlastní objekty, nebo manipulovat s objekty, které jsou vytvořeny pomocí. Souboru mapy
- .. něco jiného mapu specifické můžete myslet
Jak můžete vidět,' typu atribut změněn na "mapu", říká Map manager, že tento zdroj je mapa, zatímco' gamemodes atribut říká, že pro které gamemodes tuto mapu platí , v tomto případě gamemodu z výše uvedeného příkladu. Co může přijít jako překvapení je, že tam je také skript v Map zdroje. Samozřejmě to není nezbytně nutné v mapě, ale otevírá širokou škálu možností pro tvůrci map vytvořit svůj vlastní svět v rámci pravidel gamemodu oni Můžete si jej.
' Airport.map soubor může vypadat příbuznými na toto: <syntaxhighlight lang="lua"> [xml] <map mode="deathmatch" version="1.0"> <terrorists> <spawnpoint posX="2332.23" posY="-12232.33" posZ="4.42223" skins="23-40" /> </ Teroristé> <counterterrorists> <spawnpoint posX="2334.23443" posY="-12300.233" posZ="10.2344" skins="40-50" /> </ Counterterrorists>
<bomb posX="23342.23" posY="" posZ="" />
<vehicle posX="" posY="" posZ="" model="602" /> <vehicle posX="" posY="" posZ="" model="603" /> </ Map> </ Code>
Když je gamemodu začal s mapou, je mapa prostředky spouští automaticky mapmanager a informace v něm obsažené lze číst gamemodu zdroje. Když se mapa mění, je aktuální mapa zdrojem zastavil a další mapy zdroj je spuštěn. Pro více in-hloubkové vysvětlení a příklady toho, jak jsou mapy zdroje využívány v hlavním skriptu, navštivte Psaní Gamemodes stránku.
Akce === === Události jsou způsob, jak MTA říká skripty na věci, které se dějí. Například, když hráč umře, onPlayerWasted událost je spuštěna. Aby bylo možné provést žádné akce, kdy hráč zemře, budete muset připravit sami příbuznými přidání příkazu rutiny, jak je uvedeno v První kapitola.
Tento příklad vypíše zprávu s názvem hráče, který zemřel: <syntaxhighlight lang="lua"> [lua] Funkce playerDied (totalAmmo, vrah, killerWeapon, bodypart) outputChatBox (getPlayerName (zdroj) .. "umřel!") konec addEventHandler ("onPlayerWasted", getRootElement (), playerDied) </ Code>
Místo ukazuje, jaké argumenty jsou potřeba, dokumentace stránka pro akce ukazuje, jaké parametry jsou předány funkce zpracování, podobně k cestě Příkaz handler dělá, jen to, že se liší od akce k akci. Dalším důležitým bodem je' zdrojem proměnná, která existuje v popisovač funkcí. To nemá být přidán do seznamu parametrů funkce, ale stále ještě existuje. To má jinou hodnotu od události k události, pro hráče události (jako ve výše uvedeném příkladu), že je hráč element. Jako další příklad, můžete se podívat na základní scénář tření hráče v první části, abyste získali představu, jak se používá' zdroj.
Kam jít odsud
Nyní byste měli být obeznámeni se základními aspekty MTA skriptování a také trochu s dokumentací. Hlavní stránka poskytuje odkazy na další informace, návody a odkazy, které umožňují hlubší pohled do témat, touží dozvědět více.
'Viz také:'