private void AddOffsetData() { _initialStates.Clear(); #if SEARCH_INGAMESTATE //TODO: Push to ckeckbox if (!SearchInGameState(out var debugRectValueAddress)) { MessageBox.Show("Can't find debug rectangle state in poe (searching InGameState automatically)"); return; } //Use debugRectValueAddress in CheatEngine and check who writes to that address and save the offset //https://dl.dropboxusercontent.com/s/2h2f9l8wyna10k1/cheatengine-x86_64_2019-06-26_18-44-38.png var inGameStateAddr = debugRectValueAddress - 0x568; #else var inGameStateAddr = 0xA8F9242A0; #endif var inGameState = new StructureOffset("InGameState", null, maxStructSize: 0x1000, baseAddress: inGameStateAddr); _initialStates.Add(inGameState); inGameState.AddStringSearch("State Name", "InGameState"); inGameState.AddIntSearch("Camera.Width", 2048); inGameState.AddIntSearch("Camera.Height", 1099); #region UiRoot //Check/search child array to have 2 child var uiChildAmount = new PointersSearchStrategy(new ArrayLengthDoublePointerCompare(new DefaultValueCompare <int>(compareValue: 2)), checkVmt: false); //...have a pointer to itself var uiSelfReferencingPointer = new PointersSearchStrategy(new SelfReferencingStructPointerValueCompare(), checkVmt: true); //...search for Width/Height of UiRoot var uiRootWidthValueCompare = new FloatValueCompare(compareValue: 2560, tolerance: 1); var uiRootHeightValueCompare = new FloatValueCompare(compareValue: 1600, tolerance: 1); var uiWidthHeightReading = new MultipleFloatValueReader(uiRootWidthValueCompare, uiRootHeightValueCompare); var uiWidthHeightSearch = new ValueReaderStrategy(uiWidthHeightReading, alignment: 4); //...create multi value offset search strategy with this strategies. //Strategies should goes in order to expected offset order. If no- change the settings of DefaultMultiValueOffsetsFilter var uiMultiValueSearch = new MultiValueStrategy(new DefaultMultiValueOffsetsFilter(), uiSelfReferencingPointer, uiChildAmount, uiWidthHeightSearch); var uiRoot = new StructureOffset("Ui Root", new SubPointersSearchStrategy(uiMultiValueSearch, subStructSize: 0x300, checkVmt: true), maxStructSize: 0x300); uiRoot.Child.Add(new DataOffset("ChildPtr", uiChildAmount)); inGameState.Child.Add(uiRoot); uiRoot.AddFloatSearch("UiElement.Width", 2560, 1); uiRoot.AddFloatSearch("UiElement.Height", 1600, 1); uiRoot.AddFloatSearch("UiElement.Scale", 0.686875f, 0.02f); #endregion #region IngameData var inGameData = IngameDataOffsets(inGameState); #region Player #region ServerData ServerDataOffsets(inGameState); #endregion PlayerOffsets(inGameData); #endregion //var names = Entity.ReadComponentsNames(0x0000007021B47130); #endregion Nodes.Clear(); foreach (var structureOffset in _initialStates) { Nodes.Add(structureOffset); } }
private void ServerDataOffsets(StructureOffset inGameState) { var serverDataAdapter = new PointersSearchStrategy(new StringValueReader(new DefaultValueCompare <string>(LEAGUE_NAME))).Adapter(); var serverData = new StructureOffset("ServerData", new SubPointersSearchStrategy(serverDataAdapter, subStructSize: 0x8000, checkVmt: true), maxStructSize: 0x8000); inGameState.Child.Add(serverData); serverData.AddStringSearch("League Name", "Standard", true); //GUildName var serverDataGuildName = new PointersSearchStrategy(new StringValueReader(new DefaultValueCompare <string>("Stridemann's GUild"))).Adapter(); var serverDataGuildSearch = new SubPointersSearchStrategy(serverDataGuildName, subStructSize: 0x8, checkVmt: false); serverData.Child.Add(new DataOffset("Guild Name", serverDataGuildSearch)); //serverData.AddIntSearch("Azurite Amount", 0); //serverData.AddUShortSearch("Sulphite Amount", 0); var inventId = new ValueReaderStrategy(new IntValueReader(new DefaultValueCompare <int>(1)), 4); var inventId2 = new ValueReaderStrategy(new IntValueReader(new DefaultValueCompare <int>(2)), 4); var inventRows = new ValueReaderStrategy(new IntValueReader(new DefaultValueCompare <int>(5)), 4); var inventCols = new ValueReaderStrategy(new IntValueReader(new DefaultValueCompare <int>(12)), 4); var inventoriesMultiValueSearch = new MultiValueStrategy(new DefaultMultiValueOffsetsFilter(), inventId, new SubPointersSearchStrategy(inventRows.Adapter(), 0x100, false), new SubPointersSearchStrategy(inventCols.Adapter(), 0x100, false), inventId2 ); var inventoryHolderSearch = new SubPointersSearchStrategy(inventoriesMultiValueSearch, 0x100, false); var playerInventories = new StructureOffset("PlayerInventories (InventoryHolder)", inventoryHolderSearch, 0x10); serverData.Child.Add(playerInventories); playerInventories.AddIntSearch("InventoryHolder.InventType", 1); var serverInventoryColsRowsMultiValueSearch = new MultiValueStrategy(new DefaultMultiValueOffsetsFilter(), inventRows); var serverInventorySearch = new SubPointersSearchStrategy(serverInventoryColsRowsMultiValueSearch, 0x100, false); var serverInventory = new StructureOffset("InventoryHolder.ServerInventory", serverInventorySearch, 0x100); playerInventories.Child.Add(serverInventory); serverInventory.AddIntSearch("Rows", 5); serverInventory.AddIntSearch("Cols", 12); var reader = new MultipleIntValueReader( new DefaultValueCompare <int>(0), //posX new DefaultValueCompare <int>(0), //posY new DefaultValueCompare <int>(1), //sizeX new DefaultValueCompare <int>(1)) //sizeY ; var inventSlotItemSearch = new ValueReaderStrategy(reader, 4).SubStructSearch(0x38, false); var readItemsList = inventSlotItemSearch.SubStructSearch(0x38, false); var itemsList = new StructureOffset("ItemsList", readItemsList, 0x8); serverInventory.Child.Add(itemsList); var inventSlotItem = new StructureOffset("InventSlotItem", inventSlotItemSearch, 0x8); itemsList.Child.Add(inventSlotItem); }