Scripting - Labels, Threads e condizioni


Programmi: Sanny Builder
Autore: _GriLLeX_P4E

I thread sono come una finestra di windows, non hanno bisogno di niente, perchè lavorano da soli, sono usati soprattutto per le missioni.
NB: In uno script non è possibile crearne più di uno.

Ora vediamo come si crea un thread:

- Thread.
004F: create_thread @label
004E: end_thread

Analizziamo il codice:
create_thread: crea un thread collegato a un label.
end_thread: chiudiamo il thread specificato sopra.

Ora, verrà la parte vera e propria del thread:
:label
03A4: name_thread 'LABEL'

:LABEL_1
wait 250
if
0AB0: key_pressed 8
else_jump @LABEL_1
jump @LABEL_2

:LABEL2
wait 100
01E3: text_1number_styled 'M_PASSED' 0 5000 ms 1 // MISSION PASSED!

Analizziamo il codice riportato sopra:
:label: Label del thread. ( vedi sotto le sue funzioni )
name_thread 'LABEL' : è il nome del thread, i label creati entro di esso verranno rinominati in LABEL_NUMEROSEQUENZA.
Le altre funzioni sono dei label, leggi sotto per la spiegazione.
Questo qui sopra è un thread, se io schiaccio il tasto 8 in game ( SPRINT ) mi comparirà la scritta MISSION PASSED!. Ora che vi ho fatto un esempio dei thread, passiamo a i label.

- Labels.
I Labels sono delle semplici FUNZIONI che vengono eseguite nel tempo che deciderete.
Esempio:
:LABEL1
wait 250
if
Pickup.Picked_up($PICKUP)
jump_if_false @LABEL1
Actor.Health($PLAYER_ACTOR) = 250

Analizziamo:
:LABEL1 : Nome del label, potete dargli qualsiasi nome basta solo che ricordate di cambiarlo nei jump, else_jump e etc.
wait 250 : attende 250 millescondi prima di eseguire le azioni di sotto, 1000 = un secondo, 10000 = dieci secondi, 60000 = 1 minuto.
if : Condizione spiegata sotto.
Pickup.Picked_up($PICKUP) : Controlla se la variabile $PICKUP pickup è stato raccolto.
jump_if_false @LABEL1 : Condizione spiegata sotto.
Actor.Health($PLAYER_ACTOR) = 250 : Dà all'attore $PLAYER_ACTOR ( CJ ) 250 HP di vita.
Questo label, controlla ogni 250 millesecondi se il giocatore ha preso il pickup $PICKUP e dà 250 HP se è stato preso, se non è stato preso ricontrolla andando di nuovo a LABEL1.

- Condizioni IF, IF AND, IF OR, JUMP e ELSE_JUMP.
Le condizioni sono molto importanti per chi crea mod, in quanto verificano delle cose.
IF: Determina se una sola cosa è accaduta, esempio controlla se il giocatore è morto:
if
Actor.Dead($PLAYER_ACTOR)

IF AND: Controlla se 2 o più cose sono accadute, esempio controlla se il player stà guidando e se il veicolo ha l'idraulica:
if and
Actor.Driving($PLAYER_ACTOR)
Car.HasHydraulics($AUTO)

IF OR: Controlla se più cose sono accadute, senza farci caso a quelle che non lo sono. Esempio controlla se le porte dei due garage sono aperti:
if or:
03B0: garage 'BODLAWN' door_open
03B0: garage 'BODLAST' door_open
jump_if_false: @LABEL1

IF NOT: controlla se una cosa non lo è, esempio controlla se il carattere del player non è aggressivo:
if
82E0: not is_char $PLAYER_ACTOR aggressive

NB: l'opzione not cambia l'opcodes iniziale: lo 0 con l'8, guarda sotto:
SENZA NOT:
02E0: is_char $PLAYER_ACTOR aggressive CON NOT:
82E0: not is_char $PLAYER_ACTOR aggressive
Il parametro da cambiare è sempre il primo valore.
JUMP: Và subito a un label, esempio scrive MISSION PASSED se schiaccio SPRINT in modo veloce:
:LABEL1
wait 250
if
0AB0: key_pressed: 8
jump_if_false @LABEL1
jump @LABEL2

:LABEL2
wait 100
01E3: text_1number_styled 'M_PASSED' 0 5000 ms 1 // MISSION PASSED!

Così da un label si passa ad un altro.
JUMP_IF_FALSE: Se una cosa non lo è passa a un altro label, esempio dobbiamo caricare il modello #M4 e non lo è stato caricato:
:CARICA
wait 250
Model.Load(#M4)

:CONTROLLA
wait 250
if
Model.Available(#M4)
jump_if_false @CARICA
jump @DAIARMA

:DAIARMA
wait 100
01B9: give_actor $ATTORE weapon 24 ammo 9999

Queste potete considerarle come basi per le vostre mods.

Advertisements