крч у меня в сч когда ставишь скин то модель не ставится но если выкинуть и подобрать то будет типо Вы подобрали: "{название скина}" а модели не будет
база: дарксайд
и да я мега вайб кодер


skins.cpp:
#include "skins.hpp"
#include "../../darkside.hpp"
#include <iostream>
#include <filesystem>
#include <algorithm>
#include <random>
#include <unordered_map>
void c_skins::dump_items()
{
auto item_schema = g_interfaces->m_client->get_econ_item_system()->get_econ_item_schema();
if (!item_schema)
return;
const auto& vec_items = item_schema->m_sorted_item_definition_map;
for (const auto& it : vec_items)
{
c_econ_item_definition* item = it.m_value;
if (!item)
continue;
const bool is_agent = item->is_agent();
const bool is_knife = item->is_knife(true);
const char* item_base_name = item->m_item_base_name;
if (!item_base_name || item_base_name[0] == '\0')
continue;
if (is_agent)
{
m_agents.m_dumped_agent_models.emplace_back(item->get_model_name());
m_agents.m_dumped_agent_name.emplace_back(g_interfaces->m_localize->find_key(item->m_item_base_name));
}
if (is_knife)
{
m_knives.m_dumped_knife_models.emplace_back(item->get_model_name());
m_knives.m_dumped_knife_name.emplace_back(g_interfaces->m_localize->find_key(item->m_item_base_name));
}
}
}
void c_skins::init_paint_kits()
{
// CZ75-Auto
m_cz75_paint_kits = {
{"Victoria", 270}, {"The Fuschia Is Now", 269}, {"Tigris", 350}, {"Tread Plate", 268},
{"Chalice", 325}, {"Hexane", 218}, {"Twist", 334}, {"Poison Dart", 315},
{"Crimson Web", 12}, {"Nitro", 254}, {"Tuxedo", 297}, {"Green Plaid", 366}
};
// Desert Eagle
m_deagle_paint_kits = {
{"Golden Koi", 185}, {"Conspiracy", 351}, {"Cobalt Disruption", 231}, {"Hypnotic", 61},
{"Naga", 397}, {"Crimson Web", 12}, {"Heirloom", 273}, {"Pilot", 347},
{"Hand Cannon", 328}, {"Blaze", 37}, {"Meteorite", 296}, {"Urban Rubble", 237},
{"Urban DDPAT", 17}, {"Mudder", 90}
};
// Dual Berettas
m_dual_berettas_paint_kits = {
{"Urban Shock", 396}, {"Marina", 261}, {"Hemoglobin", 220}, {"Cobalt Quartz", 249},
{"Demolition", 153}, {"Retribution", 307}, {"Panther", 276}, {"Black Limba", 172},
{"Anodized Navy", 28}, {"Stained", 43}, {"Briar", 330}, {"Contractor", 46}, {"Colony", 47}
};
// Five-SeveN
m_five_seven_paint_kits = {
{"Fowl Play", 352}, {"Copper Galaxy", 274}, {"Case Hardened", 44}, {"Urban Hazard", 354},
{"Kami", 265}, {"Nightshade", 223}, {"Silver Quartz", 252}, {"Hot Shot", 377},
{"Orange Peel", 141}, {"Candy Apple", 3}, {"Contractor", 46}, {"Forest Night", 78},
{"Anodized Gunmetal", 210}, {"Jungle", 151}
};
// Glock-18
m_glock_paint_kits = {
{"Water Elemental", 353}, {"Grinder", 381}, {"Steel Disruption", 230}, {"Dragon Tattoo", 48},
{"Fade", 38}, {"Brass", 159}, {"Catacombs", 399}, {"Blue Fissure", 278},
{"Reactor", 367}, {"Candy Apple", 3}, {"Night", 40}, {"Death Rattle", 293},
{"Groundwater", 209}, {"Sand Dune", 208}
};
// P2000
m_p2000_paint_kits = {
{"Fire Elemental", 389}, {"Corticera", 181}, {"Ocean Foam", 211}, {"Amber Fade", 246},
{"Scorpion", 71}, {"Ivory", 357}, {"Pulse", 287}, {"Red FragCam", 275},
{"Chainmail", 327}, {"Silver", 32}, {"Coach Class", 346}, {"Grassland", 95},
{"Granite Marbleized", 21}, {"Grassland Leaves", 104}
};
// P250
m_p250_paint_kits = {
{"Muertos", 404}, {"Cartel", 388}, {"Undertow", 271}, {"Mehndi", 258},
{"Franklin", 295}, {"Supernova", 358}, {"Splash", 162}, {"Nuclear Threat", 168},
{"Steel Disruption", 230}, {"Hive", 219}, {"Modern Hunter", 164}, {"Contamination", 373},
{"Metallic DDPAT", 34}, {"Facets", 207}, {"Gunsmoke", 15}, {"Sand Dune", 208},
{"Boreal Forest", 77}, {"Bone Mask", 27}
};
// Tec-9
m_tec9_paint_kits = {
{"Titanium Bit", 272}, {"Red Quartz", 248}, {"Nuclear Threat", 168}, {"Isaac", 303},
{"Sandstorm", 264}, {"Blue Titanium", 216}, {"Toxic", 374}, {"Brass", 159},
{"Ossified", 36}, {"VariCamo", 235}, {"Urban DDPAT", 17}, {"Groundwater", 209},
{"Army Mesh", 242}, {"Tornado", 101}
};
// USP-S
m_usps_paint_kits = {
{"Caiman", 339}, {"Orion", 313}, {"Serum", 221}, {"Guardian", 257},
{"Overgrowth", 183}, {"Dark Water", 60}, {"Road Rash", 318}, {"Blood Tiger", 217},
{"Stainless", 277}, {"Business Class", 364}, {"Night Ops", 236}, {"Royal Blue", 332},
{"Forest Leaves", 25}
};
// AK-47
m_ak47_paint_kits = {
{"Wasteland Rebel", 380}, {"Jaguar", 316}, {"Vulcan", 302}, {"Fire Serpent", 180},
{"Cartel", 388}, {"Redline", 259}, {"Red Laminate", 14}, {"Case Hardened", 44},
{"Jet Set", 340}, {"Blue Laminate", 226}, {"First Class", 341}, {"Emerald Pinstripe", 300},
{"Black Laminate", 172}, {"Safari Mesh", 72}, {"Jungle Spray", 122}, {"Predator", 170}
};
// AUG
m_aug_paint_kits = {
{"Chameleon", 280}, {"Bengal Tiger", 9}, {"Torque", 305}, {"Wings", 73},
{"Anodized Navy", 28}, {"Hot Rod", 33}, {"Copperhead", 10}, {"Radiation Hazard", 167},
{"Condemned", 110}, {"Contractor", 46}, {"Storm", 100}, {"Colony", 47}
};
// AWP
m_awp_paint_kits = {
{"Man-o'-war", 395}, {"Asiimov", 255}, {"Lightning Strike", 279}, {"Dragon Lore", 344},
{"Corticera", 181}, {"Redline", 259}, {"Electric Hive", 227}, {"Graphite", 212},
{"BOOM", 174}, {"Pink DDPAT", 84}, {"Pit Viper", 251}, {"Snake Camo", 30},
{"Safari Mesh", 72}
};
// FAMAS
m_famas_paint_kits = {
{"Afterimage", 154}, {"Sergeant", 288}, {"Pulse", 287}, {"Styx", 371},
{"Spitfire", 194}, {"Hexane", 218}, {"Doomkitty", 178}, {"Teardown", 244},
{"Cyanospatter", 92}, {"Colony", 47}, {"Contrast Spray", 22}
};
// G3SG1
m_g3sg1_paint_kits = {
{"Murky", 382}, {"Azure Zebra", 229}, {"Demeter", 195}, {"Green Apple", 294},
{"VariCamo", 235}, {"Arctic Camo", 6}, {"Contractor", 46}, {"Desert Storm", 8},
{"Safari Mesh", 72}
};
// Galil AR
m_galil_paint_kits = {
{"Chatterbox", 398}, {"Orange DDPAT", 83}, {"Cerberus", 379}, {"Kami", 265},
{"Sandstorm", 264}, {"Blue Titanium", 216}, {"Shattered", 192}, {"Tuxedo", 297},
{"VariCamo", 235}, {"Winter Forest", 76}, {"Sage Spray", 119}, {"Hunting Blind", 241}
};
// M4A1-S
m_m4a1s_paint_kits = {
{"Cyrex", 312}, {"Atomic Alloy", 301}, {"Guardian", 257}, {"Knight", 326},
{"Master Piece", 321}, {"Basilisk", 383}, {"Bright Water", 189}, {"Dark Water", 60},
{"Nitro", 254}, {"Blood Tiger", 217}, {"VariCamo", 235}, {"Boreal Forest", 77}
};
// M4A4
m_m4a4_paint_kits = {
{"Howl", 309}, {"Bullet Rain", 155}, {"Desert-Strike", 336}, {"Asiimov", 255},
{"X-Ray", 215}, {"Dragon King", 400}, {"Griffin", 384}, {"Zirka", 187},
{"Modern Hunter", 164}, {"Faded Zebra", 176}, {"Radiation Hazard", 167}, {"Urban DDPAT", 17},
{"Tornado", 101}, {"Jungle Tiger", 16}, {"Desert Storm", 8}
};
// SCAR-20
m_scar20_paint_kits = {
{"Cardiac", 391}, {"Cyrex", 312}, {"Splash Jam", 165}, {"Emerald", 196},
{"Grotto", 406}, {"Crimson Web", 12}, {"Carbon Fiber", 70}, {"Palm", 157},
{"Storm", 100}, {"Contractor", 46}
};
// SG 553
m_sg553_paint_kits = {
{"Pulse", 287}, {"Wave Spray", 186}, {"Ultraviolet", 98}, {"Damascus Steel", 247},
{"Anodized Navy", 28}, {"Fallout Warning", 169}, {"Traveler", 363}, {"Gator Mesh", 243},
{"Army Sheen", 298}, {"Waves Perforated", 136}, {"Tornado", 101}
};
// SSG 08
m_ssg08_paint_kits = {
{"Blood in the Water", 222}, {"Dark Water", 60}, {"Abyss", 361}, {"Splashed", 162},
{"Detour", 319}, {"Acid Fade", 253}, {"Tropical Storm", 233}, {"Mayan Dreams", 200},
{"Sand Dune", 208}, {"Blue Spruce", 96}, {"Lichen Dashed", 26}
};
// MAC-10
m_mac10_paint_kits = {
{"Malachite", 402}, {"Tatter", 337}, {"Curse", 310}, {"Heat", 284},
{"Graven", 188}, {"Ultraviolet", 98}, {"Nuclear Garden", 372}, {"Amber Fade", 246},
{"Commuter", 343}, {"Silver", 32}, {"Palm", 157}, {"Candy Apple", 3},
{"Indigo", 333}, {"Tornado", 101}, {"Urban DDPAT", 17}
};
// MP7
m_mp7_paint_kits = {
{"Ocean Foam", 211}, {"Urban Hazard", 354}, {"Skulls", 11}, {"Anodized Navy", 28},
{"Whiteout", 102}, {"Gunsmoke", 15}, {"Orange Peel", 141}, {"Olive Plaid", 365},
{"Forest DDPAT", 5}, {"Army Recon", 245}, {"Groundwater", 209}
};
// MP9
m_mp9_paint_kits = {
{"Rose Iron", 262}, {"Hypnotic", 61}, {"Bulldozer", 39}, {"Deadly Poison", 403},
{"Dart", 386}, {"Setting Sun", 368}, {"Dark Age", 329}, {"Hot Rod", 33},
{"Orange Peel", 141}, {"Green Plaid", 366}, {"Storm", 100}, {"Sand Dashed", 148},
{"Dry Season", 199}
};
// PP-Bizon
m_bizon_paint_kits = {
{"Blue Streak", 13}, {"Osiris", 349}, {"Antique", 286}, {"Cobalt Halftone", 267},
{"Water Sigil", 224}, {"Brass", 159}, {"Rust Coat", 203}, {"Modern Hunter", 164},
{"Chemical Green", 376}, {"Night Ops", 236}, {"Carbon Fiber", 70}, {"Sand Dashed", 148},
{"Urban Dashed", 147}, {"Irradiated Alert", 171}, {"Forest Leaves", 25}
};
// P90
m_p90_paint_kits = {
{"Asiimov", 255}, {"Death by Kitty", 156}, {"Trigon", 283}, {"Cold Blooded", 67},
{"Emerald Dragon", 182}, {"Virus", 20}, {"Blind Spot", 228}, {"Module", 335},
{"Desert Warfare", 311}, {"Teardown", 244}, {"Glacier Mesh", 111}, {"Leather", 342},
{"Ash Wood", 234}, {"Fallout Warning", 169}, {"Storm", 100}, {"Sand Spray", 124},
{"Scorched", 175}
};
// UMP-45
m_ump45_paint_kits = {
{"Delusion", 392}, {"Labyrinth", 362}, {"Corporal", 281}, {"Bone Pile", 193},
{"Blaze", 37}, {"Carbon Fiber", 70}, {"Gunsmoke", 15}, {"Fallout Warning", 169},
{"Indigo", 333}, {"Scorched", 175}, {"Urban DDPAT", 17}, {"Caramel", 93}
};
// Mag-7
m_mag7_paint_kits = {
{"Bulldozer", 39}, {"Firestarter", 385}, {"Heaven Guard", 291}, {"Memento", 177},
{"Hazard", 198}, {"Silver", 32}, {"Metallic DDPAT", 34}, {"Storm", 100},
{"Irradiated Alert", 171}, {"Sand Dune", 208}
};
// Nova
m_nova_paint_kits = {
{"Bloomstick", 62}, {"Antique", 286}, {"Koi", 356}, {"Rising Skull", 263},
{"Graphite", 212}, {"Ghost Camo", 225}, {"Tempest", 191}, {"Modern Hunter", 164},
{"Blaze Orange", 166}, {"Green Apple", 294}, {"Caged Steel", 299}, {"Candy Apple", 3},
{"Predator", 170}, {"Sand Dune", 208}, {"Polar Mesh", 107}, {"Walnut", 158},
{"Forest Leaves", 25}
};
// Sawed-Off
m_sawedoff_paint_kits = {
{"The Kraken", 256}, {"Serenity", 405}, {"Highwayman", 390}, {"Orange DDPAT", 83},
{"First Class", 345}, {"Full Stop", 250}, {"Amber Fade", 246}, {"Copper", 41},
{"Rust Coat", 203}, {"Snake Camo", 30}, {"Mosaico", 204}, {"Sage Spray", 119},
{"Forest DDPAT", 5}, {"Irradiated Alert", 171}
};
// XM1014
m_xm1014_paint_kits = {
{"Tranquility", 393}, {"Heaven Guard", 291}, {"Quicksilver", 407}, {"Red Python", 320},
{"Bone Machine", 370}, {"Red Leather", 348}, {"VariCamo Blue", 238}, {"Blaze Orange", 166},
{"CaliCamo", 240}, {"Blue Steel", 42}, {"Fallout Warning", 169}, {"Blue Spruce", 96},
{"Jungle", 151}, {"Grassland", 95}, {"Urban Perforated", 135}
};
// M249
m_m249_paint_kits = {
{"System Lock", 401}, {"Magma", 266}, {"Gator Mesh", 243}, {"Blizzard Marbleized", 75},
{"Contrast Spray", 22}, {"Jungle DDPAT", 202}
};
// Negev
m_negev_paint_kits = {
{"Bratatat", 317}, {"Desert-Strike", 336}, {"Terrain", 285}, {"Anodized Navy", 28},
{"Nuclear Waste", 369}, {"CaliCamo", 240}, {"Palm", 157}, {"Army Sheen", 298}
};
}
void c_model_changer::update_player_models()
{
player_models.clear();
const std::string models_path = parser::GetDirectory() + xorstr_("csgo\\characters\\models\\");
if (!std::filesystem::exists(models_path) || !std::filesystem::is_directory(models_path))
{
std::cout << "[ModelChanger] Models folder not found: " << models_path << std::endl;
return;
}
try
{
for (const auto& entry : std::filesystem::recursive_directory_iterator(models_path))
{
if (!entry.is_regular_file())
continue;
std::string file_name = entry.path().filename().string();
if (file_name.size() < 6)
continue;
if (file_name.substr(file_name.size() - 7) != xorstr_(".vmdl_c"))
continue;
if (file_name.find(xorstr_("arm")) != std::string::npos)
continue;
std::string model_path = entry.path().string();
model_path = model_path.substr(0, model_path.size() - 2);
std::replace(model_path.begin(), model_path.end(), '\\', '/');
size_t pos = model_path.find(xorstr_("characters/models/"));
if (pos != std::string::npos)
model_path = model_path.substr(pos);
Model_t pModel;
pModel.name = file_name.substr(0, file_name.size() - 8);
pModel.path = model_path;
player_models.push_back(pModel);
}
std::cout << "[ModelChanger] Loaded " << player_models.size() << " player models." << std::endl;
}
catch (const std::filesystem::filesystem_error& e)
{
std::cerr << "[ModelChanger] Filesystem error: " << e.what() << std::endl;
}
}
void c_model_changer::set_player_model()
{
if (!g_interfaces->m_engine->is_in_game() || !g_interfaces->m_engine->is_connected())
return;
if (!g_ctx->m_local_pawn || !g_ctx->m_local_pawn->is_alive())
return;
if (player_models.empty())
return;
if (cur_player_model == ~1U)
return;
if (cur_player_model >= player_models.size())
return;
static uint32_t last_applied_model_index = ~1U;
static auto last_apply_time = std::chrono::steady_clock::now();
auto now = std::chrono::steady_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::seconds>(now - last_apply_time).count();
if (elapsed < 5 && cur_player_model == last_applied_model_index)
return;
Model_t pModel = player_models[cur_player_model];
const char* model_path = pModel.path.c_str();
if (!model_path || strlen(model_path) < 5)
return;
try
{
// Pre-caching via ResourceSystem is optional and header is not available in this build
// Apply model directly
g_ctx->m_local_pawn->set_model(model_path);
last_applied_model_index = cur_player_model;
last_apply_time = now;
std::cout << "[ModelChanger] Applied model: " << model_path << std::endl;
}
catch (...)
{
std::cerr << "[ModelChanger] Failed to apply model: " << model_path << std::endl;
}
}
void c_skins::agent_changer(int stage)
{
}
void c_skins::knife_changer(int stage)
{
if (!g_ctx->m_local_pawn || m_knives.m_dumped_knife_models.empty())
return;
c_player_weapon_service* weapon_service = g_ctx->m_local_pawn->m_weapon_services();
if (!weapon_service)
return;
c_cs_player_view_model_service* view_model_service = g_ctx->m_local_pawn->m_view_model_services();
if (!view_model_service)
return;
c_base_view_model* view_model = reinterpret_cast<c_base_view_model*>(g_interfaces->m_entity_system->get_base_entity(view_model_service->m_view_model().get_entry_index()));
if (!view_model)
return;
c_network_utl_vector<c_base_handle>& my_weapons = weapon_service->m_weapon();
for (auto i = 0; i < my_weapons.m_size; i++)
{
c_econ_entity* weapon = reinterpret_cast<c_econ_entity*>(g_interfaces->m_entity_system->get_base_entity(my_weapons.m_elements[i].get_entry_index()));
if (!weapon)
continue;
c_attribute_container* attribute_manager = weapon->m_attribute_manager();
if (!attribute_manager)
continue;
c_econ_item_view* item = attribute_manager->m_item();
if (!item)
continue;
c_econ_item_definition* item_defenition = item->get_static_data();
if (!item_defenition)
continue;
auto weapon_scene = weapon->m_scene_node();
if (!weapon_scene)
continue;
auto view_model_scene = view_model->m_scene_node();
if (!view_model_scene)
continue;
auto item_schema = g_interfaces->m_client->get_econ_item_system()->get_econ_item_schema();
if (!item_schema)
return;
// Knife changer toggle not present in config in this build; proceed when knife is detected
bool is_knife = item_defenition->is_knife(false);
int current_weapon = get_skin_config(item->m_defenition_index());
if (!is_knife && current_weapon == CONFIG_UNKNOWN)
continue;
if (is_knife && stage == 6)
{
int selectedKnife = g_cfg->skins.m_knives.m_selected;
weapon->set_model(m_knives.m_dumped_knife_models.at(selectedKnife));
item->m_defenition_index() = m_knives.m_knife_idxs.at(selectedKnife);
if (view_model->m_weapon() == weapon->get_handle())
view_model->set_model(m_knives.m_dumped_knife_models.at(selectedKnife));
}
}
}
void c_skins::skin_changer(int stage)
{
if (!g_cfg->skins.m_enabled)
return;
if (!g_ctx->m_local_pawn || !g_interfaces->m_engine->is_in_game() || !g_interfaces->m_engine->is_connected())
return;
// Применяем скины только на стадии FRAME_NET_UPDATE_END (после получения данных от сервера)
// и на FRAME_RENDER_START (перед рендерингом)
// Убрали FRAME_RENDER_END чтобы не применять слишком часто
// ВАЖНО: Применяем СИЛЬНЕЕ - каждый кадр перед рендерингом для надежности
if (stage != FRAME_NET_UPDATE_END && stage != FRAME_RENDER_START)
return;
c_player_weapon_service* weapon_service = g_ctx->m_local_pawn->m_weapon_services();
if (!weapon_service)
return;
c_network_utl_vector<c_base_handle>& my_weapons = weapon_service->m_weapon();
for (auto i = 0; i < my_weapons.m_size; i++)
{
c_econ_entity* weapon = reinterpret_cast<c_econ_entity*>(g_interfaces->m_entity_system->get_base_entity(my_weapons.m_elements[i].get_entry_index()));
if (!weapon)
continue;
c_attribute_container* attribute_manager = weapon->m_attribute_manager();
if (!attribute_manager)
continue;
c_econ_item_view* item = attribute_manager->m_item();
if (!item)
continue;
c_econ_item_definition* item_defenition = item->get_static_data();
if (!item_defenition)
continue;
// Пропускаем ножи (они обрабатываются в knife_changer)
bool is_knife = item_defenition->is_knife(false);
if (is_knife)
continue;
// Получаем конфиг для этого оружия
int weapon_config = get_skin_config(item->m_defenition_index());
if (weapon_config == CONFIG_UNKNOWN)
continue;
// Проверяем что есть настройки для этого оружия
if (weapon_config < 0 || weapon_config >= 100)
continue;
auto& skin_data = g_cfg->skins.m_skin_settings[weapon_config];
// Если paint kit не установлен, пропускаем
if (skin_data.m_paint_kit == 0)
continue;
// ВАЖНО: Устанавливаем paint kit ПЕРЕД проверкой, чтобы он применялся даже если уже установлен
// Это гарантирует что поле всегда будет установлено правильно
// НЕ проверяем current_paint_kit - всегда устанавливаем для надежности
weapon->m_paint_kit() = skin_data.m_paint_kit;
// Применяем seed (если установлен, иначе используем случайный)
if (skin_data.m_prev_skin != -1)
{
weapon->m_seed() = skin_data.m_prev_skin;
}
else
{
// Генерируем случайный seed если не установлен (но используем фиксированный для одного оружия)
static std::unordered_map<uintptr_t, int> weapon_seeds;
uintptr_t weapon_ptr = reinterpret_cast<uintptr_t>(weapon);
if (weapon_seeds.find(weapon_ptr) == weapon_seeds.end())
{
static std::random_device rd;
static std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 1000);
weapon_seeds[weapon_ptr] = dis(gen);
}
weapon->m_seed() = weapon_seeds[weapon_ptr];
}
// Применяем wear (по умолчанию 0.0 - Factory New)
weapon->m_wear() = 0.0f;
// Устанавливаем xuid для "легитимности" скина (важно для отображения)
weapon->m_xuid_low() = 13371337;
weapon->m_xuid_high() = 13371337;
// ВАЖНО: НЕ меняем m_item_def_index, так как это ломает идентификацию оружия в инвентаре
// Если нужно изменить тип оружия (например, для ножей), это делается отдельно в knife_changer
// Для обычных скинов меняем только paint kit, seed и wear
}
}
// Применить скин к конкретному оружию (вызывается из on_add_entity)
void c_skins::apply_skin_to_weapon(c_econ_entity* weapon)
{
if (!weapon || !g_cfg->skins.m_enabled)
return;
if (!g_interfaces->m_engine->is_in_game() || !g_interfaces->m_engine->is_connected())
return;
c_attribute_container* attribute_manager = weapon->m_attribute_manager();
if (!attribute_manager)
return;
c_econ_item_view* item = attribute_manager->m_item();
if (!item)
return;
c_econ_item_definition* item_defenition = item->get_static_data();
if (!item_defenition)
return;
// Пропускаем ножи
bool is_knife = item_defenition->is_knife(false);
if (is_knife)
return;
// Получаем конфиг для этого оружия
int weapon_config = get_skin_config(item->m_defenition_index());
if (weapon_config == CONFIG_UNKNOWN)
return;
if (weapon_config < 0 || weapon_config >= 100)
return;
auto& skin_data = g_cfg->skins.m_skin_settings[weapon_config];
if (skin_data.m_paint_kit == 0)
return;
// Применяем paint kit
weapon->m_paint_kit() = skin_data.m_paint_kit;
// Применяем seed
if (skin_data.m_prev_skin != -1)
{
weapon->m_seed() = skin_data.m_prev_skin;
}
else
{
static std::random_device rd;
static std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 1000);
weapon->m_seed() = dis(gen);
}
// Применяем wear
weapon->m_wear() = 0.0f;
// Устанавливаем xuid
weapon->m_xuid_low() = 13371337;
weapon->m_xuid_high() = 13371337;
// ВАЖНО: Пытаемся принудительно обновить модель после установки paint kit
// Это может помочь обновить визуальную модель
// Получаем текущую модель и переустанавливаем её
c_base_entity* base_weapon = reinterpret_cast<c_base_entity*>(weapon);
if (base_weapon && base_weapon->m_scene_node()) {
// Пытаемся получить модель через scene node
// Может быть нужно вызвать какую-то функцию обновления модели
// Но в CS2 это может быть сложно без доступа к внутренним функциям
}
}
и да я мега вайб кодер