HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  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 KI 1=HNS BE");
  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=SZAVAZAS 1=MEGNYER KOROK 2=PONT RENDSZER");
  369. register_concmd("hns_captains", "cmdCaptains", ADMIN_KICK, "-- kivalaszt ket (2) random jatekost akik a csapatok kapitanyai lesznek");
  370. register_concmd("hns_warmup", "cmdWarmup", ADMIN_KICK, "<0|1> -- 0=STOP BEMELEGITO KOR 1=START BEMELEGITO KOR");
  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 mod jelenleg %s kapcsolva!", sPrefix, g_bHnsOn ? "ki" : "be");
  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 %s a HideNSeek-et!", sName, bOn ? "elinditotta" : "leallitotta");
  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 jelenleg %s!", g_bScrimOn ? "bekapcsolva" : "kikapcsolva");
  653. return PLUGIN_HANDLED;
  654. }
  655.  
  656. if( bScrim && !g_bHnsOn )
  657. {
  658. console_print(plr, "[HNS] HideNSeek modnak be kell lenni kapcsolva, hogy engedelyezni tudd a scrim modot!");
  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 a HideNSeek scrim modot!", sName, bScrim ? "elinditotta" : "leallitotta");
  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 modnak be kell lenni kapcsolva, hogy valtoztatni tudd a scrim fajtakat!");
  730. return PLUGIN_HANDLED;
  731. }
  732.  
  733. if( g_bScrimOn )
  734. {
  735. console_print(plr, "[HNS] Nem tudod megvaltoztatni a scrim fajtat mikozben megy a scrim!");
  736. return PLUGIN_HANDLED;
  737. }
  738.  
  739. if( task_exists(TASK_ID_SCRIMVOTE, 0) )
  740. {
  741. console_print(plr, "[HNS] A szavazas hatarozza meg a scrim fajtat!");
  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] Ez a jelenlegi scrim mod!");
  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 : beallitotta a scrim tipust %i megnyert korre!", sName, get_pcvar_num(hnss_rounds_wins));
  760. case SCRIM_POINTS: scrim_print(0, "^x03%s^x01 : beallitotta a scrim tipust Pont Rendszerre!", sName);
  761. default:
  762. {
  763. type = SCRIM_NONE;
  764. scrim_print(0, "^x03%s^x01 : beallitotta a scrim tipust semmire!", 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, "A csapatok kapitanyai:^x03 %s^x01 es^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] A bemelegites jelenleg %s!", g_bWarmup ? "bekapcsolva" : "kikapcsolva");
  828. return PLUGIN_HANDLED;
  829. }
  830.  
  831. if( bWarmup && !g_bHnsOn )
  832. {
  833. console_print(plr, "[HNS] a HideNSeek modnak be kell kapcsolva lennie, hogy tudj inditani bemelegitest!");
  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 a HideNSeek bemelegitest!", sName, bWarmup ? "elinditotta" : "megalitotta");
  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, "A csapatok felcserelodnek ");
  862. new info = get_pcvar_num(hns_teamchange);
  863. if( info > 0 )
  864. {
  865. format(sTeamChange, 63, "%s miutan letelt %i kor", sTeamChange, info); }
  866. else
  867. {
  868. add(sTeamChange, 63, "ha a keresok nyerik a kort");
  869. }
  870.  
  871. new sHiderEquipment[512];
  872. if( get_pcvar_num(hns_hiders_knife) == 2 )
  873. {
  874. copy(sHiderEquipment, 511, "Torott kes<br>");
  875. }
  876. info = get_pcvar_num(hns_grenades[HNS_TEAM_HIDER]);
  877. new percent = get_pcvar_num(hns_grenades_percent[HNS_TEAM_HIDER]);
  878. if( info > 0 && percent > 0 )
  879. {
  880. format(sHiderEquipment, 511, "%s%i Robbano Granat%s", sHiderEquipment, info, info == 1 ? g_sBlank : g_sS);
  881. if( percent < 100 )
  882. {
  883. format(sHiderEquipment, 511, "%s (%i%% robbano granat esely)<br>", sHiderEquipment, percent);
  884. }
  885. else
  886. {
  887. add(sHiderEquipment, 511, "<br>", 0);
  888. }
  889. }
  890. info = get_pcvar_num(hns_flashbangs[HNS_TEAM_HIDER]);
  891. percent = get_pcvar_num(hns_flashbangs_percent[HNS_TEAM_HIDER]);
  892. if( info > 0 && percent > 0 )
  893. {
  894. format(sHiderEquipment, 511, "%s%i Vakito granat%s", sHiderEquipment, info, info == 1 ? g_sBlank : g_sS);
  895. if( percent < 100 )
  896. {
  897. format(sHiderEquipment, 511, "%s (%i%% vakito granat esely)<br>", sHiderEquipment, percent);
  898. }
  899. else
  900. {
  901. add(sHiderEquipment, 511, "<br>", 0);
  902. }
  903. }
  904. info = get_pcvar_num(hns_smokegren[HNS_TEAM_HIDER]);
  905. percent = get_pcvar_num(hns_smokegren_percent[HNS_TEAM_HIDER]);
  906. if( info > 0 && percent > 0 )
  907. {
  908. format(sHiderEquipment, 511, "%s%i Fust Granat%s", sHiderEquipment, info, info == 1 ? g_sBlank : g_sS);
  909. if( percent < 100 )
  910. {
  911. format(sHiderEquipment, 511, "%s (%i%% fust granat esely)<br>", sHiderEquipment, percent);
  912. }
  913. else
  914. {
  915. add(sHiderEquipment, 511, "<br>", 0);
  916. }
  917. }
  918. info = get_pcvar_num(hns_armor[HNS_TEAM_HIDER]);
  919. format(sHiderEquipment, 511, "%sPajzs: %i", sHiderEquipment, info);
  920.  
  921. new sSeekerEquipment[512];
  922. copy(sSeekerEquipment, 511, "Kes");
  923. info = get_pcvar_num(hns_grenades[HNS_TEAM_SEEKER]);
  924. percent = get_pcvar_num(hns_grenades_percent[HNS_TEAM_SEEKER]);
  925. if( info > 0 && percent > 0 )
  926. {
  927. format(sSeekerEquipment, 511, "%s<br>%i Robbano Granat%s", sSeekerEquipment, info, info == 1 ? g_sBlank : g_sS);
  928. if( percent < 100 )
  929. {
  930. format(sSeekerEquipment, 511, "%s (%i%% robbano granat esely)", sSeekerEquipment, percent);
  931. }
  932. }
  933. info = get_pcvar_num(hns_flashbangs[HNS_TEAM_SEEKER]);
  934. percent = get_pcvar_num(hns_flashbangs_percent[HNS_TEAM_SEEKER]);
  935. if( info > 0 && percent > 0 )
  936. {
  937. format(sSeekerEquipment, 511, "%s<br>%i Vakito granat%s", sSeekerEquipment, info, info == 1 ? g_sBlank : g_sS);
  938. if( percent < 100 )
  939. {
  940. format(sSeekerEquipment, 511, "%s (%i%% vakito granat esely)", sSeekerEquipment, percent);
  941. }
  942. }
  943. info = get_pcvar_num(hns_smokegren[HNS_TEAM_SEEKER]);
  944. percent = get_pcvar_num(hns_smokegren_percent[HNS_TEAM_SEEKER]);
  945. if( info > 0 && percent > 0 )
  946. {
  947. format(sSeekerEquipment, 511, "%s<br>%i Fust Granat%s", sSeekerEquipment, info, info == 1 ? g_sBlank : g_sS);
  948. if( percent < 100 )
  949. {
  950. format(sSeekerEquipment, 511, "%s (%i%% fust granat esely)", sSeekerEquipment, percent);
  951. }
  952. }
  953. info = get_pcvar_num(hns_armor[HNS_TEAM_SEEKER]);
  954. format(sSeekerEquipment, 511, "%s<br>Pajzs: %i", sSeekerEquipment, info);
  955.  
  956.  
  957. 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);
  958. show_motd(plr, sText, "HideNSeek Segitseg");
  959. }
  960. else
  961. {
  962. hns_print(plr, "^x03HideNSeek Segitseg^x01 nem talalhato ezen a szerveren.");
  963. }
  964.  
  965. return get_pcvar_num(hns_visiblecommands) ? PLUGIN_CONTINUE : PLUGIN_HANDLED;
  966. }
  967.  
  968. public cmdScrimHelp(plr)
  969. {
  970. if( file_exists(g_sScrimMotd) )
  971. {
  972. new sText[3000];
  973.  
  974. new f = fopen(g_sScrimMotd, "rt"), sData[512];
  975. while( !feof(f) )
  976. {
  977. fgets(f, sData, 511);
  978. add(sText, 2999, sData, 0);
  979. }
  980. fclose(f);
  981.  
  982. new rounds = get_pcvar_num(hnss_rounds_wins);
  983.  
  984. new sRounds[32];
  985. formatex(sRounds, 31, "%i kor %s", rounds, (rounds != 1) ? "egymas utan"" : g_sBlank);
  986.  
  987. new sSave[96];
  988. if( get_pcvar_num(hnss_rounds_savewins) && rounds > 1 )
  989. {
  990. copy(sSave,95, "<br>Ti nyertetek a megadott koroket, ezert ti lesztek ujra a bujok!");
  991. }
  992. else
  993. {
  994. copy(sSave,95, "<br>The amount of rounds you won will reset and you will start over next time you are a hider!");
  995. }
  996.  
  997. new losses = get_pcvar_num(hnss_rounds_losses), sLosses[96];
  998. if( losses )
  999. {
  1000. formatex(sLosses, 95, "<br>Csapatvaltas %i %s ido utan, a vegeter dontetlennel.", losses, (losses != 1) ? g_sS : g_sBlank);
  1001. }
  1002.  
  1003. new sPoints[512], len;
  1004.  
  1005. new points = get_pcvar_num(hnss_points_knife);
  1006. if( points )
  1007. {
  1008. len += format(sPoints[len], 511-len, "Szereztel %i pontot%s kessel olesert<br>", points, (points != 1) ? g_sS : g_sBlank);
  1009. }
  1010.  
  1011. points = get_pcvar_num(hnss_points_headshot);
  1012. if( points )
  1013. {
  1014. len += format(sPoints[len], 511-len, "Szereztel %i extra pontot %s mert fejlovessel oltel!<br>", points, (points != 1) ? g_sS : g_sBlank);
  1015. }
  1016.  
  1017. points = get_pcvar_num(hnss_points_grenade);
  1018. if( points )
  1019. {
  1020. len += format(sPoints[len], 511-len, "Szereztel %i pontot %s mert frost granattal oltel!<br>", points, (points != 1) ? g_sS : g_sBlank);
  1021. }
  1022.  
  1023. points = get_pcvar_num(hnss_points_kill);
  1024. if( points )
  1025. {
  1026. len += format(sPoints[len], 511-len, "Szereztel %i pontot %s mert megoltel valami massal valakit<br>", points, (points != 1) ? g_sS : g_sBlank);
  1027. }
  1028.  
  1029. points = get_pcvar_num(hnss_points_suicide);
  1030. if( points )
  1031. {
  1032. len += format(sPoints[len], 511-len, "Elvesztettel %i pontot%s mert megolted magad<br>", points, (points != 1) ? g_sS : g_sBlank);
  1033. }
  1034.  
  1035. points = get_pcvar_num(hnss_points_teamkill);
  1036. if( points )
  1037. {
  1038. len += format(sPoints[len], 511-len, "Elvesztettel %i pontot %s mert megolted a csapattarsadat!<br>", points, (points != 1) ? g_sS : g_sBlank);
  1039. }
  1040.  
  1041. points = get_pcvar_num(hnss_points_roundwin);
  1042. if( points )
  1043. {
  1044. len += format(sPoints[len], 511-len, "Szereztel %i pontot %s mert megnyertetek a kort!<br>", points, (points != 1) ? g_sS : g_sBlank);
  1045. }
  1046.  
  1047. points = get_pcvar_num(hnss_points_roundlose);
  1048. if( points )
  1049. {
  1050. len += format(sPoints[len], 511-len, "Elvesztettel %i pontot %s mert elvesztettetek a kort!<br>", points, (points != 1) ? g_sS : g_sBlank);
  1051. }
  1052.  
  1053. new ps_rounds = get_pcvar_num(hnss_points_rounds);
  1054.  
  1055. 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);
  1056.  
  1057. show_motd(plr, sText, "HideNSeek Scrim Segitseg");
  1058. }
  1059. else
  1060. {
  1061. scrim_print(plr, "^x03HideNSeek Scrim Segitseg^x01 nem talalhato a szerveren.");
  1062. }
  1063.  
  1064. return get_pcvar_num(hns_visiblecommands) ? PLUGIN_CONTINUE : PLUGIN_HANDLED;
  1065. }
  1066.  
  1067. public cmdPoints(plr)
  1068. {
  1069. if( g_bScrimOn )
  1070. {
  1071. switch( g_ScrimType )
  1072. {
  1073. case SCRIM_POINTS:
  1074. {
  1075. scrim_print(0, "Scrim pontok:^x03 Csapat 1 [%i]^x01 ::^x03 Csapat 2 [%i]", g_ScrimScores[g_ScrimTeams[1]], g_ScrimScores[g_ScrimTeams[2]]);
  1076. }
  1077. case SCRIM_ROUNDS:
  1078. {
  1079. scrim_print(0, "A bujok nyertek^x03 %i / %i^x01 kort!", g_ScrimRounds[HNS_TEAM_HIDER], g_ScrimMaxRounds);
  1080. }
  1081. }
  1082. }
  1083. else
  1084. {
  1085. scrim_print(plr, "Jelenleg nincs bekapcsolva a scrim.");
  1086. }
  1087.  
  1088. return get_pcvar_num(hns_visiblecommands) ? PLUGIN_CONTINUE : PLUGIN_HANDLED;
  1089. }
  1090.  
  1091. public cmdRounds(plr)
  1092. {
  1093. if( g_bScrimOn )
  1094. {
  1095. switch( g_ScrimType )
  1096. {
  1097. case SCRIM_POINTS:
  1098. {
  1099. new half = (g_ScrimMaxRounds / 2), rounds;
  1100. if( g_ScrimRounds[HNS_TEAM_HIDER] < half )
  1101. {
  1102. rounds = half - g_ScrimRounds[HNS_TEAM_HIDER];
  1103. }
  1104. else
  1105. {
  1106. rounds = g_ScrimMaxRounds - g_ScrimRounds[HNS_TEAM_HIDER];
  1107. }
  1108.  
  1109. 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);
  1110.  
  1111. rounds = g_ScrimMaxRounds - g_ScrimRounds[HNS_TEAM_HIDER];
  1112. 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);
  1113. }
  1114. case SCRIM_ROUNDS:
  1115. {
  1116. new rounds = g_ScrimMaxRounds - g_ScrimRounds[HNS_TEAM_HIDER];
  1117. scrim_print(0, "Hiders need^x03 %i round%s^x01 to win the scrim!", rounds, (rounds != 1) ? g_sS : g_sBlank);
  1118. }
  1119. }
  1120. }
  1121. else
  1122. {
  1123. scrim_print(plr, "Jelenleg nincs bekapcsolva a scrim.");
  1124. }
  1125.  
  1126. return get_pcvar_num(hns_visiblecommands) ? PLUGIN_CONTINUE : PLUGIN_HANDLED;
  1127. }
  1128.  
  1129. public cmdTeam(plr)
  1130. {
  1131. if( g_bScrimOn )
  1132. {
  1133. switch( g_ScrimType )
  1134. {
  1135. case SCRIM_POINTS:
  1136. {
  1137. scrim_print(plr, "Te jelenleg a ^x03%i^x01 csapatban vagy!", g_ScrimTeamNums[cs_get_user_team(plr)]);
  1138. }
  1139. case SCRIM_ROUNDS:
  1140. {
  1141. new CsTeams:team = cs_get_user_team(plr);
  1142. if( team == HNS_TEAM_HIDER )
  1143. {
  1144. scrim_print(plr, "Te a ^x03 Bujo^x01 csapatban vagy!");
  1145. }
  1146. else if( team == HNS_TEAM_SEEKER )
  1147. {
  1148. scrim_print(plr, "Te a ^x03 Kereso^x01 csapatban vagy!");
  1149. }
  1150. else
  1151. {
  1152. scrim_print(plr, "Nem vagy semelyik scrim csapatban!");
  1153. }
  1154. }
  1155. }
  1156. }
  1157. else
  1158. {
  1159. scrim_print(plr, "Jelenleg nincs bekapcsolva a scrim.");
  1160. }
  1161.  
  1162. return get_pcvar_num(hns_visiblecommands) ? PLUGIN_CONTINUE : PLUGIN_HANDLED;
  1163. }
  1164.  
  1165. public fwdClientCommandPost(plr)
  1166. {
  1167. unregister_forward(FM_ClientCommand, g_FwdClientCommand_post, 1);
  1168.  
  1169. g_bNonSpawnEvent[plr] = false;
  1170.  
  1171. return FMRES_HANDLED;
  1172. }
  1173.  
  1174. public fwdSpawn(ent)
  1175. {
  1176. if( !pev_valid(ent) || ent == g_HostageEnt )
  1177. {
  1178. return FMRES_IGNORED;
  1179. }
  1180.  
  1181. new sClass[32];
  1182. pev(ent, pev_classname, sClass, 31);
  1183.  
  1184. for( new i = 0; i < MAX_REMOVED_ENTITIES; i++ )
  1185. {
  1186. if( equal(sClass, g_sRemoveEntities[i]) )
  1187. {
  1188. engfunc(EngFunc_RemoveEntity, ent);
  1189. return FMRES_SUPERCEDE;
  1190. }
  1191. }
  1192.  
  1193. return FMRES_IGNORED;
  1194. }
  1195.  
  1196. public fwdTouch(booster, plr)
  1197. {
  1198. if( !g_bHnsOn
  1199. || !pev_valid(booster) || !pev_valid(plr)
  1200. || !(0 < booster <= g_MaxPlayers) || !(0 < plr <= g_MaxPlayers)
  1201. || !g_bAlive[booster] || !g_bAlive[plr] )
  1202. {
  1203. return FMRES_IGNORED;
  1204. }
  1205.  
  1206. new boosting = get_pcvar_num(hns_noboosting);
  1207.  
  1208. if( boosting == get_pcvar_num(hns_semiclip)
  1209. || boosting != 2 && !(boosting == 1 && cs_get_user_team(booster) == cs_get_user_team(plr)) )
  1210. {
  1211. return FMRES_IGNORED;
  1212. }
  1213.  
  1214. new Float:vBoosterOrigin[3], Float:vPlrOrigin[3];
  1215. pev(booster, pev_origin, vBoosterOrigin);
  1216. pev(plr, pev_origin, vPlrOrigin);
  1217.  
  1218. if( !(49.0 < (vPlrOrigin[2] - vBoosterOrigin[2]) < 73.0) )
  1219. {
  1220. return FMRES_IGNORED;
  1221. }
  1222.  
  1223. switch( get_pcvar_num(hns_noboosting_punish) )
  1224. {
  1225. case 3:
  1226. {
  1227. handle_booster(booster);
  1228. handle_booster(plr);
  1229. }
  1230. case 2:
  1231. {
  1232. handle_booster(booster);
  1233. }
  1234. case 1:
  1235. {
  1236. handle_booster(plr);
  1237. }
  1238. }
  1239.  
  1240. return FMRES_IGNORED;
  1241. }
  1242.  
  1243. public fwdCmdStart(plr, ucHandle, seed)
  1244. {
  1245. if( !g_bHnsOn || !g_bAlive[plr] )
  1246. {
  1247. return FMRES_IGNORED;
  1248. }
  1249.  
  1250. static clip, ammo;
  1251. if( get_user_weapon(plr, clip, ammo) != CSW_KNIFE )
  1252. {
  1253. return FMRES_IGNORED;
  1254. }
  1255.  
  1256. new CsTeams:team = cs_get_user_team(plr);
  1257.  
  1258. if( team == HNS_TEAM_HIDER )
  1259. {
  1260. new button = get_uc(ucHandle, UC_Buttons);
  1261.  
  1262. if( button&IN_ATTACK )
  1263. {
  1264. button &= ~IN_ATTACK;
  1265. }
  1266. if( button&IN_ATTACK2 )
  1267. {
  1268. button &= ~IN_ATTACK2;
  1269. }
  1270.  
  1271. set_uc(ucHandle, UC_Buttons, button);
  1272.  
  1273. return FMRES_SUPERCEDE;
  1274. }
  1275. else if( team == HNS_TEAM_SEEKER )
  1276. {
  1277. if( g_bDisableSlash )
  1278. {
  1279. new button = get_uc(ucHandle, UC_Buttons);
  1280.  
  1281. if( button&IN_ATTACK )
  1282. {
  1283. button &= ~IN_ATTACK;
  1284. button |= IN_ATTACK2;
  1285. }
  1286.  
  1287. set_uc(ucHandle, UC_Buttons, button);
  1288.  
  1289. return FMRES_SUPERCEDE;
  1290. }
  1291. }
  1292.  
  1293. return FMRES_IGNORED;
  1294. }
  1295.  
  1296. public fwdSetModel(ent, sModel[])
  1297. {
  1298. if( !g_bHnsOn )
  1299. {
  1300. return FMRES_IGNORED;
  1301. }
  1302.  
  1303. if( !pev_valid(ent) || !equal(sModel, "models/w_", 9) || equal(sModel, "models/w_weaponbox.mdl", 0) )
  1304. {
  1305. return FMRES_IGNORED;
  1306. }
  1307.  
  1308. new owner = pev(ent, pev_owner);
  1309. if( !(0 < owner <= g_MaxPlayers) )
  1310. {
  1311. return FMRES_IGNORED;
  1312. }
  1313.  
  1314. new sClass[32];
  1315. pev(ent, pev_classname, sClass, 31);
  1316.  
  1317. if( equal(sClass, "weapon_shield", 0) )
  1318. {
  1319. set_pev(ent, pev_effects, EF_NODRAW);
  1320. set_task(0.1, "taskRemoveShield", ent);
  1321.  
  1322. return FMRES_IGNORED;
  1323. }
  1324.  
  1325. if( !equal(sClass, "weaponbox", 0) )
  1326. {
  1327. return FMRES_IGNORED;
  1328. }
  1329.  
  1330. for( new i = g_MaxPlayers + 1; i <= g_MaxEntities; i++ )
  1331. {
  1332. if( !pev_valid(i) )
  1333. {
  1334. continue;
  1335. }
  1336.  
  1337. if( pev(i, pev_owner) == ent )
  1338. {
  1339. dllfunc(DLLFunc_Think, ent);
  1340. break;
  1341. }
  1342. }
  1343.  
  1344. return FMRES_IGNORED;
  1345. }
  1346.  
  1347. public fwdClientKill(plr)
  1348. {
  1349. if( !g_bHnsOn )
  1350. {
  1351. return FMRES_IGNORED;
  1352. }
  1353.  
  1354. if( get_pcvar_num(hns_disablekill) )
  1355. {
  1356. new Float:fGametime = get_gametime();
  1357. if( fGametime >= g_fKillMsgDelay[plr] )
  1358. {
  1359. g_fKillMsgDelay[plr] = fGametime + 1.0;
  1360.  
  1361. hns_print(plr, "Nem tudod megolni magad!");
  1362. }
  1363.  
  1364. return FMRES_SUPERCEDE;
  1365. }
  1366.  
  1367. return FMRES_IGNORED;
  1368. }
  1369.  
  1370. public fwdPlayerPreThink(plr)
  1371. {
  1372. if( !g_bHnsOn )
  1373. {
  1374. return FMRES_IGNORED;
  1375. }
  1376.  
  1377. new semiclip = get_pcvar_num(hns_semiclip);
  1378.  
  1379. if( g_bAlive[plr] )
  1380. {
  1381. new CsTeams:team = cs_get_user_team(plr);
  1382. if( g_HideTimer > 0 && team == HNS_TEAM_SEEKER )
  1383. {
  1384. set_pev(plr, pev_maxspeed, -1.0);
  1385. set_pev(plr, pev_velocity, Float:{0.0, 0.0, 0.0});
  1386. //set_pev(plr, pev_flags, pev(plr, pev_flags) | FL_FROZEN);
  1387. }
  1388.  
  1389. new footsteps = get_pcvar_num(hns_footsteps);
  1390. if( footsteps && (footsteps == 3 || footsteps == _:team) )
  1391. {
  1392. set_pev(plr, pev_flTimeStepSound, 999);
  1393. }
  1394.  
  1395. if( get_pcvar_num(hns_noslowdown) )
  1396. {
  1397. set_pev(plr, pev_fuser2, 0.0);
  1398. }
  1399.  
  1400. if( g_bWarmup && get_pcvar_num(hns_warmup_godmode) )
  1401. {
  1402. fm_set_user_godmode(plr, 1);
  1403. }
  1404.  
  1405. if( semiclip )
  1406. {
  1407. // thanks Jon for code
  1408.  
  1409. new target, body;
  1410. get_user_aiming(plr, target, body, 9999);
  1411.  
  1412. if( 0 < target <= g_MaxPlayers && g_bAlive[target] )
  1413. {
  1414. new CsTeams:targetTeam = cs_get_user_team(target);
  1415. if( semiclip == 2 || targetTeam == team )
  1416. {
  1417. new sName[32];
  1418. get_user_name(target, sName, 31);
  1419.  
  1420. new sMessage[64];
  1421. if( targetTeam == team )
  1422. {
  1423. formatex(sMessage, 63, "Barat: %s^nElete: %i", sName, get_user_health(target));
  1424. }
  1425. else
  1426. {
  1427. formatex(sMessage, 63, "Ellenseg: %s", sName);
  1428. }
  1429.  
  1430. if( targetTeam == CS_TEAM_CT )
  1431. {
  1432. set_hudmessage(0, 63, 127, -1.0, -1.0, 0, 0.0, 0.1, 0.0, 0.0, -1);
  1433. }
  1434. else if( targetTeam == CS_TEAM_T )
  1435. {
  1436. set_hudmessage(127, 0, 0, -1.0, -1.0, 0, 0.0, 0.1, 0.0, 0.0, -1);
  1437. }
  1438.  
  1439. show_hudmessage(plr, "%s", sMessage);
  1440. }
  1441. }
  1442. }
  1443. }
  1444.  
  1445. static LastThink, i;
  1446.  
  1447. if( plr < LastThink ) // player think loop started again
  1448. {
  1449. for( i = 1; i <= g_MaxPlayers; i++ )
  1450. {
  1451. if( !g_bConnected[i] || !g_bAlive[i] )
  1452. {
  1453. g_bSolid[i] = false;
  1454. continue;
  1455. }
  1456.  
  1457. g_Team[i] = cs_get_user_team(i);
  1458. g_bSolid[i] = bool:(pev(i, pev_solid) == SOLID_SLIDEBOX);
  1459. }
  1460. }
  1461.  
  1462. LastThink = plr;
  1463.  
  1464. if( !g_bSolid[plr] || !semiclip )
  1465. {
  1466. return FMRES_IGNORED;
  1467. }
  1468.  
  1469. for( i = 1; i <= g_MaxPlayers; i++ )
  1470. {
  1471. if( !g_bSolid[i] || g_bRestoreSolid[i] || i == plr )
  1472. {
  1473. continue;
  1474. }
  1475.  
  1476. if( semiclip == 2 || g_Team[plr] == g_Team[i] )
  1477. {
  1478. set_pev(i, pev_solid, SOLID_NOT);
  1479. g_bRestoreSolid[i] = true;
  1480. }
  1481. }
  1482.  
  1483. return FMRES_IGNORED;
  1484. }
  1485.  
  1486. public fwdPlayerPostThink(plr)
  1487. {
  1488. static i;
  1489.  
  1490. for( i = 1; i <= g_MaxPlayers; i++ )
  1491. {
  1492. if( g_bRestoreSolid[i] )
  1493. {
  1494. set_pev(i, pev_solid, SOLID_SLIDEBOX);
  1495. g_bRestoreSolid[i] = false;
  1496. }
  1497. }
  1498.  
  1499. return FMRES_IGNORED;
  1500. }
  1501.  
  1502. public fwdAddToFullPackPost(es, e, ent, host, hostflags, player, pSet)
  1503. {
  1504. if( !g_bHnsOn )
  1505. {
  1506. return FMRES_IGNORED;
  1507. }
  1508.  
  1509. if( player )
  1510. {
  1511. if( g_bSolid[host] && g_bSolid[ent] )
  1512. {
  1513. new semiclip = get_pcvar_num(hns_semiclip);
  1514. if( semiclip == 2 || g_Team[host] == g_Team[ent] )
  1515. {
  1516. set_es(es, ES_Solid, SOLID_NOT);
  1517.  
  1518. static Float:fOldAlpha;
  1519.  
  1520. new Float:fAlpha = get_pcvar_float(hns_semiclip_alpha);
  1521. if( fAlpha < 255.0 )
  1522. {
  1523. set_es(es, ES_RenderMode, kRenderTransAlpha);
  1524. set_es(es, ES_RenderAmt, fAlpha);
  1525. }
  1526. else if( fOldAlpha < 255.0 )
  1527. {
  1528. set_es(es, ES_RenderMode, kRenderNormal);
  1529. set_es(es, ES_RenderAmt, 16.0);
  1530. }
  1531.  
  1532. fOldAlpha = fAlpha;
  1533. }
  1534. }
  1535. }
  1536.  
  1537. return FMRES_IGNORED;
  1538. }
  1539.  
  1540. public fwdGetGameDescription()
  1541. {
  1542. if( !g_bHnsOn )
  1543. {
  1544. return FMRES_IGNORED;
  1545. }
  1546.  
  1547. new sGameType[32];
  1548. get_pcvar_string(hns_gametype, sGameType, 31);
  1549.  
  1550. if( !strlen(sGameType) || had_older_version(sGameType) )
  1551. {
  1552. formatex(sGameType, 31, "HideNSeek verzioja: %s", PLUGIN_VERSION);
  1553.  
  1554. set_pcvar_string(hns_gametype, sGameType);
  1555. }
  1556.  
  1557. forward_return(FMV_STRING, sGameType);
  1558. return FMRES_SUPERCEDE;
  1559. }
  1560.  
  1561. public fwdPlayerSpawn(plr)
  1562. {
  1563. g_bAlive[plr] = true;
  1564.  
  1565. if( !g_bHnsOn )
  1566. {
  1567. return PLUGIN_CONTINUE;
  1568. }
  1569.  
  1570. new CsTeams:team = cs_get_user_team(plr);
  1571. if( team != HNS_TEAM_SEEKER && team != HNS_TEAM_HIDER )
  1572. {
  1573. return PLUGIN_CONTINUE;
  1574. }
  1575.  
  1576. if( !g_bFirstSpawn[plr] )
  1577. {
  1578. show_plugin_info(plr);
  1579.  
  1580. set_task(360.0, "taskShowPluginInfo", TASK_ID_SHOWPLUGININFO + plr, g_sBlank, 0, g_sB, 0);
  1581.  
  1582. g_bFirstSpawn[plr] = true;
  1583. }
  1584.  
  1585. set_task(0.3, "taskStripWeapons", plr + TASK_ID_STRIPWEAPONS, g_sBlank, 0, g_sBlank, 0);
  1586.  
  1587. new param[2];
  1588. param[0] = _:team;
  1589. set_task(0.6, "taskGiveKnife", plr + TASK_ID_GIVEKNIFE, param, 2, g_sBlank, 0);
  1590. set_task(0.9, "taskCheckModel", plr + TASK_ID_CHECKMODEL, param, 2, g_sBlank, 0);
  1591.  
  1592. if( g_bWeaponsGiven )
  1593. {
  1594. set_task(0.6, "taskGiveWeapons", plr + TASK_ID_GIVEWEAPONS, param, 2, g_sBlank, 0);
  1595. }
  1596.  
  1597. if( g_bScrimOn && g_ScrimType == SCRIM_POINTS )
  1598. {
  1599. new CsTeams:team1 = g_ScrimTeams[1];
  1600. new CsTeams:team2 = g_ScrimTeams[2];
  1601.  
  1602. scrim_print(plr, "Te a ^x03%i csapatban vagy^x01!", g_ScrimTeamNums[cs_get_user_team(plr)]);
  1603. scrim_print(plr, "Scrim scores:^x03 Csapat 1 [%i]^x01 ::^x03 Csapat 2 [%i]", g_ScrimScores[team1], g_ScrimScores[team2]);
  1604. }
  1605.  
  1606. return PLUGIN_CONTINUE;
  1607. }
  1608.  
  1609. public fwdSetVoice(receiver, sender, bool:bListen)
  1610. {
  1611. if( !g_bConnected[receiver]
  1612. || !g_bConnected[sender]
  1613. || receiver == sender
  1614. || !g_bScrimOn )
  1615. {
  1616. return FMRES_IGNORED;
  1617. }
  1618.  
  1619. if( cs_get_user_team(receiver) == cs_get_user_team(sender) )
  1620. {
  1621. engfunc(EngFunc_SetClientListening, receiver, sender, 1);
  1622. }
  1623. else
  1624. {
  1625. engfunc(EngFunc_SetClientListening, receiver, sender, 0);
  1626. }
  1627.  
  1628. return FMRES_SUPERCEDE;
  1629. }
  1630.  
  1631. public messageHideWeapon(msgid, dest, plr)
  1632. {
  1633. if( !g_bHnsOn )
  1634. {
  1635. return PLUGIN_CONTINUE;
  1636. }
  1637.  
  1638. if( get_pcvar_num(hns_money) == 0 )
  1639. {
  1640. set_msg_arg_int(1, ARG_BYTE, get_msg_arg_int(1)|HIDE_MONEY);
  1641. }
  1642.  
  1643. return PLUGIN_CONTINUE;
  1644. }
  1645.  
  1646. public messageScreenFade(msgid, dest, plr)
  1647. {
  1648. if( !g_bHnsOn )
  1649. {
  1650. return PLUGIN_CONTINUE;
  1651. }
  1652.  
  1653. new noflash = get_pcvar_num(hns_noflash);
  1654. if( !noflash )
  1655. {
  1656. return PLUGIN_CONTINUE;
  1657. }
  1658.  
  1659. if( get_msg_arg_int(4) == 255 && get_msg_arg_int(5) == 255 && get_msg_arg_int(6) == 255 )
  1660. {
  1661. // flashbang
  1662.  
  1663. if( noflash == _:cs_get_user_team(plr) )
  1664. {
  1665. return PLUGIN_HANDLED;
  1666. }
  1667. }
  1668.  
  1669. return PLUGIN_CONTINUE;
  1670. }
  1671.  
  1672. public eventRestartAttempt()
  1673. {
  1674. new players[32], pnum;
  1675. get_players(players, pnum, g_sA);
  1676.  
  1677. for( new i = 0; i < pnum; i++ )
  1678. {
  1679. g_bNonSpawnEvent[players[i]] = true;
  1680. }
  1681.  
  1682. return PLUGIN_CONTINUE;
  1683. }
  1684.  
  1685. public eventResetHUD(plr)
  1686. {
  1687. if( g_bHnsOn && get_pcvar_num(hns_money) == 0 )
  1688. {
  1689. make_HideWeapon(plr, HIDE_MONEY);
  1690. }
  1691.  
  1692. if( is_user_alive(plr) )
  1693. {
  1694. if( g_bNonSpawnEvent[plr] )
  1695. {
  1696. g_bNonSpawnEvent[plr] = false;
  1697. }
  1698. else
  1699. {
  1700. fwdPlayerSpawn(plr);
  1701. }
  1702. }
  1703.  
  1704. return PLUGIN_CONTINUE;
  1705. }
  1706.  
  1707. public eventMoney(plr)
  1708. {
  1709. if( !g_bHnsOn )
  1710. {
  1711. return PLUGIN_CONTINUE;
  1712. }
  1713.  
  1714. new money = get_pcvar_num(hns_money);
  1715. money = clamp(money, -1, 16000);
  1716.  
  1717. if( money >= 0 )
  1718. {
  1719. cs_set_user_money(plr, money, 0);
  1720. }
  1721. if( money == 0 && g_OldMoney != 0 )
  1722. {
  1723. make_HideWeapon(plr, HIDE_MONEY);
  1724. }
  1725.  
  1726. g_OldMoney = money;
  1727.  
  1728. return PLUGIN_HANDLED;
  1729. }
  1730.  
  1731. public eventNewRound()
  1732. {
  1733. if( !g_bHnsOn )
  1734. {
  1735. return PLUGIN_CONTINUE;
  1736. }
  1737.  
  1738. if( g_bDisableSlash )
  1739. {
  1740. new rounds = get_pcvar_num(hns_nubslash);
  1741. if( rounds > 0 && g_RoundsLost >= rounds )
  1742. {
  1743. hns_print(0, "A keresok hasznalhatjak nubslash-t miutan elvesztettek %i kort %s!",\
  1744. rounds, (rounds == 1) ? g_sBlank : "egymas utan");
  1745.  
  1746. g_bDisableSlash = false;
  1747. }
  1748. }
  1749.  
  1750. g_HideTimer = get_pcvar_num(hns_hidetime);
  1751.  
  1752. return PLUGIN_CONTINUE;
  1753. }
  1754.  
  1755. public eventTerrWin()
  1756. {
  1757. if( g_bDisableSlash )
  1758. {
  1759. g_RoundsLost++;
  1760. }
  1761.  
  1762. return PLUGIN_CONTINUE;
  1763. }
  1764.  
  1765. public eventRestartRound()
  1766. {
  1767. g_RoundsLost = 0;
  1768. g_RoundsEnded = 0;
  1769. g_bDisableSlash = true;
  1770.  
  1771. g_bWeaponsGiven = false;
  1772.  
  1773. g_HideTimer = -1;
  1774.  
  1775. if( !g_bScrimOn
  1776. || g_ScrimType != SCRIM_ROUNDS
  1777. || !g_ScrimSaveWins )
  1778. {
  1779. g_ScrimRounds[HNS_TEAM_HIDER] = 0;
  1780. }
  1781.  
  1782. return PLUGIN_CONTINUE;
  1783. }
  1784.  
  1785. public eventCurWeapon(plr)
  1786. {
  1787. if( !g_bHnsOn )
  1788. {
  1789. return PLUGIN_CONTINUE;
  1790. }
  1791.  
  1792. if( cs_get_user_team(plr) == HNS_TEAM_HIDER && get_pcvar_num(hns_hiders_knife) == 1 )
  1793. {
  1794. new sModel[32];
  1795.  
  1796. pev(plr, pev_viewmodel2, sModel, 31);
  1797. if( equali(sModel, g_sKnifeModel_v, 0) )
  1798. {
  1799. set_pev(plr, pev_viewmodel2, g_sBlank);
  1800. }
  1801.  
  1802. pev(plr, pev_weaponmodel2, sModel, 31);
  1803. if( equali(sModel, g_sKnifeModel_w, 0) )
  1804. {
  1805. set_pev(plr, pev_weaponmodel2, g_sBlank);
  1806. }
  1807. }
  1808.  
  1809. return PLUGIN_CONTINUE;
  1810. }
  1811.  
  1812. public TaskRespawn(plr)
  1813. {
  1814. // thanks GHW_Chronic & MeRcyLeZZ
  1815. set_pev(plr, pev_deadflag, DEAD_RESPAWNABLE);
  1816. dllfunc(DLLFunc_Think, plr);
  1817. }
  1818.  
  1819. public eventDeathMsg()
  1820. {
  1821. new victim = read_data(2);
  1822. g_bAlive[victim] = false;
  1823.  
  1824. if( g_bWarmup && get_pcvar_num(hns_warmup_respawn) )
  1825. {
  1826. set_task(1.0, "TaskRespawn", victim);
  1827. }
  1828.  
  1829. if( !g_bScrimOn
  1830. || g_ScrimType != SCRIM_POINTS )
  1831. {
  1832. return PLUGIN_CONTINUE;
  1833. }
  1834.  
  1835. new sNameVictim[32];
  1836. get_user_name(victim, sNameVictim, 31);
  1837.  
  1838. new CsTeams:vTeam = cs_get_user_team(victim);
  1839.  
  1840. new killer = read_data(1);
  1841. if( !killer || killer == victim )
  1842. {
  1843. g_ScrimScores[vTeam] -= g_PointsSuicide;
  1844.  
  1845. scrim_print(0, "^x03%s^x01 elvesztett^x03 %i pointot%s^x01 mert az o ^x03 csapata ^x03 ongyilos lett^x01!", sNameVictim, g_PointsSuicide, g_PointsSuicide == 1 ? "" : "s");
  1846.  
  1847. return PLUGIN_CONTINUE;
  1848. }
  1849.  
  1850. new sNameKiller[32];
  1851. get_user_name(killer, sNameKiller, 31);
  1852.  
  1853. new CsTeams:kTeam = cs_get_user_team(killer);
  1854.  
  1855. if( kTeam == vTeam )
  1856. {
  1857. g_ScrimScores[vTeam] -= g_PointsTeamKill;
  1858.  
  1859. scrim_print(0, "^x03%s^x01 elvesztett^x03 %i pontot%s^x01mert az o^x03 csapataban ^x01 egy^x03 csapattars gyilkossag torent^x01!", sNameKiller, g_PointsTeamKill, g_PointsKill == 1 ? "" : "s");
  1860.  
  1861. return PLUGIN_CONTINUE;
  1862. }
  1863.  
  1864. new sWeapon[32];
  1865. read_data(4, sWeapon, 31);
  1866.  
  1867. if( equali(sWeapon, "grenade", 0) || equali(sWeapon, "frostgrenade", 0) )
  1868. {
  1869. g_ScrimScores[kTeam] += g_PointsGrenade;
  1870.  
  1871. new sMessage[192]; /* vformat() only allows 3 arguments max ... lame */
  1872. formatex(sMessage, 191, "^x03%s^x01 szerzett^x03 %i pontot%s^x01 mert az o^x03 team's score^x01 for^x03 killing %s with a %s^x01!", sNameKiller, g_PointsGrenade, g_PointsGrenade == 1 ? "" : "s", sNameVictim, sWeapon);
  1873. scrim_print(0, "%s", sMessage);
  1874.  
  1875. return PLUGIN_CONTINUE;
  1876. }
  1877.  
  1878. if( equali(sWeapon, "knife", 0) )
  1879. {
  1880. g_ScrimScores[kTeam] += g_PointsKnife;
  1881.  
  1882. new sMessage[192];
  1883. 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);
  1884. scrim_print(0, "%s", sMessage);
  1885. }
  1886. else
  1887. {
  1888. g_ScrimScores[kTeam] += g_PointsKill;
  1889.  
  1890. new sMessage[192]; /* vformat() only allows 3 arguments max ... lame */
  1891. formatex(sMessage, 191, "^x03%s^x01 szerzett^x03 %i pontot%s^x01 mert az o^x03 csapat pontja^x01 for^x03 killing %s^x01!", sNameKiller, g_PointsKill, g_PointsKill == 1 ? "s" : "", sNameVictim);
  1892. scrim_print(0, "%s", sMessage);
  1893. }
  1894.  
  1895. if( read_data(3) )
  1896. {
  1897. g_ScrimScores[kTeam] += g_PointsHeadshot;
  1898.  
  1899. scrim_print(0, "^x03%s^x01 szerzett^x03 %d extra pontot%s^x01 mert adott egy ^x03fejlovest^x01!", sNameKiller, g_PointsHeadshot, g_PointsHeadshot == 1 ? "" : "s");
  1900. }
  1901.  
  1902. return PLUGIN_CONTINUE;
  1903. }
  1904.  
  1905. public logeventRoundStart()
  1906. {
  1907. if( !g_bHnsOn )
  1908. {
  1909. if( g_bRemovedBreakables )
  1910. {
  1911. g_bRemovedBreakables = restore_entities(g_sClassBreakable);
  1912. }
  1913.  
  1914. return PLUGIN_CONTINUE;
  1915. }
  1916.  
  1917. if( get_pcvar_num(hns_removebreakables) )
  1918. {
  1919. g_bRemovedBreakables = remove_entities(g_sClassBreakable);
  1920. }
  1921. else if( g_bRemovedBreakables )
  1922. {
  1923. g_bRemovedBreakables = restore_entities(g_sClassBreakable);
  1924. }
  1925.  
  1926. if( get_pcvar_num(hns_removedoors) )
  1927. {
  1928. g_bRemovedDoors = remove_entities(g_sClassDoor);
  1929. g_bRemovedDoorsRotating = remove_entities(g_sClassDoorRotating);
  1930. }
  1931. else
  1932. {
  1933. if( g_bRemovedDoors )
  1934. {
  1935. g_bRemovedDoors = restore_entities(g_sClassDoor);
  1936. }
  1937.  
  1938. if( g_bRemovedDoorsRotating )
  1939. {
  1940. g_bRemovedDoorsRotating = restore_entities(g_sClassDoorRotating);
  1941. }
  1942. }
  1943.  
  1944. remove_task(TASK_ID_HIDETIMER, 0);
  1945. set_task(0.0, "taskHideTimer", TASK_ID_HIDETIMER, g_sBlank, 0, g_sBlank, 0);
  1946.  
  1947. if( !g_bScrimOn )
  1948. {
  1949. return PLUGIN_CONTINUE;
  1950. }
  1951.  
  1952. switch( g_ScrimType )
  1953. {
  1954. case SCRIM_ROUNDS:
  1955. {
  1956. if( g_ScrimWinner )
  1957. {
  1958. /* switch() statement gave me an error */
  1959. if( g_ScrimWinner == HNS_TEAM_HIDER )
  1960. {
  1961. scrim_print(0, "^x03Bujok^x01 elvesztettek^x03 %i / %i^x01 kort!", g_ScrimLosses[HNS_TEAM_SEEKER], g_ScrimMaxLosses);
  1962. scrim_print(0, "Ez a scrim dontetlen!");
  1963. }
  1964. else if( g_ScrimWinner == HNS_TEAM_SEEKER )
  1965. {
  1966. scrim_print(0, "^x03Bujo csapat^x01 egnyert^x03 %i / %i^x01 kort!", g_ScrimRounds[HNS_TEAM_HIDER], g_ScrimMaxRounds);
  1967. scrim_print(0, "A bujo csapat nyert!");
  1968. }
  1969.  
  1970. scrim_print(0, "^x03Scrim mod kikapcsolasa.");
  1971.  
  1972. g_bScrimOn = false;
  1973. g_ScrimType = SCRIM_NONE;
  1974. set_pcvar_num(sv_restart, 1);
  1975. }
  1976. else if( g_bRestartRound )
  1977. {
  1978. g_bRestartRound = false;
  1979. set_pcvar_num(sv_restart, 1);
  1980. }
  1981. }
  1982. case SCRIM_POINTS:
  1983. {
  1984. if( g_ScrimWinner )
  1985. {
  1986. new CsTeams:team1 = g_ScrimTeams[1];
  1987. new CsTeams:team2 = g_ScrimTeams[2];
  1988.  
  1989. scrim_print(0, "Vegso scrim pontok:^x03 Csapat 1 [%i]^x01 ::^x03 Csapat 2 [%i]", g_ScrimScores[team1], g_ScrimScores[team2]);
  1990. scrim_print(0, "^x03A csapatod %i^x01 nyert!", g_ScrimTeamNums[g_ScrimWinner]);
  1991.  
  1992. g_bScrimOn = false;
  1993. g_ScrimType = SCRIM_NONE;
  1994. set_pcvar_num(sv_restart, 1);
  1995. }
  1996. else if( g_bScrimIsDraw )
  1997. {
  1998. new CsTeams:team1 = g_ScrimTeams[1];
  1999. new CsTeams:team2 = g_ScrimTeams[2];
  2000.  
  2001. scrim_print(0, "Vegso scrim pontok:^x03 Csapat 1 [%i]^x01 ::^x03 Csapat 2 [%i]", g_ScrimScores[team1], g_ScrimScores[team2]);
  2002. scrim_print(0, "A scrim eredmenye dontetlen!");
  2003.  
  2004. g_bScrimOn = false;
  2005. g_ScrimType = SCRIM_NONE;
  2006. set_pcvar_num(sv_restart, 1);
  2007. }
  2008. }
  2009. }
  2010.  
  2011. return PLUGIN_CONTINUE;
  2012. }
  2013.  
  2014. public logeventRoundEnd()
  2015. {
  2016. if( !g_bHnsOn )
  2017. {
  2018. return PLUGIN_CONTINUE;
  2019. }
  2020.  
  2021. remove_task(TASK_ID_HIDETIMER, 0);
  2022.  
  2023. new sMessage[192];
  2024. new CsTeams:winner = HNS_TEAM_SEEKER;
  2025.  
  2026. new hider, seeker, hider_alive;
  2027. get_hider_and_seeker(hider, seeker, hider_alive);
  2028.  
  2029. if( hider_alive )
  2030. {
  2031. winner = HNS_TEAM_HIDER;
  2032. }
  2033.  
  2034. if( !hider || !seeker )
  2035. {
  2036. return PLUGIN_CONTINUE;
  2037. }
  2038.  
  2039. static const sTaskSwapTeams[] = "taskSwapTeams";
  2040.  
  2041. ++g_RoundsEnded;
  2042.  
  2043. new teamchange = get_pcvar_num(hns_teamchange);
  2044. if( teamchange && teamchange == g_RoundsEnded && !g_bScrimOn )
  2045. {
  2046. hns_print(0, "%i a kor lejart. Csapatok csereje.", g_RoundsEnded);
  2047.  
  2048. set_task(0.5, sTaskSwapTeams, TASK_ID_SWAPTEAMS, g_sBlank, 0, g_sBlank, 0);
  2049. }
  2050.  
  2051. static const sNoTeamChange[] = "^nNincs csapat valtas";
  2052. if( winner == HNS_TEAM_SEEKER )
  2053. {
  2054. copy(sMessage, 191, "Keresok nyertek a kort");
  2055.  
  2056. if( !teamchange && (!g_bScrimOn || g_ScrimType == SCRIM_ROUNDS) )
  2057. {
  2058. add(sMessage, 191, "^nCsapatok csereje.", 0);
  2059.  
  2060. set_task(0.5, sTaskSwapTeams, TASK_ID_SWAPTEAMS, g_sBlank, 0, g_sBlank, 0);
  2061. }
  2062. }
  2063. else if( winner == HNS_TEAM_HIDER )
  2064. {
  2065. copy(sMessage, 191, "Bujok nyertek a kort");
  2066.  
  2067. new frags = get_pcvar_num(hns_hiders_alivefrags);
  2068.  
  2069. if( frags )
  2070. {
  2071. static Float:fFrags;
  2072. for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2073. {
  2074. if( g_bConnected[plr] && g_bAlive[plr] && cs_get_user_team(plr) == HNS_TEAM_HIDER )
  2075. {
  2076. pev(plr, pev_frags, fFrags);
  2077. set_pev(plr, pev_frags, fFrags + float(frags));
  2078.  
  2079. hns_print(plr, "Szeresztel %i fraget%s mert tulelted ezt a kort!",\
  2080. frags, (frags == 1) ? g_sBlank : g_sS);
  2081. }
  2082. }
  2083. }
  2084.  
  2085. if( !teamchange )
  2086. {
  2087. add(sMessage, 191, sNoTeamChange, 0);
  2088. }
  2089. }
  2090.  
  2091. static red, green, blue;
  2092. get_hud_colors(red, green, blue);
  2093. set_hudmessage(red, green, blue, -1.0, -1.0, 0, 0.0, 5.0, 0.1, 0.2, 1);
  2094. show_hudmessage(0, "%s", sMessage);
  2095.  
  2096. g_bWeaponsGiven = false;
  2097.  
  2098. if( !g_bScrimOn )
  2099. {
  2100. return PLUGIN_CONTINUE;
  2101. }
  2102.  
  2103. switch( g_ScrimType )
  2104. {
  2105. case SCRIM_ROUNDS:
  2106. {
  2107. /* switch() statement gave me an error */
  2108. if( winner == HNS_TEAM_HIDER )
  2109. {
  2110. ++g_ScrimRounds[HNS_TEAM_HIDER];
  2111.  
  2112. if( g_ScrimMaxRounds )
  2113. {
  2114. scrim_print(0, "^x03Bujok^x01 megnyertek^x03 %i / %i^x01 kort!", g_ScrimRounds[HNS_TEAM_HIDER], g_ScrimMaxRounds);
  2115.  
  2116. if( g_ScrimRounds[HNS_TEAM_HIDER] == g_ScrimMaxRounds )
  2117. {
  2118. g_ScrimWinner = HNS_TEAM_SEEKER;
  2119. }
  2120. }
  2121. }
  2122. else if( winner == HNS_TEAM_SEEKER && g_ScrimMaxLosses )
  2123. {
  2124. ++g_ScrimLosses[HNS_TEAM_HIDER];
  2125.  
  2126. scrim_print(0, "^x03Bujok^x01 elvesztettek^x03 %i / %i^x01 kort!", g_ScrimLosses[HNS_TEAM_HIDER], g_ScrimMaxLosses);
  2127.  
  2128. scrim_print(0, "^x03A keresok^x01 megnyertek a kort");
  2129. scrim_print(0, "Csapatok csereje.");
  2130.  
  2131. g_bRestartRound = true;
  2132.  
  2133. if( g_ScrimLosses[HNS_TEAM_HIDER] == g_ScrimMaxLosses )
  2134. {
  2135. g_ScrimWinner = HNS_TEAM_HIDER; /* seeking team won, but they will be hiders next round (team switching) */
  2136. }
  2137. }
  2138. }
  2139. case SCRIM_POINTS:
  2140. {
  2141. ++g_ScrimRounds[HNS_TEAM_HIDER];
  2142.  
  2143. new CsTeams:loser;
  2144. if( winner == HNS_TEAM_HIDER )
  2145. {
  2146. loser = HNS_TEAM_SEEKER;
  2147. }
  2148. else if( winner == HNS_TEAM_SEEKER )
  2149. {
  2150. loser = HNS_TEAM_HIDER;
  2151. }
  2152.  
  2153. g_ScrimScores[loser] -= g_PointsRoundLose;
  2154. g_ScrimScores[winner] += g_PointsRoundWin;
  2155.  
  2156. new sTeam[CsTeams][16];
  2157. formatex(sTeam[HNS_TEAM_HIDER], 15, "Csapat %i", g_ScrimTeamNums[HNS_TEAM_HIDER]);
  2158. formatex(sTeam[HNS_TEAM_SEEKER], 15, "Csapat %i", g_ScrimTeamNums[HNS_TEAM_SEEKER]);
  2159.  
  2160. new sMessageLose[192];
  2161. formatex(sMessageLose, 191, "^x03%s^x01 elvesztett^x03 %i pontot%s^x01 mert^x03 elvesztette^x01 ezt a kort!", "%s", g_ScrimTeamNums[loser], g_PointsRoundLose, g_PointsRoundLose == 1 ? "" : "s");
  2162.  
  2163. new sMessageWin[192];
  2164. formatex(sMessageWin, 191, "^x03%s^x01 szerzett^x03 %i pontot%s^x01 mert^x03 megynyerte^x01 ezt a kort!", "%s", g_ScrimTeamNums[winner], g_PointsRoundWin, g_PointsRoundWin == 1 ? "" : "s");
  2165.  
  2166. new CsTeams:team;
  2167. for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2168. {
  2169. if( !g_bConnected[plr] )
  2170. {
  2171. continue;
  2172. }
  2173.  
  2174. team = cs_get_user_team(plr);
  2175. if( team == winner )
  2176. {
  2177. scrim_print(plr, sMessageWin, "A te csapatod");
  2178. scrim_print(plr, sMessageLose, sTeam[loser]);
  2179. }
  2180. else if( team == loser )
  2181. {
  2182. scrim_print(plr, sMessageWin, sTeam[winner]);
  2183. scrim_print(plr, sMessageLose, "A te csapatod");
  2184. }
  2185. }
  2186.  
  2187. if( g_ScrimRounds[HNS_TEAM_HIDER] == g_ScrimMaxRounds )
  2188. {
  2189. if( g_ScrimScores[HNS_TEAM_HIDER] > g_ScrimScores[HNS_TEAM_SEEKER] )
  2190. {
  2191. g_ScrimWinner = HNS_TEAM_HIDER;
  2192. }
  2193. else if( g_ScrimScores[HNS_TEAM_SEEKER] > g_ScrimScores[HNS_TEAM_HIDER] )
  2194. {
  2195. g_ScrimWinner = HNS_TEAM_SEEKER;
  2196. }
  2197. else /* not one is greater than the other, so they are equal */
  2198. {
  2199. g_bScrimIsDraw = true;
  2200. }
  2201. }
  2202. else if( g_ScrimRounds[HNS_TEAM_HIDER] == (g_ScrimMaxRounds / 2) ) /* half of the scrim has gone by, so swap the teams */
  2203. {
  2204. set_task(0.5, "taskSwapTeams", TASK_ID_SWAPTEAMS, "", 0, "", 0);
  2205.  
  2206. scrim_print(0, "^x03A^x01 scrim fele letelt,^x03 csapatok csereje kovetkezik^x01.");
  2207. }
  2208. }
  2209. }
  2210.  
  2211. return PLUGIN_CONTINUE;
  2212. }
  2213.  
  2214. public mnuScrimType(plr, menu, item)
  2215. {
  2216. if( item == MENU_EXIT
  2217. || g_ScrimVoteTimer == 0 )
  2218. {
  2219. return PLUGIN_HANDLED;
  2220. }
  2221.  
  2222. new sInfo[2], _access, callback;
  2223. menu_item_getinfo(menu, item, _access, sInfo, 1, "", 0, callback);
  2224.  
  2225. new type = str_to_num(sInfo);
  2226. g_ScrimVoteCount[type]++;
  2227.  
  2228. if( get_pcvar_num(amx_vote_answers) )
  2229. {
  2230. new sName[32];
  2231. get_user_name(plr, sName, 31);
  2232.  
  2233. switch( type )
  2234. {
  2235. case SCRIM_ROUNDS: scrim_print(0, "^x03%s^x01 szavazott a^x03 %i kor megnyeresere", sName, get_pcvar_num(hnss_rounds_wins));
  2236. case SCRIM_POINTS: scrim_print(0, "^x03%s^x01 szavazott a ^x03 Pont rendszerre", sName);
  2237. }
  2238. }
  2239.  
  2240. g_bScrimVoted[plr] = true;
  2241.  
  2242. if( check_last_vote(plr) )
  2243. {
  2244. g_ScrimVoteTimer = 1;
  2245. }
  2246.  
  2247. return PLUGIN_HANDLED;
  2248. }
  2249.  
  2250. public taskRemoveShield(ent)
  2251. {
  2252. dllfunc(DLLFunc_Think, ent);
  2253.  
  2254. return PLUGIN_CONTINUE;
  2255. }
  2256.  
  2257. public taskHideTimer()
  2258. {
  2259. new seeker, hider;
  2260.  
  2261. if( g_HideTimer <= 0 )
  2262. {
  2263. seeker = 1;
  2264. hider = 1;
  2265. }
  2266. else
  2267. {
  2268. get_hider_and_seeker(hider, seeker);
  2269. }
  2270.  
  2271. static const sTaskHideTimer[] = "taskHideTimer";
  2272. if( !hider || !seeker )
  2273. {
  2274. g_HideTimer = 0;
  2275. set_task(0.0, sTaskHideTimer, TASK_ID_HIDETIMER, g_sBlank, 0, g_sBlank, 0);
  2276.  
  2277. return PLUGIN_CONTINUE;
  2278. }
  2279.  
  2280. static CsTeams:team;
  2281.  
  2282. if( g_HideTimer > 0 )
  2283. {
  2284. new sounds = get_pcvar_num(hns_timersounds);
  2285.  
  2286. new sSound[16];
  2287. num_to_word(g_HideTimer, sSound, 15);
  2288.  
  2289. static blind_red, blind_green, blind_blue, blind_alpha;
  2290. get_blind_colors(blind_red, blind_green, blind_blue, blind_alpha);
  2291.  
  2292. static hud_red, hud_green, hud_blue;
  2293. get_hud_colors(hud_red, hud_green, hud_blue);
  2294.  
  2295. for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2296. {
  2297. if( !g_bConnected[plr] )
  2298. {
  2299. continue;
  2300. }
  2301.  
  2302. team = cs_get_user_team(plr);
  2303. if( team == HNS_TEAM_SEEKER || team == HNS_TEAM_HIDER )
  2304. {
  2305. if( team == HNS_TEAM_SEEKER && g_bAlive[plr] )
  2306. {
  2307. make_ScreenFade(plr, 1.5, 1.5, blind_red, blind_green, blind_blue, blind_alpha);
  2308.  
  2309. /*set_pev(plr, pev_flags, pev(plr, pev_flags) | FL_FROZEN);
  2310. set_pev(plr, pev_maxspeed, -1.0);*/
  2311. }
  2312.  
  2313. set_hudmessage(hud_red, hud_green, hud_blue, -1.0, -1.0, 0, 0.0, 1.1, 0.1, 0.1, 1);
  2314. show_hudmessage(plr, "A bujoknak %i masodpercuk van az elbujasra!", g_HideTimer);
  2315.  
  2316. if( sounds )
  2317. {
  2318. client_cmd(plr, "spk vox/%s.wav", sSound);
  2319. }
  2320. }
  2321. }
  2322.  
  2323. g_HideTimer--;
  2324. set_task(1.0, sTaskHideTimer, TASK_ID_HIDETIMER, g_sBlank, 0, g_sBlank, 0);
  2325. }
  2326. else if( g_HideTimer == 0 )
  2327. {
  2328. static hud_red, hud_green, hud_blue;
  2329. get_hud_colors(hud_red, hud_green, hud_blue);
  2330.  
  2331. static param[2];
  2332. for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2333. {
  2334. if( !g_bConnected[plr] )
  2335. {
  2336. continue;
  2337. }
  2338.  
  2339. team = cs_get_user_team(plr);
  2340. if( team == HNS_TEAM_SEEKER || team == HNS_TEAM_HIDER )
  2341. {
  2342. if( team == HNS_TEAM_SEEKER && g_bAlive[plr] )
  2343. {
  2344. make_ScreenFade(plr, 0.0, 0.0, 0, 0, 0, 255);
  2345.  
  2346. cs_reset_user_maxspeed(plr);
  2347. //set_pev(plr, pev_flags, pev(plr, pev_flags) & ~FL_FROZEN);
  2348. }
  2349.  
  2350. set_hudmessage(hud_red, hud_green, hud_blue, -1.0, -1.0, 0, 0.0, 3.0, 0.1, 0.1, 1);
  2351. show_hudmessage(plr, "Aki bujt aki nem, megyunk!");
  2352.  
  2353. param[0] = _:team;
  2354. taskGiveWeapons(param, plr + TASK_ID_GIVEWEAPONS);
  2355. }
  2356. }
  2357.  
  2358. g_bWeaponsGiven = true;
  2359.  
  2360. g_HideTimer--;
  2361. set_task(1.0, sTaskHideTimer, TASK_ID_HIDETIMER, g_sBlank, 0, g_sBlank, 0);
  2362. }
  2363. else
  2364. {
  2365. for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2366. {
  2367. if( !g_bConnected[plr] )
  2368. {
  2369. continue;
  2370. }
  2371.  
  2372. if( g_bAlive[plr] && cs_get_user_team(plr) == HNS_TEAM_SEEKER )
  2373. {
  2374. make_ScreenFade(plr, 0.0, 0.0, 0, 0, 0, 255);
  2375.  
  2376. cs_reset_user_maxspeed(plr);
  2377. //set_pev(plr, pev_flags, pev(plr, pev_flags) & ~FL_FROZEN);
  2378. }
  2379. }
  2380. }
  2381.  
  2382. return PLUGIN_CONTINUE;
  2383. }
  2384.  
  2385. public taskStripWeapons(plr)
  2386. {
  2387. plr -= TASK_ID_STRIPWEAPONS;
  2388.  
  2389. fm_strip_user_weapons(plr);
  2390.  
  2391. return PLUGIN_CONTINUE;
  2392. }
  2393.  
  2394. public taskGiveKnife(param[], plr)
  2395. {
  2396. plr -= TASK_ID_GIVEKNIFE;
  2397.  
  2398. new CsTeams:team = CsTeams:param[0];
  2399.  
  2400. if( team != HNS_TEAM_HIDER || get_pcvar_num(hns_hiders_knife))
  2401. {
  2402. fm_give_item(plr, "weapon_knife");
  2403. }
  2404.  
  2405. return PLUGIN_CONTINUE;
  2406. }
  2407.  
  2408. public taskGiveWeapons(param[], plr)
  2409. {
  2410. plr -= TASK_ID_GIVEWEAPONS;
  2411.  
  2412. new CsTeams:team = CsTeams:param[0];
  2413. if( team != HNS_TEAM_HIDER && team != HNS_TEAM_SEEKER )
  2414. {
  2415. return PLUGIN_CONTINUE;
  2416. }
  2417.  
  2418. chance(plr, get_pcvar_num(hns_grenades[team]), get_pcvar_num(hns_grenades_percent[team]),"weapon_hegrenade", CSW_HEGRENADE, "HE Grenade");
  2419. chance(plr, get_pcvar_num(hns_flashbangs[team]), get_pcvar_num(hns_flashbangs_percent[team]), "weapon_flashbang", CSW_FLASHBANG, "Flashbang");
  2420. chance(plr, get_pcvar_num(hns_smokegren[team]), get_pcvar_num(hns_smokegren_percent[team]), "weapon_smokegrenade", CSW_SMOKEGRENADE, "Smoke Grenade");
  2421.  
  2422. new num = get_pcvar_num(hns_armor[team]);
  2423. num = clamp(num, 0, 100);
  2424.  
  2425. switch( num )
  2426. {
  2427. case 0:
  2428. {
  2429. cs_set_user_armor(plr, 0, CS_ARMOR_NONE);
  2430. }
  2431. case 1..99:
  2432. {
  2433. cs_set_user_armor(plr, num, CS_ARMOR_KEVLAR);
  2434. }
  2435. case 100:
  2436. {
  2437. cs_set_user_armor(plr, num, CS_ARMOR_VESTHELM);
  2438. }
  2439. }
  2440.  
  2441. return PLUGIN_CONTINUE;
  2442. }
  2443.  
  2444. public taskCheckModel(param[], plr)
  2445. {
  2446. plr -= TASK_ID_CHECKMODEL;
  2447.  
  2448. new CsTeams:team = CsTeams:param[0];
  2449.  
  2450. if( team == HNS_TEAM_SEEKER || team == HNS_TEAM_HIDER )
  2451. {
  2452. new CsTeams:otherteam = (team == HNS_TEAM_HIDER) ? HNS_TEAM_SEEKER : HNS_TEAM_HIDER;
  2453.  
  2454. new sModel[32];
  2455. cs_get_user_model(plr, sModel, 31);
  2456.  
  2457. for( new i = 0; i < 4; i++ )
  2458. {
  2459. if( equal(sModel, g_sAllModels[otherteam][i], 0) )
  2460. {
  2461. cs_set_user_model(plr, g_sDefaultModels[team]);
  2462. break;
  2463. }
  2464. }
  2465. }
  2466.  
  2467. return PLUGIN_CONTINUE;
  2468. }
  2469.  
  2470. public taskSwapTeams(taskid)
  2471. {
  2472. static CsTeams:team;
  2473.  
  2474. if( g_bScrimOn )
  2475. {
  2476. static temp;
  2477.  
  2478. if( g_ScrimType == SCRIM_POINTS )
  2479. {
  2480. temp = g_ScrimScores[HNS_TEAM_HIDER];
  2481. g_ScrimScores[HNS_TEAM_HIDER] = g_ScrimScores[HNS_TEAM_SEEKER];
  2482. g_ScrimScores[HNS_TEAM_SEEKER] = temp;
  2483.  
  2484. temp = g_ScrimTeamNums[HNS_TEAM_HIDER];
  2485. g_ScrimTeamNums[HNS_TEAM_HIDER] = g_ScrimTeamNums[HNS_TEAM_SEEKER];
  2486. g_ScrimTeamNums[HNS_TEAM_SEEKER] = temp;
  2487.  
  2488. team = g_ScrimTeams[1];
  2489. g_ScrimTeams[1] = g_ScrimTeams[2];
  2490. g_ScrimTeams[2] = team;
  2491. }
  2492. else if( g_ScrimType == SCRIM_ROUNDS )
  2493. {
  2494. if( !g_ScrimSaveWins )
  2495. {
  2496. g_ScrimRounds[HNS_TEAM_HIDER] = 0;
  2497. g_ScrimRounds[HNS_TEAM_SEEKER] = 0;
  2498. }
  2499. else
  2500. {
  2501. temp = g_ScrimRounds[HNS_TEAM_HIDER];
  2502. g_ScrimRounds[HNS_TEAM_HIDER] = g_ScrimRounds[HNS_TEAM_SEEKER];
  2503. g_ScrimRounds[HNS_TEAM_SEEKER] = temp;
  2504. }
  2505. }
  2506. }
  2507.  
  2508. for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2509. {
  2510. if( !g_bConnected[plr] )
  2511. {
  2512. continue;
  2513. }
  2514.  
  2515. team = cs_get_user_team(plr);
  2516. if( team == HNS_TEAM_HIDER )
  2517. {
  2518. cs_set_user_team(plr, HNS_TEAM_SEEKER, HNS_MODEL_SEEKER);
  2519.  
  2520. emake_TeamInfo(plr, g_sTeamInfo[HNS_TEAM_SEEKER]); /* let other plugins know that the player changed teams */
  2521. }
  2522. else if( team == HNS_TEAM_SEEKER )
  2523. {
  2524. cs_set_user_team(plr, HNS_TEAM_HIDER, HNS_MODEL_HIDER);
  2525.  
  2526. emake_TeamInfo(plr, g_sTeamInfo[HNS_TEAM_HIDER]); /* let other plugins know that the player changed teams */
  2527. }
  2528. }
  2529.  
  2530. g_RoundsLost = 0;
  2531. g_RoundsEnded = 0;
  2532. g_bDisableSlash = true;
  2533.  
  2534. return 1;
  2535. }
  2536.  
  2537. public taskSetLights()
  2538. {
  2539. if( !g_bHnsOn )
  2540. {
  2541. if( !equali(g_sLights, g_sLightsNormal) )
  2542. {
  2543. set_lights(g_sLightsNormal);
  2544. }
  2545. }
  2546. else
  2547. {
  2548. new sLights[16];
  2549. get_pcvar_string(hns_lights, sLights, 15);
  2550.  
  2551. if( !equali(g_sLights, sLights) )
  2552. {
  2553. if( !strlen(sLights) )
  2554. {
  2555. set_lights(g_sLightsNormal);
  2556. set_pcvar_string(hns_lights, g_sLightsNormal);
  2557. }
  2558. else
  2559. {
  2560. set_lights(sLights);
  2561. }
  2562. }
  2563. }
  2564.  
  2565. return PLUGIN_CONTINUE;
  2566. }
  2567.  
  2568. public taskShowPluginInfo(plr)
  2569. {
  2570. if( g_bHnsOn )
  2571. {
  2572. show_plugin_info(plr - TASK_ID_SHOWPLUGININFO);
  2573. }
  2574.  
  2575. return PLUGIN_CONTINUE;
  2576. }
  2577.  
  2578. public taskScrimVote(aMenu[])
  2579. {
  2580. if( !--g_ScrimVoteTimer )
  2581. {
  2582. remove_task(TASK_ID_SCRIMVOTE, 0);
  2583.  
  2584. for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2585. {
  2586. if( !g_bScrimVoted[plr] )
  2587. {
  2588. menu_cancel(plr); /* block any more menu key pressing */
  2589.  
  2590. client_cmd(plr, "slot1"); /* remove menu from player's screen */
  2591. }
  2592. }
  2593.  
  2594. menu_destroy(aMenu[0]);
  2595.  
  2596. new rounds = get_pcvar_num(hnss_rounds_wins);
  2597. 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]);
  2598.  
  2599. new best;
  2600.  
  2601. if( g_ScrimVoteCount[SCRIM_ROUNDS] > g_ScrimVoteCount[SCRIM_POINTS] )
  2602. {
  2603. best = SCRIM_ROUNDS;
  2604. scrim_print(0, "A scrim fajta^x03 nyerjetek meg %i kort^x01 lesz!", rounds);
  2605. }
  2606. else if( g_ScrimVoteCount[SCRIM_POINTS] > g_ScrimVoteCount[SCRIM_ROUNDS] )
  2607. {
  2608. best = SCRIM_POINTS;
  2609. scrim_print(0, "A scrim fajta^x03 Pont Rendszer lesz^x01!");
  2610. }
  2611. else /* not one is greater than the other, so they are equal */
  2612. {
  2613. best = random_num(1, SCRIM_TYPES-1);
  2614.  
  2615. new sWinner[16];
  2616. switch( best )
  2617. {
  2618. case SCRIM_ROUNDS: formatex(sWinner, 15, "Nyerjetek %i Kort", rounds);
  2619. case SCRIM_POINTS: copy(sWinner, 15, "Pont rendszer");
  2620. }
  2621.  
  2622. scrim_print(0, "^x03A szavazas eredmenye dontetlen!^x01 Veletlenszeru valasztas^x03 %s^x01!", sWinner);
  2623. }
  2624.  
  2625. if( best == SCRIM_POINTS )
  2626. {
  2627. /* in case of an odd number, we need to round it up one */
  2628. g_ScrimMaxRounds = floatround(get_pcvar_float(hnss_points_rounds) / 2.0, floatround_ceil) * 2;
  2629.  
  2630. g_PointsKnife = get_pcvar_num(hnss_points_knife);
  2631. g_PointsHeadshot = get_pcvar_num(hnss_points_headshot);
  2632. g_PointsGrenade = get_pcvar_num(hnss_points_grenade);
  2633. g_PointsKill = get_pcvar_num(hnss_points_kill);
  2634. g_PointsSuicide = get_pcvar_num(hnss_points_suicide);
  2635. g_PointsTeamKill = get_pcvar_num(hnss_points_teamkill);
  2636. g_PointsRoundWin = get_pcvar_num(hnss_points_roundwin);
  2637. g_PointsRoundLose = get_pcvar_num(hnss_points_roundlose);
  2638. }
  2639. else if( best == SCRIM_ROUNDS )
  2640. {
  2641. g_ScrimMaxRounds = rounds;
  2642. g_ScrimMaxLosses = get_pcvar_num(hnss_rounds_losses);
  2643. g_ScrimSaveWins = get_pcvar_num(hnss_rounds_savewins);
  2644. }
  2645.  
  2646. g_ScrimType = best;
  2647. g_ScrimWinner = CS_TEAM_UNASSIGNED;
  2648. g_ScrimRounds[HNS_TEAM_HIDER] = 0;
  2649. g_ScrimRounds[HNS_TEAM_SEEKER] = 0;
  2650. g_bScrimIsDraw = false;
  2651. g_ScrimTeams[1] = HNS_TEAM_HIDER;
  2652. g_ScrimTeams[2] = HNS_TEAM_SEEKER;
  2653. g_ScrimTeamNums[HNS_TEAM_HIDER] = 1;
  2654. g_ScrimTeamNums[HNS_TEAM_SEEKER] = 2;
  2655. g_ScrimScores[HNS_TEAM_HIDER] = 0;
  2656. g_ScrimScores[HNS_TEAM_SEEKER] = 0;
  2657.  
  2658. g_bScrimOn = true;
  2659. set_pcvar_num(sv_restart, 1);
  2660. }
  2661. else
  2662. {
  2663. new sTitle[32];
  2664. formatex(sTitle, 31, "Valassz egy scrim fajtat \r[\w%i\r]", g_ScrimVoteTimer);
  2665.  
  2666. new menu = aMenu[0];
  2667. menu_setprop(menu, MPROP_TITLE, sTitle);
  2668.  
  2669. for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2670. {
  2671. if( !g_bScrimVoted[plr] )
  2672. {
  2673. menu_display(plr, menu, 0);
  2674. }
  2675. }
  2676. }
  2677.  
  2678. return PLUGIN_CONTINUE;
  2679. }
  2680.  
  2681. public taskExecuteConfig()
  2682. {
  2683. new sConfig[64];
  2684. get_configsdir(sConfig, 63);
  2685. add(sConfig, 63, "/hidenseek.cfg", 0);
  2686.  
  2687. if( file_exists(sConfig) )
  2688. {
  2689. server_cmd("exec %s", sConfig);
  2690. server_exec();
  2691.  
  2692. set_task(1.0, "TaskCheckOldVersion");
  2693. }
  2694. else
  2695. {
  2696. make_config(sConfig, true);
  2697.  
  2698. register_forward(FM_GetGameDescription, "fwdGetGameDescription", 0);
  2699. }
  2700. }
  2701.  
  2702. public TaskCheckOldVersion()
  2703. {
  2704. new sValue[32];
  2705. get_pcvar_string(hns_gametype, sValue, 31);
  2706.  
  2707. if( had_older_version(sValue) || is_config_old() )
  2708. {
  2709. formatex(sValue, 31, "HideNSeek v%s", PLUGIN_VERSION);
  2710. set_pcvar_string(hns_gametype, sValue);
  2711.  
  2712. set_task(1.0, "TaskResetConfig");
  2713. }
  2714. else
  2715. {
  2716. register_forward(FM_GetGameDescription, "fwdGetGameDescription", 0);
  2717. }
  2718. }
  2719.  
  2720. public TaskResetConfig()
  2721. {
  2722. new sConfig[64];
  2723. get_configsdir(sConfig, 63);
  2724. add(sConfig, 63, "/hidenseek.cfg", 0);
  2725.  
  2726. //delete_file(sConfig);
  2727. make_config(sConfig, false);
  2728.  
  2729. register_forward(FM_GetGameDescription, "fwdGetGameDescription", 0);
  2730. }
  2731.  
  2732. bool:had_older_version(const sGameType[])
  2733. {
  2734. new bool:bOld = false;
  2735.  
  2736. new sTemp[32];
  2737. formatex(sTemp, 31, "HideNSeek verzio %s", PLUGIN_VERSION);
  2738.  
  2739. if( !equali(sTemp, sGameType) )
  2740. {
  2741. new Float:version = str_to_float(PLUGIN_VERSION);
  2742. for( new Float:i = 2.0; i < version; i += 0.1 )
  2743. {
  2744. formatex(sTemp, 31, "HideNSeek verzio %.1f", i);
  2745.  
  2746. if( equali(sTemp, sGameType) )
  2747. {
  2748. bOld = true;
  2749. break;
  2750. }
  2751. }
  2752. }
  2753.  
  2754. return bOld;
  2755. }
  2756.  
  2757. bool:is_config_old()
  2758. {
  2759. new sConfig[64];
  2760. get_configsdir(sConfig, 63);
  2761. add(sConfig, 63, "/hidenseek.cfg", 0);
  2762.  
  2763. new f = fopen(sConfig, "rt");
  2764. new data[128];
  2765.  
  2766. while( !feof(f) )
  2767. {
  2768. fgets(f, data, sizeof(data) - 1);
  2769.  
  2770. if( containi(data, "hns_warmup") != -1 )
  2771. {
  2772. fclose(f);
  2773.  
  2774. return false;
  2775. }
  2776. }
  2777.  
  2778. fclose(f);
  2779.  
  2780. return true;
  2781. }
  2782.  
  2783. make_config(const sConfig[], bool:bCheckVersion)
  2784. {
  2785. new f = fopen(sConfig, "wt");
  2786.  
  2787. fputs(f, "// Itt talalod az osszes cvart a HideNSeek modhoz^n// A tovabbi informaciokat a cvarokrol itt talalod: http://forums.alliedmods.net/showthread.php?t=65370^n^n");
  2788.  
  2789. new sValue[32]; // any string needed from a cvar
  2790.  
  2791. fprintf(f, "hns_footsteps %i^n", get_pcvar_num(hns_footsteps));
  2792. fprintf(f, "hns_money %i^n", get_pcvar_num(hns_money));
  2793. fprintf(f, "hns_nubslash %i^n", get_pcvar_num(hns_nubslash));
  2794. fprintf(f, "hns_disablebuy %i^n", get_pcvar_num(hns_disablebuy));
  2795. fprintf(f, "hns_hidetime %i^n", get_pcvar_num(hns_hidetime));
  2796. fprintf(f, "hns_timersounds %i^n", get_pcvar_num(hns_timersounds));
  2797. fprintf(f, "hns_noslowdown %i^n", get_pcvar_num(hns_noslowdown));
  2798. fprintf(f, "hns_teamchange %i^n", get_pcvar_num(hns_teamchange));
  2799. fprintf(f, "hns_disablekill %i^n", get_pcvar_num(hns_disablekill));
  2800. fprintf(f, "hns_chooseteam %i^n", get_pcvar_num(hns_chooseteam));
  2801. fprintf(f, "hns_semiclip %i^n", get_pcvar_num(hns_semiclip));
  2802. fprintf(f, "hns_semiclip_alpha %i^n", get_pcvar_num(hns_semiclip_alpha));
  2803. fprintf(f, "hns_noflash %i^n", get_pcvar_num(hns_noflash));
  2804. fprintf(f, "hns_removebreakables %i^n", get_pcvar_num(hns_removebreakables));
  2805. fprintf(f, "hns_removedoors %i^n", get_pcvar_num(hns_removedoors));
  2806. fprintf(f, "hns_visiblecommands %i^n", get_pcvar_num(hns_visiblecommands));
  2807. fprintf(f, "hns_noboosting %i^n", get_pcvar_num(hns_noboosting));
  2808. fprintf(f, "hns_noboosting_punish %i^n", get_pcvar_num(hns_noboosting_punish));
  2809. fprintf(f, "hns_noboosting_damage %i^n", get_pcvar_num(hns_noboosting_damage));
  2810. fprintf(f, "hns_noboosting_interval %.4f^n", get_pcvar_float(hns_noboosting_interval));
  2811. get_pcvar_string(hns_blindcolors, sValue, 31);
  2812. fprintf(f, "hns_blindcolors ^"%s^"^n", sValue);
  2813. get_pcvar_string(hns_hudcolors, sValue, 31);
  2814. fprintf(f, "hns_hudcolors ^"%s^"^n", sValue);
  2815. get_pcvar_string(hns_lights, sValue, 31);
  2816. fprintf(f, "hns_lights ^"%s^"^n", sValue);
  2817.  
  2818. get_pcvar_string(hns_gametype, sValue, 31);
  2819. if( bCheckVersion )
  2820. {
  2821. if( had_older_version(sValue) )
  2822. {
  2823. formatex(sValue, 31, "HideNSeek v%s", PLUGIN_VERSION);
  2824. }
  2825. }
  2826. fprintf(f, "hns_gametype ^"%s^"^n", sValue);
  2827.  
  2828. get_pcvar_string(hns_prefix, sValue, 31);
  2829. fprintf(f, "hns_prefix ^"%s^"^n", sValue);
  2830. fprintf(f, "hns_warmup_godmode %i^n", get_pcvar_num(hns_warmup_godmode));
  2831. fprintf(f, "hns_warmup_respawn %i^n^n", get_pcvar_num(hns_warmup_respawn));
  2832.  
  2833. new sTeams[CsTeams][16];
  2834. copy(sTeams[HNS_TEAM_HIDER], 15, "hiders");
  2835. copy(sTeams[HNS_TEAM_SEEKER], 15, "seekers");
  2836. fprintf(f, "hns_hiders_knife %i^n", get_pcvar_num(hns_hiders_knife));
  2837. fprintf(f, "hns_hiders_alivefrags %i^n", get_pcvar_num(hns_hiders_alivefrags));
  2838. for( new CsTeams:team = HNS_TEAM_HIDER; team < CS_TEAM_SPECTATOR; team++ )
  2839. {
  2840. fprintf(f, "hns_%s_grenades %i^n", sTeams[team], get_pcvar_num(hns_grenades[team]));
  2841. fprintf(f, "hns_%s_grenades_percent %i^n", sTeams[team], get_pcvar_num(hns_grenades_percent[team]));
  2842. fprintf(f, "hns_%s_flashbangs %i^n", sTeams[team], get_pcvar_num(hns_flashbangs[team]));
  2843. fprintf(f, "hns_%s_flashbangs_percent %i^n", sTeams[team], get_pcvar_num(hns_flashbangs_percent[team]));
  2844. fprintf(f, "hns_%s_smokegren %i^n", sTeams[team], get_pcvar_num(hns_smokegren[team]));
  2845. fprintf(f, "hns_%s_smokegren_percent %i^n", sTeams[team], get_pcvar_num(hns_smokegren_percent[team]));
  2846. fprintf(f, "hns_%s_armor %i^n^n", sTeams[team], get_pcvar_num(hns_armor[team]));
  2847. }
  2848.  
  2849. get_pcvar_string(hnss_prefix, sValue, 31);
  2850. fprintf(f, "hnss_prefix ^"%s^"^n", sValue);
  2851. fprintf(f, "hnss_vote_timer %i^n^n", get_pcvar_num(hnss_vote_timer));
  2852.  
  2853. fprintf(f, "hnss_rounds_wins %i^n", get_pcvar_num(hnss_rounds_wins));
  2854. fprintf(f, "hnss_rounds_losses %i^n", get_pcvar_num(hnss_rounds_losses));
  2855. fprintf(f, "hnss_rounds_savewins %i^n^n", get_pcvar_num(hnss_rounds_savewins));
  2856.  
  2857. fprintf(f, "hnss_points_knife %i^n", get_pcvar_num(hnss_points_knife));
  2858. fprintf(f, "hnss_points_headshot %i^n", get_pcvar_num(hnss_points_headshot));
  2859. fprintf(f, "hnss_points_grenade %i^n", get_pcvar_num(hnss_points_grenade));
  2860. fprintf(f, "hnss_points_kill %i^n", get_pcvar_num(hnss_points_kill));
  2861. fprintf(f, "hnss_points_suicide %i^n", get_pcvar_num(hnss_points_suicide));
  2862. fprintf(f, "hnss_points_teamkill %i^n", get_pcvar_num(hnss_points_teamkill));
  2863. fprintf(f, "hnss_points_roundwin %i^n", get_pcvar_num(hnss_points_roundwin));
  2864. fprintf(f, "hnss_points_roundwin %i^n", get_pcvar_num(hnss_points_roundwin));
  2865. fprintf(f, "hnss_points_rounds %i", get_pcvar_num(hnss_points_rounds));
  2866.  
  2867. fclose(f);
  2868. }
  2869.  
  2870. register_say_command(const sCommand[], const sHandle[], const flags=-1, const sDescription[]="", const FlagManager=-1)
  2871. {
  2872. new sTemp[64];
  2873.  
  2874. formatex(sTemp, 63, "say /%s", sCommand);
  2875. register_clcmd(sTemp, sHandle, flags, sDescription, FlagManager);
  2876.  
  2877. formatex(sTemp, 63, "say .%s", sCommand);
  2878. register_clcmd(sTemp, sHandle, flags, sDescription, FlagManager);
  2879.  
  2880. formatex(sTemp, 63, "say_team /%s", sCommand);
  2881. register_clcmd(sTemp, sHandle, flags, sDescription, FlagManager);
  2882.  
  2883. formatex(sTemp, 63, "say_team .%s", sCommand);
  2884. register_clcmd(sTemp, sHandle, flags, sDescription, FlagManager);
  2885. }
  2886.  
  2887. handle_booster(plr)
  2888. {
  2889. new sPrefix[16];
  2890. new Float:fGametime = get_gametime();
  2891. new Float:fInterval = get_pcvar_float(hns_noboosting_interval);
  2892. get_pcvar_string(hns_prefix, sPrefix, 15);
  2893.  
  2894. if( fGametime >= g_fBoostPunishDelay[plr] )
  2895. {
  2896. punish_booster(plr);
  2897. g_fBoostPunishDelay[plr] = fGametime + fInterval;
  2898. }
  2899.  
  2900. if( fGametime >= g_fBoostMessageDelay[plr] )
  2901. {
  2902. set_hudmessage(255, 50, 50, -1.0, 0.6, 1, 3.0, 3.0, 0.1, 0.1, -1);
  2903. ShowSyncHudMsg(plr, g_BoostHud, "%s A gyorsitas nincs engedelyezve!", sPrefix);
  2904.  
  2905. g_fBoostMessageDelay[plr] = fGametime + 2.8;
  2906. }
  2907. }
  2908.  
  2909. punish_booster(plr)
  2910. {
  2911. new damage = get_pcvar_num(hns_noboosting_damage);
  2912.  
  2913. if( damage >= get_user_health(plr) )
  2914. {
  2915. fm_fakedamage(plr, "anti-boost system", float(damage), DMG_CRUSH);
  2916. }
  2917. else
  2918. {
  2919. user_slap(plr, damage, 1);
  2920. user_slap(plr, 0, 1);
  2921. }
  2922. }
  2923.  
  2924. get_hider_and_seeker(&hider = 0, &seeker = 0, &hider_alive = 0)
  2925. {
  2926. static CsTeams:team;
  2927. for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  2928. {
  2929. if( !g_bConnected[plr] )
  2930. {
  2931. continue;
  2932. }
  2933.  
  2934. team = cs_get_user_team(plr);
  2935. if( team == HNS_TEAM_SEEKER && !seeker )
  2936. {
  2937. seeker = plr;
  2938.  
  2939. if( hider && hider_alive )
  2940. {
  2941. break;
  2942. }
  2943. }
  2944. else if( team == HNS_TEAM_HIDER )
  2945. {
  2946. if( !hider )
  2947. {
  2948. hider = plr;
  2949. }
  2950. if( !hider_alive && g_bAlive[plr] )
  2951. {
  2952. hider_alive = plr;
  2953.  
  2954. if( seeker && hider )
  2955. {
  2956. break;
  2957. }
  2958. }
  2959. }
  2960. }
  2961. }
  2962.  
  2963. bool:remove_entities(const class[])
  2964. {
  2965. new bool:remove = false;
  2966.  
  2967. new ent = g_MaxPlayers, properties[32], Float:amt;
  2968. while( (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", class)) )
  2969. {
  2970. pev(ent, pev_renderamt, amt);
  2971. formatex(properties, 31, "^"%i^" ^"%f^" ^"%i^"", pev(ent, pev_rendermode), amt, pev(ent, pev_solid));
  2972.  
  2973. set_pev(ent, pev_message, properties);
  2974. set_pev(ent, pev_rendermode, kRenderTransAlpha);
  2975. set_pev(ent, pev_renderamt, 0.0);
  2976. set_pev(ent, pev_solid, SOLID_NOT);
  2977.  
  2978. remove = true;
  2979. }
  2980.  
  2981. return remove;
  2982. }
  2983.  
  2984. bool:restore_entities(const class[])
  2985. {
  2986. new bool:remove = true;
  2987.  
  2988. new ent = g_MaxPlayers, properties[32], rendermode[4], amt[16], solid[4];
  2989. while( (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", class)) )
  2990. {
  2991. pev(ent, pev_message, properties, 31);
  2992. parse(properties, rendermode, 3, amt, 15, solid, 3);
  2993.  
  2994. set_pev(ent, pev_rendermode, str_to_num(rendermode));
  2995. set_pev(ent, pev_renderamt, str_to_float(amt));
  2996. set_pev(ent, pev_solid, str_to_num(solid));
  2997. set_pev(ent, pev_message, g_sBlank);
  2998.  
  2999. remove = false;
  3000. }
  3001.  
  3002. return remove;
  3003. }
  3004.  
  3005. show_scrim_vote()
  3006. {
  3007. new menu = menu_create("", "mnuScrimType", 0);
  3008.  
  3009. new sItem[32];
  3010. formatex(sItem, 31, "Megnyert %i Korok", get_pcvar_num(hnss_rounds_wins));
  3011.  
  3012. menu_additem(menu, sItem, "1", 0, -1);
  3013. menu_additem(menu, "Pont rendszer", "2", 0, -1);
  3014.  
  3015. menu_setprop(menu, MPROP_PERPAGE, 0);
  3016.  
  3017. for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  3018. {
  3019. if( g_bConnected[plr] )
  3020. {
  3021. g_bScrimVoted[plr] = false;
  3022. }
  3023. else
  3024. {
  3025. g_bScrimVoted[plr] = true;
  3026. }
  3027. }
  3028.  
  3029. g_ScrimVoteTimer = get_pcvar_num(hnss_vote_timer) + 1;
  3030. g_ScrimVoteCount[SCRIM_ROUNDS] = 0;
  3031. g_ScrimVoteCount[SCRIM_POINTS] = 0;
  3032.  
  3033. new aMenu[2];
  3034. aMenu[0] = menu;
  3035. set_task(1.0, "taskScrimVote", TASK_ID_SCRIMVOTE, aMenu, 2, "b", 0);
  3036.  
  3037. return 1;
  3038. }
  3039.  
  3040. bool:check_last_vote(plr_to_skip)
  3041. {
  3042. for( new i = 1; i <= g_MaxPlayers; i++ )
  3043. {
  3044. if( !g_bConnected[i]
  3045. || i == plr_to_skip )
  3046. {
  3047. continue;
  3048. }
  3049.  
  3050. if( !g_bScrimVoted[i] )
  3051. {
  3052. return false;
  3053. }
  3054. }
  3055.  
  3056. return true;
  3057. }
  3058.  
  3059. show_plugin_info(plr)
  3060. {
  3061. hns_print(plr, "Ezen a szerveren a ^x03 HideNSeek v%s^x01 fut, keszitette:^x03 Exolent^x01, forditotta:^x03 crazy`", PLUGIN_VERSION);
  3062. hns_print(plr, "Irj^x03 /hnshelp^x01-et ha szeretnel megtudni par informaciot a^x03 HideNSeek^x01 modrol.");
  3063.  
  3064. return 1;
  3065. }
  3066.  
  3067. cs_reset_user_maxspeed(plr)
  3068. {
  3069. static Float:fMaxSpeed;
  3070.  
  3071. static clip, ammo;
  3072. switch( get_user_weapon(plr, clip, ammo) )
  3073. {
  3074. case CSW_SG550, CSW_AWP, CSW_G3SG1:
  3075. {
  3076. fMaxSpeed = 210.0;
  3077. }
  3078. case CSW_M249:
  3079. {
  3080. fMaxSpeed = 220.0;
  3081. }
  3082. case CSW_AK47:
  3083. {
  3084. fMaxSpeed = 221.0;
  3085. }
  3086. case CSW_M3, CSW_M4A1:
  3087. {
  3088. fMaxSpeed = 230.0;
  3089. }
  3090. case CSW_SG552:
  3091. {
  3092. fMaxSpeed = 235.0;
  3093. }
  3094. case CSW_XM1014, CSW_AUG, CSW_GALIL, CSW_FAMAS:
  3095. {
  3096. fMaxSpeed = 240.0;
  3097. }
  3098. case CSW_P90:
  3099. {
  3100. fMaxSpeed = 245.0;
  3101. }
  3102. case CSW_SCOUT:
  3103. {
  3104. fMaxSpeed = 260.0;
  3105. }
  3106. default:
  3107. {
  3108. fMaxSpeed = 250.0;
  3109. }
  3110. }
  3111.  
  3112. engfunc(EngFunc_SetClientMaxspeed, plr, fMaxSpeed);
  3113. set_pev(plr, pev_maxspeed, fMaxSpeed);
  3114.  
  3115. return 1;
  3116. }
  3117.  
  3118. chance(plr, maxcount, percent, sClass[], CSW_type=0, sName[]="")
  3119. {
  3120. if( !maxcount || !percent )
  3121. {
  3122. return 0;
  3123. }
  3124.  
  3125. new count;
  3126. for( new i = 0; i < maxcount; i++ )
  3127. {
  3128. if( random_num(1, 100) <= percent )
  3129. {
  3130. if( count == 0 )
  3131. {
  3132. fm_give_item(plr, sClass);
  3133. }
  3134.  
  3135. count++;
  3136. }
  3137. }
  3138.  
  3139. if( count && CSW_type )
  3140. {
  3141. if( percent < 100 )
  3142. {
  3143. hns_print(plr, "Kaptal %i %s%s! (%i%% esely)", count, sName, (count == 1) ? g_sBlank : g_sS, percent);
  3144. }
  3145.  
  3146. cs_set_user_bpammo(plr, CSW_type, count);
  3147. }
  3148.  
  3149. return 1;
  3150. }
  3151.  
  3152. get_blind_colors(&red, &green, &blue, &alpha)
  3153. {
  3154. new sColors[20];
  3155. get_pcvar_string(hns_blindcolors, sColors, 19);
  3156.  
  3157. static sRed[5], sGreen[5], sBlue[5], sAlpha[5];
  3158. if( parse(sColors, sRed, 4, sGreen, 4, sBlue, 4, sAlpha, 4) < 4 )
  3159. {
  3160. red = 0;
  3161. green = 0;
  3162. blue = 0;
  3163. alpha = 255;
  3164.  
  3165. formatex(sColors, 19, "%i %i %i %i", red, green, blue, alpha);
  3166. set_pcvar_string(hns_blindcolors, sColors);
  3167.  
  3168. return 0;
  3169. }
  3170.  
  3171. red = equali(sRed, "rand", 0) ? random(256) : clamp(str_to_num(sRed), 0, 255);
  3172. green = equali(sGreen, "rand", 0) ? random(256) : clamp(str_to_num(sGreen), 0, 255);
  3173. blue = equali(sBlue, "rand", 0) ? random(256) : clamp(str_to_num(sBlue), 0, 255);
  3174. alpha = equali(sAlpha, "rand", 0) ? random(256) : clamp(str_to_num(sAlpha), 0, 255);
  3175.  
  3176. return 1;
  3177. }
  3178.  
  3179. get_hud_colors(&red, &green, &blue)
  3180. {
  3181. new sColors[20];
  3182. get_pcvar_string(hns_hudcolors, sColors, 19);
  3183.  
  3184. static sRed[5], sGreen[5], sBlue[5];
  3185. if( parse(sColors, sRed, 4, sGreen, 4, sBlue, 4) < 3 )
  3186. {
  3187. red = 255;
  3188. green = 255;
  3189. blue = 255;
  3190.  
  3191. formatex(sColors, 19, "%i %i %i", red, green, blue);
  3192. set_pcvar_string(hns_blindcolors, sColors);
  3193.  
  3194. return 0;
  3195. }
  3196.  
  3197. red = equali(sRed, "rand", 0) ? random(256) : clamp(str_to_num(sRed), 0, 255);
  3198. green = equali(sGreen, "rand", 0) ? random(256) : clamp(str_to_num(sGreen), 0, 255);
  3199. blue = equali(sBlue, "rand", 0) ? random(256) : clamp(str_to_num(sBlue), 0, 255);
  3200.  
  3201. return 1;
  3202. }
  3203.  
  3204. set_lights(const sLights[])
  3205. {
  3206. engfunc(EngFunc_LightStyle, 0, sLights);
  3207. copy(g_sLights, 16, sLights);
  3208.  
  3209. return 1;
  3210. }
  3211.  
  3212. make_HideWeapon(plr, flags)
  3213. {
  3214. static i; i = plr ? plr : get_player();
  3215. if( !i )
  3216. {
  3217. return 0;
  3218. }
  3219.  
  3220. message_begin(plr ? MSG_ONE : MSG_ALL, g_msgHideWeapon, {0, 0, 0}, plr);
  3221. write_byte(flags);
  3222. message_end();
  3223.  
  3224. return 1;
  3225. }
  3226.  
  3227. make_ScreenFade(plr, Float:fDuration, Float:fHoldtime, red, green, blue, alpha)
  3228. {
  3229. static i; i = plr ? plr : get_player();
  3230. if( !i )
  3231. {
  3232. return 0;
  3233. }
  3234.  
  3235. message_begin(plr ? MSG_ONE : MSG_ALL, g_msgScreenFade, {0, 0, 0}, plr);
  3236. write_short(floatround(4096.0 * fDuration, floatround_round));
  3237. write_short(floatround(4096.0 * fHoldtime, floatround_round));
  3238. write_short(4096);
  3239. write_byte(red);
  3240. write_byte(green);
  3241. write_byte(blue);
  3242. write_byte(alpha);
  3243. message_end();
  3244.  
  3245. return 1;
  3246. }
  3247.  
  3248. emake_TeamInfo(plr, sTeam[])
  3249. {
  3250. if( !plr )
  3251. {
  3252. return 0;
  3253. }
  3254.  
  3255. emessage_begin(MSG_ALL, g_msgTeamInfo, {0, 0, 0}, 0);
  3256. ewrite_byte(plr);
  3257. ewrite_string(sTeam);
  3258. emessage_end();
  3259.  
  3260. return 1;
  3261. }
  3262.  
  3263. make_TeamInfo(plr, sTeam[])
  3264. {
  3265. if( !plr )
  3266. {
  3267. return 0;
  3268. }
  3269.  
  3270. message_begin(MSG_ALL, g_msgTeamInfo, {0, 0, 0}, 0);
  3271. write_byte(plr);
  3272. write_string(sTeam);
  3273. message_end();
  3274.  
  3275. return 1;
  3276. }
  3277.  
  3278. make_Money(plr, money, flash)
  3279. {
  3280. if( !plr )
  3281. {
  3282. return 0;
  3283. }
  3284.  
  3285. message_begin(MSG_ONE, g_msgMoney, {0, 0, 0}, plr);
  3286. write_long(money);
  3287. write_byte(flash ? 1 : 0);
  3288. message_end();
  3289.  
  3290. return 1;
  3291. }
  3292.  
  3293. make_ArmorType(plr, helmet)
  3294. {
  3295. if( !plr )
  3296. {
  3297. return 0;
  3298. }
  3299.  
  3300. message_begin(MSG_ONE, g_msgArmorType, {0, 0, 0}, plr);
  3301. write_byte(helmet);
  3302. message_end();
  3303.  
  3304. return 1;
  3305. }
  3306.  
  3307. make_SayText(receiver, sender, sMessage[])
  3308. {
  3309. if( !sender )
  3310. {
  3311. return 0;
  3312. }
  3313.  
  3314. message_begin(receiver ? MSG_ONE : MSG_ALL, g_msgSayText, {0, 0, 0}, receiver);
  3315. write_byte(sender);
  3316. write_string(sMessage);
  3317. message_end();
  3318.  
  3319. return 1;
  3320. }
  3321.  
  3322. hns_print(plr, const sFormat[], any:...)
  3323. {
  3324. static i; i = plr ? plr : get_player();
  3325. if( !i )
  3326. {
  3327. return 0;
  3328. }
  3329.  
  3330. new sPrefix[16];
  3331. get_pcvar_string(hns_prefix, sPrefix, 15);
  3332.  
  3333. new sMessage[256];
  3334. new len = formatex(sMessage, 255, "^x04%s^x01 ", sPrefix);
  3335. vformat(sMessage[len], 255-len, sFormat, 3);
  3336. sMessage[192] = '^0';
  3337.  
  3338. make_SayText(plr, i, sMessage);
  3339.  
  3340. return 1;
  3341. }
  3342.  
  3343. scrim_print(plr, const sFmt[], any:...)
  3344. {
  3345. new i = plr ? plr : get_player();
  3346. if( !i )
  3347. {
  3348. return 0;
  3349. }
  3350.  
  3351. new sPrefix[16];
  3352. get_pcvar_string(hnss_prefix, sPrefix, 15);
  3353.  
  3354. new sMessage[256];
  3355. new len = formatex(sMessage, 255, "^x04%s^x01 ", sPrefix);
  3356. vformat(sMessage[len], 255-len, sFmt, 3);
  3357. sMessage[192] = '^0';
  3358.  
  3359. make_SayText(plr, i, sMessage);
  3360.  
  3361. return 1;
  3362. }
  3363.  
  3364. get_player()
  3365. {
  3366. for( new plr = 1; plr <= g_MaxPlayers; plr++ )
  3367. {
  3368. if( g_bConnected[plr] )
  3369. {
  3370. return plr;
  3371. }
  3372. }
  3373.  
  3374. return 0;
  3375. }
  3376.  
  3377. /* cstrike -> fakemeta stocks */
  3378. CsTeams:cs_get_user_team(plr, &{CsInternalModel,_}:model=CS_DONTCHANGE)
  3379. {
  3380. model = CsInternalModel:get_pdata_int(plr, OFFSET_INTERNALMODEL);
  3381.  
  3382. return CsTeams:get_pdata_int(plr, OFFSET_TEAM);
  3383. }
  3384.  
  3385. cs_set_user_team(plr, {CsTeams,_}:team, {CsInternalModel,_}:model=CS_DONTCHANGE)
  3386. {
  3387. set_pdata_int(plr, OFFSET_TEAM, _:team);
  3388. if( model )
  3389. {
  3390. set_pdata_int(plr, OFFSET_INTERNALMODEL, _:model);
  3391. }
  3392.  
  3393. dllfunc(DLLFunc_ClientUserInfoChanged, plr);
  3394.  
  3395. make_TeamInfo(plr, g_sTeamInfo[team]);
  3396.  
  3397. return 1;
  3398. }
  3399.  
  3400. cs_set_user_money(plr, money, flash=1)
  3401. {
  3402. set_pdata_int(plr, OFFSET_MONEY, money);
  3403.  
  3404. make_Money(plr, money, flash);
  3405.  
  3406. return 1;
  3407. }
  3408.  
  3409. cs_set_user_armor(plr, amount, CsArmorType:type)
  3410. {
  3411. set_pdata_int(plr, OFFSET_ARMORTYPE, _:type);
  3412. set_pev(plr, pev_armorvalue, float(amount));
  3413.  
  3414. if( type != CS_ARMOR_NONE )
  3415. {
  3416. make_ArmorType(plr, (type == CS_ARMOR_VESTHELM) ? 1 : 0);
  3417. }
  3418.  
  3419. return 1;
  3420. }
  3421.  
  3422. __get_ammo_offset(weapon)
  3423. {
  3424. static offset;
  3425.  
  3426. switch( weapon )
  3427. {
  3428. case CSW_AWP:
  3429. {
  3430. offset = OFFSET_AWP_AMMO;
  3431. }
  3432. case CSW_SCOUT, CSW_AK47, CSW_G3SG1:
  3433. {
  3434. offset = OFFSET_SCOUT_AMMO;
  3435. }
  3436. case CSW_FAMAS, CSW_M4A1, CSW_AUG, CSW_SG550, CSW_GALIL, CSW_SG552:
  3437. {
  3438. offset = OFFSET_FAMAS_AMMO;
  3439. }
  3440. case CSW_M3, CSW_XM1014:
  3441. {
  3442. offset = OFFSET_M3_AMMO;
  3443. }
  3444. case CSW_USP, CSW_UMP45, CSW_MAC10:
  3445. {
  3446. offset = OFFSET_USP_AMMO;
  3447. }
  3448. case CSW_FIVESEVEN, CSW_P90:
  3449. {
  3450. offset = OFFSET_FIVESEVEN_AMMO;
  3451. }
  3452. case CSW_DEAGLE:
  3453. {
  3454. offset = OFFSET_DEAGLE_AMMO;
  3455. }
  3456. case CSW_P228:
  3457. {
  3458. offset = OFFSET_P228_AMMO;
  3459. }
  3460. case CSW_GLOCK18, CSW_MP5NAVY, CSW_TMP, CSW_ELITE:
  3461. {
  3462. offset = OFFSET_GLOCK_AMMO;
  3463. }
  3464. case CSW_FLASHBANG:
  3465. {
  3466. offset = OFFSET_FLASHBANG_AMMO;
  3467. }
  3468. case CSW_HEGRENADE:
  3469. {
  3470. offset = OFFSET_HEGRENADE_AMMO;
  3471. }
  3472. case CSW_SMOKEGRENADE:
  3473. {
  3474. offset = OFFSET_SMOKEGRENADE_AMMO;
  3475. }
  3476. case CSW_C4:
  3477. {
  3478. offset = OFFSET_C4_AMMO;
  3479. }
  3480. default:
  3481. {
  3482. return 0;
  3483. }
  3484. }
  3485.  
  3486. return offset;
  3487. }
  3488.