private void AdjustFastFoldActions(Game game) { var hero = game.General.Players.FirstOrDefault(x => x.IsHero); // if winner tag exists when hand was full // if hero bet equals his chips, then hero went allin and he couldn't fold if (hero == null || changes.HasElement("Winners") || hero.Bet == hero.Chips) { return; } uncalledBets.TryGetValue(hero.Seat, out decimal heroUncalledBet); if (heroUncalledBet != 0) { return; } var heroShouldFold = game.General.Players.Any(x => hero.Bet < x.Bet); if (!heroShouldFold || game.Rounds.SelectMany(x => x.Actions).Any(x => x.Player == hero.Name && x.Type == ActionType.Fold)) { return; } var lastRound = game.Rounds.Last(); var foldAction = new Builders.iPoker.Action { Player = hero.Name, Type = ActionType.Fold, No = actionNo++ }; lastRound.Actions.Add(foldAction); }
private Builders.iPoker.Action ConvertElementToAction(XElement element) { if (!element.Name.LocalName.Equals("PlayerAction")) { return(null); } var actionNode = element.FirstNode as XElement; if (actionNode == null) { return(null); } var seat = int.Parse(element.Attribute("seat").Value); var actionText = actionNode.Name.LocalName; // remember cards if (actionText.Equals("Show") || (actionText.Equals("Muck") && actionNode.HasElements)) { var cardsText = string.Join(" ", element.Descendants("Card").Select(x => x.Value).ToArray()); if (!string.IsNullOrEmpty(cardsText)) { var cards = cardsConverter.Convert(cardsText); if (!showCards.ContainsKey(seat)) { showCards.Add(seat, cards); } } } // handle uncalled bets if (actionText.Equals("UncalledBet")) { var uncalledBet = decimal.Parse(actionNode.Attribute("amount").Value, NumberStyles.Currency, CultureInfo.InvariantCulture); if (!uncalledBets.ContainsKey(seat)) { uncalledBets.Add(seat, uncalledBet); } else { uncalledBets[seat] += uncalledBet; } } var actionType = ConvertToActionType(actionText); if (actionType == ActionType.Undefined) { return(null); } if (!playersOnTable.ContainsKey(seat)) { LogProvider.Log.Error(string.Format("Could not get player on seat {0}. [{1}]", seat, Identifier)); } var sum = 0m; if (actionNode.Attribute("amount") != null) { sum = decimal.Parse(actionNode.Attribute("amount").Value, NumberStyles.Currency, CultureInfo.InvariantCulture); } if (actionNode.Attribute("dead") != null) { sum += decimal.Parse(actionNode.Attribute("dead").Value, NumberStyles.Currency, CultureInfo.InvariantCulture); } var action = new Builders.iPoker.Action { No = actionNo++, Type = actionType, SeatNumber = seat, Player = playersOnTable[seat].Name, Sum = sum }; return(action); }