Apps Home
|
Create an App
pbb
Author:
pbchnd
Description
Source Code
Launch App
Current Users
Created by:
Pbchnd
/* Super Easy Keno Takes the work out of Keno You supply a list of prizes ordered from highest to lowest value, and the app does all the work It partially fills the board with Try Again then multiplies your prizes to fill the rest. Low-value prizes are multiplied more and placed mostly on lower numbers. High-value prizes are multiplied less and placed mostly on higher numbers. A random factor keeps things interesting by making every board different, and you can rebuild whenever you like. Super Easy Keno has just these inputs: 1. Prize list (put each prize in once, in order from highest to lowest value) 2. Lowest number on the board 3. Highest number on the board The rest are optional: 4. Interval for 'Play Keno' advert/reminder 5. Prize for clearing the board 6. Use "Try Again" messages or "Fortune Cookies" 7. Just4Love text - if tipnote has this, the tip does not play Keno Caveat: Due to the nature of randomness a high-value prize will sometimes appear in the middle of the board, but the app is biased so that high-value prizes are mostly placed on higher numbers. Randomness keeps frequent guests from remembering the locations of prizes. What you can do with Super Easy Keno: Create boards of any size from 1 to 1000 A one-spot board for a one-time challenge prize Put one prize on a small board, wait for a lucky guest A 25-spot board for quicker games, rebuild it any time with one command Use these identical copies of Super Easy Keno to preconfigure different sized boards, or boards for special occasions! Super Easy Keno 1 CB will keep your inputs for each copy separate, so you can: Experiment with prize offerings Have Holiday, Birthday, and other specialty boards Have a unique board for each day of the week Have cool, medium, and hot boards to suit your mood create a 2-spot board with one prize for a one-chance special offer, 50% chance to win! have budget and pricey boards to suit your audience keep a small board ready for when time is short Keno broadcaster commands: /knew build a new board and start Keno /klist show you (only) where the prizes are /ksend send the remaining board to the guests /kstop stop Keno and cancel the board Keno guest commands: !kb show the remaining spots !kp show the remaining prizes */ cb.sendNotice('Super Easy Keno Bot /nEnter /help to see broadcaster-only commands',cb.room_Slug); var timerCount = 0; var kenoTimer = 2; var kenoOffTheBoardMsg = ''; var knAlreadyPickedMsg = 'Too late, somebody already picked that one'; var knBoardClearedMsg = 'Keno Board Has Been Cleared!'; var knIsStartedMsg = 'Keno Board is Loaded and Ready! Tip between [knMin] and [knMax] to play. Enter !kb to see the board, !kp to see the remaining prizes'; var knIsStoppedMsg = 'Keno is Not Running'; var knIsStoppedMsg2 = 'Keno has been Stopped, the Board is cancelled'; var knWinnerMsg = '[tipper] wins: [prize]'; var knPrizeBgColor = 'gold'; var broadCaster = cb.room_slug; var kenoIsLoaded = false; var kenoIsOn = false; var knFortuneCookiesOn = false; var knFortuneCookieIx = 0; var knMin = 0; var knMax = 0; var knFill = 0; var knSpots = 0; var knBoard = []; var knPrize = []; var knBoardDef = {Num: 01, Rand: 0, Name: ''}; var knPrizeDef = {Name: '', Count: 0}; var knTryAgainCount = 0; var knClearGoalMsg = cb.settings.knGoal; var knRemWinnerTips = 0; var knRemLoserTips = 0; var knRemWinners = 0; var knRemLosers = 0; cb.settings_choices = [ {name: 'knMin' , label: 'Lowest Number on Keno Board' , type:'int' ,minValue: 1, maxValue: 1000 ,defaultValue: 02} ,{name: 'knMax' , label: 'Highest Number on Keno Board' , type:'int' ,minValue: 1, maxValue: 1000 ,defaultValue: 02} ,{name: 'knFill' , label: 'Fill Percentage' , type:'int' ,minValue: 10, maxValue: 100 ,defaultValue: 80} ,{name: 'knGoal' , label: 'Optional - Cleared Board Reward' , type:'str' ,minLength: 1 ,maxLength: 255, required: false} ,{name: 'knTimer' , label: 'Minutes Between Keno Reminders' , type:'int' ,minValue: 1, maxValue: 1000 ,defaultValue: 4} ,{name: 'knFortuneCookies', label: 'Try Again or Fortune Cookie' , type:'choice', defaultValue: 'Fortune Cookies' ,choice1: 'Fortune Cookies', choice2: 'Try Again'} ,{name: 'kn00', type: 'str', required: true , minLength: 0 ,maxLength: 512, label:'Highest-Value Prize 01'} ,{name: 'kn01', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 02'} ,{name: 'kn02', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 03'} ,{name: 'kn03', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 04'} ,{name: 'kn04', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 05'} ,{name: 'kn05', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 06'} ,{name: 'kn06', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 07'} ,{name: 'kn07', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 08'} ,{name: 'kn08', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 09'} ,{name: 'kn09', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 10'} ,{name: 'kn10', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 11'} ,{name: 'kn11', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 12'} ,{name: 'kn12', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 13'} ,{name: 'kn13', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 14'} ,{name: 'kn14', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 15'} ,{name: 'kn15', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 16'} ,{name: 'kn16', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 17'} ,{name: 'kn17', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 18'} ,{name: 'kn18', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 19'} ,{name: 'kn19', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 20'} ,{name: 'kn20', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 21'} ,{name: 'kn21', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 22'} ,{name: 'kn22', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 23'} ,{name: 'kn23', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 24'} ,{name: 'kn24', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 25'} ,{name: 'kn25', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 26'} ,{name: 'kn26', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 27'} ,{name: 'kn27', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 28'} ,{name: 'kn28', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 29'} ,{name: 'kn29', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 30'} ,{name: 'kn30', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 31'} ,{name: 'kn31', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 32'} ,{name: 'kn32', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 33'} ,{name: 'kn33', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 34'} ,{name: 'kn34', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 35'} ,{name: 'kn35', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 36'} ,{name: 'kn36', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 37'} ,{name: 'kn37', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 38'} ,{name: 'kn38', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 39'} ,{name: 'kn39', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 40'} ,{name: 'kn40', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 41'} ,{name: 'kn41', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 42'} ,{name: 'kn42', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 43'} ,{name: 'kn43', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 44'} ,{name: 'kn44', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 45'} ,{name: 'kn45', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 46'} ,{name: 'kn46', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 47'} ,{name: 'kn47', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 48'} ,{name: 'kn48', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:' Prize 49'} ,{name: 'kn49', type: 'str', required: false, minLength: 0 ,maxLength: 512, label:'Lowest-Value Prize 50'} ]; function loadSettings() { } cb.onTip(function(tip) { var amt = tip.amount; var u = tip.from_user; var n = tip.message; var i; if (kenoIsOn && knMin <= amt && amt <= knMax) { kenoPlay(tip); } }); function kenoPlay(tip) { var amt = tip.amount; var knPlay = tip.amount - knMin; var u = tip.from_user; var m = tip.msg; var i; if (knBoard[knPlay].Name == 'X') { cb.sendNotice("Somebody already picked that one, sorry",'','','','bold'); return; } if (knBoard[knPlay].Name == 'TA') { if (knFortuneCookiesOn) { knFortuneCookieIx = (knFortuneCookieIx + 1) % fortuneCookies.length; cb.sendNotice(u + ' wins a Fortune Cookie: ' + fortuneCookies[knFortuneCookieIx],'','','','bold'); } else { cb.sendNotice(randPick(knTryAgainMsgs),'','','','bold'); } knBoard[knPlay].Name = 'X'; return; } for (i = 0; i < knPrize.length && knBoard[knPlay].Name != knPrize[i].Name; i++) {}; knPrize[i].Count--; cb.sendNotice(knWinnerMsg.replace('[tipper]',u).replace('[prize]',knBoard[knPlay].Name),'',colors[knPrizeBgColor],'','bold'); knBoard[amt - knMin].Name = 'X'; knRemWinnerTips -= amt; knRemWinners--; if (knRemWinners == 0) { cb.sendNotice(knBoardClearedMsg,'',colors[knPrizeBgColor],'','bold'); KenoIsLoaded = false; kenoIsOn = false; if (knClearGoalMsg != '') { cb.sendNotice('Prize won for clearing the Board: ' + knClearGoalMsg,'',colors[knPrizeBgColor],'','bold'); } cb.sendNotice('Enter /knew when ready to start a new Keno',broadCaster); } } cb.onMessage(function(msg) { var i; var iT = []; var m = msg.m; var u = msg.user; if (m.slice(0,1) == '/' && u == broadCaster) { return slashCmds(msg); } if (m.slice(0,1) == '!' && m != '!') { msg = exclamCmds(msg,u); } return msg; }); function slashCmds(msg) { var t = msg.m; var u = msg.user; var a = t.split(/\s+/); var a0 = a[0].toLowerCase(); if (a0 == '/knew') { kenoLoad(); msg['X-Spam'] = true; return msg; } if (a0 == '/klist') { kenoStatus(); msg['X-Spam'] = true; return msg; } if (a0 == '/ksend') { kenoSend(); msg['X-Spam'] = true; return msg; } if (a0 == '/kstop') { kenoIsOn = false; cb.sendNotice(knIsStoppedMsg2); msg['X-Spam'] = true; return msg; } if (a0 == '/help') { var h = '' + '\n/knew (build new Keno board and start Keno)' + '\n/klist (send prize list to broadcaster)' + '\n/ksend (send board to all)' + '\n/kstop (stop Keno and cancel the board)' ; cb.sendNotice(h,broadCaster,'','','bold'); msg['X-Spam'] = true; return msg; } msg['X-Spam'] = false; return msg; } function exclamCmds(msg,u) { var t = msg.m; var u = msg.user;10 var a = t.split(/\s+/); var a0 = a[0].toLowerCase(); if (a0 == '!kb') { if (!kenoIsLoaded) { cb.sendNotice(knIsStoppedMsg,u); msg['X-Spam'] = true; return msg; } cb.sendNotice(kenoBoard(),u); msg['X-Spam'] = true; return msg; } if (a0 == '!kp') { if (!kenoIsLoaded) { cb.sendNotice(knIsStoppedMsg,u); msg['X-Spam'] = true; return msg; } cb.sendNotice(kenoRemPrizes(),u); msg['X-Spam'] = true; return msg; } msg['X-Spam'] = false; return msg; } function randPick(a) { return a[Math.floor(Math.random() * a.length)]; } function kenoRemPrizes() { var i; var prizeList = 'Keno Prizes Remaining: '; for (i = 0; i < knPrize.length; i++) { if (knPrize[knPrize.length - i - 1].Count) { prizeList = prizeList + ' | ' + knPrize[knPrize.length - i - 1].Name; } } return prizeList; } function kenoStatus() { if (!kenoIsLoaded) { cb.sendNotice('knIsStoppedMsg',broadCaster); return; } var i; var boardList = 'Prize List'; for (i = 0; i < knBoard.length; i++) { if (knBoard[i].Name != 'X' && knBoard[i].Name != 'TA') { boardList = boardList + '\n' + (i + knMin) + ': ' + knBoard[i].Name; } } cb.sendNotice(boardList,broadCaster); } function kenoSend() { cb.sendNotice(kenoBoard()); } function kenoBoard() { var i; var kndigits = knMax.toString().length; var kni = 10; var s; var myBoard = 'Keno Board Remaining'; var knt = 0; if (kndigits == 5) { kni = 5;} if (kndigits == 4) { kni = 8;} if (kndigits == 3) { kni = 10;} if (kndigits == 2) { kni = 10;} if (kndigits == 1) { kni = 10;} for (knt = 0; knt < knSpots; knt++) { if (knt % kni == 0) { myBoard = myBoard + '\n'; } if (knBoard[knt].Name == 'X') { myBoard = myBoard + 'xxxxx'.slice(5-kndigits) + ' '; } else { s = '00000' + (knt + knMin).toString(); myBoard = myBoard + s.slice(s.length-kndigits) + ' '; } } return myBoard; } function kenoLoad() { kenoIsLoaded = false; knGoal = cb.settings.knGoal; knMin = cb.settings.knMin; knMax = cb.settings.knMax; knFill = cb.settings.knFill; knSpots = knMax - knMin + 1; knFortuneCookiesOn = cb.settings.knFortuneCookies == 'Fortune Cookies'; if (knSpots < 1) { cb.sendNotice('Number of Keno Spots must be at least 1',broadCaster); return; } var kCalc = {min: 0, max: 0}; var i,j,p; knTryAgainCount = Math.floor(knSpots * (100 - cb.settings.knFill) / 100); knRemWinnerTips = 0; knRemLoserTips = 0; knRemWinners = 0; knRemLosers = 0; knPrize=[]; i = 0; var cbs = [cb.settings.kn00,cb.settings.kn01,cb.settings.kn02,cb.settings.kn03,cb.settings.kn04 ,cb.settings.kn05,cb.settings.kn06,cb.settings.kn07,cb.settings.kn08,cb.settings.kn09 ,cb.settings.kn10,cb.settings.kn11,cb.settings.kn12,cb.settings.kn13,cb.settings.kn14 ,cb.settings.kn15,cb.settings.kn16,cb.settings.kn17,cb.settings.kn18,cb.settings.kn19 ,cb.settings.kn20,cb.settings.kn21,cb.settings.kn22,cb.settings.kn23,cb.settings.kn24 ,cb.settings.kn25,cb.settings.kn26,cb.settings.kn27,cb.settings.kn28,cb.settings.kn29 ,cb.settings.kn30,cb.settings.kn31,cb.settings.kn32,cb.settings.kn33,cb.settings.kn34 ,cb.settings.kn35,cb.settings.kn36,cb.settings.kn37,cb.settings.kn38,cb.settings.kn39 ,cb.settings.kn40,cb.settings.kn41,cb.settings.kn42,cb.settings.kn43,cb.settings.kn44 ,cb.settings.kn45,cb.settings.kn46,cb.settings.kn47,cb.settings.kn48,cb.settings.kn49 ] for (i = 0; i < cbs.length; i++) { if (cbs[i] != '') { knPrize[knPrize.length] = {Name: cbs[i], Count: 0}; } } if (knPrize.length > knSpots) { cb.sendNotice('You have more prizes than spots, increasing spots',broadCaster); knSpots = knPrize.length; knMax = knMin + knSpots - 1; } kCalc = knCalculateMultipliers(); knPrize[0].Count = kCalc.min; var h = kCalc.max; knTryAgainCount = knSpots; for (i = 1; i < knPrize.length; i++) { knPrize[i].Count = knPrize[0].Count + Math.round(i * h / (knPrize.length - 1)); knTryAgainCount = knTryAgainCount - knPrize[i].Count; } if (knTryAgainCount < 0) { knSpots += knSpots; cb.settings.knMax += knSpots; cb.sendNotice('You have more prizes than spots, increasing spots to ' + knSpots, broadCaster); kenoLoad(); return; } for (i = 0; i < (knSpots); i++) { knBoard[i] = {Num: 0, Rand: 0, Name: ''}; knBoard[i].Num = i + knMin; knBoard[i].Rand = i + Math.sqrt(knSpots) * (Math.random() - Math.random() + Math.random() - Math.random()); if (i > knSpots / 2) { knBoard[i].Rand = knBoard[i].Rand + Math.sqrt(knSpots) * (Math.random() - Math.random()); } knBoard[i].Name = 'TA'; } knShuffle(); for (i = 0; i < knTryAgainCount; i++) { knBoard[i].Rand = -1; knRemLosers += 1; knRemLoserTips += knBoard[i].Num; } knBoard.sort(function(a,b) {return a.Rand - b.Rand;}); var k = knSpots; for (i = 0; i < knPrize.length; i++) { for (j = 0; j < knPrize[i].Count; j++) { knBoard[--k].Name = knPrize[i].Name; knRemWinners += 1; knRemWinnerTips += knBoard[k].Num; } } knBoard.sort(function(a,b) {return a.Num - b.Num;}); kenoIsLoaded = true; kenoIsOn = true; cb.sendNotice(knIsStartedMsg.replace('[knMin]',knMin).replace('[knMax]',knMax)); } function knShuffle() { var i,j,tNum,tRand,tName; for (i = knBoard.length; i; i--) { j = Math.floor(Math.random() * i); tNum = knBoard[i - 1].Num; tRand = knBoard[i - 1].Rand; tName = knBoard[i - 1].Name; knBoard[i - 1].Num = knBoard[j].Num; knBoard[i - 1].Rand = knBoard[j].Rand; knBoard[i - 1].Name = knBoard[j].Name; knBoard[j].Num = tNum; knBoard[j].Rand = tRand; knBoard[j].Name = tName; } } function knCalculateMultipliers() { if (knPrize.length >= knSpots / 2) { return {min: 1, max: 1}; } cSp = knSpots * knFill / 100; cPz = knPrize.length; var cTa = cSp * cSp; var cTop0 = 1; var cTopH = 0; var cTopTa = 0; var ct0,ctH,ta; var ctR = 0; while (++ctR < 5) { for (ct0 = 1; ct0 < cSp; ct0++) { for (ctH = 0; ctH < cSp; ctH++) { ta = ct0 * cPz + (ctH * cPz / 2); if ((Math.abs(ta - cSp)) < (Math.abs(cTa - cSp))) { cTop0 = ct0; cTopH = ctH; cTopTa = ta; cTa = ta; } } } } return {min: cTop0, max: cTopH}; } function oneMinuteTimer() { timerCount++; if (timerCount % kenoTimer == 0 && knIsStarted) { cb.sendNotice(knIsStartedMsg.replace('[knMin]',knMin).replace('[knMax]',knMax)); } cb.setTimeout(oneMinuteTimer, 60000); } function shuffleCookies() { var i,j,t; for (i = fortuneCookies.length; i; i--) { j = Math.floor(Math.random() * i); t = fortuneCookies[i - 1]; fortuneCookies[i - 1] = fortuneCookies[j]; fortuneCookies[j] = t; } } function init() { loadSettings(); oneMinuteTimer(); shuffleCookies(); } var colors = {stpatrickgreen: "#004000", aliceblue: "#f0f8ff", antiquewhite: "#faebd7", aqua: "#00ffff", aquamarine: "#7fffd4", azure: "#f0ffff", beige: "#f5f5dc", bisque: "#ffe4c4", black: "#000000", blanchedalmond: "#ffebcd", blue: "#0000ff", blueviolet: "#8a2be2", brown: "#a52a2a", burlywood: "#deb887", cadetblue: "#5f9ea0", chartreuse: "#7fff00", chocolate: "#d2691e", coral: "#ff7f50", cornflowerblue: "#6495ed", cornsilk: "#fff8dc", crimson: "#dc143c", cyan: "#00ffff", darkblue: "#00008b", darkcyan: "#008b8b", darkgoldenrod: "#b8860b", darkgray: "#a9a9a9", darkgrey: "#a9a9a9", darkgreen: "#006400", darkkhaki: "#bdb76b", darkmagenta: "#8b008b", darkolivegreen: "#556b2f", darkorange: "#ff8c00", darkorchid: "#9932cc", darkred: "#8b0000", darksalmon: "#e9967a", darkseagreen: "#8fbc8f", darkslateblue: "#483d8b", darkslategray: "#2f4f4f", darkslategrey: "#2f4f4f", darkturquoise: "#00ced1", darkviolet: "#9400d3", deeppink: "#ff1493", deepskyblue: "#00bfff", dimgray: "#696969", dimgrey: "#696969", dodgerblue: "#1e90ff", firebrick: "#b22222", floralwhite: "#fffaf0", forestgreen: "#228b22", fuchsia: "#ff00ff", gainsboro: "#dcdcdc", ghostwhite: "#f8f8ff", gold: "#ffd700", goldenrod: "#daa520", gray: "#808080", grey: "#808080", green: "#008000", greenyellow: "#adff2f", honeydew: "#f0fff0", hotpink: "#ff69b4", indianred: "# cd5c5c", indigo: "# 4b0082", ivory: "#fffff0", khaki: "#f0e68c", lavender: "#e6e6fa", lavenderblush: "#fff0f5", lawngreen: "#7cfc00", lemonchiffon: "#fffacd", lightblue: "#add8e6", lightcoral: "#f08080", lightcyan: "#e0ffff", lightgoldenrodyellow: "#fafad2", lightgray: "#d3d3d3", lightgrey: "#d3d3d3", lightgreen: "#90ee90", lightpink: "#ffb6c1", lightsalmon: "#ffa07a", lightseagreen: "#20b2aa", lightskyblue: "#87cefa", lightslategray: "#778899", lightslategrey: "#778899", lightsteelblue: "#b0c4de", lightyellow: "#ffffe0", lime: "#00ff00", limegreen: "#32cd32", linen: "#faf0e6", magenta: "#ff00ff", maroon: "#800000", mediumaquamarine: "#66cdaa", mediumblue: "#0000cd", mediumorchid: "#ba55d3", mediumpurple: "#9370db", mediumseagreen: "#3cb371", mediumslateblue: "#7b68ee", mediumspringgreen: "#00fa9a", mediumturquoise: "#48d1cc", mediumvioletred: "#c71585", midnightblue: "#191970", mintcream: "#f5fffa", mistyrose: "#ffe4e1", moccasin: "#ffe4b5", navajowhite: "#ffdead", navy: "#000080", oldlace: "#fdf5e6", olive: "#808000", olivedrab: "#6b8e23", orange: "#ffa500", orangered: "#ff4500", orchid: "#da70d6", palegoldenrod: "#eee8aa", palegreen: "#98fb98", paleturquoise: "#afeeee", palevioletred: "#db7093", papayawhip: "#ffefd5", pbchnd: "#f5fffa", peachpuff: "#ffdab9", peru: "#cd853f", pink: "#ffc0cb", plum: "#dda0dd", powderblue: "#b0e0e6", purple: "#800080", rebeccapurple: "#663399", red: "#ff0000", rosybrown: "#bc8f8f", royalblue: "#4169e1", saddlebrown: "#8b4513", salmon: "#fa8072", sandybrown: "#f4a460", seagreen: "#2e8b57", seashell: "#fff5ee", sienna: "#a0522d", silver: "#c0c0c0", skyblue: "#87ceeb", slateblue: "#6a5acd", slategray: "#708090", slategrey: "#708090", snow: "#fffafa", springgreen: "#00ff7f", steelblue: "#4682b4", tan: "#d2b48c", teal: "#008080", thistle: "#d8bfd8", tomato: "#ff6347", turquoise: "#40e0d0", violet: "#ee82ee", wheat: "#f5deb3", white: "#ffffff", whitesmoke: "#f5f5f5", yellow: "#ffff00", yellowgreen: "#9acd32", plcolor: "#ff3333" }; var fortuneCookies = [ "Actions speak louder than words, Tip!" ,"A good man is hard to find, be good and try again :)" ,"A journey of a thousand smiles begins with a single tip" ,"A leopard cannot change its spots" ,"A little of what you fancy does you good" ,"All is fair in love and keno" ,"All publicity is good publicity - click that Thumbs-up!" ,"All talk and no tips makes Jack a dull boy" ,"All the world loves a lover - show some love by Tipping!" ,"All things come to those who wait - NOT!" ,"All you need is love, all I need is Tips!" ,"A man is known by his tips" ,"A man who is his own lawyer has a fool for his client" ,"A miss is as good as a mile, try again!" ,"An apple a day keeps the doctor away" ,"An ounce of tips is worth a pound of words" ,"A person is known by the tokens they don't keep - Tip!" ,"A person of beauty is a joy forever" ,"A place for everything and everything in its place" ,"A poor tipper always blames his tool" ,"A rising tide lifts all boats" ,"Ask a silly question and you'll get a silly answer" ,"Ask no questions, hear no lies - send no tips, see no show :)" ,"A stitch in time saves nine" ,"A token tipped is a token earned" ,"A volunteer is worth twenty draftees - a tipper is worth 1000 grays!" ,"A watched pot never boilsf - Tip!" ,"A woman's work is never done, so Tip!" ,"A word to the wise is enough - Tip!" ,"Barking dogs seldom bite" ,"Beauty is in the eye of the beholder - show is in the eye of the Tipper!" ,"Beggars should not be choosers - choosing is for Tippers!" ,"Better late than never - Tip now!" ,"Better safe than sorry - send Big Tips!" ,"Better to have tipped and lost than never to have tipped at all" ,"Brevity is the soul of wit" ,"Business before pleasure - Tip!" ,"Cowards die many deaths - they should Tip!" ,"Crime doesn't pay - just Tokens!" ,"Distance lends enchantment to the view - get closer by Tipping!" ,"Don't bite the hand that feeds you" ,"Don't put the cart before the horse - Tips precede Show!" ,"Don't rock the boat - tightwads make good bait!" ,"Don't sweat the small stuff" ,"Don't try to run before you can walk" ,"Easy come, easy go - send some tokens to help the show!" ,"Eat, tip and be merry, for tomorrow we die" ,"Empty hands make the most noise" ,"Every little helps - Tip!" ,"Every stick has two ends - there's no end to Tipping!" ,"Faint heart never won fair lady - show some appreciation!" ,"Fair exchange is not robbery" ,"Fight fire with tips!" ,"Fight the good fight - with a nice Tip!" ,"Fine words butter no parsnips - Tip!" ,"First come, first served - NOT! Tippers rule!" ,"Fish and tightwads smell after one hour" ,"For everything there is a season - now is the season to Tip!" ,"Forewarned is forearmed - tokens power the show!" ,"Forgive and forget - but don't forget to Tip!" ,"Fortune favours the brave - Cammers favor the Tipper!" ,"From the sublime to the ridiculous is only one tip" ,"Good fences make good neighbours - good tips make good shows!" ,"Good things come to those who Tip" ,"Go the extra mile - tip for a bigger smile!" ,"Hell hath no fury like a woman untipped" ,"He who hesitates is lost" ,"Home is where the tip is" ,"Honesty is the best policy - tipping is the best strategy" ,"Hope springs eternal - someone else MIGHT tip :(" ,"If a job is worth doing it is worth tipping well" ,"If at first you don't succeed, tip, tip, and tip again" ,"If life deals you lemons, send more Tips!" ,"If the shoe fits, tip!" ,"If wishes were tokens, grays would rule" ,"If you build it they will come - if you Tip it you will come" ,"If you can't beat em, Tip!" ,"If you can't be good, Tip!" ,"If you can't stand the heat, Tip!" ,"If you pay peanuts, you get monkeys" ,"It is best to be on the safe side - send Tokens!" ,"It is better to give than to receive" ,"It's an ill wind that blows no one any good" ,"It's better to have tipped and lost than never to have played at all" ,"It's better to tip and then receive" ,"It's never too late - Tip!" ,"It's the early tipper that catches the show" ,"Keep your chin up - and your tokens coming!" ,"Laughter is the best medicine" ,"Less is more - on Cammers!" ,"Look before you leap - Tip before you beg" ,"Love makes the world go round - show some love by Tipping!" ,"Make hay while the sun shines - send Tokens!" ,"Make love not war" ,"Man does not live by bread alone - send Tips to find out why!" ,"Many hands make light work - many Tips make Cammers work" ,"Mighty oaks from little tippers grow" ,"Money doesn't grow on trees - and Cammer's show is not free" ,"Money makes the world go round - tips make the Cammer turn round" ,"Money talks - Tippers rule!" ,"Never put off until tomorrow what you can do today - tip Now!" ,"No pain, no gain - no tips, no nips" ,"Nothing succeeds like success - and Tips!" ,"Nothing ventured, nothing gained - try Tipping!" ,"Patience is a virtue - not looking for virtue? send Tips!" ,"Patience is a virtue - all out of patience? send Tokens!" ,"People who live in glass houses shouldn't throw stones - they should Tip!" ,"Practice makes perfect - tip, repeat - tip, repeat..." ,"Seeing is believing - wanna see? Tip!" ,"See no evil, hear no evil, speak no evil - just Tip!" ,"Seize the day - send some Tokens!" ,"Talk is cheap - Tip!" ,"That which does not kill us makes us stronger" ,"The best things in life are free, just not on CB" ,"The bottom line is the bottom line - want to see it? Tip!" ,"The more the merrier - Tokens!" ,"There's no such thing as a free lunch - Tip!" ,"There's no time like the present - and no present like Tokens!" ,"Third time lucky - get lucky by Tipping!" ,"Those who live in glass houses shouldn't throw stones - they should Tip!" ,"Time and tide wait for no man - unlike Cammers :(" ,"Time is money" ,"To every thing there is a season - this is the season for Tipping!" ,"Tokens make the heart grow fonder" ,"To the tipper go the spoils" ,"Truth is stranger than fiction - don't be a stranger, Tip!" ,"Two tips are better than one" ,"Variety is the spice of life - wanna see some? Tip!" ,"What goes up must come down - wanna watch? send Tokens!" ,"When the going gets tough, the tough start Tipping!" ,"Where there's a will there's a Tip!" ,"While there's life there's a Tip!" ,"Wonders will never cease - tipping brings discoveries!" ,"Worrying never did anyone any good - only Tipping!" ,"You are never too old to tip!" ,"You can't get blood out of a stone - or a Gray" ,"You win some, you lose some - try again?" ]; var knTryAgainMsgs = [ "No prize, please try again :)" ,"No prize, next one for sure!" ,"No prize on that one, pick another?" ,"No prize, but odds just got better on the next one!" ,"No prize, but great ones are waiting to be picked!" ,"No prize - great ones remain, please try again" ,"No prize, don't be sad, try again!" ,"No prize, life is short, might as well try another :)" ,"Not a winner this time, try again?" ,"Plenty winners on the board, just not that one, sorry!" ,"Not a prize, try again?" ,"No prize won, don't give up?" ]; init(); /* all the best from pbchnd */
© Copyright Chaturbate 2011- 2025. All Rights Reserved.