Diskussionen über Memorys

04/13/2009 01:57 _revo#526
müsste man halt am anfang die ids auslesen :>
04/13/2009 02:07 buFFy!#527
und wie kriege ich raus wer 'hero1' ist? ;)
an memnpcidselect hab ich nämlich auch schon gedacht.
04/13/2009 02:12 kknb#528
anwählen:nächstes gruppenmitglied, id in array speichern das machst du sooft bis du wieder beim ersten angekommen bist.
04/13/2009 02:16 buFFy!#529
Code:
;-Hero1 Healthstack
$1_Hero1Health = _MemoryRead($PTR_HEALTH, $hprocess, 'dword')
$2_Hero1Health = _MemoryRead($1_Hero1Health + $PTR_GLOBAL_OFFSET, $hprocess, 'dword')
$3_Hero1Health = _MemoryRead($2_Hero1Health - $PTR_HEALTH_HERO1, $hprocess, 'float')
$CUR_HP_HERO1 = Int($3_Hero1Health*100)

;-Hero2 Healthstack
$1_Hero2Health = _MemoryRead($PTR_HEALTH, $hprocess, 'dword')
$2_Hero2Health = _MemoryRead($1_Hero2Health + $PTR_GLOBAL_OFFSET, $hprocess, 'dword')
$3_Hero2Health = _MemoryRead($2_Hero2Health - $PTR_HEALTH_HERO2, $hprocess, 'float')
$CUR_HP_HERO2 = Int($3_Hero2Health*100)

;-Hero3 Healthstack
$1_Hero3Health = _MemoryRead($PTR_HEALTH, $hprocess, 'dword')
$2_Hero3Health = _MemoryRead($1_Hero3Health + $PTR_GLOBAL_OFFSET, $hprocess, 'dword')
$3_Hero3Health = _MemoryRead($2_Hero3Health - $PTR_HEALTH_HERO3, $hprocess, 'float')
$CUR_HP_HERO3 = Int($3_Hero3Health*100)
Das gibt jetzt die Hp der anderen 3 Gruppenmitglieder in Zufallsarenen in % an.
Das speichern in ein Array etc. ist garkein Problem.
Das Problem ist das die Gruppenmitglieder je nach Ping an einer anderen Stelle sind.
Also kann es z.B. sein das Hero1 an 4. Stelle ist..nun wie erkläre ich meinem Bot jetzt das
Hero1 an 4. Stelle ist und er doch bitte Numpad4 drücken soll um den 4. Spielerslot anzuwählen?
04/13/2009 02:19 kknb#530
wolltest du die net per npc id select anwählen^^? also ist es doch völlig egal wer auf welchem platz ist.

problem ist nur das du wissen müsstest wieviel lebenspunkte deine kammeraden haben um vernünftig heilen zu können. zumindest wenn du den genauen wert berechnen möchtest.
04/13/2009 02:20 buFFy!#531
Nö is es nich.. weil ich muss ja wissen >WEN< ich anwählen muss..

Edit:

Code:
If $Hero1'Hp < 1/4 Then
...
Elseif $Hero2'Hp < 1/4 Then
...
Elseif $Hero3'Hp < 1/4 Then
...
Elseif $Own'Hp < 1/4 Then
...
EndIf
Man bekommt raus welcher Held weniger als 1/4 hat.. aber wie wähle ich ihn an um ihn zu heilen?
04/13/2009 02:24 kknb#532
versteh ich grad nicht, frag doch einfach alle lebenspunkte nachdem du jedem eine id zugewiesen hast parallel ab und wenn bei irgendeinem die lebenpunkte < als irgend nen wert sind wähle denjenigen per mem an und heile.


steh ich grad soo aufn schlauch?

hero1=id1
hero2=id2
hero3=id3
own=id4

If $Hero1'Hp < 1/4 Then
heile id1
Elseif $Hero2'Hp < 1/4 Then
heile id2
Elseif $Hero3'Hp < 1/4 Then
heile id3
Elseif $Own'Hp < 1/4 Then
heile id4
EndIf

vorher natürlich jedem per memoryread den wert abfragen und der id zuweisen.
04/13/2009 02:31 buFFy!#533
Probiers in RA so aus wie du es dir denkst..
Irgendwie bin ich zu dumm das zu beschreiben.. aber so wie du das machen willst gehts definitiv nicht.
04/13/2009 02:33 kknb#534
hast schon was fertig?! bin grad zu faul und zu müde was zu schreiben
04/13/2009 02:51 __wadim#535
der der immer zu erst auf der karte ist, bekommt auch die folgende adresse zu seinen hp zugewiesen. nur kannst du nicht rausfinden, wer an welcher stelle, welche hp adresse hat! wenn die spieler sterben, verschieben sich die adressen auch und du weisst nicht, welches mitglied wie viel hp hat.. also von der reihenfolge, damit du den anwählen kannst
04/13/2009 02:59 buFFy!#536
ungefähr so dacht ich mir das..

Code:
Func Check()
	$1_Hero1Health = _MemoryRead($PTR_HEALTH, $hprocess, 'dword')
	$2_Hero1Health = _MemoryRead($1_Hero1Health + $PTR_GLOBAL_OFFSET, $hprocess, 'dword')
	$3_Hero1Health = _MemoryRead($2_Hero1Health - $PTR_HEALTH_HERO1, $hprocess, 'float')
	$CUR_HP_HERO1 = $3_Hero1Health

	;-Hero2 Healthstack
	$1_Hero2Health = _MemoryRead($PTR_HEALTH, $hprocess, 'dword')
	$2_Hero2Health = _MemoryRead($1_Hero2Health + $PTR_GLOBAL_OFFSET, $hprocess, 'dword')
	$3_Hero2Health = _MemoryRead($2_Hero2Health - $PTR_HEALTH_HERO2, $hprocess, 'float')
	$CUR_HP_HERO2 = $3_Hero2Health

	;-Hero3 Healthstack
	$1_Hero3Health = _MemoryRead($PTR_HEALTH, $hprocess, 'dword')
	$2_Hero3Health = _MemoryRead($1_Hero3Health + $PTR_GLOBAL_OFFSET, $hprocess, 'dword')
	$3_Hero3Health = _MemoryRead($2_Hero3Health - $PTR_HEALTH_HERO3, $hprocess, 'float')
	$CUR_HP_HERO3 = $3_Hero3Health
EndFunc   ;==>Check
Func Heal()


	ControlClick($hwnd, "", "", "left", 1, 0, 0) ;-betreten

	While _MemoryRead($MEM_MAP, $hprocess) <> 1
		Sleep(500)
	WEnd

	KeySend("f") ;-selbst anvisieren
	$Player1 = _MemoryRead($MEM_NPCIDSELECT, $hprocess)
	_ArrayAdd($PLAYERLIST, $Player1)
	KeySend("tab")
	If _MemoryRead($MEM_NPCIDSELECT, $hprocess) = Not $PLAYERLIST[1] Then
		$Player2 = _MemoryRead($MEM_NPCIDSELECT, $hprocess)
		_ArrayAdd($PLAYERLIST, $Player2)
	EndIf
	KeySend("tab")
	If _MemoryRead($MEM_NPCIDSELECT, $hprocess) = Not $PLAYERLIST[1] Or $PLAYERLIST[2] Then
		$Player3 = _MemoryRead($MEM_NPCIDSELECT, $hprocess)
		_ArrayAdd($PLAYERLIST, $Player3)
	EndIf
	KeySend("tab")
	If _MemoryRead($MEM_NPCIDSELECT, $hprocess) = Not $PLAYERLIST[1] Or $PLAYERLIST[2] Or $PLAYERLIST[3] Then
		$Player4 = _MemoryRead($MEM_NPCIDSELECT, $hprocess)
		_ArrayAdd($PLAYERLIST, $Player4)
	EndIf
	AdlibEnable("Check", 1000)
	If ($CUR_HP_HERO1 * 100) < 25 Then
		;-Wie zur hölle soll ich ihn anvisieren????????!!!!!!!
		KeySend("heal")
	EndIf
EndFunc   ;==>Heal
04/13/2009 03:05 kknb#537
ungetestet, aber so vielleicht?

Code:
Func Check()
	$1_Hero1Health = _MemoryRead($PTR_HEALTH, $hprocess, 'dword')
	$2_Hero1Health = _MemoryRead($1_Hero1Health + $PTR_GLOBAL_OFFSET, $hprocess, 'dword')
	$3_Hero1Health = _MemoryRead($2_Hero1Health - $PTR_HEALTH_HERO1, $hprocess, 'float')
	$CUR_HP_HERO1 = $3_Hero1Health

	;-Hero2 Healthstack
	$1_Hero2Health = _MemoryRead($PTR_HEALTH, $hprocess, 'dword')
	$2_Hero2Health = _MemoryRead($1_Hero2Health + $PTR_GLOBAL_OFFSET, $hprocess, 'dword')
	$3_Hero2Health = _MemoryRead($2_Hero2Health - $PTR_HEALTH_HERO2, $hprocess, 'float')
	$CUR_HP_HERO2 = $3_Hero2Health

	;-Hero3 Healthstack
	$1_Hero3Health = _MemoryRead($PTR_HEALTH, $hprocess, 'dword')
	$2_Hero3Health = _MemoryRead($1_Hero3Health + $PTR_GLOBAL_OFFSET, $hprocess, 'dword')
	$3_Hero3Health = _MemoryRead($2_Hero3Health - $PTR_HEALTH_HERO3, $hprocess, 'float')
	$CUR_HP_HERO3 = $3_Hero3Health
EndFunc   ;==>Check
Func Heal()


	ControlClick($hwnd, "", "", "left", 1, 0, 0) ;-betreten

	While _MemoryRead($MEM_MAP, $hprocess) <> 1
		Sleep(500)
	WEnd

	KeySend("f") ;-selbst anvisieren
	$Player1 = _MemoryRead($MEM_NPCIDSELECT, $hprocess)
	_ArrayAdd($PLAYERLIST, $Player1)
	KeySend("tab")
	If _MemoryRead($MEM_NPCIDSELECT, $hprocess) = Not $PLAYERLIST[1] Then
		$Player2 = _MemoryRead($MEM_NPCIDSELECT, $hprocess)
		_ArrayAdd($PLAYERLIST, $Player2)
	EndIf
	KeySend("tab")
	If _MemoryRead($MEM_NPCIDSELECT, $hprocess) = Not $PLAYERLIST[1] Or $PLAYERLIST[2] Then
		$Player3 = _MemoryRead($MEM_NPCIDSELECT, $hprocess)
		_ArrayAdd($PLAYERLIST, $Player3)
	EndIf
	KeySend("tab")
	If _MemoryRead($MEM_NPCIDSELECT, $hprocess) = Not $PLAYERLIST[1] Or $PLAYERLIST[2] Or $PLAYERLIST[3] Then
		$Player4 = _MemoryRead($MEM_NPCIDSELECT, $hprocess)
		_ArrayAdd($PLAYERLIST, $Player4)
	EndIf
	AdlibEnable("Check", 1000)
	If ($CUR_HP_HERO1 * 100) < 25 Then
		_Memorywrite($MEM_NPCIDSELECT, $hprocess, $Player1)
		KeySend("heal")
	EndIf
EndFunc   ;==>Heal]
04/13/2009 03:10 buFFy!#538
geht nicht.. weil $hero1 nicht = $player1 ist..
04/13/2009 03:11 kknb#539
stimmt, habe ich nicht bedacht. hab auch grad mal bisl mit ce geguckt, ausser npc_id_select finde ich irgendwie keinen wert der aufschluss geben könnte welches gruppenmitglied grade angewählt ist.
04/13/2009 04:35 buFFy!#540
wie ruft man am besten nen critical error auf?
man passe die koords an, gehe nach z-elite und führe das ding aus.

Code:
Dim $PLAYERLIST[1]

$MAXHP_PLAYER = _MemoryRead($2_OwnHealth + $PTR_HEALTH_MAX_HP, $hprocess) * 100
$MAXHP_HERO1 = _MemoryRead($2_Hero1Health - $PTR_HEALTH_HERO1, $hprocess, 'float') * 100
$MAXHP_HERO2 = _MemoryRead($2_Hero2Health - $PTR_HEALTH_HERO2, $hprocess, 'float') * 100
$MAXHP_HERO3 = _MemoryRead($2_Hero3Health - $PTR_HEALTH_HERO3, $hprocess, 'float') * 100

