fix farm consumables

This commit is contained in:
Spirtix 2023-07-25 17:03:18 +02:00
parent ffd7fd9a20
commit 258b1ddce1

View File

@ -112,7 +112,15 @@ public class RoomService {
UserItemPosition pos = XmlUtil.DeserializeXml<UserItemPosition>(item.RoomItemData); UserItemPosition pos = XmlUtil.DeserializeXml<UserItemPosition>(item.RoomItemData);
AchievementReward[]? rewards; AchievementReward[]? rewards;
int nextStateID = GetNextStateID(pos, speedup, out rewards); List<ItemStateCriteria> consumables;
int nextStateID = GetNextStateID(pos, speedup, out rewards, out consumables);
foreach (var consumable in consumables) {
ItemStateCriteriaConsumable c = (ItemStateCriteriaConsumable)consumable;
InventoryItem? invItem = item.Room.Viking?.Inventory.InventoryItems.FirstOrDefault(x => x.ItemId == c.ItemID);
if (invItem != null)
invItem.Quantity = invItem.Quantity - c.Amount < 0 ? 0 : invItem.Quantity - c.Amount;
}
if (rewards != null) { if (rewards != null) {
response.Rewards = rewards; response.Rewards = rewards;
@ -130,7 +138,6 @@ public class RoomService {
ii.Quantity += (int)reward.Amount!; ii.Quantity += (int)reward.Amount!;
} }
} }
ctx.SaveChanges();
} }
DateTime stateChange = DateTime.Now; DateTime stateChange = DateTime.Now;
@ -158,13 +165,16 @@ public class RoomService {
return response; return response;
} }
private int GetNextStateID(UserItemPosition pos, bool speedup, out AchievementReward[]? rewards) { private int GetNextStateID(UserItemPosition pos, bool speedup, out AchievementReward[]? rewards, out List<ItemStateCriteria> consumables) {
rewards = null; rewards = null;
consumables = new List<ItemStateCriteria>();
if (pos.UserItemState == null) if (pos.UserItemState == null)
return pos.Item.ItemStates.Find(x => x.Order == 1)!.ItemStateID; return pos.Item.ItemStates.Find(x => x.Order == 1)!.ItemStateID;
ItemState currState = pos.Item.ItemStates.Find(x => x.ItemStateID == pos.UserItemState.ItemStateID)!; ItemState currState = pos.Item.ItemStates.Find(x => x.ItemStateID == pos.UserItemState.ItemStateID)!;
rewards = currState.Rewards; rewards = currState.Rewards;
consumables = currState.Rule.Criterias.FindAll(x => x.Type == ItemStateCriteriaType.ConsumableItem);
if (speedup) if (speedup)
return ((ItemStateCriteriaSpeedUpItem)currState.Rule.Criterias.Find(x => x.Type == ItemStateCriteriaType.SpeedUpItem)!).EndStateID; return ((ItemStateCriteriaSpeedUpItem)currState.Rule.Criterias.Find(x => x.Type == ItemStateCriteriaType.SpeedUpItem)!).EndStateID;
@ -175,7 +185,7 @@ public class RoomService {
if (start.AddSeconds(expiry.Period) <= DateTime.Now) if (start.AddSeconds(expiry.Period) <= DateTime.Now)
return expiry.EndStateID; return expiry.EndStateID;
} }
switch (currState.Rule.CompletionAction.Transition) { switch (currState.Rule.CompletionAction.Transition) {
default: default:
return pos.Item.ItemStates.Find(x => x.Order == currState.Order + 1)!.ItemStateID; return pos.Item.ItemStates.Find(x => x.Order == currState.Order + 1)!.ItemStateID;