Age of Empires II: Definitive Edition

Age of Empires II: Definitive Edition

33 ratings
Inteligencia Artificial
By igorhp
En esta guía aprenderás a crear archivos de Inteligencia Artificial (IA) para controlar el comportamiento de los jugadores de tus escenarios y campañas de Age of Empires II Definitive Edition.
2
   
Award
Favorite
Favorited
Unfavorite
INTRODUCCIÓN
La Inteligencia Artificial (IA) en Age of Empires II es un conjunto de reglas y comandos encriptados que nos permite definir el comportamiento de un jugador de ordenador en un escenario.

Mediante estos scripts, podemos indicar cuándo y cómo un jugador debe atacar, defenderse, construir edifiicios, entrenar unidades, investigar, recolectar recursos... o incluso estarse quieto.

Para redactar los scripts de IA basta con un editor de texto sencillo, que permita visualizar los números de fila para poder encontrar y corregir posibles errores de forma cómoda y rápida. Una buena opción es el Blog de notas de Windows.



Archivos *.ai y *.per

Si queremos regular el comportamiento de un jugador de ordenador en AoE II DE debemos crear dos archivos: uno con extensión ai y otro con extensión per. Es muy importante que ambos archivos tengan exactamente el mismo nombre.

NOTA: tanto en los nombres de los archivos, como en la redacción del script, evita usar caracteres no anglosajones como ¿, ¡, ñ, vocales con tilde, etc.

  • El archivo *.per contiene todo el script que regirá el comportamiento del jugador de ordenador, y es el que debemos redactar.
  • El archivo *.ai solo actúa como localizador del archivo *.per, y debe estar vacío.

Para poder utilizar ambos archivos, debes ubicarlos en el siguiente directorio:

C:\Program Files (x86)\Steam\steamapps\common\AoE2DE\resources\_common\ai

De esta forma, en el menú de Jugadores del editor de escenarios, aparecerá tu script de IA en el desplegable de personalidad.

.
También puedes crear IAs para jugar partidas estándar contra el ordenador.
.
.

IAs SECUNDARIAS
En ocasiones, una redacción completa de una IA puede ser larga y laboriosa. Para ahorrar trabajo se suelen elaborar IAs secundarias que pueden ser utilizadas por varias IAs principales.

El juego trae consigo cuatro IAs secundarias:

scenario difficulty.per: regula el comportamiento de las unidades militares del jugador en función del nivel de dificultad de la partida.

scenario market.per: regula la compra y venta de recursos en el mercado por parte del jugador, en función de sus necesidades.

scenario upgrades.per: regula las investigaciones tecnológicas del jugador.

scenario resign.per: regula la rendición del jugador.

Estas IAs secundarias pueden incluirse en la IA principal mediante el comando load:

(load "scenario market") (load "scenario upgrades") (load "scenario difficulty")

De esta forma, esta IA cargará las IAs secundarias que escribamos, siempre entre comillas y utilizando paréntesis.

Es importante que los archivos de esas IAs secundarias estén en el mismo directorio que la IA principal.


REGLAS
Las reglas son la base de la IA. Están formadas por condiciones y acciones, que son equivalentes a las condiciones y efectos de los desencadenadores en el editor de escenarios.

Las reglas se definen con el comando defrule, y presentan la siguiente estructura general:

(defrule (condición 1) (condición 2) ... => (acción 1) (acción 2) ... )

Nótese que cada condición, acción, y la regla entera, van siempre entre paréntesis. Las sangrías y espacios en blanco no tienen ninguna función, y solo se usan para visualizar mejor la estructura de la regla.


Las condiciones de cada regla son testadas de forma continua por el juego, y permanecen vigentes incluso cuando éstas ya se han cumplido, similar al ciclo de desencadenador. Si queremos desactivar una regla cuyas condiciones ya se han cumplido, utilizamos la acción final disable-self:

(defrule (condiciones) => (acciones) (disable-self) )

Podemos añadir comentarios explicativos, sin ningún efecto sobre el comportamiento de la IA, precedidos siempre por el punto y coma ;

;esto es un comentario (defrule (condiciones) => (acciones) ;otro comentario )

Combinando las distintas condiciones y acciones disponibles en la sintaxis propia de juego, se pueden elaborar una gran variedad de reglas que personalizarán en gran medida el comportamiento del jugador de ordenador en nuestro escenario.


Condiciones y acciones
Las condiciones son los elementos que se comprueban en una regla para que ésta desencadene o no sus acciones.

Las condiciones pueden hacer referencia tanto a un jugador concreto: su reserva de recursos, su puntuación... como al escenario en general: tipo de partida, tiempo transcurrido...

Las acciones son operaciones que el jugador de ordenador realiza como si fuera un jugador humano. Por ejemplo, la siguiente regla hace que el jugador entrene un aldeano si tiene más de 50 de alimento:

(defrule (food-amount > 50) => (train villager) )

Más adelante veremos una lista de condiciones y acciones predefinidas como las que aparecen en el ejemplo. Puedes consultarlas en este enlace[airef.github.io].

Algunas condiciones cuentan con un operador comparativo (mayor que, menor que, igual a...) y una cantidad. También existen condiciones que no requieren compararse a ninguna cantidad, como en el siguiente ejemplo en el que la regla se ejecutará si el jugador 3 pertenece a la civilización vikinga:

(defrule (players-civ 3 viking) => (attack-now) )

Una regla puede tener una, varias, o incluso ninguna condición predefinida, es decir, que se cumple al instante, en ese caso, utilizamos la condición true:

(defrule (true) => (chat-to-all ”Estamos jugando”) (disable-self) )

Aquí es importante añadir la acción final disable-self, de lo contrario, la frase "estamos jugando" sería chateada de forma continua.

También puede darse el caso de que una regla contenga más de una condición y/o más de una acción:

(defrule (unit-type-count-total monk < 3) (can-train monk) => (train monk) (chat to all "he creado un monje" )

Recuerda que cada condición, acción, y la regla entera deben ir entre paréntesis.

En las condiciones, podemos utilizar el operador or para dar opción a que la regla se desencadene:

(defrule (or (food-amount < 100) (gold-amount < 100) ) => (resign) (disable-self) )

El jugador se rendirá, bien cuando tenga menos de 100 de alimento, bien cuando tenga menos de 100 de oro. Este operador solo admite dos reglas opcionales, pero podemos añadir aún más condiciones mediante esta sintaxis:

(defrule (unit-type-count archer > 3) (or (can-research ri-crossbow) (can-research-with-escrow ri-crossbow) ) => (research ri-crossbow) )

Existe además la posibilidad de crear condiciones inversas con el operador not:

(defrule (not (current-age == feudal-age) ) => (chat-to-all "No soy feudal") (disable-self) )

Esta regla se activará si el jugador NO está en la Edad Feudal.


REGLAS CONDICIONADAS
Las distintas reglas de una IA pueden ejecutarse o no en función de una serie de requisitos predefinidos. Para ello se utilizan estas sintaxis:

#load-if-defined / #load-if-not-defined
#else
#end-if


que significan "ejecutar o no ejecutar si...", "de lo contrario...", y "fin. El siguiente ejemplo manda un chat distinto en función del nivel de dificultad de la partida:

#load-if-defined DIFFICULTY-HARD (defrule (true) => (chat-to-all "Esto será difícil") (disable-self) ) #else (defrule (true) => (chat-to-all "Esto será fácil") (disable-self) ) #end-if


CONSTANTES
Cada ítem de AoE II DE, entiéndase edificio, unidad, tecnología... está caracterizada por una constante numérica predefinida, cuyo valor se puede ver en este enlace[airef.github.io] en la columna unit ID.

Pero con el comando defconst podemos crear nuestras constantes personalizadas y darles el valor que queramos.

En el siguiente ejemplo definimos una constante llamada aldeanos-edad-media. No uses espacios en los nombres de tus constantes, reemplázalos por guiones.

(defconst aldeanos-edad-media 15) (defrule (civilian-population < aldeanos-edad-media) (current-age == dark-age) (can-train villager) => (train villager) )

De esta forma, el jugador creará aldeanos hasta tener 15, pero solo en la Edad Media. Para la Edad Feudal podemos definir otra constante diferente y darle otro valor:

(defconst aldeanos-feudal 25) (defrule (civilian-population < aldeanos-feudal) (current-age == feudal-age) (can-train villager) => (train villager) )


Reglas codicionadas y constantes

Una combinación de reglas condicionadas y constantes personalizadas puede ser muy útil. Uno de los usos más comunes es el escalado de parámetros, ejemplo:

#load-if-defined DEATH-MATCH (defconst aldeanos-edad-media 10) #else (defconst aldeanos-edad-media 20) #end-if

en partidas de combate a muerte, el número de aldeanos en la Edad Media será de 10, en los otros tipos de partidas será de 20.

Nótese que una misma constante personalizada no puede tener más de un valor para un determinado condicionante.


NÚMEROS ESTRATÉGICOS
Los números estratégicos (sn) permiten establecer cantidades y porcentajes a ciertos aspectos del juego.

Para establecer un sn se utiliza la acción predefinida set-strategic-number. Algunos sn son porcentuales, otros meramente numéricos, y otros binarios de tipo SI (valor 1) o NO (valor 0)

Puedes consultar la lista completa de sn en este enlace[airef.github.io]. En esta guía citaremos los más útiles y habituales.


Regulando la población civil


sn-percent-civilian-explorers: % exploradores civiles.
sn-percent-civilian-gatherers: % recolectores.
sn-percent-civilian-builders: % constructores / reparadores.
La suma de estos tres sn debe ser 100.

sn-food-gatherer-percentage: % de recolectores de alimento.
sn-gold-gatherer-percentage: % de recolectores de oro.
sn-stone-gatherer-percentage: % de recolectores de piedra.
sn-wood-gatherer-percentage: % de recolectores de madera.
La suma de estos cuatro sn debe ser 100.

sn-minimum-boar-hunt-group-size: nº mínimo de aldeanos que cazan un animal salvaje.
sn-number-forward-builders: nº de aldeanos que embarcan en un transporte, desembarcan y construyen en otra isla.


Construyendo la ciudad


sn-minimum-town-size: radio mínimo de la ciudad.
sn-maximum-town-size: radio máximo de la ciudad.
sn-camp-max-distance: distancia máxima a la que se puede construir un campamento minero y/o maderero respecto al centro urbano inicial.
sn-mill-max-distance: distancia máxima a la que se puede construir un molino respecto al centro urbano inicial.

sn-food-dropsite-distance: distancia máxima que el aldeano puede recorrer para recolectar
alimento. >= 3.
sn-wood-dropsite-distance: íd. para la madera.
sn-stone-dropsite-distance: íd. para la piedra.
sn-gold-dropsite-distance: íd. para el oro.

sn-maximum-wood-drop-distance
sn-maximum-food-drop-distance
sn-maximum-hunt-drop-distance
sn-maximum-fish-boat-drop-distance
sn-maximum-gold-drop-distance
sn-maximum-stone-drop-distance
Establecen la distancia máxima que un aldeano debe recorrer desde el recurso hasta su edificio de recolección. Se evita así que los aldeanos recorran largas distancias para extraer recursos de fuentes lejanas.


Explorando


sn-blot-exploration-map: controla si el jugador debe o no explorar zonas ya exploradas. 0 ó 1.

sn-number-explore-groups: nº de grupos de exploración.
sn-maximum-explore-group-size: tamaño máximo del grupo de exploración.
sn-minimum-explore-group-size: tamaño mínimo del grupo de exploración

sn-number-boat-explore-groups
sn-maximum-boat-explore-group-size
sn-minimum-boat-explore-group-size
idénticos para la exploración por mar.


Defendiendo

sn-task-ungrouped-soldiers: establece si los soldados deben o no defender la ciudad si ésta es atacada. 0 ó 1.
sn-percent-enemy-sighted-response: % de unidades defensivas que responderán ante un ataque enemigo.
sn-enemy-sighted-response-distance: radio de respuesta por parte de los soldados ante un ataque.

sn-number-defend-groups: nº de grupos de defensa.
sn-maximum-defend-group-size: tamaño máximo del grupo de defensa.
sn-minimum-defend-group-size: tamaño mínimo del grupo de defensa.

sn-number-boat-defend-groups
sn-maximum-boat-defend-group-size
sn-minimum-boat-defend-group-size
idénticos para la defensa por mar.

sn-gold-defend-priority: prioridad de defender el oro. 0 indica que el oro no será defendido. 1 es la prioridad máxima y 7 la prioridad mínima.
sn-stone-defend-priority: íd. para la piedra.
sn-forage-defend-priority: íd para el alimento.
sn-relic-defend-priority: íd. para defender reliquias.
sn-town-defend-priority: íd para defender la ciudad.
sn-dock-defend-priority: íd para defender los muelles.

sn-defense-distance: distancia a la que los ítems (excluida la ciudad) serán defendidos.
sn-sentry-distance: distancia a la que la ciudad será defendida.


Atacando

sn-number-attack-groups: nº de grupos de ataque.
sn-maximum-attack-group-size: nº máximo de unidades que debe formar un grupo de ataque.
sn-minimum-attack-group-size: nº mínimo de unidades que debe formar un grupo de ataque.

sn-number-boat-attack-groups
sn-maximum-boat-attack-group-size
sn-minimum-boat-attack-group-size
idénticos para ataques por mar.

sn-percent-attack-soldiers: % de soldados que irán al ataque en la próxima ofensiva.
sn-percent-attack-boats: % de barcos que pasarán al ataque.

sn-attack-intelligence: especifica si se realizan o no ataques inteligentes, es decir, atacar sin ignorar unidades enemigas, retirarse en batallas imposibles de ganar, atacar por diferentes flancos... 0 ó 1.

sn-target-player-number: establece el nº del jugador a quién irán dirigidos los ataques.

sn-wall-targeting-mode: indica si el jugador atacará o no muros enemigos. 0 ó 1.


Otros

sn-relic-return-distance: distancia máxima entre el centro urbano y una reliquia para que ésta sea recogida por un monje.

sn-minimum-amount-for-trading: cantidad mínima de recurso que el jugador puede disponer
para venderla en el mercado.

sn-hits-before-alliance-change: número de ataques que el jugador permitirá a un aliado antes de cambiar su diplomacia a enemigo.

sn-attack-winning-player: controla si el jugador ataca o no al jugador de mayor puntuación. 0 ó 1.

sn-coop-share-attacking: controla si el jugador puede atacar a un enemigo que está atacando a su aliado. 0 ó 1.


CONDICIONES
Las condiciones son los hechos que se evalúan en una regla, y en caso de cumplirse, desencadenan las acciones.

Las condiciones constan de varias partes, separadas ellas por espacios en blanco. Primeramente la sintaxis de la condición, que veremos en esta sección. Una serie de parámetros (edificio, unidades, tecnologías etc) que se listan en las secciones posteriores. Números y un operador relativo [op-rel] que sirve para comparar el número con el parámetro.

El operador relativo adquiere las siguientes sintaxis:

Sintaxis
Significado
<
menor que
>
mayor que
<=
menor o igual que
>=
mayor o igual que
==
igual que
!=
distinto que

A continuación, una lista de las sintaxis más útiles y habituales para elaborar condiciones. Puedes consultar el listado completo en este enlace[airef.github.io].

(true) la regla se cumple siempre.

(building-type-count-total edificio op-rel nº) nº de un determinado edificio que tiene el jugador, como cuarteles, centros urbanos, castillos...

(players-building-count-total jugador edificio op-rel nº) evalúa el nº de un determinado edificio VISIBLE que tiene un determinado jugador, como cuarteles, centros urbanos, castillos...

(cc-players-building-count-total jugador edificio op-rel nº) evalúa el nº de un determinado edificio VISIBLES E INVISIBLES que tiene un determinado jugador, como cuarteles, centros urbanos, castillos...

(unit-type-count-total unidad op-rel nº) nº de una determinada unidad que tiene el jugador, como arqueros, unidades únicas, brulotes...

(players-unit-count-total jugador unidad op-rel nº) evalúa el nº de una determinada unidad VISIBLE que tiene un determinado jugador, como milicias, galeones, aldeanos...

(cc-players-unit-count-total jugador unidad op-rel nº) evalúa el nº de una determinada unidad VISIBLES E INVISIBLES que tiene un determinado jugador, como milicias, galeones, aldeanos...

(can-build edificio) evalúa si el jugador dispone de recursos o desarrollo tecnológico suficiente para construir un edificio.

(can-build-with.escrow edificio) igual que el anterior, evalúa además si el jugador tiene recursos de sobra para construir el edificio.

(can-train unidad) evalúa si el jugador dispone de recursos o desarrollo tecnológico suficiente para entrenar una unidad.

(can-research tecnología) evalúa si el jugador dispone de recursos o desarrollo tecnológico suficiente para investigar una tecnología.

(can-research-with.escrow tecnología) igual que el anterior, evalúa además si el jugador tiene recursos de sobra para investigar la tecnología.

(can-spy) evalúa si el jugador puede espiar o cometer traición.

(game-time op-rel nº) evalúa el tiempo transcurrido en segundos del inicio de partida.

(resource-found recurso) evalúa si el jugador ha encontrado un recurso determinado: oro, madera...

(housing-headroom op-rel nº) espacio poblacional del que dispone el jugador con las casas, castillos y centros urbanos disponibles.

(population-headroom op-rel nº) espacio poblacional del que dispone el jugador teniendo en cuenta su límite poblacional dado por el escenario.

(town-under-attack) evalúa si la ciudad está bajo ataque.

(defend-soldier-count op-rel nº) cantidad de unidades terrestres de defensa, una unidad militar recién creada se supone que está ya defendiendo.

(defend-warboat-count op-rel nº) igual que la anterior, para barcos de guerra.

(civilian-population op-rel nº) comprueba la población civil del jugador.

(military-population op-rel nº) comprueba la población militar del jugador.

(timer-triggered temporizador) evalúa si un cierto temporizador ha expirado.

(event-detected-trigger AI-señal) evalúa si se ha enviado una señal de IA mediante desencadenador del editor de escenarios.

(cheats-enabled) evalúa si las los códigos de trampas están permitidos en la partida.

(current-age op-rel edad) evalúa en qué edad tecnológica se encuentra el jugador.

(current-score op-rel nº) evalúa la puntuación del jugador.

(food-amount op-rel nº) cantidad de comida que tiene el jugador.
(wood-amount op-rel nº) cantidad de madera que tiene el jugador.
(gold-amount op-rel nº) cantidad de oro que tiene el jugador.
(stone-amount op-rel nº) cantidad de piedra que tiene el jugador.

(goal meta nº) evalúa si el estado en que se encuentra el jugador tiene un valor concreto.

(players-stance jugador diplomacia) evalúa la relación diplomática del jugador con otro jugador concreto.


ACCIONES
Las acciones se cumplen si se cumplen las condiciones de una regla.

A continuación, una lista de las sintaxis más útiles y habituales para elaborar acciones. Puedes consultar el listado completo de acciones en este enlace[airef.github.io].

(disable-self) hace que la regla solo se evalúe una vez, si se omite esta acción, la regla se evaluará continuamente.

(set-strategic-number sn nº) da un valor numérico a un determinado número estratégico.

(attack-now) otrdena un ataque.

(build edificio) construye un determinado edificio.

(build-with-escrow edificio) construye un determinado edificio con recursos de sobra.

(build-forward edificio) construye un determinado edificio alejado de la ciudad, cerca del enemigo.

(research tecnología) investiga una cierta tecnología.

(research-with-escrow tecnología) investiga una cierta tecnología con recursos de sobra.

(train unidad) entrena una determinada unidad.

(enable-timer temporizador nº) activa un determinado temporizador y define su duración en segundos.

(disable-timer temporizador) desactiva un determinado temporizador.

(cc-add-resource recurso nº) añade una cantidad de cierto recurso gratis al jugador.

(delete-building edificio) destruye un determinado edificio propio.

(delete-unit unidad) mata una determinada unidad propia.

(resign) el jugador se rinde.

)set-goal estado nº) define un estado y le da un valor numérico.

(set-signal IA-señal) envía una señal numérica al escenario para que se accione algún desencadenador.

(set-stance jugador diplomacia) establece un estado diplomático con un jugador.

(spy) el jugador espía o comete traición.

(tribute-to-player jugador recurso nº) tributa una cantidad de recurso a un jugador.


Parámetros de edificios
Edad Media
town-center
house
mill
farm
lumber-camp
mining-camp
outpost
palisade-wall
dock
fish-trap
barracks


Edad Feudal
archery-range
stable
blacksmith
market
watch-tower
gate
stone-wall


Edad de los Castillos
castle
krepost
siege-workshop
monastery
university
guard-tower
fortified-wall


Edad Imperial
wonder
feitoria
keep
bombard-tower


Existen además los parámetros de línea stone-wall-line y watch-tower-line para las torres vigia, guardia y homenaje.


Parámetros de unidades

villager
trade-cart


Infantería:

militiaman-line
spearman-line
eagle-warrior-line
condottiero

Muchos de estos parámetros son de línea. Por ejemplo, en militiaman-line, se hace referencia a milicias, hombres de armas, espadachines y/o campeones, en función del grado de desarrollo tecnológico del jugador.


Unidades de alcance:

archer-line
skirmisher-line
cavalry-archer-line
hand-cannoneer
slinger
genitour-line


Caballería:

scout-cavalry-line
knight-line
camel-line
battle-elephant-line
steppe-lancer-line


Armas de asedio

battering-ram-line
mangonel-line
scorpion-line
bombard-cannon
siege-tower


Barcos

fishing-ship
transport-ship
trade-cog
galley-line
fire-ship-line
cannon-galleon-line
longboat-line
turtle-ship-line
caravel-line
demolition-ship-line


Unidades de castillo:

my-unique-unit-line
petard
trebuchet


Religiosos:

monk
missionary


Parámetros de tecnologías
Casi todos los parámetros de tecnologías van precedidos por el prefijo ri-, para distinguir entre la tecnología y la unidad, y así evitar confusión.

Encontrarás estos parámetros en este enlace[airef.github.io].

Edades:

dark-age
feudal-age
castle-age
imperial-age


Galería de tiro con arco:

ri-thumb-ring
ri-parthian-tactics
ri-hand-cannon
ri-crossbow
ri-arbalest
ri-elite-skirmisher
ri-imperial-skirmisher
ri-heavy-cavalry-archer
ri-elite-genitour


Cuartel:

ri-tracking
ri-squires
ri-arson
ri-man-at-arms
ri-long-swordsman
ri-two-handed-swordsman
ri-champion
ri-pikeman
ri-halberdier
ri-eagle-warrior
ri-elite-eagle-warrior
ri-supplies


