Пример #1
0
        /// <summary>
        /// Check if the command match the required paramenter.
        /// </summary>
        /// <param name="Command">Command to check.</param>
        /// <param name="p">Package Data.</param>
        /// <param name="ParamType">List of Paramenter.</param>
        public static bool MatchRequiredParam(this ICommand Command, Package p, params CommandParamType[] ParamType)
        {
            string RegexFilter = "^" + Regex.Escape("/" + Command.Name);

            for (int i = 0; i < ParamType.Length; i++)
            {
                if (ParamType[i] == CommandParamType.Any)
                {
                    RegexFilter += @"\s+(.+)";
                }
                else if (ParamType[i] == CommandParamType.String)
                {
                    RegexFilter += @"\s+(\w+)";
                }
                else if (ParamType[i] == CommandParamType.Integer)
                {
                    RegexFilter += @"\s+(-*\d+)";
                }
            }

            RegexFilter += @"\s*$";

            if (Regex.IsMatch(p.DataItems[0], RegexFilter, RegexOptions.IgnoreCase))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        /// <summary>
        /// New Player - Create Player.
        /// </summary>
        /// <param name="ID">ID of the player.</param>
        /// <param name="Network">Network for the player.</param>
        /// <param name="Package">Package.</param>
        public Player(int ID, Networking Network, Package Package)
        {
            this.ID = ID;
            this.Network = Network;

            Thread.Add(new ThreadStart(ThreadStartPinging));

            Update(Package, false);

            Core.PlayerCollection.Add(this);
            Core.PlayerCollection.SentToPlayer(new Package(Package.PackageTypes.ID, ID.ToString(), Package.TcpClient));

            Core.PlayerCollection.SendToAllPlayer(new Package(Package.PackageTypes.CreatePlayer, ID.ToString(), null));
            Core.PlayerCollection.SendToAllPlayer(new Package(Package.PackageTypes.GameData, ID, GenerateGameData(true), null));

            Thread.Add(new ThreadStart(ThreadUpdateWorld));

            for (int i = 0; i < Core.PlayerCollection.Count; i++)
            {
                if (Core.PlayerCollection[i].ID != ID)
                {
                    Core.PlayerCollection.SentToPlayer(new Package(Package.PackageTypes.CreatePlayer, Core.PlayerCollection[i].ID.ToString(), Package.TcpClient));
                    Core.PlayerCollection.SentToPlayer(new Package(Package.PackageTypes.GameData, Core.PlayerCollection[i].ID, Core.PlayerCollection[i].GenerateGameData(true), Package.TcpClient));
                }
            }

            if (Core.Setting.Server.WelcomeMessage != null)
                Core.PlayerCollection.SentToPlayer(new Package(Package.PackageTypes.ChatMessage, Core.Setting.Server.WelcomeMessage, Package.TcpClient));
        }
Пример #3
0
        /// <summary>
        /// Handle the Package data.
        /// </summary>
        /// <param name="p">Package data.</param>
        /// <param name="Player">Player.</param>
        public void Handle(Package p, Player Player = null)
        {
            // Start from the most inner depth Command.
            #region /League
            if (this.MatchRequiredParam(p,  Functions.CommandParamType.Nothing))
            {
                if (Player != null && this.MatchRequiredPermission(Player))
                {
                    if (Player.PvP_Status == Player.PvPTypes.Lobby)
                    {
                        Player.PvP_Rules = new List<string> { Player.PvPRules.Custom_League.ToString() };
                        Player.PvP_Validatated = false;

                        Core.Player.GetPlayer(Player.PvP_OpponentID).PvP_Rules = new List<string> { Player.PvPRules.Custom_League.ToString() };
                        Core.Player.GetPlayer(Player.PvP_OpponentID).PvP_Validatated = false;

                        Player.CommandFeedback("The PvP match will now obey League rules. For more info refer:", null);
                        Player.CommandFeedback("http://www.aggressivegaming.org/pokemon/link-forums/general-league-rules.219/", null);

                        Core.Player.GetPlayer(Player.PvP_OpponentID).CommandFeedback("The PvP match will now obey League rules. For more info refer:", null);
                        Core.Player.GetPlayer(Player.PvP_OpponentID).CommandFeedback("http://www.aggressivegaming.org/pokemon/link-forums/general-league-rules.219/", null);
                    }
                }
            }
            #endregion /League
        }
Пример #4
0
        /// <summary>
        /// Get the List of Paramenter values.
        /// </summary>
        /// <param name="Command">Command to get.</param>
        /// <param name="p">Package Data.</param>
        /// <param name="ParamType">List of Paramenter.</param>
        public static List<string> Groups(this ICommand Command, Package p, params CommandParamType[] ParamType)
        {
            List<string> ReturnString = new List<string>();
            string RegexFilter = "^" + Regex.Escape("/" + Command.Name);

            for (int i = 0; i < ParamType.Length; i++)
            {
                if (ParamType[i] == CommandParamType.Any)
                {
                    RegexFilter += @"\s+(.+)";
                }
                else if (ParamType[i] == CommandParamType.String)
                {
                    RegexFilter += @"\s+(\w+)";
                }
                else if (ParamType[i] == CommandParamType.Integer)
                {
                    RegexFilter += @"\s+(\d+)";
                }
            }

            RegexFilter += @"\s*$";

            for (int i = 0; i < ParamType.Length; i++)
            {
                ReturnString.Add(Regex.Match(p.DataItems[0], RegexFilter, RegexOptions.IgnoreCase).Groups[i + 1].Value);
            }
            return ReturnString;
        }
        /// <summary>
        /// Handle the Package data.
        /// </summary>
        /// <param name="p">Package data.</param>
        /// <param name="Player">Player.</param>
        public void Handle(Package p, Player Player = null)
        {
            // Start from the most inner depth Command.
            #region /Operator.Remove [Name]
            if (this.MatchRequiredParam(p, Functions.CommandParamType.Any, Functions.CommandParamType.Integer, Functions.CommandParamType.Any))
            {
                if (Player != null && this.MatchRequiredPermission(Player))
                {
                    List<string> Group = this.Groups(p, Functions.CommandParamType.Any, Functions.CommandParamType.Integer, Functions.CommandParamType.Any);

                    if (!Core.Player.HasPlayer(Group[0]))
                    {
                        Core.Player.SentToPlayer(new Package(Package.PackageTypes.ChatMessage, Core.Setting.Token("SERVER_PLAYERNOTEXIST"), p.Client));
                    }
                    else
                    {
                        Player Players = Core.Player.GetPlayer(Group[0]);
                        string PlayerName = Players.isGameJoltPlayer ? $"{Players.Name} ({ Players.GameJoltID})" : $"{Players.Name}";

                        if (Players.IsOperator())
                        {
                            Players.RemoveOperator();

                            Player.CommandFeedback($"You have successfully remove {PlayerName} as operator.", $"have remove {PlayerName} as operator.");
                        }
                        else
                        {
                            Core.Player.SentToPlayer(new Package(Package.PackageTypes.ChatMessage, Core.Setting.Token("SERVER_NOTOPERATOR"), p.Client));
                        }
                    }
                }
                else if (Player == null)
                {
                    List<string> Group = this.Groups(p, Functions.CommandParamType.Any, Functions.CommandParamType.Integer, Functions.CommandParamType.Any);

                    if (!Core.Player.HasPlayer(Group[0]))
                    {
                        Core.Logger.Log(Core.Setting.Token("SERVER_PLAYERNOTEXIST"), Loggers.Logger.LogTypes.Info);
                    }
                    else
                    {
                        Player Players = Core.Player.GetPlayer(Group[0]);
                        string PlayerName = Players.isGameJoltPlayer ? $"{Players.Name} ({ Players.GameJoltID})" : $"{Players.Name}";

                        if (Players.IsOperator())
                        {
                            Players.RemoveOperator();

                            Core.Logger.Log($"You have successfully remove {PlayerName} as operator.", Loggers.Logger.LogTypes.Info);
                        }
                        else
                        {
                            Core.Logger.Log(Core.Setting.Token("SERVER_NOTOPERATOR"), Loggers.Logger.LogTypes.Info);
                        }
                    }
                }
            }
            #endregion /Operator.Remove [Name]
        }
        private void HandleExecuteCommand(ExecuteCommandPacket packet)
        {
            if (!Authorized)
            {
                SendPacket(new AuthorizationDisconnectPacket { Reason = "Not authorized!" });
                return;
            }

            Package Package = new Package(Package.PackageTypes.ChatMessage, packet.Command, null);
            Core.Command.HandleAllCommand(Package);
        }
        private void ThreadStartListening()
        {
            int ErrorCount = 0;

            do
            {
                try
                {
                    if (TcpClient.Available > -1)
                    {
                        string PackageString = Reader.ReadLine();

                        if (!string.IsNullOrWhiteSpace(PackageString))
                        {
                            ThreadPool.QueueWorkItem(() =>
                            {
                                Package Package = new Package(PackageString, TcpClient);

                                if (Package.IsValid)
                                    Package.Handle();

                                Core.Logger.Debug($"Receive: {PackageString}", TcpClient);
                            });

                            ErrorCount = 0;
                        }
                        else
                        {
                            ErrorCount++;

                            if (ErrorCount > 10)
                            {
                                Core.Logger.Debug("Too much error received from the client.", TcpClient);
                                throw new Exception("Too much error received from the client.");
                            }
                        }
                    }
                    else
                    {
                        Core.Logger.Debug("Unexpected error occured.", TcpClient);
                        throw new Exception("Unexpected error occured.");
                    } 
                }
                catch (Exception)
                {
                    if (IsActive)
                    {
                        IsActive = false;
                        Dispose();
                    }
                }
            } while (IsActive);
        }
 /// <summary>
 /// Handle the Package data.
 /// </summary>
 /// <param name="p">Package data.</param>
 /// <param name="Player">Player.</param>
 public void Handle(Package p, Player Player = null)
 {
     // Start from the most inner depth Command.
     #region /Player.World
     if (this.MatchRequiredParam(p, Functions.CommandParamType.Nothing))
     {
         if (Player != null && this.MatchRequiredPermission(Player))
         {
             OnlineSetting Settings = Player.GetOnlineSetting();
             Core.Player.SentToPlayer(new Package(Package.PackageTypes.ChatMessage, Core.World.ToString(Settings.CurrentWorldSeason,Settings.CurrentWorldWeather), Player.Network.Client));
         }
     }
     #endregion /Player.World
 }
Пример #9
0
 /// <summary>
 /// Handle the Package data.
 /// </summary>
 /// <param name="p">Package data.</param>
 /// <param name="Player">Player.</param>
 public void Handle(Package p, Player Player = null)
 {
     // Start from the most inner depth Command.
     #region /Restart
     if (this.MatchRequiredParam(p, Functions.CommandParamType.Nothing))
     {
         if (Player != null && this.MatchRequiredPermission(Player))
         {
             ClientEvent.Invoke(ClientEvent.Types.Restart, null);
         }
         else if (Player == null)
         {
             ClientEvent.Invoke(ClientEvent.Types.Restart, null);
         }
     }
     #endregion /Restart
 }
 /// <summary>
 /// Handle the Package data.
 /// </summary>
 /// <param name="p">Package data.</param>
 /// <param name="Player">Player.</param>
 public void Handle(Package p, Player Player = null)
 {
     // Start from the most inner depth Command.
     #region /Global.World
     if (this.MatchRequiredParam(p, Functions.CommandParamType.Nothing))
     {
         if (Player != null && this.MatchRequiredPermission(Player))
         {
             Core.Player.SentToPlayer(new Package(Package.PackageTypes.ChatMessage, Core.World.ToString(), Player.Network.Client));
         }
         else if (Player == null)
         {
             Core.Logger.Log(Core.World.ToString(), Logger.LogTypes.Info);
         }
     }
     #endregion /Global.World
 }
Пример #11
0
 /// <summary>
 /// Handle the Package data.
 /// </summary>
 /// <param name="p">Package data.</param>
 /// <param name="Player">Player.</param>
 public void Handle(Package p, Player Player = null)
 {
     // Start from the most inner depth Command.
     #region /About
     if (this.MatchRequiredParam(p, Functions.CommandParamType.Nothing))
     {
         if (Player != null && this.MatchRequiredPermission(Player))
         {
             Player.CommandFeedback($"This server is created by jianmingyong.", null);
             Player.CommandFeedback($"It is running v{Core.Setting.ApplicationVersion}", null);
         }
         else if (Player == null)
         {
             Core.Logger.Log("This server is created by jianmingyong.", Logger.LogTypes.Info);
             Core.Logger.Log($"It is running v{Core.Setting.ApplicationVersion}", Logger.LogTypes.Info);
         }
     }
     #endregion /About
 }
        /// <summary>
        /// Handle the Package data.
        /// </summary>
        /// <param name="p">Package data.</param>
        /// <param name="Player">Player.</param>
        public void Handle(Package p, Player Player = null)
        {
            // Start from the most inner depth Command.
            #region /Player.Season <id>
            if (this.MatchRequiredParam(p, Functions.CommandParamType.Integer))
            {
                List<string> Group = this.Groups(p, Functions.CommandParamType.Integer);

                if (Player != null && this.MatchRequiredPermission(Player))
                {
                    OnlineSetting Settings = Player.GetOnlineSetting();
                    Settings.Season = Group[0].Toint().RollOver(-4, 3);
                    Settings.CurrentWorldSeason = Core.World.GenerateSeason(Settings.Season);
                    Settings.LastWorldUpdate = DateTime.Now;

                    Player.CommandFeedback(Core.World.ToString(Settings.CurrentWorldSeason, Settings.CurrentWorldWeather), $"have changed the player season.");
                }
            }
            #endregion /Player.Season <id>
        }
Пример #13
0
        /// <summary>
        /// Handle the Package data.
        /// </summary>
        /// <param name="p">Package data.</param>
        /// <param name="Player">Player.</param>
        public void Handle(Package p, Player Player = null)
        {
            // Start from the most inner depth Command.
            #region /Say <Message>
            if (this.MatchRequiredParam(p,  Functions.CommandParamType.Any))
            {
                List<string> Group = this.Groups(p, Functions.CommandParamType.Any);

                if (Player != null && this.MatchRequiredPermission(Player))
                {
                    Core.Player.SendToAllPlayer(new Package(Package.PackageTypes.ChatMessage, Group[0], null));

                    Player.CommandFeedback(null, string.Format("have sent a server chat."));
                }
                else if (Player == null)
                {
                    Core.Player.SendToAllPlayer(new Package(Package.PackageTypes.ChatMessage, Group[0], null));

                    Core.Logger.Log(Group[0], Logger.LogTypes.Server);
                }
            }
            #endregion /Say <Message>
        }
Пример #14
0
 /// <summary>
 /// Handle the Package data.
 /// </summary>
 /// <param name="p">Package data.</param>
 /// <param name="Player">Player.</param>
 public void Handle(Package p, Player Player = null)
 {
     // Start from the most inner depth Command.
     #region /Update
     if (this.MatchRequiredParam(p,  Functions.CommandParamType.Nothing))
     {
         if (Player != null && this.MatchRequiredPermission(Player))
         {
             using (Updater Updater = new Updater())
             {
                 Updater.Update();
             }
         }
         else if (Player == null)
         {
             using (Updater Updater = new Updater())
             {
                 Updater.Update();
             }
         }
     }
     #endregion /Update
 }
        /// <summary>
        /// Handle the Package data.
        /// </summary>
        /// <param name="p">Package data.</param>
        /// <param name="Player">Player.</param>
        public void Handle(Package p, Player Player = null)
        {
            // Start from the most inner depth Command.
            #region /Global.Weather <id>
            if (this.MatchRequiredParam(p, Functions.CommandParamType.Integer))
            {
                List<string> Group = this.Groups(p, Functions.CommandParamType.Integer);

                if (Player != null && this.MatchRequiredPermission(Player))
                {
                    Core.World.Weather = Core.World.GenerateWeather(Group[0].Toint(), Core.World.Season);
                    
                    Player.CommandFeedback(Core.World.ToString(), string.Format("have changed the global weather."));
                }
                else if (Player == null)
                {
                    Core.World.Weather = Core.World.GenerateWeather(Group[0].Toint(), Core.World.Season);

                    Core.Logger.Log(Core.World.ToString(), Logger.LogTypes.Info);
                }
            }
            #endregion /Global.Weather <id>
        }
Пример #16
0
        /// <summary>
        /// Handle the Package data.
        /// </summary>
        /// <param name="p">Package data.</param>
        /// <param name="Player">Player.</param>
        public void Handle(Package p, Player Player = null)
        {
            // Start from the most inner depth Command.
            #region /Timeoffset <Duration>
            if (this.MatchRequiredParam(p, Functions.CommandParamType.Integer))
            {
                List<string> Group = this.Groups(p, Functions.CommandParamType.Integer);

                if (Player != null && this.MatchRequiredPermission(Player))
                {
                    Core.World.TimeOffset = Group[0].ToInt();

                    Player.CommandFeedback(Core.World.ToString(), $"have changed the world time offset.");
                }
                else if (Player == null)
                {
                    Core.World.TimeOffset = Group[0].ToInt();

                    Core.Logger.Log(Core.World.ToString(), Logger.LogTypes.Info);
                }
            }
            #endregion /Timeoffset <Duration>
        }
        private void HandleTradeOffer(Package p)
        {
            Player Player = Core.Player.GetPlayer(p.Client);
            Player TradePlayer = Core.Player.GetPlayer(p.DataItems[0].ToInt());

            Core.Player.SentToPlayer(new Package(Package.PackageTypes.TradeOffer, Player.ID, p.DataItems[1], TradePlayer.Network.Client));
            Core.Logger.Log(Player.isGameJoltPlayer ?
                    Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), "have offered the following pokemon: " + p.DataItems[1]) :
                    Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, "have offered the following pokemon: " + p.DataItems[1]), Logger.LogTypes.Trade, p.Client);
        }
Пример #18
0
        /// <summary>
        /// Handle the Package data.
        /// </summary>
        /// <param name="p">Package data.</param>
        /// <param name="Player">Player.</param>
        public void Handle(Package p, Player Player = null)
        {
            // Start from the most inner depth Command.
            #region /Help <page>
            if (this.MatchRequiredParam(p, Functions.CommandParamType.Integer))
            {
                List<string> Group = this.Groups(p, Functions.CommandParamType.Integer);

                if (Player != null && this.MatchRequiredPermission(Player))
                {
                    List<string> GetHelpContent = GenerateHelp(Group[0].ToInt());

                    for (int i = 0; i < GetHelpContent.Count; i++)
                    {
                        Player.CommandFeedback(GetHelpContent[i], null);
                    }
                }
                else if (Player == null)
                {
                    List<string> GetHelpContent = GenerateHelp(Group[0].ToInt());

                    for (int i = 0; i < GetHelpContent.Count; i++)
                    {
                        Core.Logger.Log(GetHelpContent[i], Logger.LogTypes.Info);
                    }
                }
            }
            #endregion /Help <page>

            #region /Help <name>
            if (this.MatchRequiredParam(p, Functions.CommandParamType.Any))
            {
                List<string> Group = this.Groups(p, Functions.CommandParamType.Any);

                if (Player != null && this.MatchRequiredPermission(Player))
                {
                    for (int i = 0; i < Core.Command.Count; i++)
                    {
                        if (string.Equals(Group[0], Core.Command[i].Name, StringComparison.OrdinalIgnoreCase))
                        {
                            Core.Command[i].Help(0, Player);
                        }
                    }
                }
                else if (Player == null)
                {
                    for (int i = 0; i < Core.Command.Count; i++)
                    {
                        if (string.Equals(Group[0], Core.Command[i].Name, StringComparison.OrdinalIgnoreCase))
                        {
                            Core.Command[i].Help(0, Player);
                        }
                    }
                }
            }
            #endregion /Help <name>

            #region /Help
            if (this.MatchRequiredParam(p, Functions.CommandParamType.Nothing))
            {
                if (Player != null && this.MatchRequiredPermission(Player))
                {
                    List<string> GetHelpContent = GenerateHelp(0);

                    for (int i = 0; i < GetHelpContent.Count; i++)
                    {
                        Player.CommandFeedback(GetHelpContent[i], null);
                    }
                }
                else if (Player == null)
                {
                    List<string> GetHelpContent = GenerateHelp(0);

                    for (int i = 0; i < GetHelpContent.Count; i++)
                    {
                        Core.Logger.Log(GetHelpContent[i], Logger.LogTypes.Info);
                    }
                }
            }
            #endregion /Help
        }
 private void HandlePing(Package p)
 {
     Player Player = Core.Player.GetPlayer(p.Client);
     Player.Network.LastValidPing = DateTime.Now;
 }
        private void HandleServerDataRequest(Package p)
        {
            List<string> DataItems = new List<string>
            {
                Core.Player.Count.ToString(),
                Core.Setting.MaxPlayers == -1 ? int.MaxValue.ToString() : Core.Setting.MaxPlayers.ToString(),
                Core.Setting.ServerName,
                string.IsNullOrWhiteSpace(Core.Setting.ServerMessage) ? "" : Core.Setting.ServerMessage
            };

            if (Core.Player.Count > 0)
            {
                for (int i = 0; i < Core.Player.Count; i++)
                {
                    DataItems.Add(Core.Player[i].isGameJoltPlayer ? string.Format("{0} ({1})", Core.Player[i].Name, Core.Player[i].GameJoltID.ToString()) : Core.Player[i].Name);
                }
            }

            Core.Player.SentToPlayer(new Package(Package.PackageTypes.ServerInfoData, DataItems, p.Client));
        }
 private void HandleChatCommand(Package p)
 {
     Core.Command.HandleAllCommand(p);
 }
        private void HandleBattleStart(Package p)
        {
            Player Player = Core.Player.GetPlayer(p.Client);
            Player PVPPlayer = Core.Player.GetPlayer(p.DataItems[0].ToInt());

            string PVPPlayerName = PVPPlayer.isGameJoltPlayer ? Core.Setting.Token("SERVER_GAMEJOLT", PVPPlayer.Name, PVPPlayer.GameJoltID.ToString(), "") : Core.Setting.Token("SERVER_NOGAMEJOLT", PVPPlayer.Name, "");

            if (Player.PvP_Validatated)
            {
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.BattleStart, Player.ID, "", PVPPlayer.Network.Client));
                Core.Logger.Log(Player.isGameJoltPlayer ?
                        Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), "have accept the battle from " + PVPPlayerName) :
                        Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, "have accept the battle from " + PVPPlayerName), Logger.LogTypes.PvP, p.Client);

                Player.PvP_Status = Player.PvPTypes.Battling;
            }
            else
            {
                string ValidationResult = Player.DoPvPValidation();
                Player.PvP_Validatated = true;

                if (ValidationResult == null)
                {
                    Core.Player.SentToPlayer(new Package(Package.PackageTypes.BattleStart, Player.ID, "", PVPPlayer.Network.Client));
                    Core.Logger.Log(Player.isGameJoltPlayer ?
                            Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), "have accept the battle from " + PVPPlayerName) :
                            Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, "have accept the battle from " + PVPPlayerName), Logger.LogTypes.PvP, p.Client);

                    Player.PvP_Status = Player.PvPTypes.Battling;
                }
                else if (ValidationResult.Contains("You may use this team"))
                {
                    Core.Player.SentToPlayer(new Package(Package.PackageTypes.ChatMessage, ValidationResult, Player.Network.Client));

                    Core.Player.SentToPlayer(new Package(Package.PackageTypes.BattleStart, Player.ID, "", PVPPlayer.Network.Client));
                    Core.Logger.Log(Player.isGameJoltPlayer ?
                            Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), "have accept the battle from " + PVPPlayerName) :
                            Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, "have accept the battle from " + PVPPlayerName), Logger.LogTypes.PvP, p.Client);

                    Player.PvP_Status = Player.PvPTypes.Battling;
                }
                else
                {
                    Core.Player.SentToPlayer(new Package(Package.PackageTypes.ChatMessage, Core.Setting.Token("SERVER_PVPVALIDATION", ValidationResult), Player.Network.Client));
                }
            }
        }
        private void HandleBattlePokemonData(Package p)
        {
            Player Player = Core.Player.GetPlayer(p.Client);
            Player PVPPlayer = Core.Player.GetPlayer(p.DataItems[0].ToInt());

            Core.Player.SentToPlayer(new Package(Package.PackageTypes.BattlePokemonData, Player.ID, p.DataItems[1], PVPPlayer.Network.Client));
        }
        private void HandleBattleQuit(Package p)
        {
            Player Player = Core.Player.GetPlayer(p.Client);
            Player PVPPlayer = Core.Player.GetPlayer(p.DataItems[0].ToInt());

            string PVPPlayerName = PVPPlayer.isGameJoltPlayer ? Core.Setting.Token("SERVER_GAMEJOLT", PVPPlayer.Name, PVPPlayer.GameJoltID.ToString(), "") : Core.Setting.Token("SERVER_NOGAMEJOLT", PVPPlayer.Name, "");

            Core.Player.SentToPlayer(new Package(Package.PackageTypes.BattleQuit, Player.ID, "", PVPPlayer.Network.Client));
            Core.Logger.Log(Player.isGameJoltPlayer ?
                    Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), "have rejected the battle request from " + PVPPlayerName) :
                    Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, "have rejected the battle request from " + PVPPlayerName), Logger.LogTypes.PvP, p.Client);

            Player.PvP_Status = Player.PvPTypes.Nothing;
            PVPPlayer.PvP_Status = Player.PvPTypes.Nothing;
        }
        private void HandleBattleOffer(Package p)
        {
            Player Player = Core.Player.GetPlayer(p.Client);
            Player PVPPlayer = Core.Player.GetPlayer(p.DataItems[0].ToInt());

            Player.PvP_Pokemon = p.DataItems[1].Split('|').ToList();

            string ValidationResult = Player.DoPvPValidation();
            Player.PvP_Validatated = true;

            if (ValidationResult == null)
            {
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.BattleOffer, Player.ID, p.DataItems[1], PVPPlayer.Network.Client));
            }
            else if (ValidationResult.Contains("You may use this team"))
            {
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.ChatMessage, ValidationResult, Player.Network.Client));
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.BattleOffer, Player.ID, p.DataItems[1], PVPPlayer.Network.Client));
            }
            else
            {
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.ChatMessage, Core.Setting.Token("SERVER_PVPVALIDATION", ValidationResult), Player.Network.Client));
            }
        }
        private void HandleBattleJoin(Package p)
        {
            Player Player = Core.Player.GetPlayer(p.Client);
            Player PvPPlayer = Core.Player.GetPlayer(p.DataItems[0].ToInt());

            string PVPPlayerName = PvPPlayer.isGameJoltPlayer ? Core.Setting.Token("SERVER_GAMEJOLT", PvPPlayer.Name, PvPPlayer.GameJoltID.ToString(), "") : Core.Setting.Token("SERVER_NOGAMEJOLT", PvPPlayer.Name, "");

            if (!Core.Setting.AllowPvP)
            {
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.ChatMessage, Core.Setting.Token("SERVER_PVPDISALLOW"), p.Client));
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.BattleQuit, Player.ID, "", p.Client));

                Core.Logger.Log(Player.isGameJoltPlayer ?
                    Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), "is unable to battle with the following reason: " + Core.Setting.Token("SERVER_PVPDISALLOW")) :
                    Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, "is unable to battle with the following reason: " + Core.Setting.Token("SERVER_PVPDISALLOW")), Logger.LogTypes.PvP, p.Client);
                return;
            }

            // Server Restart Timer.
            if (Core.Setting.AutoRestartTime >= 10 && (Core.Setting.StartTime.AddSeconds(Core.Setting.AutoRestartTime) - DateTime.Now).TotalSeconds <= 300)
            {
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.ChatMessage, Core.Setting.Token("SERVER_TRADEPVPFAIL", Core.Listener.TimeLeft()), p.Client));
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.BattleQuit, Player.ID, "", p.Client));

                Core.Logger.Log(Player.isGameJoltPlayer ?
                    Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), "is unable to battle with the following reason: " + Core.Setting.Token("SERVER_TRADEPVPFAIL", Core.Listener.TimeLeft())) :
                    Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, "is unable to battle with the following reason: " + Core.Setting.Token("SERVER_TRADEPVPFAIL", Core.Listener.TimeLeft())), Logger.LogTypes.PvP, p.Client);
                return;
            }

            Core.Player.SentToPlayer(new Package(Package.PackageTypes.BattleJoin, Player.ID, "", PvPPlayer.Network.Client));
            Core.Logger.Log(Player.isGameJoltPlayer ?
                    Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), "have joined the battle request from " + PVPPlayerName) :
                    Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, "have joined the battle request from " + PVPPlayerName), Logger.LogTypes.PvP, p.Client);

            // Status Update
            Player.PvP_Status = Player.PvPTypes.Lobby;
            Player.PvP_OpponentID = PvPPlayer.ID;
            Player.PvP_Host = false;
            Player.PvP_Validatated = false;

            PvPPlayer.PvP_Status = Player.PvPTypes.Lobby;
            PvPPlayer.PvP_OpponentID = Player.ID;
            PvPPlayer.PvP_Host = true;
            PvPPlayer.PvP_Validatated = false;
        }
        private void HandleBattleRequest(Package p)
        {
            Player Player = Core.Player.GetPlayer(p.Client);
            Player PvPPlayer = Core.Player.GetPlayer(p.DataItems[0].ToInt());

            string PVPPlayerName = PvPPlayer.isGameJoltPlayer ? Core.Setting.Token("SERVER_GAMEJOLT", PvPPlayer.Name, PvPPlayer.GameJoltID.ToString(), "") : Core.Setting.Token("SERVER_NOGAMEJOLT", PvPPlayer.Name, "");

            if (!Core.Setting.AllowPvP)
            {
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.ChatMessage, Core.Setting.Token("SERVER_PVPDISALLOW"), p.Client));
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.BattleQuit, Player.ID, "", p.Client));

                Core.Logger.Log(Player.isGameJoltPlayer ?
                    Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), "is unable to battle with the following reason: " + Core.Setting.Token("SERVER_PVPDISALLOW")) :
                    Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, "is unable to battle with the following reason: " + Core.Setting.Token("SERVER_PVPDISALLOW")), Logger.LogTypes.PvP, p.Client);
                return;
            }

            // Server Restart Timer.
            if (Core.Setting.AutoRestartTime >= 10 && (Core.Setting.StartTime.AddSeconds(Core.Setting.AutoRestartTime) - DateTime.Now).TotalSeconds <= 300)
            {
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.ChatMessage, Core.Setting.Token("SERVER_TRADEPVPFAIL", Core.Listener.TimeLeft()), p.Client));
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.BattleQuit, Player.ID, "", p.Client));

                Core.Logger.Log(Player.isGameJoltPlayer ?
                    Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), "is unable to trade with the following reason: " + Core.Setting.Token("SERVER_TRADEPVPFAIL", Core.Listener.TimeLeft())) :
                    Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, "is unable to trade with the following reason: " + Core.Setting.Token("SERVER_TRADEPVPFAIL", Core.Listener.TimeLeft())), Logger.LogTypes.PvP, p.Client);
                return;
            }

            // Check if you are blocked.
            if (Player.IsMuteListed(PvPPlayer))
            {
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.ChatMessage, Core.Setting.Token("SERVER_MUTEDTEMP", Player.GetMuteList(PvPPlayer).Reason, Player.GetMuteList(PvPPlayer).RemainingTime), p.Client));
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.BattleQuit, Player.ID, "", p.Client));

                Core.Logger.Log(Player.isGameJoltPlayer ?
                    Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), "is unable to battle with the following reason: " + Core.Setting.Token("SERVER_MUTEDTEMP", Player.GetMuteList(PvPPlayer).Reason, Player.GetMuteList(PvPPlayer).RemainingTime)) :
                    Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, "is unable to battle with the following reason: " + Core.Setting.Token("SERVER_MUTEDTEMP", Player.GetMuteList(PvPPlayer).Reason, Player.GetMuteList(PvPPlayer).RemainingTime)), Logger.LogTypes.PvP, p.Client);
                return;
            }

            Core.Player.SentToPlayer(new Package(Package.PackageTypes.BattleRequest, Player.ID, "", PvPPlayer.Network.Client));
            Core.Logger.Log(Player.isGameJoltPlayer ?
                    Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), "have sent a battle request to " + PVPPlayerName) :
                    Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, "have sent a battle request to " + PVPPlayerName), Logger.LogTypes.PvP, p.Client);
        }
        private void HandleTradeStart(Package p)
        {
            Player Player = Core.Player.GetPlayer(p.Client);
            Player TradePlayer = Core.Player.GetPlayer(p.DataItems[0].ToInt());

            string TradePlayerName = TradePlayer.isGameJoltPlayer ? Core.Setting.Token("SERVER_GAMEJOLT", TradePlayer.Name, TradePlayer.GameJoltID.ToString(), "") : Core.Setting.Token("SERVER_NOGAMEJOLT", TradePlayer.Name, "");

            Core.Player.SentToPlayer(new Package(Package.PackageTypes.TradeStart, Player.ID, "", TradePlayer.Network.Client));
            Core.Logger.Log(Player.isGameJoltPlayer ?
                    Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), "have accept the trade from " + TradePlayerName) :
                    Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, "have accept the trade from " + TradePlayerName), Logger.LogTypes.Trade, p.Client);
        }
 private void HandleGamestateMessage(Package p)
 {
     Player Player = Core.Player.GetPlayer(p.Client);
     Core.Player.SendToAllPlayer(new Package(Package.PackageTypes.ChatMessage, Player.isGameJoltPlayer ?
         "The player " + Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), p.DataItems[0]) :
         "The player " + Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, p.DataItems[0]), null));
     Core.Logger.Log(Player.isGameJoltPlayer ?
         "The player " + Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), p.DataItems[0]) :
         "The player " + Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, p.DataItems[0]), Logger.LogTypes.Server, p.Client);
 }
        private void HandleTradeJoin(Package p)
        {
            Player Player = Core.Player.GetPlayer(p.Client);
            Player TradePlayer = Core.Player.GetPlayer(p.DataItems[0].ToInt());

            string TradePlayerName = TradePlayer.isGameJoltPlayer ? Core.Setting.Token("SERVER_GAMEJOLT", TradePlayer.Name, TradePlayer.GameJoltID.ToString(), "") : Core.Setting.Token("SERVER_NOGAMEJOLT", TradePlayer.Name, "");

            if (!Core.Setting.AllowTrade)
            {
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.ChatMessage, Core.Setting.Token("SERVER_TRADEDISALLOW"), p.Client));
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.TradeQuit, Player.ID, "", p.Client));

                Core.Logger.Log(Player.isGameJoltPlayer ?
                    Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), "is unable to trade with the following reason: " + Core.Setting.Token("SERVER_TRADEDISALLOW")) :
                    Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, "is unable to trade with the following reason: " + Core.Setting.Token("SERVER_TRADEDISALLOW")), Logger.LogTypes.Trade, p.Client);
                return;
            }

            // Server Restart Timer.
            if (Core.Setting.AutoRestartTime >= 10 && (Core.Setting.StartTime.AddSeconds(Core.Setting.AutoRestartTime) - DateTime.Now).TotalSeconds <= 300)
            {
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.ChatMessage, Core.Setting.Token("SERVER_TRADEPVPFAIL", Core.Listener.TimeLeft()), p.Client));
                Core.Player.SentToPlayer(new Package(Package.PackageTypes.TradeQuit, Player.ID, "", p.Client));

                Core.Logger.Log(Player.isGameJoltPlayer ?
                    Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), "is unable to trade with the following reason: " + Core.Setting.Token("SERVER_TRADEPVPFAIL", Core.Listener.TimeLeft())) :
                    Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, "is unable to trade with the following reason: " + Core.Setting.Token("SERVER_TRADEPVPFAIL", Core.Listener.TimeLeft())), Logger.LogTypes.Trade, p.Client);
                return;
            }

            Core.Player.SentToPlayer(new Package(Package.PackageTypes.TradeJoin, Player.ID, "", TradePlayer.Network.Client));
            Core.Logger.Log(Player.isGameJoltPlayer ?
                    Core.Setting.Token("SERVER_GAMEJOLT", Player.Name, Player.GameJoltID.ToString(), "have joined the trade request from " + TradePlayerName) :
                    Core.Setting.Token("SERVER_NOGAMEJOLT", Player.Name, "have joined the trade request from " + TradePlayerName), Logger.LogTypes.Trade, p.Client);
        }