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
|