Delphi Tibia bot

0

[code]unit BotMForm;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

const
BATTLELIST_START = $005F7994;
BATTLELIST_END = $005FD460;
PLAYER_X = $00602B08;
PLAYER_Y = $00602B04;
PLAYER_Z = $00602B00;
PLAYER_LEVEL = $005F7920;
PLAYER_EXP = $00605A04; // zmieniony - Tibia 7.9
STATUS_TEXT = $0074F1D0;
STATUS_TIMER = $0074F1CC;
SPEED_USE = $0074DBD0;

implementation

{$R *.dfm}
function MemoryReadInt(Address: Cardinal): Longword;
var
ProcId: Cardinal;
tProc: THandle;
NBR: Cardinal;
value: Longword;
begin
GetWindowThreadProcessId(FindWindow('TibiaClient', Nil), @ProcId);
tProc:= OpenProcess(PROCESS_ALL_ACCESS, False, ProcId);
ReadProcessMemory(tProc, Ptr($605A04), @value, 4, NBR);
CloseHandle(tProc);
Result := Value;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Tibia: Cardinal;
begin
Tibia := FindWindow('TibiaClient',nil);
SetWindowText(Tibia,PChar('Tibia Yaboo ^^'));
end;

function CalculateLeftExp: string;
var
Tibia: Cardinal;
AExp, ALevel, ANextLevelExp, AExpLeft: Cardinal;begin
{Obliczamy zawartość zmiennych}
Tibia := FindWindow('TibiaClient',nil);
AExp := MemoryReadInt(Tibia,PLAYER_EXP,Len,Rdd);
ALevel := MemoryReadInt(Tibia,PLAYER_LEVEL,Len,Rdd);
ANextLevelExp := ExpToLevel(ALevel+1);
AExpLeft := ANextLevelExp-AExp;
{Formatujemy wyjściowy ciąg tekstowy}
Result := Format('Level: %d. Ilość exp.: %d. Pozostały exp. do levelu %d: %d.',[ALevel,AExp,ALevel+1,AExpLeft]);
end;
end.

Po napisaniu tego wszystkiego i próbie kompilacji wywala mi taki błąd? Gdzie jest jego źródło?

[Error] BotMForm.pas(69): Too many actual parameters
[Error] BotMForm.pas(69): Too many actual parameters
[Error] BotMForm.pas(70): Too many actual parameters
[Error] BotMForm.pas(70): Too many actual parameters
[Error] BotMForm.pas(71): Undeclared identifier: 'ExpToLevel'
[Fatal Error] bot.dpr(5): Could not compile used unit 'BotMForm.pas'

Próbowałem na konkurencyjnym serwisie lecz nie uzyskałem odpowiedzi, może dlatego że nie chcieli jej podać a może dlatego że nie potrafili, no ale nvm liczę natomiast że tu znajdzie się ktoś kto będzie umiał powiedzieć w czym rzecz. Ofc ten error z ExpToLevel to wiem o co chodzi ;P Bardziej chciał bym się dowiedzieć co zmienić aby nie było too many actual parameters tylko żeby ktoś nie podał tak jak jeden inteligent z innego forum zamiast ALevel := MemoryReadInt(Tibia,PLAYER_LEVEL,Len,Rdd); to ALevel := MemoryReadInt(PLAYER_LEVEL); i twierdzi że jest dobrze bo się skompilowało xdd

0
Yaboomaster napisał(a)

tylko żeby ktoś nie podał tak jak jeden inteligent z innego forum zamiast ALevel := MemoryReadInt(Tibia,PLAYER_LEVEL,Len,Rdd); to ALevel := MemoryReadInt(PLAYER_LEVEL); i twierdzi że jest dobrze bo się skompilowało xdd

Ale patrząc na ten kod, miał być może rację. Popatrz: przy wywołaniu z 4 parametrami pierwszy jest zbędny (bo funkcja jeszcze raz wywołuje FindWindow we własnym zakresie), drugi oczywiście jest potrzebny i to jest właśnie adres do pobrania, trzeci to zapewne ilość bajtów do pobrania (w funkcji na sztywno w ReadProcessMemory wpisano 4) więc zbędny, czwarty do zapewne ilość przeczytanych bajtów (w funkcji wykorzystana jest zmienna NBR [number bytes read?]) więc zbędny.

Jeśli nie działa, to prawdopodobnie błąd jest gdzieś indziej.

0

dokładnie jest tak jak napisał Szczawik :) .. tak wiec się zdecyduj czy chcesz mieć te parametry ustawione, na sztywno tak jak masz czy też chcesz ich wartości podawać przy wywoływaniu procedury ;P

0

function CalculateLeftExp: string;
var
Tibia: Cardinal;
AExp, ALevel: Cardinal;begin
Tibia := FindWindow('TibiaClient',nil);
AExp := MemoryReadInt(PLAYER_EXP);
ALevel := MemoryReadInt(PLAYER_LEVEL);
Result := Format('Level: %d. Ilość exp.: %d.',[ALevel,AExp]);
end;

No ale jeżeli zmienię na coś takiego to wyświetla mi jakieś losowe liczby Jak AExp i ALevel ;/

0

a powiedz jedno.. gdzie Ty parametr: "Address: Cardinal" wykorzystujesz w tej funkcji ?? :>
bo tu:

ReadProcessMemory(tProc, Ptr($605A04), @value, 4, NBR);

na pewno nie ;p

0

omg no więc jak to w końcu ma być xd Z innego forum koleś z dosyć dużą reputacją stwierdził że się nie da i nie pomoże :/

0

być może się nie da.. ja nie gram w Tibię .. więc nigdy nie próbowałem z tym niczego robić to zależy jak są te informacje w pamięci gry zapisane .. bota nigdy nie robiłem żadnego.. ale robiłem trainery a to działa na tej samej zasadzie w sumie.. i zanim robiłem coś w delphi to najpierw sprawdzałem w jakimś programie do robienia trainerów gdzie znajdują się w pamięci informacje które mnie interesują potem dopiero się bawiłem w Delphi .. a Ty skąd wziąłeś te stałe ??

const
BATTLELIST_START = $005F7994;
BATTLELIST_END = $005FD460;
PLAYER_X = $00602B08;
PLAYER_Y = $00602B04;
PLAYER_Z = $00602B00;
PLAYER_LEVEL = $005F7920;
PLAYER_EXP = $00605A04; // zmieniony - Tibia 7.9
STATUS_TEXT = $0074F1D0;
STATUS_TIMER = $0074F1CC;
SPEED_USE = $0074DBD0;
0

No więc tak panowie problem rozwiązany ^^ Co do stałych to szukam przez Cheat Engine 5.3 ^^

0

function MemoryReadInt(Address: Cardinal): Longword;
var
ProcId: Cardinal;
tProc: THandle;
NBR: Cardinal;
value: Longword;
begin
GetWindowThreadProcessId(FindWindow('TibiaClient', Nil), @ProcId);
tProc:= OpenProcess(PROCESS_ALL_ACCESS, False, ProcId);
ReadProcessMemory(tProc, Ptr($605A04), @value, 4, NBR);
CloseHandle(tProc);
Result := Value;
end;

mam tu male zastrzezenie. W funkcji trza podac adres, a przy readprocessmemory podany jest jakis konkretny adres a nie ta zmienna adres

0
wrotek napisał(a)

function MemoryReadInt(Address: Cardinal): Longword;
mam tu male zastrzezenie. W funkcji trza podac adres, a przy readprocessmemory podany jest jakis konkretny adres a nie ta zmienna adres

o tym właśnie pisałem 5 postów wcześniej ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0