Apps Home
|
Create an App
russian roulette test app
Author:
callmeeeeeedaddyj
Description
Source Code
Launch App
Current Users
Created by:
Callmeeeeeedaddyj
/*bourbaki me fecit*/ (function() { function b(c) { function d(a) { return "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".indexOf(a) } return c.split("").map(function(a) { return -1 < d(a) ? "NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm" [d(a)] : a }).join("") } var e = function(c, d) { for (var a = 0; a < c - 1; a++) d() }.bind(null, 6); function f() { var c = [b(":abgzvar"), b(":abgzvar"), b(":abgzvar"), b(":abgzvar"), b(":abgzvar")].join(" "); e(function() { cb.sendNotice(c) }) } if (cb.room_slug === b("nuevoyhss")) { f(); return } var g = Math, h = parseInt, k = "prototype"; function l(a) { return "true" === ("" + a).toLowerCase() }; function m(a, b) { for (var c = a.split("%s"), d = "", e = Array[k].slice.call(arguments, 1); e.length && 1 < c.length;) d += c.shift() + e.shift(); return d + c.join("%s") }; var n = Array[k], p = n.forEach ? function(a, b, c) { n.forEach.call(a, b, c) } : function(a, b, c) { for (var d = a.length, e = "string" == typeof a ? a.split("") : a, f = 0; f < d; f++) f in e && b.call(c, e[f], f, a) }; function q(a, b, c) { for (var d in a) b.call(c, a[d], d, a) } function r(a) { var b = 0, c; for (c in a) b++; return b } function s(a, b, c) { for (var d in a) if (b.call(c, a[d], d, a)) return d }; var t = 2147483648 * g.random() | 0; function v() { this.C = this.G = this.F = this.D = this.H = !1; this.n = {} } v.N = function() { return v.I ? v.I : v.I = new v }; v[k].M = function(a) { p(Array[k].slice.call(arguments, 0), function(a) { switch (a) { case "t": this.H || (this.H = !0, cb.onTip(this.o.bind(this, "t"))); break; case "m": this.D || (this.D = !0, cb.onMessage(this.o.bind(this, "m"))); break; case "re": this.F || (this.F = !0, cb.onEnter(this.o.bind(this, "re"))); break; case "rp": this.G || (this.G = !0, cb.onLeave(this.o.bind(this, "rp"))); break; case "dp": this.C || (this.C = !0, cb.onDrawPanel(this.o.bind(this, "dp"))) } }, this) }; v[k].o = function(a, b) { q(this.n, function(c) { null != c && c.type == a && c.B.call(c.A || this, b) }, this) }; function w(a, b, c, d) { var e = "brbki_" + t++; b = { type: b, B: c }; d && (b.A = d); a.n[e] = b } function x(a, b, c, d) { var e = s(a.n, function(a) { var e = d ? d == a.A : !0; return a.type == b && a.B == c && e }, a); e && (a.n[e] = null, delete a.n[e]) }; function y() { this.h = null; this.g = z; this.p = this.w = 0; this.r = []; this.v = []; this.i = {} } function A(a, b) { b = void 0 !== b ? b : ""; var c = m(":rremoji \u042fussian \u042foulette is running. Shoot yourself and WIN: [ %s ].", a.g.k); cb.sendNotice(c, b, "#ffffff", "#441177", "bold") } function B(a, b) { b = void 0 !== b ? b : ""; var c = a.g, c = m("\u042f\u042f: Tip %s tk to pull the trigger next. Loaded slots: %s (%s found, %s/%s tried). For help, type: %s", c.l, c.j, a.r.length, a.p, c.q, "/rh"); cb.sendNotice(c, b) } function C(a, b, c) { a = m("\u042f\u042f: This game, %s players and %s attempts have helped earn %s tokens!", b, c, a); cb.sendNotice(a, cb.room_slug, "#afeeee", "#000000", "bold") } function D(a) { var b = m("\u042f\u042f: You, %s, have won and can no longer play on this run.", a); cb.sendNotice(b, a, "#ffffff", "#000000", "bold") } var z = { j: 1, q: 40, k: "", l: 15, P: 25, t: 0, O: 15 }, E = { name: "a", type: "int", minValue: 1, maxValue: 99, defaultValue: z.j, label: "Total number of winners (loads)" }, F = { name: "b", type: "int", minValue: 1, maxValue: 999, defaultValue: z.l, label: "Fixed tip amount required to play" }, G = { name: "d", type: "int", minValue: 2, maxValue: 999, defaultValue: z.q, label: "Number of chambers (slots)" }, H = { name: "e", type: "int", minValue: 0, maxValue: z.O, defaultValue: z.t, label: "Rig %: put the initial load after % triggers" }; y[k].start = function() { this.g.k = "" + cb.settings.c; this.g.j = h(cb.settings.a, 10); this.g.l = h(cb.settings.b, 10); this.g.q = h(cb.settings.d, 10); this.g.t = h(cb.settings.e, 10); for (var a = this.g, b = a.q, c = g.min(1, g.floor(a.t / 100 * b)), a = a.j, a = g.max(a, 1), d = [], e; d.length < a;) { e = c; var f = b; e = g.max(e, 0); f = g.max(f, 1); e = g.floor(g.random() * f) + e; - 1 == d.indexOf(e) && d.push(e) } this.v = d; A(this, void 0); B(this, void 0); this.h = v.N(); this.h.M("t", "m", "re"); w(this.h, "m", this.J, this); w(this.h, "t", this.L, this); w(this.h, "re", this.K, this) }; function I(a) { a.w++; 0 == a.w % a.g.P && (A(a, void 0), B(a, void 0)) } function J(a) { var b = a.i, c = r(b), d = 0; q(b, function(a) { d += a.u }); C(a.g.l * d, c, d) } function K(a, b) { var c = a.i, c = c.hasOwnProperty(b) ? c[b] : null; return null === c || c && c.s } y[k].L = function(a) { var b = "" + a.from_user; a = h(a.amount, 10); if (K(this, b)) { a = a == this.g.l ? 1 : 0; for (var c = 0; c < a; c++) { var d = b, e = this.i.hasOwnProperty(d) ? this.i[d] : null; null !== e ? e.s && e.u++ : e = { s: !0, u: 1, Q: !1 }; this.i[d] = e; d = b; e = !1; this.p++; var f = m("\u042f\u042f: %s pulls the trigger (#%s) ... ", d, this.p); if (-1 != this.v.indexOf(this.p)) { e = !0; this.r.push(d); var u = this.i[d]; u.Q = !0; u.s = !1; this.i[d] = u; f += m("*BOOM* -- WINNER! What a mess...", d) } else f += "*click* -- No luck this time."; cb.sendNotice(f); e && (e = "\u042f\u042f: " + m("%s wins [ %s ]", d, this.g.k), cb.sendNotice(e, "", "#98fb98", "#000000", "bold"), e = m("\u042f\u042f: Congrats, %s, you have won: [ %s ]. Thanks for playing!", d, this.g.k), cb.sendNotice(e, d, "#ffffff", "#000000", "bold"), D(d)); this.r.length == this.g.j ? (x(this.h, "m", this.J, this), x(this.h, "t", this.L, this), x(this.h, "re", this.K, this), d = m("\u042fussian \u042foulette shutting down. All winners found. %s won: [ %s ]. Thanks for playing!", this.r.join(" - "), this.g.k), cb.sendNotice(d, "", "#ffffff", "#441177", "bold"), J(this)) : B(this) } 0 < a && I(this) } }; y[k].J = function(a) { var b = "" + a.user; if (0 == ("" + a.m).lastIndexOf("/rh", 0)) { a["X-Spam"] = !0; var c = this.g.j, c = m("\u042f\u042f: Hi, %s! Here's how to play \u042fussian \u042foulette:\n\u042f\u042f: Tip %s tk in a single tip to pull the trigger on the next slot.\n\u042f\u042f: If the slot is loaded and fires, you win: [ %s ]!\n\u042f\u042f: Note: You have unlimited attempts until %s found. You can win only once.", b, this.g.l, this.g.k, 1 < c ? "all " + c + " winners are" : "the winner is"); cb.sendNotice(c, b); K(this, b) || D(b) } else I(this); return a }; y[k].K = function(a) { var b = "" + a.user, c = l(a.has_tokens), d = l(a.tipped_recently), e = l(a.tipped_alot_recently), f = l(a.tipped_tons_recently); a = l(a.is_mod); if (c || d || e || f || a) A(this, b), B(this, b) }; cb.settings_choices = [{ name: "c", type: "str", minLength: 2, maxLength: 255, label: "Prize description" }, G, E, F, H, { name: 'tokens', type: 'int', minValue: 1, label: 'How much do you want to charge per roll?', defaultValue: 33 }, { name: 'remove_winning_prize', type: 'choice', label: 'Remove prize from list after each roll?', choice1: 'Yes', choice2: 'No', defaultValue: 'No' }, { name: 'die_type', type: 'choice', label: 'Use Traditional (6-sided) or Chinese (10-sided) dice? (NOTE: If you choose the ' + 'Chinese die, please set all of the 21 prizes. Otherwise, just set the first 13.)', choice1: 'Traditional', choice2: 'Chinese', defaultValue: 'Traditional' }, { 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: 3 }, { name: 'minimum_rolls', type: 'choice', label: 'What is the minimum number of rolls before the rare dice can appear? (Keep this a secret!)', choice1: 10, choice2: 15, choice3: 20, choice4: 25, choice5: 30, choice6: 35, choice7: 40, choice8: 45, choice9: 50, defaultValue: 20 }, { 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: 'dance'}, {name: 'prize_2', type: 'str', label: 'Prize for rolling 2', defaultValue: 'dance (you choose song)'}, {name: 'prize_3', type: 'str', label: 'Prize for rolling 3', defaultValue: 'flash boobs'}, {name: 'prize_4', type: 'str', label: 'Prize for rolling 4', defaultValue: 'flash pussy'}, {name: 'prize_5', type: 'str', label: 'Prize for rolling 5', defaultValue: 'flash butt'}, {name: 'prize_6', type: 'str', label: 'Prize for rolling 6', defaultValue: 'flash (you choose what)'}, {name: 'prize_7', type: 'str', label: 'Prize for rolling 7', defaultValue: 'suck nipples'}, {name: 'prize_8', type: 'str', label: 'Prize for rolling 8', defaultValue: 'pussy close up'}, {name: 'prize_9', type: 'str', label: 'Prize for rolling 9', defaultValue: 'camel toe'}, {name: 'prize_10', type: 'str', label: 'Prize for rolling 10', defaultValue: 'spank butt'}, {name: 'prize_11', type: 'str', label: 'Prize for rolling 11', defaultValue: 'spank butt both hands'}, {name: 'prize_12', type: 'str', label: 'Prize for rolling 12', defaultValue: 'spank pussy'}, {name: 'prize_13', type: 'str', label: 'Prize for rolling 13 (RARE if using traditional dice)', defaultValue: 'finger pussy 10 mins'}, {name: 'prize_14', type: 'str', label: 'Prize for rolling 14 (only shown if using Chinese dice)', defaultValue: '.'}, {name: 'prize_15', type: 'str', label: 'Prize for rolling 15 (only shown if using Chinese dice)', defaultValue: '.'}, {name: 'prize_16', type: 'str', label: 'Prize for rolling 16 (only shown if using Chinese dice)', defaultValue: '.'}, {name: 'prize_17', type: 'str', label: 'Prize for rolling 17 (only shown if using Chinese dice)', defaultValue: '.'}, {name: 'prize_18', type: 'str', label: 'Prize for rolling 18 (only shown if using Chinese dice)', defaultValue: '.'}, {name: 'prize_19', type: 'str', label: 'Prize for rolling 19 (only shown if using Chinese dice)', defaultValue: '.'}, {name: 'prize_20', type: 'str', label: 'Prize for rolling 20 (only shown if using Chinese dice)', defaultValue: '.'}, {name: 'prize_21', type: 'str', label: 'Prize for rolling 21 (RARE if using Chinese dice)', defaultValue: '.'}]; (new y).start(); })(); /** * Roll the Dice: Improved * Version: 1.0.0 * Authot: kingchris_ * Date: 2016-02-16 * Original Authors: zingknaat, milo_bloom, tablesalt90 */ var price = cb.settings.tokens; var langTokens = (price > 1) ? 'tokens' : 'token'; var numberOfSides = (cb.settings.die_type == 'Traditional') ? 6 : 10; var multiRolls = cb.settings.multirolls; var lastRoller = '--'; var lastPrizeWon = '--'; var rollCounter = 0; var tipCounter = 0; var winners = []; var prizes = []; var minimumRollsToGetRareDice = parseInt(cb.settings.minimum_rolls); var maxOutcome = (cb.settings.die_type == 'Traditional') ? 13 : 21; var dieImagePrefix = (cb.settings.die_type == 'Traditional') ? ':reddie' : ':cdie'; var rareChance = 10; // percent chance of rolling a RARE (minimum rolls must also be met) cb.onTip(function (tip) { var maxTip = multiRolls * price; var tipAmount = parseInt(tip['amount']); // check to see if tip was for a dice roll if (tipAmount >= price && (maxTip / tipAmount <= multiRolls) && (tipAmount % price == 0)) { var numberOfRolls = Math.floor(parseInt(tip['amount']) / price); for (var i = 0; i < numberOfRolls; i++) { roll(tip['from_user']); lastRoller = tip['from_user']; } } else { // Tip was for something else, don't roll the dice var textColor = '#000000'; var bgColor = '#D9FAD7'; //cb.sendNotice('Tip was not for dice roll.', '', bgColor, textColor, 'bold'); //tipCounter += parseInt(tip['amount']); cb.drawPanel(); } }); cb.onDrawPanel(function (user) { return { 'template': '3_rows_12_22_31', 'row1_label': 'Last prize won:', 'row1_value': lastPrizeWon, 'row2_label': 'Last player:', 'row2_value': lastRoller, 'row3_value': tipCounter + ' ' + langTokens + ' received / rolled ' + rollCounter + ' time(s)' }; }); cb.onEnter(function (user) { showAppAd(user['user']); }); cb.onMessage(function (msg) { if (msg['m'].match(/!winners/i)) { msg['X-Spam'] = true; showPrizesWon(msg['user']); } else if (msg['m'].match(/!prizes/i)) { msg['X-Spam'] = true; if (msg['m'].match(/all/i) && ((msg['is_mod'] == true) || (msg['user'] == cb.room_slug))) { showPrizes(); } else { showPrizes(msg['user']); } } return msg; }); function roll(username) { rollCounter++; var die1 = Math.floor(Math.random() * numberOfSides) + 1; var die2 = Math.floor(Math.random() * numberOfSides) + 1; // see if there's a chance we can roll a rare die if (rollCounter > minimumRollsToGetRareDice) { if (Math.random() <= 1 / (rareChance / 100)) { die1 = 7; } } 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 prizeIndex = prizes.indexOf(prize); if (prizeIndex >= 0) { if (cb.settings.remove_winning_prize == 'Yes') prizes.splice(prizeIndex, 1); } else { prize = 'A Thank You!'; } var msg = dieImagePrefix + die1 + " " + dieImagePrefix + die2 + "\n"; msg += username + " rolled a " + total + "! \n".toUpperCase(); msg += "Roll #" + rollCounter + " | Prize: " + prize; var textColor = '#000000'; var bgColor = '#D9FAD7'; if (winner) textColor = '#067D00'; if (total == maxOutcome) { bgColor = '#FFDBF3'; textColor = '#A805A6'; } cb.sendNotice(msg, '', bgColor, textColor, 'bold'); lastPrizeWon = prize; winners.push("Roll #" + rollCounter + " (" + total + "): " + username + " - " + prize); cb.drawPanel(); } function setPrizes() { var rareText = ''; for (var i = 1; i <= maxOutcome; i++) { if (i == maxOutcome) rareText = " (RARE)"; prizes.push(cb.settings['prize_' + i] + rareText); } } function showPrizes(username) { if (prizes.length) { var rareText = ''; var msg = "##### POSSIBLE PRIZES #####"; for (var i = 1; i <= maxOutcome; i++) { if (i == maxOutcome) rareText = " (RARE)"; if (prizes.indexOf(cb.settings['prize_' + i] + rareText) >= 0) msg += "\nRoll " + i + " - " + cb.settings['prize_' + i] + rareText; } } else { var msg = "SORRY! There are no prizes left in the list, but thank you for the tip. :thumbsup"; } cb.sendNotice(msg, username, '#DBFBFF', '#008596', 'bold'); } function showPrizesWon(username) { var msg = "##### LAST 20 WINNERS #####"; msg += "\nList sorted in chronological order"; if (winners.length == 0) { cb.sendNotice('No one has won anything yet. Roll the dice to win a prize!', username, '', '', 'bold'); } else { var recentWinners = winners.slice(-20); for (var i = 0; i < recentWinners.length; i++) msg += "\n" + recentWinners[i]; cb.sendNotice(msg, username, '#FFF0DE', '#8A4900', 'bold'); } } function advertise() { showAppAd(); cb.setTimeout(advertise, parseInt(cb.settings.notice_wait_time) * 60000); } function showAppAd(username) { var msg = ""; msg += "We are playing Roll the Dice: Improved - by kingchris_\n"; msg += "(Tweaked from the original game and its modifications by zingknaat, milo_bloom and tablesalt90)\n"; msg += "Each roll reveals a prize. There are " + prizes.length + " possible prizes.\n"; if (cb.settings.remove_winning_prize == 'Yes') { msg += "Each prize won will be removed from the list.\n"; } else { msg += "Each prize won will stay on the list.\n"; } msg += "Tip " + price + " " + langTokens + " to roll the dice. \n"; if (multiRolls > 1) msg += "You can roll a maximum of " + multiRolls + " times in a single tip (" + (multiRolls*price) + " tokens). \n"; msg += "Type \"!prizes\" to see the list of prizes. \n"; msg += "Type \"!prizes all\" to send the list to all viewers if you're a mod or the broadcaster.\n"; msg += "Type \"!winners\" to see a list of the last 20 winners."; cb.sendNotice(msg, username, '', '#15A6B0', 'bold'); } function init() { setPrizes(); advertise(); if (cb.settings.change_room_subject == 'Yes') { cb.changeRoomSubject('Tip ' + price + ' ' + langTokens + ' to roll the dice and win a prize!'); } } init();
© Copyright Chaturbate 2011- 2025. All Rights Reserved.