Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 01/22/11 em todas áreas

  1. [Tutorial] Montarias

    Dioudiou e 2 outros reagiu a Ink por uma resposta no tópico

    3 pontos
    Boa noite pessoal! É com prazer que apresento meu primeiro e mais simples tutorial! Você não é premmy e queria ter uma montaria!? Esse código é sua solução Bom galera como é de costume de todo bom programador, vou listar todos os objetos que vou utilizar no tutorial, seus respectivos nomes e texto exibido. 1 Label = lbltitulo = Selecione a montaria desejada: 1 Combo Box = cmbmont = - Nenhuma - 1 Botão = cmdmontar = Montar Agora já com os objetos listados vamos programar. Vamos começar pelo Combo Box. Selecione o cmblista e nas suas propriedades do lado direito do monitor localize a propriedade Items, clique no botão e uma janela vai aparecer. Digite a lista de montarias. - Nenhuma - Black Sheep Blazebringer Draptor Midnight Panther Rapid Bird Rapid Boar Stampor Tin Lizzard Titanica Undead Cavebear War Bear Widow Queen Agora em Text coloque: - Nenhuma - E na propriedade Sorted coloque True, assim a lista vai ficar em ordem alfabética. Feito isso de um duplo clique no cmdmontar e vamos aos códigos. If c.LoggedIn Then If cmbmont.Text = "Widow Queen" Then p.MountId = 368 End If If cmbmont.Text = "Rapid Bird" Then p.MountId = 369 End If If cmbmont.Text = "War Bear" Then p.MountId = 370 End If If cmbmont.Text = "Black Sheep" Then p.MountId = 371 End If If cmbmont.Text = "Midnight Panther" Then p.MountId = 372 End If If cmbmont.Text = "Draptor" Then p.MountId = 373 End If If cmbmont.Text = "Titanica" Then p.MountId = 374 End If If cmbmont.Text = "Tin Lizzard" Then p.MountId = 375 End If If cmbmont.Text = "Blazebringer" Then p.MountId = 376 End If If cmbmont.Text = "Rapid Boar" Then p.MountId = 377 End If If cmbmont.Text = "Stampor" Then p.MountId = 378 End If If cmbmont.Text = "Undead Cavebear" Then p.MountId = 379 End If If cmbmont.Text = "- Nenhuma -" Then p.MountId = 0 End If End if Vou explicar o código por partes. If c.LoggedIn Then - Uma condição para que as funções que vem abaixo dela sejam executadas sem problemas maiores, nesse caso ele valida se o player está ou não OnLine. If cmbmont.Text = "Nome da montaria" Then - Outra condição, está define o id de cada montaria. Eu poderia ter usado Select Case preferi usar if pois o tutorial é para iniciantes. p.MountId = ID - Essa função é aonde o seu char "monta", ela edita o Look do seu char para que ele monte o monstro selecionado na cmbmont If cmbmont.Text = "- Nenhuma -" Then p.MountId = 0 - Faz seu personagem ficar sem montaria nenhuma. End If - Fecha as condições. Bom galera é isso. Espero que vocês possam usar isso no seus Bot's Qualquer dúvida eu respondo por mp ou postem ai! Abraços! Ink
  2. 1 ponto
    Aew galera... vi que a maioria aqui programa com TibiaAPI e VB... entao, resolvi criar uns tutoriais pra ver se a galera se motiva a programar em Delphi, SEM usar a API. Vo dar um exemplo SIMPLES de como ler um valor numeral (life do char por exemplo)... e como converter ele pra uma string ( converter é uma função muito simples do proprio delphi ;/ ). Para seguir esse tutorial, é necessário ter noção básica de delphi, e obviamente, ter o delphi... não darei muitas explicações sobre "onde por o codigo" e sim "onde podemos usá-lo"... Antes de postar algo, por favor, leia o tópico todo (mesmo se nao entender algo...) para uma melhor avaliação x.X.. No final do tuto teremos o codigo completo (caso haja duvidas)... Vamos lá: ReadProcessMemory É uma função capaz de ler memoria (ahh váa), vo explicar os parametros dela (não muito explicado... kkkk, só o bastante pra entenderem como usar), e dar um exemplo. Entãao... hora de programar \o/ Crie um novo projeto no delphi... nele adicione uma label (aba standard) e um timer (aba system)... Antes de começar a editar os componentes e suas ações, vamos inserir essas variaveis globais: PH : THandle; PID, ThID: DWORD; H : THandle; Vamos mudar a propriedade Name da label para Vida, e deixaremos o enabled do Timer em True e o Interval em 10 (não "muito rápido", mas, o essencial para o programa de exemplo funcionar...) Agora, abaixo do Implementation... colocaremos esta função, pra ser mais pratico de se ler... 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; Dê dois clickes no timer, para ir ao evento do OnTimer dele... e insira o seguinte código: vida.caption := 'Vida: '+IntToStr(Lerint($0063FD5C)); Execute (apertando F9), com o tibia aberto... (ou abra o tibia depois...sei lá), e veja a leitura acontecendo \o/ Agora sim vo explicar x.X Declaramos variaveis globais para 'preencher' os parametros da leitura de memoria.... No código da função, começamos com a linha : H := FindWindow(nil, 'Tibia'); A ideia é achar a janela do tibia, e dar esse 'valor' pra uma variavel Handle... que é para o primeiro paremetro da função de readprocessmemory. Podemos achar a janela pela classe ou pelo titulo (caption, ou texto da janela... se preferirem), por exemplo: se eu usar: H := FindWindow('Tibiaclient', nil); // classe da janela do tibia nesse caso, é a mesma coisa de usar: H := FindWindow(nil, 'Tibia'); //nome da janela do tibia Nessa parte do códigos, definimos que temos acesso total ao programa ( o tibia )... PH := OpenProcess(PROCESS_ALL_ACCESS,FALSE,PID); E finalizando, temos a leitura... Usando o PH que é uma handle com acesso aos address do tibia, o address a ser lido, o retorno do valor, usando 4 bytes, e lendo com uma variavel dword... ( se não entendeu... siga a minha escrita e as cores, e vc entende... ) ReadProcessMemory(PH, Ptr(Address), @Value, 4, Ler); E temos o resultado: Result:=value; Analisando a função minha, temos isso: function LerInt(Address: Integer): Integer; Ou seja, LerInt(Address) retornando valor integer... Assim nosso timer atualiza o valor, com o seguinte código: vida.caption := 'Vida: '+IntToStr(Lerint($0063FD5C)); // address de vida do tibia 8.7 (se meu address não estiver errado ;P) Ou seja, nossa label chamada vida, tem sua propriedade caption alterada para o valor lido... mas, o valor é Integer, e a caption aceita String, então convertemos usando a função IntToStr ... ( integer Para String ;/ ).... Bom, é isso galera, acredito que muitos conhecem o ReadProcessMemory, só tentei explicar um pouco o que sei sobre a função =] Se alguém teve duvida de aonde colocar cada code...No final, teremos um código mais ou menos assim: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) vida: TLabel; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; PH : THandle; PID, ThID: DWORD; H : THandle; implementation 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; {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin vida.caption := 'Vida: '+IntToStr(Lerint($0063FD5C)); end; end. OBS: o code é baseado naquele classico código da internet (tem em todos foruns quase X.X )... de ler e editar pontos no pinball do windows (mas, somente a parte de leitura)..., porém fiz algumas modifcações e transformei ele em uma função... flw, abraços.... Qualquer duvida, sugestão ou correção... podem falar =]
Líderes está configurado para São Paulo/GMT-03:00

Informação Importante

Confirmação de Termo