Establo:

ri-bloodlines
ri-husbandry
ri-light-cavalry
ri-hussar
ri-cavalier
ri-paladin
ri-heavy-camel
ri-imperial-camel
ri-elite-battle-elephant
ri-elite-steppe-lancer


Taller de asedio:

ri-capped-ram
ri-onager
ri-heavy-scorpion
ri-siege-ram
ri-siege-onager
ri-bombard-cannon


Muelle:

ri-careening
ri-dry-dock
ri-gillnets
ri-shipwright
ri-war-galley
ri-galleon
ri-fast-fire-ship
ri-heavy-demolition-ship
ri-cannon-galleon
ri-deck-guns
ri-elite-longboat
ri-elite-turtle-ship
ri-elite-caravel


Centro urbano:

ri-loom
ri-wheel-barrow
ri-hand-cart
ri-town-watch
ri-town-patrol


Castillo:

ri-conscription
ri-hoardings
ri-sappers
my-unique-unit-upgrade
my-unique-research
my-second-unique-research
ri-spies-treason

.
Herrería:

ri-forging
ri-iron-casting
ri-blast-furnace
ri-scale-mail
ri-chain-mail
ri-plate-mail
ri-scale-barding
ri-chain-barding
ri-plate-barding
ri-fletching
ri-bodkin-arrow
ri-bracer
ri-padded-archer-armor
ri-leather-archer-armor
ri-ring-archer-armor


Campamento maderero:

ri-double-bit-axe
ri-bow-saw
ri-two-man-saw


Campamento minero:

ri-gold-mining
ri-gold-shaft-mining
ri-stone-mining
ri-stone-shaft-mining


Molino:

ri-horse-collar
ri-heavy-plow
ri-crop-rotation


Mercado:

ri-cartography
ri-coinage
ri-bank
ri-caravan
ri-guilds


Monasterio:

ri-redemption
ri-fervor
ri-sanctity
ri-atonement
(441)
ri-heresy
ri-block-printing
ri-ilumination
ri-faith
ri-theocracy


Universidad:

ri-masonry
ri-guard-tower
ri-ballistics
ri-architecture
ri-keep
ri-heated-shot
ri-fortified-wall
ri-murder-holes
ri-stonecutting
ri-chemistry
ri-siege-enginers
ri-bombard-tower
ri-arrowslits


Otros parámetros
En las condiciones y acciones que hemos visto antes, además de los parámetros de edificios, unidades y tecnologías, existen otros parámetros:


Recurso

food wood gold stone


Jugador

