Ir para conteúdo
  • Cadastre-se

Criando um Mini-Bot no Delphi (Sem API)


Posts Recomendados

  • Respostas 69
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Primeiramente vou comentar um pouco sobre esse magnifico programa que é o delphi, Para nos desenvolvermos um bot de tibia por exemplo, nos nao usamos o tibiaapi, mais sim muitas funções muitos codig

dae @Kimoszin tem como fala contigo por msg instantaneas ?

tinha esquecido, mas agora coloquei e aparece a seguinte lista de erros:

Build

[Warning] lugluga.pas(103): Variable 'i' might not have been initialized

[Error] lugluga.pas(109): Type of expression must be BOOLEAN

[Error] lugluga.pas(112): Missing operator or semicolon

[Error] lugluga.pas(118): Statement expected but 'VAR' found

[Error] lugluga.pas(128): '.' expected but ';' found

[Warning] lugluga.pas(129): Text after final 'END.' - ignored by compiler

[Error] lugluga.pas(26): Unsatisfied forward or external declaration: 'TForm1.CheckBox2Click'

[Error] lugluga.pas(27): Unsatisfied forward or external declaration: 'TForm1.StartButtonClick'

[Fatal Error] Project1.dpr(5): Could not compile used unit '..\..\..\..\Users\Bruno\Desktop\LUGLUGA BOT\lugluga.pas'

Link para o post
Compartilhar em outros sites

Pronto, aqui está.

unit lugluga;


interface


uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ExtCtrls;


type

  TForm1 = class(TForm)

    GroupBox1: TGroupBox;

    StartButton: TButton;

    Spell: TLabeledEdit;

    Mana: TLabeledEdit;

    CheckBox1: TCheckBox;

    CheckBox2: TCheckBox;

    ComboBox1: TComboBox;

    Label1: TLabel;

    CastSpell: TTimer;

    Endereco: TTimer;

    Kick: TTimer;

    Food: TTimer;

    Label2: TLabel;

    procedure CastSpellTimer(Sender: TObject);

    procedure CheckBox1Click(Sender: TObject);

    procedure CheckBox2Click(Sender: TObject);

    procedure StartButtonClick(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;


var

  Form1: TForm1;

  PH : THandle;

  PID, ThID: DWORD;

  H : THandle;


implementation


{$R *.dfm}


 //Função para escrever na janela do Tibia

function say(mensagem: string):string;

 var

  h: HWND;

  letra: Integer;

  B: Byte;

 begin

  h := FindWindow(nil, 'tibia');

  for letra := 1 to Length(mensagem) do

  begin

    B := Byte(mensagem[letra]);

    SendMessage(h, WM_CHAR, B, 0);

  end;

    SendMessage(h, WM_CHAR, 13, 0);

  end;

  //Função para ler endereço de memoria do Tibia

  function LerInt(Address: Integer): Integer;

var

  value:integer;

  ler :dword;

begin

H := FindWindow(nil, 'Tibia');

ThID := GetWindowThreadProcessId(H, @PID);

PH := OpenProcess(PROCESS_ALL_ACCESS,FALSE,PID);

ReadProcessMemory(PH, Ptr(Address), @Value, 4, Ler);

Result:=value;

end;

//Função para aperta uma determinada tecla na janela do Tibia

function hotkey(x :string): string;

	 var

  h: HWND;

  i : integer;

begin

 if x ='F1' then

  i := 112

  else if x ='F2' then

  i := 113

  else if x ='F3' then

  i := 114

  else if x ='F4' then

  i := 115

  else if x ='F5' then

  i := 116

  else if x ='F6' then

  i := 117

  else if x ='F7' then

  i := 118

  else if x ='F8' then

  i := 119

  else if x ='F9' then

  i := 120

  else if x ='F10' then

  i := 121

  else if x ='F11' then

  i := 122

  else if x ='F12' then

  i := 123;


  h := FindWindow(nil, 'Tibia');  // acha a janela do tibia

  SendMessage(h, WM_KEYdown, i, 0);   //pressiona a tecla

  SendMessage(h, WM_KEYUP, i, 0);  //solta tecla

  end;


procedure TForm1.CastSpellTimer(Sender: TObject);

begin

if ((StrToInt(Label2.Caption)) and (StrToInt(Mana.Text))) then

say(Spell.text)

// Se a mana do player for maior que a mana que foi digitada no component mana, entao vai falar a magia

Label2.caption := IntToStr(Lerint($0081CE5C));

// Vai ler o endereço da mana do personagem e transforma em numero para o label2

end;


procedure TForm1.CheckBox1Click(Sender: TObject);

begin

Var

TibiaHandle : THandle;

begin

TibiaHandle:=FindWindow(nil,'Tibia'); // Pega a janela do Tibia

SendMessage(TibiaHandle,WM_KEYDOWN,VK_CONTROL,1); // Pressiona o Ctrl

SendMessage(TibiaHandle,WM_KEYDOWN,VK_UP,1); // Pressiona a tecla para cima

SendMessage(TibiaHandle,WM_KEYUP,VK_UP,1); // Libera a tecla

SendMessage(TibiaHandle,WM_KEYDOWN,VK_DOWN,1); // Pressiona a tecla para baixo

SendMessage(TibiaHandle,WM_KEYUP,VK_DOWN,1); // Libera a tecla

SendMessage(TibiaHandle,WM_KEYUP,VK_CONTROL,1); // Libera o Ctrl

end;

end;


procedure TForm1.CheckBox2Click(Sender: TObject);

begin

hotkey(Combobox1.Text)

// Pressiona oque tiver no Texto do Combobox

end;


procedure TForm1.StartButtonClick(Sender: TObject);

begin

CastSpell.Enabled := not(CastSpell.Enabled);

Food.Enabled := not(Food.Enabled);

Kick.Enabled := not(Kick.Enabled);


if Checkbox1.checked then

Kick.Enabled := true

else

Kick.Enabled := false;


if Checkbox2.checked then

Food.Enabled := true

else

Food.Enabled := false;


if (Spell.Text <> '') and (Mana.Text <> '') then

CastSpell.Enabled := true

else

CastSpell.Enabled := false;


if (Kick.Enabled) or (Food.Enabled) or (CastSpell.Enabled) then

StartButton.Caption := 'Stop'

else

StartButton.Caption := 'Start';

end;


end.

Link para o post
Compartilhar em outros sites

Continua dando o mesmo erro.

edit:

Você tinha me passado essa

if((StrToInt(Label2.Caption))>(StrToInt(Mana.Text)))then

Eu coloquei a que mostrava no inicio do tutorial e essa linha funcionou, agora está dando erro nessa:

Label2.caption := IntToStr(Lerint($0081CE5C));

edit2: Consegui eu alterei algumas pontuações e funcionou agora, excesso de end; e outras coisas, obrigado pela ajuda ;)

