Neverwinter Nights by Tichondrius

Banner-Tichondrius

Toolset >Scripting


Neverwinter Nights Scripting průvodce od Mole.

První kapitola scriptování v NWN

Kořením každého modulu jsou scripty. Dodají vašim NPC inteligenci, pomůžou vám udělat z vašeho modulu trvalý svět nebo prostě a jednoduše pracují za vás. Tento kurz by vás měl naučit základům scriptingu a pomoci vám vytvořit vaše první scripty, nebo alespoň scriptům porozumět.

V první kapitole se naučíme ovládat základní funkce script editoru, poznáme jak to chodí a zjistíme některé důležité věci.

1.1 Popis script editoru

Po otevření script editoru (také Ctrl+Alt+S) se nám objeví několik oken a hlavní lišta. Okno s čísly po levé straně je defacto to nejdůležitější, do něj se zapisují veškeré funkce, proměnné apod. V tuto chvíli by zde měla figurovat pouze funkce main.

1 void main()
2 {
3
4 }

Tyto řádky vyjadřují, že máte funkci, která se jmenuje main() a popisují, jak se funkce chová. Společně vytvářejí definici funkce. Tato definice má dvě části. První řádek void main (), který se nazývá hlavičkou funkce a část uzavřená do složených závorek, která je tělem funkce. Existuje extrémně nepřekonatelný důvod pojmenovat funkci v našem programu main(), musíte to udělat. Každý script vyžaduje funkci, která se nazývá main() – nakonec se však ukáže, že toto není tak úplně pravda. Mimochodem ne Main() nebo MAIN(). Když nwn spouští script, provedení vždy začíná na začátku funkce main().
Před tuto funkci se obvykle píše na první místo hlavička scriptu (popis, jméno autora, datum …), dále vložené soubory (#include ‘’jméno souboru’’), deklarace proměnných (object oPC = GetFirstPC) a definice funkcí.
Do těla funkce (mezi složené závorky) se pak píše samotný script.
Všechny věci zde popsané probereme postupně důkladněji. Prozatím se spokojíme s tímto stručným popisem. Tomuto oknu dále budeme říkat Scriptové okno.

Horní lišta slouží k ukládání, kompilování (jinými slovy otestování), otevírání a dalším věcem. Ostatně to už je úděl všech lišt.

Spodní okno script editoru slouží k vypisování chyb (při save nebo build) a k popisu funkcí. Tomuto oknu budeme říkat Okno zpráv.

V okně vpravo jsou vypsány veškeré dostupné funkce. Tyto funkce mají na svědomí tvůrci hry, nebo nějaký šikovný scripter, který tu byl před vámi ?. Okénko „Filter“ slouží jako vyhledávač funkcí (podobně jako kterýkoliv internetový vyhledávač). Pokud do něho napíšete „getfirst“ (všimněte si, že zde se malá a velká písmenka nerozlišují, na rozdíl od Scriptového okna), vyhledávač nám najde několik funkcí podobného jména. Můžeme kliknout na funkci GetFirstPC a podíváme se, jaký popis se nám zobrazí v Okně zpráv.

1.2 Práce se standartními funkcemi

Podle popisku nám tato funkce najde hráče, který je první v player listu (v tom samém listu, který se objeví pokud ve hře stisknete tlačítko „P“). Slovíčko „objekt“, které je před jménem funkce, nám oznamuje návratovou hodnotu funkce GetFirstPC. Hned vysvětlím. Object je typ proměnné, podobně jako třeba int (celočíselná proměnná) nebo string (řetězec znaků).
Pokud tedy chceme opravdu poznat který hráč je první v Party listu, musíme definovat proměnnou. Víme, že proměnná bude object, takže na řádek 3 do Scriptového okna napište toto :

object oPC = GetFirstPC();

object – typ proměnné. Podle popisku funkce GetFirstPC jsme zjistili, že musíme definovat proměnnou jako object.
oPC – naprosto volitelné jméno proměnné. Ovšem i tady platí pravidla (dalo by se říct pravidla slušného scriptování). Malé „o“ nám neoznamuje nic jiného, než že se jedná o proměnnou typu object. PC nám zase podává kusé informace, že proměnná obsahuje jakési informace o PC (PC = player character – tedy postava hráče). Snažte se alespoň trochu dodržovat takovýto styl a usnadnit práci ostatním lidem, kteří po vás budou script číst.
(=)Rovnítko – slovy laika : přiřazuje to co je nalevo do toho co je napravo. Čily výsledek funkce GetFirstPC přiřadí do proměnné oPC. Nikdy nepřiřazuje hodnotu nalevo do hodnoty napravo.
GetFirstPC() – tělo funkce. Hoši od Bioware byli tak hodní a tuto funkci pro nás vytvořili.
(;)Středník – ukončuje každý řádek ve Scriptovém okně. Existují však výjimky, jako je podmínka if a podobné. Kompilátor musí poznat kde končí příkaz a k tomu slouží právě středník

Doporučuji alespoň letmo obhlédnout všechny dostupné funkce a zjistit tak, co už někdo udělal za mě a s čím se nemusím zabývat.

1.3 Komentáře ve script editoru

Pokud chci k nějaké části scriptu (funkci, proměnné …) přidat komentář, abych se já nebo kdokoliv jiný později snáze orientoval v kódu, mohu použít komentář.
Jakýkoliv text, před kterým jsou dvě lomítka // je považován za komentář a kompilátor scriptu ho nebere v potaz. Takovýto komentář končí na konci řádku. Příklad :

1 void main()
2 {
3 // Definuje hráče, který je první v player listu
4 object oPC = GetFirstPC();
5 }

ale také

1 void main()
2 {
3 object oPC = GetFirstPC(); // Definuje hráče, který je první v player listu
4 }

nebo

1 void main()
2 {
3 // Definuje hráče,
4 // který je první
5 // v player listu
6 object oPC = GetFirstPC();
7 }


Všechny uvedené příklady jsou správné (i když třetí příklad není zrovna nejšťastnější). Nwn script editor také rozpoznává ještě jeden druh komentáře.
Veškerý text mezi značkami
/*
*/

je také považován za komentář.

1.4 Formátování kódu

Aby byl script přehledný a nedocházelo k omylům, je třeba dodržet již zmiňovaná pravidla slušného programování. Obecně platí, že každý jednotlivý příkaz má svůj vlastní řádek. Použití odsazení od okraje také velmi zpřehledňuje script. Příklad :

1 void main()
2 {
3 if (GetFirstPC()==OBJECT_INVALID)
4     {
5     // script, který se provede pokud platí podmínka if
6     }
7 }

Vězte, že takovéto dodržování etiky programování vám v budoucnu (až opět otevřete nějaký starší script) ušetří velmi mnoho práce.


Pravidla :
  • Jeden příkaz na řádku

  • Otevírací a uzavírací složená závorka funkce, každá z nich má svůj řádek

  • Příkazy ve funkcích odsazené od složených závorek

  • Žádné oddělovače kolem závorek, které jsou spojeny s tělem funkce

  • V další kapitole se si povíme něco více o proměnných a návratových hodnotách funkcí.

    Mole


     
     

    Toolset


    Toolset Tutorial

    Or-Horo Tutorial

    První Kapitola Scriptování

    Druhá Kapitola Scriptování

    Třetí Kapitola Scriptování

    Čtvrtá Kapitola Scriptování