Difference between revisions of "Finnish Tutorial"

From Wiki
Jump to: navigation, search
(New page: == Suomenkielinen EasyUO scriptaus opas == === Soikki, oppaan kirjoittaja === Moro, olen käyttänyt EasyUO:ta reilut 3 vuotta ja suurimman osan siitä myöskin scriptannut. Mitään ihm...)
(No difference)

Revision as of 13:51, 2 December 2008

Suomenkielinen EasyUO scriptaus opas

Soikki, oppaan kirjoittaja

Moro, olen käyttänyt EasyUO:ta reilut 3 vuotta ja suurimman osan siitä myöskin scriptannut. Mitään ihmeellistä en ole saanut sinänsä aikaan, monet tietävät minut "Piece of Cake Sparring" scriptan ansiosta. Sekään kerro mitään minun tän hetkisistä taidoistani, koska se on vanha kuin taivas. Ymmärrän kuitenkin koodia kuin tavallista tekstiä ja osaan tehdä yhden jos toisenkin asian EUO:lla. Päätin kirjoittaa tällaisen oppaan, jotta suomea puhuvilla immeisillä ( joilla on englannin taidoissa pieniä aukkoja ) olisi mahdollisuus oppia tämä "jalo" taito.

EasyUO lyhyesti

Mietit varmasti, että mitä kaikkea tällä voikaan tehdä. EUO kykenee kaikkeen mitä et normaalisti pystyisi tekemään. Eli älä unohda haaveita speedhackista ja toisen laukun sisällön tarkastelusta. On joitakin hienoja asioita missä EUO pystyy "huijaamaan". Esimerkiksi voit "scannata" toisen pelaajan varusteet ja laskea resisti ja muut herkut yhteen vaikka hänellä olisi kaapu peittämässä niitä. Pysty tehdä asioita nopeammin kuin voisit kuvitellakkaan tekeväsi käsin ja jos osaat hommasi, voit tehdä MITÄ tahansa, mitä olet tehnyt pelissä tähän mennessä. On olemassa scriptoja, jotka taistelevat yksinään gauntletissa ja raudankaivajia, jotka käyttävät kymmeniä runebookkeja avuksi taisetelevat vihollisia vastaan ja vievät pankkiin kaikki valmiiksi sulatetut harkot. Mahdollisuudet on rajattomat, juuri tämä sai minut innostumaan EUO:sta.

Oppaan tarkoitus

Käsittelemme nyt ainakin aluksi perusasioita, puhumista, liikkumista, tavaroiden käyttämistä ja muita perushommia. Koitan käyttää mahdollisimman paljon selkeitä esimerkkejä ja ehkäpä keksin joitain harjoituksiakin, mistäs sen tietää vielä tässä vaiheessa.


Peli välineet

Tarvitset:

  • Tietokoneen ( Ylläri )
  • Uusimman version EasyUO 1.5 betasta. ( HUOM: Ehdottomasti 1.5, koska jotkut komennot joita esitän, ei toimi vanhassa )
  • Aivot

HUOM:

  • Oletan oppaan aikana, että sinulla on Ultima online 2D clientti päällä ja olet kirjautuneena sisään aivan normaalisti.

Osa 1. Muuttujat

Jokainen ohjelmointi kieli tarvitsee jotain, mihin tallettaa asioita joita ohjelma sitten voi myöhemmin käsitellä. Niitä kutsutaan muuttujiksi. On tärkeää että ymmärrät eron erilaisten muuttujien välillä.

Globaalit muuttujat % ( Global variables )

Tämä on yleisin muuttuja tyyppi, jota tulet käyttämään scriptoissasi. Näiden avulla voi tallentaa kaikenmaailman asioita, niin numeroita kuin sanoja ja jopa lauseita.

Muuttujan nimeä ei voi käyttää ihan mitä tahansa.

set %Kunnollinen
set %Sa_moin
set %_Ja_Taas
set %jne5


set %7EIole

Käyttö on helppoa, kuten seuraavassa esimerkissä näkyy.

set %Muuttuja 10
set %Toinen 5
msg Muuttuja: %Muuttuja Toinen: %Toinen $
halt

Tämä oli yksinkertainen esimerkki. Hajoitetaan se nytten osiin ja tarkastellaan näitä komentoja vähän. set komento kertoo EasyUO:lle, että nytten toimitaan muuttujien kanssa ja muutetaan niiden arvoja. msg komento mahdollistaa puhumisen hahmollasi UO:ssa. halt Lopettaa scriptan pyörimisen.

Tehtävä:

  • Kokeile mitä tapahtuu jos poistat halt komennon.
  • Koita muuttaa muuttujien sisältöä ja nimiä

%Muuttuja ja %Toinen ovat kuten ehkä arvasit, muuttujia. Huomaa " % " merkki ennen nimeä. Se tarkoittaa että muuttuja on globaali, eli "näkyy" jokapuolella scriptaa. Voit siis kutsua ja muokata globaalia muuttujaa missä tahansa osassa scriptaa. Mutta VAIN siinä kyseisessä scriptassa, missä olet muuttujan luonut. Eli vieressä pyörivä scripta ei tiedä siitä muuttujasta mitään. Kun scripta lopetetaan nämä muuttuja lopettavat olemassa olon. Tämä kannattaa muistaa.

Pysyvät muuttujat * ( Persistent variables )

Näiden muuttujien erikoisuus on pysyvyys ja näkyvyys. KAIKKI Scriptat pystyvät näkemään nämä muuttujat ja nämä EIVÄT katoa kun sammutat tietokoneen. EasyUO tallentaa ne tietokoneen registeriin. Tämä on mainio keino tallentaa scriptan tiedot, jotta niitä ei tarvitse kysyä ensikerralla.

set *UnaTesti Toimii
halt

Aja tuo pätkä EUO:lla. Sitten kokeile tätä.

msg *UnaTesti $
halt

Mitä tapahtui? Aivan oikein, se muistaa nyt, mitä pistits inne talteen. Eli toisin sanoen, se tallensi sen kovalevylle talteen.

Systeemi muuttujat # ( System variables )

Avaa EUO ja katso oikeaan reunaan. Siellä pitäisi näkyä kaikenlaisia ihmeellisiä muuttujia. Monen nimestä ja sisällöstä voi päätellä mitä ne pitävät sisällään. Nämä systeemi muuttujat siis ovat sellaisia joita Ultima antaa meille.

Katsotaas vähän listaa:

Character info

Kuten arvata saattaa, niin nämä kertovat hahmon sijainnin maailmankartalla. (x,y) (0,0) on kartan vasen alakulma.

Kertoo onko hahmo haamu vai ei.

Statusbar

  • #CharName Sisältää hahmon nimen
  • #Hits Kertoo tämän hetkisen Energian määrän

Jne jne.. Katsele vähän listaa jotta ymmärrät vähän, mitä kaikkea UO meille tarjoaa.

Jos haluaisit vaikka saada nykyiset energia talteen, muuttujaan siis, niin se käy näin.

set %Energiat #Hits
msg HP: %Energiat TAI: #Hits Mana: #Mana $

Nimiavaruus muuttujat( Namespace variables )

Tästä aiheesta voisi kirjoittaa oman oppaan ja ne ovat vain tasokkaille koodareille. Eli ei mitään mitä alussa pitäisi tietää. Jos kuitenkin kiinnostaa, niin voit katsoa lisää aiheesta täällä ( englanniksi ) NameSpace .


Osa 2. Perusteet

Koitetanpas saada aikaiseksi jotain "siistiä".

Liikkuminen

Liikkuminen on erittäin helppoa ja monesti erittäin tarpeellista, joten tarkastellaampa vähän miten se tapahtuu.

set %PaikkaX #CharPosX + 1 
set %PaikkaY #CharPosY + 1

move %PaikkaX %PaikkaY 0 5s
halt

Ajappa tuo skripti EUO:ssa ja katso mitä se tekee. Sen ainakin pitäisi kävellä johonkin suuntaan askeleen verran. Koodia tarkastelemalla, helposti ymmärtää mitä siinä tapahtuu. Aluksi luodaan kaksi muuttujaa ja sijoitetaan niihin tiedot ukon sijainnista JA lisätään siihen 1. Sen jälkeen käytämme komentoa move ja annamme sille koordinaatit ja muut tiedot ja sitten se yrittää päästä siihen annettuun pisteeseen.

move komento tarvitsee tietoa pikkaisen, kuten esimerkissä näkyy.

move {X} {Y} [toleranssi] [yritysaika]

  • {X} = X piste johon yritetään liikkua
  • {Y} = Y piste johon yritetään liikkua
  • [Toleranssi] = 0 tarkoittaa, että yritetään TÄSMÄLLEEN siihen pisteeseen, mikä annettiin. Joten 5 tarkoittaa että riittää kunhan ollaan 5 askeleen päässä pisteestä.

[yritysaika] = Kuinka kauan yritetään päästä kyseiseen pisteeseen

Event PathFind on myös hyvä ja helppo tapa päästä haluttuun paikkaa.

event PathFind {X} {Y} [Z]

Aika helppo käyttöinen vai mitä? X, Y ja Z piste, ei muuta.

Tehtävä:

  • Katso Ukon sijainti EUO:n systeemi muuttujista, kävele kauemmaksi ja koita päästä scriptan avulla takaisin.
  • Kokeile Move :n ja Event PathFind :in eroja.

ID ja TYPE

Tämä on jo vähän monimutkaisempi prosessi, MUTTA ei silti mikään vaikea. Jotta ymmärtäisimme paremmin EUO ja UO:n tapaa käsitellä tavaroita, täytyy meidän tutustua ID ( tunnisteeseen ) ja TYPE ( Tyyppiin )juttuihin.

ID

ID koostuu 4 - 7 ( kenties :) ) kokoisesta kirjain sarjasta. Esim CJFHUYG , UGJSHSY , YTHI , HDKDIUG jne. ID On kuin Sosiaaliturvatunnus, sormenjälki tai DNA. JOKAISELLA TAVARALLA ON ERI ID. Pidä se mielessä.

Siis:

JOKAISELLA TAVARALLA ON OMA ID

  • Ei ole kahta tavaraa samalla serverillä joilla olisi sama id.
  • ID:n avulla voimme siis tunnistaa UO:n asiat ja esineet toisistaan, myös ulkonäöltään samanlaiset.

TYPE

Tyyppi koostuu 2-3 kokoisesta kirjain sarjasta. Esim KUF, WZF , SZF.. Tyyppi on sama kaikilla saman tyyppisillä tavaroilla. Esim. Bloodmossin Tyyppi on JUF. Se on AINA sama sille, ei koskaan muutu ( Ellei OSI tee jotain aivan älytöntä ). Tyyppi on kuin Maan nimi, rotu tai vaikka Auto. Kun puhutaan autosta, tiedät mikä se on, Mutta et tiedä mitään mun autosta. Tyyppi on vain yleinen nimitys samanlaisille tavaroille. ID on jokaiselle tavaralle erikseen.

TYYPPI Lyhyesti

  • Tyyppi on sama kaikille samannäköisille tavaroille

Finditem ( tavaroiden etsiminen )

Finditem komento on erittäin hieno ja mahtava ominaisuus EUO:ssa. Sen avulla voimme etsiä tavaroita, jotka on ladattu UO:n clientin muistiin. Tässä pitää ymmärtää, että EUO "näkee" vain 18 askelta joka suuntaan ukosta. Ei yhtään enempää vaikka tekisit mitä. Jos näkee enemmän, niin sitten on jotain ihmeellistä sattunut.

Tarvitset tätä hommaa varten runebookin tai jonkun muun kirjan. Tai oikeastaan mikä tahansa käytettävä tavara käy. Käytettävällä tarkoitan tavaroita joita pitää tupla klikata jotta jotain tapahtuu. Sen tavaran pitää olla laukussasi.

TYYPIN Etsiminen

TYPE:n löytäminen on helppoa. Helpoin tapa on liikuttaa jotain esinettä ( tietenkin sitä, minkä Typeä selvitellään ) ja katsomalla sitten systeemi muuttujista ( EUO:n Oikeasta laidasta ) #lLiftedType :n arvo. Ei ollut vaikeaa, kokeileppas liikutella muita tavaroita ja katso kuinka se muuttuu.

Finditem Itse

Noniin, ota talteen haluamasi tavaran TYPE. Kuvitellaan että se on KUF

finditem KUF C_ , #BackPackID
set #lobjectID #findid
event macro 17
halt

Huh, nyt parahti jännäkakka housuu. Tuli aika söhellys siitä vai? Katsotaanpas mitä siinä oikein värkkäillään.

finditem KUF C_ , #BackPackID KUF = Blackpearlin tyyppi, eli sitä etsitään nyt. C_ = Container = Laatikosta etsitään. Voisi olla myös G_ eli ground, jolloin etsitään maasta. , = string operator. Yhdistää kaksi sanaa toisiinsa. Tästä kohta lisää vähän.

  1. BackpackID = Sisältää reppusi ID:n. Yhdessä C_ kanssa, tarkoittaa että etsitään nimen omaan TÄSTÄ laukusta.

Noniin. Jos sinulla on laukun ID, voisit tehdä haun myös näin ... C_IDIDID ,mutta koska meillä on ID muuttujassa, emme voi vain kirjoittaa sitä yhteen näin, C_#backpackID. Siksi käytämmä siinä välissä " , " merkkiä. Joten kun EUO ohittaa tuon rivin, se lukee sen ( kuvitellaan että #backpackID:n sisältä on abcdef ) C_ABCDEF. Ymmärsitkö? Ei sillä niin ole vielä väliäkään.

Voit myös etsiä useampaa tavaraa yhtäaikaa näin, KUF_ZLF_ABC_EDF_JNE.

Aina kun finditem komentoa käytetään, se päivittää kaikki systeemi muuttujat "find item" otsikon alta.

Nämä siis:

#FINDID      ; Löydetyn tavaran ID
#FINDTYPE    ; Löydetyn tavaran TYPE
#FINDX       ; Tavaran X piste
#FINDY       ; Tavaran Y piste
#FINDZ       ; Tavaran Z piste
#FINDDIST    ; Etäisyys ( askelta ) 
#FINDKIND    ; -1 Ei löytynyt mitään tavaraa, 0 tavara on laatikossa , 1 tavara on maassa
#FINDSTACK   ; Kuinka monta niitä on samassa nipussa 
#FINDBAGID   ; Laukun ID mistä se tavara löytyi
#FINDREP     ; Tavaran maine, ihmiset vain, 1 (Blue),2 Friend (Green), 3 Grey (Grey - Animal), 4 Criminal (Grey),
5 Enemy (Orange), 6 Murderer (Red), 7 Invulnerable (Yellow)
#FINDCOL     ; Tavaran väri (hue) 
#FINDINDEX   ; Kertoo mitä tavara "tasoa" katsotaan
#FINDCNT     ; Kertoo kuinka monta "tasoa" löytyi.

#FindCnt kertoo kuinka monta tavaraa löytyi. Nyt pitää huomioida, että se laskee kaikki esiintymät tavarasta erillisenä tavarana. Eli, jos inulla on kolme nippua Bloodmossia repussa ja yrität etsiä sitä, niin se löytää 3 ( #findcnt = 3 ).

Tämä on monimutkaista, mutta ei haittaa vaikka et heti käsitäkään kaikkea. Kyllä se siitä sitten kun harjoittelee.

Jos löydät vaikka 5 tavaraa, ihmettelet, että "miten hemmetissä mä saan noiden muiden tavaroiden ID ja sijainnin selville?". Ratkaisu on helppo, #findindex. Kun etsiskelet tavaroita, huomaat että #findindex on aina 1. Koita etsiä jotain tavaraa, mitä tiedät että sinulla on enemmän kuin yksi.

finditem KUF C_
msg #findID tavara 1 $
set #findindex 2
msg #findid tavara 2 $
halt

Huomasitko? ID muuttui keskenkaiken, miten se on mahdollista? #findindex. Sitä voi kuvitella jonkin sortin tasona. Ekalla tasolla on ensiksi löytyneen tiedot ( kaikki mitä listasin hetki sitten ), toisella tasolla on samat tiedot toisesta tavarasta, kätevää? Kyllä!.

Tavaran Käyttö

Sitten suoritetaan paluu aiheeseen :)

finditem KUF C_ , #BackPackID
set #lobjectID #findid
event macro 17
halt

Meillä oli tällainen esimerkki tuossa aikaisemmin. Finditem on nyt jotenkin hallussa ( älä jännitä, ei haitta vaikka et vielä ymmärtäisi, kuhan tiedät vain mitä sillä tehdään jotenkin ).

Löysimme siis KUF:in ja sen ID on tallennettu tietenkin #findid muuttujaan. #LobjectID, pitää sisällään tiedot tavarasta, jota on viimeksi käytetty. ( Tiedät varmasti UO macron "use last object" , tämä pitää sen objectin tiedot sisällään ). Tuossa noin asetamme ( set ) viimeksikäytetyn tavaran id:ksi (#lobjectID) juuri llöytämämme ID:n (#findid).

set #lObjectID #findid

Sitten tulee "event macro 17". Event macrot, on ultiman valmiita macro toimintoja. Niitä mitä voit siis laittaa pikanappeihin ihan normaalistikin. Klikkaa --> Event Macro <-- nähdäksesi listan kaikista event macroista. SUOSITTELEN että katselet hetken sitä listaa. Ymmärrät sen avulla kuinka helppo joitakin asioita on tehdä EUO:lla.

Event macro 17 on " USE LAST OBJECT ". Eli kun käytät tätä macroa, niin se tarkistaa #LobjectID :n ja käyttää sitä tavaraa, minkä ID siellä on. Tämähän on näppärä ( sano mummo kun oven näki ) komento. Koska voimme muuttaa #lobjectID:n sisältöä, voimme käyttää mitä tahansa tavaraa pelissä, kunhan tiedämme sen ID:n. Ja sitä varten meillä on findItem.

TEHTÄVIÄ

  • Etsiskele tavaroita "finditem" komennolla ja sano ne ääneen käyttämällä "msg" komentoa.
  • Tarkastele Event Macro listaa ja avaa kokeile avata taikakirja tai statusbar tai paperdoll niiden avulla.
  • Etsi jotain käytettävää tavaraa laukusta ja koita käyttää sitä. Esim. Runebook, lapio, tikari.


Tähtääminen

Tähtääminen on mukava toteuttaa EUO:lla. Se on niin nopea, tarkka ja armoton. Tiedät varmasti miltä tuntuu klikkailla kalliota, kun mineet tai miltä tuntuu klikata ohi vihollisesta, ehkä jopa väärään kohteeseen. EUO hoitaa nämä puolestasi, jos vain osaat pyytää.

Jos muistat vielä ( ainakin pitäisi muistaa ) muuttujan #LobjectID. Se pitää hallussaan viimeksi käytetyn tavaran ID:tä. Samoin toimii myös #LtargedID , #LtargedX , #LtargetY jne. Jo nimistä voi päätellä aikasta paljon.

Koitamme nyt tähdätä toiseen pelaajaan, monsteriin tai johonkin vastaavaan liikkuvaan kohteeseen. Meidän tulee huomioida, että koska kohde on liikkuva, ei oikeastaan voida käyttää X ja Y pistettä. Koska sehän liikkuu kokoajan. Joten käytetään #LtargetID muuttujaa. Tämä on hyvä myöskin tavaroihin tähdätessä. X ja Y tulevat käyttöön kun minetään tai hakataan puuta tai jotain vastaavaa.

event macro 15 3 ; Heal taika
target           ; odottaa targettia
set #LtargetID #CharID ; Asettaa oman hahmosi ID:n #LtargetID muuttujaan.
set #LtargetKind 1 ; Koska tähtäämme objectiin ( ihmiseen )
event macro 22   ; Last target macro. Eli tähtää edelliseen kohteeseen
halt

Eli tällä pienellä koodilla, käytämmä taikaa, odotamme tähtäintä ja tähtäämme itseemme sen. Ei ole vaikeaa eihän? Tuskin tätä tarvitsee hirveästi tarkastella, pitäisi olla aikasta selvä homma.


Mining

Tämä on yksi suosituommista aiheista ensimmäiseksi scriptaksi. Joten käsitellään sitä hiukkaisen. Tässä aiomme käyttää #LtargetX ja Y komentoa hyväksi. Ja tutustumme hiukan "looppeihin" eli silmukoihin. Normaalisti kun käsket EUO :n pälle, se juoksee ylhäältä alas ja kun se on lopussa, se hyppää takaisin ylös.

Sinun pitäisi jo osata katsoa jonkin tavaran Tyyppi

silmukka: 
                      ; Tämä on ns "label". Huomaa " : ". Gotolla voit hypätä tähän
set %Lapio WWF_qpf_twf          ; Tässä on lapion eri tyypit, Voit lisätä perään pickaxrn typet jos osaat. Pitäis ainakin.
finditem %Lapio C_ , #backpackID ; Etsitään lapioita repusta
if #findcnt = 0                 ; löydettiinkö lapio? Jos tämä on suurempi kuin 0 , niin silloint löytyi. ( HUOMAA IF )
{
  display ok Ei ole lapioita $  ; display komento.. testaa niin selviää, 
  halt
}
set #LobjectID #Findid    
set #LtargetX #CharPosX
set #LtargetY #CharPosY
event macro 17 
target
event macro 22
wait 3s        
                  ; odottaa 3 sekuntia
goto silmukka                    ; etsii silmukka: nimisen paikan ja jatkaa siitä.

Siinähän oli kunnon pläjäys uusia komentoja. display = Hyvä erilaisten kyselyiden tekoa varten ja tiedon näyttämistä varten. wait = Odottaa tietyn ajan verran. wait 20 = wait 1s, 40 = 2s.


IF ( Ehtolauseke )

If Ehtolauseet. Voit tehdä tämän avulla monenlaisia asioita. Esim, jos haluat tehdä jotain, kun vaikka #hits on liian pieni.

if #hits < 40
gosub HealME
if #mana < 20
gosub meditate

Eli jos #Hits tippuu alle 40 niin gosub HealMe. Yksinkertaista. Voit käyttää vertailussa mitä tahansa muuttujaa.

if {ehto} {vertailu} {kohde}

Jos if lauseen jälkeen on vain yksi rivi, niin ei tarvita hakasia {}.

if {ehto} {vertailu} {kohde}
     Jos näin on, niin tee tämä


Mutta jos tulee useampi rivi, niin joudut käyttämään niitä.

if {ehto} {vertailu} {kohde}
{
   eka
   toka
   kolmas
   ...
}

Hankalaa? Enpä usko.

set %testi 1
set %testi2 2

if %testi > %testi2
 display ok %testi on suurempi kuin %testi2
else
 display ok %testi2 on suurempi kuin %testi
halt

Gosub

Gosub on hieno keksintö. Jos jotain täytyy tehdä useaan otteeseen, esim lyödä hakulla maahan, tai parantaa itseäsi tai jotain muuta vastaavaa, niin se kannattaa tehdä tämän avulla.

loop:

OnHotkey 1
  gosub HealMe

goto loop



sub HealMe
{

event macro 15 3
target
event macro 23

 return
}

Tarkastellaanpa hieman tuota koodia. onHotKey komento, suorittaa jonkun koodipätkän KUN kyseessä olevaa nappia painetaan. Eli tässä tapauksessa " 1 ". Kun painat ykköstä niin se suorittaa komennon "Gosub HealMe". EUO etsii kohdan, joka on nimetty "sub HealMe" ja jatkaa koodia siitä, tekee asiat siellä ja kun se löytää komennon return, niin se palaa takaisin kohtaan, jossa gosub käsky oli ja jatkaa siitä normaalisti eteenpäin. Näin siis saat koodista selkeämpää ja helmpommin muokattavan.

gosub komento ottaa vastaan myös parametrejä. Eli toisin sanoen, voi antaa tietoja subille.

gosub Test Eka Toka Kolmas
halt

sub Test
{
 msg Parametri 1: %1 Parametri 2: %2 Parametri 3: %3 $
 return
}

Nyt mietit, että miksi antaisit jotain tietoja, näkeehän se ne muutenkin. Seuraava esimerkki valoittaa tätä puolta hiukan.

gosub YhteenLasku 5 3
msg %Tulos $
halt



;=================
; Laskee yhteen kaksi parametriä
; %Tulos muuttuja sisältää tuloksen
sub YhteenLasku
{
 set %Tulos %1 + %2

 return
}


Sitten vielä yksi esimerkki gosubista. Tämä on tärkeää oppia, tulet käyttämään tätä paljon. Return komentoa voi käyttää hyväkseen muutamalla tavalla. Paras subi, olisi sellainen, joka on täysin irrallinen scriptasta. Eli sitä voi käyttää samanlaisena missä tahansa scriptassa. Kun tarkastellaan edellistä esimerkkiä, niin se vaatii edelleen %Tulos muuttujan tarkastelua. Tässä vähän esimerkkiä return komennosta.

gosub YhteenLasku 5 5
msg #result $
halt

sub YhteenLasku
{

 return %1 + %2
}

Huomaatko? Ei edes tarvittu muuttujaa. #result tallentaa tiedot edellisestä #return komennosta. Voit käyttää returnia jotta scriptasi tietää mitä subissa on tapahtunut.

gosub OstaKalaPihvi
if #result = Kalat_Ostettu
  msg Hyvä homma, kalat on kassissa $
else
  msg EI ollut rahaa pihveihin $

halt

sub OstaKalaPihvi
{
 if #gold < 100
    return Liian_vähän_rahaa
 
 OstaKalaakoodiTähän

 return Kalat_Ostettu
}

Huomaatkos? Return komento on todella monipuolinen ja kannattaa hyödyntää sitä. Siisti tapa käyttää returnia on #true ja #false. #True = TOSI ja #False = EPÄTOSI.

gosub Subi una
if #result
  msg SE OLI OIKEIN $
if ! #result
  msg Väääärin $

halt


Subi
{
 if %1 = una
   return #true   ; Vaikka salasanan tarkistus. Jos oikein, niin palauta #true

 return #false  ; Jos IF lause ei täsmää, niin silloin passu oli väärä, joten palautetaan #false
}

Tossa tuli taas pari uutta asiaa. Uusi vertailu operaattori. " ! " . Voidaan käyttää #true ja #false :n sisältäviin muuttujiin.

if ! %Muuttuja
; Jos muuttuja on #false
if %Muuttuja
; Jos muuttuja on #true

Todella kätevä. Jos jollain muuttujalla on vain kaksi olomuotoa. Eli päällä tai poissa, niin käytä falsetrue arvoja.

Taidan edetä aikasta nopeasti, mutta toivottavasti pysytte perässä. Jos kysymys on viisas niin voitte vaikka heittää privamessagee mulle. Saatan jopa vastata :)