Exemple #1
0
        public ServerStatus()
        {
            Version     = new VersionPair(MinecraftServer.FrontendVersion);
            Players     = new PlayersStatus();
            Description = ChatMessageServer.CreateText(MinecraftServer.PingReplyMessage).Json;

            //Favicon - nothing seem to work but the gist says it should

            /*Favicon = "http://mctraveler.eu/icon.png";
             * //http://status.mctraveler.eu/logo.png";
             *
             * Bitmap b = new Bitmap(16, 16);
             * using (var g = Graphics.FromImage(b))
             * {
             *  g.FillEllipse(Brushes.Red, 1, 2, 5, 6);
             * }
             * using (var ms = new MemoryStream())
             * {
             *  b.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
             *  Favicon = "data:image/png;base64," + Convert.ToBase64String(ms.ToArray());
             * }*/
            string faviconPath = "icon.png";

            if (File.Exists(faviconPath))
            {
                Favicon = "data:image/png;base64," + Convert.ToBase64String(File.ReadAllBytes(faviconPath));
            }
        }
Exemple #2
0
        public DisconnectHandshake(string message)
        {
            var msg = ChatMessageServer.CreateText(message);

            this.Message       = msg.Json;
            this.Message.Color = "red";
        }
        public static ChatMessageServer CreateText (string message, ChatPosition pos = ChatPosition.ChatBox)
		{
			if (message.Length > 119)
				throw new ArgumentException ("Too long >119");

			var c = new ChatMessageServer ();
			c.Json = new ChatJson ();
			c.Json.Text = message;
            c.Position = pos;
			return c;
		}
        public static ChatMessageServer CreateText(string message, ChatPosition pos = ChatPosition.ChatBox)
        {
            if (message.Length > 119)
            {
                throw new ArgumentException("Too long >119");
            }

            var c = new ChatMessageServer();

            c.Json      = new ChatJson();
            c.Json.Text = message;
            c.Position  = pos;
            return(c);
        }
Exemple #5
0
        /// <summary>
        /// Return true to block message
        /// </summary>
        public static bool ParseServer(Client player, ChatMessageServer chat)
        {
            chat.SetPacketBuffer(null);
            var cm = chat.Json;
            string trans = cm.Translate;
            
            if (trans == "tile.bed.noSleep")
            {
                player.TellSystem(Chat.DarkBlue, "No sleep during daytime");
                return true;
            }
            
            var args = cm.With;
            if (trans == null || args == null)
                return false;

            //ignore Joined/Left messages, generated in proxy instead
            if (trans.StartsWith("multiplayer.player"))
                return true;

            switch (trans)
            {
            //ignore some messages
                case "commands.weather.clear":
                case "commands.weather.rain":
                case "commands.weather.thunder":
                case "commands.gamemode.success.other":
                case "commands.save.success":
                case "chat.type.admin":
                    return true;
            }

            Debug.WriteLine("ServerChat: " + cm.Serialize());

            if (trans == "chat.type.announcement")
            {
            /*
                if (args.Count == 2)
                    player.Tell(Chat.Purple, "[" + args [0] + "] " + args [1]);
                else
                {
                    string t = "";
                    foreach (var a in args)
                        t += " " + a.Text;
                    player.Tell(Chat.Purple, t);
                }*/
                return false;
            }

            //Herobrine never dies
            for (int n = 0; n < args.Count; n++)
            {
                if (args [n].Text == "Player")
                    return true;
            }

            //Allow all other
            if (trans.StartsWith("death.") == false)
                return false;

            //Block all other usernames
            if (args [0].Text != player.MinecraftUsername)
                return true;
        
            //not sure but better require preparation again
            chat.SetPacketBuffer(null);

            //Adjust player name
            if (args [0].Text != null)
                args [0].Text = args [0].Text.Replace(player.MinecraftUsername, player.Name);
                    
            if (args [0].ClickEvent != null)
                args [0].ClickEvent.Value = args [0].ClickEvent.Value.Replace(player.MinecraftUsername, player.Name);
            
            //Adjust attacker name
            if (args.Count > 1)
            {
                string byWho = args [1].Text;
                Client pp = PlayerList.GetPlayerByUsername(byWho);
                if (pp != null)
                {
                    Log.WriteAction(player, new Attacked(pp), true);

                    if (pp.Settings.Cloaked == MobType.None.ToString())
                    {
                        trans = "death.attack.mob";
                        cm.Translate = trans;
                        args [1].Text = "Skeleton";
                    } else if (pp.Settings.Cloaked != null)
                    {
                        trans = "death.attack.mob";
                        cm.Translate = trans;
                        args [1].Text = pp.Settings.Cloaked;
                    } else
                    {
                        //Stats
                        player.Settings.Stats.Murdered += 1;
                        pp.Settings.Stats.Kills += 1;
                    }
                }
            }

            if (!Cause.Alternatives.ContainsKey(trans))
            {
                Parser.TellNuxas(Chat.Aqua, "Unhandled cause of death: " + trans);
                return false;
            }

            /*var list = Cause.Alternatives [trans];
            Random r = new Random();
            cm.Translate = list [r.Next(list.Length)];
            */
            cm.Color = "red";
            player.Session.World.SendToAll(chat);

            player.Settings.Stats.NaturalDeath += 1;
            return true;
        }
Exemple #6
0
        /// <summary>
        /// Pure chat messages
        /// </summary>
        public static void ParseClientChat(Client player, string message)
        {
            //Block unknown prevent mistype
            if (message.StartsWith(",") || message.StartsWith(">"))
            {
                player.TellSystem(Chat.Red, "unknown start symbol, begin with a space to ignore");
                return;
            }
            
            //remove links from new players
            /*
            if (player.Uptime.TotalDays < 2)
            {
                player.Tell(Chat.Purple, "New players can't send links");
                message = message.Replace("http://", "");
                message = message.Replace("https://", "");
                var mp = message.Split();
                foreach(var m in mp)
                {
                    if(m.StartsWith("http://") ||  m.StartsWith("https://"))
                }
            }*/

            //Short /tell
            if (message.StartsWith("."))
            {
                string[] parts = message.Substring(1).Split(' ');
                if (parts.Length < 2)
                {
                    player.TellSystem(Chat.Red, "Usage: .username message");
                    return;
                }
                message = FormatSpell(player, parts.JoinFrom(1));
                Chatting.Parser.SendPrivateMessage(player, parts [0], message);
                return;
            }
            
            //Short reply
            if (message.StartsWith("<"))
            {
                if (player.LastInTell == null)
                {
                    player.TellSystem(Chat.Red, "You must have received a private message before replying");
                    return;
                }
                message = FormatSpell(player, message.Substring(1));
                Chatting.Parser.SendPrivateMessage(player, player.LastInTell, message);
                return;
            }
            
            //Short /t
            if (message.StartsWith("-"))
            {
                if (player.LastOutTell == null)
                {
                    player.TellSystem(Chat.Red, "Use \".username message\" one time first");
                    return;
                }
                message = FormatSpell(player, message.Substring(1));
                Chatting.Parser.SendPrivateMessage(player, player.LastOutTell, message);
                return;
            }

            //CAPS block
            if (message.Length > 3)
            {
                string caps = message.ToUpperInvariant();
                if (caps == message)
                    message = message.ToLowerInvariant();
            }
            
            //Shout !
            if (message == "!")
                message = "!!";
            bool shout = message.StartsWith("!");
            if (shout)
                message = message.Substring(1);
            if (player.Session.CurrentRegion != null && player.Session.CurrentRegion.Type == "spawn" && player.ChatChannel == null)
                shout = true;
            
            int receivers = 0;
            
            //No shouting for banned
            if (shout && Banned.CheckBanned(player) != null)
            {
                player.TellSystem(Chat.Red, "No shouting for the banned!");
                return;
            }

            //Format Translate Spell for all other
            message = FormatSpell(player, message);

            //War chat
            if (!shout)
            {
                if (WarChat(player, message))
                    return;
            }
            if (player.Settings.Cloaked != null || player.Session is PossessSession)
            {
                player.TellSystem(Chat.Red, "no chat while cloaked, pm still works");
                return;
            }
            
            
            foreach (Client p in  PlayerList.List)
            {
                if (shout)
                {
                    p.TellSystem(Chat.Gold + player.Name + " " + Chat.White + (p.Settings.Help ? "[shout] " : ""), message);
                    receivers += 1;
                    continue;
                }
                
                if (player.ChatChannel != null)
                {
                    //Channel chat
                    if (player.ChatChannel == p.ChatChannel)
                    {
                        p.TellSystem(Chat.Blue + player.Name + " " + Chat.Green + "[" + p.ChatChannel + "] ", message);
                        receivers += 1;
                    }
                    continue;
                }
                
                double distance = player.Session.Position.DistanceTo(p.Session.Position);
                
                //residents always hear
                if (distance >= DistanceMax && TalkingToResident(player, p))
                {
                    p.TellSystem(Chat.Blue + player.Name + " " + Chat.Aqua + "[" + player.Session.CurrentRegion.Name + "] " + Chat.Gray, message);
                    receivers += 1;
                    continue;
                }
                
                if (p.Settings.Firehose == false)
                {
                    if (player.Session.World != p.Session.World)
                        continue;
                    if (player.Session.Dimension != p.Session.Dimension)
                        continue;
                } else
                {
                    if (player.Session.World != p.Session.World)
                        distance = DistanceMax + 1;
                    if (player.Session.Dimension != p.Session.Dimension)
                        distance = DistanceMax + 1;
                    
                    //firehose does not hear banned
                    if ((p.Session is HellSession == false) && Banned.CheckBanned(player) != null)
                        continue;
                }

                var chatText = new ChatJson()
                {
                    Text = message,
                    Color = "gray",
                    //HoverEvent = ChatEvent.HoverShowText("that's what " + player.Name + " said"),
                };
                var c = new ChatJson();
                c.Translate = "%1$s %2$s";
                c.With = new List<ChatJson>()
                {
                    new ChatJson()
                    {
                        Text = player.Name,
                        Color = "blue",
                        ClickEvent = ChatEvent.ClickSuggestCommand("." + player.Name + " "),
                        HoverEvent = ChatEvent.HoverShowText("send private message"),
                    },
                    chatText
                };

                if (distance < DistanceClose && p != player)
                    chatText.Color = "yellow";
                else if (distance < DistanceFar || p.Settings.Firehose && distance < DistanceMax)
                    chatText.Color = "white";
                else if (distance < DistanceMax || p.Settings.Firehose)
                    chatText.Color = "gray";
                else
                    continue;

                var packet = new ChatMessageServer();
                packet.Json = c;

                //Send message
                p.Queue.Queue(packet);

                if (p.Settings.Cloaked != null) //Dont count cloaked players
                    continue;
                
                if (p != player)
                    receivers += 1;
            }
            
            if (receivers == 0)
                player.TellSystem(Chat.Blue, "No one heard you, " + Chat.Gray + "see /help");
            
            Log.WriteChat(player, player.ChatChannel, receivers, message);
            
            player.ChatEntry = new Entry(player.ChatChannel, message);
        }