hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.04.24. 04:42



Jelenlévő felhasználók

Jelenleg 160 felhasználó van jelen :: 1 regisztrált, 0 rejtett és 159 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: Bing [Bot] az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 2 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: JailBreak Mod
HozzászólásElküldve: 2013.06.17. 23:21 
Offline
Fanatikus

Csatlakozott: 2013.02.10. 16:48
Hozzászólások: 198
Megköszönt másnak: 113 alkalommal
Helló ebe a modba bele irtam ezt:
SMA Forráskód: [ Mindet kijelol ]
  1. "JBE_PRISONER_REASON_7",
  2. "JBE_PRISONER_REASON_8",
  3. "JBE_PRISONER_REASON_9",
  4. "JBE_PRISONER_REASON_10",

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

_________________
-----------------------------------------------------------------------------------------------------------
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: JailBreak Mod
HozzászólásElküldve: 2013.06.17. 23:25 
Offline
Beavatott
Avatar

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


Javítva, a "JBE_PRISONER_REASON_10" után nem kell "," :)

_________________
Kép

Ők köszönték meg barcasl3 nek ezt a hozzászólást: csmester (2013.06.17. 23:37)
  Népszerűség: 2.27%


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 2 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 8 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole