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

条件(建物系)

building-count <rel-op> <value>

■説明
この条件はコンピュータプレイヤーの建物の数をチェックする。存在する(建設中でない)建物のみ数に含む。

■注釈
自軍の建設済みの全建物の数を判定するのに使用する。下記の例は自国の建物数が15以上になったらより遠くへ建物を建設するために町のサイズを25に変更するルールである。

(defrule
  (building-count >= 15)
=>
  (set-strategic-number sn-maximum-town-size 25)
  (disable-self)
)

building-count-total <rel-op> <value>

■説明
この条件はコンピュータプレイヤーの総建物数をチェックする。総建物数とは存在する建物と建設中の建物を含む。

■注釈
建設中の建物も数に含めたい場合に使用する。下記の例では「building-count」と「building-count-total」の条件の違いを使って、1つ目の建物が建設中かどうか判定するルールです。

(defrule
  (building-count== 0)
  (building-count-total == 1)
=>
  (chat-local-to-self "1つめの建物を建設中です。")
  (disable-self)
)

players-building-count <player-number> <rel-op> <value>

■説明
この条件は指定されたプレイヤーの建物数をチェックする。存在する建物と建設中の建物の両方が含まれる。コンピュータプレイヤーは見えた建物のみ信頼する。チートはしない。
<player-number>に「any」または「every」ワイルドカードパラメータを使用してよい。また、<building>には建物系列のワイルドカードパラメータを使用してよい。

■注釈
主に敵の建物の数をカウントして敵の町が探索できたか判定するのに使用する。敵の町を発見する前に攻撃命令を出すのを防ぐのに使用できる。

(defrule
  (players-building-count any-enemy >= 1)
=>
  (chat-local-to-self "敵の建物を発見")
  (disable-self)
)

cc-players-building-count <player-number> <rel-op> <value>

■説明
players-building-countのチートバージョン。使用目的はシナリオのみ。
この条件は指定されたプレイヤーの建物数をチェックする。存在する建物と建設中の建物の両方が、それらが見えたかどうかにかかわらず含まれる。つまり霧は無視される。
<player-number>に「any」または「every」ワイルドカードパラメータを使用してよい。また、<building>には建物系列のワイルドカードパラメータを使用してよい。

■注釈
いわゆる視界チートで敵の建物数をカウントする条件。下記の例はプレイヤー2の建物数が5以上で、見えている建物数が4未満の場合、チャットを表示するルールである。

(defrule
  (cc-players-building-count 2 >= 5)
  (players-building-count 2 < 4)
=>
  (chat-local-to-self "まだ発見していない建物があります。")
  (disable-self)
)

building-type-count <building> <rel-op> <value>

■説明
この条件はコンピュータプレイヤーの建物の数をチェックする。指定された種類の存在する(建設中でない)建物のみ数に含む。<building>には建物系列のワイルドカードパラメータを使用してよい。

■注釈
主に建物を建設するときに建物の個数を制限する条件として使用する。下記の例は射手育成所が2つ未満の場合、射手育成所を建設するというルールである。

(defrule
  (building-type-count archery-range < 2)
(can-build archery-range)
=>
(build archery-range) )

building-type-count-total <building> <rel-op> <value>

■説明
この条件はコンピュータプレイヤーの総建物数をチェックする。総建物数とは指定された種類の存在する建物と建設中の建物を含む。<building>には建物系列のワイルドカードパラメータを使用してよい。

■注釈
建設中の建物を数に含めて判定した場合に使用する。下記の例は建設中または建設完了した市場が1つ以上の場合、鉄工所を建設するというルールである。この例で「building-type-count-total」の変わりに「building-type-count」の条件を使用した場合は、市場が建設完了されるまで鉄工所は建設されないことになる。

(defrule
  (building-type-count market >= 1)
(can-build blacksmith)
=>
(build blacksmith) )

players-building-type-count <player-number> <building> <rel-op> <value>

■説明
この条件は指定されたプレイヤーの建物数をチェックする。指定された種類の存在する建物と建設中の建物の両方が含まれる。コンピュータプレイヤーは見えた建物のみ信頼する。チートはしない。
<player-number>に「any」または「every」ワイルドカードパラメータを使用してよい。また、<building>には建物系列のワイルドカードパラメータを使用してよい。

■注釈
主に敵の特定の建物があるか判定するために使用する。以下の例では敵の城が1つ以上ある場合に2つ破城槌を作成する。

(defrule
  (players-building-type-count any-enemy castle >= 1)
  (unit-type-count-total battering-ram-line < 2)
(can-train battering-ram-line)
=>
(train battering-ram-line) )

cc-players-building-type-count <player-number> <building> <rel-op> <value>

■説明
players-building-type-countのチートバージョン。使用目的はシナリオのみ。
この条件は指定されたプレイヤーの建物数をチェックする。指定された種類の存在する建物と建設中の建物の両方が、それらが見えたかどうかにかかわらず含まれる。つまり霧は無視される。
<player-number>に「any」または「every」ワイルドカードパラメータを使用してよい。また、<building>には建物系列のワイルドカードパラメータを使用してよい。

■注釈
主に敵の特定の建物があるか判定するために使用する。以下の例では敵の騎兵育成所が1つ以上ある場合に5体まで槍兵系を生産する。この条件を使えば敵の騎兵育成所が見えていなくても騎兵育成所の存在を察知して槍兵を用意しておくことができる。

(defrule
  (cc-players-building-type-count any-enemy stable >= 1)
  (unit-type-count-total spearman < 5)
(can-train spearman-line)
=>
(train spearman-line) )

gate-count <perimeter> <rel-op> <value>

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

■注釈
指定した<perimeter>上に建設された門の数を判定する条件。<perimeter>には1または2を指定する。AIでは町の境界線1または境界線2の上にしか柵・壁・門を建設できない。下記の条件は境界線1の上に門が3つ未満の場合に門を建設するルールである。

(defrule
(gate-count 1 < 3) (can-build-gate 1)
=> (build-gate 1) )

wall-completed-percentage <perimeter> <rel-op> <value>

■説明
この条件は指定された境界線の壁の完成率をチェックする。木と他の破壊可能な自然の障害物も(壁が)完成していると数えられる。

■注釈
町の境界線上に立ち木や森がある場合は、壁を建設していなくてもwall-completed-percentageが0ではなくなるので、森が境界線上にあるかどうかの判定に使用することもできる。

(defrule
(wall-completed-percentage 1 == 100)
=> (chat-local-to-self "壁が完成しました。") (disable-self) )

wall-invisible-percentage <perimeter> <rel-op> <value>

■説明
この条件は壁の建設場所が何パーセント霧で覆われているかチェックする。
見えない割合が0と等しくない場合、穴があるかないか不明であることを指摘しておく。これは隠れているタイルに木があるかもしれないからである。

■注釈
町の境界線上に立ち木や森がある場合は、壁を建設していなくてもwall-completed-percentageが0ではなくなるので、森が境界線上にあるかどうかの判定に使用することもできる。

(defrule
(wall-completed-percentage 1 < 100) ; 全部は完成していない
(wall-invisible-percentage 1 == 0) ; 且つ全部見ることはできる
=>
(chat-local "壁に穴を発見しました。") )

idle-farm-count <rel-op> <value>

■説明
この条件はコンピュータプレイヤーの空いている畑の数、つまり耕す人がいない畑の数をチェックする。畑が必要であるか確かめるために、新しい畑が建設される前に使用する。

■注釈
畑の建設をするときに、畑が余っているか確かめるために使用する条件。下記の例では、余った畑がない場合に畑を建設する。

(defrule
(idle-farm-count == 0) (can-build farm)
=> (build farm) )

can-build <building>

■説明
この条件はコンピュータプレイヤーが指定された建物を建設できるかチェックする。特に以下の項目をチェックする。
・その建物がコンピュータプレイヤーの文明で有効なこと。
・その建物に対するテクノロジーツリーの前提条件が満たされていること
・その建物に必要な資源があること。備蓄資源は資源量としてカウントしない。

<building>に建物系列ワイルドカードパラメータを使用してよい。

■注釈
建物を建設する場合に必ず使う条件。建物の建設に「can-build」条件を使用しないと、建設条件を満たしていない場合でも「build」命令が実行されるが、実際にはその建物が建設されない。その場合、以降その種類の建物が建設できなくなる場合があるので注意。

(defrule
(can-build barracks)
=> (build barracks) )

can-build-with-escrow <building>

■説明
この条件はコンピュータプレイヤーが指定された建物を建設できるかチェックする。特に以下の項目をチェックする。
・その建物がコンピュータプレイヤーの文明で有効なこと。
・その建物に対するテクノロジーツリーの前提条件が満たされていること
・備蓄資源を使用した時にその建物に必要な資源があること。

<building>に建物系列ワイルドカードパラメータを使用してよい。

■注釈
「can-build」の備蓄資源利用版の条件。備蓄資源を利用して建設する場合は「release-escrow」命令を実行してから建設する必要がある。備蓄資源の設定を0%固定にしている場合は、「can-build」と「can-build-with-escrow」に差はない。

(defrule
(can-build-with-escrow barracks)
=>
(release-escrow wood) (build barracks) )

can-afford-building <building>

■説明
この条件はコンピュータプレイヤーが指定された建物の建設するのに十分な資源を持っているかチェックする。
備蓄資源は資源量としてカウントしない。
<building>に建物系列ワイルドカードパラメータを使用してよい。

■注釈
建物を建設する資源が貯まったか判定する。以下の例は城を建設するだけの資源が貯まったら石を掘る人の割合を1%にする例である。下の例の「can-afford-building」は、石が650(フランクは石488)貯まれば領主の時代でも条件が満たされる。(「can-build」の場合は前提条件も満たされる必要があるので城主の時代から)

(defrule
(can-afford-building castle)
=> (set-strategic-number sn-stone-gatherer-percentage 1) )

building-available <building>

■説明
この条件はその建物がコンピュータプレイヤーの文明で有効か、テクノロジーツリーの前提条件が満たされているかチェックする。この条件は建物を建設するのに十分な資源があるかどうかはチェックしない。
<building>に建物系列ワイルドカードパラメータを使用してよい。

■注釈
下記の例では騎兵育成所の建設が無効(アステカ、マヤ、または戦士育成所が建設されていない)な場合、市場を建設する例である。

(defrule
(building-available stable)
(can-build market)
=> (build market) )

can-build-gate <perimeter>

■説明
この条件は指定された境界線の壁の一部として門の建築が開始できるかチェックする。備蓄資源は資源量としてカウントしない。特に以下の項目をチェックする。
・門がコンピュータプレイヤーの文明で有効なこと。
・門の建設に対するテクノロジーツリーの前提条件が満たされていること
・門の建設に必要な資源があること。備蓄資源は資源量としてカウントしない。
・門を建設する場所があること。

■注釈
門や壁を建設する場合は、 「enable-wall-placement」命令を使って最初に建設予定地を予約しておく必要がある。

(defrule
(gate-count 1 < 3)
(can-build-gate 1)
=> (build-gate 1) )

can-build-gate-with-escrow <perimeter>

■説明
この条件は指定された境界線の壁の一部として門の建築が開始できるかチェックする。備蓄資源は資源量としてカウントする。特に以下の項目をチェックする。
・門がコンピュータプレイヤーの文明で有効なこと。
・門の建設に対するテクノロジーツリーの前提条件が満たされていること
・備蓄資源を使用した時に門の建設に必要な資源があること。
・門を建設する場所があること。

■注釈
門や壁を建設する場合は、 「enable-wall-placement」命令を使って最初に建設予定地を予約しておく必要がある。

(defrule
(gate-count 1 < 3)
(can-build-gate-with-escrow 1)
=> (release-escrow stone) (build-gate 1) )

can-build-wall <perimeter> <wall-type>

■説明
この条件は指定された境界線上に指定された種類の壁が建設できるかどうかチェックする。 備蓄資源は資源量としてカウントしない。
特に以下の項目をチェックする。
・壁の種類がコンピュータプレイヤーの文明で有効なこと。
・壁の種類の使用に対するテクノロジーツリーの前提条件が満たされていること
・備蓄資源は資源量としてカウントしないで壁の建設に必要な資源があること。
・壁を建設する場所があること。

<wall-type>に壁系列ワイルドカードパラメータを使用してよい。

■注釈
門や壁を建設する場合は、 「enable-wall-placement」命令を使って最初に建設予定地を予約しておく必要がある。
下記の例は柵が建設可能な場合、柵を建設する例である。

(defrule
(can-build-wall 1 palisade-wall)
=> (build-wall 1 palisade-wall) )

can-build-wall-with-escrow <perimeter> <wall-type>

■説明
この条件は指定された境界線上に指定された種類の壁が建設できるかどうかチェックする。 備蓄資源は資源量としてカウントする。
特に以下の項目をチェックする。
・壁の種類がコンピュータプレイヤーの文明で有効なこと。
・壁の種類の使用に対するテクノロジーツリーの前提条件が満たされていること
・備蓄資源を使用した時に壁の建設に必要な資源があること。
・壁を建設する場所があること。

<wall-type>に壁系列ワイルドカードパラメータを使用してよい。

■注釈
門や壁を建設する場合は、 「enable-wall-placement」命令を使って最初に建設予定地を予約しておく必要がある。
下記の例は柵が建設可能な場合、柵を建設する例である。

(defrule
(can-build-wall-with-escrow 1 palisade-wall)
=> (release-escrow wood) (build-wall 1 palisade-wall) )

can-afford-complete-wall <perimeter> <wall-type>

■説明
この条件はコンピュータプレイヤーが指定された境界線上に指定された壁を完成できる十分な資源があるかチェックする。備蓄資源は資源量としてカウントしない。
特に以下の項目をチェックする。
・壁の種類がコンピュータプレイヤーの文明で有効なこと。
・壁の種類の使用に対するテクノロジーツリーの前提条件が満たされていること
・備蓄資源は資源量としてカウントしないで、壁の完成に必要な資源があること。

■注釈
下記の例は境界線2に石壁を建設する資源がある場合にチャットで表示するルールである。

(defrule
(can-afford-complete-wall 2 stone-wall)
=> (chat-local-to-self "壁を建設する資源が貯まりました。") (disable-self) )