User:Una

From Wiki
Revision as of 05:30, 19 August 2005 by Una (Talk | contribs)

Jump to: navigation, search

Suomenkielinen EasyUO scriptaus opas

Una, 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 EI kykene mihinkään mitä et normaalisti pystyisi tekemään. Eli unohda haaveet 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 ohlema 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

Tehtävä:

  • Katso Ukon sijainti EUO:n systeemi muuttujista, kävele kauemmaksi ja koita päästä scriptan avulla takaisin.


Tavaroiden käyttäminen

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.


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ä!.

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.