Ich habe mir gerade die playerstructs von css besorgt, und wollte zum testen ein script machen, welches mir von allen möglichen 64 spielern im raum, alle werte liefert.
Nun habe ich ein Paar arrays gesetzt.
Code:
Global Const $NameOff[2] = [0x0, 0x38]
Global Const $HPOff[2] = [0x0, 0x5c]
Global Const $TeamOff[2] = [0x0, 0x58]
Global Const $XOff[2] = [0x0, 0x60]
Global Const $YOff[2] = [0x0, 0x64]
Global Const $ZOff[2] = [0x0, 0x68]
Global Const $PitchOff[2] = [0x0, 0x6C]
Global Const $YawOff[2] = [0x0, 0x70]
Global Const $RollOff[2] = [0x0, 0x74]
So.
Diese offsets gelten für den ersten spieler.
Für den zweiten spieler, muss jeder offset mit 140 addiert werden.
base + 0x0, sehr sinnvoll ;o
lolkop hat übrigens etwas zu MemoryPointerRead geschrieben, solltest du dir mal durchlesen.
Und entscheid dich, 140 oder 0x140?
base + 0x0, sehr sinnvoll ;o
lolkop hat übrigens etwas zu MemoryPointerRead geschrieben, solltest du dir mal durchlesen.
Und entscheid dich, 140 oder 0x140?
1. Bei Pointerread muss doch der erste array immer 0x0 sein 0.0 oder irre ich mich?
Ich nutze gescheite Sprachen mit gescheiten Funktionen.
Na, dann rechne es drauf ;o
Mit seinem kommentar weiß ich nichts anzufangen.
Es geht mir nur darum, dass ich nicht weiß, wie ich die MemoryPointer func aufrufe, mit verändertem array.
Ich weiß halt nicht, wie ich dem array 0x140 addieren kann.
Edit: Ich könnte das ganze auch in c++ machen, aber:
C++ und VAC :S Ich trau mich nicht meinen account zu riskieren. Autoit ist mir sicherer.
ob du nun c++ oder autoit nutzt macht doch überhaupt keinen unterschied, da letztendlich beide auf die winapis zugreifen.
in dem verlinkten post ging es darum, das die pointer funktion, welche hier aus einem mit unbekannten grund alle so gerne zugreifen, jedes mal folgendes tut:
die wird sicher auffallen, das es keinen sinn macht $pointer jedes mal erneut auszulesen...
aber genau das macht diese funktion.
da es sich in deinem beispiel anscheinend abgesehen vom name um eine reine 4byte struct handelt, kannst du den pointer einmalig auslesen, dann den name einzeln, und den rest in einer einfachen for schleife.
was genau du mit diesen 0x140 addieren meinst habe ich nicht wirklich verstehen können. ich denke du meinst das hier der basepointer 0x140 weiter hinten liegt.
in diesem falle addierst du einfach die 0x140 auf den pointer. auch dies lässt sich wieder in einer schleife erlediggen.
letzendlich würde dein code so aus 2 schleifen und somit ca. 7 zeilen bestehen.
Diese Base Addresse, zeigt auf die werte, des ersten spielers im raum.
Und exakt 140 bytes liegen die werte des zweiten spielers.
Wieder 140 bytes weiter liegen die werte des dritten spielers.
Und immer so weiter, bis zum 64. spieler.
na dann brauchst du das doch nur etwa so aufbauen:
Code:
dim $name[64], $data[64][8], $type[8]=['dword','dword','float','float','float','float','float','dword']
$base = read($baseAdress)
for $player=0 to 63
$base+=$player*0x140
$name[$player] = read($base+0x38, 'string')
for $i=0 to 7
$data[$player][$i]=read($base+0x58+$i*4, $type[$i])
next
next
das data-array sieht dann so aus:
Code:
$data[player][0] <-- Team
$data[player][1] <-- HP
$data[player][2] <-- X
$data[player][3] <-- Y
$data[player][4] <-- Z
$data[player][5] <-- Pitch
$data[player][6] <-- Yaw
$data[player][7] <-- Roll
wichtig wäre mir, das du den hintergrund jetzt verstehst, und warum man niemals die pointerfunktion aus der udf nutzen sollte, welche hier wohl irgendwo in umlauf gebracht wurde.
ein pointer ist schließlig nichts anderes als ein zeiger, und sollte immer einzeln bestimmt werden, da er in der regel mehr als nur einmal benötigt wird.
vorallem wenn die struct auf welche man zugreifen möchte über mehrere pointer erreicht werden muss, so steigt die anzahl nutzloser funktionsaufrufe pro pointerebene mit der udf exponentiell...
wichtig wäre mir, das du den hintergrund jetzt verstehst, und warum man niemals die pointerfunktion aus der udf nutzen sollte, welche hier wohl irgendwo in umlauf gebracht wurde.
ein pointer ist schließlig nichts anderes als ein zeiger, und sollte immer einzeln bestimmt werden, da er in der regel mehr als nur einmal benötigt wird.
vorallem wenn die struct auf welche man zugreifen möchte über mehrere pointer erreicht werden muss, so steigt die anzahl nutzloser funktionsaufrufe pro pointerebene mit der udf exponentiell...
Ich habe mir jetzt eine eigene Pointer funktion geschrieben ^^
Ist im prinzip nichts anderes als von der base die addy + 1offset, davon die addresse der wert +2offfet usw.
AutoIt Geschwindigkeit verändern - Programmierhilfe gesucht !!! 05/13/2011 - Last Chaos - 35 Replies hi leute,
ich habe einige Schwierigkeiten mit dem verändern der Value der Geschwindigkeit !
Es gibt einige ansätze wie z.B.
#include <NomadMemory.au3>
$PID = ProcessExists("Nksp.exe")
$Handle = _MemoryOpen($PID)
$Base = 0x106445A8
While 1
Autoit and array of bytes 12/22/2010 - AutoIt - 1 Replies Does anyone here know if NomadMemory.au3 can search for array of bytes or write an array of bytes to memory? Just asking because it would be useful for some trainers im thinking of making in Autoit.