diff --git a/src/Controllers/Common/ContentController.cs b/src/Controllers/Common/ContentController.cs index bcfd348..3599d23 100644 --- a/src/Controllers/Common/ContentController.cs +++ b/src/Controllers/Common/ContentController.cs @@ -714,7 +714,8 @@ public class ContentController : Controller { --invItem.Quantity; // get real item id (from box) add it to inventory - itemService.OpenBox(req.ItemID, out int newItemId, out int quantity); + Gender gender = XmlUtil.DeserializeXml(viking.AvatarSerialized).GenderType; + itemService.OpenBox(req.ItemID, gender, out int newItemId, out int quantity); ItemData newItem = itemService.GetItem(newItemId); CommonInventoryResponseItem newInvItem = inventoryService.AddItemToInventoryAndGetResponse(viking, newItem.ItemID, quantity); @@ -745,6 +746,7 @@ public class ContentController : Controller { public IActionResult PurchaseItems(Viking viking, [FromForm] string purchaseItemRequest) { PurchaseStoreItemRequest request = XmlUtil.DeserializeXml(purchaseItemRequest); List items = new List(); + Gender gender = XmlUtil.DeserializeXml(viking.AvatarSerialized).GenderType; for (int i = 0; i < request.Items.Length; i++) { int itemId = request.Items[i]; if (request.AddMysteryBoxToInventory) { @@ -760,7 +762,7 @@ public class ContentController : Controller { } } else { // check for mystery box ... open if need - itemService.CheckAndOpenBox(itemId, out itemId, out int quantity); + itemService.CheckAndOpenBox(itemId, gender, out itemId, out int quantity); for (int j=0; j(itemIDArrayXml); List items = new List(); + Gender gender = XmlUtil.DeserializeXml(viking.AvatarSerialized).GenderType; for (int i = 0; i < itemIdArr.Length; i++) { - itemService.CheckAndOpenBox(itemIdArr[i], out int itemId, out int quantity); + itemService.CheckAndOpenBox(itemIdArr[i], gender, out int itemId, out int quantity); for (int j=0; j(); + Gender gender = XmlUtil.DeserializeXml(viking.AvatarSerialized).GenderType; foreach (BluePrintSpecification output in blueprintItem.BluePrint.Outputs) { if (output.ItemID is null) continue; - itemService.CheckAndOpenBox((int)(output.ItemID), out int newItemId, out int quantity); + itemService.CheckAndOpenBox((int)(output.ItemID), gender, out int newItemId, out int quantity); for (int i=0; i standardItems = new List(); - itemService.CheckAndOpenBox(rewardItem.ItemID, out int itemId, out int quantity); + itemService.CheckAndOpenBox(rewardItem.ItemID, gender, out int itemId, out int quantity); for (int i=0; i e.Type == "Prize").ToArray(); int totalWeight = boxRewards.Sum(e => e.Weight); if (totalWeight == 0) { @@ -55,22 +55,27 @@ namespace sodoff.Services { int win = random.Next(0, totalWeight); foreach (var reward in boxRewards) { cnt += reward.Weight; - if (cnt > win) { + if (cnt > win && CheckItemGender(items[reward.ItemId], gender)) { + return reward; + } + } + foreach (var reward in boxRewards) { // do again in case high `win` value and CheckItemGender fail + if (CheckItemGender(items[reward.ItemId], gender)) { return reward; } } return null; } - public void OpenBox(int boxItemId, out int itemId, out int quantity) { - var reward = OpenBox(items[boxItemId]); + public void OpenBox(int boxItemId, Gender gender, out int itemId, out int quantity) { + var reward = OpenBox(items[boxItemId], gender); itemId = reward.ItemId; quantity = GetItemQuantity(reward); } - public void CheckAndOpenBox(int boxItemId, out int itemId, out int quantity) { + public void CheckAndOpenBox(int boxItemId, Gender gender, out int itemId, out int quantity) { if (IsBoxItem(boxItemId)) { - OpenBox(boxItemId, out itemId, out quantity); + OpenBox(boxItemId, gender, out itemId, out quantity); } else { itemId = boxItemId; quantity = 1;