hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.04.20. 00:45



Jelenlévő felhasználók

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

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

Regisztrált felhasználók: nincs regisztrált felhasználó 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
HozzászólásElküldve: 2013.12.31. 14:40 
Offline
Félisten

Csatlakozott: 2012.06.19. 15:12
Hozzászólások: 926
Megköszönt másnak: 109 alkalommal
Megköszönték neki: 31 alkalommal
Ebbe a jail pluginba valaki bele írná hogy
-az fd-s nek is jöjjön elő az utolsó kívánság menü

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

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: JailBreak
HozzászólásElküldve: 2013.12.31. 17:13 
Offline
Tud valamit

Csatlakozott: 2012.04.16. 22:32
Hozzászólások: 104
Megköszönt másnak: 14 alkalommal
Megköszönték neki: 10 alkalommal
Tessék:D Teszteltem, nekem működött.


Csatolmányok:
jb_extreme_fd_lr.sma [51 KiB]
Letöltve 82 alkalommal.

_________________
Ha segítettem: Kép

Kép

Ők köszönték meg White#Angel nek ezt a hozzászólást: Tomos (2013.12.31. 18:50)
  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