[ external image ]
Comandi dello Script Editor
Da quando il conto del giocatore può contenere molti più soldi, è stato necessario aggiungere nuovi comandi per far si che gli script potessero interagire con il nuovo conto corrente. Da notare che i vecchi comandi per accedere al conto del giocatore funzionano ancora, ma quando viene inserito un qualunque valore maggiore di 2 miliardi, tale valore viene automaticamente riportato a 2 miliardi. E' necessario l'uso dei nuovi comandi per poter risolvere questo inconveniente:
Code: Select all
• %0get billions of credits in player account
• %0get amount of credits under a billion in player account
• %0get full amount of credits in player account formatted as string: include separators %1, use millions suffix for very large numbers %2
• %0format large number pair as string: billions %1, units %2, include separators %3, use millions suffix for very large numbers %4
Il custom menu system è stato esteso per dare nuovi script che potessero garantire un maggior controllo dell'aspetto e del comportamento del menù custom:
Code: Select all
• add info line section to menu: %0
• add info line heading to menu: %0, heading=%1
• %0create menu return value: open menu, menu script=%1, script args=%2
• %0create menu return value: run script %1, script args=%2
• add trade bar to menu: %0, text=%1, min=%2, max=%3, current=%4, return value=%5, left text=%6, right text=%7
• add new grouping to menu: %0, text=%1, open=%2
• add end grouping to menu: %0
• set menu option: %0, maximum infolines=%1
• set menu option: %0, page up/down keys for info=%1
• %0create menu return value: command 'Open All Groups'
• %0create menu return value: command 'Close All Groups'
• add non selectable menu item: %0, text=%1
• set menu option: %0, use hover line=%1
• set menu option: %0, maximum menu height=%1 lines
Lo Script Editor ha pieno accesso al sistema dei grafici. I grafici possono essere aggiunti o tolti dalla lista dei grafici disponibili per un determinato oggetto o tipo di oggetto, e le aggiunte in questa lista richiamano altri script per far apparire gli attuali grafici. Usando il custom menu system, è inoltre possibile assegnare a questi script delle opzioni di visualizzazione per mostrare i dati finali in maniera diversa.
Code: Select all
• add player graph: script=%0 pageid=%1 textid=%2 group pageid=%3 group textid=%4 subgroup=%5 \(0-7\)
• remove player graph: script=%0 group pageid=%1 group textid=%2
• add class graph: class=%0 script=%1 pageid=%2 textid=%3 group pageid=%4 group textid=%5 subgroup=%6 \(0-7\)
• remove class graph: class=%0 script=%1 group pageid=%2 group textid=%3
• %0 add object graph: script=%1 pageid=%2 textid=%3 group pageid=%4 group textid=%5 subgroup=%6 \(0-7\)
• %0 remove object graph: script=%1 group pageid=%2 group textid=%3
• show graph using graph data array %0
Alcuni comandi possono interagire, entro certi limiti, anche con la Borsa Valori:
Code: Select all
• %0 set stock exchange unlock state: %1
• %1%0 get stock exchange unlock state
• %0 get all unlocked stock exchanges
• %1%0 get owned share count
• %0 set owned share count: %1
• set stock exchange corporate reports menu item: Enabled=%0
• set stock exchange company reports menu item: Enabled=%0
• set stock exchange commodity reports menu item: Enabled=%0
• %1%0 is stock exchange accessible
Certe statistiche usati dai grafici e dalla Borsa Valori sono state integrate tra i comandi per rendere i calcoli più facili e veloci. Di conseguenza i vostri script possono accedere anche a questi dati.
Code: Select all
• %0get trade stats for sectors: %1, only include these wares: %2, treat docks as producers: %3, include player docks: %4
• %0get trade stats for sector: %1, only include these wares: %2, treat docks as producers: %3, include player docks: %4
• %0get player ship usage time: %1
• %0get player object killed count: %1
• %1%0 get player object count in sector: class=%2
Le funzioni per il controllo della flotta sono disponibili attraverso una serie di comandi, dandoti la possibilità di personalizzare ed ampliare il comportamento delle tue flotte.
Code: Select all
• %1%0 get fleet ships: only currently with fleet: %2
• %0 set fleet leader: %1
• %0 remove from fleet
• %0 switch fleet leader to: %1
• %1%0 is in fleet
• %1%0 get fleet leader
• %1%0 is fleet leader
• %1%0 is currently with fleet
• %0 set with fleet: %1
La guerra in corso tra Terrestri e Commonwealth comporta un certo numero di dati relativi allo stato di guerra. Puoi ottenere le informazioni a proposito dell'attuale stato di guerra, oppure identificare navi e stazioni che sono coinvolte nella guerra, usando una serie di comandi. In questo modo, tuttavia, non puoi influenzare i progressi della guerra.
Code: Select all
• %1%0 get WarObject ID
• %0get name of current War State
• %0get name of next expected War State \(final choice may differ!\)
• %0is player currently observing War State
• %0get progress of current War State
• %0get start time of current War State
• %0get end time of current War State \(may change!\)
• %0did player observe currently active War State
• %0get duration of War State %1
Alcuni comandi che sono stati aggiunti fanno riferimento proprio al sistema degli script. Ora puoi settare il menù custom per i tuoi script e renderli accessibili direttamente dal menù opzioni nel gioco. Puoi inoltre verificare l'esistenza di determinati script oppure avere ulteriori comandi per assegnare degli hotkey agli script.
Code: Select all
• add script options: script=%0 pageid=%1 textid=%2
• remove script options: script=%0
• %0does script exist: %1
• %0does script name exist: %1
• %0register hotkey: page=%1 id=%2, to call script %3
• %0get hotkey index, script: %1
• %0register hotkey: page=%1 id=%2, to call script name %3
• %0get hotkey index, script name: %1
Ci sono ora più di 150 parametri nel gioco che possono essere regolati attraverso il file globals.txt. Un nuovo comando ti permette di accedere a questi valori. Da notare che esiste una limitazione per questo comando: infatti tale comando non potrà fornirti il valore di default usato dal gioco di un determinato parametro se non c'è alcuna voce corrispondente nel file.
Code: Select all
• %0get global parameter value: parameter=%1 default=%2
Alcuni script non si possono far rientrare all'interno di una categoria particolare. Questi principalmente servono per ottenere informazioni sulla mappa dell'universo e gli oggetti ivi presenti.
Code: Select all
• %0get ship class from subtype: %1
• %0get race id for race: %1
• %1%0 mine is armed
• %0set mine armed state to %1
• %1%0get complex hangar
• %0find gate: flags=%1, refobj=%2, max dist=%3, refpos=%4 object check=%5
• %1%0 is gate/beacon: %2 jumpable
• %0get minimum, %1, %2, %3, %4, %5
• %1%0 fire all turrets on target: %2, next target filter=%3
• add trade rank based on profit: race=%0 profit=%1
• %1%0 is sector visible
• %0 set job override name: %1
• %0get bullet flags of laser %1
• %0get colour code: red=%1 green=%2 blue=%3 transparency=%4
• %0get cluster sectors for race %1, startsector: %2, threshold: %3, only include known: %4
[ external image ]
Mission Director
Come lo Script Editor, anche il Mission Director è stato ampliato per coprire importanti funzioni presenti nel gioco. Allo stesso tempo abbiamo deciso di darvi l'accesso ai nostri tool per il debugging del Mission Director, per aiutarvi a sviluppare le vostre missioni meglio e più velocemente.
Nuove azioni che abbiamo inserito:
Code: Select all
• <set_notoriety> - set the notoriety between non-player races
• <activate_job> - activate a job that is defined in the jobs file as dormant
• <set_war_reports> - enable or disable war reports (the player can override this and disable them completely)
• <set_override_name_flags> - set which parts of an object's standard name will be displayed and/or spoken
• <set_group_override_name_flags> - set which parts of the standard name will be displayed and/or spoken for all objects in a group
Azioni che sono state estese:
Code: Select all
• <reward_player> - added a <war> node to adjust the player's "war score", i.e. their contribution to the war effort
• <create_ship> - added "safety" attribute to set whether ship should be moved to a "safe spot" or not on creation
• <find_object> - added "silent" attribute to supress errors when no object is found (applies to all similar actions)
• <find_object> - added "war" attribute to find only war/non-war objects (applies to all similar actions)
• <count_object> - added "silent" attribute to supress errors when no object is found (applies to all similar actions)
• <count_object> - added "war" attribute to count only war/non-war objects (applies to all similar actions)
• <set_objective> - added "active" attribute to make the objective the active one
• <set_state> - can also now be used to lock/unlock Stock Exchange stations
• <warp_object> - added "warp" attribute to determine whether warp effect should be shown
Nuove condizioni:
Code: Select all
• <war_score_changed> - event raised when the player influences a change in the current "war score"
Nuove variabili:
Code: Select all
• {player.money.billions} - billions of credits in the player's main account
• {player.money.billions.formatted} - billions of credits in the player's main account, formatted using digit separators
• {player.money.units} - amount of credits under a billion in the player's main account
• {player.money.units.formatted} - amount of credits under a billion in the player's main account, formatted using digit separators
• {player.money.large} - full amount of credits in the player's main account, formatted without digit separators
• {player.money.large.formatted} - full amount of credits in the player's main account, formatted with digit separators
• {player.menu.speech} - whether speech is currently being played
• {player.menu.speech.priority} - priority of currently active speech
• {object.subtype@object} - internal subtype code for object
• {object.warobjectid@object} - WarObject ID for object
• {object.locked@stockexchange} - for Stock Exchange stations, whether it is currently locked
• {object.locked.north@hub} - for the HUB, whether the specified gate is currently locked
• {object.realigntime@hub} - earliest time of next gate realignment
• {lookup.type.subtype@typecode} - internal subtype code for typecode
• {lookup.subtype@subtype} - internal subtype code for specified subtype value
• {war.state@statename} - id of specified war state
• {war.state.name@statename} - name of specified war state
• {war.state.duration@statename} - duration of specified war state
• {war.currentstate} - current war state
• {war.currentstate.starttime} - time current war state started
• {war.currentstate.endtime} - time current war state is expected to end
• {war.currentstate.duration} - total expected duration of current war state
• {war.currentstate.observed} - whether the current war state has been observed by the player (directly or via the map)
• {war.currentstate.progress} - percentage progress of current war state
• {war.nextstate.name} - name of next expected war state
• {war.nextstate.duration} - total duration of next expected war state
Un'altra modifica che abbiamo fatto è stato permettere alle variabili del Mission Director di essere usate nei campi che accettano valori boolean. Esempi di come questo possa essere utile si può vedere nella varietà di missioni disponibili nel gioco.
[ external image ]
Grafici
Coloro che tra di voi vogliono creare i propri grafici personalizzati avranno bisogno di maggiori informazioni sul come fare.
Avvertimento: i contenuti che state per andare a leggere non sono rivolti a scansafatiche.
Il comando dello script che permette di creare i grafici accetta un solo parametro, il quale corrisponde ad un insieme di tutti i dati richiesti per visualizzare le informazioni del grafico. Il formato dell'insieme è il seguente:
Code: Select all
graph = { graph-data [, labels [, x-axis [, y-axis [, series-labels [, series-colours ] ] ] ] ] }
graph-data = series-data | { series-data [, series-data [, series-data ... ] ] }
labels = { [ title [, x-axis-label [, y-axis-label [, descriptive-text ] ] ] ] }
x-axis, y-axis = item-labels | axis-range
series-labels { [ series-label [, series-label [, series-label ... ] ] ] }
series-colours { [ series-colour [, series-colour [, series-colour ... ] ] ] }
series-data = { x0, y0 , x1, y1 [, x2, y2 [, x3, y3 ... ] ] }
xN, yN = number | item-label
item-labels = { [ item-label [, item-label [, item-label ... ] ] ] }
axis-range = { [ min [, max [, step [, factor [, divisor [, format]]]] ] ] }
format = sprintf-format | @strftime-format
series-colour = RGB-colour
x-axis-label, y-axis-label, descriptive-text, series-label, item-label, sprintf-format, strftime-format = text | "{pageid,textid}" | { pageid, textid }
pageid, textid, min, max, step, factor, divisor = number
Esempio di uno di questi insieme di dati, che produce un grafico con una barra verticale:
Code: Select all
{
// graph data
{
// series 1 data
{ "a", 3, "b", 2, "c", 8},
// series 2 data
{ "a", 7, "b", 3, "c", 5}
},
// labels
{ "Title", "X-Axis", "Y-Axis", "This is a sample graph" }
// x axis (named items)
{ "a", "b", "c" }
// y axis (numbered with defined start/end but automatic step)
{ 0, 10 }
// series names
{ "Series 1", "Series 2" }
// series colours (red and yellow)
{ 0xffd20101, 0xffd2d201 }
}
Il display dei grafici è progettato per svolgere le sue funzioni il più possibile automaticamente, di conseguenza le impostazioni opzionali sono molto poche. Tre stili di grafici principali sono forniti; grafici a barre, a linee e grafico completo , con altri sotto-stili. Il grafico scelto tra questi dipenderà automaticamente dai dati forniti.
Un grafico a barre sarà mostrato se una ( e una sola) delle sequenze di dati degli assi contiene oggetti con etichette (testo) piuttosto che valori dell'asse (numeri). Se è la sequenza di dati dell'asse delle x a contenere oggetti con una etichetta verrà mostrata una barra verticale; se invece è l'asse delle y otterrai un grafico a barre orizzontale. Con piccole sequenze di dati per gli assi le barre per le differenti serie saranno mostrate una di fianco all'altra, ma se saranno troppo vicine il display automaticamente creerà un formato di sovrapposizione. Se ci sono semplicemente troppe barre potrebbero entrare nella colonna successiva e iniziare a confondersi; non puoi fare nulla in questo caso se non ridurre il numero di dati che stai provando a visualizzare.
Verrà mostrata una linea per il grafico se entrambi i set di dati degli assi contengono un range di valori piuttosto che delle etichette e i valori dell'asse x rispetto all'origine sono in ordine ascendente, ad esempio nessun valore di x è minore del precedente valore di x nella stessa serie. Se il grafico finisce e molti punti sono molto vicini tra loro il segno "x" per tutti i punti non viene inserito, e vengono mostrate solo le linee.
Un semplice grafico di punti verrà mostrato se i dati di entrambi gli assi contengono valori numerici e non etichette, ma i valori sull'asse delle x dei dati non sono in ordine crescente. In questo caso tutti i punti sono collocati nella loro esatta posizione, quindi i punti di alcune serie potrebbero nascondere quelli di un'altra. Un grafico di punti sarà inoltre mostrato se le informazioni di entrambi gli assi contengono etichette (testo). In questo caso le posizioni dei punti sono leggermente sfasati tra le serie, con le loro righe e colonne, in quanto la posizione esatta è meno importante. Se ci sono troppe serie i grafici inizieranno a sovrapporsi e non sarà facile distinguerle.
Per gli assi definiti da oggetti con etichetta, dovrai accertarti che tutti gli oggetti che vuoi siano mostrati si trovino nella lista. I punti nel grafico che non corrispondono a un oggetto con etichetta non verranno mostrati, e le righe e le colonne che non hanno punti corrispondenti rimarranno vuote.
Se non vengono forniti dati per gli assi, o se viene specificato solo un range parziale di valori, il display del grafico proverà a calcolare il range di valori degli assi e le dimensioni utilizzando le informazioni fornite dei punti. Se non vengono forniti dati e i dati del grafico per un determinato asse contengono solo nomi, il grafico userà questi nomi e genererà un grafico a barre, o a punti se le informazioni del grafico per entrambi gli assi contengono solo nomi. Se ci sono numeri il grafico elaborerà i valori minimi e massimi, e proverà a lavorare su una scala sensibile di etichette di valori. I valori denominati sulle assi contenenti numeri altrimenti mostreranno strani risultati!
Nota che i valori minimi e massimi degli assi useranno tutto lo spazio disponibile, quindi i valori minimi e massimi saranno sugli assi e sul lato del grafico rispettivamente. Per un grafico a barre ciò risulterà in barre il cui valore è uguale al minimo per essere invisibile, quindi tu normalmente dovrai fornire almeno un valore minimo, più basso di ogni altro dato, in questo caso. Se tu fornisci un valore minimo rispetto ai valori che sono inferiori al minimo non sarà visibile nè nei grafici a barre o in quelli a punti. Se tu fornisci un range di valori massimi i punti su un grafico a punti o a linee che sono oltre la soglia massima, non saranno indicati, mentre le barre si un grafico a barre li mostreranno con alcune strisce che indicano che i punti superano il valore massimo. Le linee su un grafico a linee saranno mostrate anche se vanno fuori dal valore massimo, sia oltre il massimo che oltre il minimo, e anche se ciò significa passare sopra il titolo del menu e sui bordi!
Per gli assi numerici, in aggiunta al valore minimo e massimo, puoi anche specificare un fattore e un divisore per ridimensionare le etichette degli assi verso l'alto o il basso. Per esempio, l'asse delle x può usare dati con una precisione di un minuto ma le etichette degli assi possono mostrare le ore aggiungendo un fattore di 1 a un divisore di 60.
Puoi anche specificare una stringa di formattazione che indica come il numero deve essere mostrato. Come con le etichette, la stringa formattata può essere aggiunto come semplice testo, nel formato "{pageid, textid}" o di un insieme di due elementi contenenti con il pageid e il textid come numeri interi. Se non vengono inseriti dati, il grafico usa lo standard sprintf "%d" per formattare il numero, ma questo può essere rimpiazzato con qualsiasi stringa in formato sprintf.
Se la stringa inizia con il simbolo "@", il resto della stringa viene interpretata come una stringa in formato strftime, permettendo alle etichette degli assi di mostrare una varietà di formati. Se il simbolo "@" non ha una stringa che lo segue verrà utilizzato il formato standard del gioco.
Il grafico proverà ad aggiustare le dimensioni per far quadrare le etichette, ma lo spazio è limitato quindi hai bisogno di evitare lunghe etichette nella maggior parte dei luoghi. Le etichette associate con l'asse delle y, sia l'etichetta principale dell'asse sia le etichette degli oggetti, hanno una certa flessibilità ma renderà il grafico più stretto. Vi è abbondanza di spazio per l'etichetta principale dell'asse delle x, ma le etichette degli oggetti per questi assi sono particolarmente limitate. Per ridurre l'effetto, il grafico userà automaticamente due linee di testo e alternerà tra queste se le etichette sono troppo ampie per essere aggiustate nello spazio disponibile. Se questo spazio non è ancora sufficiente le etichette degli oggetti saranno sovrapposte. Le serie di etichette dovranno essere sistemate su una linea nel pannello informativo, ma il testo descrittivo fluirà attraverso le righe richieste.
Nota che quando scegli una serie di colori, potresti trovare il nuovo comando script per ottenere il codice colore dai componenti rossi, verdi e blu.
Se hai letto ciò e sei ancora cosciente, allora congratulazioni, e buona fortuna per i tuoi prossimi grafici!