Reklama
Strona 1 z 5 123 ... OstatniaOstatnia
Pokazuje wyniki od 1 do 15 z 65

Temat: [Poradnik] Własny bot

  1. #1

    Data rejestracji
    2006
    Położenie
    Gliwice
    Wiek
    32
    Posty
    12
    Siła reputacji
    0

    Domyślny Własny bot

    Artykuł ten jest efektem mojej własnej pracy, a także pracy kilku innych osób z tprogramming.tk. Podziękowania dla: MasterT, oraz pozostałych adminów tprogramming.
    Jestem zmuszony napisać nowy art, po usunięciu poprzedniego (ci admini...). Z artykułu dowiecie się m. in.
    • Jak zmieniać tytuł okna Tibii (i nie tylko)
    • Jak obliczać exp do levelu
    • Jak wyświetlać tekst w pasku statusu Tibii
    • Oraz wiele innych rzeczy...
    1. Niezbędne wyposażenie
    Aby móc napisać własnego bota, będzie niezbędne:
    • Kompilator Pascala (Delphi lub Lazarus)
    • Dobre chęci
    • Znajomość angielskiego i podstaw Pascala
    2. Pierwszy projekt - zmiana tytułu okna Tibii
    Włączamy Delphi (lub Lazarusa - choć dalszy ciąg artykułu będzie oparty na Delphi 7 Personal). Klikamy File -> New -> Application. Po chwili pojawi się formularz designera, a za nim okno kodu. Rozmiary okien można zmieniać, klikając na ich krawędziach i przeciągając. Umieszczamy na formie przycisk, klikając jego symbol na palecie, a potem klikając i przeciągając w formie.

    Jego właściwości możemy zmienić, zaznaczając go i przechodząc do Object Inspectora. Następnie klikamy przycisk dwukrotnie, wywołując okno kodu z procedurą:
    procedure TForm1.Button1Click(Sender: TObject);
    begin

    end;
    Uzupełnij ją tak, aby wyglądała jak poniżej:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    Tibia: Cardinal;
    begin
    Tibia := FindWindow('TibiaClient',nil);
    SetWindowText(Tibia,PChar('Tibia <<M&#243;j Bot>>'));
    end;
    Tekst "Tibia <<M&#243;j Bot>>" możemy oczywiście zamienić na coś innego.
    Zapiszmy teraz program. Wciśnij Ctrl+S. Pojawi się najpierw okno zapisu pliku *.pas, jest to plik kodu źr&#243;dłowego formy. Nadaj mu nazwę BotMForm.pas lub podobną. Potem pojawi się okno zapisu pliku *.dpr. Będzie to jednocześnie nazwa naszego programu. Zapisz go jako TibiaBot lub coś podobnego. Potem kliknij Run -> Run, aby uruchomić bota.

    3. Dostęp do pamięci procesu
    Większość operacji, kt&#243;re wykonuje bot, wymaga ingerencji w pamięć procesu Tibii. Jednak niewłaściwe postepowanie w tym zakresie może prowadzić do błęd&#243;w, wskutek czego najczęściej zawieszał się będzie klient gry. Każda operacja wymaga podania identyfikatora procesu, adresu pamięci, oraz bufora i jego długości. Korzystając z funkcji udostępnionych przez MasterT (www.tibiatech.tk), możemy w łatwy spos&#243;b operować na obszarze pamięci Tibii.

    Aby skorzystać z operacji na pamięci, zadeklarujemy kilka stałych będących adresami w pamięci Tibii. Stałe definiujemy pomiędzy słowami var a implementation. Pokażę, jak będzie wyglądać nasza deklaracja:

    (...)
    var

    Form1: TForm1;

    const
    BATTLELIST_START = $005F7994;
    BATTLELIST_END = $005FD460;
    PLAYER_X = $00602B08;
    PLAYER_Y = $00602B04;
    PLAYER_Z = $00602B00;
    PLAYER_LEVEL = $005F7920;
    PLAYER_EXP = $00605A04; // zmieniony - Tibia 7.9
    STATUS_TEXT = $0074F1D0;
    STATUS_TIMER = $0074F1CC;
    SPEED_USE = $0074DBD0;

    implementation
    (...)

    Zamiast unitu Mem.pas, wykorzystamy własne procedury, podane na końcu.
    Math zawiera procedury matematyczne: potęgi, pierwiastki, itp.

    4. Poziom i doświadczenie
    Procedury poznane w poprzednim rozdziale przydadzą się teraz do obliczania doświadczenia potrzebnego do zdobycia poziomu. Przy okazji wykorzystamy też potęgi z unitu Math.
    Wz&#243;r na obliczenie doświadczenia to (zaczerpnięty z Tibia.pl):
    W(x) = 50/3*x^3 - 100*x^2 + 850/3*x - 200
    Przekształcony do Object Pascal i osadzony w funkcji, wygląda następująco:
    function ExpToLevel(Level: Integer): Integer;
    begin
    Result := Round(50/3*Power(Level,3) - 100*Power(Level,2) + 850/3*Level - 200);
    end;

    function CalculateLeftExp: string;
    var
    Tibia: Cardinal;
    AExp, ALevel, ANextLevelExp, AExpLeft: Cardinal;begin
    {Obliczamy zawartość zmiennych}
    Tibia := FindWindow('TibiaClient',nil);
    AExp := MemoryReadInt(Tibia,PLAYER_EXP,Len,Rdd);
    ALevel := MemoryReadInt(Tibia,PLAYER_LEVEL,Len,Rdd);
    ANextLevelExp := ExpToLevel(ALevel+1);
    AExpLeft := ANextLevelExp-AExp;
    {Formatujemy wyjściowy ciąg tekstowy}
    Result := Format('Level: %d. Ilość exp.: %d. Pozostały exp. do levelu %d: %d.',[ALevel,AExp,ALevel+1,AExpLeft]);
    end;
    Funkcje te należy umieścić gdzieś w sekcji implementation. W ten spos&#243;b mamy już funkcję formatującą komunikat, pozostało go wyświetlić.
    Umieść drugi przycisk, kliknij go podw&#243;jnie i uzupełnij:

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    ShowMessage(CalculateLeftExp);
    end;


    5. Komunikaty statusu
    Wyskakujące okienko to nie był najlepszy pomysł. Takie rozwiązanie jest niewygodne i przeszkadza w grze. Grając w Tibię, często można zaobserwować komunikaty pojawiające się na dole ekranu gry, a nad konsolą. Pokażę, jak umieścić tam własne komunikaty.

    W sekcji implementation umieść procedurę:

    procedure SetStatusText(Text: string; Time: Integer);
    var
    Written: LongWord;
    I: Byte;
    Tibia: Cardinal;
    begin
    Tibia := FindWindow('TibiaClient',nil);
    for I := 0 to 255 do
    MemoryWriteInt(Tibia,STATUS_TEXT+I,$00,1,Written);
    MemoryWriteStr(Tibia,STATUS_TEXT,Text,Length(Text) ,Written);
    MemoryWriteInt(Tibia,STATUS_TIMER,Time*10,4,Writte n);
    end;
    Procedura czyści bufor tekstu statusu, a następnie umieszcza nowy tekst i wyświetla go przez podaną ilość sekund. Zmieńmy więc procedurę Button2Click:
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    SetStatusText(CalculateLeftExp,10);
    end;
    6. Globalny hook na klawiaturę
    Co prawda komunikat nie jest wyświetlany już w osobnym oknie, ale...
    Sprawdzanie stanu expa wywołujemy dalej za pomocą przycisku. Czas wziąć się za hotkeye.

    Sekcję var uzupełniamy:
    var
    Form1: TForm1;
    HookID: HHOOK;

    type
    PKbdDllHookStruct = ^TKbdDllHookStruct;
    TKbdDllHookStruct = record
    vkCode,
    ScanCode,
    Flags,
    Time,
    dwExtraInfo: Integer;
    end;

    const
    WH_KEYBOARD_LL = 13;
    Skoro zadeklarowaliśmy już odpowiednie typy i stałe, czas założyć hooka.
    Poniższe funkcje wklejamy gdzieś w sekcji implementation (z 4programmers):
    function LLKeyHookFunc(HookCode: Integer; KeyCode: wParam; KStrokeInfo: lParam): LResult; stdcall;
    var
    Struct: PKbdDllHookStruct;
    begin
    Struct :=
    Ptr(KStrokeInfo);
    if (HookCode >= 0) then
    begin
    {Pojedyncza funkcja}
    if
    (Struct.vkCode = VK_F7) and(GetAsyncKeyState(VK_CONTROL)<-32766) then begin
    SetStatusText(CalculateLeftExp,10);
    end;
    end;
    {Uwaga! POPRAWIONE}
    Result := CallNextHookEx
    (HookID, HookCode, KeyCode, KStrokeInfo);
    end;
    procedure LockSystem;
    begin
    HookID := SetWindowsHookEx (WH_KEYBOARD_LL, @LLKeyHookFunc, hInstance, 0);
    end;

    procedure UnLockSystem;
    begin
    UnHookWindowsHookEx (HookID);
    end;
    Klikamy podw&#243;jnie formę w pustym miejscu, i uzupełniamy:
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    LockSystem;
    end;
    Przechodzimy do zdarzenia OnClose, klikając w Object Inspectorze zakładkę Events, znajdując linijkę OnClose, i klikając ją podw&#243;jnie. W otwartej sekcji kodu uzupełniamy:
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    UnlockSystem;
    end;
    Wciskamy Ctrl+S, a potem F9, aby uruchomić program. Kombinacją Ctrl+F7 wyświetlimy pozostały exp do levelu.

    7. Czytanie mapy
    Ta technika przyda nam się przy robieniu bota do autofishingu. Będziemy musieli odczytać, w jakich polach znajduje się woda (chyba nie będziemy łowić trawy).

    Przedstawiony przeze mnie spos&#243;b został przetłumaczony (z C++ na Pascal/z angielskiego na polski) tylko i wyłącznie we własnym zakresie. Tekst źr&#243;dłowy (po angielsku / w C++) by Vanitas: http://71.18.84.43/articles/ta_art_mapread.html

    Struktury rekord&#243;w w powyższym dokumencie są w C++. Przetłumaczone na Pascal wyglądają tak:
    type
    TObjectData = record
    objectId: integer;
    data1: integer;
    data2: integer;
    end;

    TTileDef = record
    stackedObjectCount: integer;
    objectData: array[0..12] of TObjectData;
    padding1: integer;
    padding2: integer;
    end;

    TTileDefMap = array[0..7,0..13,0..17] of TTileDef;

    var
    TDMap: TTileDefMap;
    Skoro mamy już strukturę danych, trzeba ją wczytać z pamięci Tibii. Adres wskaźnika na mapę to w Tibii 7.8 $606038. Niestety, funkcje z unitu Mem.pas nie przewidują wczytywania struktur. Jednak bazując na nich, napiszemy własną (poprawioną).
    function MemoryReadMap(var Readed: DWORD): TTileDefMap;
    var PID: Integer;
    PHandle: Integer;
    Buff: TTileDefMap;
    WindowHandle: hWnd;
    Address: Integer;
    Length, Rdd: LongWord;
    begin
    Length := SizeOf(Result);
    WindowHandle := FindWindow('TibiaClient',nil);
    Address := $606038;
    Address := MemoryReadInt(WindowHandle,Address,4,Rdd);
    if WindowHandle = 0 then Exit;
    GetWindowThreadProcessId(WindowHandle, @PID);
    PHandle := OpenProcess(PROCESS_VM_READ, False, PID);
    if PHandle = 0 then Exit;
    ReadProcessMemory(PHandle, Pointer(Address), @Buff, Length, Readed);
    Result := (Buff);
    CloseHandle(PHandle);
    end;
    W ten spos&#243;b mapa powinna być wczytana do pamięci w postaci tr&#243;jwymiarowej tablicy. Tą jednak zostawimy na potem.

    8. Nick postaci
    Nick postaci nie znajduje się na żadnym konkretnym miejscu. Jest on umieszczony gdzieś na battleliście. Poprzedzają go 4 bajty identyfikatora postaci. Te 4 bajty są r&#243;wnież pod adresem $5F7930. Skanując pamięć od $5F7994 do $5FD754, można znaleźć r&#243;wnież nick postaci.

    Ważna informacja!
    Niestety, w programie mogą pojawić się błędy (gł&#243;wnie w adresach pamięci), gdyż ta sprawa nie jest dokładnie udokumentowana. Nie odpowiadam za błędy i zmiany w kliencie, kt&#243;rych dokonujesz na własną odpowiedzialność.

    Jeżeli znajdziesz jakieś błędy, to proszę, dokładnie je opisz i wyślij do mnie na PW.


    Ważne!!!
    PS. Jako że nie dysponuję już plikiem Mem.pas, zamiast tego używamy poniższej funkcji MemoryReadInt

    function MemoryReadInt(Address: Cardinal): Longword;
    var
    ProcId: Cardinal;
    tProc: THandle;
    NBR: Cardinal;
    value: Longword;
    begin
    GetWindowThreadProcessId(FindWindow('TibiaClient', Nil), @ProcId);
    tProc:= OpenProcess(PROCESS_ALL_ACCESS, False, ProcId);
    ReadProcessMemory(tProc, Ptr($605A04), @value, 4, NBR);
    CloseHandle(tProc);
    Result := Value;
    end;
    Ostatnio zmieniony przez Zyllen Xovade : 14-12-2006, 16:15

  2. #2
    Lemef

    Domyślny

    Bardzo dobry artykuł napisał byś jeszcze bota " rybaka" ?? Który łowi ryby ?? Sam tak jak jest w TeBeI.

  3. Reklama
  4. #3

    Data rejestracji
    2005
    Posty
    134
    Siła reputacji
    19

    Domyślny

    zastanawiałem się gdzie ten artyk&#243;ł wsiąk ;]
    jak zrobisz artyk&#243;ł do
    2. Pakiety i protok&#243;ł Tibii (packet.dll)
    to bendzie wszystko co potrzebne do zrobienia bota porunywalnego do TBI a dla mondrzejszych do TA LUB NG ^^
    walnij potem source :] całego bota jak byś m&#243;gł.
    prosze byś podał pakiety ;p
    PRZYKLEIĆ K.U.R.W.A MAĆ :]
    Ostatnio zmieniony przez świrus : 19-08-2006, 13:35

  5. #4
    Boryna

    Domyślny Bardzo dobre!

    Bardzo dobry artykuł! Opisuje wiele rzeczy jakie przydadzą się początkującemu tw&#243;rcy bot&#243;w. Kontynuuj go,bo dobrze ci idzie pisanie artykuł&#243;w o programowaniu. Wiele osobom szczeg&#243;lnie przyda się pkt. 2 o wykorzystaniu biblioteki packet.dll. I mam pytanie czy opiszesz też inne możliwości wysyłania pakiet&#243;w np. używając MCH(MadCodeHook)? Og&#243;lnie poradnik bardzo dobry i mam nadzieję że zmniejszy ilość pytań "jak napisać własnego bota?"

  6. #5
    Avatar Gniew_Mroku
    Data rejestracji
    2005
    Posty
    92
    Siła reputacji
    20

    Domyślny

    Ja byłbym bardzo wdzięczny za jakiś dobry opis kodowania/dekodowania pakiet&#243;w tibii. Zaś sam poradnik to po prostu miodzio.

    EDIT:
    Po sprawdzeniu część rzeczy nie działa. Podałeś zły adres nicku postaci. Ponadto dałeś wycinki bez zadeklarowanych zmiennych, więc jeśli ktoś się na tym nie zna to nie zrobi tego. ;/

    Pozatym spleen coś ciągle siedzi w tym temacie. Albo chce się poduczyć( ;p ), albo pisze posta na 2000 lini.
    Ostatnio zmieniony przez Gniew_Mroku : 19-08-2006, 17:24

  7. #6

    Data rejestracji
    2006
    Położenie
    Gliwice
    Wiek
    32
    Posty
    12
    Siła reputacji
    0

    Domyślny

    Postaram się opisać wszystko, co może się przydać podczas tworzenia bota. Niestety, nie jestem chodzącą encyklopedią, więc tworzenie arta + klejenie go z różnych źródeł może potrwać.

  8. #7

    Data rejestracji
    2005
    Posty
    134
    Siła reputacji
    19

    Domyślny

    Cytuj Zyllen Xovade napisał
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Postaram się opisać wszystko, co może się przydać podczas tworzenia bota. Niestety, nie jestem chodzącą encyklopedią, więc tworzenie arta + klejenie go z różnych źródeł może potrwać.
    uhm a kto jest =]
    mam pytanie czy dodasz jeszcze coś ?
    czy tylko to co masz w spisie + planowane tera ?

  9. #8
    Avatar Zaq
    Data rejestracji
    2006
    Posty
    59
    Siła reputacji
    19

    Domyślny

    o.O super :)
    a gm w jaki spos&#243;w moze wykryć ze używam bota?

    skąd complikator wziasc?
    12:30 Darth Reyhan [16]: hunted


  10. #9
    konto usunięte

    Domyślny

    Świetnie thx !! :D może kiedyś się pobawię i zrobię to :p

  11. #10

    Data rejestracji
    2005
    Posty
    134
    Siła reputacji
    19

    Domyślny

    Cytuj Zaq napisał
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    o.O super :)
    a gm w jaki sposów moze wykryć ze używam bota?

    skąd complikator wziasc?
    tylko po zachowaniu :P
    http://www.lazarus.freepascal.org/
    http://www.borland.pl/download/personal.shtml

  12. #11

    Data rejestracji
    2006
    Położenie
    Gliwice
    Wiek
    32
    Posty
    12
    Siła reputacji
    0

    Domyślny

    Nie complicator, tylko kompilator :)

  13. #12
    Avatar w8w8w8
    Data rejestracji
    2006
    Posty
    2,263
    Siła reputacji
    20

    Domyślny

    Cytuj Zyllen Xovade napisał
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Nie complicator, tylko kompilator :)
    naprawde to taki duzy blad ? mogl zostac .
    a mnie sie poradnik podoba ale nie znam podstaw delphi ;(

  14. #13
    konto usunięte

    Domyślny

    Jak chcecie mogę zrobić podobny w C# albo C++, ogolnie całkiem nieźle.
    Zyllen Xovade masz wszystkie adresy pamięci?

  15. #14

    Data rejestracji
    2006
    Położenie
    Gliwice
    Wiek
    32
    Posty
    12
    Siła reputacji
    0

    Domyślny

    No znam większość, poza mapą, ale pracuję i stale obserwuję pamięć Tibii. Kto wie jak rozpracować mapę (tylko bez artykułu Vanitasa), stawiam zgrzewke browara w Gliwicach.

    EDIT:
    Masz tu listę z tprogramming:


    Skills, hp, mana etc.(generally the skills window)
    Adr_Exp = $5F7924;
    Adr_Lvl = $5F7920;
    Adr_LvlPerc = $5F7918;
    Adr_Hp = $5F792C;
    Adr_HpMax = $ 5F7928;
    Adr_Mana = $5F7910;
    Adr_ManaMax = $5F790C;
    Adr_Soul = $5F7908;
    Adr_Stamina = $ 5F7904; //seconds
    Adr_Cap = $ 5F7900;
    Adr_MlvlLvl = $5F791C;
    Adr_MlvlPerc = $5F7914;
    Adr_FistLvl = $5F78D8;
    Adr_FistPerc = $;
    Adr_ClubLvl = $5F78DC;
    Adr_ClubPerc = $;
    Adr_SwordLvl = $5F78E0;
    Adr_SwordPerc = $;
    Adr_AxeLvl = $5F78E4;
    Adr_AxePerc = $;
    Adr_DistLvl = $5F78E8;
    Adr_DistPerc = $;
    Adr_ShieldLvl = $5F78EC;
    Adr_ShieldPerc = $;
    Adr_FishLvl = $5F78F0;
    Adr_FishPerc = $;

    Distances
    Dist_Char = $A0;
    Dist_LightSize = $74;
    Dist_LightColor = $78;
    Dist_MapTitle = 172;
    Dist_MapCount = 0;
    Dist_MapTitleId = 4;
    Dist_MapObjectId = 16;
    Dist_MapObjectData = 20;
    Dist_MapObjectDataEx = 28;
    Dist_Container = 492;
    Dist_ContainerItem = 12;
    Dist_ContainerID = 4;
    Dist_ContainerName = 16;
    Dist_ConatinerVolume = 48; //Maximum of items in container
    Dist_ContainerAmount = 56; //Current items in container
    Dist_ContainerItemID = 60;
    Dist_ContainerItemCount = 64; //Stacked item count
    Dist_CreatureID = -4;
    Dist_CreatureType = -1;
    Dist_CreatureName = 0;
    Dist_CreatureX = 32;
    Dist_CreatureY = 36;
    Dist_CreatureZ = 40;
    Dist_CreatureIsWalking = 72;
    Dist_CreatureDirection = 76;
    Dist_CreatureOutfit = 92;
    Dist_CreatureOutfitHead = 96;
    Dist_CreatureOutfitBody = 100;
    Dist_CreatureOutfitLegs = 104;
    Dist_CreatureOutfitFeet = 108;
    Dist_CreatureOutfitAddon = 112;
    Dist_CreatureLight = 116;
    Dist_CreatureLightColor = 120;
    Dist_CreatureHpBar = 132;
    Dist_CreatureWalkSpeed = 136;
    Dist_CreatureIsVisible = 140;
    Dist_CreatureScull = 144;
    Dist_CreatureParty = 148;



    Containers, slots etc
    Adr_ContainerBegin = $600200;
    Adr_SlotHead = $600178;
    Adr_SlotNecklace = $600184;
    Adr_SlotBackpack = $600190;
    Adr_SlotArmor = $60019C;
    Adr_SlotRight = $6001A8;
    Adr_SlotLeft = $6001B4;
    Adr_SlotLegs = $6001C0;
    Adr_SlotFeet = $6001CC;
    Adr_SlotRing = $6001D8;
    Adr_SlotAmmo = $6001E4;
    Adr_SlotRightCount = $6001AC;
    Adr_SlotLeftCount = $6001B8;
    Adr_SlotAmmoCount = $6001E8;

    Values
    Val_ScullNone = 0
    Val_ScullYellow = 1
    Val_ScullGreen = 2
    Val_ScullWhite = 3
    Val_ScullRed = 4
    Val_PartyNone = 0
    Val_PartyInviter = 1
    Val_PartyInvitee = 2
    Val_PartyMember = 3
    Val_PartyLeader = 4
    Val_CreatureTypePlayer = 0
    Val_CreatureTypeNpc = 64
    Val_SexMale = 0
    Val_SexFemale = 1
    Val_SexCreature = 2
    Val_FlagPoison = 1
    Val_FlagFire = 2
    Val_FlagEnergy = 4
    Val_FlagDrunk = 8
    Val_FlagManaShield = 16
    Val_FlagParalyze = 32
    Val_FlagHaste = 64
    Val_FlagSwords = 128
    Val_ConnectionOnline = 8
    Val_ConnectionOffline = 0
    Val_OutfitColorRed = 94
    Val_OutfitColorOrange = 77
    Val_OutfitColorYellow = 79
    Val_OutfitColorGreen = 82
    Val_OutfitColorBlue = 88
    Val_OutfitColorPurpule = 90
    Val_OutfitColorBrown = 116
    Val_OutfitColorBlack = 114
    Val_OutfitColorWhite = 0
    Val_OutfitColorPink = 91
    Val_OutfitColorGrey = 57
    Val_OutfitColorPeach = 1
    Val_OutfitAdd1 = 1
    Val_OutfitAdd2 = 2
    Val_OutfitAddBoth = 3
    Val_OutfitGm = 75
    Val_MouseNone = 0
    Val_MouseLeft = 1
    Val_MouseRight = 2
    Val_MouseInspect = 3
    Val_MouseDrag = 6
    Val_MouseUsing = 7
    Val_MouseHelp = 10

    Outfit values
    Outfit_MaleDruid = 128
    Outfit_MalePaladin = 129
    Outfit_MaleSorcerer = 130
    Outfit_MaleKnight = 131
    Outfit_MalePremium1 = 132
    Outfit_MalePremium2 = 133
    Outfit_MalePremium3 = 134
    Outfit_MalePremium4 = 143
    Outfit_MalePremium5 = 145
    Outfit_MalePremium6 = 146
    Outfit_MalePremium7 = 151
    Outfit_MalePremium8 = 153
    Outfit_FemaleDruid = 136
    Outfit_FemalePaladin = 137
    Outfit_FemaleSorcerer = 138
    Outfit_FemaleKnight = 139
    Outfit_FemalePremium1 = 140
    Outfit_FemalePremium2 = 141
    Outfit_FemalePremium3 = 142
    Outfit_FemalePremium4 = 144
    Outfit_FemalePremium5 = 147
    Outfit_FemalePremium6 = 148
    Outfit_FemalePremium7 = 149
    Outfit_FemalePremium8 = 150
    Outfit_FemalePremium9 = 152
    Outfit_FemalePremium10 = 154
    Outfit_FemalePremium11 = 155
    Outfit_FemalePremium12 = 156
    Outfit_FemalePremium13 = 157
    Outfit_FemalePremium14 = 158
    Outfit_OtherElf = 159
    Outfit_OtherDwarf = 160
    Outfit_OtherFerumbras = 229


    Map, x, y, z
    Adr_MapPointer = $606038;
    Adr_PlayerX = $602B08;
    Adr_PlayerY = $602B04;
    Adr_PlayerZ = $602B00;
    Adr_PlayerGotoX = $74DBAC;
    Adr_PlayerGotoY = $74DBA8;
    Adr_PlayerGotoZ = $74DBA4;

    Others
    Adr_BLStart = $5F7994;
    Adr_BLEnd = $5FD754;
    Adr_PlayerFlags = $5F78B8;
    Adr_FirstMemAdres = $5F7994;
    Adr_PlayerID = $5F7930;
    Adr_MouseID = $74DBD0;
    Adr_SbText = $74F1D0; //Adress of the status bar
    Adr_SbTimer = $74F1CC ;
    Adr_IsOnline = $74DB70;
    Adr_LastUsedID = $74DC18;
    Adr_TargetID = $5F78FC;
    Adr_TargetBlistID = $5F78F4;
    Adr_TargetType = $5F78FF;
    Adr_TargetBlistType = $5F78F7;
    Adr_LeftClickID = $74DC0C;
    Adr_LeftClickCount = $74DC10;
    Adr_LeftClickZ = $74DBA4;
    Adr_SeeClickID = $74DC18;
    Adr_SeeClickCount = $74DC1C;
    Adr_SeeClickZ = $74DB78;
    Adr_RevealNames = $4D5A5D;
    Adr_RevealNamesEx = $4D5A67;
    Adr_XteaKey = $74B1A0;

  16. #15
    konto usunięte

    Domyślny

    No właśnie ja też mam :) myślałem, że może Ci czegoś brakuje.
    Widze ze nie ;)

    Pozdrawiam
    PS. nad mapa narazie sie nie zastanawialem... wiem że może pomoc zmienne PlayerGotoX PlayerGotoY itd...

    Na razie jestem nad optymalizacją kodu (pisze w C#). Gupie toto :)

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. [Anti-Bot] legerian.net [Własny klient] Real map
    Przez Seyaelo w dziale Tematy serwerów
    Odpowiedzi: 33
    Ostatni post: 11-08-2014, 14:20
  2. [Własny klient][Zapowiedz I] Eternal Kingdoms - Powrót!
    Przez Transerion w dziale Tematy serwerów
    Odpowiedzi: 15
    Ostatni post: 08-06-2012, 13:33
  3. [8.0(własny)]Dragon Ball Power OTS
    Przez DragonBallPower w dziale Tematy serwerów
    Odpowiedzi: 44
    Ostatni post: 26-06-2011, 19:20
  4. [Własny Klient] Czy podoba Ci się ten pomysł?
    Przez konto usunięte w dziale Open Tibia Server
    Odpowiedzi: 10
    Ostatni post: 28-04-2010, 17:29
  5. [Własny Klient]Co myślisz o tym pomyśle?
    Przez Maciek Niepokonany w dziale Open Tibia Server
    Odpowiedzi: 2
    Ostatni post: 27-04-2010, 23:04

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •