Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma semicolon 1
- #define DEBUG
- #include <sourcemod>
- #include <sdktools>
- #include <cstrike>
- #include <sdkhooks>
- #include <smlib>
- char g_sConfigFile[PLATFORM_MAX_PATH];
- char def_ct_model_path[PLATFORM_MAX_PATH];
- char def_ct_arms_path[PLATFORM_MAX_PATH];
- char def_t_model_path[PLATFORM_MAX_PATH];
- char def_t_arms_path[PLATFORM_MAX_PATH];
- bool g_bHasCustomModel[MAXPLAYERS + 1];
- #define LoopAllPlayers(%1) for(int %1=1;%1<=MaxClients;++%1)\
- if(IsClientInGame(%1))
- public Plugin myinfo =
- {
- name = "Player models by flags",
- author = "boomix",
- description = "Player models by flags",
- version = "1.2",
- url = "http://google.lv"
- };
- public void OnPluginStart()
- {
- BuildPath(Path_SM, g_sConfigFile, sizeof(g_sConfigFile), "configs/flagplayerskins/skins.txt");
- HookEvent("player_spawn", FMBF_PlayerSpawn, EventHookMode_Post);
- }
- public void OnClientPutInServer(int client)
- {
- g_bHasCustomModel[client] = false;
- }
- public Action FMBF_PlayerSpawn(Handle event, const char[] name, bool dontBroadcast)
- {
- int client = GetClientOfUserId(GetEventInt(event, "userid"));
- g_bHasCustomModel[client] = false;
- KeyValues kv = CreateKeyValues("player_models");
- kv.ImportFromFile(g_sConfigFile);
- if (!kv.GotoFirstSubKey())
- {
- return Plugin_Handled;
- }
- char section_name[10], model_path[PLATFORM_MAX_PATH], arms_path[PLATFORM_MAX_PATH];
- do
- {
- //Importing stuff from keyvalues
- kv.GetSectionName(section_name, sizeof(section_name));
- kv.GetString("model_path", model_path, sizeof(model_path));
- kv.GetString("arms_path", arms_path, sizeof(arms_path));
- //--CT-- default model&arms
- if(StrEqual(section_name, "def-ct"))
- {
- def_ct_model_path = model_path;
- def_ct_arms_path = arms_path;
- }
- //--T-- default model&arms
- else if(StrEqual(section_name, "def-t"))
- {
- def_t_model_path = model_path;
- def_t_arms_path = arms_path;
- }
- //Getting flag and team
- char brake[2][30];
- ExplodeString(section_name, "-", brake, sizeof(brake), sizeof(brake[]));
- char charflag[30], charteam[30];
- charflag = brake[0];
- charteam = brake[1];
- FlagStringToInt(charflag, "a", ADMFLAG_RESERVATION);
- FlagStringToInt(charflag, "b", ADMFLAG_GENERIC);
- FlagStringToInt(charflag, "c", ADMFLAG_KICK);
- FlagStringToInt(charflag, "d", ADMFLAG_BAN);
- FlagStringToInt(charflag, "e", ADMFLAG_UNBAN);
- FlagStringToInt(charflag, "f", ADMFLAG_SLAY);
- FlagStringToInt(charflag, "g", ADMFLAG_CHANGEMAP);
- FlagStringToInt(charflag, "h", 128);
- FlagStringToInt(charflag, "i", ADMFLAG_CONFIG);
- FlagStringToInt(charflag, "j", ADMFLAG_CHAT);
- FlagStringToInt(charflag, "k", ADMFLAG_VOTE);
- FlagStringToInt(charflag, "l", ADMFLAG_PASSWORD);
- FlagStringToInt(charflag, "m", ADMFLAG_RCON);
- FlagStringToInt(charflag, "n", ADMFLAG_CHEATS);
- FlagStringToInt(charflag, "z", ADMFLAG_ROOT);
- FlagStringToInt(charflag, "o", ADMFLAG_CUSTOM1);
- FlagStringToInt(charflag, "p", ADMFLAG_CUSTOM2);
- FlagStringToInt(charflag, "q", ADMFLAG_CUSTOM3);
- FlagStringToInt(charflag, "r", ADMFLAG_CUSTOM4);
- FlagStringToInt(charflag, "s", ADMFLAG_CUSTOM5);
- FlagStringToInt(charflag, "t", ADMFLAG_CUSTOM6);
- int flags = StringToInt(charflag);
- if(Client_HasAdminFlags(client, flags))
- {
- int TeamToCheck;
- if(StrEqual(charteam, "t"))
- TeamToCheck = CS_TEAM_T;
- else if(StrEqual(charteam, "ct"))
- TeamToCheck = CS_TEAM_CT;
- if(GetClientTeam(client) == TeamToCheck)
- {
- SetPlayerModel(client, model_path);
- SetPlayerArms(client, arms_path);
- g_bHasCustomModel[client] = true;
- }
- }
- } while (kv.GotoNextKey());
- delete kv;
- //Set default models for players
- LoopAllPlayers(i)
- {
- if(!g_bHasCustomModel[client])
- {
- if (GetClientTeam(client) == CS_TEAM_CT)
- {
- SetPlayerModel(client, def_ct_model_path);
- SetPlayerArms(client, def_ct_arms_path);
- }
- else if (GetClientTeam(client) == CS_TEAM_T)
- {
- SetPlayerModel(client, def_t_model_path);
- SetPlayerArms(client, def_t_arms_path);
- }
- }
- }
- return Plugin_Continue;
- }
- void FlagStringToInt(char StrToReplace[30], char flag[10], int ReplaceWith)
- {
- char NewFlagValue[10];
- IntToString(ReplaceWith, NewFlagValue, sizeof(NewFlagValue));
- ReplaceString(StrToReplace, sizeof(StrToReplace), flag, NewFlagValue);
- }
- void SetPlayerModel(int client, char model_path[PLATFORM_MAX_PATH])
- {
- if(!StrEqual(model_path, ""))
- {
- if(!IsModelPrecached(model_path))
- PrecacheModel(model_path);
- Entity_SetModel(client, model_path);
- }
- }
- void SetPlayerArms(int client, char arms_path[PLATFORM_MAX_PATH])
- {
- if(!StrEqual(arms_path, ""))
- {
- //Remove player all items and give back them after 0.1 seconds + block weapon pickup
- int weapon_index;
- SDKHook(client, SDKHook_WeaponEquip, OnWeaponEquip);
- for (new slot = 0; slot < 7; slot++)
- {
- weapon_index = GetPlayerWeaponSlot(client, slot);
- {
- if(weapon_index != -1)
- {
- if (IsValidEntity(weapon_index))
- {
- RemovePlayerItem(client, weapon_index);
- DataPack pack;
- CreateDataTimer(0.1, GiveBackWeapons, pack);
- pack.WriteCell(client);
- pack.WriteCell(weapon_index);
- }
- }
- }
- }
- //Set player arm model
- if(!IsModelPrecached(arms_path))
- PrecacheModel(arms_path);
- SetEntPropString(client, Prop_Send, "m_szArmsModel", arms_path);
- }
- }
- public Action GiveBackWeapons(Handle tmr, Handle pack)
- {
- ResetPack(pack);
- int client = ReadPackCell(pack);
- int weapon_index = ReadPackCell(pack);
- SDKUnhook(client, SDKHook_WeaponEquip, OnWeaponEquip);
- EquipPlayerWeapon(client, weapon_index);
- }
- public Action OnWeaponEquip(int client, int weapon)
- {
- return Plugin_Handled;
- }
Add Comment
Please, Sign In to add comment