From 996901a67d4b92885998d240fadbaf9af561e77c Mon Sep 17 00:00:00 2001 From: deidara Date: Fri, 1 May 2026 19:22:04 +0300 Subject: [PATCH] =?UTF-8?q?v1.3.4:=20=D1=84=D0=B8=D0=BA=D1=81=20=D0=BC?= =?UTF-8?q?=D0=BE=D0=B4=D0=B5=D0=BB=D0=B5=D0=B9=20=D0=BF=D0=BE=D1=81=D0=BB?= =?UTF-8?q?=D0=B5=201vAll=20(ChangeClientTeam=20=D0=B2=D0=BC=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=BE=20CS=5FSwitchTeam)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CS_SwitchTeam меняет только флаг команды, не обновляя модель игрока. В результате после 1vAll игрок с CT-моделью оставался в ней на T-команде. ChangeClientTeam триггерит death+respawn — игра выдаёт правильную модель. --- README.md | 4 +++- scripting/ArcaneGame_CustomRounds_Core.sp | 17 +++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 6624994..7530701 100644 --- a/README.md +++ b/README.md @@ -97,10 +97,12 @@ addons/sourcemod/logs/custom_rounds.log ## Версия -`1.3.3` — Автор: deidara.dev +`1.3.4` — Автор: deidara.dev ### Changelog +- **1.3.4** + - Фикс: после 1vAll-раунда модели игроков теперь корректно меняются под их восстановленную команду. Раньше игрок с CT-моделью оставался в этой модели даже после возврата в команду T (и наоборот), потому что `CS_SwitchTeam` не обновляет модель. Теперь используется `ChangeClientTeam` — он триггерит правильный death+respawn → игра выдаёт модель для новой команды. - **1.3.3** - Префикс изменён с `[ArcaneGame CR]` (зелёный) на `[CUSTOM ROUNDS]` (жёлтый, цветовой код `\x09`) - **1.3.2** diff --git a/scripting/ArcaneGame_CustomRounds_Core.sp b/scripting/ArcaneGame_CustomRounds_Core.sp index 4538ded..3c36c33 100644 --- a/scripting/ArcaneGame_CustomRounds_Core.sp +++ b/scripting/ArcaneGame_CustomRounds_Core.sp @@ -33,7 +33,7 @@ public Plugin myinfo = name = "ArcaneGame Custom Rounds Core", author = "deidara.dev", description = "Core plugin for custom rounds with AG Coin integration", - version = "1.3.3", + version = "1.3.4", url = "https://deidara.dev" }; @@ -619,8 +619,10 @@ public void Event_RoundStart(Event event, const char[] name, bool dontBroadcast) ResetAllPlayerStats(); // Восстанавливаем команды после предыдущего 1vAll - // CS_SwitchTeam меняем сразу (чтобы спавн использовал нужную команду), - // а телепорт делаем через таймер после того как игроки заспавнились + // ChangeClientTeam (а не CS_SwitchTeam) обязателен, иначе у игроков остаётся старая + // модель (CT-модель на T-команде и наоборот). ChangeClientTeam вызывает death+respawn + // что обновляет модель. На этом этапе игроки ещё не заспавнились — death side-effect + // безобиден. if (g_PendingTeamRestore) { for (int i = 1; i <= MaxClients; i++) @@ -632,12 +634,11 @@ public void Event_RoundStart(Event event, const char[] name, bool dontBroadcast) if (g_OriginalTeam[i] >= CS_TEAM_T && GetClientTeam(i) != g_OriginalTeam[i]) { - CS_SwitchTeam(i, g_OriginalTeam[i]); + ChangeClientTeam(i, g_OriginalTeam[i]); } } - // Через 0.4с телепортируем всех на спавны их исходных команд - // (к этому моменту CSGO уже отработает игровой спавн) + // Через 0.4с телепортируем всех на спавны их исходных команд (safety net) CreateTimer(0.4, Timer_FinalTeamRestore, _, TIMER_FLAG_NO_MAPCHANGE); } @@ -987,10 +988,10 @@ public Action Timer_FinalTeamRestore(Handle timer) continue; } - // Дополнительная проверка команды + // Если по какой-то причине команда всё ещё неправильная — ChangeClientTeam (с обновлением модели) if (GetClientTeam(i) != g_OriginalTeam[i]) { - CS_SwitchTeam(i, g_OriginalTeam[i]); + ChangeClientTeam(i, g_OriginalTeam[i]); } // Телепортируем на спавн исходной команды если игрок жив