guida agli script "for dummies"

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

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

guida agli script "for dummies"

Post by Hugoz » Thu, 24. Mar 05, 07:05

Sto facendo questa piccola guida per i principianti chi volesse contribuire puo' postare sotto.

Chi fosse interessato a come modificare/creare dei settori suggerirei di dare un occhio qui' http://www.egosoft.com/x2/forum/viewtopic.php?t=64175 un eccellente guida di Reven (in Inglese) piena di dettagli , che quando avro' tempo tradurro' perche' ne vale proprio la pena.


Tralasciamo la storia di come aprire l'editor chi non lo sa' puo' andare a leggersi lo stick sopra.
-------------------------------------------------

All'interno dell'editor iniziate un nuovo script evidenziate <new script> e confermate con invio. Chiamate il vostro script "il.mio.primo.script" (non usate gli spazi , usate i punti invece.)

Cosa possiamo mettere per farlo andare ?

Come noterete lo schermo e' diviso in 3 sezioni , la parte sopra ha il nome del vostro script,la parte in mezzo e detta "arguments" (argomenti),quella in basso e per i codici "code".
Andate direttamente a quella per i "Code"evidenziate "return null" e confermate con invio.Evidenziate la linea vuota e "invio" ancora.

Adesso avete diversi tipi di "funzioni", la sezione che interessa a noi e' si trova in "General Commands" ,avrete capito che bisogna evidenziare la linea e usare invio per conferma ;) .
Cercate adesso la Funzione <retvar/if><refobj>get sector e selezionatela nel solito modo.

Quando selezionate una funzione per inserirla in uno script dovete ance definire la variabile di ritorno ( <retvar/if> ) prima che la funzione venga aggiunta al vostro script.Per questa funzione dobbiamo segliere un nome da dare alla variabile che sara' creata.
In parole povere vogliamo che il comando che ne risulta entri nella variabile e piu' tardi faccia qualcosa.
cos'e` una variabile ?
Dipende , puo` essere uguale a quello che decidete voi o a nulla , e un qualcosa che non esiste ,serve per dare un nome a qualcosa per poi assegnarli un valore, possiamo anche cambiare il valore assegnato a quella variabile .
Per esempio vi servono 5 bofu da una fabbrica , potete creare due variabili.
La prima chiamata $Quantita e gli assegnamo un valore di 500 e un altra chiamata $Bene e gli assegnate il valore Bofu .

Adesso immaginate di avere la vostra bella navicella e voi dovete fare uno script per mandarla in una fabbrica a prendervi il bofu.

Gli date ordine di andare nella fabbrica:

acquista $Quantita` unita` di $Bene

(acquista $500 unita` di $Bofu)

che sarebbe prendimi 500 bofu

adesso immaginate che una vostra fabbrica dopo un po` necessitasse di altro bofu e i 500 che avete preso non vi bastassero , semplicemente cambiate il valore a 1000

e darete il comando :

acquista $Quantita` unita` di $Bene

(acquista $1000 unita` di $Bofu)

e sarebbe come dire prendimi 1000 unita` di bofu


come noterete non vi serve cambiare tutta una riga ma solamente la variabile $Quantita` , come se volete cambiare prodotto bastera` cambiare la variabile $Beni con ad esempio soja invece di bofu

Noterete anche che ci sono altre selezioni piu' sotto come THIS, IF, CONSTANT, ecc... Al momento non ci interessano saranno spiegate piu' avanti.Voi selezionate solo <variable> e confermate.

Vi sara` chiesto di inserire il nome della vostra variabile : chiamiamola "Sec" , percio inserite Sec e confermate . Adesso verrete riportati al vostro script e troverete una nuova linea $Sec=<?> get sector
Questa linea dice che la variabile $Sec sara` uguale al settore in riferimento a dove si trova l`oggetto , dobbiamo solo dire che tipo di oggetto e` .
Puntate il cursore su <?> e confermate .

Ancora vi verra` presentata una lista di selezioni , ma questa volta invece di <variable> scegliete "THIS" .

Questa cosa ‘THIS’ non e` "esattamentetecnicamente" una variabile , ma un qualcosa di simile ,sara` sempre uguale all`oggetto sul quale sta` girando lo script.

(lo spieghero` piu` avanti senno ci si incasina troppo )

Cosi` abbiamo $Sec=[THIS] get sector

adesso dobbiamo definire che cosa e` $Sec , e ora di usare la variabile $Sec per qualcosa.

