Apps Home
|
Create an App
Kiss Counter V2
Author:
brecht
Description
Source Code
Launch App
Current Users
Created by:
Brecht
// vars var total_tickets = 0; var total_tipped = 0; var subject_is_set_with_0 = false; var price_map = new Map(); var price_limit_map = new Map(); var ticket_array; var ticket_number_index = -1; var first_prize_available; var second_prize_available; var third_prize_available; var total_kisses = 0; var high_tip_username = null; var high_tip_amount = 0; var last_tip_username = null; var last_tip_amount = 0; cb.settings_choices = [ {name: 'lottery_ticket_count', type: 'int', minValue: 0, default: 100}, {name: 'lottery_ticket_price', type: 'int', minValue: 1, default: 10}, {name: 'first_prize', type: 'str', minLength: 1, maxLength: 255}, {name: 'first_prize_min_tokens_prerequisite', type: 'int', minValue: 0, default: 300}, {name: 'first_prize_count', type: 'int', minValue: 1, default: 1}, {name: 'second_prize', type: 'str', minLength: 0, maxLength: 255}, {name: 'second_prize_min_tokens_prerequisite', type: 'int', minValue: 0, default: 100}, {name: 'second_prize_count', type: 'int', minValue: 0, default: 1}, {name: 'third_prize', type: 'str', minLength: 0, maxLength: 255}, {name: 'third_prize_min_tokens_prerequisite', type: 'int', minValue: 0, default: 20}, {name: 'third_prize_count', type: 'int', minValue: 0, default: 1}, {name: 'interval_seconds', type: 'int', minValue: 1, default: 600}, {name: 'message_color_back', type: 'str', minLength: 1, maxLength: 8, default: '#FFFFFF'}, {name: 'message_color_front', type: 'str', minLength: 1, maxLength: 8, default: '#008800'}, {name: 'message_no_luck', type: 'str', minLength: 1, maxLength: 255, default: 'Sorry, no luck'}, {name: 'message_win', type: 'str', minLength: 1, maxLength: 255, default: ':minionhappy'} ]; // handlers cb.onTip(function(tip) { total_kisses += tip['amount'] last_tip_amount = tip['amount'] last_tip_username = tip['from_user'] if (tip['amount'] > high_tip_amount) { high_tip_amount = tip['amount'] high_tip_username = tip['from_user'] } if (tip['amount'] == cb.settings.lottery_ticket_price) { if (tickets_remaining() > 0) { cb.sendNotice(tip['from_user'] + " tipped for a lottery ticket",'', cb.settings.message_color_back, cb.settings.message_color_front, 'bolder'); total_tipped += tip['amount']; draw_lot(tip['from_user']); total_tickets++; ticket_array.splice(ticket_number_index, 1); write_board(); } } cb.drawPanel(); }); cb.onMessage(function (message) { var text = message['m']; var user = message['user']; if (user == cb.room_slug) { if (text == '/help') { message['X-Spam'] = true; var message = "You can use the following commands:\n" + "/startlottery\n" + "/stoplottery\n" + "/showlotterypot"; cb.sendNotice(message, user); } if (text == '/startlottery') { message['X-Spam'] = true; total_tickets = 0; init(); } if (text == '/stoplottery') { message['X-Spam'] = true; total_tickets = cb.settings.lottery_ticket_count; first_prize_available = 0; second_prize_available = 0; third_prize_available = 0; cb.sendNotice('Lottery stopped'); } if (text == '/showlotterypot') { message['X-Spam'] = true; write_board(); } } }); function draw_lot(user) { ticket_number_index = Math.floor(Math.random() * ticket_array.length); var ticket_number = ticket_array[ticket_number_index]; var price = price_map.get(ticket_number); if (price != null && price.length > 0) { var limit = price_limit_map.get(price); if (total_tipped >= limit) { var message = cb.settings.message_win + "\n" + "!! Congratulations " + user + "\n" + "!! You are the Winner for: " + price + "\n\n"; cb.sendNotice(message, '', cb.settings.message_color_back, cb.settings.message_color_front, 'bolder'); total_tipped = total_tipped - limit; if (price == cb.settings.first_prize) { first_prize_available--; } if (price == cb.settings.second_prize) { second_prize_available--; } if (price == cb.settings.third_prize) { third_prize_available--; } } else { draw_lot(); } } else { cb.sendNotice(cb.settings.message_no_luck + "\n\n", '', cb.settings.message_color_back, cb.settings.message_color_front, 'bolder'); } } cb.onDrawPanel(function(user) { return { 'template': '3_rows_of_labels', 'row1_label': 'Kisses Received :', 'row1_value': '' + total_kisses, 'row2_label': 'My Love:', 'row2_value': format_username(high_tip_username) + ' (' + high_tip_amount + ')', 'row3_label': 'Latest Kiss Received:', 'row3_value': format_username(last_tip_username) + ' (' + last_tip_amount + ')' }; }); function format_username(val) { if (val === null) { return "--"; } else { return val.substring(0, 12); } } // helper functions function write_board() { if (tickets_remaining() == 0) { if (subject_is_set_with_0) { return; } subject_is_set_with_0 = true; } else { subject_is_set_with_0 = false; } var message = "--------------- Lottery Game ---------------\n" + "--- Buy a lottery ticket for " + cb.settings.lottery_ticket_price + " tokens --\n" + "---------- Tickets available: " + tickets_remaining() + " ------------\n" + "\n" + "First Prize: " + cb.settings.first_prize + " [x" + first_prize_available + "]\n" + "Second Prize: " + cb.settings.second_prize + " [x" + second_prize_available + "]\n" + "Third Prize: " + cb.settings.third_prize + " [x" + third_prize_available + "]\n" + "------------------------------------------------"; cb.sendNotice(message, '', cb.settings.message_color_back, cb.settings.message_color_front, 'bolder'); } function write_interval_message() { write_board(); cb.setTimeout(write_interval_message, cb.settings.interval_seconds * 1000) } function tickets_remaining() { var r = cb.settings.lottery_ticket_count - total_tickets; if (r < 0) { return 0; } else { return r; } } function init() { if (cb.settings.lottery_ticket_count > 0) { var list = []; var ticket_number = -1; ticket_array = new Array(cb.settings.lottery_ticket_count); for (var i = 0; i < cb.settings.lottery_ticket_count; i++) { ticket_array[i] = i; } for (var f = 0; f < cb.settings.first_prize_count; f++) { do { ticket_number = Math.floor(Math.random() * cb.settings.lottery_ticket_count); } while (list.includes(ticket_number)); list.push(ticket_number); price_map.set(ticket_number, cb.settings.first_prize); } for (var s = 0; s < cb.settings.second_prize_count; s++) { do { ticket_number = Math.floor(Math.random() * cb.settings.lottery_ticket_count); } while (list.includes(ticket_number)); list.push(ticket_number); price_map.set(ticket_number, cb.settings.second_prize); } for (var t = 0; t < cb.settings.third_prize_count; t++) { do { ticket_number = Math.floor(Math.random() * cb.settings.lottery_ticket_count); } while (list.includes(ticket_number)); list.push(ticket_number); price_map.set(ticket_number, cb.settings.third_prize); } price_limit_map.set(cb.settings.first_prize, cb.settings.first_prize_min_tokens_prerequisite); price_limit_map.set(cb.settings.second_prize, cb.settings.second_prize_min_tokens_prerequisite); price_limit_map.set(cb.settings.third_prize, cb.settings.third_prize_min_tokens_prerequisite); first_prize_available = cb.settings.first_prize_count; second_prize_available = cb.settings.second_prize_count; third_prize_available = cb.settings.third_prize_count; var tickets_value = cb.settings.lottery_ticket_count * cb.settings.lottery_ticket_price; var prizes_value = cb.settings.first_prize_min_tokens_prerequisite * cb.settings.first_prize_count + cb.settings.second_prize_min_tokens_prerequisite * cb.settings.second_prize_count + cb.settings.third_prize_min_tokens_prerequisite * cb.settings.third_prize_count; if (tickets_value >= prizes_value) { write_interval_message(); } else { var necessary_tickets = Math.floor(prizes_value / cb.settings.lottery_ticket_price); var necessary_ticket_price = Math.floor(prizes_value / cb.settings.lottery_ticket_count); cb.sendNotice("Not enough tickets in the pot to guarantee to reach all prizes,\n" + "you need to have at least " + necessary_tickets + " tickets or a ticket price of " + necessary_ticket_price, cb.room_slug); cb.sendNotice("Please resart the bot with the according settings", cb.room_slug); } } } init();
© Copyright Chaturbate 2011- 2025. All Rights Reserved.