Frage zu Memories + DeathCheck

02/06/2009 15:18 N.E.O.#1
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.
02/06/2009 15:27 kknb#2
du fragst einfach deinen lebenstatus ab, das kannst du mit pixelsearch, pixelchecksum oder pixelgetcolor an deinem lebensbalken oder an sonstigen indizien machen dir dir anzeigen das du tot bist.das selbe kannst du per memoryread machen, gibt ja mittlerweile mehr wie genug beispiele mittlerweile hier im forum. du fragst den status einfach per adlibenable dauerhaft während des runs ab.

das mit den getöteten gegner zählen ist bald noch einfacher. wenn du gegner im hm killst. steht ja oben links inner ecke die gegneranzahl die du gekillt hast, mach einfach nach jedem gekillten gegner ne pixelchecksum von diesem helm wo die gegneranzahl drin steht. die werte die du bekommen hast kannst du dann in deinem bot einbauen. dann verglerichst du in deinem bot einfach die gegenwärtige checksumme und weist ihr die anzahl zu.


viel spass beim probieren ;)
02/06/2009 15:30 N.E.O.#3
Quote:
Originally Posted by kknb View Post
du fragst einfach deinen lebenstatus ab, das kannst du mit pixelsearch, pixelchecksum oder pixelgetcolor an deinem lebensbalken oder an sonstigen indizien machen dir dir anzeigen das du tot bist.das selbe kannst du per memoryread machen, gibt ja mittlerweile mehr wie genug beispiele mittlerweile hier im forum. du fragst den status einfach per adlibenable dauerhaft während des runs ab.

das mit den getöteten gegner zählen ist bald noch einfacher. wenn du gegner im hm killst. steht ja oben links inner ecke die gegneranzahl die du gekillt hast, mach einfach nach jedem gekillten gegner ne pixelchecksum von diesem helm wo die gegneranzahl drin steht. die werte die du bekommen hast kannst du dann in deinem bot einbauen. dann verglerichst du in deinem bot einfach die gegenwärtige checksumme und weist ihr die anzahl zu.


viel spass beim probieren ;)
Danke, für diese lange Antwort!

Leider ist dieser lange Text umsonst gewesen, da ich es im Hintergrund machen will...! Sorry, von mir!
02/06/2009 15:34 kknb#4
dann machs einfach wie gesagt per memoryread.

[Only registered and activated users can see links. Click Here To Register...]
02/06/2009 15:47 N.E.O.#5
Ja, aber da steht irgendwie kein brauchbarer Code...

und dauerhaft braucht er nicht zu sein...
02/06/2009 15:50 kknb#6
was spricht gegen den code von Gabba2?
02/06/2009 15:53 N.E.O.#7
Der?

PHP Code:
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 

Da ist ja gar kein

PHP Code:
If $DCheck XX Then 
drinnen.


Was soll ich denn da einfügen?
02/06/2009 16:06 Gabba2#8
Um die Frage mal selbst zu beantworten: Gegen meinen Code spricht, dass er nur einen Death = True Durchlauf macht danach würde ja nochmal ein Adlib aufgerufen das funktioniert nur mit Adlib nicht was ich auch erst später getestet habe.
Als einfache Lösung ginge dann noch:
Code:
Func _Deathcheck()
	Select
		Case _MemoryRead($Death, $hprocess) = 1
			$Runs = $Runs - 1
			_resign()
			_Schleife()
	EndSelect
EndFunc   ;==>_Deathcheck

Func _Check_Send($Taste, $hwnd)
	_Deathcheck()
	ControlSend($hwnd, "", "", $Taste)
EndFunc   ;==>_Check_Send

Func _Check_Sleep($D_min, $D_max)
	$Dauer = Random($D_min, $D_max)
	$SlpAnfang = TimerInit()
	Do
		sleep(100)
		_Deathcheck()
	Until TimerDiff($SlpAnfang) >= ($Dauer - ($Dauer / 100))
EndFunc   ;==>_Check_Sleep
Mit _Check_Send halt die Sends im Bereich in dem er Checken soll ersetzen und _Check_Sleep bei längeren Sleeps (unter 3 Sek. würd ichs nicht nehmen) die Resign und Schleife func musst du dann natürlich selbst einfügen genauso wie die Adresse von $Death.
02/06/2009 16:20 N.E.O.#9
Quote:
Originally Posted by Gabba2 View Post
Um die Frage mal selbst zu beantworten: Gegen meinen Code spricht, dass er nur einen Death = True Durchlauf macht danach würde ja nochmal ein Adlib aufgerufen das funktioniert nur mit Adlib nicht was ich auch erst später getestet habe.
Als einfache Lösung ginge dann noch:
Code:
Func _Deathcheck()
	Select
		Case _MemoryRead($Death, $hprocess) = 1
			$Runs = $Runs - 1
			_resign()
			_Schleife()
	EndSelect
EndFunc   ;==>_Deathcheck

Func _Check_Send($Taste, $hwnd)
	_Deathcheck()
	ControlSend($hwnd, "", "", $Taste)
EndFunc   ;==>_Check_Send

Func _Check_Sleep($D_min, $D_max)
	$Dauer = Random($D_min, $D_max)
	$SlpAnfang = TimerInit()
	Do
		sleep(100)
		_Deathcheck()
	Until TimerDiff($SlpAnfang) >= ($Dauer - ($Dauer / 100))
EndFunc   ;==>_Check_Sleep
Mit _Check_Send halt die Sends im Bereich in dem er Checken soll ersetzen und _Check_Sleep bei längeren Sleeps (unter 3 Sek. würd ichs nicht nehmen) die Resign und Schleife func musst du dann natürlich selbst einfügen genauso wie die Adresse von $Death.
Pack mir das mal pls in ne Funktion, das

If $DeathCheck = XX Then

ControlSend($GW,"","","""{1}")

EndIf



oder noch besser:


While $DeatchCheck = XX

ControlSend($GW,"","","","{1}")
Sleep(100)

WEnd


Danke!
02/06/2009 16:25 kknb#10
er kann dir ja auch gleich die bots schreiben die du dann verkaufst o_O
02/06/2009 16:27 N.E.O.#11
Quote:
Originally Posted by kknb View Post
er kann dir ja auch gleich die bots schreiben die du dann verkaufst o_O
Wer sagt das ich die verkaufe o_O?


Die Funktion funktioniert lediglich nicht bei mir, und ich weiss nicht woran das liegt...
02/06/2009 16:37 kknb#12
Quote:
Originally Posted by N.E.O. View Post
Die Funktion funktioniert lediglich nicht bei mir, und ich weiss nicht woran das liegt...

vielleicht solltest du den code posten, denn ich glaube hier kann dir niemand einfach so sagen warum das nicht bei dir läuft, es nervt lediglich den leuten in letzter zeit alles aus der nase ziehen zu müssen.

ich glaub ich muss mal ne weile ne epvp auszeit nehmen
02/06/2009 16:40 N.E.O.#13
Hier:

PHP Code:
While 1
    
ControlSend
($GW"""""{C}")
Sleep(100)
ControlSend($GW"""""{2}")
ControlSend($GW"""""{6}")
Sleep(500)
ControlSend($GW"""""{5}")
_Deathcheck()
    
WEnd



Func _Deathcheck
()
    
Select
        
Case _MemoryRead($Death$hprocess) = 1
            _Send1
()
    
EndSelect
EndFunc   
;==>_Deathcheck



Func _Send1
()
    
    While 
_DeathCheck() = Or _DeathCheck() = 7
    ControlSend
($GW"""""{1}")
    
Sleep(random(40,80))
    
WEnd
    
EndFunc 

Das ist der Auszug aus dem Script.
02/06/2009 16:55 Gabba2#14
Ähm _Deathcheck() wird dir so wies ist nie 6 oder 7 wiedergeben. Für das wo dus (schätze ich mal) nutzen willst (Killroy Dungeon) bringt dir die Death Adresse auch nichts da das "ausgeknockt" nicht als tot zählt.
Code:
$downMem = 0x0D2A6A8

While 1
	ControlSend($GW, "", "", "{C}")
	Sleep(100)
	ControlSend($GW, "", "", "{2}")
	ControlSend($GW, "", "", "{6}")
	Sleep(500)
	ControlSend($GW, "", "", "{5}")
	_Deathcheck()
WEnd


Func _Deathcheck()
	while _MemoryRead ($downMem, $hprocess)= 6 Or _MemoryRead ($downMem, $hprocess)= 7	
		ControlSend($GW, "", "", "{1}")
		Sleep(random(40,60))
	wend
Endfunc
02/07/2009 12:36 N.E.O.#15
Kilroy dungeon ist richtig.
Ich brauche es aber auch noch für andere Sachen.


Hättest du denn eine Idee, wie man das machen könnte, aber im BG?