Habilidades de las tropas
Cualquier unidad, normal o héroe, puede tener habilidades nuevas. Una habilidad es un comando (el botón) más un método de clase (el script que lo ejecuta), como los de los druidas y los sacerdotes. Todo son archivos del mod.
Ejemplo listo para copiar: examples/ability-example, "Respiro" (tecla Y) para soldados cuerpo a cuerpo.
Camino rápido
create-ability.js escribe las tres piezas. Necesitas la carpeta DATA del juego (Datos del juego):
node tools/create-ability.js <DATA> mods/my-mod respiro --class Melee --key y --energy-cost 5 --name "Second wind" --name-es Respiro
| Opción | Qué hace |
|---|---|
--class |
La clase que recibe el botón. Sirve una clase base (Melee, Military, Unit) y sus hijas la heredan, o una concreta (RHastatus, Hero). Tiene que existir en el juego |
--key |
Una letra |
--energy-cost |
Energía de 1 a 9. Si la indicas, el script ya la cobra |
--name, --name-es |
El nombre en inglés y en español. Sin --name, el botón muestra el id |
--description, --description-es |
El texto de ayuda en inglés y en español |
--button |
Un botón del juego (Actions/Mass Healing.bmp, el predeterminado) o uno tuyo (Imágenes personalizadas) |
Genera:
data\commands\Respiro.xml the command
patches\data\classes\Melee.sc.xml the method on the class (added to an existing patch if there is one)
data\mod\respiro.vs the script, with the signature and energy charge; you write the body
loc\spanish.loc.xml the Spanish texts (added to any that exist)
mod.json only if the folder has none
Te avisa si la tecla ya la usa otro comando de esa clase, de una clase padre o de una hija, y lista las teclas libres. Genera igualmente. No sobrescribe archivos: si el id ya existe en tu mod o en el juego, se detiene sin escribir nada.
Después escribe el cuerpo de data\mod\respiro.vs y pasa el validador.
Qué hace por dentro (hacerlo a mano)
Las tres piezas
1. El comando. Un <cmd> en un archivo nuevo de data\commands (el juego carga todos los .xml de esa carpeta):
<cmd name="respiro" priority="10" offset="1"
button="Actions/Mass Healing.bmp" key="y"
rollover="Second wind" description="..."
groupverifier="" groupdispatch="" voidgroupdispatch="1"
coststamina="5">
<src obj="Melee"/>
</cmd>
namees el nombre del comando y también elsigdel método.buttones la imagen del botón: una del juego o una tuya (Imágenes personalizadas).<src obj="…"/>son las clases que reciben el botón. Sirve una clase base y sus hijas la heredan:Melee(cuerpo a cuerpo),Military,Unit(todas) o una concreta (RHastatus). Cuidado conMilitary: incluye a los héroes, y la teclaYya la usa la habilidadskill_battle_crydel héroe.Meleeno choca.coststaminaes la energía que cuesta. La barrastaminade un soldado del juego es 10, así que el 5 del ejemplo gasta la mitad. El juego no la cobra por sí solo: la cobra tu script. Usa un valor de 1 a 9. La descripción emergente muestra el coste como energía si es menor que 10 y como lealtad si es 10 o más.keyes la tecla. Aparece en Controles → Contenido y se cambia allí (Teclas de mod).
2. El método. En la clase, con un parche para no reemplazar el archivo entero. Va en patches\data\classes\Melee.sc.xml:
<patch>
<add select="/class"><method sig="respiro" vs="data/mod/respiro.vs"/></add>
</patch>
Las clases hijas heredan los métodos.
3. El script. data\mod\respiro.vs. Un comando instantáneo recibe // void, Obj me, la unidad que lo ejecuta:
// void, Obj me
Unit this;
int cost;
this = me.AsUnit();
if (!.IsAlive)
return;
cost = GetCmdStaminaCost("respiro");
if (.stamina < cost)
return;
.SetStamina(.stamina - cost);
.Heal(60);
Los comandos con objetivo (un clic sobre otra unidad) reciben // void, Obj This, Obj target. Mira cómo lo hacen los del juego en
data\subai\druid_*.vs y data\commands\DRUID.XML. Todas las funciones están listadas en funciones-del-juego.txt.
Nombre y descripción
El comando se traduce usando su nombre como contexto. En un loc\<language>.loc.xml (Idiomas y textos):
<translationtableentry text="Second wind" context="respiro" result="Respiro"/>
<translationtableentry text="The soldier recovers 60 health (costs stamina)" context="respiro" result="El soldado recupera 60 de vida (gasta energía)"/>
El text es el rollover y el description del comando. Unidades nuevas muestra la otra forma (text="…@context"); languages.md dice que
valen las dos.
Habilidades pasivas
Una habilidad sin botón (curarse al matar, daño extra, un aura…) no necesita comando. Usa un evento (OnObjectKill, OnObjectDie) o
un <behavior> en la clase.
Multijugador
Sigue las reglas de Scripts: no leas nada local. Todos los jugadores necesitan el mismo mod.
Lo que no se puede hacer
- Crear nuevas especialidades nativas de unidad (
unit_specials) o habilidades de héroe (HeroSkills) con efecto propio: el efecto lo aporta el juego. Puedes usar y combinar las 25 que existen. Los comandos con script de arriba cubren casi todo lo demás, y las especialidades de unidad propias van por otro camino (Especialidades de unidad). - Efectos visuales y sonidos nuevos: reutiliza los del juego.