Editado por alfbru (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 1 month later...

Vei eu tava fazendo aqui só que ele não pega a mana do personagem ele coloca um numero muito alto > 5963776 < não sei porque e fica soltando magia direto dai :S ajuda ai porfavor ^^ orbrigado desde já.

Link para o post
Compartilhar em outros sites

Vei eu tava fazendo aqui só que ele não pega a mana do personagem ele coloca um numero muito alto > 5963776 < não sei porque e fica soltando magia direto dai :S ajuda ai porfavor ^^ orbrigado desde já.

Se você estiver usando o tibia 9.54 acho que as adress não estão atualizadas, basta atualizar as adress de mana que funcionará, e tem outro topico do kimoszin que ensina a pegar o endereço base do tibia atualizado, então tente utilizar as functions do outro tutorial.

Link para o post
Compartilhar em outros sites

Você mudou os endereços de memoria? '-'

Mudei lek olha como ta o programa vo posta ai


unit Unit1;


interface


uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ExtCtrls, PsAPI;


type

  TForm1 = class(TForm)

	GroupBox1: TGroupBox;

	StartButton: TButton;

	Spell: TLabeledEdit;

	Mana: TLabeledEdit;

	CheckBox1: TCheckBox;

	CheckBox2: TCheckBox;

	ComboBox1: TComboBox;

	Label1: TLabel;

	Label2: TLabel;

	CastSpell: TTimer;

	Endereco: TTimer;

	Kick: TTimer;

	Food: TTimer;

	vida: TLabel;

	procedure CastSpellTimer(Sender: TObject);

	procedure KickTimer(Sender: TObject);

	procedure FoodTimer(Sender: TObject);

	procedure StartButtonClick(Sender: TObject);

	procedure EnderecoTimer(Sender: TObject);

  private

	{ Private declarations }

  public

	{ Public declarations }

  end;


var

  Form1: TForm1;

  PH : THandle;

  PID, ThID: DWORD;

  H : THandle;

  Offset: Integer;

  TibiaH: THandle;


implementation


{$R *.dfm}

//Função para escrever na janela do Tibia

function say(mensagem: string):string;

var

  h: HWND;

  letra: Integer;

  B: Byte;

begin

  h := FindWindow(nil, 'tibia');

  for letra := 1 to Length(mensagem) do

  begin

	B := Byte(mensagem[letra]);

	SendMessage(h, WM_CHAR, B, 0);

  end;

	SendMessage(h, WM_CHAR, 13, 0);

  end;


//Função para ler endereço de memoria do Tibia

  function LerInt(Address: Integer): Integer;

var

  value:integer;

  ler :dword;

begin

H := FindWindow(nil, 'Tibia');

ThID := GetWindowThreadProcessId(H, @PID);

PH := OpenProcess(PROCESS_ALL_ACCESS,FALSE,PID);

ReadProcessMemory(PH, Ptr(Address), @Value, 4, Ler);

Result:=value;


end;


//Função para aperta uma determinada tecla na janela do Tibia

function hotkey(x :string): string;

	 var

  h: HWND;

  i : integer;

begin

if x ='F1' then

  i := 112

  else if x ='F2' then

  i := 113

  else if x ='F3' then

  i := 114

  else if x ='F4' then

  i := 115

  else if x ='F5' then

  i := 116

  else if x ='F6' then

  i := 117

  else if x ='F7' then

  i := 118

  else if x ='F8' then

  i := 119

  else if x ='F9' then

  i := 120

  else if x ='F10' then

  i := 121

  else if x ='F11' then

  i := 122

  else if x ='F12' then

  i := 123;


  h := FindWindow(nil, 'Tibia');  // acha a janela do tibia

  SendMessage(h, WM_KEYdown, i, 0);   //pressiona a tecla

  SendMessage(h, WM_KEYUP, i, 0);  //solta tecla

  end;


  function GetTibiaBaseAddress(ProcessID: Cardinal): Pointer;

var

  Modules: Array of HMODULE;

  cbNeeded, i: Cardinal;

  ModuleInfo: TModuleInfo;

  ModuleName: Array [0 .. MAX_PATH] of Char;

  PHandle: THandle;

begin

  Result := nil;

  SetLength(Modules, 1024);

  PHandle := OpenProcess(PROCESS_QUERY_INFORMATION + PROCESS_VM_READ, FALSE,

	ProcessID);

  if (PHandle <> 0) then

	begin

		  EnumProcessModules(PHandle, @Modules[0], 1024 * SizeOf(HMODULE),

			cbNeeded);

		  SetLength(Modules, cbNeeded div SizeOf(HMODULE));

		  for i := 0 to Length(Modules) - 1 do

			begin

				  GetModuleBaseName(PHandle, Modules[i], ModuleName, SizeOf(ModuleName)

					);

				  if AnsiCompareText('Tibia.exe', ModuleName) = 0 then

					begin

						  GetModuleInformation(PHandle, Modules[i], @ModuleInfo, SizeOf

								  (ModuleInfo));

						  Result := ModuleInfo.lpBaseOfDll;

						  CloseHandle(PHandle);

						  Exit;

					end;

			end;

	end;

end;


function ReadInteger(Address: Integer): Integer;

var

  value: Integer;

  ler: Dword;

begin

  Thid := GetWindowThreadProcessId(TibiaH, @PID);

  PH := OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);

  ReadProcessMemory(PH, Ptr(Address), @value, 4, ler);

  Result := value;

