public override void OnTrigger(byte worldId, int playerId, PlayPointID id) { if (IsKing(playerId)) { if (id == PlayPointID.PlayerDeath) { GameMode gameMode = World.Instance(worldId).GameMode; Team team = gameMode.GetEntry(playerId).GetTeam(); if (kingPlayerList[team].Count >= MaxKillCount) { lastKilledKingPlayerId = playerId; switch (team) { case Team.TeamA: gameMode.EndGame(Team.TeamB, Team.TeamA, false, CloseType.Clear); break; case Team.TeamB: gameMode.EndGame(Team.TeamA, Team.TeamB, false, CloseType.Clear); break; } return; } int nextKing = playerId; var players = World.Instance(worldId).playerList; List <Entry> entries = gameMode.GetEntries().Where(x => x.GetPlayerId() != playerId && x.GetTeam() == team && !kingPlayerList[team].Contains(x.GetPlayerId())).ToList(); if (entries.Count == 0) { entries = gameMode.GetEntries().Where(x => x.GetTeam() == team).ToList(); } nextKing = GetNextKingPlayerId(entries.Select(x => x.GetPlayerId()).ToList()); Entry entry = gameMode.GetEntries().Where(x => x.GetPlayerId() == nextKing).FirstOrDefault(); gameMode.InvokeClientRpc(gameMode.SwitchKing, players.Keys.ToList(), entry.GetTeam(), playerId, entry.GetPlayerId()); SetKing(worldId, team, nextKing); } else if (id == PlayPointID.PlayerReborn) { SetKingSpell(worldId, playerId); } } }