Apps Home
|
Create an App
Menu and goals
Author:
w3bmun
Description
Source Code
Launch App
Current Users
Created by:
W3bmun
// Tip Menu App with Multi-Level Goals V.2.0 // Új funkciók: /tipmenu parancs, 5 szintű goal rendszer, egyedi pricing // Variables var total_tips = 0; var current_goal_level = 1; var current_goal_progress = 0; var last_tipper = null; var last_tip = 0; var ht_username = null; var ht_amount = 0; var menu_items = []; var goal_levels = []; // Settings cb.settings_choices = [ // Goal Level Settings { name: 'goal1', type: 'int', minValue: 0, defaultValue: 100, label: "1. Goal Amount (Set to 0 to disable goals)" }, { name: 'goal1_desc', type: 'str', minLength: 0, maxLength: 100, label: "1. Goal Description", required: false }, { name: 'goal2', type: 'int', minValue: 0, defaultValue: 200, label: "2. Goal Amount" }, { name: 'goal2_desc', type: 'str', minLength: 0, maxLength: 100, label: "2. Goal Description", required: false }, { name: 'goal3', type: 'int', minValue: 0, defaultValue: 350, label: "3. Goal Amount" }, { name: 'goal3_desc', type: 'str', minLength: 0, maxLength: 100, label: "3. Goal Description", required: false }, { name: 'goal4', type: 'int', minValue: 0, defaultValue: 500, label: "4. Goal Amount" }, { name: 'goal4_desc', type: 'str', minLength: 0, maxLength: 100, label: "4. Goal Description", required: false }, { name: 'goal5', type: 'int', minValue: 0, defaultValue: 700, label: "5. Final Goal Amount" }, { name: 'goal5_desc', type: 'str', minLength: 0, maxLength: 100, label: "5. Final Goal Description", required: false }, // Menu Items { name: 'item1', type: 'str', minLength: 1, maxLength: 50, label: "Menu Item 1 (required)" }, { name: 'price1', type: 'int', minValue: 0, maxValue: 9999, defaultValue: 10, label: "Item 1 Price (0 = disabled)" }, { name: 'item2', type: 'str', minLength: 1, maxLength: 50, label: "Menu Item 2 (required)" }, { name: 'price2', type: 'int', minValue: 0, maxValue: 9999, defaultValue: 20, label: "Item 2 Price (0 = disabled)" }, { name: 'item3', type: 'str', minLength: 0, maxLength: 50, label: "Menu Item 3", required: false }, { name: 'price3', type: 'int', minValue: 0, maxValue: 9999, defaultValue: 0, label: "Item 3 Price (0 = disabled)" }, { name: 'item4', type: 'str', minLength: 0, maxLength: 50, label: "Menu Item 4", required: false }, { name: 'price4', type: 'int', minValue: 0, maxValue: 9999, defaultValue: 0, label: "Item 4 Price (0 = disabled)" }, { name: 'item5', type: 'str', minLength: 0, maxLength: 50, label: "Menu Item 5", required: false }, { name: 'price5', type: 'int', minValue: 0, maxValue: 9999, defaultValue: 0, label: "Item 5 Price (0 = disabled)" }, { name: 'item6', type: 'str', minLength: 0, maxLength: 50, label: "Menu Item 6", required: false }, { name: 'price6', type: 'int', minValue: 0, maxValue: 9999, defaultValue: 0, label: "Item 6 Price (0 = disabled)" }, { name: 'item7', type: 'str', minLength: 0, maxLength: 50, label: "Menu Item 7", required: false }, { name: 'price7', type: 'int', minValue: 0, maxValue: 9999, defaultValue: 0, label: "Item 7 Price (0 = disabled)" }, { name: 'item8', type: 'str', minLength: 0, maxLength: 50, label: "Menu Item 8", required: false }, { name: 'price8', type: 'int', minValue: 0, maxValue: 9999, defaultValue: 0, label: "Item 8 Price (0 = disabled)" }, { name: 'item9', type: 'str', minLength: 0, maxLength: 50, label: "Menu Item 9", required: false }, { name: 'price9', type: 'int', minValue: 0, maxValue: 9999, defaultValue: 0, label: "Item 9 Price (0 = disabled)" }, { name: 'item10', type: 'str', minLength: 0, maxLength: 50, label: "Menu Item 10", required: false }, { name: 'price10', type: 'int', minValue: 0, maxValue: 9999, defaultValue: 0, label: "Item 10 Price (0 = disabled)" }, // Chat Advertisement { name: 'chat_ad', type: 'int', minValue: 0, maxValue: 999, defaultValue: 10, label: 'Advertise Menu in Chat Every _____ Mins (Set 0 to Disable)' } ]; // Goal rendszer építése function buildGoalLevels() { goal_levels = []; for (var i = 1; i <= 5; i++) { var amount = cb.settings['goal' + i]; var desc = cb.settings['goal' + i + '_desc']; if (amount && amount > 0) { goal_levels.push({ level: i, amount: amount, description: desc || "Goal " + i, completed: false }); } } // Goalok sorba rendezése összeg szerint goal_levels.sort(function(a, b) { return a.amount - b.amount; }); } // Menu építés function buildMenu() { menu_items = []; var used_prices = []; var duplicate_prices = []; for (var i = 1; i <= 10; i++) { var item = cb.settings['item' + i]; var price = cb.settings['price' + i]; // Ha van item és ár nagyobb mint 0 if (item && item.trim() !== '' && price > 0) { // Duplikált árak ellenőrzése if (used_prices.indexOf(price) !== -1) { duplicate_prices.push(price); } else { used_prices.push(price); } menu_items.push({ item: item.trim(), price: price, index: i }); } } // Figyelmeztetés duplikált árakra if (duplicate_prices.length > 0) { cb.chatNotice("⚠️ Warning: Duplicate prices detected: " + duplicate_prices.join(", "), cb.room_slug); } } // Aktuális goal megkeresése function getCurrentGoal() { for (var i = 0; i < goal_levels.length; i++) { if (!goal_levels[i].completed) { return goal_levels[i]; } } return null; // Minden goal teljesítve } // Goal progress kiszámítása function calculateGoalProgress() { var current_goal = getCurrentGoal(); if (!current_goal) return { completed: true, remaining: 0 }; var previous_goal_total = 0; for (var i = 0; i < goal_levels.length; i++) { if (goal_levels[i].level < current_goal.level && goal_levels[i].completed) { previous_goal_total += goal_levels[i].amount; } } var needed_for_current = current_goal.amount; var progress_on_current = total_tips - previous_goal_total; var remaining = needed_for_current - progress_on_current; return { completed: false, current_progress: Math.max(0, progress_on_current), needed: needed_for_current, remaining: Math.max(0, remaining), goal: current_goal }; } // Tip handler cb.onTip(function(tip) { total_tips += tip['amount']; // Menu elem keresése var found_item = null; for (var i = 0; i < menu_items.length; i++) { if (tip['amount'] === menu_items[i].price) { found_item = menu_items[i]; break; } } // Menu elem aktiválás if (found_item) { cb.chatNotice("✨ " + tip['from_user'] + " tipped for: " + found_item.item + " ✨"); } // Statisztikák frissítése last_tip = tip['amount']; last_tipper = tip['from_user']; if (tip['amount'] > ht_amount) { ht_amount = tip['amount']; ht_username = tip['from_user']; } // Goal ellenőrzés checkGoalProgress(); cb.drawPanel(); }); // Goal progress ellenőrzése function checkGoalProgress() { var current_goal = getCurrentGoal(); if (!current_goal) return; var progress = calculateGoalProgress(); if (progress.remaining <= 0) { // Goal teljesítve! current_goal.completed = true; var message = "🎉 GOAL " + current_goal.level + " REACHED! 🎉"; if (current_goal.description) { message += " " + current_goal.description; } cb.chatNotice(message); // Következő goal ellenőrzése var next_goal = getCurrentGoal(); if (next_goal) { cb.chatNotice("🎯 Next Goal: " + next_goal.description + " (" + next_goal.amount + " tokens)"); } else { cb.chatNotice("🏆 ALL GOALS COMPLETED! Thank you everyone! 🏆"); } } } // Chat Commands cb.onMessage(function(msg) { // Highest tipper háttérszín if (msg['user'] == ht_username && ht_username !== null) { msg['background'] = '#CCFF99'; } if (msg['m'] == '/tipmenu') { displayTipMenuToUser(msg['user']); msg['X-Spam'] = true; } if (msg['m'] == '/showmenu' && msg['user'] == cb.room_slug) { displayTipMenuToRoom(); msg['X-Spam'] = true; } if (msg['m'] == '/goals') { displayGoalsToUser(msg['user']); msg['X-Spam'] = true; } return msg; }); // Tip Menu megjelenítés egy usernek function displayTipMenuToUser(username) { if (menu_items.length === 0) { cb.chatNotice("No tip menu items configured.", username); return; } cb.chatNotice('━━━━━ ' + cb.room_slug + 's Tip Menu ━━━━━', username); for (var i = 0; i < menu_items.length; i++) { cb.chatNotice('💎 ' + menu_items[i].item + ' → ' + menu_items[i].price + ' tokens', username); } cb.chatNotice('━━━━━━━━━━━━━━━━━━━━━━━━━━', username); } // Tip Menu megjelenítés a szobának function displayTipMenuToRoom() { if (menu_items.length === 0) { cb.chatNotice("No tip menu items configured."); return; } cb.chatNotice('━━━━━ ' + cb.room_slug + 's Tip Menu ━━━━━'); for (var i = 0; i < menu_items.length; i++) { cb.chatNotice('💎 ' + menu_items[i].item + ' → ' + menu_items[i].price + ' tokens'); } cb.chatNotice('━━━━━━━━━━━━━━━━━━━━━━━━━━'); } // Goal-ok megjelenítése function displayGoalsToUser(username) { if (goal_levels.length === 0) { cb.chatNotice("No goals configured.", username); return; } cb.chatNotice('━━━━━ Goal Progress ━━━━━', username); for (var i = 0; i < goal_levels.length; i++) { var goal = goal_levels[i]; var status = goal.completed ? '✅' : '🎯'; cb.chatNotice(status + ' Goal ' + goal.level + ': ' + goal.description + ' (' + goal.amount + ' tokens)', username); } cb.chatNotice('━━━━━━━━━━━━━━━━━━━━━━━━━━', username); } // Panel megjelenítés cb.onDrawPanel(function(user) { if (goal_levels.length === 0) { // Nincs goal, csak menu var first_item = menu_items.length > 0 ? menu_items[0] : null; var first_item_text = first_item ? 'Tip ' + first_item.price + ' tokens for "' + first_item.item + '"' : 'Use /tipmenu to see options'; return { 'template': '3_rows_12_22_31', 'row1_label': 'Tip Menu Active!', 'row1_value': 'Type /tipmenu to see it', 'row2_label': 'Highest Tip:', 'row2_value': nullCheck(ht_username) + ' (' + ht_amount + ' tokens)', 'row3_value': first_item_text }; } else { // Van goal rendszer var progress = calculateGoalProgress(); if (progress.completed) { return { 'template': '3_rows_12_22_31', 'row1_label': '🏆 All Goals Done!', 'row1_value': 'Total: ' + total_tips + ' tokens', 'row2_label': 'Tip Menu:', 'row2_value': 'Type /tipmenu to see it', 'row3_value': 'Thanks everyone! 💖' }; } else { return { 'template': '3_rows_12_22_31', 'row1_label': 'Goal ' + progress.goal.level + ':', 'row1_value': progress.current_progress + '/' + progress.needed + ' (' + progress.remaining + ' left)', 'row2_label': progress.goal.description, 'row2_value': 'Type /tipmenu for menu', 'row3_value': 'Total raised: ' + total_tips + ' tokens' }; } } }); // Segédfüggvények function nullCheck(str) { if (str === null || str === undefined) { return "---"; } return str.toString().substring(0, 15); } function chatAd() { if (menu_items.length > 0) { cb.chatNotice('💫 Tip Menu Active! Type /tipmenu to see all options! 💫'); } // Goal hirdetés if (goal_levels.length > 0) { var progress = calculateGoalProgress(); if (!progress.completed) { cb.chatNotice('🎯 Current Goal: ' + progress.goal.description + ' (' + progress.remaining + ' tokens remaining)'); } } if (cb.settings.chat_ad > 0) { cb.setTimeout(chatAd, (cb.settings.chat_ad * 60000)); } } // Inicializálás function init() { buildGoalLevels(); buildMenu(); if (cb.settings.chat_ad > 0) { cb.setTimeout(chatAd, (cb.settings.chat_ad * 60000)); } var status = "📋 Tip Menu started with " + menu_items.length + " items"; if (goal_levels.length > 0) { status += " and " + goal_levels.length + " goal levels"; } cb.chatNotice(status + "."); } init();
© Copyright Chaturbate 2011- 2026. All Rights Reserved.