Pagina precedente | 1 | Pagina successiva
Stampa | Notifica email    
Autore

Guida: Lo Scripting

Ultimo Aggiornamento: 08/05/2012 14:29
OFFLINE
Post: 8.178
Post: 4.342
Registrato il: 30/06/2008
Città: NAPOLI
Età: 40
Sesso: Maschile
Pontifex maximus
Consul
Team Leader
Imperator
30/06/2008 21:56
 
Modifica
 
Quota

di THE HOUSEKEEPER
Ciao a tutti,

con questo tutorial a puntate cercherò di riassumere gli elementi essenziali per comprendere la funzionalità degli script e dei trigger utilizzati in M2TW.


CAPITOLI 1-4


1. REQUISITI
------------

Per prima cosa, per modificare i files di M2TW dovrete scompattare il gioco con l'apposito unpacker, disponibile dalla versione 1.1 di M2TW. Consiglio di scompattare una versione 1.2 o 1.3 di M2TW, e soprattutto di non intaccare la copia di M2TW che usate correntemente per giocare, ma di farlo su una copia a parte.
Il comando per scompattare è tools\unpack_all. Il processo richiederà molti minuti, e si libereranno svariati GB di files, quindi assicuratevi di avere tempo e spazio disponibili.
E' inoltre consigliato il seguente file (Docudemons 4.0):

www.twcenter.net/forums/downloads.php?do=file&id=1579

Questo file in formato Excel rappresenta il testo sacro per gli scripter di M2TW! Si presenta come una serie di schede (troverete in basso i collegamenti) in cui sono tabulati tutti i comandi implementati nel gioco, utili per modificare moltissimi files.
Infine, per modificare i file di testo nella cartella data\text dovrete convertire i file in formato bin, usando il converter di Alpaca:

www.twcenter.net/forums/downloads.php?do=file&id=1006


2. COS'E' UNO SCRIPT?
---------------------

Uno script è uno speciale comando che consente di intervenire dall'esterno sulle dinamiche di gioco di M2TW. In alcuni files (export_descr_ancillaries, export_descr_character_traits, export_descr_guild) i comandi di script sono generalmente indicati come "trigger".
Creare uno script non è un affare semplice, soprattutto per i modder con poca esperienza, quindi è consigliabile anzitutto prendere confidenza con i comandi preesistenti nei files in formato testo, specialmente nel: campaign_script, export_descr_ancillaries, export_descr_character_traits.
In generale, uno script si compone di tre parti:
- controllo eventi;
- condizioni;
- comandi.
Quindi, al verificarsi di un determinato evento, se sono rispettate le condizioni imposte, allora lo script impone certi comandi.


3. IL CAMPAIGN_SCRIPT
---------------------

Questo file (data/world/maps/campaign/imperial_campaign/campaign_script.txt) contiene gli script di una campagna. Viene eseguito dal gioco al caricamento della campagna e continua ad essere eseguito fino alla fine della campagna stessa. A differenza di RTW, lo stato del campaign_script viene allocato nei salvataggi, per cui i cambiamenti del campaign_script possono generare incompatibilità con salvataggi precedenti.
Il campaign_script originale si compone di varie parti, tra cui le invasioni dei Mongoli e dei Timuridi, la scoperta dell'America, la presentazione delle fazioni.


3.1 I monitor

I monitor rappresentano il comando base di uno script. Esistono due diversi tipi di monitor: il monitor_event e il monitor_conditions. Un monitor_event specifica il momento in cui il gioco eseguirà lo script; un monitor_conditions invece non richiede alcun evento, ma specifica la condizione per la quale il gioco eseguirà lo script (alla quale potranno aggiungersene altre).
I monitor, di qualunque tipo siano, sono seguiti dalle condizioni e dai comandi. Nota che in uno script può esservi soltanto un solo monitor, che deve essere debitamente concluso con un "end_monitor":

monitor_event [evento] [condizione]
and [eventuali altre condizioni]
[comandi]
end_monitor

