diff --git a/mitm-redirect.py b/mitm-redirect.py index cf79072..f22355e 100644 --- a/mitm-redirect.py +++ b/mitm-redirect.py @@ -54,7 +54,9 @@ methods = [ 'GetAchievementsByUserID', 'PurchaseItems', 'AcceptMission', - 'GetUserMissionState' + 'GetUserMissionState', + 'SetAchievementAndGetReward', + 'SetUserAchievementTask' ] def routable(path): diff --git a/src/Controllers/Common/AchievementController.cs b/src/Controllers/Common/AchievementController.cs index 82bd64c..c62623a 100644 --- a/src/Controllers/Common/AchievementController.cs +++ b/src/Controllers/Common/AchievementController.cs @@ -1,6 +1,7 @@ using System.Reflection; using Microsoft.AspNetCore.Mvc; +using sodoff.Attributes; using sodoff.Model; using sodoff.Schema; using sodoff.Util; @@ -63,4 +64,48 @@ public class AchievementController : Controller { return Ok(arrAchievements); } + + [HttpPost] + [Produces("application/xml")] + [Route("AchievementWebService.asmx/SetAchievementAndGetReward")] + public IActionResult SetAchievementAndGetReward([FromForm] string apiToken, [FromForm] int achievementID) { + // TODO: This is a placeholder; returns 5 gems + Viking? viking = ctx.Sessions.FirstOrDefault(x => x.ApiToken == apiToken).Viking; + return Ok(new AchievementReward[1] { + new AchievementReward { + Amount = 5, + PointTypeID = 5, + EntityID = Guid.Parse(viking.Id), + EntityTypeID = 1, + RewardID = 552 + } + }); + } + + [HttpPost] + [Produces("application/xml")] + [Route("V2/AchievementWebService.asmx/SetUserAchievementTask")] + [DecryptRequest("achievementTaskSetRequest")] + public IActionResult SetUserAchievementTask([FromForm] string apiToken, [FromForm] int achievementID) { + // TODO: This is a placeholder + string xml = Request.Form["achievementTaskSetRequest"]; + AchievementTaskSetResponse response = new AchievementTaskSetResponse { + Success = true, + UserMessage = true, + AchievementName = "Placeholder Achievement", + Level = 1, + AchievementTaskGroupID = 1279, + LastLevelCompleted = true, + AchievementInfoID = 1279, + AchievementRewards = new AchievementReward[1] { + new AchievementReward { + Amount = 25, + PointTypeID = 1, + RewardID = 910, + EntityTypeID =1 + } + } + }; + return Ok(new ArrayOfAchievementTaskSetResponse { AchievementTaskSetResponse = new AchievementTaskSetResponse[1] { response } }); + } } diff --git a/src/Controllers/Common/ChallengeController.cs b/src/Controllers/Common/ChallengeController.cs index 4280e7e..92eb230 100644 --- a/src/Controllers/Common/ChallengeController.cs +++ b/src/Controllers/Common/ChallengeController.cs @@ -6,7 +6,7 @@ public class ChallengeController : Controller { [HttpPost] [Produces("application/xml")] - [Route("ContentWebService.asmx/ChallengeWebService.asmx/GetActiveChallenges")] + [Route("ChallengeWebService.asmx/GetActiveChallenges")] public IActionResult GetActiveChallenges() { // TODO: this is a placeholder return Ok(new ChallengeInfo[0]); diff --git a/src/Schema/AchievementTaskSetResponse.cs b/src/Schema/AchievementTaskSetResponse.cs new file mode 100644 index 0000000..3fa4dd2 --- /dev/null +++ b/src/Schema/AchievementTaskSetResponse.cs @@ -0,0 +1,38 @@ +using System.Xml.Serialization; + +namespace sodoff.Schema; + +// Token: 0x020008AB RID: 2219 +[XmlRoot(ElementName = "ATSR", Namespace = "")] +[Serializable] +public class AchievementTaskSetResponse +{ + public AchievementTaskSetResponse() + { + this.AchievementRewards = null; + } + + [XmlElement(ElementName = "s")] + public bool Success; + + [XmlElement(ElementName = "u")] + public bool UserMessage; + + [XmlElement(ElementName = "a")] + public string AchievementName; + + [XmlElement(ElementName = "l")] + public int Level; + + [XmlElement(ElementName = "AR", IsNullable = true)] + public AchievementReward[] AchievementRewards; + + [XmlElement(ElementName = "aid", IsNullable = true)] + public int? AchievementTaskGroupID; + + [XmlElement(ElementName = "LL", IsNullable = true)] + public bool? LastLevelCompleted; + + [XmlElement(ElementName = "aiid", IsNullable = true)] + public int? AchievementInfoID; +} \ No newline at end of file diff --git a/src/Schema/ArrayOfAchievementTaskSetResponse.cs b/src/Schema/ArrayOfAchievementTaskSetResponse.cs new file mode 100644 index 0000000..b4b1219 --- /dev/null +++ b/src/Schema/ArrayOfAchievementTaskSetResponse.cs @@ -0,0 +1,11 @@ +using System.Xml.Serialization; + +namespace sodoff.Schema; + +[XmlRoot(ElementName = "ArrayOfAchievementTaskSetResponse", Namespace = "http://api.jumpstart.com/")] +[Serializable] +public class ArrayOfAchievementTaskSetResponse +{ + [XmlElement(ElementName = "AchievementTaskSetResponse")] + public AchievementTaskSetResponse[] AchievementTaskSetResponse; +}