Начинающий
Начинающий
- Статус
- Оффлайн
- Регистрация
- 10 Сен 2025
- Сообщения
- 3
- Реакции
- 0
писал inventory changer, за основу брал berserker, ножи, перчатки работают, а вот оружия не совсем, с новыми скинами все норм, а у легаси только моделька легаси создается, а скина нет
структура:
добавляю через ui так:
SS
C++:
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++:
struct AddedItemInfo
{
uint64_t id;
uint16_t defIndex;
float paintKit;
float paintSeed;
float paintWear;
bool legacy;
};
C++:
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