sm_skinchooser_fix

Created Diff never expires
/*******************************************************************************
/*******************************************************************************


SM Skinchooser
SM Skinchooser


Version: 5.2
Version: 5.2
Author: Andi67
Author: Andi67
5.2 Added new commands to clear created inis in sourcemod/data folder.
5.2 Added new commands to clear created inis in sourcemod/data folder.
5.1 Added Thirdperson view.
5.1 Added Thirdperson view.
5.0 Updated for CSGO.
5.0 Updated for CSGO.
4.9 Fixed a bug brought by Valve in CSGO.
4.9 Fixed a bug brought by Valve in CSGO.
4.8 added sm_skinchooser_forceplayerskintimer and sm_skinchooser_skinadmintimer
4.8 added sm_skinchooser_forceplayerskintimer and sm_skinchooser_skinadmintimer
4.7 Added new Cvar "sm_skinchooser_use_request_frame".
4.7 Added new Cvar "sm_skinchooser_use_request_frame".
Choose which method you want to use for setting the Armmodels in CSGO ,
Choose which method you want to use for setting the Armmodels in CSGO ,
removing the weapons and equip them new or simply respawn the player.
removing the weapons and equip them new or simply respawn the player.
4.6 Error Message fixed?
4.6 Error Message fixed?
4.5 Really needed?
4.5 Really needed?
Added fic for Armsmodels in CSGO.
Added fic for Armsmodels in CSGO.
Updated to new Syntax.
Updated to new Syntax.
Added more Cvars for customization.
Added more Cvars for customization.
Added CSGO Armmodels support.
Added CSGO Armmodels support.
Updated SteamId check for matching SteamId3.
Updated SteamId check for matching SteamId3.
Plugin now uses mapbased cnnfigs.
Plugin now uses mapbased cnnfigs.
Added more Botchecks , some cosmetic.
Added more Botchecks , some cosmetic.
Now you can force a skin to Admins automaticly.
Now you can force a skin to Admins automaticly.
Added possebility to restrict the sm_models/!models command by cvar.
Added possebility to restrict the sm_models/!models command by cvar.
Added Timer for Menu closing automaticly.
Added Timer for Menu closing automaticly.
Changed some cvars from "enabled" to "disabled" by default , seams necessary since some people are not able to read the documentation ,
Changed some cvars from "enabled" to "disabled" by default , seams necessary since some people are not able to read the documentation ,
also changed some code.
also changed some code.


Added new Cvar "sm_skinchooser_forceplayerskin" , only works if "sm_skinchooser_playerspawntimer" is set to "1" !!!
Added new Cvar "sm_skinchooser_forceplayerskin" , only works if "sm_skinchooser_playerspawntimer" is set to "1" !!!
This is used to force players become a customskin on Spawn.
This is used to force players become a customskin on Spawn.
Added autocreating configfile on first start.
Added autocreating configfile on first start.
Update to 2.2
Update to 2.2
Added Cvar for displaying Menu only for Admins
Added Cvar for displaying Menu only for Admins
Added Cvar for Mods like Resistance and Liberation where player_spawn is fired a little bit later so we add an one second timer
Added Cvar for Mods like Resistance and Liberation where player_spawn is fired a little bit later so we add an one second timer
to make sure Model is set on spawn.
to make sure Model is set on spawn.
Update to 2.1:
Update to 2.1:
Added new Cvar sm_skinchooser_admingroup , brings back the old GroupSystem.
Added new Cvar sm_skinchooser_admingroup , brings back the old GroupSystem.
Bahhhh amazing now you can use Flags and multiple Groups!!!
Bahhhh amazing now you can use Flags and multiple Groups!!!
Update to 2.0:
Update to 2.0:
New cvar sm_skinchooser_SkinBots , forces Bots to have a skin.
New cvar sm_skinchooser_SkinBots , forces Bots to have a skin.
New cvar sm_skinchooser_displaytimer , makes it possible to display the menu a little bit
New cvar sm_skinchooser_displaytimer , makes it possible to display the menu a little bit
later not directly by choosing a team.
later not directly by choosing a team.
New cvar sm_skinchooser_menustarttime , here you can modify the time when Menu should be displayed by joining the team
New cvar sm_skinchooser_menustarttime , here you can modify the time when Menu should be displayed by joining the team
related to sm_skinchooser_displaytimer.
related to sm_skinchooser_displaytimer.
Update to 1.9:
Update to 1.9:
Removed needing of Gamedata.txt , so from now Gamedata.txt is no more needed!!!
Removed needing of Gamedata.txt , so from now Gamedata.txt is no more needed!!!
Update to 1.8:
Update to 1.8:
Fixed another Handlebug.
Fixed another Handlebug.
Update to 1.7:
Update to 1.7:
Added new Cvar "sm_skinchooser_autodisplay"
Added new Cvar "sm_skinchooser_autodisplay"
Update to 1.6:
Update to 1.6:
Supported now all Flags
Supported now all Flags
Update to 1.5:
Update to 1.5:
Fixed native Handle error
Fixed native Handle error


Update to 1.4:
Update to 1.4:
Plugin now handles the following Flags:
Plugin now handles the following Flags:
"" - for Public
"" - for Public
"b" - Generic Admins
"b" - Generic Admins
"g" - Mapchange Admins
"g" - Mapchange Admins
"t" - Custom Admins for use Reserved Skins
"t" - Custom Admins for use Reserved Skins
"z" - Root Admins
"z" - Root Admins
Now you only will see Sections/Groups in the Menu you have Access to
Now you only will see Sections/Groups in the Menu you have Access to
Rearranged skins.ini for better overview
Rearranged skins.ini for better overview
Fixed some Menubugs
Fixed some Menubugs
Added Gamedata for Hl2mp
Added Gamedata for Hl2mp




Everybody can edit this plugin and copy this plugin.
Everybody can edit this plugin and copy this plugin.
Thanks to:
Thanks to:
Pred,Tigerox,Recon for making Modelmenu
Pred,Tigerox,Recon for making Modelmenu


Swat_88 for making sm_downloader and precacher
Swat_88 for making sm_downloader and precacher
Paegus,Ghosty for helping me to bring up the Menu on Teamjoin
Paegus,Ghosty for helping me to bring up the Menu on Teamjoin
And special THX to Feuersturm who helped me to fix the Spectatorbug!!!
And special THX to Feuersturm who helped me to fix the Spectatorbug!!!
HAVE FUN!!!
HAVE FUN!!!


*******************************************************************************/
*******************************************************************************/


#include <sourcemod>
#include <sourcemod>
#include <sdktools>
#include <sdktools>


#pragma semicolon 1
#pragma semicolon 1
#pragma newdecls required
#pragma newdecls required
#define MAX_FILE_LEN 1024
#define MAX_FILE_LEN 1024
#define MODELS_PER_TEAM 128
#define MODELS_PER_TEAM 128


#define SM_SKINCHOOSER_VERSION "5.2"
#define SM_SKINCHOOSER_VERSION "5.2"




Handle g_version;
Handle g_version;
Handle g_enabled;
Handle g_enabled;
Handle g_steamid;
Handle g_steamid;
Handle g_arms_enabled;
Handle g_arms_enabled;
Handle g_autodisplay;
Handle g_autodisplay;
Handle g_displaytimer;
Handle g_displaytimer;
Handle g_AdminGroup;
Handle g_AdminGroup;
Handle g_AdminOnly;
Handle g_AdminOnly;
Handle g_SkinBots;
Handle g_SkinBots;
Handle g_SkinAdmin;
Handle g_SkinAdmin;
Handle g_SkinAdminTimer;
Handle g_SkinAdminTimer;
Handle g_SkinAdminTimerEnabled;
Handle g_SkinAdminTimerEnabled;
Handle g_ForcePlayerSkin;
Handle g_ForcePlayerSkin;
Handle g_ForcePlayerSkinTimer;
Handle g_ForcePlayerSkinTimer;
Handle g_ForcePlayerSkinTimerEnabled;
Handle g_ForcePlayerSkinTimerEnabled;
Handle g_CommandCountsEnabled;
Handle g_CommandCountsEnabled;
Handle g_CloseMenuTimer;
Handle g_CloseMenuTimer;
Handle g_menustarttime;
Handle g_menustarttime;
Handle g_CommandCounts;
Handle g_CommandCounts;
Handle g_mapbased;
Handle g_mapbased;
Handle g_blockAgentModels;
Handle g_blockAgentModels;
Handle g_EnableThirdPersonMessage;
Handle g_EnableThirdPersonMessage;


Handle playermodelskv;
Handle playermodelskv;
Handle playermodelskva;
Handle playermodelskva;
Handle kv;
Handle kv;
Handle kva;
Handle kva;
Handle mainmenu = INVALID_HANDLE;
Handle mainmenu = INVALID_HANDLE;
Handle armsmainmenu = INVALID_HANDLE;
Handle armsmainmenu = INVALID_HANDLE;




char g_ModelsAdminTeam2[MODELS_PER_TEAM][MAX_FILE_LEN];
char g_ModelsAdminTeam2[MODELS_PER_TEAM][MAX_FILE_LEN];
char g_ModelsAdminTeam3[MODELS_PER_TEAM][MAX_FILE_LEN];
char g_ModelsAdminTeam3[MODELS_PER_TEAM][MAX_FILE_LEN];
char g_ModelsAdmin_Count_Team2;
char g_ModelsAdmin_Count_Team2;
char g_ModelsAdmin_Count_Team3;
char g_ModelsAdmin_Count_Team3;
char g_ModelsPlayerTeam2[MODELS_PER_TEAM][MAX_FILE_LEN];
char g_ModelsPlayerTeam2[MODELS_PER_TEAM][MAX_FILE_LEN];
char g_ModelsPlayerTeam3[MODELS_PER_TEAM][MAX_FILE_LEN];
char g_ModelsPlayerTeam3[MODELS_PER_TEAM][MAX_FILE_LEN];
char g_ModelsPlayer_Count_Team2;
char g_ModelsPlayer_Count_Team2;
char g_ModelsPlayer_Count_Team3;
char g_ModelsPlayer_Count_Team3;
char g_ModelsBotsTeam2[MODELS_PER_TEAM][MAX_FILE_LEN];
char g_ModelsBotsTeam2[MODELS_PER_TEAM][MAX_FILE_LEN];
char g_ModelsBotsTeam3[MODELS_PER_TEAM][MAX_FILE_LEN];
char g_ModelsBotsTeam3[MODELS_PER_TEAM][MAX_FILE_LEN];
char g_ModelsBots_Count_Team2;
char g_ModelsBots_Count_Team2;
char g_ModelsBots_Count_Team3;
char g_ModelsBots_Count_Team3;


char authid[MAXPLAYERS+1][64];
char authid[MAXPLAYERS+1][64];
char map[256];
char map[256];
char mediatype[256];
char mediatype[256];
int downloadtype;
int downloadtype;


char g_CmdCount[MAXPLAYERS+1];
char g_CmdCount[MAXPLAYERS+1];
char Game[64];
char Game[64];


char anarchistModelsT[][] =
char anarchistModelsT[][] =
{
{
"models/player/custom_player/legacy/tm_anarchist.mdl",
"models/player/custom_player/legacy/tm_anarchist.mdl",
"models/player/custom_player/legacy/tm_anarchist_variantA.mdl",
"models/player/custom_player/legacy/tm_anarchist_variantA.mdl",
"models/player/custom_player/legacy/tm_anarchist_variantB.mdl",
"models/player/custom_player/legacy/tm_anarchist_variantB.mdl",
"models/player/custom_player/legacy/tm_anarchist_variantC.mdl",
"models/player/custom_player/legacy/tm_anarchist_variantC.mdl",
"models/player/custom_player/legacy/tm_anarchist_variantD.mdl"
"models/player/custom_player/legacy/tm_anarchist_variantD.mdl"
};
};


char balkanModelsT[][] =
char balkanModelsT[][] =
{
{
"models/player/custom_player/legacy/tm_balkan_variantA.mdl",
"models/player/custom_player/legacy/tm_balkan_variantA.mdl",
"models/player/custom_player/legacy/tm_balkan_variantB.mdl",
"models/player/custom_player/legacy/tm_balkan_variantB.mdl",
"models/player/custom_player/legacy/tm_balkan_variantC.mdl",
"models/player/custom_player/legacy/tm_balkan_variantC.mdl",
"models/player/custom_player/legacy/tm_balkan_variantD.mdl",
"models/player/custom_player/legacy/tm_balkan_variantD.mdl",
"models/player/custom_player/legacy/tm_balkan_variantE.mdl"
"models/player/custom_player/legacy/tm_balkan_variantE.mdl"
};
};


char leetModelsT[][] =
char leetModelsT[][] =
{
{
"models/player/custom_player/legacy/tm_leet_variantA.mdl",
"models/player/custom_player/legacy/tm_leet_variantA.mdl",
"models/player/custom_player/legacy/tm_leet_variantB.mdl",
"models/player/custom_player/legacy/tm_leet_variantB.mdl",
"models/player/custom_player/legacy/tm_leet_variantC.mdl",
"models/player/custom_player/legacy/tm_leet_variantC.mdl",
"models/player/custom_player/legacy/tm_leet_variantD.mdl",
"models/player/custom_player/legacy/tm_leet_variantD.mdl",
"models/player/custom_player/legacy/tm_leet_variantE.mdl"
"models/player/custom_player/legacy/tm_leet_variantE.mdl"
};
};


char phoenixModelsT[][] =
char phoenixModelsT[][] =
{
{
"models/player/custom_player/legacy/tm_phoenix.mdl",
"models/player/custom_player/legacy/tm_phoenix.mdl",
"models/player/custom_player/legacy/tm_phoenix_heavy.mdl",
"models/player/custom_player/legacy/tm_phoenix_heavy.mdl",
"models/player/custom_player/legacy/tm_phoenix_variantA.mdl",
"models/player/custom_player/legacy/tm_phoenix_variantA.mdl",
"models/player/custom_player/legacy/tm_phoenix_variantB.mdl",
"models/player/custom_player/legacy/tm_phoenix_variantB.mdl",
"models/player/custom_player/legacy/tm_phoenix_variantC.mdl",
"models/player/custom_player/legacy/tm_phoenix_variantC.mdl",
"models/player/custom_player/legacy/tm_phoenix_variantD.mdl"
"models/player/custom_player/legacy/tm_phoenix_variantD.mdl"
};
};


char pirateModelsT[][] =
char pirateModelsT[][] =
{
{
"models/player/custom_player/legacy/tm_pirate.mdl",
"models/player/custom_player/legacy/tm_pirate.mdl",
"models/player/custom_player/legacy/tm_pirate_variantA.mdl",
"models/player/custom_player/legacy/tm_pirate_variantA.mdl",
"models/player/custom_player/legacy/tm_pirate_variantB.mdl",
"models/player/custom_player/legacy/tm_pirate_variantB.mdl",
"models/player/custom_player/legacy/tm_pirate_variantC.mdl",
"models/player/custom_player/legacy/tm_pirate_variantC.mdl",
"models/player/custom_player/legacy/tm_pirate_variantD.mdl"
"models/player/custom_player/legacy/tm_pirate_variantD.mdl"
};
};


char professionalModelsT[][] =
char professionalModelsT[][] =
{
{
"models/player/custom_player/legacy/tm_professional.mdl",
"models/player/custom_player/legacy/tm_professional.mdl",
"models/player/custom_player/legacy/tm_professional_var1.mdl",
"models/player/custom_player/legacy/tm_professional_var1.mdl",
"models/player/custom_player/legacy/tm_professional_var2.mdl",
"models/player/custom_player/legacy/tm_professional_var2.mdl",
"models/player/custom_player/legacy/tm_professional_var3.mdl",
"models/player/custom_player/legacy/tm_professional_var3.mdl",
"models/player/custom_player/legacy/tm_professional_var4.mdl"
"models/player/custom_player/legacy/tm_professional_var4.mdl"
};
};


char separatistModelsT[][] =
char separatistModelsT[][] =
{
{
"models/player/custom_player/legacy/tm_separatist.mdl",
"models/player/custom_player/legacy/tm_separatist.mdl",
"models/player/custom_player/legacy/tm_separatist_variantA.mdl",
"models/player/custom_player/legacy/tm_separatist_variantA.mdl",
"models/player/custom_player/legacy/tm_separatist_variantB.mdl",
"models/player/custom_player/legacy/tm_separatist_variantB.mdl",
"models/player/custom_player/legacy/tm_separatist_variantC.mdl",
"models/player/custom_player/legacy/tm_separatist_variantC.mdl",
"models/player/custom_player/legacy/tm_separatist_variantD.mdl"
"models/player/custom_player/legacy/tm_separatist_variantD.mdl"
};
};


char fbiModelsCT[][] =
char fbiModelsCT[][] =
{
{
"models/player/custom_player/legacy/ctm_fbi.mdl",
"models/player/custom_player/legacy/ctm_fbi.mdl",
"models/player/custom_player/legacy/ctm_fbi_variantA.mdl",
"models/player/custom_player/legacy/ctm_fbi_variantA.mdl",
"models/player/custom_player/legacy/ctm_fbi_variantB.mdl",
"models/player/custom_player/legacy/ctm_fbi_variantB.mdl",
"models/player/custom_player/legacy/ctm_fbi_variantC.mdl",
"models/player/custom_player/legacy/ctm_fbi_variantC.mdl",
"models/player/custom_player/legacy/ctm_fbi_variantD.mdl"
"models/player/custom_player/legacy/ctm_fbi_variantD.mdl"
};
};


char gignModelsCT[][] =
char gignModelsCT[][] =
{
{
"models/player/custom_player/legacy/ctm_gign.mdl",
"models/player/custom_player/legacy/ctm_gign.mdl",
"models/player/custom_player/legacy/ctm_gign_variantA.mdl",
"models/player/custom_player/legacy/ctm_gign_variantA.mdl",
"models/player/custom_player/legacy/ctm_gign_variantB.mdl",
"models/player/custom_player/legacy/ctm_gign_variantB.mdl",
"models/player/custom_player/legacy/ctm_gign_variantC.mdl",
"models/player/custom_player/legacy/ctm_gign_variantC.mdl",
"models/player/custom_player/legacy/ctm_gign_variantD.mdl"
"models/player/custom_player/legacy/ctm_gign_variantD.mdl"
};
};


char gsg9ModelsCT[][] =
char gsg9ModelsCT[][] =
{
{
"models/player/custom_player/legacy/ctm_gsg9.mdl",
"models/player/custom_player/legacy/ctm_gsg9.mdl",
"models/player/custom_player/legacy/ctm_gsg9_variantA.mdl",
"models/player/custom_player/legacy/ctm_gsg9_variantA.mdl",
"models/player/custom_player/legacy/ctm_gsg9_variantB.mdl",
"models/player/custom_player/legacy/ctm_gsg9_variantB.mdl",
"models/player/custom_player/legacy/ctm_gsg9_variantC.mdl",
"models/player/custom_player/legacy/ctm_gsg9_variantC.mdl",
"models/player/custom_player/legacy/ctm_gsg9_variantD.mdl"
"models/player/custom_player/legacy/ctm_gsg9_variantD.mdl"
};
};


char idfModelsCT[][] =
char idfModelsCT[][] =
{
{
"models/player/custom_player/legacy/ctm_idf.mdl",
"models/player/custom_player/legacy/ctm_idf.mdl",
"models/player/custom_player/legacy/ctm_idf_variantA.mdl",
"models/player/custom_player/legacy/ctm_idf_variantA.mdl",
"models/player/custom_player/legacy/ctm_idf_variantB.mdl",
"models/player/custom_player/legacy/ctm_idf_variantB.mdl",
"models/player/custom_player/legacy/ctm_idf_variantC.mdl",
"models/player/custom_player/legacy/ctm_idf_variantC.mdl",
"models/player/custom_player/legacy/ctm_idf_variantD.mdl",
"models/player/custom_player/legacy/ctm_idf_variantD.mdl",
"models/player/custom_player/legacy/ctm_idf_variantE.mdl",
"models/player/custom_player/legacy/ctm_idf_variantE.mdl",
"models/player/custom_player/legacy/ctm_idf_variantF.mdl"
"models/player/custom_player/legacy/ctm_idf_variantF.mdl"
};
};


char sasModelsCT[][] =
char sasModelsCT[][] =
{
{
"models/player/custom_player/legacy/ctm_sas.mdl",
"models/player/custom_player/legacy/ctm_sas.mdl",
"models/player/custom_player/legacy/ctm_sas_variantA.mdl",
"models/player/custom_player/legacy/ctm_sas_variantA.mdl",
"models/player/custom_player/legacy/ctm_sas_variantB.mdl",
"models/player/custom_player/legacy/ctm_sas_variantB.mdl",
"models/player/custom_player/legacy/ctm_sas_variantC.mdl",
"models/player/custom_player/legacy/ctm_sas_variantC.mdl",
"models/player/custom_player/legacy/ctm_sas_variantD.mdl",
"models/player/custom_player/legacy/ctm_sas_variantD.mdl",
"models/player/custom_player/legacy/ctm_sas_variantE.mdl"
"models/player/custom_player/legacy/ctm_sas_variantE.mdl"
};
};


char st6ModelsCT[][] =
char st6ModelsCT[][] =
{
{
"models/player/custom_player/legacy/ctm_st6.mdl",
"models/player/custom_player/legacy/ctm_st6.mdl",
"models/player/custom_player/legacy/ctm_st6_variantA.mdl",
"models/player/custom_player/legacy/ctm_st6_variantA.mdl",
"models/player/custom_player/legacy/ctm_st6_variantB.mdl",
"models/player/custom_player/legacy/ctm_st6_variantB.mdl",
"models/player/custom_player/legacy/ctm_st6_variantC.mdl",
"models/player/custom_player/legacy/ctm_st6_variantC.mdl",
"models/player/custom_player/legacy/ctm_st6_variantD.mdl"
"models/player/custom_player/legacy/ctm_st6_variantD.mdl"
};
};


char swatModelsCT[][] =
char swatModelsCT[][] =
{
{
"models/player/custom_player/legacy/ctm_swat.mdl",
"models/player/custom_player/legacy/ctm_swat.mdl",
"models/player/custom_player/legacy/ctm_swat_variantA.mdl",
"models/player/custom_player/legacy/ctm_swat_variantA.mdl",
"models/player/custom_player/legacy/ctm_swat_variantB.mdl",
"models/player/custom_player/legacy/ctm_swat_variantB.mdl",
"models/player/custom_player/legacy/ctm_swat_variantC.mdl",
"models/player/custom_player/legacy/ctm_swat_variantC.mdl",
"models/player/custom_player/legacy/ctm_swat_variantD.mdl"
"models/player/custom_player/legacy/ctm_swat_variantD.mdl"
};
};


char AgentModelsT[][] =
char AgentModelsT[][] =
{
{
"models/player/custom_player/legacy/tm_balkan_variantf.mdl",
"models/player/custom_player/legacy/tm_balkan_variantf.mdl",
"models/player/custom_player/legacy/tm_balkan_variantg.mdl",
"models/player/custom_player/legacy/tm_balkan_variantg.mdl",
"models/player/custom_player/legacy/tm_balkan_varianth.mdl",
"models/player/custom_player/legacy/tm_balkan_varianth.mdl",
"models/player/custom_player/legacy/tm_balkan_varianti.mdl",
"models/player/custom_player/legacy/tm_balkan_varianti.mdl",
"models/player/custom_player/legacy/tm_balkan_variantj.mdl",
"models/player/custom_player/legacy/tm_balkan_variantj.mdl",
"models/player/custom_player/legacy/tm_leet_variantf.mdl",
"models/player/custom_player/legacy/tm_leet_variantf.mdl",
"models/player/custom_player/legacy/tm_leet_variantg.mdl",
"models/player/custom_player/legacy/tm_leet_variantg.mdl",
"models/player/custom_player/legacy/tm_leet_varianth.mdl",
"models/player/custom_player/legacy/tm_leet_varianth.mdl",
"models/player/custom_player/legacy/tm_leet_varianti.mdl",
"models/player/custom_player/legacy/tm_leet_varianti.mdl",
"models/player/custom_player/legacy/tm_phoenix_variantf.mdl",
"models/player/custom_player/legacy/tm_phoenix_variantf.mdl",
"models/player/custom_player/legacy/tm_phoenix_variantg.mdl",
"models/player/custom_player/legacy/tm_phoenix_variantg.mdl",
"models/player/custom_player/legacy/tm_phoenix_varianth.mdl"
"models/player/custom_player/legacy/tm_phoenix_varianth.mdl"
};
};


char AgentModelsCT[][] =
char AgentModelsCT[][] =
{
{
"models/player/custom_player/legacy/ctm_fbi_variante.mdl",
"models/player/custom_player/legacy/ctm_fbi_variante.mdl",
"models/player/custom_player/legacy/ctm_fbi_variantf.mdl",
"models/player/custom_player/legacy/ctm_fbi_variantf.mdl",
"models/player/custom_player/legacy/ctm_fbi_variantg.mdl",
"models/player/custom_player/legacy/ctm_fbi_variantg.mdl",
"models/player/custom_player/legacy/ctm_fbi_varianth.mdl",
"models/player/custom_player/legacy/ctm_fbi_varianth.mdl",
"models/player/custom_player/legacy/ctm_st6_variante.mdl",
"models/player/custom_player/legacy/ctm_st6_variante.mdl",
"models/player/custom_player/legacy/ctm_st6_variantg.mdl",
"models/player/custom_player/legacy/ctm_st6_variantg.mdl",
"models/player/custom_player/legacy/ctm_st6_varianti.mdl",
"models/player/custom_player/legacy/ctm_st6_varianti.mdl",
"models/player/custom_player/legacy/ctm_st6_variantk.mdl",
"models/player/custom_player/legacy/ctm_st6_variantk.mdl",
"models/player/custom_player/legacy/ctm_st6_variantm.mdl",
"models/player/custom_player/legacy/ctm_st6_variantm.mdl",
"models/player/custom_player/legacy/ctm_sas_variantf.mdl"
"models/player/custom_player/legacy/ctm_sas_variantf.mdl"
};
};


public Plugin myinfo =
public Plugin myinfo =
{
{
name = "SM SKINCHOOSER",
name = "SM SKINCHOOSER",
author = "Andi67",
author = "Andi67",
description = "Skin Menu",
description = "Skin Menu",
version = SM_SKINCHOOSER_VERSION,
version = SM_SKINCHOOSER_VERSION,
url = "http://www.andi67-blog.de.vu"
url = "http://www.andi67-blog.de.vu"
}
}


public void OnPluginStart()
public void OnPluginStart()
{
{
g_version = CreateConVar("sm_skinchooser_version",SM_SKINCHOOSER_VERSION,"SM SKINCHOOSER VERSION",FCVAR_NOTIFY);
g_version = CreateConVar("sm_skinchooser_version",SM_SKINCHOOSER_VERSION,"SM SKINCHOOSER VERSION",FCVAR_NOTIFY);
SetConVarString(g_version,SM_SKINCHOOSER_VERSION);
SetConVarString(g_version,SM_SKINCHOOSER_VERSION);
g_enabled = CreateConVar("sm_skinchooser_enabled", "1", "0 = Disabled , 1 = Enables the Plugin.", _, true, 0.0, true, 1.0);
g_enabled = CreateConVar("sm_skinchooser_enabled", "1", "0 = Disabled , 1 = Enables the Plugin.", _, true, 0.0, true, 1.0);
g_arms_enabled = CreateConVar("sm_skinchooser_arms_enabled","1", "0 = disabled , 1 = Enables the usage for Armmodels in CSGO.", _, true, 0.0, true, 1.0);
g_arms_enabled = CreateConVar("sm_skinchooser_arms_enabled","1", "0 = disabled , 1 = Enables the usage for Armmodels in CSGO.", _, true, 0.0, true, 1.0);
g_steamid = CreateConVar("sm_skinchooser_steamid_format","1", "0 = SteamId 2 , 1 = SteamId 3", _, true, 0.0, true, 1.0);
g_steamid = CreateConVar("sm_skinchooser_steamid_format","1", "0 = SteamId 2 , 1 = SteamId 3", _, true, 0.0, true, 1.0);
g_mapbased = CreateConVar("sm_skinchooser_mapbased","1", "0 = Disabled , 1 = Enables usage of mapbased inis.", _, true, 0.0, true, 1.0);
g_mapbased = CreateConVar("sm_skinchooser_mapbased","1", "0 = Disabled , 1 = Enables usage of mapbased inis.", _, true, 0.0, true, 1.0);
g_autodisplay = CreateConVar("sm_skinchooser_autodisplay","1", "0 = Disabled , 1 = Enables Menu Auto popup.", _, true, 0.0, true, 1.0);
g_autodisplay = CreateConVar("sm_skinchooser_autodisplay","1", "0 = Disabled , 1 = Enables Menu Auto popup.", _, true, 0.0, true, 1.0);
g_displaytimer = CreateConVar("sm_skinchooser_displaytimer","0", "0 = Disabled , 1 = Enables the Delay when Menu should auto popup.", _, true, 0.0, true, 1.0);
g_displaytimer = CreateConVar("sm_skinchooser_displaytimer","0", "0 = Disabled , 1 = Enables the Delay when Menu should auto popup.", _, true, 0.0, true, 1.0);
g_menustarttime = CreateConVar("sm_skinchooser_menustarttime" , "5.0", "Time in seconds when Menu should be started", _, true, 0.0, true, 1000.0);
g_menustarttime = CreateConVar("sm_skinchooser_menustarttime" , "5.0", "Time in seconds when Menu should be started", _, true, 0.0, true, 1000.0);
g_AdminGroup = CreateConVar("sm_skinchooser_admingroup","1", "0 = Disabled , 1 = Enables the Groupsystem.", _, true, 0.0, true, 1.0);
g_AdminGroup = CreateConVar("sm_skinchooser_admingroup","1", "0 = Disabled , 1 = Enables the Groupsystem.", _, true, 0.0, true, 1.0);
g_AdminOnly = CreateConVar("sm_skinchooser_adminonly","0", "0 = Disabled , 1 = Enabled for Admins only.", _, true, 0.0, true, 1.0);
g_AdminOnly = CreateConVar("sm_skinchooser_adminonly","0", "0 = Disabled , 1 = Enabled for Admins only.", _, true, 0.0, true, 1.0);
g_CommandCountsEnabled = CreateConVar("sm_skinchooser_commandcountsenabled", "0", "Enables the CommandCounter.", _, true, 0.0, true, 1.0);
g_CommandCountsEnabled = CreateConVar("sm_skinchooser_commandcountsenabled", "0", "Enables the CommandCounter.", _, true, 0.0, true, 1.0);
g_CommandCounts = CreateConVar("sm_skinchooser_commandcounts", "1", "How many times users should be able to use the !models command.", _, true, 0.0, true, 1000.0);
g_CommandCounts = CreateConVar("sm_skinchooser_commandcounts", "1", "How many times users should be able to use the !models command.", _, true, 0.0, true, 1000.0);
g_CloseMenuTimer = CreateConVar("sm_skinchooser_closemenutimer" , "30", "Seconds when the Menu should be closed", _, true, 0.0, true, 1000.0);
g_CloseMenuTimer = CreateConVar("sm_skinchooser_closemenutimer" , "30", "Seconds when the Menu should be closed", _, true, 0.0, true, 1000.0);
g_ForcePlayerSkin = CreateConVar("sm_skinchooser_forceplayerskin" , "0", "0 = Disabled , 1 = Enabled , should Players get automaticly a Model?", _, true, 0.0, true, 1.0);
g_ForcePlayerSkin = CreateConVar("sm_skinchooser_forceplayerskin" , "0", "0 = Disabled , 1 = Enabled , should Players get automaticly a Model?", _, true, 0.0, true, 1.0);
g_ForcePlayerSkinTimer = CreateConVar("sm_skinchooser_forceplayerskintimer" , "0.3", "Time in seconds when Model gets applied if forceplayerskin is set to 1!!!", _, true, 0.3, true, 100.0);
g_ForcePlayerSkinTimer = CreateConVar("sm_skinchooser_forceplayerskintimer" , "0.3", "Time in seconds when Model gets applied if forceplayerskin is set to 1!!!", _, true, 0.3, true, 100.0);
g_ForcePlayerSkinTimerEnabled = CreateConVar("sm_skinchooser_forceplayerskintimer_enabled" , "0", "If enabled = 1 , choosen Models will be overwritten!", _, true, 0.0, true, 1.0);
g_ForcePlayerSkinTimerEnabled = CreateConVar("sm_skinchooser_forceplayerskintimer_enabled" , "0", "If enabled = 1 , choosen Models will be overwritten!", _, true, 0.0, true, 1.0);
g_SkinBots = CreateConVar("sm_skinchooser_skinbots","0", "0 = Disabled , 1 = Enabled , should Bots have a custom Model?", _, true, 0.0, true, 1.0);
g_SkinBots = CreateConVar("sm_skinchooser_skinbots","0", "0 = Disabled , 1 = Enabled , should Bots have a custom Model?", _, true, 0.0, true, 1.0);
g_SkinAdmin = CreateConVar("sm_skinchooser_skinadmin","0", "0 = Disabled , 1 = Enabled , should Admins get automaticly a Model?", _, true, 0.0, true, 1.0);
g_SkinAdmin = CreateConVar("sm_skinchooser_skinadmin","0", "0 = Disabled , 1 = Enabled , should Admins get automaticly a Model?", _, true, 0.0, true, 1.0);
g_SkinAdminTimer = CreateConVar("sm_skinchooser_skinadmintimer","0.3", "Time in seconds when Model gets applied if skinadmin is enabled!!!", _, true, 0.3, true, 100.0);
g_SkinAdminTimer = CreateConVar("sm_skinchooser_skinadmintimer","0.3", "Time in seconds when Model gets applied if skinadmin is enabled!!!", _, true, 0.3, true, 100.0);
g_SkinAdminTimerEnabled = CreateConVar("sm_skinchooser_skinadmintimer_enabled","0", "If enabled = 1 , choosen Models will be overwritten!", _, true, 0.0, true, 1.0);
g_SkinAdminTimerEnabled = CreateConVar("sm_skinchooser_skinadmintimer_enabled","0", "If enabled = 1 , choosen Models will be overwritten!", _, true, 0.0, true, 1.0);
g_blockAgentModels = CreateConVar("sm_skinchooser_blockagentmodels","1", "0 = Disabled , 1 = Enabled , blocks the new AgentModels.", _, true, 0.0, true, 1.0);
g_blockAgentModels = CreateConVar("sm_skinchooser_blockagentmodels","1", "0 = Disabled , 1 = Enabled , blocks the new AgentModels.", _, true, 0.0, true, 1.0);
g_EnableThirdPersonMessage = CreateConVar("sm_skinchooser_thirdpersonmessage_enabled", "1", "Prints a Message about Thirdpersonview", _, true, 0.0, true, 1.0);
g_EnableThirdPersonMessage = CreateConVar("sm_skinchooser_thirdpersonmessage_enabled", "1", "Prints a Message about Thirdpersonview", _, true, 0.0, true, 1.0);
// Create the model menu command and others
// Create the model menu command and others
RegConsoleCmd("sm_models", Command_Model);
RegConsoleCmd("sm_models", Command_Model);
RegConsoleCmd("sm_thirdon", Command_ThirdOn);
RegConsoleCmd("sm_thirdon", Command_ThirdOn);
RegConsoleCmd("sm_thirdoff", Command_ThirdOff);
RegConsoleCmd("sm_thirdoff", Command_ThirdOff);
RegAdminCmd("sm_clear_models", Command_ClearModels, ADMFLAG_ROOT, "Command clear models");
RegAdminCmd("sm_clear_models", Command_ClearModels, ADMFLAG_ROOT, "Command clear models");
RegAdminCmd("sm_clear_arms", Command_ClearArms, ADMFLAG_ROOT, "Command clear arms");
RegAdminCmd("sm_clear_arms", Command_ClearArms, ADMFLAG_ROOT, "Command clear arms");
GetGameFolderName(Game, sizeof(Game));
GetGameFolderName(Game, sizeof(Game));
// Hook the spawn event
// Hook the spawn event
HookEvent("player_spawn", Event_PlayerSpawn, EventHookMode_Post);
HookEvent("player_spawn", Event_PlayerSpawn, EventHookMode_Post);
HookEvent("player_team", Event_PlayerTeam, EventHookMode_Post);
HookEvent("player_team", Event_PlayerTeam, EventHookMode_Post);
if (StrEqual(Game, "dod"))
if (StrEqual(Game, "dod"))
{
{
HookEvent("dod_round_start", Event_RoundStart, EventHookMode_Post);
HookEvent("dod_round_start", Event_RoundStart, EventHookMode_Post);
}
}
else
else
{
{
HookEvent("round_start", Event_RoundStart, EventHookMode_Post);
HookEvent("round_start", Event_RoundStart, EventHookMode_Post);
}
}
AutoExecConfig(true, "sm_skinchooser");
AutoExecConfig(true, "sm_skinchooser");
}
}


public void OnPluginEnd()
public void OnPluginEnd()
{
{
CloseHandle(g_version);
CloseHandle(g_version);
CloseHandle(g_enabled);
CloseHandle(g_enabled);
}
}


public void OnMapStart()
public void OnMapStart()
{
{
if(GetConVarInt(g_enabled) == 1)
if(GetConVarInt(g_enabled) == 1)
{
{
if (StrEqual(Game, "csgo"))
if (StrEqual(Game, "csgo"))
{
{
PrecacheModel("models/weapons/t_arms_phoenix.mdl");
PrecacheModel("models/weapons/t_arms_phoenix.mdl");
PrecacheModel("models/weapons/ct_arms_sas.mdl");
PrecacheModel("models/weapons/ct_arms_sas.mdl");


for (int i = 0; i < sizeof(fbiModelsCT); i++)
for (int i = 0; i < sizeof(fbiModelsCT); i++)
{
{
if(fbiModelsCT[i][0] && !IsModelPrecached(fbiModelsCT[i]))
if(fbiModelsCT[i][0] && !IsModelPrecached(fbiModelsCT[i]))
PrecacheModel(fbiModelsCT[i]);
PrecacheModel(fbiModelsCT[i]);
}
}
for (int i = 0; i < sizeof(gignModelsCT); i++)
for (int i = 0; i < sizeof(gignModelsCT); i++)
{
{
if(gignModelsCT[i][0] && !IsModelPrecached(gignModelsCT[i]))
if(gignModelsCT[i][0] && !IsModelPrecached(gignModelsCT[i]))
PrecacheModel(gignModelsCT[i]);
PrecacheModel(gignModelsCT[i]);
}
}
for (int i = 0; i < sizeof(sasModelsCT); i++)
for (int i = 0; i < sizeof(sasModelsCT); i++)
{
{
if(sasModelsCT[i][0] && !IsModelPrecached(sasModelsCT[i]))
if(sasModelsCT[i][0] && !IsModelPrecached(sasModelsCT[i]))
PrecacheModel(sasModelsCT[i]);
PrecacheModel(sasModelsCT[i]);
}
}
for (int i = 0; i < sizeof(anarchistModelsT); i++)
for (int i = 0; i < sizeof(anarchistModelsT); i++)
{
{
if(anarchistModelsT[i][0] && !IsModelPrecached(anarchistModelsT[i]))
if(anarchistModelsT[i][0] && !IsModelPrecached(anarchistModelsT[i]))
PrecacheModel(anarchistModelsT[i]);
PrecacheModel(anarchistModelsT[i]);
}
}
for (int i = 0; i < sizeof(phoenixModelsT); i++)
for (int i = 0; i < sizeof(phoenixModelsT); i++)
{
{
if(phoenixModelsT[i][0] && !IsModelPrecached(phoenixModelsT[i]))
if(phoenixModelsT[i][0] && !IsModelPrecached(phoenixModelsT[i]))
PrecacheModel(phoenixModelsT[i]);
PrecacheModel(phoenixModelsT[i]);
}
}
for (int i = 0; i < sizeof(pirateModelsT); i++)
for (int i = 0; i < sizeof(pirateModelsT); i++)
{
{
if(pirateModelsT[i][0] && !IsModelPrecached(pirateModelsT[i]))
if(pirateModelsT[i][0] && !IsModelPrecached(pirateModelsT[i]))
PrecacheModel(pirateModelsT[i]);
PrecacheModel(pirateModelsT[i]);
}
}
}
}


// Declare string to load skin's config from sourcemod/configs folder
// Declare string to load skin's config from sourcemod/configs folder
char file[PLATFORM_MAX_PATH];
char file[PLATFORM_MAX_PATH];
char files[PLATFORM_MAX_PATH];
char files[PLATFORM_MAX_PATH];
char filea[PLATFORM_MAX_PATH];
char filea[PLATFORM_MAX_PATH];
char fileb[PLATFORM_MAX_PATH];
char fileb[PLATFORM_MAX_PATH];
char curmap[PLATFORM_MAX_PATH];
char curmap[PLATFORM_MAX_PATH];
GetCurrentMap(curmap, sizeof(curmap));
GetCurrentMap(curmap, sizeof(curmap));
if(GetConVarInt(g_mapbased) == 1)
if(GetConVarInt(g_mapbased) == 1)
{
{
// Does current map string contains a "workshop" prefix at a start?
// Does current map string contains a "workshop" prefix at a start?
if (strncmp(curmap, "workshop", 8) == 0)
if (strncmp(curmap, "workshop", 8) == 0)
{
{
// If yes - skip the first 19 characters to avoid comparing the "workshop/12345678" prefix
// If yes - skip the first 19 characters to avoid comparing the "workshop/12345678" prefix
BuildPath(Path_SM, file, sizeof(file), "configs/sm_skinchooser/%s_skins.ini", curmap[19]);
BuildPath(Path_SM, file, sizeof(file), "configs/sm_skinchooser/%s_skins.ini", curmap[19]);
BuildPath(Path_SM, files, sizeof(files), "configs/sm_skinchooser/%s_skins_downloads.ini", curmap[19]);
BuildPath(Path_SM, files, sizeof(files), "configs/sm_skinchooser/%s_skins_downloads.ini", curmap[19]);
}
}
else /* That's not a workshop map */
else /* That's not a workshop map */
{
{
// Let's check that custom skin configuration file is exists for current map
// Let's check that custom skin configuration file is exists for current map
BuildPath(Path_SM, file, sizeof(file), "configs/sm_skinchooser/%s_skins.ini", curmap);
BuildPath(Path_SM, file, sizeof(file), "configs/sm_skinchooser/%s_skins.ini", curmap);
BuildPath(Path_SM, files, sizeof(files), "configs/sm_skinchooser/%s_skins_downloads.ini", curmap);
BuildPath(Path_SM, files, sizeof(files), "configs/sm_skinchooser/%s_skins_downloads.ini", curmap);
}
}
// Unfortunately config for current map is not exists
// Unfortunately config for current map is not exists
if (!FileExists(file))
if (!FileExists(file))
{
{
// Then use default one
// Then use default one
BuildPath(Path_SM, file, sizeof(file), "configs/sm_skinchooser/default_skins.ini");
BuildPath(Path_SM, file, sizeof(file), "configs/sm_skinchooser/default_skins.ini");
}
}
if (!FileExists(files))
if (!FileExists(files))
{
{
BuildPath(Path_SM, files, sizeof(files), "configs/sm_skinchooser/default_skins_downloads.ini");
BuildPath(Path_SM, files, sizeof(files), "configs/sm_skinchooser/default_skins_downloads.ini");
}
}
if (StrEqual(Game, "csgo") && GetConVarInt(g_arms_enabled) == 1)
if (StrEqual(Game, "csgo") && GetConVarInt(g_arms_enabled) == 1)
{
{
if (strncmp(curmap, "workshop", 8) == 0)
if (strncmp(curmap, "workshop", 8) == 0)
{
{
BuildPath(Path_SM, filea, sizeof(filea), "configs/sm_skinchooser/%s_arms.ini", curmap[19]);
BuildPath(Path_SM, filea, sizeof(filea), "configs/sm_skinchooser/%s_arms.ini", curmap[19]);
BuildPath(Path_SM, fileb, sizeof(fileb), "configs/sm_skinchooser/%s_arms_downloads.ini", curmap[19]);
BuildPath(Path_SM, fileb, sizeof(fileb), "configs/sm_skinchooser/%s_arms_downloads.ini", curmap[19]);
}
}
else /* That's not a workshop map */
else /* That's not a workshop map */
{
{
BuildPath(Path_SM, filea, sizeof(filea), "configs/sm_skinchooser/%s_arms.ini", curmap);
BuildPath(Path_SM, filea, sizeof(filea), "configs/sm_skinchooser/%s_arms.ini", curmap);
BuildPath(Path_SM, fileb, sizeof(fileb), "configs/sm_skinchooser/%s_arms_downloads.ini", curmap);
BuildPath(Path_SM, fileb, sizeof(fileb), "configs/sm_skinchooser/%s_arms_downloads.ini", curmap);
}
}
if (!FileExists(filea))
if (!FileExists(filea))
{
{
BuildPath(Path_SM, filea, sizeof(filea), "configs/sm_skinchooser/default_arms.ini");
BuildPath(Path_SM, filea, sizeof(filea), "configs/sm_skinchooser/default_arms.ini");
}
}
if (!FileExists(fileb))
if (!FileExists(fileb))
{
{
BuildPath(Path_SM, fileb, sizeof(fileb), "configs/sm_skinchooser/default_arms_downloads.ini");
BuildPath(Path_SM, fileb, sizeof(fileb), "configs/sm_skinchooser/default_arms_downloads.ini");
}
}
}
}
}
}
else if(GetConVarInt(g_mapbased) == 0)
else if(GetConVarInt(g_mapbased) == 0)
{
{
BuildPath(Path_SM, file, sizeof(file), "configs/sm_skinchooser/default_skins.ini");
BuildPath(Path_SM, file, sizeof(file), "configs/sm_skinchooser/default_skins.ini");
BuildPath(Path_SM, files, sizeof(files), "configs/sm_skinchooser/default_skins_downloads.ini");
BuildPath(Path_SM, files, sizeof(files), "configs/sm_skinchooser/default_skins_downloads.ini");
if (StrEqual(Game, "csgo") && GetConVarInt(g_arms_enabled) == 1)
if (StrEqual(Game, "csgo") && GetConVarInt(g_arms_enabled) == 1)
{
{
BuildPath(Path_SM, filea, sizeof(filea), "configs/sm_skinchooser/default_arms.ini");
BuildPath(Path_SM, filea, sizeof(filea), "configs/sm_skinchooser/default_arms.ini");
BuildPath(Path_SM, fileb, sizeof(fileb), "configs/sm_skinchooser/default_arms_downloads.ini");
BuildPath(Path_SM, fileb, sizeof(fileb), "configs/sm_skinchooser/default_arms_downloads.ini");
}
}
}
}
LoadMapFile(file);
LoadMapFile(file);
ReadDownloads(files);
ReadDownloads(files);
if (StrEqual(Game, "csgo") && GetConVarInt(g_arms_enabled) == 1)
if (StrEqual(Game, "csgo") && GetConVarInt(g_arms_enabled) == 1)
{
{
LoadArmsMapFile(filea);
LoadArmsMapFile(filea);
ReadArmsDownloads(fileb);
ReadArmsDownloads(fileb);
}
}
if(GetConVarInt(g_ForcePlayerSkin) == 1)
if(GetConVarInt(g_ForcePlayerSkin) == 1)
{
{
g_ModelsPlayer_Count_Team2 = 0;
g_ModelsPlayer_Count_Team2 = 0;
g_ModelsPlayer_Count_Team3 = 0;
g_ModelsPlayer_Count_Team3 = 0;
g_ModelsPlayer_Count_Team2 = LoadModels(g_ModelsPlayerTeam2, "configs/sm_skinchooser/forceskinsplayer_team2.ini");
g_ModelsPlayer_Count_Team2 = LoadModels(g_ModelsPlayerTeam2, "configs/sm_skinchooser/forceskinsplayer_team2.ini");
g_ModelsPlayer_Count_Team3 = LoadModels(g_ModelsPlayerTeam3, "configs/sm_skinchooser/forceskinsplayer_team3.ini");
g_ModelsPlayer_Count_Team3 = LoadModels(g_ModelsPlayerTeam3, "configs/sm_skinchooser/forceskinsplayer_team3.ini");
}
}
if(GetConVarInt(g_SkinBots) == 1)
if(GetConVarInt(g_SkinBots) == 1)
{
{
g_ModelsBots_Count_Team2 = 0;
g_ModelsBots_Count_Team2 = 0;
g_ModelsBots_Count_Team3 = 0;
g_ModelsBots_Count_Team3 = 0;
g_ModelsBots_Count_Team2 = LoadModels(g_ModelsBotsTeam2, "configs/sm_skinchooser/forceskinsbots_team2.ini");
g_ModelsBots_Count_Team2 = LoadModels(g_ModelsBotsTeam2, "configs/sm_skinchooser/forceskinsbots_team2.ini");
g_ModelsBots_Count_Team3 = LoadModels(g_ModelsBotsTeam3, "configs/sm_skinchooser/forceskinsbots_team3.ini");
g_ModelsBots_Count_Team3 = LoadModels(g_ModelsBotsTeam3, "configs/sm_skinchooser/forceskinsbots_team3.ini");
}
}
if(GetConVarInt(g_SkinAdmin) == 1)
if(GetConVarInt(g_SkinAdmin) == 1)
{
{
g_ModelsAdmin_Count_Team2 = 0;
g_ModelsAdmin_Count_Team2 = 0;
g_ModelsAdmin_Count_Team3 = 0;
g_ModelsAdmin_Count_Team3 = 0;
g_ModelsAdmin_Count_Team2 = LoadModels(g_ModelsAdminTeam2, "configs/sm_skinchooser/forceskinsadmin_team2.ini");
g_ModelsAdmin_Count_Team2 = LoadModels(g_ModelsAdminTeam2, "configs/sm_skinchooser/forceskinsadmin_team2.ini");
g_ModelsAdmin_Count_Team3 = LoadModels(g_ModelsAdminTeam3, "configs/sm_skinchooser/forceskinsadmin_team3.ini");
g_ModelsAdmin_Count_Team3 = LoadModels(g_ModelsAdminTeam3, "configs/sm_skinchooser/forceskinsadmin_team3.ini");
}
}
}
}
}
public void OnConfigsExecuted ()
{
if(GetConVarInt(g_enabled) == 1)
{
// Load Player last choosen Models
// Load Player last choosen Models
char filex[PLATFORM_MAX_PATH];
char filex[PLATFORM_MAX_PATH];
char filey[PLATFORM_MAX_PATH];
char filey[PLATFORM_MAX_PATH];
char curmapa[PLATFORM_MAX_PATH];
char curmapa[PLATFORM_MAX_PATH];
GetCurrentMap(curmapa, sizeof(curmapa));
GetCurrentMap(curmapa, sizeof(curmapa));
if(GetConVarInt(g_mapbased) == 1)
if(GetConVarInt(g_mapbased) == 1)
{
{
if (strncmp(curmapa, "workshop", 8) == 0)
if (strncmp(curmapa, "workshop", 8) == 0)
{
{
BuildPath(Path_SM, filex, sizeof(filex), "data/%s_skinchooser_playermodels.ini", curmapa[19]);
BuildPath(Path_SM, filex, sizeof(filex), "data/%s_skinchooser_playermodels.ini", curmapa[19]);
playermodelskv = CreateKeyValues("Models");
playermodelskv = CreateKeyValues("Models");
FileToKeyValues(playermodelskv, filex);
FileToKeyValues(playermodelskv, filex);
}
}
else
else
{
{
BuildPath(Path_SM, filex, sizeof(filex), "data/%s_skinchooser_playermodels.ini", curmapa);
BuildPath(Path_SM, filex, sizeof(filex), "data/%s_skinchooser_playermodels.ini", curmapa);
playermodelskv = CreateKeyValues("Models");
playermodelskv = CreateKeyValues("Models");
FileToKeyValues(playermodelskv, filex);
FileToKeyValues(playermodelskv, filex);
}
}
// If Game is CSGO load the last choosen Armmodel
// If Game is CSGO load the last choosen Armmodel
if (StrEqual(Game, "csgo") && GetConVarInt(g_arms_enabled) == 1)
if (StrEqual(Game, "csgo") && GetConVarInt(g_arms_enabled) == 1)
{
{
if (strncmp(curmapa, "workshop", 8) == 0)
if (strncmp(curmapa, "workshop", 8) == 0)
{
{
BuildPath(Path_SM, filey, sizeof(filey), "data/%s_skinchooser_armsmodels.ini", curmapa[19]);
BuildPath(Path_SM, filey, sizeof(filey), "data/%s_skinchooser_armsmodels.ini", curmapa[19]);
playermodelskva = CreateKeyValues("Arms");
playermodelskva = CreateKeyValues("Arms");
FileToKeyValues(playermodelskva, filey);
FileToKeyValues(playermodelskva, filey);
}
}
else
else
{
{
BuildPath(Path_SM, filey, sizeof(filey), "data/%s_skinchooser_armsmodels.ini", curmapa);
BuildPath(Path_SM, filey, sizeof(filey), "data/%s_skinchooser_armsmodels.ini", curmapa);
playermodelskva = CreateKeyValues("Arms");
playermodelskva = CreateKeyValues("Arms");
FileToKeyValues(playermodelskva, filey);
FileToKeyValues(playermodelskva, filey);
}
}
}
}
}
}
else if(GetConVarInt(g_mapbased) == 0)
else if(GetConVarInt(g_mapbased) == 0)
{
{
BuildPath(Path_SM, filex, sizeof(filex), "data/skinchooser_playermodels.ini");
BuildPath(Path_SM, filex, sizeof(filex), "data/skinchooser_playermodels.ini");
playermodelskv = CreateKeyValues("Models");
playermodelskv = CreateKeyValues("Models");
FileToKeyValues(playermodelskv, filex);
FileToKeyValues(playermodelskv, filex);
if (StrEqual(Game, "csgo") && GetConVarInt(g_arms_enabled) == 1)
if (StrEqual(Game, "csgo") && GetConVarInt(g_arms_enabled) == 1)
{
{
BuildPath(Path_SM, filey, sizeof(filey), "data/skinchooser_armsmodels.ini");
BuildPath(Path_SM, filey, sizeof(filey), "data/skinchooser_armsmodels.ini");
playermodelskva = CreateKeyValues("Arms");
playermodelskva = CreateKeyValues("Arms");
FileToKeyValues(playermodelskva, filey);
FileToKeyValues(playermodelskva, filey);
}
}
}
}
}
}
}


public void OnMapEnd()
public void OnMapEnd()
{
{
// Write the last choosen Model
// Write the last choosen Model
char filea[PLATFORM_MAX_PATH];
char filea[PLATFORM_MAX_PATH];
char fileb[PLATFORM_MAX_PATH];
char fileb[PLATFORM_MAX_PATH];
char curmap[PLATFORM_MAX_PATH];
char curmap[PLATFORM_MAX_PATH];
GetCurrentMap(curmap, sizeof(curmap));
GetCurrentMap(curmap, sizeof(curmap));
if(GetConVarInt(g_mapbased) == 1)
if(GetConVarInt(g_mapbased) == 1)
{
{
if (strncmp(curmap, "workshop", 8) == 0)
if (strncmp(curmap, "workshop", 8) == 0)
{
{
BuildPath(Path_SM, fileb, sizeof(fileb), "data/%s_skinchooser_playermodels.ini", curmap[19]);
BuildPath(Path_SM, fileb, sizeof(fileb), "data/%s_skinchooser_playermodels.ini", curmap[19]);
KeyValuesToFile(playermodelskv, fileb);
KeyValuesToFile(playermodelskv, fileb);
CloseHandle(playermodelskv);
CloseHandle(playermodelskv);
}
}
else
else
{
{
BuildPath(Path_SM, fileb, sizeof(fileb), "data/%s_skinchooser_playermodels.ini", curmap);
BuildPath(Path_SM, fileb, sizeof(fileb), "data/%s_skinchooser_playermodels.ini", curmap);
KeyValuesToFile(playermodelskv, fileb);
KeyValuesToFile(playermodelskv, fileb);
CloseHandle(playermodelskv);
CloseHandle(playermodelskv);
}
}
// Write the last choosen Arms if Game is CSGO
// Write the last choosen Arms if Game is CSGO
if (StrEqual(Game, "csgo") && GetConVarInt(g_arms_enabled) == 1)
if (StrEqual(Game, "csgo") && GetConVarInt(g_arms_enabled) == 1)
{
{
if (strncmp(curmap, "workshop", 8) == 0)
if (strncmp(curmap, "workshop", 8) == 0)
{
{
BuildPath(Path_SM, filea, sizeof(filea), "data/%s_skinchooser_armsmodels.ini", curmap[19]);
BuildPath(Path_SM, filea, sizeof(filea), "data/%s_skinchooser_armsmodels.ini", curmap[19]);
KeyValuesToFile(playermodelskva, filea);
KeyValuesToFile(playermodelskva, filea);
CloseHandle(playermodelskva);
CloseHandle(playermodelskva);
}
}
else
else
{
{
BuildPath(Path_SM, filea, sizeof(filea), "data/%s_skinchooser_armsmodels.ini", curmap);
BuildPath(Path_SM, filea, sizeof(filea), "data/%s_skinchooser_armsmodels.ini", curmap);
KeyValuesToFile(playermodelskva, filea);
KeyValuesToFile(playermodelskva, filea);
CloseHandle(playermodelskva);
CloseHandle(playermodelskva);
}
}
}
}
CloseHandle(kv);
CloseHandle(kv);
CloseHandle(kva);
CloseHandle(kva);
}
}
if(GetConVarInt(g_mapbased) == 0)
if(GetConVarInt(g_mapbased) == 0)
{
{
BuildPath(Path_SM, fileb, sizeof(fileb), "data/skinchooser_playermodels.ini");
BuildPath(Path_SM, fileb, sizeof(fileb), "data/skinchooser_playermodels.ini");
KeyValuesToFile(playermodelskv, fileb);
KeyValuesToFile(playermodelskv, fileb);
CloseHandle(playermodelskv);
CloseHandle(playermodelskv);
if (StrEqual(Game, "csgo") && GetConVarInt(g_arms_enabled) == 1)
if (StrEqual(Game, "csgo") && GetConVarInt(g_arms_enabled) == 1)
{
{
BuildPath(Path_SM, filea, sizeof(filea), "data/skinchooser_armsmodels.ini");
BuildPath(Path_SM, filea, sizeof(filea), "data/skinchooser_armsmodels.ini");
KeyValuesToFile(playermodelskva, filea);
KeyValuesToFile(playermodelskva, filea);
CloseHandle(playermodelskva);
CloseHandle(playermodelskva);
}
}
CloseHandle(kv);
CloseHandle(kv);
CloseHandle(kva);
CloseHandle(kva);
}
}
}
}


public int LoadModels(const char[][] models, char[] ini_file)
public int LoadModels(const char[][] models, char[] ini_file)
{
{
char buffer[MAX_FILE_LEN];
char buffer[MAX_FILE_LEN];
char file[MAX_FILE_LEN];
char file[MAX_FILE_LEN];
int models_count;
int models_count;


BuildPath(Path_SM, file, MAX_FILE_LEN, ini_file);
BuildPath(Path_SM, file, MAX_FILE_LEN, ini_file);


//open precache file and add everything to download table
//open precache file and add everything to download table
Handle fileh = OpenFile(file, "r");
Handle fileh = OpenFile(file, "r");
while (ReadFileLine(fileh, buffer, MAX_FILE_LEN))
while (ReadFileLine(fileh, buffer, MAX_FILE_LEN))
{
{
// Strip leading and trailing whitespace
// Strip leading and trailing whitespace
TrimString(buffer);
// Skip comments
if (buffer[0] != '/')
{
//