Star Wars Galactic Battlegrounds szkriptek/Tények
A tények és csoportosításaik
szerkesztésAmint már korábban írtuk, a Genie szkriptértelmező rendszere, a CP-k működése részben az ún. tényeken (facts) alapul. Informatikai, technikai szempontból nézve a tények legegyszerűbben BOOLEAN típusú, azaz igaz-hamis értéket felvevő logikai változóknak és konstansoknak (ún. elsőrendű predikátumoknak) tekinthetőek, ám ez a szkriptírás gyakorlati oldaláról nézve meglehetősen mellékes információ. A fontos az, hogy a tények a defrule parancs fejrészének építőelemei. Egy Genie szkript lényegében mohó defrule szabályok csordája, amelyeket tényekkel kell táplálni, hálából akciókat (ld. később) termelnek a szkriptíró gazdának, vagyis tevékenységre késztetik a CP-t.
A tények többféle módon is csoportosíthatóak.
- A tények listája mindenekelőtt betűrendben is szerepelni fog. Ehhez azonban meg kell jegyezni, hogy - bár a megfelelő szakaszban ezt írom - 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 „teljes” a lista abban a korlátozottabb értelemben, hogy szándékaim szerint minden akcióféleséget sikerült összegyűjtenem, ami más útmutatókban, ide értve az Age of Kings és a SWGB hivatalos útmutatóját is, szerepel valahol. [mj 1]
- A gyakorlat szempontjából a leghasznosabb természetesen 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. Ez a fajta csoportosítás a szkriptíráskor a parancsok gyors keresésében hasznos segítség lenne, ha nem lenne részben óhatatlanul szubjektív, részben az óhatatlan átfedésektől mentesíthetetlen. Azért megpróbáltam egy ilyesfajta csoportosítást is adni.
- 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.
Az adatszemantikai szempontú leírásról már volt szó a bevezetőben: a tények logikai függvényeknek (predikátumok), azaz, informatikai nyelven, boole-féle adatoknak tekintendőek. Szintaktikai szempontból kétféle tényt lehet megkülönböztetni: egyszerűt és összetettet.
Az összetett tények az egyszerűekből keletkeznek logikai kötőszavak (and, or, not, stb.) segítségével. Például
- (or (building-type-count BLDG-TRAINBOAT >= 1) (unit-type-count BOAT-WORKER <= 5) )
összetett tény, két egyszerűbb tényből (building-type-count és unit-type-count), valamint az or (= vagy) logikai műveletből összeállítva.
Az egyszerűbb tények egyszerűsége sem jelenti azt, hogy tovább már ne lennének bonthatók. Megkülönböztethetünk paraméter nélküli vagy elemi tényeket (tényállandókat vagy ténykonstansokat), és paraméteres tényeket (tényfüggvényeket, változókat tartalmazó tényeket).
A ténykonstansok bizonyos értelemben „atomiak” [mj 2]: nem tartalmaznak kitöltetlen helyeket. Zárójelek között a defrule parancsba helyezve őket, a parancs azonnal eldönti, hogy igazak-e vagy sem.
Például elemi tények: (can-spy) ('végre tudom-e hajtani a „kémkedés” nevű parancsot?, igen vagy nem), (town-under-attack) (támadás alatt áll-e valamelyik épületem vagy munkásom?, igen vagy nem). Az elemi tényeknek nincs paramétere (nullparaméteresek)
Egy viszonylag egyszerű paraméteres tény: (resource-found <erőforrás>) egy darab paraméterrel rendelkezik, az <erőforrás> kifejezés helyére az erőforrások azonosítóinak egyike (food, carbon, nova, metal) írandó, és csak úgy lesz a parancsnak értelme. Például (resource-found nova) azt jelenti, talált-e már a CP novát valahol a térképen a parancs beolvasásának pillanatáig, igen, vagy nem. Az igen-vagy-nem azonban csak az erőforrás konkretizálása esetén válik eldönthetővé, négy lehetőség közül ki kell egyet választani. Az ilyen értelemben kitöltendő helyeket nevezzük paramétereknek (esetleg argumentumoknak).
Léteznek két-, három-, sőt, négyparaméteres tények is. Példa egy utóbbi jellegűre:
- (players-unit-type-count <játékos-sorszám> <egységnév> <a.r.j.> <érték>)
A játékos-sorszám az első paraméter, értéke egy nemnegatív egész szám lehet nullától nyolcig. Az egységnév egy egység neve, ami akár beépített, akár a defconst paranccsal lett definiálva. Az a.r.j. egy aritmetikai relációs jel, vagyis a következők egyike: <, >, ==, <=, >=. Végül az „érték” egy egész szám lehet (valahány tízezerig). Például
- (players-unit-type-count 2 UNIT-LASER-LINE >= 100)
az a tény, hogy a 2. sorszámú játékosnak a gyalogos lövészeinek (UNIT-LASER-LINE) száma meghaladja-e a százat. Ha a parancs beolvasásának pillanatában a gyalogos katonák száma 100, vagy több, akkor a tény IGAZ lesz, ha nem, akkor HAMIS. Amennyiben a parancs egy beolvasott defrule parancs fejrészében van, és az értéke éppen igaz, akkor a parancs által előírt akcióknak lehetőségük van a végrehajtódásra, persze csak akkor fognak ténylegesen végrehajtódni, ha a fejrész többi ténye is igaz (és, mellesleg, a fejrészben esetleg meg nem említett, de egyébként ettől még szükséges feltételeknek is teljesülniük kell). Ha azonban ez a konkrét tény épp hamis, akkor a defrule parancs biztosan nem hajtódik végre, akár igaz, akár hamis a többi tény a fejrészben.
Betűrendes lista
szerkesztésIgyekezetem szerint ez egy teljes lista.
attack-soldier-count <a.r.j.> <érték> |
attack-warboat-count <a.r.j.> <érték> (attack-boat-count?) |
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ő> <faltípus> |
can-afford-research <technológia> |
can-afford-unit <egység> |
can-build épület |
can-build-gate <átmérő> |
can-build-gate-with-escrow <átmérő> |
can-build-wall <átmérő> <faltípus> |
can-build-wall-with-escrow <átmérő> <faltípus> |
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> <egység> <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.> <kor> |
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.> <nehézségi fok> |
doctrine <érték> |
dropsite-min-distance <erőforrás> <a.r.j.> <érték> |
enemy-buildings-in-town |
enemy-captured-holocrons (enemy-captured-relics?) |
escrow-amount <erőforrás> <a.r.j.> <érték> |
event-detected <esemény> <esemény-azonosító> |
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 <térképnagyság> |
map-type <térképtípus> |
military-population <a.r.j.> <érték> |
nursery-headroom <a.r.j.> <érték> |
player-computer <játékos sorszáma> |
player-human <játékos sorszáma> |
player-in-game <játékos sorszáma> |
player-number <játékos sorszáma> |
player-resigned <játékos sorszáma> |
player-valid <játékos sorszáma> |
players-building-count <játékos sorszáma> <épület> <a.r.j.> <érték> |
players-building-type-count <játékos sorszáma> <épület> <a.r.j.< <érték> |
players-civ <játékos sorszáma> <civ> |
players-civilian-population <játékos sorszáma> <a.r.j.> <érték> |
players-current-age <játékos sorszáma> <a.r.j.> <age> |
players-current-age-time <játékos sorszáma> <a.r.j.> <érték> |
players-military-population <játékos sorszáma> <a.r.j.> <érték> |
player-number |
players-population <player-number> <a.r.j.> <érték> |
players-score <játékos sorszáma> <a.r.j.> <pontszám> |
players-stance <játékos sorszáma> <diplomatic-stance> |
players-tribute <játékos sorszáma> <resource-type> <a.r.j.> <érték> |
players-tribute-memory <játékos sorszáma> <resource-type> <a.r.j.> <érték> |
players-unit-count <játékos sorszáma> <a.r.j.> <érték> |
players-unit-type-count <játékos sorszáma> <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 <a.r.j.> <érték> |
stance-toward <játékos sorszáma> <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 <játékos sorszáma> <taunt-id> |
timer-triggered <timer-id> |
too-many-unpowered-buildings |
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
szerkesztésJátékbeállítás-leírók
szerkesztésÁltalános játékbeállítás-leírók
szerkesztés- 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
szerkesztés- civ-selected
Általános játékállás-leírók
szerkesztésKorszak- és időleírók
szerkesztés- current-age
- current-age-time
- current-score (kicsit kakukktojás)
- game-time <a.r.j.> <érték>
Játékosspecifikus játékállás-leírók
szerkesztésErőforrásleírók
szerkesztés- can-afford-building <épület>
- can-afford-research <technológia>
- can-afford-unit <unit>
- 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
szerkesztés- housing-headroom
- idle-farm-count
- population-headroom
- sheep-and-forage-too-far
- town-under-attack
Fallakkal kapcsolatos tények
szerkesztés- 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
szerkesztésCivil:
- 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
szerkesztés- attack-soldier-count
- attack-warboat-count
- defend-soldier-count
- defend-warboat-count
Ellenségekkel kapcsolatos tények
szerkesztés- enemy-buildings-in-town
- enemy-captured-relics
- town-under-attack
A többi játékossal kapcsolatos tények
szerkesztés- 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>
Input-output tények
szerkesztés- event-detected <event-type> <event-id>
- taunt-detected
- shared-goal
Egyéb tények
szerkesztés- doctrine
- false
- goal
- random-number <érték>
- timer-triggered <timer-id>
- true
Fogyasztandók
szerkesztés- 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>
- 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>
Tények részletesen
szerkesztésattack-soldier-count
szerkesztés Ez a tényleíró megadja a CP saját támadó harcosainak számát. A támadó harcosok olyan szárazföldi katonai egységek, amelyeket a CP egy támadó osztagba csoportosított. Az egységek támadó osztagokba szervezését bizonyos stratégiai számok vezérlik. |
|
◄ |
attack-warboat-count
szerkesztésEz a tényleíró megadja a CP saját támadó hadihajóinak számát. A támadó hadihajók olyan hadihajók (fregattok, rombolók, légelhárító fregattok, illetve cirkálók), amelyeket a CP egy támadó hajóosztagba csoportosított. A vízi egységek támadó osztagokba szervezését bizonyos stratégiai számok vezérlik. |
|
|
◄ |
building-available
szerkesztésEz a tényleíró megadja, hogy a paraméterként szolgáló épület felépíthető lenne-e, ha meglenne hozzá a szükséges erőforrás / építőanyag, ám az utóbbi feltételt NEM ellenőrzi (ebben különbözik a can-build tényleírótól). A building-available tehát ellenőrzi, hogy egy épület megépítéséhez van-e elég hely (? tesztelendő), hogy lehetséges-e az adott játékállapot mellett, hogy a CP felépítse (pl. egy T3 épület nem építhető a T1 korszakban); valamint, hogy az esetleges előfeltételként szolgáló többi épület (pl. városközpont) fel van-e építve.[mj 3] A példaszkript ellenőrzi, építhető-e farm, és ha nem, akkor, mivel ez feltehetőleg azért van, mert nincs még ételraktár (BLDG-DROPCHOW), akcióként megpróbál építeni egyet az utóbbi épületből. |
|
|
◄ |
building-count
szerkesztésEz a tényleíró ellenőrzi az adott CP saját épületeinek számát. Csak a teljesen kész épületek számítanak, s e tekintetben „kevesebb”, mint a következő, building-count-total tényleíró. A példaszkript ellenőrzi, a T1 korszakban a szabály végrehajtásakor elérte-e az épületek száma a pontosan 5-öt, s ha igen, megpróbál egy barakkot építeni. |
|
|
◄ |
building-count-total
szerkesztésEz a tényleíró ellenőrzi az adott CP saját épületeinek számát, ide értve az építésre a térképen kijelölt épületeket (elsősorban fal-elemekből szoktak ilyenek sokan lenni) és az építés alatt álló épületkezdeményeket is - ennyiben „több”, mint az előző, building-count tényleíró. A példaszkript ellenőrzi, a T1 korszakban a szabály végrehajtásakor, ha van már 5-épület, építés alatt áll-e még néhány, s ha igen, akkor egy chat-üzenetet küld saját magának erről a helyzetről (ilyen szabályokat tesztelésekhez szoktunk gyártani). |
|
|
◄ |
building-type-count
szerkesztésEz a tényleíró ellenőrzi, hogy egy (paraméterként) megadott épülettípusból az adott CP-nek hány példánya épült fel. Nem számolja a felépített, de elpusztult épületeket (csak azt, hogy az adott pillanatban mennyi van belőlük), és az építés alatt állókat sem, csak a teljesen készeket (ennyibe kevesebb, mint a következő, building-type-count-total tényleíró). A building-type-count a leggyakrabban alkalmazott tényleírók egyike a Genie szkriptekben, nincs olyan épkézláb CP, akinek szüksége lenne egy városra és ne alkalmazná. A példaszkript ellenőrzi, hogy a T1 korszakban a szabály végrehajtásakor van-e már parancsnoki központja a játékosnak, és ha nincs, megpróbál építeni egyet. |
|
|
◄ |
building-type-count-total
szerkesztésEz a tényleíró ellenőrzi, hogy egy (paraméterként) megadott épülettípusból az adott CP-nek hány példánya épült vagy épül fel. Nem számolja a felépített, de elpusztult épületeket (csak azt, hogy az adott pillanatban mennyi van belőlük), viszont számolja az építés alatt állókat is, nem csak a teljesen készeket (ennyibe „több”, mint az előző, building-type-count tényleíró). A példaszkript ellenőrzi, hogy a T1 korszakban a szabály végrehajtásakor van-e már parancsnoki központja a játékosnak, és ha nincs, megpróbál építeni egyet. |
|
|
◄ |
cc-players-unit-type-count
szerkesztésFelméri, hogy a játéktérképen egy adott sorszámú játékosnak (változók, azaz joker-azonosítók is használhatóak) valamilyen egységből hány darab van. Cheat-szerű parancs, azaz nem kell „személyesen” találkoznia, egyik egységének látóterébe sem kerülnie a keresett egységtípusnak.
Használat, példa:
- (defrule
- (cc-players-unit-type-count 0 59 >= 1)
- =>
- (build BLDG-DROPCHOW)
- )
A fenti parancs ellenőrzi, hogy GAIÁ-nak (0. sorszámú játékos) az 59-es bnaa-jú objektumból, azaz muja bokorból hány egységnyi van, ha van, akkor épít (alapértelmezésben minél közelebb a bokrokhoz) egy élelemfeldolgozót.
Explorációs irányszámok és alapértelmezéseik
szerkesztésstratégiai szám | gamedata.drs. alapértelmezés |
sn-number-explore-groups | 0 |
sn-minimum-explore-group-size | 2 |
sn-maximum-explore-group-size | 2 |
-- | -- |
sn-total-number-explorers | 4 |
sn-minimum-civilian-explorers | 0 |
sn-cap-civilian-explorers | 2 |
sn-percent-civilian-explorers | 34 |
--- | |
sn-initial-exploration-required | 2 |
sn-percent-exploration-required | 100 |
sn-percent-half-exploration | 30 |
Hivatkozások
szerkesztésMegjegyzések
szerkesztés- ↑ Becsülettel be kell vallanom azonban, hogy a gamedata.drs fájlt - idő hiányában - nem böngésztem végig. Ezt más útmutató-írók, különösen Balbarian már megtették.
- ↑ De nem olyan értelemben, mint a matematikai logikában, ezért nem alkalmazzuk az „atomi” és „elemi” jelzőket. Logikai szempontból azok a tények számítanak atominak, amelyekből a logikai kötőszavak alkotta mondatok felépülnek, és ez a Genie-szkriptnyelv mindegyik tényére igaz. Az itteni megkülönböztetés a matematikában/logikában a zárt-nyílt (ítélet és kijelentésfüggvény) megkülönböztetésének felel meg inkább, de annak is csak félreérthető módon).
- ↑ A Star Wars Galactic Battlegroundsban - az Age of Empirestől eltérően - gyakorlatilag egyfajta beépített épület-előfeltételesség van a véletlen térképeken: a farmok építéséhez rendelkezni kell ételraktárral.