From 025c81b1e15638c49a6487c5a3d10ac78e04ba9d Mon Sep 17 00:00:00 2001 From: PassThePeas Date: Thu, 3 Sep 2009 02:11:38 +0200 Subject: [PATCH] Tourney parsing : payinAmounts, countRebuys, countAddons and countKO are now defined by player (instead of being attached to the Tourney for Hero) --- pyfpdb/FulltiltToFpdb.py | 49 ++++++++++++++++++++++++++++------------ pyfpdb/Tourney.py | 27 +++++++++++----------- 2 files changed, 48 insertions(+), 28 deletions(-) diff --git a/pyfpdb/FulltiltToFpdb.py b/pyfpdb/FulltiltToFpdb.py index e0d9c402..bc0fc30f 100755 --- a/pyfpdb/FulltiltToFpdb.py +++ b/pyfpdb/FulltiltToFpdb.py @@ -426,9 +426,9 @@ class Fulltilt(HandHistoryConverter): self.status = False else: self.tourney = Tourney.Tourney(sitename = self.sitename, gametype = None, summaryText = summaryInfoList, builtFrom = "HHC") - self.status = self.determineTourneyType(self.tourney) + self.status = status = self.getPlayersPositionsAndWinnings(self.tourney) if self.status == True : - self.status = status = self.getPlayersPositionsAndWinnings(self.tourney) + self.status = self.determineTourneyType(self.tourney) #print self.tourney else: log.info("Parsing NOK : rejected") @@ -558,15 +558,12 @@ class Fulltilt(HandHistoryConverter): "PRIZEPOOL" : self.re_TourneyPrizePool, "REBUY_AMOUNT" : self.re_TourneyRebuyAmount, "ADDON_AMOUNT" : self.re_TourneyAddOnAmount, - "REBUY_COUNT" : self.re_TourneyRebuyCount, - "ADDON_COUNT" : self.re_TourneyAddOnCount, "REBUY_TOTAL" : self.re_TourneyRebuysTotal, "ADDONS_TOTAL" : self.re_TourneyAddOnsTotal, "REBUY_CHIPS" : self.re_TourneyRebuyChips, "ADDON_CHIPS" : self.re_TourneyAddOnChips, "STARTTIME" : self.re_TourneyTimeInfo, "KO_BOUNTY_AMOUNT" : self.re_TourneyKOBounty, - "COUNT_KO" : self.re_TourneyCountKO } @@ -575,15 +572,12 @@ class Fulltilt(HandHistoryConverter): "PRIZEPOOL" : "prizepool", "REBUY_AMOUNT" : "rebuyAmount", "ADDON_AMOUNT" : "addOnAmount", - "REBUY_COUNT" : "countRebuys", - "ADDON_COUNT" : "countAddOns", "REBUY_TOTAL" : "totalRebuys", "ADDONS_TOTAL" : "totalAddOns", "REBUY_CHIPS" : "rebuyChips", "ADDON_CHIPS" : "addOnChips", "STARTTIME" : "starttime", - "KO_BOUNTY_AMOUNT" : "koBounty", - "COUNT_KO" : "countKO" + "KO_BOUNTY_AMOUNT" : "koBounty" } mg = {} # After the loop, mg will contain all the matching groups, including the ones that have not been used, like ENDTIME and IN-PROGRESS @@ -597,11 +591,41 @@ class Fulltilt(HandHistoryConverter): # Assign endtime to tourney (if None, that's ok, it's because the tourney wans't over over when the summary file was produced) tourney.endtime = mg['ENDTIME'] + # Deal with hero specific information + if tourney.hero is not None : + m = self.re_TourneyRebuyCount.search(tourneyText) + if m is not None: + mg = m.groupdict() + if mg['REBUY_COUNT'] is not None : + tourney.countRebuys.update( { tourney.hero : Decimal(mg['REBUY_COUNT']) } ) + m = self.re_TourneyAddOnCount.search(tourneyText) + if m is not None: + mg = m.groupdict() + if mg['ADDON_COUNT'] is not None : + tourney.countAddOns.update( { tourney.hero : Decimal(mg['ADDON_COUNT']) } ) + m = self.re_TourneyCountKO.search(tourneyText) + if m is not None: + mg = m.groupdict() + if mg['COUNT_KO'] is not None : + tourney.countKO.update( { tourney.hero : Decimal(mg['COUNT_KO']) } ) + # Deal with money amounts tourney.koBounty = 100*Decimal(re.sub(u',', u'', "%s" % tourney.koBounty)) tourney.prizepool = 100*Decimal(re.sub(u',', u'', "%s" % tourney.prizepool)) tourney.rebuyAmount = 100*Decimal(re.sub(u',', u'', "%s" % tourney.rebuyAmount)) tourney.addOnAmount = 100*Decimal(re.sub(u',', u'', "%s" % tourney.addOnAmount)) + + # Calculate payin amounts and update winnings -- not possible to take into account nb of rebuys, addons or Knockouts for other players than hero on FTP + for p in tourney.players : + tourney.payinAmounts[p] = tourney.buyin + tourney.fee + (tourney.rebuyAmount * tourney.countRebuys[p]) + (tourney.addOnAmount * tourney.countAddOns[p]) + #print " player %s : payinAmount = %d" %( p, tourney.payinAmounts[p]) + if tourney.isKO : + #tourney.incrementPlayerWinnings(tourney.players[p], Decimal(tourney.koBounty)*Decimal(tourney.countKO[p])) + tourney.winnings[p] += Decimal(tourney.koBounty)*Decimal(tourney.countKO[p]) + #print "player %s : winnings %d" % (p, tourney.winnings[p]) + + + #print mg return True @@ -622,11 +646,11 @@ class Fulltilt(HandHistoryConverter): else: winnings = "0" - tourney.addPlayer(rank, a.group('PNAME'), winnings) + tourney.addPlayer(rank, a.group('PNAME'), winnings, 0, 0, 0, 0) else: print "Player finishing stats unreadable : %s" % a - # Deal with KO tournaments for hero winnings calculation + # Find Hero n = self.re_TourneyHeroFinishingP.search(playersText) if n is not None: heroName = n.group('HERO_NAME') @@ -634,9 +658,6 @@ class Fulltilt(HandHistoryConverter): # Is this really useful ? if (tourney.finishPositions[heroName] != Decimal(n.group('HERO_FINISHING_POS'))): print "Bad parsing : finish position incoherent : %s / %s" % (tourney.finishPositions[heroName], n.group('HERO_FINISHING_POS')) - if tourney.isKO: - #Update the winnings with the (KO amount) * (# of KO) - tourney.incrementPlayerWinnings(n.group('HERO_NAME'), Decimal(tourney.koBounty)*Decimal(tourney.countKO)) return True diff --git a/pyfpdb/Tourney.py b/pyfpdb/Tourney.py index 1c2cb365..f6f30b1b 100644 --- a/pyfpdb/Tourney.py +++ b/pyfpdb/Tourney.py @@ -73,20 +73,21 @@ class Tourney(object): self.subTourneyFee = None self.rebuyChips = 0 self.addOnChips = 0 - self.countRebuys = 0 - self.countAddOns = 0 self.rebuyAmount = 0 self.addOnAmount = 0 self.totalRebuys = 0 self.totalAddOns = 0 self.koBounty = 0 - self.countKO = 0 #To use for winnings calculation which is not counted in the rest of the summary file self.tourneyComment = None self.players = [] # Collections indexed by player names self.finishPositions = {} self.winnings = {} + self.payinAmounts = {} + self.countRebuys = {} + self.countAddOns = {} + self.countKO = {} # currency symbol for this summary self.sym = None @@ -120,21 +121,20 @@ class Tourney(object): ("ADDON CHIPS", self.addOnChips), ("REBUY AMOUNT", self.rebuyAmount), ("ADDON AMOUNT", self.addOnAmount), - ("COUNT REBUYS", self.countRebuys), - ("COUNT ADDONS", self.countAddOns), - ("NB REBUYS", self.countRebuys), - ("NB ADDONS", self.countAddOns), ("TOTAL REBUYS", self.totalRebuys), ("TOTAL ADDONS", self.totalAddOns), ("KO BOUNTY", self.koBounty), - ("NB OF KO", self.countKO), ("TOURNEY COMMENT", self.tourneyComment) ) structs = ( ("GAMETYPE", self.gametype), ("PLAYERS", self.players), + ("PAYIN AMOUNTS", self.payinAmounts), ("POSITIONS", self.finishPositions), ("WINNINGS", self.winnings), + ("COUNT REBUYS", self.countRebuys), + ("COUNT ADDONS", self.countAddOns), + ("NB OF KO", self.countKO) ) str = '' for (name, var) in vars: @@ -255,7 +255,7 @@ db: a connected fpdb_db object""" - def addPlayer(self, rank, name, winnings): + def addPlayer(self, rank, name, winnings, payinAmount, nbRebuys, nbAddons, nbKO): """\ Adds a player to the tourney, and initialises data structures indexed by player. rank (int) indicating the finishing rank (can be -1 if unknown) @@ -266,6 +266,10 @@ winnings (decimal) the money the player ended the tourney with (can be 0, or self.players.append(name) self.finishPositions.update( { name : Decimal(rank) } ) self.winnings.update( { name : Decimal(winnings) } ) + self.payinAmounts.update( {name : Decimal(payinAmount) } ) + self.countRebuys.update( {name: Decimal(nbRebuys) } ) + self.countAddOns.update( {name: Decimal(nbAddons) } ) + self.countKO.update( {name : Decimal(nbKO) } ) def incrementPlayerWinnings(self, name, additionnalWinnings): @@ -277,11 +281,6 @@ winnings (decimal) the money the player ended the tourney with (can be 0, or self.players.append([-1, name, 0]) self.winnings[name] = oldWins + Decimal(additionnalWinnings) - - - def calculatePayinAmount(self): - return self.buyin + self.fee + (self.rebuyAmount * self.countRebuys) + (self.addOnAmount * self.countAddOns ) - def checkPlayerExists(self,player): if player not in [p[1] for p in self.players]: