diff --git a/src/Controllers/Common/AchievementController.cs b/src/Controllers/Common/AchievementController.cs index 44dae6d..3d69244 100644 --- a/src/Controllers/Common/AchievementController.cs +++ b/src/Controllers/Common/AchievementController.cs @@ -93,7 +93,7 @@ public class AchievementController : Controller { [HttpPost] [Produces("application/xml")] [Route("AchievementWebService.asmx/GetUserAchievementInfo")] - public IActionResult GetUserAchievementInfo([FromForm] string apiToken) { + public IActionResult GetUserAchievementInfo([FromForm] string apiToken) { // used by World Of Jumpstart Viking? viking = ctx.Sessions.FirstOrDefault(x => x.ApiToken == apiToken).Viking; if (viking != null) { diff --git a/src/Controllers/Common/ContentController.cs b/src/Controllers/Common/ContentController.cs index 8d73667..7b49315 100644 --- a/src/Controllers/Common/ContentController.cs +++ b/src/Controllers/Common/ContentController.cs @@ -35,6 +35,24 @@ public class ContentController : Controller { this.config = config; } + [HttpPost] + [Produces("application/xml")] + [Route("ContentWebService.asmx/GetRaisedPetGrowthStates")] // used by World Of Jumpstart 1.1 + public RaisedPetGrowthState[] GetRaisedPetGrowthStates() + { + return new RaisedPetGrowthState[] { + new RaisedPetGrowthState {GrowthStateID = 0, Name = "none"}, + new RaisedPetGrowthState {GrowthStateID = 1, Name = "powerup"}, + new RaisedPetGrowthState {GrowthStateID = 2, Name = "find"}, + new RaisedPetGrowthState {GrowthStateID = 3, Name = "eggInHand"}, + new RaisedPetGrowthState {GrowthStateID = 4, Name = "hatching"}, + new RaisedPetGrowthState {GrowthStateID = 5, Name = "baby"}, + new RaisedPetGrowthState {GrowthStateID = 6, Name = "child"}, + new RaisedPetGrowthState {GrowthStateID = 7, Name = "teen"}, + new RaisedPetGrowthState {GrowthStateID = 8, Name = "adult"}, + }; + } + [HttpPost] //[Produces("application/xml")] [Route("ContentWebService.asmx/GetProduct")] // used by World Of Jumpstart @@ -493,6 +511,37 @@ public class ContentController : Controller { }); } + [HttpPost] + [Produces("application/xml")] + [Route("ContentWebService.asmx/SetRaisedPet")] // used by World Of Jumpstart + public IActionResult SetRaisedPetv1([FromForm] string apiToken, [FromForm] string raisedPetData) { + Console.WriteLine(string.Format("\n{0}", Request.Path)); + foreach (var x in Request.Form) + Console.WriteLine(string.Format("{0}", x)); + + Viking? viking = ctx.Sessions.FirstOrDefault(e => e.ApiToken == apiToken)?.Viking; + if (viking is null) { + // TODO: result for invalid session + return Ok(false); + } + + RaisedPetData petData = XmlUtil.DeserializeXml(raisedPetData); + + // Find the dragon + Dragon? dragon = viking.Dragons.FirstOrDefault(e => e.Id == petData.RaisedPetID); + if (dragon is null) { + return Ok(new SetRaisedPetResponse { + RaisedPetSetResult = RaisedPetSetResult.Invalid + }); + } + + dragon.RaisedPetData = XmlUtil.SerializeXml(UpdateDragon(dragon, petData)); + ctx.Update(dragon); + ctx.SaveChanges(); + + return Ok(true); + } + [HttpPost] [Produces("application/xml")] [Route("V2/ContentWebService.asmx/SetRaisedPet")] // used by Magic & Mythies @@ -615,9 +664,32 @@ public class ContentController : Controller { [HttpPost] [Produces("application/xml")] - [Route("ContentWebService.asmx/GetSelectedRaisedPet")] [Route("ContentWebService.asmx/GetCurrentPetByUserID")] // used by World Of Jumpstart + public PetData? GetCurrentPetByUserID([FromForm] string apiToken, [FromForm] string userId, [FromForm] bool isActive) { + Console.WriteLine(string.Format("\n{0}", Request.Path)); + foreach (var x in Request.Form) + Console.WriteLine(string.Format("{0}", x)); + + // TODO WoJS placeholder + + return null; + } + + [HttpPost] + [Produces("application/xml")] [Route("ContentWebService.asmx/GetActiveRaisedPet")] // used by World Of Jumpstart + public RaisedPetData[] GetActiveRaisedPet(Viking viking, [FromForm] string userId, [FromForm] bool isActive) { + Dragon? dragon = viking.SelectedDragon; + if (dragon is null) { + return new RaisedPetData[0]; + } + + return new RaisedPetData[] {GetRaisedPetDataFromDragon(dragon)}; + } + + [HttpPost] + [Produces("application/xml")] + [Route("ContentWebService.asmx/GetSelectedRaisedPet")] [VikingSession(UseLock=false)] public RaisedPetData[]? GetSelectedRaisedPet(Viking viking, [FromForm] string userId, [FromForm] bool isActive) { Dragon? dragon = viking.SelectedDragon; @@ -630,6 +702,18 @@ public class ContentController : Controller { }; } + [HttpPost] + [Produces("application/xml")] + [Route("ContentWebService.asmx/GetInactiveRaisedPet")] // used by World Of Jumpstart + public RaisedPetData[] GetInactiveRaisedPet([FromForm] string apiToken) { + Viking? viking = ctx.Sessions.FirstOrDefault(e => e.ApiToken == apiToken)?.Viking; + if (viking is null) { + return null; + } + + return new RaisedPetData[0]; // FIXME should return real inactive pets list + } + [HttpPost] [Produces("application/xml")] [Route("ContentWebService.asmx/SetImage")] @@ -1202,7 +1286,7 @@ public class ContentController : Controller { [Route("ContentWebService.asmx/GetDisplayNames")] // used by World Of Jumpstart public IActionResult GetDisplayNames() { // TODO: This is a placeholder - return Ok(" 1 Aaliyah 1 2 Abby 1 3 Adrian 1 261 Alan 1 "); + return Ok(" 1 Aaliyah 1 2 Abby 2 3 Adrian 3 11 Karen 2 12 Luna 2 13 Tori 2 "); } [HttpPost] diff --git a/src/Schema/PetData.cs b/src/Schema/PetData.cs new file mode 100644 index 0000000..3fbb2f3 --- /dev/null +++ b/src/Schema/PetData.cs @@ -0,0 +1,10 @@ +using System.Xml.Serialization; + +namespace sodoff.Schema; + +[XmlRoot(ElementName = "PetData", Namespace = "")] +[Serializable] +public class PetData { + [XmlElement(ElementName = "Pet")] + public PetDataPet[]? Pet; +} diff --git a/src/Schema/PetDataPet.cs b/src/Schema/PetDataPet.cs new file mode 100644 index 0000000..88d1e13 --- /dev/null +++ b/src/Schema/PetDataPet.cs @@ -0,0 +1,21 @@ +using System.Xml.Serialization; + +namespace sodoff.Schema; + +[XmlRoot(ElementName = "PetDataPet", Namespace = "")] +[Serializable] +public class PetDataPet { + public string Geometry; + + public string Texture; + + public string Type; + + public string Name; + + public float Dirtiness; + + public string AccessoryGeometry; + + public string AccessoryTexture; +}