NavigaceDotazy Kampaně Civilizace Jednotky Ke stažení Tvorba map - Menu editoru - Vychytávky - Spouště - Kampaňe - AI script - RMS script Cheaty Citáty Kniha návštev OstatníOdkazyAoe.cz Aoe2 by HHPZ AoK Heaven Aoe2 FacebookAnketa |
Tvorba AI Část VII.: Doplnění znalostí základů
Tak už umíme vcelku dost .... Ale stále ne natolik, aby jsme se mohli pustit do něčeho velkého.
V šesté části si doplníme základní znalosti, aby byl náš postup do feudálu co nehladší.
Ještě se stále vyhnem takovým machrovinkám, jako je nastavení útoku či jak se chovat na jaké mapě...
Budeme se držet Mongolů, Černého lesa a jednoho standartního protihráče (nastavit !!!)
Středník:; Celkem šikovná věcička pro přehlednost (hlavně v editoru) Vše co je v řádce za středníkem program přeskočí, takže si za něj můžete napsat jakékoli poznámky ...
Čas hry:(game-time <rel-op> <value>) ; Prostě podmínka která počítá čas od spuštění hry (sec)
Nahromaděné suroviny:(food-amount <rel-op> <value>) ; Máš-li tolik jídla (wood-amount <rel-op> <value>) ; Máš-li tolik dřeva (gold-amount <rel-op> <value>) ; ... zlata (stone-amount <rel-op> <value>) ; ... kamení
Co značí "total":Příkladem kde se dá použít TOTAL je třeba: (building-type-count- house == 1) (building-type-count-total house == 1) První říká :
Máš li postaven jeden dům, podmínka je splněna!
Máš li zakoupen jeden dům, podmínka je splněna!
Total tedy v tomto případě sčítá jak budovy co jsou postavené,
tak ty na kterých vesničané teprve pracují.
NOT a jeho použití.:Jedná se o jednoduchou negaci jakékoli podmínky. Příklad: (defrule (not (unit-type-count villager == 3) ) (can-build mill) => (chat-to-all "build mill") (build mill) ) NOT v tomto případě vyneguje podmínku z "==" na "!=". Poslední co se základu týče jsou upřesňovače podmínek. Jedná se o tagy OR; NOR; AND a NAND
Logika a AJ napoví k čemu jsou tyto tagy dobré,
AND(defrule (building-type-count house == 0) (and (game-time > 30) ; Vždy alespoň 2 podmínky (game-time > 30) ; Ale můžete tu samou použít 2x ) (can-build mill) => (chat-to-all "build mill") (build mill) ) Podmínka říká :
Budeš-li mít 0 domů "a" to i po 30 sekundách, postav mlýn!
NAND(defrule (building-type-count-total house == 1) (nand (game-time > 30) (game-time > 30) ) (can-build mill) => (chat-to-all "build mill") (build mill) ) Rozbor:
OR(defrule (true) (or ; Zde začínají podmínky nebo (game-time > 40) (or ; Zde je jako druhá podmínka použit další OR (unit-type-count villager == 4) ; Vždy nejméně 2 podmínky! (unit-type-count villager == 4) ) ; Vždy uzavřete všechny podmínky a úrovně ) (can-build mill) => (chat-to-all "build mill") (build mill) )
První podmínka TRUE a poslední CAN-BUILD-MILL musí být splněny vždy !
Ty podmínky pro které "NEBO" platí jsou až za prvním OR
a končí u zelené zakončovací závorky v úrovni prvního OR.
Dvojúrověň je myslím celkem jasná,
protože pokud by za prvním or nenásledovalo další,
byla by první podmínka v OR irelevantní.
NOR(defrule (true) (nor (unit-type-count-total villager == 4) (or (game-time < 30) (game-time < 30) ) ) (can-build mill) => (chat-to-all "build mill") (build mill) ) Rozbor :
Ještě jsem nepřišel na situaci, kdy bych tohle chtěl použít, ale tak, když to existuje, tak to asi k něčemu dobrý bude. Jestli to zjistíte, dejte mi vědět ;) :D...
Rada závěrem:
Nesnažte se dělat více jak tříúrovňové podmínky, čim víc podmínek... tím větší šance že uděláte chybu! A ta se v tomhle "bordelu" fakt hledá blbě. |