Apps Home
|
Create an App
JinjoBot2
Author:
jinjobot_test
Description
Source Code
Launch App
Current Users
Created by:
Jinjobot_Test
/* Title: "JinjoBot Author: a_cutie123 Version: 1.0.0 (09/06/2018) */ var HEART = '\u2665'; // ♥ BDIAMOND = '\u2666'; // ♦ BSTAR = '\u2605'; // ★ var tip_amt = 0; var separator_char = "| "; var msg; var MAXITEMS=20; var tipmenuprice = []; var tipmenuitem= []; var MAXSEP = 9; var guessedNumbers = []; var winner = false; var amount; var strdash = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; var nl = '\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501'; var slugtimer = 2.5; var msg_prize; separators = [ {label:'Hearts',shortcut:':heart2'}, {label:'Glitter',shortcut:':pixelglitter'}, {label:'Flowers',shortcut:':tinyflower2'}, {label:'Bow',shortcut:':bluebow'}, {label:'Hearts2',shortcut:':pixelheart'}, {label:'Smiley',shortcut:':smile'}, {label:'Text Heart',shortcut:HEART}, {label:'Text Diamond',shortcut:BDIAMOND}, {label:'Text Star',shortcut:BSTAR}, ] cb.settings_choices = [ {name: 'chat_ad', type:'int', minValue: 1, maxValue: 999, defaultValue: 1, label: 'Delay in minutes between notice being displayed (minimum 1)'}, {name: 'sepchar', type: 'choice', choice1: 'Vertical Bar', choice2: 'Hearts', choice3:'Glitter',choice4:'Flowers',choice5:'Bow',choice6:'Hearts2',choice7:'Smiley',choice8:'Text Heart', choice9:'Text Diamond', choice10:'Text Star', defaultValue: 'Vertical Bar', label: "Separator character"}, {name:'item1', type:'str', label:'Item 1 (eg 10--flash tits)',}, {name:'item2', type:'str', required: false, label:'Item 2',}, {name:'item3', type:'str', required: false, label:'Item 3',}, {name:'item4', type:'str', required: false, label:'Item 4',}, {name:'item5', type:'str', required: false, label:'Item 5',}, {name:'item6', type:'str', required: false, label:'Item 6',}, {name:'item7', type:'str', required: false, label:'Item 7',}, {name:'item8', type:'str', required: false, label:'Item 8',}, {name:'item9', type:'str', required: false, label:'Item 9',}, {name:'item10', type:'str', required: false, label:'Item 10',}, {name:'item11', type:'str', required: false, label:'Item 11',}, {name:'item12', type:'str', required: false, label:'Item 12',}, {name:'item13', type:'str', required: false, label:'Item 13',}, {name:'item14', type:'str', required: false, label:'Item 14',}, {name:'item15', type:'str', required: false, label:'Item 15',}, {name:'item16', type:'str', required: false, label:'Item 16',}, {name:'item17', type:'str', required: false, label:'Item 17',}, {name:'item18', type:'str', required: false, label:'Item 18',}, {name:'item19', type:'str', required: false, label:'Item 19',}, {name:'item20', type:'str', required: false, label:'Item 20',}, {name:'noticecolor', type:'str', label:'Notice color (html code default magenta #cc0066)', defaultValue: '#cc0066'}, { name: 'roll_price', type: 'int', minValue: 1, label: 'How much do you want to charge per dice roll?', defaultValue: 24 }, { name: 'multirolls', type: 'int', minValue: 1, label: 'What is the maximum number of rolls you want a user to be able to make in a single tip? (set to 1 to disable) Example: If you set this to 3 and you charge 33 tokens per roll, a user could tip 66 for 2 rolls or 99 for 3 rolls. Any other tip amounts will be ignored.', defaultValue: 5 }, { name: 'notice_wait_time', type: 'choice', label: 'In minutes, how often should the app advertise itself?', choice1: 5, choice2: 10, choice3: 15, choice4: 20, choice5: 25, choice6: 30, choice7: 45, choice8: 60, defaultValue: 10 }, { name: 'change_room_subject', type: 'choice', label: 'Change room subject when using this bot?', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes' }, {name: 'prize_1', type: 'str', label: 'Prize for rolling 1', defaultValue: '.'}, {name: 'prize_2', type: 'str', label: 'Prize for rolling 2', defaultValue: 'Kudos'}, {name: 'prize_3', type: 'str', label: 'Prize for rolling 3', defaultValue: 'Mystery Chest'}, {name: 'prize_4', type: 'str', label: 'Prize for rolling 4', defaultValue: 'Change Underwear'}, {name: 'prize_5', type: 'str', label: 'Prize for rolling 5', defaultValue: 'Spank Ass x5'}, {name: 'prize_6', type: 'str', label: 'Prize for rolling 6', defaultValue: 'Just The Tip!'}, {name: 'prize_7', type: 'str', label: 'Prize for rolling 7', defaultValue: 'Lucky Chest'}, {name: 'prize_8', type: 'str', label: 'Prize for rolling 8', defaultValue: 'Suck Finger'}, {name: 'prize_9', type: 'str', label: 'Prize for rolling 9', defaultValue: 'Flash Ass'}, {name: 'prize_10', type: 'str', label: 'Prize for rolling 10', defaultValue: 'Spank Ass x10'}, {name: 'prize_11', type: 'str', label: 'Prize for rolling 11', defaultValue: 'Flash (your choice)'}, {name: 'prize_12', type: 'str', label: 'Prize for rolling 12', defaultValue: 'Flash Dick'}, {name: 'prize_13', type: 'str', label: 'Prize for rolling 13', defaultValue: '13 Body Rolls'}, {name: 'prize_14', type: 'str', label: 'Prize for rolling 14', defaultValue: '14 Push-ups'}, {name: 'prize_15', type: 'str', label: 'Prize for rolling 15', defaultValue: 'Spank Ass x15'}, {name: 'prize_16', type: 'str', label: 'Prize for rolling 16', defaultValue: 'Bend Over in Panties'}, {name: 'prize_17', type: 'str', label: 'Prize for rolling 17', defaultValue: 'Lotion Abs'}, {name: 'prize_18', type: 'str', label: 'Prize for rolling 18', defaultValue: 'Spread Ass'}, {name: 'prize_19', type: 'str', label: 'Prize for rolling 19', defaultValue: 'Finger Ass'}, {name: 'prize_20', type: 'str', label: 'Prize for rolling 20', defaultValue: 'Lotion Dick + Naked'}, {name: 'prize_21', type: 'str', label: 'Prize for rolling 21', defaultValue: 'Legendary Chest'}, {name: 'prize_22', type: 'str', label: 'Prize for rolling 22', defaultValue: 'Spank Ass x100'}, {name: 'prize_23', type: 'str', label: 'Prize for rolling 23', defaultValue: 'Secret Mystery Underwear'}, {name: 'guessPrize', type:'str', required: true, label:'Lucky Number Prize'}, {name: 'luckyNumber', type:'int', required: true, label:'Lucky Number'}, {name:'bj1', type:'str', required: false, label:'Bad Joke 1',}, {name:'bj2', type:'str', required: false, label:'Bad Joke 2',}, {name:'bj3', type:'str', required: false, label:'Bad Joke 3',}, {name:'bj4', type:'str', required: false, label:'Bad Joke 4',}, {name:'bj5', type:'str', required: false, label:'Bad Joke 5',}, {name:'bj6', type:'str', required: false, label:'Bad Joke 6',}, {name:'bj7', type:'str', required: false, label:'Bad Joke 7',}, {name:'bj8', type:'str', required: false, label:'Bad Joke 8',} ]; var roll_price = cb.settings.roll_price; var multiRolls = cb.settings.multirolls; var lastRollData = '--'; var rollCounter = 0; var tipCounter = 0; var winners = []; var lastNum = 0; //Used to prevent dice from resulting in the same prize twice consecutively var minimumRollsToGetRareDice = 10; var playerObj = {}; cb.onEnter(function (user) { msg = ""; var name = user['user'], status, msg = ""; if (user['in_fanclub']) { status = 'fan'; } else if (user['tipped_tons_recently']) { status = 'dark_purple'; } else if (user['tipped_alot_recently']) { status = 'light_purple'; } else if (user['tipped_recently']) { status = 'dark_blue'; } else if (user['has_tokens']) { status = 'light_blue'; } else { status = 'grey'; } switch (status) { case 'fan': createPlayer( name ); if (playerObj[name].loginReceived === false) { playerObj[name].loginReceived = true; awardItem( name,'free',1,false ); awardItem( name,'kudos',1,false ); awardItem( name,'kudos',1,false ); } msg += "Welcome back, " + name + "! :heart2 Here are your free rewards you can receive daily as a member of my fanclub!\n"; msg += "Tip 24 tokens to roll the dice! Maximum rolls per tip: 5 (tip 120 tokens). Get a Free Dice Roll if you roll 5 dice!\n"; msg += "Type '!help dice' for more information about the dice rolls."; break; case 'light_purple': case 'dark_purple': msg += "Tip 24 tokens to roll the dice! Maximum rolls per tip: 5 (HINT: tip 120 tokens and get a free 6th dice roll).\n"; msg += "Type '!help dice' for more information about the dice rolls.\n"; msg += "Type '!help' to learn more about my room.\n"; break; case 'dark_blue': msg += "Tip 24 tokens to roll the dice! Maximum rolls per tip: 5 (HINT: tip 120 tokens and get a free 6th dice roll).\n"; msg += "Type '!help dice' for more information about the dice rolls."; msg += "Type '!help' to learn more about my room.\n"; case 'light_blue': msg += "Tip 24 tokens to roll the dice! Maximum rolls per tip: 5 (HINT: tip 120 tokens and get a free 6th dice roll).\n"; msg += "Type '!help dice' for more information about the dice rolls."; msg += "Type '!help' to learn more about my room.\n"; break; case 'grey': msg += "Welcome to my room, " + name + "! I like to have a good time, so feel free to stick around and join in!\n"; msg += "Type '!help class' to see the items you can win by tipping 5 tokens!\n"; msg += "Type '!help' to learn more about my room!\n"; msg += "Feel free to chat, but please the follow the room rules or you will be silenced."; break; } if ((status !== 'fan') && (status !== 'grey')) { msg += "Join my fanclub for 80 tks a month and receive 2 Kudos and 1 Free Dice Roll (84 tks value) every day you log in!"; } print(msg,name); showMenu( name ); if (playerObj[name]) { playerObj[name].inRoom = true; } return; }); cb.onLeave(function (user) { var name = user['user']; if (playerObj[name]) { playerObj[name].inRoom = false; } return; }); cb.onTip(function (tip) { tip_amt=parseInt(tip['amount']); name = tip['from_user']; fan = tip['from_user_in_fanclub']; forMenu = false; tipHearts(name,tip_amt); createPlayer(name); k = playerObj[name].kudos; tippedFor = ""; msg = tip['message'].toLowerCase(); if ((msg === "kudos") && (k >= 1)) { for (var i = 1; i <= MAXITEMS; i++) { if ((tipmenuprice[i] > 30) && (tipmenuprice[i] < 100)) { if (tip_amt + 30 == tipmenuprice[i]) { cb.sendNotice(name + ' tipped for ' + tipmenuitem[i],'','',cb.settings['noticecolor'],'bold'); removeItem( name,'kudos',1,false ); tippedFor = tipmenuitem[i]; forMenu = true; } } else if (tipmenuprice[i] >= 100) { if (tip_amt + 50 == tipmenuprice[i]) { cb.sendNotice(tip['from_user'] + ' tipped for ' + tipmenuitem[i],'','',cb.settings['noticecolor'],'bold'); removeItem( name,'kudos',1,false ); tippedFor = tipmenuitem[i]; forMenu = true; } } else { if (tip_amt == tipmenuprice[i]) { cb.sendNotice(tip['from_user'] + ' tipped for ' + tipmenuitem[i],'','',cb.settings['noticecolor'],'bold'); tippedFor = tipmenuitem[i]; forMenu = true; } } } } else { for (var i = 1; i <= MAXITEMS; i++) { if (tip_amt == tipmenuprice[i]) { cb.sendNotice(tip['from_user'] + ' tipped for ' + tipmenuitem[i],'','',cb.settings['noticecolor'],'bold'); tippedFor = tipmenuitem[i]; forMenu = true; } } } if (!(forMenu)) { if (tip_amt === cutieChest.price) { purchaseChest( name ); } } if (tippedFor === "Spank Ass x20") { msg2 = spankMultiplier( name,20 ); if (msg2) { cb.sendNotice(msg2,'','',cb.settings['noticecolor'],'bold'); } } if (tippedFor === "Bad Joke") { if (badJokes.length > 0) { print(badJokes[0]); badJokes.shift(); } } if (tippedFor === "Play Cards Against Humanity") { cardsSignup( name ); } if ((tip_amt === 20) && (CardGame.pointsNeeded > 0) && (CardGame.winner !== '')) { continueGame(); } if (tip_amt === 5) { if (msg.indexOf('pirate') !== -1) { changeClass(name, 'pirate',fan); } else if (msg.indexOf('succubus') !== -1) { changeClass(name, 'succubus',fan); } else if (msg.indexOf('demigod') !== -1) { changeClass(name, 'demigod',fan); } else { if (chance( 0.33)) { changeClass(name, 'pirate',fan); } else if (chance( 0.5)) { changeClass(name, 'succubus',fan); } else { changeClass(name, 'demigod',fan); } } } if (!(forMenu)) { // check to see if tip was for a dice roll if ((tip_amt) >= roll_price && (tip_amt <= 120) && (tip_amt % roll_price == 0)) { var numberOfRolls = (Math.floor((tip_amt) / roll_price)); var excl = [lastNum], add = 0; for (var i = 0; i < numberOfRolls; i++) { add = roll(name, false, excl); excl.push(add); } lastRoller = name; lastNum = add; tippedFor = "Dice"; switch (numberOfRolls) { case 1: if (chance(0.34)) { awardItem(name,"kudos",1,false); } else if (chance(0.02)) { awardItem(name,"free",1,false); } else if (chance(0.015)) { awardItem(name,"heart",1,false); } break; case 2: if (chance(0.045)) { awardItem(name,"free",1,false); } else if (chance(0.75)) { awardItem(name,"kudos",1,false); } else if (chance(0.65)) { awardItem(name,"heart",1,false); awardItem(name,"heart",1,false); } break; case 3: awardItem(name,"kudos",1,false); if (chance(0.05)) { awardItem(name,"free",1,false); } break; case 4: awardItem(name,"kudos",1,false); if (chance(0.15)) { awardItem(name,"free",1,false); } break; case 5: awardItem(name,"free",1,false); if (chance(0.18)) { awardItem(name,"kudos",1,false); } break; } } } var freeRollChance = 0.025; if (playerObj[name].tipped < 1) { freeRollChance = 0.25; } playerObj[name].tipped += tip_amt; if ((tip_amt >= 30) && (forMenu) && (chance(freeRollChance))) { awardItem( name,'free',1,false ); } else if ((tippedFor === "Flash Ass") || (tippedFor === "Flash Dick") || (tippedFor === "Flash Feet")) { rewardOut( 'pirate','kudos',0.45,1,name ); } else if (tippedFor === "Dice") { rewardOut( 'demigod','free',0.18,1,name ); } else if (tip_amt >= 100) { rewardOut( 'succubus','heart',0.75,4,name ); } else if (tip_amt >= 40) { rewardOut( 'succubus','heart',0.4,2,name ); } else if (tip_amt >= 15) { rewardOut( 'succubus','heart',0.25,1,name ); } cb.drawPanel(); showLoot(name,false); illegalChestPrices.push(tip_amt); var minNumber = 10; var maxNumber = 129; var found = false; if (winner != true) { if (tip.amount == cb.settings.luckyNumber) { print("\n" + strdash + "\n :woohoo \n You have guessed the Lucky number !!!\n " + name + " wins " + cb.settings.guessPrize); print("Lucky Number: " + tip.amount + "\n" + strdash); winner = true; } else { if (guessedNumbers.indexOf(tip.amount) === -1 && tip.amount <= maxNumber && tip.amount >= minNumber) { updateBoard(); if (tippedFor !== "Dice") { print(strdash + "\nNot the lucky number - keep guessing\n" + strdash); drawBoard(); } guessedNumbers.push(tip.amount); guessedNumbers.sort(function(a,b){ return a-b; }); } } } else { return; } }); cb.onMessage(function (input) { command = ''; name = input['user']; msg = input['m']; if (msg[0] !== '!') { //it's a regular message, handle it as such: if (playerObj[name]) { switch (playerObj[name].class) { case 'none': return input; break; case 'pirate': case 'succubus': case 'demigod': input['m'] = speakChange(input['m'], playerObj[name].class); break; } if (playerObj[name].heart > 0) { input['m'] = ('[' + playerObj[name].heart + '] ' + input['m'] ); if (name === king) { input['m'] = ':heart2 ' + input['m']; } } } return input; } else { br = input['m'].indexOf(' '); if (br === -1) { command = input['m'].slice(1); target = "no one" } else { command = input['m'].slice(1, br); target = input['m'].slice(br + 1); } command = command.toLowerCase(); } if ((input['user'] == cb.room_slug)) { switch (command) { case "kiss": awardItem( target,"kudos",1,false ); break; case "free": awardItem( target,"free",1,false ); break; case "heart": awardItem( target,"heart",1,false ); break; case "welcome": print( ":welcome10 " + target, target); input['X-Spam'] = true; break; case "rules": showRules(name); input['X-Spam'] = true; break; case "notif": showNotifier( target ); input['X-Spam'] = true; break; case "shirt": if (target === 'off') { clothes.shirt = false; print("Model's shirt is off",name) } if (target === 'on') { clothes.shirt = true; print("Model's shirt is on",name) } input['X-Spam'] = true; break; case "pants": if (target === 'off') { clothes.pants = false; print("Model's pants are off",name) } if (target === 'on') { clothes.pants = true; print("Model's pants are on",name) } input['X-Spam'] = true; break; case "underwear": if (target === 'off') { clothes.underwear = false; print("Model's underwear is off",name) } if (target === 'on') { clothes.underwear = true; print("Model's underwear is on",name) } input['X-Spam'] = true; break; case "menu": showMenu( '' ); input['X-Spam'] = true; break; case "dice": print( 'Tip 24 tks to roll the dice! \n Tip 120 tokens to roll the dice 5 times and get a 6th roll free!'); input['X-Spam'] = true; break; case "follow": print( ':FollowCandy'); input['X-Spam'] = true; break; case "class": print( "Tip 5 tokens to become a Demigod, Succubus, or Pirate! \n Type '!help class' to learn more!" ); input['X-Spam'] = true; break; case "signups": cardsSignup( name ); input['X-Spam'] = true; break; case "start": loadCards(); input['X-Spam'] = true; break; case "next": showRound(); input['X-Spam'] = true; break; case "finish": endGame(); input['X-Spam'] = true; break; case "pick": pickWinner( target ); input['X-Spam'] = true; break; } } else { //general commands switch (command) { case "help": showHelp(name,target.toLowerCase()); input['X-Spam'] = true; break; case "rules": showRules(name); input['X-Spam'] = true; break; case "loot": showLoot(name,true); input['X-Spam'] = true; break; case "board": drawBoard(name); input['X-Spam'] = true; break; case "freeroll": if (playerObj[name].free > 0) { removeItem( name,"free",1,false ); roll(name,true,[lastNum]); showLoot(name,false); } else { print( "You don't have any free rolls available!",name ); input['X-Spam'] = true; } break; case "join": joinGame( name ); input['X-Spam'] = true; break; case "pick": selectCard( name,target ); input['X-Spam'] = true; break; case "hand": showHand( name ); input['X-Spam'] = true; break; case "even": if (playerObj[name].class === "demigod") { print( "You used your demigod powers to make all your dice rolls result in even sums!",name ); playerObj[name].dice = 'even'; } else { print( "You must be a demigod to use that ability!",name ); } input['X-Spam'] = true; break; case "odd": if (playerObj[name].class === "demigod") { print( "You used your demigod powers to make all your dice rolls result in odd sums!",name ); playerObj[name].dice = 'odd'; } else { print( name,"You must be a demigod to use that ability!" ); } input['X-Spam'] = true; break; case "heart": if (playerObj[name].class === "succubus") { var amt = parseInt(target), hit = false; for (var i = 1; i <= MAXITEMS; i++) { if (amt == tipmenuprice[i]) { print( name + ' (the ' + playerObj[name].classTranslation + ') used ' + amt + ' Heart Pieces in place of a tip!'); print( name + ' tipped for !' + tipmenuitem[i]); hit = true; } } if (hit) { awardItem( name,'heart',Math.floor(amt * 0.1 * getLevel(name),true )); removeItem( name,'heart',amt,false ); showLoot( name,false ); } else { print( 'You must be a Succubus to trade in Heart Pieces for menu items!',name ); } } input['X-Spam'] = true; break; } } return input; }); function createPlayer(target) { if (!(playerObj[target])) { playerObj[target] = {}; playerObj[target].kudos = 0; playerObj[target].free = 0; playerObj[target].heart = 0; playerObj[target].dicerolled = 0; playerObj[target].tipped = 0; playerObj[target].class = ''; playerObj[target].classTranslation = ''; playerObj[target].dice = 'normal'; //for demigod, can be even, odd, or normal playerObj[target].loginReceived = false; playerObj[target].inRoom = true; playerObj[target].needsAmount = { 'kudos': false, 'free': false, 'heart': false }; } return; } function changeClass(target, type, fan) { createPlayer(target); var heartBottom = 5, placeholder; if (fan) { heartBottom = 15; } playerObj[target].class = type; placeholder = Math.max(Math.ceil(playerObj[target].heart/2), heartBottom); playerObj[target].heart = 0; awardItem( target,'heart',placeholder,true ); if (type === 'pirate') { playerObj[target].classTranslation = 'Plundering Pirate'; cb.sendNotice( target + " has become a Plundering Pirate!", '', '#cc0066', '#ffffff', 'bold'); cb.sendNotice( ":pirate", target); cb.sendNotice( "Ye have chosen to walk the path of a Plundering Pirate, now get that booty! Whenever ye demand slaps ye gets more than ye bargained for, and ye also may get some free Kudos whenever somebooty else asks for a flash!", target, '', cb.settings['noticecolor'],'bold'); } if (type === 'succubus') { playerObj[target].classTranslation = 'Friendly Neighborhood Succubus'; cb.sendNotice( target + " has become a Friendly Neighborhood Succubus!", '', '#cc0066', '#ffffff', 'bold'); cb.sendNotice( ":succubus", target); cb.sendNotice( "You are the Friendly Neighborhood Succubus! Now, let your demons out! You can trade in Heart Pieces for Tip Menu items, and you may feed on the lust of others and collect Heart Pieces whenever anyone else drops a tip!", target, '', cb.settings['noticecolor'],'bold'); } if (type === 'demigod') { playerObj[target].classTranslation = 'Deranged Demigod'; cb.sendNotice( target + " has become a Deranged Demigod!", '', '#cc0066', '#ffffff', 'bold'); cb.sendNotice( ":statue002", target); cb.sendNotice( "You're the Deranged Demigod! And that means you don't care what anyone thinks, you just want CUM. You can control your dice to only get !odd or !even results, and you may get free dice rolls whenever anyone else tries their luck!", target, '', cb.settings['noticecolor'],'bold'); } playerObj[target].needsAmount['heart'] = true; } function awardItem(target, item, number, silent) { createPlayer(target); if (!(number)) { number = 1; } if ((playerObj[target].class === 'succubus') && (item === 'heart')) { number = Math.ceil(number * 1.4); } playerObj[target][item] = Math.floor(playerObj[target][item] + number); var amt = (number === 1 ? "a" : number); var plural = (number === 1 ? "" : "s"); if (!(silent)) { playerObj[target].needsAmount[item] = true; if (item === "kudos") { msg = (target + ' received ' + amt + ' Kudos!') } else if (item === "free") { msg = (target + ' received ' + amt + ' Free Dice Roll' + plural + '!') } else if (item === "heart") { msg = (target + ' received ' + amt + ' Heart Piece' + plural + '!') } cb.sendNotice(msg, '', '#00a395', '#ffffff', 'bold'); } if (item === 'heart') { heartPiecesTotal += number; getKing( target ); } } function removeItem(target, item, silent) { createPlayer(target); playerObj[target][item] -= 1; playerObj[target].needsAmount[item] = true; if (!(silent)) { if (item === "kudos") { msg = (target + ' used a Kudos!') } else if (item === "free") { msg = (target + ' used a Free Dice Roll') } else if (item === "heart") { msg = (target + ' used a Heart Piece!') } cb.sendNotice(msg, '', '#00a395', '#ffffff', 'bold'); return msg; } } function showAmount(target, item) { amt = playerObj[target][item]; if (amt > 0) { if (item === "kudos") { cb.sendNotice( "You have " + amt + " Kudos [Type 'Kudos' in tip message to get a 30 tk off a menu item! 50 tks off of items of at least 100 tks!]", target, '', cb.settings['noticecolor'],'bold'); } if (item === "free") { cb.sendNotice( "You have " + amt + " Free Dice Roll(s) [type !Freeroll to roll the dice].", target, '', cb.settings['noticecolor'],'bold'); } if (item === "heart") { cb.sendNotice( "You have " + amt + " :heart2.", target, '', cb.settings['noticecolor'],'bold'); } } else { if (item === "kudos") { cb.sendNotice( "You are out of Kudos!.", target, '', cb.settings['noticecolor'],'bold'); } if (item === "free") { cb.sendNotice( "You are out of Free Dice Rolls!", target, '', cb.settings['noticecolor'],'bold'); } if (item === "heart") { cb.sendNotice( "You are out of Heart Pieces!", target, '', cb.settings['noticecolor'],'bold'); } } } function showLoot(target,showAll) { var items = ['kudos', 'free', 'heart']; for (var a in items) { if (playerObj[name].needsAmount[items[a]] || showAll) { showAmount( name,items[a] ); playerObj[name].needsAmount[items[a]] = false; } } } function chatAd() { if (chance(0.24)) { showMenu(''); createChest(); cb.setTimeout(chatAd, (cb.settings.chat_ad * 60000)); return; } var msg, i = 0; var items = [ ":diceeee \n Tip 24 tks to roll the 9-sided dice! \n Win a Flash (Ass - 9, Dick - 12, your choice - 11). \n Type '!help dice' to see more information! or '!help prizes' to see a list of prizes! \n (HINT: Tip 5 tokens to become a demigod and get free dice rolls! Type '!help class' for more information!", "Type '!help' to learn about my room! \n Type '!rules' to see the rules! \n :FollowCandy", ":tipifyou \n :FollowCandy", ":a_cutie123piecesofass", ":fanclubMOW \n Type '!help fanclub' to learn about what you can get!", ":pikachupull", ":tipifyou \n :FollowCandy", ":diceeee \n Tip 24 tks to roll the 9-sided dice! \n Win a Flash (Ass - 9, Dick - 12, your choice - 11). \n Type '!help dice' to see more information! or '!help prizes' to see a list of prizes! \n (HINT: Tip 5 tokens to become a demigod and get free dice rolls! Type '!help class' for more information!", ":diceeee \n Tip 24 tks to roll the 9-sided dice! \n Win a Flash (Ass - 9, Dick - 12, your choice - 11). \n Type '!help dice' to see more information! or '!help prizes' to see a list of prizes! \n (HINT: Tip 5 tokens to become a pirate and get more from Lucky Chests and Legendary Chests! Type '!help class' for more information!" ]; show++; if (show >= notifications.length) { show -= notifications.length; } showNotifier( show ); i = Math.floor(Math.random() * items.length); msg = items[i]; //print(msg); createChest(); cb.setTimeout(chatAd, (cb.settings.chat_ad * 60000)); return; } cb.setTimeout(chatAd, (cb.settings.chat_ad * 60000)); function showNotifier( number ) { var showNotif; if ((isNaN(number))) { showNotif = 1; } else { showNotif = parseInt(number); } showNotif--; //this is so the counting starts at 1 from the front end if ((showNotif > notifications.length) || (showNotif < 0)) { showNotif = 0; } getNotification( showNotif ); //cb.setTimeout( showNotifier( showNotif + 2), (cb.settings.chat_ad * 60000 * 100000000)); return; } function getNotification( number ) { switch (notifications[number]) { case 'dice1': print( ":diceeee \n Tip 24 tks to roll the 9-sided dice! \n Win a Flash (Ass - 9, Dick - 12, your choice - 11). \n Type '!help dice' to see more information! or '!help prizes' to see a list of prizes!" ); break; case 'dice2': print( ":diceeee \n Tip 24 tks to roll the 9-sided dice! \n Win a Lucky Chest with a roll of 7! Roll the 14-sided dice to win amazing prizes! \n Type '!help dice' to see more information! or '!help prizes' to see a list of prizes!" ); break; case 'flash1': sendToGroup( ":pikachupull \n Tip 66 tokens to see dick, or 44 to see ass! \n Type '!help tipmenu' to see the rest!", ['dark_blue', 'light_purple', 'dark_purple'] ); sendToGroup( ":pikachuKiss ", ['light_blue'] ); print( ":FollowCandy" ); break; case 'flash2': sendToGroup( ":pikachupull \n Tip 44 tokens to see see ass, or 22 to see feet! \n Type '!help tipmenu' to see the rest!", ['dark_blue', 'light_purple', 'dark_purple'] ); sendToGroup( ":pikachuKiss ", ['light_blue'] ); print( ":FollowCandy" ); break; case 'help': print( "Type '!help' to learn about my room! \n Type '!rules' to see the rules! \n :FollowCandy" ); break; case 'tipifyou1': print( ":tipifyou" ); break; case 'tipifyou2': sendToGroup( ":tipifyou", ['dark_blue', 'light_purple', 'dark_purple'] ); sendToGroup( ":Tipsshow919 ", ['light_blue'] ); break; case 'photos': sendToGroup( ":a_cutie123piecesofass ", ['dark_blue', 'light_purple', 'dark_purple'] ); sendToGroup( ":pikachuKiss ", ['light_blue'] ); break; case 'fanclub': print( ":fanclubMOW \n Type '!help fanclub' to learn about what you can get!" ); break; } } function showRules(name) { msg = "Room Rules: "; msg += "- Be respectful to the model and other members of the room.\n"; msg += "- No excessive graphics in public chat (pm is ok).\n"; msg += "- No hate speech.\n"; msg += "- No demands (if you want something not on the tip menu, I may do it if you tip a reasonable amount for it).\n"; msg += "- No advertising other rooms.\n"; msg += "- Type '!help' to see more general help."; if (name === cb.room_slug) { name = ''; } print( msg,name ); } function showHelp(target,data) { msg = ""; if (data === 'pirate') { msg = "Plundering Pirate: \n"; msg += "- It's all about that booty.\n"; msg += "- LEVEL 1: +50% spanks when tipped for/rolled.\n"; msg += "- LEVEL 2: +100% spanks when tipped for/rolled.\n"; msg += "- LEVEL 3: +150% spanks when tipped for/rolled.\n"; msg += "- LEVEL 4: +200% spanks when tipped for/rolled.\n"; msg += "- LEVEL 5: +400% spanks when tipped for/rolled.\n"; msg += "- Chance to collect a Kudos whenever someone else tips for a flash.\n"; msg += ("Levels are 5 Heart Pieces (1) 15 Heart Pieces (2) 25 Heart Pieces (3) 45 Heart Pieces (4) 100 Heart Pieces (5)"); print( msg,target ); } else if (data === 'succubus') { msg = "Friendly Neighborhood Succubus: \n"; msg += "- A sadistic lover.\n"; msg += "- Can use !heart [number] to use heart pieces in place of a tokens for a tip menu item.\n" msg += "- LEVEL 1: Retains 10% of Heart Pieces spent while using !heart.\n"; msg += "- LEVEL 2: Retains 20% of Heart Pieces spent while using !heart.\n"; msg += "- LEVEL 3: Retains 30% of Heart Pieces spent while using !heart.\n"; msg += "- LEVEL 4: Retains 40% of Heart Pieces spent while using !heart.\n"; msg += "- LEVEL 5: Retains 50% of Heart Pieces spent while using !heart.\n"; msg += "- Collects Heart Pieces at 40% faster than the usual rate.\n"; msg += "- Chance to collect a Heart Pieces whenever someone else tips.\n"; msg += ("Levels are 5 Heart Pieces (1) 15 Heart Pieces (2) 25 Heart Pieces (3) 45 Heart Pieces (4) 100 Heart Pieces (5)"); print( msg,target ); } else if (data === 'demigod') { msg = "Deranged Demigod: \n"; msg += "- A perverted little imp.\n"; msg += "- LEVEL 1: Very slightly increased chance to roll a 14 while rolling the dice.\n"; msg += "- LEVEL 2: Slightly increased chance to roll a 14 while rolling the dice.\n"; msg += "- LEVEL 3: Somewhat increased chance to roll a 14 while rolling the dice.\n"; msg += "- LEVEL 4: Decently increased chance to roll a 14 while rolling the dice.\n"; msg += "- LEVEL 5: Significantly increased chance to roll a 14 while rolling the dice.\n"; msg += "- Can use !odd or !even to make sure that their dice rolls result in an odd or even sum.\n"; msg += "- Chance to collect a Free Dice Roll whenever someone else rolls the dice.\n"; msg += ("Levels are 5 Heart Pieces (1) 15 Heart Pieces (2) 25 Heart Pieces (3) 45 Heart Pieces (4) 100 Heart Pieces (5)"); print( msg,target ); } else if (data === 'class') { if ((!playerObj[target]) || (playerObj[target].class === 'none')) { print( "You currently do not have a class! Tip 5 tokens and put the word 'pirate', 'demigod', or 'succubus' in your tip note to to cast a spell on yourself and become one!\n Type !help pirate, !help succubus, and !help demigod to see what they do.",target ); return; } msg = playerObj[target].classTranslation + ": \n"; if (playerObj[target].class === 'pirate') { msg += "*** The Plundering Pirate: \n"; msg += "Whenever you tip for spanks, you will get more spanks than usual!\n"; msg += "You can also obtain Kudos whenever someone else tips for a flash!\n"; } else if (playerObj[target].class === 'succubus') { msg += "*** The Friendly Neighborhood Succubus: \n"; msg += "You can use Heart Pieces in place of tokens to tip the model! Type !heart [number] to do so.\n"; msg += "You obtain Heart Pieces faster, and when you use them with !heart you retain a percentage of the ones spent.\n"; msg += "You can also obtain Heart Pieces whenever someone else tips!\n"; } else if (playerObj[target].class === 'demigod') { msg += "*** The Deranged Demigod: \n"; msg += "Use !odd or !even to choose whether you want the sum of your dice to come up as even or odd!\n"; msg += "You have an increased chance of rolling 14 on the dice roll!\n"; msg += "You can also obtain a Free Dice Roll whenever someone else rolls the dice!\n"; } msg += ("Levels are 5 Heart Pieces (1) 15 Heart Pieces (2) 25 Heart Pieces (3) 45 Heart Pieces (4) 100 Heart Pieces (5)\n"); msg += ("You are currently Level " + getLevel(target) + ".\n"); msg += ("Type !help " + playerObj[target].class + " to see more details."); print( msg,target ); } else if (data === 'dice') { msg = "These are no ordinary dice; you can roll between a 1-9 on either die to get a variety of sums! You can roll the 14-sided die with extreme luck!\n"; msg += "Tip " + roll_price + " tokens to roll the dice!\n"; msg += "You can roll a maximum of 5 times in a single tip (" + (5*roll_price) + " tokens). \n"; msg += "If you roll 5 dice, you win a 6th dice roll for free!\n"; msg += "Type !help prizes to see the list of prizes."; print( msg,target ); } else if (data === 'prizes') { msg = "### PRIZES: " for (var i = 1; i <= 23; i++) { if (prizes.indexOf(cb.settings['prize_' + i]) >= 0) msg += "\nRoll " + i + " - " + cb.settings['prize_' + i]; } print( msg,target ); } else if (data === 'tipmenu') { showMenu(target); } else if (data === 'fanclub') { msg = "Joining my fanclub is fun and easy! It can save you lots of tokens too!\n"; msg += "Benefits include: \n"; msg += "- 2 Kudos on login (once per day).\n"; msg += "- 1 Free Dice Roll on login (once per day).\n"; msg += "- 15 Heart Pieces instead of 5 when you pick a class.\n"; msg += "- A special welcome message when you enter.\n"; msg += "- Name announced on entry/leave."; print( msg,target ); } else { msg = "Useful commands: \n"; msg += "!help dice to see the dice.\n"; msg += "!help tipmenu to see the tip menu.\n"; msg += "!help class to learn about the classes you can use in my room.\n"; msg += "!help fanclub to learn about my fanclub."; print( msg,target ); } } function print(msg,target) { cb.sendNotice( msg, target, '', cb.settings['noticecolor'],'bold'); return; } function sendToGroup(msg,target) { cb.sendNotice( msg, '', '', cb.settings['noticecolor'],'bold',target); return; } function roll( username,free,excl ) { rollCounter++; total = 0; while ((excl.indexOf(total) !== -1) || (total < 2) || (demigodDice( username,total ))) { var die1 = Math.floor(Math.random() * 9) + 1; var die2 = Math.floor(Math.random() * 9) + 1; // see if there's a chance we can roll a rare die if (rollCounter > minimumRollsToGetRareDice) { if (chance(rareDice(username))) { die1 = 14; } } var total = die1 + die2; var winner = false; } if (total >= 1) { winner = true; var prize = cb.settings['prize_' + total]; } else { winner = false; var prize = 'A Thank You!'; } var msg = toDiePrefix(die1) + " " + toDiePrefix(die2) + "\n"; if (total > 17) { msg += (username + " rolled a " + total + "!!!! \n").toUpperCase(); } else { msg += username + " rolled a " + total + "! \n"; } msg += "Roll #" + rollCounter + " | Prize: " + prize; var textColor = '#FFFFFF'; var bgColor = '#0000FF'; cb.sendNotice(msg, '', bgColor, textColor, 'bold'); var msg2 = false; switch (prize) { case "Spank Ass x5": msg2 = spankMultiplier(username,5); if (msg2) { cb.sendNotice(msg2, '', '',cb.settings['noticecolor'],'bold'); } break; case "Spank Ass x10": msg2 = spankMultiplier(username,10); if (msg2) { cb.sendNotice(msg2, '', '',cb.settings['noticecolor'],'bold'); } break; case "Spank Ass x15": msg2 = spankMultiplier(username,15); if (msg2) { cb.sendNotice(msg2, '', '',cb.settings['noticecolor'],'bold'); } break; case "Spank Ass x100": msg2 = spankMultiplier(username,100); if (msg2) { cb.sendNotice(msg2, '', '',cb.settings['noticecolor'],'bold'); } break; case "Kudos": awardItem( username,"kudos",1,false ); break; case "Mystery Chest": if (chance(0.25)) { msg2 = "The Mystery Chest contained a change in underwear!"; cb.sendNotice(msg2, '', bgColor, textColor, 'bold'); } else if (chance(0.35)) { msg2 = "The Mystery Chest contained an ass spank!"; cb.sendNotice(msg2, '', bgColor, textColor, 'bold'); } else if (chance(0.35)) { msg2 = "The Mystery Chest contained 5 Heart Pieces!"; cb.sendNotice(msg2, '', bgColor, textColor, 'bold'); awardItem( username,"heart",5,false ); } else { msg2 = "The Mystery Chest contained a Kudos!"; cb.sendNotice(msg2, '', bgColor, textColor, 'bold'); awardItem( username,"kudos",1,false ); } if (playerObj[username].class === 'pirate') { msg2 = username + ' (the Plundering Pirate) found extra loot in the Chest!'; cb.sendNotice(msg2, '', bgColor, textColor, 'bold'); awardItem( username,"free",1,false ); awardItem( username,"kudos",1,false ); } break; case "Lucky Chest": msg2 = "The Lucky Chest contained two Free Dice Rolls!!"; cb.sendNotice(msg2, '', bgColor, textColor, 'bold'); awardItem( username,"free",1,false ); awardItem( username,"free",1,false ); if (chance(0.45)) { msg2 = "The Lucky Chest also contained a Kudos!"; cb.sendNotice(msg2, '', bgColor, textColor, 'bold'); awardItem( username,"kudos",1,false ); } else if (chance(0.18)) { msg2 = "The Lucky Chest also contained two Kudos!"; cb.sendNotice(msg2, '', bgColor, textColor, 'bold'); awardItem( username,"kudos",1,false ); awardItem( username,"kudos",1,false ); } if (playerObj[username].class === 'pirate') { msg2 = username + ' (the Plundering Pirate) found extra loot in the Chest!'; cb.sendNotice(msg2, '', bgColor, textColor, 'bold'); awardItem( username,"free",1,false ); awardItem( username,"kudos",1,false ); } break; case "Legendary Chest": if (chance(0.65)) { msg2 = "The Legendary Chest contained FIVE FREE DICE ROLLS!!"; cb.sendNotice(msg2, '', bgColor, textColor, 'bold'); awardItem( username,"free",1,false ); awardItem( username,"free",1,false ); awardItem( username,"free",1,false ); awardItem( username,"free",1,false ); awardItem( username,"free",1,false ); msg2 = "The Legendary Chest also contained two kudos!!"; cb.sendNotice(msg2, '', bgColor, textColor, 'bold'); awardItem( username,"kudos",1,false ); awardItem( username,"kudos",1,false ); awardItem( username,"heart",20,false ); } else if (chance(0.55)) { msg2 = "The Legendary Chest contained SIX FREE DICE ROLLS!!"; cb.sendNotice(msg2, '', bgColor, textColor, 'bold'); awardItem( username,"free",1,false ); awardItem( username,"free",1,false ); awardItem( username,"free",1,false ); awardItem( username,"free",1,false ); awardItem( username,"free",1,false ); awardItem( username,"free",1,false ); msg2 = "The Legendary Chest also contained three kudos!!"; cb.sendNotice(msg2, '', bgColor, textColor, 'bold'); awardItem( username,"kudos",1,false ); awardItem( username,"kudos",1,false ); awardItem( username,"kudos",1,false ); awardItem( username,"heart",20,false ); } else { msg2 = "The Legendary Chest contained SEVEN FREE DICE ROLLS!!"; cb.sendNotice(msg2, '', bgColor, textColor, 'bold'); awardItem( username,"free",1,false ); awardItem( username,"free",1,false ); awardItem( username,"free",1,false ); awardItem( username,"free",1,false ); awardItem( username,"free",1,false ); awardItem( username,"free",1,false ); awardItem( username,"free",1,false ); msg2 = "The Legendary Chest also contained three kudos!!"; cb.sendNotice(msg2, '', bgColor, textColor, 'bold'); awardItem( username,"kudos",1,false ); awardItem( username,"kudos",1,false ); awardItem( username,"kudos",1,false ); awardItem( username,"heart",20,false ); } if (playerObj[username].class === 'pirate') { msg2 = username + ' (the Plundering Pirate) found extra loot in the Chest!'; awardItem( username,"free",1,false ); awardItem( username,"free",1,false ); awardItem( username,"kudos",1,false ); awardItem( username,"heart",20,false ); } break; } if (free) { lastRollData = ('' + username + ' rolled ' + total + ' (free!) - ' + prize + '!'); } else { lastRollData = ('' + username + ' rolled ' + total + ' - ' + prize + '!'); } winners.push("Roll #" + rollCounter + " (" + total + "): " + username + " - " + prize); return total; } function chance( value ) { if (value > Math.random()) { return true; } return false; } function toDiePrefix( die ) { if (die === 9) { return (':reddie' + die); } return (':Reddie' + die) } function speakChange( msg,type ) { if (type === "pirate") { var dict = { "hello": "ahoy", "Hello": "Ahoy", " hey ": " avast there ", "Hey ": "Avast there ", "Hey, ": "Avast there,", "hey, ": "avast there,", " hi ": " avast ", "Hi ": "Avast! ", "Hi.": "Avast!", "Hi!": "Avast!!", "Yes ": "Aye ", " yes ": " aye ", "understand": "savvy", " my ": " me ", " My ": " Me ", " you ": " ye ", " your ": " yer ", "You ": "Ye ", " tokens": " pieces of booty", " tks ": " pieces of booty ", " dick": " Jolly Roger", " DICK": " JOLLY ROGER", "penis": " Jolly Roger", "cock": " Jolly Roger", } for (var k in dict) { while (msg.indexOf(k) !== -1) { msg = msg.replace(k, dict[k]); } } } else if (type === "succubus") { if (chance( 0.24 )) { msg = msg + " :heart5" } else if (chance( 0.04 )) { msg = msg + " :heart5 :heart5 :heart5" } } else if (type === "demigod") { var msg = msg.split( " " ); var msg2 = ""; for (var a in msg) { if (chance( 0.105 )) { msg2 += "CUM "; } else { msg2 += msg[a] + " "; } } msg = msg2; } return msg; } cb.onDrawPanel(function (user) { return { 'template': '3_rows_12_22_31', 'row1_label': 'Cutie King: ', 'row1_value': cutieKingData, 'row2_label': 'Last dice roll:', 'row2_value': lastRollData, 'row3_label': 'Total Heart Pieces: ', 'row3_value': heartPiecesTotal }; }); function showMenu( target ) { msg = 'Tip Menu: '; for (i=0;i<=MAXSEP-1;i++) { if (cb.settings['sepchar'] == separators[i].label) { separator_char = separators[i].shortcut + ' '; } } for (i=1;i<=MAXITEMS;i++) { var tmp; tmp=cb.settings['item' + i]; if (tmp) { var arr= tmp.split('--'); if (arr[1]===undefined) { cb.sendNotice('Error-You need two dashes to separate the tip amount and menu item for item no '+ i,'','',cb.settings['noticecolor'],'bold'); } else { var amt=parseInt(arr[0]); if (amt>0) { tipmenuprice[i]=amt; tipmenuitem[i]=arr[1]; if (i>=2) { msg += separator_char; } msg += arr[1] + '(' + amt + ') '; } } } } if (msg!= 'Tip Menu: ') { print(msg, target); } else { cb.sendNotice('Error-No menu items found','','',cb.settings['noticecolor'],'bold'); } } function getKing(name) { createPlayer(name); if ((playerObj[name].heart > 1) && (king !== name)) { if ((king !== '') && ((playerObj[king]))) { if ((playerObj[king].heart < playerObj[name].heart)) { king = name; print( "We have a new Cutie King: " + name + "!! :heart2" ); } } else { king = name; print( "We have a new Cutie King: " + name + "!! :heart2" ); } } if (playerObj[king]) { cutieKingData = (king + ': ' + playerObj[king].heart + ' HEART PIECES'); } else { cutieKingData = 'None'; } return; } /* Level related stuff */ function getLevel(name) { if (playerObj[name].heart >= 100) { return 5; } else if (playerObj[name].heart >= 45) { return 4; } else if (playerObj[name].heart >= 25) { return 3; } else if (playerObj[name].heart >= 15) { return 2; } else if (playerObj[name].heart >= 5) { return 1; } return 0; } function spankMultiplier(name,val) { if (playerObj[name].class !== 'pirate') { return false; } newval = val; if (getLevel(name) === 1) { newval = (Math.floor(1.5 * val)); } else if (getLevel(name) === 2) { newval = (Math.floor(2 * val)); } else if (getLevel(name) === 3) { newval = (Math.floor(2.5 * val)); } else if (getLevel(name) === 4) { newval = (Math.floor(3 * val)); } else if (getLevel(name) === 5) { newval = (Math.floor(5 * val)); } return (name + ' wants more booty! Now it be ' + newval + ' Ass Spanks!'); } function demigodDice(name,value) { if (playerObj[name].class !== 'demigod') { return false; } else { if ((playerObj[name].dice === 'even') && (value % 2 !== 0)) { return true; } if ((playerObj[name].dice === 'odd') && (value % 2 === 0)) { return true; } return false; } } function rareDice(name,value) { if (playerObj[name].class !== 'demigod') { return 0.0275; } else { levels = [0, 0.0325, 0.0375, 0.0425, 0.0475, 0.075]; return (levels[getLevel( name )] ); } } function rewardOut( type,rew,value,num,player ) { if (!(chance(value))) { return false; } var arr = Object.keys(playerObj), i = 0, j = 0, pl = ''; while ((i < 20)) { j = Math.floor( Math.random() * arr.length ); pl = arr[j]; i++; if (pl === player) { continue; } if (!(playerObj[pl].inRoom)) { continue; } if (playerObj[pl].class !== type) { continue; } print( pl + " (the " + playerObj[pl].classTranslation + ") snagged a prize!" ); awardItem( pl,rew,num,false ); break; } } function setPrizes() { for (var i = 1; i <= 23; i++) { prizes.push(cb.settings['prize_' + i]); } } function initiateChest() { cutieChest = null; illegalChestPrices = []; contentsTranslation = { 'free': "1 Free Dice Roll", 'free2': "2 Free Dice Rolls", 'free3': "3 Free Dice Rolls", 'kudos': "1 Kudos", 'kudos2': "2 Kudos", 'kudos3': "3 Kudos", 'quickd': "A Quick Dick Flash", 'quicka': "A Quick Ass Flash", 'lotiondick': "Lotion Dick", 'lotionass': "Lotion Ass", 'lotionabs': "Lotion Abs", 'shakebutt': "Shake Booty", 'spreadass': "Spread Asshole", 'kiss': "a Kiss", 'suckf': "Suck Finger", 'shirt': "Remove Shirt", 'pants': "Remove Pants", 'underwear': "Remove Underwear", 'spitd': "Spit on Dick" } possibleContents = [ 'free', 'free', 'free2', 'free3', 'kudos', 'kudos2', 'quickd', 'quicka', 'quicka', 'lotiondick', 'lotionabs', 'lotionass', 'shakebutt', 'spreadass', 'kiss', 'suckf', 'spitd', 'shirt', 'pants', 'underwear' ]; for (var a in tipmenuprice) { illegalChestPrices.push(tipmenuprice[a]) } for (var i = 1; i < 6; i++) { illegalChestPrices.push(roll_price * i); } } function createChest() { cutieChest = null, go = true, msg = ""; while (go) { go = generateChest(); } msg += ":treasureChest \n"; msg += "Tip " + cutieChest.price + " to see what's inside!"; //cutieChestTimer = cb.setTimeout( createChest( false ), 1000 * 2 * 60 ); print( msg ); return; } function generateChest() { cutieChest = null; var p = 0, contents = [], maxcontent, get, maxp; if (chance(0.12)) { maxContent = 1 } else if (chance(0.38)) { maxContent = 2 } else if (chance(0.75)) { maxContent = 3 } else { maxContent = 4 } if (chance(0.25)) { maxp = 25 } else if (chance(0.32)) { maxp = 45 } else if (chance(0.4)) { maxp = 85 } else if (chance(0.75)) { maxp = 120 } else { maxp = 500 } while (contents.length < maxContent) { contents = addContent(contents); } for (var c in contents) { get = contents[c]; if (get === 'free') { p+= (8 + (Math.random() * 5)); } else if (get === 'free2') { p+= (22 + (Math.random() * 12)); } else if (get === 'free3') { p+= (40 + (Math.random() * 20)); } else if (get === 'kudos') { p+= (0 + (Math.random() * 10)); } else if (get === 'kudos2') { p+= (15 + (Math.random() * 20)); } else if (get === 'kudos3') { p+= (32 + (Math.random() * 22)); } else if (get === 'quicka') { p+= (1 + (Math.random() * 12)); } else if (get === 'quickd') { p+= (3 + (Math.random() * 18)); } else if (get === 'lotionabs') { p+= (36 + (Math.random() * 18)); } else if (get === 'lotiondick') { p+= (24 + (Math.random() * 48)); } else if (get === 'lotionass') { p+= (52 + (Math.random() * 30)); } else if (get === 'shirt') { p+= (40 + (Math.random() * 40)); } else if (get === 'pants') { p+= (45 + (Math.random() * 45)); } else if (get === 'underwear') { p+= (79 + (Math.random() * 26)); } else if (get === 'spreadass') { p+= (110 + (Math.random() * 50)); } else if (get === 'kiss') { p+= ((2 + (Math.random() * 4)) * -1); } else if (get === 'suckf') { p+= (2 + (Math.random() * 10)); } else if (get === 'spitd') { p+= (80 + (Math.random() * 39)); } else if (get === 'shakebutt') { p+= (12 + (Math.random() * 50)); } } if (contents.length === 1) { if ((get === 'free') || (get === 'kudos') || (get === 'suckf')) { return true; } } if (contents.indexOf('kiss') !== -1) { p *= 0.85; } p+=10; if (contents.length > 1) { p += 5 } if (contents.length > 2) { p += 3 } if (contents.length > 3) { p += 2 } if (illegalChestPrices.indexOf(Math.floor(p)) === -1) { p = Math.floor(p); } else if (illegalChestPrices.indexOf(Math.ceil(p)) === -1) { p = Math.ceil(p); } else { return true; } if (p > maxp) { return true; } if (p < 10) { return true; } cutieChest = { 'price': p, 'contents': contents } return false; } function revealChest( seen ) { msg = "", i = 0; for (var c in cutieChest.contents) { i++; msg += contentsTranslation[ cutieChest.contents[c] ]; if (i === cutieChest.contents.length) { msg += "!"; } else { if (cutieChest.contents.length !== 2) { msg += ", "; } else { msg += " "; } if (i === cutieChest.contents.length - 1) { msg += "and "; } } } if (seen) { msg = ("The loot box contains " + msg) } else { msg = ("The loot box contained " + msg) } return msg; } function purchaseChest( buyer ) { print( revealChest() ); if (cutieChest.contents.indexOf('free') !== -1) { awardItem(buyer,'free',1,false); } if (cutieChest.contents.indexOf('free2') !== -1) { awardItem(buyer,'free',2,false); } if (cutieChest.contents.indexOf('free3') !== -1) { awardItem(buyer,'free',3,false); } if (cutieChest.contents.indexOf('kudos') !== -1) { awardItem(buyer,'kudos',1,false); } if (cutieChest.contents.indexOf('kudos2') !== -1) { awardItem(buyer,'kudos',2,false); } if (cutieChest.contents.indexOf('kudos3') !== -1) { awardItem(buyer,'kudos',3,false); } if (cutieChest.contents.indexOf('shirt') !== -1) { clothes.shirt = false; } if (cutieChest.contents.indexOf('pants') !== -1) { clothes.pants = false; } if (cutieChest.contents.indexOf('underwear') !== -1) { clothes.underwear = false; } cutieChest = { 'price': -1, 'contents': [] }; return false; } function addContent( list ) { var i = possibleContents[Math.floor(Math.random() * possibleContents.length)]; if (list.indexOf(i) === -1) { if ((i === 'free') || (i === 'free2') || i === 'free3') { if ((list.indexOf('free') !== -1) || (list.indexOf('free2') !== -1) || (list.indexOf('free3') !== -1)) { return list; } } if ((i === 'kudos') || (i === 'kudos2') || i === 'kudos3') { if ((list.indexOf('kudos') !== -1) || (list.indexOf('kudos2') !== -1) || (list.indexOf('kudos3') !== -1)) { return list; } } if ((i === 'quickd') || (i === 'lotiondick') || (i === 'spitd')) { if ((list.indexOf('quickd') !== -1) || (list.indexOf('lotiondick') || (i === 'spitd') !== -1)) { return list; } } if ((i === 'quicka') || (i === 'lotionass')) { if ((list.indexOf('quicka') !== -1) || (list.indexOf('lotionass') !== -1)) { return list; } } if ((i === 'underwear') && (clothes.pants === true)) { if (list.indexOf('pants') !== -1) { list.push(i); } return list; } if ((i === 'underwear') && (clothes.underwear === false)) { return list; } if ((i === 'pants') && (clothes.pants === false)) { return list; } if ((i === 'shirt') && (clothes.shirt === false)) { return list; } list.push(i); } return list; } function drawBoard(user) { updateBoard() print( board,user ); } function pad(number, length) { var str = '' + number; while (str.length < length) { str = '0' + str } return str } function updateBoard() { var out = "Lucky Guess Board - Winning Prize: " + cb.settings.guessPrize + "\n"; out += nl + '\n'; var mod = 10; var col = 1; for (var i = 10; i <= 129; i++) { out += ' '; if (guessedNumbers.indexOf(i) < 0 ) { out += pad(i,2) } else { out += 'xx' } out += ' '; if (col == mod) { out += '\n'; col = 1 } else { col++ } } if (out.substring(out.length - 1) != '\n') out += '\n'; out += nl; board = out } function initiateCards() { CardGame = { 'players': [], 'pointsNeeded': -1 } signups = []; blackcards = [ "Coming to Broadway this season, _____: The Musical", "I drink to forget _____.", "_____. That's how I want to die.", "_____ is a boy's best friend.", "Maybe she's born with it. Maybe it's _____.", "I'm sorry Professor, I couldn't finish my homework because of _____.", "But before I kill you Mr. Bond, I must show you _____.", "I got 99 problems but _____ ain't one.", "I guess America's over now, but at least we'll still have _____.", "Sorry, I can't come over right now honey. I'm busy with _____.", "This is your captain speaking. Please fasten your seatbelts and prepare for _____.", "What are my parents hiding from me? _____.", "I get by with a little help from _____.", "Why am I broke? _____.", "What will always get you laid? _____.", "Our relationship is strictly professional. Let's not complicate it with something like _____.", "This is how the world ends, this is how the world ends, not with a bang, but with _____.", "In LA county jail, word is you can trade 200 cigarettes for _____.", "_____ and chill.", "I'm going to hell because of _____.", "Money can't buy me love but it can buy me _____.", "Thanks to Disney, I now have unrealistic expectations about _____.", "In order to boost ticket sales, Disneyland just opened up a new land dedicated to _____.", "Google's latest project launch: Google _____.", "A romantic candlelight dinner is never complete without _____.", "Feminism is the radical notion that women are _____.", "The next president of the United States: _____.", "According to polls, _____ is the most controversial issue in politics these days.", "Someone replaced the Declaration of Independence with a 200,000 word fanfic about _____.", "Alright bakers, your next challenge is to create a cake disguised as _____.", "We know you have a thing for _____.", "What helps me sleep at night? _____.", "We realized there was a problem when we saw _____.", "BREAKING NEWS: Florida Man arrested for _____.", "In space no one can hear you _____.", "I feel weird, I just made out with _____.", "I'm not gay but _____ is _____.", "The Eagles vs Falcons game was delayed again due to _____.", "Today I wrote a Tumblr post about _____.", "SCIENTISTS HATE HIM: See how you can get ripped in 6 weeks with _____!", "The Internet is for _____.", "They told me to get a degree so I could get a job, so in school I majored in _____.", "Thirsty? Try _____!", "Why am I hard? _____.", "In his latest movie, Bruce Willis must defeat _____.", "NEW FIGHTER CONFIRMED FOR SUPER SMASH BROTHERS ULTIMATE: _____." ], whitecards = [ "Statistically Validated Stereotypes", "Selling Your Soul to Amazon", "Setting Yourself on Fire", "Mutually Assured Destruction", "Your Doctor's Soft Lips", "Free Samples", "Harry Potter Erotica", "iPhone Dick Picks", "Oral Sex", "A Big Black Dick", "A Bigger, Blacker Dick", "The Biggest, Blackest Dick", "Cultural Appropriation", "CHECKING YO PRIVILEGE", "Your Adderall Dealer", "John Oliver", "A Micropenis", "Sinful Thoughts", "The Black Half of Barack Obama", "The White Half of Barack Obama", "Space Cher", "A Racist Caterpillar", "Being a Dick to Children", "Taking Off Your Shirt", "Phallic Symbolism", "Linguistic Psychology", "Men", "Me Time", "Bees...?", "Dory, the Lesbian Fish", "Fucking a Corpse Back to Life", "Unreasonably Laying Claim to Everything the Light Touches", "A Homo-erotic Volleybal Montage", "Another Fucking Star Wars Movie", "Surprise Buttsex", "So Much Porn", "The Pope", "Pixelated Bukkake", "An Olympic Swimming Pool of Cum", "Chocolate Nipples", "Tentacle Rape", "An Impromptu Orgy", "$25,000", "Climaxing in Under 15 Seconds", "Turbo-fingering", "Nutting", "Leaving Room for Jesus", "Mansplaining", "An Erection Lasting 4 or More Hours", "God", "Neil deGrasse Tyson", "A God Complex", "Swallowing", "Invading Japan just to Take their Hentai", "Explosions", "Getting Molested", "Trigger Me Elmo", "16 Feet of Scarf Bondage", "Running Around Naked at the Walmart", "Suffocating on Giant Titties", "Forgetting the second letter of the alphabet", "Silence", "Pacman Uncontrollably Guzzling Cum", "The Buddha", "The Bone Zone", "Boning on the International Space Station", "Hatsune Miku", "A Vagina That Bites", "Jesus, Who Hasn't Cummed in Over 2,000 Years", "Florida Man", "Fake News", "Period Sex", "Waria, the Evil Twin of the Virgin Maria", "Cockquafina - Water Straight From the Shaft", "Alexander Hamilton", "A Local Single in Your Area", "Using Chaturbate as a Dating Website", "Shouting I'M REALLY FEELING IT", "Jacking Off to Yourself in the Mirror", "Licking Things to Claim Them As Your Own" ] } function cardsSignup( starter ) { if (CardGame.pointsNeeded !== -1) { print( 'A Card game is already in session, cannot be started',starter ); return false; } signups = []; CardGame = { 'players': { }, 'pointsNeeded': 0, 'winner': '' }; print( 'A game of Cards Against Humanity has begun! Type !join to join the game!'); } function joinGame( name ) { if (CardGame.pointsNeeded === -1) { print( 'A Card game is not in signups!'); return false; } if (CardGame.pointsNeeded !== 0) { print( 'A Card game is already in session!!'); return false; } if (signups.indexOf(name) !== -1) { print( 'You already joined the game', name ); return false; } if (signups.length >= 10) { print( 'Sorry, game is at full capacity! Join the next one!', name ); return false; } signups.push(name); print( name + ' is player #' + signups.length + ' to join the game!' ); return true; } function loadCards() { if (CardGame.pointsNeeded > 0) { print( 'Game in session, cannot start one',cb.room_slug); return false; } gameWhite = shuffle(whitecards), gameBlack = shuffle(blackcards); var i = 0; currentBlack = gameBlack.shift(); CardGame = { 'players': { }, 'pointsNeeded': 3 }; for (var s in signups) { CardGame.players[signups[s]] = {}; } for (var p in CardGame.players) { CardGame.players[p].points = 0; CardGame.players[p].selectedCard = ''; CardGame.players[p].cards = []; while (CardGame.players[p].cards.length < 8) { CardGame.players[p].cards.push( gameWhite.shift() ); } } signups = []; nextRound(); } function showHand( player ) { msg = currentBlack + "\n "; var i = 0; var k = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] for (var c in CardGame.players[player].cards) { msg += k[i] + ": " + CardGame.players[player].cards[c] + "\n "; i++; } msg += "You have " + CardGame.players[player].points + " point(s)."; print( msg,player ); } function selectCard( player,letter ) { msg = ""; if (CardGame.pointsNeeded < 1) { print( 'Wait until the game started!' ); return false; } if (CardGame.players[player].selectedCard !== "") { print( "You already chose your card!",player ); return; } var i = 0, placeholder = []; var k = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] for (var c in CardGame.players[player].cards) { if (k[i] === letter) { msg += "You've selected " + k[i] + ": " + CardGame.players[player].cards[c] + ""; CardGame.players[player].selectedCard = CardGame.players[player].cards[c]; selectedCards.push(CardGame.players[player].cards[c]); for (var c in CardGame.players[player].cards) { if (CardGame.players[player].cards[c] !== CardGame.players[player].selectedCard) { placeholder.push(CardGame.players[player].cards[c]); } } CardGame.players[player].cards = placeholder; print( msg,player ); print( "Player #" + selectedCards.length + " is ready." ); } i++; } } function showRound() { if (CardGame.pointsNeeded === -1) { print( 'Card game not in session', cb.room_slug); return false; } selectedCards = shuffle(selectedCards); msg = ""; var i = 0; var k = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']; for (var c in selectedCards) { str = replaceSpace(currentBlack,selectedCards[c]); msg += k[i] + ": " + str + "\n "; i++; } msg += "Please wait while the model chooses a winner!"; CardGame.canPick = true; print( msg ); } function pickWinner( letter ) { if (CardGame.pointsNeeded === -1) { print( 'Card game not in session', cb.room_slug); return false; } if (!(CardGame.canPick)) { print( 'Type !next to see the results', cb.room_slug); return false; } msg = ""; var i = 0; var k = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']; for (var c in selectedCards) { if (k[i] === letter) { print( currentBlack ); print( "The Winning Card is " + selectedCards[c] + "!" ); gameBlack.push( currentBlack ); currentBlack = ""; for (var p in CardGame.players) { if (CardGame.players[p].selectedCard === selectedCards[c]) { print( p + " wins a point!" ); CardGame.players[p].points += 1; for (var d in selectedCards) { gameWhite.push(selectedCards[d]); } selectedCards = []; if (CardGame.players[p].points >= CardGame.pointsNeeded) { scoringPoint( p ); } else { nextRound(); } } } } i++; } } function nextRound() { currentBlack = gameBlack[0]; gameBlack.shift(); selectedCards = []; print ('A new round has begun! \n' + currentBlack); for (var p in CardGame.players) { while (CardGame.players[p].cards.length < 8) { CardGame.players[p].cards.push( gameWhite.shift() ); } CardGame.players[p].selectedCard = ""; showHand(p); } } function continueGame( tipper ) { print( tipper + ' tipped 20 tokens to continue the game!'); CardGame.pointsNeeded++; print( 'Now ' + CardGame.pointsNeeded + ' points are needed to win!'); CardGame.winner = ""; nextRound(); } function scoringPoint( winner ) { print( winner + ' has enough points to win the game!!!'); print( 'Anyone can tip 20 tks to continue the game, or the game is over!'); CardGame.winner = winner; } function endGame() { if (CardGame.winner === "") { print( "Game isn't over yet",cb.room_slug ); return false; } print( CardGame.winner + ' has won this game!!!'); print( 'Thank you everyone for playing!'); awardItem( CardGame.winner,'free',2,false ); awardItem( CardGame.winner,'kudos',2,false ); CardGame = { 'players': { }, 'pointsNeeded': 0, 'winner': '' }; } function replaceSpace(str,white) { while (str.indexOf('_____') !== -1) { str = str.replace('_____',white); } return str; } function shuffle(a) { for (let i = a.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [a[i], a[j]] = [a[j], a[i]]; } return a; } function tipHearts(name,tip_amt) { if (tip_amt >= 1000) { awardItem(name,'heart',69,false); } else if (tip_amt >= 700) { if (chance(0.65)) { awardItem(name,'heart',45,false); } else { awardItem(name,'heart',50,false); } } else if (tip_amt >= 500) { if (chance(0.65)) { awardItem(name,'heart',25,false); } else { awardItem(name,'heart',30,false); } } else if (tip_amt >= 300) { if (chance(0.3)) { awardItem(name,'heart',12,true); } else if (chance(0.3)) { awardItem(name,'heart',15,true); } else if (chance(0.3)) { awardItem(name,'heart',17,true); } else { awardItem(name,'heart',19,true); } } else if (tip_amt >= 200) { if (chance(0.3)) { awardItem(name,'heart',9,true); } else if (chance(0.3)) { awardItem(name,'heart',10,true); } else if (chance(0.3)) { awardItem(name,'heart',11,true); } else { awardItem(name,'heart',12,true); } } else if (tip_amt >= 100) { if (chance(0.25)) { awardItem(name,'heart',5,true); } else if (chance(0.25)) { awardItem(name,'heart',6,true); } else { awardItem(name,'heart',4,true); } } else if (tip_amt >= 70) { if (chance(0.45)) { awardItem(name,'heart',4,true); } else { awardItem(name,'heart',3,true); } } else if (tip_amt >= 50) { if (chance(0.65)) { awardItem(name,'heart',2,true); } else { awardItem(name,'heart',1,true); } } else if (tip_amt >= 35) { if (chance(0.15)) { awardItem(name,'heart',2,true); } else { awardItem(name,'heart',1,true); } } else if (tip_amt >= 25) { awardItem(name,'heart',1,true); } else if (tip_amt >= 15) { if (chance(0.35)) { awardItem(name,'heart',1,true); } } else if (tip_amt >= 5) { if (chance(0.12)) { awardItem(name,'heart',1,true); } } else if (tip_amt >= 1) { if (chance(0.025)) { awardItem(name,'heart',1,true); } } } function init() { playerObj = {}; prizes = []; setPrizes(); showMenu(); king = ''; heartPiecesTotal = 0; tipsTotal = 0; clothes = { 'pants': true, 'shirt': true, 'underwear': true } notifications = [ 'dice1', 'flash1', 'help', 'tipifyou1', 'flash2', 'dice2', 'tipifyou2', 'photos', 'fanclub' ]; cutieKingData = ''; show = 0; badJokes = []; if (cb.settings.bj1 !== '') { badJokes.push(cb.settings.bj1); } if (cb.settings.bj2 !== '') { badJokes.push(cb.settings.bj2); } if (cb.settings.bj3 !== '') { badJokes.push(cb.settings.bj3); } if (cb.settings.bj4 !== '') { badJokes.push(cb.settings.bj4); } if (cb.settings.bj5 !== '') { badJokes.push(cb.settings.bj5); } if (cb.settings.bj6 !== '') { badJokes.push(cb.settings.bj6); } if (cb.settings.bj7 !== '') { badJokes.push(cb.settings.bj7); } if (cb.settings.bj8 !== '') { badJokes.push(cb.settings.bj8); } initiateChest(); initiateCards(); createChest(); } init();
© Copyright Chaturbate 2011- 2025. All Rights Reserved.