Postado Junho 30, 2012 12 anos Em 30/06/2012 em 00:03, Kimoszin disse: Você mudou os endereços de memoria? '-' Mudei lek olha como ta o programa vo posta ai Mostrar conteúdo oculto 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 Junho 30, 2012 12 anos por cleytonk (veja o histórico de edições)
Postado Junho 30, 2012 12 anos Autor 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;
Postado Junho 30, 2012 12 anos Em 30/06/2012 em 15:58, Kimoszin disse: 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 Junho 30, 2012 12 anos por cleytonk (veja o histórico de edições)
Postado Junho 30, 2012 12 anos Autor 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;
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.