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]); } // Телепортируем на спавн исходной команды если игрок жив