Guest User

Untitled

a guest
May 11th, 2020
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.71 KB | None | 0 0
  1. #pragma semicolon 1
  2.  
  3. #define DEBUG
  4.  
  5. #include <sourcemod>
  6. #include <sdktools>
  7. #include <cstrike>
  8. #include <sdkhooks>
  9. #include <smlib>
  10.  
  11. char g_sConfigFile[PLATFORM_MAX_PATH];
  12.  
  13. char def_ct_model_path[PLATFORM_MAX_PATH];
  14. char def_ct_arms_path[PLATFORM_MAX_PATH];
  15. char def_t_model_path[PLATFORM_MAX_PATH];
  16. char def_t_arms_path[PLATFORM_MAX_PATH];
  17. bool g_bHasCustomModel[MAXPLAYERS + 1];
  18.  
  19. #define LoopAllPlayers(%1) for(int %1=1;%1<=MaxClients;++%1)\
  20. if(IsClientInGame(%1))
  21.  
  22.  
  23. public Plugin myinfo =
  24. {
  25. name = "Player models by flags",
  26. author = "boomix",
  27. description = "Player models by flags",
  28. version = "1.2",
  29. url = "http://google.lv"
  30. };
  31.  
  32. public void OnPluginStart()
  33. {
  34. BuildPath(Path_SM, g_sConfigFile, sizeof(g_sConfigFile), "configs/flagplayerskins/skins.txt");
  35. HookEvent("player_spawn", FMBF_PlayerSpawn, EventHookMode_Post);
  36. }
  37.  
  38. public void OnClientPutInServer(int client)
  39. {
  40. g_bHasCustomModel[client] = false;
  41. }
  42.  
  43. public Action FMBF_PlayerSpawn(Handle event, const char[] name, bool dontBroadcast)
  44. {
  45.  
  46. int client = GetClientOfUserId(GetEventInt(event, "userid"));
  47. g_bHasCustomModel[client] = false;
  48.  
  49. KeyValues kv = CreateKeyValues("player_models");
  50.  
  51. kv.ImportFromFile(g_sConfigFile);
  52.  
  53. if (!kv.GotoFirstSubKey())
  54. {
  55. return Plugin_Handled;
  56. }
  57.  
  58. char section_name[10], model_path[PLATFORM_MAX_PATH], arms_path[PLATFORM_MAX_PATH];
  59.  
  60. do
  61. {
  62. //Importing stuff from keyvalues
  63. kv.GetSectionName(section_name, sizeof(section_name));
  64. kv.GetString("model_path", model_path, sizeof(model_path));
  65. kv.GetString("arms_path", arms_path, sizeof(arms_path));
  66.  
  67. //--CT-- default model&arms
  68. if(StrEqual(section_name, "def-ct"))
  69. {
  70. def_ct_model_path = model_path;
  71. def_ct_arms_path = arms_path;
  72. }
  73.  
  74. //--T-- default model&arms
  75. else if(StrEqual(section_name, "def-t"))
  76. {
  77. def_t_model_path = model_path;
  78. def_t_arms_path = arms_path;
  79. }
  80.  
  81. //Getting flag and team
  82. char brake[2][30];
  83. ExplodeString(section_name, "-", brake, sizeof(brake), sizeof(brake[]));
  84.  
  85. char charflag[30], charteam[30];
  86. charflag = brake[0];
  87. charteam = brake[1];
  88.  
  89. FlagStringToInt(charflag, "a", ADMFLAG_RESERVATION);
  90. FlagStringToInt(charflag, "b", ADMFLAG_GENERIC);
  91. FlagStringToInt(charflag, "c", ADMFLAG_KICK);
  92. FlagStringToInt(charflag, "d", ADMFLAG_BAN);
  93. FlagStringToInt(charflag, "e", ADMFLAG_UNBAN);
  94. FlagStringToInt(charflag, "f", ADMFLAG_SLAY);
  95. FlagStringToInt(charflag, "g", ADMFLAG_CHANGEMAP);
  96. FlagStringToInt(charflag, "h", 128);
  97. FlagStringToInt(charflag, "i", ADMFLAG_CONFIG);
  98. FlagStringToInt(charflag, "j", ADMFLAG_CHAT);
  99. FlagStringToInt(charflag, "k", ADMFLAG_VOTE);
  100. FlagStringToInt(charflag, "l", ADMFLAG_PASSWORD);
  101. FlagStringToInt(charflag, "m", ADMFLAG_RCON);
  102. FlagStringToInt(charflag, "n", ADMFLAG_CHEATS);
  103. FlagStringToInt(charflag, "z", ADMFLAG_ROOT);
  104. FlagStringToInt(charflag, "o", ADMFLAG_CUSTOM1);
  105. FlagStringToInt(charflag, "p", ADMFLAG_CUSTOM2);
  106. FlagStringToInt(charflag, "q", ADMFLAG_CUSTOM3);
  107. FlagStringToInt(charflag, "r", ADMFLAG_CUSTOM4);
  108. FlagStringToInt(charflag, "s", ADMFLAG_CUSTOM5);
  109. FlagStringToInt(charflag, "t", ADMFLAG_CUSTOM6);
  110.  
  111. int flags = StringToInt(charflag);
  112.  
  113. if(Client_HasAdminFlags(client, flags))
  114. {
  115. int TeamToCheck;
  116. if(StrEqual(charteam, "t"))
  117. TeamToCheck = CS_TEAM_T;
  118. else if(StrEqual(charteam, "ct"))
  119. TeamToCheck = CS_TEAM_CT;
  120.  
  121. if(GetClientTeam(client) == TeamToCheck)
  122. {
  123. SetPlayerModel(client, model_path);
  124. SetPlayerArms(client, arms_path);
  125. g_bHasCustomModel[client] = true;
  126. }
  127. }
  128.  
  129. } while (kv.GotoNextKey());
  130.  
  131. delete kv;
  132.  
  133. //Set default models for players
  134. LoopAllPlayers(i)
  135. {
  136. if(!g_bHasCustomModel[client])
  137. {
  138. if (GetClientTeam(client) == CS_TEAM_CT)
  139. {
  140. SetPlayerModel(client, def_ct_model_path);
  141. SetPlayerArms(client, def_ct_arms_path);
  142. }
  143.  
  144. else if (GetClientTeam(client) == CS_TEAM_T)
  145. {
  146. SetPlayerModel(client, def_t_model_path);
  147. SetPlayerArms(client, def_t_arms_path);
  148. }
  149. }
  150. }
  151.  
  152.  
  153. return Plugin_Continue;
  154.  
  155.  
  156. }
  157.  
  158. void FlagStringToInt(char StrToReplace[30], char flag[10], int ReplaceWith)
  159. {
  160. char NewFlagValue[10];
  161. IntToString(ReplaceWith, NewFlagValue, sizeof(NewFlagValue));
  162. ReplaceString(StrToReplace, sizeof(StrToReplace), flag, NewFlagValue);
  163. }
  164.  
  165. void SetPlayerModel(int client, char model_path[PLATFORM_MAX_PATH])
  166. {
  167.  
  168. if(!StrEqual(model_path, ""))
  169. {
  170. if(!IsModelPrecached(model_path))
  171. PrecacheModel(model_path);
  172. Entity_SetModel(client, model_path);
  173. }
  174.  
  175. }
  176.  
  177. void SetPlayerArms(int client, char arms_path[PLATFORM_MAX_PATH])
  178. {
  179. if(!StrEqual(arms_path, ""))
  180. {
  181. //Remove player all items and give back them after 0.1 seconds + block weapon pickup
  182. int weapon_index;
  183. SDKHook(client, SDKHook_WeaponEquip, OnWeaponEquip);
  184. for (new slot = 0; slot < 7; slot++)
  185. {
  186. weapon_index = GetPlayerWeaponSlot(client, slot);
  187. {
  188. if(weapon_index != -1)
  189. {
  190. if (IsValidEntity(weapon_index))
  191. {
  192. RemovePlayerItem(client, weapon_index);
  193.  
  194. DataPack pack;
  195. CreateDataTimer(0.1, GiveBackWeapons, pack);
  196. pack.WriteCell(client);
  197. pack.WriteCell(weapon_index);
  198. }
  199. }
  200. }
  201. }
  202.  
  203. //Set player arm model
  204. if(!IsModelPrecached(arms_path))
  205. PrecacheModel(arms_path);
  206.  
  207. SetEntPropString(client, Prop_Send, "m_szArmsModel", arms_path);
  208.  
  209. }
  210. }
  211.  
  212. public Action GiveBackWeapons(Handle tmr, Handle pack)
  213. {
  214. ResetPack(pack);
  215. int client = ReadPackCell(pack);
  216. int weapon_index = ReadPackCell(pack);
  217.  
  218. SDKUnhook(client, SDKHook_WeaponEquip, OnWeaponEquip);
  219. EquipPlayerWeapon(client, weapon_index);
  220.  
  221. }
  222.  
  223.  
  224. public Action OnWeaponEquip(int client, int weapon)
  225. {
  226. return Plugin_Handled;
  227. }
Add Comment
Please, Sign In to add comment