„Star Wars Galactic Battlegrounds szkriptek/A szkriptnyelv parancsai” változatai közötti eltérés

Tartalom törölve Tartalom hozzáadva
Új oldal, tartalma: „{{H-lap|könyv=Star Wars Galactic Battlegrounds szkriptek|előző=Az első lépések|következő=A szkriptnyelv parancsai}}”
 
Nincs szerkesztési összefoglaló
1. sor:
{{H-lap|könyv=Star Wars Galactic Battlegrounds szkriptek|előző=Az első lépések|következő=A szkriptnyelv parancsai}}
 
== A szkriptnyelv elemei ==
 
A Genie AI szkriptjei szöveges fájlok, amelyek különféle parancsokból állnak. Parancsból kétfélét fogok megkülönböztetni:
# Segédparancsok (metaszabályok), amelyek az AI szkript értelmezőprogramjának „mellékes” működését vezérlik, nem pedig magát a játékost; ide tartoznak a következők: a kommentelő operátor (;), a konstansdefiniálás ( (defconst ''szöveges azonosító'' ''számérték'') ), a szkriptbeágyazás operátora (load), a feltételes vezérlés operátorai (<nowiki>#</nowiki>load-if-defined ... <nowiki>#</nowiki>else ... <nowiki>#</nowiki>end-if), valamint a logikai operátorok ( not(), or(... ...), and(... ...) ); és az aritmetikai összehasonlító operátorok (kisebb-nagyobb-egyenlő).
# [[#Szabályok: a defrule parancs|Szabályok]], ezek végzik a játékos érdemi vezérlését, róluk később. A szabályok többsége leginkább a [[w:hu:Horn-klóz|Horn-klózokra]] hasonlít (már akinek ez mond valamit): mindenesetre, feltételekből és következményekből állnak.
 
Mit írhatunk egy Genie AI szkriptbe? Lássuk;
 
# [[#Kommentek|Kommentelhetünk]], vagyis az AI szkriptértelmező számára figyelembe nem vett sorokat írhatunk, megjegyzéseket csak a magunk vagy más szkriptelőtársak számára;
#[[#Konstansok|Konstansokat definiálhatunk]], érthetőbben, kiválasztva egy természetes számot (a felső határ 32 000 körül van, a C++ programnyelv ugyanis nagyjából a -32 000 ... +32 000 tartományban kezeli az egész számokat - aki tudja, pontosítsa), annak szöveges nevet adhatunk. Ez így talán nem látszik túl nagy lehetőségnek, de - ld. lentebb - sok mindenre használható.
# [[#Változók: a goal parancs(ok)|Számváltozókat definiálhatunk]]. Egy változónak nemnegatív egész értéket adhatunk, ezt az értéket meg is változtathatjuk, az értéket egy parancsba beolvastathatjuk.
# Lehetőség van bizonyos szabályok ún. ''[[#Load-if(-not): feltételes (nem-)végrehajtás|feltételes végrehajtás]]''ára. Mi szükség van erre, ha a szabályok amúgy is feltételekhez kötöttek? Ez nemcsak arra jó, hogy elegánsabbá, áttekinthetőbbé és egyszerűbben megfogalmazhatóvá tegye a szkriptet, a játék beállítási paramétereihez való igazíthatóságot biztosítva, de néhány olyan beállításra is tekintettel van, amit máshogy nem lehet megfogalmazni.
# A tulajdonképpeni magva, lényege a szkriptelésnek, hogy '''[[#Szabályok: a defrule parancs|szabály]]'''okat definiálhatunk. A szabályok parancsok, amiket a CP igyekszik majd végrehajtani. Egy szabály lényege szerint két részből áll: van egy sereg feltétel (''tények'', ''facts''), ha ezek teljesülnek, akkor egy sereg ''parancs'' (''actions'') végrehajtódik. A tényeket, feltételeket leíró részben használhatunk logikai operátorokat: és (and), vagy (or) és nem (not).
# A szkript végrehajtásának tetszőleges fázisában [[#A load parancs|betölthetünk egy másod- vagy alszkriptet]] az AI szkriptünkbe . A szkriptek egymásba ágyazhatóak. Ez lehetővé teszi pl., hogy egy nagyon hosszú szkriptet modulárissá alakítsunk, kisebb részekből összerakva.
# Egyéb lehetőségek: lehetőség van néhány beágyazott szkript közötti [[#A load-random parancs|véletlen választásra]] is.
 
=== Adattípusok ===
 
E szakasz az AI szkriptírás szempontjából nem olyan lényeges, pusztán a mélyebb elméleti megértést szolgálja. Akit nem érdekel, ugorja át nyugodtan.
 
A Genie AI szkriptnyelvében kétféle adattípust különböztetünk meg (ha nagyon akarunk):
# '''Sztring''' (egyszerű szöveg): A sztringek főleg a fájlnevek azonosítására szolgálnak. Az értelmező csak akkor fog egy azonosítót sztringnek tekinteni, ha idézőjelek (" ... ") közé van zárva, és nyomtatható (alfabetikus) karakterekből meg szóközökből áll.
# '''Szimbólum''': Bármely karaktersorozat, amely nyomtatható ASCII karakterekből áll, de nem tartalmaz szóközt és idézőjeleket, és két ún. határoló karakter közé esik, szimbólum. határoló jelek: 1). szóköz; 2). tab; 3). kocsivissza; (ez Windows-okban ált. egy enter) 4). sorvég (ez Windows-okban ált. szintén enter); 5). Kerek nyitó zárójel; 6). Kerek csukó zárójel. A szimbólumok értelmezése kézszenzitív, vagyis két szimbólumként értelmezett szöveg, amely azonos betűkből áll, csak az egyikben valamelyik betű nagy, a másikban kicsi, két különböző szimbólumnak számít.
 
Tehát ha egy változót elnevezünk goal-T1Carbon-nak, és valahol goal-t1carbon-ként hivatkozunk rá, a program hibaüzenetet ad. <ref group="mj">Ez a felosztás, bár kétségtelenül használható, meglehetősen durva, ami nagyon sok jelenséget egy kalap alá vesz. Az értelmező alprogram szempontjából kétségtelenül elfogadható, hogy pusztán ez a két típus van. Az AI szkripter azonban e nyelv megtanulásakor azzal szembesül, hogy azok a jelenségek valóságdarabok), amelyeket a nyelv sztringjeivel és szimbólumaival megnevez, a játék, a játékos, a szkripter szempontjából teljesen máshogy csoportosíthatóak értelmes rendszerré.</ref>
 
=== Kommentek ===
 
A legelső parancs, amit a szkriptnyelvből megismerünk, legyen a kommentelés, vagyis a megjegyzések elhelyezése. Legyen azért, mert ez okozhatja a legkevesebb kárt, meg mert ez a legegyszerűbb.
 
Íme: nyissunk egy új sort, és a sor legelejére írjunk egy pontosvesszőt, majd hagyjunk szünetet. Amíg nem ütünk entert, az ez utáni szöveget az AI szkriptünk értelmezőprogramja egyszerűen figyelmen kívül fogja hagyni. Példa:
 
<br>
<nowiki>;</nowiki> Ez a sor, megjegyzés csak szöveg és nem AI parancs, mert pontosvesszővel kezdted.<br>
<nowiki>;</nowiki> Ez úgyszintén.<br>
<br>
 
 
A kommentelés egyáltalán nem haszontalan eszköz. Lehetőség van magyarázatokat fűzni a parancsokhoz. Ha pl. egy hónappal a készítése után nem vagy megelégedve az AI szkripteddel, és meg szeretnél változtatni valamit, akkor könnyebben megtalálod, ha a szkriptedet megjegyzésekkel láttad el. Az esetleg több száz soros, elég lélektelen formális nyelven írt AI szkriptet már csak a benne való eligazodás miatt is célszerű legalább nagy vonalakban kommentezni (pl. fejezetekre osztani, techlevel-1 viselkedés, techlevel-2 viselkedés stb.). Ezt, ha jól tudom, a programozásmódszertanban dokumentálásnak hívják. A bonyolultabb szkripteket több okból is célszerű tehát „dokumentálni”.
 
=== Konstansok ===
 
==== „A beépített” számkonstansok és azonosítóik ====
 
A Genie szkriptnyelv két alapvető szerepet tölt be: létrehozza a véletlen térképeket, és szabályozza a CP-k viselkedését.
 
Mi csak a második lehetőséggel foglalkozunk, de a konstansok miatt kénytelenek vagyunk kicsit a szkriptnyelv utóbbi lehetőséget csak távolabbról érintő alapfogalmaival is foglalkozni.
 
A térképeken alapvetően kétféle dolog kaphat helyet.
# Az egyik és elsődleges dolog a geográfiai viszonyok szimulációja. Nevezzük ezeket '''terepelem'''eknek. Terepelemből háromféle van: 1). '''talaj''' (terrain) - ezek lényegében képfájlok, amik füvet/jeget/vizet stb. utánoznak; 2). '''domborzat''' (elevation) - ez olyan grafikai elem, amely a talajhoz hozzáadva a talaj emelkedésének/süllyedésének érzetét kelti; 3). '''szikla''' (cliff) - ezek sziklákat utánzó grafikus elemek. A SWGB-ban a talajok „kétrétegűsége” miatt még ennél is bonyolultabb a helyzet, de mindez nekünk most nem lényeges.
# Minden más, ami akár közvetlenül, akár közvetve a térképre kerülhet az '''tereptárgy'''nak, vagyis '''objektum'''nak minősül. Objektum lehet egy épület, egy egység, egy vadállat, egy díszítőelem, de objektumként viselkednek a romok, a holttestek, a lövedékek stb. is.
 
A Genie motor (s többek közt, a gamedata.drs fájl) mármost sok terepelemet és minden tereptárgyat egy számmal azonosít. Ezek nagy részét a gamedata.drs fájl listázza is (egyébként, több szkript-tutorial-író tanúsága szerint, közel sem az összeset - felületesen elég nehéz ezt eldönteni, mert a lista össze-vissza van, nem pedig a növekvő számazonosítók szerint). Néhány ezek közül, csak mutatóba:
* 16: űr (talajféleség)
* 41 grass4 (sárga síktalaj)
* 50 : működő farm
* 109: működő központ
* 621: épülőben lévő központ
* 1117: vörös szénszikla
* 764: gungan bombázó (1. fázis)
* 785: gungan bombázó (2. fázis, nehézbombázó)
* 833: bantha
És így tovább. Ezeket a számokat a továbbiakban '''''b''eépített ''n''umerikus ''a''ktortípus-''a''zonosítók'''nak (BNAA) nevezzük. A gamedata.drs ezekhez a BNAA-khoz alfabetikus szavakat rendel, pl. a 833-as számhoz a „bantha” szót.
 
==== A (defconst) parancs ====
 
A defconst parancs két dologra jó: A) definiál egy még nem létező számkonstanst, vagy pedig B) más azonosítót ad egy már létező számkonstansnak - akár előzőleg a felhasználó definiálta, akár a [[#„A beépített” számkonstansok és azonosítóik|fentebb]] leírt módon a fejlesztők építették a nyelvbe. Nem képes azonban arra, hogy egy már definiált konstansnak új értéket adjon - hisz különben a konstans nem is konstans lenne, hanem változó. Tehát tartsuk észben, hogy a parancs használata nem értékadás egy valahogy elnevezett változónak, hanem nagyjából épp ellenkezőleg: névadás egy változatlan számnak. A defconst parancs használata rendkívül egyszerű. Lássunk két (három) példát!
 
1. A gamedata.drs-ben az 56-os objektum egy halászó robot, szöveges azonosítója UNIT-FISHER1; az 57-es objektum egy másik halászó robot, szöveges azonosítója UNIT-FISHER-2. Tegyük fel, hogy szeretnénk magyarul hivatkozni rájuk, vagy hogy más okból elégedetlenek vagyunk ezekkel a szöveges azonosítókkal (például szeretnénk szemléletesebb nevet nekik, mert nem tudjuk megjegyezni, melyik melyik, vagy pedig nem akarjuk őket csupa nagybetűvel írni). Nosza, rendeljünk a két BNAA-hoz magyar szöveget, írjuk a szkript fájlba (mondjuk az elejére):
 
<br>
(defconst Halász1 56) <br>
(defconst Halász2 57)<br>
<br>
 
Ezentúl a további parancsokban mindenhol, ahol a UNIT-FISHER1-re lenne hivatkozás, azt kicserélhetjük Halász1-re. Egyébként a szöveges azonosítók helyett a bnaa-k, vagyis a számok is használhatóak lennének minden további tevékenység nélkül; csak az még áttekinthetetlenebbé tenné a szkripteket. Ismételjük meg: a szkriptnyelv nagyon formális és lélektelen, a hosszú szkriptek áttekinthetetlenné válhatnak; vagyis fontos eligazodni benne. Ehhez az objektumok jól motivált elnevezései hozzásegíthetnek.
 
2. Most lássuk a másik fajta használatot!
 
<br>
(defconst easy-t1-workerhigh 32)<br>
<br>
 
Emberi nyelven: „a 32-es szám ezentúl legyen a könnyű játékmód 1. technológiai szintjének munkásszáma, vagyis könnyű módban, a tech-level-1 szinten a játékosnak 32 munkás kívánatos”.
 
Tartsuk észben, hogy a defconst parancs csak nevet ad egy számnak, vagyis ez a parancs NEM fogja azt eredményezni, hogy a CP könnyű módban a tech-level-1 alatt valóban készít 32 munkást.
 
Egy számnak lehet különböző neve(ke)t adni. Pl. lehetséges:
 
<br>
(defconst easy-t1-workerhigh 32)<br>
(defconst easy-t2-workerhigh 32)<br>
<br>
 
A konstansnak új értéket adni azonban nem lehetséges, tehát „Error in line 2: Constant already defined.” hibaüzenethez vezet a következő AI szkriptfájl <ref group="mj">Matematikai nyelven szólva: a "neveim -> számaim" hozzárendelés tehát [[:w:hu:függvény|függvény]] kell, hogy legyen, de fordítva ez nem szükséges, a függvénynek nem kell [[:w:hu:injektív függvény|injektívnek]] lennie.</ref>:
 
<br>
(defconst easy-t1-workerhigh 32)<br>
(defconst easy-t1-workerhigh 33)<br>
<br>
 
==== A defconst parancs kétértelműségének összeegyeztethetőségről ====
 
Éles szemű-eszű ember észrevehette, hogy a defconst parancs két használata, úgy tűnhet, ütközik. Ha pl. azt szeretném, hogy a 32-es [[#„A beépített” számkonstansok és azonosítóik|bnaa-jú]] objektum neve ne BLDG-FARM, hanem csak farm, tehát:
 
<br>
(defconst farm 50)<br>
<br>
 
viszont azt is szeretném, hogy használhassak ugyanakkor egy „t2-civilian-population” nevű konstanst, aminek értéke véletlenül szintén 50, tehát írom:
 
<br>
(defconst t2-farmhigh 50)<br>
<br>
 
akkor nem fog-e mindez ütközéshez vezetni? Nem az történt-e, hogy átdefiniáltam a „farm” szöveget „t2-farmhigh”-á, és ezentúl az első szöveget már nem használhatom? Szerencsére nem. A defconst parancsok ilyen értelemben nem írják felül egymást, hiszen, mint mondtuk, itt nem injektív hozzárendelésről van szó. Már csak azért sem, mert a „farm” nevet teljesen máshol fogom használni, mint a „t2-civilian-population” nevet. A szkriptértelmező alprogram különbséget tud tenni a kétféle használat között. Például legyen a szkriptem ez:
 
<br>
(defconst farm 50)<br>
(defconst t2-civilian-population 50)<br><br>
(defrule<br>
&nbsp;(current-time == 120)<br>
&nbsp;(building-type-count farm >= t2-farmhigh)<br>
=><br>
&nbsp;(build farm)<br>
)<br>
 
Az ötödik sorban a (building-type-count ''épület'' >= ''szám'') parancsban az ''épület'' argumentum helyére csak érvényes épületnév jöhet. Az értelmezőprogram tehát ellenőrzi, a „farm” szóhoz tartozik-e valamilyen épület? Megkeresi a Gamedata.drs fájlban a „farm” név bnaa-ját; természetesen nem fogja találni, mert ott a farmot nem „farmnak” hívják, hanem így: BLDG-FARM. Ezután megnézi, a lokális szkriptfájlban, a Testguy.per-ben van-e épület a „farm” szóhoz rendelve. És valóban, megtalálja, hogy a farm szóhoz az 50-es szám van rendelve, természetes, hogy ezt az 50-es objektum, amely valóban épület, azonosítójaként kezeli. Viszont a „>=” relációs jel után értelmetlen dolog épületet keresni, oda csak szám jöhet. Tehát a „t2-farmhigh” konstansról nem fogja azt feltételezni, hogy az egy objektum lenne. Ki van ez találva. Látható: az sem fog gondot okozni az értelmezőprogramnak, ha egy bnaa-hoz több nevet rendelek, pl. a banthát (Azzaz a bnaa 833-as objektumot) elkeresztelem „büdösbanthának” és „kövérbantának” is egyszerre. Ha ezeket a neveket adekvátan használom, azaz, csak egységekre vonatkozó parancsokban használom őket, akkor ez nem okoz zavart az értelmező alprogram számára. Szintaktikai zavart egyébként sem, legfeljebb az AI nem azt fogja csinálni, amit szeretnék.
 
==== Beépített szöveges azonosítók, avagy játékparaméterek ====
 
A Genie AI szkriptnyelvében nemcsak beépített és definiálható számkonstansok vannak, hanem szöveges jellegű konstansok és változók is.
 
E „foglalt sztringek” főképp egy funkciót látnak el: akkor kapnak értéket, ha már elindult a játék, és értékük a játék megfelelő beállítása lesz. Mindezek miatt '''játékparaméterek'''nek neveztem el őket.
 
E játékparamétereket az online útmutatókban néha beépített szövegkonstansoknak is nevezik. Ezzel nem igazán vagyok megelégedve, a játékparaméterek egyik része kétségkívül konstans, másik része azonban szerintem sokkal inkább változónak tekintendő. Lássuk a részleteket!
 
A játékparaméterek két csoportra oszlanak: egy részük a [[#A feltételes végrehajtásban alkalmazható játékparaméterek|a feltételes végrehajtás]] parancsának fejrészében alkalmazható, ezeket ld. ott. Ezek olyan szavak, mint REBEL, TINY-MAP, DIFFICULTY-HARD, kétségkívül semmi másnak nem tekinthetőek, mint sztringkonstansnak.
 
Más, itt tárgyalandó részük azonban a [[#Szabályok: a defrule parancs|defrule]] parancsban használható, és értékük játékról játékra és játékosról játékosra változhat. Emiatt igazából szöveges értékű változók. Mármost azonban, ha egy játék elindult, akkor onnantól kezdve az értékük rögzül, és talán innen a félreértés, hogy konstansok.
 
A két játékparaméter-család között van némi átfedés, de azért nem ugyanarról a dologról van szó.
 
A másodikként említett, inkább változószerű család tagjai nem pusztán a szűkebb értelemben vett játékbeállításra vonatkoznak, hanem egy részük civilizációfüggő. Ezek a '''civ-paraméterek'''. Néhány AI szkripter szerint utóbbiak megbízhatatlanul, vagy nem működnek.
 
 
A defrule parancsban is (elvileg) használható paraméterek és értékeik a következők:
 
* Játékparaméterek
** '''my-player-number''': Értéke adott játékban mindig a játékos saját sorszáma. Minden játékosnak, 1-től legfeljebb 8-ig, van egy sorszáma. A gaia nevű rejtett játékosnak 0 a sorszáma. Hogy ez a paraméter képes-e ilyen értékkel is visszatérni, azt nem teszteltem.
** '''my-civ''': Értéke adott játékban mindig a játékos civilizációtípusa. Értékei: rebel, gungans, wookiees, naboo, empire, federation.
* Civ-paraméterek:
** '''my-unique-unit''': Értéke elvileg a játékos sajátegysége, Balbarian (ld. [[#Források|források]]) szerint ez nem igazán működik. Persze ez megoldható úgy is, hogy megkeressük a gamedata.drs fájlban az egység konstansát (bnaa), és azt használjuk, vagy azokhoz írunk [[#Load-if(-not): feltételes (nem-)végrehajtás|feltételes végrehajtási]] parancsokat.
** '''my-unique-unit-upgrade''': Értéke elvileg a játékos elit sajátegységét kikutatató technológia neve, Balbarian szerint nem működik.
** '''my-elite-unique-unit''': Értéke elvileg a játékos elit sajátegysége, Balbarian feltételezi, hogy ez sem működik.
** '''my-unique-unit-line''': Értéke elvileg a játékos sajátegysége vagy elit sajátegysége, attól függően, hogy melyik van neki. Balbarian szerint ez szerepel a sztenderd AI szkriptben, így feltételezi, hogy működik.
** '''my-unique-research ''': Értéke elvileg, legalábbis az [[:w:hu:Age of Empires II: The Age of Kings|AoK]]-ben, a játékos sajáttechnológiája. Mármost ebből a SWGB-ban nem feltétlenül csak egy van. Balbarian tesztjei szerint a wukik és a szövetségiek esetében részlegesen működik, 1-1 (erődbeli? - megj. tőlem) sajáttechnológiára hivatkozik.
 
A legtöbb útmutatóban nincs minden paraméter felsorolva. Pl. a Reveal Map beállításhoz tartozik-e beépített paraméter? Kérdéses, hogy ezeket csak figyelmen kívül hagyták-e az útmutatókészítők, vagy nem is léteznek? Nekem személy szerint az a benyomásom (próbálkozások és utánakeresés után), hogy pl. az ALLTECHS beállításhoz nincs beépített paraméter.
 
=== Változók: a goal parancs(ok) ===
 
A Genie szkriptnyelvében a változókat '''goal'''-oknak hívják. Kétféle parancs vonatkozik rájuk: az [[#Értékadás|értékadó]] és az [[#Értékellenőrzés|értékellenőrző]].
 
==== Értékadás ====
 
Az értékadó parancs a következőképp néz ki:
 
<br>
(set-goal ''numerikusazonosító'' ''érték'')<br>
<br>
 
Például:
 
<br>
(set-goal 2 3)<br>
<br>
 
kiolvasva: „állítsd a szkripted másodiknak nevezett változójának értékét 3-ra!”. A változókat, közvetlen módon, csak számokkal lehet elnevezni. A gamedata.drs fájl, ahol szöveges azonosítójú goal-ok is vannak, ne tévesszen meg senkit: a lokális, felhasználói szkriptfájlokban nincs ilyen lehetőség, a szöveges azonosítójú goal-okra a hibaellenőrző alprogram hibaüzenettel reagál. Ez a a korlátozás azonban a defconst parancs használatával megkerülhető, vagyis mégis csak van lehetőség, igaz, közvetett úton, egy változó szöveges elnevezésére is, de ehhez külön „szótár” kell egy sor defconst parancsból, a részletek [[#A defconst használata változóknak való névadásra|lentebb]].
 
==== Értékellenőrzés ====
Az értékellenőrzés még egyszerűbb:
 
<br>
(goal ''numerikusazonosító'' ''érték'')<br>
<br>
 
Például:
 
<br>
(goal 2 3)<br>
<br>
 
kiolvasva: „igaz-e, hogy a másodiknak nevezett változó értéke három?” avagy „amennyiben a másodiknak nevezett változó értéke három, ...”.
 
Az egyszerű szintaktika ára, hogy a szkriptfájlokbeli változók használata nem túl gazdag pl. egy magas szintű programozási nyelv lehetőségeihez képest. A változók főleg egyszerű feltételes és számláló ciklusok megvalósításához használhatóak.
 
==== Alkalmazás a feltételrendszerek egyszerű megnevezésére ====
Egy igen gyakori használati mód, amikor számos parancsot akarunk kiadni, amennyiben bizonyos hosszabb feltételrendszer teljesül. Pl. ha 1) van 500 szenünk, 2) 1000 orénk, 3) a techlevel-3-ban vagyunk, de 4) még nem telt el a szintből 2 perc, és 5) az ellenséges bázisban a felderítőnk már látott 10 repülőgépet, és 6) a városunk épp nincs támadás alatt, és 7) már megépült az egyik erődünk, akkor ebben a helyzetben A) szeretnénk építeni egy légvédelmi tornyot, B) szeretnénk kiképezni 20 légvédelmis gyalogost és C) szeretnénk gyártani két légvédelmi mobilt.
 
Nos, ezt egy parancsba biztosan nem tudjuk belefoglalni, mert a húsz légvédelmis gyártása, ha egyenként oldjuk meg, akkor túl hosszú szabályt eredményezne, a hibaellenőrző alprogram hibát jelezne. Arra törekszünk tehát, hogy összefoglaljuk valahogy ezt a helyzetet. Definiálunk egy új változót, mondjuk a goal 4-et („(set-goal 4 2)”), amelynek értéke 0 lesz („set-goal 4 0”), ha a helyzet nem áll fennt, és 1 („set-goal 4 1”), ha a helyzet fennáll. A további szabályokban, ahol e helyzet fennállása vagy fenn nem állása képezi a döntés alapját, nem kell a hosszadalmasan leírható 7 feltételből álló rendszert belefoglalnunk a szabályokba, csak ennyit írunk:
 
<br>
(defrule<br>
(goal 4 1)<br>
=><br>
... ''parancsok'' ...<br>
)<br>
 
Az is gyakran előfordul, hogy van egy nagyon gyakran használt (bár nem feltétlenül hosszú) feltételrendszerünk, amelyhez bizonyos parancsokban járulékos feltételek is adódnak, de mások és mások, így nem lehet ezeket a szabályokat egy szabályban összefoglalni. Sokszor az ilyen esetekben is célszerű az állandóan fellépő feltételrendszert egy változó egy v. több értékében összefoglalni.
 
Tehát az egyik dolog, bár nem az egyetlen, amire a változók használhatóak: a túl hosszú vagy túl gyakori feltételrendszerek tömörítése, rövid elnevezése.
 
==== A defconst használata változóknak való névadásra ====
 
Nem árt megismerkedni azzal a lehetőséggel, hogy hogyan vezethetünk be szöveges nevű változókat. Ez ismét olyan dolog, ami nem a CP-t érinti, hanem csak a szkriptfájl dokumentációját és (ezáltal) a szkript tervezését és javítását könnyíti.
 
Sokak szerint (bevallom, közéjük tartozom) kicsit idegesítő, hogy a változónevek számok. Észben kell tartani, hogy melyik változót milyen szerepkörre rendeltünk, hogy pl. a negyvenes számú változó csak egy ciklusszámláló segédváltozó-e, vagy pedig egy kulcsfontosságú helyzet (pl. egy támadás alatt álló város megmentésének) feltételrendszerét rögzíti-e. Lehet a szkriptfájl elején egy szótárszerű kommentszakaszt létrehozni, hogy pl.
 
&nbsp;; goal 1 - szénszintmérő változó
&nbsp;; goal 2 - élelemszintmérő változó
&nbsp;; goal 3 - novaszintmérő változó
&nbsp;; ...
&nbsp;; goal 40 - ciklusszámláló segédváltozó nova adóztatáshoz
&nbsp;; goal 41 - ciklusszámláló segédváltozó ore adóztatáshoz
&nbsp;; ...
&nbsp;; goal 221 - értéke 1, ha a város félig elpusztult, de újjáépíthető; értéke 2, ha minden elveszett; értéke 0, ha nincs ilyen probléma
&nbsp;; ...
&nbsp;; goal 234 - ha valamelyik ellenfélnek túl erős a repülőarmadája
&nbsp;; és így tovább ...;.
 
de hát ezt vagy észben tartja az ember (általában nem), vagy pedig írás közben mindig előre kell ugrani a szótárhoz, megnézni, hányadik változót kell definiálni éppen, csak hát utána elég nehéz visszakeresni a többezer soros .txt fájl közepén, hol tartottunk. És minek is, nem lenne-e jobb, ha a változók nevében benne lenne a funkciójuk?
 
Ha pl. szöveges nevet és szöveges értékeket szeretnénk adni az első számú változónak, akkor a fájl elejére tegyünk egy defconst parancsokból álló ilyesféle „szótárat”:
 
<br>
&nbsp;; a goal 1 neve és értékei<br>
&nbsp;(defconst goal-SZÉNMÉRŐ 1)<br>
&nbsp;(defconst SEMMI-szén 0)<br>
<nowiki>;</nowiki> Sürgősen szenet kell bányászni, és felhagyni a fogyasztással<br>
&nbsp;(defconst KEVÉS-szén 1)<br>
<nowiki>;</nowiki> Sürgősen szenet kell bányászni, és csak a legszükségesebb feladatokkal fogyasztani<br>
&nbsp;(defconst ELÉG-szén 2)<br>
<nowiki>;</nowiki> Korlátozni lehet a szénbányászatot, és átlagos ütembe folytatni a munkát<br>
&nbsp;(defconst SOK-szén 3)<br>
<nowiki>;</nowiki> Építhető pár plusz (nem létfontosságú) épület és plusz támadó/védő egység, kis ajándékok adhatóak a szövetségeseknek<br>
&nbsp;(defconst RENGETEG-szén 4)<br>
<nowiki>;</nowiki> Folytatni lehet az építkezést, a szövetségeseket is meg lehet tömni szénnel<br>
<br>
 
Ezek után már pl. (goal 1 2) helyett nyugodtan írhatjuk azt, (goal goal-SZÉNMÉRŐ ELÉG-szén). Ugyanazt fogja jelenteni a két feltétel. A szabályokban pedig beállíthatjuk, hogy mondjuk ELÉG-szén értékű akkor legyen a szenünk, ha 500 és 700 között van:
 
<br>
(defrule<br>
&nbsp;(carbon-amount >=500 )<br>
&nbsp;(carbon-amount <= 700)<br>
=><br>
&nbsp;(set-goal goal-SZÉNMÉRŐ ELÉG-szén)<br>
)<br>
<br>
 
=== Néhány más parancs ===
 
==== Load-if(-not): feltételes (nem-)végrehajtás ====
 
A load -if parancsba ágyazott szabályok csak bizonyos beépített feltételek esetében hajtódnak végre. Itt konkrétabban arról van szó, hogy ezt a parancsot a játékbeállítások figyelembevételére találták ki. A játékkészítők alkottak néhány foglalt szót, pl. REBEL („lázadó”), MOTHERLODE („anyatelér”), vagy EASIEST („legkönyebb”), amelyek leírják a játéktérkép-fajtákat és a játék egyéb beállításait. A különféle útmutatókban ezeket '''rendszerkonstans'''nak, '''rendszer-definiálta szimbólumoknak''' vagy '''foglalt szavaknak''' nevezik, mi egyszerűen '''játékparaméter'''nek.
 
Nem csak szabályok (vagyis a defrule parancs), hanem a defconst és a többi parancs is végrehajtható feltételesen. Sőt, a feltételes végrehajtások maguk is egymásba ágyazhatóak, egészen 50 szint mélységig.
 
Többféle szintaktikával lehet használni.
 
===== Load-if =====
 
'''Egyszerű load-if''' változat:
 
<br>
<nowiki>#</nowiki>load-if-defined ''játékparaméter''<br>
''parancsok''<br>
<nowiki>#</nowiki>end-if<br>
<br>
 
'''Ágaztatott load-if''' változat:
 
<br>
<nowiki>#</nowiki>load-if-defined ''játékparaméter''<br>
''parancsok''<br>
<nowiki>#</nowiki>else<br>
''szabályok''<br>
<nowiki>#</nowiki>end-if<br>
<br>
 
Amennyiben olyan játékbeállításokkal játszunk, amelyek valamelyikére teljesül a szabály „fejében” foglalt játékparaméter - pl. a REBEL beépített azonosító van oda írva, és a CP épp valóban lázadó civre van állítva - akkor végrehajtódnak a fejben foglalt parancsok, egyébként nem. A második változat hasonló, csak ott az „else” rész után is lehetnek szabályok, amik pont akkor hajtódnak végre, ha a játékparaméter értéke nem teljesül.
 
===== Load-if-not =====
 
<br>
<nowiki>#</nowiki>load-if-not-defined ''játékparaméter''<br>
''parancsok''<br>
<nowiki>#</nowiki>end-if<br>
<br>
 
'''Ágaztatott load-if-not''' változat:
 
<br>
<nowiki>#</nowiki>load-if-not-defined ''játékparaméter''<br>
''parancsok''<br>
<nowiki>#</nowiki>else<br>
''parancsok''<br>
<nowiki>#</nowiki>end-if<br>
<br>
 
A load-if parancshoz képest épp ellenkezőleg működik: amennyiben a játékparaméter nem teljesül, akkor hajtódik végre az első csokor szabály, míg az <nowiki>#</nowiki>else rész utániak nem fognak végrehajtódni.
 
===== A feltételes végrehajtásban alkalmazható játékparaméterek =====
 
A következő játékparaméterek (nagybetűvel írandóak, a zárójeles rész csak magyarázat) használhatóak:
 
# Civilizációra vonatkozó értékek
## GAIA (vagy player# 0) - gaia (vadállatok, természeti tárgyak stb.)<!--teszteltem, felismeri a GAIA konstanst-->
## REBEL (lázadó)
## WOOKIEES (wukik - figyeljünk a helyesírásra: dupla wé, dupla ó, dupla e)
## NABOO (naboo-k)
## GUNGANS (gunganek)
## EMPIRE (birodalmi)
## FEDERATION (kereskedelmi szövetség)
## REPUBLIC (csak a Clone Campaigns-ban)
## CONFEDERACY (csak a Clone Campaigns-ban)
# A játéktípusra vonatkozó értékek:
## DEATH-MATCH (a földdel egyenlővé kell tenni az ellenségeket)
## TERMINATE (az AoK-beli regicide megfelelője: meg kell ölni az ellenséges parancsnokokat)
## KING-OF-THE-HILL („commander-of-the base”: el kell foglalni és meg kell védeni a térkép közepén lévő parancsnoki központot)
## MONUMENT-RACE (nincs harc, minél gyorsaban emlékművet kell építeni)
## DEFEND-MONUMENT (az egyik játékos emlékművel indul, a többieknek időre le kell rombolni)
# Erőforráskonfiguráció-paraméter értékei:
## LOW-RESOURCES-START (alacsony kezdeti erőforráskészletek)
## MEDIUM-RESOURCES-START (átlagos ~)
## HIGH-RESOURCES-START (magas ~)
# Térképméret értékei:
## TINY-MAP (epszilon köb méretű)
## SMALL-MAP (epszilon négyzet méretű
## MEDIUM-MAP (epszilon méretű)
## NORMAL-MAP (nagyon-nagyon kicsi)
## LARGE-MAP (kisebb méretű)
## GIANT-MAP (alig elfogadható méretű)
# Térképtípus értékei:
## WATER-MASS-MAP
## LAND-SATELLITES-MAP
## SPACE-SATELLITES-MAP
## PLANETS-AND-MOONS-MAP
## SEARCH-AND-DESTROY-MAP
## TEAM-LAND-SATELLITES-MAP
## TEAM-SPACE-SATELLITES-MAP
## STAR-WARS-WORLD-KASHYYYK-MAP
## STAR-WARS-WORLD-ENDOR-MAP
## STAR-WARS-WORLD-GEDDES-MAP
## STAR-WARS-WORLD-AEREEN-MAP
## STAR-WARS-WORLD-KESSEL-MAP
## STAR-WARS-WORLD-TATOOINE-MAP
## STAR-WARS-WORLD-TATOOINE-NEW-MAP
## STAR-WARS-WORLD-YAVIN-MAP
## SEA-MAP
## SHORELINE-MAP
## LAND-MASS-MAP
## SPACE-MASS-MAP
## NOVA-LAKE-MAP
## LARGE-SEA-MAP
## STAR-WARS-WORLD-KRANT-MAP
## STAR-WARS-WORLD-HOTH-MAP
## STAR-WARS-WORLD-HANOON-MAP
## STAR-WARS-WORLD-REYTHA-MAP
## STAR-WARS-WORLD-DAGOBAH-MAP
## STAR-WARS-WORLD-ZALORIIS-MAP
## STAR-WARS-WORLD-NABOO-MAP
## STAR-WARS-WORLD-SARAPIN-MAP
## STAR-WARS-WORLD-EREDENN-MAP
## STAR-WARS-WORLD-GEONOSIS-MAP
## STAR-WARS-WORLD-MOSESPA-MAP
## CUSTOM-MAP
## RAIDERS-MAP
## RIVERS-MAP
## SWAMP-MAP
## TUNDRA-MAP
## DESERT-MAP
## ARENA-MAP
## FOREST-MAP
## FORTRESS-MAP
## ICE-LAKE-MAP
## NOVA-ASSAULT-MAP
## PRECIPICE-MAP
## FLATS-MAP
## MOTHERLODE-MAP
## SAVANNAH-MAP
# Győzelmifeltétel-konfigurációk paraméterének értékei
## VICTORY-STANDARD (conquest vagy monunemt közül bármelyik)
## VICTORY-CONQUEST (porig rombolni az ellenfeleket)
## VICTORY-TIME-LIMIT (meghatározott idő alatt a legjobb pontstatisztikát csinálni)
## VICTORY-SCORE (a legjobb pontstatisztikát csinálni)
## VICTORY-CUSTOM (egyéni beállítások)
# Nehézségi fokozatok értékei
## DIFFICULTY-EASIEST
## DIFFICULTY-EASY
## DIFFICULTY-MODERATE
## DIFFICULTY-HARD
## DIFFICULTY-HARDEST
# Poplimit beállítások
## POPULATION-CAP-25
## POPULATION-CAP-50
## POPULATION-CAP-75
## POPULATION-CAP-100
## POPULATION-CAP-125
## POPULATION-CAP-150
## POPULATION-CAP-175
## POPULATION-CAP-200
## POPULATION-CAP-225
## POPULATION-CAP-250
# Játéksebesség beállítások
## GAME-SPEED-LOCKED
# Játékoselhelyezési beállítások
## TEAMS-LOCKED („rögzített” csapatok: a szövetségesek nem a térképen össze-vissza kezdenek, hanem egymás szomszédságában)
 
==== A load parancs ====
 
E parancs képessé tesz egy szkriptet arra, hogy megszakítsa a futást, betöltsön egy másik szkriptet egy másik fájlból, majd annak befejeztével folytassa az anyaszkript futtatását.
 
Szintaktikája - mondanom sem kell - egyszerű:
 
<br>
(load "''fájlnév")<br>
<br>
 
A fájlnév egy olyan per fájl neve kell hogy legyen, a kiterjesztése nélkül, amely vagy a ''SWGB mappa''\Game\AI mappában található, vagy pedig annak egy almappájában - ez utóbbi esetben azonban meg kell adni az almappát is. Például:
 
-) Ha a Testguy.per fájl elérési útja C:\Window\Lucas_Arts\SWGB\Game\AI\Testguy.per, akkor a parancs így fog kinézni:
 
<br>
(load "Testguy")<br>
<br>
 
-) Ha a Testguy.per fájl elérési útja C:\Window\Lucas_Arts\SWGB\Game\AI\Modules\Testguy.per, akkor a parancsot a következőképp kell alkalmazni:
 
<br>
(load "Modules\Testguy")<br>
<br>
 
Jótanácsok és megjegyzések:
 
# Ne felejtsd el a fájlnevet idézőjelek közé tenni!!
# Ha a fájlnév szóközt tartalmaz, az a parancsban _ jellel helyettesítendő. Pl. a ''Gode Takrab.per'' fájlra így kell hivatkozni: "Gode_Takrab".
# A fájl bármely helyén lehet, két szabály között, alkalmazni;
# Nem teszteltem, hogy kézszenzitív-e. Tanácsos a nagybetű-kisbetű megkülönböztetésre odafigyelni;
# A fájlbetöltések is egymásba ágyazhatóak, 10 szint mélységig. Tehát ha betöltök az anyaszkriptbe egy leányszkriptfájlt, abban lehetnek betöltőparancsok, amelyekben betöltenek unokaszkripteket, azokban is lehetnek újabb betöltőparancsok ... egészen a tizedik nemzedékig.
# Sajnos fogalmam sincs, hogy lehet a sztenderd szkriptet betölteni. Jelenlegi ismereteim szerint erre nincs mód.
 
==== A load-random parancs ====
 
A load-random parancs néhány megadott fájl közül véletlenszerűen kiválaszt egyet, és azt betölti.
 
Használata:
 
<br>
(load-random ''esély<sub>1</sub>'' "''fájlnév<sub>1</sub>''" ''esély<sub>2</sub>'' "''fájlnév<sub>2</sub>''" ... ''esély<sub>n</sub>'' "''fájlnév<sub>n</sub>''" "''mégegyfájlnév''")<br>
<br>
 
 
Az ''esély x.''-ek helyébe egyszerűen egész számokat kell írnunk, melyek összege kisebb száznál (vagy egyenlő vele); ez az a valószínűség lesz ([[:w:hu:százalék|százalékban]] megadva), amely eséllyel a ''fájlnév x.'' betöltődik. A legutolsó fájlnév akkor töltődik be, ha a többi nem, akkora eséllyel, amekkorát a többiek esélyei hagytak neki (a többi összegét kivonjuk százból).
 
Például:
 
<br>
(load-random 10 "AngryEmpire" 20 "ShyEmpire" ... 40 "T-2Gunga" "FedTrader")<br>
<br>
 
esetén 10% eséllyel töltődik be az AngryEmpire.per fájl, 20% eséllyel a ShyEmpire.per; 40% eséllyel a T-2Gunga.per fájl, és 100%-(10%+20%+40%)=30% eséllyel a FedTrader.per fájl.
 
A fájlnevekre, elérési utakra vonatkozóan ugyanaz érvényes, mint amit a load parancs esetén mondtunk.
 
Az utolsó fájl megadása egyébként nem kötelező, el is maradhat. Ekkor a sztenderd AI töltődik be, vagy semmi, és csak szenet fog gyűjtögetni. Jó kérdés.
 
Az is lehetséges, hogy csak az utolsó fájlt adjuk meg, vagyis egyetlen fájlt esélyek nélkül. Ennek nagyjából ugyanaz a hatása, mint a load parancsnak, csak - Balbarian szerint - sokkal jobban megterheli a számítógép erőforrásait, lassabb lesz.
 
Egyszóval elmaradhat az esélymegadásos rész, de elmaradhat az esélymegadás nélküli fájl is. Amit ne felejtsünk el továbbra sem, hogy nem maradhat el az idézőjel a fájlnevek körül!
 
=== Szabályok: a defrule parancs ===
 
A parancsnak kétféle nagyon eltérő használata is van. Az [[#A defrule parancs egyszerű vagy használata|egyszerűbb szintaktikájú]] változat a kevésbé használt vagy kevésbé finom szabályzást lehetővé tévő: amennyiben a feltételek teljesülnek, úgy a parancs alapértelmezésben vég nélkül végrehajtódik, újra és újra. Ezt '''nyílt végrehajtású''', röviden nyílt szabálydefiniálásnak nevezzük.
 
Egy bonyolultabb szintaktikájú változat, amelyet talán többször használunk, vagy legalábbis ami az akcióknak a szituációhoz való finomabb hangolását lehetővé teszi, a vég nélkül folytatódó parancs egyszerivé tétele. Ez úgy érhető el, hogy egy speciális, (disable-self) azonosítójú akcióval zárjuk le az akciók sorát. Az ilyen akcióval záródó szabályt '''zárt végrehajtású''', röviden zárt szabáyldefiniálásnak fogom hívni.
 
==== A defrule parancs egyszerű vagy nyílt végrehajtású használata ====
 
Végre rátérhetünk a szkriptírás lelkét képező '''szabályok''' alkotására, vagyis a defrule parancsra. A szabályok két fő részből állnak: '''fej'''rész avagy '''feltételek''' (''facts''), és '''láb'''rész avagy '''akciók''' (''actions'').
 
Szintaktikája a következő:
 
<br>
(defrule ''tények'' => ''akciók'' )<br>
<br>
 
Vagyis minden defrule parancs zárójeltől zárójelig tart, a tények és akciók között pedig a [[:w:hu:kondicionális|kondicionális]] avagy imlplikáció nevű logikai művelet egyezményes jele, egy nyilacska áll. A nyilacska egy egyenlőségjelből és egy balra nyitott kacsacsőrből van összetéve.
 
Ezt a parancsot az áttekinthetőség kedvéért enterekkel gyakran sorokra daraboljuk, így:
 
<br>
(defrule<br>
&nbsp;(''tény 1'')<br>
&nbsp;(''tény 2'')<br>
&nbsp;...<br>
&nbsp;(''tény n.'')<br>
=><br>
&nbsp;(''akció 1'')<br>
&nbsp;(''akció 2'')<br>
&nbsp;...<br>
&nbsp;(''akció m.'')<br>
)<br>
<br>
 
A tényeket és akciókat is zárójelbe kell tenni; hogy előttük és utánuk hány szóköz vagy [[:w:hu:tabulátor|tabulátor]] áll, az lényegtelen.
 
A sor - itt jegyezzük meg - entertől enterig tart. Ennek a hibakeresésben van jelentősége. Tehát a fenti szabályt egy sorba is írhatjuk, meg több sorba is, és ekkor a hibakereső más-más sort jelöl meg hibásként, ha talál hibát (a sor tehát ilyen értelemben a szkriptnyelven kívüli fogalom, az értelmezőprogram számára nincs jelentősége).
 
Egy egyszerű példa:
 
<br>
(defrule<br>
&nbsp;(game-time >= 600)<br>
&nbsp;(current-age == tech-level-2)<br>
=><br>
&nbsp;(chat-to-all "Ez a techlevel-2")<br>
)<br>
<br>
 
Ez a szabály azt fogja eredményezni, hogy ''ha'' a játékidő elérte a hatvanadik percet, ''és'' még az is igaz, hogy a játékos már kikutatta a tech-level-2-t (a kutatás már befejeződött, nem csak folyamatban van), akkor a képernyőre ki fogja írni a hatvanadik perc környékétől - folyamatosan, kb. fél másodpercenként - hogy „ez a techlevel-2”. A kiírás késhet egy kicsit, ha abban a pillanatban mondjuk épp a többi játékos is megereszt hasonló chat-üzenetet, de nem túl sokat, mondjuk négy másodpercet.
 
==== A defrule parancs zárt végrehajtású változata ====
 
Szinte ugyanazt elmondhatjuk, amit már a fenti szakaszban is mondtunk, casak az egyetlen különbség, hogy a parancs egyszer hajtódik végre, aztán az értelmező alprogram elfelejti, hogy valaha is volt ilyen szabály. Vagy talán: dehogyis felejti el, hanem holta napjáig emlékszik rá, hogy már végrehajtotta egyszer ... ugyan melyik szkriptíró, az Ensemble Studios munkatársain kívül, látott is bele valaha igazán egy értelmező alprogram lelkébe? ... Menjünk tovább: a zárt defrule parancs, ahogy mondtuk, különös módon ugyanolyan, mint a nyílt, csak tartalmaz egy plusz akciót, a lezárást, amely a (disable-self) nevet viseli. Szintaktikája a következő:
 
<br>
(defrule ''tények'' => ''akciók'' (disable-self) )<br>
<br>
 
Vagyis minden defrule parancs zárójeltől zárójelig tart, a tények és akciók között pedig a [[:w:hu:kondicionális|kondicionális]] avagy imlplikáció nevű logikai művelet egyezményes jele, egy nyilacska áll. A nyilacska egy egyenlőségjelből és egy balra nyitott kacsacsőrből van összetéve.
 
Ezt a parancsot az áttekinthetőség kedvéért enterekkel gyakran sorokra daraboljuk, így:
 
<br>
(defrule<br>
&nbsp;(''tény 1'')<br>
&nbsp;(''tény 2'')<br>
&nbsp;...<br>
&nbsp;(''tény n.'')<br>
=><br>
&nbsp;(''akció 1'')<br>
&nbsp;(''akció 2'')<br>
&nbsp;...<br>
&nbsp;(''akció m.'')<br>
&nbsp;(disable-self)<br>
)<br>
<br>
 
A tényeket és akciókat is, még mindig, zárójelbe kell tenni; hogy előttük és utánuk hány szóköz vagy [[:w:hu:tabulátor|tabulátor]] áll, az továbbra is lényegtelen. A sor entertől enterig tart, stb. stb.
 
Egy egyszerű példa:
 
<br>
(defrule<br>
&nbsp;(game-time >= 600)<br>
&nbsp;(current-age == tech-level-2)<br>
=><br>
&nbsp;(chat-to-all "Ez a techlevel-2")<br>
&nbsp;(disable-self)<br>
)<br>
<br>
 
Ez a szabály azt fogja eredményezni, hogy ''ha'' a játékidő elérte a hatvanadik percet, ''és'' még az is igaz, hogy a játékos már kikutatta a tech-level-2-t (a kutatás már befejeződött, nem csak folyamatban van), akkor a képernyőre ki fogja írni a hatvanadik perc környékén - immár nem folyamatosan, kb. fél másodpercenként, hanem csak egyszer, hogy „Ez a techlevel-2”. A kiírás késhet egy kicsit, ha abban a pillanatban mondjuk épp a többi játékos is megereszt hasonló chat-üzenetet, de nem túl sokat, mondjuk négy másodpercet.
 
Most már csak azzal kell tisztába jönnünk, mik a lehetséges feltételek és mik a lehetséges akciók, és kezdődhet is a munka.
 
==== A két használat eltérő funkciója ====
 
Ugye nem szeretnénk, hogy CP-nk azzal pazarolja a drága novát, hogy kétszáz Jedi-templommal beépíti a térképet? Az ellenségek nem is hagynák neki, ez nem okos viselkedés. Tehát ennek megakadályozására kell a (disable-self) parancs. Különben már az első kapott parancsot vég nélkül ismételné, a többire sem ideje, sem erőforrása nem jutna.
 
Amikor úgy építkezünk, hogy egy épületből elég egy-kettő, vagy olyan drága, hogy csak ennyi telik ki, vagy az épületnek nagyon fontos stratégiai funkciója van (pl. erőd, második parancsnoki központ, őrtorony), vagy amikor választani kell az egységek fejlesztése és bizonyos kulcsfontosságú védőegységek számának növelése között, az ilyen parancsok időzítésére zárt végrehajtású szabályokat szoktunk használni, mégpedig alaposan megrágott és oda-vissza átgondolt, húsz állapotváltozóval szabályzott feltételekkel. Ez a '''zárt aktorgenerálás'''.
 
Vannak azonban könnyen elpusztuló épületek, melyeket egy bizonyos szintet elérve már nem nagy megrázkódtatás újjáépíteni, és szükség van rájuk. Ilyenek pl. a házak. Az egyszerűbb szerkesztésű CP-k esetében az ilyen épületek pótlása gyakran nyílt végrehajtású szabályokkal történik: „Ha a házak száma kisebb harmincnál, építs új házat.” Az ilyen nyílt, disable-self akcióval le nem zárt parancsot a CP egészen addig fogja ismételten végrehajtani, mígnem a házak száma eléri a harmincat. Ha egy ház elpusztul, és képes pótolni (van szén és van egy szabad munkás), akkor automatikusan pótolja. Ez a '''nyílt aktorgenerálás'''.
 
=== Tények ===
 
A tények többféle módon is csoportosíthatóak.
# Egyszerű és kézenfekvő a '''stratégiai funkció''' alapján vett csoportosítás, amelyet több szkript-útmutató írója is alkalmaz. A tényeket eszerint annak alapján csoportosíthatjuk, hogy a játék melyik elemére vonatkoznak, pl. építhetőségre vonatkozó tények, ellenségekre vonatkozó tények stb. Bár ez a csoportosítás részben óhatatlanul szubjektív, részben az átfedésektől egyáltalán nem mentes, mégis a szkriptíráskor a parancsok gyors keresésében hasznos segítség.
# A tényeket listája betűrendben is szerepelni fog. Ehhez azonban meg kell jegyezni, hogy a lista valószínűleg nem teljes. A betűrendes lista forrásai egyéb SWGB szkriptírók útmutatói, és egyrészt: ezek részben az Age of Kings-hez tartozó gamedata.drs-ből lettek kiemelve, és innen több okból is, valószínűleg nem készíthető teljes ténylista: ugyanis a sztenderd AI nem használ fel minden szkriptnyelvbeli parancsot (ez biztos), tehát bizonyára az összes tényt sem (ez valószínű); azonkívül az Age of Kings egyes parancsai megváltozhattak a SWGB készítésekor. Másrészt, az útmutatóírók nem biztosan törekedtek teljességre, s ha törekedtek is, azt meg valószínűleg nem valósíthatták.
# Azonban ezzel nem elégszem meg, és adok egy logikai szempontú csoportosítást is. Nevezetesen, hogy a tények bemenetei és kimenetei milyen természetű adatok: igazságérték (boolean), számérték stb.
 
==== Betűrendes lista ====
 
* attack-soldier-count <''a.r.j.''> <''érték''>
* attack-warboat-count <''a.r.j.''> <''érték''>
* building-available <''épület''>
* building-count <''a.r.j.''> <''érték''>
* building-count-total <''a.r.j.''> <''érték''>
* building-type-count <''épület''> <''a.r.j.''> <''érték''>
* building-type-count-total <''épület''> <''a.r.j.''> <''érték''>
* can-afford-building <''épület''>
* can-afford-complete-wall <''átmérő''> <wall-type>
* can-afford-research <''technológia''>
* can-afford-unit <unit>
* can-build ''épület''
* can-build-gate <''átmérő''>
* can-build-gate-with-escrow <''átmérő''>
* can-build-wall <''átmérő''> <wall-type>
* can-build-wall-with-escrow <''átmérő''> <wall-type>
* can-build-with-escrow <''épület''>
* can-buy-commodity <commodity>
* can-research <''technológia''>
* can-research-with-escrow <''technológia''>
* can-sell-commodity <commodity>
* can-spy
* can-spy-with-escrow
* can-train <''épület''>
* can-train-with-escrow <''épület''>
* carbon-amount <''a.r.j.''> <''érték''>
* cc-players-building-count <player-number> <''a.r.j.''> <''érték''>
* cc-players-building-type-count <player-number> <''épület''> <''a.r.j.''> <''érték''>
* cc-players-unit-count <player-number> <''a.r.j.''> <''érték''>
* cc-players-unit-type-count <player-number> <unit> <''a.r.j.''> <''érték''>
* cheats-enabled
* civ-selected <civ>
* civilian-population <''a.r.j.''> <''érték''>
* commodity-buying-price <commodity> <''a.r.j.''> <''érték''>
* commodity-selling-price <commodity> <''a.r.j.''> <''érték''>
* current-age <''a.r.j.''> <age>
* current-age-time <''a.r.j.''> <''érték''>
* current-score <''a.r.j.''> <''érték''>
* death-match-game
* defend-soldier-count <''a.r.j.''> <''érték''>
* defend-warboat-count <''a.r.j.''> <''érték''>
* difficulty <''a.r.j.''> <difficulty>
* doctrine <''érték''>
* dropsite-min-distance <resource-type> <''a.r.j.''> <''érték''>
* enemy-buildings-in-town
* enemy-captured-relics
* escrow-amount <resource-type> <''a.r.j.''> <value>
* event-detected <event-type> <event-id>
* false
* food-amount <''a.r.j.''> <''érték''>
* game-time <''a.r.j.''> <''érték''>
* goal <goal-id> <''érték''>
* nova-amount <rel-op> <''érték''>
* housing-headroom <''a.r.j.''> <''érték''>
* idle-farm-count <''a.r.j.''> <''érték''>
* map-size <map-size>
* map-type <map-type>
* military-population <''a.r.j.''> <''érték''>
* player-computer <player-number>
* player-human <player-number>
* player-in-game <player-number>
* player-number <player-number>
* player-resigned <player-number>
* player-valid <player-number>
* players-building-count <player-number> <''épület''> <''a.r.j.''> <''érték''>
* players-building-type-count <player-number> <''épület''> <''a.r.j.''< <''érték''>
* players-civ <player-number> <civ>
* players-civilian-population <player-number> <''a.r.j.''> <''érték''>
* players-current-age <player-number> <''a.r.j.''> <age>
* players-current-age-time <player-number> <''a.r.j.''> <''érték''>
* players-military-population <player-number> <''a.r.j.''> <''érték''>
* players-population <player-number> <''a.r.j.''> <''érték''>
* players-score <player-number> <''a.r.j.''> <score>
* players-stance <player-number> <diplomatic-stance>
* players-tribute <player-number> <resource-type> <''a.r.j.''> <''érték''>
* players-tribute-memory <player-number> <resource-type> <''a.r.j.''> <''érték''>
* players-unit-count <player-number> <''a.r.j.''> <''érték''>
* players-unit-type-count <player-number> <unit> <''a.r.j.''> <''érték''>
* population <''a.r.j.''> <''érték''>
* population-cap <''a.r.j.''> <''érték''>
* population-headroom <''a.r.j.''> <''érték''>
* random-number <''érték''>
* regicide-game
* research-available <''technológia''>
* research-completed <''technológia''>
* resource-found <resource-type>
* shared-goal <shared-goal-id> <''érték''>
* sheep-and-forage-too-far
* soldier-count <rel-op> <''érték''>
* stance-toward <player-number> <diplomatic-stance>
* starting-age <''a.r.j.''> <''érték''>
* starting-resources <''a.r.j.''> <starting-resources>
* metal-amount <''a.r.j.''> <''érték''>
* strategic-number <strategic-number> <''a.r.j.''> <''érték''>
* taunt-detected <player-number> <taunt-id>
* timer-triggered <timer-id>
* town-under-attack
* true
* unit-available <unit>
* unit-count <''a.r.j.''> <''érték''>
* unit-count-total <''a.r.j.''> <''érték''>
* unit-type-count <unit> <''a.r.j.''> <''érték''>
* unit-type-count-total <unit> <''a.r.j.''> <''érték''>
* victory-condition <victory-condition>
* wall-completed-percentage <''átmérő''> <''a.r.j.''> <''érték''>
* wall-invisible-percentage <''átmérő''> <''a.r.j.''> <''érték''>
* warboat-count <''a.r.j.''> <''érték''>
 
==== Stratégiai csoportosítás ====
 
===== Játékbeállítás-leírók =====
 
====== Általános játékbeállítás-leírók ======
 
* cheats-enabled
* death-match-game
* difficulty
* map-size
* map-type
* regicide-game
* victory-condition
* player-computer
* player-human
* player-in-game
* player-number
* player-resigned
* player-valid
* players-civ <player-number> <civ>
* population-cap
* starting-age
* starting-resources
 
====== Játékosspecifikus játékbeállítás-leírók ======
 
* civ-selected
 
===== Általános játékállapot-leírók =====
 
====== Korszak- és időleírók ======
 
* current-age
* current-age-time
* current-score (kicsit kakukktojás)
* game-time <''a.r.j.''> <''érték''>
 
===== Játékosspecifikus játékállapot-leírók =====
 
====== Erőforrásleírók ======
 
* carbon-amount
* can-buy-commodity
* can-sell-commodity
* commodity-buying-price
* commodity-selling-price
* escrow-amount
* food-amount
* resource-found
* sheep-and-forage-too-far
* metal-amount
* nova-amount
 
====== Várossal kapcsolatos tények ======
 
* housing-headroom
* idle-farm-count
* population-headroom
* sheep-and-forage-too-far
* town-under-attack
 
====== Fallakkal kapcsolatos tények ======
 
* can-afford-complete-wall
* can-build-gate
* can-build-gate-with-escrow
* can-build-wall
* can-build-wall-with-escrow
* wall-completed-percentage <''átmérő''> <''a.r.j.''> <''érték''>
* wall-invisible-percentage <''átmérő''> <''a.r.j.''> <''érték''>
 
====== Aktorpopuláció-leírók ======
 
Civil:
 
* civilian-population
* population <''a.r.j.''> <''érték''>
* population-headroom <''a.r.j.''> <''érték''>
 
Katonai:
 
* military-population
* soldier-count
* warboat-count
 
Összes:
 
* building-available
* building-count
* building-count-total
* building-type-count
* building-type-count-total
* unit-count
* unit-count-total
* unit-type-count
* unit-type-count-total
 
Ld. még támadó- és védőegység-leírók.
 
====== Támadó-és védőegység-leírók ======
 
* attack-soldier-count
* attack-warboat-count
* defend-soldier-count
* defend-warboat-count
 
====== Ellenségekkel kapcsolatos tények ======
 
* enemy-buildings-in-town
* enemy-captured-relics
* town-under-attack
 
===== Input-output tények =====
 
* event-detected <event-type> <event-id>
* taunt-detected
* shared-goal
 
===== Egyéb tények =====
 
* doctrine
* false
* goal
* random-number <''érték''>
* timer-triggered <timer-id>
* true
 
===== Fogyasztandók =====
 
* can-afford-building <''épület''>
* can-afford-research <''technológia''>
* can-afford-unit <unit>
* can-build ''épület''
* can-build-with-escrow <''épület''>
* can-research <''technológia''>
* can-research-with-escrow <''technológia''>
* can-spy
* can-spy-with-escrow
* can-train <''épület''>
* can-train-with-escrow <''épület''>
* cc-players-building-count <player-number> <''a.r.j.''> <''érték''>
* cc-players-building-type-count <player-number> <''épület''> <''a.r.j.''> <''érték''>
* cc-players-unit-count <player-number> <''a.r.j.''> <''érték''>
* cc-players-unit-type-count <player-number> <unit> <''a.r.j.''> <''érték''>
* dropsite-min-distance <resource-type> <''a.r.j.''> <''érték''>
* players-building-count <player-number> <''épület''> <''a.r.j.''> <''érték''>
* players-building-type-count <player-number> <''épület''> <''a.r.j.''< <''érték''>
* players-civilian-population <player-number> <''a.r.j.''> <''érték''>
* players-current-age <player-number> <''a.r.j.''> <age>
* players-current-age-time <player-number> <''a.r.j.''> <''érték''>
* players-military-population <player-number> <''a.r.j.''> <''érték''>
* players-population <player-number> <''a.r.j.''> <''érték''>
* players-score <player-number> <''a.r.j.''> <score>
* players-stance <player-number> <diplomatic-stance>
* players-tribute <player-number> <resource-type> <''a.r.j.''> <''érték''>
* players-tribute-memory <player-number> <resource-type> <''a.r.j.''> <''érték''>
* players-unit-count <player-number> <''a.r.j.''> <''érték''>
* players-unit-type-count <player-number> <unit> <''a.r.j.''> <''érték''>
* research-available <''technológia''>
* research-completed <''technológia''>
* stance-toward <player-number> <diplomatic-stance>
* strategic-number <strategic-number> <''a.r.j.''> <''érték''>
* unit-available <unit>
 
== Néhány példamodul ==
 
(egyelőre ötletszerű sorrendben)
 
=== Init ===
 
# Szkriptszerző és verzió feltüntetése
# Néhány, a véletlen térképek számára fontos (szám)konstans
# Hogyan fedezi fel a CP a világot?
# Herdek: banthák, nerfek
 
=== Tech-1 ===
 
# A sztenderd könnyű t-1 ökonómia megközelítése (túlhaladása)
## Munkamegosztás (könnyű t-1)
## Építkezés
## Katonaság, felfedezés ismét
# A sztenderd közepes t-1 ökonómia kihívása
## Munkamegosztás
## Építkezés
## Katonaság, felfedezés ismét
# Átlépés a t-2-be.
 
=== Tech-2 ===
 
# Az első űrkikötő a Kereskedelmi Szövetségbe tartozó CP-nek
# Holokrongyűjtés(ről)
# A t-2 hadsereg könnyű és középnehéz módban
# Mama, építsek falat?
 
=== Extrák ===
 
# Kereskedés kiszállt játékosokkal (?).
# Fecsegés arról, amit látott.
 
== Fogalommutató ==
 
(A fogalom legelső, vagy definitívnek tekintett előfordulásai. Négyfajta (illetve ötfajta) fogalmat különböztetek meg: 1). szkriptnyelven belüli; 2). szkriptnyelven kívüli; 2a). Nem az első típusú, de szorosan a szkriptnyelv leírásához tartozik (ilyen pl. az ''aktor'' általam bevezetett fogalma), a szkriptelés megértéséhez vagy nélkülözhetetlen, vagy nagyon sokszor használom; 2b). Nem az előbbi típusokba , de szorosan a játék leírásához tartozik, magyarázandónak tekintem; a szkriptelés megértéséhez hozzájárul (tipikusan ilyenek a fontosabb egységek leírásai pl.); 3). „Egyéb”: Tágabb értelemben a játékhoz tartozó fogalom, amelyet fontosnak tartok listázni, pl. olyan informatikai alapfogalom, amelyet nem magyarázok meg, de speciális jelleggel használom, vagy nem létfontosságú ismeretlen kifejezés, aminek nem-értése nem akadályozó, de zavaró lenne, pl. mert sokszor felbukkan (AT-AT); 4). Ha egy fogalmat csak egyszer vagy csak példaként használok, de vagy az előzetes alaptudás részének tekintem, vagy épp ellenkezőleg, teljesen jelentéktelennek, akkor nem sorolom fel, pl. Command & Conquer, a függvény, az injektív stb. nincs a listában, holott a szövegben előfordul. Tehát az öt típus: 1)., 2a)., 2b)., 3)., és 4).; csak az első négy típusba tartozóak vannak itt felsorolva. A fogalom után zárójelben a típusa, majd vesszővel elválasztva a link szerepel. A 2b) és 3. típusú, kevéssé fontos fogalmak dőlten vannak szedve, a szkriptnyelv elemei (1. típus) szintén megkülönböztetve (félkövéren) szedtük.
 
=== Misc ===
 
* ''';''': ld. kommentek (1)
* '''<''': ld. aritmetikai összehasonlítás (1)
* '''<=''': ld. aritmetikai összehasonlítás (1)
* '''>''': ld. aritmetikai összehasonlítás (1)
* '''>=''': ld. aritmetikai összehasonlítás (1)
* '''==''' ld. aritmetikai összehasonlítás (1)
 
=== 0 ... 9 ===
* ''2,5D-s grafika'': ld. izometrikus grafika (3)
 
=== A, Á ===
 
* AAT: ld. nehéz harcjármű (2a-2b)
* action, actions: ld. akciók (2a)
* advanced
** - ''advanced turret'': ld. szupertorony (2b)
** - ''advanced anti-air turret'': ld. légelhárító szupertorony (2b)
* akció, akciók: ld. defrule parancs, ld. akciók (2a)
* '''and''': ld. logikai operátorok (1)
* ágaztatott load-if: ld. load-if (2a)
* ágaztatott load-if-not: ld. load-if (2a)
* ''Age of Kings'': ld. Age of Empires II.: The Age of Kings (2b)
* ''Age of Empires II.: The Age of Kings'' (2b)
* AI: ld. mesterséges intelligencia (2a-2b)
* AI mappa (2a)
* ''airbase'': ld. repülőgyár (2b)
* ''air transport'': ld. szállítórepülő (2b)
* All techs: ld. játékparaméterek? (2a)
* ''anti-air frigate'': ld. légvédelmi fregatt (2b)
* ''anti-air mobile'': ld. légvédelmi harcjármű (2b)
* ''anti-air trooper'': ld. légvédelmisek (2b)
* ''anti-air turret'': ld. légelhárító torony (2b)
* ''aréna-RTS'' (3)
* ''aritmetikai alrendszer'' (2b)
* aritmetikai összehasonlító operátor (2a)
* ''artilery'': ld. nehéztüzérségi gépjármű
* ''assault mech'': ld. ostrom-harcjármű (2b)
* ''AT-AT'' (3)
* ''AT-PT'' (3)
* ''AT-ST'' (3)
* aktor (2a-2b)
* ''aktor szkript'': ld trigger (2a-2b-3)
* ''animal nursery'': ld. állatnevelde (2b)
* anyaszkript: ld. load parancs (2a)
* állatnevelde, állatóvoda, állatfarm: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* állandó: ld. konstans (2a)
* ''állapottér'' (3)
* áramfejlesztő, áramfwejlesztő oszlop: ld. aktorok listája, ld. fontosabb bnaa-k (2a-2b)
* automatikus játékos: ld. CP (2a)
* ''automatikus működés'': ld. mesterséges intelligencia (2b)
* ''áttérítés'': ld. erőhasználók (2b)
* ''átkonvertál'': ld. áttérítés (2b)
* azonosító: (2a)
** általában
** szöveges, ld. még defconst
** numerikus, ld. még goal
 
=== B ===
 
* ''B1-es'', ''B1-es harci robot'', ''B1-es rohamdroid'' (3)
* bantha (2a): ld. fontosabb bnaa-k.; ld. herdek (2b)
* barakk: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* beágyazás (szkript(fájl)é): ld. load parancs
* beépített (2a): ld. beépített konstans, ld. beépített változó ...
* beépített numerikus azonosítók (2a)
* ''Birodalom'': ld. Galaktikus Birodalom (2b)
* bnaa (2a)
* ''Boba Fett'' (3)
* bombázó: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* ''bomber'': ld. bombázó (2b)
* ''bounty hunter'': ld. fejvadász (2b)
 
=== C ===
 
* ''C++ programnyelv'': ld. defconst parancs, ld. goal parancs (3)
* ''cannon'': ld. távtüzérségi ágyú (2b)
* carbon proc. centre, carbon processing centre: ld. szénfeldolgozó (2b)
* cheat: ld. csalás (2a-2b)
* ciklus (2a-2b)
* cirkáló: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* civ (2a-2b): ld. civilizáció
* civ-paraméterek: ld. játékparaméterek (2a)
* civilizáció (2a-2b)
* command center: ld. központ (2a-2b)
* computer player: ld. CP (2a)
* CP (2a)
* ''cruiser'', ld. cirkáló (2b)
 
=== Cs ===
 
* csalás (2a-2b): ld. még nehézségi fokozatok
* csapatszállító harcjármű: ld. ostrom-harcjármű (2a)
* ''Csillagok háborúja'' (3)
 
=== D ===
 
* '''defconst''' parancs (1)
* definiálás
** konstansé: ld. számkonstansé
** számkonstans definiálása, számkonstansdefiniálás: ld. defconst parancs
** szabály definiálása, szabálydefiniálás: ld. defrule parancs
** változó definiálása, változódefiniálás: ld. goal parancs
** előre definiálás: ld. beépített (2a)
* '''defrule''' parancs (1)
* ''deklaratív nyelv'' (2b)
* ''destroyer'': ld. rombló (2b)
* ''dock'': ld. kikötő (2b)
* dokumentálás: ld. kommentek (2a-2b)
* dropsite: ld. nyersanyaggyűjtők (2a)
 
=== E, É ===
 
* ''editor'': ld. térképszerkesztő (2b)
* ''egység'' (2b)
* egységszintű AI (2a)
* egyszerű load-if: ld. load-if (2a)
* egyszerű load-if-not: ld. load-if (2a)
* előfeltételességi fa, ld. ?
* ''épület'' (2b)
* élelem: ld. erőforrás (2a)
* élelemfeldolgozó, élelemfeldolgozó központ, élelemfeldolgozó üzem, élelemfeldolgozó állomás: ld. aktorok listája, ld. fontosabb bnaa-k (2a-2b)
* '''else''' (1): ld. end-if
* emlékmű: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* '''end-if''' (1): ld. load-if
* ''Ensemble Studios'' (3)
* erőd: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* erőforrás (2a)
* ''erőhasználók'': ld. egységek (2a-2b)
* értékadás: ld. goal parancs (2a) és ld. adatszerkezetek?
* értékellenőrzés: ld. goal parancs és ld. adatszerkezetek? és ld. aritmetikai operátorok? (2a)
* értelmező alprogram (2a)
 
=== F ===
 
* fact, facts: ld. tények (2a)
* faltörő gép, faltörő gépjármű: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* farm: ld. aktorok listája, ld. fontosabb bnaa-k, ld. farmolás (2a)
* farmolás: ld. ? (2a)
* fájlhibák: ld. hibaüzenetek
* fejrész: ld. defrule parancs (2a)
* fejvadász: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* felderítő: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* felhasználói szkript (2a): ld. AI mappa
* ''Felkelők'': ld. Lázadók Szövetsége (2b)
* ''Felkelők Szövetsége'': ld. Lázadók Szövetsége (2b)
* ''feltételes ciklus'': ld. ciklus (2b)
* feltétel, feltételek: ld. defrule parancs (2a)
* feltételes végrehajtás: ld. load-if
* feltételes vezérlés: ld. load-if (2a)
* feltételrendszer: ld. goal parancs, és lásd tények? (2a)
* ''fighter'': ld. vadászgép (2b)
* food proc. centre, food processing centre: ld. élelemfeldolgozó (2b)
* ''fog of war'' (3)
* formális feltétel (2a-2b)
* ''formális nyelv'' (2b)
* ''fortress'': ld. erőd (2b)
* fregatt:
** általában: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
** légvédelmi fregatt: ld. ott (2a)
* ''frigate'': ld. fregatt (2b)
 
