Merge branch 'master' of git://git.assembla.com/fpdboz
This commit is contained in:
		
						commit
						df43e0e6b8
					
				| 
						 | 
					@ -1514,6 +1514,7 @@ class Database:
 | 
				
			||||||
        c.execute("INSERT INTO Sites (name,code) VALUES ('PKR', 'PK')")
 | 
					        c.execute("INSERT INTO Sites (name,code) VALUES ('PKR', 'PK')")
 | 
				
			||||||
        c.execute("INSERT INTO Sites (name,code) VALUES ('iPoker', 'IP')")
 | 
					        c.execute("INSERT INTO Sites (name,code) VALUES ('iPoker', 'IP')")
 | 
				
			||||||
        c.execute("INSERT INTO Sites (name,code) VALUES ('Winamax', 'WM')")
 | 
					        c.execute("INSERT INTO Sites (name,code) VALUES ('Winamax', 'WM')")
 | 
				
			||||||
 | 
					        c.execute("INSERT INTO Sites (name,code) VALUES ('Everest', 'EP')")
 | 
				
			||||||
        #Fill Actions
 | 
					        #Fill Actions
 | 
				
			||||||
        c.execute("INSERT INTO Actions (name,code) VALUES ('ante', 'A')")
 | 
					        c.execute("INSERT INTO Actions (name,code) VALUES ('ante', 'A')")
 | 
				
			||||||
        c.execute("INSERT INTO Actions (name,code) VALUES ('small blind', 'SB')")
 | 
					        c.execute("INSERT INTO Actions (name,code) VALUES ('small blind', 'SB')")
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -420,12 +420,15 @@ class Filters(threading.Thread):
 | 
				
			||||||
        self.limits[limit] = w.get_active()
 | 
					        self.limits[limit] = w.get_active()
 | 
				
			||||||
        log.debug(_("self.limit[%s] set to %s") %(limit, self.limits[limit]))
 | 
					        log.debug(_("self.limit[%s] set to %s") %(limit, self.limits[limit]))
 | 
				
			||||||
        if limit.isdigit() or (len(limit) > 2 and (limit[-2:] == 'nl' or limit[-2:] == 'fl' or limit[-2:] == 'pl')):
 | 
					        if limit.isdigit() or (len(limit) > 2 and (limit[-2:] == 'nl' or limit[-2:] == 'fl' or limit[-2:] == 'pl')):
 | 
				
			||||||
 | 
					            # turning a leaf limit on with 'None' checked turns 'None' off
 | 
				
			||||||
            if self.limits[limit]:
 | 
					            if self.limits[limit]:
 | 
				
			||||||
                if self.cbNoLimits is not None:
 | 
					                if self.cbNoLimits is not None:
 | 
				
			||||||
                    self.cbNoLimits.set_active(False)
 | 
					                    self.cbNoLimits.set_active(False)
 | 
				
			||||||
 | 
					            # turning a leaf limit off with 'All' checked turns 'All' off
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if self.cbAllLimits is not None:
 | 
					                if self.cbAllLimits is not None:
 | 
				
			||||||
                    self.cbAllLimits.set_active(False)
 | 
					                    self.cbAllLimits.set_active(False)
 | 
				
			||||||
 | 
					            # turning off a leaf limit turns off the corresponding fl. nl, or pl
 | 
				
			||||||
            if not self.limits[limit]:
 | 
					            if not self.limits[limit]:
 | 
				
			||||||
                if limit.isdigit():
 | 
					                if limit.isdigit():
 | 
				
			||||||
                    if self.cbFL is not None:
 | 
					                    if self.cbFL is not None:
 | 
				
			||||||
| 
						 | 
					@ -438,24 +441,28 @@ class Filters(threading.Thread):
 | 
				
			||||||
                        self.cbPL.set_active(False)
 | 
					                        self.cbPL.set_active(False)
 | 
				
			||||||
        elif limit == "all":
 | 
					        elif limit == "all":
 | 
				
			||||||
            if self.limits[limit]:
 | 
					            if self.limits[limit]:
 | 
				
			||||||
                #for cb in self.cbLimits.values():
 | 
					                if self.num_limit_types == 1:
 | 
				
			||||||
                #    cb.set_active(True)
 | 
					                    for cb in self.cbLimits.values():
 | 
				
			||||||
                if self.cbFL is not None:
 | 
					                        cb.set_active(True)
 | 
				
			||||||
                    self.cbFL.set_active(True)
 | 
					                else:
 | 
				
			||||||
                if self.cbNL is not None:
 | 
					                    if self.cbFL is not None:
 | 
				
			||||||
                    self.cbNL.set_active(True)
 | 
					                        self.cbFL.set_active(True)
 | 
				
			||||||
                if self.cbPL is not None:
 | 
					                    if self.cbNL is not None:
 | 
				
			||||||
                    self.cbPL.set_active(True)
 | 
					                        self.cbNL.set_active(True)
 | 
				
			||||||
 | 
					                    if self.cbPL is not None:
 | 
				
			||||||
 | 
					                        self.cbPL.set_active(True)
 | 
				
			||||||
        elif limit == "none":
 | 
					        elif limit == "none":
 | 
				
			||||||
            if self.limits[limit]:
 | 
					            if self.limits[limit]:
 | 
				
			||||||
                for cb in self.cbLimits.values():
 | 
					                if self.num_limit_types == 1:
 | 
				
			||||||
                    cb.set_active(False)
 | 
					                    for cb in self.cbLimits.values():
 | 
				
			||||||
                if self.cbNL is not None:
 | 
					                        cb.set_active(False)
 | 
				
			||||||
                    self.cbNL.set_active(False)
 | 
					                else:
 | 
				
			||||||
                if self.cbFL is not None:
 | 
					                    if self.cbNL is not None:
 | 
				
			||||||
                    self.cbFL.set_active(False)
 | 
					                        self.cbNL.set_active(False)
 | 
				
			||||||
                if self.cbPL is not None:
 | 
					                    if self.cbFL is not None:
 | 
				
			||||||
                    self.cbPL.set_active(False)
 | 
					                        self.cbFL.set_active(False)
 | 
				
			||||||
 | 
					                    if self.cbPL is not None:
 | 
				
			||||||
 | 
					                        self.cbPL.set_active(False)
 | 
				
			||||||
        elif limit == "fl":
 | 
					        elif limit == "fl":
 | 
				
			||||||
            if not self.limits[limit]:
 | 
					            if not self.limits[limit]:
 | 
				
			||||||
                # only toggle all fl limits off if they are all currently on
 | 
					                # only toggle all fl limits off if they are all currently on
 | 
				
			||||||
| 
						 | 
					@ -765,11 +772,11 @@ class Filters(threading.Thread):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                dest = vbox3  # for ring/tour buttons
 | 
					                dest = vbox3  # for ring/tour buttons
 | 
				
			||||||
                if "LimitType" in display and display["LimitType"] == True:
 | 
					                if "LimitType" in display and display["LimitType"] == True:
 | 
				
			||||||
                    num_limit_types = 0
 | 
					                    self.num_limit_types = 0
 | 
				
			||||||
                    if self.found['fl']:  num_limit_types = num_limit_types + 1
 | 
					                    if self.found['fl']:  self.num_limit_types = self.num_limit_types + 1
 | 
				
			||||||
                    if self.found['pl']:  num_limit_types = num_limit_types + 1
 | 
					                    if self.found['pl']:  self.num_limit_types = self.num_limit_types + 1
 | 
				
			||||||
                    if self.found['nl']:  num_limit_types = num_limit_types + 1
 | 
					                    if self.found['nl']:  self.num_limit_types = self.num_limit_types + 1
 | 
				
			||||||
                    if num_limit_types > 1:
 | 
					                    if self.num_limit_types > 1:
 | 
				
			||||||
                       if self.found['fl']:
 | 
					                       if self.found['fl']:
 | 
				
			||||||
                           hbox = gtk.HBox(False, 0)
 | 
					                           hbox = gtk.HBox(False, 0)
 | 
				
			||||||
                           vbox3.pack_start(hbox, False, False, 0)
 | 
					                           vbox3.pack_start(hbox, False, False, 0)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,6 +49,7 @@ class Fulltilt(HandHistoryConverter):
 | 
				
			||||||
                        '6.00': ('1.00', '3.00'),       '6': ('1.00', '3.00'),
 | 
					                        '6.00': ('1.00', '3.00'),       '6': ('1.00', '3.00'),
 | 
				
			||||||
                        '8.00': ('2.00', '4.00'),       '8': ('2.00', '4.00'),
 | 
					                        '8.00': ('2.00', '4.00'),       '8': ('2.00', '4.00'),
 | 
				
			||||||
                       '10.00': ('2.00', '5.00'),      '10': ('2.00', '5.00'),
 | 
					                       '10.00': ('2.00', '5.00'),      '10': ('2.00', '5.00'),
 | 
				
			||||||
 | 
					                       '16.00': ('4.00', '8.00'),      '16': ('4.00', '8.00'),
 | 
				
			||||||
                       '20.00': ('5.00', '10.00'),     '20': ('5.00', '10.00'),
 | 
					                       '20.00': ('5.00', '10.00'),     '20': ('5.00', '10.00'),
 | 
				
			||||||
                       '30.00': ('10.00', '15.00'),    '30': ('10.00', '15.00'),
 | 
					                       '30.00': ('10.00', '15.00'),    '30': ('10.00', '15.00'),
 | 
				
			||||||
                       '40.00': ('10.00', '20.00'),    '40': ('10.00', '20.00'),
 | 
					                       '40.00': ('10.00', '20.00'),    '40': ('10.00', '20.00'),
 | 
				
			||||||
