Наложение текстур на UV оружия криво в CS2.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Наложение текстур на UV оружия криво в CS2.

Сообщение Anonymous »

Я пытался создать InventoryChanger на основе Берсеркера. Все работает, но текстура скина при наложении кривая, как будто у оружия неправильная UV-сетка. Данная проблема возникает абсолютно со всеми скинами. Функция добавления скина (используется в пользовательском интерфейсе)

Код: Выделить всё

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 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(skin->m_id);
pItem->SetPaintSeed(1);
pItem->SetPaintWear(0.001f);

pInventory->AddEconItem(pItem);

auto pInvManager = CCSInventoryManager::GetInstance();
if (pInvManager) {
pInvManager->EquipItemInLoadout(2, item->m_def_index, pItem->m_ulID);
pInvManager->EquipItemInLoadout(3, item->m_def_index, pItem->m_ulID);
}

S::AddEconItemToList(pItem, (float)skin->m_id, 1.f, 0.001f, false);
}
Создание сетки с использованием Paintseed, PaintKit и т. д.

Код: Выделить всё

void ApplyWeaponSkins(C_CSPlayerPawn* pLocalPawn, CCSPlayerInventory* pInventory, C_CS2HudModelWeapon* pHudModelWeapon) {
if (!pLocalPawn || (uintptr_t)pLocalPawn < 0x1000000) return;
if (!pInventory || (uintptr_t)pInventory < 0x1000000) return;

C_CSWeaponBase* pWeapon = pLocalPawn->GetActiveWeaponPlayer();
if (!pWeapon || (uintptr_t)pWeapon < 0x1000000) return;

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

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

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

const uint64_t steamID = pInventory->GetOwner().m_id;
const auto nLoadoutSlot = pWeaponDefinition->GetLoadoutSlot();

C_EconItemView* pInLoadout = pInventory->GetItemInLoadout(pWeapon->m_iOriginalTeamNumber(), nLoadoutSlot);
if (!pInLoadout || pInLoadout->m_iItemID() == 0) return;

const uint64_t oldItemID = pWeaponItemView->m_iItemID();
if (oldItemID != pInLoadout->m_iItemID()) {
pWeaponItemView->m_iItemID() = pInLoadout->m_iItemID();
pWeaponItemView->m_iItemIDHigh() = pInLoadout->m_iItemIDHigh();
pWeaponItemView->m_iItemIDLow() = pInLoadout->m_iItemIDLow();
pWeaponItemView->m_iAccountID() = uint32_t(steamID);
pWeaponItemView->m_bDisallowSOCm() = false;
pWeaponItemView->m_bRestoreCustomMaterialAfterPrecache() = true;
pWeapon->UpdateComposite(1);
pWeapon->UpdateCompositeSec(1);
S::clear_hud(pWeaponItemView);
}
}
Изображение



Подробнее здесь: https://stackoverflow.com/questions/799 ... ked-in-cs2
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»