Exemplo n.º 1
0
        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);
                }
            }
        }