Tutorial - GTA cleo/.scm Skriptanje

poruka: 11
|
čitano: 8.859
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
neaktivan
offline
Tutorial - GTA cleo/.scm Skriptanje

1. Uvod-

 

Evo ja sam odlucio napraviti tutorial o scriptanju GTA San Andreas-a.

GTA San Andreas vise nije bas nesto popularna igra, ali ja sve GTA serijale

smatram najbolje napravljenim free room/sandbox/rpg igrama.

 

Pa evo da pocnemo.

Mjenjanje skripte neke igre je zapravo modiranje iste.

Modiranje je zapravo editiranje/promjena igre, pa to dovodi i do

total conversion -a, a to znaci da netko (najcesce to neki tim radi)

izmjenu sve u igri i izgleda skoro kao neka druga igra...

Ali mi necemo ici toliko daleko...

 

Vratimo se skriptanju.

Za GTA:SA skriptanje će nam biti potrebni neki alati i dodaci...

To su-

Sanny builder (3): http://sannybuilder.com/

Cleo 4: http://cleo.sannybuilder.com/

 

Programi gore navedeni su naravno besplatni.

 

Pa evo pocnimo:

Kad instalirate cleo 4 u GTA San andreas directory, morate imati:

 

-bass.dll

-vorbisFile.dll

-vorbishooked.dll

-cleo.asi

-CLEO folder(mapu)

 

Sanny builder 3 ne treba biti instaliran u GTA:SA dir...

 

Kad pokrenete Sanny builder 3 vidjeti cete ovo:

 

Sanny bilder Sanny bilder
 

Evo vidite sad gdje se sto nalazi, ali cu jos pojasniti 2 stvari:

 

Compile - evo to cu jednostavno objasniti: to sluzi za spremanje file -ova

u obliku: <ime datoteke>.format, ime datoteke moze

biti bilo kakvo, a format .cm, .cs, .scm (za GTA:SA).

Npr.: skripta.cs.

Compile + copy - Radi istu stvar kao i compile, sprema gdje god mi spremimo

+ copyra tamo gdje se skripta treba nalaziti (u GTA:SA dir - CLEO folder. )

Decompile - i to cu jednostavno objasniti: otvara skripte formata .cm, .cs i .scm.

 

U Sanny bilderu ima i nekih alata, pogledajte sliku:

 

Sanny builder alati Sanny builder alati
 

Evo kao sto vidite, to su alati koje cemo koristiti:

 

Coords manager- GTA:SA mora biti pokrenut ako zelimo koristiti taj alat.

On nam omugucava da dobijemo koordinate mjesta gdje se player (CJ) nalazi.

Koristi cemo ga kad cemo nesto kreirati ili spawn -ati (npr.: vozila, oruzja/pickups,

objekte....)

Opcode search- taj alat koristimo da pronadjemo 'opcode'.

 

Opcode je npr.:  00A5:

Ako to kopirate u Sanny builder ( 00a5) i pritisnete F1 onda ce cam se pojaviti

nesto ovakvo:

00A5: create car #PONY at 0.0 0.0 0.0s tim kreiramo novi auto..

 

Evo gotovi smo sa prvom lekcijom Uvodom...

 

Nastavit cu s tutorijalom kasnije ili sutra...

 

 

 

 

AOM... (mmm)
Poruka je uređivana zadnji put pet 30.3.2012 19:50 (Games 4 life).
Moj PC  
5 1 hvala 2
14 godina
neaktivan
offline
Re: Tutorial - GTA cleo/.scm Skriptanje

2. Struktura code -a

 

U uvodu smo spomenuli opcode.

Skripta se moze, a i nemora sastojati

od opcode -a, ali za neke stvari se nuzno mora

koristit.

Mi cemo raditi nove skripte, nevemo modirati

glavnu skriptu (main.scm)

No dobro, pocnimo od vrha programa.

Na pocetku svake CLEO scripte morate napisati:

 

{$CLEO .cs}

To kaze copileru (a compiler procesoru :D) da je to

