Nie mam BL_Size, BL_Dist_Id i BL_Dist_Name podal bys adresy? Current nie trzeba nigdzie definiowac tak?
~~[200]POST~~
Wersja do druku
Nie mam BL_Size, BL_Dist_Id i BL_Dist_Name podal bys adresy? Current nie trzeba nigdzie definiowac tak?
~~[200]POST~~
idź najpierw naucz się programować a potem bież się za boty bo noobisz...
current to ma być int
a addresy masz w tibi api
A ja tak sobie myślę, czy bot obliczający szczegółowo zdobywany exp (średnio, ile do następnego levela itd.), jest przez CipSoft zakazany? Chodzi o to, że nie ingerowałby poważnie w klienta (LH, Cave Bot itd.), tylko odczytywał potrzebne dane.
Witam wszystkich
Mam pytanie.
Czy wiecie jak wyświetlić kompletne okno Battle(wszystkie pozycje-Nicki...)
w komponencie np.: TMemo razem z paskiem życia „ %”.
Prosił bym o kompletny kod.
Macie dziewki
Kod:unit Addresses;
interface
const
BattleList_Start = $637CE0;
BattleList_StepCreatures = $A8;
BattleList_MaxCreatures = 250;
BattleList_End = BattleList_Start + (BattleList_StepCreatures * BattleList_MaxCreatures);
Client_StartTime = $8034E8;
Client_XTeaKey = $7BC6E4;
Client_SocketStruct = $7BC6B8;
Client_RecvPointer = $5B25E4;
Client_SendPointer = $5B2610;
Client_FrameRatePointer = $7C07CC;
Client_FrameRateCurrentOffset = $60;
Client_FrameRateLimitOffset = $58;
Client_MultiClient = $5079B4;
Client_Status = $7BFC84;
Client_SafeMode = $7BCB0C;
Client_FollowMode = Client_SafeMode + 4;
Client_AttackMode = Client_FollowMode + 4;
Client_ActionState = $7BFCE4;
Client_ActionStateFreezer = $518F90;
Client_LastMSGText = $789CF8;
Client_LastMSGAuthor = Client_LastMSGText - $28;
Client_StatusbarText = $803508;
Client_StatusbarTime = Client_StatusbarText - 4;
Client_ClickId = $7BFD24;
Client_ClickCount = Client_ClickId + 4;
Client_ClickZ = Client_ClickId - $68;
Client_SeeId = Client_ClickId + 12;
Client_SeeCount = Client_SeeId + 4;
Client_SeeZ = Client_SeeId - $68;
Client_ClickContextMenuItemId = $7BFD30;
//Client_ClickContextMenuItemGroundId = ?
Client_ClickContextMenuCreatureId = $7BFD34;
Client_LoginServerStart = $7B7620;
Client_StepLoginServer = 112;
Client_DistancePort = 100;
Client_MaxLoginServers = 10;
Client_RSA = $5B2980;
Client_LoginCharList = $7BFC38;
Client_LoginCharListLength = $7BFC3C;
Client_LoginSelectedChar = $7BFC34;
Client_GameWindowRectPointer = $66F080;
Client_GameWindowBar = $8034F8;
Client_DatPointer = $7BC704;
Client_EventTriggerPointer = $51AA90;
Client_DialogPointer = $6723EC;
Client_DialogLeft = $14;
Client_DialogTop = $18;
Client_DialogWidth = $1C;
Client_DialogHeight = $20;
Client_DialogCaption = $50;
Client_LastRcvPacket = $7B7E98;
Client_DecryptCall = $45A775;
Client_LoginAccountNum = 0;
Client_LoginPassword = $7BFC40;
Client_LoginAccount = Client_LoginPassword + 32;
Client_LoginPatch = 0;
Client_LoginPatch2 = 0;
// Client_LoginPatchOrig = new byte[] { $E8, $0D, $1D, $09, $00 };
// Client_LoginPatchOrig2 = new byte[] { $E8, $C8, $15, $09, $00 };
Client_ParserFunc = $45A740;
Client_GetNextPacketCall = $45A775;
Client_RecvStream = $7BC6D4;
Container_Start = $66FB38;
Container_StepContainer = 492;
Container_StepSlot = 12;
Container_MaxContainers = 16;
Container_MaxStack = 100;
Container_DistanceIsOpen = 0;
Container_DistanceId = 4;
Container_DistanceName = 16;
Container_DistanceVolume = 48;
Container_DistanceAmount = 56;
Container_DistanceItemId = 60;
Container_DistanceItemCount = 64;
Container_End = Container_Start + (Container_MaxContainers * Container_StepContainer);
ContextMenus_AddContextMenuPtr = $450C90;
ContextMenus_OnClickContextMenuPtr = $44D870;
ContextMenus_OnClickContextMenuVf = $5B7878;
ContextMenus_AddSetOutfitContextMenu = $451BAC;
ContextMenus_AddPartyActionContextMenu = $451BFD;
ContextMenus_AddCopyNameContextMenu = $451C14;
ContextMenus_AddTradeWithContextMenu = $451839;
ContextMenus_AddLookContextMenu = $4516EF;
Creature_DistanceId = 0;
Creature_DistanceType = 3;
Creature_DistanceName = 4;
Creature_DistanceX = 36;
Creature_DistanceY = 40;
Creature_DistanceZ = 44;
Creature_DistanceScreenOffsetHoriz = 48;
Creature_DistanceScreenOffsetVert = 52;
Creature_DistanceIsWalking = 76;
Creature_DistanceWalkSpeed = 140;
Creature_DistanceDirection = 80;
Creature_DistanceIsVisible = 144;
Creature_DistanceBlackSquare = 132;
Creature_DistanceLight = 120;
Creature_DistanceLightColor = 124;
Creature_DistanceHPBar = 136;
Creature_DistanceSkull = 148;
Creature_DistanceParty = 152;
Creature_DistanceWarIcon = 160;
Creature_DistanceIsBlocking = 164;
Creature_DistanceOutfit = 96;
Creature_DistanceColorHead = 100;
Creature_DistanceColorBody = 104;
Creature_DistanceColorLegs = 108;
Creature_DistanceColorFeet = 112;
Creature_DistanceAddon = 116;
DatItem_StepItems = $4C;
DatItem_Width = 0;
DatItem_Height = 4;
DatItem_MaxSizeInPixels = 8;
DatItem_Layers = 12;
DatItem_PatternX = 16;
DatItem_PatternY = 20;
DatItem_PatternDepth = 24;
DatItem_Phase = 28;
DatItem_Sprite = 32;
DatItem_Flags = 36;
DatItem_CanLookAt = 0;
DatItem_WalkSpeed = 40;
DatItem_TextLimit = 44;
DatItem_LightRadius = 48;
DatItem_LightColor = 52;
DatItem_ShiftX = 56;
DatItem_ShiftY = 60;
DatItem_WalkHeight = 64;
DatItem_Automap = 68;
DatItem_LensHelp = 72;
DrawItem_DrawItemFunc = $4B1B30;
DrawSkin_DrawSkinFunc = $4B57A0;
Hotkey_SendAutomaticallyStart = $7BCD08;
Hotkey_SendAutomaticallyStep = $01;
Hotkey_TextStart = $7BCD30;
Hotkey_TextStep = $100;
Hotkey_ObjectStart = $7BCC78;
Hotkey_ObjectStep = $04;
Hotkey_ObjectUseTypeStart = $7BCB58;
Hotkey_ObjectUseTypeStep = $04;
Hotkey_MaxHotkeys = 36;
Map_MapPointer = $676F40;
Map_StepTile = 168;
Map_StepTileObject = 12;
Map_DistanceTileObjectCount = 0;
Map_DistanceTileObjects = 4;
Map_DistanceObjectId = 0;
Map_DistanceObjectData = 4;
Map_DistanceObjectDataEx = 8;
Map_MaxTileObjects = 10;
Map_MaxX = 18;
Map_MaxY = 14;
Map_MaxZ = 8;
Map_MaxTiles = 2016;
Map_ZAxisDefault = 7;
Map_NameSpy1 = $4EE519;
Map_NameSpy2 = $4EE51D;
Map_NameSpy1Default = 19061;
Map_NameSpy2Default = 16501;
Map_LevelSpy1 = $4F038A;
Map_LevelSpy2 = $4F048F;
Map_LevelSpy3 = $4F0510;
Map_LevelSpyPtr = $66F080;
Map_LevelSpyAdd1 = 28;
Map_LevelSpyAdd2 = $2A88;
Map_FullLightNop = $4E6C29;
Map_FullLightAdr = $4E6C2C;
// Map_FullLightNopDefault = new byte[] { $7E, $05 };
// Map_FullLightNopEdited = new byte[] { $90, $90 };
Map_FullLightAdrDefault = $80;
Map_FullLightAdrEdited = $FF;
Player_Experience = $637C4C;
Player_Flags = Player_Experience - 108;
Player_Id = Player_Experience + 12;
Player_Health = Player_Experience + 8;
Player_HealthMax = Player_Experience + 4;
Player_Level = Player_Experience - 4;
Player_MagicLevel = Player_Experience - 8;
Player_LevelPercent = Player_Experience - 12;
Player_MagicLevelPercent = Player_Experience - 16;
Player_Mana = Player_Experience - 20;
Player_ManaMax = Player_Experience - 24;
Player_Soul = Player_Experience - 28;
Player_Stamina = Player_Experience - 32;
Player_Capacity = Player_Experience - 36;
Player_FistPercent = $637BFC;
Player_ClubPercent = Player_FistPercent + 4;
Player_SwordPercent = Player_FistPercent + 8;
Player_AxePercent = Player_FistPercent + 12;
Player_DistancePercent = Player_FistPercent + 16;
Player_ShieldingPercent = Player_FistPercent + 20;
Player_FishingPercent = Player_FistPercent + 24;
Player_Fist = Player_FistPercent + 28;
Player_Club = Player_FistPercent + 32;
Player_Sword = Player_FistPercent + 36;
Player_Axe = Player_FistPercent + 40;
Player_Distance = Player_FistPercent + 44;
Player_Shielding = Player_FistPercent + 48;
Player_Fishing = Player_FistPercent + 52;
Player_SlotHead = $66FAC0;
Player_SlotNeck = Player_SlotHead + 12;
Player_SlotBackpack = Player_SlotHead + 24;
Player_SlotArmor = Player_SlotHead + 36;
Player_SlotRight = Player_SlotHead + 48;
Player_SlotLeft = Player_SlotHead + 60;
Player_SlotLegs = Player_SlotHead + 72;
Player_SlotFeet = Player_SlotHead + 84;
Player_SlotRing = Player_SlotHead + 96;
Player_SlotAmmo = Player_SlotHead + 108;
Player_MaxSlots = 11;
Player_DistanceSlotCount = 4;
Player_CurrentTileToGo = $637C60;
Player_TilesToGo = $637C64;
Player_GoToX = Player_Experience + 80;
Player_GoToY = Player_GoToX - 4;
Player_GoToZ = Player_GoToX - 8;
Player_RedSquare = $637C24;
Player_GreenSquare = Player_RedSquare - 4;
Player_WhiteSquare = Player_GreenSquare - 8;
Player_AccessN = 0;
Player_AccessS = 0;
Player_TargetId = Player_RedSquare;
Player_TargetBattlelistId = Player_TargetId - 8;
Player_TargetBattlelistType = Player_TargetId - 5;
Player_TargetType = Player_TargetId + 3;
Player_Z = $672428;
Player_X = Player_Z+8;
Player_Y = Player_Z+4;
Player_AttackCount = $635800;
Player_FollowCount = Player_AttackCount + $20;
TextDisplay_PrintName = $4F14F3;
TextDisplay_PrintFPS = $458778;
TextDisplay_ShowFPS = $6358FC;
TextDisplay_PrintTextFunc = $4B0F70;
TextDisplay_NopFPS = $4586B4;
Vip_Start = $635978;
Vip_StepPlayers = $2C;
Vip_MaxPlayers = 200;
Vip_DistanceId = 0;
Vip_DistanceName = 4;
Vip_DistanceStatus = 34;
Vip_DistanceIcon = 40;
Vip_End = Vip_Start + (Vip_StepPlayers * Vip_MaxPlayers);
implementation
end.
Nie strugaj kozaka bo jeszcze za chudy w uszach jesteś synek a skopiować adresy z TibiaApi potrafi nawet upośledzone umysłowo dziecko.
Battlelista w pamięci jest reprezentowana przez tablicę bajtów o stałym rozmiarze.
Każda kreatura ma przydzieloną stała ilość bajtów na informację takie jak Nick, ID, HP itp..
Cała sztuka polega na tym aby odczytać sobie całą battelist'e do jakiejś swojej zmiennej tablicowej, podzielić sobie ją na odpowiednie części i przelecieć po niej pętelką.
Załóżmy, że jedna kreatura to 160 bajtów a na całej battleliście znajduje się 250 kreatur.
Proste działanie matematyczne (160*250 = 40000) daje nam rozmiar całej battlelisty.
Teraz pętla może wyglądać tak
w ten sposób na końcu otrzymamy ładną tablicę wszystkich kreatur znajdujących się na battleliście, którą później możemy pokazać w jakiejś formatce.Kod:$n = 0;
for($i=0;$i<=40000;$i+=160)
{
$creature[n] = copy($battleist,$i+160); //jakaś funkcja, ktora do tablicy $creature skopiuje nam 160 bajtów z tablicy battleist
$n++;
// wyciągamy sobie poszczególne wartości wiedząc, że ID to 4 bajty, nick 32 i tak dalej i tak dalej i tak dalej.
}
Oczywiście można to trochę poszerzyć robiąc np klasę Creature, która w konstruktorze z otrzymanej tablicy bajtów będzie wyciągała informację i zapisywała je do odpowiednich pól.
(wszystkie liczby są oczywiście z dupy wzięte i miały służyć tylko do zademonstrowania samej logiki tak samo jak funkcje)
Masz racje miałem trochę gorszy dzień... Jakie addresy? Na tpforums prosiłem cie o pomoc z onclick w contextmenu ale sobie poradziłem starczyło dać konwersje na ;stdcall
Myślisz nie dam rady tego napisać? A poprawiać? Pewnie masz więcej doświadczenia ale uwierz jestem w stanie napisać tego bota.
Spróbuj uaktualnić addresy z confingu blackd może da rady