diff --git a/README.md b/README.md index ede22b7..36aa9bf 100644 --- a/README.md +++ b/README.md @@ -90,6 +90,7 @@ Then run School of Dragons. - SetAchievementByEntityIDs - SetAvatar - SetCommonInventory +- SetDisplayName (V2) - SetDragonXP (used by account import tools) - SetImage - SetKeyValuePair diff --git a/mitm-redirect.py b/mitm-redirect.py index 86661cf..360a213 100644 --- a/mitm-redirect.py +++ b/mitm-redirect.py @@ -86,6 +86,7 @@ methods = [ 'GetGameDataByGame', 'GetGameDataByGameForDateRange', 'GetTopAchievementPointUsers', + 'SetDisplayName', ] def routable(path): diff --git a/src/Controllers/Common/ContentController.cs b/src/Controllers/Common/ContentController.cs index 141c038..9561035 100644 --- a/src/Controllers/Common/ContentController.cs +++ b/src/Controllers/Common/ContentController.cs @@ -102,6 +102,33 @@ public class ContentController : Controller { } } + [HttpPost] + [Produces("application/xml")] + [Route("/V2/ContentWebService.asmx/SetDisplayName")] + [VikingSession] + public IActionResult SetDisplayName(Viking viking, [FromForm] string request) { + string newName = XmlUtil.DeserializeXml(request).DisplayName; + + if (String.IsNullOrWhiteSpace(newName) || ctx.Vikings.Count(e => e.Name == newName) > 0) { + return Ok(new SetAvatarResult { + Success = false, + StatusCode = AvatarValidationResult.AvatarDisplayNameInvalid + }); + } + + viking.Name = newName; + AvatarData avatarData = XmlUtil.DeserializeXml(viking.AvatarSerialized); + avatarData.DisplayName = newName; + viking.AvatarSerialized = XmlUtil.SerializeXml(avatarData); + ctx.SaveChanges(); + + return Ok(new SetAvatarResult { + Success = true, + DisplayName = viking.Name, + StatusCode = AvatarValidationResult.Valid + }); + } + [HttpPost] [Produces("application/xml")] [Route("ContentWebService.asmx/GetKeyValuePair")] diff --git a/src/Schema/SetDisplayNameRequest.cs b/src/Schema/SetDisplayNameRequest.cs new file mode 100644 index 0000000..ce030aa --- /dev/null +++ b/src/Schema/SetDisplayNameRequest.cs @@ -0,0 +1,16 @@ +using System.Xml.Serialization; + +namespace sodoff.Schema; + +[XmlRoot(ElementName = "sdnr", Namespace = "")] +[Serializable] +public class SetDisplayNameRequest { + [XmlElement(ElementName = "dn")] + public string DisplayName { get; set; } + + [XmlElement(ElementName = "iid")] + public int ItemID { get; set; } + + [XmlElement(ElementName = "sid")] + public int StoreID { get; set; } +}