Inserite una nuova linea sopra "return null" come prima . Evidenziatela e confermate.Vedrete ancora una lista di funzioni, andate in "Logbook" e selezionate la funzione Write to player logbook <value>

Adesso il vostro script sara` una cosa del genere :

Code: Select all

$Sec=[THIS] get sector
Write to player logbook <?>
Return null
usando il cursore andate su <?> e confermate.

Ancora avrete una lista di selezioni inclusa <variable> e [THIS] che abbiamo gia` usato..Sopra noterete la sezione chiamata variables con la variabile che abbiamo creato con la linea $Sec=[THIS] get sector .selezionatela e ritornerete al vostro script che adesso e` cosi :

Code: Select all

$Sec=[THIS] get sector                      
Write to player logbook $Sec
Return null
#sulla prima riga verra' assegnato alla variabile il valore(codice id e nome) delsettore dove ci si trova.
#sulla seconda verra' scritto sul libretto del giocatore il valore della variabile
#fine script

adesso lo script e fatto premete esc e quando vi chiede di salvare confermate con yes , in questo modo ritornerete alla lista degli scripts.
cercate il vostro nuovo script e selezionatelo premete il tasto "r" per farlo partire.

Siccome non lo stiamo facendo partire dal menu` comando della nave , vi si chiede di selezionare un oggetto per farlo partire . Selezionate "select target" e confermate con invio. Dalla mappa selezionate il settore dove vi trovate , la vostra nave e confermate.

Lo script adesso e` partito , andate nel vostro libro dei logs e il primo messaggioche trovate vi dira` in che settore siete.
Congratulazioni avete appena fatto il vostro primo script :D .

-------------------------------------------------------------------------


Allora abbiamo capito(un po') come definire e cos'e una variabile e a combinarci qualcosa.
Probabilmente avrete notato la differenza tra i due comandi ,dove uno puo' ritornare una variabile “definisce il settore” e uno che non puo' “scrivi sul libretto dell giocatore” (log book). La maggior parte delle funzioni negli script riescono a ritornare come variabili , ma noi non sempre volgiamo che facciano questo .

Per esempio: @<retvar/if><refobj> fly to station <var/station> .

Questo e' il comando generalmente usato per far volare una nave ad una fabbrica.Siccome il suo uso e semplicemente quello di far andare una nave in una stazione , non produce una variabile di alcuna utilita'.

Cosi' noi vogliamo dirgli di non ritornare nessuna variabile
Nell'editor iniziamo un nuovo script chiamandolo”attracca.alla.stazione” .
Evidenziate “return null” assicuratevi che sia selezionata e premete invio.
Adesso siete al menu' delle funzioni .

Andate in “fly commands”(comandi di volo),evidenziate ancora la funzione @<retvar/if><refobj>fly to station<var/station> e poi invio .

Con questo comando vi sara' chiesto di selezionare la prima variabile prima che sia aggiunta allo script. Andate giu' e evidenziate <no return variable> ,premete invio per conferma.Adesso sarete portati indietro al vostro script che sara' cosi' :

Code: Select all

@<?> fly to station <?>
return null
Il simbolo @ significa semplicemente “non ritornare una variabile”.Se volete usare un comando, ma non volete usare una variabile che produrra' e non avete l'opzione <no return variable> come sopra createne una a caso , in questo caso dovrete selezionare <variable>e crearne una senza significato (delle lettere a caso vanno benissimo), otterrete cosi' un comando del genere :

$efzrtodlse = <?>  fly to station <?>

E' verra' eseguito come

@<?> fly to station <?>

 premete esc e' salvate lo script .

-----------------------------------------------------------------------------

Gli “Arguments”(argomenti) 

Qualche volta provando uno script non si ha la possibilita di interromperlo e inserire un nuovo comando.
Per esempio non come potreste fare dal menu' di comando mentre giocate ,dove ,quando fate partire un comando vi chiede di segliere un settore o un oggetto che viene quindi passato allo script .
Facciamo un esempio.Andate nell'editor e aprite il vostro primo script (se avete seguito la guida fino ad adesso).
La sezione di codice è questa :

Code: Select all

$Sec=[THIS] get sector
Write to player logbook $Sec
Return null
La variabile $sec era uguale al settore dove l'oggetto (la vostra nave) si trovava al momento in cui e' partito lo script , e quindi riportava questo valore assegnato al vostro libretto del giocatore(player logbook).
 Si puo' scegliere quale oggetto sia “get sector”(dichiara il settore di )quando usiamo questo comando anche senza mettere gli “arguments” (argomenti)perche' non viene fatto partire dal menu' di comando di una nave.Vi ricordate il “THIS” (questo)era uguale all'oggetto(la nave) per il quale lo script stava funzionando,quindi ,facendolo partire dall'editor ,poi abbiamo dovuto selezionare il “target” (obbiettivo)per lo script.
 Se lo facessimo partire dal menu' di una nave , il target dello script sara' automaticamente settato per l'oggetto (la nave) in questione(quella che si sta' usando), ovviamente puo' anche essere usato dal menu' di altre navi per sapere in che settore si trovano.
 Ome regola generale al primo script che facciamo, dobbiamo avere un modo per riempire le variabili in qualche maniera , per questo usiamo gli “arguments”.

 Vediamone qualche esempio per il nostro script :

 Andate alla sezione “Arguments” ed evidenziate <new line> (nuova linea) , e confermate.
 Vi sara' chiesto di dare un nome al vostro argomento , questo sara' il nome della variabile che creerete con il vostro argument ,quindi scrivete “ship”(nave) e confermate.
 A questo punto l'editor vi dara' una lunga lista di opzioni comprendenti ogni oggetto del gioco.
