Merge branch 'master' of git://git.assembla.com/fpdb-eric
Conflicts: pyfpdb/Configuration.py
This commit is contained in:
commit
9923e6e8ca
|
@ -1,67 +1,67 @@
|
||||||
Hi,
|
Hi,
|
||||||
This document is to serve as a little overview (later: full technical doc) for current and prospective developers with:
|
This document is to serve as a little overview (later: full technical doc) for current and prospective developers with:
|
||||||
a) introduction into the code structure
|
a) introduction into the code structure
|
||||||
b) organisational/legal things
|
b) organisational/legal things
|
||||||
|
|
||||||
What to do?
|
What to do?
|
||||||
===========
|
===========
|
||||||
- Anything you want.
|
- Anything you want.
|
||||||
- The most useful (because it's the most boring) would be to update print_hand.py, update the expected files (testdata/*.found.txt) and create more .found.txt to ensure import processing is running correctly.
|
- The most useful (because it's the most boring) would be to update print_hand.py, update the expected files (testdata/*.found.txt) and create more .found.txt to ensure import processing is running correctly.
|
||||||
- There's a list of various bugs, deficiencies and important missing features in known_bugs_and_planned_features.txt.
|
- There's a list of various bugs, deficiencies and important missing features in known_bugs_and_planned_features.txt.
|
||||||
- In the main GUI there's various menu points marked with todo - all of these will have to be done eventually.
|
- In the main GUI there's various menu points marked with todo - all of these will have to be done eventually.
|
||||||
|
|
||||||
If you want to take a look at coding-style.txt.
|
If you want to take a look at coding-style.txt.
|
||||||
Ideally use git (see git-instructions.txt for some commands) and let me know where to pull from, alternatively feel free to send patches or even just changed file in whatever code layout or naming convention you like best. I will, of course, still give you full credit.
|
Ideally use git (see git-instructions.txt for some commands) and let me know where to pull from, alternatively feel free to send patches or even just changed file in whatever code layout or naming convention you like best. I will, of course, still give you full credit.
|
||||||
|
|
||||||
Contact/Communication
|
Contact/Communication
|
||||||
=====================
|
=====================
|
||||||
If you start working on something please open a bug or feature request at sf to avoid someone else from doing the same
|
If you start working on something please open a bug or feature request at sf to avoid someone else from doing the same
|
||||||
Please see readme-overview
|
Please see readme-overview
|
||||||
|
|
||||||
Dependencies
|
Dependencies
|
||||||
============
|
============
|
||||||
Please let me know before you add any new dependencies and ensure that they are source-compatible between *nix and Windows
|
Please let me know before you add any new dependencies and ensure that they are source-compatible between *nix and Windows
|
||||||
|
|
||||||
Code/File/Class Structure
|
Code/File/Class Structure
|
||||||
=========================
|
=========================
|
||||||
Basically the code runs like this
|
Basically the code runs like this
|
||||||
|
|
||||||
fpdb.py -> bulk importer tab (import_threaded.py) -> fpdb_import.py -> fpdb_parse_logic.py -> fpdb_save_to_db.py
|
fpdb.py -> bulk importer tab (import_threaded.py) -> fpdb_import.py -> fpdb_parse_logic.py -> fpdb_save_to_db.py
|
||||||
or
|
or
|
||||||
fpdb.py -> table viewer tab (table_viewer.py) (todo: -> libTableViewer)
|
fpdb.py -> table viewer tab (table_viewer.py) (todo: -> libTableViewer)
|
||||||
|
|
||||||
All files call the simple methods that I just collected in fpdb_simple.py, to abstract the other files off the nitty gritty details as I was learning python.
|
All files call the simple methods that I just collected in fpdb_simple.py, to abstract the other files off the nitty gritty details as I was learning python.
|
||||||
I'm currently working on (amongst other things) integrating everything into the fpdb.py GUI with a view to allow easy creation of a CLI client, too.
|
I'm currently working on (amongst other things) integrating everything into the fpdb.py GUI with a view to allow easy creation of a CLI client, too.
|
||||||
|
|
||||||
Also see filelist.txt.
|
Also see filelist.txt.
|
||||||
|
|
||||||
How to Commit
|
How to Commit
|
||||||
=============
|
=============
|
||||||
Please make sure you read and accept the copyright policy as stated in this file. Then see git-instructions.txt. Don't get me wrong, I hate all this legalese, but unfortunately it's kinda necessary.
|
Please make sure you read and accept the copyright policy as stated in this file. Then see git-instructions.txt. Don't get me wrong, I hate all this legalese, but unfortunately it's kinda necessary.
|
||||||
|
|
||||||
Copyright/Licensing
|
Copyright/Licensing
|
||||||
===================
|
===================
|
||||||
Copyright by default is handled on a per-file basis. If you send in a patch or make a commit to an existing file it is done on the understanding that you transfer all rights (as far as legally possible in your jurisdiction) to the current copyright holder of that file, unless otherwise stated. If you create a new file please ensure to include a copyright and license statement.
|
Copyright by default is handled on a per-file basis. If you send in a patch or make a commit to an existing file it is done on the understanding that you transfer all rights (as far as legally possible in your jurisdiction) to the current copyright holder of that file, unless otherwise stated. If you create a new file please ensure to include a copyright and license statement.
|
||||||
|
|
||||||
The licenses used by this project are the AGPL3 for code and FDL1.2 for documentation. See readme-overview.txt for reasons and if you wish to use fpdb with different licensing.
|
The licenses used by this project are the AGPL3 for code and FDL1.2 for documentation. See readme-overview.txt for reasons and if you wish to use fpdb with different licensing.
|
||||||
|
|
||||||
Preferred File Formats
|
Preferred File Formats
|
||||||
======================
|
======================
|
||||||
Preferred: Where possible simple text-based formats, e.g. plain text (with Unix end of line char) or (X)HTML. Preferred picture format is PNG. IE-compability for HTML files is optional as IE was never meant to be a real web browser, if it were they would've implemented web standards.
|
Preferred: Where possible simple text-based formats, e.g. plain text (with Unix end of line char) or (X)HTML. Preferred picture format is PNG. IE-compability for HTML files is optional as IE was never meant to be a real web browser, if it were they would've implemented web standards.
|
||||||
|
|
||||||
Also good: Other free and open formats, e.g. ODF.
|
Also good: Other free and open formats, e.g. ODF.
|
||||||
|
|
||||||
Not good: Any format that doesn't have full documentation freely and publicly available with a proper license for anyone to implement it. Sadly, Microsoft has chosen not fulfil these requirements for ISO MS OOXML to become a truly open standard.
|
Not good: Any format that doesn't have full documentation freely and publicly available with a proper license for anyone to implement it. Sadly, Microsoft has chosen not fulfil these requirements for ISO MS OOXML to become a truly open standard.
|
||||||
|
|
||||||
License (of this file)
|
License (of this file)
|
||||||
=======
|
=======
|
||||||
Trademarks of third parties have been used under Fair Use or similar laws.
|
Trademarks of third parties have been used under Fair Use or similar laws.
|
||||||
|
|
||||||
Copyright 2008 Steffen Jobbagy-Felso
|
Copyright 2008 Steffen Jobbagy-Felso
|
||||||
Permission is granted to copy, distribute and/or modify this
|
Permission is granted to copy, distribute and/or modify this
|
||||||
document under the terms of the GNU Free Documentation License,
|
document under the terms of the GNU Free Documentation License,
|
||||||
Version 1.2 as published by the Free Software Foundation; with
|
Version 1.2 as published by the Free Software Foundation; with
|
||||||
no Invariant Sections, no Front-Cover Texts, and with no Back-Cover
|
no Invariant Sections, no Front-Cover Texts, and with no Back-Cover
|
||||||
Texts. A copy of the license can be found in fdl-1.2.txt
|
Texts. A copy of the license can be found in fdl-1.2.txt
|
||||||
|
|
||||||
The program itself is licensed under AGPLv3, see agpl-3.0.txt
|
The program itself is licensed under AGPLv3, see agpl-3.0.txt
|
||||||
|
|
|
@ -1,29 +1,29 @@
|
||||||
#!/usr/bin/pugs
|
#!/usr/bin/pugs
|
||||||
|
|
||||||
#Copyright 2008 Steffen Jobbagy-Felso
|
#Copyright 2008 Steffen Jobbagy-Felso
|
||||||
#This program is free software: you can redistribute it and/or modify
|
#This program is free software: you can redistribute it and/or modify
|
||||||
#it under the terms of the GNU Affero General Public License as published by
|
#it under the terms of the GNU Affero General Public License as published by
|
||||||
#the Free Software Foundation, version 3 of the License.
|
#the Free Software Foundation, version 3 of the License.
|
||||||
#
|
#
|
||||||
#This program is distributed in the hope that it will be useful,
|
#This program is distributed in the hope that it will be useful,
|
||||||
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
#GNU General Public License for more details.
|
#GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
#You should have received a copy of the GNU Affero General Public License
|
#You should have received a copy of the GNU Affero General Public License
|
||||||
#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
|
#In the "official" distribution you can find the license in
|
||||||
#agpl-3.0.txt in the docs folder of the package.
|
#agpl-3.0.txt in the docs folder of the package.
|
||||||
|
|
||||||
use v6;
|
use v6;
|
||||||
#use strict;
|
#use strict;
|
||||||
use LibFpdbImport;
|
use LibFpdbImport;
|
||||||
use LibFpdbShared;
|
use LibFpdbShared;
|
||||||
|
|
||||||
|
|
||||||
my Database $db .= new(:backend<MySQL InnoDB>, :host<localhost>, :database<fpdb>, :user<fpdb>, :password<myPW>);
|
my Database $db .= new(:backend<MySQL InnoDB>, :host<localhost>, :database<fpdb>, :user<fpdb>, :password<myPW>);
|
||||||
#todo: below doesnt work
|
#todo: below doesnt work
|
||||||
my Importer $imp .= new(:db($db), :filename<HH-LHE1.txt>);
|
my Importer $imp .= new(:db($db), :filename<HH-LHE1.txt>);
|
||||||
#perlbug?: adding another named argument that isnt listed in the constructor gave very weird error.
|
#perlbug?: adding another named argument that isnt listed in the constructor gave very weird error.
|
||||||
say $imp;
|
say $imp;
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,7 @@ class Site:
|
||||||
self.hudbgcolor = node.getAttribute("bgcolor")
|
self.hudbgcolor = node.getAttribute("bgcolor")
|
||||||
self.hudfgcolor = node.getAttribute("fgcolor")
|
self.hudfgcolor = node.getAttribute("fgcolor")
|
||||||
self.converter = node.getAttribute("converter")
|
self.converter = node.getAttribute("converter")
|
||||||
|
self.enabled = node.getAttribute("enabled")
|
||||||
self.layout = {}
|
self.layout = {}
|
||||||
|
|
||||||
for layout_node in node.getElementsByTagName('layout'):
|
for layout_node in node.getElementsByTagName('layout'):
|
||||||
|
@ -498,13 +499,14 @@ class Config:
|
||||||
parms["table_finder"] = self.supported_sites[site].table_finder
|
parms["table_finder"] = self.supported_sites[site].table_finder
|
||||||
parms["HH_path"] = self.supported_sites[site].HH_path
|
parms["HH_path"] = self.supported_sites[site].HH_path
|
||||||
parms["site_name"] = self.supported_sites[site].site_name
|
parms["site_name"] = self.supported_sites[site].site_name
|
||||||
|
parms["enabled"] = self.supported_sites[site].enabled
|
||||||
return parms
|
return parms
|
||||||
|
|
||||||
def set_site_parameters(self, site_name, converter = None, decoder = None,
|
def set_site_parameters(self, site_name, converter = None, decoder = None,
|
||||||
hudbgcolor = None, hudfgcolor = None,
|
hudbgcolor = None, hudfgcolor = None,
|
||||||
hudopacity = None, screen_name = None,
|
hudopacity = None, screen_name = None,
|
||||||
site_path = None, table_finder = None,
|
site_path = None, table_finder = None,
|
||||||
HH_path = None):
|
HH_path = None, enabled = None):
|
||||||
"""Sets the specified site parameters for the specified site."""
|
"""Sets the specified site parameters for the specified site."""
|
||||||
site_node = self.get_site_node(site_name)
|
site_node = self.get_site_node(site_name)
|
||||||
if not db_node == None:
|
if not db_node == None:
|
||||||
|
@ -517,6 +519,7 @@ class Config:
|
||||||
if not site_path == None: site_node.setAttribute("site_path", site_path)
|
if not site_path == None: site_node.setAttribute("site_path", site_path)
|
||||||
if not table_finder == None: site_node.setAttribute("table_finder", table_finder)
|
if not table_finder == None: site_node.setAttribute("table_finder", table_finder)
|
||||||
if not HH_path == None: site_node.setAttribute("HH_path", HH_path)
|
if not HH_path == None: site_node.setAttribute("HH_path", HH_path)
|
||||||
|
if not enabled == None: site_node.setAttribute("enabled", enabled)
|
||||||
|
|
||||||
if self.supported_databases.has_key(db_name):
|
if self.supported_databases.has_key(db_name):
|
||||||
if not converter == None: self.supported_sites[site].converter = converter
|
if not converter == None: self.supported_sites[site].converter = converter
|
||||||
|
@ -528,6 +531,7 @@ class Config:
|
||||||
if not site_path == None: self.supported_sites[site].site_path = site_path
|
if not site_path == None: self.supported_sites[site].site_path = site_path
|
||||||
if not table_finder == None: self.supported_sites[site].table_finder = table_finder
|
if not table_finder == None: self.supported_sites[site].table_finder = table_finder
|
||||||
if not HH_path == None: self.supported_sites[site].HH_path = HH_path
|
if not HH_path == None: self.supported_sites[site].HH_path = HH_path
|
||||||
|
if not enabled == None: self.supported_sites[site].enabled = enabled
|
||||||
return
|
return
|
||||||
|
|
||||||
if __name__== "__main__":
|
if __name__== "__main__":
|
||||||
|
@ -579,4 +583,4 @@ if __name__== "__main__":
|
||||||
print "locs = ", c.get_locations("PokerStars", 8)
|
print "locs = ", c.get_locations("PokerStars", 8)
|
||||||
for site in c.supported_sites.keys():
|
for site in c.supported_sites.keys():
|
||||||
print "site = ", site,
|
print "site = ", site,
|
||||||
print c.get_site_parameters(site)
|
print c.get_site_parameters(site)
|
||||||
|
|
40
pyfpdb/EverleafToFpdb.py
Normal file
40
pyfpdb/EverleafToFpdb.py
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# Copyright 2008, Carl Gherardi
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
########################################################################
|
||||||
|
|
||||||
|
from HandHistoryConverter import HandHistoryConverter
|
||||||
|
|
||||||
|
class Everleaf(HandHistoryConverter):
|
||||||
|
def __init__(self):
|
||||||
|
print "Initialising Everleaf converter class"
|
||||||
|
def readSupportedGames(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def determineGameType(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def readPlayerStacks(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def readBlinds(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def readAction(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
e = Everleaf()
|
|
@ -26,32 +26,56 @@ import os
|
||||||
import time
|
import time
|
||||||
import fpdb_import
|
import fpdb_import
|
||||||
|
|
||||||
|
|
||||||
class GuiAutoImport (threading.Thread):
|
class GuiAutoImport (threading.Thread):
|
||||||
def starsBrowseClicked(self, widget, data):
|
def __init__(self, settings, config):
|
||||||
"""runs when user clicks browse on auto import tab"""
|
"""Constructor for GuiAutoImport"""
|
||||||
#print "start of GuiAutoImport.starsBrowseClicked"
|
self.settings=settings
|
||||||
current_path=self.starsDirPath.get_text()
|
self.config=config
|
||||||
|
|
||||||
|
self.input_settings = {}
|
||||||
|
|
||||||
|
self.importer = fpdb_import.Importer(self,self.settings)
|
||||||
|
self.importer.setCallHud(True)
|
||||||
|
self.importer.setMinPrint(30)
|
||||||
|
self.importer.setQuiet(False)
|
||||||
|
self.importer.setFailOnError(False)
|
||||||
|
self.importer.setHandCount(0)
|
||||||
|
# self.importer.setWatchTime()
|
||||||
|
|
||||||
dia_chooser = gtk.FileChooserDialog(title="Please choose the path that you want to auto import",
|
self.server=settings['db-host']
|
||||||
action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
|
self.user=settings['db-user']
|
||||||
buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK))
|
self.password=settings['db-password']
|
||||||
#dia_chooser.set_current_folder(pathname)
|
self.database=settings['db-databaseName']
|
||||||
dia_chooser.set_filename(current_path)
|
|
||||||
#dia_chooser.set_select_multiple(select_multiple) #not in tv, but want this in bulk import
|
|
||||||
|
|
||||||
response = dia_chooser.run()
|
self.mainVBox=gtk.VBox(False,1)
|
||||||
if response == gtk.RESPONSE_OK:
|
self.mainVBox.show()
|
||||||
#print dia_chooser.get_filename(), 'selected'
|
|
||||||
self.starsDirPath.set_text(dia_chooser.get_filename())
|
|
||||||
elif response == gtk.RESPONSE_CANCEL:
|
|
||||||
print 'Closed, no files selected'
|
|
||||||
dia_chooser.destroy()
|
|
||||||
#end def GuiAutoImport.starsBrowseClicked
|
|
||||||
|
|
||||||
def tiltBrowseClicked(self, widget, data):
|
self.settingsHBox = gtk.HBox(False, 0)
|
||||||
"""runs when user clicks browse on auto import tab"""
|
self.mainVBox.pack_start(self.settingsHBox, False, True, 0)
|
||||||
#print "start of GuiAutoImport.tiltBrowseClicked"
|
self.settingsHBox.show()
|
||||||
current_path=self.tiltDirPath.get_text()
|
|
||||||
|
self.intervalLabel = gtk.Label("Interval (ie. break) between imports in seconds:")
|
||||||
|
self.settingsHBox.pack_start(self.intervalLabel)
|
||||||
|
self.intervalLabel.show()
|
||||||
|
|
||||||
|
self.intervalEntry=gtk.Entry()
|
||||||
|
self.intervalEntry.set_text(str(self.settings['hud-defaultInterval']))
|
||||||
|
self.settingsHBox.pack_start(self.intervalEntry)
|
||||||
|
self.intervalEntry.show()
|
||||||
|
|
||||||
|
self.addSites(self.mainVBox)
|
||||||
|
|
||||||
|
self.startButton=gtk.Button("Start Autoimport")
|
||||||
|
self.startButton.connect("clicked", self.startClicked, "start clicked")
|
||||||
|
self.mainVBox.add(self.startButton)
|
||||||
|
self.startButton.show()
|
||||||
|
|
||||||
|
|
||||||
|
#end of GuiAutoImport.__init__
|
||||||
|
def browseClicked(self, widget, data):
|
||||||
|
"""runs when user clicks one of the browse buttons in the auto import tab"""
|
||||||
|
current_path=data[1].get_text()
|
||||||
|
|
||||||
dia_chooser = gtk.FileChooserDialog(title="Please choose the path that you want to auto import",
|
dia_chooser = gtk.FileChooserDialog(title="Please choose the path that you want to auto import",
|
||||||
action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
|
action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
|
||||||
|
@ -63,11 +87,12 @@ class GuiAutoImport (threading.Thread):
|
||||||
response = dia_chooser.run()
|
response = dia_chooser.run()
|
||||||
if response == gtk.RESPONSE_OK:
|
if response == gtk.RESPONSE_OK:
|
||||||
#print dia_chooser.get_filename(), 'selected'
|
#print dia_chooser.get_filename(), 'selected'
|
||||||
self.tiltDirPath.set_text(dia_chooser.get_filename())
|
data[1].set_text(dia_chooser.get_filename())
|
||||||
|
self.input_settings[data[0]][0] = dia_chooser.get_filename()
|
||||||
elif response == gtk.RESPONSE_CANCEL:
|
elif response == gtk.RESPONSE_CANCEL:
|
||||||
print 'Closed, no files selected'
|
print 'Closed, no files selected'
|
||||||
dia_chooser.destroy()
|
dia_chooser.destroy()
|
||||||
#end def GuiAutoImport.tiltBrowseClicked
|
#end def GuiAutoImport.browseClicked
|
||||||
|
|
||||||
def do_import(self):
|
def do_import(self):
|
||||||
"""Callback for timer to do an import iteration."""
|
"""Callback for timer to do an import iteration."""
|
||||||
|
@ -106,12 +131,11 @@ class GuiAutoImport (threading.Thread):
|
||||||
# command = command + " %s" % (self.database)
|
# command = command + " %s" % (self.database)
|
||||||
# print "command = ", command
|
# print "command = ", command
|
||||||
# self.pipe_to_hud = os.popen(command, 'w')
|
# self.pipe_to_hud = os.popen(command, 'w')
|
||||||
self.starspath=self.starsDirPath.get_text()
|
|
||||||
self.tiltpath=self.tiltDirPath.get_text()
|
|
||||||
|
|
||||||
# Add directory to importer object.
|
# Add directories to importer object.
|
||||||
self.importer.addImportDirectory(self.starspath, True, "PokerStars", "passthrough")
|
for site in self.input_settings:
|
||||||
self.importer.addImportDirectory(self.tiltpath, True, "FullTilt", "passthrough")
|
self.importer.addImportDirectory(self.input_settings[site][0], True, site, self.input_settings[site][1])
|
||||||
|
print "Adding import directories - Site: " + site + " dir: "+ str(self.input_settings[site][0])
|
||||||
self.do_import()
|
self.do_import()
|
||||||
|
|
||||||
interval=int(self.intervalEntry.get_text())
|
interval=int(self.intervalEntry.get_text())
|
||||||
|
@ -122,79 +146,45 @@ class GuiAutoImport (threading.Thread):
|
||||||
"""returns the vbox of this thread"""
|
"""returns the vbox of this thread"""
|
||||||
return self.mainVBox
|
return self.mainVBox
|
||||||
#end def get_vbox
|
#end def get_vbox
|
||||||
|
|
||||||
def __init__(self, settings, config, debug=True):
|
|
||||||
"""Constructor for GuiAutoImport"""
|
|
||||||
self.settings=settings
|
|
||||||
self.config=config
|
|
||||||
self.importer = fpdb_import.Importer(self,self.settings)
|
|
||||||
self.importer.setCallHud(True)
|
|
||||||
self.importer.setMinPrint(30)
|
|
||||||
self.importer.setQuiet(False)
|
|
||||||
self.importer.setFailOnError(False)
|
|
||||||
self.importer.setHandCount(0)
|
|
||||||
# self.importer.setWatchTime()
|
|
||||||
|
|
||||||
self.server=settings['db-host']
|
|
||||||
self.user=settings['db-user']
|
|
||||||
self.password=settings['db-password']
|
|
||||||
self.database=settings['db-databaseName']
|
|
||||||
|
|
||||||
self.mainVBox=gtk.VBox(False,1)
|
|
||||||
self.mainVBox.show()
|
|
||||||
|
|
||||||
self.settingsHBox = gtk.HBox(False, 0)
|
|
||||||
self.mainVBox.pack_start(self.settingsHBox, False, True, 0)
|
|
||||||
self.settingsHBox.show()
|
|
||||||
|
|
||||||
self.intervalLabel = gtk.Label("Interval (ie. break) between imports in seconds:")
|
|
||||||
self.settingsHBox.pack_start(self.intervalLabel)
|
|
||||||
self.intervalLabel.show()
|
|
||||||
|
|
||||||
self.intervalEntry=gtk.Entry()
|
|
||||||
self.intervalEntry.set_text(str(self.settings['hud-defaultInterval']))
|
|
||||||
self.settingsHBox.pack_start(self.intervalEntry)
|
|
||||||
self.intervalEntry.show()
|
|
||||||
|
|
||||||
self.pathHBox = gtk.HBox(False, 0)
|
|
||||||
self.mainVBox.pack_start(self.pathHBox, False, True, 0)
|
|
||||||
self.pathHBox.show()
|
|
||||||
|
|
||||||
self.pathStarsLabel = gtk.Label("Path to PokerStars auto-import:")
|
|
||||||
self.pathHBox.pack_start(self.pathStarsLabel, False, False, 0)
|
|
||||||
self.pathStarsLabel.show()
|
|
||||||
|
|
||||||
self.starsDirPath=gtk.Entry()
|
|
||||||
paths = self.config.get_default_paths("PokerStars")
|
|
||||||
self.starsDirPath.set_text(paths['hud-defaultPath'])
|
|
||||||
self.pathHBox.pack_start(self.starsDirPath, False, True, 0)
|
|
||||||
self.starsDirPath.show()
|
|
||||||
|
|
||||||
self.browseButton=gtk.Button("Browse...")
|
#Create the site line given required info and setup callbacks
|
||||||
self.browseButton.connect("clicked", self.starsBrowseClicked, "Browse clicked")
|
#enabling and disabling sites from this interface not possible
|
||||||
self.pathHBox.pack_start(self.browseButton, False, False, 0)
|
#expects a box to layout the line horizontally
|
||||||
self.browseButton.show()
|
def createSiteLine(self, hbox, site, iconpath, hhpath, filter_name, active = True):
|
||||||
|
label = gtk.Label(site + " auto-import:")
|
||||||
self.pathTiltLabel = gtk.Label("Path to Full Tilt auto-import:")
|
hbox.pack_start(label, False, False, 0)
|
||||||
self.pathHBox.pack_start(self.pathTiltLabel, False, False, 0)
|
label.show()
|
||||||
self.pathTiltLabel.show()
|
|
||||||
|
|
||||||
self.tiltDirPath=gtk.Entry()
|
dirPath=gtk.Entry()
|
||||||
paths = self.config.get_default_paths("Full Tilt")
|
dirPath.set_text(hhpath)
|
||||||
self.tiltDirPath.set_text(paths['hud-defaultPath'])
|
hbox.pack_start(dirPath, False, True, 0)
|
||||||
self.pathHBox.pack_start(self.tiltDirPath, False, True, 0)
|
dirPath.show()
|
||||||
self.tiltDirPath.show()
|
|
||||||
|
|
||||||
self.browseButton=gtk.Button("Browse...")
|
browseButton=gtk.Button("Browse...")
|
||||||
self.browseButton.connect("clicked", self.tiltBrowseClicked, "Browse clicked")
|
browseButton.connect("clicked", self.browseClicked, [site] + [dirPath])
|
||||||
self.pathHBox.pack_start(self.browseButton, False, False, 0)
|
hbox.pack_start(browseButton, False, False, 0)
|
||||||
self.browseButton.show()
|
browseButton.show()
|
||||||
|
|
||||||
|
label = gtk.Label(site + " filter:")
|
||||||
|
hbox.pack_start(label, False, False, 0)
|
||||||
|
label.show()
|
||||||
|
|
||||||
|
filter=gtk.Entry()
|
||||||
|
filter.set_text(filter_name)
|
||||||
|
hbox.pack_start(filter, False, True, 0)
|
||||||
|
filter.show()
|
||||||
|
|
||||||
|
def addSites(self, vbox):
|
||||||
|
for site in self.config.supported_sites.keys():
|
||||||
|
pathHBox = gtk.HBox(False, 0)
|
||||||
|
vbox.pack_start(pathHBox, False, True, 0)
|
||||||
|
pathHBox.show()
|
||||||
|
|
||||||
|
paths = self.config.get_default_paths(site)
|
||||||
|
params = self.config.get_site_parameters(site)
|
||||||
|
self.createSiteLine(pathHBox, site, False, paths['hud-defaultPath'], params['converter'], params['enabled'])
|
||||||
|
self.input_settings[site] = [paths['hud-defaultPath']] + [params['converter']]
|
||||||
|
|
||||||
self.startButton=gtk.Button("Start Autoimport")
|
|
||||||
self.startButton.connect("clicked", self.startClicked, "start clicked")
|
|
||||||
self.mainVBox.add(self.startButton)
|
|
||||||
self.startButton.show()
|
|
||||||
#end of GuiAutoImport.__init__
|
|
||||||
if __name__== "__main__":
|
if __name__== "__main__":
|
||||||
def destroy(*args): # call back for terminating the main eventloop
|
def destroy(*args): # call back for terminating the main eventloop
|
||||||
gtk.main_quit()
|
gtk.main_quit()
|
||||||
|
|
|
@ -64,19 +64,22 @@ class GuiGraphViewer (threading.Thread):
|
||||||
#Set graph properties
|
#Set graph properties
|
||||||
self.ax = self.fig.add_subplot(111)
|
self.ax = self.fig.add_subplot(111)
|
||||||
|
|
||||||
#
|
#Get graph data from DB
|
||||||
|
line = self.getRingProfitGraph(name, site)
|
||||||
|
|
||||||
self.ax.set_title("Profit graph for ring games")
|
self.ax.set_title("Profit graph for ring games")
|
||||||
|
|
||||||
#Set axis labels and grid overlay properites
|
#Set axis labels and grid overlay properites
|
||||||
self.ax.set_xlabel("Hands", fontsize = 12)
|
self.ax.set_xlabel("Hands", fontsize = 12)
|
||||||
self.ax.set_ylabel("$", fontsize = 12)
|
self.ax.set_ylabel("$", fontsize = 12)
|
||||||
self.ax.grid(color='g', linestyle=':', linewidth=0.2)
|
self.ax.grid(color='g', linestyle=':', linewidth=0.2)
|
||||||
text = "All Hands, " + sitename + str(name)
|
text = "All Hands, " + sitename + str(name) + "\nProfit: $" + str(line[-1]) + "\nTotal Hands: " + str(len(line))
|
||||||
|
|
||||||
self.ax.annotate (text, (61,25), xytext =(0.1, 0.9) , textcoords ="axes fraction" ,)
|
self.ax.annotate(text, xy=(10, -10),
|
||||||
|
xycoords='axes points',
|
||||||
|
horizontalalignment='left', verticalalignment='top',
|
||||||
|
fontsize=10)
|
||||||
|
|
||||||
#Get graph data from DB
|
|
||||||
line = self.getRingProfitGraph(name, site)
|
|
||||||
|
|
||||||
#Draw plot
|
#Draw plot
|
||||||
self.ax.plot(line,)
|
self.ax.plot(line,)
|
||||||
|
|
|
@ -84,7 +84,7 @@
|
||||||
<location seat="9" x="70" y="53"> </location>
|
<location seat="9" x="70" y="53"> </location>
|
||||||
</layout>
|
</layout>
|
||||||
</site>
|
</site>
|
||||||
<site enabled="False" site_name="Everleaf" table_finder="Poker.exe" screen_name="DO NOT NEED THIS YET" site_path="" HH_path="" decoder="Unknown" converter="EverleafToFpdb" supported_games="holdem,razz,omahahi,omahahilo,studhi" fgcolor="#48D1CC" bgcolor="#000000">
|
<site enabled="False" site_name="Everleaf" table_finder="Poker.exe" screen_name="DO NOT NEED THIS YET" site_path="" HH_path="" decoder="Unknown" converter="EverleafToFpdb" supported_games="holdem,razz,omahahi,omahahilo,studhi" fgcolor="#48D1CC" bgcolor="#000000" opacity="0.75">
|
||||||
<layout fav_seat="0" height="546" max="6" width="792">
|
<layout fav_seat="0" height="546" max="6" width="792">
|
||||||
<location seat="1" x="581" y="109"> </location>
|
<location seat="1" x="581" y="109"> </location>
|
||||||
<location seat="2" x="605" y="287"> </location>
|
<location seat="2" x="605" y="287"> </location>
|
||||||
|
|
35
pyfpdb/HandHistoryConverter.py
Normal file
35
pyfpdb/HandHistoryConverter.py
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
#Copyright 2008 Carl Gherardi
|
||||||
|
#This program is free software: you can redistribute it and/or modify
|
||||||
|
#it under the terms of the GNU Affero General Public License as published by
|
||||||
|
#the Free Software Foundation, version 3 of the License.
|
||||||
|
#
|
||||||
|
#This program is distributed in the hope that it will be useful,
|
||||||
|
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
#GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
#You should have received a copy of the GNU Affero General Public License
|
||||||
|
#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 docs folder of the package.
|
||||||
|
|
||||||
|
class HandHistoryConverter:
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
# Functions to be implemented in the inheriting class
|
||||||
|
def readSupportedGames(self): abstract
|
||||||
|
def determineGameType(self): abstract
|
||||||
|
def readPlayerStacks(self): abstract
|
||||||
|
def readBlinds(self): abstract
|
||||||
|
def readAction(self): abstract
|
||||||
|
|
||||||
|
# Functions not necessary to implement in sub class
|
||||||
|
def readFile(self, filename):
|
||||||
|
"""Read file"""
|
||||||
|
|
||||||
|
def writeStars(self):
|
||||||
|
"""Write out parsed data"""
|
||||||
|
|
||||||
|
|
|
@ -68,10 +68,12 @@ class Hud:
|
||||||
self.main_window.set_title(table.name + " FPDBHUD")
|
self.main_window.set_title(table.name + " FPDBHUD")
|
||||||
self.main_window.connect("destroy", self.kill_hud)
|
self.main_window.connect("destroy", self.kill_hud)
|
||||||
self.main_window.set_decorated(False)
|
self.main_window.set_decorated(False)
|
||||||
|
self.main_window.set_opacity(self.colors["hudopacity"])
|
||||||
#self.main_window.set_transient_for(parent.get_toplevel())
|
#self.main_window.set_transient_for(parent.get_toplevel())
|
||||||
|
|
||||||
self.ebox = gtk.EventBox()
|
self.ebox = gtk.EventBox()
|
||||||
self.label = gtk.Label("Right click to close HUD for %s\nor Save Stat Positions." % (table.name))
|
# self.label = gtk.Label("Right click to close HUD for %s\nor Save Stat Positions." % (table.name))
|
||||||
|
self.label = gtk.Label("FPDB Menu (Right Click)\nLeft-drag to move")
|
||||||
|
|
||||||
self.label.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.colors['hudbgcolor']))
|
self.label.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.colors['hudbgcolor']))
|
||||||
self.label.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.colors['hudfgcolor']))
|
self.label.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.colors['hudfgcolor']))
|
||||||
|
@ -111,18 +113,21 @@ class Hud:
|
||||||
self.main_window.set_destroy_with_parent(True)
|
self.main_window.set_destroy_with_parent(True)
|
||||||
|
|
||||||
def on_button_press(self, widget, event):
|
def on_button_press(self, widget, event):
|
||||||
|
if event.button == 1:
|
||||||
|
self.main_window.begin_move_drag(event.button, int(event.x_root), int(event.y_root), event.time)
|
||||||
|
return True
|
||||||
if event.button == 3:
|
if event.button == 3:
|
||||||
widget.popup(None, None, None, event.button, event.time)
|
widget.popup(None, None, None, event.button, event.time)
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def kill_hud(self, args):
|
def kill_hud(self, *args):
|
||||||
for k in self.stat_windows.keys():
|
for k in self.stat_windows.keys():
|
||||||
self.stat_windows[k].window.destroy()
|
self.stat_windows[k].window.destroy()
|
||||||
self.main_window.destroy()
|
self.main_window.destroy()
|
||||||
self.deleted = True
|
self.deleted = True
|
||||||
|
|
||||||
def reposition_windows(self, args):
|
def reposition_windows(self, *args):
|
||||||
for w in self.stat_windows:
|
for w in self.stat_windows:
|
||||||
self.stat_windows[w].window.move(self.stat_windows[w].x,
|
self.stat_windows[w].window.move(self.stat_windows[w].x,
|
||||||
self.stat_windows[w].y)
|
self.stat_windows[w].y)
|
||||||
|
@ -259,7 +264,8 @@ class Stat_Window:
|
||||||
# This handles all callbacks from button presses on the event boxes in
|
# This handles all callbacks from button presses on the event boxes in
|
||||||
# the stat windows. There is a bit of an ugly kludge to separate single-
|
# the stat windows. There is a bit of an ugly kludge to separate single-
|
||||||
# and double-clicks.
|
# and double-clicks.
|
||||||
if event.button == 1: # left button event
|
|
||||||
|
if event.button == 3: # right button event
|
||||||
if event.type == gtk.gdk.BUTTON_PRESS: # left button single click
|
if event.type == gtk.gdk.BUTTON_PRESS: # left button single click
|
||||||
if self.sb_click > 0: return
|
if self.sb_click > 0: return
|
||||||
self.sb_click = gobject.timeout_add(250, self.single_click, widget)
|
self.sb_click = gobject.timeout_add(250, self.single_click, widget)
|
||||||
|
@ -270,12 +276,14 @@ class Stat_Window:
|
||||||
self.double_click(widget, event, *args)
|
self.double_click(widget, event, *args)
|
||||||
|
|
||||||
if event.button == 2: # middle button event
|
if event.button == 2: # middle button event
|
||||||
pass
|
|
||||||
# print "middle button clicked"
|
# print "middle button clicked"
|
||||||
|
|
||||||
if event.button == 3: # right button event
|
|
||||||
pass
|
pass
|
||||||
# print "right button clicked"
|
|
||||||
|
if event.button == 1: # left button event
|
||||||
|
if event.state & gtk.gdk.SHIFT_MASK:
|
||||||
|
self.window.begin_resize_drag(gtk.gdk.WINDOW_EDGE_SOUTH_EAST, event.button, int(event.x_root), int(event.y_root), event.time)
|
||||||
|
else:
|
||||||
|
self.window.begin_move_drag(event.button, int(event.x_root), int(event.y_root), event.time)
|
||||||
|
|
||||||
def single_click(self, widget):
|
def single_click(self, widget):
|
||||||
# Callback from the timeout in the single-click finding part of the
|
# Callback from the timeout in the single-click finding part of the
|
||||||
|
@ -349,8 +357,9 @@ class Stat_Window:
|
||||||
# font = pango.FontDescription("Sans 8")
|
# font = pango.FontDescription("Sans 8")
|
||||||
self.label[r][c].modify_font(font)
|
self.label[r][c].modify_font(font)
|
||||||
|
|
||||||
if not os.name == 'nt': # seems to be a bug in opacity on windows
|
# if not os.name == 'nt': # seems to be a bug in opacity on windows
|
||||||
self.window.set_opacity(parent.colors['hudopacity'])
|
self.window.set_opacity(parent.colors['hudopacity'])
|
||||||
|
|
||||||
self.window.realize
|
self.window.realize
|
||||||
self.window.move(self.x, self.y)
|
self.window.move(self.x, self.y)
|
||||||
self.window.show_all()
|
self.window.show_all()
|
||||||
|
@ -457,7 +466,7 @@ class Popup_window:
|
||||||
self.lab.set_text(pu_text)
|
self.lab.set_text(pu_text)
|
||||||
self.window.show_all()
|
self.window.show_all()
|
||||||
|
|
||||||
self.window.set_transient_for(stat_window.main_window)
|
self.window.set_transient_for(stat_window.window)
|
||||||
|
|
||||||
# set_keep_above(1) for windows
|
# set_keep_above(1) for windows
|
||||||
if os.name == 'nt': self.topify_window(self.window)
|
if os.name == 'nt': self.topify_window(self.window)
|
||||||
|
|
|
@ -47,6 +47,7 @@ class fpdb_db:
|
||||||
else:
|
else:
|
||||||
raise fpdb_simple.FpdbError("unrecognised database backend:"+backend)
|
raise fpdb_simple.FpdbError("unrecognised database backend:"+backend)
|
||||||
self.cursor=self.db.cursor()
|
self.cursor=self.db.cursor()
|
||||||
|
self.cursor.execute('SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED')
|
||||||
# Set up query dictionary as early in the connection process as we can.
|
# Set up query dictionary as early in the connection process as we can.
|
||||||
self.sql = FpdbSQLQueries.FpdbSQLQueries(self.get_backend_name())
|
self.sql = FpdbSQLQueries.FpdbSQLQueries(self.get_backend_name())
|
||||||
self.wrongDbVersion=False
|
self.wrongDbVersion=False
|
||||||
|
|
|
@ -128,7 +128,7 @@ class Importer:
|
||||||
#Run full import on filelist
|
#Run full import on filelist
|
||||||
def runImport(self):
|
def runImport(self):
|
||||||
for file in self.filelist:
|
for file in self.filelist:
|
||||||
self.import_file_dict(file)
|
self.import_file_dict(file, self.filelist[file][0], self.filelist[file][1])
|
||||||
|
|
||||||
#Run import on updated files, then store latest update time.
|
#Run import on updated files, then store latest update time.
|
||||||
def runUpdated(self):
|
def runUpdated(self):
|
||||||
|
@ -143,17 +143,25 @@ class Importer:
|
||||||
try:
|
try:
|
||||||
lastupdate = self.updated[file]
|
lastupdate = self.updated[file]
|
||||||
if stat_info.st_mtime > lastupdate:
|
if stat_info.st_mtime > lastupdate:
|
||||||
self.import_file_dict(file)
|
self.import_file_dict(file, self.filelist[file][0], self.filelist[file][1])
|
||||||
self.updated[file] = time()
|
self.updated[file] = time()
|
||||||
except:
|
except:
|
||||||
self.updated[file] = time()
|
self.updated[file] = time()
|
||||||
# This codepath only runs first time the file is found, if modified in the last
|
# This codepath only runs first time the file is found, if modified in the last
|
||||||
# minute run an immediate import.
|
# minute run an immediate import.
|
||||||
if (time() - stat_info.st_mtime) < 60:
|
if (time() - stat_info.st_mtime) < 60:
|
||||||
self.import_file_dict(file)
|
self.import_file_dict(file, self.filelist[file][0], self.filelist[file][1])
|
||||||
|
|
||||||
# This is now an internal function that should not be called directly.
|
# This is now an internal function that should not be called directly.
|
||||||
def import_file_dict(self, file):
|
def import_file_dict(self, file, site, filter):
|
||||||
|
if(filter == "passthrough"):
|
||||||
|
self.import_fpdb_file(file, site)
|
||||||
|
else:
|
||||||
|
#Load filter, and run filtered file though main importer
|
||||||
|
self.import_fpdb_file(file, site)
|
||||||
|
|
||||||
|
|
||||||
|
def import_fpdb_file(self, file, site):
|
||||||
starttime = time()
|
starttime = time()
|
||||||
last_read_hand=0
|
last_read_hand=0
|
||||||
loc = 0
|
loc = 0
|
||||||
|
@ -170,7 +178,11 @@ class Importer:
|
||||||
self.pos_in_file[file] = inputFile.tell()
|
self.pos_in_file[file] = inputFile.tell()
|
||||||
inputFile.close()
|
inputFile.close()
|
||||||
|
|
||||||
firstline = self.lines[0]
|
try: # sometimes we seem to be getting an empty self.lines, in which case, we just want to return.
|
||||||
|
firstline = self.lines[0]
|
||||||
|
except:
|
||||||
|
# print "import_fpdb_file", file, site, self.lines, "\n"
|
||||||
|
return
|
||||||
|
|
||||||
if firstline.find("Tournament Summary")!=-1:
|
if firstline.find("Tournament Summary")!=-1:
|
||||||
print "TODO: implement importing tournament summaries"
|
print "TODO: implement importing tournament summaries"
|
||||||
|
|
|
@ -1,271 +1,271 @@
|
||||||
Full Tilt Poker Game #6929537410: Table Green (deep) - $0.50/$1 - Pot Limit Omaha Hi - 17:15:44 ET - 2008/06/22
|
Full Tilt Poker Game #6929537410: Table Green (deep) - $0.50/$1 - Pot Limit Omaha Hi - 17:15:44 ET - 2008/06/22
|
||||||
Seat 1: player16 ($94.90)
|
Seat 1: player16 ($94.90)
|
||||||
Seat 2: player25 ($147)
|
Seat 2: player25 ($147)
|
||||||
Seat 3: player18 ($62.80)
|
Seat 3: player18 ($62.80)
|
||||||
Seat 4: player19 ($136.55)
|
Seat 4: player19 ($136.55)
|
||||||
Seat 5: play-er26 ($56.05)
|
Seat 5: play-er26 ($56.05)
|
||||||
Seat 6: player21 ($252.95)
|
Seat 6: player21 ($252.95)
|
||||||
Seat 7: player22 ($200)
|
Seat 7: player22 ($200)
|
||||||
Seat 8: player23 ($162.50)
|
Seat 8: player23 ($162.50)
|
||||||
Seat 9: player24 ($270.70)
|
Seat 9: player24 ($270.70)
|
||||||
player24 posts the small blind of $0.50
|
player24 posts the small blind of $0.50
|
||||||
player16 posts the big blind of $1
|
player16 posts the big blind of $1
|
||||||
player22 posts $1
|
player22 posts $1
|
||||||
The button is in seat #8
|
The button is in seat #8
|
||||||
*** HOLE CARDS ***
|
*** HOLE CARDS ***
|
||||||
player25 folds
|
player25 folds
|
||||||
player25 stands up
|
player25 stands up
|
||||||
player18 folds
|
player18 folds
|
||||||
player19 folds
|
player19 folds
|
||||||
play-er26 folds
|
play-er26 folds
|
||||||
player21 folds
|
player21 folds
|
||||||
player22 checks
|
player22 checks
|
||||||
player23 calls $1
|
player23 calls $1
|
||||||
player17 adds $100
|
player17 adds $100
|
||||||
player24 calls $0.50
|
player24 calls $0.50
|
||||||
player16 checks
|
player16 checks
|
||||||
*** FLOP *** [4s Kc 8s]
|
*** FLOP *** [4s Kc 8s]
|
||||||
player24 has 15 seconds left to act
|
player24 has 15 seconds left to act
|
||||||
player24 checks
|
player24 checks
|
||||||
player16 checks
|
player16 checks
|
||||||
player22 checks
|
player22 checks
|
||||||
player23 checks
|
player23 checks
|
||||||
*** TURN *** [4s Kc 8s] [6s]
|
*** TURN *** [4s Kc 8s] [6s]
|
||||||
player24 checks
|
player24 checks
|
||||||
player16 checks
|
player16 checks
|
||||||
player22 checks
|
player22 checks
|
||||||
player23 bets $4
|
player23 bets $4
|
||||||
player24 calls $4
|
player24 calls $4
|
||||||
player16 folds
|
player16 folds
|
||||||
player22 folds
|
player22 folds
|
||||||
*** RIVER *** [4s Kc 8s 6s] [Qc]
|
*** RIVER *** [4s Kc 8s 6s] [Qc]
|
||||||
player24 checks
|
player24 checks
|
||||||
player23 checks
|
player23 checks
|
||||||
*** SHOW DOWN ***
|
*** SHOW DOWN ***
|
||||||
player23 shows [Td 5s 3d Js] a flush, Jack high
|
player23 shows [Td 5s 3d Js] a flush, Jack high
|
||||||
player24 mucks
|
player24 mucks
|
||||||
player23 wins the pot ($11.40) with a flush, Jack high
|
player23 wins the pot ($11.40) with a flush, Jack high
|
||||||
*** SUMMARY ***
|
*** SUMMARY ***
|
||||||
Total pot $12 | Rake $0.60
|
Total pot $12 | Rake $0.60
|
||||||
Board: [4s Kc 8s 6s Qc]
|
Board: [4s Kc 8s 6s Qc]
|
||||||
Seat 1: player16 (big blind) folded on the Turn
|
Seat 1: player16 (big blind) folded on the Turn
|
||||||
Seat 2: player25 didn't bet (folded)
|
Seat 2: player25 didn't bet (folded)
|
||||||
Seat 3: player18 didn't bet (folded)
|
Seat 3: player18 didn't bet (folded)
|
||||||
Seat 4: player19 didn't bet (folded)
|
Seat 4: player19 didn't bet (folded)
|
||||||
Seat 5: play-er26 didn't bet (folded)
|
Seat 5: play-er26 didn't bet (folded)
|
||||||
Seat 6: player21 didn't bet (folded)
|
Seat 6: player21 didn't bet (folded)
|
||||||
Seat 7: player22 folded on the Turn
|
Seat 7: player22 folded on the Turn
|
||||||
Seat 8: player23 (button) collected ($11.40)
|
Seat 8: player23 (button) collected ($11.40)
|
||||||
Seat 9: player24 (small blind) mucked
|
Seat 9: player24 (small blind) mucked
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Full Tilt Poker Game #6929553738: Table Green (deep) - $0.50/$1 - Pot Limit Omaha Hi - 17:17:06 ET - 2008/06/22
|
Full Tilt Poker Game #6929553738: Table Green (deep) - $0.50/$1 - Pot Limit Omaha Hi - 17:17:06 ET - 2008/06/22
|
||||||
Seat 1: player16 ($93.90)
|
Seat 1: player16 ($93.90)
|
||||||
Seat 2: player17 ($100)
|
Seat 2: player17 ($100)
|
||||||
Seat 3: player18 ($62.80)
|
Seat 3: player18 ($62.80)
|
||||||
Seat 4: player19 ($136.55)
|
Seat 4: player19 ($136.55)
|
||||||
Seat 5: play-er26 ($56.05)
|
Seat 5: play-er26 ($56.05)
|
||||||
Seat 6: player21 ($252.95)
|
Seat 6: player21 ($252.95)
|
||||||
Seat 7: player22 ($199)
|
Seat 7: player22 ($199)
|
||||||
Seat 8: player23 ($168.90)
|
Seat 8: player23 ($168.90)
|
||||||
Seat 9: player24 ($265.70)
|
Seat 9: player24 ($265.70)
|
||||||
player16 posts the small blind of $0.50
|
player16 posts the small blind of $0.50
|
||||||
player17 posts the big blind of $1
|
player17 posts the big blind of $1
|
||||||
The button is in seat #9
|
The button is in seat #9
|
||||||
*** HOLE CARDS ***
|
*** HOLE CARDS ***
|
||||||
player18 folds
|
player18 folds
|
||||||
play-er26 stands up
|
play-er26 stands up
|
||||||
player19 raises to $2
|
player19 raises to $2
|
||||||
play-er26 folds
|
play-er26 folds
|
||||||
player21 calls $2
|
player21 calls $2
|
||||||
player22 has 15 seconds left to act
|
player22 has 15 seconds left to act
|
||||||
player22 folds
|
player22 folds
|
||||||
player23 folds
|
player23 folds
|
||||||
player24 folds
|
player24 folds
|
||||||
player16 calls $1.50
|
player16 calls $1.50
|
||||||
player17 calls $1
|
player17 calls $1
|
||||||
*** FLOP *** [Jc 4c Kc]
|
*** FLOP *** [Jc 4c Kc]
|
||||||
player16 checks
|
player16 checks
|
||||||
player17 checks
|
player17 checks
|
||||||
player19 checks
|
player19 checks
|
||||||
player21 checks
|
player21 checks
|
||||||
*** TURN *** [Jc 4c Kc] [7h]
|
*** TURN *** [Jc 4c Kc] [7h]
|
||||||
player16 checks
|
player16 checks
|
||||||
player17 checks
|
player17 checks
|
||||||
player19 bets $3.50
|
player19 bets $3.50
|
||||||
player21 folds
|
player21 folds
|
||||||
player16 folds
|
player16 folds
|
||||||
player17 calls $3.50
|
player17 calls $3.50
|
||||||
*** RIVER *** [Jc 4c Kc 7h] [8s]
|
*** RIVER *** [Jc 4c Kc 7h] [8s]
|
||||||
player17 checks
|
player17 checks
|
||||||
player19 has 15 seconds left to act
|
player19 has 15 seconds left to act
|
||||||
player19 bets $10
|
player19 bets $10
|
||||||
player17 calls $10
|
player17 calls $10
|
||||||
*** SHOW DOWN ***
|
*** SHOW DOWN ***
|
||||||
player19 shows [4s Tc As Ac] a flush, Ace high
|
player19 shows [4s Tc As Ac] a flush, Ace high
|
||||||
player17 mucks
|
player17 mucks
|
||||||
player19 wins the pot ($33.25) with a flush, Ace high
|
player19 wins the pot ($33.25) with a flush, Ace high
|
||||||
*** SUMMARY ***
|
*** SUMMARY ***
|
||||||
Total pot $35 | Rake $1.75
|
Total pot $35 | Rake $1.75
|
||||||
Board: [Jc 4c Kc 7h 8s]
|
Board: [Jc 4c Kc 7h 8s]
|
||||||
Seat 1: player16 (small blind) folded on the Turn
|
Seat 1: player16 (small blind) folded on the Turn
|
||||||
Seat 2: player17 (big blind) mucked
|
Seat 2: player17 (big blind) mucked
|
||||||
Seat 3: player18 didn't bet (folded)
|
Seat 3: player18 didn't bet (folded)
|
||||||
Seat 4: player19 collected ($33.25)
|
Seat 4: player19 collected ($33.25)
|
||||||
Seat 5: play-er26 didn't bet (folded)
|
Seat 5: play-er26 didn't bet (folded)
|
||||||
Seat 6: player21 folded on the Turn
|
Seat 6: player21 folded on the Turn
|
||||||
Seat 7: player22 didn't bet (folded)
|
Seat 7: player22 didn't bet (folded)
|
||||||
Seat 8: player23 didn't bet (folded)
|
Seat 8: player23 didn't bet (folded)
|
||||||
Seat 9: player24 (button) didn't bet (folded)
|
Seat 9: player24 (button) didn't bet (folded)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Full Tilt Poker Game #6929572212: Table Green (deep) - $0.50/$1 - Pot Limit Omaha Hi - 17:18:40 ET - 2008/06/22
|
Full Tilt Poker Game #6929572212: Table Green (deep) - $0.50/$1 - Pot Limit Omaha Hi - 17:18:40 ET - 2008/06/22
|
||||||
Seat 1: player16 ($91.90)
|
Seat 1: player16 ($91.90)
|
||||||
Seat 2: player17 ($84.50)
|
Seat 2: player17 ($84.50)
|
||||||
Seat 3: player18 ($62.80)
|
Seat 3: player18 ($62.80)
|
||||||
Seat 4: player19 ($154.30)
|
Seat 4: player19 ($154.30)
|
||||||
Seat 6: player21 ($250.95)
|
Seat 6: player21 ($250.95)
|
||||||
Seat 7: player22 ($199)
|
Seat 7: player22 ($199)
|
||||||
Seat 8: player23 ($168.90)
|
Seat 8: player23 ($168.90)
|
||||||
Seat 9: player24 ($265.70)
|
Seat 9: player24 ($265.70)
|
||||||
player17 posts the small blind of $0.50
|
player17 posts the small blind of $0.50
|
||||||
player18 posts the big blind of $1
|
player18 posts the big blind of $1
|
||||||
The button is in seat #1
|
The button is in seat #1
|
||||||
*** HOLE CARDS ***
|
*** HOLE CARDS ***
|
||||||
player19 folds
|
player19 folds
|
||||||
player21 folds
|
player21 folds
|
||||||
player20 adds $50
|
player20 adds $50
|
||||||
player22 folds
|
player22 folds
|
||||||
player23 folds
|
player23 folds
|
||||||
player24 folds
|
player24 folds
|
||||||
player20 is sitting out
|
player20 is sitting out
|
||||||
player16 raises to $2
|
player16 raises to $2
|
||||||
player17 folds
|
player17 folds
|
||||||
player18 folds
|
player18 folds
|
||||||
Uncalled bet of $1 returned to player16
|
Uncalled bet of $1 returned to player16
|
||||||
player16 mucks
|
player16 mucks
|
||||||
player16 wins the pot ($2.50)
|
player16 wins the pot ($2.50)
|
||||||
*** SUMMARY ***
|
*** SUMMARY ***
|
||||||
Total pot $2.50 | Rake $0
|
Total pot $2.50 | Rake $0
|
||||||
Seat 1: player16 (button) collected ($2.50), mucked
|
Seat 1: player16 (button) collected ($2.50), mucked
|
||||||
Seat 2: player17 (small blind) folded before the Flop
|
Seat 2: player17 (small blind) folded before the Flop
|
||||||
Seat 3: player18 (big blind) folded before the Flop
|
Seat 3: player18 (big blind) folded before the Flop
|
||||||
Seat 4: player19 didn't bet (folded)
|
Seat 4: player19 didn't bet (folded)
|
||||||
Seat 6: player21 didn't bet (folded)
|
Seat 6: player21 didn't bet (folded)
|
||||||
Seat 7: player22 didn't bet (folded)
|
Seat 7: player22 didn't bet (folded)
|
||||||
Seat 8: player23 didn't bet (folded)
|
Seat 8: player23 didn't bet (folded)
|
||||||
Seat 9: player24 didn't bet (folded)
|
Seat 9: player24 didn't bet (folded)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Full Tilt Poker Game #6929576743: Table Green (deep) - $0.50/$1 - Pot Limit Omaha Hi - 17:19:03 ET - 2008/06/22
|
Full Tilt Poker Game #6929576743: Table Green (deep) - $0.50/$1 - Pot Limit Omaha Hi - 17:19:03 ET - 2008/06/22
|
||||||
Seat 1: player16 ($93.40)
|
Seat 1: player16 ($93.40)
|
||||||
Seat 2: player17 ($84)
|
Seat 2: player17 ($84)
|
||||||
Seat 3: player18 ($61.80)
|
Seat 3: player18 ($61.80)
|
||||||
Seat 4: player19 ($154.30)
|
Seat 4: player19 ($154.30)
|
||||||
Seat 5: player20 ($50), is sitting out
|
Seat 5: player20 ($50), is sitting out
|
||||||
Seat 6: player21 ($250.95)
|
Seat 6: player21 ($250.95)
|
||||||
Seat 7: player22 ($199)
|
Seat 7: player22 ($199)
|
||||||
Seat 8: player23 ($168.90)
|
Seat 8: player23 ($168.90)
|
||||||
Seat 9: player24 ($265.70)
|
Seat 9: player24 ($265.70)
|
||||||
player18 posts the small blind of $0.50
|
player18 posts the small blind of $0.50
|
||||||
player19 posts the big blind of $1
|
player19 posts the big blind of $1
|
||||||
The button is in seat #2
|
The button is in seat #2
|
||||||
*** HOLE CARDS ***
|
*** HOLE CARDS ***
|
||||||
player20 has returned
|
player20 has returned
|
||||||
player21 calls $1
|
player21 calls $1
|
||||||
player22 folds
|
player22 folds
|
||||||
player23 calls $1
|
player23 calls $1
|
||||||
player24 calls $1
|
player24 calls $1
|
||||||
player16 raises to $4
|
player16 raises to $4
|
||||||
player17 folds
|
player17 folds
|
||||||
player18 folds
|
player18 folds
|
||||||
player19 folds
|
player19 folds
|
||||||
player21 folds
|
player21 folds
|
||||||
player23 folds
|
player23 folds
|
||||||
player17 is sitting out
|
player17 is sitting out
|
||||||
player24 has 15 seconds left to act
|
player24 has 15 seconds left to act
|
||||||
player24 calls $3
|
player24 calls $3
|
||||||
*** FLOP *** [Tc 9s 7h]
|
*** FLOP *** [Tc 9s 7h]
|
||||||
player24 checks
|
player24 checks
|
||||||
player16 has 15 seconds left to act
|
player16 has 15 seconds left to act
|
||||||
player16 bets $8
|
player16 bets $8
|
||||||
player24 folds
|
player24 folds
|
||||||
Uncalled bet of $8 returned to player16
|
Uncalled bet of $8 returned to player16
|
||||||
player16 mucks
|
player16 mucks
|
||||||
player16 wins the pot ($10.95)
|
player16 wins the pot ($10.95)
|
||||||
*** SUMMARY ***
|
*** SUMMARY ***
|
||||||
Total pot $11.50 | Rake $0.55
|
Total pot $11.50 | Rake $0.55
|
||||||
Board: [Tc 9s 7h]
|
Board: [Tc 9s 7h]
|
||||||
Seat 1: player16 collected ($10.95), mucked
|
Seat 1: player16 collected ($10.95), mucked
|
||||||
Seat 2: player17 (button) didn't bet (folded)
|
Seat 2: player17 (button) didn't bet (folded)
|
||||||
Seat 3: player18 (small blind) folded before the Flop
|
Seat 3: player18 (small blind) folded before the Flop
|
||||||
Seat 4: player19 (big blind) folded before the Flop
|
Seat 4: player19 (big blind) folded before the Flop
|
||||||
Seat 5: player20 is sitting out
|
Seat 5: player20 is sitting out
|
||||||
Seat 6: player21 folded before the Flop
|
Seat 6: player21 folded before the Flop
|
||||||
Seat 7: player22 didn't bet (folded)
|
Seat 7: player22 didn't bet (folded)
|
||||||
Seat 8: player23 folded before the Flop
|
Seat 8: player23 folded before the Flop
|
||||||
Seat 9: player24 folded on the Flop
|
Seat 9: player24 folded on the Flop
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Full Tilt Poker Game #6929587483: Table Green (deep) - $0.50/$1 - Pot Limit Omaha Hi - 17:19:57 ET - 2008/06/22
|
Full Tilt Poker Game #6929587483: Table Green (deep) - $0.50/$1 - Pot Limit Omaha Hi - 17:19:57 ET - 2008/06/22
|
||||||
Seat 1: player16 ($100.35)
|
Seat 1: player16 ($100.35)
|
||||||
Seat 2: player17 ($84), is sitting out
|
Seat 2: player17 ($84), is sitting out
|
||||||
Seat 3: player18 ($61.30)
|
Seat 3: player18 ($61.30)
|
||||||
Seat 4: player19 ($153.30)
|
Seat 4: player19 ($153.30)
|
||||||
Seat 5: player20 ($50)
|
Seat 5: player20 ($50)
|
||||||
Seat 6: player21 ($249.95)
|
Seat 6: player21 ($249.95)
|
||||||
Seat 7: player22 ($199)
|
Seat 7: player22 ($199)
|
||||||
Seat 8: player23 ($167.90)
|
Seat 8: player23 ($167.90)
|
||||||
Seat 9: player24 ($261.70)
|
Seat 9: player24 ($261.70)
|
||||||
player19 posts the small blind of $0.50
|
player19 posts the small blind of $0.50
|
||||||
player20 posts the big blind of $1
|
player20 posts the big blind of $1
|
||||||
The button is in seat #3
|
The button is in seat #3
|
||||||
*** HOLE CARDS ***
|
*** HOLE CARDS ***
|
||||||
player21 folds
|
player21 folds
|
||||||
player22 folds
|
player22 folds
|
||||||
player21 stands up
|
player21 stands up
|
||||||
player23 calls $1
|
player23 calls $1
|
||||||
player24 calls $1
|
player24 calls $1
|
||||||
player16 folds
|
player16 folds
|
||||||
player18 folds
|
player18 folds
|
||||||
player19 calls $0.50
|
player19 calls $0.50
|
||||||
player20 checks
|
player20 checks
|
||||||
*** FLOP *** [Jd Td 2c]
|
*** FLOP *** [Jd Td 2c]
|
||||||
roguern adds $100
|
roguern adds $100
|
||||||
player19 bets $3
|
player19 bets $3
|
||||||
player20 folds
|
player20 folds
|
||||||
player23 folds
|
player23 folds
|
||||||
player24 has 15 seconds left to act
|
player24 has 15 seconds left to act
|
||||||
player24 raises to $11
|
player24 raises to $11
|
||||||
player19 raises to $37
|
player19 raises to $37
|
||||||
player24 raises to $115
|
player24 raises to $115
|
||||||
player19 raises to $152.30, and is all in
|
player19 raises to $152.30, and is all in
|
||||||
player24 calls $37.30
|
player24 calls $37.30
|
||||||
player19 shows [Jc Jh 7s 5h]
|
player19 shows [Jc Jh 7s 5h]
|
||||||
player24 shows [Kh Ad 6h Qd]
|
player24 shows [Kh Ad 6h Qd]
|
||||||
*** TURN *** [Jd Td 2c] [As]
|
*** TURN *** [Jd Td 2c] [As]
|
||||||
*** RIVER *** [Jd Td 2c As] [8s]
|
*** RIVER *** [Jd Td 2c As] [8s]
|
||||||
player19 shows three of a kind, Jacks
|
player19 shows three of a kind, Jacks
|
||||||
player24 shows a straight, Ace high
|
player24 shows a straight, Ace high
|
||||||
player24 wins the pot ($305.60) with a straight, Ace high
|
player24 wins the pot ($305.60) with a straight, Ace high
|
||||||
player19 is sitting out
|
player19 is sitting out
|
||||||
*** SUMMARY ***
|
*** SUMMARY ***
|
||||||
Total pot $308.60 | Rake $3
|
Total pot $308.60 | Rake $3
|
||||||
Board: [Jd Td 2c As 8s]
|
Board: [Jd Td 2c As 8s]
|
||||||
Seat 1: player16 didn't bet (folded)
|
Seat 1: player16 didn't bet (folded)
|
||||||
Seat 2: player17 is sitting out
|
Seat 2: player17 is sitting out
|
||||||
Seat 3: player18 (button) didn't bet (folded)
|
Seat 3: player18 (button) didn't bet (folded)
|
||||||
Seat 4: player19 (small blind) showed [Jc Jh 7s 5h] and lost with three of a kind, Jacks
|
Seat 4: player19 (small blind) showed [Jc Jh 7s 5h] and lost with three of a kind, Jacks
|
||||||
Seat 5: player20 (big blind) folded on the Flop
|
Seat 5: player20 (big blind) folded on the Flop
|
||||||
Seat 6: player21 didn't bet (folded)
|
Seat 6: player21 didn't bet (folded)
|
||||||
Seat 7: player22 didn't bet (folded)
|
Seat 7: player22 didn't bet (folded)
|
||||||
Seat 8: player23 folded on the Flop
|
Seat 8: player23 folded on the Flop
|
||||||
Seat 9: player24 showed [Kh Ad 6h Qd] and won ($305.60) with a straight, Ace high
|
Seat 9: player24 showed [Kh Ad 6h Qd] and won ($305.60) with a straight, Ace high
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,61 +1,61 @@
|
||||||
Full Tilt Poker Game #6367428246: Table Mountain Mesa - $15/$30 Ante $3 - Limit Stud H/L - 23:47:38 ET - 2008/05/10
|
Full Tilt Poker Game #6367428246: Table Mountain Mesa - $15/$30 Ante $3 - Limit Stud H/L - 23:47:38 ET - 2008/05/10
|
||||||
Seat 1: Player_8 ($446), is sitting out
|
Seat 1: Player_8 ($446), is sitting out
|
||||||
Seat 2: Play er9 ($303.50)
|
Seat 2: Play er9 ($303.50)
|
||||||
Seat 3: P layer10 ($613), is sitting out
|
Seat 3: P layer10 ($613), is sitting out
|
||||||
Seat 4: Player_11 ($164)
|
Seat 4: Player_11 ($164)
|
||||||
Seat 5: Player1 2 ($543.50), is sitting out
|
Seat 5: Player1 2 ($543.50), is sitting out
|
||||||
Seat 6: Player13 ($912.50)
|
Seat 6: Player13 ($912.50)
|
||||||
Seat 7: Player14 ($430), is sitting out
|
Seat 7: Player14 ($430), is sitting out
|
||||||
Seat 8: Player15 ($531.50)
|
Seat 8: Player15 ($531.50)
|
||||||
Player15 antes $3
|
Player15 antes $3
|
||||||
Player_11 antes $3
|
Player_11 antes $3
|
||||||
Player13 antes $3
|
Player13 antes $3
|
||||||
Play er9 antes $3
|
Play er9 antes $3
|
||||||
*** 3RD STREET ***
|
*** 3RD STREET ***
|
||||||
Dealt to Play er9 [2s]
|
Dealt to Play er9 [2s]
|
||||||
Dealt to Player_11 [3c]
|
Dealt to Player_11 [3c]
|
||||||
Dealt to Player13 [8c]
|
Dealt to Player13 [8c]
|
||||||
Dealt to Player15 [Jc]
|
Dealt to Player15 [Jc]
|
||||||
Play er9 is low with [2s]
|
Play er9 is low with [2s]
|
||||||
Play er9 brings in for $5
|
Play er9 brings in for $5
|
||||||
Player_11 folds
|
Player_11 folds
|
||||||
Player13 completes it to $15
|
Player13 completes it to $15
|
||||||
Player15 folds
|
Player15 folds
|
||||||
Play er9 calls $10
|
Play er9 calls $10
|
||||||
*** 4TH STREET ***
|
*** 4TH STREET ***
|
||||||
Dealt to Play er9 [2s] [6c]
|
Dealt to Play er9 [2s] [6c]
|
||||||
Dealt to Player13 [8c] [5h]
|
Dealt to Player13 [8c] [5h]
|
||||||
Player13 bets $15
|
Player13 bets $15
|
||||||
Play er9 calls $15
|
Play er9 calls $15
|
||||||
*** 5TH STREET ***
|
*** 5TH STREET ***
|
||||||
Dealt to Play er9 [2s 6c] [Ac]
|
Dealt to Play er9 [2s 6c] [Ac]
|
||||||
Dealt to Player13 [8c 5h] [Ah]
|
Dealt to Player13 [8c 5h] [Ah]
|
||||||
Player13 bets $30
|
Player13 bets $30
|
||||||
Play er9 calls $30
|
Play er9 calls $30
|
||||||
*** 6TH STREET ***
|
*** 6TH STREET ***
|
||||||
Dealt to Play er9 [2s 6c Ac] [2c]
|
Dealt to Play er9 [2s 6c Ac] [2c]
|
||||||
Dealt to Player13 [8c 5h Ah] [Jd]
|
Dealt to Player13 [8c 5h Ah] [Jd]
|
||||||
Play er9 bets $30
|
Play er9 bets $30
|
||||||
Player13 calls $30
|
Player13 calls $30
|
||||||
*** 7TH STREET ***
|
*** 7TH STREET ***
|
||||||
Play er9 bets $30
|
Play er9 bets $30
|
||||||
Player13 calls $30
|
Player13 calls $30
|
||||||
*** SHOW DOWN ***
|
*** SHOW DOWN ***
|
||||||
Play er9 shows [5c 4h 2s 6c Ac 2c 2h] three of a kind, Twos, for high and 6,5,4,2,A, for low
|
Play er9 shows [5c 4h 2s 6c Ac 2c 2h] three of a kind, Twos, for high and 6,5,4,2,A, for low
|
||||||
Player13 mucks
|
Player13 mucks
|
||||||
Play er9 wins the high pot ($125) with three of a kind, Twos
|
Play er9 wins the high pot ($125) with three of a kind, Twos
|
||||||
Play er9 wins the low pot ($125) with 6,5,4,2,A
|
Play er9 wins the low pot ($125) with 6,5,4,2,A
|
||||||
*** SUMMARY ***
|
*** SUMMARY ***
|
||||||
Total pot $252 | Rake $2
|
Total pot $252 | Rake $2
|
||||||
Seat 1: Player_8 is sitting out
|
Seat 1: Player_8 is sitting out
|
||||||
Seat 2: Play er9 collected ($250)
|
Seat 2: Play er9 collected ($250)
|
||||||
Seat 3: P layer10 is sitting out
|
Seat 3: P layer10 is sitting out
|
||||||
Seat 4: Player_11 folded on 3rd St.
|
Seat 4: Player_11 folded on 3rd St.
|
||||||
Seat 5: Player1 2 is sitting out
|
Seat 5: Player1 2 is sitting out
|
||||||
Seat 6: Player13 mucked
|
Seat 6: Player13 mucked
|
||||||
Seat 7: Player14 is sitting out
|
Seat 7: Player14 is sitting out
|
||||||
Seat 8: Player15 folded on 3rd St.
|
Seat 8: Player15 folded on 3rd St.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 48 KiB |
Loading…
Reference in New Issue
Block a user