;Age of Kings Agent ;Author: Gopika ;Implemented using WDPSample.per (defrule (true) => (chat-to-all "Blab bla bla.. Actions speak louder than words my 'friend'") ) ; Set town size (defrule (current-age == dark-age) => (set-strategic-number sn-maximum-town-size 12) (set-strategic-number sn-minimum-town-size 11) (set-strategic-number sn-camp-max-distance 20) (set-strategic-number sn-mill-max-distance 20) (disable-self) ) ;Strategic Numbers (defrule (true) => (set-strategic-number sn-percent-civilian-gatherers 90) (set-strategic-number sn-percent-civilian-builders 10) (set-strategic-number sn-percent-civilian-explorers 0) (set-strategic-number sn-number-build-attempts-before-skip 3) (set-strategic-number sn-food-gatherer-percentage 100) (set-strategic-number sn-wood-gatherer-percentage 0) (set-strategic-number sn-gold-gatherer-percentage 0) (set-strategic-number sn-stone-gatherer-percentage 0) (disable-self) ) (defrule (true) => (set-strategic-number sn-initial-exploration-required 0) (set-strategic-number sn-percent-exploration-required 100) (set-strategic-number sn-cap-civilian-explorers 0) (set-strategic-number sn-number-explore-groups 1) (set-strategic-number sn-minimum-explore-group-size 1) (set-strategic-number sn-maximum-explore-group-size 1) (set-strategic-number sn-percent-half-exploration 70) (set-strategic-number sn-percentage-explore-exterminators 60) (disable-self) ) (defrule (true) => (set-strategic-number sn-cap-civilian-builders 20) (set-strategic-number sn-cap-civilian-gatherers 80) (disable-self) ) (defrule (true) => (set-strategic-number sn-maximum-wood-drop-distance 7) (set-strategic-number sn-maximum-food-drop-distance 15) (set-strategic-number sn-maximum-hunt-drop-distance 0) (set-strategic-number sn-maximum-gold-drop-distance 15) (set-strategic-number sn-maximum-stone-drop-distance 15) (disable-self) ) (defrule (true) => (set-strategic-number sn-food-dropsite-distance 12) (set-strategic-number sn-wood-dropsite-distance 3) (set-strategic-number sn-stone-dropsite-distance 3) (set-strategic-number sn-gold-dropsite-distance 3) (disable-self) ) (defrule (true) => (set-strategic-number sn-group-commander-selection-method 2) (set-strategic-number sn-group-form-distance 20) (set-strategic-number sn-attack-group-gather-spacing 4) (set-strategic-number sn-attack-separation-time-randomness 0) (set-strategic-number sn-attack-intelligence 1) (set-strategic-number sn-ignore-attack-group-under-attack 1) (disable-self) ) (defrule (true) => (set-strategic-number sn-intelligent-gathering 1) (set-strategic-number sn-minimum-dropsite-buffer 1) (set-strategic-number sn-retask-gather-amount 0) (set-strategic-number sn-max-retask-gather-amount 0) (set-strategic-number sn-minimum-water-body-size-for-dock 300) (set-strategic-number sn-number-boat-explore-groups 0) (set-strategic-number sn-maximum-boat-explore-group-size 0) (set-strategic-number sn-minimum-boat-explore-group-size 0) (set-strategic-number sn-consecutive-idle-unit-limit 0) (disable-self) ) (defrule (true) => (set-strategic-number sn-number-enemy-objects-required 0) (set-strategic-number sn-percentage-explore-exterminators 70) (set-strategic-number sn-blot-exploration-map 1) (set-strategic-number sn-blot-size 1) (set-strategic-number sn-initial-exploration-required 1) (disable-self) ) (defrule (true) => (set-strategic-number sn-target-evaluation-distance 80) (set-strategic-number sn-target-evaluation-siege-weapon 200) (set-strategic-number sn-target-evaluation-hitpoints 90) (set-strategic-number sn-target-evaluation-attack-attempts 40) (set-strategic-number sn-target-evaluation-range 10) (set-strategic-number sn-target-evaluation-damage-capability 80) (set-strategic-number sn-target-evaluation-rof 30) (set-strategic-number sn-target-evaluation-time-kill-ratio 70) (set-strategic-number sn-target-evaluation-in-progress 50) (set-strategic-number sn-target-evaluation-kills 0) (disable-self) ) (defrule (true) => (set-strategic-number sn-number-defend-groups 1) (set-strategic-number sn-maximum-defend-group-size 1) (set-strategic-number sn-gold-defend-priority 7) (set-strategic-number sn-stone-defend-priority 4) (set-strategic-number sn-forage-defend-priority 4) (set-strategic-number sn-relic-defend-priority 7) (set-strategic-number sn-town-defend-priority 8) (set-strategic-number sn-defense-distance 3) (set-strategic-number sn-defend-overlap-distance 3) (set-strategic-number sn-task-ungrouped-soldiers 0) (disable-self) ) ; dark age ; search for food (defrule (current-age == dark-age) (not (resource-found food)) (unit-type-count-total villager < 10) => (set-strategic-number sn-percent-civilian-gatherers 0) (set-strategic-number sn-percent-civilian-builders 10) (set-strategic-number sn-percent-civilian-explorers 90) (disable-self) ) (defrule (current-age == dark-age) (or (resource-found food) (not (sheep-and-forage-too-far)) ) => (set-strategic-number sn-percent-civilian-gatherers 80) (set-strategic-number sn-percent-civilian-builders 20) (set-strategic-number sn-percent-civilian-explorers 0) (disable-self) ) ; wood (defrule (current-age == dark-age) (unit-type-count-total villager <= 10) => (set-strategic-number sn-wood-gatherer-percentage 10) (set-strategic-number sn-food-gatherer-percentage 90) (disable-self) ) (defrule (unit-type-count-total villager >= 11) (unit-type-count-total villager <= 20) => (set-strategic-number sn-wood-gatherer-percentage 40) (set-strategic-number sn-food-gatherer-percentage 60) (disable-self) ) (defrule (current-age == dark-age) (unit-type-count-total villager > 20) => (set-strategic-number sn-wood-gatherer-percentage 25) (set-strategic-number sn-food-gatherer-percentage 75) (disable-self) ) (defrule (true) => (set-strategic-number sn-scale-minimum-attack-group-size 5) (set-strategic-number sn-scale-maximum-attack-group-size 10) (set-strategic-number sn-percent-attack-soldiers 100) (set-strategic-number sn-target-evaluation-distance 80) (set-strategic-number sn-target-evaluation-siege-weapon 200) (set-strategic-number sn-target-evaluation-hitpoints 90) (set-strategic-number sn-target-evaluation-attack-attempts 40) (set-strategic-number sn-target-evaluation-range 10) (set-strategic-number sn-target-evaluation-damage-capability 80) (set-strategic-number sn-target-evaluation-rof 30) (set-strategic-number sn-target-evaluation-time-kill-ratio 70) (set-strategic-number sn-target-evaluation-in-progress 50) (set-strategic-number sn-target-evaluation-kills 0) (disable-self) ) (defrule (true) => (set-strategic-number sn-group-commander-selection-method 2) (set-strategic-number sn-group-form-distance 20) (set-strategic-number sn-attack-group-gather-spacing 4) (set-strategic-number sn-attack-separation-time-randomness 0) (set-strategic-number sn-attack-intelligence 1) (set-strategic-number sn-ignore-attack-group-under-attack 1) (set-strategic-number sn-relic-return-distance 800) (disable-self) ) (defrule (true) => (set-strategic-number sn-number-defend-groups 1) (set-strategic-number sn-maximum-defend-group-size 1) (set-strategic-number sn-gold-defend-priority 7) (set-strategic-number sn-stone-defend-priority 4) (set-strategic-number sn-forage-defend-priority 4) (set-strategic-number sn-relic-defend-priority 7) (set-strategic-number sn-town-defend-priority 8) (set-strategic-number sn-defense-distance 3) (set-strategic-number sn-defend-overlap-distance 3) (set-strategic-number sn-task-ungrouped-soldiers 0) (disable-self) ) (defrule (true) => (set-strategic-number sn-group-leader-defense-distance 1) (set-strategic-number sn-allow-civilian-defense 1) (set-difficulty-parameter ability-to-maintain-distance 0) (set-difficulty-parameter ability-to-dodge-missiles 100) (set-strategic-number sn-consecutive-idle-unit-limit 60) (set-strategic-number sn-sentry-distance 0) (set-strategic-number sn-sentry-distance-variation 0) (set-strategic-number sn-zero-priority-distance 0) (set-strategic-number sn-attack-separation-time-randomness 0) (disable-self) ) (defrule (true) => (set-strategic-number sn-special-attack-influence1 100) (disable-self) ) (defrule (true) => (set-strategic-number sn-number-enemy-objects-required 0) (set-strategic-number sn-percentage-explore-exterminators 70) (set-strategic-number sn-blot-exploration-map 1) (set-strategic-number sn-blot-size 1) (set-strategic-number sn-initial-exploration-required 1) (disable-self) ) ;Constants Goals (defconst researching-feudal 1) (defconst researching-castle 2) (defconst researching-imperial 3) (defconst stop-feudal-rush 4) ;Goals in the game (defrule (true) => (set-goal researching-feudal 0) (set-goal researching-castle 0) (set-goal researching-imperial 0) (set-goal stop-feudal-rush 0) (disable-self) ) ;Research Rules for all ages ;Loom (defrule (can-research ri-loom) (not (can-train villager)) => (research ri-loom) (chat-local-to-self "Research loom") (disable-self) ) ;Fletching (defrule (current-age >= feudal-age) (building-type-count-total blacksmith > 0) (can-research ri-fletching) => (research ri-fletching) (chat-local-to-self "Fletching") ) ;Double Bit Axe (defrule (current-age >= feudal-age) (can-research ri-double-bit-axe) => (chat-local-to-self "Double-bit-axe") (research ri-double-bit-axe) ) ;Wheel Barrow (defrule (unit-type-count-total villager > 19) (can-research ri-wheel-barrow) => (research ri-wheel-barrow) (chat-local-to-self "Wheel Barrow") ) ;Horse Collar (defrule (current-age == feudal-age) (building-type-count-total archery-range > 1) (can-research ri-horse-collar) => (chat-local-to-self "Research horse collar") (research ri-horse-collar) ) ;Scale Mail (defrule (unit-type-count-total spearman-line >= 4) (can-research ri-scale-mail) => (chat-local-to-self "Research scale mail") (disable-self) ) ;Gold Mining (defrule (can-research ri-gold-mining) => (chat-local-to-self "Gold mining") (research ri-gold-mining) ) ;Stone Mining (defrule (can-research ri-stone-mining) => (chat-local-to-self "Stone Mining") (research ri-stone-mining) ) ;Forging (defrule (goal researching-castle 1) (can-research ri-forging) => (chat-local-to-self "Forging") (research ri-forging) ) ;Two Man Saw (defrule (can-research ri-two-man-saw) => (research ri-two-man-saw) (chat-local-to-self "Two Man Saw") ) ;Bow Saw (defrule (can-research ri-bow-saw) (unit-type-count-total scorpion >= 1) => (research ri-bow-saw) (chat-local-to-self "Bow Saw") ) ;Heavy Plow (defrule (can-research ri-heavy-plow) (unit-type-count scorpion >= 1) => (research ri-heavy-plow) (chat-local-to-self "Heavy plow") ) (defrule (can-research ri-gold-shaft-mining) (food-amount > 500) (unit-type-count scorpion >= 1) => (research ri-gold-shaft-mining) (chat-local-to-self "Research gold shaft mining") ) ;Bodkin Arrow (defrule (or(unit-type-count-total archer-line >= 4) (unit-type-count-total cavalry-archer-line >= 4)) (can-research ri-bodkin-arrow) => (research ri-bodkin-arrow) (chat-local-to-self "Bodkin Arrow") ) ;Chain Mail Armor (defrule (current-age >= castle-age) (or(unit-type-count-total skirmisher-line > 5) (unit-type-count-total pikeman > 6)) (can-research ri-chain-mail) => (research ri-chain-mail) (chat-local-to-self "Chain Mail Armor") ) ;Scorpion (defrule (current-age >= castle-age) (building-type-count-total siege-workshop > 0) (can-research ri-scorpion) => (research ri-scorpion) (chat-local-to-self "Scorpion Research") ) ;Heavy Scorpion (defrule (current-age == imperial-age) (building-type-count-total siege-workshop > 1) (can-research ri-heavy-scorpion) => (research ri-heavy-scorpion) (chat-local-to-self "Heavy Scorpion Research") ) ;Onager (defrule (current-age == imperial-age) (building-type-count-total siege-workshop > 1) (can-research ri-onager) => (research ri-onager) (chat-local-to-self "Onager Research") ) ;Siege Onager (defrule (current-age == imperial-age) (building-type-count-total siege-workshop > 2) (can-research ri-siege-onager) => (research ri-siege-onager) (chat-local-to-self "Siege Onager Research") ) ;Padded Archer Armor (defrule (current-age >= castle-age) (can-research ri-padded-archer-armor) (unit-type-count-total cavalry-archer > 5) => (research ri-padded-archer-armor) (chat-local-to-self "Padded Archer Armor") ) ;Murder Holes (defrule (current-age >= castle-age) (building-type-count-total castle > 0) (can-research ri-murder-holes) => (research ri-murder-holes) (chat-local-to-self "Murder Holes") ) ;Siege Engineers (defrule (current-age >= castle-age) (building-type-count-total siege-workshop > 0) (unit-type-count-total scorpion > 1) (can-research ri-siege-engineers) => (research ri-siege-engineers) (chat-local-to-self "Siege Engineers") ) ;Monks Research (defrule (current-age >= castle-age) (building-type-count-total monastery > 0) (unit-type-count-total monk > 2) (can-research ri-sanctity) => (research ri-sanctity) (chat-local-to-self "Sanctity") ) ;Archers in Feudal Age (defrule (current-age >= feudal-age) (unit-type-count-total archer < 10) (can-train archer-line) => (chat-local-to-self "Archer") (train archer-line) ) ;Skirmishers in Feudal Age (defrule (current-age >= feudal-age) (unit-type-count-total skirmisher < 10) (can-train skirmisher-line) => (chat-local-to-self "Skirmisher") (train skirmisher-line) ) ;Spearmen in Feudal Age (defrule (current-age >= feudal-age) (unit-type-count-total spearman < 10) (can-train spearman-line) => (chat-local-to-self "Spearman") (train spearman-line) ) ;Cavalry Archers in Castle Age (defrule (current-age == castle-age) (unit-type-count-total cavalry-archer-line < 5) (can-train cavalry-archer-line) => (train cavalry-archer-line) (chat-local-to-self "Cavalry Archer") ) ;;Cavalry Archers in Imperial Age (defrule (current-age == castle-age) (unit-type-count-total cavalry-archer-line < 10) (can-train cavalry-archer-line) => (train cavalry-archer-line) (chat-local-to-self "Cavalry Archer") ) ;Pikeman (defrule (current-age >= castle-age) (unit-type-count-total pikeman < 7) (can-train pikeman) => (train pikeman) (chat-local-to-self "Pikeman") ) ;;Pikeman in the Imperial Age (defrule (current-age >= castle-age) (unit-type-count-total pikeman < 15) (can-train pikeman) => (train pikeman) (chat-local-to-self "Pikeman") ) ;Research Pikeman (defrule (current-age >= castle-age) (unit-type-count-total spearman-line > 4) (can-research ri-pikeman) => (research ri-pikeman) (chat-local-to-self "Researching Pikeman") ) ;Researching Elite Skirmisher (defrule (current-age >= castle-age) (unit-type-count-total skirmisher-line > 4) (can-research ri-elite-skirmisher) => (research ri-elite-skirmisher) (chat-local-to-self "Researching Elite Skirmisher") ) ;Researching Squires (defrule (current-age >= castle-age) (or(unit-type-count-total pikeman > 5) (unit-type-count-total skirmisher > 5)) (can-research ri-squires) => (research ri-squires) (chat-local-to-self "Squires") ) ;Knights (defrule (current-age >= castle-age) (unit-type-count-total knight-line < 10) (building-type-count-total stable > 0) (can-train knight-line) => (train knight-line) (chat-local-to-self "Knight") ) ;Knights in the Imperial Age (defrule (current-age >= castle-age) (unit-type-count-total knight-line < 20) (building-type-count-total stable > 0) (can-train knight-line) => (train knight-line) (chat-local-to-self "Knight") ) ;Scorpions (defrule (current-age >= castle-age) (building-type-count-total siege-workshop > 0) (unit-type-count-total scorpion < 3) (can-train scorpion) => (train scorpion) (chat-local-to-self "Scorpion") ) ;Onager (defrule (current-age == imperial-age) (building-type-count-total siege-workshop >= 1) (unit-type-count-total onager < 2) (can-train onager) => (train onager) (chat-local-to-self "Onager") ) (defrule (current-age == imperial-age) (building-type-count-total siege-workshop >= 2) (unit-type-count-total siege-onager < 3) (can-train siege-onager) => (train siege-onager) (chat-local-to-self "Siege Onager") ) ;Wood Raiders (defrule (current-age >= castle-age) (building-type-count-total castle > 0) (unit-type-count-total my-unique-unit < 4) (can-train my-unique-unit) => (train my-unique-unit) (chat-local-to-self "Wood Raider") ) ;Wood Raiders (defrule (current-age == imperial-age) (building-type-count-total castle > 0) (unit-type-count-total my-unique-unit < 4) (can-train my-unique-unit) => (train my-unique-unit) (chat-local-to-self "Wood Raider") ) ;Battering Ram (defrule (current-age >= castle-age) (can-train battering-ram) (unit-type-count-total battering-ram <= 3) => (train battering-ram) (chat-local-to-self "Battering Ram") ) ;Buildings for all ages ; Town center (defrule (game-time > 45) (building-type-count town-center < 1) (can-build town-center) => (build town-center) ) ;Housing (defrule (housing-headroom < 3) (building-type-count-total house < 25) (can-build house) => (build house) ) ;Lumber Camp (defrule (current-age == dark-age) (building-type-count-total mill > 0) (building-type-count-total lumber-camp == 0) (resource-found wood) (can-build lumber-camp) => (build lumber-camp) ) ;Lumber camp in other ages (defrule (current-age >= feudal-age) (building-type-count-total lumber-camp <= 2) (can-build lumber-camp) => (build lumber-camp) ) ;Mill (defrule (current-age == dark-age) (building-type-count-total mill == 0) (resource-found food) (can-build mill) => (build mill) ) ;Barracks (defrule (current-age == dark-age) (goal researching-feudal 1) (building-type-count-total barracks < 1) (can-build barracks) => (build barracks) (chat-local-to-self "barracks") ) ;Mining Camp (defrule (current-age == dark-age) (goal researching-feudal 1) (building-type-count-total mill > 0) (building-type-count-total mining-camp < 1) (resource-found gold) (can-build mining-camp) => (build mining-camp) (chat-local-to-self "Mining Camp") ) ;Stone Mining Camp (defrule (current-age == feudal-age) (building-type-count-total mill > 0) (building-type-count-total mining-camp < 2) (resource-found stone) (can-build mining-camp) => (build mining-camp) (chat-local-to-self "Mining Camp") ) ;Farms (defrule (unit-type-count-total villager > 14) (building-type-count farm < 10) (idle-farm-count < 1) (can-build farm) => (build farm) ) ;Farms (defrule (current-age >= castle-age) (building-type-count-total farm < 20) (wood-amount > 200) (idle-farm-count < 1) => (build farm) ) ;Archery Range (defrule (current-age == feudal-age) (building-type-count-total archery-range < 1) (can-build archery-range) => (build archery-range) (chat-local-to-self "Archery range") ) ;Stable (defrule (current-age == feudal-age) (building-type-count-total stable < 1) (can-build stable) => (build stable) (chat-local-to-self "Stable") ) ;Walls ;WALL PREPARATION (defrule (true) => (enable-wall-placement 2) ; (disable-self) ) ;WALL 2 PLACEMENT (defrule (unit-type-count-total villager > 20) (stone-amount > 100) (can-build-wall 2 stone-wall) => (build-wall 2 stone-wall) (chat-local-to-self "Stone Wall") ) (defrule (unit-type-count-total villager > 20) (stone-amount > 100) (building-type-count-total gate <= 4) (can-build-gate 2) => (build-gate 2) ) ;Scout Cavalry (defrule (unit-type-count-total scout-cavalry < 1) => (train scout-cavalry) ) ;Blacksmith (defrule (building-type-count-total blacksmith < 1) (building-type-count-total archery-range > 0) (soldier-count > 4) (can-build blacksmith) => (build blacksmith) (chat-local-to-self "blacksmith") ) ;Market (defrule (building-type-count-total market < 1) (building-type-count-total blacksmith > 0) (can-build market) => (build market) (chat-local-to-self "market") ) ;Castle (defrule (current-age >= castle-age) (building-type-count-total castle < 1) (can-build castle) => (build castle) (chat-local-to-self "Castle") ) ;Dock (defrule (goal researching-castle 1) (building-type-count-total dock <= 1) (can-build dock) => (build dock) (chat-local-to-self "Dock") ) ;Fishing Ships (defrule (building-type-count-total dock > 0) (unit-type-count-total fishing-ship <= 1) (can-train fishing-ship) => (train fishing-ship) (chat-local-to-self "Fishing Ship") ) ;Monastary (defrule (current-age >= castle-age) (building-type-count-total monastery < 1) (can-build monastery) => (build monastery) (chat-local-to-self "Monastery") ) ;University (defrule (can-build university) (building-type-count-total monastery > 0) => (build university) (chat-local-to-self "University") ) ;Siege Workshops (defrule (current-age >= castle-age) (building-type-count-total siege-workshop < 1) (can-build siege-workshop) => (build siege-workshop) (chat-local-to-self "Siege Workshop") ) ;Build more town centers (defrule (current-age >= castle-age) (building-type-count-total town-center < 3) (wood-amount > 500) (can-build town-center) => (build town-center) (chat-local-to-self "Town Center") ) ;Build more siege workshops (defrule (current-age >= castle-age) (building-type-count-total siege-workshop <= 2) (soldier-count > 35) (can-build siege-workshop) => (build-forward siege-workshop) (chat-local-to-self "Siege Workshop") ) ;Build more archery ranges (defrule (current-age >= castle-age) (building-type-count-total archery-range < 4) (unit-type-count-total knight-line > 8) (can-build archery-range) (wood-amount > 400) => (build archery-range) (chat-local-to-self "Archery Range") ) ;More Barracks (defrule (current-age >= castle-age) (unit-type-count-total pikeman > 10) (unit-type-count-total knight > 10) (building-type-count-total barracks < 4) (wood-amount > 400) (can-build barracks) => (build barracks) (chat-local-to-self "Barracks") ) ;More Stables (defrule (current-age >= castle-age) (unit-type-count-total knight > 10) (building-type-count-total stable < 4) (can-build stable) => (build stable) (chat-local-to-self "Stable") ) ;More Castles (defrule (current-age >= castle-age) (building-type-count-total castle < 3) (stone-amount > 400) (can-build castle) => (build castle) (chat-local-to-self "Castle") ) (defrule (current-age >= castle-age) (building-type-count-total castle == 3) (can-build castle) => (build-forward castle) (chat-local-to-self "Forward Castle") ) (defrule (current-age >= castle-age) (building-type-count-total siege-workshop >= 2) (can-build siege-workshop) => (build-forward siege-workshop) (chat-local-to-self "Forward Siege Workshop") ) ;Creating Villagers in all ages (defrule (current-age == dark-age) (unit-type-count-total villager < 26) => (train villager) ) (defrule (current-age == feudal-age) (unit-type-count-total villager < 35) => (train villager) ) (defrule (current-age == castle-age) (unit-type-count-total villager < 45) => (train villager) ) (defrule (current-age == imperial-age) (unit-type-count-total villager < 50) => (train villager) ) ;Monks (defrule (current-age >= castle-age) (can-train monk) (unit-type-count-total monk < 6) => (train monk) (chat-local-to-self "Monk") ) ;More Monks (defrule (current-age >= castle-age) (gold-amount >= 900) (can-train monk) (unit-type-count-total monk < 15) => (train monk) (chat-local-to-self "Monk") ) ;Attack Stances ;Feudal Age Attack (defrule (current-age == feudal-age) (goal researching-castle 1) (soldier-count > 15) => (set-strategic-number sn-percent-attack-soldiers 100) (attack-now) ) (defrule (current-age == castle-age) (unit-type-count-total knight > 10) (soldier-count >= 30) => (set-strategic-number sn-percent-attack-soldiers 100) (attack-now) ) (defrule (current-age == feudal-age) (soldier-count >= 20) => (set-strategic-number sn-percent-attack-soldiers 100) (attack-now) ) (defrule (current-age >= castle-age) (soldier-count > 40) (unit-type-count-total scorpion >= 2) => (attack-now) (set-strategic-number sn-percent-attack-soldiers 100) ) ;Market Rules ; Buy and Sell (defrule (current-age == feudal-age) (can-sell-commodity wood) (food-amount > 700) (gold-amount < 150) (wood-amount > 700) => (sell-commodity wood) ) (defrule (current-age == castle-age) (building-type-count-total market > 0) (can-sell-commodity wood) (wood-amount > 700) (gold-amount < 200) => (sell-commodity wood) ) (defrule (current-age >= feudal-age) (building-type-count-total market > 0) (can-sell-commodity food) (food-amount > 1000) (gold-amount < 500) => (sell-commodity food) ) (defrule (current-age >= castle-age) (building-type-count-total market > 0) (can-buy-commodity wood) (food-amount > 1000) (gold-amount > 1000) => (buy-commodity wood) ) (defrule (current-age >= feudal-age) (building-type-count-total market > 0) (can-buy-commodity food) (food-amount < 100) (gold-amount > 400) => (buy-commodity food) ) (defrule (current-age >= castle-age) (building-type-count-total market > 0) (stone-amount > 200) (gold-amount < 100) => (sell-commodity stone) ) (defrule (current-age == castle-age) (building-type-count-total market > 0) (food-amount > 900) (gold-amount < 200) (can-sell-commodity food) => (sell-commodity food) ) (defrule (current-age >= castle-age) (building-type-count-total market > 0) (food-amount > 1500) (can-sell-commodity food) (commodity-selling-price food > 100) => (sell-commodity food) ) (defrule (current-age >= castle-age) (building-type-count-total market > 0) (food-amount > 2000) (can-sell-commodity food) (commodity-selling-price food > 50) => (sell-commodity food) ) (defrule (current-age == imperial-age) (building-type-count-total market > 0) (wood-amount > 3000) (can-sell-commodity food) (commodity-selling-price food > 30) => (sell-commodity food) ) (defrule (current-age >= castle-age) (building-type-count-total market > 0) (wood-amount > 2000) (can-sell-commodity wood) (commodity-selling-price wood > 50) => (sell-commodity wood) ) (defrule (current-age >= castle-age) (building-type-count-total market > 0) (wood-amount > 3000) (can-sell-commodity wood) (commodity-selling-price wood > 30) => (sell-commodity wood) ) ;Common rules to advance in age (defrule (current-age == dark-age) (can-research feudal-age) => (research feudal-age) (chat-local-to-self "Research Feudal Age") (set-goal researching-feudal 1) (disable-self) ) (defrule (current-age == dark-age) (goal researching-feudal 1) => (set-strategic-number sn-food-gatherer-percentage 50) (set-strategic-number sn-wood-gatherer-percentage 50) (disable-self) ) (defrule (current-age == feudal-age) (not (can-research castle-age)) => (set-strategic-number sn-food-gatherer-percentage 40) (set-strategic-number sn-wood-gatherer-percentage 30) (set-strategic-number sn-gold-gatherer-percentage 20) (set-strategic-number sn-stone-gatherer-percentage 10) ) (defrule (current-age == feudal-age) (can-research castle-age) => (research castle-age) (chat-local-to-self "Research Castle Age") (set-goal researching-castle 1) (disable-self) ) (defrule (current-age == feudal-age) (goal researching-castle 1) => (set-strategic-number sn-food-gatherer-percentage 25) (set-strategic-number sn-wood-gatherer-percentage 25) (set-strategic-number sn-gold-gatherer-percentage 30) (set-strategic-number sn-stone-gatherer-percentage 20) (disable-self) ) (defrule (current-age == castle-age) (not (can-research imperial-age)) => (set-strategic-number sn-food-gatherer-percentage 40) (set-strategic-number sn-wood-gatherer-percentage 25) (set-strategic-number sn-gold-gatherer-percentage 25) (set-strategic-number sn-stone-gatherer-percentage 10) ) (defrule (current-age == castle-age) (can-research imperial-age) => (research imperial-age) (chat-local-to-self "Research Imperial Age") (set-goal researching-imperial 1) (disable-self) ) (defrule (current-age == castle-age) (goal researching-imperial 1) => (set-strategic-number sn-food-gatherer-percentage 30) (set-strategic-number sn-wood-gatherer-percentage 20) (set-strategic-number sn-gold-gatherer-percentage 30) (set-strategic-number sn-stone-gatherer-percentage 20) (disable-self) ) (defrule (current-age == imperial-age) => (set-strategic-number sn-food-gatherer-percentage 30) (set-strategic-number sn-wood-gatherer-percentage 20) (set-strategic-number sn-gold-gatherer-percentage 30) (set-strategic-number sn-stone-gatherer-percentage 20) (disable-self) ) (defrule (current-age == imperial-age) (game-time > 3000) => (set-strategic-number sn-food-gatherer-percentage 30) (set-strategic-number sn-wood-gatherer-percentage 30) (set-strategic-number sn-gold-gatherer-percentage 25) (set-strategic-number sn-stone-gatherer-percentage 15) (disable-self) )