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); }
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); }
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); } } }