Русское сообщество по скриптингу

Помогите jailbreak дать голос зеку подправте

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Помогите jailbreak дать голос зеку подправте

Сообщение Pasha » 24 дек 2012, 22:41

[pawn]
  1. /*

  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("fd", "cmd_freeday")

  277.         register_clcmd("freeday", "cmd_freeday")

  278.         register_clcmd("day", "cmd_freeday")

  279.         register_clcmd("lr", "cmd_lastrequest")

  280.         register_clcmd("lastrequest", "cmd_lastrequest")

  281.         register_clcmd("duel", "cmd_lastrequest")

  282.         register_clcmd("simon", "cmd_simon")

  283.         register_clcmd("open", "cmd_open")

  284.         register_clcmd("nomic", "cmd_nomic")

  285.         register_clcmd("box", "cmd_box")

  286.         register_clcmd("help", "cmd_help")

  287.         register_clcmd("golos", "cmd_golos")

  288.  

  289.         register_clcmd("jbe_freeday", "adm_freeday", ADMIN_KICK)

  290.         register_concmd("jbe_nomic", "adm_nomic", ADMIN_KICK)

  291.         register_concmd("jbe_open", "adm_open", ADMIN_KICK)

  292.         register_concmd("jbe_box", "adm_box", ADMIN_KICK)

  293.  

  294.         gp_GlowModels = register_cvar("jbe_glowmodels", "0")

  295.         gp_SimonSteps = register_cvar("jbe_simonsteps", "1")

  296.         gp_CrowbarMul = register_cvar("jbe_crowbarmultiplier", "25.0")

  297.         gp_CrowbarMax = register_cvar("jbe_maxcrowbar", "1")

  298.         gp_TeamRatio = register_cvar("jbe_teamratio", "3")

  299.         gp_TeamChange = register_cvar("jbe_teamchange", "0") // 0-disable team change for tt / 1-enable team change

  300.         gp_CtMax = register_cvar("jbe_maxct", "6")

  301.         gp_BoxMax = register_cvar("jbe_boxmax", "6")

  302.         gp_RetryTime = register_cvar("jbe_retrytime", "10.0")

  303.         gp_RoundMax = register_cvar("jbe_freedayround", "240.0")

  304.         gp_AutoLastresquest = register_cvar("jbe_autolastrequest", "1")

  305.         gp_LastRequest = register_cvar("jbe_lastrequest", "1")

  306.         gp_Motd = register_cvar("jbe_motd", "1")

  307.         gp_SpectRounds = register_cvar("jbe_spectrounds", "3")

  308.         gp_NosimonRounds = register_cvar("jbe_nosimonrounds", "7")

  309.         gp_SimonRandom = register_cvar("jbe_randomsimon", "0")

  310.         gp_AutoOpen = register_cvar("jbe_autoopen", "1")

  311.         gp_TalkMode = register_cvar("jbe_talkmode", "2")        // 0-alltak / 1-tt talk / 2-tt no talk

  312.         gp_VoiceBlock = register_cvar("jbe_blockvoice", "2")    // 0-dont block / 1-block voicerecord / 2-block voicerecord except simon

  313.         gp_ButtonShoot = register_cvar("jbe_buttonshoot", "1")  // 0-standard / 1-func_button shoots!

  314.  

  315.         g_MaxClients = get_global_int(GL_maxClients)

  316.  

  317.         for(new i = 0; i < sizeof(g_HudSync); i++)

  318.                 g_HudSync[i][_hudsync] = CreateHudSyncObj()

  319.  

  320.         formatex(g_HelpText, charsmax(g_HelpText), "%L^n^n%L^n^n%L^n^n%L",

  321.                         LANG_SERVER, "JBE_HELP_TITLE",

  322.                         LANG_SERVER, "JBE_HELP_BINDS",

  323.                         LANG_SERVER, "JBE_HELP_GUARD_CMDS",

  324.                         LANG_SERVER, "JBE_HELP_PRISONER_CMDS")

  325.  

  326.         setup_buttons()

  327. }

  328.  

  329. public player_status(id)

  330. {

  331.     static type, player, CsTeams:team, name[32], health

  332.     type = read_data(1)

  333.     player = read_data(2)

  334.     switch(type)

  335.     {

  336.         case(1):

  337.         {

  338.             ClearSyncHud(id, g_HudSync[1][_hudsync])

  339.         }

  340.         case(2):

  341.         {

  342.             team = cs_get_user_team(player)

  343.             if((team != CS_TEAM_T) && (team != CS_TEAM_CT))

  344.                 return PLUGIN_HANDLED

  345.  

  346.             health = get_user_health(player)

  347.             get_user_name(player, name, charsmax(name))

  348.             player_hudmessage(id, 4, 2.0, {0, 255, 0}, "%L", LANG_SERVER,

  349.                 (team == CS_TEAM_T) ? "JBE_PRISONER_STATUS" : "JBE_GUARD_STATUS", name, health)

  350.         }

  351.     }

  352.    

  353.     return PLUGIN_HANDLED

  354. }

  355.  

  356. public cmd_golos(id)

  357. {

  358.     if (g_Simon == id || is_user_admin(id))

  359.     {

  360.         menu_players(id, CS_TEAM_T, 0, 1, "voice_enable_select", "Дать голос зекам")

  361.     }

  362. }

  363.  

  364. public voice_enable_select(id, menu, item)

  365. {

  366.     if(item == MENU_EXIT)

  367.     {

  368.         menu_destroy(menu)

  369.         return PLUGIN_HANDLED

  370.     }

  371.  

  372.     static dst[32], data[5], player, access, callback

  373.  

  374.     menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)

  375.     player = str_to_num(data)

  376.     enable_player_voice(id, player)    

  377.     return PLUGIN_HANDLED

  378. }

  379.  

  380. public enable_player_voice(id, player)

  381. {

  382.     static src[32], dst[32]

  383.     get_user_name(player, dst, charsmax(dst))

  384.  

  385.     if (!get_bit(g_PlayerVoice, player))

  386.     {

  387.         set_bit(g_PlayerVoice, player)

  388.         if(0 < id <= g_MaxClients)

  389.         {

  390.             get_user_name(id, src, charsmax(src))

  391.             player_hudmessage(0, 6, 3.0, {0, 255, 0}, "Вам дали голос!", src, dst)

  392.         }

  393.     }

  394.     else

  395.     {

  396.         clear_bit(g_PlayerVoice, player)

  397.         if(0 < id <= g_MaxClients)

  398.         {

  399.             get_user_name(id, src, charsmax(src))

  400.             player_hudmessage(0, 6, 3.0, {0, 255, 0}, "Вам дали голос!", src, dst)

  401.         }            

  402.     }

  403. }

  404.  

  405. public plugin_precache()

  406. {

  407.         static i

  408.         precache_model("models/player/jbemodel/jbemodel.mdl")

  409.  

  410.         for(i = 0; i < sizeof(_FistModels); i++)

  411.                 precache_model(_FistModels[i])

  412.  

  413.         for(i = 0; i < sizeof(_CrowbarModels); i++)

  414.                 precache_model(_CrowbarModels[i])

  415.  

  416.         for(i = 0; i < sizeof(_FistSounds); i++)

  417.                 precache_sound(_FistSounds[i])

  418.  

  419.         precache_sound("jbextreme/nm_goodbadugly.wav")

  420.         precache_sound("jbextreme/brass_bell_C.wav")

  421.  

  422.         g_CellManagers = TrieCreate()

  423.         gp_PrecacheSpawn = register_forward(FM_Spawn, "precache_spawn", 1)

  424.         gp_PrecacheKeyValue = register_forward(FM_KeyValue, "precache_keyvalue", 1)

  425. }

  426.  

  427. public precache_spawn(ent)

  428. {

  429.         if(is_valid_ent(ent))

  430.         {

  431.                 static szClass[33]

  432.                 entity_get_string(ent, EV_SZ_classname, szClass, sizeof(szClass))

  433.                 for(new i = 0; i < sizeof(_RemoveEntities); i++)

  434.                         if(equal(szClass, _RemoveEntities[i]))

  435.                                 remove_entity(ent)

  436.         }

  437. }

  438.  

  439. public precache_keyvalue(ent, kvd_handle)

  440. {

  441.         static info[32]

  442.         if(!is_valid_ent(ent))

  443.                 return FMRES_IGNORED

  444.  

  445.         get_kvd(kvd_handle, KV_ClassName, info, charsmax(info))

  446.         if(!equal(info, "multi_manager"))

  447.                 return FMRES_IGNORED

  448.  

  449.         get_kvd(kvd_handle, KV_KeyName, info, charsmax(info))

  450.         TrieSetCell(g_CellManagers, info, ent)

  451.         return FMRES_IGNORED

  452. }

  453.  

  454. public client_putinserver(id)

  455. {

  456.         clear_bit(g_PlayerJoin, id)

  457.         clear_bit(g_PlayerHelp, id)

  458.         clear_bit(g_PlayerCrowbar, id)

  459.         clear_bit(g_PlayerNomic, id)

  460.         clear_bit(g_PlayerWanted, id)

  461.         clear_bit(g_SimonTalking, id)

  462.         clear_bit(g_SimonVoice, id)

  463.         g_PlayerSpect[id] = 0

  464.         g_PlayerSimon[id] = 0

  465. }

  466.  

  467. public client_disconnect(id)

  468. {

  469.         if(g_Simon == id)

  470.         {

  471.                 g_Simon = 0

  472.                 ClearSyncHud(0, g_HudSync[2][_hudsync])

  473.                 player_hudmessage(0, 2, 5.0, _, "%L", LANG_SERVER, "JBE_SIMON_HASGONE")

  474.         }

  475.         else if(g_PlayerLast == id || (g_Duel && (id == g_DuelA || id == g_DuelB)))

  476.         {

  477.                 g_Duel = 0

  478.                 g_DuelA = 0

  479.                 g_DuelB = 0

  480.                 g_LastDenied = 0

  481.                 g_BlockWeapons = 0

  482.                 g_PlayerLast = 0

  483.         }

  484.         team_count()

  485. }

  486.  

  487. public client_PostThink(id)

  488. {

  489.         if(id != g_Simon || !gc_SimonSteps || !is_user_alive(id) ||

  490.                 !(entity_get_int(id, EV_INT_flags) & FL_ONGROUND) || entity_get_int(id, EV_ENT_groundentity))

  491.                 return PLUGIN_CONTINUE

  492.        

  493.         static Float:origin[3]

  494.         static Float:last[3]

  495.  

  496.         entity_get_vector(id, EV_VEC_origin, origin)

  497.         if(get_distance_f(origin, last) < 32.0)

  498.         {

  499.                 return PLUGIN_CONTINUE

  500.         }

  501.  

  502.         vec_copy(origin, last)

  503.         if(entity_get_int(id, EV_INT_bInDuck))

  504.                 origin[2] -= 18.0

  505.         else

  506.                 origin[2] -= 36.0

  507.  

  508.  

  509.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY, {0,0,0}, 0)

  510.         write_byte(TE_WORLDDECAL)

  511.         write_coord(floatround(origin[0]))

  512.         write_coord(floatround(origin[1]))

  513.         write_coord(floatround(origin[2]))

  514.         write_byte(105)

  515.         message_end()

  516.  

  517.         return PLUGIN_CONTINUE

  518. }

  519.  

  520.  

  521. public msg_statustext(msgid, dest, id)

  522. {

  523.         return PLUGIN_HANDLED

  524. }

  525.  

  526. public msg_statusicon(msgid, dest, id)

  527. {

  528.         static icon[5]

  529.         get_msg_arg_string(2, icon, charsmax(icon))

  530.         if(icon[0] == 'b' && icon[2] == 'y' && icon[3] == 'z')

  531.         {

  532.                 set_pdata_int(id, 235, get_pdata_int(id, 235) & ~(1<<0))

  533.                 return PLUGIN_HANDLED

  534.         }

  535.  

  536.         return PLUGIN_CONTINUE

  537. }

  538.  

  539. public msg_vguimenu(msgid, dest, id)

  540. {

  541.         static msgarg1

  542.         static CsTeams:team

  543.  

  544.         msgarg1 = get_msg_arg_int(1)

  545.         if(msgarg1 == 2)

  546.         {

  547.                 team = cs_get_user_team(id)

  548.                 if((team == CS_TEAM_T) && !is_user_admin(id) && (is_user_alive(id) || !get_pcvar_num(gp_TeamChange)))

  549.                 {

  550.                         client_print(id, print_center, "%L", LANG_SERVER, "JBE_TEAM_CANTCHANGE")

  551.                         return PLUGIN_HANDLED

  552.                 }

  553.                 show_menu(id, 51, TEAM_MENU, -1)

  554.                 return PLUGIN_HANDLED

  555.         }

  556.  

  557.         return PLUGIN_CONTINUE

  558. }

  559.  

  560. public msg_showmenu(msgid, dest, id)

  561. {

  562.         static msgarg1, roundloop

  563.         static CsTeams:team

  564.         msgarg1 = get_msg_arg_int(1)

  565.  

  566.         if(msgarg1 != 531 && msgarg1 != 563)

  567.                 return PLUGIN_CONTINUE

  568.  

  569.         roundloop = floatround(get_pcvar_float(gp_RetryTime) / 2)

  570.         team = cs_get_user_team(id)

  571.  

  572.         if(team == CS_TEAM_T)

  573.         {

  574.                 if(!is_user_admin(id) && (is_user_alive(id) || (g_RoundStarted >= roundloop) || !get_pcvar_num(gp_TeamChange)))

  575.                 {

  576.                         client_print(id, print_center, "%L", LANG_SERVER, "JBE_TEAM_CANTCHANGE")

  577.                         return PLUGIN_HANDLED

  578.                 }

  579.                 else

  580.                 {

  581.                         show_menu(id, 51, TEAM_MENU, -1)

  582.                         return PLUGIN_HANDLED

  583.                 }

  584.         }

  585.         else

  586.         {

  587.                 show_menu(id, 51, TEAM_MENU, -1)

  588.                 return PLUGIN_HANDLED

  589.         }

  590.  

  591.         return PLUGIN_CONTINUE

  592. }

  593.  

  594. public msg_motd(msgid, dest, id)

  595. {

  596.         if(get_pcvar_num(gp_Motd))

  597.                 return PLUGIN_HANDLED

  598.  

  599.         return PLUGIN_CONTINUE

  600. }

  601.  

  602. public msg_clcorpse(msgid, dest, id)

  603. {

  604.         return PLUGIN_HANDLED

  605. }

  606.  

  607. public current_weapon(id)

  608. {

  609.         if(!is_user_alive(id))

  610.                 return PLUGIN_CONTINUE

  611.  

  612.         if(get_bit(g_PlayerCrowbar, id))

  613.         {

  614.                 set_pev(id, pev_viewmodel2, _CrowbarModels[1])

  615.                 set_pev(id, pev_weaponmodel2, _CrowbarModels[0])

  616.         }

  617.         else

  618.         {

  619.                 set_pev(id, pev_viewmodel2, _FistModels[1])

  620.                 set_pev(id, pev_weaponmodel2, _FistModels[0])

  621.         }

  622.         return PLUGIN_CONTINUE

  623. }

  624.  

  625. public player_status(id)

  626. {

  627.         static type, player, CsTeams:team, name[32], health

  628.         type = read_data(1)

  629.         player = read_data(2)

  630.         switch(type)

  631.         {

  632.                 case(1):

  633.                 {

  634.                         ClearSyncHud(id, g_HudSync[1][_hudsync])

  635.                 }

  636.                 case(2):

  637.                 {

  638.                         team = cs_get_user_team(player)

  639.                         if((team != CS_TEAM_T) && (team != CS_TEAM_CT))

  640.                                 return PLUGIN_HANDLED

  641.  

  642.                         health = get_user_health(player)

  643.                         get_user_name(player, name, charsmax(name))

  644.                         player_hudmessage(id, 4, 2.0, {0, 255, 0}, "%L", LANG_SERVER,

  645.                                 (team == CS_TEAM_T) ? "JBE_PRISONER_STATUS" : "JBE_GUARD_STATUS", name, health)

  646.                 }

  647.         }

  648.        

  649.         return PLUGIN_HANDLED

  650. }

  651.  

  652. public impulse_100(id)

  653. {

  654.         if(cs_get_user_team(id) == CS_TEAM_T)

  655.                 return PLUGIN_HANDLED

  656.  

  657.         return PLUGIN_CONTINUE

  658. }

  659.  

  660. public player_spawn(id)

  661. {

  662.         static CsTeams:team

  663.  

  664.         if(!is_user_connected(id))

  665.                 return HAM_IGNORED

  666.  

  667.         set_pdata_float(id, m_fNextHudTextArgsGameTime, get_gametime() + 999999.0)

  668.         player_strip_weapons(id)

  669.         if(g_RoundEnd)

  670.         {

  671.                 g_RoundEnd = 0

  672.                 g_JailDay++

  673.         }

  674.  

  675.         set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)

  676.  

  677.         clear_bit(g_PlayerCrowbar, id)

  678.         clear_bit(g_PlayerWanted, id)

  679.         team = cs_get_user_team(id)

  680.  

  681.         switch(team)

  682.         {

  683.                 case(CS_TEAM_T):

  684.                 {

  685.                         g_PlayerLast = 0

  686.                         if(!g_PlayerReason[id])

  687.                                 g_PlayerReason[id] = random_num(1, 6)

  688.  

  689.                         player_hudmessage(id, 0, 5.0, {255, 0, 255}, "%L %L", LANG_SERVER, "JBE_PRISONER_REASON",

  690.                                 LANG_SERVER, g_Reasons[g_PlayerReason[id]])

  691.  

  692.                         set_user_info(id, "model", "jbemodel")

  693.                         entity_set_int(id, EV_INT_body, 2)

  694.                         if(is_freeday() || get_bit(g_FreedayAuto, id))

  695.                         {

  696.                                 freeday_set(0, id)

  697.                                 clear_bit(g_FreedayAuto, id)

  698.                         }

  699.                         else

  700.                         {

  701.                                 entity_set_int(id, EV_INT_skin, random_num(0, 2))

  702.                         }

  703.  

  704.                         if(g_CrowbarCount < get_pcvar_num(gp_CrowbarMax))

  705.                         {

  706.                                 if(random_num(0, g_MaxClients) > (g_MaxClients / 2))

  707.                                 {

  708.                                         g_CrowbarCount++

  709.                                         set_bit(g_PlayerCrowbar, id)

  710.                                 }

  711.                         }

  712.                         cs_set_user_armor(id, 0, CS_ARMOR_NONE)

  713.                 }

  714.                 case(CS_TEAM_CT):

  715.                 {

  716.                         g_PlayerSimon[id]++

  717.                         set_user_info(id, "model", "jbemodel")

  718.                         entity_set_int(id, EV_INT_body, 3)

  719.                         cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM)

  720.                 }

  721.         }

  722.         first_join(id)

  723.         return HAM_IGNORED

  724. }

  725.  

  726. public player_damage(victim, ent, attacker, Float:damage, bits)

  727. {

  728.         if(!is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker)

  729.                 return HAM_IGNORED

  730.  

  731.         switch(g_Duel)

  732.         {

  733.                 case(0):

  734.                 {

  735.                         if(attacker == ent && get_user_weapon(attacker) == CSW_KNIFE && get_bit(g_PlayerCrowbar, attacker) && cs_get_user_team(victim) != CS_TEAM_T)

  736.                         {

  737.                                 SetHamParamFloat(4, damage * gc_CrowbarMul)

  738.                                 return HAM_OVERRIDE

  739.                         }

  740.                 }

  741.                 case(2):

  742.                 {

  743.                         if(attacker != g_PlayerLast)

  744.                                 return HAM_SUPERCEDE

  745.                 }

  746.                 default:

  747.                 {

  748.                         if((victim == g_DuelA && attacker == g_DuelB) || (victim == g_DuelB && attacker == g_DuelA))

  749.                                 return HAM_IGNORED

  750.        

  751.                         return HAM_SUPERCEDE

  752.                 }

  753.         }

  754.  

  755.         return HAM_IGNORED

  756. }

  757.  

  758. public player_attack(victim, attacker, Float:damage, Float:direction[3], tracehandle, damagebits)

  759. {

  760.         static CsTeams:vteam, CsTeams:ateam

  761.         if(!is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker)

  762.                 return HAM_IGNORED

  763.  

  764.         vteam = cs_get_user_team(victim)

  765.         ateam = cs_get_user_team(attacker)

  766.  

  767.         if(ateam == CS_TEAM_CT && vteam == CS_TEAM_CT)

  768.                 return HAM_SUPERCEDE

  769.  

  770.         switch(g_Duel)

  771.         {

  772.                 case(0):

  773.                 {

  774.                         if(ateam == CS_TEAM_CT && vteam == CS_TEAM_T)

  775.                         {

  776.                                 if(get_bit(g_PlayerRevolt, victim))

  777.                                 {

  778.                                         clear_bit(g_PlayerRevolt, victim)

  779.                                         hud_status(0)

  780.                                 }

  781.                                 return HAM_IGNORED

  782.                         }

  783.                 }

  784.                 case(2):

  785.                 {

  786.                         if(attacker != g_PlayerLast)

  787.                                 return HAM_SUPERCEDE

  788.                 }

  789.                 default:

  790.                 {

  791.                         if((victim == g_DuelA && attacker == g_DuelB) || (victim == g_DuelB && attacker == g_DuelA))

  792.                                 return HAM_IGNORED

  793.  

  794.                         return HAM_SUPERCEDE

  795.                 }

  796.         }

  797.  

  798.         if(ateam == CS_TEAM_T && vteam == CS_TEAM_T && !g_BoxStarted)

  799.                 return HAM_SUPERCEDE

  800.  

  801.         if(ateam == CS_TEAM_T && vteam == CS_TEAM_CT)

  802.         {

  803.                 if(!g_PlayerRevolt)

  804.                         revolt_start()

  805.  

  806.                 set_bit(g_PlayerRevolt, attacker)

  807.         }

  808.  

  809.         return HAM_IGNORED

  810. }

  811.  

  812. public button_attack(button, id, Float:damage, Float:direction[3], tracehandle, damagebits)

  813. {

  814.         if(is_valid_ent(button) && gc_ButtonShoot)

  815.         {

  816.                 ExecuteHamB(Ham_Use, button, id, 0, 2, 1.0)

  817.                 entity_set_float(button, EV_FL_frame, 0.0)

  818.         }

  819.  

  820.         return HAM_IGNORED

  821. }

  822.  

  823. public player_killed(victim, attacker, shouldgib)

  824. {

  825.         static CsTeams:vteam, CsTeams:kteam

  826.         if(!(0 < attacker <= g_MaxClients) || !is_user_connected(attacker))

  827.                 kteam = CS_TEAM_UNASSIGNED

  828.         else

  829.                 kteam = cs_get_user_team(attacker)

  830.  

  831.         vteam = cs_get_user_team(victim)

  832.         if(g_Simon == victim)

  833.         {

  834.                 g_Simon = 0

  835.                 ClearSyncHud(0, g_HudSync[2][_hudsync])

  836.                 player_hudmessage(0, 2, 5.0, _, "%L", LANG_SERVER, "JBE_SIMON_KILLED")

  837.         }

  838.  

  839.         switch(g_Duel)

  840.         {

  841.                 case(0):

  842.                 {

  843.                         switch(vteam)

  844.                         {

  845.                                 case(CS_TEAM_CT):

  846.                                 {

  847.                                         if(kteam == CS_TEAM_T && !get_bit(g_PlayerWanted, attacker))

  848.                                         {

  849.                                                 set_bit(g_PlayerWanted, attacker)

  850.                                                 entity_set_int(attacker, EV_INT_skin, 4)

  851.                                         }

  852.                                 }

  853.                                 case(CS_TEAM_T):

  854.                                 {

  855.                                         clear_bit(g_PlayerRevolt, victim)

  856.                                         clear_bit(g_PlayerWanted, victim)

  857.                                 }

  858.                         }

  859.                 }

  860.                 default:

  861.                 {

  862.                         if(g_Duel != 2 && (attacker == g_DuelA || attacker == g_DuelB))

  863.                         {

  864.                                 set_user_rendering(victim, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)

  865.                                 set_user_rendering(attacker, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)

  866.                                 g_Duel = 0

  867.                                 g_LastDenied = 0

  868.                                 g_BlockWeapons = 0

  869.                                 g_PlayerLast = 0

  870.                                 team_count()

  871.                         }

  872.                 }

  873.         }

  874.         hud_status(0)

  875.         return HAM_IGNORED

  876. }

  877.  

  878. public player_touchweapon(id, ent)

  879. {

  880.         static model[32], class[32]

  881.         if(g_BlockWeapons)

  882.                 return HAM_SUPERCEDE

  883.  

  884.         if(is_valid_ent(id) && g_Duel != 6 && is_user_alive(ent) && cs_get_user_team(ent) == CS_TEAM_CT)

  885.         {

  886.                 entity_get_string(id, EV_SZ_model, model, charsmax(model))

  887.                 if(model[7] == 'w' && model[9] == 'h' && model[10] == 'e' && model[11] == 'g')

  888.                 {

  889.                         entity_get_string(id, EV_SZ_classname, class, charsmax(class))

  890.                         if(equal(class, "weapon_hegrenade"))

  891.                                 remove_entity(id)

  892.  

  893.                         return HAM_SUPERCEDE

  894.                 }

  895.  

  896.         }

  897.  

  898.         return HAM_IGNORED

  899. }

  900.  

  901. public set_client_kv(id, const info[], const key[])

  902. {

  903.         if(equal(key, "model"))

  904.                 return FMRES_SUPERCEDE

  905.  

  906.         return FMRES_IGNORED

  907. }

  908.  

  909. public sound_emit(id, channel, sample[])

  910. {

  911.         if(is_user_alive(id) && equal(sample, "weapons/knife_", 14))

  912.         {

  913.                 switch(sample[17])

  914.                 {

  915.                         case('b'):

  916.                         {

  917.                                 emit_sound(id, CHAN_WEAPON, "weapons/cbar_hitbod2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)

  918.                         }

  919.                         case('w'):

  920.                         {

  921.                                 emit_sound(id, CHAN_WEAPON, "weapons/cbar_hitbod1.wav", 1.0, ATTN_NORM, 0, PITCH_LOW)

  922.                         }

  923.                         case('1', '2'):

  924.                         {

  925.                                 emit_sound(id, CHAN_WEAPON, "weapons/bullet_hit2.wav", random_float(0.5, 1.0), ATTN_NORM, 0, PITCH_NORM)

  926.                         }

  927.                 }

  928.                 return FMRES_SUPERCEDE

  929.         }

  930.         return FMRES_IGNORED

  931. }

  932.  

  933. public voice_listening(receiver, sender, bool:listen)

  934. {

  935.         if((receiver == sender))

  936.                 return FMRES_IGNORED

  937.  

  938.         if(is_user_admin(sender))

  939.         {

  940.                 engfunc(EngFunc_SetClientListening, receiver, sender, true)

  941.                 return FMRES_SUPERCEDE

  942.         }

  943.  

  944.         switch(gc_VoiceBlock)

  945.         {

  946.                 case(2):

  947.                 {

  948.                         if((sender != g_Simon) && (!get_bit(g_SimonVoice, sender) && gc_VoiceBlock))

  949.                         {

  950.                                 engfunc(EngFunc_SetClientListening, receiver, sender, false)

  951.                                 return FMRES_SUPERCEDE

  952.                         }

  953.                 }

  954.                 case(1):

  955.                 {

  956.                         if(!get_bit(g_SimonVoice, sender) && gc_VoiceBlock)

  957.                         {

  958.                                 engfunc(EngFunc_SetClientListening, receiver, sender, false)

  959.                                 return FMRES_SUPERCEDE

  960.                         }

  961.                 }

  962.         }

  963.         if(!is_user_alive(sender))

  964.         {

  965.                 engfunc(EngFunc_SetClientListening, receiver, sender, false)

  966.                 return FMRES_SUPERCEDE

  967.         }

  968.  

  969.         if(sender == g_Simon)

  970.         {

  971.                 engfunc(EngFunc_SetClientListening, receiver, sender, true)

  972.                 return FMRES_SUPERCEDE

  973.         }

  974.  

  975.         listen = true

  976.  

  977.         if(g_SimonTalking && (sender != g_Simon))

  978.         {

  979.                 listen = false

  980.         }

  981.         else

  982.         {

  983.                 static CsTeams:steam

  984.                 steam = cs_get_user_team(sender)

  985.                 switch(gc_TalkMode)

  986.                 {

  987.                         case(2):

  988.                         {

  989.                                 listen = (steam == CS_TEAM_CT)

  990.                         }

  991.                         case(1):

  992.                         {

  993.                                 listen = (steam == CS_TEAM_CT || steam == CS_TEAM_T)

  994.                         }

  995.                 }

  996.         }

  997.  

  998.         engfunc(EngFunc_SetClientListening, receiver, sender, listen)

  999.         return FMRES_SUPERCEDE

  1000. }

  1001.  

  1002. public player_cmdstart(id, uc, random)

  1003. {

  1004.         if(g_Duel > 3)

  1005.         {

  1006.                 cs_set_user_bpammo(id, _Duel[g_Duel - 4][_csw], 1)

  1007.         }

  1008. }

  1009.  

  1010. public round_first()

  1011. {

  1012.         g_JailDay = 0

  1013.         for(new i = 1; i <= g_MaxClients; i++)

  1014.                 g_PlayerSimon[i] = 0

  1015.  

  1016.         set_cvar_num("sv_alltalk", 1)

  1017.         set_cvar_num("mp_roundtime", 2)

  1018.         set_cvar_num("mp_limitteams", 0)

  1019.         set_cvar_num("mp_autoteambalance", 0)

  1020.         set_cvar_num("mp_tkpunish", 0)

  1021.         set_cvar_num("mp_friendlyfire", 1)

  1022.         round_end()

  1023. }

  1024.  

  1025. public round_end()

  1026. {

  1027.         static CsTeams:team

  1028.         static maxnosimon, spectrounds

  1029.         g_SafeTime = 0

  1030.         g_PlayerRevolt = 0

  1031.         g_PlayerFreeday = 0

  1032.         g_PlayerLast = 0

  1033.         g_BoxStarted = 0

  1034.         g_CrowbarCount = 0

  1035.         g_Simon = 0

  1036.         g_SimonAllowed = 0

  1037.         g_RoundStarted = 0

  1038.         g_LastDenied = 0

  1039.         g_BlockWeapons = 0

  1040.         g_TeamCount[CS_TEAM_T] = 0

  1041.         g_TeamCount[CS_TEAM_CT] = 0

  1042.         g_Freeday = 0

  1043.         g_FreedayNext = (random_num(0,99) >= 95)

  1044.         g_RoundEnd = 1

  1045.         g_Duel = 0

  1046.  

  1047.         remove_task(TASK_STATUS)

  1048.         remove_task(TASK_FREEDAY)

  1049.         remove_task(TASK_FREEEND)

  1050.         remove_task(TASK_ROUND)

  1051.         maxnosimon = get_pcvar_num(gp_NosimonRounds)

  1052.         spectrounds = get_pcvar_num(gp_SpectRounds)

  1053.         for(new i = 1; i <= g_MaxClients; i++)

  1054.         {

  1055.                 if(!is_user_connected(i))

  1056.                         continue

  1057.  

  1058.                 menu_cancel(i)

  1059.                 team = cs_get_user_team(i)

  1060.                 player_strip_weapons(i)

  1061.                 switch(team)

  1062.                 {

  1063.                         case(CS_TEAM_CT):

  1064.                         {

  1065.                                 if(g_PlayerSimon[i] > maxnosimon)

  1066.                                 {

  1067.                                         cmd_nomic(i)

  1068.                                 }

  1069.                         }

  1070.                         case(CS_TEAM_SPECTATOR,CS_TEAM_UNASSIGNED):

  1071.                         {

  1072.                                 g_PlayerSpect[i]++

  1073.                                 if(g_PlayerSpect[i] > spectrounds)

  1074.                                 {

  1075.                                         client_cmd(i, "disconnect")

  1076.                                         server_print("JBE Disconnected spectator client #%i", i)

  1077.                                 }

  1078.                                 else

  1079.                                 {

  1080.                                         show_menu(i, 51, TEAM_MENU, -1)

  1081.                                 }

  1082.                         }

  1083.                 }

  1084.         }

  1085.         for(new i = 0; i < sizeof(g_HudSync); i++)

  1086.                 ClearSyncHud(0, g_HudSync[i][_hudsync])

  1087.  

  1088. }

  1089.  

  1090. public round_start()

  1091. {

  1092.         if(g_RoundEnd)

  1093.                 return

  1094.  

  1095.         team_count()

  1096.         if(!g_Simon && is_freeday())

  1097.         {

  1098.                 g_Freeday = 1

  1099.                 emit_sound(0, CHAN_AUTO, "jbextreme/brass_bell_C.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)

  1100.                 check_freeday(TASK_FREEDAY)

  1101.         }

  1102.         else

  1103.         {

  1104.                 set_task(60.0, "check_freeday", TASK_FREEDAY)

  1105.         }

  1106.         set_task(HUD_DELAY, "hud_status", TASK_STATUS, _, _, "b")

  1107.         set_task(get_pcvar_float(gp_RetryTime) + 1.0, "safe_time", TASK_SAFETIME)

  1108.         set_task(120.0, "freeday_end", TASK_FREEDAY)

  1109.         g_SimonRandom = get_pcvar_num(gp_SimonRandom) ? random_float(15.0, 45.0) : 0.0

  1110.         g_SimonAllowed = 1

  1111.         g_FreedayNext = 0

  1112. }

  1113.  

  1114. public cmd_jointeam(id)

  1115. {

  1116.         return PLUGIN_HANDLED

  1117. }

  1118.  

  1119. public cmd_joinclass(id)

  1120. {

  1121.         return PLUGIN_HANDLED

  1122. }

  1123.  

  1124. public cmd_voiceon(id)

  1125. {

  1126.         client_cmd(id, "+voicerecord")

  1127.         set_bit(g_SimonVoice, id)

  1128.         if(g_Simon == id || is_user_admin(id))

  1129.                 set_bit(g_SimonTalking, id)

  1130.  

  1131.         return PLUGIN_HANDLED

  1132. }

  1133.  

  1134. public cmd_voiceoff(id)

  1135. {

  1136.         client_cmd(id, "-voicerecord")

  1137.         clear_bit(g_SimonVoice, id)

  1138.         if(g_Simon == id || is_user_admin(id))

  1139.                 clear_bit(g_SimonTalking, id)

  1140.  

  1141.         return PLUGIN_HANDLED

  1142. }

  1143.  

  1144. public cmd_simon(id)

  1145. {

  1146.         static CsTeams:team, name[32]

  1147.         if(!is_user_connected(id))

  1148.                 return PLUGIN_HANDLED

  1149.  

  1150.         team = cs_get_user_team(id)

  1151.         if(g_SimonAllowed && !g_Freeday && is_user_alive(id) && team == CS_TEAM_CT && !g_Simon)

  1152.         {

  1153.                 g_Simon = id

  1154.                 get_user_name(id, name, charsmax(name))

  1155.                 entity_set_int(id, EV_INT_body, 1)

  1156.                 g_PlayerSimon[id]--

  1157.                 if(get_pcvar_num(gp_GlowModels))

  1158.                         player_glow(id, g_Colors[0])

  1159.  

  1160.                 hud_status(0)

  1161.         }

  1162.         return PLUGIN_HANDLED

  1163. }

  1164.  

  1165. public cmd_open(id)

  1166. {

  1167.         if(id == g_Simon)

  1168.                 jail_open()

  1169.  

  1170.         return PLUGIN_HANDLED

  1171. }

  1172.  

  1173. public cmd_nomic(id)

  1174. {

  1175.         static CsTeams:team

  1176.         team = cs_get_user_team(id)

  1177.         if(team == CS_TEAM_CT)

  1178.         {

  1179.                 server_print("JBE Transfered guard to prisoners team client #%i", id)

  1180.                 if(g_Simon == id)

  1181.                 {

  1182.                         g_Simon = 0

  1183.                         player_hudmessage(0, 2, 5.0, _, "%L", LANG_SERVER, "JBE_SIMON_TRANSFERED")

  1184.                 }

  1185.                 if(!is_user_admin(id))

  1186.                         set_bit(g_PlayerNomic, id)

  1187.  

  1188.                 user_silentkill(id)

  1189.                 cs_set_user_team(id, CS_TEAM_T)

  1190.         }

  1191.         return PLUGIN_HANDLED

  1192. }

  1193.  

  1194. public cmd_box(id)

  1195. {

  1196.         static i

  1197.         if((id < 0) || (is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT))

  1198.         {

  1199.                 if(g_TeamAlive[CS_TEAM_T] <= get_pcvar_num(gp_BoxMax) && g_TeamAlive[CS_TEAM_T] > 1)

  1200.                 {

  1201.                         for(i = 1; i <= g_MaxClients; i++)

  1202.                                 if(is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_T)

  1203.                                         set_user_health(i, 100)

  1204.  

  1205.                         set_cvar_num("mp_tkpunish", 0)

  1206.                         set_cvar_num("mp_friendlyfire", 1)

  1207.                         g_BoxStarted = 1

  1208.                         player_hudmessage(0, 1, 3.0, _, "%L", LANG_SERVER, "JBE_GUARD_BOX")

  1209.                 }

  1210.                 else

  1211.                 {

  1212.                         player_hudmessage(id, 1, 3.0, _, "%L", LANG_SERVER, "JBE_GUARD_CANTBOX")

  1213.                 }

  1214.         }

  1215.         return PLUGIN_HANDLED

  1216. }

  1217.  

  1218. public cmd_help(id)

  1219. {

  1220.         if(id > g_MaxClients)

  1221.                 id -= TASK_HELP

  1222.  

  1223.         remove_task(TASK_HELP + id)

  1224.         switch(get_bit(g_PlayerHelp, id))

  1225.         {

  1226.                 case(0):

  1227.                 {

  1228.                         set_bit(g_PlayerHelp, id)

  1229.                         player_hudmessage(id, 7, 15.0, {230, 100, 10}, "%s", g_HelpText)

  1230.                         set_task(15.0, "cmd_help", TASK_HELP + id)

  1231.                 }

  1232.                 default:

  1233.                 {

  1234.                         clear_bit(g_PlayerHelp, id)

  1235.                         ClearSyncHud(id, g_HudSync[7][_hudsync])

  1236.                 }

  1237.         }

  1238. }

  1239.  

  1240. public cmd_freeday(id)

  1241. {

  1242.         static menu, menuname[32], option[64]

  1243.         if(!is_freeday() && ((is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT) || is_user_admin(id)))

  1244.         {

  1245.                 formatex(menuname, charsmax(menuname), "%L", LANG_SERVER, "JBE_MENU_FREEDAY")

  1246.                 menu = menu_create(menuname, "freeday_choice")

  1247.  

  1248.                 formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_FREEDAY_PLAYER")

  1249.                 menu_additem(menu, option, "1", 0)

  1250.  

  1251.                 formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_FREEDAY_ALL")

  1252.                 menu_additem(menu, option, "2", 0)

  1253.  

  1254.                 menu_display(id, menu)

  1255.         }

  1256.         return PLUGIN_HANDLED

  1257. }

  1258.  

  1259. public cmd_freeday_player(id)

  1260. {

  1261.         if((is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT) || is_user_admin(id))

  1262.                 menu_players(id, CS_TEAM_T, id, 1, "freeday_select", "%L", LANG_SERVER, "JBE_MENU_FREEDAY")

  1263.  

  1264.         return PLUGIN_CONTINUE

  1265. }

  1266.  

  1267. public cmd_lastrequest(id)

  1268. {

  1269.         static i, num[5], menu, menuname[32], option[64]

  1270.         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))

  1271.                 return PLUGIN_CONTINUE

  1272.  

  1273.         formatex(menuname, charsmax(menuname), "%L", LANG_SERVER, "JBE_MENU_LASTREQ")

  1274.         menu = menu_create(menuname, "lastrequest_select")

  1275.  

  1276.         formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_LASTREQ_OPT1")

  1277.         menu_additem(menu, option, "1", 0)

  1278.  

  1279.         formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_LASTREQ_OPT2")

  1280.         menu_additem(menu, option, "2", 0)

  1281.  

  1282.         formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_LASTREQ_OPT3")

  1283.         menu_additem(menu, option, "3", 0)

  1284.  

  1285.         for(i = 0; i < sizeof(_Duel); i++)

  1286.         {

  1287.                 num_to_str(i + 4, num, charsmax(num))

  1288.                 formatex(option, charsmax(option), "%L", LANG_SERVER, _Duel[i][_opt])

  1289.                 menu_additem(menu, option, num, 0)

  1290.         }

  1291.  

  1292.         menu_display(id, menu)

  1293.         return PLUGIN_CONTINUE

  1294. }

  1295.  

  1296. public adm_freeday(id)

  1297. {

  1298.         static player, user[32]

  1299.         if(!is_user_admin(id))

  1300.                 return PLUGIN_CONTINUE

  1301.  

  1302.         read_argv(1, user, charsmax(user))

  1303.         player = cmd_target(id, user, 2)

  1304.         if(is_user_connected(player) && cs_get_user_team(player) == CS_TEAM_T)

  1305.         {

  1306.                 freeday_set(id, player)

  1307.         }

  1308.         return PLUGIN_HANDLED

  1309. }

  1310.  

  1311. public adm_nomic(id)

  1312. {

  1313.         static player, user[32]

  1314.         if(id == 0 || is_user_admin(id))

  1315.         {

  1316.                 read_argv(1, user, charsmax(user))

  1317.                 player = cmd_target(id, user, 3)

  1318.                 if(is_user_connected(player))

  1319.                 {

  1320.                         cmd_nomic(player)

  1321.                 }

  1322.         }

  1323.         return PLUGIN_HANDLED

  1324. }

  1325.  

  1326. public adm_open(id)

  1327. {

  1328.         if(!is_user_admin(id))

  1329.                 return PLUGIN_CONTINUE

  1330.  

  1331.         jail_open()

  1332.         return PLUGIN_HANDLED

  1333. }

  1334.  

  1335. public adm_box(id)

  1336. {

  1337.         if(!is_user_admin(id))

  1338.                 return PLUGIN_CONTINUE

  1339.  

  1340.         cmd_box(-1)

  1341.         return PLUGIN_HANDLED

  1342. }

  1343.  

  1344. public team_select(id, key)

  1345. {

  1346.         static CsTeams:team, roundloop, admin

  1347.  

  1348.         roundloop = get_pcvar_num(gp_RetryTime) / 2

  1349.         team = cs_get_user_team(id)

  1350.         admin = is_user_admin(id)

  1351.         team_count()

  1352.  

  1353.         if(!admin && (team == CS_TEAM_UNASSIGNED) && (g_RoundStarted >= roundloop) && g_TeamCount[CS_TEAM_CT] && g_TeamCount[CS_TEAM_T] && !is_user_alive(id))

  1354.         {

  1355.                 team_join(id, CS_TEAM_SPECTATOR)

  1356.                 client_print(id, print_center, "%L", LANG_SERVER, "JBE_TEAM_CANTJOIN")

  1357.                 return PLUGIN_HANDLED

  1358.         }

  1359.  

  1360.  

  1361.         switch(key)

  1362.         {

  1363.                 case(0):

  1364.                 {

  1365.                         if(team == CS_TEAM_T)

  1366.                                 return PLUGIN_HANDLED

  1367.  

  1368.                         g_PlayerReason[id] = random_num(1, 6)

  1369.  

  1370.                         team_join(id, CS_TEAM_T)

  1371.                 }

  1372.                 case(1):

  1373.                 {

  1374.                         if(team == CS_TEAM_CT || (!admin && get_bit(g_PlayerNomic, id)))

  1375.                                 return PLUGIN_HANDLED

  1376.  

  1377.                         if(g_TeamCount[CS_TEAM_CT] < ctcount_allowed() || admin)

  1378.                                 team_join(id, CS_TEAM_CT)

  1379.                         else

  1380.                                 client_print(id, print_center, "%L", LANG_SERVER, "JBE_TEAM_CTFULL")

  1381.                 }

  1382.                 case(5):

  1383.                 {

  1384.                         user_silentkill(id)

  1385.                         team_join(id, CS_TEAM_SPECTATOR)

  1386.                 }

  1387.         }

  1388.         return PLUGIN_HANDLED

  1389. }

  1390.  

  1391. public team_join(id, CsTeams:team)

  1392. {

  1393.         static restore, vgui, msgblock

  1394.  

  1395.         restore = get_pdata_int(id, m_iVGUI)

  1396.         vgui = restore & (1<<0)

  1397.         if(vgui)

  1398.                 set_pdata_int(id, m_iVGUI, restore & ~(1<<0))

  1399.  

  1400.         switch(team)

  1401.         {

  1402.                 case CS_TEAM_SPECTATOR:

  1403.                 {

  1404.                         msgblock = get_msg_block(g_MsgShowMenu)

  1405.                         set_msg_block(g_MsgShowMenu, BLOCK_ONCE)

  1406.                         dllfunc(DLLFunc_ClientPutInServer, id)

  1407.                         set_msg_block(g_MsgShowMenu, msgblock)

  1408.                         set_pdata_int(id, m_fGameHUDInitialized, 1)

  1409.                         engclient_cmd(id, "jointeam", "6")

  1410.                 }

  1411.                 case CS_TEAM_T, CS_TEAM_CT:

  1412.                 {

  1413.                         msgblock = get_msg_block(g_MsgShowMenu)

  1414.                         set_msg_block(g_MsgShowMenu, BLOCK_ONCE)

  1415.                         engclient_cmd(id, "jointeam", (team == CS_TEAM_CT) ? "2" : "1")

  1416.                         engclient_cmd(id, "joinclass", "1")

  1417.                         set_msg_block(g_MsgShowMenu, msgblock)

  1418.                         g_PlayerSpect[id] = 0

  1419.                 }

  1420.         }

  1421.        

  1422.         if(vgui)

  1423.                 set_pdata_int(id, m_iVGUI, restore)

  1424. }

  1425.  

  1426. public team_count()

  1427. {

  1428.         static CsTeams:team, last

  1429.         g_TeamCount[CS_TEAM_UNASSIGNED] = 0

  1430.         g_TeamCount[CS_TEAM_T] = 0

  1431.         g_TeamCount[CS_TEAM_CT] = 0

  1432.         g_TeamCount[CS_TEAM_SPECTATOR] = 0

  1433.         g_TeamAlive[CS_TEAM_UNASSIGNED] = 0

  1434.         g_TeamAlive[CS_TEAM_T] = 0

  1435.         g_TeamAlive[CS_TEAM_CT] = 0

  1436.         g_TeamAlive[CS_TEAM_SPECTATOR] = 0

  1437.         for(new i = 1; i <= g_MaxClients; i++)

  1438.         {

  1439.                 if(is_user_connected(i))

  1440.                 {

  1441.                         team = cs_get_user_team(i)

  1442.                         g_TeamCount[team]++

  1443.                         g_PlayerTeam[i] = team

  1444.                         if(is_user_alive(i))

  1445.                         {

  1446.                                 g_TeamAlive[team]++

  1447.                                 if(team == CS_TEAM_T)

  1448.                                         last = i

  1449.                         }

  1450.                 }

  1451.                 else

  1452.                 {

  1453.                         g_PlayerTeam[i] = CS_TEAM_UNASSIGNED

  1454.                 }

  1455.         }

  1456.         if(g_TeamAlive[CS_TEAM_T] == 1)

  1457.         {

  1458.                 if(last != g_PlayerLast && g_SafeTime)

  1459.                 {

  1460.                         prisoner_last(last)

  1461.                 }

  1462.         }

  1463.         else

  1464.         {

  1465.                 if(g_Duel || g_DuelA || g_DuelB)

  1466.                 {

  1467.                         if(is_user_alive(g_DuelA))

  1468.                         {

  1469.                                 set_user_rendering(g_DuelA, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)

  1470.                                 player_strip_weapons(g_DuelA)

  1471.                         }

  1472.  

  1473.                         if(is_user_alive(g_DuelB))

  1474.                         {

  1475.                                 set_user_rendering(g_DuelB, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)

  1476.                                 player_strip_weapons(g_DuelB)

  1477.                         }

  1478.  

  1479.                 }

  1480.                 g_PlayerLast = 0

  1481.                 g_DuelA = 0

  1482.                 g_DuelB = 0

  1483.                 g_Duel = 0

  1484.         }

  1485. }

  1486.  

  1487. public revolt_start()

  1488. {

  1489.         client_cmd(0,"speak ambience/siren")

  1490.         set_task(8.0, "stop_sound")

  1491.         hud_status(0)

  1492. }

  1493.  

  1494. public stop_sound(task)

  1495. {

  1496.         client_cmd(0, "stopsound")

  1497. }

  1498.  

  1499. public hud_status(task)

  1500. {

  1501.         static i, n

  1502.         new name[32], szStatus[64], wanted[1024]

  1503.  

  1504.         if(g_RoundStarted < (get_pcvar_num(gp_RetryTime) / 2))

  1505.                 g_RoundStarted++

  1506.  

  1507.         if(!g_Freeday && !g_Simon && g_SimonAllowed && (0.0 < g_SimonRandom < get_gametime()))

  1508.         {

  1509.                 cmd_simon(random_num(1, g_MaxClients))

  1510.         }

  1511.  

  1512.         n = 0

  1513.         formatex(wanted, charsmax(wanted), "%L", LANG_SERVER, "JBE_PRISONER_WANTED")

  1514.         n = strlen(wanted)

  1515.         for(i = 0; i < g_MaxClients; i++)

  1516.         {

  1517.                 if(get_bit(g_PlayerWanted, i) && is_user_alive(i) && n < charsmax(wanted))

  1518.                 {

  1519.                         get_user_name(i, name, charsmax(name))

  1520.                         n += copy(wanted[n], charsmax(wanted) - n, "^n^t")

  1521.                         n += copy(wanted[n], charsmax(wanted) - n, name)

  1522.                 }

  1523.         }

  1524.  

  1525.         team_count()

  1526.         formatex(szStatus, charsmax(szStatus), "%L", LANG_SERVER, "JBE_STATUS", g_TeamAlive[CS_TEAM_T], g_TeamCount[CS_TEAM_T])

  1527.         message_begin(MSG_BROADCAST, get_user_msgid("StatusText"), {0,0,0}, 0)

  1528.         write_byte(0)

  1529.         write_string(szStatus)

  1530.         message_end()

  1531.  

  1532.         if(g_Simon)

  1533.         {

  1534.                 get_user_name(g_Simon, name, charsmax(name))

  1535.                 player_hudmessage(0, 2, HUD_DELAY + 1.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_SIMON_FOLLOW", name)

  1536.         }

  1537.         else if(g_Freeday)

  1538.         {

  1539.                 player_hudmessage(0, 2, HUD_DELAY + 1.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_STATUS_FREEDAY")

  1540.         }

  1541.  

  1542.         if(g_PlayerWanted)

  1543.                 player_hudmessage(0, 3, HUD_DELAY + 1.0, {255, 25, 50}, "%s", wanted)

  1544.         else if(g_PlayerRevolt)

  1545.                 player_hudmessage(0, 3, HUD_DELAY + 1.0, {255, 25, 50}, "%L", LANG_SERVER, "JBE_PRISONER_REVOLT")

  1546.  

  1547.         player_hudmessage(0, 5, HUD_DELAY + 1.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_STATUS_DAY", g_JailDay)

  1548.  

  1549.         gc_TalkMode = get_pcvar_num(gp_TalkMode)

  1550.         gc_VoiceBlock = get_pcvar_num(gp_VoiceBlock)

  1551.         gc_SimonSteps = get_pcvar_num(gp_SimonSteps)

  1552.         gc_ButtonShoot = get_pcvar_num(gp_ButtonShoot)

  1553.         gc_CrowbarMul = get_pcvar_float(gp_CrowbarMul)

  1554.  

  1555. }

  1556.  

  1557. public safe_time(task)

  1558. {

  1559.         g_SafeTime = 1

  1560. }

  1561.  

  1562. public check_freeday(task)

  1563. {

  1564.         static Float:roundmax, i

  1565.         if(!g_Simon && !g_PlayerLast)

  1566.         {

  1567.                 g_Freeday = 1

  1568.                 hud_status(0)

  1569.                 roundmax = get_pcvar_float(gp_RoundMax)

  1570.                 if(roundmax > 0.0)

  1571.                 {

  1572.                         for(i = 1; i <= g_MaxClients; i++)

  1573.                         {

  1574.                                 if(is_user_alive(i) && cs_get_user_team(i) == CS_TEAM_T)

  1575.                                         freeday_set(0, i)

  1576.                         }

  1577.                         emit_sound(0, CHAN_AUTO, "jbextreme/brass_bell_C.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)

  1578.                         player_hudmessage(0, 8, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_STATUS_ENDTIMER", floatround(roundmax - 60.0))

  1579.                         remove_task(TASK_ROUND)

  1580.                         set_task(roundmax - 60.0, "check_end", TASK_ROUND)

  1581.                 }

  1582.         }

  1583.  

  1584.         if(get_pcvar_num(gp_AutoOpen))

  1585.                 jail_open()

  1586. }

  1587.  

  1588. public freeday_end(task)

  1589. {

  1590.         if(g_Freeday || g_PlayerFreeday)

  1591.         {

  1592.                 emit_sound(0, CHAN_AUTO, "jbextreme/brass_bell_C.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)

  1593.                 player_hudmessage(0, 8, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_STATUS_ENDFREEDAY")

  1594.         }

  1595. }

  1596.  

  1597. public check_end(task)

  1598. {

  1599.         team_count()

  1600.         for(new i = 1; i <= g_MaxClients; i++)

  1601.         {

  1602.                 if(g_PlayerTeam[i] == CS_TEAM_T && is_user_alive(i))

  1603.                 {

  1604.                         user_silentkill(i)

  1605.                         cs_set_user_deaths(i, get_user_deaths(i) - 1)

  1606.                 }

  1607.         }

  1608.         for(new i = 1; i <= g_MaxClients; i++)

  1609.         {

  1610.                 if(g_PlayerTeam[i] == CS_TEAM_CT && is_user_alive(i))

  1611.                 {

  1612.                         user_silentkill(i)

  1613.                         cs_set_user_deaths(i, get_user_deaths(i) - 1)

  1614.                 }

  1615.         }

  1616.         player_hudmessage(0, 6, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_STATUS_ROUNDEND")

  1617. }

  1618.  

  1619. public prisoner_last(id)

  1620. {

  1621.         static name[32], Float:roundmax

  1622.         if(is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_T)

  1623.         {

  1624.                 roundmax = get_pcvar_float(gp_RoundMax)

  1625.                 get_user_name(id, name, charsmax(name))

  1626.                 g_PlayerLast = id

  1627.                 player_hudmessage(0, 6, 5.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_PRISONER_LAST", name)

  1628.                 remove_task(TASK_ROUND)

  1629.                 if(roundmax > 0.0)

  1630.                 {

  1631.                         player_hudmessage(0, 8, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_STATUS_ENDTIMER", floatround(roundmax - 60.0))

  1632.                         set_task(roundmax - 60.0, "check_end", TASK_ROUND)

  1633.                 }

  1634.                 if((g_TeamAlive[CS_TEAM_CT] > 0) && get_pcvar_num(gp_AutoLastresquest))

  1635.                         cmd_lastrequest(id)

  1636.         }

  1637. }

  1638.  

  1639. public freeday_select(id, menu, item)

  1640. {

  1641.         if(item == MENU_EXIT)

  1642.         {

  1643.                 menu_destroy(menu)

  1644.                 return PLUGIN_HANDLED

  1645.         }

  1646.  

  1647.         static dst[32], data[5], player, access, callback

  1648.  

  1649.         menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)

  1650.         player = str_to_num(data)

  1651.         freeday_set(id, player)

  1652.         return PLUGIN_HANDLED

  1653. }

  1654.  

  1655. public duel_knives(id, menu, item)

  1656. {

  1657.         if(item == MENU_EXIT)

  1658.         {

  1659.                 menu_destroy(menu)

  1660.                 g_LastDenied = 0

  1661.                 return PLUGIN_HANDLED

  1662.         }

  1663.  

  1664.         static dst[32], data[5], access, callback, option[128], player, src[32]

  1665.  

  1666.         menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)

  1667.         get_user_name(id, src, charsmax(src))

  1668.         player = str_to_num(data)

  1669.         formatex(option, charsmax(option), "%L^n%L", LANG_SERVER, "JBE_MENU_LASTREQ_SEL3", src, LANG_SERVER, "JBE_MENU_DUEL_SEL", src, dst)

  1670.         player_hudmessage(0, 6, 3.0, {0, 255, 0}, option)

  1671.  

  1672.         g_DuelA = id

  1673.         clear_bit(g_PlayerCrowbar, id)

  1674.         player_strip_weapons(id)

  1675.         player_glow(id, g_Colors[3])

  1676.         set_user_health(id, 100)

  1677.  

  1678.         g_DuelB = player

  1679.         player_strip_weapons(player)

  1680.         player_glow(player, g_Colors[2])

  1681.         set_user_health(player, 100)

  1682.         g_BlockWeapons = 1

  1683.         return PLUGIN_HANDLED

  1684. }

  1685.  

  1686. public duel_guns(id, menu, item)

  1687. {

  1688.         if(item == MENU_EXIT)

  1689.         {

  1690.                 menu_destroy(menu)

  1691.                 g_LastDenied = 0

  1692.                 g_Duel = 0

  1693.                 return PLUGIN_HANDLED

  1694.         }

  1695.  

  1696.         static gun, dst[32], data[5], access, callback, option[128], player, src[32]

  1697.  

  1698.         menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)

  1699.         get_user_name(id, src, charsmax(src))

  1700.         player = str_to_num(data)

  1701.         formatex(option, charsmax(option), "%L^n%L", LANG_SERVER, _Duel[g_Duel - 4][_sel], src, LANG_SERVER, "JBE_MENU_DUEL_SEL", src, dst)

  1702.         emit_sound(0, CHAN_AUTO, "jbextreme/nm_goodbadugly.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)

  1703.         player_hudmessage(0, 6, 3.0, {0, 255, 0}, option)

  1704.  

  1705.         g_DuelA = id

  1706.         clear_bit(g_PlayerCrowbar, id)

  1707.         player_strip_weapons(id)

  1708.         gun = give_item(id, _Duel[g_Duel - 4][_entname])

  1709.         cs_set_weapon_ammo(gun, 1)

  1710.         set_user_health(id, 100)

  1711.         player_glow(id, g_Colors[3])

  1712.  

  1713.         g_DuelB = player

  1714.         player_strip_weapons(player)

  1715.         gun = give_item(player, _Duel[g_Duel - 4][_entname])

  1716.         cs_set_weapon_ammo(gun, 1)

  1717.         set_user_health(player, 100)

  1718.         player_glow(player, g_Colors[2])

  1719.  

  1720.         g_BlockWeapons = 1

  1721.         return PLUGIN_HANDLED

  1722. }

  1723.  

  1724. public freeday_choice(id, menu, item)

  1725. {

  1726.         if(item == MENU_EXIT)

  1727.         {

  1728.                 menu_destroy(menu)

  1729.                 return PLUGIN_HANDLED

  1730.         }

  1731.  

  1732.         static dst[32], data[5], access, callback

  1733.  

  1734.         menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)

  1735.         menu_destroy(menu)

  1736.         get_user_name(id, dst, charsmax(dst))

  1737.         switch(data[0])

  1738.         {

  1739.                 case('1'):

  1740.                 {

  1741.                         cmd_freeday_player(id)

  1742.                 }

  1743.                 case('2'):

  1744.                 {

  1745.                         if((id == g_Simon) || is_user_admin(id))

  1746.                         {

  1747.                                 g_Simon = 0

  1748.                                 get_user_name(id, dst, charsmax(dst))

  1749.                                 client_print(0, print_console, "%s gives freeday for everyone", dst)

  1750.                                 server_print("JBE Client %i gives freeday for everyone", id)

  1751.                                 check_freeday(TASK_FREEDAY)

  1752.                         }

  1753.                 }

  1754.         }

  1755.         return PLUGIN_HANDLED

  1756. }

  1757.  

  1758. public lastrequest_select(id, menu, item)

  1759. {

  1760.         if(item == MENU_EXIT)

  1761.         {

  1762.                 menu_destroy(menu)

  1763.                 return PLUGIN_HANDLED

  1764.         }

  1765.  

  1766.         static i, dst[32], data[5], access, callback, option[64]

  1767.  

  1768.         menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)

  1769.         get_user_name(id, dst, charsmax(dst))

  1770.         switch(data[0])

  1771.         {

  1772.                 case('1'):

  1773.                 {

  1774.                         formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_LASTREQ_SEL1", dst)

  1775.                         player_hudmessage(0, 6, 3.0, {0, 255, 0}, option)

  1776.                         set_bit(g_FreedayAuto, id)

  1777.                         user_silentkill(id)

  1778.                 }

  1779.                 case('2'):

  1780.                 {

  1781.                         formatex(option, charsmax(option), "%L", LANG_SERVER, "JBE_MENU_LASTREQ_SEL2", dst)

  1782.                         player_hudmessage(0, 6, 3.0, {0, 255, 0}, option)

  1783.                         g_Duel = 2

  1784.                         player_strip_weapons_all()

  1785.                         i = random_num(0, sizeof(_WeaponsFree) - 1)

  1786.                         give_item(id, _WeaponsFree[i])

  1787.                         g_BlockWeapons = 1

  1788.                         cs_set_user_bpammo(id, _WeaponsFreeCSW[i], _WeaponsFreeAmmo[i])

  1789.                 }

  1790.                 case('3'):

  1791.                 {

  1792.                         g_Duel = 3

  1793.                         menu_players(id, CS_TEAM_CT, 0, 1, "duel_knives", "%L", LANG_SERVER, "JBE_MENU_DUEL")

  1794.                 }

  1795.                 default:

  1796.                 {

  1797.                         g_Duel = str_to_num(data)

  1798.                         menu_players(id, CS_TEAM_CT, 0, 1, "duel_guns", "%L", LANG_SERVER, "JBE_MENU_DUEL")

  1799.                 }

  1800.         }

  1801.         g_LastDenied = 1

  1802.         menu_destroy(menu)

  1803.         return PLUGIN_HANDLED

  1804. }

  1805.  

  1806. public setup_buttons()

  1807. {

  1808.         new ent[3]

  1809.         new Float:origin[3]

  1810.         new info[32]

  1811.         new pos

  1812.  

  1813.         while((pos <= sizeof(g_Buttons)) && (ent[0] = engfunc(EngFunc_FindEntityByString, ent[0], "classname", "info_player_deathmatch")))

  1814.         {

  1815.                 pev(ent[0], pev_origin, origin)

  1816.                 while((ent[1] = engfunc(EngFunc_FindEntityInSphere, ent[1], origin, CELL_RADIUS)))

  1817.                 {

  1818.                         if(!is_valid_ent(ent[1]))

  1819.                                 continue

  1820.  

  1821.                         entity_get_string(ent[1], EV_SZ_classname, info, charsmax(info))

  1822.                         if(!equal(info, "func_door"))

  1823.                                 continue

  1824.  

  1825.                         entity_get_string(ent[1], EV_SZ_targetname, info, charsmax(info))

  1826.                         if(!info[0])

  1827.                                 continue

  1828.  

  1829.                         if(TrieKeyExists(g_CellManagers, info))

  1830.                         {

  1831.                                 TrieGetCell(g_CellManagers, info, ent[2])

  1832.                         }

  1833.                         else

  1834.                         {

  1835.                                 ent[2] = engfunc(EngFunc_FindEntityByString, 0, "target", info)

  1836.                         }

  1837.  

  1838.                         if(is_valid_ent(ent[2]) && (in_array(ent[2], g_Buttons, sizeof(g_Buttons)) < 0))

  1839.                         {

  1840.                                 g_Buttons[pos] = ent[2]

  1841.                                 pos++

  1842.                                 break

  1843.                         }

  1844.                 }

  1845.         }

  1846.         TrieDestroy(g_CellManagers)

  1847. }

  1848.  

  1849. stock in_array(needle, data[], size)

  1850. {

  1851.         for(new i = 0; i < size; i++)

  1852.         {

  1853.                 if(data[i] == needle)

  1854.                         return i

  1855.         }

  1856.         return -1

  1857. }

  1858.  

  1859. stock freeday_set(id, player)

  1860. {

  1861.         static src[32], dst[32]

  1862.         get_user_name(player, dst, charsmax(dst))

  1863.  

  1864.         if(is_user_alive(player) && !get_bit(g_PlayerWanted, player))

  1865.         {

  1866.                 set_bit(g_PlayerFreeday, player)

  1867.                 entity_set_int(player, EV_INT_skin, 3)

  1868.                 if(get_pcvar_num(gp_GlowModels))

  1869.                         player_glow(player, g_Colors[1])

  1870.  

  1871.                 if(0 < id <= g_MaxClients)

  1872.                 {

  1873.                         get_user_name(id, src, charsmax(src))

  1874.                         player_hudmessage(0, 6, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_GUARD_FREEDAYGIVE", src, dst)

  1875.                 }

  1876.                 else if(!is_freeday())

  1877.                 {

  1878.                         player_hudmessage(0, 6, 3.0, {0, 255, 0}, "%L", LANG_SERVER, "JBE_PRISONER_HASFREEDAY", dst)

  1879.                 }

  1880.         }

  1881. }

  1882.  

  1883. stock first_join(id)

  1884. {

  1885.         if(!get_bit(g_PlayerJoin, id))

  1886.         {

  1887.                 set_bit(g_PlayerJoin, id)

  1888.                 clear_bit(g_PlayerHelp, id)

  1889.                 set_task(5.0, "cmd_help", TASK_HELP + id)

  1890.         }

  1891. }

  1892.  

  1893. stock ctcount_allowed()

  1894. {

  1895.         static count

  1896.         count = ((g_TeamCount[CS_TEAM_T] + g_TeamCount[CS_TEAM_CT]) / get_pcvar_num(gp_TeamRatio))

  1897.         if(count < 2)

  1898.                 count = 2

  1899.         else if(count > get_pcvar_num(gp_CtMax))

  1900.                 count = get_pcvar_num(gp_CtMax)

  1901.  

  1902.         return count

  1903. }

  1904.  

  1905. stock player_hudmessage(id, hudid, Float:time = 0.0, color[3] = {0, 255, 0}, msg[], any:...)

  1906. {

  1907.         static text[512], Float:x, Float:y

  1908.         x = g_HudSync[hudid][_x]

  1909.         y = g_HudSync[hudid][_y]

  1910.        

  1911.         if(time > 0)

  1912.                 set_hudmessage(color[0], color[1], color[2], x, y, 0, 0.00, time, 0.00, 0.00)

  1913.         else

  1914.                 set_hudmessage(color[0], color[1], color[2], x, y, 0, 0.00, g_HudSync[hudid][_time], 0.00, 0.00)

  1915.  

  1916.         vformat(text, charsmax(text), msg, 6)

  1917.         ShowSyncHudMsg(id, g_HudSync[hudid][_hudsync], text)

  1918. }

  1919.  

  1920. stock menu_players(id, CsTeams:team, skip, alive, callback[], title[], any:...)

  1921. {

  1922.         static i, name[32], num[5], menu, menuname[32]

  1923.         vformat(menuname, charsmax(menuname), title, 7)

  1924.         menu = menu_create(menuname, callback)

  1925.         for(i = 1; i <= g_MaxClients; i++)

  1926.         {

  1927.                 if(!is_user_connected(i) || (alive && !is_user_alive(i)) || (skip == i))

  1928.                         continue

  1929.  

  1930.                 if(!(team == CS_TEAM_T || team == CS_TEAM_CT) || ((team == CS_TEAM_T || team == CS_TEAM_CT) && (cs_get_user_team(i) == team)))

  1931.                 {

  1932.                         get_user_name(i, name, charsmax(name))

  1933.                         num_to_str(i, num, charsmax(num))

  1934.                         menu_additem(menu, name, num, 0)

  1935.                 }

  1936.         }

  1937.         menu_display(id, menu)

  1938. }

  1939.  

  1940. stock player_glow(id, color[3], amount=40)

  1941. {

  1942.         set_user_rendering(id, kRenderFxGlowShell, color[0], color[1], color[2], kRenderNormal, amount)

  1943. }

  1944.  

  1945. stock player_strip_weapons(id)

  1946. {

  1947.         strip_user_weapons(id)

  1948.         give_item(id, "weapon_knife")

  1949.         set_pdata_int(id, m_iPrimaryWeapon, 0)

  1950. }

  1951.  

  1952. stock player_strip_weapons_all()

  1953. {

  1954.         for(new i = 1; i <= g_MaxClients; i++)

  1955.         {

  1956.                 if(is_user_alive(i))

  1957.                 {

  1958.                         player_strip_weapons(i)

  1959.                 }

  1960.         }

  1961. }

  1962.  

  1963. stock is_freeday()

  1964. {

  1965.         return (g_FreedayNext || g_Freeday || (g_JailDay == 1))

  1966. }

  1967.  

  1968. public jail_open()

  1969. {

  1970.         static i

  1971.         for(i = 0; i < sizeof(g_Buttons); i++)

  1972.         {

  1973.                 if(g_Buttons[i])

  1974.                 {

  1975.                         ExecuteHamB(Ham_Use, g_Buttons[i], 0, 0, 1, 1.0)

  1976.                         entity_set_float(g_Buttons[i], EV_FL_frame, 0.0)

  1977.                 }

  1978.         }

  1979. }

  1980.  
[/pawn]
Не компилится! надо чтоб мог давать голос зэк и админ с правом кика
Учусь делать плагины!Приму любую помощь!ТыЦц
Аватара пользователя
Pasha
 
Сообщения: 13
Зарегистрирован: 05 дек 2012, 16:52
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Counter-Strike 1.6

Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13