I have written a little utulity in Visual Basic which I am making available for free. It is called Profile Cleaner.
The idea of Profile Cleaner is to tidy up your profiles and identify common logic errors which frequently go undetected and can cause strange results. Even the best coders can make such mistakes, especially in large complex profiles, and the program can also be a useful learning tool for newbies.
What Profile Cleaner DOES do• Standardize spacing and capitalization in your code.
• Apply a standard indentation, even when a single code line is spread over more than one line for easier reading, so it is easy to see which code lines belong to which open when.
• Identify and mark "and/or" conflicts, even in multi-bracketed situations. Only the first error in the line is marked.
• Identify and mark "or not" code which is incorrect 99.9% of the time.
• Identify and mark where a code line has more open brackets than close brackets or vice versa.
• Help identify where you have missed out the Force keyword - the line will not be indented.
What Profile Cleaner does NOT do• Overwrite your original profile - it creates a new file.
• Adjust line spacing in the main code body - this makes it easier to spot "open when" errors.
• Split long code lines - that's for you to do, if you want to!
• Identify keywords that have been either spelt or used incorrectly - the bot itself will pick up these errors so it would be re-inventing the wheel.
• Turn your profile into a guaranteed money maker - sorry I don't do miracles!
The following code is not good ppl and is not good poker - it is designed purely to be untidy, difficult to read, and full of the kind of errors which I often see in profiles people send to me - and indeed in this forum!
custom
preflop
when insmallblind and hand=AA or hand=KK or hand=QQ
when (raises=0 and calls>=1) or (raises=1 and calls=0) and stacksize <10 raisemax force
when (bigblindsize=100 and stacksize<30) or (bigblindsize=200 and stacksize<15)) and botslastaction=raise raisemax force
when inbigblind
when (raises=0 and calls>=1) or (raises=1 and calls=0) and stacksize <10 raisemax force
flop
when position=first
when havetoppair and (not havebestkicker or not have2ndbestkicker) call force
when position=middle
when havetoppair and (not havebestkicker or not have2ndbestkicker) raise
turn
when opponentsattable=1 and position=first and(have2ndnutflush or havenutflush)
when bets=0 and raises=0 betpot force
when bets=0 and raises=1 raisemax force
when opponentisallin call force
when opponentsattable=1 and position=last and(have2ndnutflush or havenutflush)
when bets=0 and raises=0 betpot force
when bets=0 and raises=1 raisepot force
when bets=0 and raises=2 raisemax force
when bets=1 and raises=0 raisemin force
when bets=1 and raises=1 raisemax force
when opponentisallin call force
when opponentsattable=1 and position=first and(have3rdnutflush)
when bets=0 and raises=0 betpot force
when bets=0 and raises=1 raisemax force
when opponentisallin call force
when opponentsattable=1 and position=last and(have3rdnutflush)
when bets=0 and raises=0 betpot Force
when bets=0 and raises=1 call force
when bets=1 and raises=0 call fForce
when opponentisallin call force
Now run it through Profile Cleaner and this is the result:
custom
preflop
when In SmallBlind *** and Hand = AA or Hand = KK or Hand = QQ
when (Raises = 0 and Calls >= 1) *** or (Raises = 1 and Calls = 0) and StackSize < 10 RaiseMax Force
***() when (BigBlindSize = 100 and StackSize < 30) or (BigBlindSize = 200 and StackSize < 15)) and BotsLastAction = Raise RaiseMax Force
when In BigBlind
when (Raises = 0 and Calls >= 1) *** or (Raises = 1 and Calls = 0) and StackSize < 10 RaiseMax Force
flop
when Position = First
when HaveTopPair and (not HaveBestKicker *** or not Have2ndBestKicker) Call Force
when Position = Middle
when HaveTopPair and (not HaveBestKicker *** or not Have2ndBestKicker) Raise
turn
when OpponentsAtTable = 1 and Position = First and (Have2ndNutFlush or HaveNutFlush)
when Bets = 0 and Raises = 0 BetPot Force
when Bets = 0 and Raises = 1 RaiseMax Force
when OpponentIsAllIn Call Force
when OpponentsAtTable = 1 and Position = Last and (Have2ndNutFlush or HaveNutFlush)
when Bets = 0 and Raises = 0 BetPot Force
when Bets = 0 and Raises = 1 RaisePot Force
when Bets = 0 and Raises = 2 RaiseMax Force
when Bets = 1 and Raises = 0 RaiseMin Force
when Bets = 1 and Raises = 1 RaiseMax Force
when OpponentIsAllIn Call Force
when OpponentsAtTable = 1 and Position = First and (Have3rdNutFlush)
when Bets = 0 and Raises = 0 BetPot Force
when Bets = 0 and Raises = 1 RaiseMax Force
when OpponentIsAllIn Call Force
when OpponentsAtTable = 1 and Position = Last and (Have3rdNutFlush)
when Bets = 0 and Raises = 0 BetPot Force
when Bets = 0 and Raises = 1 Call Force
when Bets = 1 and Raises = 0 Call fForce
when OpponentIsAllIn Call Force
See how all the errors are marked with *** - do a search for *** in the new file and you will come across all your logic errors (if there are any!) so that you can easily correct them. Can you also spot how the indentation makes the open when error in the preflop code easier to spot? Note how the last line of the flop code is missing its Force keyword and is not indented as a result. Note also that although there was nothing "wrong" with the original turn code it is now much easier to read.
If you want to download and use this utility you can find it here:
http://www.mediafire.com/?mmidmmmhu2y read the short ReadMe.txt file before installing.
zulu has tested the script for me and I believe Dman has checked the file for anything malicious - so you can have confidence in it!
ENJOY!
OMIL