Apps Home
|
Create an App
Glow Kisses
Author:
garterxxx
Description
Source Code
Launch App
Current Users
Created by:
Garterxxx
// Title: Glow Kiss — Tip-for-Kisses Counter // Author: Garter XXX // Version: 1.0.1 // Description: Convert tips into kisses, crown "My Love" (top single tip), and auto-update subject. // ---- State ---- var total_tokens = 0; // total tokens received var last_tip_username = null; var last_tip_amount = 0; var high_tip_username = null; // "My Love" = highest single tipper var high_tip_amount = 0; // ---- Settings UI ---- cb.settings_choices = [ { name: 'kiss_value', type: 'int', minValue: 1, default: 10, label: 'Tokens per Kiss' }, { name: 'goal_kisses', type: 'int', minValue: 1, default: 20, label: 'Kiss Goal (count)' }, { name: 'goal_description', type: 'str', minLength: 1, maxLength: 255, defaultValue: 'Kiss Goal' } ]; // ---- Helpers ---- function safeInt(n, fallback) { n = n | 0; return n > 0 ? n : (fallback | 0); } function kissesOwed() { var per = safeInt(cb.settings.kiss_value, 1); return Math.floor(total_tokens / per); } function kissesRemaining() { var goal = safeInt(cb.settings.goal_kisses, 1); var remain = goal - kissesOwed(); return remain < 0 ? 0 : remain; } function updateSubject() { cb.changeRoomSubject( (cb.settings.goal_description || 'Kiss Goal') + ' [' + kissesRemaining() + ' kisses remaining]' ); } function shortName(v) { return v ? String(v).substring(0, 12) : '--'; } // ---- Events ---- cb.onTip(function (tip) { var amt = tip.amount | 0; if (amt <= 0) return; // ignore non-positive values (safety) total_tokens += amt; last_tip_username = tip.from_user || null; last_tip_amount = amt; if (amt > high_tip_amount) { high_tip_amount = amt; high_tip_username = tip.from_user || null; } updateSubject(); cb.drawPanel(); }); cb.onDrawPanel(function () { var per = safeInt(cb.settings.kiss_value, 1); var goal = safeInt(cb.settings.goal_kisses, 1); return { template : '3_rows_of_labels', row1_label: 'Kisses Owed / Goal:', row1_value: (kissesOwed() + ' / ' + goal), row2_label: 'My Love (Top Tip):', row2_value: (shortName(high_tip_username) + ' (' + high_tip_amount + 't)'), row3_label: 'Latest Kiss:', row3_value: (shortName(last_tip_username) + ' (+' + Math.floor(last_tip_amount / per) + ')') }; }); // ---- Init ---- (function init() { // Normalize settings on load (defense-in-depth) if ((cb.settings.kiss_value | 0) <= 0) cb.settings.kiss_value = 10; if ((cb.settings.goal_kisses | 0) <= 0) cb.settings.goal_kisses = 20; updateSubject(); cb.drawPanel(); })();
© Copyright Chaturbate 2011- 2026. All Rights Reserved.