[X2]Tutto sugli scripts (......o quasi)

Il luogo dove parlare di tutti i plug-in e i mod disponibili per X², X³, X³TC e X³AP.

Moderator: Moderatori per il Forum Italiano

User avatar
Hugoz
Posts: 2795
Joined: Wed, 5. Feb 03, 05:54
x3tc

[X2]Tutto sugli scripts (......o quasi)

Post by Hugoz »

Datemi tempo e metto tutto quello che trovo in giro , he he ......

Come usare lo script editor

premettiamo che gli scripts ufficiali , non necessitano piu' di essere installati manualmente , percio' questa guida serve solo a chi vuole provare scripts fatti in casa , trovati in giro nella rete o sul forum del modding .
I scripts non ufficiali sono opera dei fans di X2 , e percio' non testati a dovere , possono presentare diversi bugs o addirittura costringervi a reinstallare il gioco ,senza contare la scritta MODIFIED, che vi appare sulla sinistra.
Inutile dire che prima di tutto e necessario copiare i vostri vecchi saves in una cartella a parte .
La scrittura o creazione di uno script non ufficiale , puo' creare dei problemi con il gioco , e percio' non e' supportata ne da betatester ne da Egosoft


Detto questo, vediamo come funziona lo script editor :

-Iniziate il gioco in maniera normale e dirigetevi in un punto qualsiasi del settore dove vi trovate .
-Digitate "Thereshallbewings" facendo attenzione alla "T" maiuscola(non usate i Caps Lock , ma solo il tastino per le maiuscole).
-Premete poi in sequenza s/c/s , questo fara' partire la consolle degli scripts.
-Vi si presentera davanti lo script editor ossia "Manual Ship Computer Interface" (M.S.C.I.).
Questo e' lo strumento che puo' modificare quasi tutto nel gioco , dalla creazione/modificazione di una nave o fabbrica all'importo del vostro fondo in crediti .
-Con questo strumento potete crearvi i vostri scripts di gioco personalizzati .
Vi ricordo anche che i comandi sono in Inglese .

Piccolissimo esempio di script casalingo
Questo serve per imbrogliare sul gioco , io l`ho messo solo per scopo informativo , usare tutti quei crediti subito rovina il gusto e la durata del gioco.Ma almeno non mi stresserete su come si puo` fare!
Spoiler
Show
-Entrate nella consolle degli scripts da li` selezionate <new script>
-date un nome al vostro script es. Soldi0.1 e premete invio .
-spostate usando le frecce della tastiera su <New line> e premete invio .
-selezionate adesso tra le voci presenti Trade Commands
-adesso scegliete la voce Add Money to Player : <var/number>
-selezionate sotto "script imput" -> <number> e immettete la cifra
1999999999 invio e esc .
-salvate lo script appena fatto
-adesso cercate il vostro nuovo script evidenziatelo e premete R per farlo partire.
-vi chiedera` di selezionare la vostra nave , una volta selezionata uscite dall`editor .
-adesso controllate il vostro profilo e noterete che nel vostro acconto avete l`importo di 2.000.000.000 crediti .(assieme alla scritta modified :) )

Attraccando alla stazione piu` vicina salverete lo script , uscendo dal gioco
non succedera` nulla e ritornerete al punto di prima (lo script che avete creato e' inattivo , ma vi rimane nell'editor comunque) .



Questo e` solo un piccolissimo esempio di quello che potete fare con l`editor , un po` di pratica ed esperimenti e potete creare la vostra nave o la vostra fabbrica particolare ecc...

===============================================

Questo e un link che vi portera` ad altri link su come imparare ad usare e creare i vostri scripts , siccome lo script editor e` in Inglese il tutto non verra` tradotto . (magari se ho tempo butto giu` qualcosa)

Se create dei script interessanti li potete linkare sul forum , chi ha voglia di far verificare i propri scripts perche vengano messi sul gioco deve guardare il sito degli script e modding Inglese e contattare chi e' segnato QUI.

===============================================
===============================================
dove imparare a fare gli scripts ?


Questa e una guida su come fare gli script per i principianti che sto` facendo.

il nuovo MCSI programmers handbook in Inglese solo per utenti con il gioco registrato questo vi aprira' la porta a come fare ogni genere di scripts nel gioco , consigliato !

Links esterni

www.xai-corp.tk questi sono gli scripts della Xai corporation , il sito contiene anche un manuale disponibile a tutti . (Inglese)

http://www.xscripting.com (Inglese)

www.the-commander.com (Inglese) buono per moddings e scripts con diversi tutorials

http://x2source.com (Inglese)

===============================================
===============================================

Chi avesse voglia , puo fare un manualetto in Italiano , non necessariamente una traduzione , su come fare del modding al gioco. Io ne sto' facendo uno (tempo permettendo) sugli scripts per principianti . Il tutto verra' stikkato sopra !

Buon divertimento
Last edited by Hugoz on Thu, 9. Mar 06, 22:24, edited 10 times in total.
AMD K5 133 Mhz; scheda madre Fic Pio-3; Ram 32Mb ; scheda video 3dFx Vodoo; HD 1.5 Gb ; modem 28.8Kbps; OS Window 95 (monitor da 13", 256 colori)
http://it.universox.wikia.com/wiki/UniversoX_Wiki
User avatar
Hugoz
Posts: 2795
Joined: Wed, 5. Feb 03, 05:54
x3tc

Post by Hugoz »

Come fare il debug dei vostri scripts


Per accedere all Script debugger andate nel menu' di comando e premete "s"per richiamare l'editor. Il nome della nave che state testando sara listato li' es. "script debugging :your Argon Nova"

Il Debugger ha due modelli : Log e Trace , premete invio per accedere a questi comandi e cambiarli . Il comando "Clear the Log" serve anche per settare il tutto su off . Il menu' di debug mostra anche le linee che son state fatte ed e' differente dal Trace.

Mentre siete nel menu' di comando dello script editor evidenziate "script debug menu" e premete invio .
Ricordatevi di avere gia' il comando messo su Log o Trace per vedere ogni riga.

Le righe che prima venivano saltate adesso sono visibili .
Anche le routine interne e gli scripts che erano criptati, invece prima bisognava aspettare che la routine dello script finisse per vedere il log. Per esempio se era in funzione un comando come "segui" o "vola nel settore..."dovevate aspettare un bel po' di tempo prima che si fermasse.

1. La modalita' Log immagazina le linee mentre sono eseguite ,ma non rallenta di molto lo script. I valori delle variabili non sono mostrate.
Potete andare su' e giu' nel log per leggere le linee usando i tasti "pag su"o"pag giu'" e il tasti cursore , le linee piu' recenti le trovate sotto.
Il Log inizia quando mettete il settaggio su Log e rimane finche' non usate il comando "Clear the Log" per cancellarlo.La cosa puo' essere abbastanza lunga visto che il Log segna ogni oggetto.

2.La modalita' Trace invece mostra le linee che vengono eseguite(piu' quelle precedenti),ma, in compenso si aspetta che premiate invio per ogni linea. Se non lo fate alla fine della riga di comando la nave si blocca fino al prossimo invio, mentre invece il resto continua ad andare .Usate sempre pagsu' paggiu' per fare uno scrolling , l'ultima riga e' sempre evidenziata.
Quando ogni linea viene completata lo schermo mostrera' le variabili associate nel pannello piu' basso.Potete controllare tutti i dati usando il cursore della tastiera (frecce su e giu),in questo caso vi mostrera' solo i dati presenti.

Ricordatevi di cancellare tutti i log di debug e di mettere la modalita su off altrimenti se li lasciate il vostro gioco subira' dei rallentamenti e il vostro salvataggio di gioco aumentera in dimensioni .

Non sembra esista un comando per interrompere lo script mentre e' in funzione(se lo trovo lo metto)

Usare il metodo di debug e meglio che mettere le linee a casaccio e vedere che succede ;) .
Last edited by Hugoz on Thu, 24. Mar 05, 06:26, edited 1 time in total.
AMD K5 133 Mhz; scheda madre Fic Pio-3; Ram 32Mb ; scheda video 3dFx Vodoo; HD 1.5 Gb ; modem 28.8Kbps; OS Window 95 (monitor da 13", 256 colori)
http://it.universox.wikia.com/wiki/UniversoX_Wiki
User avatar
Hugoz
Posts: 2795
Joined: Wed, 5. Feb 03, 05:54
x3tc

Post by Hugoz »

GUIDA SULL ' AL ENGINE ( by Ticaki)

Questa guida e per chi ne capisce gia' qualcosa :

-Gli AL plugins sono integrati nel gioco dagli scripts 'init' detti anche'!al.plugin.*' o 'al.plugin.*' .Vengono eseguiti ognivolta che fate andare un nuovo gioco o caricate un save.

-Gli AL plugins sono registrati con il comando 'al plugin:register script' . Il plugin e' indentificato da uno scriptname il quale serve anche come identita' per il plugin.

Code: Select all

001   al engine: register script='al.control.pirat.tl.fill.ph' 
002   al engine: register script='al.control.pirat.all.race.m' 
003   al engine: register script='al.control.pirat.xenons' 
004   al engine: register script='al.control.pirat.all.race.ts' 
005   al engine: register script='al.control.pirat.sector.ap' 
006   return null
Prima di tutto il codice completo dello script di controllo per l'AL

Code: Select all

Script al.control.pirat.sector.ap 
Version: 0 
for Script Engine Version: 25 

Arguments 
1: plugin.ID , Var/String , 'plugin ID' 
2: plugin.event , Var/String , 'plugin mode' 

Source Text 

001   $plugin.data = get global variable: name=$plugin.ID 
002   $maxships = 2 
003   if not $plugin.data 
004    $plugin.data =  array alloc: size=3 
005    set global variable: name=$plugin.ID value=$plugin.data 
006    $plugin.data[1] = [TRUE] 
007    $temp =  array alloc: size=$maxships 
008    $plugin.data[2] = $temp 
009   end 
010    
011   if $plugin.event == 'init' OR $plugin.event == 'reinit' 
012   *$decr = sprintf: pageid=943 textid=1005, null, null, null, null, null 
013    al engine: set plugin $plugin.ID description to 'my pirat script' 
014    $interval = random value from 100 to 200 - 1 
015    al engine: set plugin $plugin.ID timer interval to $interval s 
016    return null 
017   else if $plugin.event == 'start' 
018    $plugin.data[1] = [TRUE] 
019   else if $plugin.event == 'stop' 
020    $plugin.data[1] = [FALSE] 
021   else if $plugin.event == 'isenabled' 
022    $on = $plugin.data[1] 
023    return $on 
024   else if $plugin.event == 'timer' 
025 @  = [THIS] -> call script 'al.pirat.sector.ap' :  plugin.data=$plugin.data  maxships=$maxships  Target Sector=LooManckStrats Vermächtnis 
026   end 
027   return null
-Il motore dell'Al usa questi eventi per comunicare con i plugins:
<init> <reinit> <timer> <start> <stop> <isenabled>

Questo viene fatto chiamando lo script plugin registrato con i due parametri : <PluginID=PluginScriptName> <event>

Code: Select all

Script al.control.pirat.sector.ap 
Version: 0 
for Script Engine Version: 25 

Arguments 
1: plugin.ID , Var/String , 'plugin ID' 
2: plugin.event , Var/String , 'plugin mode'
- dopo l'esecuzione dello script plugin 'al.plugin.*' , i plugin registrati sono chiamati una volta con le seguenti stringhe parametro:

<PluginID=PluginScriptName> <init> quando inizi un nuovo gioco
<PluginID=PluginScriptName> <reinit> dopo aver caricato un savegame

Code: Select all

011   if $plugin.event == 'init' OR $plugin.event == 'reinit'
- Internamente il motore dell'AL ha una variabile di stato per ogni plugins equivalente ad un intervallo di tempo. Se questo intervallo e > 0 lo script plugin viene chiamato con la stringa parametro

<PluginID=PluginScriptName> <timer>

ogni volta che l'intervallo di tempo finisce . Il timer pre gli intervalli puo' essere settato con il comando 'al plugin: set timer interval'

Code: Select all

014    $interval = random value from 100 to 200 - 1 
015    al engine: set plugin $plugin.ID timer interval to $interval s
-una descrizione del plugin puo' essere fatta manualmente con il comando 'al plugin: set description' . Che appare nel menu' Manage AL Plugin.

Code: Select all

012   *$decr = sprintf: pageid=943 textid=1005, null, null, null, null, null 
013    al engine: set plugin $plugin.ID description to 'my pirat script'
- Solitamente la descizione o l'intervallo di tempo vengono gestiti durante gli eventi <init> o <reinit>

- Gli eventi <start> e <stop> sono gestiti dal menu' dell'AL

Code: Select all

 017   else if $plugin.event == 'start' 
018    $plugin.data[1] = [TRUE] 
019   else if $plugin.event == 'stop' 
020    $plugin.data[1] = [FALSE]
Questo e' anche dove l'evento <isenabled> e' usato per determinare se il plugin sta andando o no. L'evento <isenabled> deve ritornare TRUE o FALSE .

Code: Select all

021   else if $plugin.event == 'isenabled' 
022    $on = $plugin.data[1] 
023    return $on
-Il resto deve essere fatto dal plugin . Di solito ci sara' una variabile globale dove lo stato delle informazioni viene salvato come un array.Questo array dovrebbe essere come questo :

0: data struttura-versione informazione
1: stato del plugin (abilitato/disabilitato)
2: dati addizionali di stato
3: ...

Per un esempio potete dare un occhiata agli script che ci sono nella 1.4 .
Poiche' il motore dell' AL adesso puo' fare un "looping" puo' essere pachato piu' facilmente.
Questo perche' dopo ogni evento di tempo la piu' recente versione dello script verra' usata.
Ovviamente il plugin deve dimostrare di saper utilizzare anche i vecchi dati e saperli aggiornare in caso , altrimenti non sarebbe di alcuna utilita'.
Ecco perche' la necessita' di immetere una parte data struttura - versione informazione nell'array.
Una esecuzione tipica di un plugin dell'Al sara' cosi' :

1. AL Engine: el.plugin.test
2. al.plugin.test: registro script=al.test
3. AL Engine: gestore di eventi <init> (chiama lo script al.test con i parametetri: 'al.test' 'init'
4. al.test: reazione di 'init': regola l'intervallo di tempo e la descrizione; initializza lo state-array e lo salva nella variabile globale (name=PluginID=PluginScriptName)
5. AL Engine: Aspetta la fine dell'intervallo di tempo e interviene sull'evento <timer>
6. al.test: eseguisce il codice sull'evento <timer> (nota: l' AL engine
non sa' se uno script ha l'autorizzazione a venire eseguito. Lo scripter invece si' e deve controllare da se' )

Code: Select all

$plugin.enable = $plugin.data[1] 
skip if $plugin.enable 
  goto end // return null
7. Continua con il punto 5.

Esempio

al.plugin.khaak -> init-Script
al.khaak.main -> AL-controlla-Script
al.khaak.event.timer -> Khaak avvio -Script

Script "al.plugin.khaak"

Code: Select all

001   * Register the Script as AL-Plugin 
002   al engine: register script='al.khaak.main' 
003   return null
Script "al.khaak.main" (principale)

Code: Select all

 
Arguments 
1: plugin.ID , Var/String , 'plugin ID' 
2: plugin.Event , Value , 'plugin event' 

001   $plugin.Vars = get global variable: name=$plugin.ID 
002    
003   if not $plugin.Vars 
004   * Define the Data-Array 
005    $plugin.Vars =  array alloc: size=2 
006    set global variable: name=$plugin.ID value=$plugin.Vars 
007   *  Plugin Version 
008    $plugin.Vars[0] = 0 
009   *  Plugin Status 
010    $plugin.Vars[1] = [TRUE] 
011   end 
012    
013   if $plugin.Event == 'init' OR $plugin.Event == 'reinit' 
014   * If game is started or loaded 
015    $description = 'Extra Khaakspawn' 
016    al engine: set plugin $plugin.ID description to $description 
017    $interval = random value from 1800 to 2700 - 1 
018    al engine: set plugin $plugin.ID timer interval to $interval s 
019    
020   else if $plugin.Event == 'isenabled' 
021   * Return Pluginstatus 
022    $enabled = $plugin.Vars[1] 
023    return $enabled 
024    
025   else if $plugin.Event == 'start' 
026   * Set Status to TRUE (enabled) 
027    $plugin.Vars[1] = [TRUE] 
028    
029   else if $plugin.Event == 'stop' 
030   * Set Status to FALSE (disabled) 
031    $plugin.Vars[1] = [FALSE] 
032    
033   else if $plugin.Event == 'timer' 
034   * Start the Script every time the timer is released 
035 @  = [THIS] -> call script 'al.khaak.event.timer' :  plugin ID=$plugin.ID  plugin data=$plugin.Vars 
036   end 
037    
038   return null 
Script "al.khaak.event.timer"

Code: Select all

Arguments 
1: plugin.ID , Var/String , 'plugin ID' 
2: plugin.Vars , Value , 'plugin data' 

001   $plugin.enabled = $plugin.Vars[1] 
002    
003   * If plugin is disabled goto label Exit 
004   skip if $plugin.enabled 
005    goto label Exit 
006    
007   $sector = [PLAYERSHIP] -> get sector 
008   $Ship.ObjClass = [PLAYERSHIP] -> get object class 
009    
010   if $Ship.ObjClass == Heavy Fighter M3 
011   * Khaak M4 
012    $khaak.type = Unbekanntes Feindschiff 
013    
014   else if $Ship.ObjClass == Cruiser M6 
015   * Small KhaakCluster 
016    $khaak.type = Unbekanntes Feindschiff 
017    
018   else if $Ship.ObjClass == Destroyer M2 OR $Ship.ObjClass == Battle Ship M1 
019   * Big KhaakCluster 
020    $khaak.type = Unbekanntes Feindschiff 
021   end 
022    
023   $pos.x = random value from -30000 to 30001 - 1 
024   $pos.y = random value from -30000 to 30001 - 1 
025   $pos.z = random value from -30000 to 30001 - 1 
026    
027   $khaak =  create ship: type=$khaak.type owner=Khaak addto=$sector x=$pos.x y=$pos.y z=$pos.z 
028   $khaak -> add default items to ship 
029    
030   Exit: 
031   return null
BalaGi, Kingdoms End, 28.03.2004
esempi di ticaki and ArcaJeth[D6a]
tradotto in Inglese da l3th4l
AMD K5 133 Mhz; scheda madre Fic Pio-3; Ram 32Mb ; scheda video 3dFx Vodoo; HD 1.5 Gb ; modem 28.8Kbps; OS Window 95 (monitor da 13", 256 colori)
http://it.universox.wikia.com/wiki/UniversoX_Wiki

Return to “Script e Modding per la Trilogia di X”