Apps Home
|
Create an App
Ravens Tip Menu and Multi-Goal
Author:
ravenhart
Description
Source Code
Launch App
Current Users
Created by:
Ravenhart
// Installed npm packages: jquery underscore request express // jade shelljs passport http sys lodash async mocha chai sinon // sinon-chai moment connect validator restify ejs ws co when // helmet wrench brain mustache should backbone forever debug jsdom // Tip Menu and Multi-Goal App by Raven Hart V.1.0 // // Based on Tip Menu App by FayNight V.1.0 And Tip Goal by Admin // Variables var total_tips = 0; var goal_tips = 0; var last_tipper = null; var last_tip = 0; var ht_username = null; var ht_amount = 0; var currentGoal = 0; var currentItem = 0; // Settings cb.settings_choices = [{ name: 'goalAmount1', type: 'int', minValue: 10, defaultValue: 200, label: "Goal 1 Amount (Required)" }, { name: 'goalDesc1', type: 'str', minLength: 0, MaxLength: 300, label: "Goal 1 Description. Will become room description (along with goal tips) while goal is active. (Required)", }, { name: 'goalAmount2', type: 'int', minValue: 10, defaultValue: 200, label: "Goal 2 Amount (Required)" }, { name: 'goalDesc2', type: 'str', minLength: 0, MaxLength: 300, label: "Goal 2 Description. Will become room description (along with goal tips) while goal is active. (Required)", required: false }, { name: 'goalAmount3', type: 'int', minValue: 0, defaultValue: 0, label: "Goal 3 Amount (Set to 0 to Disable)" }, { name: 'goalDesc3', type: 'str', minLength: 0, MaxLength: 300, label: "Goal 3 Description. Will become room description (along with goal tips) while goal is active. (Optional)", required: false }, { name: 'goalAmount4', type: 'int', minValue: 0, defaultValue: 0, label: "Goal 4 Amount (Set to 0 to Disable)" }, { name: 'goalDesc4', type: 'str', minLength: 0, MaxLength: 300, label: "Goal 4 Description. Will become room description (along with goal tips) while goal is active. (Optional)", required: false }, { name: 'goalAmount5', type: 'int', minValue: 0, defaultValue: 0, label: "Goal 5 Amount (Set to 0 to Disable)" }, { name: 'goalDesc5', type: 'str', minLength: 0, MaxLength: 300, label: "Goal 5 Description. Will become room description (along with goal tips) while goal is active. (Optional)", required: false }, { name: 'goalAmount6', type: 'int', minValue: 0, defaultValue: 0, label: "Goal 6 Amount (Set to 0 to Disable)" }, { name: 'goalDesc6', type: 'str', minLength: 0, MaxLength: 300, label: "Goal 6 Description. Will become room description (along with goal tips) while goal is active. (Optional)", required: false }, { name: 'goalAmount7', type: 'int', minValue: 0, defaultValue: 0, label: "Goal 7 Amount (Set to 0 to Disable)" }, { name: 'goalDesc7', type: 'str', minLength: 0, MaxLength: 300, label: "Goal 7 Description. Will become room description (along with goal tips) while goal is active. (Optional)", required: false }, { name: 'goalAmount8', type: 'int', minValue: 0, defaultValue: 0, label: "Goal 8 Amount (Set to 0 to Disable)" }, { name: 'goalDesc8', type: 'str', minLength: 0, MaxLength: 300, label: "Goal 8 Description. Will become room description (along with goal tips) while goal is active. (Optional)", required: false }, { name: 'goalAmount9', type: 'int', minValue: 0, defaultValue: 0, label: "Goal 9 Amount (Set to 0 to Disable)" }, { name: 'goalDesc9', type: 'str', minLength: 0, MaxLength: 300, label: "Goal 9 Description. Will become room description (along with goal tips) while goal is active. (Optional)", required: false }, { name: 'goalAmount10', type: 'int', minValue: 0, defaultValue: 0, label: "Goal 10 Amount (Set to 0 to Disable)" }, { name: 'goalDesc10', type: 'str', minLength: 0, MaxLength: 300, label: "Goal 10 Description. Will become room description (along with goal tips) while goal is active. (Optional)", required: false }, { name: 'item1', type: 'str', minLength: 1, maxLength: 30, label: "Menu Item 1 (required)" }, { name: 'price1', type: 'int', minValue: 0, defaultValue: 10, label: "Item 1 Price (required)" }, { name: 'item2', type: 'str', minLength: 1, maxLength: 50, label: "Menu Item 2 (required)" }, { name: 'price2', type: 'int', minValue: 0, defaultValue: 20, label: "Item 2 Price (required)" }, { name: 'item3', type: 'str', minLength: 1, maxLength: 50, label: "Menu Item 3", required: false }, { name: 'price3', type: 'int', minValue: 0, label: "Item 3 Price", required: false }, { name: 'item4', type: 'str', minLength: 1, maxLength: 50, label: "Menu Item 4", required: false }, { name: 'price4', type: 'int', minValue: 0, label: "Item 4 Price", required: false }, { name: 'item5', type: 'str', minLength: 1, maxLength: 50, label: "Menu Item 5", required: false }, { name: 'price5', type: 'int', minValue: 0, label: "Item 5 Price", required: false }, { name: 'item6', type: 'str', minLength: 1, maxLength: 50, label: "Menu Item 6", required: false }, { name: 'price6', type: 'int', minValue: 0, label: "Item 6 Price", required: false }, { name: 'item7', type: 'str', minLength: 1, maxLength: 50, label: "Menu Item 7", required: false }, { name: 'price7', type: 'int', minValue: 0, label: "Item 7 Price", required: false }, { name: 'item8', type: 'str', minLength: 1, maxLength: 50, label: "Menu Item 8", required: false }, { name: 'price8', type: 'int', minValue: 0, label: "Item 8 Price", required: false }, { name: 'item9', type: 'str', minLength: 1, maxLength: 50, label: "Menu Item 9", required: false }, { name: 'price9', type: 'int', minValue: 0, label: "Item 9 Price", required: false }, { name: 'item10', type: 'str', minLength: 1, maxLength: 50, label: "Menu Item 10", required: false }, { name: 'price10', type: 'int', minValue: 0, label: "Item 10 Price", required: false }, { name: 'item11', type: 'str', minLength: 1, maxLength: 50, label: "Menu Item 11", required: false }, { name: 'price11', type: 'int', minValue: 0, label: "Item 11 Price", required: false }, { name: 'item12', type: 'str', minLength: 1, maxLength: 50, label: "Menu Item 12", required: false }, { name: 'price12', type: 'int', minValue: 0, label: "Item 12 Price", required: false }, { name: 'item13', type: 'str', minLength: 1, maxLength: 50, label: "Menu Item 13", required: false }, { name: 'price13', type: 'int', minValue: 0, label: "Item 13 Price", required: false }, { name: 'item14', type: 'str', minLength: 1, maxLength: 50, label: "Menu Item 14", required: false }, { name: 'price14', type: 'int', minValue: 0, label: "Item 14 Price", required: false }, { name: 'item15', type: 'str', minLength: 1, maxLength: 50, label: "Menu Item 15", required: false }, { name: 'price15', type: 'int', minValue: 0, label: "Item 15 Price", required: false }, { name: 'chat_ad', type: 'int', minValue: 0, maxValue: 999, defaultValue: 10, label: 'Advertise Menu in Chat Every _____ Mins (Set 0 to Disable)' } ]; // Handlers cb.onTip(function(tip) { total_tips += tip['amount']; goal_tips += tip['amount']; for (var i = 0; i < priceArray.length; i++) { if (tip['amount'] === priceArray[i]) { cb.chatNotice(itemArray[i]); } } update_app(); last_tip = tip['amount']; last_tipper = tip['from_user']; if (tip['amount'] > ht_amount) { ht_amount = tip['amount']; ht_username = tip['from_user']; } update_subject(); currentItem+=1; if (currentItem > itemArray.length) { currentItem = 0; } cb.drawPanel(); }); // Chat Commands cb.onMessage(function(msg) { if (msg['user'] == ht_username) { msg['background'] = '#CCFF99 '; } if (msg['m'].includes('/menu')) { cb.chatNotice('-----' + cb.room_slug + 's Tip Menu -----', msg['user']); for (var i = 0; i < listMenu.length; i++) { cb.chatNotice(listMenu[i], msg['user']); } } if (msg['m'].includes('/showmenu') && msg['user'] == cb.room_slug) { cb.chatNotice('-----' + cb.room_slug + 's Tip Menu -----'); for (var i = 0; i < listMenu.length; i++) { cb.chatNotice(listMenu[i]); } } return msg; }); // Display Panels cb.onDrawPanel(function(user) { return { 'template': '3_rows_12_22_31', 'row1_label': 'Goal:', 'row1_value': goal_tips + '/' + goalAmounts[currentGoal], 'row2_label': 'Tip Menu is Active!', 'row2_value': 'Type /menu to see it', 'row3_value': 'Tip ' + priceArray[currentItem] + 'tks For "' + itemArray[currentItem] + '"' }; }); // Setting Up Arrays var itemArray = [cb.settings.item1, cb.settings.item2]; var priceArray = [cb.settings.price1, cb.settings.price2]; var listMenu = ['' + cb.settings.item1 + ' For ' + cb.settings.price1 + 'tks ', '' + cb.settings.item2 + ' For ' + cb.settings.price2 + 'tks ']; if (cb.settings.price3 !== undefined) { itemArray.push(cb.settings.item3); priceArray.push(cb.settings.price3); listMenu.push('' + cb.settings.item3 + ' For ' + cb.settings.price3 + 'tks '); } if (cb.settings.price4 !== undefined) { itemArray.push(cb.settings.item4); priceArray.push(cb.settings.price4); listMenu.push('' + cb.settings.item4 + ' For ' + cb.settings.price4 + 'tks '); } if (cb.settings.price5 !== undefined) { itemArray.push(cb.settings.item5); priceArray.push(cb.settings.price5); listMenu.push('' + cb.settings.item5 + ' For ' + cb.settings.price5 + 'tks '); } if (cb.settings.price6 !== undefined) { itemArray.push(cb.settings.item6); priceArray.push(cb.settings.price6); listMenu.push('' + cb.settings.item6 + ' For ' + cb.settings.price6 + 'tks '); } if (cb.settings.price7 !== undefined) { itemArray.push(cb.settings.item7); priceArray.push(cb.settings.price7); listMenu.push('' + cb.settings.item7 + ' For ' + cb.settings.price7 + 'tks '); } if (cb.settings.price8 !== undefined) { itemArray.push(cb.settings.item8); priceArray.push(cb.settings.price8); listMenu.push('' + cb.settings.item8 + ' For ' + cb.settings.price8 + 'tks '); } if (cb.settings.price9 !== undefined) { itemArray.push(cb.settings.item9); priceArray.push(cb.settings.price9); listMenu.push('' + cb.settings.item9 + ' For ' + cb.settings.price9 + 'tks '); } if (cb.settings.price10 !== undefined) { itemArray.push(cb.settings.item10); priceArray.push(cb.settings.price10); listMenu.push('' + cb.settings.item10 + ' For ' + cb.settings.price10 + 'tks '); } if (cb.settings.price11 !== undefined) { itemArray.push(cb.settings.item11); priceArray.push(cb.settings.price11); listMenu.push('' + cb.settings.item11 + ' For ' + cb.settings.price11 + 'tks '); } if (cb.settings.price12 !== undefined) { itemArray.push(cb.settings.item12); priceArray.push(cb.settings.price12); listMenu.push('' + cb.settings.item12 + ' For ' + cb.settings.price12 + 'tks '); } if (cb.settings.price13 !== undefined) { itemArray.push(cb.settings.item13); priceArray.push(cb.settings.price13); listMenu.push('' + cb.settings.item13 + ' For ' + cb.settings.price13 + 'tks '); } if (cb.settings.price14 !== undefined) { itemArray.push(cb.settings.item14); priceArray.push(cb.settings.price14); listMenu.push('' + cb.settings.item14 + ' For ' + cb.settings.price14 + 'tks '); } if (cb.settings.price15 !== undefined) { itemArray.push(cb.settings.item15); priceArray.push(cb.settings.price15); listMenu.push('' + cb.settings.item15 + ' For ' + cb.settings.price15 + 'tks '); } var goalAmounts = [cb.settings.goalAmount1, cb.settings.goalAmount2]; var goalDescriptions = [cb.settings.goalDesc1, cb.settings.goalDesc2]; if (cb.settings.goalAmount3 !== 0) { goalAmounts.push(cb.settings.goalAmount3); goalDescriptions.push(cb.settings.goalDesc3); } if (cb.settings.goalAmount4 !== 0) { goalAmounts.push(cb.settings.goalAmount4); goalDescriptions.push(cb.settings.goalDesc4); } if (cb.settings.goalAmount5 !== 0) { goalAmounts.push(cb.settings.goalAmount5); goalDescriptions.push(cb.settings.goalDesc5); } if (cb.settings.goalAmount6 !== 0) { goalAmounts.push(cb.settings.goalAmount6); goalDescriptions.push(cb.settings.goalDesc6); } if (cb.settings.goalAmount7 !== 0) { goalAmounts.push(cb.settings.goalAmount7); goalDescriptions.push(cb.settings.goalDesc7); } if (cb.settings.goalAmount8 !== 0) { goalAmounts.push(cb.settings.goalAmount8); goalDescriptions.push(cb.settings.goalDesc8); } if (cb.settings.goalAmount9 !== 0) { goalAmounts.push(cb.settings.goalAmount9); goalDescriptions.push(cb.settings.goalDesc9); } if (cb.settings.goalAmount10 !== 0) { goalAmounts.push(cb.settings.goalAmount10); goalDescriptions.push(cb.settings.goalDesc10); } // Function Junction function update_app() { if (goalAmounts[currentGoal] == 0) {} else if (goal_tips >= goalAmounts[currentGoal]) { goal_reached(); } } function update_subject() { var new_subject = goalDescriptions[currentGoal] + " [" + tips_remaining() + " tokens remaining]"; cb.log("Changing subject to: " + new_subject); cb.changeRoomSubject(new_subject); } function goal_reached() { if (tips_remaining() === 0) { cb.chatNotice("Goal Reached! " + goalDescriptions[currentGoal]); goal_tips -= goalAmounts[currentGoal]; currentGoal += 1; } } function tips_remaining() { var r = goalAmounts[currentGoal] - goal_tips; if (r < 0) { return 0; } else { return r; } } function nullCheck(str) { if (str === null) { return "---"; } else return str.substring(0, 15); } function format_username(val) { if (val === null) { return "--"; } else { return val.substring(0, 12); } } function chatAd() { cb.chatNotice('/// Tip Menu Is Active! Tip ' + cb.settings.price1 + 'tks for "' + cb.settings.item1 + '" Or, Type /menu to see the full menu.'); cb.setTimeout(chatAd, (cb.settings.chat_ad * 60000)); } if (cb.settings.chat_ad > 0) { cb.setTimeout(chatAd, (cb.settings.chat_ad * 60000)); } function init() { update_app(); update_subject(); } init();
© Copyright Chaturbate 2011- 2025. All Rights Reserved.