예제 #1
0
        public static bool TryDoTrade(Game g)
        {
            //var res = MakeExchange(g, g.Curr);

            var trs = GetValidTrades(g, g.Curr);

            Trade tr = null;

            foreach (var item in trs)
            {
                var res = g.RejectedTrades.Any(x => x.Equals(item));
                if (!res)
                {
                    tr = item;
                    break;
                }
            }

            if (tr != null)
            {
                g.CurrTrade = tr;
                g.Tlog("CheckTradeJob.FromBotToHuman", "Обмен между {0} и {1}", "Exchange between {0} and {1}", tr.from.Name, tr.to.Name);
                g.SetState(GameState.Trade);
                //GameManager.CheckTradeJob(g);
                return true;
            }

            return false;
        }
예제 #2
0
        public ActionResult Trade(string str)
        {
            g = GetGame();
            var res = "";
            if (g != null && g.State == GameState.BeginStep)
            {
                g.SetState(GameState.Trade);
                GameManager.InitTrade(g, str, CurrUser);
                //GameManager.CheckTradeJob(g);
            }

            return RenderLogAndPlayerCells(g);
        }
예제 #3
0
        public static bool Pay(Game g, bool needFinish = true)
        {
            //if (g.State != GameState.NeedPay) return ;

            var curr = g.Curr;
            var amount = g.PayAmount;
            //if (amount == 0) return true;

            var ok = curr.IsBot ?
                BotBrain.MortgageSell(g, curr, amount)
                : curr.Money > amount;

            if (ok)
            {
                curr.Money -= amount;
                if (g.PayToUserId.HasValue)
                {
                    var to = g.GetPlayer(g.PayToUserId.Value);
                    to.Money += amount;
                    g.PayToUserId = null;
                }
                if (needFinish) g.FinishStep("paid_" + g.PayAmount.PrintMoney());
                else g.SetState(GameState.BeginStep);

                g.PayAmount = 0;
                return true;
            }
            else
            {
                g.Tlogp("PlayerAction.PayAmount", "не хватает денег", "not enough money");
                g.ToCantPay();
            }
            return false;
        }
예제 #4
0
        public static void LeaveGame(Game g, string uname)
        {
            if (g.IsFinished) return;

            var p = g.GetPlayer(uname);

            if (p == null) return;

            if (g.Players.Count > 2)
            {
                foreach (var cell in g.Map.CellsByUser(p.Id))
                {
                    cell.Owner = null;
                    cell.HousesCount = 0;
                }
                g.Tlog("Game.LeaveGame.PlayerLeaveGame", "@p{0} покинул игру", "@p{0} leave Game ", p.Id);
                //g.Players.Remove(p);
                p.Deleted = true;
                g.pcount--;
                g.OnLeave(p.Name, false);

            }
            else
                if (g.Players.Count == 2)
                {
                    g.Winner = g.Players.First(x => x.Id != p.Id);
                    g.Tlog("Game.LeaveGame.PlayerIsWinner", "@p{0} ПОБЕДИТЕЛЬ", "@p{0} is WINNER ", g.Winner.Id);
                    g.SetState(GameState.FinishGame);
                    g.OnLeave(p.Name, false);
                    g.OnLeave(g.Winner.Name, true);

                }
        }