end;


function ProcessID: Integer;

begin

  TibiaH := FindWindow('Tibia', nil);

  Thid := GetWindowThreadProcessId(TibiaH, @PID);

  PH := OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);

  Result := PID;

end;


function PlayerMana: Integer;

const

  adrXOR = $7ADFD0;

  adrMyHP = $943000;

  adrMyMana = $7AE024;

var

  Mana: Integer;

  uXor: Integer;

begin

  Offset := Integer(GetTibiaBaseAddress(ProcessID));

  Mana := ReadInteger((adrMyMana + Offset) - $400000);

  uXor := ReadInteger((adrXOR + Offset) - $400000);

  Result := Mana xor uXor;

end;


///////////////////////////   FIM FUNÇÃO



procedure TForm1.CastSpellTimer(Sender: TObject);

begin

if StrToInt(Label2.Caption) > (StrToInt(Mana.Text)) then

say(Spell.text) ;

// Se a mana do player for maior que a mana que foi digitada no component mana, entao vai falar a magia

end;


procedure TForm1.EnderecoTimer(Sender: TObject);

begin

Label2.caption := IntToStr(Lerint($0081CE5C));

// Vai ler o endereço da mana do personagem e transforma em numero para o label2

vida.caption := 'Vida: '+IntToStr(Lerint($0063FD5C));

// address de vida do tibia 8.7 (se meu address não estiver errado ;P)

end;


procedure TForm1.FoodTimer(Sender: TObject);

begin

hotkey(Combobox1.Text)

// Pressiona oque tiver no Texto do Combobox

end;


procedure TForm1.KickTimer(Sender: TObject);

Var

TibiaHandle : THandle;

begin

TibiaHandle:=FindWindow(nil,'Tibia'); // Pega a janela do Tibia

SendMessage(TibiaHandle,WM_KEYDOWN,VK_CONTROL,1); // Pressiona o Ctrl

SendMessage(TibiaHandle,WM_KEYDOWN,VK_UP,1); // Pressiona a tecla para cima

SendMessage(TibiaHandle,WM_KEYUP,VK_UP,1); // Libera a tecla

SendMessage(TibiaHandle,WM_KEYDOWN,VK_DOWN,1); // Pressiona a tecla para baixo

SendMessage(TibiaHandle,WM_KEYUP,VK_DOWN,1); // Libera a tecla

SendMessage(TibiaHandle,WM_KEYUP,VK_CONTROL,1); // Libera o Ctrl

end;


procedure TForm1.StartButtonClick(Sender: TObject);

begin

CastSpell.Enabled := not(CastSpell.Enabled);

Food.Enabled := not(Food.Enabled);

Kick.Enabled := not(Kick.Enabled);


if Checkbox1.checked then

Kick.Enabled := true

else

Kick.Enabled := false;


if Checkbox2.checked then

Food.Enabled := true

else

Food.Enabled := false;


if (Spell.Text <> '') and (Mana.Text <> '') then

CastSpell.Enabled := true

else

CastSpell.Enabled := false;


if (Kick.Enabled) or (Food.Enabled) or (CastSpell.Enabled) then

StartButton.Caption := 'Stop'

else

StartButton.Caption := 'Start';

end;


end.

Editado por cleytonk (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Troque a sua função de achar o ProcessID por essa:

function ProcessID: Integer;

begin

  TibiaH := FindWindow('TibiaClient', nil);

  Thid := GetWindowThreadProcessId(TibiaH, @PID);

  PH := OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);

  Result := PID;

end;

Link para o post
Compartilhar em outros sites

Troque a sua função de achar o ProcessID por essa:

function ProcessID: Integer;

begin

  TibiaH := FindWindow('TibiaClient', nil);

  Thid := GetWindowThreadProcessId(TibiaH, @PID);

  PH := OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);

  Result := PID;

end;
essa aqui?

  function LerInt(Address: Integer): Integer;

var

  value:integer;

  ler :dword;

begin

H := FindWindow(nil, 'Tibia');

ThID := GetWindowThreadProcessId(H, @PID);

PH := OpenProcess(PROCESS_ALL_ACCESS,FALSE,PID);

ReadProcessMemory(PH, Ptr(Address), @Value, 4, Ler);

Result:=value;


end;

achei mas continua dizendo que ta com 0 de mana e 0 de vida

Editado por cleytonk (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Troque:

const

  adrXOR = $7B2030;

  adrMyHP = $947000;

  adrMyMana = $7B2084;
function ReadInteger(Address: Integer): Integer;

var

  value: Integer;

  ler: DWORD;

begin

  H := FindWindow('TibiaClient', nil);

  ThID := GetWindowThreadProcessId(H, pid);

  PH := OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);

  ReadProcessMemory(PH, Ptr(Address), @value, 4, ler);

  Result := value;

end;

Link para o post
Compartilhar em outros sites

Troque:

const

  adrXOR = $7B2030;

  adrMyHP = $947000;

  adrMyMana = $7B2084;
function ReadInteger(Address: Integer): Integer;

var

  value: Integer;

  ler: DWORD;

begin

  H := FindWindow('TibiaClient', nil);

  ThID := GetWindowThreadProcessId(H, pid);

  PH := OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);

  ReadProcessMemory(PH, Ptr(Address), @value, 4, ler);

  Result := value;

end;

vei mudei o que se falo e ainda retorna 0 não sei se so eu que so tão BURRO, assim ou é o script :S

Link para o post
Compartilhar em outros sites

Cara eu testei tudo certinho ¬

---

Qual é seu windows? Qual é o level do seu personagem?

windwos = 7 ultimate 64bts

lvl 60 kina :S

OBS: não tenho desativado aquele negocio la no windows, e não queria desativa porque tenho muitos programas aqui em casa.

Editado por cleytonk (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.




×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo