diff --git a/overlay/Scripts/Custom/Bridge/BridgeProfile.cs b/overlay/Scripts/Custom/Bridge/BridgeProfile.cs index 7e12197..4e08ede 100644 --- a/overlay/Scripts/Custom/Bridge/BridgeProfile.cs +++ b/overlay/Scripts/Custom/Bridge/BridgeProfile.cs @@ -98,9 +98,55 @@ namespace Server.Custom.Bridge } sb.Append(']'); + WriteTitles(sb, m); + return sb.End(); } + /// + /// The titles a character holds (docs/PROTOCOL_2.md §10.3). `selected` is the index into + /// `reward` currently displayed (-1 if none). `fameKarma` and `skill` are the computed + /// display titles (may be absent). `reward` is the raw reward-title list — an entry may be + /// a cliloc number (as a string) or a literal string; resolve clilocs website-side. + /// + private static void WriteTitles(StringBuilder sb, PlayerMobile m) + { + sb.Append(",\"titles\":{\"selected\":").Append(m.SelectedTitle); + + var fameKarma = m.FameKarmaTitle; + if (!String.IsNullOrEmpty(fameKarma)) + { + sb.Append(",\"fameKarma\":"); + BridgeJson.Escape(sb, fameKarma); + } + + var skill = m.PaperdollSkillTitle; + if (!String.IsNullOrEmpty(skill)) + { + sb.Append(",\"skill\":"); + BridgeJson.Escape(sb, skill); + } + + sb.Append(",\"reward\":["); + var rewards = m.RewardTitles; + if (rewards != null) + { + bool first = true; + for (int i = 0; i < rewards.Count; i++) + { + var r = rewards[i]; + if (r == null) + continue; + + if (!first) sb.Append(','); + first = false; + + BridgeJson.Escape(sb, Convert.ToString(r, System.Globalization.CultureInfo.InvariantCulture)); + } + } + sb.Append("]}"); + } + private static bool IsGearLayer(Layer layer) { switch (layer)