Ejemplo n.º 1
0
        public static string Format(string message, Player p, bool tokens = true, bool emotes = true)
        {
            message = Colors.Escape(message);
            StringBuilder sb = new StringBuilder(message);

            Colors.Cleanup(sb, p.hasTextColors);

            if (tokens)
            {
                ChatTokens.Apply(sb, p);
            }
            if (!emotes)
            {
                return(sb.ToString());
            }

            if (p.parseEmotes)
            {
                sb.Replace(":)", "(darksmile)");
                sb.Replace(":D", "(smile)");
                sb.Replace("<3", "(heart)");
            }
            message = EmotesHandler.Replace(sb.ToString());
            return(message);
        }
Ejemplo n.º 2
0
        static string ToIRCColors(string input)
        {
            input = Colors.Escape(input);
            input = LineWrapper.CleanupColors(input, true, false);

            StringBuilder sb = new StringBuilder(input);

            for (int i = 0; i < ircColors.Length; i++)
            {
                sb.Replace(ircReplacements[i], ircColors[i]);
            }
            return(sb.ToString());
        }
Ejemplo n.º 3
0
        public static void GlobalIRCMessage(string srcNick, string message)
        {
            message = Colors.Escape(message);
            Player[] players = PlayerInfo.Online.Items;
            foreach (Player p in players)
            {
                if (p.Ignores.All || p.Ignores.IRC || p.Ignores.IRCNicks.Contains(srcNick))
                {
                    continue;
                }

                if (p.level.SeesServerWideChat && p.Chatroom == null)
                {
                    Player.Message(p, message);
                }
            }
        }
Ejemplo n.º 4
0
        /// <summary> Adds the given player to that player's tab list (if their client supports it). </summary>
        public static void Add(Player dst, Player p, byte id)
        {
            if (!dst.hasExtList)
            {
                return;
            }
            byte grpPerm = (byte)(offset - p.Rank);

            if (!Server.Config.TablistRankSorted)
            {
                grpPerm = 1;
            }

            string name, group;

            GetEntry(p, dst, out name, out group);

            name = Colors.Escape(name); // for nicks
            dst.Session.SendAddTabEntry(id, p.truename, name, group, grpPerm);
        }
Ejemplo n.º 5
0
        /// <summary> Adds the given player to that player's tab list (if their client supports it). </summary>
        public static void Add(Player dst, Player p, byte id)
        {
            if (!dst.hasExtList)
            {
                return;
            }
            byte grpPerm = (byte)(offset - p.Rank);

            if (!Server.Config.TablistRankSorted)
            {
                grpPerm = 0;
            }

            string name, group;

            GetEntry(p, dst, out name, out group);

            name  = Colors.Escape(name); // for nicks
            name  = LineWrapper.CleanupColors(name, dst);
            group = LineWrapper.CleanupColors(group, dst);
            dst.Send(Packet.ExtAddPlayerName(id, p.truename, name, group, grpPerm, dst.hasCP437));
        }
Ejemplo n.º 6
0
        void LeaveServer(string chatMsg, string discMsg, bool isKick, bool sync = false)
        {
            if (leftServer || IsSuper)
            {
                return;
            }
            leftServer = true;
            CriticalTasks.Clear();
            ZoneIn = null;

            // Disconnected before sent handshake
            if (name == null)
            {
                if (Socket != null)
                {
                    Socket.Close();
                }
                Logger.Log(LogType.UserActivity, "{0} disconnected.", IP);
                return;
            }

            Server.reviewlist.Remove(name);
            try {
                if (Socket.Disconnected)
                {
                    PlayerInfo.Online.Remove(this);
                    return;
                }

                if (weapon != null)
                {
                    weapon.Disable();
                }
                if (chatMsg != null)
                {
                    chatMsg = Colors.Escape(chatMsg);
                }
                discMsg = Colors.Escape(discMsg);

                string kickPacketMsg = ChatTokens.Apply(discMsg, this);
                Session.SendKick(kickPacketMsg, sync);
                Socket.Disconnected = true;
                ZoneIn = null;
                if (isKick)
                {
                    TimesBeenKicked++;
                }

                if (!loggedIn)
                {
                    PlayerInfo.Online.Remove(this);
                    Logger.Log(LogType.UserActivity, "{0} ({1}) disconnected. ({2})", truename, IP, discMsg);
                    return;
                }

                Entities.DespawnEntities(this, false);
                ShowDisconnectInChat(chatMsg, isKick);
                SaveStats();

                PlayerInfo.Online.Remove(this);
                OnPlayerDisconnectEvent.Call(this, discMsg);

                level.AutoUnload();
                Dispose();
            } catch (Exception e) {
                Logger.LogError("Error disconnecting player", e);
            } finally {
                Socket.Close();
            }
        }
Ejemplo n.º 7
0
        void LeaveServer(string chatMsg, string discMsg, bool isKick, bool sync = false)
        {
            if (leftServer)
            {
                return;
            }
            leftServer = true;
            CriticalTasks.Clear();
            ZoneIn = null;

            // Disconnected before sent handshake
            if (name == null)
            {
                if (Socket != null)
                {
                    Socket.Close();
                }
                Logger.Log(LogType.UserActivity, "{0} disconnected.", ip);
                return;
            }

            Server.reviewlist.Remove(name);
            try {
                if (Socket.Disconnected)
                {
                    PlayerInfo.Online.Remove(this);
                    return;
                }
                // FlyBuffer.Clear();
                LastAction = DateTime.UtcNow;
                IsAfk      = false;
                isFlying   = false;
                if (weapon != null)
                {
                    weapon.Disable();
                }

                if (chatMsg != null)
                {
                    chatMsg = Colors.Escape(chatMsg);
                }
                discMsg = Colors.Escape(discMsg);

                string kickPacketMsg = ChatTokens.Apply(discMsg, this);
                Send(Packet.Kick(kickPacketMsg, hasCP437), sync);
                Socket.Disconnected = true;
                ZoneIn = null;
                if (isKick)
                {
                    TimesBeenKicked++;
                }

                if (!loggedIn)
                {
                    PlayerInfo.Online.Remove(this);
                    string user = name + " (" + ip + ")";
                    Logger.Log(LogType.UserActivity, "{0} disconnected. ({1})", user, discMsg);
                    return;
                }

                Entities.DespawnEntities(this, false);
                ShowDisconnectInChat(chatMsg, isKick);
                save();

                PlayerInfo.Online.Remove(this);
                OnPlayerDisconnectEvent.Call(this, discMsg);

                level.AutoUnload();
                Dispose();
            } catch (Exception e) {
                Logger.LogError("Error disconnecting player", e);
            } finally {
                Socket.Close();
            }
        }
Ejemplo n.º 8
0
        void LeaveServer(string chatMsg, string discMsg, bool isKick, bool sync = false)
        {
            if (leftServer)
            {
                return;
            }
            leftServer = true;
            CriticalTasks.Clear();

            //Umm...fixed?
            if (name == null || name.Length == 0)
            {
                if (Socket != null)
                {
                    CloseSocket();
                }
                connections.Remove(this);
                disconnected = true;
                Logger.Log(LogType.UserActivity, "{0} disconnected.", ip);
                return;
            }

            Server.reviewlist.Remove(name);
            try {
                if (disconnected)
                {
                    CloseSocket();
                    connections.Remove(this);
                    PlayerInfo.Online.Remove(this);
                    return;
                }
                // FlyBuffer.Clear();
                LastAction = DateTime.UtcNow;
                IsAfk      = false;
                isFlying   = false;
                aiming     = false;

                if (chatMsg != null)
                {
                    chatMsg = Colors.Escape(chatMsg);
                }
                discMsg = Colors.Escape(discMsg);

                string kickPacketMsg = ChatTokens.Apply(discMsg, this);
                Send(Packet.Kick(kickPacketMsg, hasCP437), sync);
                disconnected = true;
                if (isKick)
                {
                    TimesBeenKicked++;
                }

                if (!loggedIn)
                {
                    connections.Remove(this);
                    RemoveFromPending();
                    PlayerInfo.Online.Remove(this);

                    string user = name + " (" + ip + ")";
                    Logger.Log(LogType.UserActivity, "{0} disconnected. ({1})", user, discMsg);
                    return;
                }

                if (Game.team != null)
                {
                    Game.team.RemoveMember(this);
                }
                TntWarsGame tntwarsgame = TntWarsGame.GameIn(this);
                if (tntwarsgame != null)
                {
                    tntwarsgame.Players.Remove(tntwarsgame.FindPlayer(this));
                    tntwarsgame.SendAllPlayersMessage("TNT Wars: " + ColoredName + " %Shas left TNT Wars!");
                }

                Entities.DespawnEntities(this, false);
                ShowDisconnectInChat(chatMsg, isKick);
                save();

                PlayerInfo.Online.Remove(this);
                Server.PlayerListUpdate();
                OnPlayerDisconnectEvent.Call(this, discMsg);

                if (ServerConfig.AutoLoadMaps && level.Config.AutoUnload && !level.IsMuseum && !level.HasPlayers())
                {
                    level.Unload(true);
                }
                Dispose();
            } catch (Exception e) {
                Logger.LogError(e);
            } finally {
                CloseSocket();
            }
        }