| 
						 | 
					@ -88,7 +89,7 @@ class Fulltilt(HandHistoryConverter):
 | 
				
			||||||
                                    [%(LS)s]?(?P<CAP>[.0-9]+\sCap\s)?
 | 
					                                    [%(LS)s]?(?P<CAP>[.0-9]+\sCap\s)?
 | 
				
			||||||
                                    (?P<GAMETYPE>[-\da-zA-Z\/\'\s]+)\s-\s
 | 
					                                    (?P<GAMETYPE>[-\da-zA-Z\/\'\s]+)\s-\s
 | 
				
			||||||
                                    (?P<DATETIME>.*$)
 | 
					                                    (?P<DATETIME>.*$)
 | 
				
			||||||
                                    (?P<PARTIAL>\(partial\))?\n
 | 
					                                    (?P<PARTIAL>\(partial\))?\s
 | 
				
			||||||
                                    (?:.*?\n(?P<CANCELLED>Hand\s\#(?P=HID)\shas\sbeen\scanceled))?
 | 
					                                    (?:.*?\n(?P<CANCELLED>Hand\s\#(?P=HID)\shas\sbeen\scanceled))?
 | 
				
			||||||
                                 ''' % substitutions, re.MULTILINE|re.VERBOSE)
 | 
					                                 ''' % substitutions, re.MULTILINE|re.VERBOSE)
 | 
				
			||||||
    re_TourneyExtraInfo  = re.compile('''(((?P<TOURNEY_NAME>[^$]+)?
 | 
					    re_TourneyExtraInfo  = re.compile('''(((?P<TOURNEY_NAME>[^$]+)?
 | 
				
			||||||
| 
						 | 
					@ -147,7 +148,7 @@ class Fulltilt(HandHistoryConverter):
 | 
				
			||||||
    re_Mixed        = re.compile(r'\s\-\s(?P<MIXED>HA|HORSE|HOSE)\s\-\s', re.VERBOSE)
 | 
					    re_Mixed        = re.compile(r'\s\-\s(?P<MIXED>HA|HORSE|HOSE)\s\-\s', re.VERBOSE)
 | 
				
			||||||
    re_Max          = re.compile("(?P<MAX>\d+)( max)?", re.MULTILINE)
 | 
					    re_Max          = re.compile("(?P<MAX>\d+)( max)?", re.MULTILINE)
 | 
				
			||||||
    # NB: if we ever match "Full Tilt Poker" we should also match "FullTiltPoker", which PT Stud erroneously exports.
 | 
					    # NB: if we ever match "Full Tilt Poker" we should also match "FullTiltPoker", which PT Stud erroneously exports.
 | 
				
			||||||
    re_DateTime     = re.compile("""((?P<H>[0-9]+):(?P<MIN>[0-9]+):(?P<S>[0-9]+)\s(?P<TZ>\w+)\s-\s(?P<Y>[0-9]{4})\/(?P<M>[0-9]{2})\/(?P<D>[0-9]{2})|(?P<H2>[0-9]+):(?P<MIN2>[0-9]+)\s(?P<TZ2>\w+)\s-\s\w+\,\s(?P<M2>\w+)\s(?P<D2>\d+)\,\s(?P<Y2>[0-9]{4}))""", re.MULTILINE)
 | 
					    re_DateTime     = re.compile("""((?P<H>[0-9]+):(?P<MIN>[0-9]+):(?P<S>[0-9]+)\s(?P<TZ>\w+)\s-\s(?P<Y>[0-9]{4})\/(?P<M>[0-9]{2})\/(?P<D>[0-9]{2})|(?P<H2>[0-9]+):(?P<MIN2>[0-9]+)\s(?P<TZ2>\w+)\s-\s\w+\,\s(?P<M2>\w+)\s(?P<D2>\d+)\,\s(?P<Y2>[0-9]{4}))(?P<PARTIAL>\s\(partial\))?""", re.MULTILINE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -283,10 +284,13 @@ class Fulltilt(HandHistoryConverter):
 | 
				
			||||||
                    datetimestr = "%s/%s/%s %s:%s" % (a.group('Y2'), a.group('M2'),a.group('D2'),a.group('H2'),a.group('MIN2'))
 | 
					                    datetimestr = "%s/%s/%s %s:%s" % (a.group('Y2'), a.group('M2'),a.group('D2'),a.group('H2'),a.group('MIN2'))
 | 
				
			||||||
                    timezone = a.group('TZ2')
 | 
					                    timezone = a.group('TZ2')
 | 
				
			||||||
                    hand.startTime = datetime.datetime.strptime(datetimestr, "%Y/%B/%d %H:%M")
 | 
					                    hand.startTime = datetime.datetime.strptime(datetimestr, "%Y/%B/%d %H:%M")
 | 
				
			||||||
 | 
					                if a.group('PARTIAL'):
 | 
				
			||||||
 | 
					                    raise FpdbParseError(hid=m.group('HID'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            hand.startTime = HandHistoryConverter.changeTimezone(hand.startTime, timezone, "UTC")
 | 
					            hand.startTime = HandHistoryConverter.changeTimezone(hand.startTime, timezone, "UTC")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if m.group("CANCELLED") or m.group("PARTIAL"):
 | 
					        if m.group("CANCELLED") or m.group("PARTIAL"):
 | 
				
			||||||
 | 
					            # It would appear this can't be triggered as DATETIME is a bit greedy
 | 
				
			||||||
            raise FpdbParseError(hid=m.group('HID'))
 | 
					            raise FpdbParseError(hid=m.group('HID'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if m.group('TABLEATTRIBUTES'):
 | 
					        if m.group('TABLEATTRIBUTES'):
 | 
				
			||||||
| 
						 | 
					@ -351,7 +355,7 @@ class Fulltilt(HandHistoryConverter):
 | 
				
			||||||
            n = self.re_SummarySitout.finditer(post)
 | 
					            n = self.re_SummarySitout.finditer(post)
 | 
				
			||||||
            for b in n:
 | 
					            for b in n:
 | 
				
			||||||
                del plist[b.group('PNAME')]
 | 
					                del plist[b.group('PNAME')]
 | 
				
			||||||
                print "DEBUG: Deleting '%s' from player dict" %(b.group('PNAME'))
 | 
					                #print "DEBUG: Deleting '%s' from player dict" %(b.group('PNAME'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Add remaining players
 | 
					        # Add remaining players
 | 
				
			||||||
        for a in plist:
 | 
					        for a in plist:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,6 +15,9 @@
 | 
				
			||||||
#along with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
					#along with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
#In the "official" distribution you can find the license in agpl-3.0.txt.
 | 
					#In the "official" distribution you can find the license in agpl-3.0.txt.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import L10n
 | 
				
			||||||
 | 
					_ = L10n.get_translation()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import threading
 | 
					import threading
 | 
				
			||||||
import pygtk
 | 
					import pygtk
 | 
				
			||||||
pygtk.require('2.0')
 | 
					pygtk.require('2.0')
 | 
				
			||||||
| 
						 | 
					@ -22,18 +25,6 @@ import gtk
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
from time import time, strftime
 | 
					from time import time, strftime
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
import locale
 | 
					 | 
				
			||||||
lang=locale.getdefaultlocale()[0][0:2]
 | 
					 | 
				
			||||||
if lang=="en":
 | 
					 | 
				
			||||||
    def _(string): return string
 | 
					 | 
				
			||||||
else:
 | 
					 | 
				
			||||||
    import gettext
 | 
					 | 
				
			||||||
    try:
 | 
					 | 
				
			||||||
        trans = gettext.translation("fpdb", localedir="locale", languages=[lang])
 | 
					 | 
				
			||||||
        trans.install()
 | 
					 | 
				
			||||||
    except IOError:
 | 
					 | 
				
			||||||
        def _(string): return string
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import fpdb_import
 | 
					import fpdb_import
 | 
				
			||||||
import Database
 | 
					import Database
 | 
				
			||||||
import Filters
 | 
					import Filters
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,6 +15,9 @@
 | 
				
			||||||
#along with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
					#along with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
#In the "official" distribution you can find the license in agpl-3.0.txt.
 | 
					#In the "official" distribution you can find the license in agpl-3.0.txt.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import L10n
 | 
				
			||||||
 | 
					_ = L10n.get_translation()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import xml.dom.minidom
 | 
					import xml.dom.minidom
 | 
				
			||||||
from xml.dom.minidom import Node
 | 
					from xml.dom.minidom import Node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,18 +26,6 @@ pygtk.require('2.0')
 | 
				
			||||||
import gtk
 | 
					import gtk
 | 
				
			||||||
import gobject
 | 
					import gobject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import locale
 | 
					 | 
				
			||||||
lang=locale.getdefaultlocale()[0][0:2]
 | 
					 | 
				
			||||||
if lang=="en":
 | 
					 | 
				
			||||||
    def _(string): return string
 | 
					 | 
				
			||||||
else:
 | 
					 | 
				
			||||||
    import gettext
 | 
					 | 
				
			||||||
    try:
 | 
					 | 
				
			||||||
        trans = gettext.translation("fpdb", localedir="locale", languages=[lang])
 | 
					 | 
				
			||||||
        trans.install()
 | 
					 | 
				
			||||||
    except IOError:
 | 
					 | 
				
			||||||
        def _(string): return string
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import Configuration
 | 
					import Configuration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
rewrite = { 'general' : 'General',                   'supported_databases' : 'Databases'
 | 
					rewrite = { 'general' : 'General',                   'supported_databases' : 'Databases'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -339,7 +339,7 @@ class GuiRingPlayerStats (GuiPlayerStats.GuiPlayerStats):
 | 
				
			||||||
    #end def createStatsTable
 | 
					    #end def createStatsTable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def reset_style_render_func(self, treeviewcolumn, cell, model, iter):
 | 
					    def reset_style_render_func(self, treeviewcolumn, cell, model, iter):
 | 
				
			||||||
        cell.set_property('foreground', 'black')
 | 
					        cell.set_property('foreground', None)
 | 
				
			||||||
    #end def reset_style_render_func
 | 
					    #end def reset_style_render_func
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def ledger_style_render_func(self, tvcol, cell, model, iter):
 | 
					    def ledger_style_render_func(self, tvcol, cell, model, iter):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -434,7 +434,7 @@ class GuiTourneyPlayerStats (GuiPlayerStats.GuiPlayerStats):
 | 
				
			||||||
    #end def refreshStats
 | 
					    #end def refreshStats
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    def reset_style_render_func(self, treeviewcolumn, cell, model, iter):
 | 
					    def reset_style_render_func(self, treeviewcolumn, cell, model, iter):
 | 
				
			||||||
        cell.set_property('foreground', 'black')
 | 
					        cell.set_property('foreground', None)
 | 
				
			||||||
    #end def reset_style_render_func
 | 
					    #end def reset_style_render_func
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def sortCols(self, col, nums):
 | 
					    def sortCols(self, col, nums):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,6 +23,9 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Main for FreePokerTools HUD.
 | 
					Main for FreePokerTools HUD.
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					import L10n
 | 
				
			||||||
 | 
					_ = L10n.get_translation()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#    Standard Library modules
 | 
					#    Standard Library modules
 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
| 
						 | 
					@ -51,21 +54,6 @@ elif sys.platform == 'darwin':
 | 
				
			||||||
else: # This is bad--figure out the values for the various windows flavors
 | 
					else: # This is bad--figure out the values for the various windows flavors
 | 
				
			||||||
    import WinTables as Tables
 | 
					    import WinTables as Tables
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import locale
 | 
					 | 
				
			||||||
lang = locale.getdefaultlocale()[0][0:2]
 | 
					 | 
				
			||||||
print "lang:", lang
 | 
					 | 
				
			||||||
if lang == "en":
 | 
					 | 
				
			||||||
    def _(string):
 | 
					 | 
				
			||||||
        return string
 | 
					 | 
				
			||||||
else:
 | 
					 | 
				
			||||||
    import gettext
 | 
					 | 
				
			||||||
    try:
 | 
					 | 
				
			||||||
        trans = gettext.translation("fpdb", localedir="locale", languages=[lang])
 | 
					 | 
				
			||||||
        trans.install()
 | 
					 | 
				
			||||||
    except IOError:
 | 
					 | 
				
			||||||
        def _(string):
 | 
					 | 
				
			||||||
            return string
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# get config and set up logger
 | 
					# get config and set up logger
 | 
				
			||||||
c = Configuration.Config(file=options.config, dbname=options.dbname)
 | 
					c = Configuration.Config(file=options.config, dbname=options.dbname)
 | 
				
			||||||
log = Configuration.get_logger("logging.conf", "hud", log_dir=c.dir_log, log_file='HUD-log.txt')
 | 
					log = Configuration.get_logger("logging.conf", "hud", log_dir=c.dir_log, log_file='HUD-log.txt')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1140,7 +1140,7 @@ class DrawHand(Hand):
 | 
				
			||||||
            hhc.markStreets(self)
 | 
					            hhc.markStreets(self)
 | 
				
			||||||
            # markStreets in Draw may match without dealing cards
 | 
					            # markStreets in Draw may match without dealing cards
 | 
				
			||||||
            if self.streets['DEAL'] == None:
 | 
					            if self.streets['DEAL'] == None:
 | 
				
			||||||
                raise FpdbParseError(_("DrawHand.__init__: street 'DEAL' is empty. Hand cancelled?"))
 | 
					                raise FpdbParseError(_("DrawHand.__init__: street 'DEAL' is empty. Hand cancelled? '%s'" % self.handid))
 | 
				
			||||||
            hhc.readBlinds(self)
 | 
					            hhc.readBlinds(self)
 | 
				
			||||||
            hhc.readAntes(self)
 | 
					            hhc.readAntes(self)
 | 
				
			||||||
            hhc.readButton(self)
 | 
					            hhc.readButton(self)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,7 +49,7 @@ class OnGame(HandHistoryConverter):
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
    currencies = { u'\u20ac':'EUR', u'\xe2\x82\xac':'EUR', '$':'USD', '':'T$' }
 | 
					    currencies = { u'\u20ac':'EUR', u'\xe2\x82\xac':'EUR', '$':'USD', '':'T$' }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    limits = { 'NO_LIMIT':'nl', 'LIMIT':'fl'}
 | 
					    limits = { 'NO_LIMIT':'nl', 'POT_LIMIT':'pl', 'LIMIT':'fl'}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    games = {                          # base, category
 | 
					    games = {                          # base, category
 | 
				
			||||||
                          "TEXAS_HOLDEM" : ('hold','holdem'),
 | 
					                          "TEXAS_HOLDEM" : ('hold','holdem'),
 | 
				
			||||||
| 
						 | 
					@ -73,7 +73,7 @@ class OnGame(HandHistoryConverter):
 | 
				
			||||||
            Start\shand:\s(?P<DATETIME>.*)
 | 
					            Start\shand:\s(?P<DATETIME>.*)
 | 
				
			||||||
            Table:\s(?P<TABLE>[-\'\w\s]+)\s\[\d+\]\s\(
 | 
					            Table:\s(?P<TABLE>[-\'\w\s]+)\s\[\d+\]\s\(
 | 
				
			||||||
            (
 | 
					            (
 | 
				
			||||||
            (?P<LIMIT>NO_LIMIT|Limit|LIMIT|Pot\sLimit)\s
 | 
					            (?P<LIMIT>NO_LIMIT|Limit|LIMIT|Pot\sLimit|POT_LIMIT)\s
 | 
				
			||||||
            (?P<GAME>TEXAS_HOLDEM|OMAHA_HI|SEVEN_CARD_STUD|SEVEN_CARD_STUD_HI_LO|RAZZ|FIVE_CARD_DRAW)\s
 | 
					            (?P<GAME>TEXAS_HOLDEM|OMAHA_HI|SEVEN_CARD_STUD|SEVEN_CARD_STUD_HI_LO|RAZZ|FIVE_CARD_DRAW)\s
 | 
				
			||||||
            (?P<CURRENCY>%(LS)s|)?(?P<SB>[.0-9]+)/
 | 
					            (?P<CURRENCY>%(LS)s|)?(?P<SB>[.0-9]+)/
 | 
				
			||||||
            (%(LS)s)?(?P<BB>[.0-9]+)
 | 
					            (%(LS)s)?(?P<BB>[.0-9]+)
 | 
				
			||||||
| 
						 | 
					@ -140,6 +140,7 @@ class OnGame(HandHistoryConverter):
 | 
				
			||||||
    def readSupportedGames(self):
 | 
					    def readSupportedGames(self):
 | 
				
			||||||
        return [
 | 
					        return [
 | 
				
			||||||
                ["ring", "hold", "fl"],
 | 
					                ["ring", "hold", "fl"],
 | 
				
			||||||
 | 
					                ["ring", "hold", "pl"],
 | 
				
			||||||
                ["ring", "hold", "nl"],
 | 
					                ["ring", "hold", "nl"],
 | 
				
			||||||
                ["ring", "stud", "fl"],
 | 
					                ["ring", "stud", "fl"],
 | 
				
			||||||
                ["ring", "draw", "fl"],
 | 
					                ["ring", "draw", "fl"],
 | 
				
			||||||
| 
						 | 
					@ -158,6 +159,7 @@ class OnGame(HandHistoryConverter):
 | 
				
			||||||
            raise FpdbParseError(_("Unable to recognise gametype from: '%s'") % tmp)
 | 
					            raise FpdbParseError(_("Unable to recognise gametype from: '%s'") % tmp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        mg = m.groupdict()
 | 
					        mg = m.groupdict()
 | 
				
			||||||
 | 
					        #print "DEBUG: mg: %s" % mg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        info['type'] = 'ring'
 | 
					        info['type'] = 'ring'
 | 
				
			||||||
        if 'CURRENCY' in mg:
 | 
					        if 'CURRENCY' in mg:
 | 
				
			||||||
| 
						 | 
					@ -314,9 +316,9 @@ class OnGame(HandHistoryConverter):
 | 
				
			||||||
        m = self.re_Action.finditer(hand.streets[street])
 | 
					        m = self.re_Action.finditer(hand.streets[street])
 | 
				
			||||||
        for action in m:
 | 
					        for action in m:
 | 
				
			||||||
            #acts = action.groupdict()
 | 
					            #acts = action.groupdict()
 | 
				
			||||||
            #log.debug("readaction: acts: %s" %acts)
 | 
					            #print "readaction: acts: %s" %acts
 | 
				
			||||||
            if action.group('ATYPE') == ' raises':
 | 
					            if action.group('ATYPE') == ' raises':
 | 
				
			||||||
                hand.addRaiseBy( street, action.group('PNAME'), action.group('BET') )
 | 
					                hand.addRaiseTo( street, action.group('PNAME'), action.group('BET') )
 | 
				
			||||||
            elif action.group('ATYPE') == ' calls':
 | 
					            elif action.group('ATYPE') == ' calls':
 | 
				
			||||||
                hand.addCall( street, action.group('PNAME'), action.group('BET') )
 | 
					                hand.addCall( street, action.group('PNAME'), action.group('BET') )
 | 
				
			||||||
            elif action.group('ATYPE') == ' bets':
 | 
					            elif action.group('ATYPE') == ' bets':
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,7 +49,8 @@ class PartyPoker(HandHistoryConverter):
 | 
				
			||||||
    currencies = {"\$": "USD", "$": "USD", u"\xe2\x82\xac": "EUR", u"\u20ac": "EUR", '': "T$"}
 | 
					    currencies = {"\$": "USD", "$": "USD", u"\xe2\x82\xac": "EUR", u"\u20ac": "EUR", '': "T$"}
 | 
				
			||||||
    substitutions = {
 | 
					    substitutions = {
 | 
				
			||||||
                     'LEGAL_ISO' : "USD|EUR",            # legal ISO currency codes
 | 
					                     'LEGAL_ISO' : "USD|EUR",            # legal ISO currency codes
 | 
				
			||||||
                            'LS' : "\$|\u20AC|\xe2\x82\xac|"    # legal currency symbols - Euro(cp1252, utf-8)
 | 
					                            'LS' : u"\$|\u20ac|\xe2\x82\xac|",    # Currency symbols - Euro(cp1252, utf-8)
 | 
				
			||||||
 | 
					                           'NUM' : u".,\d",
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Static regexes
 | 
					    # Static regexes
 | 
				
			||||||
| 
						 | 
					@ -81,7 +82,7 @@ class PartyPoker(HandHistoryConverter):
 | 
				
			||||||
    re_PlayerInfo   = re.compile(u"""
 | 
					    re_PlayerInfo   = re.compile(u"""
 | 
				
			||||||
          Seat\s(?P<SEAT>\d+):\s
 | 
					          Seat\s(?P<SEAT>\d+):\s
 | 
				
			||||||
          (?P<PNAME>.*)\s
 | 
					          (?P<PNAME>.*)\s
 | 
				
			||||||
          \(\s*[%(LS)s]?(?P<CASH>[0-9,.]+)\s*(?:%(LEGAL_ISO)s|)\s*\)
 | 
					          \(\s*[%(LS)s]?(?P<CASH>[%(NUM)s]+)\s*(?:%(LEGAL_ISO)s|)\s*\)
 | 
				
			||||||
          """ % substitutions, re.VERBOSE| re.UNICODE)
 | 
					          """ % substitutions, re.VERBOSE| re.UNICODE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    re_HandInfo     = re.compile("""
 | 
					    re_HandInfo     = re.compile("""
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -84,8 +84,8 @@ class PokerStars(HandHistoryConverter):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Static regexes
 | 
					    # Static regexes
 | 
				
			||||||
    re_GameInfo     = re.compile(u"""
 | 
					    re_GameInfo     = re.compile(u"""
 | 
				
			||||||
          PokerStars\sGame\s\#(?P<HID>[0-9]+):\s+
 | 
					          PokerStars(\sHome)?\sGame\s\#(?P<HID>[0-9]+):\s+
 | 
				
			||||||
          (Tournament\s\#                # open paren of tournament info
 | 
					          (\{.*\}\s+)?(Tournament\s\#                # open paren of tournament info
 | 
				
			||||||
          (?P<TOURNO>\d+),\s
 | 
					          (?P<TOURNO>\d+),\s
 | 
				
			||||||
          # here's how I plan to use LS
 | 
					          # here's how I plan to use LS
 | 
				
			||||||
          (?P<BUYIN>(?P<BIAMT>[%(LS)s\d\.]+)?\+?(?P<BIRAKE>[%(LS)s\d\.]+)?\+?(?P<BOUNTY>[%(LS)s\d\.]+)?\s?(?P<TOUR_ISO>%(LEGAL_ISO)s)?|Freeroll)\s+)?
 | 
					          (?P<BUYIN>(?P<BIAMT>[%(LS)s\d\.]+)?\+?(?P<BIRAKE>[%(LS)s\d\.]+)?\+?(?P<BOUNTY>[%(LS)s\d\.]+)?\s?(?P<TOUR_ISO>%(LEGAL_ISO)s)?|Freeroll)\s+)?
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -109,9 +109,9 @@ class RushNotes(Aux_Window):
 | 
				
			||||||
        notepath = site_params_dict['site_path']  # this is a temporary hijack of site-path
 | 
					        notepath = site_params_dict['site_path']  # this is a temporary hijack of site-path
 | 
				
			||||||
        self.heroid = self.hud.db_connection.get_player_id(self.config, sitename, heroname)
 | 
					        self.heroid = self.hud.db_connection.get_player_id(self.config, sitename, heroname)
 | 
				
			||||||
        self.notefile = notepath + "/" + heroname + ".xml"
 | 
					        self.notefile = notepath + "/" + heroname + ".xml"
 | 
				
			||||||
        self.rushtables = ("Mach 10", "Lightning", "Celerity", "Flash", "Zoom")
 | 
					        self.rushtables = ("Mach 10", "Lightning", "Celerity", "Flash", "Zoom", "Apollo")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if not os.path.isfile(self.notefile):
 | 
					        if not (os.path.isfile(self.notefile)):
 | 
				
			||||||
            self.active = False
 | 
					            self.active = False
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
| 
						 | 
					@ -130,29 +130,34 @@ class RushNotes(Aux_Window):
 | 
				
			||||||
        xmlnotefile.unlink
 | 
					        xmlnotefile.unlink
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #
 | 
					        #
 | 
				
			||||||
        # Create a fresh queue file with skeleton XML
 | 
					        # if queue file does not exist create a fresh queue file with skeleton XML
 | 
				
			||||||
 | 
					        # This is possibly not totally safe, if multiple threads arrive
 | 
				
			||||||
 | 
					        # here at the same time, but the consequences are not serious
 | 
				
			||||||
        #
 | 
					        #
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.queuefile = self.notefile + ".queue"
 | 
					        self.queuefile = self.notefile + ".queue"
 | 
				
			||||||
        queuedom = minidom.Document()
 | 
					        if not (os.path.isfile(self.queuefile)):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        pld=queuedom.createElement("PLAYERDATA")
 | 
					            queuedom = minidom.Document()
 | 
				
			||||||
        queuedom.appendChild(pld)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        nts=queuedom.createElement("NOTES")
 | 
					            pld=queuedom.createElement("PLAYERDATA")
 | 
				
			||||||
        pld.appendChild(nts)
 | 
					            queuedom.appendChild(pld)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        nte = queuedom.createElement("NOTE")
 | 
					            nts=queuedom.createElement("NOTES")
 | 
				
			||||||
        nte = queuedom.createTextNode("\n")
 | 
					            pld.appendChild(nts)
 | 
				
			||||||
        nts.insertBefore(nte,None)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        outputfile = open(self.queuefile, 'w')
 | 
					            nte = queuedom.createElement("NOTE")
 | 
				
			||||||
        queuedom.writexml(outputfile)
 | 
					            nte = queuedom.createTextNode("\n")
 | 
				
			||||||
        outputfile.close()
 | 
					            nts.insertBefore(nte,None)
 | 
				
			||||||
        queuedom.unlink
 | 
					
 | 
				
			||||||
 | 
					            outputfile = open(self.queuefile, 'w')
 | 
				
			||||||
 | 
					            queuedom.writexml(outputfile)
 | 
				
			||||||
 | 
					            outputfile.close()
 | 
				
			||||||
 | 
					            queuedom.unlink
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (debugmode):
 | 
					        if (debugmode):
 | 
				
			||||||
            #initialise logfiles
 | 
					            #initialise logfiles
 | 
				
			||||||
            debugfile=open("~Rushdebug.init", "w")
 | 
					            debugfile=open("~Rushdebug.init", "a")
 | 
				
			||||||
            debugfile.write("conf="+str(config)+"\n")
 | 
					            debugfile.write("conf="+str(config)+"\n")
 | 
				
			||||||
            debugfile.write("spdi="+str(site_params_dict)+"\n")
 | 
					            debugfile.write("spdi="+str(site_params_dict)+"\n")
 | 
				
			||||||
            debugfile.write("para="+str(params)+"\n")
 | 
					            debugfile.write("para="+str(params)+"\n")
 | 
				
			||||||
| 
						 | 
					@ -161,8 +166,6 @@ class RushNotes(Aux_Window):
 | 
				
			||||||
            debugfile.write("queu="+self.queuefile+"\n")
 | 
					            debugfile.write("queu="+self.queuefile+"\n")
 | 
				
			||||||
            debugfile.close()
 | 
					            debugfile.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            open("~Rushdebug.data", "w").close()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def update_data(self, new_hand_id, db_connection):
 | 
					    def update_data(self, new_hand_id, db_connection):
 | 
				
			||||||
        #this method called once for every hand processed
 | 
					        #this method called once for every hand processed
 | 
				
			||||||
| 
						 | 
					@ -204,16 +207,19 @@ class RushNotes(Aux_Window):
 | 
				
			||||||
            vpip=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'vpip')[3] + " ")
 | 
					            vpip=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'vpip')[3] + " ")
 | 
				
			||||||
            pfr=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'pfr')[3] + " ")
 | 
					            pfr=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'pfr')[3] + " ")
 | 
				
			||||||
            three_B=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'three_B')[3] + " ")
 | 
					            three_B=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'three_B')[3] + " ")
 | 
				
			||||||
 | 
					            four_B=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'four_B')[3] + " ")            
 | 
				
			||||||
            cbet=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'cbet')[3] + " ")
 | 
					            cbet=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'cbet')[3] + " ")
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
            fbbsteal=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'f_BB_steal')[3] + " ")
 | 
					            fbbsteal=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'f_BB_steal')[3] + " ")
 | 
				
			||||||
 | 
					            f_3bet=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'f_3bet')[3] + " ")
 | 
				
			||||||
 | 
					            f_4bet=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'f_4bet')[3] + " ")
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
            steal=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'steal')[3] + " ")
 | 
					            steal=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'steal')[3] + " ")
 | 
				
			||||||
            ffreq1=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'ffreq1')[3] + " ")
 | 
					            ffreq1=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'ffreq1')[3] + " ")
 | 
				
			||||||
            agg_freq=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'agg_freq')[3] + " ")
 | 
					            agg_freq=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'agg_freq')[3] + " ")
 | 
				
			||||||
            BBper100=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'BBper100')[3])
 | 
					            BBper100=str(Stats.do_stat(self.hud.stat_dict, player = playerid, stat = 'BBper100')[3])
 | 
				
			||||||
            if BBper100[6] == "-": BBper100=BBper100[0:6] + "(" + BBper100[7:] + ")"
 | 
					            if BBper100[6] == "-": BBper100=BBper100[0:6] + "(" + BBper100[7:] + ")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
            #
 | 
					            #
 | 
				
			||||||
            # grab villain known starting hands
 | 
					            # grab villain known starting hands
 | 
				
			||||||
            # only those where they VPIP'd, so limp in the BB will not be shown
 | 
					            # only those where they VPIP'd, so limp in the BB will not be shown
 | 
				
			||||||
