예제 #1
0
        //example
        //from player: from have 2_russia + another 1_russia
        //to: to have 2_france + 1_france
        private static Trade CheckOnPlayersCells(Game g, TradeRule trd, int my)
        {
            var pfrom = g.GetPlayer(my);

            //from_pl get cells
            var wantedCellsGroupedByUser = g.Map.CellsByGroup(trd.GetLand)
                .Where(x => x.Owner.HasValue && x.Owner != my)
                .GroupBy(x => x.Owner.Value);

            if (!wantedCellsGroupedByUser.Any()) return null;

            //process for each player
            foreach (var wantedByUser in wantedCellsGroupedByUser)
            {
                if (wantedByUser.Count() != trd.GetCount) continue;

                var pto = g.GetPlayer(wantedByUser.First().Owner.Value);

                // i have
                var _myCells = g.Map.CellsByUserByGroup(my, trd.GetLand).Count() == trd.MyCount;

                //you have
                var _yourCells = g.Map.CellsByUserByGroup(pto.Id, trd.GiveLand).Count() == trd.YourCount;

                //i give to you
                var giveCells = g.Map.CellsByUserByGroup(my, trd.GiveLand);

                //money factor
                var money1 = g.GetPlayerAssets(my, false);
                var money2 = g.GetPlayerAssets(pto.Id, false);

                var mfac = (money1 / (double)money2) >= trd.MoneyFactor;

                if (giveCells.Count() == trd.GiveCount && _myCells && _yourCells && mfac)
                {
                    //g.trState = new TradeState
                    return new Trade
                    {
                        from = g.GetPlayer(my),
                        give_cells = giveCells.Select(x => x.Id).ToArray(),
                        giveMoney = trd.GiveMoney,
                        //fromMoney = string.IsNullOrEmpty(from_money) ? 0 : Int32.Parse(from_money),
                        to = pto,
                        get_cells = wantedByUser.Select(x => x.Id).ToArray(),
                        getMoney = trd.GetMoney,
                        ExchId = trd.Id,
                    };
                }
            }
            return null;
        }