=== G ===
 
* ''Galaktikus Birodalom'': ld. civilizációk (2b)
* gamedata.drs (2a)
* ''GB'': ld Galaktikus Birodalom (2b)
* ''GC'': ld. gunganek (2b)
* Genie játékmotor (2a-2b)
* (a) Genie AI-szkriptnyelve
* gépjárműgyár: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* globális AI<sub>1</sub>: ld. játékosszintű AI (2a)
* globális AI<sub>2</sub>: ld. gamedata.drs (2a)
* '''goal''' parancs (1)
* ''grafikus felhasználói felület'' (3)
* gránátosok: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* ''grenade trooper'' : ld. gránátosok (2b)
* ''GUI'': ld. grafikus felhasználói felület (3)
* ''gunganek'': ld. civilizációk (2b)
 
=== Gy ===
 
* gyalogos: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
 
=== H ===
 
* ''hadi kutatóközpont'': ld. hadiüzem (2b)
* hadiüzem: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* halászhajó: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* ''harci köd'' (3)
* harcjármű:
** csapatszállító harcjármű: ld. ott
** könnyű harcjármű: ld. ott
** nehéz harcjármű: ld. ott
** ostrom-harcjármű: ld. ott
* határoló karakter: ld. adattípusok (2a)
* ház, ld. aktorok listája, ld. fontosabb bnaa-k (2a-2b)
* ''heavy assault mech'': ld. ostrom-harcjármű (2b)
* ''heavy weapons factory'': ld. ostromgépgyár (2b)
* herd, herdek (2a-2b)
* ''Horn-klóz'' (3)
* huntok (2a-2b)
* hibaüzenet, hibaüzenetek: (2a)
* hozzárendelés (szkriptfájlé, játékoshoz) (2a)
 
=== I, Í ===
 
* idézőjel: ld. sztring (2a)
* ''izometrikus grafika'' (2b)
 
=== J ===
 
* ''játékdinamika'': ld. valós idejű stratégiai videojáték (3)
* ''játékidő''<sub>1</sub>: ld. valós idejű stratégiai videojáték (3)
* játékidő<sub>2</sub>: ld. current-time (1)
* ''játékkészítők'': ld. Ensemble Studios (3)
* játékosszintű AI (2a)
* játékparaméter (2a)
* ''játéktérkép'' (2b)
* ''Jedi knight'': ld. Jedi-lovag
* Jedi-lovag: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* ''Jedi master'': ld. Jedi mester (2b)
* Jedi mester: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* Jedi padawan: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* ''Jedi temple'': ld. templomok (2b)
 
=== K ===
 
* ''K+É+M'': ld. Kutass-Építs-Mozgass (2b)
* kereskedőhajó: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* kézszenzitív, kézszenzitivitás: ld. load, ld adattípusok/szimbólum (2a)
* kikötő: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* kisebb: ld. aritmetikai összehasonlítás (2a)
* kisebb vagy egyenlő: ld. aritmetikai összehasonlítás (2a)
* komment, kommentelő operátor, kommentelés (2a)
* konstans, konstansok: ld. adattípusok és ld. szövegkonstansok és ld. számkonstansok és ld. játékparaméterek és ld. konstansdefiniálás
* konstansdefiniálás: ld. defconst parancs és ld. bnaa-k
* könnyű harcjármű: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* ''körökre osztott'': ld. valós idejű stratégiai videojáték (3), ld. aktorok listája, ld. fontosabb bnaa-k
* ''középnehéz harcjármű'': ld. nehéz harcjármű (2b)
* központ (telj.:parancsnoki központ): (2a-2b)
* ''Kutass-Építs-Mozgass'' (2b)
* kutatóközpont: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* ''küldetés'' (2b)
 
=== L ===
 
* lábrész: ld. defrule parancs
* ''Lázadók'': ld. Lázadók Szövetsége (2b)
* ''Lázadók Szövetsége'': ld. civilizációk (2b)
* légelhárító torony: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* légelhárító szupertorony: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* ''légibázis'': ld. repülőgyár (2b)
* légvédelmi fregatt: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* légvédelmisek, légvédelmi gyalogság: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* légvédelmi harcjármű: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* ''lépés'': ld. valós idejű stratégiai videojáték (3)
* létrehozás (szkriptfájlé) (2a)
* lezárás
** - zárójelek, csukó zárójel
** - defrule utolsó zárójele
** - end-if: ld. load-if
** - ld. zárt defrule parancs és ld. disable-self
* light turret: ld. őrtorony (2a)
* '''load''' parancs (1)
* '''load-if''' parancs (1)
* '''load-if-not''' parancs
* '''load-random''' parancs (1)
* logikai változó (2a)
* logikai művelet
* logikai operátor
* lokális AI<sub>1</sub>: ld. egységszintű AI (2a)
* lokális AI<sub>2</sub>: ld. CP (2a)
* lokális szkript: ld. felhasználói szkript (2a)
* lovas, lovasság: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* LSz: ld. Lázadók Szövetsége (2b)
 
=== M ===
 
* ''magas szintű programozási nyelv, magas szintű programnyelv'' (2b-3): ld. magas szintű számítógépes programozási nyelv
* ''magas szintű számítógépes programozási nyelv'' (2b-3)
* makromanagement (2a)
* ''map editor'': ld. térképszerkesztő (2b)
* mech-0: ld. felderítő (2a)
* mech-1: ld. könnyű harcjármű (2a)
* mech-2: ld. nehéz harcjármű (2a)
* mech-3: ld. ostromharcjármű (2a)
* ''mech destroyer'': ld. nehéz harcjármű (2b)
* ''mech factory'': ld. gépjárműgyár (2b)
* ''medic'': ld. orvos (2b)
* ''medium turret: ld. nehéztorony'' (2b)
* ''medium wall'': ld. nehézfal (2b)
* megjegyzés, megjegyzések: ld. komment (2a)
* memóriakezelési hibák: ld. hibaüzenetek (2a)
* mesterséges intelligencia (2a-2b)
* metal: ld. ore (2a)
* metaszabály (2a)
* mikromanagement (2a-2b)
* ''monument'': ld. emlékmű (2b)
* ''mounted trooper'': ld. lovasság (2b)
* MTT: ld. ostromharcjármű (2a-2b)
* munkás: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* '''my-civ''': ld. játékparaméterek (1)
* '''my-elite-unique-unit''': ld. játékparaméterek (1)
* '''my-player-number''': ld. játékparaméterek (1)
* '''my-unique-research''': ld. játékparaméterek
* '''my-unique-unit''': ld. játékparaméterek (1)
* '''my-unique-unit-line''': ld. játékparaméterek (1)
* '''my-unique-unit-upgrade''': ld. játékparaméterwek (1)
 
=== N ===
 
* ''Nabooi Királyság'': ld. civilizációk
* nagyobb: ld. aritmetikai összehasonlítás (2a)
* nagyobb vagy egyenlő: ld. aritmetikai összehasonlítás (2a)
* nehézfal: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* nehéz harcjármű: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* nehéztorony: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* nehéztüzérség: ld. nehéztüzérségi gépjármű (2a)
* nehéztüzérségi gépjármű: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* nerf: ld. fontosabb bnaa-k (2a), ld. herdek (2b)
* '''not''': ld. logikai operátorok (1)
* nova: ld. erőforrás (2a)
* novafeldolgozó, novafeldolgozó központ, novafeldolgozó üzem, novafeldolgozó állomás: ld. aktorok listája, ld. fontosabb bnaa-k (2a-2b)
* nova proc. centre, nova processing centre: ld. szénfeldolgozó (2b)
 
=== Ny ===
 
* nyersanyaggyűjtő épületek, nyersanyaggyűjtők ld. ? , ld. aktorok listája (2a)
* nyílt aktorgenerálás: ld. defrule/a két használat eltérő funkciója (2a-2b)
* nyílt defrule parancs: ld. defrule parancs (2a)
* nyílt szabálydefiniálás: ld. defrule parancs (2a)
* nyílt végrehajtású defrule parancs: ld. defrule parancs (2a)
* nyomtatható karakter: ld. adattípusok
 
=== O, Ó ===
 
* objektum: ld. tereptárgy (2a)
* ''OOM-9'' (3)
* '''or''': ld. logikai operátorok (2a)
* ore: ld. erőforrás (2a)
* orefeldolgozó, orefeldolgozó központ, orefeldolgozó üzem, orefeldolgozó állomás: ld. aktorok listája, ld. fontosabb bnaa-k (2a-2b)
* ''ore proc. centre'', ''ore processing centre'': ld. szénfeldolgozó (2b)
* orvos, orvosdroid: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* ostromgépgyár: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* ostrom-harcjármű: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
 
=== Ö, Ő ===
 
* őrbódé: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* őrtorony: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
 
=== P ===
 
* padawan: ld. Jedi padawan (2a)
* pajzsfal: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* pajzsgenerátor: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* paraméter: ld. adatszerkezetek? (2a)
* pontosvessző: ld. komment (2a)
* poplimit, pop limit (2a)
* power core, ld. áramfejlesztő (2a-2b)
* prefab shelter, ld. ház (2a-2b)
* preprocesszor hibák: ld. hibaüzenetek (2a)
* ''pummel'': ld. faltörő gépjármű (2b)
 
=== R ===
 
* random-map (game): ld. véletlentérképes játék (2a-2b)
* ''rendszer definiálta'', rendszer-definiálta:
** - ''konstans'': ld. beépített (2b)
** - ''változó'': ld. beépített (2b)
** - ''szimbólum'': ld. load-if
* ''rendszerkonstans'': ld. beépített (2b) és ld. load-if
* ''rendszerváltozó'': ld. beépített? (2b)
* repülőgyár: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* ''research center'': ld. kutatóközpont (2b)
* Reveal map: ld. játékparaméterek ? (2a)
* ''RN'': ld. Nabooi Királyság (2b)
* romboló: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* ''RTS'' (3)
 
=== S ===
 
* segédparancs: ld. metaszabály (2a)
* ''scenario'': ld. küldetés (2b)
* ''scout'': ld. felderítő
* ''sentry post'': ld. őrbódé (2b)
* ''shield generator'': ld. pajzsgenerátor (2b)
* ''shield wall'': ld. pajzsfal (2b)
* ''siklómotor'': ld. felderítő (2b)
* ''Sith apprentice'': ld. Sith tanonc (2b)
* ''Sith knight'': ld. Sith lovag (2b)
* Sith lovag: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* ''Sith master'': ld. Sith mester (2b)
* Sith mester: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* Sith tanonc: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* ''Sith temple'': ld. templomok (2b)
* sor, ld. defrule parancs, ld. adatszerkezetek? (2a)
* ''spaceport'': ld. űrkikötő (2b)
* STAP: ld. könnyű harcjármű (2a-2b)
* ''Star Wars Galactic Basttlegrounds'' (2b)
* ''Star Wars Galactic Battlegrounds Heaven'' (3)
* ''strike mech'': ld. könnyű harcjármű (2b)
 
=== Sz ===
 
* szabály (2a), ld. még defrule parancs
* szállítóhajó: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* szállítórepülő: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* ''számláló ciklus'': ld. ciklus (2b)
* számváltozó: ld. goal parancs, ld. adatszerkezetek (2a)
* százalék: ld. load-random (3)
* szén (2a): ld. erőforrás
* szénfeldolgozó, szénfeldolgozó központ, szénfeldolgozó üzem, szénfeldolgozó állomás: ld. aktorok listája, ld. fontosabb bnaa-k (2a-2b)
* szemantika, szemantikai, szemantikus (2a)
* ''szemantikus indeterminizmus'' (2b)
* szintaktika, szintaktikai, szintaktikus: (2a)
* szintaktikai hiba: (2a)
* szintaktikai hibák: ld. hibaüzenetek (2a)
* szkriptbeágyazás: ld. load parancs (2a)
* szkriptfájl (2a)
* szkriptnyelv (2a-2b)
* ''Szövetség'', ''szövetségiek''<sub>1</sub>ld. Kereskedelmi Szövetség (2b)
* ''Szövetség''<sub>2</sub>ld. Lázadó Szövetség (2b)
* sztenderd AI: ld. gamedata.drs (2a)
* sztring: ld. adattípusok (2b)
* szimbólum: ld. adattípusok (2b)
* szupertorony: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
 
=== T ===
 
* tanonc:
** Jedi tanonc: ld. Jedi padawan (2a-2b)
** Sith tanonc: l.d ott. (2a)
* távtüzérség, távtüzérségi ágyú: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* technológia (2a)
* tech level, techlevel, tech-level (2a)
* techlevel-1 épületek, ld. aktorok listája (2a-2b)
* techlevel-1 technológiák ld. ? (2a-2b)
* techlevel-2 épületek, ld. aktorok listája (2a-2b)
* techlevel-2 technológiák ld. ? (2a-2b)
* techlevel-3 épületek, ld. aktorok listája (2a-2b)
* techlevel-3 technológiák ld. ? (2a-2b)
* techlevel-4 épületek, ld. aktorok listája (2a-2b)
* techlevel-4 technológiák ld. ? (2a-2b)
* tech tree, ld. előfeltételességi fa (2a-2b)
* templomok: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* tény, tények: ld. feltételek, ld. defrule parancs (2a)
* terepelem: ld. bnaa-k (2a-2b)
* tereptárgy: ld. bnaa-k (2a)
* ''térkép'': ld. játéktérkép (2b)
* ''térképszerkesztő'' (2b)
* ''Testguy'': ld. Testguy.per (2b)
* ''Testguy.per'' (2b)
* ''TF'': ld. Kereskedelmi Szövetség (2b)
* ''TIE-vadász'' (3)
* ''Trade Federation'': ld. Kereskedelmi Szövetség (2b)
* ''transport ship'': ld. szállítóhajó (2b)
* trigger (2a-2b)
* ''troop center'': ld. barakk (2b)
* ''trooper'': ld. gyalogos (2b)
 
=== U, Ú ===
 
* ''utility trawler'': ld. halászhajó (2b)
 
=== Ü, Ű ===
 
* űrkikötő: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
 
=== V ===
 
* vadállatok: ld. fontosabb bnaa-k és ld. huntok (2a-2b)
* vadászgép: ld. aktorok listája, ld. fontosabb bnaa-k (2a)
* ''valós idejű'', ld. valós idejű stratégiai videojáték (3)
* ''választó ciklus'': ld. ciklus (2b)
* változó: ld. adattípusok, ld. goal (2a)
** változók elnevezése, változóknak való névadás: ld. a defconst használata ... (2a)
* ''Valós idejű stratégiai videojáték'' (3)
* városközpont: ld. központ (2a-2b)
* ''véletlentérképes játék'' v. ''véletlen-térképes játék'' (2b)
* ''vukik'': ld. wukik (2b)
 
=== W ===
 
* ''war center'': ld. hadiüzem (2b)
* ''WC'': ld. wukik (2b)
* ''worker'': ld. munkás (2b)
* ''wukik'': ld. civilizációk (2b)
 
=== Z ===
 
* zárt aktorgenerálás: ld. defrule/a két használat eltérő funkciója (2a-2b)
* zárt defrule parancs: ld. defrule parancs (2a)
* zárt szabálydefiniálás: ld. defrule parancs (2a)
* zárt végrehajtású defrule parancs: ld. defrule parancs (2a)
 
=== Kihagytam ===
 
(kihagytam: a sajátegységek listája, egyéb jellemzők, hibaüzenetek egy részét, a load-if játékparamétereit).
 
== Hivatkozások ==
 
=== Megjegyzések ===
<references group="mj" />
=== Források ===
<references />
 
* Ensemble Studios'': ''[http://www.mrfixitonline.com/mfo1999/u/11566/cpsb.pdf http://www.mrfixitonline.com/mfo1999/u/11566/cpsb.pdf Computer Player Strategy Builder Guide / AI Expert Documentation for Age of Empires II: The Age of Kings]''. Az [[:w:hu:Age of Empires II: The Age of Kings|Age of Empires II: The Age of Kings]] „hivatalos” dokumentációjának része (www.mrfixitonline.com). Hiv. beill.: 2011. 12. 31.