• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Вопрос Player inventory

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Ноя 2022
Сообщения
132
Реакции
3
помогите пж у меня не работает отоброжение предметов в первой строке у игрока вот код:
C++:
Expand Collapse Copy
// отрисовка
        void draw_container(sdk::base_player_c* player, sdk::math::vec2_t box_pos, sdk::math::vec2_t box_size) {
            auto itemList = player->get_inventory()->GetContainer()->itemList();
            auto itemListsize = memory::read<uintptr_t>(itemList + 0x18);

            for (int i = 0; i < itemListsize; i++) {
                auto item = memory::read<uintptr_t>(itemList + 0x20 + (i * 0x8));
                if (!memory::is_valid(item))
                    continue;

                auto name1 = memory::read<uintptr_t>(item + 0xA8);
                auto name2 = memory::read<sdk::unity::string_c*>(name1 + 0x28);
                auto name = name2->m_buffer;
                std::wstring wname(name);
                std::string utf8name = wchar_to_utf8(wname);

                sdk::math::vec2_t text_pos = {
                    box_pos.x + box_size.x / 2.0f,
                    box_pos.y + box_size.y + 12.0f
                };

                render::draw_text_centered(text_pos, utf8name.c_str(), render::c_color{ 1.0f, 1.0f, 1.0f, 1.0f });
            }
        }
// не ебу как назвать
PlayerInventory* base_player_c::get_inventory() {
    uintptr_t enc_inventory_ptr = memory::read<uintptr_t>((uintptr_t)this + 0x2C0);
    if (!memory::is_valid(enc_inventory_ptr))
        return nullptr;

    uint64_t decrypted = PlayerInventoryDec(enc_inventory_ptr);
    return reinterpret_cast<PlayerInventory*>(decrypted);
}


ItemContainer* PlayerInventory::GetContainer() {

    auto result = memory::read<ItemContainer*>((uintptr_t)this + 0x28); // Container 0

    return result;
}

uintptr_t ItemContainer::itemList() {

    auto dercipy = memory::read<uintptr_t>((uintptr_t)this + 0x50);

    return dercipy;


} // декрипт inline uint64_t PlayerInventoryDec(uint64_t address)
{
    uint64_t InputValue = memory::read<uint64_t>(address + 0x18);
    uint64_t* rdx = (uint64_t*)&InputValue;
    uint32_t r8d = 0x2;
    uint32_t eax, ecx, edx;

    do {
        eax = *(uint32_t*)(rdx);
        rdx = (uint64_t*)((uint8_t*)rdx + 0x4);
        eax = eax ^ 0xd1393ad7;
        eax = eax + 0xd89aeee4;
        ecx = eax;
        eax = eax << 0xe;
        ecx = ecx >> 0x12;
        ecx = ecx | eax;
        ecx = ecx - 0x3c70786;
        *((uint32_t*)rdx - 1) = ecx;
        --r8d;
    } while (r8d);
    return il2cpp::gchandle_get_target(InputValue);
}
там мб могут быть не те оффсеты (но своим профессиональным взглядом скажите я всё верно написал?) если вам это чемто поможет то вот вам оффсеты
Код:
Expand Collapse Copy
constexpr uint64_t playerNames = 0x3F8;
constexpr uint64_t playerFlags = 0x558;
constexpr uint64_t playerTeam = 0x430;
constexpr uint64_t model = 0xC8;
constexpr uint64_t boneTransforms = 0x50;
constexpr uint64_t ItemContainer = 0x28;
constexpr uint64_t ItemContainer2 = 0x58;
constexpr uint64_t ItemContainer3 = 0x60;
constexpr uint64_t ItemList = 0x50;
constexpr uint64_t itemInfo = 0xA8;
constexpr uint64_t shortname = 0x28;
constexpr uint64_t playerModel = 0x3E0;
constexpr uint64_t movement = 0x438;
constexpr uint64_t groundAngleNew = 0x0;
constexpr uint64_t RendererList = 0x50;
constexpr uint64_t SkinnedMultiMesh = 0x298;
constexpr uint64_t il2cppGCHandleBase = 0xC18B5D0;
constexpr uint64_t BaseNetworkableOffset = 0xBE749E8;
constexpr uint64_t CameraManager = 0x15A80000;
 
constexpr uint64_t camera_0 = 0x10;
constexpr uint64_t camera_1 = 0x38;
constexpr uint64_t camera_2 = 0x48;
constexpr uint64_t camera_3 = 0x50;
constexpr uint64_t camera_4 = 0x68;
constexpr uint64_t camera_5 = 0x98;
constexpr uint64_t camera_6 = 0xC0;
 
попробуй браузер обновить
 
зачем ты делаешь на оффсетах? айтем лист не закриптован
зачем ты делаешь на оффсетах? айтем лист не закриптован
C++:
Expand Collapse Copy
auto itemList = closestPlayer->GetInventory()->GetContainer(1)->itemList();


C++:
Expand Collapse Copy
    ItemContainer = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("PlayerInventory"), _(L"%"), 0, true, Unity::FieldAttributes::Public);
    ItemContainer2 = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("PlayerInventory"), _(L"%"), 1, true, Unity::FieldAttributes::Public);
    ItemContainer3 = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("PlayerInventory"), _(L"%"), 2, true, Unity::FieldAttributes::Public);
    auto ItemContainerClass = wcharToChar(FieldHelper::FindEncryptedClassNameByFirstObjectDataType(_("PlayerInventory"), _(L"%"), 0, true, Unity::FieldAttributes::Public), buffer, sizeof(buffer));
    ItemList = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(ItemContainerClass, _(L"List"), 0, true, Unity::FieldAttributes::Public);
C++:
Expand Collapse Copy
ItemContainer* PlayerInventory::GetContainer(int idx) {

    if (!MemUtils::IsValidCheck(this) || idx > 2)
        return nullptr;

    uint32_t addr = 0;
    if (idx == 0)
        addr = Dump::ItemContainer;
    else if (idx == 1)
        addr = Dump::ItemContainer2;
    else if (idx == 2)
        addr = Dump::ItemContainer3;

    return MemUtils::read<ItemContainer*>(this + addr);
}

1 контейнер - хотбар
2 контейнер - клозесбар
} // декрипт inline uint64_t PlayerInventoryDec(uint64_t address) { uint64_t InputValue = memory::read<uint64_t>(address + 0x18); uint64_t* rdx = (uint64_t*)&InputValue; uint32_t r8d = 0x2; uint32_t eax, ecx, edx; do { eax = *(uint32_t*)(rdx); rdx = (uint64_t*)((uint8_t*)rdx + 0x4); eax = eax ^ 0xd1393ad7; eax = eax + 0xd89aeee4; ecx = eax; eax = eax << 0xe; ecx = ecx >> 0x12; ecx = ecx | eax; ecx = ecx - 0x3c70786; *((uint32_t*)rdx - 1) = ecx; --r8d; } while (r8d); return il2cpp::gchandle_get_target(InputValue); }
нахуя нужен вообще декрипт
 
Последнее редактирование:
зачем ты делаешь на оффсетах? айтем лист не закриптован

C++:
Expand Collapse Copy
auto itemList = closestPlayer->GetInventory()->GetContainer(1)->itemList();


C++:
Expand Collapse Copy
    ItemContainer = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("PlayerInventory"), _(L"%"), 0, true, Unity::FieldAttributes::Public);
    ItemContainer2 = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("PlayerInventory"), _(L"%"), 1, true, Unity::FieldAttributes::Public);
    ItemContainer3 = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("PlayerInventory"), _(L"%"), 2, true, Unity::FieldAttributes::Public);
    auto ItemContainerClass = wcharToChar(FieldHelper::FindEncryptedClassNameByFirstObjectDataType(_("PlayerInventory"), _(L"%"), 0, true, Unity::FieldAttributes::Public), buffer, sizeof(buffer));
    ItemList = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(ItemContainerClass, _(L"List"), 0, true, Unity::FieldAttributes::Public);
C++:
Expand Collapse Copy
ItemContainer* PlayerInventory::GetContainer(int idx) {

    if (!MemUtils::IsValidCheck(this) || idx > 2)
        return nullptr;

    uint32_t addr = 0;
    if (idx == 0)
        addr = Dump::ItemContainer;
    else if (idx == 1)
        addr = Dump::ItemContainer2;
    else if (idx == 2)
        addr = Dump::ItemContainer3;

    return MemUtils::read<ItemContainer*>(this + addr);
}

1 контейнер - хотбар
2 контейнер - клозесбар

нахуя нужен вообще декрипт
а если у него не реализована
FieldHelper
 
а если у него не реализована
FieldHelper
пусть спастит со сурса шмиги
пусть спастит со сурса шмиги
нахуй сидеть на оффсетах
у меня не сурс шмиги с авто обдейтом
зачем тебе декрипт инвентаря?
 
Назад
Сверху Снизу