- fix "No soil plots in v.2.9"
  - do not send null `UserItemPosition.Uses` for old clients
- fix "unable to do the expansion missions in Sodoff 2.9"
  - move expansion board missions to Headmaster for old versions
- fix race condition on PurchaseItems (causing negative gems amount issue)
- move gems bundles to correct store
  - also fix "gems bundles not show after click on gems counter" issue
- fix "internal error neighborhood" (WoJS)
  (caused by room item with null item)
- fix "Release date is set to creation date upon being released" (WoJS)
  - update GrowTime value in SetRaisedPetInactive
This commit is contained in:
Robert Paciorek 2024-04-08 23:33:00 +00:00
parent 39ab2802a3
commit 2d9b83db89
5 changed files with 33 additions and 8 deletions

View File

@ -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<RaisedPetData>(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<PurchaseStoreItemRequest>(purchaseItemRequest);
List<CommonInventoryResponseItem> items = new List<CommonInventoryResponseItem>();
@ -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<int[]>(itemIDArrayXml);
List<CommonInventoryResponseItem> items = new List<CommonInventoryResponseItem>();
@ -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]

View File

@ -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

View File

@ -13001,8 +13001,6 @@ SoD 3.31 main store section and subsection filtering:
<ii>12251</ii>
<ii>12252</ii>
<ii>12253</ii>
<ii>12721</ii>
<ii>12732</ii>
<ii>13106</ii>
<ii>13151</ii>
<ii>13152</ii>
@ -17133,6 +17131,8 @@ SoD 3.31 main store section and subsection filtering:
<id>10919</id>
<c>6</c>
</pitem>
<ii>12732</ii>
<ii>12721</ii>
<ii>10824</ii>
<ii>12487</ii>
<ii>13166</ii>

View File

@ -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;
}

View File

@ -104,12 +104,14 @@ public class RoomService {
ctx.SaveChanges();
}
public UserItemPositionList GetUserItemPositionList(Room room) {
public UserItemPositionList GetUserItemPositionList(Room room, uint gameVersion) {
List<UserItemPosition> itemPosition = new();
foreach (var item in room.Items) {
UserItemPosition data = XmlUtil.DeserializeXml<UserItemPosition>(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() };