// The Cookie Monster script.
	
	
		// created by Cookie High <-- Loves tips
	
	
		// This script gives you multiple options for both your bets and your payouts on both wins and losses.
	
	
		// Play around with the settings and find what works for you best.
	
	
		//
	
	
		// The defaults settings are the ones I am useing. I have ran it for 5 days.
	
	
		// I have an average daily return of 3.96%. I notice the days where my win percentage is lower I have retuns
	
	
		// closer to 5%.
	
	
		//
	
	
		// Don't bet more than you can lose. With a 2.1% payout my minimum bet can be doubled 20 times before I go
	
	
		// broke. The longes losing streak I have seen is 13. Give your self plenty of room and you are less likely 
	
	
		// to loss it all.
	
	
		//
	
	
		// Bot safely and go make some money!!!
	
	
		// Dont forget to friend and tip me. 
	
	 
	
		var config = {
	
	
		  scriptTitle: {label: 'This script was compiled by Cookie High. Tips are greatly apprciated! Now go make it rain!', type: 'title'},
	
	
		  baseBet: {label: 'Starting Bet:', value: currency.minAmount, type: 'number'},
	
	
		  maxBet: {label: 'Maximum Bet:', value: 10000, type: 'number'},
	
	
		  minBet: {label: 'Minimum Bet:', value: 0, type: 'number'},
	
	
		  stopBet: {label: 'Stop if Bet is Greater Than:', value: 1e8, type: 'number'},
	
	
		  basePayout: {label: 'Starting Payout:', value: 2.1, type: 'number'},
	
	
		  maxPayout: {label: 'Maximum Payout:', value: 10, type: 'number'},
	
	
		  minPayout: {label: 'Minimum Payout:', value: 2, type: 'number'},
	
	
		  stopPayout: {label: 'Stop if Payout is Greater Than:', value: 1e8, type: 'number'},
	
	
		  winRepeat: {label: 'Reset After Win Streak of:', value: 2, type: 'number'},
	
	
		  
	
	
		  onBetLossTitle: {label: 'Loss Bet Settings', type: 'title'},
	
	
		    onBetLoss: {label: '', value: '3', type: 'radio',
	
	
		      options: [
	
	
		        {value: '0', label: 'Return to Starting Bet'},
	
	
		        {value: '1', label: 'Add to Bet'},
	
	
		        {value: '2', label: 'Subtract From Bet'},
	
	
		        {value: '3', label: 'Multiply Bet By'},
	
	
		        {value: '4', label: 'Divide Bet By'}
	
	
		      ]
	
	
		    },
	
	
		  addBetLoss: { label: 'Increase Bet By:', value: 0, type: 'number' },
	
	
		  subBetLoss: { label: 'Decrease Bet By:', value: 0, type: 'number' },
	
	
		  mulBetLoss: { label: 'Multiply Bet By:', value: 2, type: 'number' },
	
	
		  divBetLoss: { label: 'Divide Bet By:', value: 1, type: 'number' },
	
	 
	
		  onPayoutLossTitle :{label: 'Loss Payout Settings', type: 'title'},
	
	
		    onPayoutLoss: {label: '', value: '0', type: 'radio',
	
	
		      options: [
	
	
		        {value: '0', label: 'Return to Starting Payout'},
	
	
		        {value: '1', label: 'Add to Payout'},
	
	
		        {value: '2', label: 'Subtract From Payout'},
	
	
		        {value: '3', label: 'Multiply Payout By'},
	
	
		        {value: '4', label: 'Divide Payout By'}
	
	
		      ]
	
	
		    },
	
	
		  addPayoutLoss: { label: 'Increase Payout By:', value: 0, type: 'number' },
	
	
		  subPayoutLoss: { label: 'Decrease Payout By:', value: 0, type: 'number' },
	
	
		  mulPayoutLoss: { label: 'Multiply Payout By:', value: 1, type: 'number' },
	
	
		  divPayoutLoss: { label: 'Divide Payout By:', value: 1, type: 'number' },
	
	 
	
		  onBetWinTitle: {label: 'Win Bet Settings', type: 'title'},
	
	
		    onBetWin: {label: '', value: '0', type: 'radio',
	
	
		      options: [
	
	
		        {value: '0', label: 'Return to Starting Bet'},
	
	
		        {value: '1', label: 'Add to Bet'},
	
	
		        {value: '2', label: 'Subtract From Bet'},
	
	
		        {value: '3', label: 'Multiply Bet By'},
	
	
		        {value: '4', label: 'Divide Bet By'}
	
	
		      ]
	
	
		    },
	
	
		  addBetWin: { label: 'Increase Bet By:', value: 0, type: 'number' },
	
	
		  subBetWin: { label: 'Decrease Bet By:', value: 0, type: 'number' },
	
	
		  mulBetWin: { label: 'Multiply Bet By:', value: 1, type: 'number' },
	
	
		  divBetWin: { label: 'Divide Bet By:', value: 1, type: 'number' },
	
	 
	
		  onPayoutWinTitle :{label: 'Win Payout Settings', type: 'title'},
	
	
		    onPayoutWin: {label: '', value: '3', type: 'radio',
	
	
		      options: [
	
	
		        {value: '0', label: 'Return to Starting Payout'},
	
	
		        {value: '1', label: 'Add to Payout'},
	
	
		        {value: '2', label: 'Subtract From Payout'},
	
	
		        {value: '3', label: 'Multiply Payout By'},
	
	
		        {value: '4', label: 'Divide Payout By'}
	
	
		      ]
	
	
		    },
	
	
		  addPayoutWin: { label: 'Increase Payout By:', value: 0, type: 'number' },
	
	
		  subPayoutWin: { label: 'Decrease Payout By:', value: 0, type: 'number' },
	
	
		  mulPayoutWin: { label: 'Multiply Payout By:', value: 2, type: 'number' },
	
	
		  divPayoutWin: { label: 'Divide Payout By:', value: 1, type: 'number' },
	
	 
	
		}
	
	 
	
		function main (){
	
	
		  var baseBet = config.baseBet.value;
	
	
		  var maxBet = config.maxBet.value;
	
	
		  var minBet = config.maxBet.value;
	
	
		  var basePayout = config.minPayout.value;
	
	
		  var maxPayout = config.maxPayout.value;
	
	
		  var minPayout = config.minPayout.value;
	
	
		  var currentBet = config.baseBet.value;
	
	
		  var currentPayout = config.basePayout.value;
	
	
		  var onBetWin = config.onBetWin.value;
	
	
		  var addBetWin = config.addBetWin.value;
	
	
		  var subBetWin = config.subBetWin.value;
	
	
		  var mulBetWin = config.mulBetWin.value;
	
	
		  var divBetWin = config.divBetWin.value;
	
	
		  var onPayoutWin = config.onPayoutWin.value;
	
	
		  var addPayoutWin = config.addPayoutWin.value;
	
	
		  var subPayoutWin = config.subPayoutWin.value;
	
	
		  var mulPayoutWin = config.mulPayoutWin.value;
	
	
		  var divPayoutWin = config.divPayoutWin.value;
	
	
		  var onBetLoss = config.onBetLoss.value;
	
	
		  var addBetLoss = config.addBetLoss.value;
	
	
		  var subBetLoss = config.subBetLoss.value;
	
	
		  var mulBetLoss = config.mulBetLoss.value;
	
	
		  var divBetLoss = config.divBetLoss.value;
	
	
		  var onPayoutLoss = config.onPayoutLoss.value;
	
	
		  var addPayoutLoss = config.addPayoutLoss.value;
	
	
		  var subPayoutLoss = config.subPayoutLoss.value;
	
	
		  var mulPayoutLoss = config.mulPayoutLoss.value;
	
	
		  var divPayoutLoss = config.divPayoutLoss.value;
	
	
		  var stopPayout = config.stopPayout.value;
	
	
		  var stopBet = config.stopBet.value;
	
	
		  var winRepeatCount = config.winRepeat.value
	
	
		  var winRepeatSet = 1
	
	
		  var winRepProvision = 0
	
	
		  var gameStatus = 1
	
	
		  var gameCounter = 1
	
	
		  
	
	
		  game.onBet = function () {
	
	
		    log.success('Placing Bet For: ' + currentBet + ', At Payout: '+ currentPayout)
	
	
		    
	
	
		    game.bet(currentBet, currentPayout).then(function (payout)
	
	
		        {if (payout > 1)
	
	
		            {if(!gameStatus)
	
	
		                {counterReset(true)}
	
	
		                    log.success('Winner, Winner, Chicken Dinner!')
	
	
		                        gameStarter(onBetWinSwitch(onBetWin),onPayoutWinSwitch(onPayoutWin))
	
	
		            } 
	
	
		        else
	
	
		            {if(gameStatus)
	
	
		                {gameStatus--}
	
	
		                    winRepCountReset(true) 
	
	
		                        log.error('We lost that one.')
	
	
		                            gameStarter(onBetLossSwitch(onBetLoss),onPayoutLossSwitch(onPayoutLoss))
	
	
		                                gameCounter++
	
	
		            }
	
	
		        })
	
	 
	
		function gameStarter(calculatedBet, calculatedPayout)
	
	
		    {if (currentBet > stopBet)
	
	
		        {log.error('The bot was stopped because the max bet was reached!');
	
	
		            game.stop();}
	
	
		    else
	
	
		    if (currentPayout > stopPayout)
	
	
		        {log.error('The bot was stopped because the max payout was reached!');
	
	
		            game.stop();}
	
	
		                currentBet = calculatedBet
	
	
		                currentPayout = calculatedPayout
	
	
		    }
	
	 
	
		function onBetWinSwitch (switchValue)
	
	
		{switch(switchValue)
	
	
		    {case '0':
	
	
		        return baseBet
	
	
		      break;
	
	
		    case '1':
	
	
		        if(!gameStatus)
	
	
		            {if(!winRepeatCount)
	
	
		                {gameStatus++
	
	
		                    winRepCountReset(true)   
	
	
		                        return baseBet
	
	
		                }
	
	
		            else
	
	
		                {winRepeatCount--
	
	
		                    winRepProvision++
	
	
		                        winRepeatSet--
	
	
		                        {if (currentBet + (addBetWin) > maxBet)
	
	
		                            {return maxBet,
	
	
		                            log.error('Maximum bet reached!')}
	
	
		                        else
	
	
		                            return currentBet + (addBetWin)
	
	
		                        }
	
	
		                }
	
	
		            }
	
	
		        else
	
	
		            {return baseBet}
	
	
		                break;
	
	
		    case '2':
	
	
		        if(!gameStatus)
	
	
		            {if(!winRepeatCount)
	
	
		                {gameStatus++
	
	
		                    winRepCountReset(true)   
	
	
		                        return baseBet}
	
	
		            else
	
	
		                {winRepeatCount--
	
	
		                    winRepProvision++
	
	
		                        winRepeatSet--
	
	
		                            {if (currentBet - (subBetWin) < minBet)
	
	
		                                {return minBet,
	
	
		                                log.error('Minimum bet reached!')}
	
	
		                            else                         
	
	
		                                return currentBet - (subBetWin)
	
	
		                            }
	
	
		                }
	
	
		            }
	
	
		        else
	
	
		            {return baseBet}
	
	
		                break;
	
	
		    case '3':
	
	
		        if(!gameStatus)
	
	
		            {if(!winRepeatCount)
	
	
		                {gameStatus++
	
	
		                    winRepCountReset(true)   
	
	
		                        return baseBet}
	
	
		            else
	
	
		                {winRepeatCount--
	
	
		                    winRepProvision++
	
	
		                        winRepeatSet--
	
	
		                            {if (currentBet * (mulBetWin) > maxBet)
	
	
		                                {return maxBet,
	
	
		                                log.error('Maximum bet reached!')}
	
	
		                            else                         
	
	
		                                return currentBet * (mulBetWin)
	
	
		                            }
	
	
		                }
	
	
		            }
	
	
		    else
	
	
		    {return baseBet}
	
	
		        break;
	
	 
	
		        case '4':
	
	
		        if(!gameStatus)
	
	
		            {if(!winRepeatCount)
	
	
		                {gameStatus++
	
	
		                winRepCountReset(true)   
	
	
		                    return baseBet}
	
	
		            else
	
	
		                {winRepeatCount--
	
	
		                winRepProvision++
	
	
		                winRepeatSet--
	
	
		                    {if (currentBet / (divBetWin) < minBet)
	
	
		                        {return minBet,
	
	
		                        log.error('Minimum bet reached!')}
	
	
		                    else
	
	
		                        return currentBet / (divBetWin)
	
	
		                    }
	
	
		                }
	
	
		            }
	
	
		    else
	
	
		        {return baseBet}
	
	
		            break;
	
	
		                            
	
	
		                    
	
	
		                    
	
	
		    }
	
	
		}
	
	
		                
	
	
		function onPayoutWinSwitch (switchValue)
	
	
		    {switch(switchValue)
	
	
		        {case '0':
	
	
		            return basePayout
	
	
		                break;
	
	
		        case '1':
	
	
		            if(!gameStatus)
	
	
		                {if(!winRepeatCount)
	
	
		                    {gameStatus++
	
	
		                        winRepCountReset(true)   
	
	
		                            return basePayout
	
	
		                    }
	
	
		                else
	
	
		                    {winRepeatCount--
	
	
		                    winRepProvision++
	
	
		                    winRepeatSet--
	
	
		                        {if (currentPayout + (addPayoutWin) > maxPayout)
	
	
		                            {return maxPayout,
	
	
		                            log.error('Maximum payout reached!')}
	
	
		                        else
	
	
		                            return currentPayout + (addPayoutWin)
	
	
		                        }
	
	
		                    }
	
	
		                }
	
	
		        else
	
	
		            {return basePayout}
	
	
		                break;
	
	
		        case '2':
	
	
		            if(!gameStatus)
	
	
		                {if(!winRepeatCount)
	
	
		                    {gameStatus++
	
	
		                    winRepCountReset(true)   
	
	
		                        return basePayout}
	
	
		                else
	
	
		                    {winRepeatCount--
	
	
		                    winRepProvision++
	
	
		                    winRepeatSet--
	
	
		                        {if (currentPayout - (subPayoutWin) < minPayout)
	
	
		                            {return minPayout,
	
	
		                            log.error('Minimum payout reached!')}
	
	
		                        else
	
	
		                            return currentPayout - (subPayoutWin)
	
	
		                        }
	
	
		                    }
	
	
		                }
	
	
		            else
	
	
		                {return basePayout}
	
	
		                    break;
	
	
		        case '3':
	
	
		            if(!gameStatus)
	
	
		                {if(!winRepeatCount)
	
	
		                    {gameStatus++
	
	
		                    winRepCountReset(true)   
	
	
		                        return basePayout}
	
	
		                else
	
	
		                    {winRepeatCount--
	
	
		                    winRepProvision++
	
	
		                    winRepeatSet--
	
	
		                        {if (currentPayout * (mulPayoutWin) > maxPayout)
	
	
		                            {return maxPayout,
	
	
		                            log.error('Maximum payout reached!')}
	
	
		                        else    
	
	
		                            return currentPayout * (mulPayoutWin)
	
	
		                        }
	
	
		                    }
	
	
		                }
	
	
		        case '4':
	
	
		            if(!gameStatus)
	
	
		                {if(!winRepeatCount)
	
	
		                    {gameStatus++
	
	
		                    winRepCountReset(true)   
	
	
		                        return basePayout}
	
	
		                else
	
	
		                    {winRepeatCount--
	
	
		                    winRepProvision++
	
	
		                    winRepeatSet--
	
	
		                        {if (currentPayout / (divPayoutWin) < minPayout)
	
	
		                            {return minPayout,
	
	
		                            log.error('Minimum payout reached!')}
	
	
		                        else   
	
	
		                            return currentPayout / (divPayoutWin)
	
	
		                        }
	
	
		                    }
	
	
		                }
	
	
		        else
	
	
		            {return basePayout}
	
	
		                break;
	
	
		    }
	
	
		}}
	
	
		function onBetLossSwitch (switchValue)
	
	
		    {switch(switchValue) 
	
	
		        {case '0':
	
	
		            return baseBet
	
	
		                break;
	
	
		        case '1':
	
	
		            {if (currentBet + (addBetLoss) > maxBet)
	
	
		                {return maxBet,
	
	
		                log.error('Maximum bet reached!')}
	
	
		            else
	
	
		                return currentBet + (addBetLoss)}
	
	
		                break;
	
	
		        case '2':
	
	
		            {if (currentBet - (subBetLoss) < minBet)
	
	
		                {return minBet,
	
	
		                log.error('Minimum bet reached!')}
	
	
		            else
	
	
		                return currentBet - (subBetLoss)}
	
	
		                break;
	
	
		        case '3':
	
	
		            {if (currentBet * (mulBetLoss) > maxBet)
	
	
		                {return maxBet,
	
	
		                log.error('Maximum bet reached!')}
	
	
		            else
	
	
		                return currentBet * (mulBetLoss)}
	
	
		                break;
	
	
		        case '4':
	
	
		            {if (currentBet / (divBetLoss) < minBet)
	
	
		                {return minBet,
	
	
		                log.error('Minimum bet reached!')}
	
	
		            else
	
	
		                return currentBet / (divBetLoss)}
	
	
		                break;
	
	
		        }   
	
	
		    }
	
	
		function onPayoutLossSwitch (switchValue)
	
	
		    {switch(switchValue) 
	
	
		        {case '0':
	
	
		            return basePayout
	
	
		                break;
	
	
		        case '1':
	
	
		            {if (currentPayout + (addPayoutLoss) > maxPayout)
	
	
		                {return maxPayout,
	
	
		                log.error('Maximum payout reached!')}
	
	
		            else
	
	
		                return currentPayout + (addPayoutLoss)}
	
	
		                break;
	
	
		        case '2':
	
	
		            {if (currentPayout - (subPayoutLoss) < minPayout)
	
	
		                {return minPayout,
	
	
		                log.error('Minimum payout reached!')}
	
	
		            else
	
	
		                return currentPayout - (subPayoutLoss)}
	
	
		                break;
	
	
		        case '3':
	
	
		            {if (currentPayout * (mulPayoutLoss) > maxPayout)
	
	
		                {return maxPayout,
	
	
		                log.error('Maximum payout reached!')}
	
	
		            else
	
	
		            return currentPayout * (mulPayoutLoss)}
	
	
		                break;
	
	
		        case '4':
	
	
		            {if (currentPayout / (divPayoutLoss) < minPayout)
	
	
		                {return minPayout ,
	
	
		                log.error('Minimum payout reached!')}
	
	
		            else
	
	
		            return currentPayout / (divPayoutLoss)}
	
	
		                break;
	
	
		        }
	
	
		    }
	
	
		function counterReset(itsZero)
	
	
		    {if(itsZero)
	
	
		        {gameCounter--
	
	
		        if(!gameCounter)
	
	
		            {gameCounter++
	
	
		            return}
	
	
		                counterReset(true)
	
	
		        }
	
	
		    }
	
	
		function winRepCountReset(itsZero)
	
	
		    {if(!winRepProvision)
	
	
		        {return}
	
	
		            if(itsZero)
	
	
		            {winRepeatCount++
	
	
		                winRepProvision--
	
	
		                    if(!winRepProvision)
	
	
		                        {return}
	
	
		                            winRepCountReset(true)
	
	
		            }
	
	
		    }
	
	
		}