Difference between revisions of "EasyUOTut"

From Ghoulwiki
Jump to: navigation, search
 
(journal scan)
 
(One intermediate revision by the same user not shown)
Line 362: Line 362:
 
TODO : axt,säge,... suchen  
 
TODO : axt,säge,... suchen  
 
TODO : axt in hand nehmen (SearchAndEquipAxe)
 
TODO : axt in hand nehmen (SearchAndEquipAxe)
TODO : journal nachrichten scannen
 
 
TODO : auf dialog warten und clicken
 
TODO : auf dialog warten und clicken
 
TODO : auf dialog warten und clicken
 
TODO : auf dialog warten und clicken
  
 
------------------------------------------
 
------------------------------------------
 +
 +
 +
== journal scan ==
 +
 +
 +
 +
<pre>
 +
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
 +
</pre>
 +
 +
 +
verwendung :
 +
<pre>
 +
    gosub JournalScanStart  ; am anfang irgendwann, damit er nicht die komplette history durchsuchen muss
 +
 +
    gosub JournalScan teil_vom_text
 +
    if #result = 1
 +
    {
 +
        ...
 +
    }
 +
</pre>
  
 
== Übergewicht ==
 
== Übergewicht ==

Latest revision as of 17:07, 21 July 2009

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)


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


verwendung :

    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