Oggetti nuovi
Gli oggetti che portano gli eroi (amuleti, erbe, gemme…) sono dati. Il gioco ne ha 42 in data\items.xml, e una mod può aggiungere i suoi
con una patch, senza compilare nulla.
Esempio pronto da copiare: esempi/esempio-oggetto.
Via rapida
L'oggetto dell'esempio, con ogni eroe che lo riceve, si ottiene con:
node strumenti/crea-oggetto.js <cartella della mod> "Amuleto de ejemplo" --danno 10 --armatura 5 --dai-eroi
Genera, dentro la cartella della mod:
patches\data\items.xml: l'oggetto con tutti i suoi attributi. Se la patch esiste già, lo aggiunge senza toccare quelli presenti.- Con
--dai-eroi:patches\data\classes\Hero.sc.xml(un comportamento in più per la classeHero) edata\mod\dar_<id>.vs, lo script che dà l'oggetto a ogni eroe che non ce l'ha ancora. SeHero.sc.xmlesiste già, ci aggiunge anche questo. mod.json, solo se non ce n'era uno.
| Opzione | A cosa serve |
|---|---|
--vita, --danno, --armatura, --livello, --esperienza |
Quello che aggiunge a chi lo porta. --armatura imposta armor_slash e armor_pierce |
--icona |
Un'icona del gioco, per esempio "gameres/icons/items/Belt of might.bmp". Senza, quella dei denti d'orso |
--descrizione |
Il testo della finestra dell'oggetto. Senza, uno in inglese come Adds 10 to damage and 5 to armor |
--dai-eroi |
Ogni eroe riceve l'oggetto quando compare |
--dati <DATA> |
Controlla che nessun oggetto del gioco abbia già quell'id |
Ripetere il comando con un altro id aggiunge un altro oggetto. Se l'id esiste già nella tua patch o nel gioco, lo segnala e non scrive nulla.
Non genera use_script, equip_script né kill_script, né usecount o cursed: aggiungili a mano all'<item> (Un oggetto con effetto proprio). Quello che genera è uguale all'esempio.
Cosa fa dentro (come farlo a mano)
Un oggetto
Una patch di data\items.xml, in patches\data\items.xml dentro la tua mod:
<patch>
<add select="/items">
<item id="Amuleto de ejemplo"
image="gameres/icons/items/Bear Teeth.bmp"
sound="data/sound entities/ItemUse.xml"
level="0"
name="Amuleto de ejemplo"
description="Adds 10 to damage and 5 to armor"
important="no">
<bonus health="0" damage="10" armor_slash="5" armor_pierce="5" level="0" experience="0"/>
</item>
</add>
</patch>
| Attributo | A cosa serve |
|---|---|
id |
Il nome con cui lo chiamano gli script (AddItem("…")). Unico |
image |
L'icona: una del gioco, o la tua dentro gameres/icons/items/ nella tua mod (un BMP) |
name, description |
Quello che si legge nella finestra dell'oggetto |
level |
Livello minimo dell'eroe per portarlo (nessun oggetto del gioco usa un valore diverso da 0) |
important |
yes o no. Se è un oggetto speciale (viene mostrato a parte) |
usecount |
Quante volte si usa: 1 per quelli monouso, di più per quelli a cariche (1000 di cibo nel grano) |
cursed |
1 se non si può togliere, 0 se sì. È un numero, non yes: il gioco lo legge come numero e qualsiasi testo vale 0, senza avvisi. |
Il <bonus> si somma a chi lo porta: health, damage, armor_slash, armor_pierce, level ed experience. Con health_percent,
damage_percent, armor_slash_percent e armor_pierce_percent aggiunge una percentuale invece di un numero fisso.
items.xml accetta qualche attributo in più (customdata, location_script, object_script, attacheddie_script), non documentato; guarda come li usano gli oggetti del gioco.
Un oggetto con effetto proprio
Uno script che parte quando l'eroe lo usa:
| Attributo | Quando parte | Firma |
|---|---|---|
use_script="file://data/mod/mi.vs" |
Quando il giocatore usa l'oggetto | // void, Obj owner |
equip_script |
Quando lo equipaggia | Guarda quelli del gioco |
kill_script |
Quando uccide qualcuno con quell'oggetto | Guarda quelli del gioco |
Scrivi il percorso con file://, come gli oggetti del gioco (file://data/ItemScripts/….vs).
Gli script del gioco sono in data\ItemScripts; per vederli, estrai i dati con estrai-dati.js. Quello
delle erbe curative:
//void, Obj owner
CreateFeedback("Heal", owner.AsUnit());
owner.Heal(owner.maxhealth);
ItemUsed(1);
ItemUsed(n) consuma n usi dell'oggetto. Con usecount="1" sparisce quando lo usi.
Come ottenerlo in partita
- Darlo con uno script:
Obj::AddItem("id")restituiscetruese c'è posto nell'inventario. L'esempio lo fa in un comportamento della classeHero(patches\data\classes\Hero.sc.xml), che gira con ogni eroe che compare. Controlla prima che non ce l'abbia già (FindItem("id").IsValid): quando carichi una partita salvata lo script riparte da capo. - Farlo cadere quando si uccide: un evento
OnObjectKillche chiamiAddItemsu chi uccide, oppureDropItema terra. - Nelle rovine e nei tesori della mappa: guarda
data\classes\BaseRuins.sc.xml. Distribuisce oggetti con righeitemtypeelevelperitem. Nei dati del gioco non lo usa nessun'altra classe, nemmeno i negozi delle civiltà.
Gli oggetti cambiano il gameplay: in una partita online tutti i giocatori hanno la stessa mod.