AIスクリプトリファレンス

条件(その他)

true

■説明
この条件は常に真である。テスト目的に使用される。

■注釈
無条件で実行させたいルールがある場合に「true」条件を使用する。条件なしのdefruleは作成できないため、この条件が使用される。基本的にゲーム開始後すぐに実行される初期化のルールとして使用される。下記の例は、ゲーム開始時に食料を集める人の割合を100%に設定する。

(defrule
  (true)
=>
  (set-strategic-number sn-wood-gatherer-percentage   0)
  (set-strategic-number sn-food-gatherer-percentage 100)
  (set-strategic-number sn-gold-gatherer-percentage   0)
  (set-strategic-number sn-stone-gatherer-percentage  0)
)

false

■説明
この条件は常に偽である。テスト目的に使用される。

■注釈
テスト目的で絶対に実行されないルールを作る場合に使用できる。下記の例は伐採所を建設するルールをテスト用に一時的に無効にするために「false」条件を一行いれたルールの例である。

(defrule
  (false)
  (can-build lumber-camp)

=>
  (build lumber-camp)
  (disable-self)
)

goal <goal-id> <value>

■説明
この条件は指定されたゴールが何かチェックする。

■注釈
好きな値を設定できる変数として使用できる。<goal-id>は1〜40までが指定できる(つまり変数40個まで使用可)。下記の例ではゴール1の値が5の場合騎士を生産し、値が4の場合槍兵を生産する。このようにゴール1の値によって生産するユニットを変えるようなルールを作成することができる。あらかじめゴール1には状況に応じて「set-goal」命令を使用して値を設定しておく。

(defrule
  (goal 1 5)
  (can-train knight-line)
=> (train knight-line) ) (defrule (goal 1 4) (can-train spearman-line)
=> (train spearman-line) )

doctrine <value>

■説明
この条件は現在の方針が何かチェックする。

■注釈
使い方は「goal」と同じで変数として使用する。「goal」は40個あるが「doctrine」は41番目のgoalと考えてよい。
※ES社の開発者によると、AOKのAIスクリプト仕様の作成の当初、変数として用法で「doctrine」があったが、後から同じ用途で使用できる「goal」が追加されたとのこと。

(defrule
  (doctrine 3)
(can-train knight-line) => (train knight-line) )

shared-goal <shared-goal-id> <value>

■説明
この条件は指定された共有ゴール(コンピュータプレイヤー間で共有されるゴール)をチェックする。
すべてのコンピュータプレイヤーが同じチームの時にのみ使用される。

■注釈
同じチームの複数のAIで値を共有する変数。<shared-goal-id>は1〜255が設定可能。「shared-goal」に設定された値は同じチームのすべてのAIから同じ値に見える。この条件を使うとAIどうしで情報を共有することができる。下記の例は共有ゴール1が(他のAIによって)50に設定された場合、攻撃する例である。同じチームAIどうしが同時に攻撃をしかける場合などに使用する。

(defrule
  (shared-goal 1 50)

=>
  (attack-now)
  (set-shared-goal 1 0)
)

random-number <rel-op> <value>

■説明
この条件は乱数の値をチェックする。

■注釈
「generate-random-number」命令によって発生させた乱数の現在の値を判定する条件。「random-number」条件を使ったルールをが実行される前に「generate-random-number」命令を使ったルールで乱数を生成しておく必要がある。下記の例は乱数が1の場合「槍散兵で」とチャットし、乱数が2の場合「弓で」とチャットする。この場合は事前に1〜2の範囲の乱数を生成しておく必要がある。

(defrule
  (random-number == 1)
=>
  (chat-to-allies "槍散兵で")
  (disable-self)
)
(defrule
  (random-number == 2)
=>
  (chat-to-allies "弓で")
  (disable-self)
)

strategic-number <strategic-number> <rel-op> <value>

■説明
この条件は戦略番号の値をチェックする。

■注釈
自分で設定した戦略番号の設定値を判定するために使用する。 下記の例は領主の時代以降、町のサイズが20未満の場合に町のサイズを20にするルールである。
※AOEでは有効であったがAOK(AOC)では効果のない戦略番号(例えばsn-number-max-skip-cyclesなど)に好きな値をセットすることで「goal」の替わりとしても(本来の使い方ではないが)使用できる。

(defrule
(current-age >= feudal-age) (strategic-number sn-maximum-town-size < 20)
=> (strategic-number sn-maximum-town-size == 20) )

taunt-detected <player-number> <taunt-id>

■説明
この条件は指定されたボイスメッセージを検出する。チェックはボイスメッセージが明示的に受取り通知されるまで何度でも行われる。
<player-number>に「any」または「every」ワイルドカードパラメータを使用してよい。
下記の例はコンピュータか人間の敵プレイヤーの食料の要請を検出する。

■注釈
表示されたチャットメッセージ内の番号によって動作をさせたい場合に使用する条件。「acknowledge-taunt」命令を実行しないかぎり「taunt-detected」条件は真のままである。

(defrule
(taunt-detected any-enemy 3)
=> (acknowledge-taunt this-any-enemy 3) (chat-to-player this-any-enemy "No food for you") )

event-detected <event-type> <event-id>

■説明
この条件は指定されたイベントが検出されたかチェックする。イベントが「acknowledge-event」命令によって明示的に無効にされるまで条件は真のままである。

■注釈
シナリオとAIを連動させる場合に使用する条件。<event-type>はtriggerのみ指定できる。下記の例はシナリオからのAIシグナル1を検出した場合、攻撃を行うルールである。

(defrule
(event-detected trigger 1)
=> (acknowledge-event trigger 1) (attack-now) )

timer-triggered <timer-id>

■説明
この条件は指定されたタイマがトリガーされたかチェックする。無効化されたタイマのでは、この条件は常にFalseである。タイマが明示的に無効化されるまで、このチェックは何回も実行される。

(defrule
(timer-triggered 1)
=> (disable-timer 1) (attack-now) )

players-achievements <player-number> <value> <rel-op> <value>

■説明
ドキュメントに記載なし。

■注釈
AIスクリプトの条件として使用しても文法エラーにならないが使用方法が不明な条件。シナリオで使用できる達成条件と同じと思われるが、どの値を設定しても結果は常に偽になる。この条件自体が使用できないように無効にされている可能性もある。

例なし

trace-fact <value>

■説明
ドキュメントに記載なし。

■注釈
AIスクリプトの条件として使用しても文法エラーにならないが使用方法が不明な条件。ログ出力等のデバッグ条件だと思われるが、どの値を設定しても結果は常に真になる。

例なし