From 6d187eb61d035e1c8c27f42759cadbb90810fa3d Mon Sep 17 00:00:00 2001 From: WessTorn Date: Tue, 27 Jun 2023 19:45:55 +0300 Subject: [PATCH] bug fixed --- README.md | 12 ++++--- README_ENG.md | 5 ++- data/lang/hidenseek.txt | 37 +++++++++++++++----- hns_lash_grenade.sma | 2 +- hns_main.sma | 73 ++++++++++++++++++--------------------- hns_specback.sma | 6 ++++ include/hns_mode_main.inc | 4 +-- 7 files changed, 81 insertions(+), 58 deletions(-) diff --git a/README.md b/README.md index d7ae3bd..52b3948 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Hide'N'Seek мод для Counter-Strike 1.6 и доп. плагины к мод - Автоматический свап команд в случае неоднократной победы команды ТТ. - Гибкая настройка кварами и lang файл. - Кастомная пикалка (+USE) у команды ТТ и свист раз в 15 секунд. -- Возможность добовлять и связывать дополнительные плагины для основного плагина. +- Возможность добавлять и связывать дополнительные плагины для основного плагина. ## Описание @@ -33,19 +33,23 @@ Hide'N'Seek - По большей части догонялки. Команда | hns_he | 0 | Кол-во HE гранат у команды ТТ | | hns_flash | 2 | Кол-во Flash гранат у команды ТТ | | hns_smoke | 1 | Кол-во Smoke гранат у команды ТТ | -| hns_swap_team | 2 | Кол-во выйграных раундов подряд команды ТТ после которого поменять команды местами | +| hns_swap_team | 2 | Кол-во выигранных раундов подряд команды ТТ после которого поменять команды местами | | hns_swist | 1 | Свист (+USE) у команды ТТ `1` Включить / `0` Отключить | -| hns_prefix | HNS | Префикс сообений в чате | +| hns_prefix | HNS | Префикс сообщений в чате | ## Плагины -- hns_main.sma - Основной плагин мода +- hns_main.sma - Основной плагин мода. +- hns_hideknife.sma - Позволяет спрятать нож. +- hns_specback.sma - Переходить за наблюдателей и обратно (/spec /back). +- hns_lash_grenade.sma - Последнему живому террористу выдает гранаты. ## Установка 1. Скомпилируйте плагин. 2. Скопируйте скомпилированный файл `.amxx` в директорию: `amxmodx/plugins/`. + 3. Скопируйте содержимое папки и саму папку `cstrike/sound/openhns` в директорию: `cstrike/sound/` на вашем сервере. 4. Скопируйте содержимое папки `data/lang/` в директорию: `amxmodx/data/lang/` на вашем сервере. diff --git a/README_ENG.md b/README_ENG.md index bd4a19d..20c21ee 100644 --- a/README_ENG.md +++ b/README_ENG.md @@ -37,7 +37,10 @@ Hide'N'Seek - For the most part a catch-up game. The CT team catches up with the ## Plugins -- hns_main.sma - Main plugin of the mod +- hns_main.sma - The main plugin of the mod. +- hns_hideknife.sma - Allows you to hide the knife. +- hns_specback.sma - Goes behind observers and back (/spec /back). +- hns_lash_grenade.sma - The last living terrorist gives grenades. ## installation diff --git a/data/lang/hidenseek.txt b/data/lang/hidenseek.txt index 6890753..be89853 100644 --- a/data/lang/hidenseek.txt +++ b/data/lang/hidenseek.txt @@ -1,10 +1,29 @@ -"%L", id, "" -"%L", 0, "" +[en] -MAIN_TRANSFER_TT = [^3%s^1] %n перенесли за ^3КТ^1. -MAIN_TRANSFER_CT = [^3%s^1] %n перенесли за ^3Террористов^1. -MAIN_SWAP = [^3%s^1] Команда TT Выйграла %d раунда! Автоматический свап. -MAIN_SWIST = [^3%s^1] %n свистнул. +MAIN_TRANSFER_TT = [^3%s^1] ^3%n^1 transferred for ^3CT^1. +MAIN_TRANSFER_CT = [^3%s^1] ^3%n^1 transferred for ^3Terrorists^1. +MAIN_SWAP = [^3%s^1] Team TT Won ^3%d^1 rounds! Automatic Swap. +MAIN_SWIST = [^3%s^1] ^3%n^1 whistle. +MAIN_KILL_NOT = [^3%s^1] Not available for DM mode. +MAIN_KILL_WAIT = [^3%s^1] Not available at the beginning of the round. +MAIN_KILL = [^3%s^1] ^3%n^1 killed himself. + +LAST_NEED = \r Need grenades? +LAST_SET = [^3%s^1] ^3%n^1 Took the last grenades. + +KNIFE_HIDE = Hide knife +KNIFE_CT = Hide for \yCT \r%s +KNIFE_TT = Hide for \yTT \r%s + +HNS_YES = Yes +HNS_NO = No + +[ru] + +MAIN_TRANSFER_TT = [^3%s^1] ^3%n^1 перенесли за ^3КТ^1. +MAIN_TRANSFER_CT = [^3%s^1] ^3%n^1 перенесли за ^3Террористов^1. +MAIN_SWAP = [^3%s^1] Команда TT Выйграла ^3%d^1 раунда! Автоматический свап. +MAIN_SWIST = [^3%s^1] ^3%n^1 свистнул. MAIN_KILL_NOT = [^3%s^1] Не доступно для режима ДМ. MAIN_KILL_WAIT = [^3%s^1] Не доступно в начале раунда. MAIN_KILL = [^3%s^1] ^3%n^1 убил сам себя. @@ -12,9 +31,9 @@ MAIN_KILL = [^3%s^1] ^3%n^1 убил сам себя. LAST_NEED = \rНужны гранаты? LAST_SET = [^3%s^1] ^3%n^1 Взял последние гранаты. -KNIFE_HIDE = Hide knife -KNIFE_CT = Hide for \yCT \r%s -KNIFE_TT = Hide for \yTT \r%s +KNIFE_HIDE = Спрятать нож +KNIFE_CT = Спрятать у \yКТ \r%s +KNIFE_TT = Спрятать у \yТТ \r%s HNS_YES = Да HNS_NO = Нет \ No newline at end of file diff --git a/hns_lash_grenade.sma b/hns_lash_grenade.sma index cc418c9..d15472c 100644 --- a/hns_lash_grenade.sma +++ b/hns_lash_grenade.sma @@ -26,7 +26,7 @@ public rgRoundStart() { } public rgPlayerKilled(victim, attacker) { - if (rg_get_user_team(victim) != TEAM_TERRORIST || g_bLastFlash) + if (is_deathmatch() || rg_get_user_team(victim) != TEAM_TERRORIST || g_bLastFlash) return HC_CONTINUE; new iPlayers[MAX_PLAYERS], iNum; diff --git a/hns_main.sma b/hns_main.sma index 0480dea..61dea0d 100644 --- a/hns_main.sma +++ b/hns_main.sma @@ -5,12 +5,8 @@ #define rg_get_user_team(%0) get_member(%0, m_iTeam) -enum HNS_MODE { - hns_public = 0, - hns_deathmatch -} -new HNS_MODE:g_eHnsMode; +new bool:g_isDeathMatch; enum HNS_CVAR { c_iDeathMatch, @@ -106,7 +102,7 @@ public plugin_precache() { public plugin_natives() { register_native("hns_get_prefix", "native_get_prefix"); - register_native("hns_get_mode", "native_get_mode"); + register_native("is_deathmatch", "native_is_deathmatch"); register_native("hns_set_mode", "native_set_mode"); } @@ -117,14 +113,14 @@ public native_get_prefix(amxx, params) { set_string(arg_prefix, g_pCvar[c_szPrefix], get_param(arg_len)); } -public HNS_MODE:native_get_mode(amxx, params) { - return g_eHnsMode; +public native_is_deathmatch(amxx, params) { + return g_isDeathMatch; } public native_set_mode(amxx, params) { - enum { mode = 0 }; + enum { bool:isDM = false }; - hns_set_mode(HNS_MODE:get_param(mode)); + hns_set_mode(isDM); } public delayed_mode() { @@ -135,9 +131,9 @@ public delayed_mode() { set_cvar_string("sv_alltalk", "1"); if (g_pCvar[c_iDeathMatch]) { - hns_set_mode(hns_deathmatch); + hns_set_mode(true); } else { - hns_set_mode(hns_public); + hns_set_mode(false); } } @@ -162,14 +158,14 @@ public rgPlayerResetMaxSpeed(id) { public rgPlayerSpawn(id) { setUserRole(id); - if (g_eHnsMode == hns_deathmatch) + if (g_isDeathMatch) checkBalanceTeams(); } public checkBalanceTeams() { new iPlayers[MAX_PLAYERS], iCTNum, iTTNum - get_players(iPlayers, iCTNum, "che", "CT"); - get_players(iPlayers, iTTNum, "che", "TERRORIST"); + get_players(iPlayers, iCTNum, "he", "CT"); + get_players(iPlayers, iTTNum, "he", "TERRORIST"); if (abs(iCTNum - iTTNum) < 2) return PLUGIN_HANDLED; @@ -177,15 +173,14 @@ public checkBalanceTeams() { if (iCTNum > iTTNum) { new iPlayer = getRandomAlivePlayer(TEAM_CT); if (iPlayer) { - rg_set_user_team(iPlayer, TEAM_CT); + rg_set_user_team(iPlayer, TEAM_TERRORIST); setUserRole(iPlayer); - client_print_color(0, print_team_blue, "%L", 0, "MAIN_TRANSFER_CT", g_pCvar[c_szPrefix], iPlayer); } } else { new iPlayer = getRandomAlivePlayer(TEAM_TERRORIST); if (iPlayer) { - rg_set_user_team(iPlayer, TEAM_TERRORIST); + rg_set_user_team(iPlayer, TEAM_CT); setUserRole(iPlayer); client_print_color(0, print_team_blue, "%L", 0, "MAIN_TRANSFER_TT", g_pCvar[c_szPrefix], iPlayer); @@ -196,7 +191,7 @@ public checkBalanceTeams() { } public rgPlayerKilled(victim, attacker) { - if (g_eHnsMode == hns_deathmatch) + if (!g_isDeathMatch) return HC_CONTINUE; if (attacker == 0 || !is_user_connected(attacker)) { @@ -332,7 +327,7 @@ public fwdEmitSound(id, iChannel, szSample[], Float:volume, Float:attenuation, f } public fwdClientKill(id) { - if (g_eHnsMode == hns_deathmatch) { + if (g_isDeathMatch) { client_print_color(id, print_team_blue, "%L", id, "MAIN_KILL_NOT", g_pCvar[c_szPrefix]); return FMRES_SUPERCEDE; } else if (rg_get_remaining_time() > 60.0) { @@ -398,26 +393,24 @@ stock Float:rg_get_remaining_time() { return (float(get_member_game(m_iRoundTimeSecs)) - get_gametime() + Float:get_member_game(m_fRoundStartTimeReal)); } -public hns_set_mode(HNS_MODE:eMode) { - g_eHnsMode = eMode; +public hns_set_mode(isDM) { + g_isDeathMatch = isDM ? true : false; - switch (eMode) { - case hns_public: { - set_cvar_string("mp_freezetime", "0"); - set_cvar_string("mp_roundtime", "0"); - set_cvar_string("mp_roundrespawn_time", "-1"); - set_cvar_string("mp_round_infinite", "1"); + if (isDM) { + set_cvar_string("mp_freezetime", "0"); + set_cvar_string("mp_roundtime", "0"); + set_cvar_string("mp_roundrespawn_time", "-1"); + set_cvar_string("mp_round_infinite", "1"); - set_pcvar_num(g_pCvar[c_iDeathMatch], 0); - } - case hns_deathmatch: { - set_cvar_string("mp_freezetime", "5"); - set_cvar_string("mp_roundtime", "2.5"); - set_cvar_string("mp_roundrespawn_time", "20"); - set_cvar_string("mp_round_infinite", "0"); + set_cvar_string("hns_deathmatch", "1"); // Переделать + } else { + set_cvar_string("mp_freezetime", "5"); + set_cvar_string("mp_roundtime", "2.5"); + set_cvar_string("mp_roundrespawn_time", "20"); + set_cvar_string("mp_round_infinite", "0"); - set_pcvar_num(g_pCvar[c_iDeathMatch], 1); - } + + set_cvar_string("hns_deathmatch", "0"); // Переделать } set_cvar_string("sv_restart", "1"); @@ -428,13 +421,13 @@ stock getRandomAlivePlayer(TeamName:iTeam) { switch (iTeam) { case TEAM_TERRORIST: { - get_players(iPlayers, iNum, "ache", "TERRORIST"); + get_players(iPlayers, iNum, "ahe", "TERRORIST"); } case TEAM_CT: { - get_players(iPlayers, iNum, "ache", "CT"); + get_players(iPlayers, iNum, "ahe", "CT"); } case TEAM_SPECTATOR: { - get_players(iPlayers, iNum, "ache", "SPECTATOR"); + get_players(iPlayers, iNum, "ahe", "SPECTATOR"); } } diff --git a/hns_specback.sma b/hns_specback.sma index 88946ce..bcf59bc 100644 --- a/hns_specback.sma +++ b/hns_specback.sma @@ -33,6 +33,7 @@ public SpecBack(id) { g_bSpec[id] = false; return; } + g_iTeam[id] = rg_get_user_team(id); TransferToSpec(id); } else { @@ -40,7 +41,12 @@ public SpecBack(id) { g_bSpec[id] = true; return; } + rg_set_user_team(id, g_iTeam[id]); + + if (is_deathmatch()) { + rg_round_respawn(id); + } } } diff --git a/include/hns_mode_main.inc b/include/hns_mode_main.inc index 22a5083..2d1f1c7 100644 --- a/include/hns_mode_main.inc +++ b/include/hns_mode_main.inc @@ -9,11 +9,9 @@ enum HNS_MODE { hns_deathmatch } -new HNS_MODE:g_eHnsMode; - native hns_get_prefix(prefix[], len); -native HNS_MODE:native_get_mode(); +native bool:is_deathmatch(); native hns_set_mode(HNS_MODE:eMode); forward hns_team_swap(); \ No newline at end of file