Code:
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
#define PDATA_SAFE 2
#define ASSERT(%0,%1) if (!(%0)) abort(AMX_ERR_GENERAL, "Assertion `%s' failed", %1)
new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
"weapon_ak47", "weapon_knife", "weapon_p90" }
new bool:g_bSkins[33]
public plugin_init()
{
register_plugin("Custom Weapon Models", "1.0", "Crazy")
register_clcmd("say /skins", "Open_Setting")
new index
for (index = 0; index < sizeof WEAPONENTNAMES; index++)
if (WEAPONENTNAMES[index][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[index], "fw_Item_Deploy_Post", 1)
}
public client_putinserver(id)
{
g_bSkins[id] = false
}
public plugin_precache()
{
precache_model("models/newskins/v_m4a1.mdl")
precache_model("models/newskins/v_ak47.mdl")
precache_model("models/newskins/v_deagle.mdl")
}
public fw_Item_Deploy_Post(ent)
{
new id = fm_cs_get_weapon_ent_owner(ent)
ASSERT(is_valid_ent(entity), "This is expected to be valid");
new weaponid = cs_get_weapon_id(ent)
ASSERT(is_user_alive(id), "Weapon owner is expected to be alive");
replace_weapon_models(id, weaponid)
}
replace_weapon_models(id, weaponid)
{
if(g_bSkins[id])
{
switch(weaponid)
{
case CSW_M4A1:
{
set_pev(id, pev_viewmodel2, "models/newskins/v_m4a1.mdl")
}
case CSW_AK47:
{
set_pev(id, pev_viewmodel2, "models/newskins/v_ak47.mdl")
}
case CSW_DEAGLE:
{
set_pev(id, pev_viewmodel2, "models/newskins/v_deagle.mdl")
}
}
}
else
{
switch(weaponid)
{
case CSW_M4A1:
{
set_pev(id, pev_viewmodel2, "models/v_m4a1.mdl")
}
case CSW_AK47:
{
set_pev(id, pev_viewmodel2, "models/v_ak47.mdl")
}
case CSW_DEAGLE:
{
set_pev(id, pev_viewmodel2, "models/v_deagle.mdl")
}
}
}
}
public Open_Setting(id)
{
new item[64]
new menu = menu_create("\rModels", "settings_handler")
formatex(item, charsmax(item), g_bSkins[id] ? "\yON" : "\rOFF")
menu_additem(menu, item, "1", 0)
menu_setprop(menu, MPROP_NUMBER_COLOR, "\r")
menu_display(id, menu, 0)
}
public settings_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new data[6], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, data, 5, iName, 63, callback)
new key = str_to_num(data)
switch(key)
{
case 1:
{
g_bSkins[id] = !(g_bSkins[id])
new ent = fm_cs_get_current_weapon_ent(id)
if(pev_valid(ent))
fw_Item_Deploy_Post(ent)
}
}
Open_Setting(id)
return PLUGIN_HANDLED
}
stock fm_cs_get_weapon_ent_owner(ent)
{
if(pev_valid(ent) != PDATA_SAFE)
return -1
return get_pdata_cbase(ent, 41, 4)
}
stock fm_cs_get_current_weapon_ent(id)
{
if(pev_valid(id) != PDATA_SAFE)
return -1
return get_pdata_cbase(id, 373, 5)
}