Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос Inventory changer: фикс текстуры легаси оружий

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
10 Сен 2025
Сообщения
3
Реакции
0
писал inventory changer, за основу брал berserker, ножи, перчатки работают, а вот оружия не совсем, с новыми скинами все норм, а у легаси только моделька легаси создается, а скина нет
C++:
Expand Collapse Copy
void ApplyWeaponSkins(C_CSPlayerPawn* pLocalPawn, CCSPlayerInventory* pInventory, C_CS2HudModelWeapon* pHudModelWeapon) {
    if (!I::engine || !I::engine->is_connected() || !I::engine->is_in_game()) return;
    auto localcontroller = CCSPlayerController::GetLocalPlayerController();
    if (!localcontroller || !localcontroller->IsPawnAlive()) return;
    if (!pLocalPawn->GetWeaponServices()) return;

    C_CSWeaponBase* pWeapon = pLocalPawn->GetActiveWeaponPlayer();
    if (!pWeapon) return;

    const uint64_t steamID = pInventory->GetOwner().m_id;
    if (pWeapon->GetOriginalOwnerXuid() != steamID) return;

    CGameSceneNode* pWeaponSceneNode = pWeapon->GetGameSceneNode();
    if (!pWeaponSceneNode) return;

    C_EconItemView* pWeaponItemView = &pWeapon->m_AttributeManager().m_Item();
    if (!pWeaponItemView) return;

    C_EconItemDefinition* pWeaponDefinition = pWeaponItemView->get_static_data();
    if (!pWeaponDefinition || pWeaponDefinition->is_knife(false)) return;

    const auto nLoadoutSlot = pWeaponDefinition->GetLoadoutSlot();
    C_EconItemView* pWeaponInLoadoutItemView = pInventory->GetItemInLoadout(pWeapon->m_iOriginalTeamNumber(), nLoadoutSlot);
    if (!pWeaponInLoadoutItemView) return;

    C_EconItemDefinition* pWeaponInLoadoutDefinition = pWeaponInLoadoutItemView->get_static_data();
    if (!pWeaponInLoadoutDefinition) return;
    if (pWeaponInLoadoutDefinition->m_nDefIndex != pWeaponDefinition->m_nDefIndex) return;

    auto it = std::find_if(g_vecAddedItemsIDs.begin(), g_vecAddedItemsIDs.end(),
                           [&](const AddedItemInfo& info) { return info.id == pWeaponInLoadoutItemView->m_iItemID(); });

    pWeaponItemView->m_iItemID() = pWeaponInLoadoutItemView->m_iItemID();
    pWeaponItemView->m_iItemIDHigh() = pWeaponInLoadoutItemView->m_iItemIDHigh();
    pWeaponItemView->m_iItemIDLow() = pWeaponInLoadoutItemView->m_iItemIDLow();
    pWeaponItemView->m_iAccountID() = uint32_t(pInventory->GetOwner().m_id);
    pWeaponItemView->m_bDisallowSOCm() = false;

    int bLegacy = 0;
    if (it != g_vecAddedItemsIDs.end())
        bLegacy = it->legacy ? 1 : 0;

    pWeaponSceneNode->set_mesh_group_mask(1 + bLegacy);

    if (pHudModelWeapon) {
        CGameSceneNode* pNode = pHudModelWeapon->GetGameSceneNode();
    if (pNode) pNode->set_mesh_group_mask(1 + bLegacy);
}
структура:
C++:
Expand Collapse Copy
struct AddedItemInfo
{
 uint64_t id;
 uint16_t defIndex;
 float paintKit;
 float paintSeed;
 float paintWear;
 bool legacy;
};
добавляю через ui так:
C++:
Expand Collapse Copy
void AddSkinToInventory(S::c_dumped_item* item, S::c_dumped_skins* skin) {
    if (!item || !skin) return;
    CCSPlayerInventory* pInventory = CCSPlayerInventory::GetInstance();
    if (!pInventory) return;
    CEconItem* pItem = CEconItem::CreateInstance();
    if (!pItem) return;

    auto highestIDs = pInventory->GetHighestIDs();
    pItem->m_ulID = highestIDs.first + 1;
    pItem->m_unInventory = 1 << 30;
    pItem->m_unAccountID = uint32_t(pInventory->GetOwner().m_id);
    pItem->m_unDefIndex = item->m_def_index;
    pItem->m_nQuality = 4;
    pItem->m_nRarity = skin->m_rarity;

    pItem->SetPaintKit((float)skin->m_id);
    pItem->SetPaintSeed(1.f);
    pItem->SetPaintWear(0.001f);

    pInventory->AddEconItem(pItem);

    auto pInvManager = CCSInventoryManager::GetInstance();
    if (pInvManager) {
        auto pItemSchema = I::iclient->get_econ_item_system()->get_econ_item_schema();
        int loadoutSlot = item->m_def_index;
        if (pItemSchema) {
            auto& itemMap = pItemSchema->GetSortedItemDefinitionMap();
            for (auto it = itemMap.begin(); it != itemMap.end(); ++it) {
                if (it->m_value && it->m_value->m_nDefIndex == item->m_def_index) {
                    loadoutSlot = it->m_value->GetLoadoutSlot();
                    break;
                }
            }
        }
    }

    S::AddEconItemToList(pItem, (float)skin->m_id, 1.f, 0.001f, skin->bUsesOldModel);
}

SS

model.jpg
 
Назад
Сверху Снизу