Autor Beitrag
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Di 28.12.04 16:42 
@Karlson

Guck mal auf die Zeit... Ich hab direkt geantwortet und da isses doch wohl besser wenn er die Antwort teilweise zu den Fragen passend bekommt, als wenn ich einen Roman schreibe... oda?? :-)

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
en!gma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: Di 28.12.04 16:49 
naja is ja auch unwichtig...
aber jex hab ich auch den fehler gesehen...danke...
ich werd heute abend mal schaun was ich noch verbessern kann und das ganze tut ein wenig überarbeiten =)
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Di 28.12.04 17:18 
Ich bin grad dabei die Zeit bei MineSweeper zu "freezen". Mein MineSweeper is von MS Win XP Pro Schülerversion (glaub aba net das es da Unterschiede gibbt..). Un die Zeit is da bei mir an Adresse 100579C. Bei euch auch???

Das mit dem einfrieren klappt eignlich auch, aber wat is mit "auftauen" (:-)) Geht das auch??? Und ich hab eignlich noch net so ganz kapiert, was ich überhaupt mach... :(

Ich hol mal noch schnell den Quellcode vom Trainer und poste den dann noch...

Und das mit dem Speicher ist jeze glaub ich klar... Ich versuchs mal in meinen Worten zu sagn: Also, das Programm (bei mir MineSweeper, bei en!gma Starcraft...) bekommt einen Bereich im Speicher zugewiesen. Dieser variiert je nach dem was grad auf dem PC läuft, weil ja alle Programm nen Teil bekommen und nicht immer den selben... So, unser Spiel hat nun seinen Bereich und in diesem Bereich ist die Verteilung aber immer gleich... Variablen werden immer an folgende Stelle geschrieben: <<SPEICHERBEREICH DES SPIELS>> + <<BEKANNTER WERT>>. Der "bekannte Wert" bleibt immer gleich, der Speicherbereich variiert... Wir können jetzt aber in unserm Trainer den Speicherbereich des Spiel rausfinden und addieren den bekannten Wert dazu (Wir laufen zu unserer "Variablen" mit dem Inhalt z.B. die Zeit oder Ammo oder sonst wat..) und sind am Ziel. Dort verändern wir irgendwas (dat is dat wat ich noch nich kapiert hab, falls das hier richtig is, sonst raff ich gar nix.. :-( ) und schon isses feddisch...

Stimmt das jeze so ungefähr???

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
en!gma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: Di 28.12.04 18:07 
jo so im groben isses richtig...
um das ganze mal gaaaaaaaaaaaaaanz grob im code zu erklären:

ausblenden Quelltext
1:
2:
3:
4:
5:
if linkeTaste.gedrueckt=True then
       begin
        Schiessen;
        MunnitionAbziehen; //zB in der Addresse 123456AB und hat den wert 1283
       end;


und unser ziel is nun das daraus zu machen ->

ausblenden Quelltext
1:
2:
3:
4:
5:
if linkeTaste.gedrueckt=True then
       begin
        Schiessen;
        macheNichts; //wir weisen 123456AB den wert 9090 zu (also 90 für nop wie im tut erklärt)
       end;


so sieht also unser trainer anschliessend aus...wenn du ihn nun "unfreezen" willst
musst du einfach der addresse 123456AB wieder den wert 1283 zuweisen...

hoffe das is jex ein bischen verständlicher.
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Di 28.12.04 18:30 
Jop, dat isses... Dann muss ich aber auch ersma den Wert wissen, der vorher drinne is.. also muss ich ihn auslesn... Also: Frage: Wie mach ich dat???

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
en!gma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: Di 28.12.04 18:42 
also du hast ja mit autohack deine addresse herausgefunden...
also in tsearch -> autohack...
und da hat er dir ja die addresse gezeigt die du verändern musst...
wenn du diese addresse oben anklickst, steht unten der wert dieser addresse...
und den musst du dir aufschreiben.

und die 9090 dann halt wieder durch 1283 ersetzen.
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Di 28.12.04 19:01 
Zitat:
und die 9090 dann halt wieder durch 1283 ersetzen.


Is diese 1283 jeze nur ein beliebiger Wert, den du aus Starcraft genommen hast, oder is dat wie die 90, die für nichts steht (ist dat ungefähr vergleichbar mit nil bei Delphi oder void bei C ???)... Und bei MineSweeper ändert sich die Zeit ja immer... also muss ich die Zeit vorher auslesn??? Also wenn der User bei 5 sek stoppt muss es ja nach dem unfreezen bei 6 weitergehn...

:-)

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Di 28.12.04 19:20 
WeBsPaCe hat folgendes geschrieben:
@Karlson

Guck mal auf die Zeit... Ich hab direkt geantwortet und da isses doch wohl besser wenn er die Antwort teilweise zu den Fragen passend bekommt, als wenn ich einen Roman schreibe... oda?? :-)


Nein ist es nicht :?

Aber ich denke mal ein Moderator wird dir das noch erklären.
en!gma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: Di 28.12.04 22:22 
in meinem tutorial wird mehr erklärt, wie man verhindert dass in deinem beispiel die zeit weiterläuft.

also ersetzen wir sogesehen die "setze zeit+1 prozedur" durch ein einfaches "nil".
ja damit hast du recht also nil ist wie die 90...

also erstmal die 1283 war auch nur ein beispiel...

ums noch einmal zu erklären ;D :

addresse 123456AB wert 1283("setze zeit+1 prozedur")
daraus machen wir ->
addresse 123456AB wert 9090("nichts und nochnmal nichts prozedur ^^")

und so kannste auch ganz einfach anstatt den 9090 wieder 1283 einfügen und hast die alte prozedur
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 29.12.04 00:34 
Titel: Re: spiele trainer erstellen
en!gma hat folgendes geschrieben:
normalerweise sind 1 byte 2 zahlen, 2 byte 4 zahlen, 3 byte 6 usw...

So ein Quatsch. 126 bekomme ich auch in ein Byte rein. Es geht schlicht und ergreifend um den Wertebereich von Datentypen, hier insbesondere um ganzzahlige Datentypen.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
Shortint  –128..127                 signed 8-bit
Smallint  –32768..32767             signed 16-bit
Longint   –2147483648..2147483647   signed 32-bit
Int64     –2^63..2^63–1             signed 64-bit
Byte      0..255                    unsigned 8-bit
Word      0..65535                  unsigned 16-bit
Longword  0..4294967295             unsigned 32-bit

Ich kann auch meine 50 Mineralien Einheiten in ein LongInt packen. Und dann hast du nämlich ein zusätzliches Problem. Kennst du den Datentyp nämlich nicht, stimmt zwar deine Adresse, aber hast du ihn zu groß gewählt, überschreibst du den Speicher an den nachfolgenden Adressen. Und hast du ihn zu klein gewählt, hast du nachher Schrott im Spiel stehen.
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mi 29.12.04 11:36 
Zitat:
So ein Quatsch. 126 bekomme ich auch in ein Byte rein. Es geht schlicht und ergreifend um den Wertebereich von Datentypen, hier insbesondere um ganzzahlige Datentypen.

Ja, er hat es ungeschickt ausgedrückt. Er meinte einfach die hexadezimale Darstellung, die bei einem Byte in zwei Ziffern, bei einem Word in 4 Ziffern usw. möglich ist.

CU,
Udontknow
en!gma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 378

win xp
delphi 7.0
BeitragVerfasst: Mi 29.12.04 15:18 
jo das stimmt wohl...da hab ich mich wirklich ein wenig ungeschickt ausgedrückt...

aber ich denke jeder der mehr als 1 woche mit delphi arbeitet weiss, dass zB 4 byte mehr als 8 zahlen sein können.
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mi 29.12.04 16:06 
Gibt es eigentlich auch unsigned 64-bit Varaiablen (also Int64 ohne Vorzeichen)?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 29.12.04 21:56 
en!gma hat folgendes geschrieben:

aber ich denke jeder der mehr als 1 woche mit delphi arbeitet weiss, dass zB 4 byte mehr als 8 zahlen sein können.

Das stimmt ja schon wieder nicht! Aus den Ziffern 0 bis 9 sind Zahlen zusammen gesetzt:
18 das ist eine Zahl bestehen aus den Ziffern 1 und 8.
Und ein Integer mit 4 Byte kann 4294967295 verschiedenen Werte annehmen. Und dann spricht man von einem Wertebereich. Ich will ja nicht kleinlich wirken, aber wenn man schon ein Tutorial schreibt, dann sollte man sich auch korrekt ausdrücken (können).
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mi 29.12.04 22:58 
WeBsPaCe hat folgendes geschrieben:
Zitat:
und die 9090 dann halt wieder durch 1283 ersetzen.


Is diese 1283 jeze nur ein beliebiger Wert, den du aus Starcraft genommen hast, oder is dat wie die 90, die für nichts steht (ist dat ungefähr vergleichbar mit nil bei Delphi oder void bei C ???)... Und bei MineSweeper ändert sich die Zeit ja immer... also muss ich die Zeit vorher auslesn??? Also wenn der User bei 5 sek stoppt muss es ja nach dem unfreezen bei 6 weitergehn...

:-)


es geht hier um maschinencode, also assembler. der wert 90h (h für hex) steht für den Befehl NOP, also No Operation.
üblicherweise steht an der zu überschreibenden speicherposition das commando JMP + eine Speicheradresse, welche die nun auszuführende Funktion beinhaltet.
Sollte aber nicht JMP drin stehen sondern z.b. ADD AX, 1 oder etwas anderes, ist der Befehl möglicherweise auch länger als 2 bytes.

Deswegen versteh ich auch nicht enigma's ableitung über die byte-länge bei zahlen, macht ja irgendwie keinen Sinn denn hier gehts um Assembleranweisungen - das macht nur anfangs Sinn um die Speicherposi der Zahl rauszufinden.
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Do 30.12.04 00:02 
Ich glaub' so langsam kapier ich's... :D

Ich mach mal an meinem MineSweeper-Ding weiter...

_________________
Steht der Bauer im Gemüse, hat er später grüne Füße.
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Fr 31.12.04 18:04 
Sehr schön, ich kannte zwar TSearch, aber dort nicht dieses "AutoHack" :)
Jetzt kann ich endlich versuchen meinen Trainer HL2 weiter zuschreiben...

Aber folgendes: Ich habe den Wert gesucht, der dafür verantwortlich ist, ob eine Waffe verfügbar ist. Habe ihn auch gefunden, habe jetzt auch den Pointer mit diesem Autohack gefunden. Aber wie kann ich den Wert mithilfe des Pointers überschreiben? Du tutst den Befehl ja mit NOP überschreiben, so dass der Befehl praktisch blockiert wird. Was muss ich den machen um den Wert von 0 in 1 zu ändern?

danke!
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Sa 01.01.05 03:07 
if wert = 0 then wert := 1;
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Sa 01.01.05 06:05 
retnyg hat folgendes geschrieben:
if wert = 0 then wert := 1;


bitte? Meinst du das jetzt ernst, oder soll das ein Sylvesterscherz sein :lol:
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Sa 01.01.05 09:41 
:wink: war schon so gemeint, schreib einfach mal den Wert $1 (statt $90) an die betreffende speicheradresse...

wie hast du die eigentlich ausfindig gemacht ? gibt ja sicher tausende Posititonen im Speicher die gerade auf 0 oder 1 stehen :gruebel: