public bool DoTradeAction(Goods value, bool isHasPrivilage)
        {
            var param = new TraderParameters();

            var traderBuildings =
                _playerStatus.Board.Buildings.OfType<BuildingBase<TraderParameters>>()
                    .Where(x => x.IsActive)
                    .ToList();
            traderBuildings.ForEach(x => x.DoAction(ref param));

            if (_mainBoardController.Status.Market.CanSellGood(value, param.PermissionToSellTheSame))
            {
                var money = _mainBoardController.Status.Market.SellGood(value, traderBuildings);
                if (money.HasValue)
                {
                    _playerStatus.Warehouse.RemoveGoods(new[] {value});
                    _mainBoardController.Status.Doubloons -= money.Value;
                    _playerStatus.ReceiveDoubloons(money.Value);

                    return true;
                }
            }

            return false;
        }
Exemple #2
0
        public int? SimulateSellGoods(Goods good, IEnumerable<BuildingBase<TraderParameters>> buildings)
        {
            var traderParameters = new TraderParameters();

            foreach (var building in buildings)
            {
                building.DoAction(ref traderParameters);
            }

            if (CanSellGood(good, traderParameters.PermissionToSellTheSame))
            {
                return GetDefaultGoodPrice(good) + traderParameters.AdditionalPrice;
            }

            return null;
        }