Los parámetros de jugador pueden ser 1, 2, 3, 4, 5, 6, 7 y 8, de acuerdo al número asignado a cada jugador en el editor de escenarios. Existen también los parámetros comodín:

any-ally any-neutral any-enemy


Temporizador

Los temporizadores se asignan mediante números 1, 2, 3, 4, 5... un archivo de IA admite hasta 10 temporizadores.


AI-señal

El editor de escenarios permite enviar hasta 255 señales de IA al archivo de IA, y se enumeran con números: 1, 2, 3, 4, 5...


Edad

dark-age feudal-age castle-age imperial-age post-imperial-age

La Edad post-Imperial es idéntica a la Imperial, salvo que todas las tecnologías están ya desarrolladas, excepto el espionaje/traición.


Estado

Los estados se asignan con números 1, 2, 3, 4... hasta un máximo de 40.


Diplomacia

ally enemy neutral


12 Comments
igorhp  [author] 19 Nov, 2021 @ 11:14am 
hay que cambiar la extensión .txt a .ai y .per de los archivos
mayor.soto.72 19 Nov, 2021 @ 9:37am 
Hice lo que me dijistes, pero la IA que yo he creado sale como "documento de texto" y no como archivo PER, y no he podido subirlas
igorhp  [author] 18 Nov, 2021 @ 9:38am 
Los archivos de IA han de guardarse en C:\Program Files (x86)\Steam\steamapps\common\AoE2DE\resources\_common\ai No olvidéis que debe haber dos archivos: ai y per, con exactamente el mismo nombre, y evitad vocales acentuadas y caracteres no anglosajones
mayor.soto.72 18 Nov, 2021 @ 8:16am 
Tengo el DE y Windows 10, las IA creados por mi persona, el juego no las lee y no puedo subirlas
goncen 28 Aug, 2021 @ 10:50am 
Hola. fijate que tengo un problema cuando un jugador tiene varios enemigos. O ataca muy pocas veces y con pocas tropas a pesar de que e le indique en el grupo sea numeroso. el asunto es que con la accion "set-strategic-number sn-target-player-number <numeor de jugador>" se peude resolver pero solo ataca a uno bien, si quiero que ataque de forma aleatoria he tratado de en el editor poner la condicion "probabilidas" con variso desencadenadores que se activan y sedactivan atomaticamente cada cierto tiempo y le indique que active el desencadenador de la AI de que activara y desactivara

Ejemplo:


;


;atacar al jugador 2
(defrule
(event-detected trigger 3)

=>
(set-strategic-number sn-target-player-number 2)
(disable-self)
)
;atacar al jugador 3
(defrule
(event-detected trigger 4)

=>
(set-strategic-number sn-target-player-number 3)
(disable-self)
)
goncen 27 Feb, 2021 @ 3:28pm 
abusando de tu atencion. He intentado condicionar comando (load "archivo") esto por si de repete quiero que la AI se ponga demasiado agresiva, demasiado ,docil o que cambie por completo su comportamiento al cargar otra AI. por condiciones normales no se puede aunque lo he logrado con el comando (event-detected trigger X) en cada una de las condiciones de la otra AI aunque no se si exista un metodo mas simple
igorhp  [author] 24 Feb, 2021 @ 4:07am 
Goncen, para hacer eso, debes usar el comando defconst y mirar la identidad numérica del ninja, centurión etc en el editor de escenarios. Por ejemplo, la id del ninja es 1145:

(defconst ninja 1145)
(defrule
(unit-type-count-total ninja < 10)
(can-train ninja)
=>
(train ninja)
)
goncen 22 Feb, 2021 @ 8:06pm 
Solo un pequeña pregunta. Existe comandos para creacion de que no pertenecen a ningun arbol tecnologico de ninguna civilizacion como el espadachin oriental, el centurion, el ninja, el guerrero xolotl entre otros. Pregunto porque mediante lso desencadenadores he habilitado esa unidades pero al AI no lasp eude ocupar he intentado:
(defrule
(unit-type-count-total centurion < 3)
(can-train centurion-line)
=>
(train centurion-line)
)
ALEXyCia 12 Aug, 2020 @ 9:57am 
¿Cómo hago para que si la IA tenga siempre 32 granjas? O para que las reconstruya en vez de borrarlas
ALEXyCia 11 Aug, 2020 @ 2:02pm 
buff,eso de decirle a la IA que desarrolle todas las tecnologías de la herrería...