Ir para conteúdo
Banner com Efeitos

panzp

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    panzp deu reputação a Kimoszin em Pegando o endereço base com o Delphi.   
    Olá pessoal, apartir do update 9.1, a Cipsoft botou um novo sistema, que agora os programadores precisam pegar a base do endereço para o seu bot funcionar perfeitamente em computadores com sistemas operacionais Windows 7 e Windows Vista.
    Bom, foi um sistema falho...

    Declare nas uses:

    PsAPI Declare a função necessaria para pegar a base do endereço: 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; Declare as variaveis: PH: THandle; PID, Thid: Dword; Offset: Integer; TibiaH: THandle Declare a função para ler os endereços de memoria: 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; Declare a função para pegar o ProcessID: function ProcessID: Integer; begin TibiaH := FindWindow('TibiaClient', nil); Thid := GetWindowThreadProcessId(TibiaH, @PID); PH := OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID); Result := PID; end; Pronto, agora já podemos burlar o sistema da Cipsoft. Agora um simples exemplo de como você deve usar: Declare as consts: const adrXOR = $7ADFD0; adrMyHP = $943000; adrMyMana = $7AE024; Agora, declare a função para retornar o Health do seu character: function PlayerHealth: Integer; var HP: Integer; uXor: Integer; begin Offset := Integer(GetTibiaBaseAddress(ProcessID)); HP := ReadInteger((adrMyHP + Offset) - $400000); uXor := ReadInteger((adrXOR + Offset) - $400000); Result := HP xor uXor; end; Função para pegar a Mana do seu character: function PlayerMana: Integer; 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; Vou deixar como o meu .pas ficou:

    Qualquer duvida, só postar.
  2. Gostei
    panzp deu reputação a 3visan em [Action] Mining System   
    me confundi só por causa do nome do script alguem porfavor move para actions.


    Bem pessoal esse era um sistema de lenhador, mas eu dei uma modificada eu transformei ele ne um script de mining, antes de falarem qualquer coisa, eu tive autorização do autor para modificar o script.

    Nivel Máximo Padrão = 100

    - Ganhos Por Nivel-


    Esse sistema conta com mensagem de avanço de nivel ou seja, você passou do nivel 10 pro 11 mostra o seguinte:
    "You advanced from level 10 to level 11 in mining."

    Delay, esse delay(atraso) funciona da seguinte forma, ao quebrar a rocha ela se torna um "destroço de pedra" e ao passar 480 segundos(pode ser modificado) a rocha volta.
    OBS: Deixei o Delay pois ficaria dificil o player esperar o Server Save para achar mais rochas caso o servidor seja pequeno.

    Oque o player ganha ao quebrar as rochas?
    Ele ganha Gold Nuggets(configuravel)



    Instalação:

    Abra a pasta data/actions/script e adicione isso em um arquivo lua (Sugestão: mining.lua)

    ------------------------------------------------------ -- Script by: Lwkass -- Mod: Vittu -- Version: 2.0 -- Tested in: TFS 0.4 --------------------------- -- Configurations -- --------------------------- local STORAGE_SKILL_LEVEL = 10002 local STORAGE_SKILL_TRY = 10003 local config = { levels = { {level = {0,9}, quant = {1,2}, percent = 5}, {level = {10,19}, quant = {2,4}, percent = 10}, {level = {20,29}, quant = {3,6}, percent = 15}, {level = {30,39}, quant = {4,8}, percent = 20}, {level = {40,49}, quant = {5,10}, percent = 25}, {level = {50,59}, quant = {6,12}, percent = 30}, {level = {60,69}, quant = {7,14}, percent = 30}, {level = {70,79}, quant = {8,16}, percent = 35}, {level = {80,89}, quant = {9,18}, percent = 35}, {level = {90,99}, quant = {10,20}, percent = 40}, {level = {100}, quant = {11,22}, percent = 50} }, rocks = {1356, 1285, 3607, 3616}, -- Id das rochas que podem ser quebradas stones = {}, -- Modelo = {rock_id, rock_id} default_stone = 2157, -- pedra padrão rock_delay = 480, -- Tempo de volta da rocha (Em segundos) bonus_chance = 3, -- Chance (em porcentagem) de se conseguir um bonus de exp bonus_exp = 1 -- Bonus extra } ------------------------------------ -- END Configurations --- ------------------------------------ function getMiningLevel(cid) return getPlayerStorageValue(cid, STORAGE_SKILL_LEVEL) end function setPlayerMiningLevel(cid, n) setPlayerStorageValue(cid, STORAGE_SKILL_LEVEL, n) end function addMiningLevel(cid, n) setPlayerMiningLevel(cid, getMiningLevel(cid) + (isNumber(n) and n or 1)) setMiningTry(cid, 0) end function getMiningInfo(cid) for i = 1, #config.levels do min = config.levels[i].level[1]; max = config.levels[i].level[2] if (getMiningLevel(cid) >= min and getMiningLevel(cid) <= max) then return {quantity = {min = config.levels[i].quant[1], max = config.levels[i].quant[2]}, chance = config.levels[i].percent} end end end function getStoneByRock(rockid) for i = 1, #config.stones do if (config.stones[2] == rockid) then return config.stones[1] end end return config.default_stone end function getMiningTries(cid) return getPlayerStorageValue(cid, STORAGE_SKILL_TRY) end function setMiningTry(cid, n) setPlayerStorageValue(cid, STORAGE_SKILL_TRY, n) end function addMiningTry(cid, bonus) setMiningTry(cid, getMiningTries(cid) + 1 + (bonus and config.bonus_exp or 0)) if (getMiningTries(cid) >= getMiningExpTo(getMiningLevel(cid))) then -- Up doPlayerSendTextMessage(cid, 22, "You advanced from level " .. getMiningLevel(cid) .. " to level ".. (getMiningLevel(cid) + 1) .." in mining.") if ((getMiningLevel(cid)+1) == getMiningMaxLevel()) then doPlayerSendTextMessage(cid, 22, "Max level reached in mining.") end addMiningLevel(cid) doSendMagicEffect(getCreaturePosition(cid), math.random(28,30)) setMiningTry(cid, 0) end end function getMiningExpTo(level) return ((level*1.5)+((level+1)*7)) end function getMiningMaxLevel() return config.levels[#config.levels].level[#config.levels[#config.levels].level] end --------------------------- function onUse(cid, item, fromPosition, itemEx, toPosition) rock = { id = itemEx.itemid, uid = itemEx.uid, position = toPosition } player = { position = getCreaturePosition(cid) } if (getMiningLevel(cid) < 0) then setPlayerMiningLevel(cid, 0) end if (isInArray(config.rocks, rock.id)) then addMiningTry(cid) if (math.random(1,100) <= getMiningInfo(cid).chance) then local collected = math.random(getMiningInfo(cid).quantity.min, getMiningInfo(cid).quantity.max) doPlayerAddItem(cid, getStoneByRock(rock.id), collected) doPlayerSendTextMessage(cid, 22, "You got " .. collected .. " gold" .. (collected > 1 and "s" or "") .. " nuggets.") if (math.random(1,100) <= config.bonus_chance) then -- Bonus calc addMiningTry(cid, true) doSendAnimatedText(player.position, "Bonus!", COLOR_ORANGE) end event_rockCut(rock) else if (math.random(1,100) <= (10-getMiningInfo(cid).chance/10)) then doPlayerSendTextMessage(cid, 22, "You got nothing.") event_rockCut(rock) else doSendMagicEffect(rock.position, 3) doSendAnimatedText(rock.position, "Poff!", COLOR_GREEN) end end else doPlayerSendCancel(cid, "This can't be cut.") end end function event_rockCut(rock) addEvent(event_rockGrow, config.rock_delay * 1000, rock.position, rock.id) doTransformItem(rock.uid, 3610) doSendMagicEffect(rock.position, 3) doSendAnimatedText(rock.position, "Tack!", COLOR_GREEN) doItemSetAttribute(rock.uid, "name", "A trunk of " .. getItemNameById(rock.id)) end function event_rockGrow(rockPos, old_id) local rock = getThingFromPos(rockPos).uid doTransformItem(rock, old_id) doItemSetAttribute(rock, "name", getItemNameById(old_id)) doSendMagicEffect(rockPos, 3) end --Lumberjack 2.0 by: Lwkass <action itemid="id_do_item" script="mining.lua"/>

    id_do_item: coloque o id do item que deseja para quebrar as rochas, eu aconselho a usar a pick.
    Id da pick: 2553

    Obrigado.
    Adicione essa linha no actions.xml
  3. Gostei
    panzp deu reputação a Puncker em [Tutorial] Colocando Skin no seu projeto Delphi   
    Inserindo Skin no seu projeto Delphi



    {Iniciando em Delphi}


    Muitos gostam de programas estilosos, com uma aparência bonita, mas não sabem como alterar isso. Então vou ensinar como colocar "Skins" em um projeto do Delphi.

    Necessário:

    VCL Skin
    Pacote de Skins


    O que é VCL Skin?
    VCL Skin é um componente do Delphi, que pode ser integrado ao Delphi, após ele ser integrado ele aparece nas abas do Delphi, e você poderá usar as suas funções.


    1 - Instalando o Componente


    Após ter baixado o VCLSkin extraia ele, agora dentro das pastas extraídas haverá uma chamada Package, nessa pasta como você verá tem muitos arquivos. Destes arquivos abra o WinSkinD7R.dpk.
    Irá aparecer algo parecido com um projeto de Delphi porém sem o form.


    Agora clique em "Compile" e logo depois em "Install" depois de instalar aparecerá uma mensagem confirmando que foi instalado, agora feche o Delphi. E nas pastas extraídas do VCLSkin vá na pasta "Source" copie tudo que tem na pasta e cole em:
    C:\Program Files\Borland\Delphi7\Lib (Pasta do Delphi Windows Vista/Windows 7)
    C:\Arquivos de Programas\Borland\Delphi7\Lib (Pasta do Delphi Windows XP)

    Pronto ele está prontinho para funcionar mas agora a parte de inserir "Skin" no projeto.


    2 - Inserindo os Skins


    Após ter completado a etapa de instalar o componente agora você poderá deixar seu programa mais bonito.
    Abra o Delphi e inicie um novo projeto caso não exista um. Após fazer isso nas abas vá até o final usando a seta ">" e pare quando encontrar a aba "VCLSkin



    Na aba "VCLSkin" selecione o componente SkinData e coloque-o no seu form. Após fazer isto clique no SkinData já no seu form apenas para selecionar as propriedades dele, altere a propriedade "Active" para "True"



    Agora clique em "..." na propriedade "SkinStore" do SkinData e vá até a pasta extraída do pacote de skins e escolha o skin de sua preferência. Agora você pode compilar seu projeto e ver como ficou apertando F9.



    Uma screenshoot do programa com o Skin Discoteca


  4. Gostei
    panzp deu reputação a Kimoszin em [DUVIDA] Apostila Delphi   
    Caro, eu lhe aconselho Blibia Delphi, aprendi muito com ela
    Bíblia Delphi.rar

    Abraços, qualquer duvida sobre delphi pergunte aqui no forum !
  5. Gostei
    panzp deu reputação a Kimoszin em Criando um Mini-Bot no Delphi (Sem API)   
    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 codigos e muita outras coisas,
    Nao é nada extremamente facil, requer um pouco de estudo, mais tudo oque vc fizer vai estar ali para estudo. Entao eu falo para vcs quando nao tiverem nada pra fazer estudem um pouco sobre o delphi.
    Ok vamos ao bot
    O Bot é simples, treina seu magic level, tem um anti kick e come food,

    Visual, olhe como arrumei os meus componentes



    Componentes, vamos precisar de:


    1 TGroupBox 1 TButton 2 TLabeledEdit 2 TCheckBox 1 TCombobox 2 TLabel 4 TTimer Renomeando componentes, para renomear vc deve ir ate a propriedade name Button -> StartButton Timer1 -> CastSpell Timer2 -> Endereço Timer3 -> Kick Timer4 -> Food LabeledEdit1 -> Spell LabeledEdit2 -> Mana Arrumando Componentes, quando ja estiverem renomeados CastSpell.Enabled.False CastSpell.Interval.700 Kick.Enabled.False Kick.Interval.60000 Food.Enabled.False Food.Interval.30000 Combobox1.Style.csDropDownList Form1.Caption 'Escolha um Nome para o Bot' Variaveis Globais, declare embaixo do Form1 : TForm1 PH : THandle; PID, ThID: DWORD; H : THandle; Funções usadas, declare elas embaixo do {$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; Depois de botar os componentes, renomea-los e declarar as funções, Vamos botar os devidos codigos nos respectivos componentes Lembrando que é tudo dentro do begin e end, se tiver Var vc deve excluir o begin, e adiciona-lo depois CastSpell 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 Endereço Label2.caption := IntToStr(Lerint($0081CE5C)); // Vai ler o endereço da mana do personagem e transforma em numero para o label2 Kick 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; Food hotkey(Combobox1.Text) // Pressiona oque tiver no Texto do Combobox StartButton 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';

    Bom pessoal sei que é simples, mais estou tentando animar o pessoal do forum para usar o Delphi,

    ps: Peguei as funções da sessao do delphi, entao esta tudo aqui
    Abraços a todos

Informação Importante

Confirmação de Termo