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; }
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); }
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; }
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); } }