GTA-Expert Forum: [GUIDA] Creare semplici missioni - GTA-Expert Forum

Salta al contenuto

  • (2 Pagine)
  • +
  • 1
  • 2
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

[GUIDA] Creare semplici missioni

#21 L'utente è offline   VinCs El Pocho 

  • Cacciatore di taglie
  • Gruppo: Utenti
  • Messaggi: 1110
  • Iscritto il: 29/03/09

Inviato il 14 maggio 2009 - 10:41

vado la e che faccio aspetto?
CANCEL.LT

Visita il forum: http://paradisecityrp.tk/

Paradise City Roleplay:
Nome: Curtis_Smoke
Città: Los Santos
Fazione: Cosanostra
Rank: Padrino
Anni: 21
Lavoro: Drug Dealer
Veicoli: Sultan, ZR, Buffalo
Livello: 3
0

#22 L'utente è offline   ~>Snake95<~ 

  • Cacciatore di taglie
  • Gruppo: Utenti
  • Messaggi: 1253
  • Iscritto il: 06/02/08
  • GTA Preferito:Sconosciuto

Inviato il 14 maggio 2009 - 13:18

Se hai fatto tutto giusto, dovrebbero comparirti Big Smoke, Big Bear e Tenpenny, in questa missione li devi uccidere.
Immagine Postata
0

#23 L'utente è offline   VinCs El Pocho 

  • Cacciatore di taglie
  • Gruppo: Utenti
  • Messaggi: 1110
  • Iscritto il: 29/03/09

Inviato il 14 maggio 2009 - 16:21

Ho fatto tutto male^^
CANCEL.LT

Visita il forum: http://paradisecityrp.tk/

Paradise City Roleplay:
Nome: Curtis_Smoke
Città: Los Santos
Fazione: Cosanostra
Rank: Padrino
Anni: 21
Lavoro: Drug Dealer
Veicoli: Sultan, ZR, Buffalo
Livello: 3
0

#24 L'utente è offline   ~>Snake95<~ 

  • Cacciatore di taglie
  • Gruppo: Utenti
  • Messaggi: 1253
  • Iscritto il: 06/02/08
  • GTA Preferito:Sconosciuto

Inviato il 15 maggio 2009 - 08:39

{$VERSION 3.1.0027}
{$CLEO .cs}

thread 'MISSIONE'

:MISSIONE
wait 1000
03A4: name_thread 'MISSIONE'
if and
00FE:  actor $PLAYER_ACTOR sphere 0 in_sphere 2861.8618 -1887.3459 10.9339 radius 30.0 25.0 10.0
$ONMISSION == 0
else_jump @MISSIONE
023C: request_special_actor 'TENPEN' as 1
023C: request_special_actor 'SMOKEV' as 2
023C: request_special_actor 'BB' as 3
Model.Load(#AK47)
Model.Load(#COLT45)
Model.Load(#DESERT_EAGLE)
if and
Model.Available(#AK47)
Model.Available(#DESERT_EAGLE)
Model.Available(#COLT45)
023D: special_actor 1 loaded
023D: special_actor 2 loaded
023D: special_actor 3 loaded
wait 1000
009A: 1@ = create_actor 23 #SPECIAL01 at 2859.7527 -1917.4506 10.9324
009A: 2@ = create_actor 23 #SPECIAL02 at 2861.2815 -1917.2495 10.9335
009A: 3@ = create_actor 23 #SPECIAL03 at 2861.8311 -1915.5322 10.933
Actor.Angle(1@) = 272.1
Actor.Angle(2@) = 98.9
Actor.Angle(3@) = 169.0
4@ = Marker.CreateAboveActor(1@)
5@ = Marker.CreateAboveActor(2@)
6@ = Marker.CreateAboveActor(3@)
01B2: give_actor 1@ weapon 22 ammo 9999
01B2: give_actor 2@ weapon 30 ammo 9999 
01B2: give_actor 3@ weapon 24 ammo 9999
05E2: AS_actor 1@ kill_actor $PLAYER_ACTOR 
05E2: AS_actor 2@ kill_actor $PLAYER_ACTOR
05E2: AS_actor 3@ kill_actor $PLAYER_ACTOR
$ONMISSION = 1
Model.Destroy(#AK47)
Model.Destroy(#DESERT_EAGLE)
Model.Destroy(#COLT45)

:MISSIONE_TENPENNY
wait 150
if
Actor.Dead(1@)
else_jump @MISSIONE_TENPENNY
Actor.RemoveReferences(1@)
Marker.Disable(4@)

:MISSIONE_BIGSMOKE
wait 150
if
Actor.Dead(2@)
else_jump @MISSIONE_TENPENNY
Actor.RemoveReferences(2@)
Marker.Disable(5@)

:MISSIONE_BIGBEAR
wait 150
if
Actor.Dead(3@)
else_jump @MISSIONE_BIGBEAR
Actor.RemoveReferences(3@)
Marker.Disable(6@)

:MISSIONE_COMPIUTA
wait 150
if and
Actor.Dead(1@)
Actor.Dead(2@)
Actor.Dead(3@)
else_jump @MISSIONE_COMPIUTA
Actor.RemoveReferences(1@)
Actor.RemoveReferences(2@)
Actor.RemoveReferences(3@)
Marker.Disable(4@)
Marker.Disable(5@)
Marker.Disable(6@)
01E3: show_text_1number_styled GXT 'M_PASSR' number 6 time 5000 style 1 // MISSION PASSED!~n~~w~RESPECT +
Player.Money($PLAYER_CHAR) += 10000
$ONMISSION = 0
0998: add_respect 6

:MISSIONE_FALLITA
wait 150
if
wasted_or_busted
else_jump @MISSIONE_FALLITA
$ONMISSION = 0
00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1 // ~r~MISSION FAILED!


Questo è il .cs della missione completa, prova a compilarlo.
Immagine Postata
0

#25 L'utente è offline   Wesser 

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

Inviato il 10 giugno 2009 - 15:42

Per essere sinceri, da quel che vedo da quest'ultimo script, mancano alcune nozioni di base del coding, forse per "ignoranza" (da non fraintendere con le offese), forse per sviste dovute all'inattenzione. Ora riporto gli\le errori\omissioni.
  • La linea "name_thread" può essere benissimo inizializzata una solo volta.
  • E' inutile inserire tanti waits, ma solo se necessario come nel caso dei loop (thread che terminano con un jump che si riferisce al medesimo), preferibilmente con valore 0. Se, per motivi di efficenza dello script, si vuol anche inserire un valore superiore a 0, ben venga.
    Nota: Se per caso non è stato ancora detto da nessuna parte, il wait utilizza un valore in millisecondi, quindi 1000 corrisponde and 1 secondo, 500 a 1/2 secondo, e via dicendo.
  • Dopo ogni condizione è necessario utilizzare l'else jump, altrimenti non vi è modo per cui essa esista perchè il codice andrebbe comunque avanti con la lettura.
  • Al termine del thread (di qualunque natura esso sia: normale, missione o script esterni), per attestarne la chiusura bisogna inserire il jump o l'end_thread (end_custom_thread per cleo), altrimenti leggerebbe anche il contenuto che segue.
  • Per sminuire il contenuto del codice stesso, converrebbe sostituire la dicitura "else_jump" con "jf" ovvero "jump_if_false".
  • Ond'evitare problemi di visibilità dei modelli, meglio inserire la linea "Model.Destroy()" quando quest'ultimi non rendono più la loro utilità.
  • L'ultimo thread non ha nessuna utilità, anzi, non si conclude mai.
Nel caso in cui vorremmo creare tanti players, pedoni od oggetti, potremmo usufruire dell'utilità degli arrays. In termini teorici, un array può essere definito come un vettore la cui funzione consiste nell'immagazzinare nella stessa variabile più valori, utilizzando diversi indici. Cerchiamo di spiegare il tutto in termini pratici.
Immagine Postata
Ci sono diversi modi per i rispettivi tipi di variabili (globali e locali). Quì di sotto è riportata la rispettiva differenza.
$ACTOR_X[0] = 0.0
1@(31@,1i) = 0.0

Per svolgere l'operazione occorre innescare un loop, ovvero un ciclo di tipo "for" per ripetere il thread (e quindi la creazione) finchè non avrà raggiunto un certo valore (in poche parole, un certo numero di volte). Vediamo come si presenta.
{$CLEO .cs}

0000: NOP

// High level code

{
  n = 3

  for I = 1 to n
    Actor(I) = Actor.Create( Type(I), modelID(I), x(I), y(I), z(I) )
    ...
  end
}

:Thread_Array
thread 'ThreadA' 

// Per prima cosa, caricare i modelli 

:Thread_Array2
Model.Load(#AK47)
Model.Load(#COLT45)
Model.Load(#DESERT_EAGLE)
023C: load_special_actor 'TENPEN' as 1 // 290 
023C: load_special_actor 'SMOKEV' as 2 // 291 
023C: load_special_actor 'BB' as 3 // 292 

// Verificare che i modelli siano caricati 

:Thread_Array3
wait 0 
if and
   Model.Available(#AK47)
   Model.Available(#DESERT_EAGLE)
   Model.Available(#COLT45)
023D:   special_actor 1 loaded // 290 
023D:   special_actor 2 loaded // 291 
023D:   special_actor 3 loaded // 292 
jf @Thread_Array3 
060A: create_decision_maker_type 0 store_to 10@ // decision\allowed\m_.ped files 
6@ = 2859.753 
12@ = -1917.451 
18@ = 10.9324 
04AF: 21@ = 290 // @ = any 
24@ = 272.1 
04AF: 27@ = 22 // @ = any 
7@ = 2861.281 
13@ = -1917.25 
19@ = 10.9335 
04AF: 22@ = 291 // @ = any 
25@ = 98.9 
04AF: 28@ = 30 // @ = any 
8@ = 2861.831 
14@ = -1915.532 
20@ = 10.933 
04AF: 23@ = 292 // @ = any 
26@ = 169.0 
04AF: 29@ = 24 // @ = any 
31@ = 0 

// Innescare una struttura loop for 

:Thread_Array4
wait 0 
// Actor(int) = Actor.Create(Type(int), modelID(int), x(float), y(float), z(float))
0@(31@,3i) = Actor.Create(Mission1, 21@(31@,3i), 6@(31@,3f), 12@(31@,3f), 18@(31@,3f))
Actor.Angle(0@(31@,3i)) = 24@(31@,3f)
Actor.WeaponAccuracy(0@(31@,3i)) = 25
01B2: give_actor 0@(31@,3i) weapon 27@(31@,3i) ammo 9999 // Load the weapon model before using this 
05E2: AS_actor 0@(31@,3i) kill_actor $PLAYER_ACTOR 
if 
  2 > 31@ 
jf @Thread_Array5 
31@ += 1 
jump @Thread_Array4 

// Parametri addizionali (solo dopo tale ciclo for) 

:Thread_Array5
3@ = Marker.CreateAboveActor(0@)
4@ = Marker.CreateAboveActor(1@)
5@ = Marker.CreateAboveActor(2@)
060B: set_actor 0@ decision_maker_to 10@ 
060B: set_actor 1@ decision_maker_to 10@ 
060B: set_actor 2@ decision_maker_to 10@ 
31@ = 0 

//...

0A93: end_custom_thread 

Per chi non lo sappia, entrambe le diciture "//" e "{}" indicano rispettivamente che dopo vi è un testo che non verrà nè compilato, nè decompilato. La seconda invece, delimita un testo (ovviamente inizia con "{" e termina con "}". Mentre la prima rende tutto ciò che segue (ma solo nello stesso rigo) un testo come commento, la seconda delimita solo una parte, quindi solo ciò che vi è all'interno delle "{}" diventerà commento.

Come è possibile vedere nel source, ho aggiunto l'opcode 0000. Quest'ultimo è necessario solo se non si intende utilizzare nessun label come partenza (in questo caso è relativo). Mi spiego, è possibile anche omettere il label a cui un jump si riferisce, ma occorre inequivocabilemente aggiungere quell'opcode od il nome del thread, altrimenti la compilazione non avverrà. Ciò accade solamente con gli scripts composti con i comandi high level, ovvero if, while, repeat-until, then, else, for, end. Esempio.
{$CLEO .cs}

0000: NOP

while true
end

Durante la definizione delle variabili, si può notare che, per quanto riguarda il puntatore del pedone, l'ID del modello, l'angolo del pedone e l'ID dell'arma, le variabili aumentano automaticamente di 1 alla volta (0@, 1@...), mentre per le coordinate, aumentano di 6 alla volta (6@, 12@...).

Il numero massimo di variabili locali di un thread è 33 (da 0@ fino a 33@). Per le variabili globali, invece, è 16383 (da $1 fino a $16383). Le variabili locali, solo nelle missioni, possono essere anche estese fino ad un certo limite, quindi oltre i 33. Invece di creare un file .cs o utilizzare l'scm, bisogna utilizzare il formato .cm (custom mission), ma bisogna comunque richiamarla dall'scm, credo con l'opcode 0A94.
{$CLEO .cm}

Così facendo potremmo utilizzare un numero maggiore di variabili locali e creare quanti players, pedoni od oggetti vogliamo. Probabilmente, ci sarà anche un limite per gli array: nel main compaiono solo fino a 32 (quindi 1@(2@,32i), credo), ma da qualche parte ho visto anche utilizzare 50 indici.

Ecco lo stesso thread adattato agli arrays.
{$CLEO .cs}

{
  0@ = Actor pointer
  1@ = Actor2 pointer
  2@ = Actor3 pointer

  3@ = Actor marker
  4@ = Actor2 marker
  5@ = Actor3 marker

  6@ = Actor x pos
  7@ = Actor2 x pos
  8@ = Actor3 x pos

  10@ = Decision marker

  12@ = Actor y pos
  13@ = Actor2 y pos
  14@ = Actor3 y pos

  18@ = Actor z pos
  19@ = Actor2 z pos
  20@ = Actor3 z pos

  21@ = Actor modelID
  22@ = Actor2 modelID
  23@ = Actor3 modelID

  24@ = Actor z angle
  25@ = Actor2 z angle
  26@ = Actor3 z angle

  27@ = Actor weapID
  28@ = Actor2 weapID
  29@ = Actor3 weapID

  30@ = kill count

  31@ = loop variable
}

:Mission_Thread
thread "MissionA" 

:Mission_Start
wait 0 
if and
  $ONMISSION == 0 
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere 2861.862 -1887.346 10.9339 radius 30.0 25.0 10.0 
jf @Mission_Start 
$ONMISSION = 1 
if and
   not Actor.Dead($PLAYER_ACTOR)
8741:   not actor $PLAYER_ACTOR busted 
jf @Mission_Failed 
Model.Load(#AK47)
Model.Load(#COLT45)
Model.Load(#DESERT_EAGLE)
023C: load_special_actor 'TENPEN' as 1 // 290 
023C: load_special_actor 'SMOKEV' as 2 // 291 
023C: load_special_actor 'BB' as 3 // 292 

:Mission_Body
wait 0 
if and
   Model.Available(#AK47)
   Model.Available(#DESERT_EAGLE)
   Model.Available(#COLT45)
023D:   special_actor 1 loaded // 290 
023D:   special_actor 2 loaded // 291 
023D:   special_actor 3 loaded // 292 
jf @Mission_Body 
060A: create_decision_maker_type 0 store_to 10@ // decision\allowed\m_.ped files 
6@ = 2859.753 
12@ = -1917.451 
18@ = 10.9324 
04AF: 21@ = 290 // @ = any 
24@ = 272.1 
04AF: 27@ = 22 // @ = any 
7@ = 2861.281 
13@ = -1917.25 
19@ = 10.9335 
04AF: 22@ = 291 // @ = any 
25@ = 98.9 
04AF: 28@ = 30 // @ = any 
8@ = 2861.831 
14@ = -1915.532 
20@ = 10.933 
04AF: 23@ = 292 // @ = any 
26@ = 169.0 
04AF: 29@ = 24 // @ = any 
31@ = 0 

:Mission_Array
wait 0 
0@(31@,3i) = Actor.Create(Mission1, 21@(31@,3i), 6@(31@,3f), 12@(31@,3f), 18@(31@,3f))
Actor.Angle(0@(31@,3i)) = 24@(31@,3f)
Actor.WeaponAccuracy(0@(31@,3i)) = 25
01B2: give_actor 0@(31@,3i) weapon 27@(31@,3i) ammo 9999 // Load the weapon model before using this 
05E2: AS_actor 0@(31@,3i) kill_actor $PLAYER_ACTOR 
if 
  2 > 31@ 
jf @Mission_Array2 
31@ += 1 
jump @Mission_Array 

:Mission_Array2
3@ = Marker.CreateAboveActor(0@)
4@ = Marker.CreateAboveActor(1@)
5@ = Marker.CreateAboveActor(2@)
060B: set_actor 0@ decision_maker_to 10@ 
060B: set_actor 1@ decision_maker_to 10@ 
060B: set_actor 2@ decision_maker_to 10@ 
30@ = 0 
31@ = 0 

:Mission_Chars_Dead
wait 0 
if 
  2 >= 31@ 
jf @Mission_Chars_Dead3 
if 
   Actor.Dead(0@(31@,3i))
jf @Mission_Chars_Dead2 
if 
075C:   marker 3@(31@,3i) enabled 
jf @Mission_Chars_Dead2 
Actor.RemoveReferences(0@(31@,3i))
Marker.Disable(3@(31@,3i))
30@ += 1 

:Mission_Chars_Dead2
31@ += 1 
jump @Mission_Chars_Dead 

:Mission_Chars_Dead3
if or
   not Actor.Dead($PLAYER_ACTOR)
8741:   not actor $PLAYER_ACTOR busted 
jf @Mission_Failed 
if 
   not 30@ == 3 
jf @Mission_Complete 
31@ = 0 
jump @Mission_Chars_Dead 

:Mission_Failed
wait 0 
if 
  2 >= 31@ 
jf @Mission_Failed3 
if 
   not Actor.Dead(0@(31@,3i))
jf @Mission_Failed2 
Actor.DestroyWithFade(0@(31@,3i))
30@ += 1 

:Mission_Failed2
31@ += 1 
jump @Mission_Failed 

:Mission_Failed3
00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1  // ~r~MISSION FAILED!
$ONMISSION = 0 
0A93: end_custom_thread 

:Mission_Complete
Model.Destroy(#AK47)
Model.Destroy(#DESERT_EAGLE)
Model.Destroy(#COLT45)
01E3: show_text_1number_styled GXT 'M_PASSS' number 1000 time 5000 style 1  // MISSION PASSED!~n~~w~$~1~~n~~w~RESPECT +
Player.Money($PLAYER_CHAR) += 1000
0998: add_respect 5 
$ONMISSION = 0 
0A93: end_custom_thread 

Nota: Qualunque stringa è delimitata da '' o "". Entrambi possono essere usati tranquillamente ma solo il primo ha un limite di 7 caratteri. Non credo che ormai abbia valenza utilizzare sempre "" per i nomi di thread con minimo 8 caratteri, perchè, se non sbaglio, il sannybuilder non tiene più conto della limitazione.

Spero di essere stato chiaro e di aver fatto apprendere. :P
Notice: Undefined variable: Fabio in /home/gta-expert/index.php on line 206
0

#26 L'utente è offline   Fabio206 

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

Inviato il 10 giugno 2009 - 15:47

Wesser rulla come al solito :P
0

#27 L'utente è offline   DoomWind 

  • Criminale
  • Gruppo: Utenti
  • Messaggi: 1463
  • Iscritto il: 03/05/09
  • GTA Preferito:Sconosciuto

Inviato il 10 giugno 2009 - 15:51

Spoiler

0

#28 L'utente è offline   Wesser 

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

Inviato il 10 giugno 2009 - 15:51

Che onore Fabio (non prendetelo per spam). :lol:
Notice: Undefined variable: Fabio in /home/gta-expert/index.php on line 206
0

#29 L'utente è offline   dvxx95 

  • Teppista
  • Gruppo: Utenti
  • Messaggi: 287
  • Iscritto il: 27/05/09

Inviato il 08 luglio 2009 - 13:17

perchè quando sono nel raggio delle coordinate il gioco crasha??????? :blink:

ho riprovato a farla ma il problema persiste :cry: :cry: :cry:
I BAMBINI HANNO PAURA DEL BUIO....IL BUIO HA PAURA DI CHUCK NORRIS
0

#30 L'utente è offline   Saint Jake 

  • Boss
  • Gruppo: Moderatori
  • Messaggi: 10887
  • Iscritto il: 30/03/09
  • Provenienza:The Glitch City
  • GTA Preferito:GTA: San Andreas

Inviato il 10 luglio 2009 - 14:11

Quote

Originally posted by dvxx95@08/07/09 - 14:17
perchè quando sono nel raggio delle coordinate il gioco crasha??????? :blink:

ho riprovato a farla ma il problema persiste :cry: :cry: :cry:

...beh...ovviamente perchè hai sbagliato qlks....
Se hai solo fatto copia-incolla da uno dei 2 codici (snake o wesser) è normale che crasha :rotfl:

Nel primo manca
0A93: end_custom_thread 

alla fine del thread.

Il secondo non si compila nemmeno perchè un' arrey si ripete 2 volte :alkz:

Posta il tuo codice e vediamo cosa c'è che non và.....
Se hai apportato variazioni e non hai tolto ciò che non serviva è ovvio che crasha tutto appena entri nelle coordinate :alkz:
/
"Alme Sol, curru nitido diem qui promis et celas aliusque et idem nasceris, possis nihil urbe Roma visere maius"

/
0

#31 L'utente è offline   Wesser 

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

Inviato il 10 luglio 2009 - 21:44

L'unico problema nel mio secondo script (quello completo) consiste nel non aver cambiato il nome di due label, ne deriva quindi che quest'ultimo è uguale per ambedue costringendo il compilatore a non poter compilare lo script. Ora ho corretto il post e testato nuovamente lo script ingame; di conseguenza, posso dire con certezza che funziona alla perfezione. ;)
Notice: Undefined variable: Fabio in /home/gta-expert/index.php on line 206
0

#32 L'utente è offline   dvxx95 

  • Teppista
  • Gruppo: Utenti
  • Messaggi: 287
  • Iscritto il: 27/05/09

Inviato il 13 luglio 2009 - 00:23

Quote

Originally posted by Saint Jake+10/07/09 - 15:11

Quote

(Saint Jake @ 10/07/09 - 15:11)
-dvxx95
@08/07/09 - 14:17
perchè quando sono nel raggio delle coordinate il gioco crasha??????? :blink:

ho riprovato a farla ma il problema persiste :cry:  :cry:  :cry:

...beh...ovviamente perchè hai sbagliato qlks....
Se hai solo fatto copia-incolla da uno dei 2 codici (snake o wesser) è normale che crasha :rotfl:

Nel primo manca
0A93: end_custom_thread 

alla fine del thread.

Il secondo non si compila nemmeno perchè un' arrey si ripete 2 volte :alkz:

Posta il tuo codice e vediamo cosa c'è che non và.....
Se hai apportato variazioni e non hai tolto ciò che non serviva è ovvio che crasha tutto appena entri nelle coordinate :alkz: [/b]

ok eccolo :)

{$VERSION 3.1.0027}
{$CLEO .cs}

//-------------MAIN---------------
thread 'MISSIONE'

:MISSIONE_19
wait 1000
thread 'MISSIONE'
if and
00FE: actor $PLAYER_ACTOR sphere 0 in_sphere 1919.828 -1230.462 17.91885 radius 30.0 25.0 10.0
$ONMISSION == 0
else_jump @MISSIONE_19
023C: load_special_actor 'BALLAS1' as 1 // models 290-299
023C: load_special_actor 'BALLAS2' as 2 // models 290-299
023C: load_special_actor 'BALLAS3' as 3 // models 290-299
023C: load_special_actor 'FAM1' as 4 // models 290-299
023C: load_special_actor 'FAM2' as 5 // models 290-299
023C: load_special_actor 'FAM3' as 6 // models 290-299
023C: load_special_actor 'SWEET' as 7 // models 290-299
Model.Load(#AK47)
Model.Load(#AK47)
Model.Load(#AK47)
Model.Load(#AK47)
Model.Load(#AK47)
Model.Load(#AK47)
Model.Load(#AK47)
if and
Model.Available(#AK47)
Model.Available(#AK47)
Model.Available(#AK47)
Model.Available(#AK47)
Model.Available(#AK47)
Model.Available(#AK47)
Model.Available(#AK47)
023D: special_actor 1 loaded
023D: special_actor 2 loaded
023D: special_actor 3 loaded
023D: special_actor 4 loaded
023D: special_actor 5 loaded
023D: special_actor 6 loaded
023D: special_actor 7 loaded
wait 1000
1@ = Actor.Create(Special, #SPECIAL01, 1919.828, -1230.462, 17.91885)
2@ = Actor.Create(Special, #SPECIAL02, 1921.177, -1230.2, 18.14182)
3@ = Actor.Create(Special, #SPECIAL03, 1914.285, -1229.235, 17.38179)
4@ = Actor.Create(Special, #SPECIAL04, 1912.606, -1225.933, 17.59943)
5@ = Actor.Create(Special, #SPECIAL05, 1911.651, -1228.455, 17.18024)
6@ = Actor.Create(Special, #SPECIAL06, 1913.453, -1229.186, 17.24896)
7@ = Actor.Create(Special, #SPECIAL07, 1912.281, -1231.196, 16.87708)
Actor.Angle(1@) = 272.1
Actor.Angle(2@) = 98.9
Actor.Angle(3@) = 169.0
Actor.Angle(4@) = 123.0
Actor.Angle(4@) = 100.1
Actor.Angle(5@) = 158.0
Actor.Angle(5@) = 93.0
Actor.Angle(6@) = 78.1
Actor.Angle(7@) = 34.6
4@ = Marker.CreateAboveActor(1@)
5@ = Marker.CreateAboveActor(2@)
6@ = Marker.CreateAboveActor(3@)
7@ = Marker.CreateAboveActor(4@)
8@ = Marker.CreateAboveActor(5@)
9@ = Marker.CreateAboveActor(6@)
10@ = Marker.CreateAboveActor(7@)
01B2: give_actor 1@ weapon 22 ammo 9999 // Load the weapon model before using this
01B2: give_actor 2@ weapon 22 ammo 9999 // Load the weapon model before using this
01B2: give_actor 3@ weapon 22 ammo 9999 // Load the weapon model before using this
01B2: give_actor 4@ weapon 22 ammo 9999 // Load the weapon model before using this
01B2: give_actor 5@ weapon 22 ammo 9999 // Load the weapon model before using this
01B2: give_actor 6@ weapon 22 ammo 9999 // Load the weapon model before using this
01B2: give_actor 7@ weapon 22 ammo 9999 // Load the weapon model before using this
05E2: AS_actor 1@ kill_actor $PLAYER_ACTOR
05E2: AS_actor 2@ kill_actor $PLAYER_ACTOR
05E2: AS_actor 3@ kill_actor $PLAYER_ACTOR
05E2: AS_actor 4@ kill_actor $PLAYER_ACTOR
05E2: AS_actor 5@ kill_actor $PLAYER_ACTOR
05E2: AS_actor 6@ kill_actor $PLAYER_ACTOR
05E2: AS_actor 7@ kill_actor $PLAYER_ACTOR
$ONMISSION = 1
Model.Destroy(#AK47)
Model.Destroy(#AK47)
Model.Destroy(#AK47)
Model.Destroy(#AK47)
Model.Destroy(#AK47)
Model.Destroy(#AK47)
Model.Destroy(#AK47)

:MISSIONE_761
wait 150
if
Actor.Dead(1@)
else_jump @MISSIONE_761
Actor.RemoveReferences(1@)
Marker.Disable(4@)

:MISSIONE_792
wait 150
if
Actor.Dead(2@)
else_jump @MISSIONE_792
Actor.RemoveReferences(2@)
Marker.Disable(5@)

:MISSIONE_823
wait 150
if
Actor.Dead(3@)
else_jump @MISSIONE_823
Actor.RemoveReferences(3@)
Marker.Disable(6@)

:MISSIONE_854
wait 150
if
Actor.Dead(3@)
else_jump @MISSIONE_854
Actor.RemoveReferences(4@)
Marker.Disable(5@)

:MISSIONE_885
wait 150
if
Actor.Dead(4@)
else_jump @MISSIONE_885
Actor.RemoveReferences(5@)
Marker.Disable(6@)

:MISSIONE_916
wait 150
if
Actor.Dead(5@)
else_jump @MISSIONE_916
Actor.RemoveReferences(6@)
Marker.Disable(7@)

:MISSIONE_947
wait 150
if
Actor.Dead(6@)
else_jump @MISSIONE_947
Actor.RemoveReferences(7@)
Marker.Disable(8@)

:MISSIONE_978
wait 150
if and
Actor.Dead(1@)
Actor.Dead(2@)
Actor.Dead(3@)
Actor.Dead(4@)
Actor.Dead(5@)
Actor.Dead(6@)
Actor.Dead(7@)
else_jump @MISSIONE_978
Actor.RemoveReferences(1@)
Actor.RemoveReferences(2@)
Actor.RemoveReferences(3@)
Actor.RemoveReferences(4@)
Actor.RemoveReferences(5@)
Actor.RemoveReferences(6@)
Actor.RemoveReferences(7@)
Marker.Disable(1@)
Marker.Disable(2@)
Marker.Disable(3@)
Marker.Disable(4@)
Marker.Disable(5@)
Marker.Disable(6@)
Marker.Disable(7@)
01E3: show_text_1number_styled GXT 'M_PASSR' number 6 time 5000 style 1 // MISSION PASSED!~n~~w~RESPECT +
Player.Money($PLAYER_CHAR) += 10000
$ONMISSION = 0
0998: add_respect 6

:MISSIONE_1136
wait 150
if
wasted_or_busted
else_jump @MISSIONE_1136
$ONMISSION = 0
00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1 // ~r~MISSION FAILED!
0A93: end_custom_thread









scusate la mia niubbagine :P
I BAMBINI HANNO PAURA DEL BUIO....IL BUIO HA PAURA DI CHUCK NORRIS
0

#33 L'utente è offline   Saint Jake 

  • Boss
  • Gruppo: Moderatori
  • Messaggi: 10887
  • Iscritto il: 30/03/09
  • Provenienza:The Glitch City
  • GTA Preferito:GTA: San Andreas

Inviato il 13 luglio 2009 - 08:15

A una prima vista mi viene da dire che i ballas e i ragazzi di grove non sono special actors......gli special actor sono i personaggi della storia (sweet, big smoke, woozie ecc...).
Per questi devi mettere #FAM1 e così anche x gli altri...
E anche quando poi li carichi non devi caricare gli special 1, spacial 2 eccetera.....perchè FAM e ballas non sono special :sese:
/
"Alme Sol, curru nitido diem qui promis et celas aliusque et idem nasceris, possis nihil urbe Roma visere maius"

/
0

#34 L'utente è offline   Wesser 

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

Inviato il 13 luglio 2009 - 08:16

Certo che non hai seguito i miei consigli. Se vuoi utilizzare la soluzione più semplice, devi ottimizzarlo in base a quello che ho scritto all'inizio del post in cui ho parlato, in seguito, degli arrays. Se proprio non riesci cercherò di spiegarlo in parole ancora più povere.

Per quanto riguarda il caricamento dei modelli, basta farlo una sola volta per modello anche se quest'ultimo verrà richiamato più volte.
Notice: Undefined variable: Fabio in /home/gta-expert/index.php on line 206
0

#35 L'utente è offline   dvxx95 

  • Teppista
  • Gruppo: Utenti
  • Messaggi: 287
  • Iscritto il: 27/05/09

Inviato il 13 luglio 2009 - 12:15

Quote

Originally posted by Saint Jake@13/07/09 - 09:15
A una prima vista mi viene da dire che i ballas e i ragazzi di grove non sono special actors......gli special actor sono i personaggi della storia (sweet, big smoke, woozie ecc...).
Per questi devi mettere #FAM1 e così anche x gli altri...
E anche quando poi li carichi non devi caricare gli special 1, spacial 2 eccetera.....perchè FAM e ballas non sono special :sese:

quindi special lo devo rimanere solo a sweet???

ad esempio:

da:
023C: load_special_actor 'BALLAS1' as 1 // models 290-299
023C: load_special_actor 'BALLAS2' as 2 // models 290-299
023C: load_special_actor 'BALLAS3' as 3 // models 290-299
023C: load_special_actor 'FAM1' as 4 // models 290-299
023C: load_special_actor 'FAM2' as 5 // models 290-299
023C: load_special_actor 'FAM3' as 6 // models 290-299
023C: load_special_actor 'SWEET' as 7 // models 290-299

a

023C: load_actor 'BALLAS1' as 1 // models 290-299
023C: loadl_actor 'BALLAS2' as 2 // models 290-299
023C: load_actor 'BALLAS3' as 3 // models 290-299
023C: load_actor 'FAM1' as 4 // models 290-299
023C: load_actor 'FAM2' as 5 // models 290-299
023C: load_actor 'FAM3' as 6 // models 290-299
023C: load_special_actor 'SWEET' as 7 // models 290-299

,da

1@ = Actor.Create(Special, #SPECIAL01, 1919.828, -1230.462, 17.91885)
2@ = Actor.Create(Special, #SPECIAL02, 1921.177, -1230.2, 18.14182)
3@ = Actor.Create(Special, #SPECIAL03, 1914.285, -1229.235, 17.38179)
4@ = Actor.Create(Special, #SPECIAL04, 1912.606, -1225.933, 17.59943)
5@ = Actor.Create(Special, #SPECIAL05, 1911.651, -1228.455, 17.18024)
6@ = Actor.Create(Special, #SPECIAL06, 1913.453, -1229.186, 17.24896)
7@ = Actor.Create(Special, #SPECIAL07, 1912.281, -1231.196, 16.87708)

a



1@ = Actor.Create(#01, 1919.828, -1230.462, 17.91885)
2@ = Actor.Create(#02, 1921.177, -1230.2, 18.14182)
3@ = Actor.Create(#031914.285, -1229.235, 17.38179)
4@ = Actor.Create(#04, 1912.606, -1225.933, 17.59943)
5@ = Actor.Create(#05, 1911.651, -1228.455, 17.18024)
6@ = Actor.Create(#1913.453, -1229.186, 17.24896)
7@ = Actor.Create(Special, #SPECIAL07, 1912.281, -1231.196, 16.87708)


:what:
I BAMBINI HANNO PAURA DEL BUIO....IL BUIO HA PAURA DI CHUCK NORRIS
0

#36 L'utente è offline   Wesser 

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

Inviato il 13 luglio 2009 - 16:33

L'"SCM" è un linguaggio creato appositamente per gta sa, quindi è molto limitato. Non puoi inventare e\o provare a modificare parametri se non si conoscono almeno le basi <_<. "Sanny Builder" possiede una buona documentazione di quello che alcuni parametri vogliano significare od i loro relativi valori.

Puoi consultarla da Aiuto->Guida in linea->SCM Documentation->GTA SA. Per trovare tutti gli opcode che ti interessano, invece, apri il file "sascm.ini" contenuto nella cartella "data\sa".

Ora analizziamo il tuo script. Non puoi cambiare la descrizione di ogni "opcode" per poterlo far funzionare. Per opcode si intende il numero che precede tutta le descrizione di quest'ultimo ed i relativi parametri. In pratica, sono funzioni richiamate dall'.exe (linguaggio macchina) ed in seguito convertite in linguaggio prettamente "umano", aggiungendoci la descrizione. Pertanto, tali funzioni non possono essere modificate dall'esterno perchè sono precompilate nell'.exe. Quindi, l'opcode:
023C: load_special_actor 'BALLAS1' as 1 

E' adibito solamente a far caricare i modelli speciali (praticamente quelli principali del gioco, visibili nelle cutscenes), e non a caricare modelli di pedoni. Ovviamente dico questo perchè mi avvalo della descrizione. Ciò che hai bisogno di modificare, è il numero che precede la descrizione ed i parametri, ma sarebbe meglio che prelevassi tutto l'opcode dal file apposito che lo contiene (riferendomi al "sascm.ini"), così da aver la descrizione ed il numero dei parametri esatti.

Nota: Consultando il file ".ini" e possibile visualizzare tutti gli opcode ed i parametri che ci interessano. La lista, presenta differenze rispetto a quella che è la visualizzazione all'interno del source. Cerchiamo di capire la struttura.
023C=2,load_special_actor %2d% as %1d%

Ora elenco quello che indicano i rispettivi parametri: opcode, numero parametri, parametro "2" ed "1". E' inutile spiegare come ricavare l'opcode "compilabile", ci si può rendersene conto anche autonomamente. Per curiosità, ogni parametro è delimitato da "%" ed il tipo, dopo il numero di esso (la lettera "d"). Questa dovrebbe essere la lista completa.
# GTA3-GTAvc-GTAsa
; d% = valore decimale, variabile locale e globale, float, o integer
; g% = riferimento stringa gxt 8-byte
; h% = intero esadecimale
; m% = riferimento statistiche ?
; o% = tutti i tipi di oggetto dei modelli
; p% = riferimento puntatore label
; s% = riferimento stringa 16-byte ?
; x% = script esterno

# GTA3
; b:set_from_position/clear% = valore sconosciuto abilita\disabilita

# GTAsa
; f% = modello pedone speciale
; w% = riferimento audio wav ?

# GTA3-GTAvc
; a% = riferimento al particle .cfg
; b:in-sphere/% = valore sphere abilita\disabilita
; b:enabled/disabled% = valore parametro abilita\disabilita
; b:day/night = valore scelta tempo atmosferico
; b:back/% = valore fade abilita\disabilita
; b:unfrozen/frozen% = valore blocco abilita\disabilita
; b:true/false% = sostituisci con true se <> 0, sostituisci con false se = 0
; b:on/off% = valore parametro abilita\disabilita
; b:kill/arrest% = valore scelta polizia
; b:off/wander% = valore "wander" abilita\disabilita
; b:visible/invisible% = valore visibilità abilita\disabilita
; b:bar/number% = valore scelta tipo del testo-stato
; c% = numero arma
; e% = tipo pedone
; i% = intero binario
; u% = gruppo pedone
; z% = riferimento stringa zona 8-byte

# GTAvc-GTAsa
; t% = riferimento agli .ide dell'oggetto dei modelli

Comunque sia, questi sono parametri che, in futuro, potremmo utilizzare per la creazione di un nostro opcode. Ripeto, solo con librerie (o meglio .dll\.asi) aggiuntive.

Nota: Per comodità meglio consultare il source del file "main.scm" decompilato, così potresti anche vedere in quale occasione l'opcode desiderato viene utilizzato ed a quale scopo. Molto spesso, per quanto riguarda gli opcode più utilizzati, capita che manca il numero dell'opcode. Non vi è alcuna ragione di preoccuparsi perchè, in quel caso, si è di fronte all'utilizzo di una classe, ovvero un'abbreviazione di tutto l'opcode omettendo il suo numero. Le classi, hanno un'aspetto simile alle funzioni che vengono utilizzate nei linguaggi di programmazione come C#, C++, VB, e via dicendo. Cercando nell'scm l'opcode "0247" (contenuto nell'esempio successivo) non è possibile trovarlo, perchè utilizza una classe. Per ovviare a ciò, aprire il file "classes.db" in "data\sa" e consultare l'indice per trovare il contenuto di quello che stiamo cercando (nel nostro caso "Model").
Load,0247,0,0,("ModelID%i")

Trovata la linea che ci interessa cerchiamo di capire cosa significa. "Load", è la dicitura che segue dopo il punto.
Model.Load

Il paramtro successivo, invece, è l'opcode che cercavamo. Tale modifica è utile nel momento in cui non ricordiamo il nome di un opcode e sappiamo qual'è il nome della classe (anche se una volta che abbiamo scritto ".", "Sanny Builder", automaticamente, aprirà una sotto finestra che elencherà tutti i vari opcode cui e stato settato il nome della classe in base al campo digitato in precedenza, come "Model", "Actor", "Object", "Car" ed "Animation".

L'opcode, di cui parlavamo in precedenza (023C), deve essere quindi sostituito con il seguente:
0247: load_model #BALLAS1 

Prima di tutto occorre caricare il modello e se, dunque, è stato caricato correttamente, proseguire con il codice successivo. Esempio:
0247: load_model #BALLAS1 

:Model_load
if 
   not Model.Available(#BALLAS1)
jf @Model_load2 
wait 0 
jump @Model_load

:Model_load2
...

Nota: Qualsiasi loop deve essere sempre preceduto da un "wait", altrimenti il gioco crasherà. In questo caso la condizione prima è falsa, poi viene letto il "wait", ed infine ritorna al label di partenza. A questo punto, la condizione sara sempre vera e continua con la lettura del codice successivo.

Ciò accade perchè, delle volte, vi è un ritardo del caricamento del modello richiesto, ed in assenza, può crashare e non.

Per quanto concerne l'opcode "009A", ovvero "Actor.Create", consulta la documentazione di "SB" per "fixare" il parametro inadeguato del tipo di pedone (generalmente "CivMale" o "4", ma se in missione "Mission1" o 21), ed il nome id del modello corretto.
1@ = Actor.Create(Mission1, #BALLAS1, px, py, pz)

E così via. Ricapitolando, per i pedoni carica i modelli con "Load.Model" o l'opcode "023C" per quelli speciali, controlla se sono stati caricati o meno con "Model.Available" e "spawnali" con l'opcode "009A", utilizzando il modello caricato con "Load.Model" per i pedoni (#BALLAS1... #FAM1...) e l'opcode 023C per gli attori speciali (#SPECIAL01...).
Model.Load(#BALLAS1)
Model.Load(#BALLAS2)
Model.Load(#BALLAS3)
Model.Load(#FAM1)
Model.Load(#FAM2)
Model.Load(#FAM3)
023C: load_special_actor 'SWEET' as 1

// Inserisci il thread che verifichi se il modello è stato correttamente caricato quì

1@ = Actor.Create(Mission1, #BALLAS1, 1919.828, -1230.462, 17.91885)
2@ = Actor.Create(Mission1, #BALLAS2, 1921.177, -1230.2, 18.14182)
3@ = Actor.Create(Mission1, #BALLAS3, 1914.285, -1229.235, 17.38179)
4@ = Actor.Create(Mission1, #FAM1, 1912.606, -1225.933, 17.59943)
5@ = Actor.Create(Mission1, #FAM2, 1911.651, -1228.455, 17.18024)
6@ = Actor.Create(Mission1, #FAM3, 1913.453, -1229.186, 17.24896)
7@ = Actor.Create(Mission1, #SPECIAL01, 1912.281, -1231.196, 16.87708)

Spero di esser stato di aiuto.
Notice: Undefined variable: Fabio in /home/gta-expert/index.php on line 206
0

  • (2 Pagine)
  • +
  • 1
  • 2
  • 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