Modalità di vittoria personalizzate
Le condizioni di vittoria del gioco (Eliminazione, Limite di punteggio…) sono script .vs. Una mod può portare le sue, e compaiono da sole nel menu a tendina "Modalità" della lobby.
Esempio: esempi/esempio-vittoria (modalità "Dominio": vince chi controlla N insediamenti).
Lo script
Va in data\GameScripts\ della tua mod:
data\GameScripts\6 Dominio.vs
- Il nome del file è l'id della modalità, numero compreso. La lobby elenca le modalità per nome completo del file. Due mod entrano in conflitto solo se usano esattamente lo stesso nome (
6 Dominio.vsin entrambi). Quelle del gioco vanno dall'1 al 5. - Nella lobby compare senza il numero iniziale e passa per la traduzione: se il testo "Dominio" ha una voce nel tuo
loc, apparirà tradotto (Lingue). - La prima riga è la firma:
//void, int player, str param.playerè il giocatore (da 1 a 8).paramè il valore del limite scelto nella lobby (vedi più avanti). - Il gioco lancia 8 copie dello script, una per giocatore, ognuna nel suo thread, anche se i giocatori sono meno. Scrivilo dal punto di vista di un solo giocatore, che guarda gli altri. Deve reggere i posti vuoti: quello dell'esempio li considera eliminati perché non hanno né insediamenti né truppe.
Funzioni che si usano
| Funzione | A cosa serve |
|---|---|
EndGame(player, false) / EndGame(player, true) |
Il giocatore vince / perde. Poi, return |
SetPlayerStatus(player, linea, texto, important) |
Testo di stato in alto: riga 0 il nome della modalità, riga 1 l'avviso. Esiste anche SetPlayerStatus(player, linea, bool); gli script del gioco usano entrambe |
ClassPlayerObjs("BaseTownhall", player) |
Oggetti di una classe di un giocatore; .count li conta, .IsEmpty() dice se non ce n'è nessuno |
MilUnits(player) |
Quante truppe ha |
DiplAreAllied(a, b) |
Se due giocatori sono alleati |
Str2Int(param) |
Converte param in numero |
EnvReadInt / EnvWriteInt |
Variabili condivise tra gli script. Con giocatore (EnvWriteInt(player, "clave", n)) o senza (EnvWriteInt("modo", 1)) |
GetConst("…") |
Costanti di CONST.INI |
Translate("…") / Translatef("…", a, b) |
Testi con lingua |
Per vedere come fa il gioco, estrai i suoi script con estrai-dati.js (node strumenti\estrai-dati.js "<cartella del gioco>" <cartella di output>) e guarda GAMESCRIPTS\1 ELIMINATION.VS e 2 SCORE LIMIT.VS. Si può anche con il dump delle Patch, con il percorso completo: Dump=data/GameScripts/1 ELIMINATION.VS.
Il menu a tendina "Limite"
Lo riempie il gioco con voci di CONST.INI, sezione [GamePlay]. La chiave è il nome del file con _ al posto degli spazi, più un numero a partire da 0. Il valore è fatto di due parti separate da una virgola: il testo che si vede e quello che lo script riceverà come param.
L'esempio lo fa con una patch INI in patches\data\const.ini:
[GamePlay]
6_Dominio0 = 2 asentamientos, 2
6_Dominio1 = 3 asentamientos, 3
6_Dominio2 = 4 asentamientos, 4
6_Dominio3 = 5 asentamientos, 5
Se non metti voci, il menu a tendina resta vuoto e non c'è nessun limite da scegliere. Cosa riceva allora param non si è visto in partita: l'esempio ripiega su 3 se Str2Int(param) dà meno di 2.
Online
Una modalità nuova cambia il gameplay: tutti i giocatori devono avere la stessa mod.