//предложение о торговле от компьютерного игрока private void TryToTrade() { //монополии (не обязательно полные) бота List <int> monopolies = GetMyMonopolies(_dbWork.GetMyPathes(idPlayer)); //поиск pathforbuy которого не хватает до полной монополии int count = 0; PathForBuy trade = null; foreach (int monopoly in monopolies) { foreach (StreetPath path in _dbWork.GetPathsOfStreet(monopoly)) { if (trade == null) { PathForBuy pathForBuy = _dbWork.GetPathForBuy(path.GetIdStreetPath()); if (path.canBuy && pathForBuy.IdPlayer != 0 && pathForBuy.IdPlayer != idPlayer) { trade = pathForBuy; count = 1; break; } } } if (trade != null) { break; } } //если нет таких, то выходим if (trade == null) { return; } //поиск, какому игроку принадлежит улица Player player = _dbWork.GetPlayerbyId(trade.IdPlayer); Trade.CreateListThings(player, this); Trade.AddItemToList(player, this, trade); //проверяем, есть ли у этого игрока ещё улицы из этой монополии foreach (StreetPath streetPath in _dbWork.GetPathsOfStreet(trade.GetIdStreetParent())) { PathForBuy path = _dbWork.GetPathForBuy(streetPath.GetIdStreetPath()); if (streetPath.CanBuy && path.GetIdStreetPath() != trade.GetIdStreetPath() && path.IdPlayer == trade.IdPlayer) { Trade.AddItemToList(player, this, path); count++; } } //если достаточно денег, то записываем деньги в сделку и открываем игроку канву с предложением о сделке if (count * price <= money) { Trade.AddMoneyToList(player, this, count * price); if (!player.IsBot()) { _gameCanvas.OpenTradeFromBotToPlayer(this, player, count * price); } else { player.ThinkAboutTrade(this); } } else { //прописать отмену сделки } }