oppure

monitor_conditions [condizione]
and [eventuali altre condizioni]
[comandi]
end_monitor

E' possibile concludere il monitor con un "terminate_monitor": in questo caso, lo script verrà eseguito solamente una volta, anche se l'evento o la condizione dettate dal monitor si ripeteranno.

monitor_event [evento] [condizione]
and [eventuali altre condizioni]
[comandi]
terminate_monitor
end_monitor

oppure

monitor_conditions [condizione]
and [eventuali altre condizioni]
[comandi]
terminate_monitor
end_monitor


3.2 Le condizioni

A valle di un monitor, si devono imporre le condizioni da verificarsi affinchè il comando dello script venga eseguito. Le condizioni possono essere più di una, in questo caso il comando finale sarà eseguito solo se tutte le condizioni saranno verificate; le condizioni successive alla prima dovranno sempre essere precedute da un "and".


3.3 I comandi

A valle delle condizioni, si deve impostare il comando (o i comandi) da eseguire nel caso in cui le condizioni siano verificate. In questo caso, i comandi successivi al primo NON devono essere preceduti da un "and".


3.4 I contatori

Il sistema di costruzione di uno script in sè è abbastanza rigido, anche a causa del limitato (sebbene numeroso) numero di eventi, condizioni e comandi reperibili nel Docudemons 4.0.
Per questo può essere estremamente utile, per rendere il processo più flessibile e realizzare script elaborati e complessi, ricorrere a dei contatori ("counter"), che sono variabili in grado di memorizzare valori interi positivi e negativi.
Per usare un contatore, è necessario anzitutto dichiararlo e settare il suo valore iniziale:

declare_counter [nome del contatore]
set_counter [nome del contatore] [valore]

In seguito, entro uno script, si potrà introdurre un comando per decidere se mutare il valore del contatore ("inc_counter") oppure settarlo a un nuovo valore ("set_counter"):

monitor_event [evento] [condizione]
and [eventuali altre condizioni]
inc_counter [nome del contatore] [valore da aggiungere]
end_monitor

oppure

monitor_event [evento] [condizione]
and [eventuali altre condizioni]
set_counter [nome del contatore] [valore]
end_monitor

Nel primo esempio, si vede che il comando inc_counter deve essere seguito dal nome del contatore e dal valore da aggiungere: quest'ultimo deve essere un numero intero, positivo o negativo (se è negativo, ovviamente si avrà una diminuzione del valore del contatore).
L'utilità dei contatori è legata all'uso di una particolare condizione ("I_compareCounter") che richiama il loro valore:

monitor_event [evento] I_CompareCounter [name] {<, <=, =, >=, >} [valore]
and [eventuali altre condizioni]
inc_counter [nome del contatore] [valore da aggiungere]
end_monitor

Con ovvio significato degli operatori matematici (nota: <= significa "minore o uguale a")


3.5 Comporre uno script

Per comporre uno script si dovrà montare, nella giusta logica e nel giusto ordine, tutte le parti che abbiamo fin qui esaminato: eventuale dichiarazione e settaggio dei contatori usati, monitor, condizioni, comandi.
Il reperimento delle stringhe, necessarie al raggiungimento del fine che si vuole raggiungere con lo script, si potrà effettuare nel Docudemons 4.0; sebbene alcune delle stringhe elencate non siano state implementate (e quindi non funzionino), la stragrande maggioranza di esse funzionano perfettamente.
Bisogna però specificare che l'accoppiamento evento-condizione non può essere casuale, ma deve sottostare a precise regole: tutti gli eventi e tutte le condizioni sono suddivisi in categorie; a un evento appartenente a una certa categoria, potrete associare una o più condizioni che dovranno necessariamente essere della stessa categoria.
Per reperire le stringhe, aprite il Docudemons 4.0; le schede denominate "commands", "conditions", "events" contengono rispettivamente le stringhe per i comandi, le condizioni e gli eventi. Il nome della stringa si trova in corrispondenza di "Identifier:", mentre la categoria a cui quella stringa appartiene si trova in corrispondenza di "Exports:" (per gli eventi) o "Trigger requirements" (per le condizioni).
Per i comandi, ci sono alcune stringhe speciali, reperibili nella sezione "console_commands", che rappresentano comandi utilizzabili durante il gioco (con l'opzione console, attivabile col tasto "ò") e, alcuni, anche nel campaign_script. Se utilizzate, queste stringhe devono essere sempre precedute da "console_command".


4. ESEMPIO
----------

Aprite il campaign_script.txt. Cancellatene tutto il contenuto, lasciando soltanto:

script
;qui inserirete i vostri script
wait_monitors
end_script

Nota: tutte le righe che iniziano per ; non vengono lette dal gioco, quindi sono utili per segnarsi appunti e annotazioni.
Ora si introdurrà, nell'apposito spazio (tra "script" e "wait_monitors"), uno script per introdurre un "malus" economico all'inizio di ogni turno, solo per le fazioni non "locali" (ovvero non utilizzate dal giocatore umano, ma dalla IA), dipendente dal livello di difficoltà della campagna scelto.

---

monitor_event SettlementTurnStart FactionType england
and not FactionIsLocal
and CampaignDifficulty = easy
console_command add_money england, -1000
end_monitor

monitor_event SettlementTurnStart FactionType england
and not FactionIsLocal
and CampaignDifficulty = medium
console_command add_money england, -500
end_monitor

monitor_event SettlementTurnStart FactionType england
and not FactionIsLocal
and CampaignDifficulty = hard
console_command add_money england, -200
end_monitor

monitor_event SettlementTurnStart FactionType england
and not FactionIsLocal
and CampaignDifficulty = very_hard
console_command add_money england, -100
end_monitor

---

Esaminiamo lo script: abbiamo usato un monitor di tipo monitor_event, quindi di seguito a questa stringa dovremo mettere una stringa-evento, reperibile nel Docudemons 4.0 entro la sezione "events". Abbiamo scelto "SettlementTurnStart", che (come spiega il Docudemons stesso) serve a innescare lo script ogni volta che una fazione inizia il suo turno.
In seguito dovremo mettere una o più condizioni. La prima che troviamo, di seguito a "SettlementTurnStart", è "FactionType". Anche questa stringa-condizione è stata reperita nel Docudemons entro la sezione "conditions". E' del tipo:

FactionType [codice della fazione]

e serve a innescare lo script solo se la fazione che inizia il turno è quella da noi impostata, nell'esempio in esame quella inglese.
Seguono poi altre condizioni (sempre reperibili nel Docudemons), ciascuna preceduta dalla congiunzione "and" e, eventualmente, da "not" (se vogliamo che la condizione non sia verificata).
"FactionIsLocal" serve a specificare che lo script viene eseguito solo se la fazione inglese che inizia il turno è comandata da un giocatore umano; se preceduta da "not", serve a specificare che lo script viene eseguito solo se la fazione inglese che inizia il turno è comandata dalla IA. "CampaignDifficulty" è del tipo:

CampaignDifficulty {<, <=, =, >=, >} [livello di difficoltà della campagna: very_hard, hard, normal o easy]

serve a specificare che lo script viene eseguito solo se la difficoltà scelta per la campagna è quella indicata, nell'esempio in esame "molto difficile" (very_hard).
Infine abbiamo il comando: "add_money", che permette di aggiungere fiorini alla fazione. "add_money" è reperibile nella sezione "console_commands" del Docudemons, quindi se usato nel campaign_script deve essere preceduto da "console". E' del tipo:

console_command add_money [codice della fazione], [valore da aggiungere]

Nota: la virgola dopo il codice della fazione è necessaria.
Il valore espresso deve essere un intero, positivo o negativo, ed esprime la quantità di fiorini aggiunta o sottratta alla fazione.

Lo script è completo. Ora dovrete estenderlo a tutte le fazioni, copiando il blocco e incollandolo per ciascuna di esse, e sostituendo tutte le stringhe "england" con "france", "hre", "spain" eccetera (per l'elenco completo dei codici delle fazioni, basta guardare il descr_strat.txt, in alto).



Alla prossima puntata!

Discussione originale:
empire.freeforumzone.leonardo.it/discussione.aspx?idd=7187856
OFFLINE
Post: 1.877
Post: 1.406
Registrato il: 23/02/2012
Città: CHIERI
Età: 34
Sesso: Maschile
Tester
05/05/2012 09:19
 
Modifica
 
Quota

Edit : postato su discussione originale
[Modificato da MuzioScevola99 05/05/2012 09:21]

Dura la volontà, ferma la fede.

"Nel mondo effimero e leggero coerenza è spesso cambiar pensiero"
OFFLINE
Post: 8.178
Post: 4.342
Registrato il: 30/06/2008
Città: NAPOLI
Età: 40
Sesso: Maschile
Pontifex maximus
Consul
Team Leader
Imperator
05/05/2012 14:01
 
Modifica
 
Quota

devi postare quì, non al link della discussione originale. quello è il vecchio forum non più usato.

"Ci vuole la carne nelle salsicce, il fumo se ne esce!" (proverbio)
"Il potere é quando abbiamo ogni giustificazione per uccidere e non lo facciamo " (Schindler's list)



Peninsula Italica Fan



OFFLINE
Post: 1.877
Post: 1.406
Registrato il: 23/02/2012
Città: CHIERI
Età: 34
Sesso: Maschile
Tester
05/05/2012 16:56
 
Modifica
 
Quota

Ciao scusa se posto qui volevo sapere una cosa :
l'evento FactionType funziona anche con una negazione ?
ad es : FactionType not france ? inoltre le condizioni si possono inserire con il prefisso "or" (una o l'altra) o solo "and" ( tutte e due ) ? cerco la scorciatoia di un tuo consiglio perche sono imbranato e a provare ci impiego due giorni.

Ps hai mai usato il comando I_CharacterTypeNearCharacterType ? funziona ?



Dura la volontà, ferma la fede.

"Nel mondo effimero e leggero coerenza è spesso cambiar pensiero"
OFFLINE
Post: 25.173
Post: 2.369
Registrato il: 08/07/2008
Sesso: Maschile
Tribuni militum consulari
Consul
Team Modder
08/05/2012 11:51
 
Modifica
 
Quota

... and FactionType not france NON FUNZIONA
devi scrivere ... and not FactionType france

non credo che il prefisso or venga letto, ma non ho mai provato.

I_CharacterTypeNearCharacterType funziona
OFFLINE
Post: 1.455
Post: 670
Registrato il: 08/02/2012
Città: SANTO STEFANO DI CAMASTRA
Età: 52
Sesso: Maschile
Tester
08/05/2012 14:28
 
Modifica
 
Quota

Re:
The Housekeeper, 08/05/2012 11.51:

... and FactionType not france NON FUNZIONA
devi scrivere ... and not FactionType france

non credo che il prefisso or venga letto, ma non ho mai provato.

I_CharacterTypeNearCharacterType funziona




Zio House, a proposito di scripting, perchè non dai un'occhiata al mio topic sulla problematica dell'EDU relativa ala fazione S.P.Q.R.??
Chissà che non trovi, con maggiore facilità, qualche soluzione alla portata delle modifiche/aggiustamenti che state apportanto alla beta-tester del Mod...
[Modificato da LouisAquila 08/05/2012 14:29]







Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum

Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Crea forum gratis, gestisci la tua comunità! Iscriviti a FreeForumZone
FreeForumZone [v.6.1] - Leggendo la pagina si accettano regolamento e privacy
Tutti gli orari sono GMT+01:00. Adesso sono le 23:22. Versione: Stampabile | Mobile
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com