From 39d55e093d15bac394b60b19e9397e4d32324dd8 Mon Sep 17 00:00:00 2001 From: grindi Date: Wed, 12 Aug 2009 01:19:01 +0400 Subject: [PATCH 1/2] Hand: improved BB+SB blind type support; added common money feature to the Pot --- pyfpdb/Hand.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/pyfpdb/Hand.py b/pyfpdb/Hand.py index 97767b0d..dfd7be13 100644 --- a/pyfpdb/Hand.py +++ b/pyfpdb/Hand.py @@ -347,19 +347,19 @@ If a player has None chips he won't be added.""" log.debug("addBlind: %s posts %s, %s" % (player, blindtype, amount)) if player is not None: amount = re.sub(u',', u'', amount) #some sites have commas - self.bets['PREFLOP'][player].append(Decimal(amount)) self.stacks[player] -= Decimal(amount) - #print "DEBUG %s posts, stack %s" % (player, self.stacks[player]) act = (player, 'posts', blindtype, amount, self.stacks[player]==0) self.actions['BLINDSANTES'].append(act) + + if blindtype == 'both': + amount = self.bb + self.bets['BLINDSANTES'][player].append(Decimal(self.sb)) + self.pot.addCommonMoney(Decimal(self.sb)) + + self.bets['PREFLOP'][player].append(Decimal(amount)) self.pot.addMoney(player, Decimal(amount)) - if blindtype == 'big blind': - self.lastBet['PREFLOP'] = Decimal(amount) - elif blindtype == 'both': - # extra small blind is 'dead' - self.lastBet['PREFLOP'] = Decimal(self.bb) + self.lastBet['PREFLOP'] = Decimal(amount) self.posted = self.posted + [[player,blindtype]] - #print "DEBUG: self.posted: %s" %(self.posted) @@ -1297,6 +1297,7 @@ class Pot(object): def __init__(self): self.contenders = set() self.committed = {} + self.common = Decimal(0) self.total = None self.returned = {} self.sym = u'$' # this is the default currency symbol @@ -1311,13 +1312,16 @@ class Pot(object): # addFold must be called when a player folds self.contenders.discard(player) + def addCommonMoney(self, amount): + self.common += amount + def addMoney(self, player, amount): # addMoney must be called for any actions that put money in the pot, in the order they occur self.contenders.add(player) self.committed[player] += amount def end(self): - self.total = sum(self.committed.values()) + self.total = sum(self.committed.values()) + self.common # Return any uncalled bet. committed = sorted([ (v,k) for (k,v) in self.committed.items()]) From f18d0e10cf4b96714e2fe0b8897a84190fa3c055 Mon Sep 17 00:00:00 2001 From: grindi Date: Wed, 12 Aug 2009 02:30:08 +0400 Subject: [PATCH 2/2] Hand: added ante support --- pyfpdb/Hand.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/pyfpdb/Hand.py b/pyfpdb/Hand.py index dfd7be13..c1ceba1b 100644 --- a/pyfpdb/Hand.py +++ b/pyfpdb/Hand.py @@ -325,14 +325,13 @@ If a player has None chips he won't be added.""" return c def addAnte(self, player, ante): - log.debug("%s %s antes %s" % ('ANTES', player, ante)) + log.debug("%s %s antes %s" % ('BLINDSANTES', player, ante)) if player is not None: ante = re.sub(u',', u'', ante) #some sites have commas - self.bets['ANTES'][player].append(Decimal(ante)) + self.bets['BLINDSANTES'][player].append(Decimal(ante)) self.stacks[player] -= Decimal(ante) act = (player, 'posts', "ante", ante, self.stacks[player]==0) - self.actions['ANTES'].append(act) - #~ self.lastBet['ANTES'] = Decimal(ante) + self.actions['BLINDSANTES'].append(act) self.pot.addMoney(player, Decimal(ante)) def addBlind(self, player, blindtype, amount): @@ -495,6 +494,7 @@ Add a raise on [street] by [player] to [amountTo] For when a player shows cards for any reason (for showdown or out of choice). Card ranks will be uppercased """ + import sys; sys.exit(1) log.debug("addShownCards %s hole=%s all=%s" % (player, cards, holeandboard)) if cards is not None: self.addHoleCards(cards,player,shown, mucked) @@ -576,6 +576,8 @@ Map the tuple self.gametype onto the pokerstars string describing it return ("%s: posts big blind %s%s%s" %(act[0], self.sym, act[3], ' and is all-in' if act[4] else '')) elif(act[2] == "both"): return ("%s: posts small & big blinds %s%s%s" %(act[0], self.sym, act[3], ' and is all-in' if act[4] else '')) + elif(act[2] == "ante"): + return ("%s: posts ante %s%s%s" %(act[0], self.sym, act[3], ' and is all-in' if act[4] else '')) elif act[1] == 'bringin': return ("%s: brings in for %s%s%s" %(act[0], self.sym, act[2], ' and is all-in' if act[3] else '')) elif act[1] == 'discards': @@ -642,6 +644,7 @@ class HoldemOmahaHand(Hand): hhc.compilePlayerRegexs(self) hhc.markStreets(self) hhc.readBlinds(self) + hhc.readAntes(self) hhc.readButton(self) hhc.readHeroCards(self) hhc.readShowdownActions(self) @@ -893,6 +896,7 @@ class DrawHand(Hand): hhc.compilePlayerRegexs(self) hhc.markStreets(self) hhc.readBlinds(self) + hhc.readAntes(self) hhc.readButton(self) hhc.readHeroCards(self) hhc.readShowdownActions(self) @@ -1041,11 +1045,11 @@ class StudHand(Hand): if gametype['base'] != 'stud': pass # or indeed don't pass and complain instead - self.allStreets = ['ANTES','THIRD','FOURTH','FIFTH','SIXTH','SEVENTH'] + self.allStreets = ['BLINDSANTES','THIRD','FOURTH','FIFTH','SIXTH','SEVENTH'] self.communityStreets = [] - self.actionStreets = ['ANTES','THIRD','FOURTH','FIFTH','SIXTH','SEVENTH'] + self.actionStreets = ['BLINDSANTES','THIRD','FOURTH','FIFTH','SIXTH','SEVENTH'] - self.streetList = ['ANTES','THIRD','FOURTH','FIFTH','SIXTH','SEVENTH'] # a list of the observed street names in order + self.streetList = ['BLINDSANTES','THIRD','FOURTH','FIFTH','SIXTH','SEVENTH'] # a list of the observed street names in order self.holeStreets = ['THIRD','FOURTH','FIFTH','SIXTH','SEVENTH'] Hand.__init__(self, sitename, gametype, handText) self.sb = gametype['sb'] @@ -1063,7 +1067,7 @@ class StudHand(Hand): hhc.readHeroCards(self) # Read actions in street order for street in self.actionStreets: - if street == 'ANTES': continue # OMG--sometime someone folds in the ante round + if street == 'BLINDSANTES': continue # OMG--sometime someone folds in the ante round if self.streets[street]: log.debug(street + self.streets[street]) hhc.readAction(self, street) @@ -1143,14 +1147,14 @@ Add a complete on [street] by [player] to [amountTo] super(StudHand, self).writeHand(fh) - players_who_post_antes = set([x[0] for x in self.actions['ANTES']]) + players_who_post_antes = set([x[0] for x in self.actions['BLINDSANTES']]) for player in [x for x in self.players if x[1] in players_who_post_antes]: #Only print stacks of players who do something preflop print >>fh, _("Seat %s: %s (%s%s in chips)" %(player[0], player[1], self.sym, player[2])) - if 'ANTES' in self.actions: - for act in self.actions['ANTES']: + if 'BLINDSANTES' in self.actions: + for act in self.actions['BLINDSANTES']: print >>fh, _("%s: posts the ante %s%s" %(act[0], self.sym, act[3])) if 'THIRD' in self.actions: