EasyUOTut
Hier der anfang von einem EasyUO Tutorial versuch von mir, ein paar programmierkenntnisse muss man sich schon vorher selber aneignen (if, for/while/repeat schleiffen, variablen usw)
Contents
allgemeines
kommentare :
; alles hinter einem strichpunkt wird ignoriert, kann man zum dokumentieren benutzen
jeder befehl kommt in eine eigene zeile, auch { } bei if und bei schleiffen müssen in eine eigene zeile
zwischen operatoren und werten müssen leerzeichen sein
Deutsche Umlaute (öäü) vermeiden (oe ae ue stattdessen benutzen)
variablen zuweisen:
set %x 3 ; speichert den wert 3 in der variable x
variablen mit * statt % am anfang werden permanent gespeichert, für sachen die man nicht jedesmal neu einstellen will, z.b. hot-bag,rails,.. praktisch
set *GhonHolzhackScript_WichtigeVariable 3
(da man so auch auf *variablen anderer scripte zugreiffen kann, ist es besser hier etwas eindeutiges an den anfang vom variablen-namen zu stellen)
Konstanten, besondere Werte
; #true #false ; #spc : leerzeichen
Text-aneinander-Reihung:
set %a Hallo set %b Welt set %c %a , #spc , %welt
suche im text (notin : nicht enthalten, in : enthalten)
if Hallo_Welt notin %c { set %bla 3 }
Warten
sleep 1000 ; 1 sekunde warten (=1000 millisekunden) wait 1s ; 1 sekunde warten wait 20 ; 1 sekunde warten (=20 * 50 msec)
Funktionen
Funktions-deklaration
sub MeineFunktion set %param1 %1 set %param2 %2 set %param3 %3 return %param1 + %param3
Funktions-Aufruf
gosub MeineFunktion 12 abc %x set %meinergebnis #result
Text anzeigen
text anzeigen (über dem eigenen char, sieht man nur selbst):
event exmsg #charID 3 55 Hallo Welt !
- charID : wo die nachricht angezeigt wird, hier über dem eigenen char
55 ist die farbe, hier ein paar weitere :
set %col_black 0 ; schwarz set %col_violet 20 ; lila set %col_red 40 ; rot set %col_yellow 55 ; gelb set %col_green 70 ; grün set %col_cyan 90 ; hellblau
event exmsg #charID 3 %col_yellow Hallo Welt !
Hotkeys
wenn eine taste gedrückt wird etwas machen : (am anfang vom script)
set #lpc 1000 repeat onhotkey f1 alt ; als modifier sind alt ctrl shift und combos davon möglich gosub HolzHacken onhotkey f2 alt gosub BretterMachen sleep 10 ; 1000=1sec until #false halt ....
Bank aufmachen
event macro 1 0 bank ; bank sagen sleep 1000 ; kurz warten bis es auch offen ist
Container Auswahl
einen container auswählen und in einer permanenten variable speichern, die auch nach script neustart noch da ist
if *mycontainerid = N/A { event exmsg #charID 3 %col_red Bitte Container auswaehlen SET #LTARGETID N/A SET #TARGCURS 1 ; target cursor anzeigen WHILE #TARGCURS = 1 WAIT 1 if #LTARGETID <> N/A { SET *mycontainerid #LTARGETID event exmsg #charID 3 %col_green Container gespeichert } }
items verschieben
item in container legen
Exevent Drag %item_id %menge wait 5 Exevent Dropc *mycontainerid wait 5
alle items von einem gewissen typ (hier holz-scheite und bretter) im backpack suchen und in einen container legen
set %itemtypen ZLK_TLK_ ; ZLK=holz-scheite,TLK=bretter for %i 1 30 ; maximal 30 mal versuchen, um endlos-schleiffe zu verhindern falls container voll { findItem %itemtypen C_ . #backpackid if #FINDCNT = 0 break Exevent Drag #FINDID #FINDSTACK wait 5 Exevent Dropc *mycontainerid wait 5 sleep 700 ; 1000=1s }
Menu/Dialog
ein einfaches menu mit einem Knopf und einer CheckBox und einem Text-eingabe feld
;variablen vorbereiten set %gBretterMachen #true ; fenster aufmachen gosub UpdateMenu ; hauptschleiffe set #lpc 1000 repeat gosub KnoepfeTesten sleep 10 ; 1000=1sec until #false halt ; fenster aktualisieren sub UpdateMenu Menu Clear ; altes menu entfernen falls noch eins offen war Menu Window Title GhonHolzHacker ; Fenster-Ueberschrift setzen ; ein knopf menu button btn_holzhacken 0 0 100 20 HolzHacken ; id=btn_holzhacken xposition=0 yposition=0 breite=200 hoehe=20 beschriftung=HolzHacken ; eine checkbox menu Check chk_makeboards 0 20 200 20 %gBretterMachen BretterMachen ; id=chk_brettermachen xpos=0 ypos=20 breite=200 hoehe=20 beschriftung=BretterMachen ; ein text-eingabe-feld menu edit ed_eingabefeld1 0 40 200 blablub ; id=ed_eingabefeld1 xpos=0 ypos=40 breite=200 hoehe=20 start-wert=blablub ; fenster darstellen Menu Window Size 200 60 ; fenster breite=200 hoehe=60 Menu Show 10 60 ; xpos=10 ypos=60 return ; testen ob knöpfe gedrueckt wurden und so sub KnoepfeTesten ; schauen ob knoepfe gedrueckt wurden set %mybtn #menubutton set #menubutton n/a if %mybtn = btn_holzhacken gosub HolzHacken ; wert der checkbox abfragen menu get chk_brettermachen set %gBretterMachen #menures ; wert vom eingabefeld abfragen Menu Get ed_eingabefeld1 set %irgendeinevariable #menures return sub HolzHacken event exmsg #charID 3 55 *hack* (todo) ; hier koennte code zum holzhacken hin return
Sound abspielen
Sound abspielen (z.b. von http://ghoulsblade.schattenkind.net/uoff/GhonAlarm.wav runterladen und im easyuo verzeichnis speichern)
sound GhonAlarm.wav
(geht sogar wenn man uo sounds ausschaltet)
Bewegung
zu einer coordinate lauffen (z.b. für rails)
; %rx %ry %rz ; waits until the char has arrived, or a few secs timeout set %PathFindToPos_maxtime 10 ; maximal 10 sek lang versuchen set %PathFindToPos_tolerance 2 ; es reicht uns in die naehe vom ziel zu kommen sub PathFindToPos set %PathFindToPos_x %1 set %PathFindToPos_y %2 set %PathFindToPos_z %3 ; event exmsg #charID 3 55 PathFindToPos %PathFindToPos_x %PathFindToPos_y %PathFindToPos_z event PathFind %PathFindToPos_x %PathFindToPos_y %PathFindToPos_z set %PathFindToPos_timeout #scnt + %PathFindToPos_maxtime repeat sleep 500 ; 1000=1sec if #scnt > %PathFindToPos_timeout return #false gosub DistToPos %PathFindToPos_x %PathFindToPos_y until #result < %PathFindToPos_tolerance return #true ; gibt das maximum von 2 werten zurueck sub Max if %1 > %2 return %1 return %2 ; gibt die ungefaehre entfernung vom spieler zu einer bestimmten position zurueck sub DistToPos set %DistToPos_dx abs ( %1 - #charPosX ) set %DistToPos_dy abs ( %2 - #charPosY ) gosub Max %DistToPos_dx %DistToPos_dy return #result
Benutzung :
gosub PathFindToPos 512 55 -1 ; zu den coordinaten 512 55 -1 gehen
Derzeitige Coordinaten anzeigen:
event exmsg #charID 3 55 #charPosX #charPosY #charPosZ
Rails (todo)
(todo, dieser teil vom tut ist noch unfertig)
set %rail1 123:456:7:989:686:33: ; usw, so kann man z.b. eine rail speichern set %rail %rail1 ; die variable %rail wird waehrend dem ablaufen immer kürzer (mit jedem schritt entfernt man 3 zahlen fuer die coords) also eine kopie nehmen ; entfernt den ersten wert aus der variable %rail und gibt ihn zurueck sub PopRailCoord str Pos %rail : ; search for the first x marking the end of one waypoint set %PopRailCoord_endpos #strRes ; =4 for 123:789 set %PopRailCoord_endposm1 #strRes - 1 str Left %rail %PopRailCoord_endposm1 ; get the waypoint text 123: set %PopRailCoordRes #strRes ; 12:34:56x or so str Del %rail 1 %PopRailCoord_endpos ; remove the wayoint from the rail set %rail #strRes return %PopRailCoordRes
; spieler coordinate zur rail hinzufügen, beim rail-aufnehmen sub RailRecordMarkSpot set %railrec_x #charPosX set %railrec_y #charPosY set %railrec %railrec , #charPosX , : , #charPosY , : , #charPosZ , : event exmsg #charID 3 55 rails spot #charPosX #charPosY return
Bäume suchen
baeume auf einer position suchen
tile CNT %xpos %ypos for %cnt 1 #tilecnt { tile GET %xpos %ypos %cnt if TREE in #TILENAME { event exmsg #charID 3 %col_info Baum Gefunden auf %xpos %ypos gosub BaumHacken %xpos %ypos #tilez #tiletype } }
Holzhacken
holzhacken am baum
sub BaumHacken set %x %1 set %y %2 set %z %3 set %tiletype %4 set #LTARGETX %x Set #LTARGETY %y SET #LTARGETZ %z Set #LTARGETKIND 3 Set #LTARGETTILE %tiletype repeat set #lObjectID %myaxeid event Macro 17 ; Last Object Target ; Waits for a target Event macro 22 0 ; Last Target sleep 1100 ; 1000=1sec ; ... mit break kann man abbrechen wenn baum leer ist, siehe unten journal nachrichten scannen (todo) until #false ; unendlich return
TODO...
TODO : axt,säge,... suchen TODO : axt in hand nehmen (SearchAndEquipAxe) TODO : auf dialog warten und clicken TODO : auf dialog warten und clicken
journal scan
sub JournalScanStart set %ScanMarkStart_next #jindex + 1 return sub JournalScan if %ScanMarkStart_next > #jindex return repeat scanjournal %ScanMarkStart_next if %1 in #journal return 1 set %ScanMarkStart_next %ScanMarkStart_next + 1 until %ScanMarkStart_next > #jindex return
gosub JournalScanStart ; am anfang irgendwann, damit er nicht die komplette history durchsuchen muss gosub JournalScan teil_vom_text if #result = 1 { ... }
Übergewicht
wenn man überladen ist etwas machen (geht nur wenn eigene statbar offen ist)
if #weight > #maxWeight { gosub EtwasMachen }
Links
Doku zu den Befehlen : http://wiki.easyuo.com/index.php/Documentation Tutorials : http://wiki.easyuo.com/index.php/Tutorials Deutsches Tut : http://www.easyuo.com/forum/viewtopic.php?t=88