v1.3.4: фикс моделей после 1vAll (ChangeClientTeam вместо CS_SwitchTeam)

CS_SwitchTeam меняет только флаг команды, не обновляя модель игрока.
В результате после 1vAll игрок с CT-моделью оставался в ней на T-команде.
ChangeClientTeam триггерит death+respawn — игра выдаёт правильную модель.
This commit is contained in:
deidara
2026-05-01 19:22:04 +03:00
parent 50d1b72616
commit 996901a67d
2 changed files with 12 additions and 9 deletions
+9 -8
View File
@@ -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]);
}
// Телепортируем на спавн исходной команды если игрок жив