diff --git a/Dalamud/Dalamud.cs b/Dalamud/Dalamud.cs index 9cf47d043..c4cf16a72 100644 --- a/Dalamud/Dalamud.cs +++ b/Dalamud/Dalamud.cs @@ -61,6 +61,8 @@ namespace Dalamud { public DataManager Data { get; private set; } + internal SeStringManager SeStringManager { get; private set; } + internal Localization LocalizationManager; @@ -122,8 +124,7 @@ namespace Dalamud { this.Data = new DataManager(this.StartInfo.Language); await this.Data.Initialize(this.baseDirectory); - // TODO: better way to do this? basically for lumina injection - SeString.Dalamud = this; + SeStringManager = new SeStringManager(Data); this.NetworkHandlers = new NetworkHandlers(this, this.Configuration.OptOutMbCollection); @@ -145,6 +146,9 @@ namespace Dalamud { Log.Error(ex, "Plugin load failed."); } + this.Framework.Enable(); + this.ClientState.Enable(); + IsReady = true; }); } @@ -153,9 +157,6 @@ namespace Dalamud { #if DEBUG ReplaceExceptionHandler(); #endif - - this.Framework.Enable(); - this.ClientState.Enable(); } public void Unload() { diff --git a/Dalamud/DiscordBot/DiscordBotManager.cs b/Dalamud/DiscordBot/DiscordBotManager.cs index 2aff48585..ff2edef0d 100644 --- a/Dalamud/DiscordBot/DiscordBotManager.cs +++ b/Dalamud/DiscordBot/DiscordBotManager.cs @@ -162,7 +162,10 @@ namespace Dalamud.DiscordBot { await channel.SendMessageAsync(embed: embedBuilder.Build()); } - public async Task ProcessChatMessage(XivChatType type, StdString message, StdString sender) { + public async Task ProcessChatMessage(XivChatType type, SeString message, SeString sender) { + if (this.dalamud.SeStringManager == null) + return; + // Special case for outgoing tells, these should be sent under Incoming tells var wasOutgoingTell = false; if (type == XivChatType.TellOutgoing) { @@ -180,8 +183,7 @@ namespace Dalamud.DiscordBot { var channels = chatTypeConfigs.Select(c => GetChannel(c.Channel).GetAwaiter().GetResult()); - var parsedSender = SeString.Parse(sender.RawData); - var playerLink = parsedSender.Payloads.FirstOrDefault(x => x.Type == PayloadType.Player) as PlayerPayload; + var playerLink = sender.Payloads.FirstOrDefault(x => x.Type == PayloadType.Player) as PlayerPayload; string senderName; string senderWorld; @@ -192,15 +194,15 @@ namespace Dalamud.DiscordBot { // Special case 2 - When the local player talks in party/alliance, the name comes through as raw text, // but prefixed by their position number in the party (which for local player may always be 1) - if (parsedSender.TextValue.EndsWith(this.dalamud.ClientState.LocalPlayer.Name)) + if (sender.TextValue.EndsWith(this.dalamud.ClientState.LocalPlayer.Name)) { senderName = this.dalamud.ClientState.LocalPlayer.Name; } else { - Log.Error("playerLink was null. Sender: {0}", BitConverter.ToString(sender.RawData)); + Log.Error("playerLink was null. Sender: {0}", BitConverter.ToString(sender.Encode())); - senderName = wasOutgoingTell ? this.dalamud.ClientState.LocalPlayer.Name : parsedSender.TextValue; + senderName = wasOutgoingTell ? this.dalamud.ClientState.LocalPlayer.Name : sender.TextValue; } senderWorld = this.dalamud.ClientState.LocalPlayer.HomeWorld.GameData.Name; @@ -209,7 +211,7 @@ namespace Dalamud.DiscordBot { senderWorld = playerLink.World.Name; } - var rawMessage = SeString.Parse(message.RawData).TextValue; + var rawMessage = message.TextValue; var avatarUrl = string.Empty; var lodestoneId = string.Empty; diff --git a/Dalamud/Game/Chat/SeStringHandling/Payload.cs b/Dalamud/Game/Chat/SeStringHandling/Payload.cs index 2fc1080cd..89f6c8bd4 100644 --- a/Dalamud/Game/Chat/SeStringHandling/Payload.cs +++ b/Dalamud/Game/Chat/SeStringHandling/Payload.cs @@ -51,22 +51,12 @@ namespace Dalamud.Game.Chat.SeStringHandling /// /// The Lumina instance to use for any necessary data lookups. /// - protected DataManager dataResolver; + protected DataManager DataResolver; // private for now, since subclasses shouldn't interact with this // To force-invalidate it, Dirty can be set to true private byte[] encodedData; - protected Payload() - { - // this is not a good way to do this, but I don't want to have to include a dalamud - // reference on multiple methods in every payload class - // We could also just directly reference this static where we use it, but this at least - // allows for more easily changing how this is injected later, without affecting code - // that makes use of it - this.dataResolver = SeString.Dalamud.Data; - } - /// /// Encode this payload object into a byte[] useable in-game for things like the chat log. /// @@ -88,7 +78,7 @@ namespace Dalamud.Game.Chat.SeStringHandling /// /// A reader positioned at the start of the payload, and containing at least one entire payload. /// The constructed Payload-derived object that was decoded from the binary data. - public static Payload Decode(BinaryReader reader) + public static Payload Decode(BinaryReader reader, DataManager data) { var payloadStartPos = reader.BaseStream.Position; @@ -105,6 +95,8 @@ namespace Dalamud.Game.Chat.SeStringHandling payload = DecodeChunk(reader); } + payload.DataResolver = data; + // for now, cache off the actual binary data for this payload, so we don't have to // regenerate it if the payload isn't modified // TODO: probably better ways to handle this diff --git a/Dalamud/Game/Chat/SeStringHandling/Payloads/AutoTranslatePayload.cs b/Dalamud/Game/Chat/SeStringHandling/Payloads/AutoTranslatePayload.cs index f7a675ccd..c31c4c026 100644 --- a/Dalamud/Game/Chat/SeStringHandling/Payloads/AutoTranslatePayload.cs +++ b/Dalamud/Game/Chat/SeStringHandling/Payloads/AutoTranslatePayload.cs @@ -90,7 +90,7 @@ namespace Dalamud.Game.Chat.SeStringHandling.Payloads { string value = null; - var sheet = this.dataResolver.GetExcelSheet(); + var sheet = this.DataResolver.GetExcelSheet(); Completion row = null; try @@ -119,24 +119,24 @@ namespace Dalamud.Game.Chat.SeStringHandling.Payloads var name = actualTableName switch { - "Action" => this.dataResolver.GetExcelSheet().GetRow(this.key).Name, - "ActionComboRoute" => this.dataResolver.GetExcelSheet().GetRow(this.key).Name, - "BuddyAction" => this.dataResolver.GetExcelSheet().GetRow(this.key).Name, - "ClassJob" => this.dataResolver.GetExcelSheet().GetRow(this.key).Name, - "Companion" => this.dataResolver.GetExcelSheet().GetRow(this.key).Singular, - "CraftAction" => this.dataResolver.GetExcelSheet().GetRow(this.key).Name, - "GeneralAction" => this.dataResolver.GetExcelSheet().GetRow(this.key).Name, - "GuardianDeity" => this.dataResolver.GetExcelSheet().GetRow(this.key).Name, - "MainCommand" => this.dataResolver.GetExcelSheet().GetRow(this.key).Name, - "Mount" => this.dataResolver.GetExcelSheet().GetRow(this.key).Singular, - "Pet" => this.dataResolver.GetExcelSheet().GetRow(this.key).Name, - "PetAction" => this.dataResolver.GetExcelSheet().GetRow(this.key).Name, - "PetMirage" => this.dataResolver.GetExcelSheet().GetRow(this.key).Name, - "PlaceName" => this.dataResolver.GetExcelSheet().GetRow(this.key).Name, - "Race" => this.dataResolver.GetExcelSheet().GetRow(this.key).Masculine, - "TextCommand" => this.dataResolver.GetExcelSheet().GetRow(this.key).Command, - "Tribe" => this.dataResolver.GetExcelSheet().GetRow(this.key).Masculine, - "Weather" => this.dataResolver.GetExcelSheet().GetRow(this.key).Name, + "Action" => this.DataResolver.GetExcelSheet().GetRow(this.key).Name, + "ActionComboRoute" => this.DataResolver.GetExcelSheet().GetRow(this.key).Name, + "BuddyAction" => this.DataResolver.GetExcelSheet().GetRow(this.key).Name, + "ClassJob" => this.DataResolver.GetExcelSheet().GetRow(this.key).Name, + "Companion" => this.DataResolver.GetExcelSheet().GetRow(this.key).Singular, + "CraftAction" => this.DataResolver.GetExcelSheet().GetRow(this.key).Name, + "GeneralAction" => this.DataResolver.GetExcelSheet().GetRow(this.key).Name, + "GuardianDeity" => this.DataResolver.GetExcelSheet().GetRow(this.key).Name, + "MainCommand" => this.DataResolver.GetExcelSheet().GetRow(this.key).Name, + "Mount" => this.DataResolver.GetExcelSheet().GetRow(this.key).Singular, + "Pet" => this.DataResolver.GetExcelSheet().GetRow(this.key).Name, + "PetAction" => this.DataResolver.GetExcelSheet().GetRow(this.key).Name, + "PetMirage" => this.DataResolver.GetExcelSheet().GetRow(this.key).Name, + "PlaceName" => this.DataResolver.GetExcelSheet().GetRow(this.key).Name, + "Race" => this.DataResolver.GetExcelSheet().GetRow(this.key).Masculine, + "TextCommand" => this.DataResolver.GetExcelSheet().GetRow(this.key).Command, + "Tribe" => this.DataResolver.GetExcelSheet().GetRow(this.key).Masculine, + "Weather" => this.DataResolver.GetExcelSheet().GetRow(this.key).Name, _ => throw new Exception(actualTableName) }; diff --git a/Dalamud/Game/Chat/SeStringHandling/Payloads/ItemPayload.cs b/Dalamud/Game/Chat/SeStringHandling/Payloads/ItemPayload.cs index c723e5d6a..e0ca4b481 100644 --- a/Dalamud/Game/Chat/SeStringHandling/Payloads/ItemPayload.cs +++ b/Dalamud/Game/Chat/SeStringHandling/Payloads/ItemPayload.cs @@ -25,7 +25,7 @@ namespace Dalamud.Game.Chat.SeStringHandling.Payloads { get { - this.item ??= this.dataResolver.GetExcelSheet().GetRow(this.itemId); + this.item ??= this.DataResolver.GetExcelSheet().GetRow(this.itemId); return this.item; } } diff --git a/Dalamud/Game/Chat/SeStringHandling/Payloads/MapLinkPayload.cs b/Dalamud/Game/Chat/SeStringHandling/Payloads/MapLinkPayload.cs index c222c4101..41bf4565b 100644 --- a/Dalamud/Game/Chat/SeStringHandling/Payloads/MapLinkPayload.cs +++ b/Dalamud/Game/Chat/SeStringHandling/Payloads/MapLinkPayload.cs @@ -23,7 +23,7 @@ namespace Dalamud.Game.Chat.SeStringHandling.Payloads { get { - this.map ??= this.dataResolver.GetExcelSheet().GetRow(this.mapId); + this.map ??= this.DataResolver.GetExcelSheet().GetRow(this.mapId); return this.map; } } @@ -39,7 +39,7 @@ namespace Dalamud.Game.Chat.SeStringHandling.Payloads { get { - this.territoryType ??= this.dataResolver.GetExcelSheet().GetRow(this.territoryTypeId); + this.territoryType ??= this.DataResolver.GetExcelSheet().GetRow(this.territoryTypeId); return this.territoryType; } } diff --git a/Dalamud/Game/Chat/SeStringHandling/Payloads/PlayerPayload.cs b/Dalamud/Game/Chat/SeStringHandling/Payloads/PlayerPayload.cs index 084bb2279..ce32d1000 100644 --- a/Dalamud/Game/Chat/SeStringHandling/Payloads/PlayerPayload.cs +++ b/Dalamud/Game/Chat/SeStringHandling/Payloads/PlayerPayload.cs @@ -38,7 +38,7 @@ namespace Dalamud.Game.Chat.SeStringHandling.Payloads { get { - this.world ??= this.dataResolver.GetExcelSheet().GetRow(this.serverId); + this.world ??= this.DataResolver.GetExcelSheet().GetRow(this.serverId); return this.world; } } diff --git a/Dalamud/Game/Chat/SeStringHandling/Payloads/StatusPayload.cs b/Dalamud/Game/Chat/SeStringHandling/Payloads/StatusPayload.cs index 0ddbe927a..b02a02cd3 100644 --- a/Dalamud/Game/Chat/SeStringHandling/Payloads/StatusPayload.cs +++ b/Dalamud/Game/Chat/SeStringHandling/Payloads/StatusPayload.cs @@ -23,7 +23,7 @@ namespace Dalamud.Game.Chat.SeStringHandling.Payloads { get { - status ??= this.dataResolver.GetExcelSheet().GetRow(this.statusId); + status ??= this.DataResolver.GetExcelSheet().GetRow(this.statusId); return status; } } diff --git a/Dalamud/Game/Chat/SeStringHandling/Payloads/UIForegroundPayload.cs b/Dalamud/Game/Chat/SeStringHandling/Payloads/UIForegroundPayload.cs index 9a8e5780c..2772564e6 100644 --- a/Dalamud/Game/Chat/SeStringHandling/Payloads/UIForegroundPayload.cs +++ b/Dalamud/Game/Chat/SeStringHandling/Payloads/UIForegroundPayload.cs @@ -33,7 +33,7 @@ namespace Dalamud.Game.Chat.SeStringHandling.Payloads { get { - this.color ??= this.dataResolver.GetExcelSheet().GetRow(this.colorKey); + this.color ??= this.DataResolver.GetExcelSheet().GetRow(this.colorKey); return this.color; } } diff --git a/Dalamud/Game/Chat/SeStringHandling/Payloads/UIGlowPayload.cs b/Dalamud/Game/Chat/SeStringHandling/Payloads/UIGlowPayload.cs index 7731b431a..60a431640 100644 --- a/Dalamud/Game/Chat/SeStringHandling/Payloads/UIGlowPayload.cs +++ b/Dalamud/Game/Chat/SeStringHandling/Payloads/UIGlowPayload.cs @@ -33,7 +33,7 @@ namespace Dalamud.Game.Chat.SeStringHandling.Payloads { get { - this.color ??= this.dataResolver.GetExcelSheet().GetRow(this.colorKey); + this.color ??= this.DataResolver.GetExcelSheet().GetRow(this.colorKey); return this.color; } } diff --git a/Dalamud/Game/Chat/SeStringHandling/SeString.cs b/Dalamud/Game/Chat/SeStringHandling/SeString.cs index 0ca95b3e5..a7c954fab 100644 --- a/Dalamud/Game/Chat/SeStringHandling/SeString.cs +++ b/Dalamud/Game/Chat/SeStringHandling/SeString.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using Dalamud.Game.Chat.SeStringHandling.Payloads; namespace Dalamud.Game.Chat.SeStringHandling { @@ -11,9 +12,6 @@ namespace Dalamud.Game.Chat.SeStringHandling /// public class SeString { - // TODO: probably change how this is done/where it comes from - internal static Dalamud Dalamud { get; set; } - /// /// The ordered list of payloads included in this SeString. /// @@ -36,29 +34,6 @@ namespace Dalamud.Game.Chat.SeStringHandling } } - /// - /// Parse a binary game message into an SeString. - /// - /// Binary message payload data in SE's internal format. - /// An SeString containing parsed Payload objects for each payload in the data. - public static SeString Parse(byte[] bytes) - { - var payloads = new List(); - - using (var stream = new MemoryStream(bytes)) - using (var reader = new BinaryReader(stream)) - { - while (stream.Position < bytes.Length) - { - var payload = Payload.Decode(reader); - if (payload != null) - payloads.Add(payload); - } - } - - return new SeString(payloads); - } - /// /// Creates a new SeString from an ordered list of payloads. /// diff --git a/Dalamud/Game/Chat/SeStringHandling/SeStringUtils.cs b/Dalamud/Game/Chat/SeStringHandling/SeStringManager.cs similarity index 75% rename from Dalamud/Game/Chat/SeStringHandling/SeStringUtils.cs rename to Dalamud/Game/Chat/SeStringHandling/SeStringManager.cs index b4c970273..b1d6e2fca 100644 --- a/Dalamud/Game/Chat/SeStringHandling/SeStringUtils.cs +++ b/Dalamud/Game/Chat/SeStringHandling/SeStringManager.cs @@ -1,16 +1,47 @@ -using Dalamud.Game.Chat.SeStringHandling.Payloads; -using Lumina.Excel.GeneratedSheets; using System; using System.Collections.Generic; +using System.IO; using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; +using Dalamud.Data; +using Dalamud.Game.Chat.SeStringHandling.Payloads; +using Lumina.Excel.GeneratedSheets; namespace Dalamud.Game.Chat.SeStringHandling { - /// - /// A utility class for working with common SeString variants. - /// - public static class SeStringUtils + class SeStringManager { + private readonly DataManager data; + + public SeStringManager(DataManager Data) { + this.data = Data; + } + + /// + /// Parse a binary game message into an SeString. + /// + /// Binary message payload data in SE's internal format. + /// An SeString containing parsed Payload objects for each payload in the data. + public SeString Parse(byte[] bytes) + { + var payloads = new List(); + + using (var stream = new MemoryStream(bytes)) + using (var reader = new BinaryReader(stream)) + { + while (stream.Position < bytes.Length) + { + var payload = Payload.Decode(reader, this.data); + if (payload != null) + payloads.Add(payload); + } + } + + return new SeString(payloads); + } + /// /// Creates an SeString representing an entire Payload chain that can be used to link an item in the chat log. /// @@ -18,9 +49,9 @@ namespace Dalamud.Game.Chat.SeStringHandling /// Whether to link the high-quality variant of the item. /// An optional name override to display, instead of the actual item name. /// An SeString containing all the payloads necessary to display an item link in the chat log. - public static SeString CreateItemLink(uint itemId, bool isHQ, string displayNameOverride = null) + public SeString CreateItemLink(uint itemId, bool isHQ, string displayNameOverride = null) { - string displayName = displayNameOverride ?? SeString.Dalamud.Data.GetExcelSheet().GetRow(itemId).Name; + string displayName = displayNameOverride ?? this.data.GetExcelSheet().GetRow(itemId).Name; if (isHQ) { displayName += $" {(char)SeIconChar.HighQuality}"; @@ -50,12 +81,12 @@ namespace Dalamud.Game.Chat.SeStringHandling /// Whether to link the high-quality variant of the item. /// An optional name override to display, instead of the actual item name. /// An SeString containing all the payloads necessary to display an item link in the chat log. - public static SeString CreateItemLink(Item item, bool isHQ, string displayNameOverride = null) + public SeString CreateItemLink(Item item, bool isHQ, string displayNameOverride = null) { return CreateItemLink((uint)item.RowId, isHQ, displayNameOverride ?? item.Name); } - public static SeString CreateMapLink(uint territoryId, uint mapId, int rawX, int rawY) + public SeString CreateMapLink(uint territoryId, uint mapId, int rawX, int rawY) { var mapPayload = new MapLinkPayload(territoryId, mapId, rawX, rawY); var nameString = $"{mapPayload.PlaceName} {mapPayload.CoordinateString}"; @@ -81,7 +112,7 @@ namespace Dalamud.Game.Chat.SeStringHandling /// The human-readable y-coordinate for this link. /// An optional offset to account for rounding and truncation errors; it is best to leave this untouched in most cases. /// An SeString containing all of the payloads necessary to display a map link in the chat log. - public static SeString CreateMapLink(uint territoryId, uint mapId, float xCoord, float yCoord, float fudgeFactor = 0.05f) + public SeString CreateMapLink(uint territoryId, uint mapId, float xCoord, float yCoord, float fudgeFactor = 0.05f) { var mapPayload = new MapLinkPayload(territoryId, mapId, xCoord, yCoord, fudgeFactor); var nameString = $"{mapPayload.PlaceName} {mapPayload.CoordinateString}"; @@ -106,13 +137,13 @@ namespace Dalamud.Game.Chat.SeStringHandling /// The human-readable y-coordinate for this link. /// An optional offset to account for rounding and truncation errors; it is best to leave this untouched in most cases. /// An SeString containing all of the payloads necessary to display a map link in the chat log. - public static SeString CreateMapLink(string placeName, float xCoord, float yCoord, float fudgeFactor = 0.05f) + public SeString CreateMapLink(string placeName, float xCoord, float yCoord, float fudgeFactor = 0.05f) { - var mapSheet = SeString.Dalamud.Data.GetExcelSheet(); + var mapSheet = this.data.GetExcelSheet(); - var matches = SeString.Dalamud.Data.GetExcelSheet().GetRows() - .Where(row => row.Name.ToLowerInvariant() == placeName.ToLowerInvariant()) - .ToArray(); + var matches = this.data.GetExcelSheet().GetRows() + .Where(row => row.Name.ToLowerInvariant() == placeName.ToLowerInvariant()) + .ToArray(); foreach (var place in matches) { diff --git a/Dalamud/Game/ChatHandlers.cs b/Dalamud/Game/ChatHandlers.cs index 9e9b8ce39..d3145240b 100644 --- a/Dalamud/Game/ChatHandlers.cs +++ b/Dalamud/Game/ChatHandlers.cs @@ -93,7 +93,7 @@ namespace Dalamud.Game { this.dalamud = dalamud; dalamud.Framework.Gui.Chat.OnCheckMessageHandled += OnCheckMessageHandled; - dalamud.Framework.Gui.Chat.OnChatMessageRaw += OnChatMessage; + dalamud.Framework.Gui.Chat.OnChatMessage += OnChatMessage; } private void OnCheckMessageHandled(XivChatType type, uint senderid, ref SeString sender, ref SeString message, ref bool isHandled) { @@ -121,8 +121,8 @@ namespace Dalamud.Game { public string LastLink { get; private set; } - private void OnChatMessage(XivChatType type, uint senderId, ref StdString sender, - ref StdString message, ref bool isHandled) { + private void OnChatMessage(XivChatType type, uint senderId, ref SeString sender, + ref SeString message, ref bool isHandled) { if (type == XivChatType.Notice && !this.hasSeenLoadingMsg) PrintWelcomeMessage(); @@ -136,14 +136,11 @@ namespace Dalamud.Game { return; #endif - var messageVal = message.Value; - var senderVal = sender.Value; - if (type == XivChatType.RetainerSale) { foreach (var regex in retainerSaleRegexes[dalamud.StartInfo.Language]) { - var matchInfo = regex.Match(message.Value); + var matchInfo = regex.Match(message.TextValue); // we no longer really need to do/validate the item matching since we read the id from the byte array // but we'd be checking the main match anyway @@ -152,10 +149,10 @@ namespace Dalamud.Game { continue; var itemLink = - SeString.Parse(message.RawData).Payloads.First(x => x.Type == PayloadType.Item) as ItemPayload; + message.Payloads.First(x => x.Type == PayloadType.Item) as ItemPayload; if (itemLink == null) { - Log.Error("itemLink was null. Msg: {0}", BitConverter.ToString(message.RawData)); + Log.Error("itemLink was null. Msg: {0}", BitConverter.ToString(message.Encode())); break; } @@ -176,12 +173,13 @@ namespace Dalamud.Game { Task.Run(() => this.dalamud.BotManager.ProcessChatMessage(type, messageCopy, senderCopy)); // Handle all of this with SeString some day + /* if ((this.HandledChatTypeColors.ContainsKey(type) || type == XivChatType.Say || type == XivChatType.Shout || - type == XivChatType.Alliance || type == XivChatType.TellOutgoing || type == XivChatType.Yell) && !message.Value.Contains((char)0x02)) { - var italicsStart = message.Value.IndexOf("*"); - var italicsEnd = message.Value.IndexOf("*", italicsStart + 1); + type == XivChatType.Alliance || type == XivChatType.TellOutgoing || type == XivChatType.Yell)) { + var italicsStart = message.TextValue.IndexOf("*", StringComparison.InvariantCulture); + var italicsEnd = message.TextValue.IndexOf("*", italicsStart + 1, StringComparison.InvariantCulture); - var messageString = message.Value; + var messageString = message.TextValue; while (italicsEnd != -1) { var it = MakeItalics( @@ -194,9 +192,9 @@ namespace Dalamud.Game { message.RawData = Encoding.UTF8.GetBytes(messageString); } + */ - - var linkMatch = this.urlRegex.Match(message.Value); + var linkMatch = this.urlRegex.Match(message.TextValue); if (linkMatch.Value.Length > 0) LastLink = linkMatch.Value; } @@ -244,7 +242,7 @@ namespace Dalamud.Game { } } - private static string MakeItalics(string text) { + private static SeString MakeItalics(string text) { // TODO: when the above code is switched to SeString, this can be a straight insertion of the // italics payloads only, and be a lot cleaner var italicString = new SeString(new List(new Payload[] @@ -254,7 +252,7 @@ namespace Dalamud.Game { EmphasisItalicPayload.ItalicsOff })); - return Encoding.UTF8.GetString(italicString.Encode()); + return italicString; } } } diff --git a/Dalamud/Game/Internal/Gui/ChatGui.cs b/Dalamud/Game/Internal/Gui/ChatGui.cs index 0158eef25..8bf451490 100644 --- a/Dalamud/Game/Internal/Gui/ChatGui.cs +++ b/Dalamud/Game/Internal/Gui/ChatGui.cs @@ -116,8 +116,8 @@ namespace Dalamud.Game.Internal.Gui { var sender = StdString.ReadFromPointer(pSenderName); var message = StdString.ReadFromPointer(pMessage); - var parsedSender = SeString.Parse(sender.RawData); - var parsedMessage = SeString.Parse(message.RawData); + var parsedSender = this.dalamud.SeStringManager.Parse(sender.RawData); + var parsedMessage = this.dalamud.SeStringManager.Parse(message.RawData); Log.Verbose("[CHATGUI][{0}][{1}]", parsedSender.TextValue, parsedMessage.TextValue);