diff --git a/src/Controllers/Common/ContentController.cs b/src/Controllers/Common/ContentController.cs index cf5c102..529fe7f 100644 --- a/src/Controllers/Common/ContentController.cs +++ b/src/Controllers/Common/ContentController.cs @@ -670,6 +670,12 @@ public class ContentController : Controller { [VikingSession] public IActionResult SetRaisedPetInactive(Viking viking, [FromForm] int raisedPetID) { if (raisedPetID == viking.SelectedDragonId) { + RaisedPetData dragonData = XmlUtil.DeserializeXml(viking.SelectedDragon.RaisedPetData); + RaisedPetAttribute? attribute = dragonData.Attributes.FirstOrDefault(a => a.Key == "GrowTime"); + if (attribute != null) { + attribute.Value = DateTime.UtcNow.ToString("yyyy#M#d#H#m#s"); + viking.SelectedDragon.RaisedPetData = XmlUtil.SerializeXml(dragonData); + } viking.SelectedDragonId = null; } else { Dragon? dragon = viking.Dragons.FirstOrDefault(e => e.Id == raisedPetID); @@ -1151,7 +1157,7 @@ public class ContentController : Controller { [HttpPost] [Produces("application/xml")] [Route("V2/ContentWebService.asmx/PurchaseItems")] - [VikingSession] + [VikingSession(UseLock = true)] public IActionResult PurchaseItems(Viking viking, [FromForm] string purchaseItemRequest) { PurchaseStoreItemRequest request = XmlUtil.DeserializeXml(purchaseItemRequest); List items = new List(); @@ -1217,7 +1223,7 @@ public class ContentController : Controller { [HttpPost] [Produces("application/xml")] [Route("ContentWebService.asmx/PurchaseItems")] - [VikingSession] + [VikingSession(UseLock = true)] public IActionResult PurchaseItemsV1(Viking viking, [FromForm] string itemIDArrayXml) { int[] itemIdArr = XmlUtil.DeserializeXml(itemIDArrayXml); List items = new List(); @@ -1270,7 +1276,7 @@ public class ContentController : Controller { [HttpPost] [Produces("application/xml")] [Route("ContentWebService.asmx/GetUserRoomItemPositions")] - public IActionResult GetUserRoomItemPositions([FromForm] Guid userId, [FromForm] string roomID) { + public IActionResult GetUserRoomItemPositions([FromForm] Guid userId, [FromForm] string roomID, [FromForm] string apiKey) { // NOTE: this is public info (for mmo) - no session check Viking? viking = ctx.Vikings.FirstOrDefault(e => e.Uid == userId); @@ -1280,7 +1286,7 @@ public class ContentController : Controller { if (room is null) return Ok(new UserItemPositionList { UserItemPosition = new UserItemPosition[0] }); - return Ok(roomService.GetUserItemPositionList(room)); + return Ok(roomService.GetUserItemPositionList(room, ClientVersion.GetVersion(apiKey))); } [HttpPost] diff --git a/src/Controllers/Common/RatingController.cs b/src/Controllers/Common/RatingController.cs index 7809dd0..da971bd 100644 --- a/src/Controllers/Common/RatingController.cs +++ b/src/Controllers/Common/RatingController.cs @@ -9,6 +9,14 @@ namespace sodoff.Controllers.Common; public class RatingController : Controller { + [HttpPost] + [Produces("application/xml")] + [Route("MissionWebService.asmx/GetPayout")] // used by World Of Jumpstart + public IActionResult GetPayout([FromForm] int points) { + // TODO - placeholder + return Ok(points / 100); + } + [HttpPost] [Produces("application/xml")] [Route("ScoreWebService.asmx/SetScore")] // used by World Of Jumpstart diff --git a/src/Resources/store.xml b/src/Resources/store.xml index cbcf8b6..61ac679 100644 --- a/src/Resources/store.xml +++ b/src/Resources/store.xml @@ -13001,8 +13001,6 @@ SoD 3.31 main store section and subsection filtering: 12251 12252 12253 - 12721 - 12732 13106 13151 13152 @@ -17133,6 +17131,8 @@ SoD 3.31 main store section and subsection filtering: 10919 6 + 12732 + 12721 10824 12487 13166 diff --git a/src/Services/MissionService.cs b/src/Services/MissionService.cs index 76d2358..a69275e 100644 --- a/src/Services/MissionService.cs +++ b/src/Services/MissionService.cs @@ -41,6 +41,15 @@ public class MissionService { mission.MissionID = missionId; } + // move expansion board missions to Headmaster for old versions + if (mission.GroupID == 61 && gameVersion <= 0xa3a23a0a) { + mission.GroupID = 6; + foreach (var m in mission.Missions) { + if (mission.GroupID == 61) + mission.GroupID = 6; + } + } + UpdateMissionRecursive(mission, userId); return mission; } diff --git a/src/Services/RoomService.cs b/src/Services/RoomService.cs index f64b723..c16c342 100644 --- a/src/Services/RoomService.cs +++ b/src/Services/RoomService.cs @@ -104,12 +104,14 @@ public class RoomService { ctx.SaveChanges(); } - public UserItemPositionList GetUserItemPositionList(Room room) { + public UserItemPositionList GetUserItemPositionList(Room room, uint gameVersion) { List itemPosition = new(); foreach (var item in room.Items) { UserItemPosition data = XmlUtil.DeserializeXml(item.RoomItemData); data.UserItemPositionID = item.Id; - data.ItemID = data.Item.ItemID; + data.ItemID = data.Item?.ItemID; + if (gameVersion < 0xa3a00a0a && data.Uses is null) + data.Uses = -1; itemPosition.Add(data); } return new UserItemPositionList { UserItemPosition = itemPosition.ToArray() };