Guest User

Untitled

a guest
Feb 3rd, 2017
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 45.80 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <engine>
  4. #include <fakemeta>
  5. #include <hamsandwich>
  6. #include <fun>
  7. #include <cstrike>
  8.  
  9. #define PLUGIN_NAME "JailBreak Extreme"
  10. #define PLUGIN_AUTHOR "JoRoPiTo"
  11. #define PLUGIN_VERSION "1.9"
  12. #define PLUGIN_CVAR "jbextreme"
  13.  
  14. #define TASK_STATUS 2487000
  15. #define TASK_FREEDAY 2487100
  16. #define TASK_ROUND 2487200
  17. #define TASK_HELP 2487300
  18. #define TASK_SAFETIME 2487400
  19. #define TASK_FREEEND 2487500
  20. #define TEAM_MENU "#Team_Select_Spect"
  21. #define TEAM_MENU2 "#Team_Select_Spect"
  22. #define HUD_DELAY Float:4.0
  23. #define CELL_RADIUS Float:200.0
  24.  
  25. #define get_bit(%1,%2) ( %1 & 1 << ( %2 & 31 ) )
  26. #define set_bit(%1,%2) %1 |= ( 1 << ( %2 & 31 ) )
  27. #define clear_bit(%1,%2) %1 &= ~( 1 << ( %2 & 31 ) )
  28.  
  29. #define vec_len(%1) floatsqroot(%1[0] * %1[0] + %1[1] * %1[1] + %1[2] * %1[2])
  30. #define vec_mul(%1,%2) ( %1[0] *= %2, %1[1] *= %2, %1[2] *= %2)
  31. #define vec_copy(%1,%2) ( %2[0] = %1[0], %2[1] = %1[1],%2[2] = %1[2])
  32.  
  33. // Offsets
  34. #define m_iPrimaryWeapon 116
  35. #define m_iVGUI 510
  36. #define m_fGameHUDInitialized 349
  37. #define m_fNextHudTextArgsGameTime 198
  38.  
  39. enum _hud { _hudsync, Float:_x, Float:_y, Float:_time }
  40. enum _lastrequest { _knife, _deagle, _freeday, _weapon }
  41. enum _duel { _name[16], _csw, _entname[32], _opt[32], _sel[32] }
  42. new g_MathQuestion[ MathQuestion ]
  43. new gp_PrecacheSpawn
  44. new gp_PrecacheKeyValue
  45.  
  46. new gp_CrowbarMax
  47. new gp_CrowbarMul
  48. new gp_TeamRatio
  49. new gp_CtMax
  50. new gp_BoxMax
  51. new gp_TalkMode
  52. new gp_VoiceBlock
  53. new gp_RetryTime
  54. new gp_RoundMax
  55. new gp_ButtonShoot
  56. new gp_SimonSteps
  57. new gp_SimonRandom
  58. new gp_GlowModels
  59. new gp_AutoLastresquest
  60. new gp_LastRequest
  61. new gp_Motd
  62. new gp_SpectRounds
  63. new gp_NosimonRounds
  64. new gp_AutoOpen
  65. new gp_TeamChange
  66.  
  67. new g_MaxClients
  68. new g_MsgStatusText
  69. new g_MsgStatusIcon
  70. new g_MsgVGUIMenu
  71. new g_MsgShowMenu
  72. new g_MsgClCorpse
  73. new g_MsgMOTD
  74.  
  75. new gc_TalkMode
  76. new gc_VoiceBlock
  77. new gc_SimonSteps
  78. new gc_ButtonShoot
  79. new Float:gc_CrowbarMul
  80.  
  81. // Precache
  82. new const _FistModels[][] = { "models/p_bknuckles.mdl", "models/v_bknuckles.mdl" }
  83. new const _CrowbarModels[][] = { "models/p_crowbar.mdl", "models/v_crowbar.mdl" }
  84. new const _FistSounds[][] = { "weapons/cbar_hitbod2.wav", "weapons/cbar_hitbod1.wav", "weapons/bullet_hit1.wav", "weapons/bullet_hit2.wav" }
  85. new const _RemoveEntities[][] = {
  86. "func_hostage_rescue", "info_hostage_rescue", "func_bomb_target", "info_bomb_target",
  87. "hostage_entity", "info_vip_start", "func_vip_safetyzone", "func_escapezone"
  88. }
  89.  
  90. new const _WeaponsFree[][] = { "weapon_scout", "weapon_deagle", "weapon_mac10", "weapon_elite", "weapon_ak47", "weapon_m4a1", "weapon_mp5navy" }
  91. new const _WeaponsFreeCSW[] = { CSW_SCOUT, CSW_DEAGLE, CSW_MAC10, CSW_ELITE, CSW_AK47, CSW_M4A1, CSW_MP5NAVY }
  92. new const _WeaponsFreeAmmo[] = { 90, 35, 100, 120, 90, 90, 120 }
  93.  
  94. new const _Duel[][_duel] =
  95. {
  96. { "Deagle", CSW_DEAGLE, "weapon_deagle", "JBE_MENU_LASTREQ_OPT4", "JBE_MENU_LASTREQ_SEL4" },
  97. { "Scout", CSW_SCOUT, "weapon_scout", "JBE_MENU_LASTREQ_OPT5", "JBE_MENU_LASTREQ_SEL5" },
  98. { "Grenades", CSW_HEGRENADE, "weapon_hegrenade", "JBE_MENU_LASTREQ_OPT6", "JBE_MENU_LASTREQ_SEL6" },
  99. { "Awp", CSW_AWP, "weapon_awp", "JBE_MENU_LASTREQ_OPT7", "JBE_MENU_LASTREQ_SEL7" }
  100. }
  101.  
  102. // Reasons
  103. new const g_Reasons[][] = {
  104. "",
  105. "JBE_PRISONER_REASON_1",
  106. "JBE_PRISONER_REASON_2",
  107. "JBE_PRISONER_REASON_3",
  108. "JBE_PRISONER_REASON_4",
  109. "JBE_PRISONER_REASON_5",
  110. "JBE_PRISONER_REASON_6"
  111. }
  112.  
  113. // HudSync: 0=ttinfo / 1=info / 2=simon / 3=ctinfo / 4=player / 5=day / 6=center / 7=help / 8=timer
  114. new const g_HudSync[][_hud] =
  115. {
  116. {0, 0.6, 0.2, 2.0},
  117. {0, -1.0, 0.7, 5.0},
  118. {0, 0.1, 0.2, 2.0},
  119. {0, 0.1, 0.3, 2.0},
  120. {0, -1.0, 0.9, 3.0},
  121. {0, 0.6, 0.1, 3.0},
  122. {0, -1.0, 0.6, 3.0},
  123. {0, 0.8, 0.3, 20.0},
  124. {0, -1.0, 0.4, 3.0}
  125. }
  126.  
  127. // Colors: 0:Simon / 1:Freeday / 2:CT Duel / 3:TT Duel
  128. new const g_Colors[][3] = { {0, 255, 0}, {255, 140, 0}, {0, 0, 255}, {255, 0, 0} }
  129.  
  130.  
  131. new CsTeams:g_PlayerTeam[33]
  132. new Float:g_SimonRandom
  133. new Trie:g_CellManagers
  134. new g_HelpText[512]
  135. new g_JailDay
  136. new g_PlayerJoin
  137. new g_PlayerReason[33]
  138. new g_PlayerSpect[33]
  139. new g_PlayerSimon[33]
  140. new g_PlayerNomic
  141. new g_PlayerWanted
  142. new g_PlayerCrowbar
  143. new g_PlayerRevolt
  144. new g_PlayerHelp
  145. new g_PlayerFreeday
  146. new g_PlayerLast
  147. new g_FreedayAuto
  148. new g_FreedayNext
  149. new g_TeamCount[CsTeams]
  150. new g_TeamAlive[CsTeams]
  151. new g_BoxStarted
  152. new g_CrowbarCount
  153. new g_Simon
  154. new g_SimonAllowed
  155. new g_SimonTalking
  156. new g_SimonVoice
  157. new g_RoundStarted
  158. new g_LastDenied
  159. new g_Freeday
  160. new g_BlockWeapons
  161. new g_RoundEnd
  162. new g_Duel
  163. new g_DuelA
  164. new g_DuelB
  165. new g_SafeTime
  166. new g_Buttons[10]
  167.  
  168. public plugin_init()
  169. {
  170. unregister_forward(FM_Spawn, gp_PrecacheSpawn)
  171. unregister_forward(FM_KeyValue, gp_PrecacheKeyValue)
  172.  
  173. register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
  174. register_cvar(PLUGIN_CVAR, PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY)
  175.  
  176. register_dictionary("jbextreme.txt")
  177.  
  178. g_MsgStatusText = get_user_msgid("StatusText")
  179. g_MsgStatusIcon = get_user_msgid("StatusIcon")
  180. g_MsgVGUIMenu = get_user_msgid("VGUIMenu")
  181. g_MsgShowMenu = get_user_msgid("ShowMenu")
  182. g_MsgMOTD = get_user_msgid("MOTD")
  183. g_MsgClCorpse = get_user_msgid("ClCorpse")
  184.  
  185. register_message(g_MsgStatusText, "msg_statustext")
  186. register_message(g_MsgStatusIcon, "msg_statusicon")
  187. register_message(g_MsgVGUIMenu, "msg_vguimenu")
  188. register_message(g_MsgShowMenu, "msg_showmenu")
  189. register_message(g_MsgMOTD, "msg_motd")
  190. register_message(g_MsgClCorpse, "msg_clcorpse")
  191.  
  192. register_event("CurWeapon", "current_weapon", "be", "1=1", "2=29")
  193. register_event("StatusValue", "player_status", "be", "1=2", "2!0")
  194. register_event("StatusValue", "player_status", "be", "1=1", "2=0")
  195.  
  196. register_impulse(100, "impulse_100")
  197.  
  198. RegisterHam(Ham_Spawn, "player", "player_spawn", 1)
  199. RegisterHam(Ham_TakeDamage, "player", "player_damage")
  200. RegisterHam(Ham_TraceAttack, "player", "player_attack")
  201. RegisterHam(Ham_TraceAttack, "func_button", "button_attack")
  202. RegisterHam(Ham_Killed, "player", "player_killed", 1)
  203. RegisterHam(Ham_Touch, "weapon_hegrenade", "player_touchweapon")
  204. RegisterHam(Ham_Touch, "weaponbox", "player_touchweapon")
  205. RegisterHam(Ham_Touch, "armoury_entity", "player_touchweapon")
  206.  
  207. register_forward(FM_SetClientKeyValue, "set_client_kv")
  208. register_forward(FM_EmitSound, "sound_emit")
  209. register_forward(FM_Voice_SetClientListening, "voice_listening")
  210. register_forward(FM_CmdStart, "player_cmdstart", 1)
  211.  
  212. register_logevent("round_end", 2, "1=Round_End")
  213. register_logevent("round_first", 2, "0=World triggered", "1&Restart_Round_")
  214. register_logevent("round_first", 2, "0=World triggered", "1=Game_Commencing")
  215. register_logevent("round_start", 2, "0=World triggered", "1=Round_Start")
  216.  
  217. register_menucmd(register_menuid(TEAM_MENU), 51, "team_select")
  218. register_menucmd(register_menuid(TEAM_MENU2), 51, "team_select")
  219.  
  220. register_clcmd("jointeam", "cmd_jointeam")
  221. register_clcmd("joinclass", "cmd_joinclass")
  222. register_clcmd("+simonvoice", "cmd_voiceon")
  223. register_clcmd("-simonvoice", "cmd_voiceoff")
  224.  
  225. register_clcmd("say /fd", "cmd_freeday")
  226. register_clcmd("say /freeday", "cmd_freeday")
  227. register_clcmd("say /day", "cmd_freeday")
  228. register_clcmd("say /lr", "cmd_lastrequest")
  229. register_clcmd("say /lastrequest", "cmd_lastrequest")
  230. register_clcmd("say /duel", "cmd_lastrequest")
  231. register_clcmd("say /simon", "cmd_simon")
  232. register_clcmd("say /open", "cmd_open")
  233. register_clcmd("say /nomic", "cmd_nomic")
  234. register_clcmd("say /box", "cmd_box")
  235. register_clcmd("say /help", "cmd_help")
  236.  
  237. register_clcmd("jbe_freeday", "adm_freeday", ADMIN_KICK)
  238. register_concmd("jbe_nomic", "adm_nomic", ADMIN_KICK)
  239.  
  240. gp_GlowModels = register_cvar("jbe_glowmodels", "0")
  241. gp_SimonSteps = register_cvar("jbe_simonsteps", "1")
  242. gp_CrowbarMul = register_cvar("jbe_crowbarmultiplier", "25.0")
  243. gp_CrowbarMax = register_cvar("jbe_maxcrowbar", "1")
  244. gp_TeamRatio = register_cvar("jbe_teamratio", "3")
  245. gp_TeamChange = register_cvar("jbe_teamchange", "0") // 0-disable team change for tt / 1-enable team change
  246. gp_CtMax = register_cvar("jbe_maxct", "6")
  247. gp_BoxMax = register_cvar("jbe_boxmax", "6")
  248. gp_RetryTime = register_cvar("jbe_retrytime", "10.0")
  249. gp_RoundMax = register_cvar("jbe_freedayround", "240.0")
  250. gp_AutoLastresquest = register_cvar("jbe_autolastrequest", "1")
  251. gp_LastRequest = register_cvar("jbe_lastrequest", "1")
  252. gp_Motd = register_cvar("jbe_motd", "1")
  253. gp_SpectRounds = register_cvar("jbe_spectrounds", "3")
  254. gp_NosimonRounds = register_cvar("jbe_nosimonrounds", "7")
  255. gp_SimonRandom = register_cvar("jbe_randomsimon", "0")
  256. gp_AutoOpen = register_cvar("jbe_autoopen", "1")
  257. gp_TalkMode = register_cvar("jbe_talkmode", "2") // 0-alltak / 1-tt talk / 2-tt no talk
  258. gp_VoiceBlock = register_cvar("jbe_blockvoice", "2") // 0-dont block / 1-block voicerecord / 2-block voicerecord except simon
  259. gp_ButtonShoot = register_cvar("jbe_buttonshoot", "1") // 0-standard / 1-func_button shoots!
  260.  
  261. g_MaxClients = get_global_int(GL_maxClients)
  262.  
  263. for(new i = 0; i < sizeof(g_HudSync); i++)
  264. g_HudSync[i][_hudsync] = CreateHudSyncObj()
  265.  
  266. formatex(g_HelpText, charsmax(g_HelpText), "%L^n^n%L^n^n%L^n^n%L",
  267. LANG_SERVER, "JBE_HELP_TITLE",
  268. LANG_SERVER, "JBE_HELP_BINDS",
  269. LANG_SERVER, "JBE_HELP_GUARD_CMDS",
  270. LANG_SERVER, "JBE_HELP_PRISONER_CMDS")
  271.  
  272. setup_buttons()
  273. }
  274.  
  275. public plugin_precache()
  276. {
  277. static i
  278. precache_model("models/player/jbemodel/jbemodel.mdl")
  279.  
  280. for(i = 0; i < sizeof(_FistModels); i++)
  281. precache_model(_FistModels[i])
  282.  
  283. for(i = 0; i < sizeof(_CrowbarModels); i++)
  284. precache_model(_CrowbarModels[i])
  285.  
  286. for(i = 0; i < sizeof(_FistSounds); i++)
  287. precache_sound(_FistSounds[i])
  288.  
  289. precache_sound("jbextreme/nm_goodbadugly.wav")
  290. precache_sound("jbextreme/brass_bell_C.wav")
  291.  
  292. g_CellManagers = TrieCreate()
  293. gp_PrecacheSpawn = register_forward(FM_Spawn, "precache_spawn", 1)
  294. gp_PrecacheKeyValue = register_forward(FM_KeyValue, "precache_keyvalue", 1)
  295. }
  296.  
  297. public precache_spawn(ent)
  298. {
  299. if(is_valid_ent(ent))
  300. {
  301. static szClass[33]
  302. entity_get_string(ent, EV_SZ_classname, szClass, sizeof(szClass))
  303. for(new i = 0; i < sizeof(_RemoveEntities); i++)
  304. if(equal(szClass, _RemoveEntities[i]))
  305. remove_entity(ent)
  306. }
  307. }
  308.  
  309. public precache_keyvalue(ent, kvd_handle)
  310. {
  311. static info[32]
  312. if(!is_valid_ent(ent))
  313. return FMRES_IGNORED
  314.  
  315. get_kvd(kvd_handle, KV_ClassName, info, charsmax(info))
  316. if(!equal(info, "multi_manager"))
  317. return FMRES_IGNORED
  318.  
  319. get_kvd(kvd_handle, KV_KeyName, info, charsmax(info))
  320. TrieSetCell(g_CellManagers, info, ent)
  321. return FMRES_IGNORED
  322. }
  323.  
  324. public client_putinserver(id)
  325. {
  326. clear_bit(g_PlayerJoin, id)
  327. clear_bit(g_PlayerHelp, id)
  328. clear_bit(g_PlayerCrowbar, id)
  329. clear_bit(g_PlayerNomic, id)
  330. clear_bit(g_PlayerWanted, id)
  331. clear_bit(g_SimonTalking, id)
  332. clear_bit(g_SimonVoice, id)
  333. g_PlayerSpect[id] = 0
  334. g_PlayerSimon[id] = 0
  335. }
  336.  
  337. public client_disconnect(id)
  338. {
  339. if(g_Simon == id)
  340. {
  341. g_Simon = 0
  342. ClearSyncHud(0, g_HudSync[2][_hudsync])
  343. player_hudmessage(0, 2, 5.0, _, "%L", LANG_SERVER, "JBE_SIMON_HASGONE")
  344. }
  345. else if(g_PlayerLast == id || (g_Duel && (id == g_DuelA || id == g_DuelB)))
  346. {
  347. g_Duel = 0
  348. g_DuelA = 0
  349. g_DuelB = 0
  350. g_LastDenied = 0
  351. g_BlockWeapons = 0
  352. g_PlayerLast = 0
  353. }
  354. team_count()
  355. }
  356.  
  357. public client_PostThink(id)
  358. {
  359. if(id != g_Simon || !gc_SimonSteps || !is_user_alive(id) ||
  360. !(entity_get_int(id, EV_INT_flags) & FL_ONGROUND) || entity_get_int(id, EV_ENT_groundentity))
  361. return PLUGIN_CONTINUE
  362.  
  363. static Float:origin[3]
  364. static Float:last[3]
  365.  
  366. entity_get_vector(id, EV_VEC_origin, origin)
  367. if(get_distance_f(origin, last) < 32.0)
  368. {
  369. return PLUGIN_CONTINUE
  370. }
  371.  
  372. vec_copy(origin, last)
  373. if(entity_get_int(id, EV_INT_bInDuck))
  374. origin[2] -= 18.0
  375. else
  376. origin[2] -= 36.0
  377.  
  378.  
  379. message_begin(MSG_BROADCAST, SVC_TEMPENTITY, {0,0,0}, 0)
  380. write_byte(TE_WORLDDECAL)
  381. write_coord(floatround(origin[0]))
  382. write_coord(floatround(origin[1]))
  383. write_coord(floatround(origin[2]))
  384. write_byte(105)
  385. message_end()
  386.  
  387. return PLUGIN_CONTINUE
  388. }
  389.  
  390.  
  391. public msg_statustext(msgid, dest, id)
  392. {
  393. return PLUGIN_HANDLED
  394. }
  395.  
  396. public msg_statusicon(msgid, dest, id)
  397. {
  398. static icon[5]
  399. get_msg_arg_string(2, icon, charsmax(icon))
  400. if(icon[0] == 'b' && icon[2] == 'y' && icon[3] == 'z')
  401. {
  402. set_pdata_int(id, 235, get_pdata_int(id, 235) & ~(1<<0))
  403. return PLUGIN_HANDLED
  404. }
  405.  
  406. return PLUGIN_CONTINUE
  407. }
  408.  
  409. public msg_vguimenu(msgid, dest, id)
  410. {
  411. static msgarg1
  412. static CsTeams:team
  413.  
  414. msgarg1 = get_msg_arg_int(1)
  415. if(msgarg1 == 2)
  416. {
  417. team = cs_get_user_team(id)
  418. if((team == CS_TEAM_T) && !is_user_admin(id) && (is_user_alive(id) || !get_pcvar_num(gp_TeamChange)))
  419. {
  420. client_print(id, print_center, "%L", LANG_SERVER, "JBE_TEAM_CANTCHANGE")
  421. return PLUGIN_HANDLED
  422. }
  423. show_menu(id, 51, TEAM_MENU, -1)
  424. return PLUGIN_HANDLED
  425. }
  426.  
  427. return PLUGIN_CONTINUE
  428. }
  429.  
  430. public msg_showmenu(msgid, dest, id)
  431. {
  432. static msgarg1, roundloop
  433. static CsTeams:team
  434. msgarg1 = get_msg_arg_int(1)
  435.  
  436. if(msgarg1 != 531 && msgarg1 != 563)
  437. return PLUGIN_CONTINUE
  438.  
  439. roundloop = floatround(get_pcvar_float(gp_RetryTime) / 2)
  440. team = cs_get_user_team(id)
  441.  
  442. if(team == CS_TEAM_T)
  443. {
  444. if(!is_user_admin(id) && (is_user_alive(id) || (g_RoundStarted >= roundloop) || !get_pcvar_num(gp_TeamChange)))
  445. {
  446. client_print(id, print_center, "%L", LANG_SERVER, "JBE_TEAM_CANTCHANGE")
  447. return PLUGIN_HANDLED
  448. }
  449. else
  450. {
  451. show_menu(id, 51, TEAM_MENU, -1)
  452. return PLUGIN_HANDLED
  453. }
  454. }
  455. else
  456. {
  457. show_menu(id, 51, TEAM_MENU, -1)
  458. return PLUGIN_HANDLED
  459. }
  460.  
  461. return PLUGIN_CONTINUE
  462. }
  463.  
  464. public msg_motd(msgid, dest, id)
  465. {
  466. if(get_pcvar_num(gp_Motd))
  467. return PLUGIN_HANDLED
  468.  
  469. return PLUGIN_CONTINUE
  470. }
  471.  
  472. public msg_clcorpse(msgid, dest, id)
  473. {
  474. return PLUGIN_HANDLED
  475. }
  476.  
  477. public current_weapon(id)
  478. {
  479. if(!is_user_alive(id))
  480. return PLUGIN_CONTINUE
  481.  
  482. if(get_bit(g_PlayerCrowbar, id))
  483. {
  484. set_pev(id, pev_viewmodel2, _CrowbarModels[1])
  485. set_pev(id, pev_weaponmodel2, _CrowbarModels[0])
  486. }
  487. else
  488. {
  489. set_pev(id, pev_viewmodel2, _FistModels[1])
  490. set_pev(id, pev_weaponmodel2, _FistModels[0])
  491. }
  492. return PLUGIN_CONTINUE
  493. }
  494.  
  495. public player_status(id)
  496. {
  497. static type, player, CsTeams:team, name[32], health
  498. type = read_data(1)
  499. player = read_data(2)
  500. switch(type)
  501. {
  502. case(1):
  503. {
  504. ClearSyncHud(id, g_HudSync[1][_hudsync])
  505. }
  506. case(2):
  507. {
  508. team = cs_get_user_team(player)
  509. if((team != CS_TEAM_T) && (team != CS_TEAM_CT))
  510. return PLUGIN_HANDLED
  511.  
  512. health = get_user_health(player)
  513. get_user_name(player, name, charsmax(name))
  514. player_hudmessage(id, 4, 2.0, {0, 255, 0}, "%L", LANG_SERVER,
  515. (team == CS_TEAM_T) ? "JBE_PRISONER_STATUS" : "JBE_GUARD_STATUS", name, health)
  516. }
  517. }
  518.  
  519. return PLUGIN_HANDLED
  520. }
  521.  
  522. public impulse_100(id)
  523. {
  524. if(cs_get_user_team(id) == CS_TEAM_T)
  525. return PLUGIN_HANDLED
  526.  
  527. return PLUGIN_CONTINUE
  528. }
  529.  
  530. public player_spawn(id)
  531. {
  532. static CsTeams:team
  533.  
  534. if(!is_user_connected(id))
  535. return HAM_IGNORED
  536.  
  537. set_pdata_float(id, m_fNextHudTextArgsGameTime, get_gametime() + 999999.0)
  538. player_strip_weapons(id)
  539. if(g_RoundEnd)
  540. {
  541. g_RoundEnd = 0
  542. g_JailDay++
  543. }
  544.  
  545. set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
  546.  
  547. clear_bit(g_PlayerCrowbar, id)
  548. clear_bit(g_PlayerWanted, id)
  549. team = cs_get_user_team(id)
  550.  
  551. switch(team)
  552. {
  553. case(CS_TEAM_T):
  554. {
  555. g_PlayerLast = 0
  556. if(!g_PlayerReason[id])
  557. g_PlayerReason[id] = random_num(1, 6)
  558.  
  559. player_hudmessage(id, 0, 5.0, {255, 0, 255}, "%L %L", LANG_SERVER, "JBE_PRISONER_REASON",
  560. LANG_SERVER, g_Reasons[g_PlayerReason[id]])
  561.  
  562. set_user_info(id, "model", "jbemodel")
  563. entity_set_int(id, EV_INT_body, 2)
  564. if(is_freeday() || get_bit(g_FreedayAuto, id))
  565. {
  566. freeday_set(0, id)
  567. clear_bit(g_FreedayAuto, id)
  568. }
  569. else
  570. {
  571. entity_set_int(id, EV_INT_skin, random_num(0, 2))
  572. }
  573.  
  574. if(g_CrowbarCount < get_pcvar_num(gp_CrowbarMax))
  575. {
  576. if(random_num(0, g_MaxClients) > (g_MaxClients / 2))
  577. {
  578. g_CrowbarCount++
  579. set_bit(g_PlayerCrowbar, id)
  580. }
  581. }
  582. cs_set_user_armor(id, 0, CS_ARMOR_NONE)
  583. }
  584. case(CS_TEAM_CT):
  585. {
  586. g_PlayerSimon[id]++
  587. set_user_info(id, "model", "jbemodel")
  588. entity_set_int(id, EV_INT_body, 3)
  589. cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM)
  590. }
  591. }
  592. first_join(id)
  593. return HAM_IGNORED
  594. }
  595.  
  596. public player_damage(victim, ent, attacker, Float:damage, bits)
  597. {
  598. if(!is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker)
  599. return HAM_IGNORED
  600.  
  601. switch(g_Duel)
  602. {
  603. case(0):
  604. {
  605. if(attacker == ent && get_user_weapon(attacker) == CSW_KNIFE && get_bit(g_PlayerCrowbar, attacker) && cs_get_user_team(victim) != CS_TEAM_T)
  606. {
  607. SetHamParamFloat(4, damage * gc_CrowbarMul)
  608. return HAM_OVERRIDE
  609. }
  610. }
  611. case(2):
  612. {
  613. if(attacker != g_PlayerLast)
  614. return HAM_SUPERCEDE
  615. }
  616. default:
  617. {
  618. if((victim == g_DuelA && attacker == g_DuelB) || (victim == g_DuelB && attacker == g_DuelA))
  619. return HAM_IGNORED
  620.  
  621. return HAM_SUPERCEDE
  622. }
  623. }
  624.  
  625. return HAM_IGNORED
  626. }
  627.  
  628. public player_attack(victim, attacker, Float:damage, Float:direction[3], tracehandle, damagebits)
  629. {
  630. static CsTeams:vteam, CsTeams:ateam
  631. if(!is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker)
  632. return HAM_IGNORED
  633.  
  634. vteam = cs_get_user_team(victim)
  635. ateam = cs_get_user_team(attacker)
  636.  
  637. if(ateam == CS_TEAM_CT && vteam == CS_TEAM_CT)
  638. return HAM_SUPERCEDE
  639.  
  640. switch(g_Duel)
  641. {
  642. case(0):
  643. {
  644. if(ateam == CS_TEAM_CT && vteam == CS_TEAM_T)
  645. {
  646. if(get_bit(g_PlayerRevolt, victim))
  647. {
  648. clear_bit(g_PlayerRevolt, victim)
  649. hud_status(0)
  650. }
  651. return HAM_IGNORED
  652. }
  653. }
  654. case(2):
  655. {
  656. if(attacker != g_PlayerLast)
  657. return HAM_SUPERCEDE
  658. }
  659. default:
  660. {
  661. if((victim == g_DuelA && attacker == g_DuelB) || (victim == g_DuelB && attacker == g_DuelA))
  662. return HAM_IGNORED
  663.  
  664. return HAM_SUPERCEDE
  665. }
  666. }
  667.  
  668. if(ateam == CS_TEAM_T && vteam == CS_TEAM_T && !g_BoxStarted)
  669. return HAM_SUPERCEDE
  670.  
  671. if(ateam == CS_TEAM_T && vteam == CS_TEAM_CT)
  672. {
  673. if(!g_PlayerRevolt)
  674. revolt_start()
  675.  
  676. set_bit(g_PlayerRevolt, attacker)
  677. }
  678.  
  679. return HAM_IGNORED
  680. }
  681.  
  682. public button_attack(button, id, Float:damage, Float:direction[3], tracehandle, damagebits)
  683. {
  684. if(is_valid_ent(button) && gc_ButtonShoot)
  685. {
  686. ExecuteHamB(Ham_Use, button, id, 0, 2, 1.0)
  687. entity_set_float(button, EV_FL_frame, 0.0)
  688. }
  689.  
  690. return HAM_IGNORED
  691. }
  692.  
  693. public player_killed(victim, attacker, shouldgib)
  694. {
  695. static CsTeams:vteam, CsTeams:kteam
  696. if(!(0 < attacker <= g_MaxClients) || !is_user_connected(attacker))
  697. kteam = CS_TEAM_UNASSIGNED
  698. else
  699. kteam = cs_get_user_team(attacker)
  700.  
  701. vteam = cs_get_user_team(victim)
  702. if(g_Simon == victim)
  703. {
  704. g_Simon = 0
  705. ClearSyncHud(0, g_HudSync[2][_hudsync])
  706. player_hudmessage(0, 2, 5.0, _, "%L", LANG_SERVER, "JBE_SIMON_KILLED")
  707. }
  708.  
  709. switch(g_Duel)
  710. {
  711. case(0):
  712. {
  713. switch(vteam)
  714. {
  715. case(CS_TEAM_CT):
  716. {
  717. if(kteam == CS_TEAM_T && !get_bit(g_PlayerWanted, attacker))
  718. {
  719. set_bit(g_PlayerWanted, attacker)
  720. entity_set_int(attacker, EV_INT_skin, 4)
  721. }
  722. }
  723. case(CS_TEAM_T):
  724. {
  725. clear_bit(g_PlayerRevolt, victim)
  726. clear_bit(g_PlayerWanted, victim)
  727. }
  728. }
  729. }
  730. default:
  731. {
  732. if(g_Duel != 2 && (attacker == g_DuelA || attacker == g_DuelB))
  733. {
  734. set_user_rendering(victim, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
  735. set_user_rendering(attacker, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
  736. g_Duel = 0
  737. g_LastDenied = 0
  738. g_BlockWeapons = 0
  739. g_PlayerLast = 0
  740. team_count()
  741. }
  742. }
  743. }
  744. hud_status(0)
  745. return HAM_IGNORED
  746. }
  747.  
  748. public player_touchweapon(id, ent)
  749. {
  750. static model[32], class[32]
  751. if(g_BlockWeapons)
  752. return HAM_SUPERCEDE
  753.  
  754. if(is_valid_ent(id) && g_Duel != 6 && is_user_alive(ent) && cs_get_user_team(ent) == CS_TEAM_CT)
  755. {
  756. entity_get_string(id, EV_SZ_model, model, charsmax(model))
  757. if(model[7] == 'w' && model[9] == 'h' && model[10] == 'e' && model[11] == 'g')
  758. {
  759. entity_get_string(id, EV_SZ_classname, class, charsmax(class))
  760. if(equal(class, "weapon_hegrenade"))
  761. remove_entity(id)
  762.  
  763. return HAM_SUPERCEDE
  764. }
  765.  
  766. }
  767.  
  768. return HAM_IGNORED
  769. }
  770.  
  771. public set_client_kv(id, const info[], const key[])
  772. {
  773. if(equal(key, "model"))
  774. return FMRES_SUPERCEDE
  775.  
  776. return FMRES_IGNORED
  777. }
  778.  
  779. public sound_emit(id, channel, sample[])
  780. {
  781. if(is_user_alive(id) && equal(sample, "weapons/knife_", 14))
  782. {
  783. switch(sample[17])
  784. {
  785. case('b'):
  786. {
  787. emit_sound(id, CHAN_WEAPON, "weapons/cbar_hitbod2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  788. }
  789. case('w'):
  790. {
  791. emit_sound(id, CHAN_WEAPON, "weapons/cbar_hitbod1.wav", 1.0, ATTN_NORM, 0, PITCH_LOW)
  792. }
  793. case('1', '2'):
  794. {
  795. emit_sound(id, CHAN_WEAPON, "weapons/bullet_hit2.wav", random_float(0.5, 1.0), ATTN_NORM, 0, PITCH_NORM)
  796. }
  797. }
  798. return FMRES_SUPERCEDE
  799. }
  800. return FMRES_IGNORED
  801. }
  802.  
  803. public voice_listening(receiver, sender, bool:listen)
  804. {
  805. if((receiver == sender))
  806. return FMRES_IGNORED
  807.  
  808. if(is_user_admin(sender))
  809. {
  810. engfunc(EngFunc_SetClientListening, receiver, sender, true)
  811. return FMRES_SUPERCEDE
  812. }
  813.  
  814. switch(gc_VoiceBlock)
  815. {
  816. case(2):
  817. {
  818. if((sender != g_Simon) && (!get_bit(g_SimonVoice, sender) && gc_VoiceBlock))
  819. {
  820. engfunc(EngFunc_SetClientListening, receiver, sender, false)
  821. return FMRES_SUPERCEDE
  822. }
  823. }
  824. case(1):
  825. {
  826. if(!get_bit(g_SimonVoice, sender) && gc_VoiceBlock)
  827. {
  828. engfunc(EngFunc_SetClientListening, receiver, sender, false)
  829. return FMRES_SUPERCEDE
  830. }
  831. }
  832. }
  833. if(!is_user_alive(sender))
  834. {
  835. engfunc(EngFunc_SetClientListening, receiver, sender, false)
  836. return FMRES_SUPERCEDE
  837. }
  838.  
  839. if(sender == g_Simon)
  840. {
  841. engfunc(EngFunc_SetClientListening, receiver, sender, true)
  842. return FMRES_SUPERCEDE
  843. }
  844.  
  845. listen = true
  846.  
  847. if(g_SimonTalking && (sender != g_Simon))
  848. {
  849. listen = false
  850. }
  851. else
  852. {
  853. static CsTeams:steam
  854. steam = cs_get_user_team(sender)
  855. switch(gc_TalkMode)
  856. {
  857. case(2):
  858. {
  859. listen = (steam == CS_TEAM_CT)
  860. }
  861. case(1):
  862. {
  863. listen = (steam == CS_TEAM_CT || steam == CS_TEAM_T)
  864. }
  865. }
  866. }
  867.  
  868. engfunc(EngFunc_SetClientListening, receiver, sender, listen)
  869. return FMRES_SUPERCEDE
  870. }
  871.  
  872. public player_cmdstart(id, uc, random)
  873. {
  874. if(g_Duel > 3)
  875. {
  876. cs_set_user_bpammo(id, _Duel[g_Duel - 4][_csw], 1)
  877. }
  878. }
  879.  
  880. public round_first()
  881. {
  882. g_JailDay = 0
  883. for(new i = 1; i <= g_MaxClients; i++)
  884. g_PlayerSimon[i] = 0
  885.  
  886. set_cvar_num("sv_alltalk", 1)
  887. set_cvar_num("mp_roundtime", 2)
  888. set_cvar_num("mp_limitteams", 0)
  889. set_cvar_num("mp_autoteambalance", 0)
  890. set_cvar_num("mp_tkpunish", 0)
  891. set_cvar_num("mp_friendlyfire", 1)
  892. round_end()
  893. }
  894.  
  895. public round_end()
  896. {
  897. static CsTeams:team
  898. static maxnosimon, spectrounds
  899. g_SafeTime = 0
  900. g_PlayerRevolt = 0
  901. g_PlayerFreeday = 0
  902. g_PlayerLast = 0
  903. g_BoxStarted = 0
  904. g_CrowbarCount = 0
  905. g_Simon = 0
  906. g_SimonAllowed = 0
  907. g_RoundStarted = 0
  908. g_LastDenied = 0
  909. g_BlockWeapons = 0
  910. g_TeamCount[CS_TEAM_T] = 0
  911. g_TeamCount[CS_TEAM_CT] = 0
  912. g_Freeday = 0
  913. g_FreedayNext = (random_num(0,99) >= 95)
  914. g_RoundEnd = 1
  915. g_Duel = 0
  916.  
  917. remove_task(TASK_STATUS)
  918. remove_task(TASK_FREEDAY)
  919. remove_task(TASK_FREEEND)
  920. remove_task(TASK_ROUND)
  921. maxnosimon = get_pcvar_num(gp_NosimonRounds)
  922. spectrounds = get_pcvar_num(gp_SpectRounds)
  923. for(new i = 1; i <= g_MaxClients; i++)
  924. {
  925. if(!is_user_connected(i))
  926. continue
  927.  
  928. menu_cancel(i)
  929. team = cs_get_user_team(i)
  930. player_strip_weapons(i)
  931. switch(team)
  932. {
  933. case(CS_TEAM_CT):
  934. {
  935. if(g_PlayerSimon[i] > maxnosimon)
  936. {
  937. cmd_nomic(i)
  938. }
  939. }
  940. case(CS_TEAM_SPECTATOR,CS_TEAM_UNASSIGNED):
  941. {
  942. g_PlayerSpect[i]++
  943. if(g_PlayerSpect[i] > spectrounds)
  944. {
  945. client_cmd(i, "disconnect")
  946. server_print("JBE Disconnected spectator client #%i", i)
  947. }
  948. else
  949. {
  950. show_menu(i, 51, TEAM_MENU, -1)
  951. }
  952. }
  953. }
  954. }
  955. for(new i = 0; i < sizeof(g_HudSync); i++)
  956. ClearSyncHud(0, g_HudSync[i][_hudsync])
  957.  
  958. }
  959.  
  960. public round_start()
  961. {
  962. if(g_RoundEnd)
  963. return
  964.  
  965. team_count()
  966. if(!g_Simon && is_freeday())
  967. {
  968. g_Freeday = 1
  969. emit_sound(0, CHAN_AUTO, "jbextreme/brass_bell_C.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  970. check_freeday(TASK_FREEDAY)
  971. }
  972. else
  973. {
  974. set_task(60.0, "check_freeday", TASK_FREEDAY)
  975. }
  976. set_task(HUD_DELAY, "hud_status", TASK_STATUS, _, _, "b")
  977. set_task(get_pcvar_float(gp_RetryTime) + 1.0, "safe_time", TASK_SAFETIME)
  978. set_task(120.0, "freeday_end", TASK_FREEDAY)
  979. g_SimonRandom = get_pcvar_num(gp_SimonRandom) ? random_float(15.0, 45.0) : 0.0
  980. g_SimonAllowed = 1
  981. g_FreedayNext = 0
  982. }
  983.  
  984. public cmd_jointeam(id)
  985. {
  986. return PLUGIN_HANDLED
  987. }
  988.  
  989. public cmd_joinclass(id)
  990. {
  991. return PLUGIN_HANDLED
  992. }
  993.  
  994. public cmd_voiceon(id)
  995. {
  996. client_cmd(id, "+voicerecord")
  997. set_bit(g_SimonVoice, id)
  998. if(g_Simon == id || is_user_admin(id))
  999. set_bit(g_SimonTalking, id)
  1000.  
  1001. return PLUGIN_HANDLED
  1002. }
  1003.  
  1004. public cmd_voiceoff(id)
  1005. {
  1006. client_cmd(id, "-voicerecord")
  1007. clear_bit(g_SimonVoice, id)
  1008. if(g_Simon == id || is_user_admin(id))
  1009. clear_bit(g_SimonTalking, id)
  1010.  
  1011. return PLUGIN_HANDLED
  1012. }
  1013.  
  1014. public cmd_simon(id)
  1015. {
  1016. static CsTeams:team, name[32]
  1017. if(!is_user_connected(id))
  1018. return PLUGIN_HANDLED
  1019.  
  1020. team = cs_get_user_team(id)
  1021. if(g_SimonAllowed && !g_Freeday && is_user_alive(id) && team == CS_TEAM_CT && !g_Simon)
  1022. {
  1023. g_Simon = id
  1024. get_user_name(id, name, charsmax(name))
  1025. entity_set_int(id, EV_INT_body, 1)
  1026. g_PlayerSimon[id]--
  1027. if(get_pcvar_num(gp_GlowModels))
  1028. player_glow(id, g_Colors[0])
  1029.  
  1030. hud_status(0)
  1031. }
  1032. return PLUGIN_HANDLED
  1033. }
  1034.  
  1035. public cmd_open(id)
  1036. {
  1037. if(id == g_Simon)
  1038. jail_open()
  1039.  
  1040. return PLUGIN_HANDLED
  1041. }
  1042.  
  1043. public cmd_nomic(id)
  1044. {
  1045. static CsTeams:team
  1046. team = cs_get_user_team(id)
  1047. if(team == CS_TEAM_CT)
  1048. {
  1049. server_print("JBE Transfered guard to prisoners team client #%i", id)
  1050. if(g_Simon == id)
  1051. {
  1052. g_Simon = 0
  1053. player_hudmessage(0, 2, 5.0, _, "%L", LANG_SERVER, "JBE_SIMON_TRANSFERED")
  1054. }
  1055. if(!is_user_admin(id))
  1056. set_bit(g_PlayerNomic, id)
  1057.  
  1058. user_silentkill(id)
  1059. cs_set_user_team(id, CS_TEAM_T)
  1060. }
  1061. return PLUGIN_HANDLED
  1062. }
  1063.  
  1064. public cmd_box(id)
  1065. {
  1066. static i
  1067. if((id < 0) || (is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT))
  1068. {
  1069. if(g_TeamAlive[CS_TEAM_T] <= get_pcvar_num(gp_BoxMax) && g_TeamAlive[CS_TEAM_T] > 1)
  1070. {
  1071. for(i = 1; i <= g_MaxClients; i++)
  1072. if(is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_T)
  1073. set_user_health(i, 100)
  1074.  
  1075. set_cvar_num("mp_tkpunish", 0)
  1076. set_cvar_num("mp_friendlyfire", 1)
  1077. g_BoxStarted = 1
  1078. player_hudmessage(0, 1, 3.0, _, "%L", LANG_SERVER, "JBE_GUARD_BOX")
  1079. }
  1080. else
  1081. {
  1082. player_hudmessage(id, 1, 3.0, _, "%L", LANG_SERVER, "JBE_GUARD_CANTBOX")
  1083. }
  1084. }
  1085. return PLUGIN_HANDLED
  1086. }
  1087.  
  1088. public cmd_help(id)
  1089. {
  1090. if(id > g_MaxClients)
  1091. id -= TASK_HELP
  1092.  
  1093. remove_task(TASK_HELP + id)
  1094. switch(get_bit(g_PlayerHelp, id))
  1095. {
  1096. case(0):
  1097. {
  1098. set_bit(g_PlayerHelp, id)
  1099. player_hudmessage(id, 7, 15.0, {230, 100, 10}, "%s", g_HelpText)
  1100. set_task(15.0, "cmd_help", TASK_HELP + id)
  1101. }
  1102. default:
  1103. {
  1104. clear_bit(g_PlayerHelp, id)
  1105. ClearSyncHud(id, g_HudSync[7][_hudsync])
  1106. }
  1107. }
  1108. }
  1109.  
  1110. public cmd_freeday(id)
  1111. {
  1112. static menu, menuname[32], option[64]
  1113. if(!is_freeday() && ((is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT) || is_user_admin(id)))
  1114. {
  1115. formatex(menuname, charsmax(menuname), "%L", LANG_SERVER, "JBE_MENU_FREEDAY")
  1116. menu = menu_create(menuname, "freeday_choice")
  1117.  
  1118. formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_FREEDAY_PLAYER")
  1119. menu_additem(menu, option, "1", 0)
  1120.  
  1121. formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_FREEDAY_ALL")
  1122. menu_additem(menu, option, "2", 0)
  1123.  
  1124. menu_display(id, menu)
  1125. }
  1126. return PLUGIN_HANDLED
  1127. }
  1128.  
  1129. public cmd_freeday_player(id)
  1130. {
  1131. if((is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT) || is_user_admin(id))
  1132. menu_players(id, CS_TEAM_T, id, 1, "freeday_select", "%L", LANG_SERVER, "JBE_MENU_FREEDAY")
  1133.  
  1134. return PLUGIN_CONTINUE
  1135. }
  1136.  
  1137. public cmd_lastrequest(id)
  1138. {
  1139. static i, num[5], menu, menuname[32], option[64]
  1140. if(!get_pcvar_num(gp_LastRequest) || g_Freeday || g_LastDenied || id != g_PlayerLast || g_RoundEnd || get_bit(g_PlayerWanted, id) || get_bit(g_PlayerFreeday, id) || !is_user_alive(id))
  1141. return PLUGIN_CONTINUE
  1142.  
  1143. formatex(menuname, charsmax(menuname), "%L", LANG_SERVER, "JBE_MENU_LASTREQ")
  1144. menu = menu_create(menuname, "lastrequest_select")
  1145.  
  1146. formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_LASTREQ_OPT1")
  1147. menu_additem(menu, option, "1", 0)
  1148.  
  1149. formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_LASTREQ_OPT2")
  1150. menu_additem(menu, option, "2", 0)
  1151.  
  1152. formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_LASTREQ_OPT3")
  1153. menu_additem(menu, option, "3", 0)
  1154.  
  1155. for(i = 0; i < sizeof(_Duel); i++)
  1156. {
  1157. num_to_str(i + 4, num, charsmax(num))
  1158. formatex(option, charsmax(option), "%L", LANG_SERVER, _Duel[i][_opt])
  1159. menu_additem(menu, option, num, 0)
  1160. }
  1161.  
  1162. menu_display(id, menu)
  1163. return PLUGIN_CONTINUE
  1164. }
  1165.  
  1166. public adm_freeday(id)
  1167. {
  1168. static player, user[32]
  1169. if(!is_user_admin(id))
  1170. return PLUGIN_CONTINUE
  1171.  
  1172. read_argv(1, user, charsmax(user))
  1173. player = cmd_target(id, user, 2)
  1174. if(is_user_connected(player) && cs_get_user_team(player) == CS_TEAM_T)
  1175. {
  1176. freeday_set(id, player)
  1177. }
  1178. return PLUGIN_HANDLED
  1179. }
  1180.  
  1181. public adm_nomic(id)
  1182. {
  1183. static player, user[32]
  1184. if(id == 0 || is_user_admin(id))
  1185. {
  1186. read_argv(1, user, charsmax(user))
  1187. player = cmd_target(id, user, 3)
  1188. if(is_user_connected(player))
  1189. {
  1190. cmd_nomic(player)
  1191. }
  1192. }
  1193. return PLUGIN_HANDLED
  1194. }
  1195.  
  1196. public adm_open(id)
  1197. {
  1198. if(!is_user_admin(id))
  1199. return PLUGIN_CONTINUE
  1200.  
  1201. jail_open()
  1202. return PLUGIN_HANDLED
  1203. }
  1204.  
  1205. public adm_box(id)
  1206. {
  1207. if(!is_user_admin(id))
  1208. return PLUGIN_CONTINUE
  1209.  
  1210. cmd_box(-1)
  1211. return PLUGIN_HANDLED
  1212. }
  1213.  
  1214. public team_select(id, key)
  1215. {
  1216. static CsTeams:team, roundloop, admin
  1217.  
  1218. roundloop = get_pcvar_num(gp_RetryTime) / 2
  1219. team = cs_get_user_team(id)
  1220. admin = is_user_admin(id)
  1221. team_count()
  1222.  
  1223. if(!admin && (team == CS_TEAM_UNASSIGNED) && (g_RoundStarted >= roundloop) && g_TeamCount[CS_TEAM_CT] && g_TeamCount[CS_TEAM_T] && !is_user_alive(id))
  1224. {
  1225. team_join(id, CS_TEAM_SPECTATOR)
  1226. client_print(id, print_center, "%L", LANG_SERVER, "JBE_TEAM_CANTJOIN")
  1227. return PLUGIN_HANDLED
  1228. }
  1229.  
  1230.  
  1231. switch(key)
  1232. {
  1233. case(0):
  1234. {
  1235. if(team == CS_TEAM_T)
  1236. return PLUGIN_HANDLED
  1237.  
  1238. g_PlayerReason[id] = random_num(1, 6)
  1239.  
  1240. team_join(id, CS_TEAM_T)
  1241. }
  1242. case(1):
  1243. {
  1244. if(team == CS_TEAM_CT || (!admin && get_bit(g_PlayerNomic, id)))
  1245. return PLUGIN_HANDLED
  1246.  
  1247. if(g_TeamCount[CS_TEAM_CT] < ctcount_allowed() || admin)
  1248. team_join(id, CS_TEAM_CT)
  1249. else
  1250. client_print(id, print_center, "%L", LANG_SERVER, "JBE_TEAM_CTFULL")
  1251. }
  1252. case(5):
  1253. {
  1254. user_silentkill(id)
  1255. team_join(id, CS_TEAM_SPECTATOR)
  1256. }
  1257. }
  1258. return PLUGIN_HANDLED
  1259. }
  1260.  
  1261. public team_join(id, CsTeams:team)
  1262. {
  1263. static restore, vgui, msgblock
  1264.  
  1265. restore = get_pdata_int(id, m_iVGUI)
  1266. vgui = restore & (1<<0)
  1267. if(vgui)
  1268. set_pdata_int(id, m_iVGUI, restore & ~(1<<0))
  1269.  
  1270. switch(team)
  1271. {
  1272. case CS_TEAM_SPECTATOR:
  1273. {
  1274. msgblock = get_msg_block(g_MsgShowMenu)
  1275. set_msg_block(g_MsgShowMenu, BLOCK_ONCE)
  1276. dllfunc(DLLFunc_ClientPutInServer, id)
  1277. set_msg_block(g_MsgShowMenu, msgblock)
  1278. set_pdata_int(id, m_fGameHUDInitialized, 1)
  1279. engclient_cmd(id, "jointeam", "6")
  1280. }
  1281. case CS_TEAM_T, CS_TEAM_CT:
  1282. {
  1283. msgblock = get_msg_block(g_MsgShowMenu)
  1284. set_msg_block(g_MsgShowMenu, BLOCK_ONCE)
  1285. engclient_cmd(id, "jointeam", (team == CS_TEAM_CT) ? "2" : "1")
  1286. engclient_cmd(id, "joinclass", "1")
  1287. set_msg_block(g_MsgShowMenu, msgblock)
  1288. g_PlayerSpect[id] = 0
  1289. }
  1290. }
  1291.  
  1292. if(vgui)
  1293. set_pdata_int(id, m_iVGUI, restore)
  1294. }
  1295.  
  1296. public team_count()
  1297. {
  1298. static CsTeams:team, last
  1299. g_TeamCount[CS_TEAM_UNASSIGNED] = 0
  1300. g_TeamCount[CS_TEAM_T] = 0
  1301. g_TeamCount[CS_TEAM_CT] = 0
  1302. g_TeamCount[CS_TEAM_SPECTATOR] = 0
  1303. g_TeamAlive[CS_TEAM_UNASSIGNED] = 0
  1304. g_TeamAlive[CS_TEAM_T] = 0
  1305. g_TeamAlive[CS_TEAM_CT] = 0
  1306. g_TeamAlive[CS_TEAM_SPECTATOR] = 0
  1307. for(new i = 1; i <= g_MaxClients; i++)
  1308. {
  1309. if(is_user_connected(i))
  1310. {
  1311. team = cs_get_user_team(i)
  1312. g_TeamCount[team]++
  1313. g_PlayerTeam[i] = team
  1314. if(is_user_alive(i))
  1315. {
  1316. g_TeamAlive[team]++
  1317. if(team == CS_TEAM_T)
  1318. last = i
  1319. }
  1320. }
  1321. else
  1322. {
  1323. g_PlayerTeam[i] = CS_TEAM_UNASSIGNED
  1324. }
  1325. }
  1326. if(g_TeamAlive[CS_TEAM_T] == 1)
  1327. {
  1328. if(last != g_PlayerLast && g_SafeTime)
  1329. {
  1330. prisoner_last(last)
  1331. }
  1332. }
  1333. else
  1334. {
  1335. if(g_Duel || g_DuelA || g_DuelB)
  1336. {
  1337. if(is_user_alive(g_DuelA))
  1338. {
  1339. set_user_rendering(g_DuelA, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
  1340. player_strip_weapons(g_DuelA)
  1341. }
  1342.  
  1343. if(is_user_alive(g_DuelB))
  1344. {
  1345. set_user_rendering(g_DuelB, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
  1346. player_strip_weapons(g_DuelB)
  1347. }
  1348.  
  1349. }
  1350. g_PlayerLast = 0
  1351. g_DuelA = 0
  1352. g_DuelB = 0
  1353. g_Duel = 0
  1354. }
  1355. }
  1356.  
  1357. public revolt_start()
  1358. {
  1359. client_cmd(0,"speak ambience/siren")
  1360. set_task(8.0, "stop_sound")
  1361. hud_status(0)
  1362. }
  1363.  
  1364. public stop_sound(task)
  1365. {
  1366. client_cmd(0, "stopsound")
  1367. }
  1368.  
  1369. public hud_status(task)
  1370. {
  1371. static i, n
  1372. new name[32], szStatus[64], wanted[1024]
  1373.  
  1374. if(g_RoundStarted < (get_pcvar_num(gp_RetryTime) / 2))
  1375. g_RoundStarted++
  1376.  
  1377. if(!g_Freeday && !g_Simon && g_SimonAllowed && (0.0 < g_SimonRandom < get_gametime()))
  1378. {
  1379. cmd_simon(random_num(1, g_MaxClients))
  1380. }
  1381.  
  1382. n = 0
  1383. formatex(wanted, charsmax(wanted), "%L", LANG_SERVER, "JBE_PRISONER_WANTED")
  1384. n = strlen(wanted)
  1385. for(i = 0; i < g_MaxClients; i++)
  1386. {
  1387. if(get_bit(g_PlayerWanted, i) && is_user_alive(i) && n < charsmax(wanted))
  1388. {
  1389. get_user_name(i, name, charsmax(name))
  1390. n += copy(wanted[n], charsmax(wanted) - n, "^n^t")
  1391. n += copy(wanted[n], charsmax(wanted) - n, name)
  1392. }
  1393. }
  1394.  
  1395. team_count()
  1396. formatex(szStatus, charsmax(szStatus), "%L", LANG_SERVER, "JBE_STATUS", g_TeamAlive[CS_TEAM_T], g_TeamCount[CS_TEAM_T])
  1397. message_begin(MSG_BROADCAST, get_user_msgid("StatusText"), {0,0,0}, 0)
  1398. write_byte(0)
  1399. write_string(szStatus)
  1400. message_end()
  1401.  
  1402. if(g_Simon)
  1403. {
  1404. get_user_name(g_Simon, name, charsmax(name))
  1405. player_hudmessage(0, 2, HUD_DELAY + 1.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_SIMON_FOLLOW", name)
  1406. }
  1407. else if(g_Freeday)
  1408. {
  1409. player_hudmessage(0, 2, HUD_DELAY + 1.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_STATUS_FREEDAY")
  1410. }
  1411.  
  1412. if(g_PlayerWanted)
  1413. player_hudmessage(0, 3, HUD_DELAY + 1.0, {255, 25, 50}, "%s", wanted)
  1414. else if(g_PlayerRevolt)
  1415. player_hudmessage(0, 3, HUD_DELAY + 1.0, {255, 25, 50}, "%L", LANG_SERVER, "JBE_PRISONER_REVOLT")
  1416.  
  1417. player_hudmessage(0, 5, HUD_DELAY + 1.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_STATUS_DAY", g_JailDay)
  1418.  
  1419. gc_TalkMode = get_pcvar_num(gp_TalkMode)
  1420. gc_VoiceBlock = get_pcvar_num(gp_VoiceBlock)
  1421. gc_SimonSteps = get_pcvar_num(gp_SimonSteps)
  1422. gc_ButtonShoot = get_pcvar_num(gp_ButtonShoot)
  1423. gc_CrowbarMul = get_pcvar_float(gp_CrowbarMul)
  1424.  
  1425. }
  1426.  
  1427. public safe_time(task)
  1428. {
  1429. g_SafeTime = 1
  1430. }
  1431.  
  1432. public check_freeday(task)
  1433. {
  1434. static Float:roundmax, i
  1435. if(!g_Simon && !g_PlayerLast)
  1436. {
  1437. g_Freeday = 1
  1438. hud_status(0)
  1439. roundmax = get_pcvar_float(gp_RoundMax)
  1440. if(roundmax > 0.0)
  1441. {
  1442. for(i = 1; i <= g_MaxClients; i++)
  1443. {
  1444. if(is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_T)
  1445. freeday_set(0, i)
  1446. }
  1447. emit_sound(0, CHAN_AUTO, "jbextreme/brass_bell_C.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  1448. player_hudmessage(0, 8, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_STATUS_ENDTIMER", floatround(roundmax - 60.0))
  1449. remove_task(TASK_ROUND)
  1450. set_task(roundmax - 60.0, "check_end", TASK_ROUND)
  1451. }
  1452. }
  1453.  
  1454. if(get_pcvar_num(gp_AutoOpen))
  1455. jail_open()
  1456. }
  1457.  
  1458. public freeday_end(task)
  1459. {
  1460. if(g_Freeday || g_PlayerFreeday)
  1461. {
  1462. emit_sound(0, CHAN_AUTO, "jbextreme/brass_bell_C.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  1463. player_hudmessage(0, 8, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_STATUS_ENDFREEDAY")
  1464. }
  1465. }
  1466.  
  1467. public check_end(task)
  1468. {
  1469. team_count()
  1470. for(new i = 1; i <= g_MaxClients; i++)
  1471. {
  1472. if(g_PlayerTeam[i] == CS_TEAM_T && is_user_alive(i))
  1473. {
  1474. user_silentkill(i)
  1475. cs_set_user_deaths(i, get_user_deaths(i) - 1)
  1476. }
  1477. }
  1478. for(new i = 1; i <= g_MaxClients; i++)
  1479. {
  1480. if(g_PlayerTeam[i] == CS_TEAM_CT && is_user_alive(i))
  1481. {
  1482. user_silentkill(i)
  1483. cs_set_user_deaths(i, get_user_deaths(i) - 1)
  1484. }
  1485. }
  1486. player_hudmessage(0, 6, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_STATUS_ROUNDEND")
  1487. }
  1488.  
  1489. public prisoner_last(id)
  1490. {
  1491. static name[32], Float:roundmax
  1492. if(is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_T)
  1493. {
  1494. roundmax = get_pcvar_float(gp_RoundMax)
  1495. get_user_name(id, name, charsmax(name))
  1496. g_PlayerLast = id
  1497. player_hudmessage(0, 6, 5.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_PRISONER_LAST", name)
  1498. remove_task(TASK_ROUND)
  1499. if(roundmax > 0.0)
  1500. {
  1501. player_hudmessage(0, 8, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_STATUS_ENDTIMER", floatround(roundmax - 60.0))
  1502. set_task(roundmax - 60.0, "check_end", TASK_ROUND)
  1503. }
  1504. if((g_TeamAlive[CS_TEAM_CT] > 0) && get_pcvar_num(gp_AutoLastresquest))
  1505. cmd_lastrequest(id)
  1506. }
  1507. }
  1508.  
  1509. public freeday_select(id, menu, item)
  1510. {
  1511. if(item == MENU_EXIT)
  1512. {
  1513. menu_destroy(menu)
  1514. return PLUGIN_HANDLED
  1515. }
  1516.  
  1517. static dst[32], data[5], player, access, callback
  1518.  
  1519. menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
  1520. player = str_to_num(data)
  1521. freeday_set(id, player)
  1522. return PLUGIN_HANDLED
  1523. }
  1524.  
  1525. public duel_knives(id, menu, item)
  1526. {
  1527. if(item == MENU_EXIT)
  1528. {
  1529. menu_destroy(menu)
  1530. g_LastDenied = 0
  1531. return PLUGIN_HANDLED
  1532. }
  1533.  
  1534. static dst[32], data[5], access, callback, option[128], player, src[32]
  1535.  
  1536. menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
  1537. get_user_name(id, src, charsmax(src))
  1538. player = str_to_num(data)
  1539. formatex(option, charsmax(option), "%L^n%L", LANG_SERVER, "JBE_MENU_LASTREQ_SEL3", src, LANG_SERVER, "JBE_MENU_DUEL_SEL", src, dst)
  1540. player_hudmessage(0, 6, 3.0, {0, 255, 0}, option)
  1541.  
  1542. g_DuelA = id
  1543. clear_bit(g_PlayerCrowbar, id)
  1544. player_strip_weapons(id)
  1545. player_glow(id, g_Colors[3])
  1546. set_user_health(id, 100)
  1547.  
  1548. g_DuelB = player
  1549. player_strip_weapons(player)
  1550. player_glow(player, g_Colors[2])
  1551. set_user_health(player, 100)
  1552. g_BlockWeapons = 1
  1553. return PLUGIN_HANDLED
  1554. }
  1555.  
  1556. public duel_guns(id, menu, item)
  1557. {
  1558. if(item == MENU_EXIT)
  1559. {
  1560. menu_destroy(menu)
  1561. g_LastDenied = 0
  1562. g_Duel = 0
  1563. return PLUGIN_HANDLED
  1564. }
  1565.  
  1566. static gun, dst[32], data[5], access, callback, option[128], player, src[32]
  1567.  
  1568. menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
  1569. get_user_name(id, src, charsmax(src))
  1570. player = str_to_num(data)
  1571. formatex(option, charsmax(option), "%L^n%L", LANG_SERVER, _Duel[g_Duel - 4][_sel], src, LANG_SERVER, "JBE_MENU_DUEL_SEL", src, dst)
  1572. emit_sound(0, CHAN_AUTO, "jbextreme/nm_goodbadugly.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  1573. player_hudmessage(0, 6, 3.0, {0, 255, 0}, option)
  1574.  
  1575. g_DuelA = id
  1576. clear_bit(g_PlayerCrowbar, id)
  1577. player_strip_weapons(id)
  1578. gun = give_item(id, _Duel[g_Duel - 4][_entname])
  1579. cs_set_weapon_ammo(gun, 1)
  1580. set_user_health(id, 100)
  1581. player_glow(id, g_Colors[3])
  1582.  
  1583. g_DuelB = player
  1584. player_strip_weapons(player)
  1585. gun = give_item(player, _Duel[g_Duel - 4][_entname])
  1586. cs_set_weapon_ammo(gun, 1)
  1587. set_user_health(player, 100)
  1588. player_glow(player, g_Colors[2])
  1589.  
  1590. g_BlockWeapons = 1
  1591. return PLUGIN_HANDLED
  1592. }
  1593.  
  1594. public freeday_choice(id, menu, item)
  1595. {
  1596. if(item == MENU_EXIT)
  1597. {
  1598. menu_destroy(menu)
  1599. return PLUGIN_HANDLED
  1600. }
  1601.  
  1602. static dst[32], data[5], access, callback
  1603.  
  1604. menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
  1605. menu_destroy(menu)
  1606. get_user_name(id, dst, charsmax(dst))
  1607. switch(data[0])
  1608. {
  1609. case('1'):
  1610. {
  1611. cmd_freeday_player(id)
  1612. }
  1613. case('2'):
  1614. {
  1615. if((id == g_Simon) || is_user_admin(id))
  1616. {
  1617. g_Simon = 0
  1618. get_user_name(id, dst, charsmax(dst))
  1619. client_print(0, print_console, "%s gives freeday for everyone", dst)
  1620. server_print("JBE Client %i gives freeday for everyone", id)
  1621. check_freeday(TASK_FREEDAY)
  1622. }
  1623. }
  1624. }
  1625. return PLUGIN_HANDLED
  1626. }
  1627.  
  1628. public lastrequest_select(id, menu, item)
  1629. {
  1630. if(item == MENU_EXIT)
  1631. {
  1632. menu_destroy(menu)
  1633. return PLUGIN_HANDLED
  1634. }
  1635.  
  1636. static i, dst[32], data[5], access, callback, option[64]
  1637.  
  1638. menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)
  1639. get_user_name(id, dst, charsmax(dst))
  1640. switch(data[0])
  1641. {
  1642. case('1'):
  1643. {
  1644. formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_LASTREQ_SEL1", dst)
  1645. player_hudmessage(0, 6, 3.0, {0, 255, 0}, option)
  1646. set_bit(g_FreedayAuto, id)
  1647. user_silentkill(id)
  1648. }
  1649. case('2'):
  1650. {
  1651. formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_LASTREQ_SEL2", dst)
  1652. player_hudmessage(0, 6, 3.0, {0, 255, 0}, option)
  1653. g_Duel = 2
  1654. player_strip_weapons_all()
  1655. i = random_num(0, sizeof(_WeaponsFree) - 1)
  1656. give_item(id, _WeaponsFree[i])
  1657. g_BlockWeapons = 1
  1658. cs_set_user_bpammo(id, _WeaponsFreeCSW[i], _WeaponsFreeAmmo[i])
  1659. }
  1660. case('3'):
  1661. {
  1662. g_Duel = 3
  1663. menu_players(id, CS_TEAM_CT, 0, 1, "duel_knives", "%L", LANG_SERVER, "JBE_MENU_DUEL")
  1664. }
  1665. default:
  1666. {
  1667. g_Duel = str_to_num(data)
  1668. menu_players(id, CS_TEAM_CT, 0, 1, "duel_guns", "%L", LANG_SERVER, "JBE_MENU_DUEL")
  1669. }
  1670. }
  1671. g_LastDenied = 1
  1672. menu_destroy(menu)
  1673. return PLUGIN_HANDLED
  1674. }
  1675.  
  1676. public setup_buttons()
  1677. {
  1678. new ent[3]
  1679. new Float:origin[3]
  1680. new info[32]
  1681. new pos
  1682.  
  1683. while((pos <= sizeof(g_Buttons)) && (ent[0] = engfunc(EngFunc_FindEntityByString, ent[0], "classname", "info_player_deathmatch")))
  1684. {
  1685. pev(ent[0], pev_origin, origin)
  1686. while((ent[1] = engfunc(EngFunc_FindEntityInSphere, ent[1], origin, CELL_RADIUS)))
  1687. {
  1688. if(!is_valid_ent(ent[1]))
  1689. continue
  1690.  
  1691. entity_get_string(ent[1], EV_SZ_classname, info, charsmax(info))
  1692. if(!equal(info, "func_door"))
  1693. continue
  1694.  
  1695. entity_get_string(ent[1], EV_SZ_targetname, info, charsmax(info))
  1696. if(!info[0])
  1697. continue
  1698.  
  1699. if(TrieKeyExists(g_CellManagers, info))
  1700. {
  1701. TrieGetCell(g_CellManagers, info, ent[2])
  1702. }
  1703. else
  1704. {
  1705. ent[2] = engfunc(EngFunc_FindEntityByString, 0, "target", info)
  1706. }
  1707.  
  1708. if(is_valid_ent(ent[2]) && (in_array(ent[2], g_Buttons, sizeof(g_Buttons)) < 0))
  1709. {
  1710. g_Buttons[pos] = ent[2]
  1711. pos++
  1712. break
  1713. }
  1714. }
  1715. }
  1716. TrieDestroy(g_CellManagers)
  1717. }
  1718.  
  1719. stock in_array(needle, data[], size)
  1720. {
  1721. for(new i = 0; i < size; i++)
  1722. {
  1723. if(data[i] == needle)
  1724. return i
  1725. }
  1726. return -1
  1727. }
  1728.  
  1729. stock freeday_set(id, player)
  1730. {
  1731. static src[32], dst[32]
  1732. get_user_name(player, dst, charsmax(dst))
  1733.  
  1734. if(is_user_alive(player) && !get_bit(g_PlayerWanted, player))
  1735. {
  1736. set_bit(g_PlayerFreeday, player)
  1737. entity_set_int(player, EV_INT_skin, 3)
  1738. if(get_pcvar_num(gp_GlowModels))
  1739. player_glow(player, g_Colors[1])
  1740.  
  1741. if(0 < id <= g_MaxClients)
  1742. {
  1743. get_user_name(id, src, charsmax(src))
  1744. player_hudmessage(0, 6, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_GUARD_FREEDAYGIVE", src, dst)
  1745. }
  1746. else if(!is_freeday())
  1747. {
  1748. player_hudmessage(0, 6, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_PRISONER_HASFREEDAY", dst)
  1749. }
  1750. }
  1751. }
  1752.  
  1753. stock first_join(id)
  1754. {
  1755. if(!get_bit(g_PlayerJoin, id))
  1756. {
  1757. set_bit(g_PlayerJoin, id)
  1758. clear_bit(g_PlayerHelp, id)
  1759. set_task(5.0, "cmd_help", TASK_HELP + id)
  1760. }
  1761. }
  1762.  
  1763. stock ctcount_allowed()
  1764. {
  1765. static count
  1766. count = ((g_TeamCount[CS_TEAM_T] + g_TeamCount[CS_TEAM_CT]) / get_pcvar_num(gp_TeamRatio))
  1767. if(count < 2)
  1768. count = 2
  1769. else if(count > get_pcvar_num(gp_CtMax))
  1770. count = get_pcvar_num(gp_CtMax)
  1771.  
  1772. return count
  1773. }
  1774.  
  1775. stock player_hudmessage(id, hudid, Float:time = 0.0, color[3] = {0, 255, 0}, msg[], any:...)
  1776. {
  1777. static text[512], Float:x, Float:y
  1778. x = g_HudSync[hudid][_x]
  1779. y = g_HudSync[hudid][_y]
  1780.  
  1781. if(time > 0)
  1782. set_hudmessage(color[0], color[1], color[2], x, y, 0, 0.00, time, 0.00, 0.00)
  1783. else
  1784. set_hudmessage(color[0], color[1], color[2], x, y, 0, 0.00, g_HudSync[hudid][_time], 0.00, 0.00)
  1785.  
  1786. vformat(text, charsmax(text), msg, 6)
  1787. ShowSyncHudMsg(id, g_HudSync[hudid][_hudsync], text)
  1788. }
  1789.  
  1790. stock menu_players(id, CsTeams:team, skip, alive, callback[], title[], any:...)
  1791. {
  1792. static i, name[32], num[5], menu, menuname[32]
  1793. vformat(menuname, charsmax(menuname), title, 7)
  1794. menu = menu_create(menuname, callback)
  1795. for(i = 1; i <= g_MaxClients; i++)
  1796. {
  1797. if(!is_user_connected(i) || (alive && !is_user_alive(i)) || (skip == i))
  1798. continue
  1799.  
  1800. if(!(team == CS_TEAM_T || team == CS_TEAM_CT) || ((team == CS_TEAM_T || team == CS_TEAM_CT) && (cs_get_user_team(i) == team)))
  1801. {
  1802. get_user_name(i, name, charsmax(name))
  1803. num_to_str(i, num, charsmax(num))
  1804. menu_additem(menu, name, num, 0)
  1805. }
  1806. }
  1807. menu_display(id, menu)
  1808. }
  1809.  
  1810. stock player_glow(id, color[3], amount=40)
  1811. {
  1812. set_user_rendering(id, kRenderFxGlowShell, color[0], color[1], color[2], kRenderNormal, amount)
  1813. }
  1814.  
  1815. stock player_strip_weapons(id)
  1816. {
  1817. strip_user_weapons(id)
  1818. give_item(id, "weapon_knife")
  1819. set_pdata_int(id, m_iPrimaryWeapon, 0)
  1820. }
  1821.  
  1822. stock player_strip_weapons_all()
  1823. {
  1824. for(new i = 1; i <= g_MaxClients; i++)
  1825. {
  1826. if(is_user_alive(i))
  1827. {
  1828. player_strip_weapons(i)
  1829. }
  1830. }
  1831. }
  1832.  
  1833. stock is_freeday()
  1834. {
  1835. return (g_FreedayNext || g_Freeday || (g_JailDay == 1))
  1836. }
  1837.  
  1838. public jail_open()
  1839. {
  1840. static i
  1841. for(i = 0; i < sizeof(g_Buttons); i++)
  1842. {
  1843. if(g_Buttons[i])
  1844. {
  1845. ExecuteHamB(Ham_Use, g_Buttons[i], 0, 0, 1, 1.0)
  1846. entity_set_float(g_Buttons[i], EV_FL_frame, 0.0)
  1847. }
  1848. }
  1849. }
  1850.  
  1851. public LR_MathsChallenge()
  1852. {
  1853. g_MathQuestion[ _iNum ][ 0 ] = random_num( 50, 100 );
  1854. g_MathQuestion[ _iNum ][ 1 ] = random_num( 1, 50 );
  1855. g_MathQuestion[ _bAdd ] = random_num( 0, 1 ) ? true : false;
  1856. g_MathQuestion[ _iAnswer ] = g_MathQuestion[ _bAdd ] ? g_MathQuestion[ _iNum ][ 0 ] + g_MathQuestion[ _iNum ][ 1 ] : g_MathQuestion[ _iNum ][ 0 ] - g_MathQuestion[ _iNum ][ 1 ];
  1857.  
  1858. formatex( g_MathQuestion[ _szQuestion ], charsmax( g_MathQuestion[ _szQuestion ] ), "%i %s %i = ?", g_MathQuestion[ _iNum ][ 0 ], g_MathQuestion[ _bAdd ] ? "+" : "-", g_MathQuestion[ _iNum ][ 1 ] );
  1859.  
  1860. _iMsgSayText = register_message( g_iMsgSayText, "Message_SayText" );
  1861. }
Advertisement
Add Comment
Please, Sign In to add comment