From 5b70c4860d349d193c39cf11ede5b6895b177530 Mon Sep 17 00:00:00 2001 From: d3m37r4 Date: Sat, 9 Dec 2023 18:35:49 +0700 Subject: [PATCH 1/5] Expansion of warmup functionality. Added new mode 'All Weapons'. Minor changes. --- .../addons/amxmodx/configs/regg/regg-main.cfg | 6 + .../addons/amxmodx/scripting/regg_warmup.sma | 180 ++++++++++++++++-- 2 files changed, 165 insertions(+), 21 deletions(-) diff --git a/cstrike/addons/amxmodx/configs/regg/regg-main.cfg b/cstrike/addons/amxmodx/configs/regg/regg-main.cfg index 9676f67..1487f99 100644 --- a/cstrike/addons/amxmodx/configs/regg/regg-main.cfg +++ b/cstrike/addons/amxmodx/configs/regg/regg-main.cfg @@ -44,6 +44,12 @@ regg_free_armor 0 // Время разминки в секундах regg_warmup_time "60" +// Тип разминки +// 0 - Всё оружие +// 1 - Только ножи +// +regg_warmup_type "1" + // Удалять объекты на карте, заложники, зона закупки и т.д regg_block_map_conditions "1" diff --git a/cstrike/addons/amxmodx/scripting/regg_warmup.sma b/cstrike/addons/amxmodx/scripting/regg_warmup.sma index 8d13e5b..d94de05 100644 --- a/cstrike/addons/amxmodx/scripting/regg_warmup.sma +++ b/cstrike/addons/amxmodx/scripting/regg_warmup.sma @@ -10,7 +10,21 @@ enum _:game_cvars_s { Float:GCForceRespawn, GCTimelimit, GCFraglimit, + GCGivePlayerC4, GCWeaponsAllowMapPlaced, + GCTDefaultGrenades[32], + GCTDefaultWeaponsSecondary[32], + GCTDefaultWeaponsPrimary[32], + GCCTDefaultGrenades[32], + GCTGivePlayerKnife, + GCCTGivePlayerKnife, + GCCTDefaultWeaponsSecondary[32], + GCCTDefaultWeaponsPrimary[32], + GCRefillBpammoWeapons, + GCStartMoney, + GCBuyAnywhere, + Float:GCBuyTime, + GCItemStaytime, }; new GameCvars[game_cvars_s]; @@ -47,24 +61,40 @@ enum state_s { StateDisable, }; +enum warmuptype_s { + WarmupTypeAllWeapons, + WarmupTypeOnlyKnife, +}; +new warmuptype_s:WarmupType; + +enum costtype_s { + CostTypeWeapon, + CostTypeClip, +}; +new WeaponIdType:DefaultWeaponCost[WeaponIdType][costtype_s]; + new ReGG_Mode:Mode = ReGG_ModeNone; new WarmupTime; new SyncHud; new bool:DebugMode; -#define getLangKey(%0) fmt("%l", %0) - public plugin_init() { register_plugin("[ReGG] WarmUp", REGG_VERSION_STR, "Jumper & d3m37r4"); registerHooks(); toggleHooks(StateDisable); + getDefaultWeaponCost(); bind_pcvar_num(create_cvar( "regg_warmup_time", "60", .has_min = true, .min_val = 0.0 ), WarmupTime); + bind_pcvar_num(create_cvar( + "regg_warmup_type", "1", + .has_min = true, .min_val = 0.0, + .has_max = true, .max_val = 1.0 + ), WarmupType); SyncHud = CreateHudSyncObj(); DebugMode = bool:(plugin_flags() & AMX_FLAG_DEBUG); @@ -78,6 +108,7 @@ public plugin_pause() { restoreGameCvars(); toggleHooks(StateDisable); + (WarmupType == WarmupTypeAllWeapons) && makeAllWeaponsFree(.make_free = true); Status = StatusNone; } @@ -98,15 +129,6 @@ public ReGG_StartPre(const ReGG_Mode:mode) { return PLUGIN_HANDLED; } -public CBasePlayer_HasRestrictItem_Pre(const id, const ItemID:item, const ItemRestType:type) { - if(item == ITEM_KNIFE) { - return HC_CONTINUE; - } - - SetHookChainReturn(ATYPE_BOOL, true); - return HC_SUPERCEDE; -} - public CBasePlayer_Spawn_Post(const id) { if(!is_user_alive(id)) { return HC_CONTINUE; @@ -149,13 +171,14 @@ public startWarmUp() { changeGameCvars(); toggleHooks(StateEnable); + (WarmupType == WarmupTypeAllWeapons) && makeAllWeaponsFree(.make_free = true); set_member_game(m_bCompleteReset, false); rg_round_end( .tmDelay = 0.0, .st = WINSTATUS_DRAW, .event = ROUND_GAME_COMMENCE, - .message = _replace_string_ex(getLangKey("REGG_WARMUP_START"), "$n", "^r", true), + .message = "", .sentence = "", .trigger = true ); @@ -172,6 +195,7 @@ public stopWarmUp() { restoreGameCvars(); toggleHooks(StateDisable); + (WarmupType == WarmupTypeAllWeapons) && makeAllWeaponsFree(.make_free = false); for(new player = 1; player <= MaxClients; player++) { if(!is_user_alive(player)) { @@ -189,7 +213,6 @@ public stopWarmUp() { } registerHooks() { - Hooks[HookHasRestrictItem] = RegisterHookChain(RG_CBasePlayer_HasRestrictItem, "CBasePlayer_HasRestrictItem_Pre", false); Hooks[HookPlayerSpawn] = RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn_Post", true); Hooks[HookPlayerKilled] = RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed_Post", true); Hooks[HookRoundEnd] = RegisterHookChain(RG_RoundEnd, "RoundEnd_Pre", false); @@ -226,9 +249,69 @@ changeGameCvars() { GameCvars[GCFraglimit] = get_pcvar_num(pcvar); set_pcvar_num(pcvar, 0); + pcvar = get_cvar_pointer("mp_give_player_c4"); + GameCvars[GCGivePlayerC4] = get_pcvar_num(pcvar); + set_pcvar_num(pcvar, 0); + pcvar = get_cvar_pointer("mp_weapons_allow_map_placed"); GameCvars[GCWeaponsAllowMapPlaced] = get_pcvar_num(pcvar); set_pcvar_num(pcvar, 0); + + if(WarmupType == WarmupTypeOnlyKnife) { + pcvar = get_cvar_pointer("mp_t_default_grenades"); + get_pcvar_string(pcvar, GameCvars[GCTDefaultGrenades], charsmax(GameCvars[GCTDefaultGrenades])); + set_pcvar_string(pcvar, ""); + + pcvar = get_cvar_pointer("mp_t_default_weapons_secondary"); + get_pcvar_string(pcvar, GameCvars[GCTDefaultWeaponsSecondary], charsmax(GameCvars[GCTDefaultWeaponsSecondary])); + set_pcvar_string(pcvar, ""); + + pcvar = get_cvar_pointer("mp_t_default_weapons_primary"); + get_pcvar_string(pcvar, GameCvars[GCTDefaultWeaponsPrimary], charsmax(GameCvars[GCTDefaultWeaponsPrimary])); + set_pcvar_string(pcvar, ""); + + pcvar = get_cvar_pointer("mp_ct_default_grenades"); + get_pcvar_string(pcvar, GameCvars[GCCTDefaultGrenades], charsmax(GameCvars[GCCTDefaultGrenades])); + set_pcvar_string(pcvar, ""); + + pcvar = get_cvar_pointer("mp_ct_default_weapons_secondary"); + get_pcvar_string(pcvar, GameCvars[GCCTDefaultWeaponsSecondary], charsmax(GameCvars[GCCTDefaultWeaponsSecondary])); + set_pcvar_string(pcvar, ""); + + pcvar = get_cvar_pointer("mp_ct_default_weapons_primary"); + get_pcvar_string(pcvar, GameCvars[GCCTDefaultWeaponsPrimary], charsmax(GameCvars[GCCTDefaultWeaponsPrimary])); + set_pcvar_string(pcvar, ""); + } + + pcvar = get_cvar_pointer("mp_t_give_player_knife"); + GameCvars[GCTGivePlayerKnife] = get_pcvar_num(pcvar); + set_pcvar_num(pcvar, 1); + + pcvar = get_cvar_pointer("mp_ct_give_player_knife"); + GameCvars[GCCTGivePlayerKnife] = get_pcvar_num(pcvar); + set_pcvar_num(pcvar, 1); + + if(WarmupType == WarmupTypeAllWeapons) { + pcvar = get_cvar_pointer("mp_refill_bpammo_weapons"); + GameCvars[GCRefillBpammoWeapons] = get_pcvar_num(pcvar); + set_pcvar_num(pcvar, 3); + + pcvar = get_cvar_pointer("mp_startmoney"); + GameCvars[GCStartMoney] = get_pcvar_num(pcvar); + set_pcvar_num(pcvar, 999999); // We set maximum possible value, it will still be trimmed taking into account 'mp_maxmoney'. + + pcvar = get_cvar_pointer("mp_buy_anywhere"); + GameCvars[GCBuyAnywhere] = get_pcvar_num(pcvar); + set_pcvar_num(pcvar, 1); + } + + pcvar = get_cvar_pointer("mp_buytime"); + GameCvars[GCBuyTime] = get_pcvar_float(pcvar); + set_pcvar_float(pcvar, WarmupType == WarmupTypeOnlyKnife ? 0.0 : -1.0); + + pcvar = get_cvar_pointer("mp_item_staytime"); + GameCvars[GCItemStaytime] = get_pcvar_num(pcvar); + set_pcvar_num(pcvar, 0); } restoreGameCvars() { @@ -249,16 +332,71 @@ restoreGameCvars() { pcvar = get_cvar_pointer("mp_fraglimit"); set_pcvar_num(pcvar, GameCvars[GCFraglimit]); + pcvar = get_cvar_pointer("mp_give_player_c4"); + set_pcvar_num(pcvar, GameCvars[GCGivePlayerC4]); + pcvar = get_cvar_pointer("mp_weapons_allow_map_placed"); set_pcvar_num(pcvar, GameCvars[GCWeaponsAllowMapPlaced]); -} -// https://github.com/d3m37r4/AMXX_Plugins/blob/aecab54d525389c0cc9cc274ff87a518b9369521/Simple_WarmUp_Mode/simple_warmup_mode.sma#L514 -stock _replace_string_ex(const _buffer[], const _search[], const _string[], bool:_caseSensitive = true) { - new buffer[MAX_FMT_LENGTH]; + if(WarmupType == WarmupTypeOnlyKnife) { + pcvar = get_cvar_pointer("mp_t_default_grenades"); + set_pcvar_string(pcvar, GameCvars[GCTDefaultGrenades]); + + pcvar = get_cvar_pointer("mp_t_default_weapons_secondary"); + set_pcvar_string(pcvar, GameCvars[GCTDefaultWeaponsSecondary]); + + pcvar = get_cvar_pointer("mp_t_default_weapons_primary"); + set_pcvar_string(pcvar, GameCvars[GCTDefaultWeaponsPrimary]); + + pcvar = get_cvar_pointer("mp_ct_default_grenades"); + set_pcvar_string(pcvar, GameCvars[GCCTDefaultGrenades]); + + pcvar = get_cvar_pointer("mp_ct_default_weapons_secondary"); + set_pcvar_string(pcvar, GameCvars[GCCTDefaultWeaponsSecondary]); + + pcvar = get_cvar_pointer("mp_ct_default_weapons_primary"); + set_pcvar_string(pcvar, GameCvars[GCCTDefaultWeaponsPrimary]); + } + + pcvar = get_cvar_pointer("mp_t_give_player_knife"); + set_pcvar_num(pcvar, GameCvars[GCTGivePlayerKnife]); + + pcvar = get_cvar_pointer("mp_ct_give_player_knife"); + set_pcvar_num(pcvar, GameCvars[GCCTGivePlayerKnife]); - formatex(buffer, charsmax(buffer), _buffer); - replace_string(buffer, charsmax(buffer), _search, _string, _caseSensitive); + if(WarmupType == WarmupTypeAllWeapons) { + pcvar = get_cvar_pointer("mp_refill_bpammo_weapons"); + set_pcvar_num(pcvar, GameCvars[GCRefillBpammoWeapons]); - return buffer; -} \ No newline at end of file + pcvar = get_cvar_pointer("mp_startmoney"); + set_pcvar_num(pcvar, GameCvars[GCStartMoney]); + + pcvar = get_cvar_pointer("mp_buy_anywhere"); + set_pcvar_num(pcvar, GameCvars[GCBuyAnywhere]); + } + + pcvar = get_cvar_pointer("mp_buytime"); + set_pcvar_float(pcvar, GameCvars[GCBuyTime]); + + pcvar = get_cvar_pointer("mp_item_staytime"); + set_pcvar_num(pcvar, GameCvars[GCItemStaytime]); +} + +getDefaultWeaponCost() { + for(new WeaponIdType:weapon = WEAPON_P228; weapon <= WEAPON_P90; weapon++) { + if(weapon != WEAPON_C4 && weapon != WEAPON_KNIFE) { + DefaultWeaponCost[weapon][CostTypeWeapon] = rg_get_weapon_info(weapon, WI_COST); + DefaultWeaponCost[weapon][CostTypeClip] = rg_get_weapon_info(weapon, WI_CLIP_COST); + } + } +} + +// Алексеич (https://dev-cs.ru/members/3/) would have thought that we were talking about French fries *kappa* +makeAllWeaponsFree(bool:make_free = true) { + for(new WeaponIdType:weapon = WEAPON_P228; weapon <= WEAPON_P90; weapon++) { + if(weapon != WEAPON_C4 && weapon != WEAPON_KNIFE) { + rg_set_weapon_info(weapon, WI_COST, make_free ? 0 : DefaultWeaponCost[weapon][CostTypeWeapon]); + rg_set_weapon_info(weapon, WI_CLIP_COST, make_free ? 0 : DefaultWeaponCost[weapon][CostTypeClip]); + } + } +} From f410c6df813d0f981fffffd85ff8ecadd134749a Mon Sep 17 00:00:00 2001 From: d3m37r4 Date: Sat, 9 Dec 2023 19:49:21 +0700 Subject: [PATCH 2/5] Added support for maps with various scenarios. Minor bug fixes. --- .../addons/amxmodx/scripting/regg_warmup.sma | 120 +++++++++++++++++- 1 file changed, 118 insertions(+), 2 deletions(-) diff --git a/cstrike/addons/amxmodx/scripting/regg_warmup.sma b/cstrike/addons/amxmodx/scripting/regg_warmup.sma index d94de05..ee20d72 100644 --- a/cstrike/addons/amxmodx/scripting/regg_warmup.sma +++ b/cstrike/addons/amxmodx/scripting/regg_warmup.sma @@ -25,11 +25,12 @@ enum _:game_cvars_s { GCBuyAnywhere, Float:GCBuyTime, GCItemStaytime, + GCRoundOver, }; new GameCvars[game_cvars_s]; enum _:hook_s { - HookChain:HookHasRestrictItem, + HookChain:HookCleanUpMap, HookChain:HookPlayerSpawn, HookChain:HookPlayerKilled, HookChain:HookRoundEnd, @@ -73,6 +74,9 @@ enum costtype_s { }; new WeaponIdType:DefaultWeaponCost[WeaponIdType][costtype_s]; +new bool:MapHasBombTarget, bool:MapHasBombZone, bool:MapHasRescueZone, bool:MapHasBuyZone, bool:MapHasEscapeZone, bool:MapHasVIPSafetyZone; +new bool:CTCantBuy, bool:TCantBuy; + new ReGG_Mode:Mode = ReGG_ModeNone; new WarmupTime; new SyncHud; @@ -129,6 +133,12 @@ public ReGG_StartPre(const ReGG_Mode:mode) { return PLUGIN_HANDLED; } +public CSGameRules_CleanUpMap_Post() { + changeMembersGameData(); + removeHostageEntities(); + removeTargetNameEntities(); +} + public CBasePlayer_Spawn_Post(const id) { if(!is_user_alive(id)) { return HC_CONTINUE; @@ -196,6 +206,9 @@ public stopWarmUp() { restoreGameCvars(); toggleHooks(StateDisable); (WarmupType == WarmupTypeAllWeapons) && makeAllWeaponsFree(.make_free = false); + restoreMembersGameData(); + restoreHostageEntities(); + restoreTargetNameEntities(); for(new player = 1; player <= MaxClients; player++) { if(!is_user_alive(player)) { @@ -213,6 +226,7 @@ public stopWarmUp() { } registerHooks() { + Hooks[HookCleanUpMap] = RegisterHookChain(RG_CSGameRules_CleanUpMap, "CSGameRules_CleanUpMap_Post", true); Hooks[HookPlayerSpawn] = RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn_Post", true); Hooks[HookPlayerKilled] = RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed_Post", true); Hooks[HookRoundEnd] = RegisterHookChain(RG_RoundEnd, "RoundEnd_Pre", false); @@ -235,7 +249,7 @@ changeGameCvars() { pcvar = get_cvar_pointer("mp_round_infinite"); get_pcvar_string(pcvar, GameCvars[GCRoundInfinite], charsmax(GameCvars[GCRoundInfinite])); - set_pcvar_string(pcvar, "bcdefg"); + set_pcvar_string(pcvar, "bcdefghjk"); pcvar = get_cvar_pointer("mp_forcerespawn"); GameCvars[GCForceRespawn] = get_pcvar_float(pcvar); @@ -312,6 +326,10 @@ changeGameCvars() { pcvar = get_cvar_pointer("mp_item_staytime"); GameCvars[GCItemStaytime] = get_pcvar_num(pcvar); set_pcvar_num(pcvar, 0); + + pcvar = get_cvar_pointer("mp_roundover"); + GameCvars[GCRoundOver] = get_pcvar_num(pcvar); + set_pcvar_num(pcvar, 1); } restoreGameCvars() { @@ -380,6 +398,9 @@ restoreGameCvars() { pcvar = get_cvar_pointer("mp_item_staytime"); set_pcvar_num(pcvar, GameCvars[GCItemStaytime]); + + pcvar = get_cvar_pointer("mp_roundover"); + set_pcvar_num(pcvar, GameCvars[GCRoundOver]); } getDefaultWeaponCost() { @@ -400,3 +421,98 @@ makeAllWeaponsFree(bool:make_free = true) { } } } + +getMembersGameData() { + MapHasBombTarget = get_member_game(m_bMapHasBombTarget); + MapHasBombZone = get_member_game(m_bMapHasBombZone); + MapHasRescueZone = get_member_game(m_bMapHasRescueZone); + MapHasBuyZone = get_member_game(m_bMapHasBuyZone); + MapHasEscapeZone = get_member_game(m_bMapHasEscapeZone); + MapHasVIPSafetyZone = get_member_game(m_bMapHasVIPSafetyZone); + CTCantBuy = get_member_game(m_bCTCantBuy); + TCantBuy = get_member_game(m_bTCantBuy); +} + +changeMembersGameData() { + getMembersGameData(); // Remembered the data before changing + + set_member_game(m_bMapHasBombTarget, false); + set_member_game(m_bMapHasBombZone, false); + set_member_game(m_bMapHasRescueZone, false); + set_member_game(m_bMapHasBuyZone, WarmupType == WarmupTypeAllWeapons ? true : false); + set_member_game(m_bMapHasEscapeZone, false); + set_member_game(m_bMapHasVIPSafetyZone, false); + set_member_game(m_bCTCantBuy, WarmupType != WarmupTypeAllWeapons ? true : false); + set_member_game(m_bTCantBuy, WarmupType != WarmupTypeAllWeapons ? true : false); +} + +restoreMembersGameData() { + set_member_game(m_bMapHasBombTarget, MapHasBombTarget); + set_member_game(m_bMapHasBombZone, MapHasBombZone); + set_member_game(m_bMapHasRescueZone, MapHasRescueZone); + set_member_game(m_bMapHasBuyZone, MapHasBuyZone); + set_member_game(m_bMapHasEscapeZone, MapHasEscapeZone); + set_member_game(m_bMapHasVIPSafetyZone, MapHasVIPSafetyZone); + set_member_game(m_bCTCantBuy, CTCantBuy); + set_member_game(m_bTCantBuy, TCantBuy); +} + +removeHostageEntities() { + new ent; + while((ent = rg_find_ent_by_class(ent, "hostage_entity"))) { + removeEntity(ent); + } + while((ent = rg_find_ent_by_class(ent, "monster_scientist"))) { + removeEntity(ent); + } +} + +restoreHostageEntities() { + new ent; + while((ent = rg_find_ent_by_class(ent, "hostage_entity"))) { + restoreEntity(ent); + } + while((ent = rg_find_ent_by_class(ent, "monster_scientist"))) { + restoreEntity(ent); + } +} + +removeTargetNameEntities() { + new ent; + while((ent = rg_find_ent_by_class(ent, "player_weaponstrip"))) { + set_entvar(ent, var_targetname, "stripper_dummy"); + } + while((ent = rg_find_ent_by_class(ent, "game_player_equip"))) { + set_entvar(ent, var_targetname,"equipment_dummy"); + } +} + +restoreTargetNameEntities() { + new ent; + while((ent = rg_find_ent_by_class(ent, "player_weaponstrip"))) { + set_entvar(ent, var_targetname, "stripper"); + } + while((ent = rg_find_ent_by_class(ent, "game_player_equip"))) { + set_entvar(ent, var_targetname,"equipment"); + } +} + +removeEntity(const entity) { + set_entvar(entity, var_health, 0.0); + set_entvar(entity, var_takedamage, DAMAGE_NO); + set_entvar(entity, var_movetype, MOVETYPE_NONE); + set_entvar(entity, var_deadflag, DEAD_DEAD); + set_entvar(entity, var_effects, get_entvar(entity, var_effects) | EF_NODRAW); + set_entvar(entity, var_solid, SOLID_NOT); + set_entvar(entity, var_nextthink, -1.0); +} + +restoreEntity(const entity) { + set_entvar(entity, var_health, Float:get_entvar(entity, var_max_health)); + set_entvar(entity, var_takedamage, DAMAGE_YES); + set_entvar(entity, var_movetype, MOVETYPE_STEP); + set_entvar(entity, var_deadflag, DEAD_NO); + set_entvar(entity, var_effects, get_entvar(entity, var_effects) & ~EF_NODRAW); + set_entvar(entity, var_solid, SOLID_SLIDEBOX); + set_entvar(entity, var_nextthink, get_gametime() + 0.01); +} \ No newline at end of file From 61800b7966fac5e57b2fecc63fe44787d206218b Mon Sep 17 00:00:00 2001 From: d3m37r4 Date: Sat, 9 Dec 2023 20:00:39 +0700 Subject: [PATCH 3/5] Removed unused language key. --- cstrike/addons/amxmodx/data/lang/regg.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/cstrike/addons/amxmodx/data/lang/regg.txt b/cstrike/addons/amxmodx/data/lang/regg.txt index 7a9f5f2..ea3eaec 100644 --- a/cstrike/addons/amxmodx/data/lang/regg.txt +++ b/cstrike/addons/amxmodx/data/lang/regg.txt @@ -34,7 +34,6 @@ REGG_STEAL_LVL = ^3%n ^1украл уровень у ^4%n REGG_STEAL_POINTS = ^3%n ^1украл ^4%d ^1очка у ^4%n REGG_WARMUP_HUD = Разминочный раунд -REGG_WARMUP_START = Начался разминочный раунд! REGG_WARMUP_END = Разминка завершена!^rПриготовьтесь к бою, игра началась! REGG_VOTE_MENU = Голосование за выбор режима игры: From f1473c9858d9440078b4aa73dc8df5731a2f23c0 Mon Sep 17 00:00:00 2001 From: d3m37r4 Date: Sat, 9 Dec 2023 20:06:09 +0700 Subject: [PATCH 4/5] Removed message about launching mod. Fixed an overlay conflict with end of warmup message. --- cstrike/addons/amxmodx/scripting/regg/functions.inl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/scripting/regg/functions.inl b/cstrike/addons/amxmodx/scripting/regg/functions.inl index 04cff0a..28ce17f 100644 --- a/cstrike/addons/amxmodx/scripting/regg/functions.inl +++ b/cstrike/addons/amxmodx/scripting/regg/functions.inl @@ -28,7 +28,7 @@ bool:start(const ReGG_Mode:mode) { .tmDelay = 3.0, .st = WINSTATUS_DRAW, .event = ROUND_END_DRAW, - .message = "GunGame Mod started!", + .message = "", .sentence = "", .trigger = true ); From 8755dd5de2f161f698216461a557bc6b554247fe Mon Sep 17 00:00:00 2001 From: d3m37r4 Date: Sat, 9 Dec 2023 20:07:59 +0700 Subject: [PATCH 5/5] Fixed line break character. --- cstrike/addons/amxmodx/data/lang/regg.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cstrike/addons/amxmodx/data/lang/regg.txt b/cstrike/addons/amxmodx/data/lang/regg.txt index ea3eaec..36179b3 100644 --- a/cstrike/addons/amxmodx/data/lang/regg.txt +++ b/cstrike/addons/amxmodx/data/lang/regg.txt @@ -34,7 +34,7 @@ REGG_STEAL_LVL = ^3%n ^1украл уровень у ^4%n REGG_STEAL_POINTS = ^3%n ^1украл ^4%d ^1очка у ^4%n REGG_WARMUP_HUD = Разминочный раунд -REGG_WARMUP_END = Разминка завершена!^rПриготовьтесь к бою, игра началась! +REGG_WARMUP_END = Разминка завершена!^nПриготовьтесь к бою, игра началась! REGG_VOTE_MENU = Голосование за выбор режима игры: REGG_MODE_SINGLE = Одиночный