protected override void OnMsgClientSetTeam(BasePlayer player, GameMsg_ClSetTeam message) { if (!GameController.IsTeamChangeAllowed(player)) { return; } if (player.Team == message.Team) { return; } if (Config["SvSpamprotection"] && player.LastSetTeamTick + Server.TickSpeed * 3 > Server.Tick) { return; } if (message.Team != Team.Spectators && LockTeams || player.TeamChangeTick > Server.Tick) { return; } player.LastSetTeamTick = Server.Tick; if (GameController.CanJoinTeam(player, message.Team) && GameController.CanChangeTeam(player, message.Team)) { player.SetTeam(message.Team); } }
protected virtual void OnMsgSetTeam(BasePlayer player, GameMsg_ClSetTeam msg) { if (msg.Team < Team.SPECTATORS || msg.Team > Team.BLUE) { return; } if (World.IsPaused || player.Team == msg.Team || Config["SvSpamprotection"] && player.LastSetTeam + Server.TickSpeed * 3 > Server.Tick) { return; } if (msg.Team != Team.SPECTATORS && LockTeams) { player.LastSetTeam = Server.Tick; SendBroadcast(player.ClientId, "Teams are locked"); return; } if (player.TeamChangeTick > Server.Tick) { player.LastSetTeam = Server.Tick; var timeLeft = (player.TeamChangeTick - Server.Tick) / Server.TickSpeed; SendBroadcast(player.ClientId, $"Time to wait before changing team: {timeLeft/60}:{timeLeft%60}"); return; } if (GameController.CanJoinTeam(player.ClientId, msg.Team)) { if (!GameController.CanChangeTeam(player, msg.Team)) { return; } player.LastSetTeam = Server.Tick; player.TeamChangeTick = Server.Tick; player.SetTeam(msg.Team); GameController.CheckTeamBalance(); if (player.Team == Team.SPECTATORS || msg.Team == Team.SPECTATORS) { // vote update } } else { SendBroadcast(player.ClientId, $"Only {Players.Length - Config["SvSpectatorSlots"]}active players are allowed"); } }
protected abstract void OnMsgClientSetTeam(BasePlayer player, GameMsg_ClSetTeam message);