CLEO skripta. Umijest .cs se jos moze staviti i

.cm.

 

Onda moramo napraviti thread i dati mu ime.

To je u GTA jeziku nesto kao...kao

dio programa koji u ovoj nasoj skripti radi

neki posao...

Mi cemo u ovom tutorialu u skriptama

koristiti samo jedan thread (barem za sada).

U main.scm ima puno thread -a.

Uglavnom evo kako cemo ga napraviti>

 

thread "ime_threada"

 

Rijec thread bi vam se trebala zacrniti kad ju napisete

(ovako: thread ), to je zato jer je to keyword.

 

Ja uvijek poslije toga koristim opcode:

 

0A95: enable_thread_save

 

To sluzi za to da se skripta uvijek loada

kod istog load game -a. Nije obavezna

ta opcode -a.

 

I potom slijedi nas code:

 

// nas code

 

I onda zavrsetak thread -a:

0A93: end_custom_thread

 

*Svaka CLEO scripta mora zavrsavati sa opcodom 0A93: !!!*

 

I onda bi nas kod trebao izgledati ovako:

 

{$CLEO .cs}

thread "tutorial"

0A95: enable_thread_savings

 

//do

//something

 

0A93: end_custom_thread

Evo.

 

I naravno ova skripta nista ne radi,

samo kreira thread i zavrsava ga :D.

Ovo je bio samo primjer strukture koda.

 

S tutorialom cu nastaviti sutra :D

 

AOM... (mmm)
14 godina
neaktivan
offline
Re: Tutorial - GTA cleo/.scm Skriptanje

3. Varijable

 

U GTA jeziku varijable se koriste kod kreiranja

vozila, actora (covjeka), objekta......

 

Varijable koje se koriste su:

Local variables (lokalne varijable)

Global variables (globalne varijable)

 

Lokalne varijable se najcesce koriste

kad nesto kreiramo ili radimo

nesto kratko sa njima.

Oznacavamo ih ovako:

<broj>@     npr.: 1@

 

*Lokalne varijable se uvijek oznacavaju brojem,

a ne slovima*

*Lokalne varijable oznacavajte brojevima samo od 0 - 30*

 

Globalne varijable se koriste kad radimo s vaznijim

stvarima i kad jednu te istu varijablu koristimo cesto u kodu.

Oznacujemo ih ovako:

$<ime_varijable>      npr.:  $tutorial

 

*U imenima globalnih varijabli mozete koristiti

i brojeve i slova. Ja preporucujem da ne koristite

brojeve za naziv globalnih varijabli, da ne koristite

razmak nego _ (npr.: ne $tutorial primjer nego $tutorial_primjer),

te da vam naziv globalne varijable nema vise od 20 znakova*

AOM... (mmm)
Poruka je uređivana zadnji put pet 30.3.2012 19:55 (Games 4 life).
14 godina
neaktivan
offline
Re: Tutorial - GTA cleo/.scm Skriptanje

4. LOOP

 

:LABLE

wait 0 ms

if

Model.Available (#PCJ600)

jf @LABLE

 

Loop -ovima se koristimo kad zelimo "skociti" na neko

mjesto ili nesto provjeriti ili... Ma vidjet cete s vremenom za sto

cemo sve koristiti Loop -ove.

 

Analizirajmo onaj gore loop.

 

Prvo smo ga napravili/dali smo mu ime:

 

:LABLE

 

*Svaki loop mora imati na pocetku svoga imena :  !*

 

 

 

wait 0 ms 

 

Ako znate engleski, ova linija/dio loop -a vam govori sama

za sebe. To koristimo kad zelimo nesto cekati.

Mozemo ju koristiti i izvan loop -a...

Makar i ne napisete ovo 'ms' na kraju, vrijeme se racuna

u milisekundama... ( 1000 ms = 1 sec ).

i jos jedna vazna stvar:

 

*Svaki loop bez obzira dali mi zelimo cekati ili ne,

mora imati wait komandu.*

 

Idemo dalje:

 

if

To govori samo za sebe...

 

 

Model.Available (#PCJ600)

Poslije "if" moramo staviti sto zelimo ako je to tako kako mi napisemo...

Ovime smo zadali da je model (u ovo slucaju motor PCJ600 ) dostupan...

 

I poslijednje:

 

jf @LABLE

To znaci da ako nije nesto u loop -u tocno, onda 'skace' nazad na

pocetak loop -a i radi sve ponovo do dok nije tocno.

 

jf - skracenica za jump, false ... Za istu stvar mozemo koristiti i

jump_if_false .

 

E kad hocemo bilo kamo po kodu 'skakati' moramo kosristiti:

@<ime_loop -a ili mjesta>    npr.: @LABLE

 

 

I ovim nasim loop -om kad ga prevedmo na nas jezik bilo bi:

 

E bok ja sam LABLE

Necu nista cekat  // ali i mogu

E ako je

onaj model tamo slobodan kasnije kad mi sef kaze da ga uzmem, uzet cu ga

ako to nije tocno moram se prisjetiti i nazad to sve raditi

 

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

 

 

 

 

AOM... (mmm)
Poruka je uređivana zadnji put pet 30.3.2012 19:57 (Games 4 life).
14 godina
neaktivan
offline
Re: Tutorial - GTA cleo/.scm Skriptanje

5. Prva prava skripta {#}

 

Sad kad smo se upoznali sa nekim NAJosnovnijim stvarima,

mozemo napraviti nasu (mislim tvoju/vasu :D) prvu skriptu.

 

Pa krenimo redom:

 

{$CLEO .cs}

thread "skripta"

0A95: enable_thread_saving

 

Ovo znate, e sada nesto novo:

 

Model.Load (#PCJ600)

038B: load_requested_models

 

Da pojasnimo:

 

Ovime pozivamo model da se ucita, Model.Load()  govori za sebe, a

ovo (#PCJ600) je model koji pozivamo...

 

*Svaki put kad radite nesto s modelom, prije imena morate navesti znak-  #*

 

I sada krece loop:

 

:LABLEwait 0 msifModel.Available(#PCJ600)jf @LABLE

To smo pojasnili...

Sada taj model mozemo koristiti:

 

Car.Create(1@, #PCJ600, 2494.4602, -1678.01, 13.3385)

 

Evo s ovime kreiramo motor ispred kuce.

Ima 5 parametara:

 

1. variajbla

2. model

3. x floating point -- koordinata x

4. y floating point -- koordinata y

5. z floating point -- koordinata z

 

Kako znamo koje su koordinate grove street -a (mjesta gdje

ce se motor spawn -ati) ?

Prije smo spomenuli one alate koje Sanny builder ima...

Koristite Cords manager -a.

Jednostavno dodjite ispred CJ -eve kuce i pritisnite tipku

START ili sto vec da izadjte na radnu povrsinu, (nemojte

izaci iz igre :D jer necete moci ucitati koordinate) i jednostavno

u coords manageru pritisnite onu tipku 'read' i znate koordinate !

 

Model.Destroy(#PCJ600)
0A93: end_custom_thread

 

I evo zadnje sto trebamo je unload -ati model

i zavrsiti thread (bez brige, unloadanjem modela

nece model iz igre nestati :D)

 

Pa ce cijela skripta biti ovakva:

 

{$CLEO .cs}thread "new"0A95: enable_thread_savingModel.Load(#PCJ600)038B: load_requested_models :LABLEwait 0 msifModel.Available(#PCJ600)jf @LABLECar.Create(1@, #PCJ600, 2494.4602, -1678.01, 13.3385) Model.Destroy(#PCJ600)0A93: end_custom_thread

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

 

Ako imate pitanja, javite se u PM

Sa tutorijalm cu nastaviti kasnije ili sutra :D

AOM... (mmm)
14 godina
neaktivan
offline
Re: Tutorial - GTA cleo/.scm Skriptanje

6. Zasto ne radimo skripte u main.scm (glavnoj skripti igre)?

 

Zasto jednostavno ne skriptamo u main.scm, glavnoj scripti ?

Zato jer u skriptanju GTA postije granice:

 

Pa vidite do kolko moze velicinu imat...

Dobro ako pisemo par skripta i stavimo u main.scm nije problem,

ali kad bi napisali neku skriptu unutra morali mismo ici new game,

a ne load game (cijelu igru ispocetka)...

 

 

AOM... (mmm)
Poruka je uređivana zadnji put sri 5.10.2011 10:40 (Games 4 life).
15 godina
neaktivan
offline
Tutorial - GTA cleo/.scm Skriptanje

Zasto mu stalno lupate TD? Ako mislite da mozete bolje pokazite svoje znanje.

My computer once beat me at chess, but we got even after a round of boxing.
 
11 0 hvala 0
17 godina
neaktivan
offline
Tutorial - GTA cleo/.scm Skriptanje

Svaka čast na trudu, koga zanima vjerujem da će mu dobro doći.

&amp;amp;amp;amp;amp;amp;amp;quot;Yesterday is a history, tommorow a mistery, but today is a gift. Thats why it's called present&amp;amp;amp;amp;amp;amp;amp;quot;
Moj PC  
1 0 hvala 0
16 godina
neaktivan
offline
Re: Tutorial - GTA cleo/.scm Skriptanje
rustweaver kaže...

Zasto mu stalno lupate TD? Ako mislite da mozete bolje pokazite svoje znanje.

Upravo to. Covijek se potrudi da napise 3 stranice a neki tamo desni luzeri lupaju td zato sto nemaju zivota.

17 godina
offline
Re: Tutorial - GTA cleo/.scm Skriptanje
rustweaver kaže...

Zasto mu stalno lupate TD? Ako mislite da mozete bolje pokazite svoje znanje.

haters gonna hate

'Genius might be the ability to say a profound thing in a simple way' Charles Bukowski
14 godina
neaktivan
offline
Re: Tutorial - GTA cleo/.scm Skriptanje

7. Prva misija

 

Prvo ide ono sto na svaki vrh skripte ide, a to znate.

 

Load -iramo modele:

 

Model.Load(#JESTER)

Model.Load(#WMYDRUG)

Model.Load(#COLT45)

 

:MODEL_LOAD_CHECK

wait 0 ms

ifModel.Available(#JESTER)

Model.Available(#WMYDRUG)

Model.Available(#COLT45)

jf @MODEL_LOAD_CHECK
Onda napravimo marker(to je onaj crveki 'krug' na koji morate stati d pokrenete misiju.

 

Marker.CreateIconAndSphere(1@, 15, 2452.7034, -1771.4822, 12.6792)

 

Parametre bi trebali znati, isto kao i kod kreacije objekta, vozila... samo drugi parametar vam je

icon integer... Morate izabrati ikonu koju hocete... A lista ikona vam je tu i samo izaberite broj

i stavite tu u drugi parametar ;) :

 

 

I onda sto se događa ako player stane u njega:

 

:MARKER_CHECKwait 0 msif 00EC:   actor $PLAYER_ACTOR 0 near_point 2452.7034 -1771.4822 radius 2.0 2.0jf @MARKER_CHECK

Zapravo, ovdje se nista ne dogadja ako player stane u marker... To samo kaze da se

moze nesto dogadjati ako player stane u marker u radujusu od 2 metra.

 

I onda pocinje nasa misija...

Pa napravimo hajdemo napraviti neprijatelja, iznad njega napravimo strelicu i ako

ga ubijemo, playeru se dodaje 5000 $.

 

Actor.Create(2@, Dealer, #WMYDRUG, 2457.0176, -1791.1479, 12.6542 

Marker.Disable (1@)

Kreirali smo neprijatelja, drugi parametar vam bas i nije nesto vaza...

Prvi je varijabla, drugi model actora kojeg hocemo (moramo ga prije load -ati, i jemo), i

normalno koordinate  u igri (x, y, z)..

I micemo marker.

 

 01B2: give_actor 2@ weapon 22 ammo 60 // Load the weapon model before using this Marker.CreateAboveActor(3@, 2@)Actor.WeaponAccuracy(2@) = 100

 

Opcode 01B2: je za to da se actoru daje oruzje... Ima 3 parametra:

1. Actorova varijabla

2.Broj oruzja

3. broj metaka.

 

Prvi parametar znate, e a gdje pronaci broj oruzja ?...

Idite tamo gore na onu traku u sanny builderu gdje vam pise file, tools, help itd..

Odite pod help i onda Contents... Otvorit ce vam se pomoc.. Onda idite tamo sa ljeve

strane pronaci SCM documentation i pritisnite na to.. Zatim:

GTA SA > Weapon numbers...

Pronađite dolje pistolj #colt45 i imate ljevo broj... pise 22.. to i koristimo u opcode -i..

I normalno znate kolko metaka zelite...

 

Sljedeca linija je da se kreira novi marker bod varijablom 3@ na actoru 2@.

I treca linija je za agresivnost actora.. ovdje u zagradu pisete prvi parametar,

varijablu actor -a i izvan zagrade kolko hocete da actor bude agresivan... Ako ga

pocnete pucati, on se nece razbijezati kao sto rade ljudi po gradu ako cuju vas pucanj,

nego ce uzvratiti paljbu...

 

05E2: AS_actor 2@ kill_actor $PLAYER_ACTORrepeatwait 0until Actor.Dead(2@)
Ovime zadajemo da actor 2@ hoce ubiti $PLAYER_ACTOR -a

i to radi tako dugo do dok nije mrtav...

 

Marker.Disable(3@)01E3: show_text_1number_styled GXT 'M_PASS' number 5000 time 5000 style 1 Player.Money($PLAYER_CHAR) += 5000Model.Destroy(#COLT45)Model.Destroy(#WMYDRUG)0A93: end_custom_thread

 

I evo ako smo ga ubili marker ce se maknuti i pokazat ce text MISSION PASSED $5000

i dobit cemo 5000$..

 

I na kraju unloadamo modele i zavrsavamo thread.

 

Pa cijela skripta izgleda ovako:

 

{$CLEO .cs}
thread "NEWMISSION"
0A95: enable_thread_saving
Model.Load(#WMYDRUG)
Model.Load(#COLT45)
:MODEL_LOAD_CHECK
wait 0
if
Model.Available(#WMYDRUG)
Model.Available(#COLT45)
jf @MODEL_LOAD_CHECK
Marker.CreateIconAndSphere(1@, 15, 2452.7034, -1771.4822, 12.6792)
:MARKER_CHECK
wait 0 ms
if
00EC:   actor $PLAYER_ACTOR 0 near_point 2452.7034 -1771.4822 radius 2.0 2.0
jf @MARKER_CHECK
Actor.Create(2@, Dealer, #WMYDRUG, 2457.0176, -1791.1479, 12.6542)
Marker.Disable(1@)
01B2: give_actor 2@ weapon 22 ammo 60 // Load the weapon model before using this
Marker.CreateAboveActor(3@, 2@)
Actor.WeaponAccuracy(2@) = 100
05E2: AS_actor 2@ kill_actor $PLAYER_ACTOR
repeat
wait 0
until Actor.Dead(2@)
Marker.Disable(3@)
01E3: show_text_1number_styled GXT 'M_PASS' number 5000 time 5000 style 1 
Player.Money($PLAYER_CHAR) += 5000
Model.Destroy(#COLT45)
Model.Destroy(#WMYDRUG)
0A93: end_custom_thread

 

Idite compile + copy i testirajte !.

 

misija je malo jadna, ali nemozete ovekivati da u tren oka napravite velkiu

misiju kao sto rockstar radi. :D

Poslije ceo radit vecu misiju...

 

 

AOM... (mmm)
Poruka je uređivana zadnji put pet 30.3.2012 19:46 (Games 4 life).
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice