public static MessagePiece BuildSysMsgItem(string msgText)
        {
            var dictionary = ChatUtils.BuildParametersDictionary(msgText);

            var id  = ChatUtils.GetId(dictionary, "item");
            var uid = ChatUtils.GetItemUid(dictionary);

            var rawLink = new StringBuilder("1#####");

            rawLink.Append(id.ToString());
            if (uid != 0)
            {
                rawLink.Append("@" + uid.ToString());
            }

            var username = SessionManager.CurrentPlayer.Name;

            if (dictionary.ContainsKey("UserName"))
            {
                username = dictionary["UserName"];
                rawLink.Append("@" + username);
            }
            var mp = new MessagePiece(id.ToString());

            if (SessionManager.ItemsDatabase.Items.TryGetValue(id, out var i))
            {
                var txt = $"<{i.Name}>";
                mp = new MessagePiece(txt)
                {
                    Type = MessagePieceType.Item,
                    //BoundType = i.BoundType,
                    ItemId    = id,
                    ItemUid   = uid,
                    OwnerName = username,
                    RawLink   = rawLink.ToString()
                };
                mp.SetColor(ChatUtils.GetItemColor(i));
            }
            return(mp);
        }
Пример #2
0
        public static MessagePiece BuildSysMsgCreature(string msgText)
        {
            var dictionary = ChatUtils.BuildParametersDictionary(msgText);

            var creatureId    = dictionary["creature"];
            var creatureSplit = creatureId.Split('#');
            var zoneId        = uint.Parse(creatureSplit[0]);
            var templateId    = uint.Parse(creatureSplit[1]);

            var txt = creatureId;

            if (SessionManager.DB.MonsterDatabase.TryGetMonster(templateId, zoneId, out var m))
            {
                txt = m.Name;
            }

            var mp = new MessagePiece(txt)
            {
                Type = MessagePieceType.Simple
            };

            return(mp);
        }
Пример #3
0
        private void ParseSysHtmlPiece(HtmlNode piece, Dictionary <string, string> prm)
        {
            if (piece.Name == "img")
            {
                var source = piece.GetAttributeValue("src", "")
                             .Replace("img://__", "")
                             .ToLower();
                var mp = new IconMessagePiece(source, App.Settings.FontSize, false);
                AddPiece(mp);
            }
            else
            {
                var col = ChatUtils.GetCustomColor(piece);

                var content       = ChatUtils.ReplaceParameters(piece.InnerText, prm, true);
                var innerPieces   = content.Split(new[] { '{', '}' }, StringSplitOptions.RemoveEmptyEntries);
                var plural        = false;
                var selectionStep = 0;

                foreach (var inPiece in innerPieces)
                {
                    switch (selectionStep)
                    {
                    case 1:
                        if (int.Parse(inPiece) != 1)
                        {
                            plural = true;
                        }
                        selectionStep++;
                        continue;

                    case 2:
                        if (inPiece == "/s//s" && plural)
                        {
                            Pieces.Last().Text = Pieces.Last().Text + "s";
                            plural = false;
                        }
                        selectionStep = 0;
                        continue;
                    }

                    MessagePieceBase mp;
                    if (inPiece.StartsWith("@select"))
                    {
                        selectionStep++;
                        continue;
                    }
                    if (inPiece.StartsWith("@item"))
                    {
                        mp = MessagePieceBuilder.BuildSysMsgItem(inPiece);
                    }
                    else if (inPiece.StartsWith("@abnormal"))
                    {
                        var abName = "Unknown";
                        if (Game.DB.AbnormalityDatabase.Abnormalities.TryGetValue(
                                uint.Parse(inPiece.Split(':')[1]), out var ab))
                        {
                            abName = ab.Name;
                        }
                        mp = new SimpleMessagePiece(abName, App.Settings.FontSize, false)
                        {
                            Color = col
                        };
                    }
                    else if (inPiece.StartsWith("@achievement"))
                    {
                        mp       = MessagePieceBuilder.BuildSysMsgAchi(inPiece);
                        mp.Color = col;
                    }
                    else if (inPiece.StartsWith("@GuildQuest"))
                    {
                        mp       = MessagePieceBuilder.BuildSysMsgGuildQuest(inPiece);
                        mp.Color = col;
                    }
                    else if (inPiece.StartsWith("@dungeon"))
                    {
                        mp       = MessagePieceBuilder.BuildSysMsgDungeon(inPiece);
                        mp.Color = col;
                    }
                    else if (inPiece.StartsWith("@accountBenefit"))
                    {
                        mp       = MessagePieceBuilder.BuildSysMsgAccBenefit(inPiece);
                        mp.Color = col;
                    }
                    else if (inPiece.StartsWith("@AchievementGradeInfo"))
                    {
                        mp = MessagePieceBuilder.BuildSysMsgAchiGrade(inPiece);
                    }
                    else if (inPiece.StartsWith("@quest"))
                    {
                        mp       = MessagePieceBuilder.BuildSysMsgQuest(inPiece);
                        mp.Color = col;
                    }
                    else if (inPiece.StartsWith("@creature"))
                    {
                        mp       = MessagePieceBuilder.BuildSysMsgCreature(inPiece);
                        mp.Color = col;
                    }
                    else if (inPiece.StartsWith("@rgn"))
                    {
                        mp       = MessagePieceBuilder.BuildSysMsgRegion(inPiece);
                        mp.Color = col;
                    }
                    else if (inPiece.StartsWith("@zoneName"))
                    {
                        mp       = MessagePieceBuilder.BuildSysMsgZone(inPiece);
                        mp.Color = col;
                    }
                    else if (inPiece.Contains("@money"))
                    {
                        var t = inPiece.Replace("@money", "");
                        mp      = new MoneyMessagePiece(new Money(t));
                        Channel = ChatChannel.Money;
                    }
                    else
                    {
                        mp = new SimpleMessagePiece(inPiece.UnescapeHtml(), App.Settings.FontSize, false, col);
                    }
                    AddPiece(mp);
                }
            }
        }