hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.06.05. 22:19



Jelenlévő felhasználók

Jelenleg 246 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 246 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  [ 4 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: JailBreak új párbaj
HozzászólásElküldve: 2013.11.12. 18:58 
Offline
Jómunkásember
Avatar

Csatlakozott: 2013.10.27. 23:13
Hozzászólások: 412
Megköszönt másnak: 21 alkalommal
Megköszönték neki: 68 alkalommal
Hogyan írhatnék ebbe bele egy új párbajt pl: egy AK47-es párbajt (jailbreak utolsó kívánság menübe)

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

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: JailBreak új párbaj
HozzászólásElküldve: 2013.11.13. 13:41 
Offline
Developer
Avatar

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

_________________
http://www.easyrankup.eu


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: JailBreak új párbaj
HozzászólásElküldve: 2013.11.13. 15:45 
Offline
Jómunkásember
Avatar

Csatlakozott: 2013.10.27. 23:13
Hozzászólások: 412
Megköszönt másnak: 21 alkalommal
Megköszönték neki: 68 alkalommal
Kiki hogyan sikerült ezt belerakni mert "Done".
De én meg ha belerakom ezt akkor 1error

SMA Forráskód: [ Mindet kijelol ]
  1. { "M249", CSW_M249, "weapon_m249", "JBE_MENU_LASTREQ_OPT9", "JBE_MENU_LASTREQ_SEL9" }


hova írtad be máshova? vagy hogyan? :yahoo: :thumbsup:

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: JailBreak új párbaj
HozzászólásElküldve: 2013.11.13. 15:55 
Offline
Fanatikus
Avatar

Csatlakozott: 2013.07.27. 12:36
Hozzászólások: 183
Megköszönt másnak: 23 alkalommal
Megköszönték neki: 25 alkalommal
Szerintem csak oda fentre kell.

De legyen utána vessző, a sor után, kivéve az utolsónál.


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  [ 4 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 16 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