HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /*------------------ > CREDITS < ------------------\\
  2. // Arkshine - unstuck method
  3. // ConnorMcLeod - Opening / Closing Doors & Team Damage
  4. // Exolent - For Mic System & Help & striping weapons & returning them
  5. // xGamer - Original Coder
  6. // joaquimandrade - For Viewable ct
  7. // XxAvalanchexX - For striping weapons
  8. //-------------------------------------------------*/
  9. #include <amxmodx>
  10. #include <amxmisc>
  11. #include <fakemeta>
  12. #include <fun>
  13. #include <cstrike>
  14. #include <hamsandwich>
  15. #include <engine>
  16. #include <nvault>
  17. #include <xs>
  18.  
  19. #pragma semicolon 1;
  20.  
  21. /*================================================================================
  22.  [Defines & Variables]
  23. =================================================================================*/
  24. #define get_bit(%1,%2) ( %1 & 1 << ( %2 & 31 ) )
  25. #define set_bit(%1,%2) %1 |= ( 1 << ( %2 & 31 ) )
  26. #define clear_bit(%1,%2) %1 &= ~( 1 << ( %2 & 31 ) )
  27.  
  28. new g_iMaxPlayers;
  29. #define FIRST_PLAYER_ID 1
  30. #define IsPlayer(%1) ( FIRST_PLAYER_ID <= %1 <= g_iMaxPlayers )
  31.  
  32. #define PLUGIN_NAME "Jailbreak - MAIN"
  33. #define PLUGIN_VERS "1.6.5"
  34. #define PLUGIN_AUTH "Pastout!"
  35. #define PLUGIN_CVAR "JailBreakMod"
  36.  
  37. #define GetPlayerHullSize(%1) ( ( pev ( %1, pev_flags ) & FL_DUCKING ) ? HULL_HEAD : HULL_HUMAN )
  38.  
  39. // --| The first search distance for finding a free location in the map.
  40. #define START_DISTANCE 32
  41. // --| How many times to search in an area for a free space.
  42. #define MAX_ATTEMPTS 128
  43.  
  44. // --| Just for readability.
  45. enum Coord_e { Float:x, Float:y, Float:z }
  46.  
  47. // Tasks ID's
  48. #define TASK_TIMER 7000
  49. #define TASK_SIMONBEAM 6000
  50. #define TASK_MATH 5000
  51. #define TASK_BEAM 4000 // Beam Cylinder Task
  52. #define TASK_HNS 3000
  53. #define TASK_DAYTIMER 2000
  54. #define TASKID 1000
  55.  
  56. // Offsets (FM)
  57. #define OFFSET_CLIPAMMO 51 // Clip Ammo Offset
  58. #define OFFSET_LINUX 4 // Weapons Linux Offset
  59. #define OFFSET_PRIMWEAPON 116 // Primary Weapon Fix
  60.  
  61. #if cellbits == 32
  62. #define OFFSET_BUYZONE 235
  63. #else
  64. #define OFFSET_BUYZONE 268
  65. #endif
  66.  
  67. // Offsets (Ham)
  68. #define m_pPlayer 41 // Ham_Item_Deploy (Weapon Owner)
  69.  
  70. #define HITGROUP_HEAD 1
  71.  
  72. // damage of explode, required for fm_radius_damage
  73. #define EXPLODE_DAMAGE 100.0
  74.  
  75. // radius of damage (required for fm_radius damage )
  76. #define EXPLODE_RADIUS 300.0
  77.  
  78. #define TEAM_T 1
  79. #define TEAM_CT 2
  80.  
  81. #define XO_PLAYER 5
  82. #define m_flWait 44 // Offset for button delay
  83. #define m_iTeam 114
  84.  
  85. #define cs_get_user_team_index(%1) get_pdata_int(%1, m_iTeam, XO_PLAYER)
  86. #define cs_set_user_team_index(%1,%2) set_pdata_int(%1, m_iTeam, %2, XO_PLAYER)
  87. #define m_iFlashBattery 244
  88. #define m_pActiveItem 373
  89. #define m_iUserPrefs 510
  90. const HAS_SHIELD = 1<<24;
  91. #define HasShield(%0) ( get_pdata_int(%0, m_iUserPrefs, XO_PLAYER) & HAS_SHIELD )
  92.  
  93. new const g_szPluginPrefix[] = "JailBreak-Mod"; // Plugin g_szPluginPrefix (Tag)
  94.  
  95. #define DAY_ACCESS ADMIN_BAN // access to start a day
  96. #define VOTEDAY_ACCESS ADMIN_KICK // access to start a vote day.
  97. #define SPRAY_ACCESS ADMIN_MENU // access to turn message on/off
  98. #define ADMIN_CLASS ADMIN_BAN // access to the speical guard classes
  99. #define ADMIN_MIC ADMIN_MENU // access to talk on there mic as prisoners
  100. #define ADMIN_POINTS ADMIN_IMMUNITY // access to give/take/set points
  101. #define ADMIN_SIMON ADMIN_BAN // access to all simon items
  102. #define ADMIN_DOORS ADMIN_BAN // access to open/close doors as a prisoner
  103. #define ADMIN_RANDOM_CT_SWITCH ADMIN_MENU // access to switch a prisoner to guard
  104.  
  105. //The weight of players votes
  106. #define WEIGHT_PLAYER 1
  107. #define WEIGHT_ADMIN 2
  108. //This is for rebel options They must be 3 guards alive to choose this option in /lr unless you are a head admin
  109. #define NUMBER_OF_GUARDS 3
  110. //Max Simons allowed at ounce
  111. #define MAX_SIMONS 1
  112. //The value of this takes away hp from a user if they get a math question wrong
  113. #define DMG_MATHQ 50
  114. #define ZOMBIE_SPEED 400.0
  115. #define NIGHTCRAWLER_SPEED 400.0
  116. #define REZOMBIE_SPEED 325.0
  117. #define RENIGHTCRAWLER_SPEED 325.0
  118. #define GRAVITY_DAY 200
  119. #define FREEZETAG_GRAVITY 400
  120. #define SCOUTDUAL_GRAVITY 300
  121.  
  122. #define SPEAK_TEAM 4
  123. new g_iSpeakFlags[33];
  124.  
  125. #define RACE_TIMER 5 // Last request for race timer count down...
  126. #define CELL_TIMER 59.0 //Time before cells open automacticly if guards do not open cells themselfs
  127.  
  128. // Do NOT uncomment all 3 will not work... either uncomment SAVE_METHOD_NICK OR SAVE_METHOD_IP OR SAVE_METHOD_ID
  129. // To save player data by nick, change "//#define SAVE_METHOD_NICK" to "#define SAVE_METHOD_NICK"
  130. //#define SAVE_METHOD_NICK
  131. // To save player data by ip, change "//#define SAVE_METHOD_IP" to "#define SAVE_METHOD_IP"
  132. //#define SAVE_METHOD_IP
  133. // To save player data by id, change "//#define SAVE_METHOD_ID" to "#define SAVE_METHOD_ID"
  134. #define SAVE_METHOD_ID
  135.  
  136. #define ENG_NULLENT -1
  137.  
  138. static const g_iZombieDayLights[] = "a"; // Change this for the darkness of map when its a zombie/reverse day || You can choose abcdefghijklmnopqrstuvwxyz || a = PitchBlack z = Brightest
  139.  
  140. const WEAPONS_PISTOLS = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE);
  141. const WEAPONS_SHOTGUNS = (1<<CSW_XM1014)|(1<<CSW_M3);
  142. const WEAPONS_SUBMACHINEGUNS = (1<<CSW_MAC10)|(1<<CSW_UMP45)|(1<<CSW_MP5NAVY)|(1<<CSW_TMP)|(1<<CSW_P90);
  143. const WEAPONS_RIFLES = (1<<CSW_SCOUT)|(1<<CSW_AUG)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_M4A1)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47);
  144. const WEAPONS_MACHINEGUNS = (1<<CSW_M249);
  145.  
  146. const VALID_WEAPONS = WEAPONS_PISTOLS|WEAPONS_SHOTGUNS|WEAPONS_SUBMACHINEGUNS|WEAPONS_RIFLES|WEAPONS_MACHINEGUNS;
  147.  
  148. #define IsWeaponInBits(%1,%2) (((1<<%1) & %2) > 0)
  149.  
  150. const MAX_PLAYERS = 32;
  151.  
  152. new g_iWeaponBits[MAX_PLAYERS+1];
  153. new g_iWeaponClip[MAX_PLAYERS+1][CSW_P90+1];
  154. new g_iWeaponAmmo[MAX_PLAYERS+1][CSW_P90+1];
  155. new g_iTagCount[MAX_PLAYERS+1];
  156. new g_bIsTag;
  157. new g_iDeaths[MAX_PLAYERS+1];
  158.  
  159. static const g_szWeaponNames[CSW_P90+1][] = {
  160. "","weapon_p228","","weapon_scout",
  161. "weapon_hegrenade","weapon_xm1014",
  162. "","weapon_mac10","weapon_aug",
  163. "weapon_smokegrenade","weapon_elite",
  164. "weapon_fiveseven","weapon_ump45",
  165. "weapon_sg550","weapon_galil",
  166. "weapon_famas","weapon_usp",
  167. "weapon_glock18","weapon_awp",
  168. "weapon_mp5navy","weapon_m249",
  169. "weapon_m3","weapon_m4a1","weapon_tmp",
  170. "weapon_g3sg1","weapon_flashbang","weapon_deagle",
  171. "weapon_sg552","weapon_ak47","","weapon_p90"
  172. };
  173.  
  174. new iRandom;
  175.  
  176. static const szWeapons[][] = {
  177. "weapon_p228", "weapon_scout", "weapon_hegrenade",
  178. "weapon_xm1014", "weapon_mac10", "weapon_aug",
  179. "weapon_elite", "weapon_fiveseven", "weapon_ump45",
  180. "weapon_sg550", "weapon_galil", "weapon_famas",
  181. "weapon_usp", "weapon_glock18", "weapon_awp",
  182. "weapon_mp5navy", "weapon_m249", "weapon_m3",
  183. "weapon_m4a1", "weapon_tmp", "weapon_g3sg1",
  184. "weapon_deagle", "weapon_sg552", "weapon_ak47",
  185. "weapon_p90"
  186. };
  187.  
  188. static const szWeapons2[][] = {
  189. "weapon_p228", "weapon_scout", "weapon_xm1014",
  190. "weapon_mac10", "weapon_aug", "weapon_elite",
  191. "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
  192. "weapon_galil", "weapon_famas", "weapon_usp",
  193. "weapon_glock18", "weapon_awp", "weapon_mp5navy",
  194. "weapon_m249", "weapon_m3", "weapon_m4a1",
  195. "weapon_tmp", "weapon_g3sg1", "weapon_deagle",
  196. "weapon_sg552", "weapon_ak47", "weapon_p90"
  197. };
  198.  
  199. static const iBpAmmo[] = {
  200. 52, 90, 90,
  201. 32, 100, 90,
  202. 120, 100, 100,
  203. 90, 90, 90,
  204. 100, 120, 30,
  205. 120, 200, 32,
  206. 90, 120, 90,
  207. 35, 90, 90,
  208. 100
  209. };
  210.  
  211. static const g_szWeaponList1[][] = {
  212. "weapon_galil", "weapon_famas",
  213. "weapon_ak47", "weapon_m4a1"
  214. };
  215.  
  216. // Button Classnames
  217. static const g_szButtonClasses[][] = {
  218. "func_button",
  219. "func_rot_button",
  220. "button_target"
  221. };
  222.  
  223. new const g_szClassNameCrowbar[] = "class_crowbar";
  224.  
  225. enum _:g_iStartDay
  226. {
  227. DAY_NONE, DAY_GRAVITY, DAY_FREEDAY,
  228. DAY_ZOMBIE, DAY_LAVA, DAY_SHARK,
  229. DAY_CAGE, DAY_DEATHMATCH, DAY_NIGHT,
  230. DAY_SPARTAN, DAY_HIDENSEEK, DAY_REZOMBIE,
  231. DAY_RESHARK, DAY_RENIGHT, DAY_FREEZETAG
  232. };
  233.  
  234. #define TOTAL_DAYS 14
  235.  
  236. new gVoteMenu;
  237. new gVotes[g_iStartDay];
  238. new gVoting;
  239. new bool:g_iAreWeInaVote;
  240. new g_DayTimer = 0;
  241. new g_iAutoStartVote = 0;
  242.  
  243. new const g_iStartDayNames[g_iStartDay][] =
  244. {
  245. "", "JB_DAYNAME_GRAVITY", "JB_DAYNAME_FREEDAY",
  246. "JB_DAYNAME_ZOMBIE", "JB_DAYNAME_LAVA", "JB_DAYNAME_SHARK",
  247. "JB_DAYNAME_CAGE", "JB_DAYNAME_DM", "JB_DAYNAME_NC",
  248. "JB_DAYNAME_SPARTAN", "JB_DAYNAME_HIDENSEEK", "JB_DAYNAME_RZOMBIE",
  249. "JB_DAYNAME_RSHARK", "JB_DAYNAME_RNC",
  250. "JB_DAYNAME_FREEZETAG"
  251. };
  252.  
  253. new g_iDay[ g_iStartDay ];
  254.  
  255. // Precache
  256. new const CrowbarModels[][] = { "models/p_crowbar.mdl", "models/v_crowbar.mdl", "models/w_crowbar.mdl" };
  257. new const ZombieModels[][]= { "models/jb_claws.mdl" };
  258. new const CrowbarSounds[][] = { "weapons/cbar_hitbod2.wav",
  259. "weapons/cbar_hitbod1.wav", "weapons/bullet_hit1.wav", "weapons/bullet_hit2.wav",
  260. "weapons/knife_slash1.wav", "weapons/cbar_miss1.wav", "weapons/cbar_hit1.wav",
  261. "debris/metal2.wav", "items/gunpickup2.wav"
  262. };
  263.  
  264. new const g_szSound_Bell[] = "buttons/bell1.wav";
  265.  
  266. new Float:DetectionMaxDistance = 1000.0;
  267. new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame;
  268. new g_bIsLast; // It's the last terrorist?
  269. new g_bIsGlowing; // Is the user glowing?
  270. new g_bHasFreeday; // Do they have a freeday?
  271. new g_bHasCrowbar; // Does he own a crowbar?
  272. new g_bHasSpeed; // Does he own speed?
  273. new g_bHasInvis; // Does he own invisibility?
  274. new g_bHasNadepack; // Does he own a nadepack?
  275. new g_bHasArmor; // Does he own armor?
  276. new g_bHasDisguise; // Does he own a disguise?
  277. new g_bHasCellKeys; // Does he own a cell key?
  278. new g_bHasFootstep; // Does he own no footstep?
  279. new g_bIsChosen; // It's the chosen ct for the battle?
  280. new g_bIsAlive; // Are we alive?
  281. new g_bIsConnected; // Are we connected?
  282. new g_bIsSimon; // Are we simon?
  283. new g_bHasMenuOpen; // Has a menu open
  284. new g_bInDisguise; // Are they in disguise
  285. new g_bInMathProblem; // Are we in math problem
  286. new g_bHasVotedAlready; // Did we vote already?
  287. new g_bHasClosedMenu; // Did we close the vote menu?
  288. new bool:g_bBoxMatch; // Are we in a box match?
  289. new bool:g_bAutoOpened; // Did the cells open at 8:00?
  290. new bool:g_bAlreadyOpened; // If the cells have been opened before 8:00
  291. new bool:g_bInLr; // Is the terrorist in an Lr?
  292. new bool:g_bCanBuy; // Can they use the shop?
  293. new bool:g_bDayHasStarted;
  294. new bool:g_bGrenade;
  295. new bool:g_bFrozenTime;
  296. new bool:g_bTeamDivided;
  297. new bool:g_bSprayMessages;
  298. new bool:g_bBufferDoors;
  299. new g_bHeadShot[MAX_PLAYERS+1][MAX_PLAYERS+1];
  300. new g_iFinalCT;
  301. new g_iRingSprite; // ShockWave Sprite
  302. new g_iCrowbars; // number of players with crowbars
  303. new g_iDisguise; // number of players with disguise
  304. new g_iCellKeys; // number of players with cell keys
  305. new g_iSpeed; // number of players with speed
  306. new g_iInvis; // number of players with invisibility
  307. new g_iFootstep; // number of players with no footsteps
  308. new g_iMsgSayText; // SayText (ColorPrint)
  309. new g_iMsgTextMsg;
  310. new g_iMsgId_ScreenFade;
  311. new g_iMsgFog;
  312. new g_iMsgDeath;
  313. new g_iMsgScoreInfo;
  314. new g_iBlockLastRequest; // Block Last Request Command (BugFix)
  315. new g_iGameType; // Last Request Game Type
  316. new g_iPoints[MAX_PLAYERS+1]; // Amount of Points a player has
  317. new g_iAdminDay = 0;
  318. new g_iVictimTeam;
  319.  
  320. #if defined SAVE_METHOD_NICK
  321. new g_iAuth[MAX_PLAYERS+1][32];
  322. #endif
  323. #if defined SAVE_METHOD_IP
  324. new g_iAuthIP[MAX_PLAYERS+1][32];
  325. #endif
  326. #if defined SAVE_METHOD_ID
  327. new g_iAuthID[MAX_PLAYERS+1][32];
  328. #endif
  329.  
  330. new g_vault; // Open a new vault to store a players points.
  331. new g_buttonvault; // Open a new vault to store the cell door button.
  332. new iEnt; // This is the button
  333. new explosion_sprite; // Suicide bomber sprite
  334. new szMap[33];
  335. new szClass[33];
  336. new szModel[33];
  337. new g_ThermalOn[MAX_PLAYERS+1];
  338. new HamHook:g_iHhTakeDamagePost;
  339. new g_Timer;
  340. new g_FrozenT;
  341. new g_10HP = 10;
  342. new g_25HP = 25;
  343. new g_50HP = 50;
  344. new g_100HP = 100;
  345. new mathAnswer[MAX_PLAYERS+1];
  346. new mathEquations[MAX_PLAYERS+1][128];
  347. new g_pRoundTime;
  348. //Thanks to exo
  349. new Float:g_fRoundStartTime;
  350. new Float:g_fRoundTime;
  351.  
  352. new const g_iOperators[4][2] = {
  353. "+",
  354. "-",
  355. "*",
  356. "/"
  357. };
  358.  
  359. new const g_iSpeakNames[][] = {
  360. "",
  361. "JB_CHANNEL_M1",
  362. "JB_CHANNEL_M2",
  363. "JB_CHANNEL_M3",
  364. "JB_CHANNEL_M4"
  365. };
  366.  
  367. new g_iTimerEntity;
  368.  
  369. new const SayClientCmds[][64] = {
  370. "lr", "ClCmd_LastRequest", "spray", "CmdSprayMessage", "status", "status", "box", "ClCmd_boxmatch", "boxmatch", "ClCmd_boxmatch",
  371. "day", "specialday_check", "days", "specialday_check", "voteday", "CheckStartVote", "endday", "specialday_ends",
  372. "glow", "JBGlowMenu", "freeday", "JBGlowMenu", "unglow", "JBUnglowMenu",
  373. "class", "ClassMenu", "shop", "ClCmd_shop", "point", "ClCmd_points", "points", "ClCmd_points", "simon", "ClCmd_simon",
  374. "talkchannel", "ClCmd_channel", "talk", "ClCmd_channel", "channel", "ClCmd_channel", "mic", "ClCmd_channel",
  375. "close", "ClCmd_closedoors", "closedoors", "ClCmd_closedoors", "open", "ClCmd_opendoors", "opendoors", "ClCmd_opendoors",
  376. "random", "ClCmd_randomct", "next", "ClCmd_nextproblem"
  377. };
  378.  
  379. enum _:Cvars
  380. {
  381. cvar_shop,
  382. cvar_killpoints,
  383. cvar_headshotpoints,
  384. cvar_crowbarprice,
  385. cvar_armorprice,
  386. cvar_disguiseprice,
  387. cvar_nadepackprice,
  388. cvar_speedprice,
  389. cvar_invisprice,
  390. cvar_footstepprice,
  391. cvar_crowbarlimit,
  392. cvar_invislimit,
  393. cvar_footsteplimit,
  394. cvar_speedlimit,
  395. cvar_disguiselimit,
  396. cvar_alphavalue,
  397. cvar_shopspeed,
  398. cvar_admindaywait,
  399. cvar_autostartvote,
  400. cvar_blockvoice,
  401. cvar_fogeffect,
  402. cvar_sprayenable,
  403. cvar_shootbuttons,
  404. cvar_cellkeyslimit,
  405. cvar_cellkeysprice
  406. };
  407.  
  408. new const cvar_names[Cvars][] = {
  409. "jb_shop", // Enable/disable shop
  410. "jb_points_kill", // Points per kill
  411. "jb_points_headshot", // Additional points per headshot
  412. "jb_shop_crowbar", // price for crowbar
  413. "jb_shop_armor", // price for armor
  414. "jb_shop_disguise", // price for armor
  415. "jb_shop_nadepack", // price for nade pack
  416. "jb_shop_speed", // price for speed
  417. "jb_shop_invisibility", // price for stealth
  418. "jb_shop_footstep", // price for footstep
  419. "jb_crowbar_limit", // crowbar limit
  420. "jb_invisibility_limit",// stealth limit
  421. "jb_footstep_limit", // footstep limit
  422. "jb_speed_limit", // speed limit
  423. "jb_disguise_limit", // disguise limit
  424. "jb_shop_alpha_value", // alpha value
  425. "jb_shop_speed_value", // speed value
  426. "jb_admin_daywait", // How many days an non admin has to wait before starting a day
  427. "jb_startvote_wait", // How many days/rounds to wait before automaticly starting a day vote
  428. "jb_blockvoice", // 0- Alltalk 1- Guards can't hear prisoners 2- Prisoners can't talk
  429. "jb_fogeffect", // Enable Fog (1 = Enable) (2 = Disable)
  430. "jb_enablespray", // Enable spray (1 = Enable) (2 = Disable)
  431. "jb_shootbuttons", // Allow button press by bullets
  432. "jb_cellkey_limit", // call keys limit
  433. "jb_shop_cellkeys" // price for cell keys
  434. };
  435.  
  436. new const cvar_defaults[Cvars][] = {
  437. "1", // Bekapcsolja/kikapcsolja a Boltot
  438. "1", // Egy oleseret mennyi pontot kapjon
  439. "1", // Fejlovesert mennyi pontot kapjon
  440. "20", // Feszito Vas Ara
  441. "10", // Pancel Ara
  442. "50", // Pancel Ara
  443. "10", // Vilagito Csomag Pack ara
  444. "10", // Sebesseg Ara
  445. "10", // Lopakodas Ara
  446. "10", // Halk Lepes Ara
  447. "2", // Feszitovas limit
  448. "5", // Lopakodo limit
  449. "5", // Halk lepes limit
  450. "5", // Sebesseg limit
  451. "1", // Elrejtes limit
  452. "120", // alfa erteke
  453. "300", // sebesseg erteke
  454. "2", // Hany napot kell adminra varni, hogy o szavaztasson
  455. "4", // Hany napot/kort kell varni mielott megkezdodik az auto szavazas
  456. "1", // 0- Beszed 1- Orok nem, csak foglyok 2- Rabok nem tudnak beszelni
  457. "1", // Kod Bekapcsolasa (1 = bekapcsol) (2 = kikapcsol)
  458. "1", // Spray Bekapcsolasa (1 = bekapcsol) (2 = kikapcsol)
  459. "1", // Hagyjuk a gombra, hogy nyomja meg golyot
  460. "2", // Hivasbillentyuk limit
  461. "45" // Cella gombok ara
  462. };
  463.  
  464. new cvar_pointer[Cvars];
  465.  
  466. /*================================================================================
  467.  [Init]
  468. =================================================================================*/
  469. public plugin_init()
  470. {
  471. register_plugin(PLUGIN_NAME, PLUGIN_VERS, PLUGIN_AUTH);
  472. register_cvar(PLUGIN_CVAR, PLUGIN_VERS, FCVAR_SERVER|FCVAR_SPONLY);
  473.  
  474. register_dictionary("jailbreakmod.txt");
  475.  
  476. // Variables
  477. g_iMaxPlayers = get_maxplayers();
  478. g_iMsgSayText = get_user_msgid("SayText");
  479. g_iMsgTextMsg = get_user_msgid("TextMsg");
  480. g_iMsgId_ScreenFade = get_user_msgid("ScreenFade");
  481. g_iMsgFog = get_user_msgid("Fog");
  482. g_iMsgDeath = get_user_msgid("DeathMsg");
  483. g_iMsgScoreInfo = get_user_msgid("ScoreInfo");
  484.  
  485. g_bCanBuy = true;
  486. g_bAutoOpened = false;
  487.  
  488. // HAM Forwards
  489. RegisterHam(Ham_Spawn, "player", "Fwd_PlayerSpawn_Post", 1);
  490. RegisterHam(Ham_Killed, "player", "Fwd_PlayerKilled_Pre", 0);
  491. RegisterHam(Ham_TraceAttack, "player", "Fwd_TraceAttack_Player", 1);
  492. RegisterHam(Ham_TraceAttack, "func_button", "Fwd_ButtonAttack");
  493. RegisterHam(Ham_TraceAttack, "func_door", "Fwd_DoorAttack");
  494. RegisterHam(Ham_Touch, "player", "Fwd_PlayerTouch");
  495. RegisterHam(Ham_Touch, "weaponbox", "Fwd_PlayerWeaponTouch");
  496. RegisterHam(Ham_Touch, "armoury_entity", "Fwd_PlayerWeaponTouch");
  497. RegisterHam(Ham_AddPlayerItem, "player", "Player_AddPlayerItem", 0);
  498. RegisterHam(Ham_Player_ResetMaxSpeed, "player", "Player_ResetMaxSpeed", 1);
  499. RegisterHam(Ham_TakeDamage, "player", "Fwd_PlayerDamage");
  500. g_iHhTakeDamagePost = RegisterHam(Ham_TakeDamage, "player", "Player_TakeDamage_Post", 1);
  501. DisableHamForward(g_iHhTakeDamagePost);
  502.  
  503. new szWeaponName[32];
  504. for(new i=CSW_P228; i<=CSW_P90; i++)
  505. if( get_weaponname(i, szWeaponName, charsmax(szWeaponName)) )
  506. RegisterHam(Ham_Item_Deploy, szWeaponName, "Fwd_ItemDeploy_Post", 1);
  507.  
  508. RegisterHam(Ham_Item_Deploy, "weapon_knife", "Fwd_ItemDeploy2_Post", 1);
  509.  
  510. for (new i = 0; i < sizeof(g_szButtonClasses); i++)
  511. RegisterHam(Ham_Use, g_szButtonClasses[i], "Fwd_Use_Pre", 0);
  512.  
  513. register_forward(FM_EmitSound, "sound_emit");
  514. register_forward(FM_Voice_SetClientListening, "Fwd_SetVoice");
  515. register_forward(FM_Think, "Fwd_Entity_Think");
  516. register_forward(FM_SetModel,"Fwd_Model_Think");
  517. register_forward(FM_AddToFullPack, "Fwd_AddToFullPack", 1);
  518.  
  519. register_touch(g_szClassNameCrowbar, "worldspawn", "CrowbarTouch");
  520. register_touch(g_szClassNameCrowbar, "player", "Fwd_PlayerCrowbarTouch");
  521.  
  522. for(new i = 0; i < Cvars; i++)
  523. cvar_pointer[i] = register_cvar(cvar_names[i] , cvar_defaults[i]);
  524.  
  525. g_pRoundTime = get_cvar_pointer("mp_roundtime");
  526.  
  527. // Events
  528. register_logevent("EventNewRound", 2, "1=Round_Start");
  529. register_logevent("EventRoundEnd", 2, "1&Restart_Round");
  530. register_logevent("EventRoundEnd", 2, "1=Game_Commencing");
  531. register_logevent("EventRoundEnd", 2, "1=Round_End");
  532. register_event("SendAudio", "Event_SendAudio", "a", "2&%!MRAD_terwin");
  533. register_event("NVGToggle", "Event_NVGToggle", "be");
  534. register_event("23", "EventSpray", "a", "1=112");
  535. register_message(get_user_msgid("SendAudio"), "MsgSendAudio");
  536. register_message(get_user_msgid("StatusIcon"), "MsgStatusIcon");
  537. register_message(get_user_msgid("FlashBat"), "MsgFlashBat");
  538. register_message(get_user_msgid("Flashlight"), "MsgFlashLight");
  539.  
  540. // Client Commands
  541. register_clcmd("wear_disguise", "ClCmd_CheckDisguise", _, "Wear Disguise");
  542. register_clcmd("glow_blue", "Clcmd_GlowBlue", _, "Glow Blue");
  543. register_clcmd("glow_red", "Clcmd_GlowRed", _, "Glow Red");
  544. register_clcmd("unglow", "Clcmd_UnglowPlayer", _, "Unglow Player");
  545. register_clcmd("drop", "ClCmd_drop", _, "Crowbar Drop");
  546. register_clcmd("say", "ClCmd_Say", _, "Check Answer");
  547.  
  548. for(new i = 0; i < sizeof(SayClientCmds); i = i+2)
  549. rd_register_saycmd(SayClientCmds[i], SayClientCmds[i+1], 0);
  550.  
  551. register_concmd("amx_take_points", "cmd_take_points", ADMIN_POINTS, "<target> <amount>");
  552. register_concmd("amx_give_points", "cmd_give_points", ADMIN_POINTS, "<target> <amount>");
  553. register_concmd("amx_reset_points", "cmd_reset_points", ADMIN_POINTS, "<target>");
  554. register_concmd("amx_set_button", "cmd_set_button", ADMIN_RCON);
  555.  
  556. g_iTimerEntity = create_entity( "info_target" );
  557. entity_set_string( g_iTimerEntity, EV_SZ_classname, "hud_entity" );
  558. register_think( "hud_entity", "Fwd_HudThink" );
  559. entity_set_float( g_iTimerEntity, EV_FL_nextthink, get_gametime() + 1.0 );
  560.  
  561. #if defined SAVE_METHOD_NICK
  562. g_vault = nvault_open("jbpoints_nicks");
  563. #endif
  564. #if defined SAVE_METHOD_IP
  565. g_vault = nvault_open("jbpoints_ip");
  566. #endif
  567. #if defined SAVE_METHOD_ID
  568. g_vault = nvault_open("jbpoints");
  569. #endif
  570. if(g_vault == INVALID_HANDLE)
  571. set_fail_state( "Error opening Points nVault" );
  572. }
  573.  
  574. enum Commands
  575. {
  576. say,
  577. say_slash,
  578. say_dot,
  579. sayteam,
  580. sayteam_slash,
  581. sayteam_dot
  582. };
  583.  
  584. new const say_commands[Commands][] = {
  585. "say /%s",
  586. "say %s",
  587. "say .%s",
  588. "say_team %s",
  589. "say_team /%s",
  590. "say_team .%s"
  591. };
  592.  
  593. stock rd_register_saycmd(const saycommand[], const function[], flags) {
  594. static temp[64];
  595. for (new Commands:i = say; i < Commands; i++)
  596. {
  597. formatex(temp, 63, say_commands[i], saycommand);
  598. register_clcmd(temp, function, flags);
  599. }
  600. }
  601.  
  602. public MsgFlashLight( const MsgId, const MsgType, const id )
  603. set_msg_arg_int( 2, ARG_BYTE, 100 );
  604.  
  605. public MsgFlashBat( const MsgId, const MsgType, const id ) {
  606. if( get_msg_arg_int( 1 ) < 100 ) {
  607. set_msg_arg_int( 1, ARG_BYTE, 100 );
  608.  
  609. set_pdata_int( id, m_iFlashBattery, 100, 5 );
  610. }
  611. }
  612.  
  613. public Fwd_ButtonAttack(button, id, Float:damage, Float:direction[3], tracehandle, damagebits)
  614. {
  615. new Float:fNextUse;
  616. pev(button, pev_fuser4, fNextUse);
  617.  
  618. new Float:fGametime = get_gametime();
  619. new class[32], sModel[32];
  620. pev(button, pev_classname, class, 32);
  621. pev(button, pev_model, sModel, 32);
  622.  
  623. if (fNextUse > fGametime)
  624. return HAM_IGNORED;
  625.  
  626. if(is_valid_ent(button) && get_pcvar_num(cvar_pointer[cvar_shootbuttons]) == 1)
  627. {
  628. ExecuteHamB(Ham_Use, button, id, 0, 1, 1.0);
  629. entity_set_float(button, EV_FL_frame, 0.0);
  630. if( equal(sModel, szModel, 0) )
  631. {
  632. new szTargetName[32];
  633. get_user_name(id, szTargetName, charsmax(szTargetName));
  634. if(g_bAutoOpened)
  635. g_bAutoOpened = false;
  636. else {
  637. static iTimeLeft, iMinutes, iSeconds;
  638. iTimeLeft = floatround(g_fRoundTime - (get_gametime() - g_fRoundStartTime),floatround_ceil);
  639.  
  640. if(iTimeLeft <= 0)
  641. {
  642. iMinutes = 0;
  643. iSeconds = 0;
  644. }
  645. else {
  646. iMinutes = (iTimeLeft / 60);
  647. iSeconds = (iTimeLeft % 60);
  648. }
  649.  
  650. if(id > 0)
  651. fnColorPrint(0, "%L",
  652. LANG_SERVER, "JB_OPENCELLS", '^3', szTargetName, '^1', '^4', '^1',
  653. '^3', iMinutes, '^1', '^3', iSeconds > 9 ? "" : "0", iSeconds);
  654. }
  655.  
  656. if (!g_bAlreadyOpened)
  657. {
  658. remove_task( TASKID );
  659. g_bAlreadyOpened = true;
  660. g_bCanBuy = false;
  661. }
  662.  
  663. set_pev(button, pev_fuser4, fGametime + get_pdata_float(button, m_flWait, 5));
  664. }
  665. }
  666. return HAM_IGNORED;
  667. }
  668.  
  669. public Fwd_DoorAttack(door, id, Float:damage, Float:direction[3], tracehandle, damagebits)
  670. {
  671. if(is_valid_ent(door))
  672. {
  673. if(g_iDay[ TOTAL_DAYS ] != DAY_NONE)
  674. {
  675. ExecuteHamB(Ham_Use, door, id, 0, 1, 1.0);
  676. entity_set_float(door, EV_FL_frame, 0.0);
  677. }
  678. if(get_bit(g_bHasCellKeys, id))
  679. {
  680. fnColorPrint(id, "%L", LANG_SERVER, "JB_SHOP_CELLKEY1");
  681. ExecuteHamB(Ham_Use, door, id, 0, 1, 1.0);
  682. entity_set_float(door, EV_FL_frame, 0.0);
  683. clear_bit(g_bHasCellKeys, id);
  684. }
  685. }
  686. return HAM_IGNORED;
  687. }
  688.  
  689. public Fwd_PlayerWeaponTouch( const iEntity, const id )
  690. {
  691. if(!IsPlayer(id))
  692. return HAM_IGNORED;
  693.  
  694. new Model[32];
  695. pev(iEntity, pev_model, Model, 31);
  696.  
  697. static CsTeams:team;
  698. team = cs_get_user_team(id);
  699.  
  700. switch( g_iDay[ TOTAL_DAYS ] )
  701. {
  702. case DAY_ZOMBIE:
  703. switch(team)
  704. {
  705. case CS_TEAM_T: if (!equal(Model, "models/w_ak47.mdl")) return HAM_SUPERCEDE;
  706. case CS_TEAM_CT: return HAM_SUPERCEDE;
  707. }
  708. case DAY_SHARK:
  709. switch(team)
  710. {
  711. case CS_TEAM_T: if (!equal(Model, "models/w_awp.mdl")) return HAM_SUPERCEDE;
  712. case CS_TEAM_CT: return HAM_SUPERCEDE;
  713. }
  714. case DAY_NIGHT:
  715. switch(team)
  716. {
  717. case CS_TEAM_T: if (!equal(Model, "models/w_m4a1.mdl")) return HAM_SUPERCEDE;
  718. case CS_TEAM_CT: return HAM_SUPERCEDE;
  719. }
  720. case DAY_HIDENSEEK:
  721. if(team == CS_TEAM_T)
  722. return HAM_SUPERCEDE;
  723. case DAY_REZOMBIE:
  724. switch(team)
  725. {
  726. case CS_TEAM_T: return HAM_SUPERCEDE;
  727. case CS_TEAM_CT: if (!equal(Model, "models/w_ak47.mdl")) return HAM_SUPERCEDE;
  728. }
  729. case DAY_RESHARK:
  730. switch(team)
  731. {
  732. case CS_TEAM_T: return HAM_SUPERCEDE;
  733. case CS_TEAM_CT: if (!equal(Model, "models/w_awp.mdl")) return HAM_SUPERCEDE;
  734. }
  735. case DAY_RENIGHT:
  736. switch(team)
  737. {
  738. case CS_TEAM_T: return HAM_SUPERCEDE;
  739. case CS_TEAM_CT: if (!equal(Model, "models/w_m4a1.mdl")) return HAM_SUPERCEDE;
  740. }
  741. case DAY_FREEZETAG:
  742. return HAM_SUPERCEDE;
  743. }
  744.  
  745. return HAM_IGNORED;
  746. }
  747.  
  748. public Player_AddPlayerItem(id, iEntity)
  749. {
  750. new iWeapID = cs_get_weapon_id( iEntity );
  751.  
  752. if( !iWeapID )
  753. return HAM_IGNORED;
  754.  
  755. static CsTeams:team;
  756. team = cs_get_user_team(id);
  757. switch( g_iDay[ TOTAL_DAYS ] )
  758. {
  759. case DAY_ZOMBIE:
  760. switch(team)
  761. {
  762. case CS_TEAM_T:
  763. if(iWeapID != CSW_KNIFE && iWeapID != CSW_AK47)
  764. {
  765. SetHamReturnInteger( 1 );
  766. return HAM_SUPERCEDE;
  767. }
  768. case CS_TEAM_CT:
  769. if(iWeapID != CSW_KNIFE)
  770. {
  771. SetHamReturnInteger( 1 );
  772. return HAM_SUPERCEDE;
  773. }
  774. }
  775. case DAY_SHARK:
  776. switch(team)
  777. {
  778. case CS_TEAM_T:
  779. if(iWeapID != CSW_KNIFE && iWeapID != CSW_AWP)
  780. {
  781. SetHamReturnInteger( 1 );
  782. return HAM_SUPERCEDE;
  783. }
  784. case CS_TEAM_CT:
  785. if(iWeapID != CSW_KNIFE)
  786. {
  787. SetHamReturnInteger( 1 );
  788. return HAM_SUPERCEDE;
  789. }
  790. }
  791. case DAY_NIGHT:
  792. switch(team)
  793. {
  794. case CS_TEAM_T:
  795. if(iWeapID != CSW_KNIFE && iWeapID != CSW_M4A1)
  796. {
  797. SetHamReturnInteger( 1 );
  798. return HAM_SUPERCEDE;
  799. }
  800. case CS_TEAM_CT:
  801. if(iWeapID != CSW_KNIFE)
  802. {
  803. SetHamReturnInteger( 1 );
  804. return HAM_SUPERCEDE;
  805. }
  806. }
  807. case DAY_HIDENSEEK:
  808. if(team == CS_TEAM_T)
  809. if(iWeapID != CSW_KNIFE)
  810. {
  811. SetHamReturnInteger( 1 );
  812. return HAM_SUPERCEDE;
  813. }
  814. case DAY_REZOMBIE:
  815. switch(team)
  816. {
  817. case CS_TEAM_T:
  818. if(iWeapID != CSW_KNIFE)
  819. {
  820. SetHamReturnInteger( 1 );
  821. return HAM_SUPERCEDE;
  822. }
  823. case CS_TEAM_CT:
  824. if(iWeapID != CSW_KNIFE && iWeapID != CSW_AK47)
  825. {
  826. SetHamReturnInteger( 1 );
  827. return HAM_SUPERCEDE;
  828. }
  829. }
  830. case DAY_RESHARK:
  831. switch(team)
  832. {
  833. case CS_TEAM_CT:
  834. if(iWeapID != CSW_KNIFE && iWeapID != CSW_AWP)
  835. {
  836. SetHamReturnInteger( 1 );
  837. return HAM_SUPERCEDE;
  838. }
  839. case CS_TEAM_T:
  840. if(iWeapID != CSW_KNIFE)
  841. {
  842. SetHamReturnInteger( 1 );
  843. return HAM_SUPERCEDE;
  844. }
  845. }
  846. case DAY_RENIGHT:
  847. switch(team)
  848. {
  849. case CS_TEAM_T:
  850. if(iWeapID != CSW_KNIFE)
  851. {
  852. SetHamReturnInteger( 1 );
  853. return HAM_SUPERCEDE;
  854. }
  855. case CS_TEAM_CT:
  856. if(iWeapID != CSW_KNIFE && iWeapID != CSW_M4A1)
  857. {
  858. SetHamReturnInteger( 1 );
  859. return HAM_SUPERCEDE;
  860. }
  861. }
  862. case DAY_FREEZETAG:
  863. if(iWeapID != CSW_KNIFE)
  864. {
  865. SetHamReturnInteger( 1 );
  866. return HAM_SUPERCEDE;
  867. }
  868. }
  869.  
  870. return HAM_IGNORED;
  871. }
  872.  
  873. public plugin_precache()
  874. {
  875. g_iRingSprite = precache_model("sprites/shockwave.spr");
  876.  
  877. static i;
  878. for(i = 0; i < sizeof(CrowbarModels); i++)
  879. precache_model(CrowbarModels[i]);
  880.  
  881. for(i = 0; i < sizeof(CrowbarSounds); i++)
  882. precache_sound(CrowbarSounds[i]);
  883.  
  884. precache_model(ZombieModels[0]);
  885.  
  886. precache_model("models/player/urban/urban.mdl");
  887. precache_model("models/player/leet/leet.mdl");
  888.  
  889. precache_sound(g_szSound_Bell);
  890.  
  891. g_buttonvault = nvault_open("cellbuttons");
  892. if(g_buttonvault == INVALID_HANDLE)
  893. set_fail_state("Error opening Cell Buttons nVault");
  894. RegisterHam(Ham_Spawn, "func_button", "ButtonSpawn");
  895. Get_Button();
  896. }
  897.  
  898. public plugin_cfg()
  899. get_mapname(szMap, 32);
  900.  
  901. public client_putinserver(id) {
  902. if(bool:!is_user_hltv(id))
  903. set_bit(g_bIsConnected, id);
  904.  
  905. fm_set_speak(id, SPEAK_NORMAL);
  906.  
  907. clear_bit(g_bIsAlive, id);
  908. reset_all(id);
  909. }
  910.  
  911. public client_authorized(id) {
  912. if(!is_user_bot(id) && !is_user_hltv(id))
  913. {
  914. #if defined SAVE_METHOD_NICK
  915. get_user_name(id, g_iAuth[id], 31);
  916. #endif
  917. #if defined SAVE_METHOD_IP
  918. get_user_ip(id, g_iAuthIP[id], 31);
  919. #endif
  920. #if defined SAVE_METHOD_ID
  921. get_user_authid(id, g_iAuthID[id], 31);
  922. #endif
  923.  
  924. GetData(id);
  925. }
  926. }
  927.  
  928. public plugin_end(){
  929. nvault_close(g_vault);
  930. nvault_close(g_buttonvault);
  931. }
  932.  
  933. public client_disconnect(id){
  934. if(get_bit(g_bIsSimon, id)){
  935. set_task(0.1, "ResetSimon");
  936. clear_bit(g_bIsSimon, id);
  937. }
  938. remove_task(id+TASK_BEAM);
  939. // Save Points
  940. SaveData(id);
  941. clear_bit(g_bIsConnected, id);
  942. clear_bit(g_bIsAlive, id);
  943.  
  944. if( g_iDay[TOTAL_DAYS] == DAY_FREEZETAG )
  945. CheckTerrorist( );
  946. }
  947.  
  948. public status( id )
  949. if( g_iDay[ TOTAL_DAYS ] == DAY_FREEZETAG )
  950. fnColorPrint(id, "%L", LANG_SERVER, "JB_FREEZETAG_M1", '^3', fnGetTerrorists(), '^1', '^3', g_FrozenT );
  951.  
  952. public EventNewRound() {
  953. g_fRoundTime = floatmul(get_pcvar_float(g_pRoundTime),60.0) - 1.0;
  954. g_fRoundStartTime = get_gametime();
  955.  
  956. set_task(CELL_TIMER, "TASK_PushButton", TASKID );//61
  957. if(g_iAdminDay >= 1)
  958. g_iAdminDay--;
  959.  
  960. g_iAutoStartVote++;
  961. if(g_iAutoStartVote == get_pcvar_num(cvar_pointer[cvar_autostartvote]))
  962. {
  963. fnColorPrint(0, "%L", LANG_SERVER, "JB_VOTEDAY_M1");
  964. set_task(5.0, "CheckVoteDay");
  965. g_iAutoStartVote = 0;
  966. }
  967.  
  968. // Reset LR Blocker
  969. g_iBlockLastRequest = 0;
  970. g_bDayHasStarted = false;
  971. g_bGrenade = false;
  972. g_bTeamDivided = false;
  973. remove_entity_name(g_szClassNameCrowbar);
  974. Day_Ends( );
  975. }
  976.  
  977. public CheckVoteDay()
  978. {
  979. static iPlayers[32], iNum, iPlayer, i;
  980. get_players( iPlayers, iNum );
  981. for( i = 0; i < iNum; i++ )
  982. {
  983. iPlayer = iPlayers[i];
  984. StartVote(iPlayer, 0);
  985. }
  986. }
  987.  
  988. public specialday_check(id){
  989. if(get_user_team(id) != 2 )
  990. {
  991. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M1");
  992. return PLUGIN_HANDLED;
  993. }
  994.  
  995. if(!access(id, DAY_ACCESS) )
  996. {
  997. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M2");
  998. return PLUGIN_HANDLED;
  999. }
  1000.  
  1001. if(!get_bit(g_bIsConnected, id))
  1002. return PLUGIN_HANDLED;
  1003.  
  1004. if(!get_bit(g_bIsAlive, id))
  1005. {
  1006. fnColorPrint(id, "%L", LANG_SERVER, "JB_USER_DEAD");
  1007. return PLUGIN_HANDLED;
  1008. }
  1009.  
  1010. if(g_iDay[ TOTAL_DAYS ] != DAY_NONE)
  1011. {
  1012. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M3");
  1013. return PLUGIN_HANDLED;
  1014. }
  1015.  
  1016. if(g_bDayHasStarted)
  1017. {
  1018. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M4");
  1019. return PLUGIN_HANDLED;
  1020. }
  1021. if(g_iAreWeInaVote)
  1022. {
  1023. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M5");
  1024. return PLUGIN_HANDLED;
  1025. }
  1026. static g_iAdminDayChat;
  1027. if( g_iAdminDay == 1 )
  1028. g_iAdminDayChat = true;
  1029. else g_iAdminDayChat = false;
  1030.  
  1031. if( g_iAdminDay >= 1 && !access(id, DAY_ACCESS) )
  1032. {
  1033. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M6", g_iAdminDay, g_iAdminDayChat ? "" : "s" );
  1034. return PLUGIN_HANDLED;
  1035. }
  1036.  
  1037. if(fnGetTerrorists() <= 1)
  1038. {
  1039. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M7");
  1040. return PLUGIN_HANDLED;
  1041. }
  1042.  
  1043. specialday_menu(id);
  1044. return PLUGIN_HANDLED;
  1045. }
  1046.  
  1047. public specialday_ends(id)
  1048. {
  1049. if(get_user_team(id) != 2){
  1050. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M8");
  1051. return PLUGIN_HANDLED;
  1052. }
  1053. if(g_iDay[ TOTAL_DAYS ] == DAY_NONE){
  1054. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M9");
  1055. return PLUGIN_HANDLED;
  1056. }
  1057. static szName[32]; get_user_name(id, szName, charsmax(szName));
  1058. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M10", '^3', szName, '^1');
  1059.  
  1060. Day_Ends( );
  1061. return PLUGIN_HANDLED;
  1062. }
  1063.  
  1064. stock StripPlayerWeapons(id)
  1065. {
  1066. strip_user_weapons(id);
  1067. give_item(id, "weapon_knife");
  1068. set_pdata_int(id, OFFSET_PRIMWEAPON, 0);
  1069. }
  1070.  
  1071. public Day_Ends( )
  1072. {
  1073. if( g_iDay[ TOTAL_DAYS ] == DAY_NONE )
  1074. return PLUGIN_HANDLED;
  1075.  
  1076. static CsTeams:team;
  1077. static iPlayers[32], iNum, i, iPlayer;
  1078. get_players( iPlayers, iNum, "a" );
  1079. for ( i=0; i<iNum; i++ )
  1080. {
  1081. iPlayer = iPlayers[i];
  1082. team = cs_get_user_team(iPlayer);
  1083. set_user_health(iPlayer, g_100HP);
  1084. set_user_noclip(iPlayer, 0);
  1085. set_user_footsteps(iPlayer, 0);
  1086. set_user_maxspeed(iPlayer, 250.0);
  1087. set_user_rendering(iPlayer, _, 0, 0, 0, _, 0);
  1088. switch(g_iDay[ TOTAL_DAYS ])
  1089. {
  1090. case DAY_ZOMBIE:
  1091. {
  1092. g_iDeaths[iPlayer] = 0;
  1093. if(team == CS_TEAM_CT)
  1094. {
  1095. if( g_ThermalOn[iPlayer] )
  1096. {
  1097. engclient_cmd(iPlayer, "nightvision");
  1098. cs_set_user_nvg(iPlayer,false);
  1099. }
  1100. else cs_set_user_nvg(iPlayer,false);
  1101. }
  1102. }
  1103. case DAY_REZOMBIE:
  1104. {
  1105. g_iDeaths[iPlayer] = 0;
  1106. if(team == CS_TEAM_T)
  1107. {
  1108. if( g_ThermalOn[iPlayer] )
  1109. {
  1110. engclient_cmd(iPlayer, "nightvision");
  1111. cs_set_user_nvg(iPlayer,false);
  1112. }
  1113. else cs_set_user_nvg(iPlayer,false);
  1114. }
  1115. }
  1116. case DAY_FREEZETAG: Unfreeze(iPlayer);
  1117. case DAY_HIDENSEEK: Unfreeze(iPlayer);
  1118. }
  1119. if(is_user_stuck(iPlayer))
  1120. ClientCommand_UnStuck(iPlayer);
  1121. }
  1122. server_cmd("sv_gravity 800");
  1123. if( g_iDay[ TOTAL_DAYS ] == DAY_ZOMBIE || g_iDay[ TOTAL_DAYS ] == DAY_REZOMBIE)
  1124. {
  1125. set_lights("#OFF");
  1126. fog(false);
  1127. }
  1128. g_iDay[ TOTAL_DAYS ] = DAY_NONE;
  1129. for ( i=0; i<iNum; i++ )
  1130. {
  1131. iPlayer = iPlayers[i];
  1132. team = cs_get_user_team(iPlayer);
  1133. switch(team)
  1134. {
  1135. case CS_TEAM_T: StripPlayerWeapons(iPlayer);
  1136. case CS_TEAM_CT: RestoreWeapons(iPlayer);
  1137. }
  1138. if (get_user_weapon(iPlayer) == CSW_KNIFE)
  1139. {
  1140. new iWeapon = get_pdata_cbase(iPlayer, m_pActiveItem, XO_PLAYER);
  1141. ExecuteHamB(Ham_Item_Deploy, iWeapon);
  1142. }
  1143. }
  1144. return PLUGIN_HANDLED;
  1145. }
  1146.  
  1147. public CheckStartVote(id)
  1148. {
  1149. if( gVoting )
  1150. {
  1151. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M11");
  1152. return PLUGIN_HANDLED;
  1153. }
  1154. if( !access(id, VOTEDAY_ACCESS) )
  1155. {
  1156. fnColorPrint(id, "%L", LANG_SERVER, "JB_NOACCESS");
  1157. return PLUGIN_HANDLED;
  1158. }
  1159.  
  1160. if(g_iDay[ TOTAL_DAYS ] != DAY_NONE || g_bDayHasStarted /* || fnGetTerrorists() <= 1 || fnGetCounterTerrorists() == 0*/ )
  1161. {
  1162. return PLUGIN_HANDLED;
  1163. }
  1164.  
  1165. StartVote(id, 0);
  1166. return PLUGIN_HANDLED;
  1167. }
  1168.  
  1169. public StartVote(id, iPage){
  1170. if(g_bDayHasStarted)
  1171. return PLUGIN_HANDLED;
  1172.  
  1173. if( !task_exists(TASK_DAYTIMER) )
  1174. {
  1175. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M12");
  1176. g_DayTimer = 30;
  1177. set_task( 1.0, "EndVote", TASK_DAYTIMER, _, _, "b" );
  1178. }
  1179.  
  1180. new gMenu[256];
  1181. formatex( gMenu, charsmax(gMenu), "%L", LANG_SERVER, "JB_VOTEMENU_TITLE", g_szPluginPrefix, g_DayTimer );
  1182.  
  1183. gVoteMenu = menu_create( gMenu, "menu_handler" );
  1184.  
  1185. new iNumber[5], szOption[40];
  1186. for( new i = 1; i < g_iStartDay; i++ )
  1187. {
  1188. num_to_str(i, iNumber, 4);
  1189. formatex(szOption, 39, "%L", LANG_SERVER, "JB_VOTEMENU_SUB", LANG_SERVER, g_iStartDayNames[i], gVotes[i]);
  1190. menu_additem(gVoteMenu, szOption, iNumber);
  1191. }
  1192.  
  1193. menu_display(id, gVoteMenu, iPage);
  1194. if( access(id, VOTEDAY_ACCESS) )
  1195. gVoting += WEIGHT_ADMIN;
  1196. else
  1197. gVoting += WEIGHT_PLAYER;
  1198.  
  1199. clear_bit(g_bHasClosedMenu, id);
  1200. g_iAreWeInaVote = true;
  1201.  
  1202. return PLUGIN_HANDLED;
  1203. }
  1204.  
  1205. new iPage;
  1206. public menu_handler(id, gVoteMenu, item)
  1207. {
  1208. //If the menu was exited or if there is not a vote
  1209. if( item == MENU_EXIT || !gVoting )
  1210. {
  1211. set_bit(g_bHasClosedMenu, id);
  1212. menu_destroy(gVoteMenu);
  1213. return PLUGIN_HANDLED;
  1214. }
  1215. if(get_bit(g_bHasVotedAlready, id))
  1216. {
  1217. player_menu_info(id, gVoteMenu, gVoteMenu, iPage);
  1218. StartVote(id, iPage);
  1219. return PLUGIN_HANDLED;
  1220. }
  1221.  
  1222. new data[6], name[64];
  1223. new access, callback;
  1224. menu_item_getinfo(gVoteMenu, item, access, data, charsmax(data), name, charsmax(name), callback);
  1225.  
  1226. new szKey = str_to_num(data);
  1227.  
  1228. new szName[32]; get_user_name(id, szName, 31);
  1229.  
  1230. if( !get_bit(g_bHasVotedAlready, id) && get_user_flags(id) & VOTEDAY_ACCESS)
  1231. {
  1232. gVotes[szKey] += WEIGHT_ADMIN;
  1233. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M13", '^3', szName, '^1', LANG_SERVER, g_iStartDayNames[ szKey ], '^4', '^1', '^4');
  1234. }
  1235. else if( !get_bit(g_bHasVotedAlready, id) )
  1236. {
  1237. gVotes[szKey] += WEIGHT_PLAYER;
  1238. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M14", '^3', szName, '^1', LANG_SERVER, g_iStartDayNames[ szKey ], '^4', '^1', '^4');
  1239. }
  1240.  
  1241. set_bit(g_bHasVotedAlready, id);
  1242. player_menu_info(id, gVoteMenu, gVoteMenu, iPage);
  1243. StartVote(id, iPage);
  1244.  
  1245. return PLUGIN_HANDLED;
  1246.  
  1247. }
  1248.  
  1249. public EndVote()
  1250. {
  1251. g_DayTimer--;
  1252. if( g_DayTimer >= 0 )
  1253. {
  1254. static iPlayers[32], iNum, iPlayer, i;
  1255. get_players( iPlayers, iNum );
  1256. for( i = 0; i < iNum; i++ )
  1257. {
  1258. iPlayer = iPlayers[i];
  1259. player_menu_info(iPlayer, gVoteMenu, gVoteMenu, iPage);
  1260. if(!get_bit(g_bHasClosedMenu, iPlayer))
  1261. StartVote(iPlayer, iPage);
  1262. }
  1263. }
  1264.  
  1265. if( g_DayTimer <= 5 )
  1266. {
  1267. new sSound[16];
  1268. num_to_word(g_DayTimer, sSound, 15);
  1269. client_cmd(0, "spk vox/%s.wav", sSound);
  1270. }
  1271.  
  1272. if( g_DayTimer <= 0 ) // if for some reason it glitches and gets below zero
  1273. {
  1274. remove_task(TASK_DAYTIMER);
  1275. new bigger = 0;
  1276. for( new i=1; i<g_iStartDay; i++ )
  1277. {
  1278. if( gVotes[i] > gVotes[bigger] )
  1279. {
  1280. bigger = i;
  1281. }
  1282. }
  1283.  
  1284. if( bigger == 0 )
  1285. {
  1286. bigger = random_num(1,13);
  1287. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M15");
  1288. }
  1289.  
  1290. EXEC_DayAction( 0, bigger);
  1291. gVoting = 0;
  1292. g_DayTimer = 0;
  1293. for( new i=1; i<g_iStartDay; i++ )
  1294. {
  1295. gVotes[i] = 0;
  1296. }
  1297. }
  1298. }
  1299.  
  1300. EXEC_DayAction( id, iValue )
  1301. {
  1302. switch( iValue )
  1303. {
  1304. case 1: g_iDay[ TOTAL_DAYS ] = DAY_GRAVITY;
  1305. case 2: g_iDay[ TOTAL_DAYS ] = DAY_FREEDAY;
  1306. case 3: g_iDay[ TOTAL_DAYS ] = DAY_ZOMBIE;
  1307. case 4: g_iDay[ TOTAL_DAYS ] = DAY_LAVA;
  1308. case 5: g_iDay[ TOTAL_DAYS ] = DAY_SHARK;
  1309. case 6: g_iDay[ TOTAL_DAYS ] = DAY_CAGE;
  1310. case 7: g_iDay[ TOTAL_DAYS ] = DAY_DEATHMATCH;
  1311. case 8: g_iDay[ TOTAL_DAYS ] = DAY_NIGHT;
  1312. case 9: g_iDay[ TOTAL_DAYS ] = DAY_SPARTAN;
  1313. case 10: g_iDay[ TOTAL_DAYS ] = DAY_HIDENSEEK;
  1314. case 11: g_iDay[ TOTAL_DAYS ] = DAY_REZOMBIE;
  1315. case 12: g_iDay[ TOTAL_DAYS ] = DAY_RESHARK;
  1316. case 13: g_iDay[ TOTAL_DAYS ] = DAY_RENIGHT;
  1317. case 14: g_iDay[ TOTAL_DAYS ] = DAY_FREEZETAG;
  1318. }
  1319.  
  1320. static iPlayers[32], iNum, i, iPlayer;
  1321. get_players(iPlayers, iNum);
  1322.  
  1323. new newmenu;
  1324. for( i = 0; i < iNum; i++ )
  1325. {
  1326. iPlayer = iPlayers[i];
  1327. clear_bit(g_bHasVotedAlready, iPlayer);
  1328. if( player_menu_info(iPlayer, gVoteMenu, newmenu) )
  1329. {
  1330. menu_cancel(iPlayer);
  1331. client_cmd(iPlayer, "slot1" );
  1332. }
  1333. clear_bit(g_bHasClosedMenu, iPlayer);
  1334. }
  1335. iPage = 0;
  1336. do_specialday(id);
  1337. g_iAreWeInaVote = false;
  1338. }
  1339.  
  1340. public specialday_menu(id)
  1341. {
  1342. new gMenu[256];
  1343. formatex( gMenu, charsmax(gMenu), "%L", LANG_SERVER, "JB_DAYMENU_TITLE");
  1344.  
  1345. new specialdaymenu = menu_create( gMenu, "specialday_submenu" );
  1346.  
  1347. new iNumber[5], szOption[64];
  1348. for( new i = 1; i < g_iStartDay; i++ )
  1349. {
  1350. num_to_str(i, iNumber, 4);
  1351. formatex(szOption, 63, "%L ", LANG_SERVER, g_iStartDayNames[i]);
  1352. menu_additem(specialdaymenu, szOption, iNumber);
  1353. }
  1354.  
  1355. menu_setprop(specialdaymenu, MPROP_EXIT, MEXIT_ALL);
  1356. menu_display(id, specialdaymenu, 0);
  1357. }
  1358.  
  1359. public specialday_submenu(id, specialdaymenu, item)
  1360. {
  1361. if (item == MENU_EXIT)
  1362. {
  1363. menu_destroy(specialdaymenu);
  1364. return PLUGIN_HANDLED;
  1365. }
  1366.  
  1367. if(!get_bit(g_bIsConnected, id))
  1368. return PLUGIN_HANDLED;
  1369.  
  1370. if(!get_bit(g_bIsAlive, id))
  1371. {
  1372. menu_destroy(specialdaymenu);
  1373. fnColorPrint(id, "%L", LANG_SERVER, "JB_USER_DEAD");
  1374. return PLUGIN_HANDLED;
  1375. }
  1376.  
  1377. new data[7], name[64];
  1378. new access, callback;
  1379. menu_item_getinfo(specialdaymenu, item, access, data, charsmax(data), name, charsmax(name), callback);
  1380.  
  1381. new Key = str_to_num(data);
  1382. for( new i = 1; i < g_iStartDay; i++ )
  1383. g_iDay[ i ] = Key;
  1384.  
  1385. g_iAdminDay = get_pcvar_num(cvar_pointer[cvar_admindaywait]) + 1;
  1386. do_specialday(id);
  1387. menu_destroy(specialdaymenu);
  1388. return PLUGIN_HANDLED;
  1389. }
  1390.  
  1391. public do_specialday(id)
  1392. {
  1393. if(g_bDayHasStarted)
  1394. {
  1395. return PLUGIN_HANDLED;
  1396. }
  1397. if(g_iDay[ TOTAL_DAYS ] == DAY_DEATHMATCH)
  1398. {
  1399. iRandom = random( sizeof(szWeapons) );
  1400. }
  1401.  
  1402. if(g_bBoxMatch)
  1403. {
  1404. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M16");
  1405. g_bBoxMatch = false;
  1406. }
  1407. switch(g_iDay[ TOTAL_DAYS ])
  1408. {
  1409. case DAY_GRAVITY: server_cmd("sv_gravity %d", GRAVITY_DAY);
  1410. case DAY_LAVA: server_cmd("decalfrequency 5");
  1411. case DAY_HIDENSEEK:
  1412. {
  1413. g_Timer = 90;
  1414. g_bFrozenTime = true;
  1415. set_task( 1.0, "countdown", TASK_HNS );
  1416. }
  1417. case DAY_FREEZETAG:
  1418. {
  1419. server_cmd("sv_gravity %d", FREEZETAG_GRAVITY);
  1420. g_FrozenT = 0;
  1421. }
  1422. case DAY_ZOMBIE:
  1423. {
  1424. set_lights(g_iZombieDayLights);
  1425. if(get_pcvar_num(cvar_pointer[cvar_fogeffect]) == 1)
  1426. fog(true);
  1427. }
  1428. case DAY_REZOMBIE:
  1429. {
  1430. set_lights(g_iZombieDayLights);
  1431. if(get_pcvar_num(cvar_pointer[cvar_fogeffect]) == 1)
  1432. fog(true);
  1433. }
  1434. }
  1435. g_bCanBuy = false;
  1436.  
  1437. if(pev_valid(iEnt))
  1438. {
  1439. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M21");
  1440. ExecuteHamB(Ham_Use, iEnt, 0, 0, 1, 1.0);
  1441. }
  1442. else {
  1443. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M22");
  1444. OpenDoors("func_door");
  1445. OpenDoors("func_door_rotating");
  1446. }
  1447.  
  1448. if(!g_bAlreadyOpened) {
  1449. remove_task( TASKID );
  1450. g_bCanBuy = false;
  1451. g_bAutoOpened = true;
  1452. g_bAlreadyOpened = true;
  1453.  
  1454. }
  1455. g_bDayHasStarted = true;
  1456. if(!g_iAreWeInaVote)
  1457. {
  1458. new szName[ 32 ]; get_user_name(id, szName, 31);
  1459. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M23", '^3', szName, '^1', '^3', LANG_SERVER, g_iStartDayNames[ g_iDay[ TOTAL_DAYS ] ] );
  1460. }
  1461. else {
  1462. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M24", '^3', LANG_SERVER, g_iStartDayNames[ g_iDay[ TOTAL_DAYS ] ] );
  1463. }
  1464.  
  1465. static iPlayers[32], iNum, i, iPlayer;
  1466. get_players( iPlayers, iNum, "a" );
  1467. for ( i=0; i<iNum; i++ )
  1468. {
  1469. iPlayer = iPlayers[i];
  1470. set_player_day(iPlayer);
  1471. }
  1472.  
  1473. return PLUGIN_HANDLED;
  1474. }
  1475.  
  1476. set_player_day(const iPlayer)
  1477. {
  1478. static CsTeams:team;
  1479. team = cs_get_user_team(iPlayer);
  1480. new g_AliveCT = fnGetCounterTerrorists();
  1481. new g_AliveT = fnGetTerrorists();
  1482.  
  1483. if(get_bit(g_bIsSimon, iPlayer))
  1484. {
  1485. fnColorPrint(iPlayer, "%L", LANG_SERVER, "JB_DAY_M17");
  1486. set_task(0.1, "ResetSimon");
  1487. clear_bit(g_bIsSimon, iPlayer);
  1488. }
  1489. if(get_bit(g_bHasNadepack, iPlayer)) {
  1490. ham_strip_weapon(iPlayer, "weapon_flashbang");
  1491. ham_strip_weapon(iPlayer, "weapon_hegrenade");
  1492. ham_strip_weapon(iPlayer, "weapon_smokegrenade");
  1493. g_iPoints[iPlayer] += get_pcvar_num(cvar_pointer[cvar_nadepackprice]);
  1494. fnColorPrint(iPlayer, "%L", LANG_SERVER, "JB_DAY_M18");
  1495. clear_bit(g_bHasNadepack, iPlayer);
  1496. }
  1497. switch(g_iDay[ TOTAL_DAYS ])
  1498. {
  1499. case DAY_FREEDAY:
  1500. if(team == CS_TEAM_T)
  1501. set_user_rendering(iPlayer, kRenderFxGlowShell, 255, 140, 0, kRenderNormal, 20);
  1502.  
  1503. case DAY_ZOMBIE:
  1504. {
  1505. switch(team)
  1506. {
  1507. case CS_TEAM_T: GiveItem(iPlayer, "weapon_ak47", 900);
  1508. case CS_TEAM_CT:
  1509. {
  1510. SaveWeapons(iPlayer);
  1511. cs_set_user_nvg(iPlayer,true);
  1512. //engclient_cmd(iPlayer, "nightvision");
  1513.  
  1514. set_user_health(iPlayer, g_AliveT * g_100HP + g_100HP);
  1515. set_user_maxspeed(iPlayer, ZOMBIE_SPEED);
  1516. if (get_user_weapon(iPlayer) == CSW_KNIFE)
  1517. {
  1518. new iWeapon = get_pdata_cbase(iPlayer, m_pActiveItem, XO_PLAYER);
  1519. ExecuteHamB(Ham_Item_Deploy, iWeapon);
  1520. }
  1521. }
  1522. }
  1523. }
  1524.  
  1525. case DAY_SHARK:
  1526. {
  1527. switch(team)
  1528. {
  1529. case CS_TEAM_T: GiveItem(iPlayer, "weapon_awp", 30);
  1530. case CS_TEAM_CT:
  1531. {
  1532. SaveWeapons(iPlayer);
  1533. set_user_noclip(iPlayer, 1);
  1534. set_user_health(iPlayer, g_AliveT * g_25HP + g_100HP);
  1535. }
  1536. }
  1537. }
  1538.  
  1539. case DAY_DEATHMATCH:
  1540. {
  1541. SaveWeapons(iPlayer);
  1542. GiveItem(iPlayer, szWeapons[iRandom], iBpAmmo[iRandom]);
  1543. }
  1544.  
  1545. case DAY_NIGHT:
  1546. {
  1547. switch(team)
  1548. {
  1549. case CS_TEAM_T:
  1550. {
  1551. GiveItem(iPlayer, "weapon_m4a1", 90);
  1552. GiveItem(iPlayer, "weapon_deagle", 35);
  1553. }
  1554. case CS_TEAM_CT:
  1555. {
  1556. SaveWeapons(iPlayer);
  1557. set_user_footsteps(iPlayer, 1);
  1558. set_user_maxspeed(iPlayer, NIGHTCRAWLER_SPEED);
  1559. }
  1560. }
  1561. }
  1562.  
  1563. case DAY_SPARTAN:
  1564. {
  1565. switch(team)
  1566. {
  1567. case CS_TEAM_T:
  1568. {
  1569. GiveItem(iPlayer, "weapon_deagle", 150);
  1570. give_item(iPlayer, "weapon_shield");
  1571. }
  1572. case CS_TEAM_CT:
  1573. {
  1574. SaveWeapons(iPlayer);
  1575. GiveItem(iPlayer, "weapon_m4a1", 150);
  1576. }
  1577. }
  1578. }
  1579. case DAY_REZOMBIE:
  1580. {
  1581. switch(team)
  1582. {
  1583. case CS_TEAM_CT:
  1584. {
  1585. SaveWeapons(iPlayer);
  1586. GiveItem(iPlayer, "weapon_ak47", 900);
  1587. }
  1588. case CS_TEAM_T:
  1589. {
  1590. cs_set_user_nvg(iPlayer,true);
  1591. //engclient_cmd(iPlayer, "nightvision");
  1592. set_user_health(iPlayer, g_AliveCT * g_100HP + g_100HP );
  1593. set_user_maxspeed(iPlayer, REZOMBIE_SPEED);
  1594. if (get_user_weapon(iPlayer) == CSW_KNIFE)
  1595. {
  1596. new iWeapon = get_pdata_cbase(iPlayer, m_pActiveItem, XO_PLAYER);
  1597. ExecuteHamB(Ham_Item_Deploy, iWeapon);
  1598. }
  1599. }
  1600. }
  1601. }
  1602. case DAY_RESHARK:
  1603. {
  1604. switch(team)
  1605. {
  1606. case CS_TEAM_CT:
  1607. {
  1608. SaveWeapons(iPlayer);
  1609. set_user_health(iPlayer, g_AliveT * g_10HP + g_100HP);
  1610. GiveItem(iPlayer, "weapon_awp", 30);
  1611. }
  1612. case CS_TEAM_T:
  1613. {
  1614. set_user_noclip(iPlayer, 1);
  1615. set_user_health(iPlayer, g_AliveCT * g_10HP + g_50HP);
  1616. }
  1617. }
  1618. }
  1619. case DAY_RENIGHT:
  1620. {
  1621. switch(team)
  1622. {
  1623. case CS_TEAM_CT:
  1624. {
  1625. SaveWeapons(iPlayer);
  1626. set_user_health(iPlayer, g_AliveT * g_10HP + g_100HP);
  1627. GiveItem(iPlayer, "weapon_m4a1", 90);
  1628. GiveItem(iPlayer, "weapon_deagle", 35);
  1629. }
  1630. case CS_TEAM_T:
  1631. {
  1632. set_user_footsteps(iPlayer, 1);
  1633. set_user_maxspeed(iPlayer, RENIGHTCRAWLER_SPEED);
  1634. }
  1635. }
  1636. }
  1637. case DAY_FREEZETAG:
  1638. {
  1639. SaveWeapons(iPlayer);
  1640. if(get_bit(g_bHasSpeed, iPlayer)) {
  1641. fnColorPrint(iPlayer, "%L", LANG_SERVER, "JB_DAY_M19");
  1642. fnColorPrint(iPlayer, "%L", LANG_SERVER, "JB_DAY_M20");
  1643. g_iPoints[iPlayer] += get_pcvar_num(cvar_pointer[cvar_speedprice]);
  1644. clear_bit(g_bHasSpeed, iPlayer);
  1645. ExecuteHamB(Ham_Player_ResetMaxSpeed, iPlayer);
  1646. }
  1647. }
  1648. }
  1649. }
  1650.  
  1651. public countdown()
  1652. {
  1653. static iPlayers[32], iNum, i, iPlayer;
  1654. get_players( iPlayers, iNum, "ae", "CT" );
  1655.  
  1656. set_hudmessage(255, 255, 255, -1.0, -1.0, 0, 0.75, 0.75, 0.75, 0.75, 1);
  1657. if( g_Timer > 60 )
  1658. show_hudmessage(0, "%L", LANG_SERVER, "JB_DAY_M25", g_Timer-60);
  1659.  
  1660. if( g_Timer == 60 )
  1661. for ( i=0; i<iNum; i++ )
  1662. {
  1663. iPlayer = iPlayers[i];
  1664. set_pev(iPlayer, pev_flags, pev(iPlayer, pev_flags) | FL_FROZEN);
  1665. }
  1666.  
  1667. if( g_Timer <= 60 && g_Timer > 0 )
  1668. {
  1669. show_hudmessage(0, "%L", LANG_SERVER, "JB_DAY_M26", g_Timer);
  1670. if( g_Timer <= 10 )
  1671. {
  1672. new sSound[16];
  1673. num_to_word(g_Timer, sSound, 15);
  1674. client_cmd(0, "spk vox/%s.wav", sSound);
  1675. }
  1676. for ( i=0; i<iNum; i++ )
  1677. {
  1678. iPlayer = iPlayers[i];
  1679. UTIL_ScreenFade(iPlayer, 1.0, 1.0);
  1680. }
  1681. }
  1682. g_Timer--;
  1683. set_task( 1.0, "countdown", TASK_HNS );
  1684. if( g_iDay[ TOTAL_DAYS ] == DAY_NONE )
  1685. g_Timer = 0;
  1686.  
  1687. if( g_Timer <= 0 )
  1688. {
  1689. for ( i=0; i<iNum; i++ )
  1690. {
  1691. iPlayer = iPlayers[i];
  1692. RestoreWeapons(iPlayer);
  1693. Unfreeze(iPlayer);
  1694. }
  1695. g_bFrozenTime = false;
  1696. show_hudmessage(0, "%L", LANG_SERVER, "JB_DAY_M27");
  1697. client_cmd(0, "spk ^"sound/radio/com_go.wav^"");
  1698. remove_task( TASK_HNS );
  1699. }
  1700. }
  1701.  
  1702. #define CLAMP_SHORT(%1) clamp( %1, 0, 0xFFFF )
  1703. #define CLAMP_BYTE(%1) clamp( %1, 0, 0xFF )
  1704.  
  1705. UTIL_ScreenFade(id, Float:fDuration, Float:fHoldTime) {
  1706. message_begin( MSG_ONE_UNRELIABLE, g_iMsgId_ScreenFade, _, id);
  1707. write_short(CLAMP_SHORT(floatround(4096 * fDuration))); // 1 << 12 = 4096
  1708. write_short(CLAMP_SHORT(floatround(4096 * fHoldTime)));
  1709. write_short(0x0000); // FFADE_IN = 0x0000
  1710. write_byte(0);
  1711. write_byte(0);
  1712. write_byte(0);
  1713. write_byte(200);
  1714. message_end();
  1715. }
  1716.  
  1717. /*================================================================================
  1718.  [Forwards / Events]
  1719. =================================================================================*/
  1720. public Fwd_PlayerSpawn_Post(id)
  1721. {
  1722. if (!is_user_alive(id))
  1723. return HAM_HANDLED;
  1724.  
  1725. set_bit(g_bIsAlive, id);
  1726.  
  1727. static CsTeams:team;
  1728. team = cs_get_user_team(id);
  1729.  
  1730. switch(team)
  1731. {
  1732. case CS_TEAM_T:
  1733. {
  1734. clear_bit(g_bHasCrowbar, id);
  1735. switch (get_pcvar_num(cvar_pointer[cvar_blockvoice]))
  1736. {
  1737. case 0: fm_set_speak(id, SPEAK_ALL);
  1738. case 1:
  1739. if(get_user_flags(id) & ADMIN_MIC)
  1740. fm_set_speak(id, SPEAK_ALL);
  1741. else fm_set_speak(id, SPEAK_TEAM);
  1742. case 2:
  1743. if(get_user_flags(id) & ADMIN_MIC)
  1744. fm_set_speak(id, SPEAK_ALL);
  1745. else fm_set_speak(id, SPEAK_LISTENALL);
  1746. }
  1747. }
  1748. case CS_TEAM_CT: fm_set_speak(id, SPEAK_ALL);
  1749. }
  1750.  
  1751. if(g_iDay[ TOTAL_DAYS ] == DAY_NONE)
  1752. {
  1753. StripPlayerWeapons(id);
  1754. reset_all(id);
  1755. if(team == CS_TEAM_CT)
  1756. set_task(0.4, "ClassMenu", id);
  1757.  
  1758. new iWeapon = get_pdata_cbase(id, m_pActiveItem, XO_PLAYER);
  1759. ExecuteHamB(Ham_Item_Deploy, iWeapon);
  1760. }
  1761. else set_player_day(id);
  1762.  
  1763. return HAM_HANDLED;
  1764. }
  1765.  
  1766. public Fwd_TraceAttack_Player(victim, attacker, Float:flDamage, Float:flDirection[3], ptr, iDamagebits)
  1767. {
  1768. // Not a valid attacker / no victim
  1769. if (!IsPlayer(attacker))
  1770. return HAM_IGNORED;
  1771.  
  1772. g_bHeadShot[attacker][victim] = bool:( get_tr2(ptr, TR_iHitgroup) == HITGROUP_HEAD );
  1773. return HAM_IGNORED;
  1774. }
  1775.  
  1776. public Fwd_PlayerDamage(victim, inflictor, attacker, Float:damage, bits)
  1777. {
  1778. if(!IsPlayer( attacker ) || victim == attacker)
  1779. return HAM_IGNORED;
  1780.  
  1781. if(g_bBoxMatch)
  1782. {
  1783. g_iVictimTeam = cs_get_user_team_index(victim);
  1784. if( g_iVictimTeam == cs_get_user_team_index(attacker) )
  1785. {
  1786. cs_set_user_team_index(victim, g_iVictimTeam == TEAM_T ? TEAM_CT : TEAM_T);
  1787. EnableHamForward(g_iHhTakeDamagePost);
  1788. return HAM_HANDLED;
  1789. }
  1790. }
  1791.  
  1792. switch( g_iDay[ TOTAL_DAYS ] )
  1793. {
  1794. case DAY_DEATHMATCH:
  1795. {
  1796. g_iVictimTeam = cs_get_user_team_index(victim);
  1797. if( g_iVictimTeam == cs_get_user_team_index(attacker) )
  1798. {
  1799. cs_set_user_team_index(victim, g_iVictimTeam == TEAM_T ? TEAM_CT : TEAM_T);
  1800. EnableHamForward(g_iHhTakeDamagePost);
  1801. return HAM_HANDLED;
  1802. }
  1803. }
  1804. case DAY_HIDENSEEK:
  1805. if( g_bFrozenTime )
  1806. if(cs_get_user_team(attacker) == CS_TEAM_T)
  1807. return HAM_SUPERCEDE;
  1808. case DAY_FREEZETAG: return HAM_SUPERCEDE;
  1809. case DAY_ZOMBIE:
  1810. if(cs_get_user_team(attacker) == CS_TEAM_CT)
  1811. SetHamParamFloat(4, (damage+10)-damage);
  1812. case DAY_REZOMBIE:
  1813. if(cs_get_user_team(attacker) == CS_TEAM_T)
  1814. SetHamParamFloat(4, (damage+10)-damage);
  1815.  
  1816. }
  1817.  
  1818. if(get_bit(g_bInDisguise, victim))
  1819. {
  1820. cs_reset_user_model(victim);
  1821. fnColorPrint(victim, "%L", LANG_SERVER, "JB_DAY_M28");
  1822. fnColorPrint(victim, "%L", LANG_SERVER, "JB_DAY_M29");
  1823. clear_bit(g_bInDisguise, victim);
  1824. }
  1825.  
  1826. if(attacker == inflictor && get_user_weapon(attacker) == CSW_KNIFE && get_bit(g_bHasCrowbar, attacker))
  1827. {
  1828. SetHamParamFloat(4, damage + 35);
  1829. return HAM_HANDLED;
  1830. }
  1831.  
  1832. return HAM_IGNORED;
  1833. }
  1834.  
  1835. public Player_TakeDamage_Post(victim)
  1836. {
  1837. if( g_iDay[ TOTAL_DAYS ] == DAY_DEATHMATCH || g_bBoxMatch)
  1838. {
  1839. cs_set_user_team_index(victim, g_iVictimTeam);
  1840. DisableHamForward( g_iHhTakeDamagePost );
  1841. }
  1842. }
  1843.  
  1844. public RespawnPlayer(id)
  1845. {
  1846. if(g_iDay[ TOTAL_DAYS ] != DAY_NONE)
  1847. {
  1848. ExecuteHamB(Ham_CS_RoundRespawn, id);
  1849. set_user_health(id, get_user_health(id) + (g_50HP * g_iDeaths[id]));
  1850. }
  1851. }
  1852.  
  1853. public Fwd_PlayerKilled_Pre(victim, attacker, shouldgib)
  1854. {
  1855. if (!IsPlayer(victim))
  1856. return HAM_IGNORED;
  1857.  
  1858. clear_bit(g_bIsAlive, victim);
  1859.  
  1860. if(get_bit(g_bHasCrowbar, victim))
  1861. g_iCrowbars--;
  1862.  
  1863. if(get_bit(g_bHasSpeed, victim))
  1864. g_iSpeed--;
  1865.  
  1866. if(get_bit(g_bHasInvis, victim))
  1867. g_iInvis--;
  1868.  
  1869. if(get_bit(g_bHasFootstep, victim))
  1870. g_iFootstep--;
  1871.  
  1872. if(get_bit(g_bHasDisguise, victim))
  1873. {
  1874. g_iDisguise--;
  1875. cs_reset_user_model(victim);
  1876. clear_bit(g_bHasDisguise, victim);
  1877. clear_bit(g_bInDisguise, victim);
  1878. }
  1879.  
  1880. if(get_bit(g_bHasCellKeys, victim))
  1881. g_iCellKeys--;
  1882.  
  1883. if(get_bit(g_bInMathProblem, victim)) {
  1884. set_user_rendering(victim, _, 0, 0, 0, _, 0);
  1885. // Unfreeze player if it's frozen
  1886. //static Flags; Flags = entity_get_int( victim, EV_INT_flags );
  1887. //entity_set_int( victim, EV_INT_flags, Flags &~ FL_FROZEN );
  1888. clear_bit(g_bInMathProblem, victim);
  1889. }
  1890.  
  1891. if(get_bit(g_bIsSimon, victim)){
  1892. set_task(0.1, "ResetSimon");
  1893. clear_bit(g_bIsSimon, victim);
  1894. }
  1895.  
  1896. // Get info
  1897. new vName[32];
  1898. get_user_name(victim, vName, charsmax(vName));
  1899. // Check if they are something special to annoy them lol
  1900. if( get_bit(g_bIsChosen, victim) || get_bit(g_bIsLast, victim) && g_bInLr )
  1901. {
  1902. // Advertise
  1903. if (g_iGameType == 10)
  1904. {
  1905. //fnColorPrint(0, "OMG! %s sucks! He died as Rambo", vName)
  1906. if(get_user_team(victim) == 1)
  1907. {
  1908. remove_task(victim+TASK_BEAM);
  1909. clear_bit(g_bIsLast, victim);
  1910. g_bInLr = false;
  1911. }
  1912. }
  1913. else {
  1914. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M30", '^3', vName, '^1', '^4', LANG_SERVER, fnGetGameType());
  1915.  
  1916. for (new i = 1; i <= g_iMaxPlayers; i++)
  1917. {
  1918. remove_task(i+TASK_BEAM);
  1919. clear_bit(g_bIsLast, i);
  1920. clear_bit(g_bIsChosen, i);
  1921. g_bInLr = false;
  1922. }
  1923. }
  1924. }
  1925.  
  1926. // Hide Terrorist's name/give points for kill by Kruegs (soccdooccs)
  1927. if (get_user_team(attacker) == 1 && get_user_team(victim) == 2)
  1928. {
  1929. g_iPoints[attacker] += get_pcvar_num(cvar_pointer[cvar_killpoints]);
  1930.  
  1931. if(g_bHeadShot[attacker][victim])
  1932. {
  1933. g_bHeadShot[attacker][victim] = false;
  1934. g_iPoints[attacker] += get_pcvar_num(cvar_pointer[cvar_headshotpoints]);
  1935.  
  1936. }
  1937. SaveData(attacker);
  1938.  
  1939. ExecuteHamB(Ham_Killed, victim, 0, shouldgib);
  1940. set_pev(attacker, pev_frags, pev(attacker, pev_frags) + 1.0);
  1941.  
  1942. return HAM_SUPERCEDE;
  1943. }
  1944.  
  1945. switch( g_iDay[ TOTAL_DAYS ] ) {
  1946. case DAY_ZOMBIE:
  1947. if(cs_get_user_team(victim) == CS_TEAM_CT)
  1948. {
  1949. g_iDeaths[victim]++;
  1950. set_task(10.0*g_iDeaths[victim], "RespawnPlayer", victim);
  1951. fnColorPrint(victim, "%L", LANG_SERVER, "JB_DAY_M31", (10*g_iDeaths[victim]));
  1952. }
  1953. case DAY_REZOMBIE:
  1954. if(cs_get_user_team(victim) == CS_TEAM_T)
  1955. {
  1956. g_iDeaths[victim]++;
  1957. set_task(10.0*g_iDeaths[victim], "RespawnPlayer", victim);
  1958. fnColorPrint(victim, "%L", LANG_SERVER, "JB_DAY_M31", (10*g_iDeaths[victim]));
  1959. }
  1960. }
  1961.  
  1962. if( g_iDay[ TOTAL_DAYS ] == DAY_FREEZETAG )
  1963. CheckTerrorist( );
  1964.  
  1965. return HAM_IGNORED;
  1966. }
  1967.  
  1968. public Fwd_PlayerTouch( Touched, Toucher )
  1969. {
  1970. if( g_iDay[ TOTAL_DAYS ] == DAY_FREEZETAG )
  1971. {
  1972. if( IsPlayer(Toucher) )
  1973. {
  1974. static Flags; Flags = entity_get_int( Touched, EV_INT_flags );
  1975.  
  1976. // Freeze an enemy
  1977. if( cs_get_user_team(Toucher) == CS_TEAM_CT && cs_get_user_team(Touched) == CS_TEAM_T )
  1978. {
  1979. // Already frozen ?
  1980. if( Flags & FL_FROZEN )
  1981. return;
  1982.  
  1983. entity_set_int( Touched, EV_INT_flags, Flags | FL_FROZEN );
  1984. g_iTagCount[ Touched ]++;
  1985. g_FrozenT++;
  1986. set_bit(g_bIsTag, Touched);
  1987.  
  1988. // msg
  1989. static dName[ 33 ]; get_user_name( Touched, dName, charsmax( dName ) );
  1990. static rName[ 33 ]; get_user_name( Toucher, rName, charsmax( rName ) );
  1991. fnColorPrint( 0, "%L", LANG_SERVER, "JB_DAY_M32", '^3', '^4', dName, '^1', '^4', rName, '^1');
  1992.  
  1993. // Check if all the terrorist are frozen
  1994. CheckTerrorist( );
  1995. if(g_iTagCount[ Touched ] < 2)
  1996. if( is_user_admin( Touched ) )
  1997. set_user_rendering( Touched, kRenderFxGlowShell, 0, 255, 0, kRenderNormal, 40 );
  1998. else set_user_rendering( Touched, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 40 );
  1999. else set_user_rendering( Touched, kRenderFxGlowShell, 255, 255, 0, kRenderNormal, 40 );
  2000. }
  2001.  
  2002. // Unfreeze a teammate
  2003. if( cs_get_user_team(Toucher) == CS_TEAM_T && cs_get_user_team(Touched) == CS_TEAM_T )
  2004. {
  2005. if( Flags & FL_FROZEN && g_iTagCount[ Touched ] < 2 )
  2006. {
  2007. // msg
  2008. static dName[ 33 ]; get_user_name( Touched, dName, charsmax( dName ) );
  2009. static rName[ 33 ]; get_user_name( Toucher, rName, charsmax( rName ) );
  2010. fnColorPrint( 0, "%L", LANG_SERVER, "JB_DAY_M33", '^3', '^4', dName, '^1', '^4', rName, '^1');
  2011.  
  2012. Unfreeze( Touched );
  2013.  
  2014. set_user_rendering( Touched );
  2015. }
  2016. if( Flags & FL_FROZEN && g_iTagCount[ Touched ] >= 2 )
  2017. {
  2018. g_iPoints[Toucher] += get_pcvar_num(cvar_pointer[cvar_killpoints]);
  2019. fnColorPrint( Touched, "%L", LANG_SERVER, "JB_DAY_M34", '^3', '^1');
  2020. Unfreeze(Touched);
  2021. set_user_rendering(Touched);
  2022. user_silentkill(Touched);
  2023. }
  2024. }
  2025. }
  2026. }
  2027. }
  2028.  
  2029. public Unfreeze( id ){
  2030. // Unfreeze player if it's frozen
  2031. static Flags; Flags = entity_get_int( id, EV_INT_flags );
  2032. entity_set_int( id, EV_INT_flags, Flags &~ FL_FROZEN );
  2033.  
  2034. if( get_bit(g_bIsTag, id) )
  2035. {
  2036. g_FrozenT--;
  2037. clear_bit(g_bIsTag, id);
  2038. }
  2039. }
  2040.  
  2041. // Check if all the terrorist are frozen
  2042. CheckTerrorist( )
  2043. {
  2044. new g_prisonors = fnGetTerrorists();
  2045. new g_LastPrisoner = g_prisonors - 1;
  2046. if( g_LastPrisoner == g_FrozenT )
  2047. {
  2048. static iPlayers[32], iNum, i, iPlayer;
  2049. get_players( iPlayers, iNum, "ae", "TERRORIST" );
  2050. for( i=0; i<iNum; i++ )
  2051. {
  2052. iPlayer = iPlayers[i];
  2053. g_iTagCount[iPlayer] = 0;
  2054. if( get_bit(g_bIsTag, iPlayer) )
  2055. {
  2056. Unfreeze(iPlayer);
  2057. user_silentkill(iPlayer);
  2058. }
  2059. }
  2060. g_FrozenT = 0;
  2061. }
  2062. }
  2063.  
  2064. public sound_emit(id, channel, sample[])
  2065. {
  2066. if(get_bit(g_bIsAlive, id) && equal(sample, "weapons/knife_", 14) && get_bit(g_bHasCrowbar, id))
  2067. {
  2068. switch(sample[17])
  2069. {
  2070. case('b'): emit_sound(id, CHAN_WEAPON, "weapons/cbar_hitbod2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
  2071. case('w'): emit_sound(id, CHAN_WEAPON, "weapons/cbar_hit1.wav", 1.0, ATTN_NORM, 0, PITCH_LOW);
  2072. case('1', '2'): emit_sound(id, CHAN_WEAPON, "weapons/bullet_hit2.wav", random_float(0.5, 1.0), ATTN_NORM, 0, PITCH_NORM);
  2073. case('s'): emit_sound(id, CHAN_WEAPON, "weapons/cbar_miss1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
  2074. }
  2075. return FMRES_SUPERCEDE;
  2076. }
  2077. return FMRES_IGNORED;
  2078. }
  2079.  
  2080. public ClCmd_drop(id)
  2081. {
  2082. if (get_bit(g_bHasCrowbar,id) && (get_user_weapon(id) == CSW_KNIFE))
  2083. {
  2084. clear_bit(g_bHasCrowbar, id);
  2085. new iWeapon = get_pdata_cbase(id, m_pActiveItem, XO_PLAYER);
  2086. ExecuteHamB(Ham_Item_Deploy, iWeapon);
  2087. spawn_crowbar(id);
  2088. return PLUGIN_HANDLED;
  2089. }
  2090.  
  2091. return PLUGIN_CONTINUE;
  2092. }
  2093.  
  2094. public spawn_crowbar(id)
  2095. {
  2096. new iEntity;
  2097. new Float:where[3];
  2098.  
  2099. iEntity = create_entity("info_target");
  2100. set_pev(iEntity, pev_classname, g_szClassNameCrowbar);
  2101. set_pev(iEntity, pev_solid, SOLID_TRIGGER);
  2102. set_pev(iEntity, pev_movetype, MOVETYPE_BOUNCE);
  2103. entity_set_model(iEntity, CrowbarModels[2]);
  2104. pev(id, pev_origin, where);
  2105. where[2] += 50.0;
  2106. where[0] += random_float(-20.0, 20.0);
  2107. where[1] += random_float(-20.0, 20.0);
  2108. entity_set_origin(iEntity, where);
  2109. where[0] = 0.0;
  2110. where[2] = 0.0;
  2111. where[1] = random_float(0.0, 180.0);
  2112. entity_set_vector(iEntity, EV_VEC_angles, where);
  2113. velocity_by_aim(id, 200, where);
  2114. entity_set_vector(iEntity, EV_VEC_velocity, where);
  2115.  
  2116.  
  2117. return PLUGIN_HANDLED;
  2118. }
  2119.  
  2120. public CrowbarTouch(id, world)
  2121. {
  2122. new Float:velocity[3];
  2123. new Float:volume;
  2124. entity_get_vector(id, EV_VEC_velocity, velocity);
  2125.  
  2126. velocity[0] = (velocity[0] * 0.45);
  2127. velocity[1] = (velocity[1] * 0.45);
  2128. velocity[2] = (velocity[2] * 0.45);
  2129. entity_set_vector(id, EV_VEC_velocity, velocity);
  2130. volume = get_speed(id) * 0.005;
  2131. if (volume > 1.0) volume = 1.0;
  2132. if (volume > 0.1) emit_sound(id, CHAN_AUTO, "debris/metal2.wav", volume, ATTN_NORM, 0, PITCH_NORM);
  2133. return PLUGIN_CONTINUE;
  2134. }
  2135.  
  2136. public Fwd_PlayerCrowbarTouch( const iEntity, const id )
  2137. {
  2138. if(!IsPlayer(id))
  2139. return HAM_IGNORED;
  2140.  
  2141. if( get_bit(g_bIsAlive, id) && cs_get_user_team(id) == CS_TEAM_T && !get_bit(g_bHasCrowbar, id))
  2142. {
  2143. set_bit(g_bHasCrowbar, id);
  2144. remove_entity(iEntity);
  2145. if (get_user_weapon(id) == CSW_KNIFE)
  2146. {
  2147. new iWeapon = get_pdata_cbase(id, m_pActiveItem, XO_PLAYER);
  2148. ExecuteHamB(Ham_Item_Deploy, iWeapon);
  2149. }
  2150. emit_sound(id, CHAN_AUTO, "items/gunpickup2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
  2151. }
  2152. return HAM_IGNORED;
  2153. }
  2154.  
  2155. public Player_ResetMaxSpeed(id)
  2156. {
  2157. if(get_bit(g_bIsAlive, id))
  2158. {
  2159. if(get_bit(g_bHasSpeed, id))
  2160. {
  2161. new Float:maxSpeed = get_pcvar_float(cvar_pointer[cvar_shopspeed]);
  2162. set_pev(id, pev_maxspeed, maxSpeed);
  2163. }
  2164. static CsTeams:team;
  2165. team = cs_get_user_team(id);
  2166.  
  2167. switch( g_iDay[ TOTAL_DAYS ] )
  2168. {
  2169. case DAY_ZOMBIE:
  2170. if(team == CS_TEAM_CT)
  2171. set_user_maxspeed(id, ZOMBIE_SPEED);
  2172. case DAY_NIGHT:
  2173. if(team == CS_TEAM_CT)
  2174. set_user_maxspeed(id, NIGHTCRAWLER_SPEED);
  2175. case DAY_REZOMBIE:
  2176. if(team == CS_TEAM_T)
  2177. set_user_maxspeed(id, REZOMBIE_SPEED);
  2178. case DAY_RENIGHT:
  2179. if(team == CS_TEAM_T)
  2180. set_user_maxspeed(id, RENIGHTCRAWLER_SPEED);
  2181. }
  2182. }
  2183. }
  2184.  
  2185. public Fwd_ItemDeploy2_Post(weapon)
  2186. {
  2187. // Get the owner of the weapon
  2188. new id = get_pdata_cbase(weapon, m_pPlayer, OFFSET_LINUX);
  2189. if(get_bit(g_bIsAlive, id))
  2190. {
  2191. if( get_bit(g_bHasCrowbar, id))
  2192. {
  2193. set_pev(id, pev_viewmodel2, CrowbarModels[1]);
  2194. set_pev(id, pev_weaponmodel2, CrowbarModels[0]);
  2195. }
  2196. else if(g_iDay[ TOTAL_DAYS ] == DAY_ZOMBIE || g_iDay[ TOTAL_DAYS ] == DAY_REZOMBIE )
  2197. {
  2198. static CsTeams:team;
  2199. team = cs_get_user_team(id);
  2200. if(g_iDay[ TOTAL_DAYS ] == DAY_ZOMBIE && team == CS_TEAM_CT)
  2201. set_pev(id, pev_viewmodel2, ZombieModels[0]);
  2202. if(g_iDay[ TOTAL_DAYS ] == DAY_REZOMBIE && team == CS_TEAM_T)
  2203. set_pev(id, pev_viewmodel2, ZombieModels[0]);
  2204. }
  2205. else {
  2206. set_pev(id, pev_viewmodel2, "models/v_knife.mdl");
  2207. set_pev(id, pev_weaponmodel2, "models/p_knife.mdl");
  2208. }
  2209. }
  2210. }
  2211.  
  2212. public Fwd_ItemDeploy_Post(weapon)
  2213. {
  2214. // Get the owner of the weapon
  2215. new id = get_pdata_cbase(weapon, m_pPlayer, OFFSET_LINUX);
  2216. // The game isn't Shot4Shot
  2217. if (g_iGameType != 2)
  2218. return HAM_IGNORED;
  2219. if (get_bit(g_bIsLast, id) || get_bit(g_bIsChosen, id))
  2220. if( weapon != CSW_KNIFE )
  2221. set_pdata_int(weapon, OFFSET_CLIPAMMO, 1, 4);
  2222. return HAM_IGNORED;
  2223. }
  2224.  
  2225. public Fwd_Use_Pre(this, caller, activator, use_type, Float:value)
  2226. {
  2227. if (caller != activator)
  2228. return HAM_IGNORED;
  2229.  
  2230. new Float:fNextUse;
  2231. pev(this, pev_fuser4, fNextUse);
  2232.  
  2233. new Float:fGametime = get_gametime();
  2234.  
  2235. if (fNextUse > fGametime)
  2236. return HAM_IGNORED;
  2237.  
  2238. new class[32], sModel[32];
  2239. pev(this, pev_classname, class, 32);
  2240. pev(this, pev_model, sModel, 32);
  2241.  
  2242. if( equal(sModel, szModel, 0) )
  2243. {
  2244. new szTargetName[32];
  2245. get_user_name(caller, szTargetName, charsmax(szTargetName));
  2246. if(g_bAutoOpened)
  2247. g_bAutoOpened = false;
  2248. else {
  2249. static iTimeLeft, iMinutes, iSeconds;
  2250. iTimeLeft = floatround(g_fRoundTime - (get_gametime() - g_fRoundStartTime),floatround_ceil);
  2251.  
  2252. if(iTimeLeft <= 0)
  2253. {
  2254. iMinutes = 0;
  2255. iSeconds = 0;
  2256. }
  2257. else {
  2258. iMinutes = (iTimeLeft / 60);
  2259. iSeconds = (iTimeLeft % 60);
  2260. }
  2261.  
  2262. if(caller > 0)
  2263. fnColorPrint(0, "%L", LANG_SERVER, "JB_OPENCELLS",
  2264. '^3', szTargetName, '^1', '^4', '^1',
  2265. '^3', iMinutes, '^1', '^3', iSeconds > 9 ? "" : "0", iSeconds);
  2266. }
  2267.  
  2268. if (!g_bAlreadyOpened)
  2269. {
  2270. remove_task( TASKID );
  2271. g_bAlreadyOpened = true;
  2272. g_bCanBuy = false;
  2273. }
  2274.  
  2275. set_pev(this, pev_fuser4, fGametime + get_pdata_float(this, m_flWait, 5));
  2276. }
  2277. return HAM_IGNORED;
  2278. }
  2279.  
  2280. public Event_SendAudio()
  2281. g_iBlockLastRequest = 1;
  2282.  
  2283. public EventRoundEnd()
  2284. {
  2285. remove_task( TASKID );
  2286. server_cmd("sv_gravity 800");
  2287. g_bInLr = false;
  2288. g_bAlreadyOpened = false;
  2289. g_bAutoOpened = false;
  2290. g_bCanBuy = true;
  2291. g_bBoxMatch = false;
  2292. g_iCrowbars = 0;
  2293. g_iDisguise = 0;
  2294. g_iFootstep = 0;
  2295. g_iCellKeys = 0;
  2296. g_iInvis = 0;
  2297. g_iSpeed = 0;
  2298. Day_Ends( );
  2299. }
  2300.  
  2301. /*================================================================================
  2302.  [Save/Load Points]
  2303. =================================================================================*/
  2304. public SaveData(id)
  2305. {
  2306. new vKey[32], vData[32];
  2307. //Save their points
  2308. #if defined SAVE_METHOD_NICK
  2309. formatex(vKey, 31, "%s-points", g_iAuth[id]);
  2310. #endif
  2311. #if defined SAVE_METHOD_IP
  2312. formatex(vKey, 31, "%s-points", g_iAuthIP[id]);
  2313. #endif
  2314. #if defined SAVE_METHOD_ID
  2315. formatex(vKey, 31, "%s-points", g_iAuthID[id]);
  2316. #endif
  2317.  
  2318. formatex(vData, 31, "%i", g_iPoints[id]);
  2319. nvault_set(g_vault, vKey , vData);
  2320. }
  2321.  
  2322. public GetData(id)
  2323. {
  2324. new szKey[32];
  2325. #if defined SAVE_METHOD_NICK
  2326. formatex(szKey, 31, "%s-points", g_iAuth[id]);
  2327. #endif
  2328. #if defined SAVE_METHOD_IP
  2329. formatex(szKey, 31, "%s-points", g_iAuthIP[id]);
  2330. #endif
  2331. #if defined SAVE_METHOD_ID
  2332. formatex(szKey, 31, "%s-points", g_iAuthID[id]);
  2333. #endif
  2334. g_iPoints[id] = nvault_get( g_vault , szKey );
  2335. }
  2336.  
  2337. /*================================================================================
  2338.  [The Shop]
  2339. =================================================================================*/
  2340. public ClCmd_shop(id)
  2341. {
  2342. if(!get_bit(g_bIsConnected, id))
  2343. return PLUGIN_HANDLED;
  2344.  
  2345. if(!get_pcvar_num(cvar_pointer[cvar_shop]))
  2346. {
  2347. fnColorPrint( id, "%L", LANG_SERVER, "JB_DAY_M35");
  2348. return PLUGIN_HANDLED;
  2349. }
  2350. if(cs_get_user_team(id) != CS_TEAM_T)
  2351. {
  2352. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M36");
  2353. return PLUGIN_HANDLED;
  2354. }
  2355.  
  2356. if(!g_bCanBuy)
  2357. {
  2358. fnColorPrint( id, "%L", LANG_SERVER, "JB_DAY_M37");
  2359. return PLUGIN_HANDLED;
  2360. }
  2361.  
  2362. if(!get_bit(g_bIsAlive, id))
  2363. {
  2364. fnColorPrint( id, "%L", LANG_SERVER, "JB_USER_DEAD");
  2365. return PLUGIN_HANDLED;
  2366. }
  2367.  
  2368. shopmenu(id);
  2369. return PLUGIN_HANDLED;
  2370. }
  2371.  
  2372. public shopmenu(id)
  2373. {
  2374. if(get_bit(g_bIsAlive, id) && cs_get_user_team(id) == CS_TEAM_T)
  2375. {
  2376. new szText[256];
  2377. new points = g_iPoints[id];
  2378. //g_bHasMenuOpen[id] = true
  2379. set_bit(g_bHasMenuOpen, id);
  2380.  
  2381. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_SHOP_TITLE", points);
  2382. new shopmenu = menu_create(szText, "sub_shopmenu");
  2383.  
  2384. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_SHOP_M1", get_pcvar_num(cvar_pointer[cvar_crowbarprice]), g_iCrowbars, get_pcvar_num(cvar_pointer[cvar_crowbarlimit]));
  2385. menu_additem(shopmenu, szText, "1", 0);
  2386.  
  2387. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_SHOP_M2", get_pcvar_num(cvar_pointer[cvar_armorprice]));
  2388. menu_additem(shopmenu, szText, "2", 0);
  2389.  
  2390. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_SHOP_M3", get_pcvar_num(cvar_pointer[cvar_nadepackprice]));
  2391. menu_additem(shopmenu, szText, "3", 0);
  2392.  
  2393. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_SHOP_M4", get_pcvar_num(cvar_pointer[cvar_invisprice]), g_iInvis, get_pcvar_num(cvar_pointer[cvar_invislimit]));
  2394. menu_additem(shopmenu, szText, "4", 0);
  2395.  
  2396. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_SHOP_M5", get_pcvar_num(cvar_pointer[cvar_speedprice]), g_iSpeed, get_pcvar_num(cvar_pointer[cvar_speedlimit]));
  2397. menu_additem(shopmenu, szText, "5", 0);
  2398.  
  2399. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_SHOP_M6", get_pcvar_num(cvar_pointer[cvar_footstepprice]), g_iFootstep, get_pcvar_num(cvar_pointer[cvar_footsteplimit]));
  2400. menu_additem(shopmenu, szText, "6", 0);
  2401.  
  2402. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_SHOP_M7", get_pcvar_num(cvar_pointer[cvar_disguiseprice]), g_iDisguise, get_pcvar_num(cvar_pointer[cvar_disguiselimit]));
  2403. menu_additem(shopmenu, szText, "7", 0);
  2404.  
  2405. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_SHOP_M8", get_pcvar_num(cvar_pointer[cvar_cellkeysprice]), g_iCellKeys, get_pcvar_num(cvar_pointer[cvar_cellkeyslimit]));
  2406. menu_additem(shopmenu, szText, "8", 0);
  2407.  
  2408. menu_setprop(shopmenu, MPROP_EXIT , MEXIT_ALL);
  2409. menu_display(id, shopmenu, 0);
  2410. }
  2411.  
  2412. return PLUGIN_HANDLED;
  2413. }
  2414.  
  2415. public sub_shopmenu(id, shopmenu, item)
  2416. {
  2417. if(!get_bit(g_bIsConnected, id))
  2418. return PLUGIN_HANDLED;
  2419. if (item == MENU_EXIT || cs_get_user_team(id) == CS_TEAM_CT)
  2420. {
  2421. clear_bit(g_bHasMenuOpen, id);
  2422. menu_destroy(shopmenu);
  2423. return PLUGIN_HANDLED;
  2424. }
  2425.  
  2426. if (!get_bit(g_bIsAlive, id) || !g_bCanBuy)
  2427. {
  2428. clear_bit(g_bHasMenuOpen, id);
  2429. menu_destroy(shopmenu);
  2430. return PLUGIN_HANDLED;
  2431. }
  2432.  
  2433. new data[7], name[64];
  2434. new access, callback;
  2435. clear_bit(g_bHasMenuOpen, id);
  2436. menu_item_getinfo(shopmenu, item, access, data, charsmax(data), name, charsmax(name), callback);
  2437.  
  2438. new Key = str_to_num(data);
  2439.  
  2440. switch (Key)
  2441. {
  2442. case 1:
  2443. {
  2444. if(g_iPoints[id] < get_pcvar_num(cvar_pointer[cvar_crowbarprice]))
  2445. {
  2446. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M38");
  2447. return PLUGIN_HANDLED;
  2448. }
  2449. else {
  2450. if(get_bit(g_bHasCrowbar, id))
  2451. {
  2452. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M39");
  2453. return PLUGIN_HANDLED;
  2454. }
  2455.  
  2456. else if(g_iCrowbars >= get_pcvar_num(cvar_pointer[cvar_crowbarlimit]))
  2457. {
  2458. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M40");
  2459. return PLUGIN_HANDLED;
  2460. }
  2461. else give_crowbar(id);
  2462. }
  2463. }
  2464.  
  2465. case 2:
  2466. {
  2467.  
  2468. if(get_bit(g_bHasArmor, id))
  2469. {
  2470. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M39");
  2471. return PLUGIN_HANDLED;
  2472. }
  2473.  
  2474. else if(g_iPoints[id] < get_pcvar_num(cvar_pointer[cvar_armorprice]))
  2475. {
  2476. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M38");
  2477. return PLUGIN_HANDLED;
  2478. }
  2479. else give_armor(id);
  2480. }
  2481.  
  2482. case 3:
  2483. {
  2484. if(get_bit(g_bHasNadepack, id))
  2485. {
  2486. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M39");
  2487. return PLUGIN_HANDLED;
  2488. }
  2489.  
  2490. else if(g_iPoints[id] < get_pcvar_num(cvar_pointer[cvar_nadepackprice]))
  2491. {
  2492. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M38");
  2493. return PLUGIN_HANDLED;
  2494. }
  2495. else give_nadepack(id);
  2496. }
  2497.  
  2498. case 4:
  2499. {
  2500. if(get_bit(g_bHasInvis, id))
  2501. {
  2502. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M39");
  2503. return PLUGIN_HANDLED;
  2504. }
  2505.  
  2506. else if(g_iPoints[id] < get_pcvar_num(cvar_pointer[cvar_invisprice]))
  2507. {
  2508. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M38");
  2509. return PLUGIN_HANDLED;
  2510. }
  2511.  
  2512. else if(get_bit(g_bHasFreeday, id))
  2513. {
  2514. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M41");
  2515. return PLUGIN_HANDLED;
  2516. }
  2517. else {
  2518. if(g_iInvis >= get_pcvar_num(cvar_pointer[cvar_invislimit]))
  2519. {
  2520. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M42");
  2521. return PLUGIN_HANDLED;
  2522. }
  2523. else give_invis(id);
  2524. }
  2525. }
  2526.  
  2527. case 5:
  2528. {
  2529. if(get_bit(g_bHasSpeed, id))
  2530. {
  2531. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M39");
  2532. return PLUGIN_HANDLED;
  2533. }
  2534.  
  2535. else if(g_iPoints[id] < get_pcvar_num(cvar_pointer[cvar_speedprice]))
  2536. {
  2537. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M38");
  2538. return PLUGIN_HANDLED;
  2539. }
  2540.  
  2541. else if(g_iDay[ TOTAL_DAYS ] == DAY_FREEZETAG)
  2542. {
  2543. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M43");
  2544. return PLUGIN_HANDLED;
  2545. }
  2546. else
  2547. {
  2548. if(g_iSpeed >= get_pcvar_num(cvar_pointer[cvar_speedlimit]))
  2549. {
  2550. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M44");
  2551. return PLUGIN_HANDLED;
  2552. }
  2553. else give_speed(id);
  2554. }
  2555. }
  2556.  
  2557. case 6:
  2558. {
  2559. if(get_bit(g_bHasFootstep, id))
  2560. {
  2561. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M39");
  2562. return PLUGIN_HANDLED;
  2563. }
  2564.  
  2565. else if(g_iPoints[id] < get_pcvar_num(cvar_pointer[cvar_footstepprice]))
  2566. {
  2567. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M38");
  2568. return PLUGIN_HANDLED;
  2569. }
  2570. else
  2571. {
  2572. if(g_iFootstep >= get_pcvar_num(cvar_pointer[cvar_footsteplimit]))
  2573. {
  2574. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M45");
  2575. return PLUGIN_HANDLED;
  2576. }
  2577. else give_footstep(id);
  2578. }
  2579. }
  2580.  
  2581. case 7:
  2582. {
  2583. if(get_bit(g_bHasDisguise, id))
  2584. {
  2585. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M39");
  2586. return PLUGIN_HANDLED;
  2587. }
  2588. else if(g_iPoints[id] < get_pcvar_num(cvar_pointer[cvar_disguiseprice]))
  2589. {
  2590. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M38");
  2591. return PLUGIN_HANDLED;
  2592. }
  2593. else
  2594. {
  2595. if(g_iDisguise >= get_pcvar_num(cvar_pointer[cvar_disguiselimit]))
  2596. {
  2597. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M46");
  2598. return PLUGIN_HANDLED;
  2599. }
  2600. else give_disguise(id);
  2601. }
  2602. }
  2603. case 8:
  2604. {
  2605. if(get_bit(g_bHasCellKeys, id))
  2606. {
  2607. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M39");
  2608. return PLUGIN_HANDLED;
  2609. }
  2610. else if(g_iPoints[id] < get_pcvar_num(cvar_pointer[cvar_cellkeysprice]))
  2611. {
  2612. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M38");
  2613. return PLUGIN_HANDLED;
  2614. }
  2615. else
  2616. {
  2617. if(g_iCellKeys >= get_pcvar_num(cvar_pointer[cvar_cellkeyslimit]))
  2618. {
  2619. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M47");
  2620. return PLUGIN_HANDLED;
  2621. }
  2622. else give_cellkeys(id);
  2623. }
  2624. }
  2625.  
  2626. }
  2627. menu_destroy(shopmenu);
  2628. return PLUGIN_HANDLED;
  2629. }
  2630.  
  2631. public give_crowbar(id)
  2632. {
  2633. set_bit(g_bHasCrowbar, id);
  2634. ham_strip_weapon(id, "weapon_knife");
  2635. give_item(id, "weapon_knife");
  2636. g_iCrowbars++;
  2637. g_iPoints[id] -= get_pcvar_num(cvar_pointer[cvar_crowbarprice]);
  2638.  
  2639. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M48");
  2640. return PLUGIN_HANDLED;
  2641. }
  2642.  
  2643. public give_armor(id)
  2644. {
  2645. set_bit(g_bHasArmor, id);
  2646. set_user_armor(id, 100);
  2647. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M49");
  2648. g_iPoints[id] -= get_pcvar_num(cvar_pointer[cvar_armorprice]);
  2649.  
  2650. return PLUGIN_HANDLED;
  2651. }
  2652.  
  2653. public give_nadepack(id)
  2654. {
  2655. set_bit(g_bHasNadepack, id);
  2656. give_item(id, "weapon_flashbang");
  2657. give_item(id, "weapon_hegrenade");
  2658. give_item(id, "weapon_smokegrenade");
  2659. g_iPoints[id] -= get_pcvar_num(cvar_pointer[cvar_nadepackprice]);
  2660.  
  2661. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M50");
  2662.  
  2663. return PLUGIN_HANDLED;
  2664. }
  2665.  
  2666. public give_invis(id)
  2667. {
  2668. new AlphaVal = get_pcvar_num(cvar_pointer[cvar_alphavalue]);
  2669. set_bit(g_bHasInvis, id);
  2670. set_user_rendering(id,kRenderFxGlowShell,0,0,0,kRenderTransAlpha,AlphaVal);
  2671. g_iPoints[id] -= get_pcvar_num(cvar_pointer[cvar_invisprice]);
  2672.  
  2673. g_iInvis++;
  2674. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M51");
  2675. return PLUGIN_HANDLED;
  2676. }
  2677.  
  2678. public give_speed(id)
  2679. {
  2680. new Float:maxSpeed = get_pcvar_float(cvar_pointer[cvar_shopspeed]);
  2681. set_bit(g_bHasSpeed, id);
  2682. set_user_maxspeed(id,maxSpeed);
  2683. g_iPoints[id] -= get_pcvar_num(cvar_pointer[cvar_speedprice]);
  2684.  
  2685. g_iSpeed++;
  2686. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M52");
  2687. return PLUGIN_HANDLED;
  2688. }
  2689.  
  2690. public give_footstep(id)
  2691. {
  2692. set_user_footsteps(id, 1);
  2693. set_bit(g_bHasFootstep, id);
  2694. g_iPoints[id] -= get_pcvar_num(cvar_pointer[cvar_footstepprice]);
  2695.  
  2696. g_iFootstep++;
  2697. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M53");
  2698. return PLUGIN_HANDLED;
  2699. }
  2700.  
  2701. public give_disguise(id)
  2702. {
  2703. set_bit(g_bHasDisguise, id);
  2704. g_iPoints[id] -= get_pcvar_num(cvar_pointer[cvar_crowbarprice]);
  2705.  
  2706. g_iDisguise++;
  2707. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M54");
  2708. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M55");
  2709. return PLUGIN_HANDLED;
  2710. }
  2711.  
  2712. public give_cellkeys(id)
  2713. {
  2714. set_bit(g_bHasCellKeys, id);
  2715. g_iPoints[id] -= get_pcvar_num(cvar_pointer[cvar_cellkeysprice]);
  2716.  
  2717. g_iCellKeys++;
  2718. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M56");
  2719. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M57");
  2720. return PLUGIN_HANDLED;
  2721. }
  2722.  
  2723. /*================================================================================
  2724.  [Give/Take Points]
  2725. =================================================================================*/
  2726. public cmd_give_points(id,level,cid)
  2727. {
  2728. if(!cmd_access(id,level,cid,3))
  2729. return PLUGIN_HANDLED;
  2730.  
  2731. new target[32], amount[21];
  2732.  
  2733. read_argv(1, target, 31 );
  2734. read_argv(2, amount, 20 );
  2735.  
  2736. new player = cmd_target( id, target, 8 );
  2737.  
  2738. if(!player)
  2739. return PLUGIN_HANDLED;
  2740.  
  2741. new admin_name[32], player_name[32];
  2742. get_user_name(id, admin_name, 31);
  2743. get_user_name(player, player_name, 31);
  2744.  
  2745. new pointnum = str_to_num(amount);
  2746.  
  2747. g_iPoints[player] += pointnum;
  2748.  
  2749. switch(get_cvar_num ("amx_show_activity"))
  2750. {
  2751. case 1: fnColorPrint( 0, "%L", LANG_SERVER, "JB_DAY_M58", pointnum, player_name);
  2752. case 2: fnColorPrint( 0, "%L", LANG_SERVER, "JB_DAY_M59", admin_name, pointnum, player_name);
  2753. }
  2754.  
  2755. fnColorPrint(player, "%L", LANG_SERVER, "JB_DAY_M60", pointnum, g_iPoints[player]);
  2756.  
  2757. SaveData(id);
  2758.  
  2759. return PLUGIN_HANDLED;
  2760. }
  2761.  
  2762. public cmd_take_points(id,level,cid)
  2763. {
  2764. if(!cmd_access (id, level, cid, 2))
  2765. return PLUGIN_HANDLED;
  2766.  
  2767. new target[32], amount[21];
  2768.  
  2769. read_argv( 1, target, 31 );
  2770. read_argv( 2, amount, 20 );
  2771.  
  2772. new player = cmd_target( id, target, 8 );
  2773.  
  2774. if(!player )
  2775. return PLUGIN_HANDLED;
  2776.  
  2777. new admin_name[32], player_name[32];
  2778. get_user_name( id, admin_name, 31 );
  2779. get_user_name( player, player_name, 31 );
  2780.  
  2781. new pointnum = str_to_num( amount );
  2782.  
  2783. if(g_iPoints[player] < pointnum)
  2784. {
  2785. fnColorPrint( id, "%L", LANG_SERVER, "JB_DAY_M61");
  2786. return PLUGIN_HANDLED;
  2787. }
  2788.  
  2789. g_iPoints[player] -= pointnum;
  2790.  
  2791. switch(get_cvar_num("amx_show_activity"))
  2792. {
  2793. case 1: fnColorPrint( 0, "%L", LANG_SERVER, "JB_DAY_M62", pointnum, player_name);
  2794. case 2: fnColorPrint( 0, "%L", LANG_SERVER, "JB_DAY_M63", admin_name, pointnum, player_name);
  2795. }
  2796.  
  2797. fnColorPrint( player, "%L", LANG_SERVER, "JB_DAY_M64", pointnum, g_iPoints[player]);
  2798.  
  2799. SaveData(id);
  2800.  
  2801. return PLUGIN_HANDLED;
  2802. }
  2803.  
  2804. public cmd_reset_points(id,level,cid)
  2805. {
  2806. if(!cmd_access(id,level,cid,2))
  2807. return PLUGIN_HANDLED;
  2808.  
  2809. new target[32];
  2810.  
  2811. read_argv(1, target, 31);
  2812.  
  2813. new player = cmd_target(id, target, 8);
  2814.  
  2815. if(!player)
  2816. return PLUGIN_HANDLED;
  2817.  
  2818. new admin_name[32], player_name[32];
  2819. get_user_name(id, admin_name, 31);
  2820. get_user_name(player, player_name, 31);
  2821.  
  2822. g_iPoints[player] = 0;
  2823.  
  2824. switch(get_cvar_num ("amx_show_activity"))
  2825. {
  2826. case 1: fnColorPrint( 0, "%L", LANG_SERVER, "JB_DAY_M65", player_name);
  2827. case 2: fnColorPrint( 0, "%L", LANG_SERVER, "JB_DAY_M66", admin_name, player_name);
  2828. }
  2829.  
  2830. fnColorPrint(player, "%L", LANG_SERVER, "JB_DAY_M67");
  2831.  
  2832. SaveData(id);
  2833.  
  2834. return PLUGIN_HANDLED;
  2835. }
  2836.  
  2837. /*================================================================================
  2838.  [Open By 8:00/cell button stuff]
  2839. =================================================================================*/
  2840.  
  2841. public cmd_set_button(id,level,cid)
  2842. {
  2843. if(!cmd_access(id,level,cid,1))
  2844. return PLUGIN_HANDLED;
  2845.  
  2846. new szTempModel[64];
  2847. new szTempClass[64];
  2848. new szTemp[64];
  2849. new szTempEnt;
  2850. new Map[32];
  2851. new szKey[32];
  2852.  
  2853. szTempEnt = GetAimingEnt(id);
  2854.  
  2855. if( pev_valid(szTempEnt) )
  2856. {
  2857. entity_get_string( szTempEnt, EV_SZ_classname, szTempClass, charsmax( szTempClass ) );
  2858. if( equal( szTempClass, "func_button" ) || equal( szTempClass, "func_rot_button" ) || equal( szTempClass, "button_target" ) )
  2859. {
  2860. pev(szTempEnt, pev_model, szTempModel, 63);
  2861. iEnt = szTempEnt;
  2862. log_amx("%s", iEnt);
  2863.  
  2864. get_mapname(Map, 31);
  2865. strtolower(Map);
  2866.  
  2867. formatex(szKey , 31 , "%s" , Map);
  2868. formatex(szTemp , 64, "%s#%s#", szTempModel, szTempClass);
  2869.  
  2870. nvault_set(g_buttonvault , szKey , szTemp);
  2871. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M68", szTempModel, szTempClass, Map);
  2872.  
  2873. }
  2874. else{
  2875. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M69");
  2876. }
  2877. }
  2878. else{
  2879. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M70");
  2880. }
  2881.  
  2882. return PLUGIN_HANDLED;
  2883. }
  2884.  
  2885. GetAimingEnt(id)
  2886. {
  2887. static Float:start[3], Float:view_ofs[3], Float:dest[3], i;
  2888.  
  2889. pev(id, pev_origin, start);
  2890. pev(id, pev_view_ofs, view_ofs);
  2891.  
  2892. for( i = 0; i < 3; i++ )
  2893. {
  2894. start[i] += view_ofs[i];
  2895. }
  2896.  
  2897. pev(id, pev_v_angle, dest);
  2898. engfunc(EngFunc_MakeVectors, dest);
  2899. global_get(glb_v_forward, dest);
  2900.  
  2901. for( i = 0; i < 3; i++ )
  2902. {
  2903. dest[i] *= 9999.0;
  2904. dest[i] += start[i];
  2905. }
  2906.  
  2907. engfunc(EngFunc_TraceLine, start, dest, DONT_IGNORE_MONSTERS, id, 0);
  2908.  
  2909. return get_tr2(0, TR_pHit);
  2910. }
  2911.  
  2912. public TASK_PushButton()
  2913. {
  2914. if(g_iAreWeInaVote)
  2915. remove_task( TASKID );
  2916. else
  2917. {
  2918. static iTimeLeft, iMinutes, iSeconds;
  2919. iTimeLeft = floatround(g_fRoundTime - (get_gametime() - g_fRoundStartTime),floatround_ceil);
  2920.  
  2921. iMinutes = (iTimeLeft / 60);
  2922. iSeconds = (iTimeLeft % 60);
  2923. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M71", '^3', iMinutes, '^1', '^3', iSeconds > 9 ? "" : "0", iSeconds, '^1' );
  2924. g_bCanBuy = false;
  2925. if(pev_valid(iEnt))
  2926. {
  2927. g_bAutoOpened = true;
  2928. ExecuteHamB(Ham_Use, iEnt, 0, 0, 1, 1.0);
  2929. }
  2930. }
  2931. }
  2932.  
  2933. public Get_Button()
  2934. {
  2935. new szTemp[64];
  2936. new Map[32];
  2937. new szKey[32];
  2938. new ButtonModel, ButtonClass;
  2939.  
  2940. get_mapname(Map, 31);
  2941. strtolower(Map);
  2942.  
  2943. formatex(szKey , 31 , "%s" , Map);
  2944. formatex(szTemp , 63, "%s#%s#", ButtonModel, ButtonClass);
  2945. nvault_get(g_buttonvault, szKey, szTemp, 255);
  2946. replace_all(szTemp , 255, "#", " ");
  2947.  
  2948. parse(szTemp,szModel, 31, szClass, 31);
  2949. log_amx("%L", LANG_SERVER, "JB_DAY_M72", szModel[0], szClass[0]);
  2950.  
  2951. ButtonClass = szClass[0];
  2952. ButtonModel = szModel[0];
  2953.  
  2954. return PLUGIN_HANDLED;
  2955. }
  2956.  
  2957. public ButtonSpawn( Ent )
  2958. {
  2959. new Mnumber[32];
  2960. pev( Ent, pev_model, Mnumber, 31 );
  2961.  
  2962. if( equali( Mnumber, szModel ) )
  2963. iEnt = Ent;
  2964. }
  2965. /*================================================================================
  2966.  [Commands]
  2967. =================================================================================*/
  2968. public ClCmd_simon(id) {
  2969. if(!get_bit(g_bIsConnected, id))
  2970. return PLUGIN_HANDLED;
  2971.  
  2972. // Not a terrorist
  2973. if (get_user_team(id) != 2)
  2974. {
  2975. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M73");
  2976. return PLUGIN_HANDLED;
  2977. }
  2978. // Not alive
  2979. if (!get_bit(g_bIsAlive, id))
  2980. {
  2981. fnColorPrint(id, "%L", LANG_SERVER, "JB_USER_DEAD");
  2982. return PLUGIN_HANDLED;
  2983. }
  2984.  
  2985. if(g_bInLr)
  2986. {
  2987. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M74");
  2988. return PLUGIN_HANDLED;
  2989. }
  2990.  
  2991. // More than 1 terrorist
  2992. if (fnGetTerrorists() < 1)
  2993. {
  2994. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M75");
  2995. return PLUGIN_HANDLED;
  2996. }
  2997.  
  2998. if(g_iDay[ TOTAL_DAYS ] != DAY_NONE)
  2999. {
  3000. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M76");
  3001. return PLUGIN_HANDLED;
  3002. }
  3003. if (fnGetSimons() > MAX_SIMONS)
  3004. {
  3005. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M77");
  3006. return PLUGIN_HANDLED;
  3007. }
  3008.  
  3009. if(get_bit(g_bIsSimon, id))
  3010. {
  3011. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M78");
  3012. clear_bit(g_bIsSimon, id);
  3013. if (!task_exists(id+TASK_SIMONBEAM))
  3014. remove_task(id+TASK_SIMONBEAM);
  3015. return PLUGIN_HANDLED;
  3016. }
  3017. new szName[32]; get_user_name(id, szName, 31);
  3018. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M79", '^3', szName, '^1', '^4', '^1', '^4', '^1', '^3', '^1');
  3019. set_bit(g_bIsSimon, id);
  3020. if (!task_exists(id+TASK_SIMONBEAM))
  3021. set_task(3.0, "Task_SimonStartRing", id+TASK_SIMONBEAM, _, _, "b");
  3022. show_SimonMenu(id);
  3023. return PLUGIN_HANDLED;
  3024. }
  3025.  
  3026. #define SIMON_ITEMS 8
  3027. new const g_iSimonNames[SIMON_ITEMS][] = {
  3028. "",
  3029. "JB_SIMON_M1",
  3030. "JB_SIMON_M2",
  3031. "JB_SIMON_M3",
  3032. "JB_SIMON_M4",
  3033. "JB_SIMON_M5",
  3034. "JB_SIMON_M6",
  3035. "JB_SIMON_M7"
  3036. };
  3037.  
  3038. new const g_iAccessSimon[SIMON_ITEMS] = {
  3039. 0,
  3040. 0,
  3041. 0,
  3042. 0,
  3043. 0,
  3044. 0,
  3045. 0,
  3046. ADMIN_SIMON
  3047. };
  3048.  
  3049. public show_SimonMenu(id)
  3050. {
  3051. if(get_bit(g_bIsSimon, id))
  3052. {
  3053. new szText[256];
  3054. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_SIMON_TITLE", g_szPluginPrefix);
  3055. new simonmenu = menu_create(szText, "sub_simonmenu");
  3056.  
  3057. new iNumber[5], szOption[40];
  3058. for( new i = 1; i < SIMON_ITEMS; i++ ) {
  3059. num_to_str(i, iNumber, 4);
  3060. formatex(szOption, 39, "%L", LANG_SERVER, g_iSimonNames[i]);
  3061. menu_additem(simonmenu, szOption, iNumber, g_iAccessSimon[i]);
  3062. }
  3063.  
  3064. menu_setprop(simonmenu, MPROP_EXIT , MEXIT_ALL);
  3065. menu_display(id, simonmenu, 0);
  3066. }
  3067. return PLUGIN_HANDLED;
  3068. }
  3069.  
  3070. public sub_simonmenu(id, simonmenu, item)
  3071. {
  3072. if(!get_bit(g_bIsConnected, id))
  3073. return PLUGIN_HANDLED;
  3074.  
  3075. if (item == MENU_EXIT || cs_get_user_team(id) == CS_TEAM_T)
  3076. {
  3077. menu_destroy(simonmenu);
  3078. return PLUGIN_HANDLED;
  3079. }
  3080.  
  3081. if (!get_bit(g_bIsAlive, id) || g_iDay[ TOTAL_DAYS ] != DAY_NONE || !get_bit(g_bIsSimon, id) || g_bInLr)
  3082. {
  3083. menu_destroy(simonmenu);
  3084. return PLUGIN_HANDLED;
  3085. }
  3086.  
  3087. new data[7], name[64];
  3088. new access, callback;
  3089. menu_item_getinfo(simonmenu, item, access, data, charsmax(data), name, charsmax(name), callback);
  3090.  
  3091. new Key = str_to_num(data);
  3092. static szName[32];
  3093. get_user_name(id, szName, 31);
  3094.  
  3095. switch (Key)
  3096. {
  3097. case 1:
  3098. {
  3099. if(pev_valid(iEnt))
  3100. ExecuteHamB(Ham_Use, iEnt, 0, 0, 1, 1.0);
  3101.  
  3102. if(!g_bAlreadyOpened)
  3103. {
  3104. remove_task( TASKID );
  3105.  
  3106. g_bCanBuy = false;
  3107.  
  3108. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M80", '^3', '^4', szName, '^1');
  3109. g_bAutoOpened = true;
  3110. g_bAlreadyOpened = true;
  3111. }
  3112. show_SimonMenu(id);
  3113. }
  3114. case 2: {ClCmd_opendoors(id);show_SimonMenu(id);}
  3115. case 3: {ClCmd_closedoors(id);show_SimonMenu(id);}
  3116. case 4:
  3117. {
  3118. static iNum, iPlayers[32], iPlayer, i, Count;
  3119. Count = 0;
  3120. get_players(iPlayers, iNum, "ae", "TERRORIST");
  3121.  
  3122. for ( i=0; i<iNum; i++ )
  3123. {
  3124. iPlayer = iPlayers[i];
  3125. if(get_bit(g_bHasFreeday, iPlayer))
  3126. continue;
  3127. Count++;
  3128. }
  3129. new iExtraPlayers = Count % 2;
  3130. if (iExtraPlayers)
  3131. {
  3132. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M81", '^4', '^1', '^3');
  3133. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M82");
  3134. }
  3135. else if(g_bTeamDivided)
  3136. {
  3137. for ( i=0; i<iNum; i++ )
  3138. {
  3139. iPlayer = iPlayers[i];
  3140. if(get_bit(g_bHasFreeday, iPlayer))
  3141. continue;
  3142.  
  3143. set_user_rendering(iPlayer, _, 0, 0, 0, _, 0);
  3144. }
  3145. g_bTeamDivided = false;
  3146. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M83");
  3147. }
  3148. else
  3149. {
  3150. for(new maxPerTeam = (iNum / 2), g_iTeams[2], g_iTeam, iPlayer, i = 0; i < iNum; i++)
  3151. {
  3152. iPlayer = iPlayers[i];
  3153. if(get_bit(g_bHasFreeday, iPlayer))
  3154. continue;
  3155.  
  3156. g_iTeam = random_num(0, 1);
  3157.  
  3158. if(g_iTeams[g_iTeam] >= maxPerTeam)
  3159. g_iTeam = !g_iTeam;
  3160. else
  3161. g_iTeams[g_iTeam]++;
  3162.  
  3163. if( g_iTeam == 1 )
  3164. set_user_rendering(iPlayer,kRenderFxGlowShell,255,0,0,kRenderNormal,16);
  3165. if( g_iTeam == 0 )
  3166. set_user_rendering(iPlayer,kRenderFxGlowShell,0,0,255,kRenderNormal,16);
  3167. }
  3168.  
  3169. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M84", '^3', '^4', szName, '^1', '^3', '^1');
  3170. g_bTeamDivided = true;
  3171. }
  3172. show_SimonMenu(id);
  3173. }
  3174. case 5: {emit_sound(0, CHAN_AUTO, g_szSound_Bell, 1.0, ATTN_NORM, 0, PITCH_NORM);show_SimonMenu(id);}
  3175. case 6:
  3176. {
  3177. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M85", '^3', '^4', szName, '^1');
  3178. MathMenu(id);
  3179. }
  3180. case 7:
  3181. {
  3182. static g_iPlayer;
  3183. g_iPlayer = fnGetRandomPlayer();
  3184. new szName1[32]; get_user_name(g_iPlayer, szName1, 31);
  3185. if(g_iPlayer > 0 && !get_bit(g_bHasFreeday, g_iPlayer))
  3186. {
  3187. user_silentkill(g_iPlayer);
  3188. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M86", '^3', '^4', szName, '^1', '^3', szName1);
  3189. }
  3190. show_SimonMenu(id);
  3191. }
  3192.  
  3193. }
  3194. menu_destroy(simonmenu);
  3195. return PLUGIN_HANDLED;
  3196. }
  3197.  
  3198. public ResetSimon() {
  3199. static iPlayers[32], iNum, i, iPlayer;
  3200. get_players(iPlayers, iNum, "ae", "TERRORIST");
  3201. for ( i=0; i<iNum; i++ )
  3202. {
  3203. iPlayer = iPlayers[i];
  3204. if(get_bit(g_bInMathProblem, iPlayer))
  3205. {
  3206. fnColorPrint(iPlayer, "%L", LANG_SERVER, "JB_DAY_M87");
  3207. //static Flags; Flags = entity_get_int( iPlayer, EV_INT_flags );
  3208. //entity_set_int( iPlayer, EV_INT_flags, Flags &~ FL_FROZEN );
  3209. clear_bit(g_bInMathProblem, iPlayer);
  3210. set_user_rendering(iPlayer, _, 0, 0, 0, _, 0);
  3211. }
  3212. }
  3213. }
  3214. //Thanks to gangien
  3215. public ClCmd_math(id) {
  3216. new count = random_num(3, 6);
  3217. new values[10];
  3218. new operations[10];
  3219. for(new i = 0; i < count; i++) {
  3220. if(i < count - 1)
  3221. operations[i] = random_num(0, 3);
  3222. do {
  3223. values[i] = random_num(1, 20);
  3224. } while ((i > 0) && (values[i] == 0) && (operations[i - 1] == 3));
  3225. }
  3226. new solved = values[random_num(0, count - 1)];
  3227. new str[256];
  3228. new fl[16];
  3229. for(new i = 0; i < count - 1; i++)
  3230. add(str, sizeof(str), "(");
  3231.  
  3232. for(new i = 0; i < count; i++) {
  3233. if(values[i] == solved)
  3234. add(str, sizeof(str), "x");
  3235. else {
  3236. num_to_str(values[i], fl, sizeof(fl));
  3237. add(str, sizeof(str), fl);
  3238. }
  3239. if(i > 0)
  3240. add(str, sizeof(str), ")");
  3241.  
  3242. if(i < count - 1)
  3243. add(str, sizeof(str), g_iOperators[operations[i]]);
  3244.  
  3245. }
  3246.  
  3247. new Float:fValue = float(values[0]);
  3248. for(new i = 1; i < count; i++)
  3249. {
  3250. switch(operations[i - 1])
  3251. {
  3252. case 0: fValue = floatadd(fValue, float(values[i]));
  3253. case 1: fValue = floatsub(fValue, float(values[i]));
  3254. case 2: fValue = floatmul(fValue, float(values[i]));
  3255. case 3: fValue = floatdiv(fValue, float(values[i]));
  3256. }
  3257. }
  3258.  
  3259. format(mathEquations[id], 127, "%L", LANG_SERVER, "JB_DAY_M89", str, fValue);
  3260. mathAnswer[id] = solved;
  3261. set_hudmessage(200, 155, 0, -1.0, 0.50, 0, 6.0, 1.0, 0.3, 0.5, 3);
  3262. show_hudmessage(id, mathEquations[id]);
  3263. set_task(1.0, "Task_StartMath", id+TASK_MATH, _, _, "b");
  3264. return PLUGIN_HANDLED;
  3265. }
  3266.  
  3267. public Task_StartMath(id)
  3268. {
  3269. // id = id - TASK_BEAM = id
  3270. id -= TASK_MATH;
  3271.  
  3272. // Avoid the task call if the user died
  3273. if (!get_bit(g_bIsConnected, id) || !get_bit(g_bIsAlive, id) || !get_bit(g_bInMathProblem, id) || g_bInLr)
  3274. {
  3275. remove_task(id+TASK_MATH);
  3276. return;
  3277. }
  3278. // Set the beam
  3279. fnSetMath(id);
  3280. }
  3281.  
  3282. fnSetMath(id) {
  3283. set_hudmessage(200, 155, 0, -1.0, 0.50, 0, 6.0, 1.1, 0.3, 0.5, 3);
  3284. show_hudmessage(id, mathEquations[id]);
  3285. set_user_rendering(id,kRenderFxGlowShell,255,255,255,kRenderNormal,16);
  3286. }
  3287.  
  3288. public ClCmd_nextproblem(id) {
  3289. if( get_bit(g_bInMathProblem, id))
  3290. {
  3291. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M88");
  3292. ClCmd_math(id);
  3293. }
  3294. }
  3295.  
  3296. public ClCmd_Say(id)
  3297. {
  3298. new Message[128];
  3299.  
  3300. read_argv(1, Message, 127);
  3301. remove_quotes(Message);
  3302.  
  3303. new myAns[128];
  3304. num_to_str(mathAnswer[id], myAns, 127);
  3305.  
  3306. if( get_bit(g_bInMathProblem, id) && is_str_num(Message))
  3307. {
  3308. new szName[32]; get_user_name(id, szName, 31);
  3309. if (equali(Message, myAns))
  3310. {
  3311. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M90");
  3312. set_user_rendering(id, _, 0, 0, 0, _, 0);
  3313. // Unfreeze player if it's frozen
  3314. //static Flags; Flags = entity_get_int( id, EV_INT_flags );
  3315. //entity_set_int( id, EV_INT_flags, Flags &~ FL_FROZEN );
  3316.  
  3317. if (task_exists(id + TASK_MATH))
  3318. remove_task(id + TASK_MATH);
  3319.  
  3320. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M91", szName);
  3321. clear_bit(g_bInMathProblem, id);
  3322. }
  3323. else {
  3324. new Health = get_user_health(id);
  3325. new hp;
  3326.  
  3327. if (Health <= DMG_MATHQ)
  3328. {
  3329. if (Health == 1) {
  3330. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M92");
  3331. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M93", '^3', szName, '^1', '^4', '^1');
  3332. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M94");
  3333. //static Flags; Flags = entity_get_int( id, EV_INT_flags );
  3334. //entity_set_int( id, EV_INT_flags, Flags &~ FL_FROZEN );
  3335. clear_bit(g_bInMathProblem, id);
  3336. set_user_rendering(id,kRenderFxGlowShell,255,255,0,kRenderNormal,16);
  3337. return PLUGIN_HANDLED;
  3338. }
  3339. else hp = 1;
  3340. }
  3341. else hp = Health - DMG_MATHQ;
  3342.  
  3343. set_user_health(id, hp);
  3344. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M95", Health - hp);
  3345. }
  3346. return PLUGIN_HANDLED;
  3347. }
  3348. return PLUGIN_CONTINUE;
  3349. }
  3350.  
  3351. public MathMenu(id) {
  3352. if(!get_bit(g_bIsConnected, id))
  3353. return PLUGIN_HANDLED;
  3354.  
  3355. if(!get_bit(g_bIsSimon, id))
  3356. {
  3357. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M96");
  3358. return PLUGIN_HANDLED;
  3359. }
  3360.  
  3361. if(g_bInLr)
  3362. {
  3363. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M97");
  3364. return PLUGIN_HANDLED;
  3365. }
  3366.  
  3367. new szText[256];
  3368. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_MATH_TITLE");
  3369. new menu = menu_create(szText, "sub_mathmenu");
  3370.  
  3371. new players[32], pnum, tempid;
  3372. new szName[32], szTempid[10];
  3373.  
  3374. get_players(players, pnum, "ae", "TERRORIST");
  3375.  
  3376. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_MATH_M1");
  3377. menu_additem(menu, szText, "1", 0);
  3378.  
  3379. for( new i; i<pnum; i++ ) {
  3380. tempid = players[i];
  3381.  
  3382. if(get_bit(g_bInMathProblem, tempid) || get_bit(g_bHasFreeday, tempid))
  3383. continue;
  3384. get_user_name(tempid, szName, 31);
  3385. num_to_str(tempid, szTempid, 9);
  3386. menu_additem(menu, szName, szTempid, 0);
  3387. }
  3388.  
  3389. menu_display(id, menu);
  3390. return PLUGIN_HANDLED;
  3391. }
  3392.  
  3393. public sub_mathmenu(id, menu, item) {
  3394. if(!get_bit(g_bIsConnected, id))
  3395. return PLUGIN_HANDLED;
  3396. if( item == MENU_EXIT || !get_bit(g_bIsSimon, id) || g_bInLr ) {
  3397. menu_destroy(menu);
  3398. return PLUGIN_HANDLED;
  3399. }
  3400.  
  3401. new data[6], name[64];
  3402. new access, callback;
  3403. menu_item_getinfo(menu, item, access, data, charsmax(data), name, charsmax(name), callback);
  3404.  
  3405. new tempid = str_to_num(data);
  3406.  
  3407. new szName[32], szName2[32];
  3408. get_user_name(id, szName, 31);
  3409. get_user_name(tempid, szName2, 31);
  3410. if(tempid == 1) {
  3411. new players[32], pnum, iPlayer;
  3412. get_players(players, pnum, "ae", "TERRORIST");
  3413. for( new i; i<pnum; i++ ) {
  3414. iPlayer = players[i];
  3415.  
  3416. if(get_bit(g_bInMathProblem, iPlayer) || get_bit(g_bHasFreeday, iPlayer))
  3417. continue;
  3418.  
  3419. set_bit(g_bInMathProblem, iPlayer);
  3420. ClCmd_math(iPlayer);
  3421. fnColorPrint(iPlayer, "%L", LANG_SERVER, "JB_DAY_M98");
  3422. //static Flags; Flags = entity_get_int(iPlayer, EV_INT_flags);
  3423. //entity_set_int(iPlayer, EV_INT_flags, Flags | FL_FROZEN );
  3424. }
  3425. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M99", '^3', '^4', szName, '^1', '^4', '^1');
  3426. }else{
  3427. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M100", '^3', '^4', szName, '^1', '^4', szName2, '^1');
  3428. fnColorPrint(tempid, "%L", LANG_SERVER, "JB_DAY_M101");
  3429. set_bit(g_bInMathProblem, tempid);
  3430. ClCmd_math(tempid);
  3431. //static Flags; Flags = entity_get_int(tempid, EV_INT_flags);
  3432. //entity_set_int(tempid, EV_INT_flags, Flags | FL_FROZEN );
  3433. }
  3434. menu_destroy(menu);
  3435. show_SimonMenu(id);
  3436. return PLUGIN_HANDLED;
  3437. }
  3438.  
  3439. public ClCmd_points(id)
  3440. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M102", '^4', g_iPoints[id], '^1');
  3441.  
  3442. public ClCmd_boxmatch(id)
  3443. {
  3444. if(g_iDay[ TOTAL_DAYS ] != DAY_NONE)
  3445. {
  3446. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M103");
  3447. return PLUGIN_HANDLED;
  3448. }
  3449. if(g_bInLr)
  3450. {
  3451. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M104");
  3452. return PLUGIN_HANDLED;
  3453. }
  3454. // Not alive
  3455. if (!get_bit(g_bIsAlive, id))
  3456. {
  3457. fnColorPrint(id, "%L", LANG_SERVER, "JB_USER_DEAD");
  3458. return PLUGIN_HANDLED;
  3459. }
  3460. // Not a terrorist
  3461. if (get_user_team(id) == 1)
  3462. {
  3463. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M105");
  3464. return PLUGIN_HANDLED;
  3465. }
  3466. new szName[32]; get_user_name(id, szName, 31);
  3467. if(g_bBoxMatch)
  3468. {
  3469. g_bBoxMatch = false;
  3470. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M106", '^3', szName, '^1', '^4', '^1');
  3471. }
  3472. else
  3473. {
  3474. g_bBoxMatch = true;
  3475. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M107", '^3', szName, '^1', '^4', '^1');
  3476. }
  3477. return PLUGIN_HANDLED;
  3478. }
  3479.  
  3480. public ClCmd_closedoors(id) {
  3481. if(g_bBufferDoors)
  3482. {
  3483. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M108");
  3484. return PLUGIN_HANDLED;
  3485. }
  3486. if(g_bInLr)
  3487. {
  3488. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M104");
  3489. return PLUGIN_HANDLED;
  3490. }
  3491. // Not alive
  3492. if (!get_bit(g_bIsAlive, id))
  3493. {
  3494. fnColorPrint(id, "%L", LANG_SERVER, "JB_USER_DEAD");
  3495. return PLUGIN_HANDLED;
  3496. }
  3497. // Not a counter-terrorist
  3498. if (get_user_team(id) == 1 && !access(id, ADMIN_DOORS))
  3499. {
  3500. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M105");
  3501. return PLUGIN_HANDLED;
  3502. }
  3503. g_bBufferDoors = true;
  3504. set_task(2.0, "BufferDoors");
  3505. CloseDoors("func_door");
  3506. CloseDoors("func_door_rotating");
  3507. new szName[32]; get_user_name(id, szName, 31);
  3508. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M109", '^3', szName, '^1', '^4', '^1');
  3509. return PLUGIN_HANDLED;
  3510. }
  3511.  
  3512. public ClCmd_randomct(id) {
  3513. if(g_bInLr)
  3514. {
  3515. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M104");
  3516. return PLUGIN_HANDLED;
  3517. }
  3518. // Not alive
  3519. if (!get_bit(g_bIsAlive, id))
  3520. {
  3521. fnColorPrint(id, "%L", LANG_SERVER, "JB_USER_DEAD");
  3522. return PLUGIN_HANDLED;
  3523. }
  3524. // Not a counter-terrorist
  3525. if (!access(id, ADMIN_RANDOM_CT_SWITCH))
  3526. {
  3527. fnColorPrint(id, "%L", LANG_SERVER, "JB_NOACCESS");
  3528. return PLUGIN_HANDLED;
  3529. }
  3530.  
  3531. static g_iPlayer;
  3532. g_iPlayer = fnGetRandomPlayer();
  3533. new szName[32]; get_user_name(id, szName, 31);
  3534. new szName1[32]; get_user_name(g_iPlayer, szName1, 31);
  3535.  
  3536. if(g_iPlayer > 0 && !get_bit(g_bHasFreeday, g_iPlayer) && get_user_team(g_iPlayer) == 1)
  3537. {
  3538. cs_set_user_team(g_iPlayer, CS_TEAM_CT);
  3539. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M110", '^3', szName, '^1', '^3', szName1, '^1', '^4', '^1');
  3540. }
  3541.  
  3542. return PLUGIN_HANDLED;
  3543. }
  3544.  
  3545. public ClCmd_opendoors(id) {
  3546. if(g_bBufferDoors)
  3547. {
  3548. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M108");
  3549. return PLUGIN_HANDLED;
  3550. }
  3551. if(g_bInLr)
  3552. {
  3553. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M104");
  3554. return PLUGIN_HANDLED;
  3555. }
  3556. // Not alive
  3557. if (!get_bit(g_bIsAlive, id))
  3558. {
  3559. fnColorPrint(id, "%L", LANG_SERVER, "JB_USER_DEAD");
  3560. return PLUGIN_HANDLED;
  3561. }
  3562. // Not a counter-terrorist
  3563. if (get_user_team(id) == 2 && !access(id, ADMIN_DOORS))
  3564. {
  3565. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M105");
  3566. return PLUGIN_HANDLED;
  3567. }
  3568. g_bBufferDoors = true;
  3569. set_task(2.0, "BufferDoors");
  3570. OpenDoors("func_door");
  3571. OpenDoors("func_door_rotating");
  3572. new szName[32]; get_user_name(id, szName, 31);
  3573. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M111", '^3', szName, '^1', '^4', '^1');
  3574. return PLUGIN_HANDLED;
  3575. }
  3576.  
  3577. public BufferDoors()
  3578. g_bBufferDoors = false;
  3579.  
  3580. CloseDoors( const szClassName[] ) {
  3581. new iEntity = find_ent_by_class(ENG_NULLENT, szClassName);
  3582. while( is_valid_ent( iEntity ) )
  3583. {
  3584. dllfunc(DLLFunc_Think, iEntity);
  3585. iEntity = find_ent_by_class(iEntity, szClassName);
  3586. //DispatchKeyValue(iEnt,"wait",2);
  3587. }
  3588. }
  3589. //Thanks to connor
  3590. OpenDoors( const szClassName[] ) {
  3591. new iEntity = find_ent_by_class(ENG_NULLENT, szClassName);
  3592. while( is_valid_ent( iEntity ) )
  3593. {
  3594. dllfunc( DLLFunc_Use, iEntity, 0 );
  3595. iEntity = find_ent_by_class(iEntity, szClassName);
  3596. //DispatchKeyValue(iEnt,"wait",0);
  3597. }
  3598. }
  3599.  
  3600. public ClCmd_channel(id)
  3601. {
  3602. if(!get_bit(g_bIsConnected, id))
  3603. return PLUGIN_HANDLED;
  3604.  
  3605. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M112", '^3', g_iSpeakNames[ fm_get_speak(id) ] );
  3606. // Not a guard
  3607. if (get_user_team(id) != 2 && !access(id, ADMIN_MIC))
  3608. {
  3609. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M105");
  3610. return PLUGIN_HANDLED;
  3611. }
  3612. if(!access(id, ADMIN_MIC))
  3613. {
  3614. fnColorPrint(id, "%L", LANG_SERVER, "JB_NOACCESS");
  3615. return PLUGIN_HANDLED;
  3616. }
  3617. Show_MicMenu(id, iPage);
  3618. return PLUGIN_HANDLED;
  3619. }
  3620.  
  3621. public Show_MicMenu(id, iPage) {
  3622. if(!get_bit(g_bIsConnected, id))
  3623. return PLUGIN_HANDLED;
  3624.  
  3625. new szText[256];
  3626. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_MIC_TITLE");
  3627. new menu = menu_create(szText, "sub_channelmenu");
  3628.  
  3629. new players[32], pnum, tempid;
  3630. new szName[32], szTempid[10];
  3631. new szOption[128];
  3632. get_players(players, pnum);
  3633.  
  3634. for( new i; i<pnum; i++ ) {
  3635. tempid = players[i];
  3636. fm_get_speak(tempid);
  3637. get_user_name(tempid, szName, 31);
  3638. num_to_str(tempid, szTempid, 9);
  3639. formatex(szOption, 127, "%L", LANG_SERVER, "JB_MIC_M1", szName, g_iSpeakNames[ fm_get_speak(tempid) ] );
  3640. menu_additem(menu, szOption, szTempid);
  3641. }
  3642.  
  3643. menu_display(id, menu, iPage);
  3644. return PLUGIN_HANDLED;
  3645. }
  3646.  
  3647. public sub_channelmenu(id, menu, item) {
  3648. if(!get_bit(g_bIsConnected, id))
  3649. return PLUGIN_HANDLED;
  3650. if( item == MENU_EXIT ) {
  3651. menu_destroy(menu);
  3652. return PLUGIN_HANDLED;
  3653. }
  3654.  
  3655. new data[6], name[64];
  3656. new access, callback;
  3657. menu_item_getinfo(menu, item, access, data, charsmax(data), name, charsmax(name), callback);
  3658.  
  3659. new tempid = str_to_num(data);
  3660.  
  3661. new szName[32], szName2[32];
  3662. get_user_name(id, szName, 31);
  3663. get_user_name(tempid, szName2, 31);
  3664.  
  3665. switch( fm_get_speak(tempid) )
  3666. {
  3667. case 1: fm_set_speak(tempid, 2);
  3668. case 2: fm_set_speak(tempid, 3);
  3669. case 3: fm_set_speak(tempid, 4);
  3670. case 4: fm_set_speak(tempid, 1);
  3671. }
  3672.  
  3673. if( id != tempid )
  3674. fnColorPrint(tempid, "%L", LANG_SERVER, "JB_DAY_M113", '^3', szName, '^1', '^4', g_iSpeakNames[ fm_get_speak(tempid) ], '^1');
  3675.  
  3676. player_menu_info(id, menu, menu, iPage);
  3677. Show_MicMenu(id, iPage);
  3678. return PLUGIN_HANDLED;
  3679. }
  3680.  
  3681. public ClCmd_LastRequest(id)
  3682. {
  3683. if(!get_bit(g_bIsConnected, id))
  3684. return PLUGIN_HANDLED;
  3685. // Not a terrorist
  3686. if (get_user_team(id) != 1)
  3687. {
  3688. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M114");
  3689. return PLUGIN_HANDLED;
  3690. }
  3691.  
  3692. // Not alive
  3693. if (!get_bit(g_bIsAlive, id))
  3694. {
  3695. fnColorPrint(id, "%L", LANG_SERVER, "JB_USER_DEAD");
  3696. return PLUGIN_HANDLED;
  3697. }
  3698.  
  3699. // More than 1 terrorist
  3700. if (fnGetTerrorists() > 1)
  3701. {
  3702. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M115");
  3703. return PLUGIN_HANDLED;
  3704. }
  3705.  
  3706. // Less than 1 Counter-terrorist
  3707. if (fnGetCounterTerrorists() < 1)
  3708. {
  3709. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M116");
  3710. return PLUGIN_HANDLED;
  3711. }
  3712.  
  3713. // Is he the last one?
  3714. if (get_bit(g_bIsLast, id))
  3715. {
  3716. // Check if there's a game
  3717. if (g_iGameType)
  3718. {
  3719. // There's a battle in progress
  3720. if (fnGetChosen())
  3721. {
  3722. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M117");
  3723. return PLUGIN_HANDLED;
  3724. }
  3725. else if (g_iGameType == 10)
  3726. {
  3727. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M117");
  3728. return PLUGIN_HANDLED;
  3729. }
  3730. }
  3731. }
  3732.  
  3733. // He's the last terrorist, open menu!
  3734. Show_LastRequestMenu(id);
  3735. fm_set_speak(id, SPEAK_ALL);
  3736. return PLUGIN_HANDLED;
  3737. }
  3738.  
  3739. public Task_StartRing(id)
  3740. {
  3741. // id = id - TASK_BEAM = id
  3742. id -= TASK_BEAM;
  3743.  
  3744. // Avoid the task call if the user died
  3745. if (!get_bit(g_bIsConnected, id) || !get_bit(g_bIsAlive, id))
  3746. {
  3747. remove_task(id+TASK_BEAM);
  3748. return;
  3749. }
  3750.  
  3751. // Set the beam
  3752. fnSetRing(id);
  3753. }
  3754.  
  3755. public Task_SimonStartRing(id)
  3756. {
  3757. // id = id - TASK_BEAM = id
  3758. id -= TASK_SIMONBEAM;
  3759.  
  3760. // Avoid the task call if the user died
  3761. if (!get_bit(g_bIsConnected, id) || !get_bit(g_bIsAlive, id) || !get_bit(g_bIsSimon, id) || g_bInLr)
  3762. {
  3763. remove_task(id+TASK_SIMONBEAM);
  3764. return;
  3765. }
  3766.  
  3767. // Set the beam
  3768. fnSetSimonRing(id);
  3769. }
  3770. #define LastRequest 10
  3771. new const g_iLastRequestNames[LastRequest][] = {
  3772. "",
  3773. "JB_LASTREQUEST_M1",
  3774. "JB_LASTREQUEST_M2",
  3775. "JB_LASTREQUEST_M3",
  3776. "JB_LASTREQUEST_M4",
  3777. "JB_LASTREQUEST_M5",
  3778. "JB_LASTREQUEST_M6",
  3779. "JB_LASTREQUEST_M7",
  3780. "JB_LASTREQUEST_M8",
  3781. "JB_LASTREQUEST_M9"
  3782. };
  3783.  
  3784. /*================================================================================
  3785.  [Lr Menu]
  3786. =================================================================================*/
  3787. Show_LastRequestMenu(id)
  3788. {
  3789. new alivenumm = fnGetCounterTerrorists();
  3790. // Avoid Round End Last Request
  3791. if (g_iBlockLastRequest)
  3792. {
  3793. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M118");
  3794. return PLUGIN_HANDLED;
  3795. }
  3796.  
  3797. set_bit(g_bHasMenuOpen, id);
  3798. set_bit(g_bIsLast, id);
  3799.  
  3800. new szText[256];
  3801. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_LASTREQUEST_TITLE");
  3802. new rMenu = menu_create(szText, "LastRequestHandler");
  3803. new iNumber[5], szOption[40];
  3804.  
  3805. for( new i = 1; i < LastRequest; i++ ) {
  3806. num_to_str(i, iNumber, 4);
  3807. formatex(szOption, 39, "%L", LANG_SERVER, g_iLastRequestNames[i]);
  3808. menu_additem(rMenu, szOption, iNumber);
  3809. }
  3810.  
  3811. if (alivenumm >= NUMBER_OF_GUARDS)
  3812. {
  3813. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_LASTREQUEST_M10");
  3814. menu_additem(rMenu, szText, "10", 0);
  3815. }
  3816. else {
  3817. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_LASTREQUEST_M10");
  3818. menu_additem(rMenu, szText, "10", ADMIN_IMMUNITY);
  3819. }
  3820.  
  3821. menu_setprop(rMenu, MPROP_EXIT, MEXIT_ALL);
  3822. menu_display(id, rMenu, 0);
  3823.  
  3824. return PLUGIN_CONTINUE;
  3825. }
  3826.  
  3827. Show_PlayersMenu(id)
  3828. {
  3829. new Pos[3], szName[32], Title[96];
  3830. formatex(Title, charsmax(Title), "%L", LANG_SERVER, "JB_LASTREQUEST_SUB", LANG_SERVER, fnGetGameType());
  3831.  
  3832. new pMenu = menu_create(Title, "PlayersHandler");
  3833. if (g_iGameType == 10 || g_iGameType == 7)
  3834. {
  3835. formatex(Title, charsmax(Title), "%L", LANG_SERVER, "JB_LASTREQUEST_SUB_M1");
  3836. menu_additem(pMenu, Title, "1", 0);
  3837. }
  3838. else
  3839. {
  3840. static iPlayers[32], iNum, i, iPlayer;
  3841. get_players( iPlayers, iNum, "ae", "CT" );
  3842. for ( i=0; i<iNum; i++ )
  3843. {
  3844. iPlayer = iPlayers[i];
  3845. // Add them to the menu
  3846. num_to_str(iPlayer, Pos, charsmax(Pos));
  3847. get_user_name(iPlayer, szName, charsmax(szName));
  3848.  
  3849. menu_additem(pMenu, szName, Pos);
  3850.  
  3851. }
  3852. }
  3853. menu_setprop(pMenu, MPROP_EXIT, MEXIT_NEVER);
  3854. menu_display(id, pMenu, 0);
  3855. }
  3856.  
  3857. public LastRequestHandler(id, rMenu, item)
  3858. {
  3859. if (item == MENU_EXIT || !get_bit(g_bHasMenuOpen, id)) {
  3860. menu_destroy(rMenu);
  3861. return PLUGIN_HANDLED;
  3862. }
  3863.  
  3864. new name[64], data[6];
  3865. new access, callback;
  3866. menu_item_getinfo(rMenu, item, access, data, charsmax(data), name, charsmax(name), callback);
  3867.  
  3868. new szKey = str_to_num(data);
  3869.  
  3870. // Show CT's Menu + Set the gametype to the key chosen
  3871. g_iGameType = szKey;
  3872. Show_PlayersMenu(id);
  3873.  
  3874. return PLUGIN_HANDLED;
  3875. }
  3876.  
  3877. #define Rebel 5
  3878. new const g_iRebelNames[Rebel][] = {
  3879. "",
  3880. "JB_REBEL_M1",
  3881. "JB_REBEL_M2",
  3882. "JB_REBEL_M3",
  3883. "JB_REBEL_M4"
  3884. };
  3885.  
  3886. #define S4S 10
  3887. new const g_iS4SNames[S4S][] = {
  3888. "",
  3889. "JB_S4S_M1", //JB_S4S_M1 == random weapon
  3890. "JB_S4S_M2",
  3891. "JB_S4S_M3",
  3892. "JB_S4S_M4",
  3893. "JB_S4S_M5",
  3894. "JB_S4S_M6",
  3895. "JB_S4S_M7",
  3896. "JB_S4S_M8",
  3897. "JB_S4S_M9"
  3898. };
  3899.  
  3900. #define WEAPON_TOSS 5
  3901. new const g_iWeaponTossNames[WEAPON_TOSS][] = {
  3902. "",
  3903. "JB_S4S_M1", //JB_S4S_M1 == random weapon
  3904. "JB_WEAPONTOSS_M2", // Grenage
  3905. "JB_S4S_M3", //JB_S4S_M3 == Deagle
  3906. "JB_S4S_M5" //JB_S4S_M5 == M4A1
  3907. };
  3908.  
  3909. public PlayersHandler(id, pMenu, item) {
  3910. if(!get_bit(g_bIsConnected, id))
  3911. return PLUGIN_HANDLED;
  3912. if (item == MENU_EXIT || !get_bit(g_bHasMenuOpen, id)) {
  3913. menu_destroy(pMenu);
  3914. return PLUGIN_HANDLED;
  3915. }
  3916.  
  3917. // Not a terrorist
  3918. if (get_user_team(id) != 1)
  3919. return PLUGIN_HANDLED;
  3920.  
  3921. // Not alive
  3922. if (!get_bit(g_bIsAlive, id))
  3923. return PLUGIN_HANDLED;
  3924.  
  3925. // More than 1 terrorist
  3926. if (fnGetTerrorists() > 1)
  3927. return PLUGIN_HANDLED;
  3928.  
  3929. if(get_bit(g_bIsAlive, id)) {
  3930. if(g_iGameType == 10) {
  3931.  
  3932. clear_bit(g_bHasMenuOpen, id);
  3933.  
  3934. new szText[256];
  3935. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_REBEL_TITLE");
  3936. new rebelingmenu = menu_create(szText, "sub_rebelmenu");
  3937. new iNumber[5], szOption[40];
  3938. for( new i = 1; i < Rebel; i++ ) {
  3939. num_to_str(i, iNumber, 4);
  3940. formatex(szOption, 39, "%L", LANG_SERVER, g_iRebelNames[i]);
  3941. menu_additem(rebelingmenu, szOption, iNumber);
  3942. }
  3943. menu_setprop(rebelingmenu, MPROP_EXIT, MEXIT_ALL);
  3944. menu_display(id, rebelingmenu, 0);
  3945. g_bGrenade = false;
  3946.  
  3947. }
  3948. else {
  3949.  
  3950. new cName[32], Name[64], Data[6];
  3951. new Access, Callback;
  3952. menu_item_getinfo(pMenu, item, Access, Data, charsmax(Data), Name, charsmax(Name), Callback);
  3953. get_user_name(id, cName, charsmax(cName));
  3954.  
  3955. clear_bit(g_bHasMenuOpen, id);
  3956.  
  3957. g_iFinalCT = str_to_num(Data);
  3958.  
  3959. // Start the battle
  3960. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M119", cName, '^4', LANG_SERVER, fnGetGameType(), '^1', '^4', Name);
  3961. set_user_footsteps(id, 0);
  3962. set_pev(id, pev_maxspeed, 250.0);
  3963. // Make the rings
  3964. set_task(3.0, "Task_StartRing", g_iFinalCT+TASK_BEAM, _, _, "b");
  3965.  
  3966. // Avoid the task twice for the last terrorist
  3967. if (!task_exists(id+TASK_BEAM))
  3968. set_task(3.0, "Task_StartRing", id+TASK_BEAM, _, _, "b");
  3969.  
  3970. // Reset health
  3971. set_user_health(g_iFinalCT, 100);
  3972. set_user_health(id, 100);
  3973.  
  3974. // Strip Weapons
  3975. StripPlayerWeapons(id);
  3976. StripPlayerWeapons(g_iFinalCT);
  3977. g_bGrenade = false;
  3978.  
  3979. // GameType = Key = Game
  3980. switch (g_iGameType)
  3981. {
  3982. case 1: {
  3983. // No ideas here..
  3984. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M120");
  3985. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M121");
  3986. server_cmd("sv_gravity 800");
  3987. }
  3988. case 2: {
  3989.  
  3990. new szText[256];
  3991. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_S4S_TITLE");
  3992. new Shot4Shot = menu_create(szText, "Shot4Shot_submenu");
  3993.  
  3994. // Give random weapon for Shot4Shot
  3995. new iNumber[5], szOption[40];
  3996. for( new i = 1; i < S4S; i++ ) {
  3997. num_to_str(i, iNumber, 4);
  3998. formatex(szOption, 39, "%L", LANG_SERVER, g_iS4SNames[i]);
  3999. menu_additem(Shot4Shot, szOption, iNumber);
  4000. }
  4001.  
  4002. menu_setprop(Shot4Shot,MPROP_EXIT, MEXIT_ALL);
  4003. menu_display(id, Shot4Shot, 0);
  4004.  
  4005. server_cmd("sv_gravity 800");
  4006. }
  4007.  
  4008. case 3: {
  4009. new szText[128];
  4010. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_RACE_TITLE");
  4011. new race = menu_create(szText, "race_submenu");
  4012. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_RACE_M1", RACE_TIMER);
  4013. menu_additem(race, szText, "1", 0);
  4014. menu_setprop(race,MPROP_EXIT, MEXIT_ALL);
  4015. menu_display(id, race, 0);
  4016. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M122");
  4017. server_cmd("sv_gravity 800");
  4018. }
  4019.  
  4020. case 4: {
  4021. // Give a random weapon for the gun toss
  4022. new szText[256];
  4023. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_WEAPONTOSS_TITLE");
  4024. new Weapon_Toss = menu_create(szText, "Weapon_Toss_submenu");
  4025.  
  4026. // Give random weapon for Shot4Shot
  4027. new iNumber[5], szOption[40];
  4028. for( new i = 1; i < WEAPON_TOSS; i++ ) {
  4029. num_to_str(i, iNumber, 4);
  4030. formatex(szOption, 39, "%L", LANG_SERVER, g_iWeaponTossNames[i]);
  4031. menu_additem(Weapon_Toss, szOption, iNumber);
  4032. }
  4033.  
  4034. menu_setprop(Weapon_Toss,MPROP_EXIT, MEXIT_ALL);
  4035. menu_display(id, Weapon_Toss, 0);
  4036.  
  4037. // Empty clip ammo
  4038. //set_pdata_int(Ent, OFFSET_CLIPAMMO, 0, OFFSET_LINUX)
  4039. //set_pdata_int(Ent2, OFFSET_CLIPAMMO, 0, OFFSET_LINUX)
  4040. server_cmd("sv_gravity 800");
  4041. }
  4042.  
  4043. case 5: {
  4044. // No ideas here..
  4045. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M123");
  4046. server_cmd("sv_gravity 800");
  4047. }
  4048.  
  4049. case 6: {
  4050. set_user_armor(id ,100);
  4051. set_user_armor(g_iFinalCT ,100);
  4052. GiveItem(id, "weapon_hegrenade", 1000);
  4053. GiveItem(g_iFinalCT, "weapon_hegrenade", 1000);
  4054. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M124");
  4055. server_cmd("sv_gravity 800");
  4056. }
  4057.  
  4058. case 7: {
  4059. explode_me(id);
  4060. server_cmd("sv_gravity 800");
  4061. }
  4062. case 8: {
  4063. GiveItem(id, "weapon_m3", 100);
  4064. GiveItem(g_iFinalCT, "weapon_m3", 100);
  4065. set_user_health(g_iFinalCT, 500);
  4066. set_user_health(id, 500);
  4067. set_user_armor(id ,100);
  4068. set_user_armor(g_iFinalCT ,100);
  4069. server_cmd("sv_gravity 800");
  4070. }
  4071. case 9: {
  4072. GiveItem(id, "weapon_scout", 100);
  4073. GiveItem(g_iFinalCT, "weapon_scout", 100);
  4074. set_user_armor(id ,100);
  4075. set_user_armor(g_iFinalCT ,100);
  4076. server_cmd("sv_gravity %d", SCOUTDUAL_GRAVITY);
  4077. }
  4078. }
  4079. set_bit(g_bIsChosen, g_iFinalCT);
  4080. }
  4081. g_bInLr = true;
  4082. clear_bit(g_bHasCrowbar, id);
  4083. }
  4084. return PLUGIN_HANDLED;
  4085. }
  4086.  
  4087. public sub_rebelmenu(id, rebelingmenu, item)
  4088. {
  4089. if (item == MENU_EXIT)
  4090. {
  4091. menu_destroy(rebelingmenu);
  4092. return PLUGIN_HANDLED;
  4093. }
  4094. if(!g_bInLr)
  4095. {
  4096. menu_destroy(rebelingmenu);
  4097. return PLUGIN_HANDLED;
  4098. }
  4099.  
  4100. new data[7], name[64];
  4101. new access, callback;
  4102. menu_item_getinfo(rebelingmenu, item, access, data, charsmax(data), name, charsmax(name), callback);
  4103.  
  4104. new Key = str_to_num(data);
  4105.  
  4106. StripPlayerWeapons(id);
  4107. new g_AliveCT = fnGetCounterTerrorists();
  4108. switch (Key)
  4109. {
  4110. case 1:
  4111. {
  4112. // Start the battle
  4113. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M125");
  4114. StripPlayerWeapons(id);
  4115.  
  4116. iRandom = random( sizeof(g_szWeaponList1) );
  4117. GiveItem(id, g_szWeaponList1[iRandom], 600);
  4118.  
  4119. set_user_health(id, g_AliveCT * g_100HP + g_100HP );
  4120. set_user_armor(id, 100);
  4121. set_user_footsteps(id, 0);
  4122. set_pev(id, pev_maxspeed, 250.0);
  4123. }
  4124.  
  4125. case 2:
  4126. {
  4127. StripPlayerWeapons(id);
  4128. set_user_health(id, g_AliveCT * g_100HP + g_100HP );
  4129. GiveItem(id, "weapon_deagle", 35);
  4130. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M126");
  4131. }
  4132.  
  4133. case 3:
  4134. {
  4135. StripPlayerWeapons(id);
  4136. set_user_health(id, 1);
  4137. GiveItem(id, "weapon_ak47", 200);
  4138. set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 15);
  4139. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M127");
  4140. }
  4141.  
  4142. case 4:
  4143. {
  4144. StripPlayerWeapons(id);
  4145. set_user_health(id, g_AliveCT * g_100HP + g_100HP );
  4146. GiveItem(id, "weapon_glock18", 200);
  4147. set_user_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderTransAlpha, 255);
  4148. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M128");
  4149. }
  4150. }
  4151. menu_destroy(rebelingmenu);
  4152. return PLUGIN_HANDLED;
  4153. }
  4154.  
  4155. public Shot4Shot_submenu(id, Shot4Shot, item)
  4156. {
  4157. if(item == MENU_EXIT)
  4158. {
  4159. menu_destroy(Shot4Shot);
  4160. return PLUGIN_HANDLED;
  4161. }
  4162. if(!g_bInLr)
  4163. {
  4164. menu_destroy(Shot4Shot);
  4165. return PLUGIN_HANDLED;
  4166. }
  4167.  
  4168. new data[7], name[64];
  4169. new access, callback;
  4170. menu_item_getinfo(Shot4Shot, item, access, data, charsmax(data), name, charsmax(name), callback);
  4171.  
  4172. new key = str_to_num(data);
  4173. static weapon;
  4174. switch(key)
  4175. {
  4176. case 1: GiveRandomWeapon(id);
  4177. case 2: weapon = give_item(g_iFinalCT, "weapon_usp") & give_item(id, "weapon_usp");
  4178. case 3: weapon = give_item(g_iFinalCT, "weapon_deagle") & give_item(id, "weapon_deagle");
  4179. case 4: weapon = give_item(g_iFinalCT, "weapon_fiveseven") & give_item(id, "weapon_fiveseven");
  4180. case 5: weapon = give_item(g_iFinalCT, "weapon_m4a1") & give_item(id, "weapon_m4a1");
  4181. case 6: weapon = give_item(g_iFinalCT, "weapon_tmp") & give_item(id, "weapon_tmp");
  4182. case 7: weapon = give_item(g_iFinalCT, "weapon_m249") & give_item(id, "weapon_m249");
  4183. case 8: weapon = give_item(g_iFinalCT, "weapon_awp") & give_item(id, "weapon_awp");
  4184. case 9: weapon = give_item(g_iFinalCT, "weapon_scout") & give_item(id, "weapon_scout");
  4185. }
  4186. set_pdata_int(weapon, OFFSET_CLIPAMMO, 1, OFFSET_LINUX);
  4187. menu_destroy( Shot4Shot );
  4188. return PLUGIN_CONTINUE;
  4189. }
  4190. new g_iTime;
  4191. public race_submenu(id, race, item)
  4192. {
  4193. if(item == MENU_EXIT)
  4194. {
  4195. menu_destroy(race);
  4196. return PLUGIN_HANDLED;
  4197. }
  4198. if(!g_bInLr)
  4199. {
  4200. menu_destroy(race);
  4201. return PLUGIN_HANDLED;
  4202. }
  4203.  
  4204. new data[7], name[64];
  4205. new access, callback;
  4206. menu_item_getinfo(race, item, access, data, charsmax(data), name, charsmax(name), callback);
  4207. new count = RACE_TIMER;
  4208. g_iTime = RACE_TIMER+1;
  4209. new key = str_to_num(data);
  4210. switch(key)
  4211. {
  4212. case 1: set_task(1.0, "TaskStartTimer", TASK_TIMER, _, _, "a", count+2);
  4213. }
  4214. menu_destroy( race );
  4215. return PLUGIN_CONTINUE;
  4216. }
  4217.  
  4218. public TaskStartTimer(count) {
  4219. switch(g_iTime--)
  4220. {
  4221. case 0:
  4222. {
  4223. client_cmd(0, "spk ^"sound/radio/com_go.wav^"");
  4224. set_hudmessage(0, 255, 0, -1.0, -1.0, 1);
  4225. show_hudmessage(0, "%L", LANG_SERVER, "JB_DAY_M27");
  4226. }
  4227. case 1..21:
  4228. {
  4229. new szTime[20];
  4230. num_to_word(g_iTime, szTime, charsmax(szTime));
  4231. client_cmd(0, "spk ^"fvox/%s.wav^"", szTime);
  4232. set_hudmessage(255, 0, 0, -1.0, -1.0, 1);
  4233. show_hudmessage(0, "%L", LANG_SERVER, "JB_DAY_M173", g_iTime);
  4234. }
  4235. }
  4236. }
  4237.  
  4238. public Weapon_Toss_submenu(id, Weapon_Toss, item)
  4239. {
  4240. if(item == MENU_EXIT)
  4241. {
  4242. menu_destroy(Weapon_Toss);
  4243. return PLUGIN_HANDLED;
  4244. }
  4245. if(!g_bInLr)
  4246. {
  4247. menu_destroy(Weapon_Toss);
  4248. return PLUGIN_HANDLED;
  4249. }
  4250.  
  4251. new data[7], name[64];
  4252. new access, callback;
  4253. menu_item_getinfo(Weapon_Toss, item, access, data, charsmax(data), name, charsmax(name), callback);
  4254.  
  4255. new key = str_to_num(data);
  4256. static weapon;
  4257.  
  4258. switch(key)
  4259. {
  4260. case 1: GiveRandomWeapon(id);
  4261. case 2:
  4262. {
  4263. give_item(g_iFinalCT, "weapon_hegrenade");
  4264. give_item(id, "weapon_hegrenade");
  4265. }
  4266. case 3:
  4267. {
  4268. weapon = give_item(g_iFinalCT, "weapon_deagle");
  4269. weapon = give_item(id, "weapon_deagle");
  4270. set_pdata_int(weapon, OFFSET_CLIPAMMO, 0, OFFSET_LINUX);
  4271. }
  4272. case 4:
  4273. {
  4274. weapon = give_item(g_iFinalCT, "weapon_m4a1");
  4275. weapon = give_item(id, "weapon_m4a1");
  4276. set_pdata_int(weapon, OFFSET_CLIPAMMO, 0, OFFSET_LINUX);
  4277. }
  4278. }
  4279.  
  4280. g_bGrenade = true;
  4281. menu_destroy( Weapon_Toss );
  4282. return PLUGIN_CONTINUE;
  4283. }
  4284.  
  4285. public GiveRandomWeapon(id)
  4286. {
  4287. static weapon;
  4288. iRandom = random( sizeof(szWeapons2) );
  4289.  
  4290. weapon = give_item(g_iFinalCT, szWeapons2[iRandom]);
  4291. weapon = give_item(id, szWeapons2[iRandom]);
  4292.  
  4293. if(g_iGameType != 2)
  4294. set_pdata_int(weapon, OFFSET_CLIPAMMO, 0, OFFSET_LINUX);
  4295. }
  4296.  
  4297. public Fwd_Entity_Think( ent )
  4298. {
  4299. if( !g_bInLr )
  4300. return FMRES_IGNORED;
  4301.  
  4302. if ( !pev_valid( ent ) )
  4303. return FMRES_IGNORED;
  4304.  
  4305. if( g_bGrenade )
  4306. {
  4307. static owner;
  4308. owner = pev( ent, pev_owner );
  4309. if(get_bit(g_bIsLast, owner) || get_bit(g_bIsChosen, owner))
  4310. {
  4311. new hit = -1, Float:origin[3];
  4312. // Get the origin
  4313. pev(ent, pev_origin, origin);
  4314.  
  4315. while ((hit = find_ent_in_sphere(hit, origin, 18.2)))
  4316. {
  4317. if (hit > g_iMaxPlayers)
  4318. break;
  4319.  
  4320. if (!get_bit(g_bIsConnected, hit) && !get_bit(g_bIsAlive, hit))
  4321. continue;
  4322.  
  4323. return touch_em(ent, hit);
  4324. }
  4325. set_pev(ent, pev_nextthink, get_gametime() + 0.1);
  4326. return FMRES_SUPERCEDE;
  4327. }
  4328. }
  4329. return FMRES_IGNORED;
  4330. }
  4331.  
  4332. touch_em(ent, id)
  4333. {
  4334. new szClassname[32];
  4335. pev(ent, pev_model, szClassname, charsmax(szClassname));
  4336.  
  4337. if (contain(szClassname, "w_hegrenade.mdl") != -1)
  4338. {
  4339.  
  4340. // User can have the grenade, give it to him and remove it
  4341. if (cs_get_user_bpammo(id, CSW_HEGRENADE) < 1)
  4342. {
  4343. if (cs_get_user_bpammo(id, CSW_HEGRENADE) == 0)
  4344. give_item(id, "weapon_hegrenade");
  4345. else cs_set_user_bpammo(id, CSW_HEGRENADE, cs_get_user_bpammo(id, CSW_HEGRENADE) + 1);
  4346.  
  4347. // Remove and block engine call
  4348. remove_entity(ent);
  4349. return PLUGIN_HANDLED;
  4350. }
  4351. }
  4352.  
  4353. // If not then we set the next think and block again the engine call
  4354. set_pev(ent, pev_nextthink, get_gametime() + 0.1);
  4355. return HAM_SUPERCEDE;
  4356. }
  4357.  
  4358. public Fwd_Model_Think( ent )
  4359. {
  4360. if( !g_bInLr )
  4361. return FMRES_IGNORED;
  4362.  
  4363. if ( !pev_valid( ent ) )
  4364. return FMRES_IGNORED;
  4365.  
  4366. static id;
  4367. id = pev( ent, pev_owner );
  4368. if(!IsPlayer(id))
  4369. return FMRES_IGNORED;
  4370.  
  4371. if(get_bit(g_bIsLast, id) || get_bit(g_bIsChosen, id))
  4372. if( g_bGrenade )
  4373. switch(get_user_team(id))
  4374. {
  4375. case 1:set_rendering(ent,kRenderFxGlowShell,255,0,0,kRenderNormal,16);
  4376. case 2:set_rendering(ent,kRenderFxGlowShell,0,0,255,kRenderNormal,16);
  4377. }
  4378.  
  4379. return FMRES_IGNORED;
  4380. }
  4381.  
  4382. /*================================================================================
  4383.  [Suicide Bomber]
  4384. =================================================================================*/
  4385.  
  4386. public explode_me(id) {
  4387. // get my origin
  4388. new Float:explosion[3];
  4389. pev(id, pev_origin, explosion);
  4390.  
  4391. user_kill(id);
  4392.  
  4393. // create explosion
  4394. message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  4395. write_byte(TE_EXPLOSION);
  4396. write_coord(floatround(explosion[0]));
  4397. write_coord(floatround(explosion[1]));
  4398. write_coord(floatround(explosion[2]));
  4399. write_short(explosion_sprite);
  4400. write_byte(30);
  4401. write_byte(30);
  4402. write_byte(0);
  4403. message_end();
  4404.  
  4405. fm_radius_damage(id, explosion, EXPLODE_DAMAGE, EXPLODE_RADIUS, "grenade");
  4406. }
  4407.  
  4408. stock fm_radius_damage(id, Float:orig[3], Float:dmg , Float:rad, wpnName[]="") {
  4409. new szClassname[33], Float:Health;
  4410. static Ent;
  4411. Ent = -1;
  4412. while((Ent = engfunc(EngFunc_FindEntityInSphere, Ent, orig, rad))) {
  4413. pev(Ent,pev_classname,szClassname,32);
  4414. if(!equali(szClassname, "player") && !get_bit(g_bIsConnected, Ent) && !get_bit(g_bIsAlive, Ent))
  4415. continue;
  4416.  
  4417. pev(Ent, pev_health, Health);
  4418. Health -= dmg;
  4419.  
  4420. new szName[32], szName1[32];
  4421. get_user_name(Ent, szName, 31);
  4422. get_user_name(id, szName1, 31);
  4423.  
  4424. if(Health <= 0.0)
  4425. createKill(Ent, id, wpnName);
  4426. else set_pev(Ent, pev_health, Health);
  4427. }
  4428. }
  4429.  
  4430. // stock for create kill
  4431. stock createKill(id, attacker, weaponDescription[]) {
  4432. new szFrags, szFrags2;
  4433.  
  4434. if(id != attacker) {
  4435. szFrags = get_user_frags(attacker);
  4436. set_user_frags(attacker, szFrags + 1);
  4437. logKill(attacker, id, weaponDescription);
  4438.  
  4439. //Kill the victim and block the messages
  4440. set_msg_block(g_iMsgDeath,BLOCK_ONCE);
  4441. set_msg_block(g_iMsgScoreInfo,BLOCK_ONCE);
  4442. user_kill(id);
  4443.  
  4444. //user_kill removes a frag, this gives it back
  4445. szFrags2 = get_user_frags(id);
  4446. set_user_frags(id, szFrags2 + 1);
  4447.  
  4448. //Replaced HUD death message
  4449. message_begin(MSG_ALL, g_iMsgDeath,{0,0,0},0);
  4450. write_byte(attacker);
  4451. write_byte(id);
  4452. write_byte(0);
  4453. write_string(weaponDescription);
  4454. message_end();
  4455.  
  4456. //Update killers scorboard with new info
  4457. message_begin(MSG_ALL, g_iMsgScoreInfo);
  4458. write_byte(attacker);
  4459. write_short(szFrags);
  4460. write_short(get_user_deaths(attacker));
  4461. write_short(0);
  4462. write_short(get_user_team(attacker));
  4463. message_end();
  4464.  
  4465. //Update victims scoreboard with correct info
  4466. message_begin(MSG_ALL, g_iMsgScoreInfo);
  4467. write_byte(id);
  4468. write_short(szFrags2);
  4469. write_short(get_user_deaths(id));
  4470. write_short(0);
  4471. write_short(get_user_team(id));
  4472. message_end();
  4473.  
  4474. new szName[32], szName1[32];
  4475. get_user_name(id, szName, 31);
  4476. get_user_name(attacker, szName1, 31);
  4477. }
  4478. }
  4479.  
  4480. // stock for log kill
  4481. stock logKill(id, victim, weaponDescription[] ) {
  4482. new namea[32],namev[32],authida[35],authidv[35],teama[16],teamv[16];
  4483.  
  4484. //Info On Attacker
  4485. get_user_name(id,namea,31);
  4486. get_user_team(id,teama,15);
  4487. get_user_authid(id,authida,34);
  4488.  
  4489. //Info On Victim
  4490. get_user_name(victim,namev,31);
  4491. get_user_team(victim,teamv,15);
  4492. get_user_authid(victim,authidv,34);
  4493.  
  4494. //Log This Kill
  4495. if(id != victim)
  4496. log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
  4497. namea,get_user_userid(id),authida,teama,namev,get_user_userid(victim),authidv,teamv, weaponDescription );
  4498. else
  4499. log_message("^"%s<%d><%s><%s>^" committed suicide with ^"%s^"",
  4500. namea,get_user_userid(id),authida,teama, weaponDescription );
  4501. }
  4502.  
  4503. /*================================================================================
  4504.  [Glow/UnGlow Menu]
  4505. =================================================================================*/
  4506. public JBGlowMenu(id) {
  4507. if(!get_bit(g_bIsConnected, id))
  4508. return PLUGIN_HANDLED;
  4509. if(!is_user_admin(id)) {
  4510. if( cs_get_user_team( id ) != CS_TEAM_CT ) {
  4511. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M129");
  4512. return PLUGIN_HANDLED;
  4513. }
  4514.  
  4515. if(!get_bit(g_bIsAlive, id)) {
  4516. fnColorPrint(id, "%L", LANG_SERVER, "JB_USER_DEAD");
  4517. return PLUGIN_HANDLED;
  4518. }
  4519. }
  4520. new szText[128];
  4521. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_GLOW_TITLE");
  4522. new menu = menu_create(szText, "sub_menu");
  4523.  
  4524. new players[32], pnum, tempid;
  4525. new szName[32], szTempid[10];
  4526.  
  4527. set_bit(g_bHasMenuOpen, id);
  4528. get_players(players, pnum, "ae", "TERRORIST");
  4529.  
  4530. for( new i; i<pnum; i++ ) {
  4531. tempid = players[i];
  4532.  
  4533. if(!get_bit(g_bHasFreeday, tempid)) {
  4534. get_user_name(tempid, szName, 31);
  4535. num_to_str(tempid, szTempid, 9);
  4536. menu_additem(menu, szName, szTempid, 0);
  4537. }
  4538. }
  4539.  
  4540. menu_display(id, menu);
  4541. return PLUGIN_HANDLED;
  4542. }
  4543.  
  4544. public sub_menu(id, menu, item) {
  4545. if(!get_bit(g_bIsConnected, id))
  4546. return PLUGIN_HANDLED;
  4547. if( item == MENU_EXIT ) {
  4548. clear_bit(g_bHasMenuOpen, id);
  4549. menu_destroy(menu);
  4550. return PLUGIN_HANDLED;
  4551. }
  4552.  
  4553. if(!is_user_admin(id)) {
  4554. if( cs_get_user_team( id ) != CS_TEAM_CT )
  4555. return PLUGIN_HANDLED;
  4556.  
  4557. if(!get_bit(g_bIsAlive, id))
  4558. return PLUGIN_HANDLED;
  4559. }
  4560.  
  4561. new data[6], name[64];
  4562. new access, callback;
  4563. menu_item_getinfo(menu, item, access, data, charsmax(data), name, charsmax(name), callback);
  4564.  
  4565. new tempid = str_to_num(data);
  4566. new szName[32], szName2[32], szauth[32], szauth2[32];
  4567. get_user_name(id, szName, 31);
  4568. get_user_name(tempid, szName2, 31);
  4569. get_user_authid(id, szauth, 31);
  4570. get_user_authid(tempid, szauth2, 31);
  4571.  
  4572. set_user_rendering(tempid, kRenderFxGlowShell, 255, 140, 0, kRenderNormal, 20);
  4573. set_bit(g_bHasFreeday, tempid);
  4574. clear_bit(g_bHasMenuOpen, id);
  4575. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M130", szName, szName2);
  4576. log_amx("%L", LANG_SERVER, "JB_DAY_M132", szName, szauth, szName2, szauth2);
  4577.  
  4578. if(get_bit(g_bHasInvis, tempid)) {
  4579. fnColorPrint(tempid, "%L", LANG_SERVER, "JB_DAY_M131");
  4580. fnColorPrint(tempid, "%L", LANG_SERVER, "JB_DAY_M133");
  4581. g_iPoints[tempid] += get_pcvar_num(cvar_pointer[cvar_invisprice]);
  4582. clear_bit(g_bHasInvis, tempid);
  4583.  
  4584. return PLUGIN_HANDLED;
  4585. }
  4586.  
  4587. menu_destroy(menu);
  4588. return PLUGIN_HANDLED;
  4589. }
  4590.  
  4591. public JBUnglowMenu(id) {
  4592. if(!get_bit(g_bIsConnected, id))
  4593. return PLUGIN_HANDLED;
  4594. if(!is_user_admin(id)) {
  4595. if( cs_get_user_team( id ) != CS_TEAM_CT ) {
  4596. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M134");
  4597. return PLUGIN_HANDLED;
  4598. }
  4599.  
  4600. if(!get_bit(g_bIsAlive, id)) {
  4601. fnColorPrint(id, "%L", LANG_SERVER, "JB_USER_DEAD");
  4602. return PLUGIN_HANDLED;
  4603. }
  4604. }
  4605.  
  4606. new szText[256];
  4607. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_UNGLOW_TITLE");
  4608. new menu = menu_create(szText, "Unglow_sub_menu");
  4609.  
  4610. new players[32], pnum, tempid;
  4611. new szName[32], szTempid[10];
  4612.  
  4613. set_bit(g_bHasMenuOpen, id);
  4614. get_players(players, pnum, "a");
  4615.  
  4616. for( new i; i<pnum; i++ ) {
  4617. tempid = players[i];
  4618.  
  4619. if (get_bit(g_bHasFreeday, tempid)) {
  4620. get_user_name(tempid, szName, 31);
  4621. num_to_str(tempid, szTempid, 9);
  4622. menu_additem(menu, szName, szTempid, 0);
  4623. }
  4624. }
  4625.  
  4626. menu_display(id, menu);
  4627. return PLUGIN_HANDLED;
  4628. }
  4629.  
  4630. public Unglow_sub_menu(id, menu, item) {
  4631. if(!get_bit(g_bIsConnected, id))
  4632. return PLUGIN_HANDLED;
  4633. if( item == MENU_EXIT ) {
  4634. clear_bit(g_bHasMenuOpen, id);
  4635. menu_destroy(menu);
  4636. return PLUGIN_HANDLED;
  4637. }
  4638.  
  4639. if(!is_user_admin(id)) {
  4640. if( cs_get_user_team( id ) != CS_TEAM_CT ) {
  4641. return PLUGIN_HANDLED;
  4642. }
  4643.  
  4644. if(!get_bit(g_bIsAlive, id)) {
  4645. return PLUGIN_HANDLED;
  4646. }
  4647. }
  4648.  
  4649. new data[6], name[64];
  4650. new access, callback;
  4651. menu_item_getinfo(menu, item, access, data, charsmax(data), name, charsmax(name), callback);
  4652.  
  4653. clear_bit(g_bHasMenuOpen, id);
  4654. new tempid = str_to_num(data);
  4655. new szName[32], szName2[32], szauth[32], szauth2[32];
  4656. get_user_name(id, szName, 31);
  4657. get_user_name(tempid, szName2, 31);
  4658. get_user_authid(id, szauth, 31);
  4659. get_user_authid(tempid, szauth2, 31);
  4660.  
  4661. set_user_rendering(tempid);
  4662. clear_bit(g_bHasFreeday, tempid);
  4663. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M135", szName, szName2);
  4664. log_amx("%L", LANG_SERVER, "JB_DAY_M136", szName, szauth, szName2, szauth2);
  4665.  
  4666. menu_destroy(menu);
  4667. return PLUGIN_HANDLED;
  4668. }
  4669.  
  4670. public Clcmd_GlowRed(id) {
  4671. if(!get_bit(g_bIsConnected, id))
  4672. return PLUGIN_HANDLED;
  4673. if(!is_user_admin(id)) {
  4674. if( cs_get_user_team( id ) != CS_TEAM_CT ) {
  4675. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M129");
  4676. return PLUGIN_HANDLED;
  4677. }
  4678.  
  4679. if(!get_bit(g_bIsAlive, id)) {
  4680. fnColorPrint(id, "%L", LANG_SERVER, "JB_USER_DEAD");
  4681. return PLUGIN_HANDLED;
  4682. }
  4683. }
  4684.  
  4685. new szTempClass[64];
  4686. new player;
  4687.  
  4688. player = GetAimingEnt(id);
  4689.  
  4690. if(!pev_valid(player))
  4691. return PLUGIN_HANDLED;
  4692.  
  4693. pev(player, pev_classname, szTempClass, 63);
  4694.  
  4695. if(equali(szTempClass, "player", 0)) {
  4696. if(cs_get_user_team(player) == CS_TEAM_CT) {
  4697. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M137");
  4698. return PLUGIN_HANDLED;
  4699. }
  4700.  
  4701. if(get_bit(g_bHasFreeday, player)) {
  4702. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M138");
  4703. return PLUGIN_HANDLED;
  4704. }
  4705. set_user_rendering(player,kRenderFxGlowShell,255,0,0,kRenderNormal,16);
  4706. set_bit(g_bIsGlowing, player);
  4707. fnColorPrint(player, "%L", LANG_SERVER, "JB_DAY_M139");
  4708. }
  4709. else {
  4710. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M140");
  4711. return PLUGIN_HANDLED;
  4712. }
  4713. return PLUGIN_HANDLED;
  4714. }
  4715.  
  4716. public Clcmd_GlowBlue(id) {
  4717. if(!get_bit(g_bIsConnected, id))
  4718. return PLUGIN_HANDLED;
  4719. if(!is_user_admin(id)) {
  4720. if( cs_get_user_team( id ) != CS_TEAM_CT ) {
  4721. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M129");
  4722. return PLUGIN_HANDLED;
  4723. }
  4724.  
  4725. if(!get_bit(g_bIsAlive, id)) {
  4726. fnColorPrint(id, "%L", LANG_SERVER, "JB_USER_DEAD");
  4727. return PLUGIN_HANDLED;
  4728. }
  4729. }
  4730.  
  4731. new szTempClass[64];
  4732. new player;
  4733.  
  4734. player = GetAimingEnt(id);
  4735.  
  4736. if(!pev_valid(player))
  4737. return PLUGIN_HANDLED;
  4738.  
  4739. pev(player, pev_classname, szTempClass, 63);
  4740.  
  4741. if(equali(szTempClass, "player", 0)) {
  4742. if(cs_get_user_team(player) == CS_TEAM_CT) {
  4743. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M137");
  4744. return PLUGIN_HANDLED;
  4745. }
  4746. if(get_bit(g_bHasFreeday, player)) {
  4747. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M138");
  4748. return PLUGIN_HANDLED;
  4749. }
  4750. set_user_rendering(player,kRenderFxGlowShell,0,0,255,kRenderNormal,16);
  4751. set_bit(g_bIsGlowing, player);
  4752. fnColorPrint(player, "%L", LANG_SERVER, "JB_DAY_M141");
  4753. }
  4754. else {
  4755. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M140");
  4756. return PLUGIN_HANDLED;
  4757. }
  4758. return PLUGIN_HANDLED;
  4759. }
  4760.  
  4761. public Clcmd_UnglowPlayer(id) {
  4762. if(!get_bit(g_bIsConnected, id))
  4763. return PLUGIN_HANDLED;
  4764. if(!is_user_admin(id)) {
  4765. if( cs_get_user_team( id ) != CS_TEAM_CT ) {
  4766. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M142");
  4767. return PLUGIN_HANDLED;
  4768. }
  4769. if(!get_bit(g_bIsAlive, id)) {
  4770. fnColorPrint(id, "%L", LANG_SERVER, "JB_USER_DEAD");
  4771. return PLUGIN_HANDLED;
  4772. }
  4773. }
  4774. new szTempClass[64];
  4775. new player;
  4776. new szName[32], szName2[32], szauth[32], szauth2[32];
  4777. get_user_name(id, szName, 31);
  4778. get_user_name(player, szName2, 31);
  4779. get_user_authid(id, szauth, 31);
  4780. get_user_authid(player, szauth2, 31);
  4781.  
  4782. player = GetAimingEnt(id);
  4783.  
  4784. if(!pev_valid(player))
  4785. return PLUGIN_HANDLED;
  4786.  
  4787. pev(player, pev_classname, szTempClass, 63);
  4788.  
  4789. if(equali(szTempClass, "player", 0)) {
  4790. if(get_bit(g_bHasFreeday, player)) {
  4791. set_user_rendering(player, _, 0, 0, 0, _, 0);
  4792. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M143", szName, szName2);
  4793. clear_bit(g_bHasFreeday, player);
  4794. return PLUGIN_HANDLED;
  4795. }
  4796. else if(get_bit(g_bIsGlowing, player)) {
  4797. set_user_rendering(player, _, 0, 0, 0, _, 0);
  4798. clear_bit(g_bIsGlowing, player);
  4799. fnColorPrint(player, "%L", LANG_SERVER, "JB_DAY_M144", szName);
  4800. }
  4801.  
  4802. else
  4803. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M145");
  4804. }
  4805. else
  4806. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M140");
  4807.  
  4808. return PLUGIN_HANDLED;
  4809. }
  4810.  
  4811. /*================================================================================
  4812.  [Class Menu]
  4813. =================================================================================*/
  4814. #define CLASS 11
  4815. new const g_iClassNames[CLASS][] = {
  4816. "",
  4817. "JB_CLASS_M1",
  4818. "JB_CLASS_M2",
  4819. "JB_CLASS_M3",
  4820. "JB_CLASS_M4",
  4821. "JB_CLASS_M5",
  4822. "JB_CLASS_M6",
  4823. "JB_CLASS_M7",
  4824. "JB_CLASS_M8",
  4825. "JB_CLASS_M9",
  4826. "JB_CLASS_M10"
  4827. };
  4828.  
  4829. new const g_iAccessClass[CLASS] = {
  4830. 0,
  4831. 0,
  4832. 0,
  4833. 0,
  4834. 0,
  4835. 0,
  4836. 0,
  4837. 0,
  4838. ADMIN_CLASS,
  4839. ADMIN_CLASS,
  4840. ADMIN_CLASS
  4841. };
  4842.  
  4843. public ClassMenu(id)
  4844. {
  4845. if(!get_bit(g_bIsConnected, id))
  4846. return PLUGIN_HANDLED;
  4847.  
  4848. if( cs_get_user_team( id ) != CS_TEAM_CT ) {
  4849. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M146");
  4850. return PLUGIN_HANDLED;
  4851. }
  4852.  
  4853. if(!get_bit(g_bIsAlive, id)) {
  4854. fnColorPrint(id, "%L", LANG_SERVER, "JB_USER_DEAD");
  4855. return PLUGIN_HANDLED;
  4856. }
  4857.  
  4858. if(!g_bCanBuy) {
  4859. fnColorPrint( id, "%L", LANG_SERVER, "JB_DAY_M147");
  4860. return PLUGIN_HANDLED;
  4861. }
  4862. set_bit(g_bHasMenuOpen, id);
  4863. new szText[256];
  4864. formatex(szText, charsmax(szText), "%L", LANG_SERVER, "JB_CLASS_TITLE");
  4865. new menu = menu_create(szText, "Class_sub_menu");
  4866.  
  4867. // Give random weapon for Shot4Shot
  4868. new iNumber[5], szOption[40];
  4869. for( new i = 1; i < CLASS; i++ ) {
  4870. num_to_str(i, iNumber, 4);
  4871. formatex(szOption, 39, "%L", LANG_SERVER, g_iClassNames[i]);
  4872. menu_additem(menu, szOption, iNumber, g_iAccessClass[i]);
  4873. }
  4874.  
  4875. menu_display(id, menu);
  4876. return PLUGIN_HANDLED;
  4877. }
  4878.  
  4879. public Class_sub_menu(id, menu, item)
  4880. {
  4881. if(!get_bit(g_bIsConnected, id))
  4882. return PLUGIN_HANDLED;
  4883. if( item == MENU_EXIT || cs_get_user_team( id ) != CS_TEAM_CT) {
  4884. clear_bit(g_bHasMenuOpen, id);
  4885. menu_destroy(menu);
  4886. return PLUGIN_HANDLED;
  4887. }
  4888.  
  4889. if( cs_get_user_team( id ) != CS_TEAM_CT )
  4890. return PLUGIN_HANDLED;
  4891.  
  4892. if(!get_bit(g_bIsAlive, id))
  4893. return PLUGIN_HANDLED;
  4894.  
  4895. if(!g_bCanBuy)
  4896. return PLUGIN_HANDLED;
  4897.  
  4898. new data[6], name[64];
  4899. new access, callback;
  4900. StripPlayerWeapons(id);
  4901. clear_bit(g_bHasMenuOpen, id);
  4902. menu_item_getinfo(menu, item, access, data, charsmax(data), name, charsmax(name), callback);
  4903.  
  4904. switch(str_to_num(data)) {
  4905. case(1): {
  4906. GiveItem(id, "weapon_m4a1", 90);
  4907. GiveItem(id, "weapon_usp", 100);
  4908. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M148");
  4909. }
  4910. case(2): {
  4911. GiveItem(id, "weapon_ak47", 90);
  4912. GiveItem(id, "weapon_glock18", 120);
  4913. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M149");
  4914. }
  4915. case(3): {
  4916. GiveItem(id, "weapon_awp", 30);
  4917. GiveItem(id, "weapon_deagle", 35);
  4918. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M150");
  4919. }
  4920. case(4): {
  4921. GiveItem(id, "weapon_ump45", 100);
  4922. GiveItem(id, "weapon_usp", 100);
  4923. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M151");
  4924. }
  4925. case(5): {
  4926. GiveItem(id, "weapon_m3", 32);
  4927. GiveItem(id, "weapon_p228", 52);
  4928. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M152");
  4929. }
  4930. case(6): {
  4931. GiveItem(id, "weapon_mac10", 100);
  4932. GiveItem(id, "weapon_deagle", 1000);
  4933. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M153");
  4934. }
  4935. case(7): {
  4936. GiveItem(id, "weapon_aug", 90);
  4937. GiveItem(id, "weapon_p228", 52);
  4938. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M154");
  4939. }
  4940. case(8): {
  4941. //cs_set_user_model(id, "vip");
  4942. give_item(id, "weapon_shield");
  4943. GiveItem(id, "weapon_usp", 200);
  4944. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M155");
  4945. }
  4946. case(9): {
  4947. //cs_set_user_model(id, "vip");
  4948. GiveItem(id, "weapon_m249", 400);
  4949. GiveItem(id, "weapon_elite", 100);
  4950. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M156");
  4951. }
  4952. case(10): {
  4953. //cs_set_user_model(id, "vip");
  4954. GiveItem(id, "weapon_galil", 200);
  4955. GiveItem(id, "weapon_deagle", 100);
  4956. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M157");
  4957. }
  4958. }
  4959. set_user_armor(id, 100);
  4960. menu_destroy(menu);
  4961. return PLUGIN_HANDLED;
  4962. }
  4963.  
  4964. public MsgStatusIcon(const iMsgId, const iMsgDest, const iPlayer)
  4965. {
  4966. if(get_bit(g_bIsConnected, iPlayer) && get_bit(g_bIsAlive, iPlayer))
  4967. {
  4968. static szMsg[8];
  4969. get_msg_arg_string(2, szMsg, 7);
  4970.  
  4971. if(equal(szMsg, "buyzone"))
  4972. {
  4973. set_pdata_int(iPlayer, OFFSET_BUYZONE, get_pdata_int(iPlayer, OFFSET_BUYZONE) & ~(1<<0));
  4974. return PLUGIN_HANDLED;
  4975. }
  4976. }
  4977. return PLUGIN_CONTINUE;
  4978. }
  4979.  
  4980. /*================================================================================
  4981.  [Hud message]
  4982. =================================================================================*/
  4983.  
  4984. public Fwd_HudThink( iEntity )
  4985. {
  4986. if ( iEntity != g_iTimerEntity )
  4987. return;
  4988.  
  4989. new g_prisoners = fnGetTerrorists();
  4990. new g_guards = fnGetCounterTerrorists();
  4991.  
  4992. if( g_prisoners == 1 && g_iDay[ TOTAL_DAYS ] != DAY_NONE )
  4993. {
  4994. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M158");
  4995. Day_Ends( );
  4996. }
  4997. if( g_guards < 1 && g_iDay[ TOTAL_DAYS ] != DAY_NONE )
  4998. {
  4999. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M159");
  5000. Day_Ends( );
  5001. }
  5002.  
  5003. set_hudmessage(0, 255, 0, -1.0, 0.01, 0, 0.75, 0.75, 0.75, 0.75, 2);
  5004.  
  5005. if( g_iDay[ TOTAL_DAYS ] != DAY_NONE && !g_iAreWeInaVote )
  5006. show_hudmessage(0,"%L", LANG_SERVER, "JB_HUD_M1", g_prisoners, g_guards, LANG_SERVER, g_iStartDayNames[ g_iDay[ TOTAL_DAYS ] ] );
  5007. else
  5008. show_hudmessage(0,"%L", LANG_SERVER, "JB_HUD_M2", g_prisoners, g_guards );
  5009.  
  5010. entity_set_float( g_iTimerEntity, EV_FL_nextthink, get_gametime() + 1.0 );
  5011. }
  5012.  
  5013. /*================================================================================
  5014.  [Functions]
  5015. =================================================================================*/
  5016. fnGetSimons() {
  5017. static iPlayers[32], iNum, i, iPlayer, Simons;
  5018. Simons = 0;
  5019. get_players(iPlayers, iNum, "ae", "CT");
  5020. for( i=0; i<iNum; i++ ) {
  5021. iPlayer = iPlayers[i];
  5022. if(get_bit(g_bIsSimon, iPlayer))
  5023. Simons++;
  5024. }
  5025.  
  5026. return Simons;
  5027. }
  5028.  
  5029. fnGetRandomPlayer() {
  5030. static iPlayers[32], iNum;
  5031. get_players(iPlayers, iNum, "ae", "TERRORIST");
  5032. return iNum ? iPlayers[random(iNum)] : 0;
  5033. }
  5034.  
  5035. fnGetTerrorists() {
  5036. /* Get's the number of terrorists */
  5037. static iPlayers[32], iNum;
  5038. get_players(iPlayers, iNum, "ae", "TERRORIST");
  5039. return iNum;
  5040. }
  5041.  
  5042. fnGetCounterTerrorists() {
  5043. /* Get's the number of counter-terrorists */
  5044. static iPlayers[32], iNum;
  5045. get_players(iPlayers, iNum, "ae", "CT");
  5046. return iNum;
  5047. }
  5048.  
  5049. fnGetChosen() {
  5050. /* Get's if there's a chosen one between players */
  5051. new temp;
  5052. static iPlayers[32], iNum, i, iPlayer;
  5053. get_players(iPlayers, iNum, "ae", "CT");
  5054. for( i=0; i<iNum; i++ )
  5055. {
  5056. iPlayer = iPlayers[i];
  5057. if(get_bit(g_bIsChosen, iPlayer))
  5058. temp = set_bit(g_bIsChosen, iPlayer);
  5059. }
  5060.  
  5061. return temp;
  5062. }
  5063.  
  5064. stock in_array(needle, data[], size) {
  5065. for(new i = 0; i < size; i++) {
  5066. if(data[i] == needle)
  5067. return i;
  5068. }
  5069. return -1;
  5070. }
  5071.  
  5072.  
  5073. fnGetGameType() {
  5074. /* Get's the game type of the last request games */
  5075. new Game[32];
  5076.  
  5077. switch (g_iGameType) {
  5078. case 0: Game = "JB_LASTREQUEST_M0";
  5079. case 1: Game = "JB_LASTREQUEST_M1";
  5080. case 2: Game = "JB_LASTREQUEST_M2";
  5081. case 3: Game = "JB_LASTREQUEST_M3";
  5082. case 4: Game = "JB_LASTREQUEST_M4";
  5083. case 5: Game = "JB_LASTREQUEST_M5";
  5084. case 6: Game = "JB_LASTREQUEST_M6";
  5085. case 7: Game = "JB_LASTREQUEST_M7";
  5086. case 8: Game = "JB_LASTREQUEST_M8";
  5087. case 9: Game = "JB_LASTREQUEST_M9";
  5088. case 10: Game = "JB_LASTREQUEST_M10";
  5089. }
  5090. return Game;
  5091. }
  5092.  
  5093. fnSetRing(id) {
  5094. /* Teh beam cylinder !!! */
  5095. new Float:flOrigin[3], iOrigin[3];
  5096. pev(id, pev_origin, flOrigin);
  5097. FVecIVec(flOrigin, iOrigin);
  5098.  
  5099. // Beam Color
  5100. new Colors = get_user_team(id);
  5101. new Beam = GetPlayerHullSize(id);
  5102. new Admin = is_user_admin(id);
  5103. message_begin(MSG_BROADCAST, SVC_TEMPENTITY, iOrigin);
  5104. write_byte(TE_BEAMCYLINDER);
  5105. write_coord(iOrigin[0]);
  5106. write_coord(iOrigin[1]);
  5107. if(Beam == HULL_HEAD)
  5108. write_coord(iOrigin[2]-16);
  5109. else
  5110. write_coord(iOrigin[2]-33);
  5111. write_coord(iOrigin[0]);
  5112. write_coord(iOrigin[1]);
  5113. write_coord(iOrigin[2] + 200);
  5114. write_short(g_iRingSprite); // Sprite Index
  5115. write_byte(0); // Start Frame
  5116. write_byte(0); // Frame Rate
  5117. write_byte(5); // Life
  5118. write_byte(5); // Width
  5119. write_byte(0); // Noise
  5120. if(Admin)
  5121. {
  5122. write_byte(Colors == 2 ? 255 : 0);//r
  5123. write_byte(Colors == 1 ? 255 : 255);//g
  5124. write_byte(0);//b
  5125. }
  5126. else {
  5127. write_byte(Colors == 1 ? 255 : 0);
  5128. write_byte(0);
  5129. write_byte(Colors == 2 ? 255 : 0);
  5130. }
  5131. write_byte(200); // Brightness
  5132. write_byte(0); // Speed
  5133. message_end();
  5134. }
  5135.  
  5136. fnSetSimonRing(id) {
  5137. /* Teh beam cylinder !!! */
  5138. new Float:flOrigin[3], iOrigin[3];
  5139. pev(id, pev_origin, flOrigin);
  5140. FVecIVec(flOrigin, iOrigin);
  5141.  
  5142. // Beam Color
  5143. new Beam = GetPlayerHullSize(id);
  5144.  
  5145. message_begin(MSG_BROADCAST, SVC_TEMPENTITY, iOrigin);
  5146. write_byte(TE_BEAMCYLINDER);
  5147. write_coord(iOrigin[0]);
  5148. write_coord(iOrigin[1]);
  5149. if(Beam == HULL_HEAD)
  5150. write_coord(iOrigin[2]-16);
  5151. else
  5152. write_coord(iOrigin[2]-33);
  5153. write_coord(iOrigin[0]);
  5154. write_coord(iOrigin[1]);
  5155. write_coord(iOrigin[2] + 200);
  5156. write_short(g_iRingSprite); // Sprite Index
  5157. write_byte(0); // Start Frame
  5158. write_byte(0); // Frame Rate
  5159. write_byte(5); // Life
  5160. write_byte(25); // Width
  5161. write_byte(0); // Noise
  5162.  
  5163. write_byte(255);//r
  5164. write_byte(255);//g
  5165. write_byte(255);//b
  5166.  
  5167. write_byte(200); // Brightness
  5168. write_byte(0); // Speed
  5169. message_end();
  5170. }
  5171.  
  5172. fnColorPrint(index, const Msg[], any:...) {
  5173. new Buffer[190], Buffer2[192];
  5174. formatex(Buffer2, charsmax(Buffer2), "^x04[%s] ^x01%s", g_szPluginPrefix, Msg);
  5175. vformat(Buffer, charsmax(Buffer), Buffer2, 3);
  5176.  
  5177. if (!index) {
  5178. for (new i = 1; i <= g_iMaxPlayers; i++) {
  5179. if (!is_user_connected(i))
  5180. continue;
  5181.  
  5182. message_begin(MSG_ONE_UNRELIABLE, g_iMsgSayText,_, i);
  5183. write_byte(i);
  5184. write_string(Buffer);
  5185. message_end();
  5186. }
  5187. }
  5188. else {
  5189. if (!is_user_connected(index))
  5190. return;
  5191.  
  5192. message_begin(MSG_ONE, g_iMsgSayText,_, index);
  5193. write_byte(index);
  5194. write_string(Buffer);
  5195. message_end();
  5196. }
  5197. }
  5198.  
  5199. public MsgSendAudio(iMsgId, iMsgDest, id)
  5200. {
  5201. if( id )
  5202. {
  5203. if( g_bGrenade )
  5204. {
  5205. new szRadioKey[19];
  5206. static const MRAD_FIREINHOLE[] = "%!MRAD_FIREINHOLE";
  5207. get_msg_arg_string(2, szRadioKey, charsmax(szRadioKey));
  5208. if( equal(szRadioKey, MRAD_FIREINHOLE) )
  5209. {
  5210. if( get_msg_block(g_iMsgTextMsg) != BLOCK_SET )
  5211. {
  5212. set_msg_block(g_iMsgTextMsg, BLOCK_ONCE);
  5213. }
  5214. return PLUGIN_HANDLED;
  5215. }
  5216. }
  5217. }
  5218. return PLUGIN_CONTINUE;
  5219. }
  5220.  
  5221. public reset_all(id)
  5222. {
  5223. clear_bit(g_bIsLast, id);
  5224. clear_bit(g_bIsChosen, id);
  5225. clear_bit(g_bHasCrowbar, id);
  5226. clear_bit(g_bHasArmor, id);
  5227. clear_bit(g_bHasSpeed, id);
  5228. clear_bit(g_bHasInvis, id);
  5229. clear_bit(g_bInDisguise, id);
  5230. clear_bit(g_bHasNadepack, id);
  5231. clear_bit(g_bHasFootstep, id);
  5232. clear_bit(g_bHasDisguise, id);
  5233. clear_bit(g_bHasCellKeys, id);
  5234. clear_bit(g_bHasFreeday, id);
  5235. clear_bit(g_bInDisguise, id);
  5236. clear_bit(g_bIsGlowing, id);
  5237. clear_bit(g_bIsSimon, id);
  5238. clear_bit(g_bInMathProblem, id);
  5239.  
  5240. if(task_exists(id+TASK_BEAM))
  5241. remove_task(id+TASK_BEAM);
  5242.  
  5243. set_user_footsteps(id, 0);
  5244. set_user_maxspeed(id, 250.0);
  5245. set_user_rendering(id);
  5246. }
  5247.  
  5248. // takes a weapon from a player efficiently
  5249. // Thanks to XxAvalanchexX
  5250. public ham_strip_weapon(id,weapon[])
  5251. {
  5252. if(!equal(weapon,"weapon_",7)) return 0;
  5253.  
  5254. new wId = get_weaponid(weapon);
  5255. if(!wId) return 0;
  5256.  
  5257. new wEnt;
  5258. while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {}
  5259. if(!wEnt) return 0;
  5260.  
  5261. if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt);
  5262.  
  5263. if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0;
  5264. ExecuteHamB(Ham_Item_Kill,wEnt);
  5265.  
  5266. set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId));
  5267.  
  5268. return 1;
  5269. }
  5270. public ClCmd_CheckDisguise(id) {
  5271. if(!get_bit(g_bIsConnected, id))
  5272. return PLUGIN_HANDLED;
  5273. if( cs_get_user_team( id ) != CS_TEAM_T ) {
  5274. fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M160");
  5275. return PLUGIN_HANDLED;
  5276. }
  5277.  
  5278. if(!get_bit(g_bIsAlive, id)) {
  5279. fnColorPrint(id, "%L", LANG_SERVER, "JB_USER_DEAD");
  5280. return PLUGIN_HANDLED;
  5281. }
  5282.  
  5283. if(!get_bit(g_bHasDisguise, id)) {
  5284. fnColorPrint( id, "%L", LANG_SERVER, "JB_DAY_M161");
  5285. return PLUGIN_HANDLED;
  5286. }
  5287.  
  5288. if(get_bit(g_bInDisguise, id)) {
  5289. if(IsBeingWatched(id)) {
  5290. fnColorPrint( id, "%L", LANG_SERVER, "JB_DAY_M162");
  5291. return PLUGIN_HANDLED;
  5292. }
  5293. else {
  5294. cs_set_user_model(id, "leet");
  5295. clear_bit(g_bInDisguise, id);
  5296. fnColorPrint( id, "%L", LANG_SERVER, "JB_DAY_M163");
  5297. return PLUGIN_HANDLED;
  5298. }
  5299. }
  5300. else {
  5301. if(IsBeingWatched(id)) {
  5302. fnColorPrint( id, "%L", LANG_SERVER, "JB_DAY_M164");
  5303. return PLUGIN_HANDLED;
  5304. }
  5305. else {
  5306. cs_set_user_model(id, "urban");
  5307. set_bit(g_bInDisguise, id);
  5308. fnColorPrint( id, "%L", LANG_SERVER, "JB_DAY_M165");
  5309. return PLUGIN_HANDLED;
  5310. }
  5311. }
  5312. return PLUGIN_HANDLED;
  5313. }
  5314. // checks if they are in a ct's view
  5315. // Thanks to joaquimandrade
  5316. IsBeingWatched(id) {
  5317. new CsTeams:team = cs_get_user_team(id);
  5318. new Float:origin[3];
  5319. entity_get_vector(id,EV_VEC_origin,origin);
  5320.  
  5321. for(new i=1,CsTeams:teamViewer;i<=g_iMaxPlayers;i++) {
  5322. if(get_bit(g_bIsAlive, i)) {
  5323. teamViewer = cs_get_user_team(i);
  5324.  
  5325. if(team != teamViewer)
  5326. if(fm_is_ent_visible_maxdistance(i,id,.maxdistance = DetectionMaxDistance) && is_in_viewcone(i,origin))
  5327. return true;
  5328. }
  5329. }
  5330. return false;
  5331. }
  5332.  
  5333. bool:fm_is_ent_visible_maxdistance(index, entity,ignoremonsters = 0,Float:maxdistance) {
  5334. new Float:start[3], Float:dest[3];
  5335. pev(index, pev_origin, start);
  5336. pev(index, pev_view_ofs, dest);
  5337. xs_vec_add(start, dest, start);
  5338. pev(entity, pev_origin, dest);
  5339.  
  5340. if(vector_distance(start,dest) <= maxdistance) {
  5341. engfunc(EngFunc_TraceLine, start, dest, ignoremonsters, index, 0);
  5342. new Float:fraction;
  5343. get_tr2(0, TR_flFraction, fraction);
  5344.  
  5345. if (fraction == 1.0 || get_tr2(0, TR_pHit) == entity)
  5346. return true;
  5347. }
  5348. return false;
  5349. }
  5350.  
  5351. //Taken From exolent//
  5352. public Fwd_SetVoice(receiver, sender, bool:bListen)
  5353. {
  5354. if(!get_bit(g_bIsConnected, receiver)
  5355. || !get_bit(g_bIsConnected, sender)
  5356. || g_iSpeakFlags[sender] == SPEAK_NORMAL
  5357. && g_iSpeakFlags[receiver] != SPEAK_LISTENALL)
  5358. {
  5359. return FMRES_IGNORED;
  5360. }
  5361.  
  5362. new iSpeakType = 0;
  5363. if(g_iSpeakFlags[sender] == SPEAK_ALL
  5364. || g_iSpeakFlags[receiver] == SPEAK_LISTENALL
  5365. || g_iSpeakFlags[sender] == SPEAK_TEAM && get_pdata_int(sender, 114) == get_pdata_int(receiver, 114))
  5366. {
  5367. iSpeakType = 1;
  5368. }
  5369.  
  5370. engfunc(EngFunc_SetClientListening, receiver, sender, iSpeakType);
  5371. return FMRES_SUPERCEDE;
  5372. }
  5373.  
  5374. public SaveWeapons(iPlayer)
  5375. {
  5376. if( !get_bit(g_bIsConnected, iPlayer) && !get_bit(g_bIsAlive, iPlayer) )
  5377. return PLUGIN_HANDLED;
  5378.  
  5379. new iWeaponBits = g_iWeaponBits[iPlayer] = entity_get_int(iPlayer, EV_INT_weapons) & VALID_WEAPONS;
  5380.  
  5381. for(new i;i<=CSW_P90;i++)
  5382. {
  5383. if(IsWeaponInBits(i, iWeaponBits))
  5384. {
  5385. g_iWeaponClip[iPlayer][i] = cs_get_weapon_ammo(find_ent_by_owner(-1, g_szWeaponNames[i], iPlayer));
  5386. g_iWeaponAmmo[iPlayer][i] = cs_get_user_bpammo(iPlayer, i);
  5387. }
  5388. }
  5389. StripPlayerWeapons(iPlayer);
  5390.  
  5391. return PLUGIN_HANDLED;
  5392. }
  5393.  
  5394. public RestoreWeapons(iPlayer)
  5395. {
  5396. if( !get_bit(g_bIsConnected, iPlayer) && !get_bit(g_bIsAlive, iPlayer) )
  5397. {
  5398. return PLUGIN_HANDLED;
  5399. }
  5400.  
  5401. StripPlayerWeapons(iPlayer);
  5402. new iWeaponBits = g_iWeaponBits[iPlayer];
  5403. new iEntity;
  5404.  
  5405. for(new i;i<=CSW_P90;i++)
  5406. {
  5407. if(IsWeaponInBits(i, iWeaponBits))
  5408. {
  5409. iEntity = give_item(iPlayer, g_szWeaponNames[i]);
  5410.  
  5411. cs_set_weapon_ammo(iEntity, g_iWeaponClip[iPlayer][i]);
  5412. cs_set_user_bpammo(iPlayer, i, g_iWeaponAmmo[iPlayer][i]);
  5413. }
  5414. }
  5415. return PLUGIN_HANDLED;
  5416. }
  5417. // Thanks to Arkshine
  5418. public ClientCommand_UnStuck(const id)
  5419. {
  5420. new i_Value;
  5421.  
  5422. if ((i_Value = UTIL_UnstuckPlayer(id, START_DISTANCE, MAX_ATTEMPTS)) != 1)
  5423. switch (i_Value)
  5424. {
  5425. case 0: fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M166");
  5426. case -1: fnColorPrint(id, "%L", LANG_SERVER, "JB_DAY_M167");
  5427. }
  5428.  
  5429. return PLUGIN_CONTINUE;
  5430. }
  5431.  
  5432. UTIL_UnstuckPlayer(const id, const i_StartDistance, const i_MaxAttempts)
  5433. {
  5434. // Is Not alive, ignore.
  5435. if (!get_bit(g_bIsAlive, id)) return -1;
  5436.  
  5437. static Float:vf_OriginalOrigin[Coord_e], Float:vf_NewOrigin[Coord_e];
  5438. static i_Attempts, i_Distance;
  5439.  
  5440. // Get the current player's origin.
  5441. pev (id, pev_origin, vf_OriginalOrigin);
  5442.  
  5443. i_Distance = i_StartDistance;
  5444.  
  5445. while (i_Distance < 1000)
  5446. {
  5447. i_Attempts = i_MaxAttempts;
  5448.  
  5449. while (i_Attempts--)
  5450. {
  5451. vf_NewOrigin[x] = random_float(vf_OriginalOrigin[ x ] - i_Distance, vf_OriginalOrigin[ x ] + i_Distance);
  5452. vf_NewOrigin[y] = random_float(vf_OriginalOrigin[ y ] - i_Distance, vf_OriginalOrigin[ y ] + i_Distance);
  5453. vf_NewOrigin[z] = random_float(vf_OriginalOrigin[ z ] - i_Distance, vf_OriginalOrigin[ z ] + i_Distance);
  5454.  
  5455. engfunc (EngFunc_TraceHull, vf_NewOrigin, vf_NewOrigin, DONT_IGNORE_MONSTERS, GetPlayerHullSize (id), id, 0);
  5456.  
  5457. // Free space found.
  5458. if (get_tr2 (0, TR_InOpen) && !get_tr2 (0, TR_AllSolid) && !get_tr2 (0, TR_StartSolid))
  5459. {
  5460. // Set the new origin .
  5461. engfunc (EngFunc_SetOrigin, id, vf_NewOrigin);
  5462. return 1;
  5463. }
  5464. }
  5465.  
  5466. i_Distance += i_StartDistance;
  5467. }
  5468.  
  5469. // Could not be found.
  5470. return 0;
  5471. }
  5472.  
  5473. stock bool:is_user_stuck(id) {
  5474. new Float:g_origin[3];
  5475. pev(id, pev_origin, g_origin);
  5476. if ( trace_hull(g_origin, HULL_HUMAN,id) != 0 )
  5477. {
  5478. return true;
  5479. }
  5480. return false;
  5481. }
  5482.  
  5483. public CmdSprayMessage( id )
  5484. {
  5485. if(get_pcvar_num(cvar_pointer[cvar_sprayenable]) != 1)
  5486. return PLUGIN_HANDLED;
  5487. if(get_user_team(id) == 1 && !access(id, SPRAY_ACCESS))
  5488. {
  5489. fnColorPrint( id, "%L", LANG_SERVER, "JB_DAY_M168" );
  5490. return PLUGIN_HANDLED;
  5491. }
  5492.  
  5493. if( !g_bSprayMessages )
  5494. {
  5495. g_bSprayMessages = true;
  5496. fnColorPrint( id, "%L", LANG_SERVER, "JB_DAY_M169", '^4', '^3' );
  5497. }
  5498. else {
  5499. g_bSprayMessages = false;
  5500. fnColorPrint( id, "%L", LANG_SERVER, "JB_DAY_M170", '^4', '^3' );
  5501. }
  5502. return PLUGIN_HANDLED;
  5503. }
  5504.  
  5505. public EventSpray()
  5506. {
  5507. if(get_pcvar_num(cvar_pointer[cvar_sprayenable]) != 1)
  5508. return;
  5509. new iPlayer = read_data(2);
  5510. if(!get_bit(g_bIsConnected, iPlayer) && !get_bit(g_bIsAlive, iPlayer))
  5511. return;
  5512.  
  5513. new iOrigin[3];
  5514. iOrigin[0] = read_data(3);
  5515. iOrigin[1] = read_data(4);
  5516. iOrigin[2] = read_data(5);
  5517.  
  5518. new Float:vecOrigin[3];
  5519. IVecFVec(iOrigin, vecOrigin);
  5520.  
  5521. new Float:vecDirection[3];
  5522. velocity_by_aim(iPlayer, 5, vecDirection);
  5523.  
  5524. new Float:vecStop[3];
  5525. xs_vec_add(vecOrigin, vecDirection, vecStop);
  5526. xs_vec_mul_scalar(vecDirection, -1.0, vecDirection);
  5527.  
  5528. new Float:vecStart[3];
  5529. xs_vec_add(vecOrigin, vecDirection, vecStart);
  5530. engfunc(EngFunc_TraceLine, vecStart, vecStop, IGNORE_MONSTERS, -1, 0);
  5531. get_tr2(0, TR_vecPlaneNormal, vecDirection);
  5532. vecDirection[2] = 0.0;
  5533. xs_vec_normalize(vecDirection, vecDirection);
  5534. xs_vec_mul_scalar(vecDirection, 5.0, vecDirection);
  5535. xs_vec_add(vecOrigin, vecDirection, vecStart);
  5536. xs_vec_copy(vecStart, vecStop);
  5537. vecStop[2] -= 9999.0;
  5538. engfunc(EngFunc_TraceLine, vecStart, vecStop, IGNORE_MONSTERS, -1, 0);
  5539. get_tr2(0, TR_vecEndPos, vecStop);
  5540.  
  5541. new szName[32]; get_user_name(iPlayer, szName, charsmax(szName));
  5542.  
  5543. if(g_bSprayMessages) {
  5544. if(iPlayer > 0)
  5545. fnColorPrint(0, "%L", LANG_SERVER, "JB_DAY_M171", szName, '^4', (vecStart[2] - vecStop[2]), '^1', '^3');
  5546. }
  5547. else {
  5548. if(iPlayer > 0)
  5549. fnColorPrint( iPlayer, "%L", LANG_SERVER, "JB_DAY_M172", '^4', (vecStart[2] - vecStop[2]), '^1', '^3');
  5550. }
  5551. }
  5552.  
  5553. public Fwd_AddToFullPack(es_handle, e, ent, host, hostflags, player, pSet)
  5554. {
  5555.  
  5556. if( player && get_bit(g_bIsAlive, host))
  5557. {
  5558. if(g_iDay[ TOTAL_DAYS ] == DAY_HIDENSEEK)
  5559. {
  5560.  
  5561. static CsTeams:team; team = cs_get_user_team(ent);
  5562. static alpha;
  5563. switch (team)
  5564. {
  5565. case CS_TEAM_CT: alpha = 255;
  5566. case CS_TEAM_T:
  5567. {
  5568. static Float:flDistance;
  5569. flDistance = entity_range(host, ent);
  5570. if( flDistance < 1000.0 )
  5571. {
  5572. alpha = floatround((1.0 - (flDistance / 1000.0)) * 255.0);
  5573. }
  5574. else alpha = 1;
  5575. }
  5576. }
  5577.  
  5578. if(get_user_team(ent) != get_user_team(host))
  5579. {
  5580. set_es(es_handle, ES_RenderMode, kRenderTransAlpha);
  5581. set_es(es_handle, ES_RenderAmt, alpha);
  5582. }
  5583.  
  5584. }
  5585. if(g_iDay[ TOTAL_DAYS ] == DAY_NIGHT)
  5586. {
  5587. static CsTeams:team; team = cs_get_user_team(host);
  5588. static alpha;
  5589.  
  5590. switch (team)
  5591. {
  5592. case CS_TEAM_CT: alpha = 255;
  5593. case CS_TEAM_T: alpha = 0;
  5594. }
  5595. if(get_user_team(ent) != get_user_team(host))
  5596. {
  5597. set_es(es_handle, ES_RenderMode, kRenderTransAlpha);
  5598. set_es(es_handle, ES_RenderAmt, alpha);
  5599. }
  5600. }
  5601. if(g_iDay[ TOTAL_DAYS ] == DAY_RENIGHT)
  5602. {
  5603. static CsTeams:team; team = cs_get_user_team(host);
  5604. static alpha;
  5605.  
  5606. switch (team)
  5607. {
  5608. case CS_TEAM_CT: alpha = 0;
  5609. case CS_TEAM_T: alpha = 255;
  5610. }
  5611.  
  5612. if(get_user_team(ent) != get_user_team(host))
  5613. {
  5614. set_es(es_handle, ES_RenderMode, kRenderTransAlpha);
  5615. set_es(es_handle, ES_RenderAmt, alpha);
  5616. }
  5617. }
  5618. if(g_ThermalOn[host])
  5619. {
  5620. static CsTeams:team; team = cs_get_user_team(host);
  5621. static color[3];
  5622.  
  5623. switch (team)
  5624. {
  5625. case CS_TEAM_CT:
  5626. {
  5627. color[0] = 255;
  5628. color[1] = 0;
  5629. color[2] = 0;
  5630. }
  5631. case CS_TEAM_T:
  5632. {
  5633. color[0] = 0;
  5634. color[1] = 0;
  5635. color[2] = 255;
  5636. }
  5637. }
  5638.  
  5639. if(get_user_team(ent) != get_user_team(host))
  5640. {
  5641. set_es(es_handle, ES_RenderFx, 19);
  5642. set_es(es_handle, ES_RenderColor, color);
  5643. set_es(es_handle, ES_RenderMode, 0);
  5644. set_es(es_handle, ES_RenderAmt, 25);
  5645. }
  5646. }
  5647. }
  5648.  
  5649. return FMRES_IGNORED;
  5650. }
  5651.  
  5652. public fm_get_speak(id)
  5653. {
  5654. if(!get_bit(g_bIsConnected, id))
  5655. {
  5656. log_error(AMX_ERR_NATIVE, "[FmSetSpeak] Invalid player %d", id);
  5657. return 0;
  5658. }
  5659.  
  5660. return g_iSpeakFlags[id];
  5661. }
  5662.  
  5663. public fm_set_speak(id, nums)
  5664. {
  5665. if(!get_bit(g_bIsConnected, id))
  5666. {
  5667. log_error(AMX_ERR_NATIVE, "[FmSetSpeak] Invalid player %d", id);
  5668. return;
  5669. }
  5670. g_iSpeakFlags[id] = nums;
  5671. }
  5672.  
  5673. GiveItem(const id, const szItem[], const bpAmmo) {
  5674. give_item(id, szItem);
  5675. cs_set_user_bpammo(id, get_weaponid(szItem), bpAmmo);
  5676. }
  5677.  
  5678. public fog(bool:FogOn) {
  5679. if(FogOn) {
  5680. message_begin(MSG_ALL,g_iMsgFog,{0,0,0},0);
  5681. write_byte(180); // red
  5682. write_byte(1); // green
  5683. write_byte(1); // blue
  5684. write_byte(10); // Start distance
  5685. write_byte(41); // Start distance
  5686. write_byte(95); // End distance
  5687. write_byte(59); // End distance
  5688. message_end();
  5689. }
  5690. else {
  5691. message_begin(MSG_ALL,g_iMsgFog,{0,0,0},0);
  5692. write_byte(0); // red
  5693. write_byte(0); // green
  5694. write_byte(0); // blue
  5695. write_byte(0); // Start distance
  5696. write_byte(0); // Start distance
  5697. write_byte(0); // End distance
  5698. write_byte(0); // End distance
  5699. message_end();
  5700. }
  5701. }
  5702.  
  5703. public Event_NVGToggle(id)
  5704. g_ThermalOn[id] = read_data(1);
  5705.