[Schleife]Problem

10/24/2010 00:28 .BritainAndy#1
Hi Leute,

ich amch gerade nen Hack für Metin2.

So ich hab folgendes Problem:

Wenn ich den hack starten will, drücke ich auf $button1

dann schreibt er in den pointer mit

PHP Code:
while 1
 _MemoryPointerWrite
($Aaddress$openmem$AOffset"16656""dword")
wend 

So, klappt auch.

Wenn ich jetzt den ahck deaktivieren will muss ich 16656 zu 16256 ändern

also dachte ich folgendes

der off button ist $button2

PHP Code:
while 1
 _MemoryPointerWrite
($Aaddress$openmem$AOffset"16256""dword")
wend 
aber ich hab den hack trotzdem aktiviert, da ich wenn ich den ahck starte ja die endlosschleife starte, und die dann bei button2 (off button) nicht einfahc überschreiben kann.

ich hoffe ihr versteht was ich meine :D



PHP Code:

Case $Button1 ;on button
 
while 1
 _MemoryPointerWrite
($Aaddress$openmem$AOffset"16656""dword")
wend


;Hakc ist an

Case $Button2 ;off button -> ich will deaktivieren

while 1
 _MemoryPointerWrite
($Aaddress$openmem$AOffset"16256""dword")
wend 
funktioniert halt nicht, wiel button 1 ne endlosshcleife hat und dann nicht gestopt wird.

und wie kann ich die farbe eines buttons verändern?
Wenn ich on/off in einen button machen will.. ich habe keine ahnung wie ich zwei funktionen , on off, in einen button stecken kann und der button sich bei on grün färbt und bei off rot.

Lg Andsy :(
10/24/2010 00:43 PenGuin :O#2
Arbeite im OnEventModus ;)
Einfach mal Googlen oder Hilfe durchsuchen.
10/24/2010 01:24 lolkop#3
oder arbeite mit zuständen...

Code:
While 1
    Switch GuiGetMsg()
        Case $start_btn
            $zustand = True
        Case $stop_btn
            $zustand = False
    EndSwitch

    If $zustand Then
        ;aktionen
    EndIf
WEnd
10/24/2010 02:28 PenGuin :O#4
Quote:
Originally Posted by lolkop View Post
oder arbeite mit zuständen...

Code:
While 1
    Switch GuiGetMsg()
        Case $start_btn
            $zustand = True
        Case $stop_btn
            $zustand = False
    EndSwitch

    If $zustand Then
        ;aktionen
    EndIf
WEnd
Huch, mal kein vernichtendes Argument seitens lolkop gegen meine Problembehandlung? :D
10/24/2010 11:31 .BritainAndy#5
Zu dem Zustand, das ist ne wirklich gute Idee.

Jedoch muss ich ja $zustand auch declarieren, und ich kann doch keine variable mit ner If schelife declarieren oder?
ich habs jetzt so probiert:

PHP Code:
While 1
    
Switch GuiGetMsg()
        Case 
$start_btn
            $zustand 
True
        
Case $stop_btn
            $zustand 
False
    
EndSwitch

    If 
$zustand Then
     SetPrivilege
("SeDebugPrivilege"1)

$pid WinGetProcess("METIN2")
$openmem _MemoryOpen($pid)
$baseadress _MemoryModuleGetBaseAddress($pid,"immortal2.bin")


    
$testoffset1 "128"
    
$testoffset2 "5B6"
    
$testoffset3 "0021C4A4"




Global $AOffset[3]
$AOffset[0] = 0
$AOffset
[1] = Dec($testoffset1)
$AOffset[2] = Dec($testoffset2)
$Aaddress "0x" Hex($baseadress Dec($testoffset3))



$Amemread _MemoryPointerRead($Aaddress$openmem$AOffset"byte[2]")




$Awert _ReturnMemoryValue($Amemread[1])
$Awert Dec($Awert)



Func _ReturnMemoryValue($sAdresse)

    
$sNewAdresse ""
    
$sAdresse StringTrimLeft($sAdresse2)
    For 
$i StringLen($sAdresse) - 1 To 0 Step -2
        $sNewAdresse 
&= StringMid($sAdresse$i2)
    
Next
    
Return $sNewAdresse
EndFunc



while 1
 _MemoryPointerWrite
($Aaddress$openmem$AOffset"16656""dword")
wend
    
EndIf
WEnd 
und error meldung ist: ==> Variable used without being declared.:
If $zustand Then
If ^ ERROR


Sieht auch komishc aus irgendwie in ner if shcleife so nen großen code zuhaben
10/24/2010 11:38 Memphiisto#6
Ich Programmier zwar noch nicht lang mit Autoit aber was ich weiß musste schon noch einstellen was an der variable $zustand Wahr oder FALSCH ist.
Also das is auf das bezogen:
PHP Code:
 Case $start_btn
            $zustand 
True
        
Case $stop_btn
            $zustand 
False 
10/24/2010 11:41 ZaZiZu#7
schreib ganz oben einfach Dim $zustand hin xD damit ist es erledigt (denke ich)

und joa, das war ein guter counter lolkop gegenüber pinguins idee xD
das mit den zuständen werde ich mir mal merken ;)



€dit: @MagicDave
dafür, dass ich sone formel das 1te mal sehe, finde ich ist die ziiemlich simpel zu checken

das was du meintest mit einstellen: dies hat er schon mit dem Case erledigt.
wenn $button (gedrückt wird) ist $zustand wahr, und wird somit ausgeführt.
wenn $button (nochma gedrückt wird) ist $zustand falsch, und wird somit nicht mehr ausgeführt

und ich glaube, das ist auch eine endlosschleife ;)
10/24/2010 11:43 lolkop#8
1. if ist keine schleife...
2. lösch dochmal die ganzen sinnlosen leerzeilen da raus...
3. das was du da geschriebn hast wir durchgängig ausgeführt (befindet sich doch in deiner hauptschleife)... => keine endlosschleifen darin starten und schon garkeine funktionen deklarieren -.-

Edit:
Quote:
Originally Posted by MagicDave View Post
Ich Programmier zwar noch nicht lang mit Autoit aber was ich weiß musste schon noch einstellen was an der variable $zustand Wahr oder FALSCH ist.
Also das is auf das bezogen:
PHP Code:
 Case $start_btn
            $zustand 
True
        
Case $stop_btn
            $zustand 
False 
bitte was? -.-
True und False sind boolean werte...
10/24/2010 11:56 ZaZiZu#9
xD
und hier mal ein ansatz um die buttonfarbe zu ändern:
GUICtrlSetDefBkColor ( 0xFarbehex [, Winhandle] )
damit du weißt wann es an und wann es aus ist (außer, dass man es an der funktion erkennen kann)

und joaa, der fail ist genial :D ich dachte schon ich spinne, als ich deinen skrip gelesen habe
10/24/2010 12:15 lolkop#10
wenn man deinen bisher geposteten code mal richtig anordnet, die sinnosen deklarationen und leerzeilen mal rauslöscht, kommt man auf das hier:
Code:
Dim $AOffset[3] = [0, 0x128, 0x5B6]
SetPrivilege("SeDebugPrivilege", 1)
$openmem = _MemoryOpen(WinGetProcess("METIN2"))
$baseadress = _MemoryModuleGetBaseAddress(WinGetProcess("METIN2"), "immortal2.bin")

While 1
	Switch GUIGetMsg()
		Case -3
			_MemoryClose($openmem)
			Exit
		Case $start_btn
			$zustand = True
		Case $stop_btn
			$zustand = False
	EndSwitch

	If $zustand Then
		$Awert =_MemoryPointerRead($baseadress+0x21C4A4, $openmem, $AOffset, "short")
		_MemoryPointerWrite($baseadress + 0x21C4A4, $openmem, $AOffset, "16656", "dword")
	EndIf
WEnd
10/24/2010 13:55 .BritainAndy#11
Code:
Dim $AOffset[3] = [0, 0x128, 0x5B6]
SetPrivilege("SeDebugPrivilege", 1)
$openmem = _MemoryOpen(WinGetProcess("METIN2"))
$baseadress = _MemoryModuleGetBaseAddress(WinGetProcess("METIN2"), "immortal2.bin")

Dim $zustandw

while 1=1
	$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE
		Exit
			Case $Button1
	$zustand = True
			Case $Button2
	$zustand = False
			Case $Button3

			Case $Button4

			Case $Button5
	MsgBox(0,"SourceCode","folgt")

			Case $Button6

			Case $Button7
EndSwitch

If $zustand Then
	$Awert =_MemoryPointerRead($baseadress+0x21C4A4, $openmem, $AOffset, "short")
		_MemoryPointerWrite($baseadress + 0x21C4A4, $openmem, $AOffset, "16656", "dword")

EndIf

Wend

So, klappt ingame.
Ich bewege mich schneller, jedoch klappt der off button nicht.
Button2
10/24/2010 14:12 lolkop#12
-.- du hast den off zustand ja auchnicht benutzt -.-

im moment macht dein script folgendes...

Code:
wenn an dann [...].
wenn du nicht sagst was es sonst machen soll, dann wird es auch sonst nichts machen...

wenn dein chef dir auffer arbeit sagt wenns brennt dann lösch das feuer... wüsstest du was du im normalfall (wo es nicht brennt) tun sollst?
10/24/2010 14:19 .BritainAndy#13
wie benutz ich denn den off zustand?

ich verstehe das gerade nicht... weil button eins sagt doch:

wenn du mich klickst, aktiviere ich den "shcneller bewegen" zustand

und button zwei:


wenn du mich klickst, deaktiviere ich den "schneller bewegen" zustand..

also wieder normal shcnell gehen
10/24/2010 14:51 ZaZiZu#14
Quote:
Originally Posted by .BritainAndy View Post
wie benutz ich denn den off zustand?

ich verstehe das gerade nicht... weil button eins sagt doch:

wenn du mich klickst, aktiviere ich den "shcneller bewegen" zustand

und button zwei:


wenn du mich klickst, deaktiviere ich den "schneller bewegen" zustand..

also wieder normal shcnell gehen
€dit: ah, jetzt verstehe ich was du meinst ^^

Und nein, Button2 deaktiviert nicht den "schneller bewegen"zustand, sondern sagt dass es nicht gemacht wird (Achtung! 2 verschiedene Sachen ^^)
Ich würde da eine Funktion einbauen, die diese Werte wieder zurück ändert ;)

Aber wieso ändert sich der Wert nicht zurück? Werden die Änderungen permament übernommen oder wie?

€dit2: Wenn man eine Gegenfunktion einbauen müsste, dann denke ich würde auch ein "Else" reichen
Quote:
If $zustand Then
$Awert =_MemoryPointerRead($baseadress+0x21C4A4, $openmem, $AOffset, "short")
_MemoryPointerWrite($baseadress + 0x21C4A4, $openmem, $AOffset, "16656", "dword")
Else
$Awert =_MemoryPointerRead($baseadress+0x21C4A4, $openmem, $AOffset, "short")
_MemoryPointerWrite($baseadress + 0x21C4A4, $openmem, $AOffset, "16256", "dword")
EndIf
Wenn du da aber ein ganzes Hackpaket machen willst (dafür stehen doch die vielen buttons oder :D?), dann müsste man für jedes eine einzelne Funktion machen (Else hilft nur bei 2 Möglichkeiten)


€dit2: @lolkop: wenn du meinst, aber wie erklärst du dir seinen fail ^^?
der speicher wird doch nur 1x geändert, aber nicht rückgängig gemacht.
10/24/2010 14:53 lolkop#15
eigentlich nicht...

button1 sagt wenn du mich klickst aktivire ich eine variable...
button2 sagt wenn du mich klickst deaktiviere ich eine variable...

und danach guckt eine funktion ob die variable aktiv ist... wenn sie aktiv ist schreibt die funktion in den speicher, wenn nicht macht sie einfach nichts...