Func Start()
	While True
		ControlClick($hwnd, "", "", "left", 1, 515, 124)
		While _MemoryRead($MEM_MAP, $hprocess) <> 1
			Sleep(500)
		WEnd
		Sleep(5000)
		ControlClick($hwnd, "", "", "left", 1, 526, 31)
		$PLAYER = _MemoryRead($MEM_NPCIDSELECT, $hprocess)
		_ArrayAdd($PLAYERLIST, $PLAYER)
		Sleep(500)
		ControlClick($hwnd, "", "", "left", 1, 525, 49)
		$HERO1 = _MemoryRead($MEM_NPCIDSELECT, $hprocess)
		_ArrayAdd($PLAYERLIST, $HERO1)
		Sleep(500)
		ControlClick($hwnd, "", "", "left", 1, 526, 68)
		$HERO2 = _MemoryRead($MEM_NPCIDSELECT, $hprocess)
		_ArrayAdd($PLAYERLIST, $HERO2)
		Sleep(500)
		ControlClick($hwnd, "", "", "left", 1, 526, 86)
		$HERO3 = _MemoryRead($MEM_NPCIDSELECT, $hprocess)
		_ArrayAdd($PLAYERLIST, $HERO3)
		AdlibEnable("Heilen", 1000)
		While _MemoryRead($MEM_MAP, $hprocess) <> 2
			Sleep(1000)
		WEnd
		While _MemoryRead($MEM_MAP, $hprocess) <> Not 2
			Sleep(1000)
		WEnd
		Sleep(1000)
		ContinueLoop
	WEnd
EndFunc   ;==>Start

Func Heilen()
	;-Healthstack
	$1_OwnHealth = _MemoryRead($PTR_HEALTH, $hprocess)
	$2_OwnHealth = _MemoryRead($1_OwnHealth + $PTR_GLOBAL_OFFSET, $hprocess)
	$3_OwnHealth = _MemoryRead($2_OwnHealth + $PTR_HEALTH_CUR_HP, $hprocess, "float")
	$CUR_HP_PLAYER = $3_OwnHealth

	$1_Hero1Health = _MemoryRead($PTR_HEALTH, $hprocess, 'dword')
	$2_Hero1Health = _MemoryRead($1_Hero1Health + $PTR_GLOBAL_OFFSET, $hprocess, 'dword')
	$3_Hero1Health = _MemoryRead($2_Hero1Health - $PTR_HEALTH_HERO1, $hprocess, 'float')
	$CUR_HP_HERO1 = $3_Hero1Health

	;-Hero2 Healthstack
	$1_Hero2Health = _MemoryRead($PTR_HEALTH, $hprocess, 'dword')
	$2_Hero2Health = _MemoryRead($1_Hero2Health + $PTR_GLOBAL_OFFSET, $hprocess, 'dword')
	$3_Hero2Health = _MemoryRead($2_Hero2Health - $PTR_HEALTH_HERO2, $hprocess, 'float')
	$CUR_HP_HERO2 = $3_Hero2Health

	;-Hero3 Healthstack
	$1_Hero3Health = _MemoryRead($PTR_HEALTH, $hprocess, 'dword')
	$2_Hero3Health = _MemoryRead($1_Hero3Health + $PTR_GLOBAL_OFFSET, $hprocess, 'dword')
	$3_Hero3Health = _MemoryRead($2_Hero3Health - $PTR_HEALTH_HERO3, $hprocess, 'float')
	$CUR_HP_HERO3 = $3_Hero3Health

	If ($CUR_HP_PLAYER * 100) < $MAXHP_PLAYER / 4 Then
		_MemoryWrite($MEM_NPCIDSELECT, $hprocess, $PLAYERLIST[1])
		KeySend(Random(1, 8, 1))
	EndIf

	If ($CUR_HP_HERO1 * 100) < $MAXHP_HERO1 / 4 Then
		_MemoryWrite($MEM_NPCIDSELECT, $hprocess, $PLAYERLIST[2])
		KeySend(Random(1, 8, 1))
	EndIf
	If ($CUR_HP_HERO2 * 100) < $MAXHP_HERO2 / 4 Then
		_MemoryWrite($MEM_NPCIDSELECT, $hprocess, $PLAYERLIST[3])
		KeySend(Random(1, 8, 1))
	EndIf
	If ($CUR_HP_HERO3 * 100) < $MAXHP_HERO3 / 4 Then
		_MemoryWrite($MEM_NPCIDSELECT, $hprocess, $PLAYERLIST[4])
		KeySend(Random(1, 8, 1))
	EndIf
EndFunc   ;==>Heilen

start()
Btw. man selber is monk mit 1-8 healskills..3 ele helden mit searing flames..