Andate sotto usando le frecce fino a che trovate Var/Ship quindi confermate .
 Adesso vi sara' chiesto di dare una “imput string” ossia dare un senso al vostro argument , digitate “seleziona nave” e confermate .Quando userete lo script l' imput string usera'il testo che avete scritto e vi chiedera' di assegnare un valore richiesto dalla variabile.
 Tornati indietro il vostro' script avra' quest'aspetto :

Code: Select all

#Arguments

Ship <Var/ship > Ship

#codice

$Sec=[THIS] get sector
Write to player logbook $Sec
Return null
 
 Digitate esc e salvate .

Cercate il vostro script nella lista e premete “r” per farlo partire , come prima vi chiedera' di selezionare un obbiettivo(target) ,selezionate<select target> e confermate.
Adesso selezionate dalla mappa che vi apparira' il settore e la vostra nave.Dopo vi chiedera' “seleziona nave” (esattamente la stessa ,che avete scritto nella stringa di imput del vostro argomento).
Selzionatela quindi cercate un settore differente dal vostro e selezionate una nave qualsiasi in quel settore , questa nave sara' il valore assegnato alla variabile $ship.
Dovreste ritrovarvi nella lista degli script . Uscite dall'editor e' andate a controllare il vostro logbook , ma vedrete che ci sara' solo il settore dove vi trovate e non il settore e la nave che avete scelto voi . Tornate all'editor e riaprite lo script , cosa e' successo ?

Code: Select all

#Arguments

Ship <Var/ship > Ship

#codice

$Sec=[THIS] get sector
Write to player logbook $Sec
Return null
 
La variabile “Sec” e' uguale al settore dove si trova l'oggetto che sta usando lo script ( $Sec=[THIS] get sector)e non alla nave che abbiamo scelto in risposta all'argomento “Ship”.
Questo è il perche' si ci si e' trovati il settore dello script target (dove sta' la tua nave)segnato nel logbook,anziche di quello che si era selezionato alla richiesta “seleziona nave”.
Andate sulla riga $Sec=[THIS] get sector evidenziate [THIS] e confermate. Nella lista che vi apparira' , vi si presenteranno dei nomi da assegnargli , ma appena sopra troverete la vostra variante Sec e li vicino la variabile Ship . Selezionate Ship e confermate .

 Il vostro script adesso sara' :

Code: Select all

#Arguments

$Ship <Var/ship> Ship

#Codice

$Sec=$Ship get sector
Write to player logbook $Sec
Return null
(il [THIS] e stato trasformato nella variabile $Ship)

Uscite e salvate , fate partire lo script come sopra ( r )segliete la vostra nave e quando vi chiedera' “selezionare nave”fate come prima segliete un'altra nave in un settore qualsiasi differente dal vostro.
Adesso lo script e' partito uscite dalla lista e dall'editor ed andate nel logobok , vedrete subito che il nuovo messaggio vi mostrera' un altro settore (quello che avete scelto voi prima).
Ecco questo e un “argomento” o ”argument” .
In pratica lo script vorrebbe iniziare , ma , vorrebbe anche sapere cosa deve fare prima . Potete provare a mettere il risultato del vostro argument e farci qualcosa 8) .
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

Post Reply

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