Super poradniczek, bardzo przydatny dla tych, którzy mają czas się w to bawić. Wolałbym jednak wersję w języku C++ ;]
Wersja do druku
Super poradniczek, bardzo przydatny dla tych, którzy mają czas się w to bawić. Wolałbym jednak wersję w języku C++ ;]
Skoro była prośba... a więc:
packet.dll pod 8.21
Speedyshare rehost
Rapidshare rehost
Oryginalny temat z plikiem
+Adresy do 8.21
Tak szczerze... Wiesz co ma ten kod na celu?
GetWindowThreadProcessID(FindWindow('TibiaClient', nil), #proc_ID);
*brązowe oznaczenie - uzyskanie uhwytu do okna Tibii. Każdy klient tibii (sama aplikacja), posiada klasę okna "TibiaCliwnt". Nie ma możliwości, żeby to była tego wina.
*zielone oznaczenie - uzyskanie ID procesu na podstawie uhwytu okna. W zmiennej Proc_ID, zostanie zapisana ta informacja.
Witam Bardzo Proszę o pomoc Bo jak robie wpisuje to pomiedzy Begin a end te adresy jak naciskam ctrl+f9 pisze ze error BLAGAM O POMOC DAM REPUTA!!!!
Bardzo ladny poradnik, zazdroszcze autorowi tekstu takiej wiedzy na ten temat.
Mam prośbę, może ktoś wrzucić tutaj packet.dll pod 8.22 - z góry dzieki.
pozdrawiam
No bardo fajny poradnik troche sie pomeczyle,m ale zrobilem
udało mi sie:D
Ponawiam prośbę o packiet dll pod tibie 8.22 ...
Jako, że mam chwilę
Packet.dll pod 8.22
Rapidshare rehost
Witam
Ma ktoś już adresy pod Tibie 8.30? No i oczywiście nowy packet.dll?
Packet.dll dla Tibii 8.31.
http://rapidshare.com/files/150883051/packet.dll
8.31 OD TINUSIA :)
Moze ktoś pisze w C++'sie to niech pisze domnie na PW to sie zgadamy.Kod:Exp = 0x62ACE4;
GoTo_X = Exp + 80;
GoTo_Y = Exp + 76;
GoTo_Z = Exp + 72;
Id = Exp + 12;
HP = Exp + 8;
HP_Max = Exp + 4;
Level = Exp - 4;
MagicLevel = Exp - 8;
Level_Percent = Exp - 12;
MagicLevel_Percent = Exp - 16;
Mana = Exp - 20;
Mana_Max = Exp - 24;
Soul = Exp - 28;
Stamina = Exp - 32;
Cap = Exp - 36;
Fishing = Exp - 52;
Shielding = Exp - 56;
Distance = Exp - 60;
Axe = Exp - 64;
Sword = Exp - 68;
Club = Exp - 72;
Fist = Exp - 76;
Fishing_Percent = Exp - 80;
Shielding_Percent = Exp - 84;
Distance_Percent = Exp - 88;
Axe_Percent = Exp - 92;
Sword_Percent = Exp - 96;
Club_Percent = Exp - 100;
Fist_Percent = Exp - 104;
Flags = Exp - 108;
Max_Slots = 11;
Slot_Head = 0x633228; // 8.31
Slot_Neck = Slot_Head + 12;
Slot_Backpack = Slot_Head + 24;
Slot_Armor = Slot_Head + 36;
Slot_Right = Slot_Head + 48;
Slot_Left = Slot_Head + 60;
Slot_Legs = Slot_Head + 72;
Feet = Slot_Head + 84;
Slot_Ring = Slot_Head + 96;
Slot_Ammo = Slot_Head + 108;
chce zrobic tego bota ale ten program delphin 7personal sciagnolem go che zainstalowac ale nie mam kodu cdkey pomocy!!Jak byscie mogli to wyslijcie mi na gg 171074 gotowy delphin 7 personal PS jak byscie zrobicli bota do tibi 8.31 lub nowszego (zeby za pomoca tego bota mozna bylo dodawac lvl,skille,itemy i kase,i jak by bylo mozliwe zeby nie wykrywal go cipsoft(nie dali bana)) to wyslijcie lub podajcie link do dowload :)
Hah, daj linijke jak zrobić niewykrywalnego bota :]
czy ktos z Was ma moze FreeProxy zakualizowane pod tibie 8.11? bo w necie chyba ze 2h szukalem i nic nie ma ;/
aha, od razu mowie ze mi nie robi zadnej roznicy jak ten freeproxy bedzie np na 7 dni itp. wazne zeby byl :)
PS:
z gory thx
czy moze mi ktos w koncu odpowiedziec?
Czy moze mi ktos powiedziec co sie stalo z gospodarzem tego tematu??? Czego zostalo usuniete jego konto????
Witam!
Dawno się nie udzielałem na forum...
Jeżeli odgrzebuję - to przepraszam, ale nie chciałem spamować forum...
Tak więc. Znam się już troszkę na Delphim, nie jednego bota się robiło...
No ale przy próbie komplikacji czegoś takiego:
Wyskakuje mi błąd przy linijce:Kod:unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
const
Exp = 0x62ACE4;
GoTo_X = Exp + 80;
GoTo_Y = Exp + 76;
GoTo_Z = Exp + 72;
Id = Exp + 12;
HP = Exp + 8;
HP_Max = Exp + 4;
Level = Exp - 4;
MagicLevel = Exp - 8;
Level_Percent = Exp - 12;
MagicLevel_Percent = Exp - 16;
Mana = Exp - 20;
Mana_Max = Exp - 24;
Soul = Exp - 28;
Stamina = Exp - 32;
Cap = Exp - 36;
Fishing = Exp - 52;
Shielding = Exp - 56;
Distance = Exp - 60;
Axe = Exp - 64;
Sword = Exp - 68;
Club = Exp - 72;
Fist = Exp - 76;
Fishing_Percent = Exp - 80;
Shielding_Percent = Exp - 84;
Distance_Percent = Exp - 88;
Axe_Percent = Exp - 92;
Sword_Percent = Exp - 96;
Club_Percent = Exp - 100;
Fist_Percent = Exp - 104;
Flags = Exp - 108;
Max_Slots = 11;
Slot_Head = 0x633228; // 8.31
Slot_Neck = Slot_Head + 12;
Slot_Backpack = Slot_Head + 24;
Slot_Armor = Slot_Head + 36;
Slot_Right = Slot_Head + 48;
Slot_Left = Slot_Head + 60;
Slot_Legs = Slot_Head + 72;
Feet = Slot_Head + 84;
Slot_Ring = Slot_Head + 96;
Slot_Ammo = Slot_Head + 108;
implementation
{$R *.dfm}
end.
oraz :Kod:Exp = 0x62ACE4; // [Error] Unit1.pas(21): ':' expected but identifier 'x62ACE4' found
Macie może jakieś rady?Kod:Slot_Head = 0x633228; // 8.31 // [Error] Unit1.pas(58): ';' expected but identifier 'x633228' found
Dodam że próbowałem sam wyszukać adres EXP i tego Slotu głowy, ale nie mogłem znaleźć... Czekam na odpowiedź... Fajnie by było jak by jeszcze ktoś napisał na gg że odpowiedział bo czasami mogę zapomnieć adresik, albo mieć formata, albo inne przyczyny...Kod:GG:8680037
Sprawa jest prosta. Korzystasz z oznaczeń, które wykorzystuje język C++.
Jak to wygląda?
C++:
Exp = 0x62ACE4;
Delphi:
Exp = 62ACE4;
PS. Nic nie szkodzi, że wątek został odświerzony. Wszystkie opisane w nim formuły są nadal aktualne i jeśli tylko ktoś miałby chcęć napisać na ich podstawie bota - zrobi to bez problemu ;)
No to się cieszę że nie dostanę warna...
Zauważyłem że wystarczy zamiana "x" na "0" i jest ok... Przed chwilą kombinowałem i udało mi się w końcu...
Z racji że nikt nie lubi mieć bałaganu w kodzie - postanowiłem udostępnić tutaj - nigdzie indziej nie dawałem - komponent do Czytania/Wpisywania wartości Integerowskich i Stringów do procesu znając jego uchywyt (handle)...
Adres:
Opis procedur i funkcji:Kod:hxxp://blade95.yoyo.pl/pliki/TMemOption.rar
zamist "xx" wpiszcie "tt"
Co tu dużo o tych procedurach/funkcjach mówić... Dam jeszcze przykładzik użycia:Kod:1. Czytanie wartości
a) String
function MemoryReadString(Handle:hWND;Adres:Cardinal):String;
b) Integer
function MemoryReadInteger(Handle:hWND;Adres:Cardinal):Integer;
2. Wpisywanie wartości
a) String
procedure MemoryWriteString(Handle:hWND;Adres:Cardinal;Bufer:String);
b)Integer
procedure MemoryWriteInteger(Handle:hWND;Adres:Cardinal;Bufer:Integer);
Myślę że tutaj też nie ma zbytnio co objaśniać...Kod:procedure TForm1.Button1Click(Sender: TObject);
var
Hand:hWND; //tutaj przechowywany będzie uchwyt do procesu
TMP:Variant; //tutaj będą przechowywane dane tymczasowe
const
Addr=$0000000; //tutaj dowolny adres komórki z której chcemy "wyciągnąć" jakieś dane
Addr2=$0000000; //tutaj dowolny adres komórki której chcemy przypisać jakąś wartość
begin
Hand := FindWindow('TibiaClient',nil);
ShowMessage(MemOption1.MemoryReadString(Hand,Addr));
ShowMessage(IntToStr(MemOption1.MemoryReadInteger(Hand,Addr)));
TMP := InputBox('Tekst do wpisania','MemOption1','lol');
MemOption1.MemoryWriteString(Hand,Addr2,TMP);
TMP := InputBox('Liczba do wpisania','MemOption1','1010');
MemOption1.MemoryWriteInteger(Hand,Addr2,TMP);
end;
Mam nadzieję że komponent co niektórym ułatwi życie i oszczędzi klawisze... ;-)
Zabrania się rozprzestrzeniania komponentu na inne witryny bez zgody autora.
Witam.
Mam małe pytanie. Jak powinna wyglądać procedura odpowiedzialna za zjadanie pożywienia z bp?
Witam chce sobie ten poradniczek wykorzystać w innej grze i mam pytanko!
Skad sie wzielo TibiaClient ?
przeciez nazwa okna sie nazywa Tibia a nie TibiaClient
prosze o szybka odpowiedz :)
/sory za odswiezanie
odpowie ktos ? :S
"Tibia " (3 spacje na końcu) to tytuł okna
"TibiaClient" to coś w stylu identyfikatora lub nazwy okna - jest ona niewidoczna dla użytkownika. Odnajdywanie klienta za pomocą tej nazwy nie blokuje możliwości zmiany paska z tytułem.
a w innej grze jak mam to znalesc? :S
Jezu co wy piszecie :P
Ta druga nazwa, a zarazem pierwszy argument funcji ::FindWindow() to nazwa klasy okna w WinAPI. Zeby ja pobrac z dowolnego okna nalezy sie posluzyc funkcja ::GetClassName().
Pozdrawiam.
a wytlumaczyl bys to mi zwyklemu kowalskiemu jak to zrobic ?;/
dobra dzieki ze nie pomogliscie ;D dalem se rade po dlugich poszukiwaniach ba google znalazlem zajebioaszczy program GreatisWindowse jest zajebsity ! cyaXD
Mogłby mi ktoś wytłumaczyć w jaki sposób samemu odnaleźć, której rzeczy w Tibii (skill, ilość expa, ilość hp itp) odpowiada jaki adres w pamięci?
(przyznam że nie czytałem całego tematu, gdyż forum strasznie powoli mi się ładuje)
cheat engine
Dzięki ;)
W takim razie zaraz zabieram się za zabawę z ReadProcessMemory, a pózniej WriteProcessMemory ;)
Powiedzcie mi jeszcze jedną rzecz. Czy w każdym kliencie tibii odległości między konkretnymi adresami zawsze są takie same, czy one też ulegają zmianie z wyjściem nowej wersji klienta?
Jeżeli chodzi Ci czy adresy się zmieniają to TAK.
#up:
Poprawka. Duża większość adresów (tych podstawowych) jest stała:
-skill, exp, level, eq, etc etc.
Niektóre jednak, jak np. osoby na Battle Liście muszą zostać za każdym razem na niej zlokalizowane, co nie stanowi jednak problemu, bo adres Battle Listy również jest stały.
#edit, down:
W 99,99% tak, chyba, że Cipsoft wprowadzi nową zmienną, której dotychczas nie było (tak jak to zrobiono ze staminą) - wtedy jest nikła szansa, że coś namieszają. Z drugiej strony jednak takie adresy dodawane są za aktualnymi, więc praktycznie na 100% - odległości się nie pozmieniają.
Chyba nie wyraziłem się dość jasno, więc napiszę wyraźniej :)
Nie chodzi mi o to czy same adresy się zmieniają, lecz czy odległości pomiędzy konkretnymi adresami ulegają zmianie przy wyjściu nowej wersji klienta tibii.
Na przykładzie Tibii 8.31:
Exp = 0x62ACE4
Level = Exp - 4
A w Tibii 8.4:
Exp = 0x62BD24
W moim pytaniu chodziło o to czy w takim wypadku adres Level'a w Tibii 8.4 będzie analogicznie wynosił Exp (0x62BD24) - 4?
sory ziomek ale ja cie nie ogarniam :D
tak adresy mają "stałą odległość" jednak nie wszystkie, mozna je podzielic na grupy. i np.
LoginServerBegin =$77FC48;
krok = 70;
LogInServ1=LoginServerBegin;
LogInServ2=LoginServerBegin+krok;
LogInServ3=LoginServerBegin+2*krok;
LogInServ4=LoginServerBegin+3*krok;
LogInServ5=LoginServerBegin+4*krok;
LogInServ6=LoginServerBegin+5*krok;
LogInServ7=LoginServerBegin+6*krok;
LogInServ8=LoginServerBegin+7*krok;
LogInServ9=LoginServerBegin+8*krok;
LogInServ10=LoginServerBegin+9*krok;
Player_ID = $62BD30;
Player_Status = Player_ID - 120;
Player_Fist_Perc = Player_Status + 4;
Player_Club_Perc = Player_Status + 8;
Player_Sword_Perc = Player_Status + 12;
Player_Axe_Perc = Player_Status + 16;
Player_Distance_Perc = Player_Status + 20;
Player_Shielding_Perc = Player_Status + 24;
Player_Fishing_Perc = Player_Status + 28;
Player_Fist = Player_Status + 32;
Player_Club = Player_Status + 36;
Player_Sword = Player_Status + 40;
Player_Axe = Player_Status + 44;
Player_Distance = Player_Status + 48;
Player_Shielding = Player_Status + 52;
Player_Fishing = Player_Status + 56;
Player_Cap = Player_Status + 72;
Player_Stamina = Player_Status + 76;
Player_Soul = Player_Status + 80;
Player_Mana_Max = Player_Status + 84;
Player_Mana = Player_Status + 88;
Player_Magic_Perc = Player_Status + 92;
Player_Level_Perc = Player_Status + 96;
Player_Magic = Player_Status + 100;
Player_Level = Player_Status + 104;
Player_Experience = Player_Status + 108;
Player_Health_Max = Player_Status + 112;
Player_Health = Player_Status + 116;
Player_GoTo_Z = Player_Status + 180;
Player_GoTo_Y = Player_Status + 184;
Player_GoTo_X = Player_Status + 188;
ja mam tak pogrupowane i w nastepnej wersji Tibi znajduje 1 dowolny i uzalezniam reszte od znalezionego.
Mam problem z funkcją say. Otóż nie chce działać. Bota robię pod tibie 7.6. Sądzę że złe są adresy (PacketBuffer) , lecz tego nie umiem sprawdzić. Bardzo proszę o pomoc.
Nie adresy, tylko kolnkretne bajty informacji do przesłania.
I winą tego, że nie działa zapewne jest to, że używasz nie tego Paclet.dll, co trzeba. (ważnym jest aby był przystosowany własnie do wersji Tibii, której używasz)
#edit, down:
widać pakiet który wysyłasz, niefortunnie odpowiada pakietowi przenoszącemu informację o wylogowaniu postaci.
Znalazłem już odpowiedni packet.dll dla Tibii 7.6. Dodam że był w bocie "mpa bot" dla tibii 7.6 więc uważam, że jest dobry. Natomiast teraz mam zupełnie inny problem. Po włączeniu funkcji trenującej mlvl postać się sama wylogowuje nawet kiedy mam battle. Może jednak zmieniły się te PacketBuffer i dlatego cały czas takie błędy wychodzą. Sam nie wiem, nie chce dyskutować na nieznane mi tematy :P.
jak wyglada player id dla tibii 8,4?
Player_ID = $62BD94;?? czy nie to ?
Zrobielm bota aby np. poszedl w górę, bot to zrobi ale przy tym wywala blad: "Access violation at address 00000001. Read of address 00000001"
Co to może być? Myślę że to wina packet.dll
Mam packet z 22 strony tego tematu od użytkownika paweł,
ale coś mi w nim nie pasuje, za mały jakiś ;p
jeśli dobrze mówię to proszę o rehost packet.dll 8.31
Ten sam problem mam, posiadam najnowsza bibliotekę dll pod Tibia 8.40
i wykonuje dany ruch ale "Access violation at address 00000001. Read of address 00000001". Umie ktoś to rozwiązać?
Witam. mam pytanie!, czy tą całą funkcję co napisał Yaboomaster można wykorzystać w innych grach ? czyli zamiast
podpiąć się np. pod jakąś gre typu kurczak shooterKod:GetWindowThreadProcessID(FindWindow('TibiaClient', nil), @proc_ID);
znaleść w Cheat Engine sobie jakiś adres przypuśćmy ilość amunicji w której można zmieniać Value, niech to będzie przypuśćmy 075b5050Kod:GetWindowThreadProcessID(FindWindow('Kurczak', nil), @proc_ID);
i co ?? wtedy wpisujemy sobie
i jak myślicie czy to zadziała ?Kod:const
Ammo = $075b5050;
bo mi jakoś to nie wychodzi tak jak by wogóle uchwytu nie odczytywał.Kod:const
label1.Caption:=inttostr(ReadMeminteger(Ammo));
#up:
Oczywiscie, że zadziała.
Sprawdź czy pobira uchwyt okna (czy jest większy od zera). Uchwyt jest typem integer, więc możesz go spobie podejrzeć.
Jeśli znalazłeś wartość Cheat Enginem - będzie działało.
#down:
Uchwyt łapie siępo nazwie okna, albo po jego klasie. A ty ani jednego ani drugiego nie wybrałeś, tylko nazwę pliku uruchieniowego.
Dwa: jak chcesz sprawdzić czy już złapałeś uchwyt - wyświetl go sobie na formie. Jak bierzesz sięza pisanie botów, poznaj chociaż trochę język, w którym piszesz.
Najprościej: showmessage(strtoint(FindWindow('TibiaClient', nil)));
no właśnie jak mam sprawdzić czy mi ten uchwyt pobiera? ja po prostu sprawdziłem w menadżerze w procesach , że dana gra nazywa się kurczak.exe i wpisałem ją do kodu :). możesz mi jakiś kod przytoczyć aby to jakoś sprawdzić ?
Jak bym się dobrze znał to bym się nie pytał a co do twojego kodu
to wywala: error Incompatible types: 'String' and 'HWND'Kod:showmessage(strtoint(FindWindow('TibiaClient', nil)));
więc jak mówisz ,ze uchwyt łapie się po nazwie okna to jak zminimalizuje grę to jest napisane kurczak
czyli chyba dobrze napisałem to w funkcji,to juz sam teraz nie wiem prosiłbym o małą lekcję ,może myślę w złym kierunku