Hi also ich wollte gerne den Deathcheck über AdlibEnable laufen lassen.
Aber das geht ja nicht, weil er dann die laufende Funktion nicht abbricht.
Wie regelt ihr das denn mit den Deathcheck?
Ich würds wie folgt machen (ich denke das du probleme damit hast, wegen der MoveTo).
Lass den DeathCheck einfach parallel laufen...
PHP Code:
Bot.exe
DeathCheck.exe
In der 'DeathCheck.exe' sollte dann folgendes sein... wenn Bot/Char stirbt dann beende Process Bot.exe und starte ihn erneut (In Bot.exe sollte dann nur die Running Phase sein und keine GUI).
Denke schon. Dann würde ich das so machen das er zuerst zurück zum Außenposten geht und dann die exe killt. An der MoveTo lag es nicht.^^ Er hat ja resignt als er tot war nur macht er dann trotzdem mit der laufenden funktion weiter
AdlibEnable("_Deathcheck", 500)
[...]
Func _Deathcheck()
Select
Case _MemoryRead($Death, $hprocess) = 1
$Runs = $Runs - 1
*resign*
_Schleife()
EndSelect
EndFunc
_schleife() ist dann halt die Schleife die er normal durchgehend ausführt also
while 1
*Wayout*
*fight*
*loot*
*resign*
wend
endfunc
Ist bestimmt auch nicht die beste Lösung, funktioniert aber.
Habs im Prinzip auch so gelöst nur dass ich in den Unterschritten und in meiner
MoveTo beim Einsrpung auf einen globalen "dead" Status prüfe, der im addlib Thread gesetzt wird. Dadurch fällt die main loop durch bis an einen bestimmten Punkt zB dort wo auch im Normalfall resign o.ä. abgewickelt wird.
War ganz nützlich bei den ersten Schneemanndungeon Versionen
die fight func wird doch nicht abgebrochen wenn die bedingung eintrift, oder?
hab mal nen beispiel gemacht, wenn du f5 drückst wird zwar adlibenable ausgeführt, aber nebenbei läuft noch die "main func weiter, und wird somit nicht abgebrochen.
Code:
#include <Misc.au3>
$dll = DllOpen("user32.dll")
go()
func go()
adlibenable("msgbox1", 100)
while 1
MsgBox (0,"","go")
sleep(1000)
wend
adlibdisable()
EndFunc
func msgbox1()
if _IsPressed("74", $dll) Then
MsgBox (0,"","msgbox")
EndIf
EndFunc
Ne die func wird nicht abgebrochen aber es werden ja die Funcs dann dazwischen geschoben und _Schleife ist halt eine endlos Schleife. Wenn die Schleife irgendwann enden würde, würde danach die fight Func zu ende gemacht werden da ses aber nie ist...
Optimal ist die Lösung bestimmt nicht und es gibt garantiert elegantere Lösungen aber es funktioniert halt. € Ok, es funtzt doch nicht so wirklich prickelnd.
hm bin mir nicht sicher, aber würde dann nicht mit der zeit die speicherauslastung potenziell ansteigen^^?
übrigens hatte ich j199207 vor paar tagen im icq geraten so zu machen, nur ich dachte das es da vielleicht zu problemen mit den funktionen kommen könnte.
Erstmal ein gutes neues Jahr @ all ,
scheinbar hat meinen kleinen Einwurf niemand so recht verstanden oder ernst genommen hier die Grundarchitektur:
* deathcheck, parallelcasts (beim rennen) und status krams in addlib-thread
* ablauf steuerung, einsammeln, resign usw. in main loop
Also in pseudo code sieht das dann so aus:
global tick=0
global dead=false
global running=false
renncast()
if dead return
else
deathcheck()
if tick=0 then hau_ne_sf_rein / running=false ;cast hat running abgebrochen
if tick=7 then machdiesunddas
tick +=1
if tick=72 then tick=0 ;72 is ne nette zahl wenn man obsi loops baut ;-)
killcast()
if dead return
else
deatthcheck()
if mod(tick, 10) then hauaufsmaul ;zyklisch alle 10s
tick +=1
if tick= 30 then tick=0
rennen(x,y)
if dead return
if running=false then running=true / rennlos()
while nichtda und !dead
drehdich und steuer
sleep(100)
wend
Das geht so schon aber du musst halt bei längeren Funcs extrem viele If Abfragen machen was bei nem X100 Zeilen Script auch nicht so praktisch ist.
Quote:
Originally Posted by kknb
hm bin mir nicht sicher, aber würde dann nicht mit der zeit die speicherauslastung potenziell ansteigen^^?
Jo stimmt müsste se theoretisch. Aber sagen wir mal der übersprungene Teil hat 5kb selbst wenn der dann 1000 mal übersprungen wird hast du am Ende nur 5mb mehr Ram die verbraucht werden. Eventuell löst AutoIT das ganze ja auch anders und braucht da (fast) gar nicht mehr Speicher für oder löscht die Befehle nach X Stunden oder so.
Ständiger Deathcheck | Start-Button 05/13/2010 - GW Bots - 28 Replies Hey ihr,
nachdem ich über das letzte Event hinweg ein paar der hier zu findenden Bots durchprobiert habe, spinnt seit vorgestern der Wunsch in meinem Kopf rum, sowas tolles möchte ich auch können! :D
Also habe ich mir ein paar Tuts angesehn, da mir AutoIt ja bis dato noch gänzlich unbekannt war und dann einfach mal drauflosgelegt. Ganz nach dem Motto: Learning by Doing. Klappt auch soweit besser als erwartet. Immerhin bin ich schonmal soweit, dass mein kleiner Bot in den nötigen...
GWCA Deathcheck 02/04/2010 - GW Bots - 3 Replies Hey...irgendwie bekomm ichs nicht hin, nen vernünftigen Deathcheck in GWCA zu schreiben. Der hier funktioniert nicht:
$cbType = "int"
Do
Sleep(250)
CmdCB($CA_GETDEAD)
Until $cbVar = 1
Kann mir jemand helfen? Wäre nett ;-)
Deathcheck 04/26/2009 - GW Bots - 65 Replies Ich hab in der Suchfunktion gesucht und hab mir fast alles durchgelesen...
dabei kam das hier raus:
If _MemoryRead($Check_NPC, $hprocess) = 1 Then
Sleep(10000)
ControlSend("Guild Wars", "", "", "ö")
Sleep(100)
ControlSend("Guild Wars", "", "", "{SPACE}")
Sleep(100)
Frage zu Memories + DeathCheck 02/13/2009 - GW Bots - 62 Replies Kann mir wer das Script für den DeathCheck nochmal zeigen? Wäre sehr nett.
Und noch eine Frage: Wie kriege ich das hin, das der Bot weiss wieviele Kreaturen ich schon getötet habe?
Danke im vorraus!
#N.E.O.
Dauerhafter Deathcheck 12/16/2008 - Guild Wars - 19 Replies Also meine frage ist nun wie ich einen dauerhaften Deathcheck einbauen kann.
Also natürlich mit einer schleife welcher schleifencode wäre dafür am besten?
Diese schleife soll dauerhaft im ganzen script laufen halt per memory abfrage
Die memory adresse dafür ist momentan
$Deathcheck = a044ec
Valuers sind
Nicht Tod = 0
Tod = 1