Ktoś dziś stwierdził, że mogą i w sumie nie przyznałem racji, bo coś mi się w tej tezie nie podoba. Chociaż sam już mam wątpliwości. Może ktoś je rozwiać?
- Rejestracja:ponad 13 lat
- Ostatnio:prawie 10 lat
- Postów:95
wg wiki, to niemożliwe
http://pl.wikipedia.org/wiki/Cyfry_znacz%C4%85ce

- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
Cóż, w zapisie biarnym to zależy czy mamy big czy little endian :P

- Rejestracja:prawie 17 lat
- Ostatnio:prawie 5 lat
W paru językach programowania 35!=035. Więc chyba wiodące zera są znaczące.






- Rejestracja:prawie 20 lat
- Ostatnio:około 4 godziny
A ja nie doczytałem się w końcu na wiki czy liczba 0 ma jakieś cyfry znaczące :P


- Rejestracja:prawie 17 lat
- Ostatnio:około 3 lata
- Lokalizacja:Szczecin
- Postów:4191
Odgrzebie ten temat, bo t.r. twierdził że zera wiodące w Delphi tak jak pokazał nie mają znaczenia. Jednak mimo iż nie jestem taki "pr0" jak on to napisałem dla znajomka i innych zainteresowanych Trainer na surowce dla gry "The Settlers" pod DosBOX'em działający na zasadzie injekcji dllki w proces DOSBoxa. Ponieważ słabo znam się na Pointerach, a w źródle Cheat Engine nie chce mi się szukać jak tam to jest ustawiane kiedy dodajemy Pointery na wartości w pamięci, także podejrzałem kiedyś lame sposób na YT, tylko ze tam gościu robił wieglachną formę w VCL i czitował, a przecież trainer jest jak keygen powinien być jak najmniejszy i najzgrabniejszy, toteż machnąłem go w WinAPI i poprawiając kolejną wersję taką końcowkę tablicy sałych:
//...
(APointer : $74B6FC; AOffset : $6B1E4E), // Miecze
(APointer : $74B700; AOffset : $6B1E50) // Tarcze
aby nie mieć dwóch spacji przed Tarcze ani dodatkowego "/" tylko ładnie jedno pod drugim sformatowane (bo to ostatni elemnt tablicy, a więc bez przecinka po nawiasie) dodałem zero przed 6B1E50
i trainer już źle działał. Także w przypadku Pointerów chyba albo użytej metody injeckji dllki i podmiany wartości w pamięci miało to znaczenie.
Odczyt i zapis Pointerów został zrobiony w taki sposób:
//...
for I := Low(PointersArr) to High(PointersArr) do
begin
AValue := PDWORD(PDWORD(PointersArr[I].APointer)^ + PointersArr[I].AOffset)^;
CurrentValueArr[I] := AValue;
end;
Zapis wszystkich na raz jest w pętli i wtedy jest ok, a poszczególnych tak:
procedure SetOneValueThreadProc(Parameter : Pointer);
var
EditValue : WORD;
I, I1, I2, I3 : integer;
begin
I1 := Integer(Parameter);
EnableWindow(BtnHandleArr[I1], False);
for I := Low(PointersArr) to High(PointersArr) do
begin
CurrentValueArr[I] := PDWORD(PDWORD(PointersArr[I].APointer)^ + PointersArr[I].AOffset)^;
end;
I1 := Integer(Parameter);
EditValue := StrToInt(GetText(EditsHandleArr[I1]));
CurrentValue := EditValue;
if EditValue > 0 then
begin
if I1 = Boards_Edit_Num then
begin
CurrentValue := EditValue - Boards_Difference;
end;
if I1 = Stones_Edit_Num then
begin
CurrentValue := EditValue - Stones_Difference;
end;
end;
I2 := ReadOrdersArr[I1];
for I := Low(PointersArr) to High(PointersArr) do
begin
if I <> I2 then
begin
PDWORD(PDWORD(PointersArr[I].APointer)^ + PointersArr[I].AOffset)^ := CurrentValueArr[I];
end
else
begin
PDWORD(PDWORD(PointersArr[I2].APointer)^ + PointersArr[I2].AOffset)^ := CurrentValue;
end;
end;
EnableWindow(BtnHandleArr[I1], True);
I3 := BTNBASE + I1;
MessageBox(MainDialogHandle,
PChar(FormatC('Value of %s set to %d.', ItemHintsArr[I3], EditValue)),
PChar(App_Title), MB_ICONINFORMATION + MB_OK);
end;
Kompletnego źródła nie wrzucam, bo po co, niech będzie dla mnie. Jak ktoś chce potestować grę i Trainer to dodam tylo że gra jest abandonware i wraz z DosBoxem wrzuciłem ją na: http://olesio.eu/settlers.rar (wystarczy rozpakować i uruchomić run.bat
), a trainer jest na: http://olesio.eu/settlers_trainer.exe no i niniejszą odpowiedź popełniłem jakby ktoś miał przekoananie że w Delphi jednak na ogół zera wiodące nie mają znaczenia.