| 
						 | 
					@ -269,10 +275,13 @@ class RushNotes(Aux_Window):
 | 
				
			||||||
            # for later search/replace by Merge module
 | 
					            # for later search/replace by Merge module
 | 
				
			||||||
            #
 | 
					            #
 | 
				
			||||||
            xmlqueuedict[playername] = ("~fpdb~" + "\n" +
 | 
					            xmlqueuedict[playername] = ("~fpdb~" + "\n" +
 | 
				
			||||||
                                        n + vpip + pfr + three_B + fbbsteal + "\n" +
 | 
					                                        n + vpip + pfr + "\n" +
 | 
				
			||||||
                                        steal + cbet + ffreq1 + "\n" +
 | 
					                                        steal + cbet + fbbsteal + ffreq1 + "\n" +
 | 
				
			||||||
 | 
					                                        three_B + four_B + f_3bet + f_4bet + "\n" +
 | 
				
			||||||
                                        agg_freq + BBper100 + "\n" +
 | 
					                                        agg_freq + BBper100 + "\n" +
 | 
				
			||||||
                                        PFcall+"\n"+PFaggr+"\n"+PFdefend +"\n"
 | 
					                                        PFcall+"\n"+
 | 
				
			||||||
 | 
					                                        PFaggr+"\n"+
 | 
				
			||||||
 | 
					                                        PFdefend +"\n"+
 | 
				
			||||||
                                        "~ends~")
 | 
					                                        "~ends~")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (debugmode):
 | 
					        if (debugmode):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -105,8 +105,6 @@ if not os.path.isfile(sys.argv[1]):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if not os.path.isfile((sys.argv[1]+".queue")):
 | 
					if not os.path.isfile((sys.argv[1]+".queue")):
 | 
				
			||||||
    print "Nothing found to merge, quitting"
 | 
					    print "Nothing found to merge, quitting"
 | 
				
			||||||
    print "Did the HUD not get started during the last session?"
 | 
					 | 
				
			||||||
    print "Has the HUD been stopped and started without merging?"
 | 
					 | 
				
			||||||
    quit()
 | 
					    quit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
print "***************************************************************"
 | 
					print "***************************************************************"
 | 
				
			||||||
| 
						 | 
					@ -117,7 +115,7 @@ print "has stopped completely"
 | 
				
			||||||
print "***************************************************************"
 | 
					print "***************************************************************"
 | 
				
			||||||
print
 | 
					print
 | 
				
			||||||
print "read from: ", sys.argv[1]
 | 
					print "read from: ", sys.argv[1]
 | 
				
			||||||
print "merge with: ", sys.argv[1]+".queue"
 | 
					print "updated with: ", sys.argv[1]+".queue"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#read queue and turn into a dict
 | 
					#read queue and turn into a dict
 | 
				
			||||||
queuedict = {}
 | 
					queuedict = {}
 | 
				
			||||||
| 
						 | 
					@ -172,7 +170,7 @@ mergednotes.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
xmlnotefile.unlink
 | 
					xmlnotefile.unlink
 | 
				
			||||||
 | 
					
 | 
				
			||||||
print "Merged file has been written to: ", sys.argv[1]+".merged"
 | 
					print "written to: ", sys.argv[1]+".merged"
 | 
				
			||||||
print ""
 | 
					print ""
 | 
				
			||||||
print "number in queue: ", statqueue
 | 
					print "number in queue: ", statqueue
 | 
				
			||||||
print "existing players updated: ", statupdated
 | 
					print "existing players updated: ", statupdated
 | 
				
			||||||
| 
						 | 
					@ -180,5 +178,7 @@ print "new players added: ", statadded
 | 
				
			||||||
print "\n"
 | 
					print "\n"
 | 
				
			||||||
print "Use a viewer to check the contents of the merge file."
 | 
					print "Use a viewer to check the contents of the merge file."
 | 
				
			||||||
print "If you are happy, carry out the following steps:"
 | 
					print "If you are happy, carry out the following steps:"
 | 
				
			||||||
print "1 Rename or delete the existing notes file (normally <heroname>.xml"
 | 
					print "1 Rename or delete the existing notes file (normally <heroname>.xml)"
 | 
				
			||||||
print "2 Rename the .merged file to become the new notes file"
 | 
					print "2 Rename the .merged file to become the new notes file"
 | 
				
			||||||
 | 
					print "3 Delete the .queue file (it will be created at the next rush autoimport)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,11 +15,6 @@ Important info:
 | 
				
			||||||
The Merge process can only be run when ftp client is shutdown
 | 
					The Merge process can only be run when ftp client is shutdown
 | 
				
			||||||
 - otherwise ftp overwrites the xml on exit.
 | 
					 - otherwise ftp overwrites the xml on exit.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Restarting the autoimport will empty the notes"queue" so avoid restarting
 | 
					 | 
				
			||||||
 autoimport until the previous notes "queue" has been merged.  You will
 | 
					 | 
				
			||||||
 lose all the queued notes, but these will be regenerated the next time
 | 
					 | 
				
			||||||
 the villian is at your table, so it isn't the end of the world.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Existing ftp notes _SHOULD_ be preserved, but this isn't guaranteed, 
 | 
					Existing ftp notes _SHOULD_ be preserved, but this isn't guaranteed, 
 | 
				
			||||||
 you have been warned!
 | 
					 you have been warned!
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
| 
						 | 
					@ -27,7 +22,8 @@ Existing colour codings should be preserved,
 | 
				
			||||||
 this process does not change or set colourcodings.
 | 
					 this process does not change or set colourcodings.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Copies of the live ftp notes file should be preserved everytime
 | 
					Copies of the live ftp notes file should be preserved everytime
 | 
				
			||||||
  RushNotesAux (i.e. the HUD is started)
 | 
					  RushNotesAux (i.e. the HUD is started).  If you play at different
 | 
				
			||||||
 | 
					  rush tables, the backup will be created several times.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The AW is hard-coded with just the table names of Micro Rush Poker, 
 | 
					The AW is hard-coded with just the table names of Micro Rush Poker, 
 | 
				
			||||||
  and should ignore all other hands.
 | 
					  and should ignore all other hands.
 | 
				
			||||||
| 
						 | 
					@ -35,7 +31,7 @@ The AW is hard-coded with just the table names of Micro Rush Poker,
 | 
				
			||||||
What might not work?
 | 
					What might not work?
 | 
				
			||||||
--------------------
 | 
					--------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This isn't tested with Windows, and probably won't work, feedback welcome.
 | 
					This should work with windows sourcecode version, but will not work with the exe download.
 | 
				
			||||||
Hasn't been tested for co-existance with other sites, feedback welcome.
 | 
					Hasn't been tested for co-existance with other sites, feedback welcome.
 | 
				
			||||||
Whenever FTP change their notes file format, this will all break rather spectacularly,
 | 
					Whenever FTP change their notes file format, this will all break rather spectacularly,
 | 
				
			||||||
    you have been warned!
 | 
					    you have been warned!
 | 
				
			||||||
| 
						 | 
					@ -77,7 +73,7 @@ execute the following:
 | 
				
			||||||
./pyfpdb/RushNotesMerge.py "/home/foo/.wine/drive_c/Program Files/Full Tilt Poker/myname.xml"
 | 
					./pyfpdb/RushNotesMerge.py "/home/foo/.wine/drive_c/Program Files/Full Tilt Poker/myname.xml"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
A revised notes file (blah.merge) should automagically appear in the full tilt root directory.
 | 
					A revised notes file (blah.merge) should automagically appear in the full tilt root directory.
 | 
				
			||||||
If you are happy with it, replace the existing (myname.xml file)
 | 
					If you are happy with it, replace the existing (myname.xml file) and delete the .queue file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Since the updates aren't real time, it would be ok to play the rush
 | 
					Since the updates aren't real time, it would be ok to play the rush
 | 
				
			||||||
