private void ProcessAnte(Ante ante, HandHistory handHistory) { var anteAmount = (decimal)ante.Amount / handHistory.Players.Count; handHistory.GameDescription.Limit.Ante = anteAmount; handHistory.GameDescription.Limit.IsAnteTable = true; var sbAction = handHistory.HandActions.FirstOrDefault(x => x.HandActionType == HandActionType.SMALL_BLIND); IEnumerable <Player> players; if (sbAction != null) { players = handHistory.Players .SkipWhile(x => x.PlayerName != sbAction.PlayerName) .Concat(handHistory.Players.TakeWhile(x => x.PlayerName != sbAction.PlayerName)) .Reverse(); } else { players = handHistory.Players.Reverse(); } foreach (var player in players) { var anteAction = new HandAction(player.PlayerName, HandActionType.ANTE, anteAmount, Street.Preflop); handHistory.HandActions.Insert(0, anteAction); } }
public ActiveGame() { ActivePlayerIndex = 0; Ante = new Ante(); Exile = new Exile(); Stack = new Stack(); ActivePhase = GamePhases.None; OverrideNextPhase = GamePhases.None; _PendingActions = new List <IPendingAction>(); _Players = new List <Player>(); _SkipPhases = new List <GamePhases>(); _Modifiers = new List <GameModifier>(); _ActiveEffects = new List <Effect>(); _Attackers = new List <AttackingCreature>(); _UpkeepRequirements = new List <UpkeepRequirement>(); }
private void OnAddCardToZone(object sender, EventArgs e) { AddCardToZoneEventArgs args = (AddCardToZoneEventArgs)e; switch (args.TargetZone) { case TargetZone.Ante: Ante.Add(args.Card); break; case TargetZone.Battlefield: args.ZoneOwner.Battlefield.Add(args.Card); break; case TargetZone.Command: args.ZoneOwner.Command.Add(args.Card); break; case TargetZone.Exile: Exile.Add(args.Card); break; case TargetZone.Graveyard: args.ZoneOwner.Graveyard.Add(args.Card); break; case TargetZone.Hand: args.ZoneOwner.Hand.Add(args.Card); break; case TargetZone.Library: args.ZoneOwner.Library.Add(args.Card); break; case TargetZone.Stack: Stack.Add(args.Card); break; } }
private HandHistory BuildHand(List <Adda52JsonPackage> packages) { HandHistory handHistory = null; try { if (!Validate(packages)) { packages.Clear(); return(handHistory); } var isGameStarted = false; Ante ante = null; foreach (var package in packages) { if (package.PackageType == Adda52PackageType.GameStart) { handHistory = new HandHistory { DateOfHandUtc = package.TimestampUtc }; ParsePackage <GameStart>(package, x => ProcessGameStart(x, handHistory)); isGameStarted = true; continue; } if (!isGameStarted) { continue; } switch (package.PackageType) { case Adda52PackageType.Ante: ParsePackage <Ante>(package, x => ante = x); break; case Adda52PackageType.Blinds: ParsePackage <Blinds>(package, x => ProcessBlinds(package.RoomId, x, handHistory)); break; case Adda52PackageType.CommunityCard: ParsePackage <CommunityCardInfo>(package, x => ProcessCommunityCards(x, handHistory)); break; case Adda52PackageType.Dealer: ParsePackage <Dealer>(package, x => ProcessDealer(x, handHistory)); break; case Adda52PackageType.UserAction: ParsePackage <UserAction>(package, x => ProcessUserAction(x, handHistory)); break; case Adda52PackageType.UncalledBet: ParsePackage <UncalledBet>(package, x => ProcessUncalledBet(x, handHistory)); break; case Adda52PackageType.SeatInfo: ParsePackage <RoomSeatInfo>(package, x => { ProcessSeatInfo(x, handHistory); if (ante != null) { ProcessAnte(ante, handHistory); ante = null; } }); break; case Adda52PackageType.Winner: ParsePackage <Winner>(package, x => ProcessWinner(x, handHistory)); break; case Adda52PackageType.HoleCard: ParsePackage <HoleCard>(package, x => ProcessHoleCard(x, handHistory)); break; } } AdjustHandHistory(handHistory); return(handHistory); } catch (Exception e) { LogProvider.Log.Error(this, $"Failed to build hand #{handHistory?.HandId ?? 0} room #{handHistory?.GameDescription.Identifier ?? 0}. [{loggerName}]", e); return(null); } finally { packages.Clear(); } }