git19 (REIMPORT needed) - updated everything to use new action counting method -> it half works, but fails to store (or print) a substantial proportion of the action_nos

removed bunch of commented prints from fpdb_parse
This commit is contained in:
steffen123 2008-08-08 22:03:43 +01:00
parent bf691fe9e7
commit 0e84dceb1f
16 changed files with 147 additions and 212 deletions

View File

@ -9,14 +9,14 @@ add instructions how to reimport
split python requirements, get deep links for windows DL for everything
GUI license info
change action_no to be total for this street rather than just for one player. change .expected.txt files accordingly.
calculate 3B/4B percentage (depends on above, currently its useless)
update regression testing to take into account everything new
add fpdb version string into db to detect outdated db format.
calculate 3B/4B percentage
add fpdb version string into db to detect outdated db format and importer bugs
update regression testing to take into account everything new, make sure it passes all tests
before beta
===========
optionally show single postflop agg/fold rate
change definition of bet to exclude bring in?
auto-import
implement error file in importer
change to use different colours according to classification.
@ -30,7 +30,7 @@ fix load profile
HUD
config wizard
file permission script, use games group
change stud street storage from 3-7 to 0-4 throughout
change stud street storage from 3-7 to 0-4 throughout (possibly best way is to just shrink the holding array in fpdb_simple.createArrays
make bulk importer display a grand total in the GUI
change save_to_db into one method and probably move into parse_logic
Any comment or print with "todo" in it in the sourcecode except what is marked todo in the menu
@ -47,6 +47,7 @@ verify at least 2 or 3 sng hands
no rush but before 1.0RC
========================
In many places there are unnecessary database accesses or it regenerates information it already had before or just generally does things in obscenely inefficient ways. It's great to have a total of 3 CPUs with a combined 5.6GHz working for you isn't it... ;) In any case, these should be optimised to leave more power for other things, such as dropping to lower power states
move version into seperate file
make option to use "traditional" labels, e.g. WtSD instead of SD/F
HTMLify docs and validate them

View File

@ -840,131 +840,61 @@ far less relevant.</P>
</TABLE>
<P></P>
<P><B>Table hands_actions</B></P>
<p>Did
separate this into an extra table because it makes SELECTing across
different streets so much easier. Also the space saving will be very
large.</P>
<p>Did separate this into an extra table because it makes SELECTing across different streets so much easier. Also the space saving will be very large.</P>
<TABLE BORDER=1 CELLPADDING=2 CELLSPACING=0>
<TR VALIGN=TOP>
<TD><P>Field Name</P></TD>
<TD>
<P>Type</P>
</TD>
<TD>
<P>Comment</P>
</TD>
<TD><P>Type</P></TD>
<TD><P>Comment</P></TD>
</TR>
<TR VALIGN=TOP>
<TD>
<P>id</P>
</TD>
<TD>
<P>bigint</P>
</TD>
<TD>
<P><BR>
</P>
</TD>
<TD><P>id</P></TD>
<TD><P>bigint</P></TD>
<TD><P><BR></P></TD>
</TR>
<TR VALIGN=TOP>
<TD>
<P>hand_player_id</P>
</TD>
<TD>
<P>bigint</P>
</TD>
<TD>
<P>references
hands_players.id</P>
</TD>
<TD><P>hand_player_id</P></TD>
<TD><P>bigint</P></TD>
<TD><P>references hands_players.id</P></TD>
</TR>
<TR VALIGN=TOP>
<TD>
<P>street</P>
</TD>
<TD>
<P>smallint</P>
</TD>
<TD>
<p>street
number, 0-3 (preflop, flop, turn, river) for holdem/omaha or 0-4
for razz/stud</P>
<P>-1 for seen showdown</P>
</TD>
<TD><P>street</P></TD>
<TD><P>smallint</P></TD>
<TD><p>street number, 0-3 (preflop, flop, turn, river) for holdem/omaha or 0-4 for razz/stud</P><P>-1 for seen showdown</P></TD>
</TR>
<TR VALIGN=TOP>
<TD>
<P>action_no</P>
</TD>
<TD>
<P>smallint</P>
</TD>
<TD>
<P>action number, 1-4</P>
</TD>
<TD><P>action_no</P></TD>
<TD><P>smallint</P></TD>
<TD><P>action number, this is counted from zero for each street but across all players (e.g. in a heads up where the SB calls and the BB raises and the SB calls again would have numbers 0 and 1 for blinds, 2 and 4 for call and 3 for bet)<br>
Note that the blinds are counted as an action, so if the SB stays in the hand it'll always be action #0</P></TD>
</TR>
<TR VALIGN=TOP>
<TD>
<P>action</P>
</TD>
<TD>
<P>char(5)</P>
</TD>
<TD>
<p>bet
stands for bring in, complete, bet, double bet, raise and double
raise, since they all - technically - do the same thing. unbet is
used for when an uncalled bet is returned.</P>
<P>Other valid values: blind
call check fold</P>
</TD>
<TD><P>action</P></TD>
<TD><P>char(5)</P></TD>
<TD><P>Bet stands for bring in, complete, bet, double bet, raise and double raise, since they all - technically - do the same thing. Unbet is used for when an uncalled bet is returned.</P>
<P>Other valid values: blind call check fold</P></TD>
</TR>
<TR VALIGN=TOP>
<TD>
<P>amount</P>
</TD>
<TD>
<P>int</P>
</TD>
<TD>
<P>amount put into the middle
for this action</P>
</TD>
<TD><P>amount</P></TD>
<TD><P>int</P></TD>
<TD><P>amount put into the middle for this action</P></TD>
</TR>
<TR VALIGN=TOP>
<TD>
<P>comment</P>
</TD>
<TD>
<P>text</P>
</TD>
<TD>
<P><BR>
</P>
</TD>
<TD><P>comment</P></TD>
<TD><P>text</P></TD>
<TD><P><BR></P></TD>
</TR>
<TR VALIGN=TOP>
<TD>
<P>comment_ts</P>
</TD>
<TD>
<P>datetime (in UTC)</P>
</TD>
<TD>
<P><BR>
</P>
</TD>
<TD><P>comment_ts</P></TD>
<TD><P>datetime (in UTC)</P></TD>
<TD><P><BR></P></TD>
</TR>
</TABLE>
<p><BR>
</P>
<p><BR></P>
<p><B>Tournament Tables</B></P>
<p><BR></P>
<p><B>Table tourneys</B></P>
<TABLE BORDER=1 CELLPADDING=2 CELLSPACING=0>
<TR VALIGN=TOP>
<TD>
<P>Field name</P>

View File

@ -18,4 +18,5 @@
rm regression-test/*.found.txt
rm regression-test/*.pyc
rm pyfpdb/*.pyc
git-add--interactive

View File

@ -343,7 +343,7 @@ blabla""")
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect("delete_event", self.delete_event)
self.window.connect("destroy", self.destroy)
self.window.set_title("Free Poker DB - version: pre-alpha, git18")
self.window.set_title("Free Poker DB - version: pre-alpha, git19")
self.window.set_border_width(1)
self.window.set_size_request(950,400)
self.window.set_resizable(True)

View File

@ -28,7 +28,7 @@ def mainParser(db, cursor, site, category, hand):
lineStreets=[] #char, valid values: (predeal, preflop, flop, turn, river)
cardValues, cardSuits, boardValues, boardSuits=[],[],[],[]
antes, actionTypes, actionAmounts, seatLines, winnings, rakes=[],[],[],[],[],[]
antes, actionTypes, actionAmounts, actionNos, seatLines, winnings, rakes=[], [],[],[],[],[],[]
#part 1: read hand no and check for duplicate
siteHandNo=fpdb_simple.parseSiteHandNo(hand[0])
@ -42,49 +42,36 @@ def mainParser(db, cursor, site, category, hand):
raise fpdb_simple.FpdbError("tourneys are only supported on PS right now")
siteTourneyNo=fpdb_simple.parseTourneyNo(hand[0])
buyin=fpdb_simple.parseBuyin(hand[0])
#print "Buyin:", buyin
fee=fpdb_simple.parseFee(hand[0])
#print "Fee:", fee
entries=-1 #todo: parse this
prizepool=-1 #todo: parse this
tourneyStartTime=handStartTime #todo: read tourney start time
#print "gametypeID:",gametypeID
fpdb_simple.isAlreadyInDB(cursor, gametypeID, siteHandNo)
#part 2: classify lines by type (e.g. cards, action, win, sectionchange) and street
fpdb_simple.classifyLines(hand, category, lineTypes, lineStreets)
#for i in range (len(hand)):
# print "i:",i,"lineTypes[i]:",lineTypes[i],"hand[i]:",hand[i]
#part 3: read basic player info
#3a read player names, startcashes
for i in range (len(hand)): #todo: use maxseats+1 here.
if (lineTypes[i]=="name"):
seatLines.append(hand[i])
#print "seatLines:",seatLines
#print "hand:",hand
names=fpdb_simple.parseNames(seatLines)
#print "names:",names
playerIDs = fpdb_simple.recognisePlayerIDs(cursor, names, siteID)
startCashes=fpdb_simple.parseCashes(seatLines, site)
fpdb_simple.createArrays(category, len(names), cardValues, cardSuits, antes, winnings, rakes, actionTypes, actionAmounts)
fpdb_simple.createArrays(category, len(names), cardValues, cardSuits, antes, winnings, rakes, actionTypes, actionAmounts, actionNos)
#3b remove people who sitout before cards are dealt (e.g. sitout instead of paying blinds)
#PS doesnt have a nameline for sitouts so for PS this can be skipped. havent tried FTP yet
#3c read positions
#3b read positions
if (category=="holdem" or category=="omahahi" or category=="omahahilo"):
positions = fpdb_simple.parsePositions (hand, names)
#part 4: take appropriate action for each line based on linetype
for i in range(len(hand)):
if (lineTypes[i]=="cards"):
#print "hand[i]:",hand[i]
fpdb_simple.parseCardLine (site, category, lineStreets[i], hand[i], names, cardValues, cardSuits, boardValues, boardSuits)
#print "cardValues:",cardValues
elif (lineTypes[i]=="action"):
fpdb_simple.parseActionLine (hand[i], lineStreets[i], names, actionTypes, actionAmounts, site)
fpdb_simple.parseActionLine (site, hand[i], lineStreets[i], names, actionTypes, actionAmounts, actionNos)
elif (lineTypes[i]=="win"):
fpdb_simple.parseWinLine (hand[i], site, names, winnings, isTourney)
elif (lineTypes[i]=="rake"):
@ -99,7 +86,6 @@ def mainParser(db, cursor, site, category, hand):
fpdb_simple.parseAnteLine(hand[i], site, names, antes)
else:
raise fpdb_simple.FpdbError("unrecognised lineType:"+lineTypes[i])
#print "end of part4 cardValues:",cardValues,"cardSuits:",cardSuits
#part 5: final preparations, then call fpdb_save_to_db.saveHoldem with
# the arrays as they are - that file will fill them.
@ -110,7 +96,7 @@ def mainParser(db, cursor, site, category, hand):
fpdb_simple.checkPositions(positions)
cursor.execute("SELECT limit_type FROM gametypes WHERE id=%s",(gametypeID, ))
limit_type=cursor.fetchone()[0] #todo: remove this unnecessary database access
limit_type=cursor.fetchone()[0]
fpdb_simple.convert3B4B(site, category, limit_type, actionTypes, actionAmounts)
totalWinnings=0
@ -119,6 +105,7 @@ def mainParser(db, cursor, site, category, hand):
hudImportData=fpdb_simple.calculateHudImport(playerIDs, category, actionTypes, winnings, totalWinnings)
if isTourney:
raise fpdb_simple.FpdbError ("tourneys are currently broken")
payin_amounts=fpdb_simple.calcPayin(len(names), buyin, fee)
ranks=[]
for i in range (len(names)):
@ -142,8 +129,9 @@ def mainParser(db, cursor, site, category, hand):
if (category=="holdem" or category=="omahahi" or category=="omahahilo"):
result = fpdb_save_to_db.ring_holdem_omaha(cursor, category, siteHandNo, gametypeID,
handStartTime, names, playerIDs, startCashes, positions, cardValues,
cardSuits, boardValues, boardSuits, winnings, rakes, actionTypes, actionAmounts, hudImportData)
cardSuits, boardValues, boardSuits, winnings, rakes, actionTypes, actionAmounts, actionNos, hudImportData)
elif (category=="razz" or category=="studhi" or category=="studhilo"):
raise fpdb_simple.FpdbError ("stud/razz are currently broken")
result = fpdb_save_to_db.ring_stud(cursor, category, siteHandNo, gametypeID,
handStartTime, names, playerIDs, startCashes, antes, cardValues,
cardSuits, winnings, rakes, actionTypes, actionAmounts, hudImportData)

View File

@ -40,7 +40,7 @@ def ring_stud(cursor, category, site_hand_no, gametype_id, hand_start_time,
#stores a holdem/omaha hand into the database
def ring_holdem_omaha(cursor, category, site_hand_no, gametype_id, hand_start_time,
names, player_ids, start_cashes, positions, card_values, card_suits,
board_values, board_suits, winnings, rakes, action_types, action_amounts, hudImportData):
board_values, board_suits, winnings, rakes, action_types, action_amounts, actionNos, hudImportData):
#fill up the two player card arrays
if (category=="holdem"):
fpdb_simple.fillCardArrays(len(names), 2, card_values, card_suits)
@ -60,7 +60,7 @@ def ring_holdem_omaha(cursor, category, site_hand_no, gametype_id, hand_start_ti
fpdb_simple.store_board_cards(cursor, hands_id, board_values, board_suits)
fpdb_simple.storeActions(cursor, hands_players_ids, action_types, action_amounts)
fpdb_simple.storeActions(cursor, hands_players_ids, action_types, action_amounts, actionNos)
return site_hand_no
#end def ring_holdem_omaha

View File

@ -199,7 +199,7 @@ def convertCardValuesBoard(arr):
#end def convertCardValuesBoard
#this creates the 2D/3D arrays. manipulates the passed arrays instead of returning.
def createArrays(category, seats, card_values, card_suits, antes, winnings, rakes, action_types, action_amounts):
def createArrays(category, seats, card_values, card_suits, antes, winnings, rakes, action_types, action_amounts, actionNos):
for i in range(seats):#create second dimension arrays
tmp=[]
card_values.append(tmp)
@ -209,18 +209,25 @@ def createArrays(category, seats, card_values, card_suits, antes, winnings, rake
winnings.append(0)
rakes.append(0)
for i in range (8):
#build the first dimension array, for streets
#todo: 0-2 will of course be left empty, get rid of this nicely using consts
if (category=="holdem" or category=="omahahi" or category=="omahahilo"):
streetCount=4
else:
streetCount=8
for i in range(streetCount): #build the first dimension array, for streets
tmp=[]
action_types.append(tmp)
tmp=[]
action_amounts.append(tmp)
tmp=[]
actionNos.append(tmp)
for j in range (seats): #second dimension arrays: players
tmp=[]
action_types[i].append(tmp)
tmp=[]
action_amounts[i].append(tmp)
tmp=[]
actionNos[i].append(tmp)
if (category=="holdem" or category=="omahahi" or category=="omahahilo"):
pass
elif (category=="razz" or category=="studhi" or category=="studhilo"):#need to fill card arrays.
@ -555,8 +562,7 @@ def parseActionAmount(line, atype, site):
#doesnt return anything, simply changes the passed arrays action_types and
# action_amounts. For stud this expects numeric streets (3-7), for
# holdem/omaha it expects predeal, preflop, flop, turn or river
def parseActionLine(line, street, names, action_types, action_amounts, site):
#print "parseActionLine, line:",line
def parseActionLine(site, line, street, names, action_types, action_amounts, actionNos):
#this only applies to stud
if (street<3):
text="invalid street ("+str(street)+") for line: "+line
@ -571,12 +577,19 @@ def parseActionLine(line, street, names, action_types, action_amounts, site):
elif (street=="river"):
street=3
nextActionNo=0
for player in range(len(actionNos[street])):
for count in range(len(actionNos[street][player])):
if actionNos[street][player][count]>=nextActionNo:
nextActionNo=actionNos[street][player][count]+1
atype=parseActionType(line)
playerno=recognisePlayerNo(line, names, atype)
amount=parseActionAmount(line, atype, site)
action_types[street][playerno].append(atype)
action_amounts[street][playerno].append(amount)
actionNos[street][playerno].append(nextActionNo)
#end def parseActionLine
#returns the action type code (see table design) of the given action line
@ -1066,12 +1079,14 @@ def splitRake(winnings, rakes, totalRake):
rakes[i]=totalRake*winPortion
#end def splitRake
def storeActions(cursor, hands_players_ids, action_types, action_amounts):
def storeActions(cursor, hands_players_ids, action_types, action_amounts, actionNos):
#stores into table hands_actions
#print "start of storeActions, actionNos:",actionNos
#print " action_amounts:",action_amounts
for i in range (len(action_types)): #iterate through streets
for j in range (len(action_types[i])): #iterate through names
for k in range (len(action_types[i][j])): #iterate through individual actions of that player on that street
cursor.execute ("INSERT INTO hands_actions (hand_player_id, street, action_no, action, amount) VALUES (%s, %s, %s, %s, %s)", (hands_players_ids[j], i, k, action_types[i][j][k], action_amounts[i][j][k]))
cursor.execute ("INSERT INTO hands_actions (hand_player_id, street, action_no, action, amount) VALUES (%s, %s, %s, %s, %s)", (hands_players_ids[j], i, actionNos[i][j][k], action_types[i][j][k], action_amounts[i][j][k]))
#end def storeActions
def store_board_cards(cursor, hands_id, board_values, board_suits):

View File

@ -23,24 +23,24 @@ player_name:Player_7 player_startcash:139 position:1 off Btn cards:Ts Jh winning
From Table hands_actions
========================
player_name:Player_1 actionCount:0 street:Preflop streetActionNo:0 action:call amount:4
player_name:Player_1 actionCount:1 street:Flop streetActionNo:0 action:call amount:2
player_name:Player_1 actionCount:2 street:Turn streetActionNo:0 action:call amount:4
player_name:Player_1 actionCount:3 street:River streetActionNo:0 action:fold amount:0
player_name:Player_2 actionCount:0 street:Preflop streetActionNo:0 action:blind amount:1
player_name:Player_2 actionCount:1 street:Preflop streetActionNo:1 action:call amount:3
player_name:Player_2 actionCount:2 street:Flop streetActionNo:0 action:check amount:0
player_name:Player_2 actionCount:3 street:Flop streetActionNo:1 action:call amount:2
player_name:Player_2 actionCount:4 street:Turn streetActionNo:0 action:check amount:0
player_name:Player_2 actionCount:5 street:Turn streetActionNo:1 action:call amount:4
player_name:Player_2 actionCount:6 street:River streetActionNo:0 action:check amount:0
player_name:Player_2 actionCount:7 street:River streetActionNo:1 action:fold amount:0
player_name:Player_3 actionCount:0 street:Preflop streetActionNo:0 action:blind amount:2
player_name:Player_3 actionCount:1 street:Preflop streetActionNo:1 action:fold amount:0
player_name:Player_4 actionCount:0 street:Preflop streetActionNo:0 action:bet amount:4
player_name:Player_4 actionCount:1 street:Flop streetActionNo:0 action:bet amount:2
player_name:Player_4 actionCount:2 street:Turn streetActionNo:0 action:bet amount:4
player_name:Player_4 actionCount:3 street:River streetActionNo:0 action:bet amount:4
player_name:Player_5 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0
player_name:Player_6 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0
player_name:Player_7 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0
player_name:Player_1 street:Preflop streetActionNo:6 action:call amount:4
player_name:Player_1 street:Flop streetActionNo:2 action:call amount:2
player_name:Player_1 street:Turn streetActionNo:2 action:call amount:4
player_name:Player_1 street:River streetActionNo:2 action:fold amount:0
player_name:Player_2 street:Preflop streetActionNo:0 action:blind amount:1
player_name:Player_2 street:Preflop streetActionNo:7 action:call amount:3
player_name:Player_2 street:Flop streetActionNo:0 action:check amount:0
player_name:Player_2 street:Flop streetActionNo:3 action:call amount:2
player_name:Player_2 street:Turn streetActionNo:0 action:check amount:0
player_name:Player_2 street:Turn streetActionNo:3 action:call amount:4
player_name:Player_2 street:River streetActionNo:0 action:check amount:0
player_name:Player_2 street:River streetActionNo:3 action:fold amount:0
player_name:Player_3 street:Preflop streetActionNo:1 action:blind amount:2
player_name:Player_3 street:Preflop streetActionNo:8 action:fold amount:0
player_name:Player_4 street:Preflop streetActionNo:2 action:bet amount:4
player_name:Player_4 street:Flop streetActionNo:1 action:bet amount:2
player_name:Player_4 street:Turn streetActionNo:1 action:bet amount:4
player_name:Player_4 street:River streetActionNo:1 action:bet amount:4
player_name:Player_5 street:Preflop streetActionNo:3 action:fold amount:0
player_name:Player_6 street:Preflop streetActionNo:4 action:fold amount:0
player_name:Player_7 street:Preflop streetActionNo:5 action:fold amount:0

View File

@ -23,24 +23,24 @@ player_name:Player_7 player_startcash:135 position:3 off Btn cards:8d 5d winning
From Table hands_actions
========================
player_name:Player_1 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0
player_name:Player_2 actionCount:0 street:Preflop streetActionNo:0 action:call amount:2
player_name:Player_2 actionCount:1 street:Flop streetActionNo:0 action:call amount:2
player_name:Player_2 actionCount:2 street:Turn streetActionNo:0 action:bet amount:8
player_name:Player_2 actionCount:3 street:River streetActionNo:0 action:bet amount:4
player_name:Player_3 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0
player_name:Player_4 actionCount:0 street:Preflop streetActionNo:0 action:blind amount:1
player_name:Player_4 actionCount:1 street:Preflop streetActionNo:1 action:call amount:1
player_name:Player_4 actionCount:2 street:Flop streetActionNo:0 action:check amount:0
player_name:Player_4 actionCount:3 street:Flop streetActionNo:1 action:call amount:2
player_name:Player_4 actionCount:4 street:Turn streetActionNo:0 action:check amount:0
player_name:Player_4 actionCount:5 street:Turn streetActionNo:1 action:fold amount:0
player_name:Player_5 actionCount:0 street:Preflop streetActionNo:0 action:blind amount:2
player_name:Player_5 actionCount:1 street:Preflop streetActionNo:1 action:check amount:0
player_name:Player_5 actionCount:2 street:Flop streetActionNo:0 action:bet amount:2
player_name:Player_5 actionCount:3 street:Turn streetActionNo:0 action:bet amount:4
player_name:Player_5 actionCount:4 street:Turn streetActionNo:1 action:call amount:4
player_name:Player_5 actionCount:5 street:River streetActionNo:0 action:check amount:0
player_name:Player_5 actionCount:6 street:River streetActionNo:1 action:call amount:4
player_name:Player_6 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0
player_name:Player_7 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0
player_name:Player_1 street:Preflop streetActionNo:4 action:fold amount:0
player_name:Player_2 street:Preflop streetActionNo:5 action:call amount:2
player_name:Player_2 street:Flop streetActionNo:2 action:call amount:2
player_name:Player_2 street:Turn streetActionNo:2 action:bet amount:8
player_name:Player_2 street:River streetActionNo:1 action:bet amount:4
player_name:Player_3 street:Preflop streetActionNo:6 action:fold amount:0
player_name:Player_4 street:Preflop streetActionNo:0 action:blind amount:1
player_name:Player_4 street:Preflop streetActionNo:7 action:call amount:1
player_name:Player_4 street:Flop streetActionNo:0 action:check amount:0
player_name:Player_4 street:Flop streetActionNo:3 action:call amount:2
player_name:Player_4 street:Turn streetActionNo:0 action:check amount:0
player_name:Player_4 street:Turn streetActionNo:3 action:fold amount:0
player_name:Player_5 street:Preflop streetActionNo:1 action:blind amount:2
player_name:Player_5 street:Preflop streetActionNo:8 action:check amount:0
player_name:Player_5 street:Flop streetActionNo:1 action:bet amount:2
player_name:Player_5 street:Turn streetActionNo:1 action:bet amount:4
player_name:Player_5 street:Turn streetActionNo:4 action:call amount:4
player_name:Player_5 street:River streetActionNo:0 action:check amount:0
player_name:Player_5 street:River streetActionNo:2 action:call amount:4
player_name:Player_6 street:Preflop streetActionNo:2 action:fold amount:0
player_name:Player_7 street:Preflop streetActionNo:3 action:fold amount:0

View File

@ -23,33 +23,33 @@ player_name:Player_7 player_startcash:135 position:4 off Btn cards:7c Jh winning
From Table hands_actions
========================
player_name:Player_1 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0
player_name:Player_2 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0
player_name:Player_3 actionCount:0 street:Preflop streetActionNo:0 action:call amount:2
player_name:Player_3 actionCount:1 street:Preflop streetActionNo:1 action:call amount:2
player_name:Player_3 actionCount:2 street:Flop streetActionNo:0 action:bet amount:2
player_name:Player_3 actionCount:3 street:Flop streetActionNo:1 action:bet amount:4
player_name:Player_3 actionCount:4 street:Flop streetActionNo:2 action:call amount:2
player_name:Player_3 actionCount:5 street:Turn streetActionNo:0 action:bet amount:4
player_name:Player_3 actionCount:6 street:Turn streetActionNo:1 action:bet amount:8
player_name:Player_3 actionCount:7 street:Turn streetActionNo:2 action:call amount:4
player_name:Player_3 actionCount:8 street:River streetActionNo:0 action:bet amount:4
player_name:Player_3 actionCount:9 street:River streetActionNo:1 action:bet amount:8
player_name:Player_3 actionCount:10 street:River streetActionNo:2 action:call amount:4
player_name:Player_4 actionCount:0 street:Preflop streetActionNo:0 action:call amount:2
player_name:Player_4 actionCount:1 street:Preflop streetActionNo:1 action:call amount:2
player_name:Player_4 actionCount:2 street:Flop streetActionNo:0 action:bet amount:4
player_name:Player_4 actionCount:3 street:Flop streetActionNo:1 action:bet amount:4
player_name:Player_4 actionCount:4 street:Turn streetActionNo:0 action:bet amount:8
player_name:Player_4 actionCount:5 street:Turn streetActionNo:1 action:bet amount:8
player_name:Player_4 actionCount:6 street:River streetActionNo:0 action:bet amount:8
player_name:Player_4 actionCount:7 street:River streetActionNo:1 action:bet amount:8
player_name:Player_5 actionCount:0 street:Preflop streetActionNo:0 action:blind amount:1
player_name:Player_5 actionCount:1 street:Preflop streetActionNo:1 action:bet amount:3
player_name:Player_5 actionCount:2 street:Flop streetActionNo:0 action:check amount:0
player_name:Player_5 actionCount:3 street:Flop streetActionNo:1 action:fold amount:0
player_name:Player_6 actionCount:0 street:Preflop streetActionNo:0 action:blind amount:2
player_name:Player_6 actionCount:1 street:Preflop streetActionNo:1 action:call amount:2
player_name:Player_6 actionCount:2 street:Flop streetActionNo:0 action:check amount:0
player_name:Player_6 actionCount:3 street:Flop streetActionNo:1 action:fold amount:0
player_name:Player_7 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0
player_name:Player_1 street:Preflop streetActionNo:3 action:fold amount:0
player_name:Player_2 street:Preflop streetActionNo:4 action:fold amount:0
player_name:Player_3 street:Preflop streetActionNo:5 action:call amount:2
player_name:Player_3 street:Preflop streetActionNo:9 action:call amount:2
player_name:Player_3 street:Flop streetActionNo:2 action:bet amount:2
player_name:Player_3 street:Flop streetActionNo:6 action:bet amount:4
player_name:Player_3 street:Flop streetActionNo:8 action:call amount:2
player_name:Player_3 street:Turn streetActionNo:0 action:bet amount:4
player_name:Player_3 street:Turn streetActionNo:2 action:bet amount:8
player_name:Player_3 street:Turn streetActionNo:4 action:call amount:4
player_name:Player_3 street:River streetActionNo:0 action:bet amount:4
player_name:Player_3 street:River streetActionNo:2 action:bet amount:8
player_name:Player_3 street:River streetActionNo:4 action:call amount:4
player_name:Player_4 street:Preflop streetActionNo:6 action:call amount:2
player_name:Player_4 street:Preflop streetActionNo:10 action:call amount:2
player_name:Player_4 street:Flop streetActionNo:3 action:bet amount:4
player_name:Player_4 street:Flop streetActionNo:7 action:bet amount:4
player_name:Player_4 street:Turn streetActionNo:1 action:bet amount:8
player_name:Player_4 street:Turn streetActionNo:3 action:bet amount:8
player_name:Player_4 street:River streetActionNo:1 action:bet amount:8
player_name:Player_4 street:River streetActionNo:3 action:bet amount:8
player_name:Player_5 street:Preflop streetActionNo:0 action:blind amount:1
player_name:Player_5 street:Preflop streetActionNo:7 action:bet amount:3
player_name:Player_5 street:Flop streetActionNo:0 action:check amount:0
player_name:Player_5 street:Flop streetActionNo:4 action:fold amount:0
player_name:Player_6 street:Preflop streetActionNo:1 action:blind amount:2
player_name:Player_6 street:Preflop streetActionNo:8 action:call amount:2
player_name:Player_6 street:Flop streetActionNo:1 action:check amount:0
player_name:Player_6 street:Flop streetActionNo:5 action:fold amount:0
player_name:Player_7 street:Preflop streetActionNo:2 action:fold amount:0