Kod :
const
// Player
PLAYER_HP_MAX = $613B68;
PLAYER_HP = $613B6C;
PLAYER_MANA = $613B50;
PLAYER_MANA_MAX = $613B4C;
PLAYER_STAMINA = $613B48;
PLAYER_CAP = $613B40;
PLAYER_EXP = $613B64;
PLAYER_LEVEL = $613B60;
PLAYER_MAGIC_LEVEL= $613B5C;
PLAYER_LEVEL_PERC= $613B58;
PLAYER_MAGIC_PERC= $613B54;
PLAYER_FIST= $613B18;
PLAYER_CLUB = $613B1C;
PLAYER_SWORD = $613B20;
PLAYER_AXE = $613B24;
PLAYER_DISTANCE = $613B28;
PLAYER_SHIELDING = $613B2C;
PLAYER_FISHING = $613B30;
PLAYER_FIST_PERC = $613AFC;
PLAYER_CLUB_PERC = $613B00;
PLAYER_SWORD_PERC= $613B04;
PLAYER_AXE_PERC= $613B08;
PLAYER_DISTANCE_PERC= $613B0C;
PLAYER_SHIELDING_PERC =$613B10;
PLAYER_FISHING_PERC= $613B14;
PLAYER_SOUL = $613B48;
PLAYER_ID = $613B70;
PLAYER_X = $61E9C8;
PLAYER_Y = $61E9C4;
PLAYER_Z = $61E9C0;
PLAYER_GOTO_X = $613BB4;
PLAYER_GOTO_Y = $613BB0;
PLAYER_GOTO_Z = $613BAC;
PLAYER_SLOT_HEAD= $61C058;
PLAYER_SLOT_NECKLACE= $61C06C;
PLAYER_SLOT_CONTAINER= $61C070;
PLAYER_SLOT_ARMOR= $61C07C;
PLAYER_SLOT_RIGHT= $61C078;
PLAYER_SLOT_LEFT= $61C094;
PLAYER_SLOT_LEGS= $61C0A0;
PLAYER_SLOT_FEET= $61C0AC;
PLAYER_SLOT_RING = $61C0B8;
PLAYER_SLOT_AMMO = $61C0C4;
PLAYER_SLOT_RIGHT_COUNT= $61C08C;
PLAYER_SLOT_LEFT_COUNT= $61C098;
PLAYER_SLOT_AMMO_COUNT= $61C0C8;
CURSOR = $76C328; {0 normal, 7 using (fish, rune)}
MAP_POINTER = $6234D8;
VIPLIST_BEGIN = $611890;
VIPLIST_END = $612128;
STATUS_TEXT_TIMER= $76D924;
STATUS_TEXT = $76D928;
LAST_MESSAGE = $76DB78;
BATTLELIST_START = $613BD0 + 4;
BATTLELIST_END = $619990;
CONTAINER_BEGIN = $61C0D0;
CONTAINER_END = $61DF90;
LEVELSPY_NOP = $4C4FC0;
LEVELSPY_ABOVE = $4C4FBC;
LEVELSPY_BELOW = $4C4FC4;
NAMESPY_NOP = $4DF469;
NAMESPY_NOP2 = $4DF473;
SEE_ID = $76C370;
SEE_COUNT= $76C374;
SEE_Z = $76C308;
CLICK_ID = $76C370;
CONNECTION= $76c2c8; {<0=not connected, 5=character just chosen, 6=login packet sent to gameserver, 8=connected to gameserver> }
TARGET_ID = $613B3C;
//Player_pass = NIE BEDZIE HACKOWNIA =(
//Player_acc = NIE BEDZIE HACKOWNIA =(
Adr_bp_Open = $61C0D0;
Adr_Bp = $61C0D0+60;
Dist_Bp = $1EC;
Dist_Item = 12;
//Distance
Distance_ID= -4;
Distance_Type = -1;
Distance_Name= -0;
Distance_X = 32;
Distance_Y = 36;
Distance_Z = 40;
Distance_HorizScreenOffset = 44;
Distance_VertScreenOffset = 48;
Distance_Chameleon = 60;
Distance_Chameleon2 = 92;
Distance_IsWalking = 72;
Distance_Direction = 76;
Distance_Outfit = 92;
Distance_OutfitHead = 96;
Distance_OutfitBody = 100;
Distance_OutfitLegs = 104;
Distance_OutfitFeet = 108;
Distance_OutfitAddon = 112;
Distance_LightColor1 = 121;
Distance_LightColor2 = 122;
Distance_LightPattern = 123;
Distance_BlackSquare = 128;
Distance_HP = 132;
Distance_WalkSpeed = 136;
Distance_IsVisible = 140;
Distance_Skull = 144;
Distance_Party = 148;
To są Poprawne (8.1 i przerobione na Delphi) Adresy i Distance'y. Zamiast tych z poradnika wklej te.
@ Xedyn:
Witam,
Bardzo dobry poradnik, ale zgubiłem się w punkcie z pakietami, jeśli dobrze zrozumiałem to Client przesyła pakiety do servera, a w pakietach są zawarte dane taki jak, poruszenie się w lewo/prawo/do góry/na dół, atakowanie potwora/playera itd. Tak? Jak ma nam pomóc biblioteka packets.dll??
Tak, to jest właśnie przykładowy pakiet, teraz musisz go uzupełnić odpowiednimi danymi (np. pozycja itemu który chcesz podnieść, id itemu), i do tego właśnie potrzebujesz packet.dll . i na przykład pakiet na podnoszenie itemów wygląda tak:
Kod :
procedure podnies(posx, posy, posz: integer; ID,count,bp:integer);
var
PacketBuffer: array [0..200] of byte;
ProcessID: Cardinal;
item: TItemBP;
begin
GetWindowThreadProcessId(FindWindow('TibiaClient',Nil), @ProcessID); //pobranie id procesu Tibii
item.bp := bp;
item.slot := 7;
PacketBuffer[0] := $0F;
PacketBuffer[1] := $00;
PacketBuffer[2] := $78;
CopyMemory(@PacketBuffer[3],@posx,2);
CopyMemory(@PacketBuffer[5],@posy,2);
PacketBuffer[7] := posz;
CopyMemory(@PacketBuffer[8],@ID, 2);
PacketBuffer[10] := $07;
PacketBuffer[11] := $FF;
PacketBuffer[12] := $FF;
PacketBuffer[13] := $39+item.bp;
PacketBuffer[14] := $00;
PacketBuffer[15] := item.slot;
PacketBuffer[16] := count;
SendPacket(ProcessID, @PacketBuffer, TRUE, FALSE); // tu program wysyla pakiet do programu z proces id = ProcessID
end;
I teraz aby podnieść jakiś item muszisz zrobić przykładowo jakiś button, i do niego dać
Kod :
podnies(posx, posy, posz,ID,count,bp);
Gdzie posx, posy, posz : pozycja itemu.
Gdzie id - id.
Gdzie count to liczba itemów do podniesienia.
Gdzie bp to numer bp(pierwszy otwarty to 1, drugi to 2, etc.).
Mam nadzieje, że pomogłem, chodź sam się tego dopiero zaczynam uczyć =)
btw, dobre forum =)
http://tpforums.org/forum/
@Next Edit:
Hej, skad mamy wiedziec ktore liczby w pakietach sa odpowiedzialne za polozenie, ktore za slowa, ktore za name itp?? Mogli byscie dac jakis 'kurs' uzupelniania pakietow etc. ?
Jak już mówiłem, zarejestruj się na tym forum, i tam masz taki topic:
http://tpforums.org/forum/showthread.php?t=1134
Tylko że wszystko niby ładnie i pięknie, ale trzeba to przerobić na Delphi, bo tamto jest w VB.
Jak będziesz miał kłopoty, napisz tutaj, postaram się pomóc. =o
Zakładki