|
You last visited: Today at 16:08
Advertisement
While schleife wird ignoriert
Discussion on While schleife wird ignoriert within the AutoIt forum part of the Coders Den category.
10/09/2013, 15:50
|
#1
|
elite*gold: 0
Join Date: Dec 2012
Posts: 448
Received Thanks: 278
|
While schleife wird ignoriert
Ich habe ein Problem und zwar, dass meine While Schleife zwei mal durch geführt und dann ignoriert bzw. das Script beendet wird. Ich bin atm. am verzweifeln und würde mich über eine hilfreiche Antwort freuen.
Und der Code da unten ist nur ein Snippet eigtl. soll VIEL mehr in der Schleife stehen. Ich habe eine alternativ Lösung für das Problem trotzdem würde ich gerne Wissen warum er da einfach "abhaut".
Code:
#RequireAdmin
#include <NomadMemory.au3>
#include <Array.au3>
Dim $x[99]
Dim $y[99]
Dim $z[99]
Dim $addier[99]
Dim $sum[99]
$base = 0x2330388
$pid = ProcessExists("t6zm.exe")
$handle = _MemoryOpen($pid)
While 1
$playz = _MemoryRead( 0x2E490D58, $handle, "float")
$playy = _MemoryRead( 0x2E490D54, $handle, "float")
$playx = _MemoryRead( 0x2E490D50, $handle, "float")
$numofz = _MemoryRead($base,$handle);,"byte[4]")
;MsgBox(0,"",$numofz)
$base = $base + 0x44
For $i = 1 To $numofz
$x[$i] = _MemoryRead($base,$handle,"float")
$ybase = $base + 0x4
$y[$i] = _MemoryRead($ybase,$handle,"float")
$zbase = $ybase + 0x4
$z[$i] = _MemoryRead($zbase,$handle,"float")
$base = $base + 0x30
$i = $i + 1
$x[$i] = _MemoryRead($base,$handle, "float")
$ybase = $base + 0x4
$y[$i] = _MemoryRead($ybase,$handle, "float")
$zbase = $ybase + 0x4
$z[$i] = _MemoryRead($zbase,$handle, "float")
$base = $base + 0x5C
Next
Sleep(500)
WEnd
//edit: Gerade als Funktion ausprobiert. Nach 2x benutzen beendet das Script wie in der Schleife.
|
|
|
10/09/2013, 15:57
|
#2
|
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
|
Wenn der aus der Schleife "abhaut", dann liegt das wohl daran das du einen _MemoryRead falsch angewendet hast, poste doch mal den Fehler der in SciTE angezeigt wird, sonst können wir dir nicht helfen, oder du hast einfach die Arraygröße überschritten.
|
|
|
10/09/2013, 15:59
|
#3
|
elite*gold: 0
Join Date: Dec 2012
Posts: 448
Received Thanks: 278
|
Nope. Es gibt keinen Fehler.
Code:
>"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Users\SHI\Desktop\whynot.au3" /UserParams
+>15:54:43 Starting AutoIt3Wrapper v.2.1.2.9 Environment(Language:0407 Keyboard:00000407 OS:WIN_8/ CPU:X64 OS:X64)
>Running AU3Check (1.54.22.0) from:C:\Program Files (x86)\AutoIt3
+>15:54:43 AU3Check ended.rc:0
>Running:(3.3.8.1):C:\Program Files (x86)\AutoIt3\autoit3.exe "C:\Users\SHI\Desktop\whynot.au3"
--> Press Ctrl+Alt+F5 to Restart or Ctrl+Break to Stop
Das alles steht nach beenden darin.
|
|
|
10/09/2013, 16:05
|
#4
|
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
|
Es liegt vielleicht an einem anderen Teil des Codes, so ein kleines Snippet bringt einen auch nicht weiter.
|
|
|
10/09/2013, 16:09
|
#5
|
elite*gold: 0
Join Date: Dec 2012
Posts: 448
Received Thanks: 278
|
Kann nicht sein. Dieser Code alleine stürzt ab bzw. beendet nach 2 mal.
|
|
|
10/09/2013, 20:02
|
#6
|
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,149
|
Code:
#AutoIt3Wrapper_UseX64 = n
#RequireAdmin
#include <KDMemory.au3>
Dim $x, $y, $z
Dim $handles = 0, $processName = "t6zm.exe"
While True
$processId = ProcessExists($processName)
If $processId == 0 Then
If IsArray($handles) Then
_KDMemory_CloseHandles($handles)
$handles = 0
EndIf
Else
If $handles == 0 Then
$handles = _KDMemory_OpenProcess($processId)
If @error Then
;MsgBox()
ContinueLoop
EndIf
EndIf
$base = 0x2330388
$count = _KDMemory_ReadProcessMemory($handles, $base, "DWORD")
ReDim $x[$count]
ReDim $y[$count]
ReDim $z[$count]
$base += 0x44
For $i = 0 To $count - 1
$x[$i] = _KDMemory_ReadProcessMemory($handles, $base, "float")
$base2 = $base + 0x04
$y[$i] = _KDMemory_ReadProcessMemory($handles, $base2, "float")
$base2 += 0x04
$z[$i] = _KDMemory_ReadProcessMemory($handles, $base2, "float")
$i += 1
If $i >= $count Then ExitLoop
$base += 0x30
$x[$i] = _KDMemory_ReadProcessMemory($handles, $base, "float")
$base2 = $base + 0x04
$y[$i] = _KDMemory_ReadProcessMemory($handles, $base2, "float")
$base2 += 0x04
$z[$i] = _KDMemory_ReadProcessMemory($handles, $base2, "float")
$base += 0x5C
Next
;_ArrayDisplay()
EndIf
Sleep(500)
WEnd
Ich spar es mir an dieser Stelle mal alle Änderungen zu nennen. Kann es aber gerne noch machen, sofern gewünscht.
|
|
|
10/09/2013, 20:04
|
#7
|
elite*gold: 0
Join Date: Dec 2012
Posts: 448
Received Thanks: 278
|
Danke sehr lieb von dir. Ich sehe die Änderungen schon. 
Ich schau gleich mal nach.
//edit: geht leider doch nicht
|
|
|
10/09/2013, 20:42
|
#8
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
es ist absolut NICHT möglich, das das von dir gepostete tool nach 2 durchläufen aus der schleife springt (zumindest ohne error), da es keinerlei abbruchbedingungen in der schleife gibt.
wahrscheinlichste fehlerursache in deinem script ist ein zu hoher array index, da du in keinem fall auf den maximalen index prüfst.
|
|
|
10/09/2013, 21:00
|
#9
|
elite*gold: 0
Join Date: Dec 2012
Posts: 448
Received Thanks: 278
|
Ich bekomme es einfach nicht hin. Ich weiss, dass es eigtl. nicht möglich ist. -.-
Bei meinem komplettem Code beendet er schon vor vollständigem Durchlauf.
Code:
#RequireAdmin
#include <Array.au3>
#include <NomadMemory.au3>
$base = 0x2330388
$pid = ProcessExists("t6zm.exe")
$handle = _MemoryOpen($pid)
HotKeySet("{Numpad0}","aim")
While 1
Sleep(1000)
WEnd
Func aim()
MsgBox(0,"","aim")
$playz = _MemoryRead( 0x2E490D58, $handle, "float")
$playy = _MemoryRead( 0x2E490D54, $handle, "float")
$playx = _MemoryRead( 0x2E490D50, $handle, "float")
$numofz = _MemoryRead($base,$handle)
$base = $base + 0x44
Dim $x[$numofz]
Dim $y[$numofz]
Dim $z[$numofz]
Dim $addier[$numofz]
Dim $sum[$numofz]
For $i = 1 To $numofz
$x[$i] = _MemoryRead($base,$handle,"float")
$ybase = $base + 0x4
$y[$i] = _MemoryRead($ybase,$handle,"float")
$zbase = $ybase + 0x4
$z[$i] = _MemoryRead($zbase,$handle,"float")
$base = $base + 0x30
$i = $i + 1
$x[$i] = _MemoryRead($base,$handle, "float")
$ybase = $base + 0x4
$y[$i] = _MemoryRead($ybase,$handle, "float")
$zbase = $ybase + 0x4
$z[$i] = _MemoryRead($zbase,$handle, "float")
$base = $base + 0x5C
Next
;_ArrayDisplay($x)
;_ArrayDisplay($y)
;_ArrayDisplay($z)
For $i = 1 To $numofz
$addier[$i] = $x[$i] + $y[$i]
Next
;_ArrayDisplay($addier)
$playaddier = $playx + $playy
;near
$near = 0
For $i = 1 To $numofz
$sum[$i] = $addier[$i] - $playaddier
Next
For $i = 1 To $numofz
If $near > $sum[$i] Then
$near = $sum[$i]
$numofnear = $i
EndIf
Next
$mx = _MemoryRead(0x2D3EFB40, $handle, "float")
$my = _MemoryRead(0x2D3EFB3C, $handle, "float") ;höhe
$zw1y = $my / 360
$zw1x = $mx / 180
$zw2y = $zw1y * $y[$numofnear]
$zw2x = $zw1x * $x[$numofnear]
_MemoryWrite(0x2D3EFB40, $handle, $zw2x, "float")
_MemoryWrite(0x2D3EFB3C, $handle, $zw2y, "float")
MsgBox(0,"","aimed")
EndFunc
Ich musste meinen Pc letztens neu aufsetzen und habe Autoit komplett neu heruntergeladen.
|
|
|
10/09/2013, 21:41
|
#10
|
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
|
Du kannst den Sleep auf 100ms reduzieren.
Strukturier mal deinen Code besser, da erkennt man ja gar nichts.
Setz am besten in jede Zeile deiner Funktion eine MsgBox mit einer bestimmten Zahl, wenn keine MsgBox mehr angezeigt wird, weist du welche Funktion dein Script rauskickt.
|
|
|
10/09/2013, 23:10
|
#11
|
elite*gold: 0
Join Date: Dec 2012
Posts: 448
Received Thanks: 278
|
Sooooo die Lösung. Als erstes möchte ich mich sehr sehr sehr bei KDeluxe bedanken.
Das Problem war, dass wie er in seinem Skript schon gezeigt hatte fängt eine Matrix bzw. ein Array ja bei 0 an zu zählen und $i fängt ja leider nach meiner Definition bei 1 an also ist die Lösung bei jedem For $i = 1 To $numofz. Das ganze so zu ersetzen. For $i = 0 To $numofz. Interessant, dass das bei der Autoit Console nicht als Fehler angezeigt wird.
|
|
|
10/09/2013, 23:13
|
#12
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by SpieleHacksInfo
Sooooo die Lösung. Als erstes möchte ich mich sehr sehr sehr bei KDeluxe bedanken.
Das Problem war, dass wie er in seinem Skript schon gezeigt hatte fängt eine Matrix bzw. ein Array ja bei 0 an zu zählen und $i fängt ja leider nach meiner Definition bei 1 an also ist die Lösung bei jedem For $i = 1 To $numofz. Das ganze so zu ersetzen. For $i = 0 To $numofz. Interessant, dass das bei der Autoit Console nicht als Fehler angezeigt wird.
|
das ist kein grund für das script vorzeitig zu enden... frühzeitiges ende durch fehler kann nur bei überschreitung der arraydimension auftauchen...
ein ende des scriptes ohne fehler ist in deinem fall in keinem falle möglich...
|
|
|
10/09/2013, 23:16
|
#13
|
elite*gold: 0
Join Date: Dec 2012
Posts: 448
Received Thanks: 278
|
Quote:
Originally Posted by lolkop
das ist kein grund für das script vorzeitig zu enden... frühzeitiges ende durch fehler kann nur bei überschreitung der arraydimension auftauchen...
ein ende des scriptes ohne fehler ist in deinem fall in keinem falle möglich...
|
Komischer Weise lief es so bis gerade eben. Jetzt läuft er wieder nur noch einmal durch. -.- Trotzdem danke an alle die mir geholfen haben.
|
|
|
10/10/2013, 00:14
|
#14
|
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
|
Quote:
Originally Posted by SpieleHacksInfo
Code:
Dim $x[$numofz]
Dim $y[$numofz]
Dim $z[$numofz]
For $i = 1 To $numofz
[...]
$i = $i + 1
$x[$i] = _MemoryRead($base,$handle, "float")
$ybase = $base + 0x4
$y[$i] = _MemoryRead($ybase,$handle, "float")
$zbase = $ybase + 0x4
$z[$i] = _MemoryRead($zbase,$handle, "float")
$base = $base + 0x5C
Next
|
eigentlich ist ganz klar was hier passiert...
du deklarierst drei arrays der größe $numofz... dementsprechend ist das letzte element der arrays $array[$numofz-1]. deine schleife hingegen läuft bis $numofz. ist dieser letzte schritt erreicht, so inkrementierst du den index sogar nochmals und kommst so auf $x[$numofz+1] womit die arraygröße sogar um 2 überschritten wird....
abstürzen tut das ganze aber schon bei $i=$numofz-1 da hier das inkrementieren bereits zu einer überschreitung der maximalen größe führt....
|
|
|
10/10/2013, 00:30
|
#15
|
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
|
Er meinte aber, das das Script ohne Fehler durchläuft.
Das kann aber nicht stimmen wenn es wegen der Arraygröße abstürzt.
|
|
|
 |
|
Similar Threads
|
Hosts Datei wird ignoriert
07/10/2013 - Technical Support - 8 Replies
Hallo Leute ich hab ein kleines Problem mit meiner Hosts Datei.
Also erstmal was ich alles darin stehen hab:
127.0.0.1 youtube.com
127.0.0.1 facebook.com
Eigentlich sollte das richtig sein da es früher immer geklappt hat.
|
Quest-> Schleife in einer Schleife?
04/15/2013 - Metin2 Private Server - 3 Replies
Hallo Community,
ist es möglich in einer bestehenden Schleife eine weitere einzufügen die unabhängig von der 1. schleife agiert?
|
10 mal Schleife, dann 5 Sekunden Pause, dann wieder 10 mal Schleife, ...
05/06/2012 - AutoIt - 6 Replies
Hallo,
wie mache ich es, dass nach 10 Mal Schleife einmal Sleep (5000) gemacht wird?
Danach soll die Schleife wieder aufgenommen werden.
LG
Zottel
|
[AutoIt3] Schleife wird nicht erkannt
12/24/2010 - AutoIt - 5 Replies
Ich versuche einen Color aimbot zu programmieren.
Ich habe eine Schleife eingebaut, die endet, wenn er den Bildschirm von links nach rechts untersucht hat (Erstmal nur mit der Größe von meinen Monitor)
AutoIt erkennt aus irgendeinem Grund aber nicht die Schleife und denkt, das Until währe falsch.
Die Meldung :
" "Until" statement with no matching "Do" statement.:
Until $x = 1280 " Gelöst Gelöst
Hier mal ein Ausschnitt aus meinem Code (Die Variablen habe ich schon definiert, nicht,...
|
while-schleife cast x | schleife ende cast y
07/26/2010 - Diablo 2 Programming - 6 Replies
ich kann nicht einschlafen und versuche gerade halbwach herauszufinden, wie ich den bot etwas casten lassen kann, um ihn anschließend nach 10-15 casts etwas anderes casten zu lassen.
if(NTA_GetResistance(target, NTA_DAMAGE_PHYSICAL) >= 100)
{
if((target.name == "Pindleskin") && NTA_GetResistance(target, NTA_DAMAGE_PHYSICAL) >= 100)
{
var i =0;
while(i<15)
{
return NTC_CastSkill(106, NTC_HAND_LEFT, target);
i++;
|
All times are GMT +1. The time now is 16:09.
|
|