Apps Home
|
Create an App
Keep Going Ticket HiddenCam
Author:
tvaeera
Description
Source Code
Launch App
Current Users
Created by:
Tvaeera
/** Description : Keep it going combined with hidden tickets app and HiddenCam Version : 0.0.x Author : tvaeera Last Update : 26th March 2017 /**/ var kt_appCore = { /* propreties below*/ "tippers" : {}, "ticketOwners" : {}, "jar" : 0, /* options: 0-no, 1-yes, 2-finished */ "showStarted" : 0, "hiddenShowStarted" : 0, "roomMessage" : "", "tokensReceived" : 0, "availableTickets" : 0, "roomSubjectBefore" : "Tip for: {subject} {jarTips}/{tipsNeeded}", "roomSubjectDuring" : "Keep: {subject} {jarTips}", "roomSubjectEnd" : "Finished: {subject}", "onTipThankYou" : "Thank you {tipper}!", "onTipTicketAvailable": "{tipper} please note that a ticket for HiddenCam is available to you. \n You now can tip {ticketPrice} to get it. \n Tickets left: {availableTickets}", "ticketFreeMessage" : "{tipper} please note that a ticket for HiddenCam is available to you. \n The ticket was free, you own one now.", "ticketOwned" : "{tipper} please note that you own a HiddenCam ticket", "noTickets" : "{tipper} please note there are no more tickets available. Sorry.", "tipMoreForTicket" : "{tipper} unlock ticket tip option by tipping {neededTips} more. \n Tickets left: {availableTickets}", /* methods below */ "init" : function () { this.startRoomSubject(); this.generateTickets(); }, "onEnterRoom" : function () { }, "onTip" : function (tip) { var message = this.onTipThankYou; var ticketMessage = this.onTipTicketAvailable; var ticketFreeMessage = this.ticketFreeMessage; var ticketOwned = this.ticketOwned; var noTickets = this.noTickets; var color = cb.settings['ktSetting_noticeColor']; var hiddenOption = cb.settings['ktSetting_ticketHiddenOptions']; var hiddenShowPrice = cb.settings['ktSetting_ticketHiddenPrice']; var showPrice = parseInt(cb.settings['ktSetting_ticketPrice']); var currentTip = parseInt(tip['amount']); var tipperName = tip['from_user']; var userHasTicket = this.hasTicket(tipperName); var bigTipper = tip["from_user_tipped_tons_recently"]; cb.log("bigTipper: " + bigTipper); var tipperGender = tip["from_user_gender"]; cb.log("tipperGender: " + tipperGender); var tipperTotalTips = this.addTippsToTipper(tipperName, currentTip); var ticketPriceIfAvailable = this.getTicketPrice(tipperName, tipperTotalTips); message = message.replace("{tipper}", tipperName); cb.sendNotice(message, '', '', color, '', ''); cb.log("ticketPriceIfAvailable: " + ticketPriceIfAvailable); /** Handle start show /**/ this.onGloalAchieved(); /** Handle hidden tickets /**/ if (ticketPriceIfAvailable === 0) { if (!userHasTicket && currentTip == ticketPriceIfAvailable) { var giveTicketSuccess = this.giveTicket(tipperName); if (giveTicketSuccess === 1) { ticketFreeMessage = ticketFreeMessage.replace("{tipper}", tipperName); cb.sendNotice(ticketFreeMessage, tipperName, '#000000', color, 'bolder', ''); } } else { ticketOwned = ticketOwned.replace("{tipper}", tipperName); cb.sendNotice(ticketOwned, tipperName, '#000000', color, 'bolder', ''); } } else if (ticketPriceIfAvailable >= 0) { if (ticketPriceIfAvailable == currentTip && !userHasTicket) { var giveTicketSuccess = this.giveTicket(tipperName); if (giveTicketSuccess === 1) { ticketOwned = ticketOwned.replace("{tipper}", tipperName); cb.sendNotice(ticketOwned, tipperName, '#000000', color, 'bolder', ''); } } else if (!userHasTicket) { ticketMessage = ticketMessage.replace("{tipper}", tipperName); ticketMessage = ticketMessage.replace("{ticketPrice}", ticketPriceIfAvailable); ticketMessage = ticketMessage.replace("{availableTickets}", this.availableTickets); cb.sendNotice(ticketMessage, tipperName, '#000000', color, 'bolder', ''); } else if (userHasTicket && currentTip == showPrice) { ticketOwned = ticketOwned.replace("{tipper}", tipperName); cb.sendNotice(ticketOwned, tipperName, '#000000', color, 'bolder', ''); } } else if (!userHasTicket && hiddenOption == "No" && this.availableTickets > 0) { var tipMoreForTicket = this.tipMoreForTicket; var neededTips = hiddenShowPrice - tipperTotalTips; tipMoreForTicket = tipMoreForTicket.replace("{tipper}", tipperName); tipMoreForTicket = tipMoreForTicket.replace("{neededTips}", neededTips); tipMoreForTicket = tipMoreForTicket.replace("{availableTickets}", this.availableTickets); cb.sendNotice(tipMoreForTicket, tipperName, '#000000', color, 'bolder', ''); } else if (this.availableTickets == 0) { noTickets = noTickets.replace("{tipper}", tipperName); cb.sendNotice(noTickets, tipperName, '#000000', color, 'bolder', ''); } }, "addTippsToTipper" : function (tipperName, currentTip) { if (this.tippers.hasOwnProperty(tipperName)) { this.tippers[tipperName] += currentTip; } else { this.tippers[tipperName] = currentTip; } return this.tippers[tipperName]; }, "getTipperTipsTotal" : function(tipperName) { if (this.tippers.hasOwnProperty(tipperName)) { return this.tippers[tipperName]; } return 0; }, "getTicketPrice":function(tipperName, tipperTotalTips) { var hiddenTicketPrice = parseInt(cb.settings['ktSetting_ticketHiddenPrice']); var hiddenShowTicketsAvailable = this.availableTickets; var hiddenShowEnabled = cb.settings['ktSetting_ticketHiddenOptions']; var hiddenShowPrice = cb.settings['ktSetting_ticketHiddenPrice']; var showPrice = parseInt(cb.settings['ktSetting_ticketPrice']); var showAvailablePrice = -1; cb.log("hiddenShowEnabled: " + hiddenShowEnabled); cb.log("hiddenShowTicketsAvailable: " + hiddenShowTicketsAvailable); if ( hiddenShowEnabled == "No" || hiddenShowEnabled == "Yes" || hiddenShowEnabled == "Free" ) { cb.log("tipperTotalTips: " + tipperTotalTips); cb.log("hiddenShowPrice: " + hiddenShowPrice); if (hiddenShowTicketsAvailable > 0 && tipperTotalTips >= hiddenShowPrice) { showAvailablePrice = showPrice; } cb.log("hiddenShowEnabled: " + hiddenShowEnabled); if (hiddenShowTicketsAvailable > 0 && hiddenShowEnabled == "Free") { showAvailablePrice = 0; } } return showAvailablePrice; }, "hasTicket" : function(tipperName) { if (this.ticketOwners.hasOwnProperty(tipperName)) { return 1; } return 0; }, "giveTicket" : function(tipperName) { if (this.ticketOwners.hasOwnProperty(tipperName)) { return 0; // user already has ticket } else { if(this.availableTickets > 0) { this.ticketOwners[tipperName] = 1; this.availableTickets -= 1; } } return 1; // success }, "onGloalAchieved" : function() { var jarTips = this.jar; var neededTips = cb.settings['ktSetting_startShowValue']; if (jarTips >= neededTips) { this.showStarted = 1; this.startTicker(); } }, "startTicker" : function() { var interval = parseInt(cb.settings['ktSetting_jarGetEmptyInterval'])*1000; var tokenDrain = parseInt(cb.settings['ktSetting_jarGetEmptyAmount']); this.drainHook = setTimeout(function(tokenDrain){this.drain}, interval); }, "drain" : function(tokenDrain) { this.jar -= tokenDrain; if (this.jar < 0) { this.jar = 0; this.showStarted = 3; } delete this.drainHook; }, "onPause" : function() { }, "onResume" : function() { }, "onJarEmpty" : function() { }, "tipsNeeded" : function () { var jarTokens = this.jar; var neededTips = cb.settings['ktSetting_startShowValue']; return neededTips - jarTokens; }, "onTicketAvailable" : function(){ }, "updateRoomSubject" : function(tip){ var newSubject = this.getDynamicRoomSubject(); var subjectCore = cb.settings['ktSetting_roomMessage']; var tipsNeeded = cb.settings['ktSetting_startShowValue']; var currentTip = parseInt(tip['amount']); this.jar += currentTip; var jarTips = this.jar; newSubject = newSubject.replace("{subject}", subjectCore); newSubject = newSubject.replace("{jarTips}", jarTips); newSubject = newSubject.replace("{tipsNeeded}", tipsNeeded); cb.changeRoomSubject(newSubject); }, "startRoomSubject" : function(){ var newSubject = this.getDynamicRoomSubject(); var subjectCore = cb.settings['ktSetting_roomMessage']; var tipsNeeded = cb.settings['ktSetting_startShowValue']; var currentTip = 0; this.jar += currentTip; var jarTips = this.jar; newSubject = newSubject.replace("{subject}", subjectCore); newSubject = newSubject.replace("{jarTips}", jarTips); newSubject = newSubject.replace("{tipsNeeded}", tipsNeeded); cb.changeRoomSubject(newSubject); }, "getDynamicRoomSubject" : function() { var showStarted = this.showStarted; if (showStarted === 0) { var newSubject = this.roomSubjectBefore; } else if (showStarted === 1) { var newSubject = this.roomSubjectDuring; } else { var newSubject = this.roomSubjectEnd; } return newSubject; }, "generateTickets" : function() { this.availableTickets = parseInt(cb.settings['ktSetting_ticketsAvailable']); }, "getBigTipper" : function() { var maxTip = 0; var maxTipperName = "--"; for(var tipperName in this.tippers) { this.tippers.hasOwnProperty(tipperName); var tips = this.tippers[tipperName]; if (maxTip < tips) { maxTip = tips; maxTipperName = tipperName; } } return maxTipperName; } } cb.settings_choices = [ { name : 'ktSetting_ticketHiddenOptions', label : 'Ticket option is hidden', type : 'choice', choice1 : 'Yes', choice2 : 'No', choice3 : 'Free', choice4 : 'Disabled', defaultValue : 'No' }, { name : 'ktSetting_allowNewViewersAfterStart', label : 'Allow new users to buy tickets after start', type : 'choice', choice1 : 'Yes', choice2 : 'No', defaultValue : 'No' }, { name : 'ktSetting_ticketHiddenPrice', label : 'Ticket requirement in tokens', type : 'int', minValue : 1, defaultValue : 100 }, { name : 'ktSetting_ticketPrice', label : 'Ticket actual price', type : 'int', minValue : 1, defaultValue : 50 }, { name : 'ktSetting_ticketsAvailable', label : 'Tickets available', type : 'int', minValue : 1, maxValue : 500, defaultValue : 10 }, { name : 'ktSetting_startShowValue', label : 'Show Starts at', type : 'int', defaultValue : 200 }, { name : 'ktSetting_startHiddenShowValue', label : 'Hidden Show Starts at', type : 'int', defaultValue : 400 }, { name : 'ktSetting_jarGetEmptyInterval', label : 'Drain jar empty interval every (seconds)', type : 'int', defaultValue : 10 }, { name : 'ktSetting_jarGetEmptyAmount', label : 'Drain jar tokens amount per interval', type : 'int', defaultValue : 1 }, { name : 'ktSetting_roomMessage', label : 'Room Subject', type : 'str', defaultValue : '' }, { name : 'ktSetting_noticeColor', type : 'str', label : 'Notice color (html code default pink #FF00FF)', defaultValue : '#FF00FF' }, { name : 'ktSetting_chatAdInterval', label : 'Delay in minutes between notice being displayed (minimum 1)', type : 'int', minValue : 1, maxValue : 999, defaultValue : 2 } ]; cb.onTip(function (tip) { kt_appCore.updateRoomSubject(tip); kt_appCore.onTip(tip); }); cb.onDrawPanel(function(user) { if (user == cb.room_slug) { if (kt_appCore.showStarted == 1) { showOrNot = "Show is On"; } else { showOrNot = "STOP SHOW!!"; } return { 'template' : '3_rows_of_labels', 'row1_label' : 'Keep It Going:', 'row1_value' : showOrNot, 'row2_label' : 'Total Tokens Earned:', 'row2_value' : "" + kt_appCore.tokensReceived + ' Tokens', 'row3_label' : 'Tip Jar:', 'row3_value' : kt_appCore.jar }; } else { if(kt_appCore.showStarted == 1) { return { 'template': '3_rows_of_labels', 'row1_label': 'Keep It Going:', 'row1_value': 'Don\'t Let It Empty', 'row2_label': 'Tip Jar:', 'row2_value': kt_appCore.jar, 'row3_label': 'Big Tipper:', 'row3_value': kt_appCore.getBigTipper() }; } else if (kt_appCore.showStarted == 3 && goalMet == 1) { var toGo = kt_appCore.tipsNeeded(); return { 'template': '3_rows_of_labels', 'row1_label': 'Lets Get It Going!', 'row1_value': 'Start Tipping', 'row2_label': 'Tip Jar:', 'row2_value': kt_appCore.jar, 'row3_label': 'Big Tipper:', 'row3_value': kt_appCore.getBigTipper() }; } else { var toGo = kt_appCore.tipsNeeded(); var startAt = cb.settings['ktSetting_startShowValue']; return { 'template': '3_rows_of_labels', 'row1_label': 'Lets Get It Going!', 'row1_value': 'Start Tipping', 'row2_label': 'Start Goal:', 'row2_value': startAt + ' tokens', 'row3_label': 'Still Need:', 'row3_value': toGo + ' tokens' }; } } }); kt_appCore.init();
© Copyright Chaturbate 2011- 2025. All Rights Reserved.