public override void Execute(IImpactItemData data) { var value = (int)_logic.Calculate(data.Value); ILogicDictionary <int, int> dict; if (!data.IsExplorer) { if (!_inventory.State.Items.ContainsKey(data.ItemId)) { _inventory.State.Items[data.ItemId] = 0; } dict = _inventory.State.Items; } else { if (!_explorer.State.Inventory.ContainsKey(data.ItemId)) { _explorer.State.Inventory[data.ItemId] = 0; } dict = _explorer.State.Inventory; } switch (data.Operator) { case OperationType.Add: dict[data.ItemId] += value; break; case OperationType.Set: dict[data.ItemId] = value; break; default: throw new ArgumentOutOfRangeException(); } if (dict[data.ItemId] <= 0) { dict.Remove(data.ItemId); } LogicLog.ChangeItemValue(data.ItemId, value); }