Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[delphi] Prosty auto heal


Rekomendowane odpowiedzi

Opublikowano

Witam serdecznie, od jakiegoś czasu zainteresowało mnie programowanie, a konkretnie pisanie cheatow. Juz na samym poczatku napotkalem pare przeszkod, ale jakos sobie z nimi poradzilem. Dotarlem niestety do momentu, w ktorym nie wiem zabardzo, dlaczego moj "cheat" nie chce dzialac.

 

Zrobilem prosty program w delphi 7, ktory odczytuje ile moja postac na prywatnym serwerze tibia ma hp i many, do tego prosty timer, ktory odswieza hp i mane. Gdy juz udalo mi sie uzyskac te informacje, przeszedlem do pisania prostego auto heala i jak juz wspomnialem, napotkalem przeszkode.

Oto sam kod, odpowiadajacy za leczenie:

var
hp:integer;
begin
hp:=readmeminteger(player_hp);

if hp < 550 then
begin
say('exura');
end;

end;

 

Samo odczytywanie hp i many dziala swietnie, odswiezanie tych danych takze, ale juz samo leczenie niestety sie nie kompiluje.

Z gory dziekuje za wszelka pomoc i najmniejsze wskazowki! Nie prosze was o gotowy program, bo nie na tym polega moim zdaniem nauka, prosze jedynie o nakierowanie mnie w dobra strone.

Opublikowano

Program się kompiluje, ale nie działa tak jak bym chciał. Ze względu na to, że jestem początkującym userem i cięzko Nam będzie się porozumieć, ponieważ nie do końca rozumiem działanie niektórych funkcji. Chyba najprościej będzie, jak wpisze tutaj cały mój kod, nie jest on zbyt długi. Oczywiście nie oczekuję od Was gotowych rozwiązań, jedynie porad i wskazówek.

 

unit Bot;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls, Spin;
type
 TForm1 = class(TForm)
   Label3: TLabel;
   Label4: TLabel;
   Button1: TButton;
   Button2: TButton;
   Timer1: TTimer;
   Label1: TLabel;
   Label2: TLabel;
   procedure Button1Click(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;
var
 Form1: TForm1;
 const
Player_Mana = $0083A134;
Player_Hp = $007FFFAC;
implementation
{$R *.dfm}
function ReadMemInteger(Address: Cardinal): Cardinal;	 
var
ProcId: Cardinal;
tProc: THandle;
NBR: Cardinal;
value:integer;
begin
   GetWindowThreadProcessId(FindWindow('TibiaClient',Nil), @ProcId);
   tProc:= OpenProcess(PROCESS_ALL_ACCESS, False, ProcId);
   ReadProcessMemory(tProc, Ptr(Address), @value, 4, NBR);
   CloseHandle(tProc);
   Result:=value;
end;

function MemReadString(Address: Integer): String;
var


NB : LongWord;
Temp : ARRAY [1..255] OF Byte;
I : Byte;
IDProcess, proc_ID : Cardinal;
begin
GetWindowThreadProcessID(FindWindow('TibiaClient', nil), @proc_ID);
IDProcess := OpenProcess(PROCESS_ALL_ACCESS, false, proc_ID);
Result := '';
ReadProcessMemory(IDProcess, Ptr(Address), @Temp[1], 255, NB);
for I := 1 to 255 do
begin
if ((Temp[i] = 0) or (Temp[i] = $0F)) then
Break;
Result := Result + Chr(Temp[i]);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
label3.Caption:=inttostr(ReadMeminteger(Player_HP));
label4.Caption:=inttostr(ReadMeminteger(Player_Mana));
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled:=false;
end;
  procedure say(text:string);
var
 PacketBuffer: array [0..200] of byte;
 ProcessID: Cardinal;
begin
   GetWindowThreadProcessId(FindWindow('TibiaClient',Nil), @ProcessID);
   PacketBuffer[0] := Byte(Length(text) + 4);
   PacketBuffer[1] := $00;
   PacketBuffer[2] := $96;
   PacketBuffer[3] := $01;
   PacketBuffer[4] := Byte(Length(text));
   PacketBuffer[5] := $00;
   CopyMemory(@PacketBuffer[6], @text[1], Length(text));
end;
procedure leczenie(Sender: TObject);
var
hp:integer;
begin
hp:=readmeminteger(player_hp);
 if hp > 505 then
 begin
 say('exura');
 end;
end;
end.

 

Gdy wpiszę funkcje z leczeniem w timer, wyskakuje mi błąd, z odczytywaniem var.

Opublikowano

Ruszylem troche dalej z duza pomoca google, lecz zatrzymalem sie na pytaniu, na ktore nie umiem znalesc odpowiedzi w google. Zamiast say, uzylem vk_f1. Wszystko dziala swietnie, gdy hp spadnie ponizej x, uzywa klawisza f1. Lecz moje pytanie brzmi, w jaki sposob przyspieszyc ten proces? vk uzywa klawisza f1 co sekunde, chcialbym to przyspieszyc do 0,5, albo 0,3. Jest cos takeigo moziwe?

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...