Advertisement
Guest User

Hidenseek

a guest
Mar 19th, 2013
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 84.94 KB | None | 0 0
  1. /*
  2.  
  3.     HideNSeek
  4.     Version 2.8
  5.     By Exolent
  6.    
  7.     Information about this plugin can be found at:
  8.     http://forums.alliedmods.net/showthread.php?t=65370
  9.  
  10. */
  11.  
  12. #include <amxmodx>
  13. #include <amxmisc>
  14. #include <fakemeta>
  15. #include <fakemeta_util>
  16.  
  17. /* YAY! No <cstrike> <csx> <fun> or <engine>!! =D */
  18.  
  19.  
  20. #define PLUGIN_NAME "HideNSeek"
  21. #define PLUGIN_VERSION  "2.8"
  22. #define PLUGIN_AUTHOR   "Exolent"
  23.  
  24.  
  25. #pragma semicolon 1
  26.  
  27.  
  28. /* save memory */
  29. new const g_sBlank[] = "";
  30. new const g_sA[] = "a";
  31. new const g_sB[] = "b";
  32. new const g_sS[] = "s";
  33. new const g_sKnifeModel_v[] = "models/v_knife.mdl";
  34. new const g_sKnifeModel_w[] = "models/w_knife.mdl";
  35. new const g_sModel[] = "model";
  36. new const g_sLightsNormal[] = "m";
  37. new const g_sClassBreakable[] = "func_breakable";
  38. new const g_sClassDoor[] = "func_door";
  39. new const g_sClassDoorRotating[] = "func_door_rotating";
  40. /* end of save memory globals */
  41.  
  42. /* CONVERT CSTRIKE TO FAKEMETA */
  43.  
  44. enum CsTeams
  45. {
  46.     CS_TEAM_UNASSIGNED = 0,
  47.     CS_TEAM_T,
  48.     CS_TEAM_CT,
  49.     CS_TEAM_SPECTATOR
  50. };
  51. enum CsInternalModel
  52. {
  53.     CS_DONTCHANGE = 0,
  54.     CS_CT_URBAN,
  55.     CS_T_TERROR,
  56.     CS_T_LEET,
  57.     CS_T_ARCTIC,
  58.     CS_CT_GSG9,
  59.     CS_CT_GIGN,
  60.     CS_CT_SAS,
  61.     CS_T_GUERILLA,
  62.     CS_CT_VIP,
  63.     CZ_T_MILITIA,
  64.     CZ_CT_SPETSNAZ
  65. };
  66. enum CsArmorType
  67. {
  68.     CS_ARMOR_NONE = 0,
  69.     CS_ARMOR_KEVLAR,
  70.     CS_ARMOR_VESTHELM
  71. };
  72.  
  73. #define OFFSET_ARMORTYPE        112
  74. #define OFFSET_TEAM         114
  75. #define OFFSET_MONEY            115
  76. #define OFFSET_INTERNALMODEL        126
  77. #define OFFSET_AWP_AMMO         377
  78. #define OFFSET_SCOUT_AMMO       378
  79. #define OFFSET_PARA_AMMO        379
  80. #define OFFSET_FAMAS_AMMO       380
  81. #define OFFSET_M3_AMMO          381
  82. #define OFFSET_USP_AMMO         382
  83. #define OFFSET_FIVESEVEN_AMMO       383
  84. #define OFFSET_DEAGLE_AMMO      384
  85. #define OFFSET_P228_AMMO        385
  86. #define OFFSET_GLOCK_AMMO       386
  87. #define OFFSET_FLASHBANG_AMMO       387
  88. #define OFFSET_HEGRENADE_AMMO       388
  89. #define OFFSET_SMOKEGRENADE_AMMO    389
  90. #define OFFSET_C4_AMMO          390
  91.  
  92. #define cs_set_user_bpammo(%1,%2,%3) set_pdata_int(%1, __get_ammo_offset(%2), %3)
  93. #define cs_set_user_model(%1,%2) engfunc(EngFunc_SetClientKeyValue, %1, engfunc(EngFunc_GetInfoKeyBuffer, %1), g_sModel, %2)
  94. #define cs_get_user_model(%1,%2,%3) engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, %1), g_sModel, %2, %3)
  95.  
  96. /* END OF CSTRIKE TO FAKEMETA CONVERSION */
  97.  
  98.  
  99. #define HIDE_MONEY      (1<<5)
  100.  
  101. new const CsTeams:HNS_TEAM_HIDER = CS_TEAM_T;
  102. new const CsTeams:HNS_TEAM_SEEKER = CS_TEAM_CT;
  103.  
  104. new const CsInternalModel:HNS_MODEL_HIDER = CS_T_LEET;
  105. new const CsInternalModel:HNS_MODEL_SEEKER = CS_CT_GIGN;
  106.  
  107. enum
  108. {
  109.     SCRIM_NONE = 0,
  110.     SCRIM_ROUNDS,
  111.     SCRIM_POINTS,
  112.    
  113.     SCRIM_TYPES
  114. };
  115.  
  116. new const g_sBuyCommands[][] =
  117. {
  118.     "usp", "glock", "deagle", "p228", "elites",
  119.     "fn57", "m3", "xm1014", "mp5", "tmp", "p90",
  120.     "mac10", "ump45", "ak47", "galil", "famas",
  121.     "sg552", "m4a1", "aug", "scout", "awp", "g3sg1",
  122.     "sg550", "m249", "vest", "vesthelm", "flash",
  123.     "hegren", "sgren", "defuser", "nvgs", "shield",
  124.     "primammo", "secammo", "km45", "9x19mm", "nighthawk",
  125.     "228compact", "fiveseven", "12gauge", "autoshotgun",
  126.     "mp", "c90", "cv47", "defender", "clarion", "krieg552",
  127.     "bullpup", "magnum", "d3au1", "krieg550"
  128. };
  129. new const MAX_BUY_COMMANDS = sizeof(g_sBuyCommands);
  130. new const g_sRemoveEntities[][] =
  131. {
  132.     "func_bomb_target",
  133.     "info_bomb_target",
  134.     "hostage_entity",
  135.     "monster_scientist",
  136.     "func_hostage_rescue",
  137.     "info_hostage_rescue",
  138.     "info_vip_start",
  139.     "func_vip_safetyzone",
  140.     "func_escapezone",
  141.     "armoury_entity"
  142. };
  143. new const MAX_REMOVED_ENTITIES = sizeof(g_sRemoveEntities);
  144. new const g_sAllModels[CsTeams][][] =
  145. {
  146.     {"", "", "", ""},
  147.     {"terror", "arctic", "leet", "guerilla"},
  148.     {"gign", "gsg9", "sas", "urban"},
  149.     {"", "", "", ""}
  150. };
  151. new const g_sDefaultModels[CsTeams][] =
  152. {
  153.     "",
  154.     "leet",
  155.     "gign",
  156.     ""
  157. };
  158. new const g_sTeamInfo[CsTeams][] =
  159. {
  160.     "UNASSIGNED",
  161.     "TERRORIST",
  162.     "CT",
  163.     "SPECTATOR"
  164. };
  165. new const g_sTeamNames[CsTeams][] =
  166. {
  167.     "Spectator",
  168.     "Terrorist",
  169.     "Counter-Terrorist",
  170.     "Spectator"
  171. };
  172.  
  173. enum (+= 1000)
  174. {
  175.     TASK_ID_STRIPWEAPONS = 1000,
  176.     TASK_ID_GIVEWEAPONS,
  177.     TASK_ID_GIVEKNIFE,
  178.     TASK_ID_CHECKMODEL,
  179.     TASK_ID_HIDETIMER,
  180.     TASK_ID_SWAPTEAMS,
  181.     TASK_ID_SETLIGHTS,
  182.     TASK_ID_SHOWPLUGININFO,
  183.     TASK_ID_SCRIMVOTE
  184. };
  185.  
  186. new const g_PlayerTasks[] =
  187. {
  188.     TASK_ID_STRIPWEAPONS,
  189.     TASK_ID_GIVEWEAPONS,
  190.     TASK_ID_GIVEKNIFE,
  191.     TASK_ID_CHECKMODEL,
  192.     TASK_ID_SHOWPLUGININFO
  193. };
  194. new const MAX_PLAYER_TASKS = sizeof(g_PlayerTasks);
  195.  
  196. new bool:g_bHnsOn = true;
  197. new bool:g_bScrimOn;
  198. new bool:g_bWarmup;
  199.  
  200. new g_ScrimVoteTimer;
  201. new g_ScrimVoteCount[SCRIM_TYPES];
  202. new bool:g_bScrimVoted[33];
  203.  
  204. new g_ScrimType;
  205. new CsTeams:g_ScrimWinner;
  206. new g_ScrimSaveWins;
  207. new g_ScrimRounds[CsTeams];
  208. new g_ScrimLosses[CsTeams];
  209. new g_ScrimMaxRounds;
  210. new g_ScrimMaxLosses;
  211. new bool:g_bScrimIsDraw;
  212. new CsTeams:g_ScrimTeams[3];
  213. new g_ScrimTeamNums[CsTeams];
  214. new g_ScrimScores[CsTeams];
  215.  
  216. new g_PointsKnife;
  217. new g_PointsHeadshot;
  218. new g_PointsGrenade;
  219. new g_PointsKill;
  220. new g_PointsSuicide;
  221. new g_PointsTeamKill;
  222. new g_PointsRoundWin;
  223. new g_PointsRoundLose;
  224.  
  225. new bool:g_bRestartRound;
  226.  
  227. new bool:g_bConnected[33];
  228. new bool:g_bAlive[33];
  229. new bool:g_bFirstSpawn[33];
  230. new CsTeams:g_Team[33];
  231.  
  232. new bool:g_bSolid[33];
  233. new bool:g_bRestoreSolid[33];
  234.  
  235. new bool:g_bWeaponsGiven;
  236.  
  237. new g_sHelpMotd[43];
  238. new g_sScrimMotd[49];
  239.  
  240. new Float:g_fKillMsgDelay[33];
  241.  
  242. new g_RoundsLost;
  243. new g_RoundsEnded;
  244.  
  245. new bool:g_bDisableSlash = true;
  246.  
  247. new g_HideTimer;
  248.  
  249. new g_OldMoney;
  250.  
  251. new g_sLights[16];
  252.  
  253. new bool:g_bNonSpawnEvent[33];
  254. new g_FwdClientCommand_post;
  255.  
  256. new bool:g_bRemovedBreakables;
  257. new bool:g_bRemovedDoors;
  258. new bool:g_bRemovedDoorsRotating;
  259.  
  260. new Float:g_fBoostPunishDelay[33];
  261. new Float:g_fBoostMessageDelay[33];
  262.  
  263. new g_BoostHud;
  264.  
  265. new hns_footsteps;
  266. new hns_money;
  267. new hns_nubslash;
  268. new hns_disablebuy;
  269. new hns_hiders_knife;
  270. new hns_grenades[CsTeams];
  271. new hns_grenades_percent[CsTeams];
  272. new hns_flashbangs[CsTeams];
  273. new hns_flashbangs_percent[CsTeams];
  274. new hns_smokegren[CsTeams];
  275. new hns_smokegren_percent[CsTeams];
  276. new hns_armor[CsTeams];
  277. new hns_hidetime;
  278. new hns_timersounds;
  279. new hns_noslowdown;
  280. new hns_teamchange;
  281. new hns_disablekill;
  282. new hns_blindcolors;
  283. new hns_hudcolors;
  284. new hns_hiders_alivefrags;
  285. new hns_lights;
  286. new hns_visiblecommands;
  287. new hns_chooseteam;
  288. new hns_semiclip;
  289. new hns_semiclip_alpha;
  290. new hns_gametype;
  291. new hns_prefix;
  292. new hns_removebreakables;
  293. new hns_noflash;
  294. new hns_removedoors;
  295. new hns_noboosting;
  296. new hns_noboosting_damage;
  297. new hns_noboosting_punish;
  298. new hns_noboosting_interval;
  299. new hns_warmup_godmode;
  300. new hns_warmup_respawn;
  301.  
  302. new hnss_prefix;
  303. new hnss_vote_timer;
  304. new hnss_rounds_wins;
  305. new hnss_rounds_losses;
  306. new hnss_rounds_savewins;
  307. new hnss_points_knife;
  308. new hnss_points_headshot;
  309. new hnss_points_grenade;
  310. new hnss_points_kill;
  311. new hnss_points_suicide;
  312. new hnss_points_teamkill;
  313. new hnss_points_roundwin;
  314. new hnss_points_roundlose;
  315. new hnss_points_rounds;
  316.  
  317. new amx_vote_answers;
  318. new sv_restart;
  319.  
  320. new g_msgSayText;
  321. new g_msgHideWeapon;
  322. new g_msgScreenFade;
  323. new g_msgTeamInfo;
  324. new g_msgMoney;
  325. new g_msgArmorType;
  326.  
  327. new g_MaxPlayers;
  328. new g_MaxEntities;
  329.  
  330. new g_HostageEnt;
  331.  
  332. public plugin_precache()
  333. {
  334.     register_forward(FM_Spawn, "fwdSpawn", 0);
  335.    
  336.     new allocHostageEntity = engfunc(EngFunc_AllocString, "hostage_entity");
  337.     do
  338.     {
  339.         g_HostageEnt = engfunc(EngFunc_CreateNamedEntity, allocHostageEntity);
  340.     }
  341.     while( !pev_valid(g_HostageEnt) );
  342.    
  343.     engfunc(EngFunc_SetOrigin, g_HostageEnt, Float:{0.0, 0.0, -55000.0});
  344.     engfunc(EngFunc_SetSize, g_HostageEnt, Float:{-1.0, -1.0, -1.0}, Float:{1.0, 1.0, 1.0});
  345.     dllfunc(DLLFunc_Spawn, g_HostageEnt);
  346.    
  347.     return PLUGIN_CONTINUE;
  348. }
  349.  
  350. public plugin_init()
  351. {
  352.     register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
  353.    
  354.     register_cvar(PLUGIN_NAME, PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY, 0.0);
  355.    
  356.     new sBuyHandle[] = "cmdBuy";
  357.     register_clcmd("buy", sBuyHandle, -1, g_sBlank);
  358.     register_clcmd("buyammo1", sBuyHandle, -1, g_sBlank);
  359.     register_clcmd("buyammo2", sBuyHandle, -1, g_sBlank);
  360.     register_clcmd("buyequip", sBuyHandle, -1, g_sBlank);
  361.     register_clcmd("cl_autobuy", sBuyHandle, -1, g_sBlank);
  362.     register_clcmd("cl_rebuy", sBuyHandle, -1, g_sBlank);
  363.     register_clcmd("cl_setautobuy", sBuyHandle, -1, g_sBlank);
  364.     register_clcmd("cl_setrebuy", sBuyHandle, -1, g_sBlank);
  365.    
  366.     register_concmd("hns_status", "cmdHnsStatus", ADMIN_KICK, "<0|1> -- 0=HNS OFF   1=HNS ON");
  367.     register_concmd("hns_scrim", "cmdScrim", ADMIN_KICK, "<0|1> -- 0=STOP SCRIM   1=START SCRIM");
  368.     register_concmd("hns_scrimtype", "cmdScrimType", ADMIN_KICK, "<0|1|2> -- 0=VOTE TYPE   1=WIN ROUNDS   2=POINT SYSTEM");
  369.     register_concmd("hns_captains", "cmdCaptains", ADMIN_KICK, "-- chooses two (2) random players to be captains for a pug");
  370.     register_concmd("hns_warmup", "cmdWarmup", ADMIN_KICK, "<0|1> -- 0=STOP WARMUP   1=START WARMUP");
  371.    
  372.     new sPointsHandle[] = "cmdPoints";
  373.     register_say_command("hnshelp", "cmdHelp", -1, g_sBlank);
  374.     register_say_command("scrimhelp", "cmdScrimHelp", -1, g_sBlank);
  375.     register_say_command("points", sPointsHandle, -1, g_sBlank);
  376.     register_say_command("scores", sPointsHandle, -1, g_sBlank);
  377.     register_say_command("wins", sPointsHandle, -1, g_sBlank);
  378.     register_say_command("rounds", "cmdRounds", -1, g_sBlank);
  379.     register_say_command("team", "cmdTeam", -1, g_sBlank);
  380.    
  381.     register_forward(FM_Touch, "fwdTouch", 0);
  382.     register_forward(FM_CmdStart, "fwdCmdStart", 0);
  383.     register_forward(FM_SetModel, "fwdSetModel", 0);
  384.     register_forward(FM_ClientKill, "fwdClientKill", 0);
  385.     register_forward(FM_PlayerPreThink, "fwdPlayerPreThink", 0);
  386.     register_forward(FM_PlayerPostThink, "fwdPlayerPostThink", 0);
  387.     register_forward(FM_AddToFullPack, "fwdAddToFullPackPost", 1);
  388.     //register_forward(FM_GetGameDescription, "fwdGetGameDescription", 0);
  389.     register_forward(FM_Voice_SetClientListening, "fwdSetVoice", 0);
  390.    
  391.     register_event("TextMsg", "eventRestartAttempt", g_sA, "2&#Game_w");
  392.     register_clcmd("fullupdate", "cmdFullupdate", -1, g_sBlank);
  393.    
  394.     hns_footsteps = register_cvar("hns_footsteps", "1", 0, 0.0);
  395.     hns_money = register_cvar("hns_money", "0", 0, 0.0);
  396.     hns_nubslash = register_cvar("hns_nubslash", "3", 0, 0.0);
  397.     hns_disablebuy = register_cvar("hns_disablebuy", "1", 0, 0.0);
  398.     hns_hiders_knife = register_cvar("hns_hiders_knife", "1", 0, 0.0);
  399.     hns_grenades[HNS_TEAM_HIDER] = register_cvar("hns_hiders_grenades", "1", 0, 0.0);
  400.     hns_grenades_percent[HNS_TEAM_HIDER] = register_cvar("hns_hiders_grenades_percent", "100", 0, 0.0);
  401.     hns_flashbangs[HNS_TEAM_HIDER] = register_cvar("hns_hiders_flashbangs", "2", 0, 0.0);
  402.     hns_flashbangs_percent[HNS_TEAM_HIDER] = register_cvar("hns_hiders_flashbangs_percent", "100", 0, 0.0);
  403.     hns_smokegren[HNS_TEAM_HIDER] = register_cvar("hns_hiders_smokegren", "1", 0, 0.0);
  404.     hns_smokegren_percent[HNS_TEAM_HIDER] = register_cvar("hns_hiders_smokegren_percent", "100", 0, 0.0);
  405.     hns_armor[HNS_TEAM_HIDER] = register_cvar("hns_hiders_armor", "100", 0, 0.0);
  406.     hns_grenades[HNS_TEAM_SEEKER] = register_cvar("hns_seekers_grenades", "0", 0, 0.0);
  407.     hns_grenades_percent[HNS_TEAM_SEEKER] = register_cvar("hns_seekers_grenades_percent", "0", 0, 0.0);
  408.     hns_flashbangs[HNS_TEAM_SEEKER] = register_cvar("hns_seekers_flashbangs", "0", 0, 0.0);
  409.     hns_flashbangs_percent[HNS_TEAM_SEEKER] = register_cvar("hns_seekers_flashbangs_percent", "0", 0, 0.0);
  410.     hns_smokegren[HNS_TEAM_SEEKER] = register_cvar("hns_seekers_smokegren", "0", 0, 0.0);
  411.     hns_smokegren_percent[HNS_TEAM_SEEKER] = register_cvar("hns_seekers_smokegren_percent", "0", 0, 0.0);
  412.     hns_armor[HNS_TEAM_SEEKER] = register_cvar("hns_seekers_armor", "100", 0, 0.0);
  413.     hns_hidetime = register_cvar("hns_hidetime", "10", 0, 0.0);
  414.     hns_timersounds = register_cvar("hns_timersounds", "1", 0, 0.0);
  415.     hns_noslowdown = register_cvar("hns_noslowdown", "0", 0, 0.0);
  416.     hns_teamchange = register_cvar("hns_teamchange", "0", 0, 0.0);
  417.     hns_disablekill = register_cvar("hns_disablekill", "1", 0, 0.0);
  418.     hns_blindcolors = register_cvar("hns_blindcolors", "0 0 0 255", 0, 0.0);
  419.     hns_hudcolors = register_cvar("hns_hudcolors", "0 255 0", 0, 0.0);
  420.     hns_hiders_alivefrags = register_cvar("hns_hiders_alivefrags", "1", 0, 0.0);
  421.     hns_lights = register_cvar("hns_lights", g_sLightsNormal, 0, 0.0);
  422.     hns_visiblecommands = register_cvar("hns_visiblecommands", "0", 0, 0.0);
  423.     hns_chooseteam = register_cvar("hns_chooseteam", "0", 0, 0.0);
  424.     hns_semiclip = register_cvar("hns_semiclip", "1", 0, 0.0);
  425.     hns_semiclip_alpha = register_cvar("hns_semiclip_alpha", "127", 0, 0.0);
  426.     hns_prefix = register_cvar("hns_prefix", "[HNS]", 0, 0.0);
  427.     hns_removebreakables = register_cvar("hns_removebreakables", "1", 0, 0.0);
  428.     hns_noflash = register_cvar("hns_noflash", "1", 0, 0.0);
  429.     hns_removedoors = register_cvar("hns_removedoors", "1", 0, 0.0);
  430.     hns_noboosting = register_cvar("hns_noboosting", "1", 0, 0.0);
  431.     hns_noboosting_damage = register_cvar("hns_noboosting_damage", "25", 0, 0.0);
  432.     hns_noboosting_punish = register_cvar("hns_noboosting_punish", "3", 0, 0.0);
  433.     hns_noboosting_interval = register_cvar("hns_noboosting_interval", "1.0", 0, 0.0);
  434.     hns_warmup_godmode = register_cvar("hns_warmup_godmode", "1", 0, 0.0);
  435.     hns_warmup_respawn = register_cvar("hns_warmup_respawn", "1", 0, 0.0);
  436.    
  437.     new sHideNSeek[32];
  438.     formatex(sHideNSeek, 31, "HideNSeek v%s", PLUGIN_VERSION);
  439.     hns_gametype = register_cvar("hns_gametype", sHideNSeek, 0, 0.0);
  440.    
  441.     hnss_prefix = register_cvar("hnss_prefix", "[HNS-SCRIM]", 0, 0.0);
  442.     hnss_vote_timer = register_cvar("hnss_vote_timer", "30", 0, 0.0);
  443.     hnss_rounds_wins = register_cvar("hnss_rounds_wins", "3", 0, 0.0);
  444.     hnss_rounds_losses = register_cvar("hnss_rounds_losses", "5", 0, 0.0);
  445.     hnss_rounds_savewins = register_cvar("hnss_rounds_savewins", "0", 0, 0.0);
  446.     hnss_points_knife = register_cvar("hnss_points_knife", "1", 0, 0.0);
  447.     hnss_points_headshot = register_cvar("hnss_points_headshot", "1", 0, 0.0);
  448.     hnss_points_grenade = register_cvar("hnss_points_grenade", "2", 0, 0.0);
  449.     hnss_points_kill = register_cvar("hnss_points_kill", "1", 0, 0.0);
  450.     hnss_points_suicide = register_cvar("hnss_points_suicide", "1", 0, 0.0);
  451.     hnss_points_teamkill = register_cvar("hnss_points_teamkill", "2", 0, 0.0);
  452.     hnss_points_roundwin = register_cvar("hnss_points_roundwin", "1", 0, 0.0);
  453.     hnss_points_roundlose = register_cvar("hnss_points_roundlose", "1", 0, 0.0);
  454.     hnss_points_rounds = register_cvar("hnss_points_rounds", "10", 0, 0.0);
  455.    
  456.     g_BoostHud = CreateHudSyncObj();
  457.    
  458.     amx_vote_answers = get_cvar_pointer("amx_vote_answers");
  459.     sv_restart = get_cvar_pointer("sv_restart");
  460.    
  461.     g_msgSayText = get_user_msgid("SayText");
  462.     g_msgHideWeapon = get_user_msgid("HideWeapon");
  463.     g_msgScreenFade = get_user_msgid("ScreenFade");
  464.     g_msgTeamInfo = get_user_msgid("TeamInfo");
  465.     g_msgMoney = get_user_msgid("Money");
  466.     g_msgArmorType = get_user_msgid("ArmorType");
  467.    
  468.     register_message(g_msgHideWeapon, "messageHideWeapon");
  469.     register_message(g_msgScreenFade, "messageScreenFade");
  470.    
  471.     register_event("ResetHUD", "eventResetHUD", g_sB);
  472.     register_event("Money", "eventMoney", g_sB);
  473.     register_event("HLTV", "eventNewRound", g_sA, "1=0", "2=0");
  474.     register_event("SendAudio", "eventTerrWin", g_sA, "2=%!MRAD_terwin");
  475.     register_event("TextMsg", "eventRestartRound", g_sA, "2&#Game_C", "2&#Game_w");
  476.     register_event("CurWeapon", "eventCurWeapon", g_sB, "1=1");
  477.     register_event("DeathMsg", "eventDeathMsg", g_sA, "2!0");
  478.    
  479.     register_logevent("logeventRoundStart", 2, "1=Round_Start");
  480.     register_logevent("logeventRoundEnd", 2, "1=Round_End");
  481.    
  482.     g_MaxPlayers = global_get(glb_maxClients);
  483.     g_MaxEntities = global_get(glb_maxEntities);
  484.    
  485.     copy(g_sLights, 15, g_sLightsNormal);
  486.     set_task(1.0, "taskSetLights", TASK_ID_SETLIGHTS, g_sBlank, 0, g_sB, 0);
  487.    
  488.     new dir[23];
  489.     get_configsdir(dir, 22);
  490.    
  491.     formatex(g_sHelpMotd, 42, "%s/hidenseek_help.txt", dir);
  492.     formatex(g_sScrimMotd, 48, "%s/hidenseek_scrim_help.txt", dir);
  493.    
  494.     set_task(1.0, "taskExecuteConfig");
  495.    
  496.     return PLUGIN_CONTINUE;
  497. }
  498.  
  499. public plugin_natives()
  500. {
  501.     register_library("hidenseek");
  502.     register_native("hns_get_status", "_GetHnsStatus");
  503.     register_native("hnss_get_status", "_GetScrimStatus");
  504.    
  505.     return PLUGIN_CONTINUE;
  506. }
  507.  
  508. public bool:_GetHnsStatus(plugin, params)
  509. {
  510.     return g_bHnsOn;
  511. }
  512.  
  513. public bool:_GetScrimStatus(plugin, params)
  514. {
  515.     return g_bScrimOn;
  516. }
  517.  
  518. public client_putinserver(plr)
  519. {
  520.     g_bConnected[plr] = true;
  521.     g_bAlive[plr] = false;
  522.     g_bFirstSpawn[plr] = false;
  523.    
  524.     return PLUGIN_CONTINUE;
  525. }
  526.  
  527. public client_disconnect(plr)
  528. {
  529.     g_bConnected[plr] = false;
  530.    
  531.     for( new i = 0; i < MAX_PLAYER_TASKS; i++ )
  532.     {
  533.         remove_task(plr + g_PlayerTasks[i], 0);
  534.     }
  535.    
  536.     if( g_ScrimVoteTimer > 0 && !g_bScrimVoted[plr] )
  537.     {
  538.         g_bScrimVoted[plr] = true;
  539.    
  540.         if( check_last_vote(plr) )
  541.         {
  542.             g_ScrimVoteTimer = 1;
  543.         }
  544.     }
  545.    
  546.     return PLUGIN_CONTINUE;
  547. }
  548.  
  549. public client_command(plr)
  550. {
  551.     if( !g_bHnsOn )
  552.     {
  553.         return PLUGIN_CONTINUE;
  554.     }
  555.    
  556.     new sArg[13];
  557.     if( read_argv(0, sArg, 12) > 11 )
  558.     {
  559.         return PLUGIN_CONTINUE;
  560.     }
  561.    
  562.     if( equali(sArg, "chooseteam") && (CS_TEAM_UNASSIGNED < cs_get_user_team(plr) < CS_TEAM_SPECTATOR) )
  563.     {
  564.         new CsTeams:team = cs_get_user_team(plr);
  565.         new chooseteam = get_pcvar_num(hns_chooseteam);
  566.        
  567.         if( team != HNS_TEAM_HIDER && team != HNS_TEAM_SEEKER
  568.         || chooseteam == 1
  569.         || chooseteam == 2 && is_user_admin(plr) )
  570.         {
  571.             return PLUGIN_CONTINUE;
  572.         }
  573.        
  574.         return PLUGIN_HANDLED;
  575.     }
  576.    
  577.     if( !get_pcvar_num(hns_disablebuy) )
  578.     {
  579.         return PLUGIN_CONTINUE;
  580.     }
  581.    
  582.     for( new i = 0; i < MAX_BUY_COMMANDS; i++ )
  583.     {
  584.         if( equali(g_sBuyCommands[i], sArg, 0) )
  585.         {
  586.             return PLUGIN_HANDLED;
  587.         }
  588.     }
  589.    
  590.     return PLUGIN_CONTINUE;
  591. }
  592.  
  593. public cmdBuy(plr)
  594. {
  595.     return (g_bHnsOn && get_pcvar_num(hns_disablebuy)) ? PLUGIN_HANDLED : PLUGIN_CONTINUE;
  596. }
  597.  
  598. public cmdFullupdate(plr)
  599. {
  600.     g_bNonSpawnEvent[plr] = true;
  601.    
  602.     g_FwdClientCommand_post = register_forward(FM_ClientCommand, "fwdClientCommandPost", 1);
  603.    
  604.     return PLUGIN_CONTINUE;
  605. }
  606.  
  607. public cmdHnsStatus(plr, level, cid)
  608. {
  609.     if( !cmd_access(plr, level, cid, 2) )
  610.     {
  611.         return PLUGIN_HANDLED;
  612.     }
  613.    
  614.     new sArg[16];
  615.     read_argv(1, sArg, 15);
  616.    
  617.     new bool:bOn = bool:clamp(str_to_num(sArg), 0, 1);
  618.    
  619.     if( bOn == g_bHnsOn )
  620.     {
  621.         new sPrefix[16];
  622.         get_pcvar_string(hns_prefix, sPrefix, 15);
  623.        
  624.         console_print(plr, "%s HideNSeek is already o%s!", sPrefix, g_bHnsOn ? "n" : "ff");
  625.         return PLUGIN_HANDLED;
  626.     }
  627.    
  628.     g_bHnsOn = bOn;
  629.     set_pcvar_num(sv_restart, 1);
  630.    
  631.     new sName[64]; /* server hostnames can be longer than player names */
  632.     get_user_name(plr, sName, 63);
  633.    
  634.     hns_print(0, "^x03%s :^x01  st%sed HideNSeek!", sName, bOn ? "art" : "opp");
  635.    
  636.     return PLUGIN_HANDLED;
  637. }
  638.  
  639. public cmdScrim(plr, level, cid)
  640. {
  641.     if( !cmd_access(plr, level, cid, 2) )
  642.     {
  643.         return PLUGIN_HANDLED;
  644.     }
  645.    
  646.     new sArg[2];
  647.     read_argv(1, sArg, 1);
  648.     new bool:bScrim = bool:clamp(str_to_num(sArg), 0, 1);
  649.    
  650.     if( bScrim == g_bScrimOn )
  651.     {
  652.         console_print(plr, "[HNS] Scrim mod is already %s!", g_bScrimOn ? "on" : "off");
  653.         return PLUGIN_HANDLED;
  654.     }
  655.    
  656.     if( bScrim && !g_bHnsOn )
  657.     {
  658.         console_print(plr, "[HNS] HideNSeek must be on to start a scrim!");
  659.         return PLUGIN_HANDLED;
  660.     }
  661.    
  662.     new sName[64]; /* server hostnames can be long */
  663.     get_user_name(plr, sName, 63);
  664.     scrim_print(0, "^x03%s^x01 :  %s the HideNSeek scrim!", sName, bScrim ? "started" : "stopped");
  665.    
  666.     if( bScrim )
  667.     {
  668.         if( g_ScrimType == SCRIM_NONE )
  669.         {
  670.             show_scrim_vote();
  671.         }
  672.         else
  673.         {
  674.             if( g_ScrimType == SCRIM_POINTS )
  675.             {
  676.                 /* in case of an odd number, we need to round it up one */
  677.                 g_ScrimMaxRounds = floatround(get_pcvar_float(hnss_points_rounds) / 2.0, floatround_ceil) * 2;
  678.                
  679.                 g_PointsKnife = get_pcvar_num(hnss_points_knife);
  680.                 g_PointsHeadshot = get_pcvar_num(hnss_points_headshot);
  681.                 g_PointsGrenade = get_pcvar_num(hnss_points_grenade);
  682.                 g_PointsKill = get_pcvar_num(hnss_points_kill);
  683.                 g_PointsSuicide = get_pcvar_num(hnss_points_suicide);
  684.                 g_PointsTeamKill = get_pcvar_num(hnss_points_teamkill);
  685.                 g_PointsRoundWin = get_pcvar_num(hnss_points_roundwin);
  686.                 g_PointsRoundLose = get_pcvar_num(hnss_points_roundlose);
  687.             }
  688.             else if( g_ScrimType == SCRIM_ROUNDS )
  689.             {
  690.                 g_ScrimMaxRounds = get_pcvar_num(hnss_rounds_wins);
  691.                 g_ScrimMaxLosses = get_pcvar_num(hnss_rounds_losses);
  692.                 g_ScrimSaveWins = get_pcvar_num(hnss_rounds_savewins);
  693.             }
  694.            
  695.             g_ScrimWinner = CS_TEAM_UNASSIGNED;
  696.             g_ScrimRounds[HNS_TEAM_HIDER] = 0;
  697.             g_ScrimRounds[HNS_TEAM_SEEKER] = 0;
  698.             g_bScrimIsDraw = false;
  699.             g_ScrimTeams[1] = HNS_TEAM_HIDER;
  700.             g_ScrimTeams[2] = HNS_TEAM_SEEKER;
  701.             g_ScrimTeamNums[HNS_TEAM_HIDER] = 1;
  702.             g_ScrimTeamNums[HNS_TEAM_SEEKER] = 2;
  703.             g_ScrimScores[HNS_TEAM_HIDER] = 0;
  704.             g_ScrimScores[HNS_TEAM_SEEKER] = 0;
  705.            
  706.             g_bScrimOn = true;
  707.             set_pcvar_num(sv_restart, 1);
  708.         }
  709.     }
  710.     else
  711.     {
  712.         g_bScrimOn = false;
  713.         g_ScrimType = SCRIM_NONE;
  714.         set_pcvar_num(sv_restart, 1);
  715.     }
  716.    
  717.     return PLUGIN_HANDLED;
  718. }
  719.  
  720. public cmdScrimType(plr, level, cid)
  721. {
  722.     if( !cmd_access(plr, level, cid, 2) )
  723.     {
  724.         return PLUGIN_HANDLED;
  725.     }
  726.    
  727.     if( !g_bHnsOn )
  728.     {
  729.         console_print(plr, "[HNS] HideNSeek must be on to set the scrim type!");
  730.         return PLUGIN_HANDLED;
  731.     }
  732.    
  733.     if( g_bScrimOn )
  734.     {
  735.         console_print(plr, "[HNS] You cannot change the scrim type during a scrim!");
  736.         return PLUGIN_HANDLED;
  737.     }
  738.    
  739.     if( task_exists(TASK_ID_SCRIMVOTE, 0) )
  740.     {
  741.         console_print(plr, "[HNS] A vote is already determining the scrim type!");
  742.         return PLUGIN_HANDLED;
  743.     }
  744.    
  745.     new sArg[2];
  746.     read_argv(1, sArg, 1);
  747.     new type = str_to_num(sArg);
  748.    
  749.     if( g_ScrimType == type )
  750.     {
  751.         console_print(plr, "[HNS] This is already the scrim type!");
  752.         return PLUGIN_HANDLED;
  753.     }
  754.    
  755.     new sName[64]; /* server hostnames can be long */
  756.     get_user_name(plr, sName, 63);
  757.     switch( type )
  758.     {
  759.         case SCRIM_ROUNDS: scrim_print(0, "^x03%s^x01 :  set the scrim type to Win %i Rounds!", sName, get_pcvar_num(hnss_rounds_wins));
  760.         case SCRIM_POINTS: scrim_print(0, "^x03%s^x01 :  set the scrim type to Point System!", sName);
  761.         default:
  762.         {
  763.             type = SCRIM_NONE;
  764.             scrim_print(0, "^x03%s^x01 :  set the scrim type to none!", sName);
  765.         }
  766.     }
  767.    
  768.     g_ScrimType = type;
  769.    
  770.     return PLUGIN_HANDLED;
  771. }
  772.  
  773. public cmdCaptains(plr, level, cid)
  774. {
  775.     if( !cmd_access(plr, level, cid, 1) )
  776.     {
  777.         return PLUGIN_HANDLED;
  778.     }
  779.    
  780.     new players[32], pnum;
  781.     for( new i = 1; i <= g_MaxPlayers; i++ )
  782.     {
  783.         if( g_bConnected[i] )
  784.         {
  785.             players[pnum++] = i;
  786.         }
  787.     }
  788.    
  789.     new rand = random(pnum);
  790.     new captain1 = players[rand];
  791.    
  792.     for( new i = rand; i < pnum; i++ )
  793.     {
  794.         if( (i + 1) == pnum )
  795.         {
  796.             continue;
  797.         }
  798.        
  799.         players[i] = players[i + 1];
  800.     }
  801.    
  802.     new captain2 = (pnum > 0) ? players[random(--pnum)] : 0;
  803.    
  804.     new sName1[32], sName2[32];
  805.     get_user_name(captain1, sName1, 31);
  806.     if( captain2 )  get_user_name(captain2, sName2, 31);
  807.     else        copy(sName2, 31, "Player Not Available");
  808.    
  809.     scrim_print(0, "Captains will be:^x03 %s^x01 and^x03 %s", sName1, sName2);
  810.    
  811.     return PLUGIN_HANDLED;
  812. }
  813.  
  814. public cmdWarmup(plr, level, cid)
  815. {
  816.     if( !cmd_access(plr, level, cid, 2) )
  817.     {
  818.         return PLUGIN_HANDLED;
  819.     }
  820.    
  821.     new sArg[2];
  822.     read_argv(1, sArg, 1);
  823.     new bool:bWarmup = bool:clamp(str_to_num(sArg), 0, 1);
  824.    
  825.     if( bWarmup == g_bWarmup )
  826.     {
  827.         console_print(plr, "[HNS] Warmup is already %s!", g_bWarmup ? "on" : "off");
  828.         return PLUGIN_HANDLED;
  829.     }
  830.    
  831.     if( bWarmup && !g_bHnsOn )
  832.     {
  833.         console_print(plr, "[HNS] HideNSeek must be on to start warmup!");
  834.         return PLUGIN_HANDLED;
  835.     }
  836.    
  837.     new sName[64]; /* server hostnames can be long */
  838.     get_user_name(plr, sName, 63);
  839.     hns_print(0, "^x03%s^x01 :  %s the HideNSeek warmup!", sName, bWarmup ? "started" : "stopped");
  840.    
  841.     set_pcvar_num(sv_restart, 1);
  842.    
  843.     return PLUGIN_HANDLED;
  844. }
  845.  
  846. public cmdHelp(plr)
  847. {
  848.     if( file_exists(g_sHelpMotd) )
  849.     {
  850.         new sText[2500];
  851.        
  852.         new f = fopen(g_sHelpMotd, "rt"), sData[512];
  853.         while( !feof(f) )
  854.         {
  855.             fgets(f, sData, 511);
  856.             add(sText, 2499, sData, 0);
  857.         }
  858.         fclose(f);
  859.        
  860.         new sTeamChange[64];
  861.         copy(sTeamChange, 63, "The teams will switch ");
  862.         new info = get_pcvar_num(hns_teamchange);
  863.         if( info > 0 )
  864.         {
  865.             format(sTeamChange, 63, "%safter %i rounds have ended", sTeamChange, info);
  866.         }
  867.         else
  868.         {
  869.             add(sTeamChange, 63, "when Seekers win the round");
  870.         }
  871.        
  872.         new sHiderEquipment[512];
  873.         if( get_pcvar_num(hns_hiders_knife) == 2 )
  874.         {
  875.             copy(sHiderEquipment, 511, "Broken knife<br>");
  876.         }
  877.         info = get_pcvar_num(hns_grenades[HNS_TEAM_HIDER]);
  878.         new percent = get_pcvar_num(hns_grenades_percent[HNS_TEAM_HIDER]);
  879.         if( info > 0 && percent > 0 )
  880.         {
  881.             format(sHiderEquipment, 511, "%s%i HE Grenade%s", sHiderEquipment, info, info == 1 ? g_sBlank : g_sS);
  882.             if( percent < 100 )
  883.             {
  884.                 format(sHiderEquipment, 511, "%s (%i%% chance per grenade)<br>", sHiderEquipment, percent);
  885.             }
  886.             else
  887.             {
  888.                 add(sHiderEquipment, 511, "<br>", 0);
  889.             }
  890.         }
  891.         info = get_pcvar_num(hns_flashbangs[HNS_TEAM_HIDER]);
  892.         percent = get_pcvar_num(hns_flashbangs_percent[HNS_TEAM_HIDER]);
  893.         if( info > 0 && percent > 0 )
  894.         {
  895.             format(sHiderEquipment, 511, "%s%i Flashbang%s", sHiderEquipment, info, info == 1 ? g_sBlank : g_sS);
  896.             if( percent < 100 )
  897.             {
  898.                 format(sHiderEquipment, 511, "%s (%i%% chance per flashbang)<br>", sHiderEquipment, percent);
  899.             }
  900.             else
  901.             {
  902.                 add(sHiderEquipment, 511, "<br>", 0);
  903.             }
  904.         }
  905.         info = get_pcvar_num(hns_smokegren[HNS_TEAM_HIDER]);
  906.         percent = get_pcvar_num(hns_smokegren_percent[HNS_TEAM_HIDER]);
  907.         if( info > 0 && percent > 0 )
  908.         {
  909.             format(sHiderEquipment, 511, "%s%i Smoke Grenade%s", sHiderEquipment, info, info == 1 ? g_sBlank : g_sS);
  910.             if( percent < 100 )
  911.             {
  912.                 format(sHiderEquipment, 511, "%s (%i%% chance per smoke grenade)<br>", sHiderEquipment, percent);
  913.             }
  914.             else
  915.             {
  916.                 add(sHiderEquipment, 511, "<br>", 0);
  917.             }
  918.         }
  919.         info = get_pcvar_num(hns_armor[HNS_TEAM_HIDER]);
  920.         format(sHiderEquipment, 511, "%sArmor: %i", sHiderEquipment, info);
  921.        
  922.         new sSeekerEquipment[512];
  923.         copy(sSeekerEquipment, 511, "A Knife");
  924.         info = get_pcvar_num(hns_grenades[HNS_TEAM_SEEKER]);
  925.         percent = get_pcvar_num(hns_grenades_percent[HNS_TEAM_SEEKER]);
  926.         if( info > 0 && percent > 0 )
  927.         {
  928.             format(sSeekerEquipment, 511, "%s<br>%i HE Grenade%s", sSeekerEquipment, info, info == 1 ? g_sBlank : g_sS);
  929.             if( percent < 100 )
  930.             {
  931.                 format(sSeekerEquipment, 511, "%s (%i%% chance per grenade)", sSeekerEquipment, percent);
  932.             }
  933.         }
  934.         info = get_pcvar_num(hns_flashbangs[HNS_TEAM_SEEKER]);
  935.         percent = get_pcvar_num(hns_flashbangs_percent[HNS_TEAM_SEEKER]);
  936.         if( info > 0 && percent > 0 )
  937.         {
  938.             format(sSeekerEquipment, 511, "%s<br>%i Flashbang%s", sSeekerEquipment, info, info == 1 ? g_sBlank : g_sS);
  939.             if( percent < 100 )
  940.             {
  941.                 format(sSeekerEquipment, 511, "%s (%i%% chance per flashbang)", sSeekerEquipment, percent);
  942.             }
  943.         }
  944.         info = get_pcvar_num(hns_smokegren[HNS_TEAM_SEEKER]);
  945.         percent = get_pcvar_num(hns_smokegren_percent[HNS_TEAM_SEEKER]);
  946.         if( info > 0 && percent > 0 )
  947.         {
  948.             format(sSeekerEquipment, 511, "%s<br>%i Smoke Grenade%s", sSeekerEquipment, info, info == 1 ? g_sBlank : g_sS);
  949.             if( percent < 100 )
  950.             {
  951.                 format(sSeekerEquipment, 511, "%s (%i%% chance per smoke grenade)", sSeekerEquipment, percent);
  952.             }
  953.         }
  954.         info = get_pcvar_num(hns_armor[HNS_TEAM_SEEKER]);
  955.         format(sSeekerEquipment, 511, "%s<br>Armor: %i", sSeekerEquipment, info);
  956.        
  957.        
  958.         format(sText, 2499, sText, PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR, PLUGIN_NAME, g_sTeamNames[HNS_TEAM_HIDER], g_sTeamNames[HNS_TEAM_SEEKER], sTeamChange, sHiderEquipment, sSeekerEquipment);
  959.         show_motd(plr, sText, "HideNSeek Help");
  960.     }
  961.     else
  962.     {
  963.         hns_print(plr, "^x03HideNSeek Help^x01 does not exist for this server.");
  964.     }
  965.    
  966.     return get_pcvar_num(hns_visiblecommands) ? PLUGIN_CONTINUE : PLUGIN_HANDLED;
  967. }
  968.  
  969. public cmdScrimHelp(plr)
  970. {
  971.     if( file_exists(g_sScrimMotd) )
  972.     {
  973.         new sText[3000];
  974.        
  975.         new f = fopen(g_sScrimMotd, "rt"), sData[512];
  976.         while( !feof(f) )
  977.         {
  978.             fgets(f, sData, 511);
  979.             add(sText, 2999, sData, 0);
  980.         }
  981.         fclose(f);
  982.        
  983.         new rounds = get_pcvar_num(hnss_rounds_wins);
  984.        
  985.         new sRounds[32];
  986.         formatex(sRounds, 31, "%i round%s", rounds, (rounds != 1) ? "s in a row" : g_sBlank);
  987.        
  988.         new sSave[96];
  989.         if( get_pcvar_num(hnss_rounds_savewins) && rounds > 1 )
  990.         {
  991.             copy(sSave,95, "<br>However, the amount of rounds you won will stay with you if you become hiders again!");
  992.         }
  993.         else
  994.         {
  995.             copy(sSave,95, "<br>The amount of rounds you won will reset and you will start over next time you are a hider!");
  996.         }
  997.        
  998.         new losses = get_pcvar_num(hnss_rounds_losses), sLosses[96];
  999.         if( losses )
  1000.         {
  1001.             formatex(sLosses, 95, "<br>After the teams switch %i time%s, the scrim will end in a draw.", losses, (losses != 1) ? g_sS : g_sBlank);
  1002.         }
  1003.        
  1004.         new sPoints[512], len;
  1005.        
  1006.         new points = get_pcvar_num(hnss_points_knife);
  1007.         if( points )
  1008.         {
  1009.             len += format(sPoints[len], 511-len, "Earn %i point%s for killing with a knife<br>", points, (points != 1) ? g_sS : g_sBlank);
  1010.         }
  1011.        
  1012.         points = get_pcvar_num(hnss_points_headshot);
  1013.         if( points )
  1014.         {
  1015.             len += format(sPoints[len], 511-len, "Earn %i extra point%s for your kill if you get a headshot!<br>", points, (points != 1) ? g_sS : g_sBlank);
  1016.         }
  1017.        
  1018.         points = get_pcvar_num(hnss_points_grenade);
  1019.         if( points )
  1020.         {
  1021.             len += format(sPoints[len], 511-len, "Earn %i point%s for killing with a grenade or frostgrenade!<br>", points, (points != 1) ? g_sS : g_sBlank);
  1022.         }
  1023.        
  1024.         points = get_pcvar_num(hnss_points_kill);
  1025.         if( points )
  1026.         {
  1027.             len += format(sPoints[len], 511-len, "Earn %i point%s for killing with some else that was already described<br>", points, (points != 1) ? g_sS : g_sBlank);
  1028.         }
  1029.        
  1030.         points = get_pcvar_num(hnss_points_suicide);
  1031.         if( points )
  1032.         {
  1033.             len += format(sPoints[len], 511-len, "Lose %i point%s for killing yourself<br>", points, (points != 1) ? g_sS : g_sBlank);
  1034.         }
  1035.        
  1036.         points = get_pcvar_num(hnss_points_teamkill);
  1037.         if( points )
  1038.         {
  1039.             len += format(sPoints[len], 511-len, "Lose %i point%s for killing your teammate!<br>", points, (points != 1) ? g_sS : g_sBlank);
  1040.         }
  1041.        
  1042.         points = get_pcvar_num(hnss_points_roundwin);
  1043.         if( points )
  1044.         {
  1045.             len += format(sPoints[len], 511-len, "Earn %i point%s for winning the round!<br>", points, (points != 1) ? g_sS : g_sBlank);
  1046.         }
  1047.        
  1048.         points = get_pcvar_num(hnss_points_roundlose);
  1049.         if( points )
  1050.         {
  1051.             len += format(sPoints[len], 511-len, "Lose %i point%s for losing the round<br>", points, (points != 1) ? g_sS : g_sBlank);
  1052.         }
  1053.        
  1054.         new ps_rounds = get_pcvar_num(hnss_points_rounds);
  1055.        
  1056.         format(sText, 2999, sText, rounds, (rounds != 1) ? g_sS : g_sBlank, sRounds, sRounds, sSave, sLosses, sPoints, ps_rounds, (ps_rounds != 1) ? g_sS : g_sBlank, ps_rounds, (ps_rounds != 1) ? g_sS : g_sBlank);
  1057.        
  1058.         show_motd(plr, sText, "HideNSeek Scrim Help");
  1059.     }
  1060.     else
  1061.     {
  1062.         scrim_print(plr, "^x03HideNSeek Scrim Help^x01 does not exist for this server.");
  1063.     }
  1064.    
  1065.     return get_pcvar_num(hns_visiblecommands) ? PLUGIN_CONTINUE : PLUGIN_HANDLED;
  1066. }
  1067.  
  1068. public cmdPoints(plr)
  1069. {
  1070.     if( g_bScrimOn )
  1071.     {
  1072.         switch( g_ScrimType )
  1073.         {
  1074.             case SCRIM_POINTS:
  1075.             {
  1076.                 scrim_print(0, "Scrim scores:^x03 Team 1 [%i]^x01 ::^x03 Team 2 [%i]", g_ScrimScores[g_ScrimTeams[1]], g_ScrimScores[g_ScrimTeams[2]]);
  1077.             }
  1078.             case SCRIM_ROUNDS:
  1079.             {
  1080.                 scrim_print(0, "Hiders have won^x03 %i / %i^x01 rounds!", g_ScrimRounds[HNS_TEAM_HIDER], g_ScrimMaxRounds);
  1081.             }
  1082.         }
  1083.     }
  1084.     else
  1085.     {
  1086.         scrim_print(plr, "There is no scrim taking place.");
  1087.     }
  1088.    
  1089.     return get_pcvar_num(hns_visiblecommands) ? PLUGIN_CONTINUE : PLUGIN_HANDLED;
  1090. }
  1091.  
  1092. public cmdRounds(plr)
  1093. {
  1094.     if( g_bScrimOn )
  1095.     {
  1096.         switch( g_ScrimType )
  1097.         {
  1098.             case SCRIM_POINTS:
  1099.             {
  1100.                 new half = (g_ScrimMaxRounds / 2), rounds;
  1101.                 if( g_ScrimRounds[HNS_TEAM_HIDER] < half )
  1102.                 {
  1103.                     rounds = half - g_ScrimRounds[HNS_TEAM_HIDER];
  1104.                 }
  1105.                 else
  1106.                 {
  1107.                     rounds = g_ScrimMaxRounds - g_ScrimRounds[HNS_TEAM_HIDER];
  1108.                 }
  1109.                
  1110.                 scrim_print(0, "There %s^x03 %i round%s^x01 left in the^x03 half.", (rounds != 1) ? "are" : "is", rounds, (rounds != 1) ? g_sS : g_sBlank);
  1111.                
  1112.                 rounds = g_ScrimMaxRounds - g_ScrimRounds[HNS_TEAM_HIDER];
  1113.                 scrim_print(0, "There %s^x03 %i round%s^x01 left in the^x03 scrim.", (rounds != 1) ? "are" : "is", rounds, (rounds != 1) ? g_sS : g_sBlank);
  1114.             }
  1115.             case SCRIM_ROUNDS:
  1116.             {
  1117.                 new rounds = g_ScrimMaxRounds - g_ScrimRounds[HNS_TEAM_HIDER];
  1118.                 scrim_print(0, "Hiders need^x03 %i round%s^x01 to win the scrim!", rounds, (rounds != 1) ? g_sS : g_sBlank);
  1119.             }
  1120.         }
  1121.     }
  1122.     else
  1123.     {
  1124.         scrim_print(plr, "There is no scrim taking place.");
  1125.     }
  1126.    
  1127.     return get_pcvar_num(hns_visiblecommands) ? PLUGIN_CONTINUE : PLUGIN_HANDLED;
  1128. }
  1129.  
  1130. public cmdTeam(plr)
  1131. {
  1132.     if( g_bScrimOn )
  1133.     {
  1134.         switch( g_ScrimType )
  1135.         {
  1136.             case SCRIM_POINTS:
  1137.             {
  1138.                 scrim_print(plr, "You are on^x03 Team %i^x01!", g_ScrimTeamNums[cs_get_user_team(plr)]);
  1139.             }
  1140.             case SCRIM_ROUNDS:
  1141.             {
  1142.                 new CsTeams:team = cs_get_user_team(plr);
  1143.                 if( team == HNS_TEAM_HIDER )
  1144.                 {
  1145.                     scrim_print(plr, "You are on the^x03 Hiding^x01 team!");
  1146.                 }
  1147.                 else if( team == HNS_TEAM_SEEKER )
  1148.                 {
  1149.                     scrim_print(plr, "You are on the^x03 Seeking^x01 team!");
  1150.                 }
  1151.                 else
  1152.                 {
  1153.                     scrim_print(plr, "You are not on a scrim team!");
  1154.                 }
  1155.             }
  1156.         }
  1157.     }
  1158.     else
  1159.     {
  1160.         scrim_print(plr, "There is no scrim taking place.");
  1161.     }
  1162.    
  1163.     return get_pcvar_num(hns_visiblecommands) ? PLUGIN_CONTINUE : PLUGIN_HANDLED;
  1164. }
  1165.  
  1166. public fwdClientCommandPost(plr)
  1167. {
  1168.     unregister_forward(FM_ClientCommand, g_FwdClientCommand_post, 1);
  1169.    
  1170.     g_bNonSpawnEvent[plr] = false;
  1171.    
  1172.     return FMRES_HANDLED;
  1173. }
  1174.  
  1175. public fwdSpawn(ent)
  1176. {
  1177.     if( !pev_valid(ent) || ent == g_HostageEnt )
  1178.     {
  1179.         return FMRES_IGNORED;
  1180.     }
  1181.    
  1182.     new sClass[32];
  1183.     pev(ent, pev_classname, sClass, 31);
  1184.    
  1185.     for( new i = 0; i < MAX_REMOVED_ENTITIES; i++ )
  1186.     {
  1187.         if( equal(sClass, g_sRemoveEntities[i]) )
  1188.         {
  1189.             engfunc(EngFunc_RemoveEntity, ent);
  1190.             return FMRES_SUPERCEDE;
  1191.         }
  1192.     }
  1193.    
  1194.     return FMRES_IGNORED;
  1195. }
  1196.  
  1197. public fwdTouch(booster, plr)
  1198. {
  1199.     if( !g_bHnsOn
  1200.     || !pev_valid(booster) || !pev_valid(plr)
  1201.     || !(0 < booster <= g_MaxPlayers) || !(0 < plr <= g_MaxPlayers)
  1202.     || !g_bAlive[booster] || !g_bAlive[plr] )
  1203.     {
  1204.         return FMRES_IGNORED;
  1205.     }
  1206.    
  1207.     new boosting = get_pcvar_num(hns_noboosting);
  1208.    
  1209.     if( boosting == get_pcvar_num(hns_semiclip)
  1210.     || boosting != 2 && !(boosting == 1 && cs_get_user_team(booster) == cs_get_user_team(plr)) )
  1211.     {
  1212.         return FMRES_IGNORED;
  1213.     }
  1214.    
  1215.     new Float:vBoosterOrigin[3], Float:vPlrOrigin[3];
  1216.     pev(booster, pev_origin, vBoosterOrigin);
  1217.     pev(plr, pev_origin, vPlrOrigin);
  1218.    
  1219.     if( !(49.0 < (vPlrOrigin[2] - vBoosterOrigin[2]) < 73.0) )
  1220.     {
  1221.         return FMRES_IGNORED;
  1222.     }
  1223.    
  1224.     switch( get_pcvar_num(hns_noboosting_punish) )
  1225.     {
  1226.         case 3:
  1227.         {
  1228.             handle_booster(booster);
  1229.             handle_booster(plr);
  1230.         }
  1231.         case 2:
  1232.         {
  1233.             handle_booster(booster);
  1234.         }
  1235.         case 1:
  1236.         {
  1237.             handle_booster(plr);
  1238.         }
  1239.     }
  1240.    
  1241.     return FMRES_IGNORED;
  1242. }
  1243.  
  1244. public fwdCmdStart(plr, ucHandle, seed)
  1245. {
  1246.     if( !g_bHnsOn || !g_bAlive[plr] )
  1247.     {
  1248.         return FMRES_IGNORED;
  1249.     }
  1250.    
  1251.     static clip, ammo;
  1252.     if( get_user_weapon(plr, clip, ammo) != CSW_KNIFE )
  1253.     {
  1254.         return FMRES_IGNORED;
  1255.     }
  1256.    
  1257.     new CsTeams:team = cs_get_user_team(plr);
  1258.    
  1259.     if( team == HNS_TEAM_HIDER )
  1260.     {
  1261.         new button = get_uc(ucHandle, UC_Buttons);
  1262.        
  1263.         if( button&IN_ATTACK )
  1264.         {
  1265.             button &= ~IN_ATTACK;
  1266.         }
  1267.         if( button&IN_ATTACK2 )
  1268.         {
  1269.             button &= ~IN_ATTACK2;
  1270.         }
  1271.        
  1272.         set_uc(ucHandle, UC_Buttons, button);
  1273.        
  1274.         return FMRES_SUPERCEDE;
  1275.     }
  1276.     else if( team == HNS_TEAM_SEEKER )
  1277.     {
  1278.         if( g_bDisableSlash )
  1279.         {
  1280.             new button = get_uc(ucHandle, UC_Buttons);
  1281.            
  1282.             if( button&IN_ATTACK )
  1283.             {
  1284.                 button &= ~IN_ATTACK;
  1285.                 button |= IN_ATTACK2;
  1286.             }
  1287.            
  1288.             set_uc(ucHandle, UC_Buttons, button);
  1289.            
  1290.             return FMRES_SUPERCEDE;
  1291.         }
  1292.     }
  1293.    
  1294.     return FMRES_IGNORED;
  1295. }
  1296.  
  1297. public fwdSetModel(ent, sModel[])
  1298. {
  1299.     if( !g_bHnsOn )
  1300.     {
  1301.         return FMRES_IGNORED;
  1302.     }
  1303.    
  1304.     if( !pev_valid(ent) || !equal(sModel, "models/w_", 9) || equal(sModel, "models/w_weaponbox.mdl", 0) )
  1305.     {
  1306.         return FMRES_IGNORED;
  1307.     }
  1308.    
  1309.     new owner = pev(ent, pev_owner);
  1310.     if( !(0 < owner <= g_MaxPlayers) )
  1311.     {
  1312.         return FMRES_IGNORED;
  1313.     }
  1314.    
  1315.     new sClass[32];
  1316.     pev(ent, pev_classname, sClass, 31);
  1317.    
  1318.     if( equal(sClass, "weapon_shield", 0) )
  1319.     {
  1320.         set_pev(ent, pev_effects, EF_NODRAW);
  1321.         set_task(0.1, "taskRemoveShield", ent);
  1322.        
  1323.         return FMRES_IGNORED;
  1324.     }
  1325.    
  1326.     if( !equal(sClass, "weaponbox", 0) )
  1327.     {
  1328.         return FMRES_IGNORED;
  1329.     }
  1330.    
  1331.     for( new i = g_MaxPlayers + 1; i <= g_MaxEntities; i++ )
  1332.     {
  1333.         if( !pev_valid(i) )
  1334.         {
  1335.             continue;
  1336.         }
  1337.        
  1338.         if( pev(i, pev_owner) == ent )
  1339.         {
  1340.             dllfunc(DLLFunc_Think, ent);
  1341.             break;
  1342.         }
  1343.     }
  1344.    
  1345.     return FMRES_IGNORED;
  1346. }
  1347.  
  1348. public fwdClientKill(plr)
  1349. {
  1350.     if( !g_bHnsOn )
  1351.     {
  1352.         return FMRES_IGNORED;
  1353.     }
  1354.    
  1355.     if( get_pcvar_num(hns_disablekill) )
  1356.     {
  1357.         new Float:fGametime = get_gametime();
  1358.         if( fGametime >= g_fKillMsgDelay[plr] )
  1359.         {
  1360.             g_fKillMsgDelay[plr] = fGametime + 1.0;
  1361.            
  1362.             hns_print(plr, "You cannot kill yourself during HideNSeek!");
  1363.         }
  1364.        
  1365.         return FMRES_SUPERCEDE;
  1366.     }
  1367.    
  1368.     return FMRES_IGNORED;
  1369. }
  1370.  
  1371. public fwdPlayerPreThink(plr)
  1372. {
  1373.     if( !g_bHnsOn )
  1374.     {
  1375.         return FMRES_IGNORED;
  1376.     }
  1377.    
  1378.     new semiclip = get_pcvar_num(hns_semiclip);
  1379.    
  1380.     if( g_bAlive[plr] )
  1381.     {
  1382.         new CsTeams:team = cs_get_user_team(plr);
  1383.         if( g_HideTimer > 0 && team == HNS_TEAM_SEEKER )
  1384.         {
  1385.             set_pev(plr, pev_maxspeed, -1.0);
  1386.             set_pev(plr, pev_velocity, Float:{0.0, 0.0, 0.0});
  1387.             //set_pev(plr, pev_flags, pev(plr, pev_flags) | FL_FROZEN);
  1388.         }
  1389.        
  1390.         new footsteps = get_pcvar_num(hns_footsteps);
  1391.         if( footsteps && (footsteps == 3 || footsteps == _:team) )
  1392.         {
  1393.             set_pev(plr, pev_flTimeStepSound, 999);
  1394.         }
  1395.        
  1396.         if( get_pcvar_num(hns_noslowdown) )
  1397.         {
  1398.             set_pev(plr, pev_fuser2, 0.0);
  1399.         }
  1400.        
  1401.         if( g_bWarmup && get_pcvar_num(hns_warmup_godmode) )
  1402.         {
  1403.             fm_set_user_godmode(plr, 1);
  1404.         }
  1405.        
  1406.         if( semiclip )
  1407.         {
  1408.             // thanks Jon for code
  1409.            
  1410.             new target, body;
  1411.             get_user_aiming(plr, target, body, 9999);
  1412.            
  1413.             if( 0 < target <= g_MaxPlayers && g_bAlive[target] )
  1414.             {
  1415.                 new CsTeams:targetTeam = cs_get_user_team(target);
  1416.                 if( semiclip == 2 || targetTeam == team )
  1417.                 {
  1418.                     new sName[32];
  1419.                     get_user_name(target, sName, 31);
  1420.                    
  1421.                     new sMessage[64];
  1422.                     if( targetTeam == team )
  1423.                     {
  1424.                         formatex(sMessage, 63, "Friend: %s^nHealth: %i", sName, get_user_health(target));
  1425.                     }
  1426.                     else
  1427.                     {
  1428.                         formatex(sMessage, 63, "Enemy: %s", sName);
  1429.                     }
  1430.                    
  1431.                     if( targetTeam == CS_TEAM_CT )
  1432.                     {
  1433.                         set_hudmessage(0, 63, 127, -1.0, -1.0, 0, 0.0, 0.1, 0.0, 0.0, -1);
  1434.                     }
  1435.                     else if( targetTeam == CS_TEAM_T )
  1436.                     {
  1437.                         set_hudmessage(127, 0, 0, -1.0, -1.0, 0, 0.0, 0.1, 0.0, 0.0, -1);
  1438.                     }
  1439.                    
  1440.                     show_hudmessage(plr, "%s", sMessage);
  1441.                 }
  1442.             }
  1443.         }
  1444.     }
  1445.    
  1446.     static LastThink, i;
  1447.    
  1448.     if( plr < LastThink ) // player think loop started again
  1449.     {
  1450.         for( i = 1; i <= g_MaxPlayers; i++ )
  1451.         {
  1452.             if( !g_bConnected[i] || !g_bAlive[i] )
  1453.             {
  1454.                 g_bSolid[i] = false;
  1455.                 continue;
  1456.             }
  1457.            
  1458.             g_Team[i] = cs_get_user_team(i);
  1459.             g_bSolid[i] = bool:(pev(i, pev_solid) == SOLID_SLIDEBOX);
  1460.         }
  1461.     }
  1462.    
  1463.     LastThink = plr;
  1464.    
  1465.     if( !g_bSolid[plr] || !semiclip )
  1466.     {
  1467.         return FMRES_IGNORED;
  1468.     }
  1469.    
  1470.     for( i = 1; i <= g_MaxPlayers; i++ )
  1471.     {
  1472.         if( !g_bSolid[i] || g_bRestoreSolid[i] || i == plr )
  1473.         {
  1474.             continue;
  1475.         }
  1476.        
  1477.         if( semiclip == 2 || g_Team[plr] == g_Team[i] )
  1478.         {
  1479.             set_pev(i, pev_solid, SOLID_NOT);
  1480.             g_bRestoreSolid[i] = true;
  1481.         }
  1482.     }
  1483.    
  1484.     return FMRES_IGNORED;
  1485. }
  1486.  
  1487. public fwdPlayerPostThink(plr)
  1488. {
  1489.     static i;
  1490.    
  1491.     for( i = 1; i <= g_MaxPlayers; i++ )
  1492.     {
  1493.         if( g_bRestoreSolid[i] )
  1494.         {
  1495.             set_pev(i, pev_solid, SOLID_SLIDEBOX);
  1496.             g_bRestoreSolid[i] = false;
  1497.         }
  1498.     }
  1499.    
  1500.     return FMRES_IGNORED;
  1501. }
  1502.  
  1503. public fwdAddToFullPackPost(es, e, ent, host, hostflags, player, pSet)
  1504. {
  1505.     if( !g_bHnsOn )
  1506.     {
  1507.         return FMRES_IGNORED;
  1508.     }
  1509.    
  1510.     if( player )
  1511.     {
  1512.         if( g_bSolid[host] && g_bSolid[ent] )
  1513.         {
  1514.             new semiclip = get_pcvar_num(hns_semiclip);
  1515.             if( semiclip == 2 || g_Team[host] == g_Team[ent] )
  1516.             {
  1517.                 set_es(es, ES_Solid, SOLID_NOT);
  1518.                
  1519.                 static Float:fOldAlpha;
  1520.                
  1521.                 new Float:fAlpha = get_pcvar_float(hns_semiclip_alpha);
  1522.                 if( fAlpha < 255.0 )
  1523.                 {
  1524.                     set_es(es, ES_RenderMode, kRenderTransAlpha);
  1525.                     set_es(es, ES_RenderAmt, fAlpha);
  1526.                 }
  1527.                 else if( fOldAlpha < 255.0 )
  1528.                 {
  1529.                     set_es(es, ES_RenderMode, kRenderNormal);
  1530.                     set_es(es, ES_RenderAmt, 16.0);
  1531.                 }
  1532.                
  1533.                 fOldAlpha = fAlpha;
  1534.             }
  1535.         }
  1536.     }
  1537.    
  1538.     return FMRES_IGNORED;
  1539. }
  1540.  
  1541. public fwdGetGameDescription()
  1542. {
  1543.     if( !g_bHnsOn )
  1544.     {
  1545.         return FMRES_IGNORED;
  1546.     }
  1547.    
  1548.     new sGameType[32];
  1549.     get_pcvar_string(hns_gametype, sGameType, 31);
  1550.    
  1551.     if( !strlen(sGameType) || had_older_version(sGameType) )
  1552.     {
  1553.         formatex(sGameType, 31, "HideNSeek v%s", PLUGIN_VERSION);
  1554.        
  1555.         set_pcvar_string(hns_gametype, sGameType);
  1556.     }
  1557.    
  1558.     forward_return(FMV_STRING, sGameType);
  1559.     return FMRES_SUPERCEDE;
  1560. }
  1561.  
  1562. public fwdPlayerSpawn(plr)
  1563. {
  1564.     g_bAlive[plr] = true;
  1565.    
  1566.     if( !g_bHnsOn )
  1567.     {
  1568.         return PLUGIN_CONTINUE;
  1569.     }
  1570.    
  1571.     new CsTeams:team = cs_get_user_team(plr);
  1572.     if( team != HNS_TEAM_SEEKER && team != HNS_TEAM_HIDER )
  1573.     {
  1574.         return PLUGIN_CONTINUE;
  1575.     }
  1576.    
  1577.     if( !g_bFirstSpawn[plr] )
  1578.     {
  1579.         show_plugin_info(plr);
  1580.        
  1581.         set_task(360.0, "taskShowPluginInfo", TASK_ID_SHOWPLUGININFO + plr, g_sBlank, 0, g_sB, 0);
  1582.        
  1583.         g_bFirstSpawn[plr] = true;
  1584.     }
  1585.    
  1586.     set_task(0.3, "taskStripWeapons", plr + TASK_ID_STRIPWEAPONS, g_sBlank, 0, g_sBlank, 0);
  1587.    
  1588.     new param[2];
  1589.     param[0] = _:team;
  1590.     set_task(0.6, "taskGiveKnife", plr + TASK_ID_GIVEKNIFE, param, 2, g_sBlank, 0);
  1591.     set_task(0.9, "taskCheckModel", plr + TASK_ID_CHECKMODEL, param, 2, g_sBlank, 0);
  1592.    
  1593.     if( g_bWeaponsGiven )
  1594.     {
  1595.         set_task(0.6, "taskGiveWeapons", plr + TASK_ID_GIVEWEAPONS, param, 2, g_sBlank, 0);
  1596.     }
  1597.    
  1598.     if( g_bScrimOn && g_ScrimType == SCRIM_POINTS )
  1599.     {
  1600.         new CsTeams:team1 = g_ScrimTeams[1];
  1601.         new CsTeams:team2 = g_ScrimTeams[2];
  1602.        
  1603.         scrim_print(plr, "You are on^x03 Team %i^x01!", g_ScrimTeamNums[cs_get_user_team(plr)]);
  1604.         scrim_print(plr, "Scrim scores:^x03 Team 1 [%i]^x01 ::^x03 Team 2 [%i]", g_ScrimScores[team1], g_ScrimScores[team2]);
  1605.     }
  1606.    
  1607.     return PLUGIN_CONTINUE;
  1608. }
  1609.  
  1610. public fwdSetVoice(receiver, sender, bool:bListen)
  1611. {
  1612.     if( !g_bConnected[receiver]
  1613.     || !g_bConnected[sender]
  1614.     || receiver == sender
  1615.     || !g_bScrimOn )
  1616.     {
  1617.         return FMRES_IGNORED;
  1618.     }
  1619.    
  1620.     if( cs_get_user_team(receiver) == cs_get_user_team(sender) )
  1621.     {
  1622.         engfunc(EngFunc_SetClientListening, receiver, sender, 1);
  1623.     }
  1624.     else
  1625.     {
  1626.         engfunc(EngFunc_SetClientListening, receiver, sender, 0);
  1627.     }
  1628.    
  1629.     return FMRES_SUPERCEDE;
  1630. }
  1631.  
  1632. public messageHideWeapon(msgid, dest, plr)
  1633. {
  1634.     if( !g_bHnsOn )
  1635.     {
  1636.         return PLUGIN_CONTINUE;
  1637.     }
  1638.    
  1639.     if( get_pcvar_num(hns_money) == 0 )
  1640.     {
  1641.         set_msg_arg_int(1, ARG_BYTE, get_msg_arg_int(1)|HIDE_MONEY);
  1642.     }
  1643.    
  1644.     return PLUGIN_CONTINUE;
  1645. }
  1646.  
  1647. public messageScreenFade(msgid, dest, plr)
  1648. {
  1649.     if( !g_bHnsOn )
  1650.     {
  1651.         return PLUGIN_CONTINUE;
  1652.     }
  1653.    
  1654.     new noflash = get_pcvar_num(hns_noflash);
  1655.     if( !noflash )
  1656.     {
  1657.         return PLUGIN_CONTINUE;
  1658.     }
  1659.    
  1660.     if( get_msg_arg_int(4) == 255 && get_msg_arg_int(5) == 255 && get_msg_arg_int(6) == 255 )
  1661.     {
  1662.         // flashbang
  1663.        
  1664.         if( noflash == _:cs_get_user_team(plr) )
  1665.         {
  1666.             return PLUGIN_HANDLED;
  1667.         }
  1668.     }
  1669.    
  1670.     return PLUGIN_CONTINUE;
  1671. }
  1672.  
  1673. public eventRestartAttempt()
  1674. {
  1675.     new players[32], pnum;
  1676.     get_players(players, pnum, g_sA);
  1677.    
  1678.     for( new i = 0; i < pnum; i++ )
  1679.     {
  1680.         g_bNonSpawnEvent[players[i]] = true;
  1681.     }
  1682.    
  1683.     return PLUGIN_CONTINUE;
  1684. }
  1685.  
  1686. public eventResetHUD(plr)
  1687. {
  1688.     if( g_bHnsOn && get_pcvar_num(hns_money) == 0 )
  1689.     {
  1690.         make_HideWeapon(plr, HIDE_MONEY);
  1691.     }
  1692.    
  1693.     if( is_user_alive(plr) )
  1694.     {
  1695.         if( g_bNonSpawnEvent[plr] )
  1696.         {
  1697.             g_bNonSpawnEvent[plr] = false;
  1698.         }
  1699.         else
  1700.         {
  1701.             fwdPlayerSpawn(plr);
  1702.         }
  1703.     }
  1704.    
  1705.     return PLUGIN_CONTINUE;
  1706. }
  1707.  
  1708. public eventMoney(plr)
  1709. {
  1710.     if( !g_bHnsOn )
  1711.     {
  1712.         return PLUGIN_CONTINUE;
  1713.     }
  1714.    
  1715.     new money = get_pcvar_num(hns_money);
  1716.     money = clamp(money, -1, 16000);
  1717.    
  1718.     if( money >= 0 )
  1719.     {
  1720.         cs_set_user_money(plr, money, 0);
  1721.     }
  1722.     if( money == 0 && g_OldMoney != 0 )
  1723.     {
  1724.         make_HideWeapon(plr, HIDE_MONEY);
  1725.     }
  1726.    
  1727.     g_OldMoney = money;
  1728.    
  1729.     return PLUGIN_HANDLED;
  1730. }
  1731.  
  1732. public eventNewRound()
  1733. {
  1734.     if( !g_bHnsOn )
  1735.     {
  1736.         return PLUGIN_CONTINUE;
  1737.     }
  1738.    
  1739.     if( g_bDisableSlash )
  1740.     {
  1741.         new rounds = get_pcvar_num(hns_nubslash);
  1742.         if( rounds > 0 && g_RoundsLost >= rounds )
  1743.         {
  1744.             hns_print(0, "Seekers can now use nubslash after losing %i round%s!",\
  1745.                 rounds, (rounds == 1) ? g_sBlank : "s in a row");
  1746.            
  1747.             g_bDisableSlash = false;
  1748.         }
  1749.     }
  1750.    
  1751.     g_HideTimer = get_pcvar_num(hns_hidetime);
  1752.    
  1753.     return PLUGIN_CONTINUE;
  1754. }
  1755.  
  1756. public eventTerrWin()
  1757. {
  1758.     if( g_bDisableSlash )
  1759.     {
  1760.         g_RoundsLost++;
  1761.     }
  1762.    
  1763.     return PLUGIN_CONTINUE;
  1764. }
  1765.  
  1766. public eventRestartRound()
  1767. {
  1768.     g_RoundsLost = 0;
  1769.     g_RoundsEnded = 0;
  1770.     g_bDisableSlash = true;
  1771.    
  1772.     g_bWeaponsGiven = false;
  1773.    
  1774.     g_HideTimer = -1;
  1775.    
  1776.     if( !g_bScrimOn
  1777.     || g_ScrimType != SCRIM_ROUNDS
  1778.     || !g_ScrimSaveWins )
  1779.     {
  1780.         g_ScrimRounds[HNS_TEAM_HIDER] = 0;
  1781.     }
  1782.    
  1783.     return PLUGIN_CONTINUE;
  1784. }
  1785.  
  1786. public eventCurWeapon(plr)
  1787. {
  1788.     if( !g_bHnsOn )
  1789.     {
  1790.         return PLUGIN_CONTINUE;
  1791.     }
  1792.    
  1793.     if( cs_get_user_team(plr) == HNS_TEAM_HIDER && get_pcvar_num(hns_hiders_knife) == 1 )
  1794.     {
  1795.         new sModel[32];
  1796.        
  1797.         pev(plr, pev_viewmodel2, sModel, 31);
  1798.         if( equali(sModel, g_sKnifeModel_v, 0) )
  1799.         {
  1800.             set_pev(plr, pev_viewmodel2, g_sBlank);
  1801.         }
  1802.        
  1803.         pev(plr, pev_weaponmodel2, sModel, 31);
  1804.         if( equali(sModel, g_sKnifeModel_w, 0) )
  1805.         {
  1806.             set_pev(plr, pev_weaponmodel2, g_sBlank);
  1807.         }
  1808.     }
  1809.    
  1810.     return PLUGIN_CONTINUE;
  1811. }
  1812.  
  1813. public TaskRespawn(plr)
  1814. {
  1815.     // thanks GHW_Chronic & MeRcyLeZZ
  1816.     set_pev(plr, pev_deadflag, DEAD_RESPAWNABLE);
  1817.     dllfunc(DLLFunc_Think, plr);
  1818. }
  1819.  
  1820. public eventDeathMsg()
  1821. {
  1822.     new victim = read_data(2);
  1823.     g_bAlive[victim] = false;
  1824.    
  1825.     if( g_bWarmup && get_pcvar_num(hns_warmup_respawn) )
  1826.     {
  1827.         set_task(1.0, "TaskRespawn", victim);
  1828.     }
  1829.    
  1830.     if( !g_bScrimOn
  1831.     || g_ScrimType != SCRIM_POINTS )
  1832.     {
  1833.         return PLUGIN_CONTINUE;
  1834.     }
  1835.    
  1836.     new sNameVictim[32];
  1837.     get_user_name(victim, sNameVictim, 31);
  1838.    
  1839.     new CsTeams:vTeam = cs_get_user_team(victim);
  1840.    
  1841.     new killer = read_data(1);
  1842.     if( !killer || killer == victim )
  1843.     {
  1844.         g_ScrimScores[vTeam] -= g_PointsSuicide;
  1845.        
  1846.         scrim_print(0, "^x03%s^x01 lost^x03 %i point%s^x01 from their^x03 team's score^x01 for^x03 suiciding^x01!", sNameVictim, g_PointsSuicide, g_PointsSuicide == 1 ? "" : "s");
  1847.        
  1848.         return PLUGIN_CONTINUE;
  1849.     }
  1850.    
  1851.     new sNameKiller[32];
  1852.     get_user_name(killer, sNameKiller, 31);
  1853.    
  1854.     new CsTeams:kTeam = cs_get_user_team(killer);
  1855.    
  1856.     if( kTeam == vTeam )
  1857.     {
  1858.         g_ScrimScores[vTeam] -= g_PointsTeamKill;
  1859.        
  1860.         scrim_print(0, "^x03%s^x01 lost^x03 %i point%s^x01 from their^x03 team's score^x01 for^x03 killing a teammate^x01!", sNameKiller, g_PointsTeamKill, g_PointsKill == 1 ? "" : "s");
  1861.        
  1862.         return PLUGIN_CONTINUE;
  1863.     }
  1864.    
  1865.     new sWeapon[32];
  1866.     read_data(4, sWeapon, 31);
  1867.    
  1868.     if( equali(sWeapon, "grenade", 0) || equali(sWeapon, "frostgrenade", 0) )
  1869.     {
  1870.         g_ScrimScores[kTeam] += g_PointsGrenade;
  1871.        
  1872.         new sMessage[192]; /* vformat() only allows 3 arguments max ... lame */
  1873.         formatex(sMessage, 191, "^x03%s^x01 gained^x03 %i point%s^x01 for their^x03 team's score^x01 for^x03 killing %s with a %s^x01!", sNameKiller, g_PointsGrenade, g_PointsGrenade == 1 ? "" : "s", sNameVictim, sWeapon);
  1874.         scrim_print(0, "%s", sMessage);
  1875.        
  1876.         return PLUGIN_CONTINUE;
  1877.     }
  1878.    
  1879.     if( equali(sWeapon, "knife", 0) )
  1880.     {
  1881.         g_ScrimScores[kTeam] += g_PointsKnife;
  1882.        
  1883.         new sMessage[192];
  1884.         formatex(sMessage, 191, "^x03%s^x01 gained^x03 %i point%s^x01 for their^x03 team's score^x01 for^x03 killing %s with a knife!", sNameKiller, g_PointsKnife, g_PointsKnife == 1 ? "" : "s", sNameVictim);
  1885.         scrim_print(0, "%s", sMessage);
  1886.     }
  1887.     else
  1888.     {
  1889.         g_ScrimScores[kTeam] += g_PointsKill;
  1890.        
  1891.         new sMessage[192]; /* vformat() only allows 3 arguments max ... lame */
  1892.         formatex(sMessage, 191, "^x03%s^x01 gained^x03 %i point%s^x01 for their^x03 team's score^x01 for^x03 killing %s^x01!", sNameKiller, g_PointsKill, g_PointsKill == 1 ? "s" : "", sNameVictim);
  1893.         scrim_print(0, "%s", sMessage);
  1894.     }
  1895.    
  1896.     if( read_data(3) )
  1897.     {
  1898.         g_ScrimScores[kTeam] += g_PointsHeadshot;
  1899.        
  1900.         scrim_print(0, "^x03%s^x01 gained^x03 %d extra point%s^x01 for getting a^x03 headshot^x01!", sNameKiller, g_PointsHeadshot, g_PointsHeadshot == 1 ? "" : "s");
  1901.     }
  1902.    
  1903.     return PLUGIN_CONTINUE;
  1904. }
  1905.  
  1906. public logeventRoundStart()
  1907. {
  1908.     if( !g_bHnsOn )
  1909.     {
  1910.         if( g_bRemovedBreakables )
  1911.         {
  1912.             g_bRemovedBreakables = restore_entities(g_sClassBreakable);
  1913.         }
  1914.        
  1915.         return PLUGIN_CONTINUE;
  1916.     }
  1917.    
  1918.     if( get_pcvar_num(hns_removebreakables) )
  1919.     {
  1920.         g_bRemovedBreakables = remove_entities(g_sClassBreakable);
  1921.     }
  1922.     else if( g_bRemovedBreakables )
  1923.     {
  1924.         g_bRemovedBreakables = restore_entities(g_sClassBreakable);
  1925.     }
  1926.    
  1927.     if( get_pcvar_num(hns_removedoors) )
  1928.     {
  1929.         g_bRemovedDoors = remove_entities(g_sClassDoor);
  1930.         g_bRemovedDoorsRotating = remove_entities(g_sClassDoorRotating);
  1931.     }
  1932.     else
  1933.     {
  1934.         if( g_bRemovedDoors )
  1935.         {
  1936.             g_bRemovedDoors = restore_entities(g_sClassDoor);
  1937.         }
  1938.        
  1939.         if( g_bRemovedDoorsRotating )
  1940.         {
  1941.             g_bRemovedDoorsRotating = restore_entities(g_sClassDoorRotating);
  1942.         }
  1943.     }
  1944.    
  1945.     remove_task(TASK_ID_HIDETIMER, 0);
  1946.     set_task(0.0, "taskHideTimer", TASK_ID_HIDETIMER, g_sBlank, 0, g_sBlank, 0);
  1947.    
  1948.     if( !g_bScrimOn )
  1949.     {
  1950.         return PLUGIN_CONTINUE;
  1951.     }
  1952.    
  1953.     switch( g_ScrimType )
  1954.     {
  1955.         case SCRIM_ROUNDS:
  1956.         {
  1957.             if( g_ScrimWinner )
  1958.             {
  1959.                 /* switch() statement gave me an error */
  1960.                 if( g_ScrimWinner == HNS_TEAM_HIDER )
  1961.                 {
  1962.                     scrim_print(0, "^x03Hiders^x01 lost^x03 %i / %i^x01 rounds!", g_ScrimLosses[HNS_TEAM_SEEKER], g_ScrimMaxLosses);
  1963.                     scrim_print(0, "The scrim is a draw!");
  1964.                 }
  1965.                 else if( g_ScrimWinner == HNS_TEAM_SEEKER )
  1966.                 {
  1967.                     scrim_print(0, "^x03Hiding team^x01 has won^x03 %i / %i^x01 rounds!", g_ScrimRounds[HNS_TEAM_HIDER], g_ScrimMaxRounds);
  1968.                     scrim_print(0, "Hiding team has won!");
  1969.                 }
  1970.                
  1971.                 scrim_print(0, "^x03Turning off scrim mod.");
  1972.                
  1973.                 g_bScrimOn = false;
  1974.                 g_ScrimType = SCRIM_NONE;
  1975.                 set_pcvar_num(sv_restart, 1);
  1976.             }
  1977.             else if( g_bRestartRound )
  1978.             {
  1979.                 g_bRestartRound = false;
  1980.                 set_pcvar_num(sv_restart, 1);
  1981.             }  
  1982.         }
  1983.         case SCRIM_POINTS:
  1984.         {
  1985.             if( g_ScrimWinner )
  1986.             {
  1987.                 new CsTeams:team1 = g_ScrimTeams[1];
  1988.                 new CsTeams:team2 = g_ScrimTeams[2];
  1989.                
  1990.                 scrim_print(0, "Final scrim scores:^x03 Team 1 [%i]^x01 ::^x03 Team 2 [%i]", g_ScrimScores[team1], g_ScrimScores[team2]);
  1991.                 scrim_print(0, "^x03Team %i^x01 has won!", g_ScrimTeamNums[g_ScrimWinner]);
  1992.                
  1993.                 g_bScrimOn = false;
  1994.                 g_ScrimType = SCRIM_NONE;
  1995.                 set_pcvar_num(sv_restart, 1);
  1996.             }
  1997.             else if( g_bScrimIsDraw )
  1998.             {
  1999.                 new CsTeams:team1 = g_ScrimTeams[1];
  2000.                 new CsTeams:team2 = g_ScrimTeams[2];
  2001.                
  2002.                 scrim_print(0, "Final scrim scores:^x03 Team 1 [%i]^x01 ::^x03 Team 2 [%i]", g_ScrimScores[team1], g_ScrimScores[team2]);
  2003.                 scrim_print(0, "The scrim results in a tie!");
  2004.                
  2005.                 g_bScrimOn = false;
  2006.                 g_ScrimType = SCRIM_NONE;
  2007.                 set_pcvar_num(sv_restart, 1);
  2008.             }
  2009.         }
  2010.     }
  2011.    
  2012.     return PLUGIN_CONTINUE;
  2013. }
  2014.  
  2015. public logeventRoundEnd()
  2016. {
  2017.     if( !g_bHnsOn )
  2018.     {
  2019.         return PLUGIN_CONTINUE;
  2020.     }
  2021.    
  2022.     remove_task(TASK_ID_HIDETIMER, 0);
  2023.    
  2024.     new sMessage[192];
  2025.     new CsTeams:winner = HNS_TEAM_SEEKER;
  2026.    
  2027.     new hider, seeker, hider_alive;
  2028.     get_hider_and_seeker(hider, seeker, hider_alive);
  2029.    
  2030.     if( hider_alive )
  2031.     {
  2032.         winner = HNS_TEAM_HIDER;
  2033.     }
  2034.    
  2035.     if( !hider || !seeker )
  2036.     {
  2037.         return PLUGIN_CONTINUE;
  2038.     }
  2039.    
  2040.     static const sTaskSwapTeams[] = "taskSwapTeams";
  2041.    
  2042.     ++g_RoundsEnded;
  2043.    
  2044.     new teamchange = get_pcvar_num(hns_teamchange);
  2045.     if( teamchange && teamchange == g_RoundsEnded && !g_bScrimOn )
  2046.     {
  2047.         hns_print(0, "%i rounds have ended. Switching teams.", g_RoundsEnded);
  2048.        
  2049.         set_task(0.5, sTaskSwapTeams, TASK_ID_SWAPTEAMS, g_sBlank, 0, g_sBlank, 0);
  2050.     }
  2051.    
  2052.     static const sNoTeamChange[] = "^nNo Team Change";
  2053.     if( winner == HNS_TEAM_SEEKER )
  2054.     {
  2055.         copy(sMessage, 191, "Seekers Won Round");
  2056.        
  2057.         if( !teamchange && (!g_bScrimOn || g_ScrimType == SCRIM_ROUNDS) )
  2058.         {
  2059.             add(sMessage, 191, "^nSwitching Teams", 0);
  2060.            
  2061.             set_task(0.5, sTaskSwapTeams, TASK_ID_SWAPTEAMS, g_sBlank, 0, g_sBlank, 0);
  2062.         }
  2063.     }
  2064.     else if( winner == HNS_TEAM_HIDER )
  2065.     {
  2066.         copy(sMessage, 191, "Hiders Won Round");
  2067.        
  2068.         new frags = get_pcvar_num(hns_hiders_alivefrags);
  2069.        
  2070.         if( frags )
  2071.         {
  2072.             static Float:fFrags;
  2073.             for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2074.             {
  2075.                 if( g_bConnected[plr] && g_bAlive[plr] && cs_get_user_team(plr) == HNS_TEAM_HIDER )
  2076.                 {
  2077.                     pev(plr, pev_frags, fFrags);
  2078.                     set_pev(plr, pev_frags, fFrags + float(frags));
  2079.                    
  2080.                     hns_print(plr, "You earned %i frag%s for surviving the round!",\
  2081.                         frags, (frags == 1) ? g_sBlank : g_sS);
  2082.                 }
  2083.             }
  2084.         }
  2085.        
  2086.         if( !teamchange )
  2087.         {
  2088.             add(sMessage, 191, sNoTeamChange, 0);
  2089.         }
  2090.     }
  2091.    
  2092.     static red, green, blue;
  2093.     get_hud_colors(red, green, blue);
  2094.     set_hudmessage(red, green, blue, -1.0, -1.0, 0, 0.0, 5.0, 0.1, 0.2, 1);
  2095.     show_hudmessage(0, "%s", sMessage);
  2096.    
  2097.     g_bWeaponsGiven = false;
  2098.    
  2099.     if( !g_bScrimOn )
  2100.     {
  2101.         return PLUGIN_CONTINUE;
  2102.     }
  2103.    
  2104.     switch( g_ScrimType )
  2105.     {
  2106.         case SCRIM_ROUNDS:
  2107.         {
  2108.             /* switch() statement gave me an error */
  2109.             if( winner == HNS_TEAM_HIDER )
  2110.             {
  2111.                 ++g_ScrimRounds[HNS_TEAM_HIDER];
  2112.                
  2113.                 if( g_ScrimMaxRounds )
  2114.                 {
  2115.                     scrim_print(0, "^x03Hiders^x01 have won^x03 %i / %i^x01 rounds!", g_ScrimRounds[HNS_TEAM_HIDER], g_ScrimMaxRounds);
  2116.                    
  2117.                     if( g_ScrimRounds[HNS_TEAM_HIDER] == g_ScrimMaxRounds )
  2118.                     {
  2119.                         g_ScrimWinner = HNS_TEAM_SEEKER;
  2120.                     }
  2121.                 }
  2122.             }
  2123.             else if( winner == HNS_TEAM_SEEKER && g_ScrimMaxLosses )
  2124.             {
  2125.                 ++g_ScrimLosses[HNS_TEAM_HIDER];
  2126.                
  2127.                 scrim_print(0, "^x03Hiders^x01 have lost^x03 %i / %i^x01 rounds!", g_ScrimLosses[HNS_TEAM_HIDER], g_ScrimMaxLosses);
  2128.                
  2129.                 scrim_print(0, "^x03Seekers^x01 won the round");
  2130.                 scrim_print(0, "Switching teams.");
  2131.                
  2132.                 g_bRestartRound = true;
  2133.                
  2134.                 if( g_ScrimLosses[HNS_TEAM_HIDER] == g_ScrimMaxLosses )
  2135.                 {
  2136.                     g_ScrimWinner = HNS_TEAM_HIDER; /* seeking team won, but they will be hiders next round (team switching) */
  2137.                 }
  2138.             }
  2139.         }
  2140.         case SCRIM_POINTS:
  2141.         {
  2142.             ++g_ScrimRounds[HNS_TEAM_HIDER];
  2143.            
  2144.             new CsTeams:loser;
  2145.             if( winner == HNS_TEAM_HIDER )
  2146.             {
  2147.                 loser = HNS_TEAM_SEEKER;
  2148.             }
  2149.             else if( winner == HNS_TEAM_SEEKER )
  2150.             {
  2151.                 loser = HNS_TEAM_HIDER;
  2152.             }
  2153.            
  2154.             g_ScrimScores[loser] -= g_PointsRoundLose;
  2155.             g_ScrimScores[winner] += g_PointsRoundWin;
  2156.            
  2157.             new sTeam[CsTeams][16];
  2158.             formatex(sTeam[HNS_TEAM_HIDER], 15, "Team %i", g_ScrimTeamNums[HNS_TEAM_HIDER]);
  2159.             formatex(sTeam[HNS_TEAM_SEEKER], 15, "Team %i", g_ScrimTeamNums[HNS_TEAM_SEEKER]);
  2160.            
  2161.             new sMessageLose[192];
  2162.             formatex(sMessageLose, 191, "^x03%s^x01 lost^x03 %i point%s^x01 for^x03 losing^x01 the round!", "%s", g_ScrimTeamNums[loser], g_PointsRoundLose, g_PointsRoundLose == 1 ? "" : "s");
  2163.            
  2164.             new sMessageWin[192];
  2165.             formatex(sMessageWin, 191, "^x03%s^x01 gained^x03 %i point%s^x01 for^x03 winning^x01 the round!", "%s", g_ScrimTeamNums[winner], g_PointsRoundWin, g_PointsRoundWin == 1 ? "" : "s");
  2166.            
  2167.             new CsTeams:team;
  2168.             for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2169.             {
  2170.                 if( !g_bConnected[plr] )
  2171.                 {
  2172.                     continue;
  2173.                 }
  2174.                
  2175.                 team = cs_get_user_team(plr);
  2176.                 if( team == winner )
  2177.                 {
  2178.                     scrim_print(plr, sMessageWin, "Your team");
  2179.                     scrim_print(plr, sMessageLose, sTeam[loser]);
  2180.                 }
  2181.                 else if( team == loser )
  2182.                 {
  2183.                     scrim_print(plr, sMessageWin, sTeam[winner]);
  2184.                     scrim_print(plr, sMessageLose, "Your team");
  2185.                 }
  2186.             }
  2187.            
  2188.             if( g_ScrimRounds[HNS_TEAM_HIDER] == g_ScrimMaxRounds )
  2189.             {
  2190.                 if( g_ScrimScores[HNS_TEAM_HIDER] > g_ScrimScores[HNS_TEAM_SEEKER] )
  2191.                 {
  2192.                     g_ScrimWinner = HNS_TEAM_HIDER;
  2193.                 }
  2194.                 else if( g_ScrimScores[HNS_TEAM_SEEKER] > g_ScrimScores[HNS_TEAM_HIDER] )
  2195.                 {
  2196.                     g_ScrimWinner = HNS_TEAM_SEEKER;
  2197.                 }
  2198.                 else /* not one is greater than the other, so they are equal */
  2199.                 {
  2200.                     g_bScrimIsDraw = true;
  2201.                 }
  2202.             }
  2203.             else if( g_ScrimRounds[HNS_TEAM_HIDER] == (g_ScrimMaxRounds / 2) ) /* half of the scrim has gone by, so swap the teams */
  2204.             {
  2205.                 set_task(0.5, "taskSwapTeams", TASK_ID_SWAPTEAMS, "", 0, "", 0);
  2206.                
  2207.                 scrim_print(0, "^x03Half^x01 of the scrim is over,^x03 switching teams^x01.");
  2208.             }
  2209.         }
  2210.     }
  2211.    
  2212.     return PLUGIN_CONTINUE;
  2213. }
  2214.  
  2215. public mnuScrimType(plr, menu, item)
  2216. {
  2217.     if( item == MENU_EXIT
  2218.     || g_ScrimVoteTimer == 0 )
  2219.     {
  2220.         return PLUGIN_HANDLED;
  2221.     }
  2222.    
  2223.     new sInfo[2], _access, callback;
  2224.     menu_item_getinfo(menu, item, _access, sInfo, 1, "", 0, callback);
  2225.    
  2226.     new type = str_to_num(sInfo);
  2227.     g_ScrimVoteCount[type]++;
  2228.    
  2229.     if( get_pcvar_num(amx_vote_answers) )
  2230.     {
  2231.         new sName[32];
  2232.         get_user_name(plr, sName, 31);
  2233.        
  2234.         switch( type )
  2235.         {
  2236.             case SCRIM_ROUNDS: scrim_print(0, "^x03%s^x01 voted for^x03 Win %i Rounds", sName, get_pcvar_num(hnss_rounds_wins));
  2237.             case SCRIM_POINTS: scrim_print(0, "^x03%s^x01 voted for^x03 Point System", sName);
  2238.         }
  2239.     }
  2240.    
  2241.     g_bScrimVoted[plr] = true;
  2242.    
  2243.     if( check_last_vote(plr) )
  2244.     {
  2245.         g_ScrimVoteTimer = 1;
  2246.     }
  2247.    
  2248.     return PLUGIN_HANDLED;
  2249. }
  2250.  
  2251. public taskRemoveShield(ent)
  2252. {
  2253.     dllfunc(DLLFunc_Think, ent);
  2254.    
  2255.     return PLUGIN_CONTINUE;
  2256. }
  2257.  
  2258. public taskHideTimer()
  2259. {
  2260.     new seeker, hider;
  2261.    
  2262.     if( g_HideTimer <= 0 )
  2263.     {
  2264.         seeker = 1;
  2265.         hider = 1;
  2266.     }
  2267.     else
  2268.     {
  2269.         get_hider_and_seeker(hider, seeker);
  2270.     }
  2271.    
  2272.     static const sTaskHideTimer[] = "taskHideTimer";
  2273.     if( !hider || !seeker )
  2274.     {
  2275.         g_HideTimer = 0;
  2276.         set_task(0.0, sTaskHideTimer, TASK_ID_HIDETIMER, g_sBlank, 0, g_sBlank, 0);
  2277.        
  2278.         return PLUGIN_CONTINUE;
  2279.     }
  2280.    
  2281.     static CsTeams:team;
  2282.    
  2283.     if( g_HideTimer > 0 )
  2284.     {
  2285.         new sounds = get_pcvar_num(hns_timersounds);
  2286.        
  2287.         new sSound[16];
  2288.         num_to_word(g_HideTimer, sSound, 15);
  2289.        
  2290.         static blind_red, blind_green, blind_blue, blind_alpha;
  2291.         get_blind_colors(blind_red, blind_green, blind_blue, blind_alpha);
  2292.        
  2293.         static hud_red, hud_green, hud_blue;
  2294.         get_hud_colors(hud_red, hud_green, hud_blue);
  2295.        
  2296.         for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2297.         {
  2298.             if( !g_bConnected[plr] )
  2299.             {
  2300.                 continue;
  2301.             }
  2302.            
  2303.             team = cs_get_user_team(plr);
  2304.             if( team == HNS_TEAM_SEEKER || team == HNS_TEAM_HIDER )
  2305.             {
  2306.                 if( team == HNS_TEAM_SEEKER && g_bAlive[plr] )
  2307.                 {
  2308.                     make_ScreenFade(plr, 1.5, 1.5, blind_red, blind_green, blind_blue, blind_alpha);
  2309.                    
  2310.                     /*set_pev(plr, pev_flags, pev(plr, pev_flags) | FL_FROZEN);
  2311.                     set_pev(plr, pev_maxspeed, -1.0);*/
  2312.                 }
  2313.                
  2314.                 set_hudmessage(hud_red, hud_green, hud_blue, -1.0, -1.0, 0, 0.0, 1.1, 0.1, 0.1, 1);
  2315.                 show_hudmessage(plr, "Hiders have %i seconds to hide!", g_HideTimer);
  2316.                
  2317.                 if( sounds )
  2318.                 {
  2319.                     client_cmd(plr, "spk vox/%s.wav", sSound);
  2320.                 }
  2321.             }
  2322.         }
  2323.        
  2324.         g_HideTimer--;
  2325.         set_task(1.0, sTaskHideTimer, TASK_ID_HIDETIMER, g_sBlank, 0, g_sBlank, 0);
  2326.     }
  2327.     else if( g_HideTimer == 0 )
  2328.     {
  2329.         static hud_red, hud_green, hud_blue;
  2330.         get_hud_colors(hud_red, hud_green, hud_blue);
  2331.        
  2332.         static param[2];
  2333.         for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2334.         {
  2335.             if( !g_bConnected[plr] )
  2336.             {
  2337.                 continue;
  2338.             }
  2339.            
  2340.             team = cs_get_user_team(plr);
  2341.             if( team == HNS_TEAM_SEEKER || team == HNS_TEAM_HIDER )
  2342.             {
  2343.                 if( team == HNS_TEAM_SEEKER && g_bAlive[plr] )
  2344.                 {
  2345.                     make_ScreenFade(plr, 0.0, 0.0, 0, 0, 0, 255);
  2346.                    
  2347.                     cs_reset_user_maxspeed(plr);
  2348.                     //set_pev(plr, pev_flags, pev(plr, pev_flags) & ~FL_FROZEN);
  2349.                 }
  2350.                
  2351.                 set_hudmessage(hud_red, hud_green, hud_blue, -1.0, -1.0, 0, 0.0, 3.0, 0.1, 0.1, 1);
  2352.                 show_hudmessage(plr, "Ready Or Not, Here We Come!");
  2353.                
  2354.                 param[0] = _:team;
  2355.                 taskGiveWeapons(param, plr + TASK_ID_GIVEWEAPONS);
  2356.             }
  2357.         }
  2358.        
  2359.         g_bWeaponsGiven = true;
  2360.        
  2361.         g_HideTimer--;
  2362.         set_task(1.0, sTaskHideTimer, TASK_ID_HIDETIMER, g_sBlank, 0, g_sBlank, 0);
  2363.     }
  2364.     else
  2365.     {
  2366.         for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2367.         {
  2368.             if( !g_bConnected[plr] )
  2369.             {
  2370.                 continue;
  2371.             }
  2372.            
  2373.             if( g_bAlive[plr] && cs_get_user_team(plr) == HNS_TEAM_SEEKER )
  2374.             {
  2375.                 make_ScreenFade(plr, 0.0, 0.0, 0, 0, 0, 255);
  2376.                
  2377.                 cs_reset_user_maxspeed(plr);
  2378.                 //set_pev(plr, pev_flags, pev(plr, pev_flags) & ~FL_FROZEN);
  2379.             }
  2380.         }
  2381.     }
  2382.    
  2383.     return PLUGIN_CONTINUE;
  2384. }
  2385.  
  2386. public taskStripWeapons(plr)
  2387. {
  2388.     plr -= TASK_ID_STRIPWEAPONS;
  2389.    
  2390.     fm_strip_user_weapons(plr);
  2391.    
  2392.     return PLUGIN_CONTINUE;
  2393. }
  2394.  
  2395. public taskGiveKnife(param[], plr)
  2396. {
  2397.     plr -= TASK_ID_GIVEKNIFE;
  2398.    
  2399.     new CsTeams:team = CsTeams:param[0];
  2400.    
  2401.     if( team != HNS_TEAM_HIDER || get_pcvar_num(hns_hiders_knife))
  2402.     {
  2403.         fm_give_item(plr, "weapon_knife");
  2404.     }
  2405.    
  2406.     return PLUGIN_CONTINUE;
  2407. }
  2408.  
  2409. public taskGiveWeapons(param[], plr)
  2410. {
  2411.     plr -= TASK_ID_GIVEWEAPONS;
  2412.    
  2413.     new CsTeams:team = CsTeams:param[0];
  2414.     if( team != HNS_TEAM_HIDER && team != HNS_TEAM_SEEKER )
  2415.     {
  2416.         return PLUGIN_CONTINUE;
  2417.     }
  2418.    
  2419.     chance(plr, get_pcvar_num(hns_grenades[team]), get_pcvar_num(hns_grenades_percent[team]),"weapon_hegrenade", CSW_HEGRENADE, "HE Grenade");
  2420.     chance(plr, get_pcvar_num(hns_flashbangs[team]), get_pcvar_num(hns_flashbangs_percent[team]), "weapon_flashbang", CSW_FLASHBANG, "Flashbang");
  2421.     chance(plr, get_pcvar_num(hns_smokegren[team]), get_pcvar_num(hns_smokegren_percent[team]), "weapon_smokegrenade", CSW_SMOKEGRENADE, "Smoke Grenade");
  2422.    
  2423.     new num = get_pcvar_num(hns_armor[team]);
  2424.     num = clamp(num, 0, 100);
  2425.    
  2426.     switch( num )
  2427.     {
  2428.         case 0:
  2429.         {
  2430.             cs_set_user_armor(plr, 0, CS_ARMOR_NONE);
  2431.         }
  2432.         case 1..99:
  2433.         {
  2434.             cs_set_user_armor(plr, num, CS_ARMOR_KEVLAR);
  2435.         }
  2436.         case 100:
  2437.         {
  2438.             cs_set_user_armor(plr, num, CS_ARMOR_VESTHELM);
  2439.         }
  2440.     }
  2441.    
  2442.     return PLUGIN_CONTINUE;
  2443. }
  2444.  
  2445. public taskCheckModel(param[], plr)
  2446. {
  2447.     plr -= TASK_ID_CHECKMODEL;
  2448.    
  2449.     new CsTeams:team = CsTeams:param[0];
  2450.    
  2451.     if( team == HNS_TEAM_SEEKER || team == HNS_TEAM_HIDER )
  2452.     {
  2453.         new CsTeams:otherteam = (team == HNS_TEAM_HIDER) ? HNS_TEAM_SEEKER : HNS_TEAM_HIDER;
  2454.        
  2455.         new sModel[32];
  2456.         cs_get_user_model(plr, sModel, 31);
  2457.        
  2458.         for( new i = 0; i < 4; i++ )
  2459.         {
  2460.             if( equal(sModel, g_sAllModels[otherteam][i], 0) )
  2461.             {
  2462.                 cs_set_user_model(plr, g_sDefaultModels[team]);
  2463.                 break;
  2464.             }
  2465.         }
  2466.     }
  2467.    
  2468.     return PLUGIN_CONTINUE;
  2469. }
  2470.  
  2471. public taskSwapTeams(taskid)
  2472. {
  2473.     static CsTeams:team;
  2474.    
  2475.     if( g_bScrimOn )
  2476.     {
  2477.         static temp;
  2478.        
  2479.         if( g_ScrimType == SCRIM_POINTS )
  2480.         {
  2481.             temp = g_ScrimScores[HNS_TEAM_HIDER];
  2482.             g_ScrimScores[HNS_TEAM_HIDER] = g_ScrimScores[HNS_TEAM_SEEKER];
  2483.             g_ScrimScores[HNS_TEAM_SEEKER] = temp;
  2484.            
  2485.             temp = g_ScrimTeamNums[HNS_TEAM_HIDER];
  2486.             g_ScrimTeamNums[HNS_TEAM_HIDER] = g_ScrimTeamNums[HNS_TEAM_SEEKER];
  2487.             g_ScrimTeamNums[HNS_TEAM_SEEKER] = temp;
  2488.            
  2489.             team = g_ScrimTeams[1];
  2490.             g_ScrimTeams[1] = g_ScrimTeams[2];
  2491.             g_ScrimTeams[2] = team;
  2492.         }
  2493.         else if( g_ScrimType == SCRIM_ROUNDS )
  2494.         {
  2495.             if( !g_ScrimSaveWins )
  2496.             {
  2497.                 g_ScrimRounds[HNS_TEAM_HIDER] = 0;
  2498.                 g_ScrimRounds[HNS_TEAM_SEEKER] = 0;
  2499.             }
  2500.             else
  2501.             {
  2502.                 temp = g_ScrimRounds[HNS_TEAM_HIDER];
  2503.                 g_ScrimRounds[HNS_TEAM_HIDER] = g_ScrimRounds[HNS_TEAM_SEEKER];
  2504.                 g_ScrimRounds[HNS_TEAM_SEEKER] = temp;
  2505.             }
  2506.         }
  2507.     }
  2508.    
  2509.     for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2510.     {
  2511.         if( !g_bConnected[plr] )
  2512.         {
  2513.             continue;
  2514.         }
  2515.        
  2516.         team = cs_get_user_team(plr);
  2517.         if( team == HNS_TEAM_HIDER )
  2518.         {
  2519.             cs_set_user_team(plr, HNS_TEAM_SEEKER, HNS_MODEL_SEEKER);
  2520.            
  2521.             emake_TeamInfo(plr, g_sTeamInfo[HNS_TEAM_SEEKER]); /* let other plugins know that the player changed teams */
  2522.         }
  2523.         else if( team == HNS_TEAM_SEEKER )
  2524.         {
  2525.             cs_set_user_team(plr, HNS_TEAM_HIDER, HNS_MODEL_HIDER);
  2526.            
  2527.             emake_TeamInfo(plr, g_sTeamInfo[HNS_TEAM_HIDER]); /* let other plugins know that the player changed teams */
  2528.         }
  2529.     }
  2530.    
  2531.     g_RoundsLost = 0;
  2532.     g_RoundsEnded = 0;
  2533.     g_bDisableSlash = true;
  2534.    
  2535.     return 1;
  2536. }
  2537.  
  2538. public taskSetLights()
  2539. {
  2540.     if( !g_bHnsOn )
  2541.     {
  2542.         if( !equali(g_sLights, g_sLightsNormal) )
  2543.         {
  2544.             set_lights(g_sLightsNormal);
  2545.         }
  2546.     }
  2547.     else
  2548.     {
  2549.         new sLights[16];
  2550.         get_pcvar_string(hns_lights, sLights, 15);
  2551.        
  2552.         if( !equali(g_sLights, sLights) )
  2553.         {
  2554.             if( !strlen(sLights) )
  2555.             {
  2556.                 set_lights(g_sLightsNormal);
  2557.                 set_pcvar_string(hns_lights, g_sLightsNormal);
  2558.             }
  2559.             else
  2560.             {
  2561.                 set_lights(sLights);
  2562.             }
  2563.         }
  2564.     }
  2565.    
  2566.     return PLUGIN_CONTINUE;
  2567. }
  2568.  
  2569. public taskShowPluginInfo(plr)
  2570. {
  2571.     if( g_bHnsOn )
  2572.     {
  2573.         show_plugin_info(plr - TASK_ID_SHOWPLUGININFO);
  2574.     }
  2575.    
  2576.     return PLUGIN_CONTINUE;
  2577. }
  2578.  
  2579. public taskScrimVote(aMenu[])
  2580. {
  2581.     if( !--g_ScrimVoteTimer )
  2582.     {
  2583.         remove_task(TASK_ID_SCRIMVOTE, 0);
  2584.        
  2585.         for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2586.         {
  2587.             if( !g_bScrimVoted[plr] )
  2588.             {
  2589.                 menu_cancel(plr); /* block any more menu key pressing */
  2590.                
  2591.                 client_cmd(plr, "slot1"); /* remove menu from player's screen */
  2592.             }
  2593.         }
  2594.        
  2595.         menu_destroy(aMenu[0]);
  2596.        
  2597.         new rounds = get_pcvar_num(hnss_rounds_wins);
  2598.         scrim_print(0, "Vote result:^x03 Win %i Rounds^x01 [^x03%i^x01] -^x03 Point System^x01 [^x03%i^x01]", rounds, g_ScrimVoteCount[SCRIM_ROUNDS], g_ScrimVoteCount[SCRIM_POINTS]);
  2599.        
  2600.         new best;
  2601.        
  2602.         if( g_ScrimVoteCount[SCRIM_ROUNDS] > g_ScrimVoteCount[SCRIM_POINTS] )
  2603.         {
  2604.             best = SCRIM_ROUNDS;
  2605.             scrim_print(0, "The scrim type will be^x03 Win %i Rounds^x01!", rounds);
  2606.         }
  2607.         else if( g_ScrimVoteCount[SCRIM_POINTS] > g_ScrimVoteCount[SCRIM_ROUNDS] )
  2608.         {
  2609.             best = SCRIM_POINTS;
  2610.             scrim_print(0, "The scrim type will be^x03 Point System^x01!");
  2611.         }
  2612.         else /* not one is greater than the other, so they are equal */
  2613.         {
  2614.             best = random_num(1, SCRIM_TYPES-1);
  2615.            
  2616.             new sWinner[16];
  2617.             switch( best )
  2618.             {
  2619.                 case SCRIM_ROUNDS: formatex(sWinner, 15, "Win %i Rounds", rounds);
  2620.                 case SCRIM_POINTS: copy(sWinner, 15, "Point System");
  2621.             }
  2622.            
  2623.             scrim_print(0, "^x03The votes are a tie!^x01 The random generator chooses^x03 %s^x01!", sWinner);
  2624.         }
  2625.        
  2626.         if( best == SCRIM_POINTS )
  2627.         {
  2628.             /* in case of an odd number, we need to round it up one */
  2629.             g_ScrimMaxRounds = floatround(get_pcvar_float(hnss_points_rounds) / 2.0, floatround_ceil) * 2;
  2630.            
  2631.             g_PointsKnife = get_pcvar_num(hnss_points_knife);
  2632.             g_PointsHeadshot = get_pcvar_num(hnss_points_headshot);
  2633.             g_PointsGrenade = get_pcvar_num(hnss_points_grenade);
  2634.             g_PointsKill = get_pcvar_num(hnss_points_kill);
  2635.             g_PointsSuicide = get_pcvar_num(hnss_points_suicide);
  2636.             g_PointsTeamKill = get_pcvar_num(hnss_points_teamkill);
  2637.             g_PointsRoundWin = get_pcvar_num(hnss_points_roundwin);
  2638.             g_PointsRoundLose = get_pcvar_num(hnss_points_roundlose);
  2639.         }
  2640.         else if( best == SCRIM_ROUNDS )
  2641.         {
  2642.             g_ScrimMaxRounds = rounds;
  2643.             g_ScrimMaxLosses = get_pcvar_num(hnss_rounds_losses);
  2644.             g_ScrimSaveWins = get_pcvar_num(hnss_rounds_savewins);
  2645.         }
  2646.        
  2647.         g_ScrimType = best;
  2648.         g_ScrimWinner = CS_TEAM_UNASSIGNED;
  2649.         g_ScrimRounds[HNS_TEAM_HIDER] = 0;
  2650.         g_ScrimRounds[HNS_TEAM_SEEKER] = 0;
  2651.         g_bScrimIsDraw = false;
  2652.         g_ScrimTeams[1] = HNS_TEAM_HIDER;
  2653.         g_ScrimTeams[2] = HNS_TEAM_SEEKER;
  2654.         g_ScrimTeamNums[HNS_TEAM_HIDER] = 1;
  2655.         g_ScrimTeamNums[HNS_TEAM_SEEKER] = 2;
  2656.         g_ScrimScores[HNS_TEAM_HIDER] = 0;
  2657.         g_ScrimScores[HNS_TEAM_SEEKER] = 0;
  2658.        
  2659.         g_bScrimOn = true;
  2660.         set_pcvar_num(sv_restart, 1);
  2661.     }
  2662.     else
  2663.     {
  2664.         new sTitle[32];
  2665.         formatex(sTitle, 31, "Choose a scrim type \r[\w%i\r]", g_ScrimVoteTimer);
  2666.        
  2667.         new menu = aMenu[0];
  2668.         menu_setprop(menu, MPROP_TITLE, sTitle);
  2669.        
  2670.         for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2671.         {
  2672.             if( !g_bScrimVoted[plr] )
  2673.             {
  2674.                 menu_display(plr, menu, 0);
  2675.             }
  2676.         }
  2677.     }
  2678.    
  2679.     return PLUGIN_CONTINUE;
  2680. }
  2681.  
  2682. public taskExecuteConfig()
  2683. {
  2684.     new sConfig[64];
  2685.     get_configsdir(sConfig, 63);
  2686.     add(sConfig, 63, "/hidenseek.cfg", 0);
  2687.    
  2688.     if( file_exists(sConfig) )
  2689.     {
  2690.         server_cmd("exec %s", sConfig);
  2691.         server_exec();
  2692.        
  2693.         set_task(1.0, "TaskCheckOldVersion");
  2694.     }
  2695.     else
  2696.     {
  2697.         make_config(sConfig, true);
  2698.        
  2699.         register_forward(FM_GetGameDescription, "fwdGetGameDescription", 0);
  2700.     }
  2701. }
  2702.  
  2703. public TaskCheckOldVersion()
  2704. {
  2705.     new sValue[32];
  2706.     get_pcvar_string(hns_gametype, sValue, 31);
  2707.    
  2708.     if( had_older_version(sValue) || is_config_old() )
  2709.     {
  2710.         formatex(sValue, 31, "HideNSeek v%s", PLUGIN_VERSION);
  2711.         set_pcvar_string(hns_gametype, sValue);
  2712.        
  2713.         set_task(1.0, "TaskResetConfig");
  2714.     }
  2715.     else
  2716.     {
  2717.         register_forward(FM_GetGameDescription, "fwdGetGameDescription", 0);
  2718.     }
  2719. }
  2720.  
  2721. public TaskResetConfig()
  2722. {
  2723.     new sConfig[64];
  2724.     get_configsdir(sConfig, 63);
  2725.     add(sConfig, 63, "/hidenseek.cfg", 0);
  2726.    
  2727.     //delete_file(sConfig);
  2728.     make_config(sConfig, false);
  2729.    
  2730.     register_forward(FM_GetGameDescription, "fwdGetGameDescription", 0);
  2731. }
  2732.  
  2733. bool:had_older_version(const sGameType[])
  2734. {
  2735.     new bool:bOld = false;
  2736.    
  2737.     new sTemp[32];
  2738.     formatex(sTemp, 31, "HideNSeek v%s", PLUGIN_VERSION);
  2739.    
  2740.     if( !equali(sTemp, sGameType) )
  2741.     {
  2742.         new Float:version = str_to_float(PLUGIN_VERSION);
  2743.         for( new Float:i = 2.0; i < version; i += 0.1 )
  2744.         {
  2745.             formatex(sTemp, 31, "HideNSeek v%.1f", i);
  2746.            
  2747.             if( equali(sTemp, sGameType) )
  2748.             {
  2749.                 bOld = true;
  2750.                 break;
  2751.             }
  2752.         }
  2753.     }
  2754.    
  2755.     return bOld;
  2756. }
  2757.  
  2758. bool:is_config_old()
  2759. {
  2760.     new sConfig[64];
  2761.     get_configsdir(sConfig, 63);
  2762.     add(sConfig, 63, "/hidenseek.cfg", 0);
  2763.    
  2764.     new f = fopen(sConfig, "rt");
  2765.     new data[128];
  2766.    
  2767.     while( !feof(f) )
  2768.     {
  2769.         fgets(f, data, sizeof(data) - 1);
  2770.        
  2771.         if( containi(data, "hns_warmup") != -1 )
  2772.         {
  2773.             fclose(f);
  2774.            
  2775.             return false;
  2776.         }
  2777.     }
  2778.    
  2779.     fclose(f);
  2780.    
  2781.     return true;
  2782. }
  2783.  
  2784. make_config(const sConfig[], bool:bCheckVersion)
  2785. {
  2786.     new f = fopen(sConfig, "wt");
  2787.    
  2788.     fputs(f, "// This is where all the cvars go for HideNSeek^n// Information about the cvars can be found at: http://forums.alliedmods.net/showthread.php?t=65370^n^n");
  2789.    
  2790.     new sValue[32]; // any string needed from a cvar
  2791.    
  2792.     fprintf(f, "hns_footsteps %i^n", get_pcvar_num(hns_footsteps));
  2793.     fprintf(f, "hns_money %i^n", get_pcvar_num(hns_money));
  2794.     fprintf(f, "hns_nubslash %i^n", get_pcvar_num(hns_nubslash));
  2795.     fprintf(f, "hns_disablebuy %i^n", get_pcvar_num(hns_disablebuy));
  2796.     fprintf(f, "hns_hidetime %i^n", get_pcvar_num(hns_hidetime));
  2797.     fprintf(f, "hns_timersounds %i^n", get_pcvar_num(hns_timersounds));
  2798.     fprintf(f, "hns_noslowdown %i^n", get_pcvar_num(hns_noslowdown));
  2799.     fprintf(f, "hns_teamchange %i^n", get_pcvar_num(hns_teamchange));
  2800.     fprintf(f, "hns_disablekill %i^n", get_pcvar_num(hns_disablekill));
  2801.     fprintf(f, "hns_chooseteam %i^n", get_pcvar_num(hns_chooseteam));
  2802.     fprintf(f, "hns_semiclip %i^n", get_pcvar_num(hns_semiclip));
  2803.     fprintf(f, "hns_semiclip_alpha %i^n", get_pcvar_num(hns_semiclip_alpha));
  2804.     fprintf(f, "hns_noflash %i^n", get_pcvar_num(hns_noflash));
  2805.     fprintf(f, "hns_removebreakables %i^n", get_pcvar_num(hns_removebreakables));
  2806.     fprintf(f, "hns_removedoors %i^n", get_pcvar_num(hns_removedoors));
  2807.     fprintf(f, "hns_visiblecommands %i^n", get_pcvar_num(hns_visiblecommands));
  2808.     fprintf(f, "hns_noboosting %i^n", get_pcvar_num(hns_noboosting));
  2809.     fprintf(f, "hns_noboosting_punish %i^n", get_pcvar_num(hns_noboosting_punish));
  2810.     fprintf(f, "hns_noboosting_damage %i^n", get_pcvar_num(hns_noboosting_damage));
  2811.     fprintf(f, "hns_noboosting_interval %.4f^n", get_pcvar_float(hns_noboosting_interval));
  2812.     get_pcvar_string(hns_blindcolors, sValue, 31);
  2813.     fprintf(f, "hns_blindcolors ^"%s^"^n", sValue);
  2814.     get_pcvar_string(hns_hudcolors, sValue, 31);
  2815.     fprintf(f, "hns_hudcolors ^"%s^"^n", sValue);
  2816.     get_pcvar_string(hns_lights, sValue, 31);
  2817.     fprintf(f, "hns_lights ^"%s^"^n", sValue);
  2818.    
  2819.     get_pcvar_string(hns_gametype, sValue, 31);
  2820.     if( bCheckVersion )
  2821.     {
  2822.         if( had_older_version(sValue) )
  2823.         {
  2824.             formatex(sValue, 31, "HideNSeek v%s", PLUGIN_VERSION);
  2825.         }
  2826.     }
  2827.     fprintf(f, "hns_gametype ^"%s^"^n", sValue);
  2828.    
  2829.     get_pcvar_string(hns_prefix, sValue, 31);
  2830.     fprintf(f, "hns_prefix ^"%s^"^n", sValue);
  2831.     fprintf(f, "hns_warmup_godmode %i^n", get_pcvar_num(hns_warmup_godmode));
  2832.     fprintf(f, "hns_warmup_respawn %i^n^n", get_pcvar_num(hns_warmup_respawn));
  2833.    
  2834.     new sTeams[CsTeams][16];
  2835.     copy(sTeams[HNS_TEAM_HIDER], 15, "hiders");
  2836.     copy(sTeams[HNS_TEAM_SEEKER], 15, "seekers");
  2837.     fprintf(f, "hns_hiders_knife %i^n", get_pcvar_num(hns_hiders_knife));
  2838.     fprintf(f, "hns_hiders_alivefrags %i^n", get_pcvar_num(hns_hiders_alivefrags));
  2839.     for( new CsTeams:team = HNS_TEAM_HIDER; team < CS_TEAM_SPECTATOR; team++ )
  2840.     {
  2841.         fprintf(f, "hns_%s_grenades %i^n", sTeams[team], get_pcvar_num(hns_grenades[team]));
  2842.         fprintf(f, "hns_%s_grenades_percent %i^n", sTeams[team], get_pcvar_num(hns_grenades_percent[team]));
  2843.         fprintf(f, "hns_%s_flashbangs %i^n", sTeams[team], get_pcvar_num(hns_flashbangs[team]));
  2844.         fprintf(f, "hns_%s_flashbangs_percent %i^n", sTeams[team], get_pcvar_num(hns_flashbangs_percent[team]));
  2845.         fprintf(f, "hns_%s_smokegren %i^n", sTeams[team], get_pcvar_num(hns_smokegren[team]));
  2846.         fprintf(f, "hns_%s_smokegren_percent %i^n", sTeams[team], get_pcvar_num(hns_smokegren_percent[team]));
  2847.         fprintf(f, "hns_%s_armor %i^n^n", sTeams[team], get_pcvar_num(hns_armor[team]));
  2848.     }
  2849.    
  2850.     get_pcvar_string(hnss_prefix, sValue, 31);
  2851.     fprintf(f, "hnss_prefix ^"%s^"^n", sValue);
  2852.     fprintf(f, "hnss_vote_timer %i^n^n", get_pcvar_num(hnss_vote_timer));
  2853.    
  2854.     fprintf(f, "hnss_rounds_wins %i^n", get_pcvar_num(hnss_rounds_wins));
  2855.     fprintf(f, "hnss_rounds_losses %i^n", get_pcvar_num(hnss_rounds_losses));
  2856.     fprintf(f, "hnss_rounds_savewins %i^n^n", get_pcvar_num(hnss_rounds_savewins));
  2857.    
  2858.     fprintf(f, "hnss_points_knife %i^n", get_pcvar_num(hnss_points_knife));
  2859.     fprintf(f, "hnss_points_headshot %i^n", get_pcvar_num(hnss_points_headshot));
  2860.     fprintf(f, "hnss_points_grenade %i^n", get_pcvar_num(hnss_points_grenade));
  2861.     fprintf(f, "hnss_points_kill %i^n", get_pcvar_num(hnss_points_kill));
  2862.     fprintf(f, "hnss_points_suicide %i^n", get_pcvar_num(hnss_points_suicide));
  2863.     fprintf(f, "hnss_points_teamkill %i^n", get_pcvar_num(hnss_points_teamkill));
  2864.     fprintf(f, "hnss_points_roundwin %i^n", get_pcvar_num(hnss_points_roundwin));
  2865.     fprintf(f, "hnss_points_roundwin %i^n", get_pcvar_num(hnss_points_roundwin));
  2866.     fprintf(f, "hnss_points_rounds %i", get_pcvar_num(hnss_points_rounds));
  2867.    
  2868.     fclose(f);
  2869. }
  2870.  
  2871. register_say_command(const sCommand[], const sHandle[], const flags=-1, const sDescription[]="", const FlagManager=-1)
  2872. {
  2873.     new sTemp[64];
  2874.    
  2875.     formatex(sTemp, 63, "say /%s", sCommand);
  2876.     register_clcmd(sTemp, sHandle, flags, sDescription, FlagManager);
  2877.    
  2878.     formatex(sTemp, 63, "say .%s", sCommand);
  2879.     register_clcmd(sTemp, sHandle, flags, sDescription, FlagManager);
  2880.    
  2881.     formatex(sTemp, 63, "say_team /%s", sCommand);
  2882.     register_clcmd(sTemp, sHandle, flags, sDescription, FlagManager);
  2883.    
  2884.     formatex(sTemp, 63, "say_team .%s", sCommand);
  2885.     register_clcmd(sTemp, sHandle, flags, sDescription, FlagManager);
  2886. }
  2887.  
  2888. handle_booster(plr)
  2889. {
  2890.     new sPrefix[16];
  2891.     new Float:fGametime = get_gametime();
  2892.     new Float:fInterval = get_pcvar_float(hns_noboosting_interval);
  2893.     get_pcvar_string(hns_prefix, sPrefix, 15);
  2894.    
  2895.     if( fGametime >= g_fBoostPunishDelay[plr] )
  2896.     {
  2897.         punish_booster(plr);
  2898.         g_fBoostPunishDelay[plr] = fGametime + fInterval;
  2899.     }
  2900.    
  2901.     if( fGametime >= g_fBoostMessageDelay[plr] )
  2902.     {
  2903.         set_hudmessage(255, 50, 50, -1.0, 0.6, 1, 3.0, 3.0, 0.1, 0.1, -1);
  2904.         ShowSyncHudMsg(plr, g_BoostHud, "%s No Boosting Allowed!", sPrefix);
  2905.        
  2906.         g_fBoostMessageDelay[plr] = fGametime + 2.8;
  2907.     }
  2908. }
  2909.  
  2910. punish_booster(plr)
  2911. {
  2912.     new damage = get_pcvar_num(hns_noboosting_damage);
  2913.    
  2914.     if( damage >= get_user_health(plr) )
  2915.     {
  2916.         fm_fakedamage(plr, "anti-boost system", float(damage), DMG_CRUSH);
  2917.     }
  2918.     else
  2919.     {
  2920.         user_slap(plr, damage, 1);
  2921.         user_slap(plr, 0, 1);
  2922.     }
  2923. }
  2924.  
  2925. get_hider_and_seeker(&hider = 0, &seeker = 0, &hider_alive = 0)
  2926. {
  2927.     static CsTeams:team;
  2928.     for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2929.     {
  2930.         if( !g_bConnected[plr] )
  2931.         {
  2932.             continue;
  2933.         }
  2934.        
  2935.         team = cs_get_user_team(plr);
  2936.         if( team == HNS_TEAM_SEEKER && !seeker )
  2937.         {
  2938.             seeker = plr;
  2939.            
  2940.             if( hider && hider_alive )
  2941.             {
  2942.                 break;
  2943.             }
  2944.         }
  2945.         else if( team == HNS_TEAM_HIDER )
  2946.         {
  2947.             if( !hider )
  2948.             {
  2949.                 hider = plr;
  2950.             }
  2951.             if( !hider_alive && g_bAlive[plr] )
  2952.             {
  2953.                 hider_alive = plr;
  2954.                
  2955.                 if( seeker && hider )
  2956.                 {
  2957.                     break;
  2958.                 }
  2959.             }
  2960.         }
  2961.     }
  2962. }
  2963.  
  2964. bool:remove_entities(const class[])
  2965. {
  2966.     new bool:remove = false;
  2967.    
  2968.     new ent = g_MaxPlayers, properties[32], Float:amt;
  2969.     while( (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", class)) )
  2970.     {
  2971.         pev(ent, pev_renderamt, amt);
  2972.         formatex(properties, 31, "^"%i^" ^"%f^" ^"%i^"", pev(ent, pev_rendermode), amt, pev(ent, pev_solid));
  2973.        
  2974.         set_pev(ent, pev_message, properties);
  2975.         set_pev(ent, pev_rendermode, kRenderTransAlpha);
  2976.         set_pev(ent, pev_renderamt, 0.0);
  2977.         set_pev(ent, pev_solid, SOLID_NOT);
  2978.        
  2979.         remove = true;
  2980.     }
  2981.    
  2982.     return remove;
  2983. }
  2984.  
  2985. bool:restore_entities(const class[])
  2986. {
  2987.     new bool:remove = true;
  2988.    
  2989.     new ent = g_MaxPlayers, properties[32], rendermode[4], amt[16], solid[4];
  2990.     while( (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", class)) )
  2991.     {
  2992.         pev(ent, pev_message, properties, 31);
  2993.         parse(properties, rendermode, 3, amt, 15, solid, 3);
  2994.        
  2995.         set_pev(ent, pev_rendermode, str_to_num(rendermode));
  2996.         set_pev(ent, pev_renderamt, str_to_float(amt));
  2997.         set_pev(ent, pev_solid, str_to_num(solid));
  2998.         set_pev(ent, pev_message, g_sBlank);
  2999.        
  3000.         remove = false;
  3001.     }
  3002.    
  3003.     return remove;
  3004. }
  3005.  
  3006. show_scrim_vote()
  3007. {
  3008.     new menu = menu_create("", "mnuScrimType", 0);
  3009.    
  3010.     new sItem[32];
  3011.     formatex(sItem, 31, "Win %i Rounds", get_pcvar_num(hnss_rounds_wins));
  3012.    
  3013.     menu_additem(menu, sItem, "1", 0, -1);
  3014.     menu_additem(menu, "Point System", "2", 0, -1);
  3015.    
  3016.     menu_setprop(menu, MPROP_PERPAGE, 0);
  3017.    
  3018.     for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  3019.     {
  3020.         if( g_bConnected[plr] )
  3021.         {
  3022.             g_bScrimVoted[plr] = false;
  3023.         }
  3024.         else
  3025.         {
  3026.             g_bScrimVoted[plr] = true;
  3027.         }
  3028.     }
  3029.    
  3030.     g_ScrimVoteTimer = get_pcvar_num(hnss_vote_timer) + 1;
  3031.     g_ScrimVoteCount[SCRIM_ROUNDS] = 0;
  3032.     g_ScrimVoteCount[SCRIM_POINTS] = 0;
  3033.    
  3034.     new aMenu[2];
  3035.     aMenu[0] = menu;
  3036.     set_task(1.0, "taskScrimVote", TASK_ID_SCRIMVOTE, aMenu, 2, "b", 0);
  3037.    
  3038.     return 1;
  3039. }
  3040.  
  3041. bool:check_last_vote(plr_to_skip)
  3042. {
  3043.     for( new i = 1; i <= g_MaxPlayers; i++ )
  3044.     {
  3045.         if( !g_bConnected[i]
  3046.         || i == plr_to_skip )
  3047.         {
  3048.             continue;
  3049.         }
  3050.        
  3051.         if( !g_bScrimVoted[i] )
  3052.         {
  3053.             return false;
  3054.         }
  3055.     }
  3056.    
  3057.     return true;
  3058. }
  3059.  
  3060. show_plugin_info(plr)
  3061. {
  3062.     hns_print(plr, "This server is using^x03 HideNSeek v%s^x01, by^x03 Exolent", PLUGIN_VERSION);
  3063.     hns_print(plr, "Type^x03 /hnshelp^x01 for information about^x03 HideNSeek");
  3064.    
  3065.     return 1;
  3066. }
  3067.  
  3068. cs_reset_user_maxspeed(plr)
  3069. {
  3070.     static Float:fMaxSpeed;
  3071.    
  3072.     static clip, ammo;
  3073.     switch( get_user_weapon(plr, clip, ammo) )
  3074.     {
  3075.         case CSW_SG550, CSW_AWP, CSW_G3SG1:
  3076.         {
  3077.             fMaxSpeed = 210.0;
  3078.         }
  3079.         case CSW_M249:
  3080.         {
  3081.             fMaxSpeed = 220.0;
  3082.         }
  3083.         case CSW_AK47:
  3084.         {
  3085.             fMaxSpeed = 221.0;
  3086.         }
  3087.         case CSW_M3, CSW_M4A1:
  3088.         {
  3089.             fMaxSpeed = 230.0;
  3090.         }
  3091.         case CSW_SG552:
  3092.         {
  3093.             fMaxSpeed = 235.0;
  3094.         }
  3095.         case CSW_XM1014, CSW_AUG, CSW_GALIL, CSW_FAMAS:
  3096.         {
  3097.             fMaxSpeed = 240.0;
  3098.         }
  3099.         case CSW_P90:
  3100.         {
  3101.             fMaxSpeed = 245.0;
  3102.         }
  3103.         case CSW_SCOUT:
  3104.         {
  3105.             fMaxSpeed = 260.0;
  3106.         }
  3107.         default:
  3108.         {
  3109.             fMaxSpeed = 250.0;
  3110.         }
  3111.     }
  3112.    
  3113.     engfunc(EngFunc_SetClientMaxspeed, plr, fMaxSpeed);
  3114.     set_pev(plr, pev_maxspeed, fMaxSpeed);
  3115.    
  3116.     return 1;
  3117. }
  3118.  
  3119. chance(plr, maxcount, percent, sClass[], CSW_type=0, sName[]="")
  3120. {
  3121.     if( !maxcount || !percent )
  3122.     {
  3123.         return 0;
  3124.     }
  3125.    
  3126.     new count;
  3127.     for( new i = 0; i < maxcount; i++ )
  3128.     {
  3129.         if( random_num(1, 100) <= percent )
  3130.         {
  3131.             if( count == 0 )
  3132.             {
  3133.                 fm_give_item(plr, sClass);
  3134.             }
  3135.            
  3136.             count++;
  3137.         }
  3138.     }
  3139.    
  3140.     if( count && CSW_type )
  3141.     {
  3142.         if( percent < 100 )
  3143.         {
  3144.             hns_print(plr, "You received %i %s%s! (%i%% chance)", count, sName, (count == 1) ? g_sBlank : g_sS, percent);
  3145.         }
  3146.        
  3147.         cs_set_user_bpammo(plr, CSW_type, count);
  3148.     }
  3149.    
  3150.     return 1;
  3151. }
  3152.  
  3153. get_blind_colors(&red, &green, &blue, &alpha)
  3154. {
  3155.     new sColors[20];
  3156.     get_pcvar_string(hns_blindcolors, sColors, 19);
  3157.    
  3158.     static sRed[5], sGreen[5], sBlue[5], sAlpha[5];
  3159.     if( parse(sColors, sRed, 4, sGreen, 4, sBlue, 4, sAlpha, 4) < 4 )
  3160.     {
  3161.         red = 0;
  3162.         green = 0;
  3163.         blue = 0;
  3164.         alpha = 255;
  3165.        
  3166.         formatex(sColors, 19, "%i %i %i %i", red, green, blue, alpha);
  3167.         set_pcvar_string(hns_blindcolors, sColors);
  3168.        
  3169.         return 0;
  3170.     }
  3171.    
  3172.     red =   equali(sRed, "rand", 0) ?   random(256) : clamp(str_to_num(sRed), 0, 255);
  3173.     green = equali(sGreen, "rand", 0) ? random(256) : clamp(str_to_num(sGreen), 0, 255);
  3174.     blue =  equali(sBlue, "rand", 0)random(256) : clamp(str_to_num(sBlue), 0, 255);
  3175.     alpha = equali(sAlpha, "rand", 0) ? random(256) : clamp(str_to_num(sAlpha), 0, 255);
  3176.    
  3177.     return 1;
  3178. }
  3179.  
  3180. get_hud_colors(&red, &green, &blue)
  3181. {
  3182.     new sColors[20];
  3183.     get_pcvar_string(hns_hudcolors, sColors, 19);
  3184.    
  3185.     static sRed[5], sGreen[5], sBlue[5];
  3186.     if( parse(sColors, sRed, 4, sGreen, 4, sBlue, 4) < 3 )
  3187.     {
  3188.         red = 255;
  3189.         green = 255;
  3190.         blue = 255;
  3191.        
  3192.         formatex(sColors, 19, "%i %i %i", red, green, blue);
  3193.         set_pcvar_string(hns_blindcolors, sColors);
  3194.        
  3195.         return 0;
  3196.     }
  3197.    
  3198.     red =   equali(sRed, "rand", 0) ?   random(256) : clamp(str_to_num(sRed), 0, 255);
  3199.     green = equali(sGreen, "rand", 0) ? random(256) : clamp(str_to_num(sGreen), 0, 255);
  3200.     blue =  equali(sBlue, "rand", 0)random(256) : clamp(str_to_num(sBlue), 0, 255);
  3201.    
  3202.     return 1;
  3203. }
  3204.  
  3205. set_lights(const sLights[])
  3206. {
  3207.     engfunc(EngFunc_LightStyle, 0, sLights);
  3208.     copy(g_sLights, 16, sLights);
  3209.    
  3210.     return 1;
  3211. }
  3212.  
  3213. make_HideWeapon(plr, flags)
  3214. {
  3215.     static i; i = plr ? plr : get_player();
  3216.     if( !i )
  3217.     {
  3218.         return 0;
  3219.     }
  3220.    
  3221.     message_begin(plr ? MSG_ONE : MSG_ALL, g_msgHideWeapon, {0, 0, 0}, plr);
  3222.     write_byte(flags);
  3223.     message_end();
  3224.    
  3225.     return 1;
  3226. }
  3227.  
  3228. make_ScreenFade(plr, Float:fDuration, Float:fHoldtime, red, green, blue, alpha)
  3229. {
  3230.     static i; i = plr ? plr : get_player();
  3231.     if( !i )
  3232.     {
  3233.         return 0;
  3234.     }
  3235.    
  3236.     message_begin(plr ? MSG_ONE : MSG_ALL, g_msgScreenFade, {0, 0, 0}, plr);
  3237.     write_short(floatround(4096.0 * fDuration, floatround_round));
  3238.     write_short(floatround(4096.0 * fHoldtime, floatround_round));
  3239.     write_short(4096);
  3240.     write_byte(red);
  3241.     write_byte(green);
  3242.     write_byte(blue);
  3243.     write_byte(alpha);
  3244.     message_end();
  3245.    
  3246.     return 1;
  3247. }
  3248.  
  3249. emake_TeamInfo(plr, sTeam[])
  3250. {
  3251.     if( !plr )
  3252.     {
  3253.         return 0;
  3254.     }
  3255.    
  3256.     emessage_begin(MSG_ALL, g_msgTeamInfo, {0, 0, 0}, 0);
  3257.     ewrite_byte(plr);
  3258.     ewrite_string(sTeam);
  3259.     emessage_end();
  3260.    
  3261.     return 1;
  3262. }
  3263.  
  3264. make_TeamInfo(plr, sTeam[])
  3265. {
  3266.     if( !plr )
  3267.     {
  3268.         return 0;
  3269.     }
  3270.    
  3271.     message_begin(MSG_ALL, g_msgTeamInfo, {0, 0, 0}, 0);
  3272.     write_byte(plr);
  3273.     write_string(sTeam);
  3274.     message_end();
  3275.    
  3276.     return 1;
  3277. }
  3278.  
  3279. make_Money(plr, money, flash)
  3280. {
  3281.     if( !plr )
  3282.     {
  3283.         return 0;
  3284.     }
  3285.    
  3286.     message_begin(MSG_ONE, g_msgMoney, {0, 0, 0}, plr);
  3287.     write_long(money);
  3288.     write_byte(flash ? 1 : 0);
  3289.     message_end();
  3290.    
  3291.     return 1;
  3292. }
  3293.  
  3294. make_ArmorType(plr, helmet)
  3295. {
  3296.     if( !plr )
  3297.     {
  3298.         return 0;
  3299.     }
  3300.    
  3301.     message_begin(MSG_ONE, g_msgArmorType, {0, 0, 0}, plr);
  3302.     write_byte(helmet);
  3303.     message_end();
  3304.    
  3305.     return 1;
  3306. }
  3307.  
  3308. make_SayText(receiver, sender, sMessage[])
  3309. {
  3310.     if( !sender )
  3311.     {
  3312.         return 0;
  3313.     }
  3314.    
  3315.     message_begin(receiver ? MSG_ONE : MSG_ALL, g_msgSayText, {0, 0, 0}, receiver);
  3316.     write_byte(sender);
  3317.     write_string(sMessage);
  3318.     message_end();
  3319.    
  3320.     return 1;
  3321. }
  3322.  
  3323. hns_print(plr, const sFormat[], any:...)
  3324. {
  3325.     static i; i = plr ? plr : get_player();
  3326.     if( !i )
  3327.     {
  3328.         return 0;
  3329.     }
  3330.    
  3331.     new sPrefix[16];
  3332.     get_pcvar_string(hns_prefix, sPrefix, 15);
  3333.    
  3334.     new sMessage[256];
  3335.     new len = formatex(sMessage, 255, "^x04%s^x01 ", sPrefix);
  3336.     vformat(sMessage[len], 255-len, sFormat, 3);
  3337.     sMessage[192] = '^0';
  3338.    
  3339.     make_SayText(plr, i, sMessage);
  3340.    
  3341.     return 1;
  3342. }
  3343.  
  3344. scrim_print(plr, const sFmt[], any:...)
  3345. {
  3346.     new i = plr ? plr : get_player();
  3347.     if( !i )
  3348.     {
  3349.         return 0;
  3350.     }
  3351.    
  3352.     new sPrefix[16];
  3353.     get_pcvar_string(hnss_prefix, sPrefix, 15);
  3354.    
  3355.     new sMessage[256];
  3356.     new len = formatex(sMessage, 255, "^x04%s^x01 ", sPrefix);
  3357.     vformat(sMessage[len], 255-len, sFmt, 3);
  3358.     sMessage[192] = '^0';
  3359.    
  3360.     make_SayText(plr, i, sMessage);
  3361.    
  3362.     return 1;
  3363. }
  3364.  
  3365. get_player()
  3366. {
  3367.     for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  3368.     {
  3369.         if( g_bConnected[plr] )
  3370.         {
  3371.             return plr;
  3372.         }
  3373.     }
  3374.    
  3375.     return 0;
  3376. }
  3377.  
  3378. /* cstrike -> fakemeta stocks */
  3379. CsTeams:cs_get_user_team(plr, &{CsInternalModel,_}:model=CS_DONTCHANGE)
  3380. {
  3381.     model = CsInternalModel:get_pdata_int(plr, OFFSET_INTERNALMODEL);
  3382.    
  3383.     return CsTeams:get_pdata_int(plr, OFFSET_TEAM);
  3384. }
  3385.  
  3386. cs_set_user_team(plr, {CsTeams,_}:team, {CsInternalModel,_}:model=CS_DONTCHANGE)
  3387. {
  3388.     set_pdata_int(plr, OFFSET_TEAM, _:team);
  3389.     if( model )
  3390.     {
  3391.         set_pdata_int(plr, OFFSET_INTERNALMODEL, _:model);
  3392.     }
  3393.    
  3394.     dllfunc(DLLFunc_ClientUserInfoChanged, plr);
  3395.    
  3396.     make_TeamInfo(plr, g_sTeamInfo[team]);
  3397.    
  3398.     return 1;
  3399. }
  3400.  
  3401. cs_set_user_money(plr, money, flash=1)
  3402. {
  3403.     set_pdata_int(plr, OFFSET_MONEY, money);
  3404.    
  3405.     make_Money(plr, money, flash);
  3406.    
  3407.     return 1;
  3408. }
  3409.  
  3410. cs_set_user_armor(plr, amount, CsArmorType:type)
  3411. {
  3412.     set_pdata_int(plr, OFFSET_ARMORTYPE, _:type);
  3413.     set_pev(plr, pev_armorvalue, float(amount));
  3414.    
  3415.     if( type != CS_ARMOR_NONE )
  3416.     {
  3417.         make_ArmorType(plr, (type == CS_ARMOR_VESTHELM) ? 1 : 0);
  3418.     }
  3419.    
  3420.     return 1;
  3421. }
  3422.  
  3423. __get_ammo_offset(weapon)
  3424. {
  3425.     static offset;
  3426.    
  3427.     switch( weapon )
  3428.     {
  3429.         case CSW_AWP:
  3430.         {
  3431.             offset = OFFSET_AWP_AMMO;
  3432.         }
  3433.         case CSW_SCOUT, CSW_AK47, CSW_G3SG1:
  3434.         {
  3435.             offset = OFFSET_SCOUT_AMMO;
  3436.         }
  3437.         case CSW_FAMAS, CSW_M4A1, CSW_AUG, CSW_SG550, CSW_GALIL, CSW_SG552:
  3438.         {
  3439.             offset = OFFSET_FAMAS_AMMO;
  3440.         }
  3441.         case CSW_M3, CSW_XM1014:
  3442.         {
  3443.             offset = OFFSET_M3_AMMO;
  3444.         }
  3445.         case CSW_USP, CSW_UMP45, CSW_MAC10:
  3446.         {
  3447.             offset = OFFSET_USP_AMMO;
  3448.         }
  3449.         case CSW_FIVESEVEN, CSW_P90:
  3450.         {
  3451.             offset = OFFSET_FIVESEVEN_AMMO;
  3452.         }
  3453.         case CSW_DEAGLE:
  3454.         {
  3455.             offset = OFFSET_DEAGLE_AMMO;
  3456.         }
  3457.         case CSW_P228:
  3458.         {
  3459.             offset = OFFSET_P228_AMMO;
  3460.         }
  3461.         case CSW_GLOCK18, CSW_MP5NAVY, CSW_TMP, CSW_ELITE:
  3462.         {
  3463.             offset = OFFSET_GLOCK_AMMO;
  3464.         }
  3465.         case CSW_FLASHBANG:
  3466.         {
  3467.             offset = OFFSET_FLASHBANG_AMMO;
  3468.         }
  3469.         case CSW_HEGRENADE:
  3470.         {
  3471.             offset = OFFSET_HEGRENADE_AMMO;
  3472.         }
  3473.         case CSW_SMOKEGRENADE:
  3474.         {
  3475.             offset = OFFSET_SMOKEGRENADE_AMMO;
  3476.         }
  3477.         case CSW_C4:
  3478.         {
  3479.             offset = OFFSET_C4_AMMO;
  3480.         }
  3481.         default:
  3482.         {
  3483.             return 0;
  3484.         }
  3485.     }
  3486.    
  3487.     return offset;
  3488. }
  3489. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  3490. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
  3491. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement