diff --git a/assets/addons/amxmodx/data/lang/kreedz_lang.txt b/assets/addons/amxmodx/data/lang/kreedz_lang.txt index ec894d5..64d10a5 100644 --- a/assets/addons/amxmodx/data/lang/kreedz_lang.txt +++ b/assets/addons/amxmodx/data/lang/kreedz_lang.txt @@ -65,6 +65,7 @@ SETTINGSMENU_OPT_GOTO = Allow teleport to you SETTINGSMENU_OPT_RADIO = Radio commands SETTINGSMENU_OPT_MKEY_OPEN_MENU = M key behavior: \ropen menu SETTINGSMENU_OPT_MKEY_SPEC_CT = M key behavior: \ygo to spec/ct +SETTINGSMENU_OPT_BLOCKCHANGE = Block weapon change during run SETTINGSMENU_ENABLE = enabled SETTINGSMENU_DISABLE = disabled @@ -142,6 +143,7 @@ SETTINGSMENU_OPT_GOTO = Разрешить телепорты к Вам SETTINGSMENU_OPT_RADIO = Радио команды SETTINGSMENU_OPT_MKEY_OPEN_MENU = Кнопка М: \rоткрыть главное меню SETTINGSMENU_OPT_MKEY_SPEC_CT = Кнопка М: \yперейти в наблюдение +SETTINGSMENU_OPT_BLOCKCHANGE = Блокировать смену оружия SETTINGSMENU_ENABLE = вкл SETTINGSMENU_DISABLE = выкл @@ -219,6 +221,7 @@ SETTINGSMENU_OPT_GOTO = 允许他人传送到你 SETTINGSMENU_OPT_RADIO = 无线电命令 SETTINGSMENU_OPT_MKEY_OPEN_MENU = M 键操作: \r开启菜单 SETTINGSMENU_OPT_MKEY_SPEC_CT = M 键操作: \y spec/ct +SETTINGSMENU_OPT_BLOCKCHANGE = 防止武器切換 SETTINGSMENU_ENABLE = 启用 SETTINGSMENU_DISABLE = 禁用 diff --git a/src/scripts/kreedz/kz_settings.sma b/src/scripts/kreedz/kz_settings.sma index 67ad71f..df5be2c 100644 --- a/src/scripts/kreedz/kz_settings.sma +++ b/src/scripts/kreedz/kz_settings.sma @@ -27,6 +27,7 @@ enum OptionsEnum { optIntMkeyBehavior, optIntJumpStats, optBoolSpecList, + optBoolBlockWeaponChange, optBoolHideWeapon, }; @@ -46,6 +47,7 @@ enum UserDataStruct { bool:ud_showMenu, bool:ud_allowGoto, bool:ud_specList, + bool:ud_blockWeaponChange, bool:ud_hideWeapon, ud_mkeyBehavior, @@ -151,6 +153,11 @@ public plugin_precache() { // default: true g_Options[optBoolSpecList] = register_players_option_cell("spec_list", FIELD_TYPE_BOOL, true); + // Block weapon change when timer is enabled: + // + // default: false + g_Options[optBoolBlockWeaponChange] = register_players_option_cell("block_weapon_change", FIELD_TYPE_BOOL, false); + // hide weapon model: // // default: false @@ -170,6 +177,7 @@ public client_putinserver(id) { g_UserData[id][ud_showMenu] = false; g_UserData[id][ud_allowGoto] = true; g_UserData[id][ud_specList] = true; + g_UserData[id][ud_blockWeaponChange] = false; g_UserData[id][ud_hideWeapon] = false; g_UserData[id][ud_mkeyBehavior] = 0; @@ -230,6 +238,9 @@ public OnCellValueChanged(id, optionId, newValue) { else if (optionId == g_Options[optBoolSpecList]) { g_UserData[id][ud_specList] = !!newValue; } + else if (optionId == g_Options[optBoolBlockWeaponChange]) { + g_UserData[id][ud_blockWeaponChange] = !!newValue; + } else if (optionId == g_Options[optBoolHideWeapon]) { g_UserData[id][ud_hideWeapon] = !!newValue; if (newValue) { @@ -286,7 +297,6 @@ stock settingsMenu(id, page = 0) { addBoolOption(id, iMenu, szMsg, charsmax(szMsg), "SETTINGSMENU_OPT_FOG", g_UserData[id][ud_fog]); addBoolOption(id, iMenu, szMsg, charsmax(szMsg), "SETTINGSMENU_OPT_GOTO", g_UserData[id][ud_allowGoto]); addBoolOption(id, iMenu, szMsg, charsmax(szMsg), "SETTINGSMENU_OPT_RADIO", !g_UserData[id][ud_blockRadio]); - addBoolOption(id, iMenu, szMsg, charsmax(szMsg), "SETTINGSMENU_OPT_HIDEWEAPON", g_UserData[id][ud_hideWeapon]); switch (g_UserData[id][ud_mkeyBehavior]) { case 0: formatex(szMsg, charsmax(szMsg), "%L", id, "SETTINGSMENU_OPT_MKEY_OPEN_MENU"); @@ -295,6 +305,9 @@ stock settingsMenu(id, page = 0) { menu_additem(iMenu, szMsg); + addBoolOption(id, iMenu, szMsg, charsmax(szMsg), "SETTINGSMENU_OPT_HIDEWEAPON", g_UserData[id][ud_hideWeapon]); + addBoolOption(id, iMenu, szMsg, charsmax(szMsg), "SETTINGSMENU_OPT_BLOCKCHANGE", g_UserData[id][ud_blockWeaponChange]); + formatex(szMsg, charsmax(szMsg), "%L", id, "BACK"); menu_setprop(iMenu, MPROP_BACKNAME, szMsg); @@ -360,12 +373,16 @@ stock settingsMenu(id, page = 0) { set_option_cell(id, g_Options[optBoolBlockRadio], g_UserData[id][ud_blockRadio]); } case 10: { + g_UserData[id][ud_mkeyBehavior] = (g_UserData[id][ud_mkeyBehavior] + 1) % 2; + set_option_cell(id, g_Options[optIntMkeyBehavior], g_UserData[id][ud_mkeyBehavior]); + } + case 11: { g_UserData[id][ud_hideWeapon] = !g_UserData[id][ud_hideWeapon]; set_option_cell(id, g_Options[optBoolHideWeapon], g_UserData[id][ud_hideWeapon]); } - case 11: { - g_UserData[id][ud_mkeyBehavior] = (g_UserData[id][ud_mkeyBehavior] + 1) % 2; - set_option_cell(id, g_Options[optIntMkeyBehavior], g_UserData[id][ud_mkeyBehavior]); + case 12: { + g_UserData[id][ud_blockWeaponChange] = !g_UserData[id][ud_blockWeaponChange]; + set_option_cell(id, g_Options[optBoolBlockWeaponChange], g_UserData[id][ud_blockWeaponChange]); } } diff --git a/src/scripts/kreedz/kz_weapons.sma b/src/scripts/kreedz/kz_weapons.sma index ce84fdf..0879319 100644 --- a/src/scripts/kreedz/kz_weapons.sma +++ b/src/scripts/kreedz/kz_weapons.sma @@ -16,6 +16,7 @@ #include #include +#include #define PLUGIN "[Kreedz] Weapons" #define VERSION __DATE__ @@ -24,10 +25,17 @@ enum _:UserData { ud_MinRank, bool:ud_ResetMaxSpeedHookDisabled, + bool:ud_blockWeaponChange, }; new g_UserData[MAX_PLAYERS + 1][UserData]; +enum OptionsEnum { + optBoolBlockWeaponChange, +}; + +new g_Options[OptionsEnum]; + public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); @@ -60,6 +68,8 @@ public plugin_init() { RegisterHookChain(RG_CBasePlayer_ResetMaxSpeed, "HookResetMaxSpeed", 1); RegisterHam(Ham_Spawn, "player", "ham_Spawn_Post", 1); + + bindOptions(); } public plugin_precache() { @@ -68,6 +78,16 @@ public plugin_precache() { } } +bindOptions() { + g_Options[optBoolBlockWeaponChange] = find_option_by_name("block_weapon_change"); +} + +public OnCellValueChanged(id, optionId, newValue) { + if (optionId == g_Options[optBoolBlockWeaponChange]) { + g_UserData[id][ud_blockWeaponChange] = !!newValue; + } +} + /** * ------------------------------------------------------------------ * Natives section @@ -253,6 +273,9 @@ public ham_Other_CanHolster(iEnt) { if (id < 1 || id > MaxClients || !is_user_alive(id)) return HAM_IGNORED; + if (!g_UserData[id][ud_blockWeaponChange]) + return HAM_IGNORED; + if (kz_get_timer_state(id) == TIMER_ENABLED) { SetHamReturnInteger(0); return HAM_SUPERCEDE;