Raised This Month: $12 Target: $400
 3% 

Extended Arm Weapon Skin 2.1 [CS/CZ] {16 Apr 2023}


Post New Thread Reply   
 
Thread Tools Display Modes
ChillerX
Member
Join Date: Dec 2022
Old 01-27-2023 , 23:03   Re: Extended Arm Weapon Skin 2.0 [CS/CZ]
Reply With Quote #21

Would you mind adding an option for the models to be off by default so players can turn them on manually? A menu to switch them manually would be cool too.

Last edited by ChillerX; 01-27-2023 at 23:07.
ChillerX is offline
SoulWeaver16
Senior Member
Join Date: May 2021
Location: Uruguay
Old 01-31-2023 , 17:43   Re: Extended Arm Weapon Skin 2.0 [CS/CZ]
Reply With Quote #22

Quote:
Originally Posted by ChillerX View Post
Would you mind adding an option for the models to be off by default so players can turn them on manually? A menu to switch them manually would be cool too.
It could be done, only that it would require the help of the code editor, I don't know if he's pending the post.
__________________
Extended Arm Weapon Skin v2.1 {16/Apr/23}
(Detect which class is and associate it with the corresponding arms)
SideWeapons v0.2 {01/Sep/22}
(New version of Back Weapons v1.87)

SoulWeaver16 is offline
lexzor
Veteran Member
Join Date: Nov 2020
Old 03-25-2023 , 09:53   Re: Extended Arm Weapon Skin 2.0 [CS/CZ]
Reply With Quote #23

Quote:
Originally Posted by ChillerX View Post
Would you mind adding an option for the models to be off by default so players can turn them on manually? A menu to switch them manually would be cool too.
PHP Code:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>

#define SHIELD_SUPPORT
//Shield can be disabled by changing code: //#define SHIELD_SUPPORT

#define DEFAULT_MODE
//This add the ability of the players to toggle if the plugin is active for them or not

#if defined DEFAULT_MODE
    #include <amxconst>
    #include <nvault>

    
new const CHAT_TAG[] = "^4[ARM SKIN]^1" //Tag chat when toggle the weapon skinn view
    
new const PRUNE_DAYS 30 //After how many days the inactive entries will be deleted
    
new const bool:DEFAULT_VALUE true //Default value for players that never toggled model changer. True means that players skin will be changed by default until they disable it
#endif

//Linux diff
const XO_WEAPON 4

// CBasePlayerItem
const m_pPlayer 41 // CBasePlayer *

native cs_set_viewmodel_body(iPlayeriValue);    //This will set v_ .mdl body (PlayerIndex, Bodygroup number)

enum _:BodyID
{
    
Arctic,
    
Gign,
    
GSG9,
    
Guerilla,
    
Leet,
    
SAS,
    
Terror,
    
Urban,
    
VIP,
    
Militia,
    
Spetsnaz
}

new const 
g_szModelName[BodyID][] =
{
    
"arctic",
    
"gign",
    
"gsg9",
    
"guerilla",
    
"leet",
    
"sas",
    
"terror",
    
"urban",
    
"vip",
    
"militia",
    
"spetsnaz"
}

new const 
g_szUserInfoModel[] = "model"
new const g_szWeaponNameMp5Navy[] = "weapon_mp5navy"
new const g_szNewWeaponDirectoryMp5Navy[] = "models/extended/v_mp5.mdl"

new const g_szWeaponNamePrefix[] = "weapon_"
new const g_szNewWeaponDirectory[] = "models/extended/v_"
new const g_szModelNameExtension[] = ".mdl"

new Trie:g_tModels

#if defined DEFAULT_MODE
    
new const g_szVaultName[] = "extended_arm_weapon_skin"
    
new g_iVault
    
new bool:g_bActive[MAX_PLAYERS+1]
    new 
g_szAuthID[MAX_PLAYERS+1][MAX_AUTHID_LENGTH]
#endif

//Weapon ents
new g_szWeaponNames[][] = {"weapon_knife""weapon_glock18""weapon_ak47""weapon_aug""weapon_awp""weapon_c4""weapon_deagle""weapon_elite""weapon_famas"
    
"weapon_fiveseven""weapon_flashbang""weapon_g3sg1""weapon_galil""weapon_hegrenade""weapon_m3""weapon_xm1014""weapon_m4a1""weapon_m249""weapon_mac10"
    
"weapon_mp5navy""weapon_p90""weapon_p228""weapon_scout""weapon_sg550""weapon_sg552""weapon_smokegrenade""weapon_tmp""weapon_ump45""weapon_usp" }

//Old models to unprecache
new g_szOldModels[][] = {"models/v_knife.mdl""models/v_glock18.mdl""models/v_ak47.mdl""models/v_aug.mdl""models/v_awp.mdl""models/v_c4.mdl" "models/v_deagle.mdl"
    
"models/v_elite.mdl""models/v_famas.mdl""models/v_fiveseven.mdl""models/v_flashbang.mdl""models/v_g3sg1.mdl""models/v_galil.mdl""models/v_hegrenade.mdl"
    
"models/v_m3.mdl""models/v_xm1014.mdl""models/v_m4a1.mdl""models/v_m249.mdl""models/v_mac10.mdl""models/v_mp5.mdl""models/v_p90.mdl""models/v_p228.mdl"
    
"models/v_scout.mdl""models/v_sg550.mdl""models/v_sg552.mdl""models/v_smokegrenade.mdl""models/v_tmp.mdl""models/v_ump45.mdl""models/v_usp.mdl" }

//New models to precache
new g_szNewModels[][] = {"models/extended/v_knife.mdl""models/extended/v_glock18.mdl""models/extended/v_ak47.mdl""models/extended/v_aug.mdl""models/extended/v_awp.mdl"
    
"models/extended/v_c4.mdl" "models/extended/v_deagle.mdl""models/extended/v_elite.mdl""models/extended/v_famas.mdl""models/extended/v_fiveseven.mdl"
    
"models/extended/v_flashbang.mdl""models/extended/v_g3sg1.mdl""models/extended/v_galil.mdl""models/extended/v_hegrenade.mdl""models/extended/v_m3.mdl"
    
"models/extended/v_xm1014.mdl""models/extended/v_m4a1.mdl""models/extended/v_m249.mdl""models/extended/v_mac10.mdl""models/extended/v_mp5.mdl""models/extended/v_p90.mdl"
    
"models/extended/v_p228.mdl""models/extended/v_scout.mdl""models/extended/v_sg550.mdl""models/extended/v_sg552.mdl""models/extended/v_smokegrenade.mdl""models/extended/v_tmp.mdl"
    
"models/extended/v_ump45.mdl""models/extended/v_usp.mdl"}

#if defined SHIELD_SUPPORT
// Old shield models to unprecache:
new g_szOldShieldModels[][] = {"models/shield/v_shield_usp.mdl""models/shield/v_shield_fiveseven.mdl""models/shield/v_shield_deagle.mdl",
    
"models/shield/v_shield_p228.mdl""models/shield/v_shield_knife.mdl""models/shield/v_shield_glock18.mdl",
    
"models/shield/v_shield_flashbang.mdl""models/shield/v_shield_hegrenade.mdl""models/shield/v_shield_smokegrenade.mdl"}

//New shield models to precache
new g_szNewShieldModels[][] = {"models/extended/v_shield_knife.mdl""models/extended/v_shield_glock18.mdl""models/extended/v_shield_deagle.mdl",
    
"models/extended/v_shield_fiveseven.mdl""models/extended/v_shield_flashbang.mdl""models/extended/v_shield_hegrenade.mdl",
    
"models/extended/v_shield_p228.mdl""models/extended/v_shield_smokegrenade.mdl""models/extended/v_shield_usp.mdl"}
    
new const 
g_szNewWeaponDirectoryShield[] = "models/extended/v_shield_"
#endif

new bool:IsUserAdmin[MAX_PLAYERS+1], g_pcvAdminFlagg_pcvAdminSking_pcvDefaultSkin

public plugin_init()
{
    
register_plugin("Extended Arm Weapon Skin""2.0""KayDee")
    
    
g_pcvAdminFlag register_cvar("eaws_admin_flag""")
    
g_pcvAdminSkin register_cvar("eaws_admin_skin""8")
    
g_pcvDefaultSkin register_cvar("eaws_default_skin""3")
    
    for(new 
isizeof g_szWeaponNamesi++)
    {
        
RegisterHam(Ham_Item_Deployg_szWeaponNames[i], "ItemDeployPost"1)
    }

    
g_tModels TrieCreate()
    
    for(new 
0BodyIDi++)
    {
        
TrieSetCell(g_tModelsg_szModelName[i], i)
    }

    
#if defined DEFAULT_MODE
    
if((g_iVault nvault_open(g_szVaultName)) == INVALID_HANDLE)
    {
        
set_fail_state("Vault file ^"%s^" coudln't be opened!"g_szVaultName)
    }

    
nvault_prune(g_iVault0get_systime() - (PRUNE_DAYS 86400))

    
register_clcmd("say /armskin""toggleCmd")
    
register_clcmd("say_team /armskin""toggleCmd")
    
register_clcmd("amx_armskin""toggleCmd")
    
#endif
}

#if defined DEFAULT_MODE
public plugin_end()
{
    
nvault_close(g_iVault)
}

public 
toggleCmd(id)
{
    
g_bActive[id] = !g_bActive[id]

    
client_print_color(idprint_team_default"%s You^4 %s^1 arm skin!"CHAT_TAGg_bActive[id] ? "enabled" "disabled")

    
nvault_set(g_iVaultg_szAuthID[id], fmt("%i"g_bActive[id] ? "1" "0"))
}
#endif

public plugin_precache()
{
    
register_forward(FM_PrecacheModel"Forward_PrecacheModel"0)    //Unprecache old viewmodels

    
for(new isizeof g_szNewModelsi++)
    {
        
precache_model(g_szNewModels[i])    //Precache now new viewmodels
    
}

    
#if defined SHIELD_SUPPORT
    
for(new isizeof g_szNewShieldModelsi++)
    {
        
precache_model(g_szNewShieldModels[i])    //Precache now new shield viewmodels
    
}
    
#endif
}

public 
Forward_PrecacheModel(const szModel[])
{
    for(new 
isizeof g_szOldModelsi++) 
    { 
        if(
equal(szModelg_szOldModels[i]))  
        {  
            
forward_return(FMV_CELL0)
            return 
FMRES_SUPERCEDE
        
}  
    }
    
#if defined SHIELD_SUPPORT
    
for(new isizeof g_szOldShieldModelsi++) 
    { 
        if(
equal(szModelg_szOldShieldModels[i]))  
        {
            
forward_return(FMV_CELL0)
            return 
FMRES_SUPERCEDE
        
}  
    }
    
#endif
    
return FMRES_IGNORED
}

public 
client_authorized(id)
{
    static 
szAdminFlags[16]
    if(
get_user_flags(id) & get_pcvar_string(g_pcvAdminFlagszAdminFlagscharsmax(szAdminFlags)))
        
IsUserAdmin[id] = true
    
else
        
IsUserAdmin[id] = false

    
#if defined DEFAULT_MODE
    
static szData[8], iTs
    get_user_authid
(idg_szAuthID[id], charsmax(g_szAuthID[]))

    if(
nvault_lookup(g_iVaultg_szAuthID[id], szDatacharsmax(szData), iTs))
    {
        
g_bActive[id] = bool:str_to_num(szData)
    }
    else
    {
        
g_bActive[id] = DEFAULT_VALUE
    
}
    
#endif
}  

public 
ItemDeployPost(iWeapon)
{    
    static 
id
    id 
get_pdata_cbase(iWeaponm_pPlayerXO_WEAPON)

    if(!
is_user_alive(id))
    {
        return 
HAM_IGNORED
    
}

    
#if defined DEFAULT_MODE
    
if(!g_bActive[id])
    {
        return 
HAM_IGNORED
    
}
    
#endif

    
static szModelInfo[9]
    
get_user_info(idg_szUserInfoModelszModelInfocharsmax(szModelInfo))
   
    new 
iNum;
    
// Admin Model
    
if(IsUserAdmin[id])
    {
        
cs_set_viewmodel_body(idget_pcvar_num(g_pcvAdminSkin))
    }
    
// Real Model
    
else if(TrieGetCell(g_tModelsszModelInfoiNum))
    {
        
cs_set_viewmodel_body(idiNum)
    }
    
// Custom Model
    
else
    {
        
cs_set_viewmodel_body(idget_pcvar_num(g_pcvDefaultSkin))
    }

    
set_task(0.1"SetSkin"id//this task is needed

    
return HAM_IGNORED
}

const 
m_bOwnsShield 2043
new const ShieldPossible = (<< CSW_HEGRENADE) | (<< CSW_SMOKEGRENADE) | (<< CSW_FLASHBANG) | (<< CSW_KNIFE) |(<< CSW_USP) | (<< CSW_P228) | (<< CSW_GLOCK18) | (<< CSW_FIVESEVEN) | (<< CSW_DEAGLE)

public 
SetSkin(id)
{
    if(!
is_user_alive(id))
        return
    
    new 
iWeapon get_user_weapon(id)
        
    if(!
iWeapon)
        return
        
    static 
szWeapon[64]
    
get_weaponname(iWeaponszWeaponcharsmax(szWeapon))
    
    if(
equal(szWeapong_szWeaponNameMp5Navy))
    {
        
replace(szWeaponcharsmax(szWeapon), szWeapong_szNewWeaponDirectoryMp5Navy)
    }
    
#if defined SHIELD_SUPPORT
    
else if(ShieldPossible & (<< iWeapon) && get_pdata_bool(idm_bOwnsShield))
    {
        
replace(szWeaponcharsmax(szWeapon), g_szWeaponNamePrefixg_szNewWeaponDirectoryShield)
        
formatex(szWeaponcharsmax(szWeapon), "%s%s"szWeapong_szModelNameExtension)
    }
    
#endif
    
else
    {
        
replace(szWeaponcharsmax(szWeapon), g_szWeaponNamePrefixg_szNewWeaponDirectory)
        
formatex(szWeaponcharsmax(szWeapon), "%s%s"szWeapong_szModelNameExtension)
    }    
    
set_pev(idpev_viewmodel2szWeapon)

don't tested , i think it s working. if not let me know

for players:
normal/team chat command: /armskin
console command: amx_armskin

Last edited by lexzor; 03-25-2023 at 17:31.
lexzor is offline
SoulWeaver16
Senior Member
Join Date: May 2021
Location: Uruguay
Old 03-26-2023 , 18:43   Re: Extended Arm Weapon Skin 2.0 [CS/CZ]
Reply With Quote #24

Quote:
Originally Posted by lexzor View Post
Code:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>

#define SHIELD_SUPPORT
//Shield can be disabled by changing code: //#define SHIELD_SUPPORT

#define DEFAULT_MODE
//This add the ability of the players to toggle if the plugin is active for them or not

#if defined DEFAULT_MODE
    #include <amxconst>
    #include <nvault>

    new const CHAT_TAG[] = "^4[ARM SKIN]^1" //Tag chat when toggle the weapon skinn view
    new const PRUNE_DAYS = 30 //After how many days the inactive entries will be deleted
    new const bool:DEFAULT_VALUE = true //Default value for players that never toggled model changer. True means that players skin will be changed by default until they disable it
#endif

//Linux diff
const XO_WEAPON = 4

// CBasePlayerItem
const m_pPlayer = 41 // CBasePlayer *

native cs_set_viewmodel_body(iPlayer, iValue);    //This will set v_ .mdl body (PlayerIndex, Bodygroup number)

enum _:BodyID
{
    Arctic,
    Gign,
    GSG9,
    Guerilla,
    Leet,
    SAS,
    Terror,
    Urban,
    VIP,
    Militia,
    Spetsnaz
}

new const g_szModelName[BodyID][] =
{
    "arctic",
    "gign",
    "gsg9",
    "guerilla",
    "leet",
    "sas",
    "terror",
    "urban",
    "vip",
    "militia",
    "spetsnaz"
}

new const g_szUserInfoModel[] = "model"
new const g_szWeaponNameMp5Navy[] = "weapon_mp5navy"
new const g_szNewWeaponDirectoryMp5Navy[] = "models/extended/v_mp5.mdl"

new const g_szWeaponNamePrefix[] = "weapon_"
new const g_szNewWeaponDirectory[] = "models/extended/v_"
new const g_szModelNameExtension[] = ".mdl"

new Trie:g_tModels

#if defined DEFAULT_MODE
    new const g_szVaultName[] = "extended_arm_weapon_skin"
    new g_iVault
    new bool:g_bActive[MAX_PLAYERS+1]
    new g_szAuthID[MAX_PLAYERS+1][MAX_AUTHID_LENGTH]
#endif

//Weapon ents
new g_szWeaponNames[][] = {"weapon_knife", "weapon_glock18", "weapon_ak47", "weapon_aug", "weapon_awp", "weapon_c4", "weapon_deagle", "weapon_elite", "weapon_famas", 
    "weapon_fiveseven", "weapon_flashbang", "weapon_g3sg1", "weapon_galil", "weapon_hegrenade", "weapon_m3", "weapon_xm1014", "weapon_m4a1", "weapon_m249", "weapon_mac10", 
    "weapon_mp5navy", "weapon_p90", "weapon_p228", "weapon_scout", "weapon_sg550", "weapon_sg552", "weapon_smokegrenade", "weapon_tmp", "weapon_ump45", "weapon_usp" }

//Old models to unprecache
new g_szOldModels[][] = {"models/v_knife.mdl", "models/v_glock18.mdl", "models/v_ak47.mdl", "models/v_aug.mdl", "models/v_awp.mdl", "models/v_c4.mdl" , "models/v_deagle.mdl", 
    "models/v_elite.mdl", "models/v_famas.mdl", "models/v_fiveseven.mdl", "models/v_flashbang.mdl", "models/v_g3sg1.mdl", "models/v_galil.mdl", "models/v_hegrenade.mdl", 
    "models/v_m3.mdl", "models/v_xm1014.mdl", "models/v_m4a1.mdl", "models/v_m249.mdl", "models/v_mac10.mdl", "models/v_mp5.mdl", "models/v_p90.mdl", "models/v_p228.mdl", 
    "models/v_scout.mdl", "models/v_sg550.mdl", "models/v_sg552.mdl", "models/v_smokegrenade.mdl", "models/v_tmp.mdl", "models/v_ump45.mdl", "models/v_usp.mdl" }

//New models to precache
new g_szNewModels[][] = {"models/extended/v_knife.mdl", "models/extended/v_glock18.mdl", "models/extended/v_ak47.mdl", "models/extended/v_aug.mdl", "models/extended/v_awp.mdl", 
    "models/extended/v_c4.mdl" , "models/extended/v_deagle.mdl", "models/extended/v_elite.mdl", "models/extended/v_famas.mdl", "models/extended/v_fiveseven.mdl", 
    "models/extended/v_flashbang.mdl", "models/extended/v_g3sg1.mdl", "models/extended/v_galil.mdl", "models/extended/v_hegrenade.mdl", "models/extended/v_m3.mdl", 
    "models/extended/v_xm1014.mdl", "models/extended/v_m4a1.mdl", "models/extended/v_m249.mdl", "models/extended/v_mac10.mdl", "models/extended/v_mp5.mdl", "models/extended/v_p90.mdl", 
    "models/extended/v_p228.mdl", "models/extended/v_scout.mdl", "models/extended/v_sg550.mdl", "models/extended/v_sg552.mdl", "models/extended/v_smokegrenade.mdl", "models/extended/v_tmp.mdl", 
    "models/extended/v_ump45.mdl", "models/extended/v_usp.mdl"}

#if defined SHIELD_SUPPORT
// Old shield models to unprecache:
new g_szOldShieldModels[][] = {"models/shield/v_shield_usp.mdl", "models/shield/v_shield_fiveseven.mdl", "models/shield/v_shield_deagle.mdl",
    "models/shield/v_shield_p228.mdl", "models/shield/v_shield_knife.mdl", "models/shield/v_shield_glock18.mdl",
    "models/shield/v_shield_flashbang.mdl", "models/shield/v_shield_hegrenade.mdl", "models/shield/v_shield_smokegrenade.mdl"}

//New shield models to precache
new g_szNewShieldModels[][] = {"models/extended/v_shield_knife.mdl", "models/extended/v_shield_glock18.mdl", "models/extended/v_shield_deagle.mdl",
    "models/extended/v_shield_fiveseven.mdl", "models/extended/v_shield_flashbang.mdl", "models/extended/v_shield_hegrenade.mdl",
    "models/extended/v_shield_p228.mdl", "models/extended/v_shield_smokegrenade.mdl", "models/extended/v_shield_usp.mdl"}
    
new const g_szNewWeaponDirectoryShield[] = "models/extended/v_shield_"
#endif

new bool:IsUserAdmin[MAX_PLAYERS+1], g_pcvAdminFlag, g_pcvAdminSkin, g_pcvDefaultSkin

public plugin_init()
{
    register_plugin("Extended Arm Weapon Skin", "2.0", "KayDee")
    
    g_pcvAdminFlag = register_cvar("eaws_admin_flag", "")
    g_pcvAdminSkin = register_cvar("eaws_admin_skin", "8")
    g_pcvDefaultSkin = register_cvar("eaws_default_skin", "3")
    
    for(new i; i < sizeof g_szWeaponNames; i++)
    {
        RegisterHam(Ham_Item_Deploy, g_szWeaponNames[i], "ItemDeployPost", 1)
    }

    g_tModels = TrieCreate()
    
    for(new i = 0; i < BodyID; i++)
    {
        TrieSetCell(g_tModels, g_szModelName[i], i)
    }

    #if defined DEFAULT_MODE
    if((g_iVault = nvault_open(g_szVaultName)) == INVALID_HANDLE)
    {
        set_fail_state("Vault file ^"%s^" coudln't be opened!", g_szVaultName)
    }

    nvault_prune(g_iVault, 0, get_systime() - (PRUNE_DAYS * 86400))

    register_clcmd("say /armskin", "toggleCmd")
    register_clcmd("say_team /armskin", "toggleCmd")
    register_clcmd("amx_armskin", "toggleCmd")
    #endif
}

#if defined DEFAULT_MODE
public plugin_end()
{
	nvault_close(g_iVault)
}

public toggleCmd(id)
{
    g_bActive[id] = !g_bActive[id]

    client_print_color(id, print_team_default, "%s You^4 %s^1 arm skin!", CHAT_TAG, g_bActive[id] ? "enabled" : "disabled")

    nvault_set(g_iVault, g_szAuthID[id], fmt("%i", g_bActive[id] ? "1" : "0"))
}
#endif

public plugin_precache()
{
    register_forward(FM_PrecacheModel, "Forward_PrecacheModel", 0)    //Unprecache old viewmodels

    for(new i; i < sizeof g_szNewModels; i++)
    {
        precache_model(g_szNewModels[i])    //Precache now new viewmodels
    }

    #if defined SHIELD_SUPPORT
    for(new i; i < sizeof g_szNewShieldModels; i++)
    {
        precache_model(g_szNewShieldModels[i])    //Precache now new shield viewmodels
    }
    #endif
}

public Forward_PrecacheModel(const szModel[])
{
    for(new i; i < sizeof g_szOldModels; i++) 
    { 
        if(equal(szModel, g_szOldModels[i]))  
        {  
            forward_return(FMV_CELL, 0)
            return FMRES_SUPERCEDE
        }  
    }
    #if defined SHIELD_SUPPORT
    for(new i; i < sizeof g_szOldShieldModels; i++) 
    { 
        if(equal(szModel, g_szOldShieldModels[i]))  
        {
            forward_return(FMV_CELL, 0)
            return FMRES_SUPERCEDE
        }  
    }
    #endif
    return FMRES_IGNORED
}

public client_authorized(id)
{
    static szAdminFlags[16]
    if(get_user_flags(id) & get_pcvar_string(g_pcvAdminFlag, szAdminFlags, charsmax(szAdminFlags)))
        IsUserAdmin[id] = true
    else
        IsUserAdmin[id] = false

    #if defined DEFAULT_MODE
    static szData[8], iTs
    get_user_authid(id, g_szAuthID[id], charsmax(g_szAuthID[]))

    if(nvault_lookup(g_iVault, g_szAuthID[id], szData, charsmax(szData), iTs))
    {
        g_bActive[id] = bool:str_to_num(szData)
	}
    else
    {
        g_bActive[id] = DEFAULT_VALUE
    }
    #endif
}  

public ItemDeployPost(iWeapon)
{    
    static id
    id = get_pdata_cbase(iWeapon, m_pPlayer, XO_WEAPON)

    if(!is_user_alive(id))
    {
        return HAM_IGNORED
    }

    #if defined DEFAULT_MODE
    if(!g_bActive[id])
    {
        return HAM_IGNORED
    }
    #endif

    static szModelInfo[9]
    get_user_info(id, g_szUserInfoModel, szModelInfo, charsmax(szModelInfo))
   
    new iNum;
    // Admin Model
    if(IsUserAdmin[id])
    {
        cs_set_viewmodel_body(id, get_pcvar_num(g_pcvAdminSkin))
    }
    // Real Model
    else if(TrieGetCell(g_tModels, szModelInfo, iNum))
    {
        cs_set_viewmodel_body(id, iNum)
    }
    // Custom Model
    else
    {
        cs_set_viewmodel_body(id, get_pcvar_num(g_pcvDefaultSkin))
    }

    set_task(0.1, "SetSkin", id) //this task is needed

    return HAM_IGNORED
}

const m_bOwnsShield = 2043
new const ShieldPossible = (1 << CSW_HEGRENADE) | (1 << CSW_SMOKEGRENADE) | (1 << CSW_FLASHBANG) | (1 << CSW_KNIFE) |(1 << CSW_USP) | (1 << CSW_P228) | (1 << CSW_GLOCK18) | (1 << CSW_FIVESEVEN) | (1 << CSW_DEAGLE)

public SetSkin(id)
{
    if(!is_user_alive(id))
        return
    
    new iWeapon = get_user_weapon(id)
        
    if(!iWeapon)
        return
        
    static szWeapon[64]
    get_weaponname(iWeapon, szWeapon, charsmax(szWeapon))
    
    if(equal(szWeapon, g_szWeaponNameMp5Navy))
    {
        replace(szWeapon, charsmax(szWeapon), szWeapon, g_szNewWeaponDirectoryMp5Navy)
    }
    #if defined SHIELD_SUPPORT
    else if(ShieldPossible & (1 << iWeapon) && get_pdata_bool(id, m_bOwnsShield))
    {
        replace(szWeapon, charsmax(szWeapon), g_szWeaponNamePrefix, g_szNewWeaponDirectoryShield)
        formatex(szWeapon, charsmax(szWeapon), "%s%s", szWeapon, g_szModelNameExtension)
    }
    #endif
    else
    {
        replace(szWeapon, charsmax(szWeapon), g_szWeaponNamePrefix, g_szNewWeaponDirectory)
        formatex(szWeapon, charsmax(szWeapon), "%s%s", szWeapon, g_szModelNameExtension)
    }    
    set_pev(id, pev_viewmodel2, szWeapon)
}
don't tested , i think it s working. if not let me know

for players:
normal/team chat command: /armskin
console command: amx_armskin
Thanks for answering, the plugin works but not as it should, the weapon just disappears, there is nothing left, I think it is because the original models are downloaded before, and they are not activated again with the command, but for the bots the weapon continues visible with the plugin.

[OFF]

[ON]
__________________
Extended Arm Weapon Skin v2.1 {16/Apr/23}
(Detect which class is and associate it with the corresponding arms)
SideWeapons v0.2 {01/Sep/22}
(New version of Back Weapons v1.87)


Last edited by SoulWeaver16; 04-16-2023 at 14:42.
SoulWeaver16 is offline
lexzor
Veteran Member
Join Date: Nov 2020
Old 03-27-2023 , 12:54   Re: Extended Arm Weapon Skin 2.0 [CS/CZ] {22 Aug 2022}
Reply With Quote #25

i can't install the plugin on my server, saying the native from setviewentitybody2 does not exists even if i installed it correctly

anyways, the above problem can be cause by stopping precaching default models from the game.

tried to avoid unprecaching default models when this feature is enabled


PHP Code:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>

#define SHIELD_SUPPORT
//Shield can be disabled by changing code: //#define SHIELD_SUPPORT

#define DEFAULT_MODE
//This add the ability of the players to toggle if the plugin is active for them or not

#if defined DEFAULT_MODE
    #include <amxconst>
    #include <nvault>

    
new const CHAT_TAG[] = "^4[ARM SKIN]^1" //Tag chat when toggle the weapon skinn view
    
new const PRUNE_DAYS 30 //After how many days the inactive entries will be deleted
    
new const bool:DEFAULT_VALUE true //Default value for players that never toggled model changer. True means that players skin will be changed by default until they disable it
#endif

//Linux diff
const XO_WEAPON 4

// CBasePlayerItem
const m_pPlayer 41 // CBasePlayer *

native cs_set_viewmodel_body(iPlayeriValue);    //This will set v_ .mdl body (PlayerIndex, Bodygroup number)

enum _:BodyID
{
    
Arctic,
    
Gign,
    
GSG9,
    
Guerilla,
    
Leet,
    
SAS,
    
Terror,
    
Urban,
    
VIP,
    
Militia,
    
Spetsnaz
}

new const 
g_szModelName[BodyID][] =
{
    
"arctic",
    
"gign",
    
"gsg9",
    
"guerilla",
    
"leet",
    
"sas",
    
"terror",
    
"urban",
    
"vip",
    
"militia",
    
"spetsnaz"
}

new const 
g_szUserInfoModel[] = "model"
new const g_szWeaponNameMp5Navy[] = "weapon_mp5navy"
new const g_szNewWeaponDirectoryMp5Navy[] = "models/extended/v_mp5.mdl"

new const g_szWeaponNamePrefix[] = "weapon_"
new const g_szNewWeaponDirectory[] = "models/extended/v_"
new const g_szModelNameExtension[] = ".mdl"

new Trie:g_tModels

#if defined DEFAULT_MODE
    
new const g_szVaultName[] = "extended_arm_weapon_skin"
    
new g_iVault
    
new bool:g_bActive[MAX_PLAYERS+1]
    new 
g_szAuthID[MAX_PLAYERS+1][MAX_AUTHID_LENGTH]
#endif

//Weapon ents
new g_szWeaponNames[][] = {"weapon_knife""weapon_glock18""weapon_ak47""weapon_aug""weapon_awp""weapon_c4""weapon_deagle""weapon_elite""weapon_famas"
    
"weapon_fiveseven""weapon_flashbang""weapon_g3sg1""weapon_galil""weapon_hegrenade""weapon_m3""weapon_xm1014""weapon_m4a1""weapon_m249""weapon_mac10"
    
"weapon_mp5navy""weapon_p90""weapon_p228""weapon_scout""weapon_sg550""weapon_sg552""weapon_smokegrenade""weapon_tmp""weapon_ump45""weapon_usp" }

//Old models to unprecache
new g_szOldModels[][] = {"models/v_knife.mdl""models/v_glock18.mdl""models/v_ak47.mdl""models/v_aug.mdl""models/v_awp.mdl""models/v_c4.mdl" "models/v_deagle.mdl"
    
"models/v_elite.mdl""models/v_famas.mdl""models/v_fiveseven.mdl""models/v_flashbang.mdl""models/v_g3sg1.mdl""models/v_galil.mdl""models/v_hegrenade.mdl"
    
"models/v_m3.mdl""models/v_xm1014.mdl""models/v_m4a1.mdl""models/v_m249.mdl""models/v_mac10.mdl""models/v_mp5.mdl""models/v_p90.mdl""models/v_p228.mdl"
    
"models/v_scout.mdl""models/v_sg550.mdl""models/v_sg552.mdl""models/v_smokegrenade.mdl""models/v_tmp.mdl""models/v_ump45.mdl""models/v_usp.mdl" }

//New models to precache
new g_szNewModels[][] = {"models/extended/v_knife.mdl""models/extended/v_glock18.mdl""models/extended/v_ak47.mdl""models/extended/v_aug.mdl""models/extended/v_awp.mdl"
    
"models/extended/v_c4.mdl" "models/extended/v_deagle.mdl""models/extended/v_elite.mdl""models/extended/v_famas.mdl""models/extended/v_fiveseven.mdl"
    
"models/extended/v_flashbang.mdl""models/extended/v_g3sg1.mdl""models/extended/v_galil.mdl""models/extended/v_hegrenade.mdl""models/extended/v_m3.mdl"
    
"models/extended/v_xm1014.mdl""models/extended/v_m4a1.mdl""models/extended/v_m249.mdl""models/extended/v_mac10.mdl""models/extended/v_mp5.mdl""models/extended/v_p90.mdl"
    
"models/extended/v_p228.mdl""models/extended/v_scout.mdl""models/extended/v_sg550.mdl""models/extended/v_sg552.mdl""models/extended/v_smokegrenade.mdl""models/extended/v_tmp.mdl"
    
"models/extended/v_ump45.mdl""models/extended/v_usp.mdl"}

#if defined SHIELD_SUPPORT
// Old shield models to unprecache:
new g_szOldShieldModels[][] = {"models/shield/v_shield_usp.mdl""models/shield/v_shield_fiveseven.mdl""models/shield/v_shield_deagle.mdl",
    
"models/shield/v_shield_p228.mdl""models/shield/v_shield_knife.mdl""models/shield/v_shield_glock18.mdl",
    
"models/shield/v_shield_flashbang.mdl""models/shield/v_shield_hegrenade.mdl""models/shield/v_shield_smokegrenade.mdl"}

//New shield models to precache
new g_szNewShieldModels[][] = {"models/extended/v_shield_knife.mdl""models/extended/v_shield_glock18.mdl""models/extended/v_shield_deagle.mdl",
    
"models/extended/v_shield_fiveseven.mdl""models/extended/v_shield_flashbang.mdl""models/extended/v_shield_hegrenade.mdl",
    
"models/extended/v_shield_p228.mdl""models/extended/v_shield_smokegrenade.mdl""models/extended/v_shield_usp.mdl"}
    
new const 
g_szNewWeaponDirectoryShield[] = "models/extended/v_shield_"
#endif

new bool:IsUserAdmin[MAX_PLAYERS+1], g_pcvAdminFlagg_pcvAdminSking_pcvDefaultSkin

public plugin_init()
{
    
register_plugin("Extended Arm Weapon Skin""2.0""KayDee")
    
    
g_pcvAdminFlag register_cvar("eaws_admin_flag""")
    
g_pcvAdminSkin register_cvar("eaws_admin_skin""8")
    
g_pcvDefaultSkin register_cvar("eaws_default_skin""3")
    
    for(new 
isizeof g_szWeaponNamesi++)
    {
        
RegisterHam(Ham_Item_Deployg_szWeaponNames[i], "ItemDeployPost"1)
    }

    
g_tModels TrieCreate()
    
    for(new 
0BodyIDi++)
    {
        
TrieSetCell(g_tModelsg_szModelName[i], i)
    }

    
#if defined DEFAULT_MODE
    
if((g_iVault nvault_open(g_szVaultName)) == INVALID_HANDLE)
    {
        
set_fail_state("Vault file ^"%s^" coudln't be opened!"g_szVaultName)
    }

    
nvault_prune(g_iVault0get_systime() - (PRUNE_DAYS 86400))

    
register_clcmd("say /armskin""toggleCmd")
    
register_clcmd("say_team /armskin""toggleCmd")
    
register_clcmd("amx_armskin""toggleCmd")
    
#endif
}

#if defined DEFAULT_MODE
public plugin_end()
{
    
nvault_close(g_iVault)
}

public 
toggleCmd(id)
{
    
g_bActive[id] = !g_bActive[id]

    
client_print_color(idprint_team_default"%s You^4 %s^1 arm skin!"CHAT_TAGg_bActive[id] ? "enabled" "disabled")

    
nvault_set(g_iVaultg_szAuthID[id], fmt("%i"g_bActive[id] ? "1" "0"))
}
#endif

public plugin_precache()
{
    
register_forward(FM_PrecacheModel"Forward_PrecacheModel"0)    //Unprecache old viewmodels

    
for(new isizeof g_szNewModelsi++)
    {
        
precache_model(g_szNewModels[i])    //Precache now new viewmodels
    
}

    
#if defined SHIELD_SUPPORT
    
for(new isizeof g_szNewShieldModelsi++)
    {
        
precache_model(g_szNewShieldModels[i])    //Precache now new shield viewmodels
    
}
    
#endif
}

public 
Forward_PrecacheModel(const szModel[])
{
    
#if !defined DEFAULT_MODE
    
for(new isizeof g_szOldModelsi++) 
    { 
        if(
equal(szModelg_szOldModels[i]))  
        {  
            
forward_return(FMV_CELL0)
            return 
FMRES_SUPERCEDE
        
}  
    }
    
#endif 

    #if defined SHIELD_SUPPORT
    
for(new isizeof g_szOldShieldModelsi++) 
    { 
        if(
equal(szModelg_szOldShieldModels[i]))  
        {
            
forward_return(FMV_CELL0)
            return 
FMRES_SUPERCEDE
        
}  
    }
    
#endif
    
return FMRES_IGNORED
}

public 
client_authorized(id)
{
    static 
szAdminFlags[16]
    if(
get_user_flags(id) & get_pcvar_string(g_pcvAdminFlagszAdminFlagscharsmax(szAdminFlags)))
        
IsUserAdmin[id] = true
    
else
        
IsUserAdmin[id] = false

    
#if defined DEFAULT_MODE
    
static szData[8], iTs
    get_user_authid
(idg_szAuthID[id], charsmax(g_szAuthID[]))

    if(
nvault_lookup(g_iVaultg_szAuthID[id], szDatacharsmax(szData), iTs))
    {
        
g_bActive[id] = bool:str_to_num(szData)
    }
    else
    {
        
g_bActive[id] = DEFAULT_VALUE
    
}
    
#endif
}  

public 
ItemDeployPost(iWeapon)
{    
    static 
id
    id 
get_pdata_cbase(iWeaponm_pPlayerXO_WEAPON)

    if(!
is_user_alive(id))
    {
        return 
HAM_IGNORED
    
}

    
#if defined DEFAULT_MODE
    
if(!g_bActive[id])
    {
        return 
HAM_IGNORED
    
}
    
#endif

    
static szModelInfo[9]
    
get_user_info(idg_szUserInfoModelszModelInfocharsmax(szModelInfo))
   
    new 
iNum;
    
// Admin Model
    
if(IsUserAdmin[id])
    {
        
cs_set_viewmodel_body(idget_pcvar_num(g_pcvAdminSkin))
    }
    
// Real Model
    
else if(TrieGetCell(g_tModelsszModelInfoiNum))
    {
        
cs_set_viewmodel_body(idiNum)
    }
    
// Custom Model
    
else
    {
        
cs_set_viewmodel_body(idget_pcvar_num(g_pcvDefaultSkin))
    }

    
set_task(0.1"SetSkin"id//this task is needed

    
return HAM_IGNORED
}

#if defined SHIELD_SUPPORT
const m_bOwnsShield 2043
new const ShieldPossible = (<< CSW_HEGRENADE) | (<< CSW_SMOKEGRENADE) | (<< CSW_FLASHBANG) | (<< CSW_KNIFE) |(<< CSW_USP) | (<< CSW_P228) | (<< CSW_GLOCK18) | (<< CSW_FIVESEVEN) | (<< CSW_DEAGLE)
#endif

public SetSkin(id)
{
    if(!
is_user_alive(id))
        return
    
    new 
iWeapon get_user_weapon(id)
        
    if(!
iWeapon)
        return
        
    static 
szWeapon[64]
    
get_weaponname(iWeaponszWeaponcharsmax(szWeapon))
    
    if(
equal(szWeapong_szWeaponNameMp5Navy))
    {
        
replace(szWeaponcharsmax(szWeapon), szWeapong_szNewWeaponDirectoryMp5Navy)
    }
    
#if defined SHIELD_SUPPORT
    
else if(ShieldPossible & (<< iWeapon) && get_pdata_bool(idm_bOwnsShield))
    {
        
replace(szWeaponcharsmax(szWeapon), g_szWeaponNamePrefixg_szNewWeaponDirectoryShield)
        
formatex(szWeaponcharsmax(szWeapon), "%s%s"szWeapong_szModelNameExtension)
    }
    
#endif
    
else
    {
        
replace(szWeaponcharsmax(szWeapon), g_szWeaponNamePrefixg_szNewWeaponDirectory)
        
formatex(szWeaponcharsmax(szWeapon), "%s%s"szWeapong_szModelNameExtension)
    }    
    
set_pev(idpev_viewmodel2szWeapon)

also i suggest you to put the shield models and skin arm models in same archieve in an folder called "extended".

most of server owners doesn't know a grain of coding and it's easier to install

i added this too:
PHP Code:
#if defined SHIELD_SUPPORT
const m_bOwnsShield 2043
new const ShieldPossible = (<< CSW_HEGRENADE) | (<< CSW_SMOKEGRENADE) | (<< CSW_FLASHBANG) | (<< CSW_KNIFE) |(<< CSW_USP) | (<< CSW_P228) | (<< CSW_GLOCK18) | (<< CSW_FIVESEVEN) | (<< CSW_DEAGLE)
#endif 
due to a not used variable when not using shield support


and what do you mean by "the bots are still visible"? shall they not be?

Last edited by lexzor; 03-27-2023 at 12:58.
lexzor is offline
bibu
Veteran Member
Join Date: Sep 2010
Old 03-28-2023 , 05:12   Re: Extended Arm Weapon Skin 2.0 [CS/CZ] {22 Aug 2022}
Reply With Quote #26

Easiest way would be to provide the default skins within the submodels, so the "default" models can be unprecached. Otherwise it's gonna use too much resources. Or another way would be to use the default submodel, which is by default the value of "3".
__________________
Selling tons of my own private works.
Accepting paid work for clans and communities.
Don't hesitate to contact me.
bibu is offline
SoulWeaver16
Senior Member
Join Date: May 2021
Location: Uruguay
Old 04-16-2023 , 14:45   Re: Extended Arm Weapon Skin 2.0 [CS/CZ] {22 Aug 2022}
Reply With Quote #27

Quote:
Originally Posted by lexzor View Post
i can't install the plugin on my server, saying the native from setviewentitybody2 does not exists even if i installed it correctly

anyways, the above problem can be cause by stopping precaching default models from the game.

tried to avoid unprecaching default models when this feature is enabled


PHP Code:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>

#define SHIELD_SUPPORT
//Shield can be disabled by changing code: //#define SHIELD_SUPPORT

#define DEFAULT_MODE
//This add the ability of the players to toggle if the plugin is active for them or not

#if defined DEFAULT_MODE
    #include <amxconst>
    #include <nvault>

    
new const CHAT_TAG[] = "^4[ARM SKIN]^1" //Tag chat when toggle the weapon skinn view
    
new const PRUNE_DAYS 30 //After how many days the inactive entries will be deleted
    
new const bool:DEFAULT_VALUE true //Default value for players that never toggled model changer. True means that players skin will be changed by default until they disable it
#endif

//Linux diff
const XO_WEAPON 4

// CBasePlayerItem
const m_pPlayer 41 // CBasePlayer *

native cs_set_viewmodel_body(iPlayeriValue);    //This will set v_ .mdl body (PlayerIndex, Bodygroup number)

enum _:BodyID
{
    
Arctic,
    
Gign,
    
GSG9,
    
Guerilla,
    
Leet,
    
SAS,
    
Terror,
    
Urban,
    
VIP,
    
Militia,
    
Spetsnaz
}

new const 
g_szModelName[BodyID][] =
{
    
"arctic",
    
"gign",
    
"gsg9",
    
"guerilla",
    
"leet",
    
"sas",
    
"terror",
    
"urban",
    
"vip",
    
"militia",
    
"spetsnaz"
}

new const 
g_szUserInfoModel[] = "model"
new const g_szWeaponNameMp5Navy[] = "weapon_mp5navy"
new const g_szNewWeaponDirectoryMp5Navy[] = "models/extended/v_mp5.mdl"

new const g_szWeaponNamePrefix[] = "weapon_"
new const g_szNewWeaponDirectory[] = "models/extended/v_"
new const g_szModelNameExtension[] = ".mdl"

new Trie:g_tModels

#if defined DEFAULT_MODE
    
new const g_szVaultName[] = "extended_arm_weapon_skin"
    
new g_iVault
    
new bool:g_bActive[MAX_PLAYERS+1]
    new 
g_szAuthID[MAX_PLAYERS+1][MAX_AUTHID_LENGTH]
#endif

//Weapon ents
new g_szWeaponNames[][] = {"weapon_knife""weapon_glock18""weapon_ak47""weapon_aug""weapon_awp""weapon_c4""weapon_deagle""weapon_elite""weapon_famas"
    
"weapon_fiveseven""weapon_flashbang""weapon_g3sg1""weapon_galil""weapon_hegrenade""weapon_m3""weapon_xm1014""weapon_m4a1""weapon_m249""weapon_mac10"
    
"weapon_mp5navy""weapon_p90""weapon_p228""weapon_scout""weapon_sg550""weapon_sg552""weapon_smokegrenade""weapon_tmp""weapon_ump45""weapon_usp" }

//Old models to unprecache
new g_szOldModels[][] = {"models/v_knife.mdl""models/v_glock18.mdl""models/v_ak47.mdl""models/v_aug.mdl""models/v_awp.mdl""models/v_c4.mdl" "models/v_deagle.mdl"
    
"models/v_elite.mdl""models/v_famas.mdl""models/v_fiveseven.mdl""models/v_flashbang.mdl""models/v_g3sg1.mdl""models/v_galil.mdl""models/v_hegrenade.mdl"
    
"models/v_m3.mdl""models/v_xm1014.mdl""models/v_m4a1.mdl""models/v_m249.mdl""models/v_mac10.mdl""models/v_mp5.mdl""models/v_p90.mdl""models/v_p228.mdl"
    
"models/v_scout.mdl""models/v_sg550.mdl""models/v_sg552.mdl""models/v_smokegrenade.mdl""models/v_tmp.mdl""models/v_ump45.mdl""models/v_usp.mdl" }

//New models to precache
new g_szNewModels[][] = {"models/extended/v_knife.mdl""models/extended/v_glock18.mdl""models/extended/v_ak47.mdl""models/extended/v_aug.mdl""models/extended/v_awp.mdl"
    
"models/extended/v_c4.mdl" "models/extended/v_deagle.mdl""models/extended/v_elite.mdl""models/extended/v_famas.mdl""models/extended/v_fiveseven.mdl"
    
"models/extended/v_flashbang.mdl""models/extended/v_g3sg1.mdl""models/extended/v_galil.mdl""models/extended/v_hegrenade.mdl""models/extended/v_m3.mdl"
    
"models/extended/v_xm1014.mdl""models/extended/v_m4a1.mdl""models/extended/v_m249.mdl""models/extended/v_mac10.mdl""models/extended/v_mp5.mdl""models/extended/v_p90.mdl"
    
"models/extended/v_p228.mdl""models/extended/v_scout.mdl""models/extended/v_sg550.mdl""models/extended/v_sg552.mdl""models/extended/v_smokegrenade.mdl""models/extended/v_tmp.mdl"
    
"models/extended/v_ump45.mdl""models/extended/v_usp.mdl"}

#if defined SHIELD_SUPPORT
// Old shield models to unprecache:
new g_szOldShieldModels[][] = {"models/shield/v_shield_usp.mdl""models/shield/v_shield_fiveseven.mdl""models/shield/v_shield_deagle.mdl",
    
"models/shield/v_shield_p228.mdl""models/shield/v_shield_knife.mdl""models/shield/v_shield_glock18.mdl",
    
"models/shield/v_shield_flashbang.mdl""models/shield/v_shield_hegrenade.mdl""models/shield/v_shield_smokegrenade.mdl"}

//New shield models to precache
new g_szNewShieldModels[][] = {"models/extended/v_shield_knife.mdl""models/extended/v_shield_glock18.mdl""models/extended/v_shield_deagle.mdl",
    
"models/extended/v_shield_fiveseven.mdl""models/extended/v_shield_flashbang.mdl""models/extended/v_shield_hegrenade.mdl",
    
"models/extended/v_shield_p228.mdl""models/extended/v_shield_smokegrenade.mdl""models/extended/v_shield_usp.mdl"}
    
new const 
g_szNewWeaponDirectoryShield[] = "models/extended/v_shield_"
#endif

new bool:IsUserAdmin[MAX_PLAYERS+1], g_pcvAdminFlagg_pcvAdminSking_pcvDefaultSkin

public plugin_init()
{
    
register_plugin("Extended Arm Weapon Skin""2.0""KayDee")
    
    
g_pcvAdminFlag register_cvar("eaws_admin_flag""")
    
g_pcvAdminSkin register_cvar("eaws_admin_skin""8")
    
g_pcvDefaultSkin register_cvar("eaws_default_skin""3")
    
    for(new 
isizeof g_szWeaponNamesi++)
    {
        
RegisterHam(Ham_Item_Deployg_szWeaponNames[i], "ItemDeployPost"1)
    }

    
g_tModels TrieCreate()
    
    for(new 
0BodyIDi++)
    {
        
TrieSetCell(g_tModelsg_szModelName[i], i)
    }

    
#if defined DEFAULT_MODE
    
if((g_iVault nvault_open(g_szVaultName)) == INVALID_HANDLE)
    {
        
set_fail_state("Vault file ^"%s^" coudln't be opened!"g_szVaultName)
    }

    
nvault_prune(g_iVault0get_systime() - (PRUNE_DAYS 86400))

    
register_clcmd("say /armskin""toggleCmd")
    
register_clcmd("say_team /armskin""toggleCmd")
    
register_clcmd("amx_armskin""toggleCmd")
    
#endif
}

#if defined DEFAULT_MODE
public plugin_end()
{
    
nvault_close(g_iVault)
}

public 
toggleCmd(id)
{
    
g_bActive[id] = !g_bActive[id]

    
client_print_color(idprint_team_default"%s You^4 %s^1 arm skin!"CHAT_TAGg_bActive[id] ? "enabled" "disabled")

    
nvault_set(g_iVaultg_szAuthID[id], fmt("%i"g_bActive[id] ? "1" "0"))
}
#endif

public plugin_precache()
{
    
register_forward(FM_PrecacheModel"Forward_PrecacheModel"0)    //Unprecache old viewmodels

    
for(new isizeof g_szNewModelsi++)
    {
        
precache_model(g_szNewModels[i])    //Precache now new viewmodels
    
}

    
#if defined SHIELD_SUPPORT
    
for(new isizeof g_szNewShieldModelsi++)
    {
        
precache_model(g_szNewShieldModels[i])    //Precache now new shield viewmodels
    
}
    
#endif
}

public 
Forward_PrecacheModel(const szModel[])
{
    
#if !defined DEFAULT_MODE
    
for(new isizeof g_szOldModelsi++) 
    { 
        if(
equal(szModelg_szOldModels[i]))  
        {  
            
forward_return(FMV_CELL0)
            return 
FMRES_SUPERCEDE
        
}  
    }
    
#endif 

    #if defined SHIELD_SUPPORT
    
for(new isizeof g_szOldShieldModelsi++) 
    { 
        if(
equal(szModelg_szOldShieldModels[i]))  
        {
            
forward_return(FMV_CELL0)
            return 
FMRES_SUPERCEDE
        
}  
    }
    
#endif
    
return FMRES_IGNORED
}

public 
client_authorized(id)
{
    static 
szAdminFlags[16]
    if(
get_user_flags(id) & get_pcvar_string(g_pcvAdminFlagszAdminFlagscharsmax(szAdminFlags)))
        
IsUserAdmin[id] = true
    
else
        
IsUserAdmin[id] = false

    
#if defined DEFAULT_MODE
    
static szData[8], iTs
    get_user_authid
(idg_szAuthID[id], charsmax(g_szAuthID[]))

    if(
nvault_lookup(g_iVaultg_szAuthID[id], szDatacharsmax(szData), iTs))
    {
        
g_bActive[id] = bool:str_to_num(szData)
    }
    else
    {
        
g_bActive[id] = DEFAULT_VALUE
    
}
    
#endif
}  

public 
ItemDeployPost(iWeapon)
{    
    static 
id
    id 
get_pdata_cbase(iWeaponm_pPlayerXO_WEAPON)

    if(!
is_user_alive(id))
    {
        return 
HAM_IGNORED
    
}

    
#if defined DEFAULT_MODE
    
if(!g_bActive[id])
    {
        return 
HAM_IGNORED
    
}
    
#endif

    
static szModelInfo[9]
    
get_user_info(idg_szUserInfoModelszModelInfocharsmax(szModelInfo))
   
    new 
iNum;
    
// Admin Model
    
if(IsUserAdmin[id])
    {
        
cs_set_viewmodel_body(idget_pcvar_num(g_pcvAdminSkin))
    }
    
// Real Model
    
else if(TrieGetCell(g_tModelsszModelInfoiNum))
    {
        
cs_set_viewmodel_body(idiNum)
    }
    
// Custom Model
    
else
    {
        
cs_set_viewmodel_body(idget_pcvar_num(g_pcvDefaultSkin))
    }

    
set_task(0.1"SetSkin"id//this task is needed

    
return HAM_IGNORED
}

#if defined SHIELD_SUPPORT
const m_bOwnsShield 2043
new const ShieldPossible = (<< CSW_HEGRENADE) | (<< CSW_SMOKEGRENADE) | (<< CSW_FLASHBANG) | (<< CSW_KNIFE) |(<< CSW_USP) | (<< CSW_P228) | (<< CSW_GLOCK18) | (<< CSW_FIVESEVEN) | (<< CSW_DEAGLE)
#endif

public SetSkin(id)
{
    if(!
is_user_alive(id))
        return
    
    new 
iWeapon get_user_weapon(id)
        
    if(!
iWeapon)
        return
        
    static 
szWeapon[64]
    
get_weaponname(iWeaponszWeaponcharsmax(szWeapon))
    
    if(
equal(szWeapong_szWeaponNameMp5Navy))
    {
        
replace(szWeaponcharsmax(szWeapon), szWeapong_szNewWeaponDirectoryMp5Navy)
    }
    
#if defined SHIELD_SUPPORT
    
else if(ShieldPossible & (<< iWeapon) && get_pdata_bool(idm_bOwnsShield))
    {
        
replace(szWeaponcharsmax(szWeapon), g_szWeaponNamePrefixg_szNewWeaponDirectoryShield)
        
formatex(szWeaponcharsmax(szWeapon), "%s%s"szWeapong_szModelNameExtension)
    }
    
#endif
    
else
    {
        
replace(szWeaponcharsmax(szWeapon), g_szWeaponNamePrefixg_szNewWeaponDirectory)
        
formatex(szWeaponcharsmax(szWeapon), "%s%s"szWeapong_szModelNameExtension)
    }    
    
set_pev(idpev_viewmodel2szWeapon)

also i suggest you to put the shield models and skin arm models in same archieve in an folder called "extended".

most of server owners doesn't know a grain of coding and it's easier to install

i added this too:
PHP Code:
#if defined SHIELD_SUPPORT
const m_bOwnsShield 2043
new const ShieldPossible = (<< CSW_HEGRENADE) | (<< CSW_SMOKEGRENADE) | (<< CSW_FLASHBANG) | (<< CSW_KNIFE) |(<< CSW_USP) | (<< CSW_P228) | (<< CSW_GLOCK18) | (<< CSW_FIVESEVEN) | (<< CSW_DEAGLE)
#endif 
due to a not used variable when not using shield support


and what do you mean by "the bots are still visible"? shall they not be?
Hello, thanks for your input and suggestion.
And the thing about the bots is still visible, it was a bad translation from Google Translator hahah, it meant that for the bots the weapon is still visible in first person.
-o-
The Extended folder already contains the v_ and Shield models in the same folder
The reason I'm putting it apart is for those who don't use Shield support, which seems to be the majority of servers, besides it had been an optional feature, we didn't know if it would cause too many problems and we would end up removing it, at the moment it seems to be stable, that's why it stayed that way.
-o-
Your code makes g_szOldModels unusable
PHP Code:
C:\Program Files (x86)\Steam\steamapps\common\Half-Life\czero\addons\amxmodx\scripting\EAWSv2.1.sma(84) : warning 203symbol is never used"g_szOldModels" 
__________________
Extended Arm Weapon Skin v2.1 {16/Apr/23}
(Detect which class is and associate it with the corresponding arms)
SideWeapons v0.2 {01/Sep/22}
(New version of Back Weapons v1.87)


Last edited by SoulWeaver16; 04-16-2023 at 15:56.
SoulWeaver16 is offline
SoulWeaver16
Senior Member
Join Date: May 2021
Location: Uruguay
Old 04-16-2023 , 15:39   Re: Extended Arm Weapon Skin 2.0 [CS/CZ] {22 Aug 2022}
Reply With Quote #28

Quote:
Originally Posted by lexzor View Post
i can't install the plugin on my server, saying the native from setviewentitybody2 does not exists even if i installed it correctly

anyways, the above problem can be cause by stopping precaching default models from the game.

tried to avoid unprecaching default models when this feature is enabled
And regarding the SetViewEntityBody2, make sure that the plugin is not paused and recognizes it, if not, make sure that it is well written in Plugins.ini, it seems obvious but many times it happens that it is written wrong or it is not installed correctly
__________________
Extended Arm Weapon Skin v2.1 {16/Apr/23}
(Detect which class is and associate it with the corresponding arms)
SideWeapons v0.2 {01/Sep/22}
(New version of Back Weapons v1.87)

SoulWeaver16 is offline
SoulWeaver16
Senior Member
Join Date: May 2021
Location: Uruguay
Old 04-16-2023 , 15:49   Re: Extended Arm Weapon Skin 2.0 [CS/CZ] {22 Aug 2022}
Reply With Quote #29

* 2.1 - 4/16/23
- Minor optimizations.
- Thanks lexzor

More information in the main post.

Last edited by SoulWeaver16; 04-16-2023 at 15:50.
SoulWeaver16 is offline
asdian
Member
Join Date: Sep 2016
Location: Indonesia
Old 04-18-2023 , 09:03   Re: Extended Arm Weapon Skin 2.1 [CS/CZ] {16 Apr 2023}
Reply With Quote #30

i'm planning to use this to replace metadrawer from my ccx plugin. then i tried this plugin, but the submodel choosen is always "submodel 1". i didn't modify anything of the plugin. do you know what causes this ?

Last edited by asdian; 04-18-2023 at 09:04.
asdian is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 01:48.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode