[TuT] How to code BoT's

02/02/2009 20:16 darkangel1000#31
Ja ok... aber in meiner Aufgabe hatte ich um nen Tip gebeten und nichts bekommen...hab ja echt schon viel versucht ^^
02/02/2009 20:22 kknb#32
darkangel, mach einmal eine pixelchecksum abfrage von der 60iger rüssi, vergleiche diesen wert einfach in einer schleife dauerhaft mit dem aktuellen wert.
das kannst du mit ner while oder do..loop schleife am besten erledigen.
02/02/2009 20:22 _revo#33
ich werf dir mal ein stichwort in den raum

"pixelchecksum"

edit: langsam :S
02/02/2009 20:28 darkangel1000#34
is mir klar das ich des mit PCS machen muss aber woher soll der wissen was die 60ger is. Das war ja meine Frage und eben die Sache ob ich erst nen Screen machen muss um des dann zu vergleichen.
02/02/2009 20:30 darthwitch#35
thx kknb!!! setz mich damit mal auseinander^^ aber sag mal was bedeuten die zechen etc von der zeile?
Quote:
"koordinaten: " & "x= " & $Xerg & " ; " & "y= " & $Yerg & @crlf
02/02/2009 20:34 kknb#36
drück einfach mal im spiel f1 oder den save button, dann guck dir die datei koords.txt an die erstellt wurde, eigentlich sollte das alles erklären.

@ angel, ich schrieb ja das du erst einmal eine checksumme der 60ér nehmen musst, diese vergleichst du in einer schleife. ich weiß ja nicht was du immer mit einem bild möchtest ;)
02/02/2009 20:39 darkangel1000#37
also ich muss manuel zur 60er laufen und die checken und dann erst den Bot starten lassen oder wie
02/02/2009 20:41 kknb#38
nein am besten machst du dir erst ein kleines script welches dir den wert der checksum ausgibt, diesen wert trägst du in deinen bot ein.

edit: übrigens finde ich es gut das sich wenigstens hier einer hinterklemmt und versucht was zu lernen!
02/02/2009 21:10 darkangel1000#39
PHP Code:
#cs 
OK... Aufgabenschwere3-4 erstelle ein scriptmit dem du erkennst welcher gegner anvisiert wurde
(in diesem falle auf der insel der namenlosen)
sollte das ziel ein bestimmter gegner sein (60ger Rüstungsziel), dann greife an 
#ce

Sleep(10000)
$left=527
$top
=48
$right
=739
$bottom
=54
$60er998126992
$100er462302526
$Umstehend
3474730595
$IdN
3355453856
$IdB
3494895295

HotKeySet
("9","_attack"
HotKeySet("y","_end")

Func _activate()
    
WinWait("Guild Wars","")
If 
Not WinActive("Guild Wars",""Then WinActivate("Guild Wars","")
WinWaitActive("Guild Wars","")
EndFunc
Func _attack 
()
    
_activate
If $60er PixelChecksum($left$top$right$bottom )
    
Then 
    Sleep
(1000)
    
Send("{space}")
ElseIf
    
_check
    
EndIf
EndFunc

Func _check
()
    If $
100er PixelChecksum($left$top$right$bottom )
        
Sleep(100)        
        
MsgBox(0,"Gegner",$100er)
    ElseIf
        
$Umstehend PixelChecksum($left$top$right$bottom )
        
Sleep(100)
        
MsgBox(0,"Gegner",$Umstehend)
    ElseIf
        
$IdB PixelChecksum($left$top$right$bottom )
        
Sleep(100)
        
MsgBox(0,"Gegner",$IdB)
    ElseIf
        
$IdN PixelChecksum($left$top$right$bottom )
        
Sleep(100)
        
MsgBox(0,"Gegner",$IdN)
    Else
        
sleep(100)
        
MsgBox(0,"Gegner","unknown object")
        
EndFunc


Func _end
()
            
        Exit
            
EndFunc 
meiner Meinung nach müsste es etz gehn...aber er sagt dass bei Hotkey... des _end nicht definiert ist.
02/02/2009 21:21 kknb#40
hi deine ganzen if abfragen sind syntaktisch falsch.

guck dir in der hilfe nochmal genau den aufbau an.

Code:
If <expression> Then
    statements
    ...
[ElseIf expression-n Then
    [elseif statements ... ]]
    ...
[Else
    [else statements]
    ...
EndIf
mache deinen code nicht so umständlich, ich gebe dir einen tip für diese aufgabe reichen locker 5(+-3) zeilen code, mehr nicht!

lass erstmal diese ganze hotkey gedöhns usw weg.

checke den wert in einer schleife, guck dir in der hilfe die while schleife oder die do...loop schleife an.
02/02/2009 21:39 darkangel1000#41
ok THX
02/02/2009 22:02 NBA#42
Korrigiert mich, wenn ich falsch liege, aber ich glaube im moment ist dieser thread das beste dafür :D(sonst kann man MemoryAnfänger ganzschön in den Wahnsinn treiben :) )

Wenn man _MemoryOpen einmal macht stürzt gw nach ner zeit ab (auch sleep(10) hilft nicht :( )

Wenn man das jedoch dorthin baut wo mans braucht (schleife) und am ende der Schleife ein _MemoryClose macht, scheint es zu helfen ==> GW hauts nichtmehr so oft weg !

Hoffe der Beitrag hat irgentwen geholfen ;)
NBArena

edit:
mein das ungefähr so:
Code:
 For $i = 0 to 10 step 1
_MemoryOpen(blablabla)

Das ganze restliche zeug

_MemoryClose($PID)
Next
02/03/2009 18:00 darkangel1000#43
PHP Code:
#cs 
OK... Aufgabenschwere3-4 erstelle ein scriptmit dem du erkennst welcher gegner anvisiert wurde
(in diesem falle auf der insel der namenlosen)
sollte das ziel ein bestimmter gegner sein (60ger Rüstungsziel), dann greife an 
#ce

Sleep(10000)

$left=527
$top
=48
$right
=739
$bottom
=54

$60er998126992
$100er462302526
$Umstehend
3474730595
$IdN
3355453856
$IdB
3494895295

Call
("_attack")

        
Func _attack()
            
Sleep(1000)
        If $
60er PixelChecksum($left,$top,$right,$bottomThen
        Sleep
(100)
        
Send("{space}")
        EndIf
        
Call("_check")
        
        
EndFunc
        
        Func _check
()
        If $
100er =PixelChecksum($left,$top,$right,$bottomThen
        Sleep
(100)
        
MsgBox(0,"Gegner","100er")
        elseIf 
$Umstehend PixelChecksum($left,$top,$right,$bottomThen
        Sleep
(100)
        
MsgBox(0,"Gegner","Umstehend")
        elseIf 
$IdB PixelChecksum($left,$top,$right,$bottomThen
        Sleep
(100)
        
MsgBox(0,"Gegner","IdB")
        elseIf 
$IdN PixelChecksum($left,$top,$right,$bottomThen
        Sleep
(100)
        
MsgBox(0,"Gegner","IdN")
    Else
        
Sleep(100)
        
MsgBox(0,"Gegner","unknown enemy")
    EndIf
    
        
        
EndFunc 
mit den Funktionen un so klappts etz aber kanns sein dass die Werte immmer anders sin, weil der bei mir jetzt plötzlich für In der nähe Umstehend angibt...
02/03/2009 18:28 Azunai#44
sehr schöner anfang :)

vllt die regionen der checksum kleiner machen, 10*10 pixel reicht vollkommen

allerdings direkt ein tipp fürs leben

nutze in au3 so gut wie niemals die Call("") funktion!

denn hier kommt es leicht zu einem "Bufferoverflow" <-- memory fehler, da call jedesmal die stelle wo die funktion aufgerufen wird auf den stack haut (auch wenn dir das vllt noch nichts sagt)


machs so:

PHP Code:

hallo
() ; <-- das ist der funktions aufruf

func hallo
()
msgbox(0,"Ah!","Hallo")
endfunc 
02/03/2009 18:32 darkangel1000#45
is des der Grund, dass der bei mir dann auch bei umstehend IdN ausgibt ?