GTA-Expert Forum: [DOC] Modificare scripts .scm - GTA-Expert Forum

Salta al contenuto

Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

[DOC] Modificare scripts .scm

#1 L'utente è offline   Wesser 

  • Sicario
  • Gruppo: Utenti
  • Messaggi: 1620
  • Iscritto il: 24/11/07
  • ID PSN:Wesser92
  • ID Social Club:Temutocle
  • Provenienza:Matera, Basilicata, Sud Italia, Europa Occidentale, Terra, Sistema Solare, Via Lattea, Universo?
  • GTA Preferito:GTA: San Andreas

Inviato il 16 maggio 2008 - 18:59

Modificare scripts .scm
Utilizzando il Sanny Builder 3.xx
Difficoltà : Immagine Postata


Attraverso tale guida, che si riferisce ad una richiesta relativa a questo post, cercherò di analizzare una parte di codice e tutte le funzioni in esso comprese attraverso una spiegazione semplice (a mio avviso) sui concetti basilari del coding.

Prima di tutto occorre sapere un bel po' inglese per potersi muovere senza problemi. Di conseguenza scaricare il Mission Builder anche se io preferisco il Sanny Builder, il programma su cui il medesimo tutorial si basa. Aprire il file main.scm presente nella cartella data\script selezionando prima la directory del gioco come il programma richiede. Incominciamo a focalizzare i punti e la predisposizione dei thread e delle missioni.

Ecco dove poter scaricare i programmi che ci servono per applicare tali modifiche:

Mission Builder 0.33 Craig version - Download
Sanny Builder 3.xx - Download

Quello che occorre per ora è creare un thread che non è altro che una parte del codice in cui ci sono diversi jumps (plurale di jump) che si riferiscono (non tutti) al label di partenza, ossia il nome di ogni singola parte di codice preceduta dai ":" cui fanno riferimento i jumps. Ogni thread è formato da innumerevoli conditionals (condizioni), che descrivono la cause per far si che il rispettivo effetto si verificasse di conseguenza, ed opcodes (plurale di opcode), che presentano parametri di vario numero ed una parte descrittiva (disponibile non per tutti perchè alcuni parametri sono ancora unknown, sconosciuti, per ora).

Detto questo, passiamo alla pratica per mettere a frutto quanto detto. Sempre nel programma, fare una ricerca della linea "004F: create_thread @" e sotto tutte quelle che hanno la stessa ed inequivocabile dicitura aggiungere quella quì di sotto riportata:
004F: create_thread @CARMOVE 

Ora, invece, passiamo alla creazione del thread da inserire sotto tutti gli altri ma prima della dicitura mission 0 (//-//).
:CARMOVE
thread 'CARMOVE' 

:CARMOVE_11
if 
 not Model.Available(#PONY)
jf @CARMOVE_19 
Model.Load(#PONY)
wait 0 
jump @CARMOVE_11 

:CARMOVE_19
1@ = 0.0 // car x pos
2@ = 0.0 // car y pos
3@ = 0.0 // car z pos
0@ = Car.Create(#PONY, 1@, 2@, 3@)
19@ = Car.Model(0@)

:CARMOVE_24
wait 0 
if 
056E: car 0@ defined 
jf @CARMOVE_19 
Model.Load(#NULL)
if 
 Model.Available(#NULL)
jf @CARMOVE_24 
5@ = Actor.Create(CivMale, #NULL, 1@, 2@, 3@)
036A: put_actor 5@ in_car 0@ 
0337: set_actor 5@ visibility 0 

:CARMOVE_36
wait 0 
if and
 not Actor.Dead(5@)
 not Car.Wrecked(0@)
jf @CARMOVE_62 
if 
00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 1@ 2@ 3@ radius 10.0 10.0 10.0 
jf @CARMOVE_36 
9@ = 0.0 // place x pos
10@ = 0.0 // place y pos
11@ = 0.0 // place z pos
05D1: AS_actor 5@ drive_car 0@ to 9@ 10@ 11@ speed 0.0 mode 2 model 19@ behaviour 3 

:CARMOVE_48
if 
01AF: car 0@ sphere 0 in_sphere 9@ 10@ 11@ radius 1.0 1.0 1.0 
jf @CARMOVE_36 
Actor.DestroyWithFade(5@)
Car.RemoveReferences(0@)
end_thread 

:CARMOVE_62
Actor.DestroyWithFade(5@)
Car.RemoveReferences(0@)
jump @CARMOVE_11 

Ora analizziamo il codice con tutte le varie spiegazioni in merito agli opcode ed al perché.
:CARMOVE

La prima dicitura per ogni sezione del codice è il label che, come ho già citato in precedenza, indica o, in un certo senso, raggruppa tutti gli opcodes (gli effetti) che si vogliono far verificare dopo il richiamo delle conditionals (le condizioni) e non.
thread 'CARMOVE' 

Non è indispensabile ma serve per conferire al thread un nome perchè poi durante la compilazione senza di esso comparirà la dicitura "NONAME". Se si vuol utilizzare gli apici ('') bisogna considerare che il numero massimo di chars (caratteri = char) da inserire è di 7 lettere mentre i doppi apici ("") se si vuol inserire più di 7 caratteri.
if 

E' il comando che visualizza una o più condizioni. Nel secondo caso può diventare "if and" se si vuol inserire un effetto (opcode) dopo l'avvenire di più di una causa (conditional) nello stesso tempo; mentre "if or" se le conditionals da prendere in considerazione devono essere o l'una o l'altra.
 not Model.Available(#PONY)

Questo conditional è indispensabile se il modello richiesto è disponibile. E' caratterizzato da una class (classe = class).
Model.Load(#PONY)

E' indispensabile quando si vuol creare un modello che, come da descrizione, indica il caricamento di quest'ultimo così da renderlo disponibile e "spawnabile". In questo caso si riferisce al modello dell'auto e, come vedremo in seguito, il secondo opcode simile si riferisce a quello dell'attore.
wait 0 

E' uno degli opcode più importanti che rappresenta una pausa di un millisecondo (credo che sia così), indispensabile quando il jump si riferisce allo stesso label in cui è contenuto.
jf @CARMOVE_11 

E' l'abbreviativo di "jump_if_true" (raramente utilizzato) o "jump_if_false" che se la condizione è falsa si passa al label prescritto e dipende dalle condizioni.
1@ = 0.0 
2@ = 0.0 
3@ = 0.0 

Queste sono le variabili (variables) a cui è attribuito un valore che in questo caso si verifica alle coordinate (coords) X, Y, Z, (1@, 2@, 3@) dell'auto che si vuol "spawnare". Possono essere identificate in diverso modo: ad esempio se le si indica con il segno "@" vuol dire che la variabile sarà locale (local variable) che non rimane in memoria e deve essere sempre richiamata, specialmente se viene richiesta da un altro thread o qualsivoglia codice esterno; mentre se le si indica con il segno "$" significa che la variabile sarà globale (global variable) che rimane in memoria e può essere tranquillamente richiesto da un thread o un codice esterno. Possono essere precedute anche con il segno "&" che svolge più o meno le stesse funzioni o le medesime, ma non ne sono sicuro. I valori delle variabili possono essere integer (interi = int) o float (con la virgola = float). In questo caso si tratta di coordinate che devono essere precise ed il valore deve essere un float.
0@ = Car.Create(#PONY, 1@, 2@, 3@)

Ora compaiono 5 parametri da analizzare uno per volta. Il primo indica la variabile che si riferisce all'auto, il secondo indica il nome ID del modello (ID model), mentre i restanti parametri indicano le coordinate float, ma io ho voluto che esse si riferiscano alle variabili comparse precedentemente. Come è traducibile dalla descrizione tale opcode serve per creare un'auto.
19@ = Car.Model(0@)

Questo opcode funge da variabile in cui compaiono due parametri dove il primo indica la variabile del modello dell'auto (19@) che a sua volta è contrassegnata dalla variabile "0@". E' un po' difficile da spiegare e non riesco a dire altro!
056E: car 0@ defined 

Tale conditional indica che se l'auto è stata correttamente definita o semplicemente caricata, si procederà per la visualizzazione del codice che segue.
5@ = Actor.Create(CivMale, #NULL, 1@, 2@, 3@)

E' molto simile all'opcode dell'auto precedentemente analizzato in cui compaiono ancora una volta rispettivamente la variabile dell'attore (5@), il valore che indica il comportamento assunto dai ped (che lo si può trovare assieme ad altri nel manuale del SB), il modello ID (#NULL = nulla) e le relative coordinate che si riferiscono ancora una volta alle relative variabili prima citate (1@, 2@, 3@).
036A: put_actor 5@ in_car 0@ 

E' indicato da 2 variabili di cui la prima indica quella dell'attore (5@) e la seconda quella dell'auto (0@). Quindi l'attore viene automaticamente teletrasportato nell'auto richiesta.
0337: set_actor 5@ visibility 0 

Ora compaiono una variabile che ancora una volta si riferisce all'attore (è inutile spiegarlo nuovamente) ed un valore che indica la visibilità e funziona solamente, per quanto ho potuto constatare, per gli altri attori non per CJ le cui variabili sono "$PLAYER_CHAR" e "$PLAYER_ACTOR" che rispettivamente indicano quella attribuibile al player e all'actor. Ovviamente essa è uguale a 1 = ON e 0 = OFF.
if and
 not Actor.Dead(5@)
 not Car.Wrecked(0@)
jf @CARMOVE_62 

Rispettivamente significano che se l'attore "5@" muore e l'auto "0@" rimane fuori uso successivamente si passa al label "CARMOVE_62".
00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 1@ 2@ 3@ radius 10.0 10.0 10.0 

E' uno degli opcode più utilizzati in secondo piano caratterizzato dalla variabile dell'attore, dalle coordinate e dal radius half_height, half_width e half_depth, ovvero la larghezza, la lunghezza e l'altezza della zona in cui si vuol far fermare l'auto. Per vedere visibilmente la zona presa in considerazione cambiare il secondo valore (0) in 1. In genere per i normali spheres (i marker rossi) i valori radius sono uguali a 1.0 1.0 1.0.
05D1: AS_actor 5@ drive_car 0@ to 9@ 10@ 11@ speed 0.0 mode 2 model 19@ behaviour 3 

Qui compaiono numerosi parametri e, a dir la verità, ho modificato un po' la descrizione siccome, come di default, non era presente. Il sesto parametro indica la velocità (credo sia un valore compreso tra 0.0 e 60.0), il seguente non so cosa indichi, il successivo indica il nome ID del modello contrassegnato dalla variabile che si riferiva all'opcode che svolgeva la funzione di variabile, perché era in riferimento al nome ID che a sua volta si riferiva al modello dell'auto; l'ultimo, invece, indica l'aggressività dell'attore durante i sorpassi, vale a dire la modalità.
01AF: car 0@ sphere 0 in_sphere 9@ 10@ 11@ radius 1.0 1.0 1.0 

E' molto simile all'opcode precedentemente analizzato per l'attore che ha come unico parametro in antitesi la variabile dell'auto da sostituire con quella dell'attore.
Actor.DestroyWithFade(5@)
Car.RemoveReferences(0@)

Ennesimo opcode indispensabile per il corretto funzionamento del gioco siccome è stato imposto dalla R* un limite di auto e pedoni caricati, quindi occorre eliminare il riferimento del gioco quando un'auto o un attore non ci servono più. Il primo opcode serve per eliminare l'attore con il fade (la dissolvenza) e di conseguenza elimina in automatico il riferimento del gioco perché il modello non è più disponibile.
end_thread 

E' adibito solamente alla terminazione di un thread per non essere più caricato.
jump @CARMOVE_11 

E' diverso dal "jump_if_false" e consiste solamente nel collegarsi ad un altro label indipendentemente dalla\e condizione\i.

Chiedo scusa per la ripetitività delle parole perché il coding si basa anche, ma non oso dire soprattutto, sulla ripetitività.

Guida creata da Wesser.

Ciao.
Tutorial: || Guida SCM || Richieste/Aiuti script || BB Code || Guida IFP

"Meglio una vita da noob dichiarato, che una vita da saputello inventato."

Mio contributo altrove
(non posso fornire link a siti non affiliati, "Google-are"):

GTA3script (III/VC definitions)
GTA Animation XML IO
Full Nitro Control ~ Script Dependent Drawings (SDDWG) ~ Widescreen HOR+ Support (WSHPS) ~ Dithered Sky Gradient (SkyGrad)
0

#2 L'utente è offline   Fabio206 

  • Padrino
  • Gruppo: Admin
  • Messaggi: 72378
  • Iscritto il: 05/12/05
  • GTA Preferito:GTA III

Inviato il 16 maggio 2008 - 19:30

Immagine Postata

e topic reso importante, ottimo lavoro ;)

Immagine Postata
0

#3 L'utente è offline   OmegaGT 

  • Taccheggiatore
  • Gruppo: Utenti
  • Messaggi: 34
  • Iscritto il: 22/05/08

Inviato il 22 maggio 2008 - 15:17

FANTASTICO,QUESTO TOPIC è ESSENZIALE PERCHE VUOLE RAGGIUNGERE NUOVE FRONTIERE SULLA CREAZIONE DELLE MOD
BRAVOOOOOO :lode: :lode: :lode: :lode: :lode: !!!!!!!!!
0

#4 L'utente è offline   OmegaGT 

  • Taccheggiatore
  • Gruppo: Utenti
  • Messaggi: 34
  • Iscritto il: 22/05/08

Inviato il 24 maggio 2008 - 19:52

inserisci la spiegazione di altri script del main
0

#5 L'utente è offline   Busto 

  • Assassino
  • Gruppo: Utenti
  • Messaggi: 2519
  • Iscritto il: 06/04/07
  • Provenienza:Negril, Jamaica
  • GTA Preferito:Sconosciuto

Inviato il 27 maggio 2008 - 07:45

Chi mi sa dire come faccio a salvare il thread in formato ".scm" ? Quando vado su Decompila me lo salva in ".txt".

Grazie


It's always 420.

Posted Image



0

#6 L'utente è offline   Wesser 

  • Sicario
  • Gruppo: Utenti
  • Messaggi: 1620
  • Iscritto il: 24/11/07
  • ID PSN:Wesser92
  • ID Social Club:Temutocle
  • Provenienza:Matera, Basilicata, Sud Italia, Europa Occidentale, Terra, Sistema Solare, Via Lattea, Universo?
  • GTA Preferito:GTA: San Andreas

Inviato il 27 maggio 2008 - 12:54

Durante la decompilazione il compilatore crea automaticamente il file di testo .txt. Cliccando su Avvia->Compila e copia tutto ciò che è presente nel file di testo sarà compilato nel formato .scm.

Ciao.
Tutorial: || Guida SCM || Richieste/Aiuti script || BB Code || Guida IFP

"Meglio una vita da noob dichiarato, che una vita da saputello inventato."

Mio contributo altrove
(non posso fornire link a siti non affiliati, "Google-are"):

GTA3script (III/VC definitions)
GTA Animation XML IO
Full Nitro Control ~ Script Dependent Drawings (SDDWG) ~ Widescreen HOR+ Support (WSHPS) ~ Dithered Sky Gradient (SkyGrad)
0

#7 L'utente è offline   W_San_Andreas 

  • Borsaiolo
  • Gruppo: Utenti
  • Messaggi: 83
  • Iscritto il: 26/02/08

Inviato il 12 luglio 2008 - 19:06

scusate ma io cerco create_thread ma m trova sl le missioni cn le bici ecc...

HELP please...potete aiutarmi anke via msn se volete: g.m.dick@hotmail.it :lode:


vi prego risp sn disperato!!!!!!!!!!! :noo: :cry: :gh:
ACCOUNT CAMBIATO IN: GiovyKiller
0

Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

1 utenti stanno leggendo questa discussione
0 utenti, 1 ospiti, 0 utenti anonimi