Maestia vs. AutoIt - Frage

03/07/2012 14:47 Kremix#1
Moinsen zusammen,

Ich habe ein paar kleine Fragen an die liebe Community, vielleicht kann mir ja der eine oder andere helfen :)

Zum Vorwort... Ich habe damals bei GuildWars mal angefangen AutoIt Scripte zu schreiben um bestimmte Sachen zu erledigen. Damals noch unter dem Namen HFFF bekannt, und später dann auch nen komplettes Farmscript geschrieben.

Habe ich etwas verpasst, oder nutzt Maestia seitdem es zu Alaplaya gegangen ist kein Hackshield mehr? Denn nun funktioniert mein AutoIt auf einmal :)

Das ist nun leider auch schon wieder 4 Jahr lang her und ich habe meine ganzen alten Scripte durch etliche Rechnerwechsel irgendwann einmal gelöscht >.<
Soll heißen: Mir fehlen relativ viele Kenntnisse, die ich aus meinen alten Scripts übernehmen, oder auffrischen hätte können... Vielleicht kennt sich ja der ein oder andere aus und kann mir bei meinen Sachen ein wenig auf die Sprünge helfen :)

Ich bin mit meinem Script mitlerweile so weit, das es ohne Probleme läuft und läuft und läuft... Nur würde ich gern ein paar Kleinigkeiten noch einbauen, bei denen es mir aber an alten Kentnissen fehlt...

Dazu zählt:

1. Eine If Anwendung mit Pixelchecksum, in der ich sagen möchte: Wenn das und das so ist, dann mach weiter wie normal, wenn es anders ist, dann mach bitte das:...
Um ein Checksum auszulesen habe ich bereits schon was wiedergefunden:
Code:
HotKeySet("{HOME}", "_sum")

MsgBox(0,"Info", "Press ""Home"" key (germ.: ""Pos1"") to get the pixelchecksum!""")

Func _sum();
If Not WinActivate("MAESTIA_PSG 3.7.0.0_120223_v1") Then
	WinActivate("MAESTIA_PSG 3.7.0.0_120223_v1")
EndIf
Sleep(3000)
$sum = Pixelchecksum(597, 709, 598, 710)
MsgBox(0,"Your Pixelchecksum", $sum)
Exit
EndFunc

While 1
WEnd
2. Ich würde gern wieder wissen, wie ich eine dauerschleife schreibe, in der ich sage: Führe bitte DIESES 50 oder 100 mal aus, und dann mach 1 mal folgendes...
Zur Zeit habe ich nur eine dauerschleife die wie folgt läuft:
Code:
while 1
	_**();
	_***();
	_****();
	_*****();
wend
Das wäre meine ersten Fragen, damit würde ich schon ein gutes Stück weiterkommen... :)

Und um noch zu klären, wieso denn so stümperhaft mit AutoIt, ganze ohne Memory und etc... Ich habe von alle dem gescripte und programmiere nicht sonderlich viel Ahnung, und wenn ich sowass schreibe und veröffentliche, dann möchte ich gerne, das auch andere User die sich evtl. genauso wenig damit auskennen wie ich ein wenig Ainfluss auf den Code haben und somit alles für sich indivituell anpassen können :)

Selbstverständlich bin ich bereit meinen Code später dann wenn ich alles habe so wie ich es haben möchte öffentlich zur Verfügung zu stellen... :)

Vielen Dank im Vorraus,
Kremix :)
03/08/2012 08:25 RunzelEier#2
jo maestia hat schon länger kein hackshield mehr. wurde ihnen wahrscheinlich zu teuer, dafür das schon mehrere bypasse released wurden

nun zu deinen problemen
1.
PHP Code:
Func _sum()
   static 
$lastsum ;hat bei jedem funktionsaufruf den gleichen wert ist aber nur eine lokale variable
   
If Not WinActivate("MAESTIA"Then ;Damit du es nicht bei jeder neuen version ändern musst ;)
      
WinActivate("MAESTIA") ;Eigentlich macht man sowasauch der befehl oben drüber über ein handle ;)
   EndIf
   
Sleep(3000);das sleep sollte eher in deine hauptschleife ;)
   
$sum Pixelchecksum(597709598710)
   if 
$sum <> $lastsum then
      
;es hat sich was getan
   
EndIF
   
$lastsum $sum;für nächsten aufruf
EndFunc 
2.
PHP Code:
while 1
    
for $i=0 to 99 ;führt die schleife 100 mal aus
        _
**();
    
next
    _
***();
    
_****();
    
_*****();
wend 
03/08/2012 14:58 Kremix#3
Danke dir erstmal Runzel, du hast mir schon nen gutes Stück weiter geholfen :)
Nur hätte ich jetz noch eine Frage bezüglich der If Anwendungen... Die leuchten mir nich ganz so ein...
Ich sagte ja das ich viel Nachholbedarf habe... ^^

Gibts nicht eine möglichkeit das ganze so zu schreiben irgendwie in der Art?
Code:
Func _bla bla bla()
   If Pixelchecksum(597, 709, 598, 710)=202178921
   then
   
   UND HIER KOMMT DANN NEN KLEINES SCRIPT REIN
   WAS ER WENN PIXEL = 202178921 MACHEN SOLL!
   
   If
   
   UND HIER DANN DER COMAND FÜR PIXEL IS NICH = 202178921
   DANN LAUF BITTE WIE UNTEN IM WHILE SCRIPT WEITER.
   
   EndIF
EndFunc
Oder ist es so, das er den Func aufruft, dann macht er den Pixelchecksum und schaut ob er 202178921 ergibt.
Wenn der Checksum 202178921 ergibt führt er das Script aus und wenn nich, dann lässt er einfach die While-Schleife weiterlaufen als wäre nichts gewesen.
Dafür müsste man dann aber das zweite If entfernen, oder?
03/08/2012 18:54 RunzelEier#4
PHP Code:
Func _bla bla bla()
   If 
Pixelchecksum(597709598710)=202178921
   then
   
   UND HIER KOMMT DANN NEN KLEINES SCRIPT REIN
   WAS ER WENN PIXEL 
202178921 MACHEN SOLL!
   
   Else;
wenn nicht das erste dann mach das
   
   UND HIER DANN DER COMAND FÜR PIXEL IS NICH 
202178921
   DANN LAUF BITTE WIE UNTEN IM 
WHILE SCRIPT WEITER.
   
   EndIF
EndFunc 
so geht das erste

und das zweite hab ich nicht so ganz verstanden.

ich empfehle dir wirklich mal ein paar anfänger tuts durch zu ackern
03/09/2012 10:24 SwarN#5
Quote:
Originally Posted by Kremix View Post
Code:
Func _bla bla bla()
   If Pixelchecksum(597, 709, 598, 710)=202178921
   then
   
   UND HIER KOMMT DANN NEN KLEINES SCRIPT REIN
   WAS ER WENN PIXEL = 202178921 MACHEN SOLL!
   
   If
   
   UND HIER DANN DER COMAND FÜR PIXEL IS NICH = 202178921
   DANN LAUF BITTE WIE UNTEN IM WHILE SCRIPT WEITER.
   
   EndIF
EndFunc
Oder ist es so, das er den Func aufruft, dann macht er den Pixelchecksum und schaut ob er 202178921 ergibt.
Wenn der Checksum 202178921 ergibt führt er das Script aus und wenn nich, dann lässt er einfach die While-Schleife weiterlaufen als wäre nichts gewesen.
Dafür müsste man dann aber das zweite If entfernen, oder?
Runzel hat dir ja schon weitergeholfen, zu deinem 2ten absatz noch dazu zusagen ist, JA das siehst du richtig.

Code:
Func _bla bla bla()
   If Pixelchecksum(597, 709, 598, 710)=202178921 Then
         ; Erste "Wenn"-Frage (In diesem Fall wenn der Checksum 202178921 ist)
   ENDIF  
   
   IF Pixelchecksum(597, 709, 598, 710)<>202178921 Then
         ; Zweite "Wenn"-Frage  (In diesem Fall wenn der Checksum UNGLEICH 202178921 ist)
         ; Hier wäre natürlich ein Else wie Runzel es dir gezeigt hat von Vorteil, da er hier jetzt nochmal
         ;   die Checksum ausließt und dies natürlich unnötig wäre. Aber damit sollte deine Frage
         ;   beantwortet sein.
   EndIF
EndFunc
Ich empfehle dir öfters mal die F1 Taste zu drücken,
die hilfe in AutoIt ist für Anfänger mehr als geeignet. Also einfach mal das IF markieren und F1 drücken, sind auch sehr schöne Beispiele in der Hilfe vorhanden.
03/10/2012 10:45 Kremix#6
Morgen ihr lieben ;)
Wollte mal nen Statusbericht abgeben... :)

Bin bis jetzt noch ganz guter dinge, es ist alles andere als einfach alles mit Checksum zu machen und vorallem viel mit Mouseclick statt mit W-A-S-D zu laufen, aber bis jetzt rennt das script fehlerfrei.

Bis jetzt habe mir drin:
-death check
-buff check
-armory check
-erleuchtungs check
-aufladen von Maestones
-identen alle Items
-verkaufen aller Items
-reparieren nach bestimmter Zeit


Was für mich noch ganz interessant wäre ist, ob es ein tool gibt, das mir aufzeichnet welche Tasten ich wie lange Drücke, quasi sowass wie nen Tool, das das Schreiben des weges einmal aufzeichnet während ich ihn ingame einmal laufe. Jemand nen Plan davon, oder weiß ob es sowass gibt? Ich mein ich hatte soetwas mal bei GW gefunden...

Bin bald gern bereit das Script Online zu stellen, werde nur noch ein paar Kampfsachen aktualisieren, da ich z.Z. noch alle aktiven Maestones nutze und die wohl nich jeder hat ;)

Bis bald, Kremix ;)
03/10/2012 17:50 SwarN#7
Bis auf dass das Aufzeichnen ziemlich unsauber ist, aber das ist ja auch nicht deine Frage,

ja es gibt sollche Tool's zu haufen die deine Tasten die du drückst aufnehmen.

Meine G15 Tastatur hat sowas in seiner Software von haus aus drinnen.
Gibt aber glaube ich auch Tools wie Hotkeysend die wosas mit drin haben.
03/11/2012 10:45 Kremix#8
Ich glaub da haben wir aneinander vorbei geredet... ^^
Ich suche ein Tool, oder auch Script, das ich anmache bevor ich das Spiel starte und dann einfach losrenne...
Nehmen wir einfach mal an ich laufe in Superion vom Waldi Viertel bis zum Auktionator, das von Hand, also via WASD, dann sollte mir das Sript nachher in einer TXT Datei Aufschluss liefern, welche Taste ich zu welchem Zeitpunkt gedrückt habe, und wie lange.
Es sollte quasi den fertigen Weg ausspucken, mit allen Tasten, ihren Downs & Ups usw.

Ich habe jetzt mal mit nem Keylogger probiert, aber der zeigt mir nicht die Zeit an wie lange ich eine Taste gedrückt halte, sondern nur beim Vorwertslaufen wwwwwwwwww...
Kennt jemand nen Koffer der diese Vorraussetzung erfüllt?
Muss auch nur einer fürs Keyboard sein.

Gruß Kremix
03/19/2012 10:26 SwarN#9
Versuchs mal mit AutoHotkey
da ist ein Tool dabei das dir genau deine Tastaturanschläge wie lange etc. aufzeichnet.

Ansonsten kannst du dir auch eins selber schreiben.

Oder benutz einfach [Only registered and activated users can see links. Click Here To Register...]
03/19/2012 14:46 | Moep |#10
Hatte mir mal aus langeweile ne moveto für maestia geschrieben, wenn du die mems der xyz coords und xyz cam findest dann sollte das kein problem sein.
03/19/2012 15:39 RunzelEier#11
PHP Code:
Global Const $X_Offset 0x180 ;float
Global Const $Y_Offset 0x184 ;float
Global Const $Z_Offset 0x188 ;float
Global Const $X_Rotation_Offset 0x394;float x-richtung einheitsvektor laufrichtung
Global Const $Z_Rotation_Offset 0x398;float z-richtung

Func _RunTo
($X_Ziel$Z_Ziel)
    
Local $X_Curr _Player_Coord_X()
    
Local $Z_Curr _Player_Coord_Z()
    
Local $X_Rotation $X_Ziel $X_Curr
    Local $Z_Rotation 
$Z_Ziel $Z_Curr
    $X_Rotation 
$X_Rotation _Vektorlaenge($X_Rotation$Z_Rotation)
    
$Z_Rotation $Z_Rotation _Vektorlaenge($X_Rotation$Z_Rotation)
    
_Player_Set_Rotation_X($X_Rotation)
    
_Player_Set_Rotation_Z($Z_Rotation)
EndFunc   ;==>_RunToStart

Func _Vektorlaenge
($Vektor1$Vektor2)
    Return 
Sqrt($Vektor1 $Vektor2 2)
EndFunc   ;==>_Vektorlänge

Func _Player_Coord_X
()
    Return 
_MemoryRead($Basepointer_Player $X_Offset$HPID'float')
EndFunc   ;==>_Player_Coord_X

Func _Player_Coord_Y
()
    Return 
_MemoryRead($Basepointer_Player $Y_Offset$HPID'float')
EndFunc   ;==>_Player_Coord_Y

Func _Player_Coord_Z
()
    Return 
_MemoryRead($Basepointer_Player $Z_Offset$HPID'float')
EndFunc   ;==>_Player_Coord_Z

Func _Player_Rotation_X
()
    Return 
_MemoryRead($Basepointer_Player $X_Rotation_Offset$HPID'float')
EndFunc   ;==>_Player_Rotation_X

Func _Player_Set_Rotation_X
($Wert)
    Return 
_MemoryWrite($Basepointer_Player $X_Rotation_Offset$HPID$Wert'float')
EndFunc   ;==>_Player_Set_Rotation_X

Func _Player_Rotation_Z
()
    Return 
_MemoryRead($Basepointer_Player $Z_Rotation_Offset$HPID'float')
EndFunc   ;==>_Player_Rotation_Z
Func _Player_Set_Rotation_Z
($Wert)
    Return 
_MemoryWrite($Basepointer_Player $Z_Rotation_Offset$HPID$Wert'float')
EndFunc   ;==>_Player_Set_Rotation_Z 
Das ist die Funktion ;)
Sie Rotiert euch auf euer Ziel, ab dann müsst ihr nur noch gradeaus laufen (die W-Taste :p)
Den Basepointer auf den player müsst ihr aber selbst rausfinden

Komischerweise gibt es keinen (oder ich hab ihn einfach nur nicht gefunden) vektor in y Richtung (höhe) daher kommt es nicht genau auf den einheitsvektor. Könnte aber auch ein rundungsfehler sein.
Daher immer ein stück laufen und wieder aufs ziel rotieren