| 
						 | 
					@ -176,7 +172,7 @@ Process overview
 | 
				
			||||||
----------------
 | 
					----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1/ The HUD process is started.  
 | 
					1/ The HUD process is started.  
 | 
				
			||||||
1.1/ when the first hand is received, h fresh holding file is created, and 
 | 
					1.1/ when the first hand is received, a queue file is created if not already there, and 
 | 
				
			||||||
a copy of the current live xml note file is created as a security backup.
 | 
					a copy of the current live xml note file is created as a security backup.
 | 
				
			||||||
2/ For every hand played, the auxillary window is called
 | 
					2/ For every hand played, the auxillary window is called
 | 
				
			||||||
3/ Based upon the players in the hand, fpdb will be interrogated
 | 
					3/ Based upon the players in the hand, fpdb will be interrogated
 | 
				
			||||||
| 
						 | 
					@ -191,4 +187,4 @@ existing notes, but this cannot be guaranteed.
 | 
				
			||||||
they replace the existing note file.
 | 
					they replace the existing note file.
 | 
				
			||||||
9/ Note that this process never updates the live notes file in situ, but
 | 
					9/ Note that this process never updates the live notes file in situ, but
 | 
				
			||||||
there is a risk that something goes wrong, and that existing notes could be destroyed.
 | 
					there is a risk that something goes wrong, and that existing notes could be destroyed.
 | 
				
			||||||
 | 
					10/ the queue file can be deleted to reduce re-processing next time.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2294,7 +2294,7 @@ class Sql:
 | 
				
			||||||
                             end                                                                    AS pofafq
 | 
					                             end                                                                    AS pofafq
 | 
				
			||||||
                            ,case when sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)) = 0 then -999
 | 
					                            ,case when sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)) = 0 then -999
 | 
				
			||||||
                                 else (sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer)))
 | 
					                                 else (sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer)))
 | 
				
			||||||
                                     /(sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)))
 | 
					                                     /(0.0+sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)))
 | 
				
			||||||
                             end                                                                    AS aggfac
 | 
					                             end                                                                    AS aggfac
 | 
				
			||||||
                            ,100.0*(sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer))) 
 | 
					                            ,100.0*(sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer))) 
 | 
				
			||||||
                                       / ((sum(cast(hp.foldToOtherRaisedStreet1 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet2 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet3 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet4 as <signed>integer))) +
 | 
					                                       / ((sum(cast(hp.foldToOtherRaisedStreet1 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet2 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet3 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet4 as <signed>integer))) +
 | 
				
			||||||
| 
						 | 
					@ -2415,7 +2415,7 @@ class Sql:
 | 
				
			||||||
                             end                                                                    AS pofafq
 | 
					                             end                                                                    AS pofafq
 | 
				
			||||||
                            ,case when sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)) = 0 then -999
 | 
					                            ,case when sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)) = 0 then -999
 | 
				
			||||||
                                 else (sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer)))
 | 
					                                 else (sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer)))
 | 
				
			||||||
                                     /(sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)))
 | 
					                                     /(0.0+sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)))
 | 
				
			||||||
                             end                                                                    AS aggfac
 | 
					                             end                                                                    AS aggfac
 | 
				
			||||||
                            ,100.0*(sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer))) 
 | 
					                            ,100.0*(sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer))) 
 | 
				
			||||||
                                       / ((sum(cast(hp.foldToOtherRaisedStreet1 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet2 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet3 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet4 as <signed>integer))) +
 | 
					                                       / ((sum(cast(hp.foldToOtherRaisedStreet1 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet2 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet3 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet4 as <signed>integer))) +
 | 
				
			||||||
| 
						 | 
					@ -2537,7 +2537,7 @@ class Sql:
 | 
				
			||||||
                             end                                                                    AS pofafq
 | 
					                             end                                                                    AS pofafq
 | 
				
			||||||
                            ,case when sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)) = 0 then -999
 | 
					                            ,case when sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)) = 0 then -999
 | 
				
			||||||
                                 else (sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer)))
 | 
					                                 else (sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer)))
 | 
				
			||||||
                                     /(sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)))
 | 
					                                     /(0.0+sum(cast(hp.street1Calls as <signed>integer))+ sum(cast(hp.street2Calls as <signed>integer))+ sum(cast(hp.street3Calls as <signed>integer))+ sum(cast(hp.street4Calls as <signed>integer)))
 | 
				
			||||||
                             end                                                                    AS aggfac
 | 
					                             end                                                                    AS aggfac
 | 
				
			||||||
                            ,100.0*(sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer))) 
 | 
					                            ,100.0*(sum(cast(hp.street1Aggr as <signed>integer)) + sum(cast(hp.street2Aggr as <signed>integer)) + sum(cast(hp.street3Aggr as <signed>integer)) + sum(cast(hp.street4Aggr as <signed>integer))) 
 | 
				
			||||||
                                       / ((sum(cast(hp.foldToOtherRaisedStreet1 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet2 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet3 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet4 as <signed>integer))) +
 | 
					                                       / ((sum(cast(hp.foldToOtherRaisedStreet1 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet2 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet3 as <signed>integer))+ sum(cast(hp.foldToOtherRaisedStreet4 as <signed>integer))) +
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,10 +15,13 @@ import L10n
 | 
				
			||||||
_ = L10n.get_translation()
 | 
					_ = L10n.get_translation()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import sys, random
 | 
					import sys, random
 | 
				
			||||||
 | 
					import re
 | 
				
			||||||
import pokereval
 | 
					import pokereval
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SUITS = ['h', 'd', 's', 'c']
 | 
					SUITS = ['h', 'd', 's', 'c']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONNECTORS = ['32', '43', '54', '65', '76', '87', '98', 'T9', 'JT', 'QJ', 'KQ', 'AK']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ANY = 0
 | 
					ANY = 0
 | 
				
			||||||
SUITED = 1
 | 
					SUITED = 1
 | 
				
			||||||
OFFSUIT = 2
 | 
					OFFSUIT = 2
 | 
				
			||||||
| 
						 | 
					@ -65,14 +68,7 @@ class Stove:
 | 
				
			||||||
        hands_in_range = string.strip().split(',')
 | 
					        hands_in_range = string.strip().split(',')
 | 
				
			||||||
        for h in hands_in_range:
 | 
					        for h in hands_in_range:
 | 
				
			||||||
            _h = h.strip()
 | 
					            _h = h.strip()
 | 
				
			||||||
            if len(_h) > 3:
 | 
					            h_range.expand(expand_hands(_h, self.hand, self.board))
 | 
				
			||||||
                cc = _h.split()
 | 
					 | 
				
			||||||
                r1 = cc[0]
 | 
					 | 
				
			||||||
                r2 = cc[1]
 | 
					 | 
				
			||||||
                vp = Cards(r1, r2)
 | 
					 | 
				
			||||||
                h_range.add(vp)
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                h_range.expand(expand_hands(_h, self.hand, self.board))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.h_range = h_range
 | 
					        self.h_range = h_range
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -83,7 +79,7 @@ class Cards:
 | 
				
			||||||
        self.c2 = c2
 | 
					        self.c2 = c2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get(self):
 | 
					    def get(self):
 | 
				
			||||||
        return [c1, c2]
 | 
					        return [self.c1, self.c2]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Board:
 | 
					class Board:
 | 
				
			||||||
    def __init__(self, b1=None, b2=None, b3=None, b4=None, b5=None):
 | 
					    def __init__(self, b1=None, b2=None, b3=None, b4=None, b5=None):
 | 
				
			||||||
| 
						 | 
					@ -127,7 +123,7 @@ class Range:
 | 
				
			||||||
    def get(self):
 | 
					    def get(self):
 | 
				
			||||||
        return sorted(self.__hands)
 | 
					        return sorted(self.__hands)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class EV:
 | 
					class EV:
 | 
				
			||||||
    def __init__(self, plays, win, tie, lose):
 | 
					    def __init__(self, plays, win, tie, lose):
 | 
				
			||||||
| 
						 | 
					@ -175,6 +171,35 @@ def expand_hands(abbrev, hand, board):
 | 
				
			||||||
    known_cards.update(set([hand.c2, hand.c2]))
 | 
					    known_cards.update(set([hand.c2, hand.c2]))
 | 
				
			||||||
    known_cards.update(set([board.b1, board.b2, board.b3, board.b4, board.b5]))
 | 
					    known_cards.update(set([board.b1, board.b2, board.b3, board.b4, board.b5]))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    re.search('[2-9TJQKA]{2}(s|o)',abbrev)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if re.search('^[2-9TJQKA]{2}(s|o)$',abbrev): #AKs or AKo
 | 
				
			||||||
 | 
					        return standard_expand(abbrev, hand, known_cards)
 | 
				
			||||||
 | 
					    elif re.search('^[2-9TJQKA]{2}(s|o)\+$',abbrev): #76s+ or 76o+
 | 
				
			||||||
 | 
					        return iterative_expand(abbrev, hand, known_cards)
 | 
				
			||||||
 | 
					    #elif: AhXh
 | 
				
			||||||
 | 
					    #elif: Ah6h+A
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def iterative_expand(abbrev, hand, known_cards):
 | 
				
			||||||
 | 
					    r1 = abbrev[0]
 | 
				
			||||||
 | 
					    r2 = abbrev[1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    h_range = []
 | 
				
			||||||
 | 
					    considered = set()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    idx = CONNECTORS.index('%s%s' % (r1, r2))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ltr = abbrev[2]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    h_range = []
 | 
				
			||||||
 | 
					    for h in CONNECTORS[idx:]:
 | 
				
			||||||
 | 
					        abr = "%s%s" % (h, ltr)
 | 
				
			||||||
 | 
					        h_range += standard_expand(abr, hand, known_cards)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return h_range
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def standard_expand(abbrev, hand, known_cards):
 | 
				
			||||||
    # Card ranks may be different
 | 
					    # Card ranks may be different
 | 
				
			||||||
    r1 = abbrev[0]
 | 
					    r1 = abbrev[0]
 | 
				
			||||||
    r2 = abbrev[1]
 | 
					    r2 = abbrev[1]
 | 
				
			||||||
| 
						 | 
					@ -228,7 +253,7 @@ def odds_for_hand(hand1, hand2, board, iterations):
 | 
				
			||||||
        board = board,
 | 
					        board = board,
 | 
				
			||||||
        iterations = iterations
 | 
					        iterations = iterations
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    plays = int(res['info'][0])
 | 
					    plays = int(res['info'][0])
 | 
				
			||||||
    eval = res['eval'][0]
 | 
					    eval = res['eval'][0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -0,0 +1,44 @@
 | 
				
			||||||
 | 
					***** History for hand R5-21973400-50 *****
 | 
				
			||||||
 | 
					Start hand: Mon Feb 7 15:22:00 GMT+0100 2011
 | 
				
			||||||
 | 
					Table: Oullins [21973414] (POT_LIMIT OMAHA_HI €1/€1, Real money)
 | 
				
			||||||
 | 
					User: Hero
 | 
				
			||||||
 | 
					Button: seat 7
 | 
				
			||||||
 | 
					Players in round: 6
 | 
				
			||||||
 | 
					Seat 8: Player8 (€89)
 | 
				
			||||||
 | 
					Seat 10: Hero (€100)
 | 
				
			||||||
 | 
					Seat 2: Player2 (€50)
 | 
				
			||||||
 | 
					Seat 3: Player3 (€93.50)
 | 
				
			||||||
 | 
					Seat 5: Player5 (€86.15)
 | 
				
			||||||
 | 
					Seat 7: Player7 (€149.40)
 | 
				
			||||||
 | 
					Player8 posts small blind (€0.50)
 | 
				
			||||||
 | 
					Hero posts big blind (€1)
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					Dealing pocket cards
 | 
				
			||||||
 | 
					Dealing to Hero: [3c, 7c, 4c, 5h]
 | 
				
			||||||
 | 
					Player2 calls €1
 | 
				
			||||||
 | 
					Player3 raises €4.50 to €4.50
 | 
				
			||||||
 | 
					Player5 folds
 | 
				
			||||||
 | 
					Player7 calls €4.50
 | 
				
			||||||
 | 
					Player8 calls €4
 | 
				
			||||||
 | 
					Hero calls €3.50
 | 
				
			||||||
 | 
					Player2 folds
 | 
				
			||||||
 | 
					--- Dealing flop [7s, 4d, 3h]
 | 
				
			||||||
 | 
					Player8 checks
 | 
				
			||||||
 | 
					Hero bets €12
 | 
				
			||||||
 | 
					Player3 calls €12
 | 
				
			||||||
 | 
					Player7 folds
 | 
				
			||||||
 | 
					Player8 folds
 | 
				
			||||||
 | 
					--- Dealing turn [6d]
 | 
				
			||||||
 | 
					Hero bets €21.50
 | 
				
			||||||
 | 
					Player3 folds
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					Summary:
 | 
				
			||||||
 | 
					Main pot: €43 won by Hero (€40.85)
 | 
				
			||||||
 | 
					Rake taken: €2.15
 | 
				
			||||||
 | 
					Seat 8: Player8 (€84.50), net: -€4.50
 | 
				
			||||||
 | 
					Seat 10: Hero (€124.35), net: +€24.35
 | 
				
			||||||
 | 
					Seat 2: Player2 (€49), net: -€1
 | 
				
			||||||
 | 
					Seat 3: Player3 (€77), net: -€16.50
 | 
				
			||||||
 | 
					Seat 5: Player5 (€86.15)
 | 
				
			||||||
 | 
					Seat 7: Player7 (€144.90), net: -€4.50
 | 
				
			||||||
 | 
					***** End of hand R5-21973414-50 *****
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,16 @@
 | 
				
			||||||
 | 
					Full Tilt Poker Tournament Summary $2 + $0.25 Sit & Go (214900008) Hold'em No Limit
 | 
				
			||||||
 | 
					Buy-In: $2 + $0.25
 | 
				
			||||||
 | 
					Buy-In Chips: 1500
 | 
				
			||||||
 | 
					6 Entries
 | 
				
			||||||
 | 
					Total Prize Pool: $12
 | 
				
			||||||
 | 
					Tournament started: 2011/01/27 07:21:00 ET
 | 
				
			||||||
 | 
					Tournament finished: 2011/01/27 08:38:00 ET
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1: Hero, $7.80
 | 
				
			||||||
 | 
					2: Player2, $4.20
 | 
				
			||||||
 | 
					3: Player3
 | 
				
			||||||
 | 
					4: Player4
 | 
				
			||||||
 | 
					5: Player5
 | 
				
			||||||
 | 
					6: Player6
 | 
				
			||||||
 | 
					Hero finished in 1st place
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					Full Tilt Poker Tournament Summary $2 + $0.25 Sit & Go (214976900) Hold'em No Limit
 | 
				
			||||||
 | 
					Buy-In: $2 + $0.25
 | 
				
			||||||
 | 
					Buy-In Chips: 1500
 | 
				
			||||||
 | 
					9 Entries
 | 
				
			||||||
 | 
					Total Prize Pool: $18
 | 
				
			||||||
 | 
					Tournament started: 2011/01/27 14:35:00 ET
 | 
				
			||||||
 | 
					Tournament finished: 2011/01/27 15:25:00 ET
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1: Player1, $9
 | 
				
			||||||
 | 
					2: Player2, $5.40
 | 
				
			||||||
 | 
					3: Hero, $3.60
 | 
				
			||||||
 | 
					4: Player4
 | 
				
			||||||
 | 
					5: Player5
 | 
				
			||||||
 | 
					6: Player6
 | 
				
			||||||
 | 
					7: Player7
 | 
				
			||||||
 | 
					8: Player8
 | 
				
			||||||
 | 
					9: Player9
 | 
				
			||||||
 | 
					Hero finished in 3rd place
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user