Apps Home
|
Create an App
Kyle222222_AppTest1
Author:
kyle222222
Description
Source Code
Launch App
Current Users
Created by:
Kyle222222
/* Title: JustinSandersXxx Author: cb_kyle (at Chaturbate) Version: 0.1 (07/01/2017) Cost: If you like this, please donate a Tip to the author. Anything is greatly appreciated. If you use this regularly, please Tip at least 1 Token per day that you use this. Please include this app/bot name in the Tip Notes, and thanks. (If you have more than 200 users in your room, please consider more than a 1 Token Tip.) *** IN DEVELOPMENT *** Description: An APP adapted for the model JustinSandersXxx . This code was added on to the app "Tip Goal by admin" (https://chaturbate.com/apps/sourcecode/tip-goal/?version=&slot=0). */ //TODO: profiling: //TODO: add coupon system. tip 10, get 20 off ticket show. //TODO: add coupon icon to those that have tickets //TODO: vip users? //TODO: voting //TODO: twitter promo? //TODO: muting non ticket holders -- bug. mutes moderators and broadcaster cb.settings_choices = [{ name: 'tipbreak_min_tip_amount', type: 'int', minValue: 1, defaultValue: 1, label: 'Minimum Tip Amount to avoid Hidden Screen (TICKET PRICE)' }, { name: 'tokens', type: 'int', minValue: 1, default: 100, label: 'tokens (GOAL)' }, { name: 'tipbreak_repeat_time', type: 'int', minValue: 1, defaultValue: 3, label: 'Time to start the next Hidden Screen trigger (in minutes)' }, { name: 'tipbreak_wait_time', type: 'int', minValue: 1, defaultValue: 15, label: 'Time to force people to see the Hidden Screen (in seconds)' }, { name: 'tipbreak_msg', type: 'str', minLength: 8, maxLength: 128, defaultValue: 'The Show will return shortly. Thanks for your patience.', label: "Hidden Camera message" }, { name: 'PmOnIm_tip_amount', //Added for PmOnIm type: 'int', minValue: 1, defaultValue: 3, label: 'Tip Cost for PM on IM:' } ]; var TIP_NOTE_NOTICE_BACKGROUND = '#FFFF00'; //#FFFF00 - yellow; var IsTipRemainingOn = false; // "Tip Remaining: x" var IsTipNoLimitOn = false; // "Tip Recieved: x" var RoomSubject = ''; var iSubjectTipRemainThreshold = 1000; var iSubjectTipRemainLastValueUpdated = 0; var iSubjectTipRemainChange = 50; var iTipGoalMetNo = 0; var TIPPEDGOAL_RESET_VALUE = 125; var SPAM_BACKGROUND = '#D1D0CE'; // #D1D0CE - Grey Goose; #848482 - battleship gray var AntiRobotEnterThreshold = 17; //time users have to wait in order to speak. var IsAntiSpamOn = true; var PMONIM_BACKGROUND = '#F9966B'; //#FFFF00 - yellow; #F9966B - light salmon var IsPmOnImOn = true; var PmOnImUsers = {}; // .aliasId var PmOnImTipCosts = parseInt(cb.settings.PmOnIm_tip_amount); var PmOnImHelpInfo = '/PMHelp = Help for PM on IM CHAT: This allows users to send a pm-like note ' + ' to the broadcaster without leaving the chat screen. To use type "/pm <your message>" ' + '(without quotes).' var WHISPER_BACKGROUND = '#ADDFFF'; //#FFFF00 - yellow; #95B9C7 - baby blue; #ADDFFF - light blue var IsWhisperOn = true; var TIP_MENU_NOTICE_BACKGROUND = '#E3E4FA'; //'#E3E4FA' - lavendar blue '#ADDFFF'; var IsTipMenuNoticeOn = true; var sNoticeBackground = ''; var sNoticeForeground = '#800080'; //#800080 - purple; #F75D59 - bean red; #800000 - maroon var Panel11 = 'Tip Received / Goal :'; var Panel12 = ''; var Panel21 = ''; var Panel22 = ''; var Panel31 = ''; var Panel32 = ''; var Panel11Override = ''; var Panel12Override = ''; var Panel21Override = ''; var Panel22Override = ''; var IsCountDownTimerRunning = false; var CountDownTimerStartTime = 0; var CountDownTimerTimeInSec = 0; var CountDownTimerRemainingInSec = 0; var IsCountUpTimerRunning = false; var CountUpTimerStartTime = 0; var CountUpTimerRunningInSec = 0; var Items = {}; // .Cost = 0; .Description = '' var ItemNo = 0; var Tasks = []; // .ItemDesc = ''; TaskNo = 0; .ItemCost = 0; .TipName = ''; .TipCost = 0; .SubmitTime = dt; .CompleteTime = dt; var CurrentTask = 0; var LastTask = 0; var HasActiveTask = false; var TaskPanel31 = ''; var TaskPanel31Old = ''; var TaskPanel32 = ''; var TaskPanel32Old = ''; var SuggestedStartTaskDisply = 0; var IsUserProfileOn = false; var Aliases = {}; var ArAliases = []; //assigns a number to each person that messages. (consider addign those that tips) var iArAliasNo = 0; ArAliases[0] = ''; var ArProfileCache = []; var iMaxProfileCache = 5; var ArTopTipperValue = []; var ArTopTipperUser = []; var iTopTipperMaxNo = 5; var iTopTipperCurrentNo = 1; var IsSelfIdentifyOn = false; var tipbreak_running = false; var Tippers = {}; var TipMin = cb.settings.tipbreak_min_tip_amount; var HideWaitTime = cb.settings.tipbreak_wait_time; var RepeatWaitTime = cb.settings.tipbreak_repeat_time; var TipBreakMsg = cb.settings.tipbreak_msg; var IsRepeatingNoticeRunning = false; var RepeatingNoticeMessage = ''; var RepeatingNoticeTimeInSec = 300; //300 sec = 5 minutes var IsRepeatingNoticeRunning2 = false; var RepeatingNoticeMessage2 = ''; var RepeatingNoticeTimeInSec2 = 300; //300 sec = 5 minutes var IsRepeatingNoticeRunning3 = false; var RepeatingNoticeMessage3 = ''; var RepeatingNoticeTimeInSec3 = 300; //300 sec = 5 minutes var IsUserProfileOn = false; var Aliases = {}; var ArAliases = []; //assigns a number to each person that messages. (consider addign those that tips) var iArAliasNo = 0; ArAliases[0] = ''; var IsTicketIconOn = false; var TICKET_ICON_CODE = ':tkt1 '; // ':tkt1' var NotifyTicketOnEnter = false; var TICKETING_BACKGROUND = '#E9CFEC'; // '#E9CFEC' -- periwinkle; '#9172EC' -- purple-ish var IsTicketingRunning = false; var IsTicketingShowActive = false; var SilentNonTicketHolder = true; var SILENT_NON_TICKET_HOLDER_BACKGROUND = '#D1D0CE'; // #D1D0CE - Grey Goose; #848482 - battleship gray var TicketingStatus = 0; var TicketingTimerInMin = 0; var TicketingMessage = ''; var TicketPrice = 0; //use TipMin if this is 0. var IsAnotherTicketPriceOn = false; //var AnotherTicketPrice = 100; var RepeatingNotice1ForegroundColor = "#FF0000"; // '#FF0000' -- red var RepeatingNotice1ForegroundColor3 = "#800080"; // '#FF0000' -- red var CONF_BACKGROUND = '#98FF98'; //#98FF98 - mint green; #99C68E - frog gree; #4CC552 - kelly green; #FFFF00 - yellow; #95B9C7 - baby blue; #ADDFFF - light blue var IsConfOn = false; var ArConf = []; var IsUserPrefixOn = false; var HTW_BACKGROUND = '#98FF98'; // #98FF98 - mint green; #D1D0CE - Grey Goose; #848482 - battleship gray var IsHighestTipperWinsOn = false; var HtwTimeLimit = 300; //in seconds var HtwStartTime = 0; var HtwLastCallTime = 15; //in seconds var HtwPrize = ''; var HtwTippers = {}; var HtwTopTipper = ''; var HtwTopTipperValue = 0; var IsRvbGameOn = false; var IsRvbHideDisplay = false; var RvbTeamRedTotal = 0; var RvbTeamBlueTotal = 0; var RvbTeamGreenTotal = 0; //-- var RvbTeamOrangeTotal = 0; //-- var RvbRedBackground = '#FFDFDD'; // #FFDFDD - pink bubblegum var RvbBlueBackground = '#CFECEC'; // #CFECEC - pale blue lilly ; #C6DEFF - Powder Blue var RvbGreenBackground = '#C3FDB8'; //-- #C3FDB8 - light jade var RvbOrangeBackground = '#FFDB58'; //-- #FFDB58 - mustard var RVB_RED_PREFIX = ':heart2 '; var RVB_BLUE_PREFIX = ':tweetbird '; var RVB_GREEN_PREFIX = ':greenHeart '; //-- var RVB_ORANGE_PREFIX = ':orangeleaf '; //-- var ArRvbTeamRedUser = []; var ArRvbTeamBlueUser = []; var ArRvbTeamGreenUser = []; //-- var ArRvbTeamOrangeUser = []; //-- var IsPhraseWordEnable = false; var PhraseWord = 'abcxyz123'; var ArPhraseWordUser = []; var IsSingleWarningOn = false; var IsRaffleOn = false; var RaffleCost = 3; var ArRaffleUser = []; // pos == 0 is used for random fairness. var RaffleNextUserPos = 0; var IsLushOverrideOn = false; var TEST_LushOn = false; var IsHushOverrideOn = false; var IsPmReplaceOn = false; var IsItemJarOn = false; var ItemJarName = ''; var ItemJarCost = 0; var ItemJarPartial = 0; var ItemJarTotal = 0; var ItemJarCompleted = 0; var IsRollDiceOn = false; var RollDiceCount = 0; var RollDiceMatch = 0; var RollDicePhrase = ''; var RollDicePrizes = []; var RollDiceWinners = []; var RollDiceCustomMatch = 0; var RollDiceCustomMatches = []; var RollDiceWaitToRepeatInSec = 0; var RollDiceQuietLevel = 0; //var RollDiceOne = 0; //var RollDiceTwo = 0; var IsIdentifyGirlOn = false; var IsIdentifyTransOn = false; var IsProtectedChatOn = false; var VOTING_BACKGROUND = '#E9CFEC'; // '#E9CFEC' -- periwinkle; '#9172EC' -- purple-ish var IsVotingOn = false; var arVoteChoices = []; var arVotes = []; function runVoting() { if (IsVotingOn) { cb.sendNotice('*** Voting is Running *** ', '', VOTING_BACKGROUND); cb.setTimeout(runVoting, 60000); } } function startVoting() { cb.setTimeout(runVoting, 1000); } cb.tipOptions(function(user) { // If we determine we want to show no custom tip options, do this . . . return; }); /* cb.tipOptions(function(user) { return {options:[ {label: 'choice1'}, {label: 'Vote: Place A'}, {label: 'choice3'} ], label:"Select a choice:"}; }); */ function rollDice(psName) { var dice1 = (Math.round(Math.random() * (5))) + 1; var dice2 = (Math.round(Math.random() * (5))) + 1; var diceTotal = dice1 + dice2; if (RollDiceMatch == diceTotal) { RollDiceCount++; var sTmp = '#' + diceTotal + ' - ' + psName; RollDiceWinners.push(sTmp); cb.drawPanel(); } if (RollDiceCustomMatch == diceTotal) { var sTmp = '#' + diceTotal + ' - ' + psName; RollDiceCustomMatches.push(sTmp); } if (RollDiceQuietLevel == 1) { if (RollDiceMatch == diceTotal) { cb.sendNotice( 'Rolling Dice (' + psName + ')'); cb.sendNotice( ':RedDieSmall' + dice1 + ' :RedDieSmall' + dice2 + ' (' + diceTotal + ')'); } else { cb.sendNotice( 'Rolling Dice (' + psName + ' rolls # ' + diceTotal + ')'); cb.sendNotice( ':RedDieSmall' + dice1 + ' :RedDieSmall' + dice2 + ' ', psName); } } else if (RollDiceQuietLevel == 2) { if (RollDiceMatch == diceTotal) { cb.sendNotice( 'Rolling Dice (' + psName + ' rolls # ' + diceTotal + ')'); } else { cb.sendNotice( ':RedDieSmall' + dice1 + ' :RedDieSmall' + dice2 + ' (' + diceTotal + ')', psName); } } else { // assuming 0 cb.sendNotice( 'Rolling Dice (' + psName + ')'); // cb.sendNotice( ':reddie' + dice1 + ' :reddie' + dice2 + ' (' + diceTotal + ')'); cb.sendNotice( ':RedDieSmall' + dice1 + ' :RedDieSmall' + dice2 + ' (' + diceTotal + ')'); } } function applyItemJar(piTip) { if (IsItemJarOn) { ItemJarPartial += piTip; if ((ItemJarCost > 0) && (ItemJarPartial > 0)) { while (ItemJarPartial >= ItemJarCost) { ItemJarTotal++; ItemJarPartial -= ItemJarCost; } } } } function addOneRaffle(psUser) { ArRaffleUser[RaffleNextUserPos] = psUser; RaffleNextUserPos++; //cb.sendNotice('TEST2: ' + psUser); Aliases[psUser].RaffleDetail += '#' + RaffleNextUserPos + ' '; cb.sendNotice(psUser + ' has Raffle Ticket #' + RaffleNextUserPos + ' . (Type /i to see your Raffle Tickets) '); //assume raffle # starts at 0 for random to be fair, each Pos + 1 = Actual # } function applyRaffle(piTip, psUser) { if (IsRaffleOn) { if (piTip == RaffleCost) { total_tipped -= piTip; subGoal_total_tipped -= piTip; addOneRaffle(psUser); } } } function drawRaffle() { var iNum = Math.round(Math.random() * (ArRaffleUser.length -1)); //if there are 1 user, then only pos 0 is the only choice; hence, length -1 //iNum + 1; cb.sendNotice('*** Raffle Drawing..... #' + (iNum + 1) + ' has been drawn. The name is ' + ArRaffleUser[iNum] + '. '); } function resetRaffle() { var sTmp1 = ''; while (ArRaffleUser.length > 0) { sTmp1 = ArRaffleUser.pop(); Aliases[sTmp1].RaffleDetail = ''; } RaffleNextUserPos = 0; } function addConfUser(psUser) { ArConf.push(psUser); Aliases[psUser].InConf = 'confa'; } function endConf() { var sUser = ''; while (ArConf.length > 0) { sUser = ArConf.pop(); Aliases[sUser].InConf=''; } } function addItem(piCost, psDescription) { var item = {}; item.Cost = piCost; item.Description = psDescription; Items[piCost] = item; } function checkAndAddAlias(psUser) { if (!Aliases.hasOwnProperty(psUser)) { //new alias var user = {}; user.Message = true; user.TimeEntered = 0; user.has_tokens = false; user.TimeWaitSkip = false; user.ProfileDetail = ''; user.IsSpammer = false; user.IsSpammer9 = false; user.InConf = ''; iArAliasNo++; //must appear before next line: user.AliasNo = iArAliasNo; user.AliasNo = iArAliasNo; user.Prefix = ''; user.ProtectedChatNo = 0; user.RvbTeam = ''; user.SingleWarningLastTippedTime = 0; user.AnotherTicketPrice = 0; user.RaffleDetail = ''; user.Credit = 0; //to be used for games like Blackjack user.DataBj = {}; //Blackjack Data user.RollDiceLast = 0; Aliases[psUser] = user; ArAliases[iArAliasNo] = psUser; } } cb.onMessage(function(msg) { var sUser = msg['user']; var sProfilePrefix = ''; checkAndAddAlias(sUser); sProfilePrefix = '#' + Aliases[sUser].AliasNo; var iPowerUser = false; //consider doing poweruser check in profile creation. if (cb.room_slug === msg['user']) { iPowerUser = true; } else if (msg['user'] === 'cb_kyle') { iPowerUser = true; if (msg['m'].substring(0, 9).match(/\//)) { //just incase kyle mistypes a command. msg['X-Spam'] = true; } else if (msg['m'].substring(0, 4) === "..tt") { //thank you assists. //randome coded //pop out the last Tipper. rank and use last tipper weight msg['c']='#000080'; //change font to blue; '#000080' - navy blue; var sMsg = ''; var sCode = '' + (msg['m'].substring(4, 5)); var sRest = msg['m'].substring(5); // cb.sendNotice(sCode, msg['user']); //testing. switch (sCode) { case 's': break; case '0': break; case '1': sMsg = ':thanks3' + ' ' + sRest; break; //color thanks case '2': sMsg = ':ty7' + ' ' + sRest; break; case '3': sMsg = ':THX' + ' ' + sRest; break; //with yellow background case '4': sMsg = ':thanks9' + ' ' + sRest; break; // green thanks case '5': sMsg = ':tty' + ' ' + sRest; break; //red case 'a': sMsg = ':tyou ' + sRest + ' :tyou :tyou '; break; //red case 'b': sMsg = ':tyou :tyou ' + sRest + ' :tyou '; break; //red case 'c': sMsg = ':tyou :tyou :tyou ' + sRest; break; //red case 'e': sMsg = ':thxc ' + sRest + ' :thxc :thxc '; break; //red case 'f': sMsg = ':thxc :thxc ' + sRest + ' :thxc '; break; //red case 'g': sMsg = ':thxc :thxc :thxc ' + sRest; break; //red } msg['m'] = sMsg; } } else if (msg['is_mod']) { iPowerUser = true; } else if (msg['user'] === 'lylea2') { iPowerUser = true; } if (IsSelfIdentifyOn) { if (msg['m'] == '/i') { msg['X-Spam'] = true; var sMsg = ''; if (Tippers.hasOwnProperty(msg['user'])) { sMsg = 'Thank you for tipping ' + Tippers[msg['user']].TotalTips + '. '; //ksh1234 if (Tippers[msg['user']].ShowCosts > 0) { sMsg += " (" + (Tippers[msg['user']].TotalTips - Tippers[msg['user']].ShowCosts) + " tokens will apply to the current show.)" } } else { sMsg = 'There are no tips. '; } if (IsRaffleOn) { if (Aliases[msg['user']].RaffleDetail == '') { sMsg += 'There are no Raffle Tickets. '; } else { sMsg += 'You have the following Raffle Tickets: ' + Aliases[msg['user']].RaffleDetail + '. '; } } cb.sendNotice(sMsg, msg['user']); } } //RVB_ICON_CODE if (IsRvbGameOn && !iPowerUser) { var sMsg = msg['m']; var sUser = msg['user']; if (Aliases[sUser].RvbTeam == 'Red') { msg['m'] = RVB_RED_PREFIX + sMsg; } else if (Aliases[sUser].RvbTeam == 'Blue') { msg['m'] = RVB_BLUE_PREFIX + sMsg; } else if (Aliases[sUser].RvbTeam == 'Green') { msg['m'] = RVB_GREEN_PREFIX + sMsg; } else if (Aliases[sUser].RvbTeam == 'Orange') { msg['m'] = RVB_ORANGE_PREFIX + sMsg; } } // TICKET_ICON_CODE if (IsTicketIconOn && !iPowerUser) { var sMsg = msg['m']; var sUser = msg['user']; if (cbjs.arrayContains(cb.limitCam_allUsersWithAccess(), sUser)) { msg['m'] = TICKET_ICON_CODE + sMsg; } } if (iPowerUser) { var ttzz = 0; if (msg['m'].substring(0, 5) === "/ttzz") { ttzz = parseInt(msg['m'].substring(5, 6)); } if (IsWhisperOn && ((msg['m'].substring(0, 3).toLowerCase() === "/w ") || (msg['m'].substring(0, 3).toLowerCase() === "/a ") || (msg['m'].substring(0, 2).toLowerCase() === "//") || (msg['m'].substring(0, 4).toLowerCase() === "/ww ") )) { msg['X-Spam'] = true; var sUser = msg['user']; var sMsg = msg['m'].substring(3); cb.sendNotice('(' + sUser + ') ' + sMsg, cb.room_slug, WHISPER_BACKGROUND); cb.sendNotice('(' + sUser + ') ' + sMsg, '', WHISPER_BACKGROUND, '#000000', 'normal', 'red'); msg['m'] = '(pm on im sent)'; } else if (IsPmOnImOn && (msg['m'].substring(0, 3).toLowerCase() === "/r ")) { msg['X-Spam'] = true; var sTmp = msg['m']; var splitM = sTmp.split(' ', 2); if (splitM.length > 0) { var str = splitM[1]; var iTmp = parseInt(str); var sUser = (isNaN(iTmp)) ? str : ArAliases[iTmp]; var iMid = sTmp.indexOf(str) + str.length; var sMsg = sTmp.substring(iMid); cb.sendNotice('Personal Msg To (' + sUser + ') ' + sMsg, cb.room_slug, PMONIM_BACKGROUND); cb.sendNotice('Personal Msg To (' + sUser + ') ' + sMsg, '', PMONIM_BACKGROUND, '#000000', 'normal', 'red'); cb.sendNotice(sMsg, sUser, PMONIM_BACKGROUND); msg['m'] = '(pm on im sent)'; } } else if ((msg['m'].substring(0, 3).toLowerCase() === '/n ') || (msg['m'].substring(0, 4).toLowerCase() === '/nn ') || (msg['m'].substring(0, 3).toLowerCase() === '!n ')) { msg['X-Spam'] = true; var sMsg = msg['m'].substring(3); cb.sendNotice(sMsg, '', sNoticeBackground, sNoticeForeground, 'bold'); // cb.sendNotice('(' + sUser + ') ' + sMsg, '', WHISPER_BACKGROUND, '#000000', 'normal', 'red'); msg['m'] = '(notice sent)'; } else if (msg['m'].substring(0, 5).toLowerCase() === '/nnn ') { msg['X-Spam'] = true; var sMsg = msg['m'].substring(5); var sMsg2 = 'Just ' + (tippedSubGoal - subGoal_total_tipped) + ' Tokens to complete the sub-goal: ' + sMsg + '.'; cb.sendNotice(sMsg2, '', sNoticeBackground, sNoticeForeground, 'bold'); // cb.sendNotice('(' + sUser + ') ' + sMsg, '', WHISPER_BACKGROUND, '#000000', 'normal', 'red'); msg['m'] = '(notice sent)'; } else if (msg['m'].substring(0, 6).toLowerCase() === '/nnnn ') { msg['X-Spam'] = true; var sTmp = msg['m']; var splitM = sTmp.split(' ', 3); if (splitM.length == 2) { if (subGoal_total_tipped == tippedSubGoal) { cb.sendNotice('*** COMPLETED ' + Panel32.toUpperCase() + ' ***', '', sNoticeBackground, sNoticeForeground, 'bold'); } } else if (splitM.length > 2) { var str = splitM[1]; var iTmp = parseInt(str); if (!isNaN(iTmp)) { var iMid = sTmp.indexOf(str) + str.length; var sDescription = sTmp.substring(iMid); SubGoalTitle = sDescription.replace(/<sp>/g, ' ') + ': '; tippedSubGoal = iTmp; Panel32 = 'Sub Goal: ' + sDescription; subGoal_total_tipped = 0; cb.drawPanel(); } } } else if (msg['m'].match(/\/mchelp/i)) { msg['X-Spam'] = true; cb.sendNotice('COMMANDS: mcHelp | mcSubject <new subject> | mcSubGoalTogg ' + '| mcMainGoalTitle <text> | mcSubGoalTitle <text> | mcPanel < 31, 32> | mcResetTipgoal <number> ' + '| mcResetSubgoal <new number> | mcStartTimer <seconds> | mcStartUpTimer | mcAddTipItem | mcDeleteItem | mcShowTipMenu ' + '| mcAliases | mcSetUserProfileTogg | mcPro | mcShowTasklist(ttl) ' + '| mcshowtasklistdetail(ttld) | mcchecknaddtask | mctaskcomplete(ttc) ' + '| mcGetTaskDetail(ttdet) <number> | mcsetstartdetail <number> | mcAddPm ' + '| mcPmOnImTogg | mcSetPmOnImCost | mcAlias | mcSetEnterThresh | mcAntiSpamTogg ' + '| mcStopTimers | mcAddSpammer | mcUnSpammer | mcGetSpammerList ' + '| mcSetSubjectipThreshold | mcGetTopTippersInfo | jsLoadJustinDefaults ' + '| jsNotice(n) | jsSetNoticeForeground | jsSetNoticeBackground | jsTipMenuNoticeTogg ' + '| jsSetTicketingTimer | jStartVoting | jsStopVoting | jsTipRemainingTogg | jsTipNoLimitTogg | jsConfTogg ' + '| jsStartHighestTipper | jsSetHtwTime | jsShowHtwTipInfo | jsDeleteHtwTipInfo ' + '| jsEndConf | jsAddConfUser | jsUserPrefixTogg | jsAddPrefixToUser | jsClearPrefix ' + '| jsPhraseWordTogg | jsSetPhraseWord | jsGetPhrasewordUsers | jsResetPhrasewordUsers| jsSingleTipTogg | jsOverRidePanel ' + '| jsRaffleTogg | jsDrawRaffle | jsSetRaffleCost | jsGetRaffleByNo | jsGetAllRaffleByName | jsResetRaffle ' + '| jsMakeRaffle <name> <num> | jsGetRaffleCount | jsLushOverrideTogg | jsHushOverrideTogg | jsBlackjackTogg ' + '| jsrolldicetogg | jsrolldice | jsrolldicereset | jssetrolldicematch | jssetrolldicephrase | jssetrolldicewait | jsGetRollDiceWinners ' + '| jsGetRollDiceCustomMatches | jsIdentifyGirlTogg | jsidentifytranstogg ' + ' ', msg['user']); } else if (msg['m'].match(/\/mcsubject/i)) { msg['X-Spam'] = true; RoomSubject = msg['m'].substring(11); cb.changeRoomSubject(RoomSubject); } else if (msg['m'].match(/\/mcsubgoaltogg/i)) { msg['X-Spam'] = true; IsSubGoalOn = !IsSubGoalOn; cb.sendNotice('Sub Goal is now ' + (IsSubGoalOn ? 'On' : 'Off'), msg['user']); cb.drawPanel(); } else if (msg['m'].match(/\/mcpmonimtogg/i)) { msg['X-Spam'] = true; IsPmOnImOn = !IsPmOnImOn; cb.sendNotice('PM on IM is now ' + (IsPmOnImOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/mcmaingoaltitle/i)) { msg['X-Spam'] = true; var sTmp = msg['m'].substring(17); MainGoalTitle = sTmp.replace(/<sp>/g, ' '); cb.drawPanel(); } else if (msg['m'].match(/\/mcsubgoaltitle/i)) { msg['X-Spam'] = true; var sTmp = msg['m'].substring(16); SubGoalTitle = sTmp.replace(/<sp>/g, ' '); cb.drawPanel(); } else if (msg['m'].match(/\/mcpanel/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var sTmp = (splitM[1]); var sTmp2 = msg['m'].substring(12); sTmp2 = sTmp2.replace(/<sp>/g, ' '); if (sTmp == '11') { Panel11 = sTmp2; } else if (sTmp == '12') { Panel12 = sTmp2; } else if (sTmp == '21') { Panel21 = sTmp2; } else if (sTmp == '22') { Panel22 = sTmp2; } else if (sTmp == '31') { Panel31 = sTmp2; } else if (sTmp == '32') { Panel32 = sTmp2; } cb.drawPanel(); } else if (msg['m'].match(/\/mcresettipgoal/i)) { msg['X-Spam'] = true; total_tipped = 0; var iTmp = parseInt(msg['m'].substring(16)); if (!isNaN(iTmp)) { tippedGoal = iTmp; cb.drawPanel(); } } else if (msg['m'].match(/\/mcresetsubgoal/i)) { msg['X-Spam'] = true; subGoal_total_tipped = 0; var iTmp = parseInt(msg['m'].substring(16)); if (!isNaN(iTmp)) { tippedSubGoal = iTmp; cb.drawPanel(); } } else if (msg['m'].match(/\/mcstarttimer/i)) { msg['X-Spam'] = true; var iTmp = parseInt(msg['m'].substring(14)); if (!isNaN(iTmp)) { CountDownTimerTimeInSec = iTmp; startCountDownTimer(); cb.sendNotice('timer started', msg['user']); } } else if (msg['m'].match(/\/mcstartuptimer/i)) { msg['X-Spam'] = true; cb.sendNotice('up timer started', msg['user']); startCountUpTimer(); } else if (msg['m'].match(/\/mcaddtipitem/i)) { msg['X-Spam'] = true; var sTmp = msg['m']; var splitM = sTmp.split(' ', 2); if (splitM.length > 0) { var str = splitM[1]; var iTmp = parseInt(str); if (!isNaN(iTmp)) { var iMid = sTmp.indexOf(str) + str.length; var sDescription = sTmp.substring(iMid); addItem(iTmp, sDescription) } } } else if (msg['m'].match(/\/mcdeleteitem/i)) { msg['X-Spam'] = true; var iTmp = parseInt(msg['m'].substring(14)); if (!isNaN(iTmp)) { deleteItemByCost(iTmp); cb.sendNotice('verify deleted item: ' + iTmp, msg['user']); } } else if (msg['m'].match(/\/mcshowtipmenu/i)) { msg['X-Spam'] = true; cb.sendNotice(getItemInfo(), msg['user']); } else if (((msg['m'].substring(0, 5) === "/ttld")) || (msg['m'].match(/\/mcshowtasklistdetail/i))) { msg['X-Spam'] = true; cb.sendNotice(getTaskInfoWithDetail(), msg['user']); } else if (((msg['m'].substring(0, 4) === "/ttl")) || (msg['m'].match(/\/mcshowtasklist/i))) { msg['X-Spam'] = true; cb.sendNotice(getTaskInfo(), msg['user']); } else if (msg['m'].match(/\/mcaliases/i)) { msg['X-Spam'] = true; cb.sendNotice(getAliasInfo(), msg['user']); } else if (msg['m'].match(/\/mcsetuserprofiletogg/i)) { msg['X-Spam'] = true; IsUserProfileOn = !IsUserProfileOn; cb.sendNotice('User Profile is now ' + (IsUserProfileOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/mcpro/i)) { msg['X-Spam'] = true; var sTmp = msg['m']; var splitM = sTmp.split(' ', 2); if (splitM.length > 0) { var sTmp2 = splitM[1]; var iTmp = parseInt(sTmp2); if (!isNaN(iTmp)) { cb.sendNotice('#' + iTmp + ': ' + ArAliases[iTmp], msg['user']); } } } else if (msg['m'].match(/\/mcchecknaddtask/i)) { msg['X-Spam'] = true; var sTmp = msg['m']; var splitM = sTmp.split(' ', 2); if (splitM.length > 0) { var str = splitM[1]; var iTmp = parseInt(str); if (!isNaN(iTmp)) { checkAndAddTasks(iTmp, 'cb_kyle', '-'); } } } else if (((msg['m'].substring(msg['m'].length - 4) === "/ttc")) || (msg['m'].match(/\/mctaskcomplete/i))) { msg['X-Spam'] = true; completeCurrentTask(); } else if (((msg['m'].substring(0, 6) === "/ttdet")) || (msg['m'].match(/\/mcgettaskdetail/i))) { msg['X-Spam'] = true; var iTmp = 0; if (msg['m'].match(/\/mcgettaskdetail/i)) { iTmp = parseInt(msg['m'].substring(17)); } else { iTmp = parseInt(msg['m'].substring(7)); } if (!isNaN(iTmp)) { var sMsg = '#' + iTmp + ' ' + Tasks[iTmp].Status + ' (' + Tasks[iTmp].TipUser + ')' + Tasks[iTmp].ItemDesc + '(' + Tasks[iTmp].TipCost + ')\n' + Tasks[iTmp].TipMessage.replace(/(?:\r\n|\r|\n)/g, ' * '); cb.sendNotice(sMsg, msg['user']); } } else if (msg['m'].match(/\/mcsetstartdetail/i)) { msg['X-Spam'] = true; var iTmp = parseInt(msg['m'].substring(18)); if (!isNaN(iTmp)) { SuggestedStartTaskDisply = iTmp; cb.sendNotice('set startdetail changed to ' + iTmp, msg['user']); } } else if (msg['m'].match(/\/mcaddpm/i)) { msg['X-Spam'] = true; var sTmp = msg['m'].substring(9); addPmOnImUser(sTmp); cb.sendNotice('PM on IM added: ' + sTmp, msg['user']); } else if (msg['m'].match(/\/mcsetpmonimcost/i)) { msg['X-Spam'] = true; var iTmp = parseInt(msg['m'].substring(17)); if (!isNaN(iTmp)) { PmOnImTipCosts = iTmp; cb.sendNotice('set PmOnImTipCosts changed to ' + iTmp, msg['user']); } } else if (msg['m'].match(/\/mcalias/i)) { msg['X-Spam'] = true; var sUser = msg['m'].substring(9); cb.sendNotice('Alias for ' + sUser + ': #' + Aliases[sUser].AliasNo, msg['user']); } else if (msg['m'].match(/\/mctest/i)) { msg['X-Spam'] = true; var sUser = msg['user']; cb.sendNotice('' + Aliases[sUser].TimeEntered + ' Test: ' + (Date.now() - Aliases[sUser].TimeEntered), sUser); } else if (msg['m'].match(/\/mcsetenterthresh/i)) { msg['X-Spam'] = true; var iTmp = parseInt(msg['m'].substring(18)); if (!isNaN(iTmp)) { AntiRobotEnterThreshold = iTmp; //in seconds } } else if (msg['m'].match(/\/mcantispamtogg/i)) { msg['X-Spam'] = true; IsAntiSpamOn = !IsAntiSpamOn; cb.sendNotice('Anti Spam is now ' + (IsAntiSpamOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/mcstoptimers/i)) { msg['X-Spam'] = true; stopAllTimers(); cb.sendNotice('Stop All Timers', msg['user']); } else if (((msg['m'].substring(0, 3).toLowerCase() === "/s ")) || (msg['m'].match(/\/mcaddspammer/i))) { msg['X-Spam'] = true; var sPos = 14; if ((msg['m'].substring(0, 3).toLowerCase() === "/s ")) { sPos = 3; } // "/ttzzX" var str = msg['m'].substring(sPos); var iTmp = parseInt(str); var sUser = (isNaN(iTmp)) ? str : ArAliases[iTmp]; addSp(sUser); cb.sendNotice('Added Spammer: ' + sUser, msg['user']); } else if (msg['m'].match(/\/mcunspammer/i)) { msg['X-Spam'] = true; var sUser = msg['m'].substring(13); Aliases[sUser].IsSpammer = false; Aliases[sUser].IsSpammer9 = false; cb.sendNotice('Undo Spammer: ' + sUser, msg['user']); } else if (msg['m'].match(/\/mcgetspammerlist/i)) { msg['X-Spam'] = true; cb.sendNotice('Spammer(s): ' + getSpammerList(), msg['user']); } else if (msg['m'].match(/\/mcsetsubjectipthreshold/i)) { msg['X-Spam'] = true; var iTmp = parseInt(msg['m'].substring(15)); if (!isNaN(iTmp)) { iSubjectTipRemainThreshold = iTmp; cb.sendNotice('Subject Tip Threshold Set: ' + iTmp, msg['user']); } } else if (IsPmOnImOn && (msg['m'].substring(0, 5).toLowerCase() === "/r25 ")) { msg['X-Spam'] = true; var sTmp = msg['m']; var splitM = sTmp.split(' ', 2); if (splitM.length > 0) { var str = splitM[1]; var iTmp = parseInt(str); var sUser = (isNaN(iTmp)) ? str : ArAliases[iTmp]; var iMid = sTmp.indexOf(str) + str.length; var sMsg = '(From: Kyle) There is no tip-note in your 25+ Token Request. Do you have a request, or would you like something off of the tip menu?'; cb.sendNotice('Personal Msg To (' + sUser + ') ' + sMsg, cb.room_slug, PMONIM_BACKGROUND); cb.sendNotice('Personal Msg To (' + sUser + ') ' + sMsg, '', PMONIM_BACKGROUND, '#000000', 'normal', 'red'); cb.sendNotice(sMsg, sUser, PMONIM_BACKGROUND); msg['m'] = '(pm on im sent)'; } } else if (IsPmOnImOn && (msg['m'].substring(0, 4).toLowerCase() === "/rk ")) { msg['X-Spam'] = true; var sTmp = msg['m']; var splitM = sTmp.split(' ', 2); if (splitM.length > 0) { var str = splitM[1]; var iTmp = parseInt(str); var sUser = (isNaN(iTmp)) ? str : ArAliases[iTmp]; var iMid = sTmp.indexOf(str) + str.length; var sMsg = '(From: Kyle) ' + sTmp.substring(iMid); cb.sendNotice('Personal Msg To (' + sUser + ') ' + sMsg, cb.room_slug, PMONIM_BACKGROUND); cb.sendNotice('Personal Msg To (' + sUser + ') ' + sMsg, '', PMONIM_BACKGROUND, '#000000', 'normal', 'red'); cb.sendNotice(sMsg, sUser, PMONIM_BACKGROUND); msg['m'] = '(pm on im sent)'; } } else if (msg['m'].match(/\/mcgettoptippersinfo/i)) { msg['X-Spam'] = true; cb.sendNotice(getTopTippersInfo(), msg['user']); } else if (msg['m'].match(/\/tbhelp/i)) { msg['X-Spam'] = true; cb.sendNotice('COMMANDS: tbHideOn tbHideOff tbList tbHelp tbClearUsers ' + 'tbStopRun(x) tbStartRun(x) tbShowTipInfo tbLoadUsersWithAccess(9) tbRefreshUsersWithAccess(6) ' + 'tbSetMinTip tbSetTicketPrice tbSetWaitTime(x) tbSetRepeatWaitTime(x) tbFlashHidden(3) ' + 'tbFlashUnhidden(8) tbUpdateHiddenMessage(5) tbStartRepeatingNotices[1|2] ' + 'tbStopRepeatingNotices[1|2] tbSetRepeatingMessage[1|2](1) tbSelfIdentityOn ' + 'tbSelfIdentityOn tbSetRepeatingNoticeTime tbSetTip tbAdduser tbAddUseX tbRemoveUser ' + 'tbTicketIconTogg tbStartTicket tbStopTicket tbAntiSpamTogg tbSetNotice1Color ' + 'tbNotifyTicketOnEnter tbsetticketmessage | tbAddShowCostToViewers <num> | ttzz[X] ', msg['user']); } else if (msg['m'].match(/\/tbhideon/i)) { msg['X-Spam'] = true; hideShow(); } else if (msg['m'].match(/\/tbhideoff/i)) { msg['X-Spam'] = true; unhideShow(); } else if (msg['m'].match(/\/tblist/i)) { msg['X-Spam'] = true; //list current users cb.sendNotice(getAllUsersWithAccessAsString(), msg['user']); } else if (msg['m'].match(/\/tbclearusers/i)) { msg['X-Spam'] = true; //list current users resetUsersWithAccess(); } else if (msg['m'].match(/\/tbstoprun/i)) { msg['X-Spam'] = true; tipbreak_running = false; } else if (msg['m'].match(/\/tbstartrun/i)) { msg['X-Spam'] = atrue; tipbreak_running = true; runRepeatingProgram(); } else if (msg['m'].match(/\/tbshowtipinfo/i)) { msg['X-Spam'] = true; cb.sendNotice(getTipInfo(Tippers), msg['user']); } else if ((ttzz == 9) || msg['m'].match(/\/tbloaduserswithaccess/i)) { msg['X-Spam'] = true; loadUsersWithAccess(); cb.sendNotice('Load Users With Access', msg['user']); } else if ((ttzz == 6) || msg['m'].match(/\/tbrefreshuserswithaccess/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var iTmp = parseInt(splitM[1]); if (!isNaN(iTmp)) { TipMin = iTmp; resetUsersWithAccess(); loadUsersWithAccess(); } cb.sendNotice('Refresh Users With Access', msg['user']); } else if (msg['m'].match(/\/tbsetmintip/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); TipMin = parseInt(splitM[1]); cb.sendNotice('TipMin set to ' + splitM[1], msg['user']); } else if (msg['m'].match(/\/tbsetticketprice/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); TicketPrice = parseInt(splitM[1]); cb.sendNotice('TicketPrice set to ' + splitM[1], msg['user']); } else if (msg['m'].match(/\/tbsetwaittime/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); HideWaitTime = parseInt(splitM[1]); cb.sendNotice('HideWaitTime (in sec) set to ' + splitM[1], msg['user']); } else if (msg['m'].match(/\/tbsetrepeatwaittime/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); RepeatWaitTime = parseInt(splitM[1]); cb.sendNotice('RepeatWaitTime (in min) set to ' + splitM[1], msg['user']); } else if ((ttzz == 3) || msg['m'].match(/\/tbflashhidden/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var flashTime = parseInt(splitM[1]); if (!isNaN(flashTime)) { hideShow(); cb.setTimeout(unhideShow, (flashTime * 1000)); cb.sendNotice('Flash a Hidden Show for ' + flashTime + ' (sec)', msg['user']); } else { cb.sendNotice('ERROR: (Flash a Hidden Show) has unrecognize seconds', msg['user']); } } else if ((ttzz == 8) || msg['m'].match(/\/tbflashunhidden/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var flashTime = parseInt(splitM[1]); if (!isNaN(flashTime)) { unhideShow(); cb.setTimeout(hideShow, (flashTime * 1000)); cb.sendNotice('Flash a Unhidden Show for ' + flashTime + ' (sec)', msg['user']); } else { cb.sendNotice('ERROR: (Flash a Unhidden Show) has unrecognize seconds', msg['user']); } } else if ((ttzz == 5) || msg['m'].match(/\/tbupdatehiddenmessage1/i)) { msg['X-Spam'] = true; var sPos = 24; if (ttzz == 5) { sPos = 7; } // "/ttzzX" var sTmp = msg['m'].substring(sPos); TipBreakMsg = sTmp; cb.sendNotice('Tip Break message (on Hidden Shows) has been updated:' + TipBreakMsg, msg['user']); } else if (msg['m'].match(/\/tbstartrepeatingnotices1/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var iInterval = parseInt(splitM[1]); if (!isNaN(iInterval)) { if (iInterval < 30) { cb.sendNotice('ERROR: (Start Repeating Notices) minimum is 30 seconds', msg['user']); } else { IsRepeatingNoticeRunning = true; RepeatingNoticeTimeInSec = iInterval; startRepeatingNotice() cb.sendNotice('Start Repeating Notices starting for ' + iInterval + ' (sec)', msg['user']); } } else { cb.sendNotice('ERROR: (Start Repeating Notices) has unrecognize seconds', msg['user']); } } else if (msg['m'].match(/\/tbstoprepeatingnotices1/i)) { msg['X-Spam'] = true; IsRepeatingNoticeRunning = false; } else if ((ttzz == 1) || msg['m'].match(/\/tbsetrepeatingmessage1/i)) { msg['X-Spam'] = true; var sPos = 24; if (ttzz == 1) { sPos = 7; } // "/ttzzX" var sTmp = msg['m'].substring(sPos); RepeatingNoticeMessage = sTmp.replace(/<br>/g, '\n'); cb.sendNotice('Repeating Notices Message1 has been set', msg['user']); } else if (msg['m'].match(/\/tbselfidentityon/i)) { msg['X-Spam'] = true; IsSelfIdentifyOn = true; } else if (msg['m'].match(/\/tbselfidentityoff/i)) { msg['X-Spam'] = true; IsSelfIdentifyOn = false; } else if (msg['m'].match(/\/tbsetrepeatingnoticetime1/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var iInterval = parseInt(splitM[1]); if (!isNaN(iInterval)) { if (iInterval < 30) { cb.sendNotice('ERROR: (Start Repeating Notices1) minimum is 30 seconds', msg['user']); } else { IsRepeatingNoticeRunning = true; RepeatingNoticeTimeInSec = iInterval; cb.sendNotice('Setting Repeating Notices1 time to ' + iInterval + ' (sec)', msg['user']); } } else { cb.sendNotice('ERROR: (Start Repeating Notices) has unrecognize seconds', msg['user']); } } else if (msg['m'].match(/\/tbsettip/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var iTip = parseInt(splitM[1]); var sUser = splitM[2]; if (!isNaN(iTip)) { setTip(iTip, sUser); cb.sendNotice('SetTip done', msg['user']); } else { cb.sendNotice('ERROR: (SetTip) has unrecognize seconds', msg['user']); } } else if (msg['m'].match(/\/tbstartrepeatingnotices2/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var iInterval = parseInt(splitM[1]); if (!isNaN(iInterval)) { if (iInterval < 30) { cb.sendNotice('ERROR: (Start Repeating Notices2) minimum is 30 seconds', msg['user']); } else { IsRepeatingNoticeRunning2 = true; RepeatingNoticeTimeInSec2 = iInterval; startRepeatingNotice2(); cb.sendNotice('Start Repeating Notices2 starting for ' + iInterval + ' (sec)', msg['user']); } } else { cb.sendNotice('ERROR: (Start Repeating Notices2) has unrecognize seconds', msg['user']); } } else if (msg['m'].match(/\/tbstoprepeatingnotices2/i)) { msg['X-Spam'] = true; IsRepeatingNoticeRunning2 = false; } else if (msg['m'].match(/\/tbstartrepeatingnotices3/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var iInterval = parseInt(splitM[1]); if (!isNaN(iInterval)) { if (iInterval < 30) { cb.sendNotice('ERROR: (Start Repeating Notices 3) minimum is 30 seconds', msg['user']); } else { IsRepeatingNoticeRunning3 = true; RepeatingNoticeTimeInSec3 = iInterval; startRepeatingNotice3(); // add t h is. cb.sendNotice('Start Repeating Notices 3 starting for ' + iInterval + ' (sec)', msg['user']); } } else { cb.sendNotice('ERROR: (Start Repeating Notices 3) has unrecognize seconds', msg['user']); } } else if (msg['m'].match(/\/tbstoprepeatingnotices3/i)) { msg['X-Spam'] = true; IsRepeatingNoticeRunning3 = false; } else if (msg['m'].match(/\/tbsetrepeatingmessage2/i)) { msg['X-Spam'] = true; var sPos = 24; //if (ttzz == 1) { sPos = 7; } // "/ttzzX" var sTmp = msg['m'].substring(sPos); RepeatingNoticeMessage2 = sTmp.replace(/<br>/g, '\n'); cb.sendNotice('Repeating Notices Message2 has been set', msg['user']); } else if (msg['m'].match(/\/tbsetrepeatingmessage3/i)) { msg['X-Spam'] = true; var sPos = 24; //if (ttzz == 1) { sPos = 7; } // "/ttzzX" var sTmp = msg['m'].substring(sPos); RepeatingNoticeMessage3 = sTmp.replace(/<br>/g, '\n'); cb.sendNotice('Repeating Notices Message 3 has been set', msg['user']); } else if (msg['m'].match(/\/tbsetrepeatingnoticetime/i)) { //this may not be used anymore. msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var iInterval = parseInt(splitM[1]); if (!isNaN(iInterval)) { if (iInterval < 30) { cb.sendNotice('ERROR: (Start Repeating Notices) minimum is 30 seconds', msg['user']); } else { IsRepeatingNoticeRunning = true; RepeatingNoticeTimeInSec = iInterval; cb.sendNotice('Setting Repeating Notices time to ' + iInterval + ' (sec)', msg['user']); } } else { cb.sendNotice('ERROR: (Start Repeating Notices) has unrecognize seconds', msg['user']); } } else if (msg['m'].match(/\/tbadduser/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var sUser = splitM[1]; //need to do the add action if (!cbjs.arrayContains(cb.limitCam_allUsersWithAccess(), sUser)) { cb.limitCam_addUsers([sUser]); } cb.sendNotice('add user to hidden show ' + sUser, msg['user']); } else if (msg['m'].match(/\/tbaddusex/i)) { msg['X-Spam'] = true; var sTmp = msg['m'].substring(11); addUser(sTmp); cb.sendNotice('add user(s) to hidden show ', msg['user']); } else if (msg['m'].match(/\/tbremoveuser/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var sUser = splitM[1]; //need to do the add action if (cbjs.arrayContains(cb.limitCam_allUsersWithAccess(), sUser)) { cb.limitCam_removeUsers([sUser]); } cb.sendNotice('remove user from hidden show ' + sUser, msg['user']); } else if (msg['m'].match(/\/tbticketicontogg/i)) { msg['X-Spam'] = true; IsTicketIconOn = !IsTicketIconOn; cb.sendNotice('Ticket Icon is now ' + (IsTicketIconOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/tbstartticket/i)) { msg['X-Spam'] = true; if (TicketingTimerInMin == 0) { TicketingTimerInMin = 4; } startTicketing(); cb.sendNotice('Start Ticket chosen.', msg['user']); } else if (msg['m'].match(/\/tbstopticket/i)) { msg['X-Spam'] = true; IsTicketingRunning = false; IsTicketingShowActive = false; TicketingStatus = 0; TicketingTimerInMin = 0; cb.sendNotice('Stop Ticket chosen.', msg['user']); } else if (msg['m'].match(/\/tbsetnotice1color/i)) { msg['X-Spam'] = true; var sPos = 19; var sTmp = msg['m'].substring(sPos); RepeatingNotice1ForegroundColor = sTmp; cb.sendNotice('Set Notice1 Foreground Color has been set.', msg['user']); } else if (msg['m'].match(/\/tbnotifyticketonenter/i)) { msg['X-Spam'] = true; NotifyTicketOnEnter = !NotifyTicketOnEnter; cb.sendNotice('NotifyTicketOnEnter is now ' + (NotifyTicketOnEnter ? 'On' : 'Off'), msg['user']); } else if ((ttzz == 1) || msg['m'].match(/\/tbsetticketmessage/i)) { msg['X-Spam'] = true; var sPos = 20; var sTmp = msg['m'].substring(sPos); TicketingMessage = sTmp.replace(/<br>/g, '\n'); cb.sendNotice('Ticket Message has been set', msg['user']); } else if (msg['m'].match(/\/tbaddshowcosttoviewers/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var iCost = parseInt(splitM[1]); addShowCostToAllCurrentViewers(iCost); cb.sendNotice('Show Cost to Viewrs has been applied to ' + iCost, msg['user']); } else if (msg['m'].match(/\/jsloadjustindefaults/i)) { msg['X-Spam'] = true; loadJustinDefaults(); cb.sendNotice('Loading Justin Defaults', msg['user']); } else if (msg['m'].match(/\/jssetnoticeforeground/i)) { msg['X-Spam'] = true; var sTmp = msg['m'].substring(23); sNoticeForeground = sTmp; cb.sendNotice('Notice Foreground color has been changed.', msg['user']); } else if (msg['m'].match(/\/jssetnoticebackground/i)) { msg['X-Spam'] = true; var sTmp = msg['m'].substring(23); sNoticeBackground = sTmp; cb.sendNotice('Notice Background color has been changed.', msg['user']); } else if (msg['m'].match(/\/jstipmenunoticetogg/i)) { msg['X-Spam'] = true; IsTipMenuNoticeOn = !IsTipMenuNoticeOn; cb.sendNotice('Tip Menu Notice is now ' + (IsTipMenuNoticeOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/jssilentnonticketholdertogg/i)) { msg['X-Spam'] = true; SilentNonTicketHolder = !SilentNonTicketHolder; cb.sendNotice('Silent Non Ticket Holder while show is running is now ' + (SilentNonTicketHolder ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/jssetticketingtimer/i)) { msg['X-Spam'] = true; var iTmp = parseInt(msg['m'].substring(21)); if (!isNaN(iTmp)) { TicketingTimerInMin = iTmp; cb.sendNotice('Ticketing Timer in min has been set to ' + TicketingTimerInMin, msg['user']); } } else if (msg['m'].match(/\/jsstartvoting/i)) { msg['X-Spam'] = true; IsVotingOn = true; //startVoting(); cb.sendNotice('Start Voting is chosen.', msg['user']); } else if (msg['m'].match(/\/jsstopvoting/i)) { msg['X-Spam'] = true; IsVotingOn = false; cb.sendNotice('Stop Voting is chosen.', msg['user']); } else if (msg['m'].match(/\/jstipremainingtogg/i)) { msg['X-Spam'] = true; IsTipRemainingOn = !IsTipRemainingOn; cb.sendNotice('Tip Remaining is now ' + (IsTipRemainingOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/jstipnolimittogg/i)) { msg['X-Spam'] = true; IsTipNoLimitOn = !IsTipNoLimitOn; cb.sendNotice('Tip No Limit is now ' + (IsTipNoLimitOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/jsconftogg/i)) { msg['X-Spam'] = true; IsConfOn = !IsConfOn; cb.sendNotice('Conf is now ' + (IsConfOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/jsendconf/i)) { msg['X-Spam'] = true; endConf(); cb.sendNotice('Ending Conf', msg['user']); } else if (msg['m'].match(/\/jsaddconfuser/i)) { msg['X-Spam'] = true; var sTmp = msg['m'].substring(15); addConfUser(sTmp); cb.sendNotice('Add Conf User for: ' + sTmp, msg['user']); } else if (msg['m'].match(/\/jsuserprefixtogg/i)) { msg['X-Spam'] = true; IsUserPrefixOn = !IsUserPrefixOn; cb.sendNotice('User Prefix is now ' + (IsUserPrefixOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/jsaddprefixtouser/i)) { msg['X-Spam'] = true; var sTmp = msg['m']; var splitM = sTmp.split(' ', 3); if (splitM.length > 0) { var sTmp2 = splitM[1]; //suser var sTmp3 = splitM[2]; Aliases[sTmp2].Prefix = sTmp3; cb.sendNotice('Add Prefix to User. ', msg['user']); } } else if (msg['m'].match(/\/jsclearprefix/i)) { msg['X-Spam'] = true; var sTmp = msg['m'].substring(15); Aliases[sTmp].Prefix = ''; cb.sendNotice('Prefix cleared for: ' + sTmp, msg['user']); } else if (msg['m'].match(/\/jsstarthighesttipper/i)) { msg['X-Spam'] = true; startHtwTool(); cb.sendNotice('Start Highest Tipper is chosen.', msg['user']); //need: reset, list, timer-display-countown, last-tip-sets-endtime with a min of 15s } else if (msg['m'].match(/\/jssethtwtime/i)) { msg['X-Spam'] = true; var iTmp = parseInt(msg['m'].substring(14)); if (!isNaN(iTmp)) { HtwTimeLimit = iTmp; // HtwTime needs to be in seconds cb.sendNotice('HtwTime set to ' + iTmp + ' seconds.', msg['user']); } else { cb.sendNotice('Not Recognize HtwTime.', msg['user']); } } else if (msg['m'].match(/\/jsshowhtwtipinfo/i)) { msg['X-Spam'] = true; cb.sendNotice(getTipInfo(HtwTippers), msg['user']); } else if (msg['m'].match(/\/jsdeletehtwtipinfo/i)) { msg['X-Spam'] = true; cb.sendNotice(DeleteAllPropsInObject(HtwTippers), msg['user']); } else if (msg['m'].match(/\/pppp/i)) { msg['X-Spam'] = true; var sTmp9 = ''; for (var i = 0; i < ArProfileCache.length ; i++) { sTmp9 += '#' + Aliases[ArProfileCache[i]].AliasNo + '-' + ArProfileCache[i] + ' '; } cb.sendNotice('Profile Cache: ' + sTmp9 , msg['user']); } else if (msg['m'].match(/\/jsphrasewordtogg/i)) { msg['X-Spam'] = true; IsPhraseWordEnable = !IsPhraseWordEnable; cb.sendNotice('PhraseWord is now ' + (IsPhraseWordEnable ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/jssetphraseword/i)) { msg['X-Spam'] = true; var sTmp = msg['m'].substring(17); PhraseWord = sTmp; cb.sendNotice('Updated Phraseword: ' + sTmp, msg['user']); } else if (msg['m'].match(/\/jssingletiptogg/i)) { msg['X-Spam'] = true; IsSingleWarningOn = !IsSingleWarningOn; cb.sendNotice('Single Tip Warning is ' + (IsSingleWarningOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/jsoverridepanel/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var sTmp = (splitM[1]); var sTmp2 = msg['m'].substring(19); sTmp2 = sTmp2.replace(/<sp>/g, ' '); if (sTmp == '11') { Panel11Override = sTmp2; } else if (sTmp == '12') { Panel12Override = sTmp2; } else if (sTmp == '21') { Panel21Override = sTmp2; } else if (sTmp == '22') { Panel22Override = sTmp2; } cb.drawPanel(); } else if (msg['m'].match(/\/jsraffletogg/i)) { msg['X-Spam'] = true; IsRaffleOn = !IsRaffleOn; cb.sendNotice('Raffle is now ' + (IsRaffleOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/jsdrawraffle/i)) { msg['X-Spam'] = true; drawRaffle(); } else if (msg['m'].match(/\/jssetrafflecost/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); RaffleCost = parseInt(splitM[1]); cb.sendNotice('RaffleCost set to ' + splitM[1], msg['user']); } else if (msg['m'].match(/\/jsgetrafflebyno/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var iRaffleNo = parseInt(splitM[1]); cb.sendNotice('Raffle Name is ' + ArRaffleUser[(iRaffleNo - 1)], msg['user']); } else if (msg['m'].match(/\/jsgetallrafflebyname/i)) { msg['X-Spam'] = true; var sTmp = msg['m'].substring(22); cb.sendNotice('All Raffles for ' + sTmp + ': ' + Aliases[sTmp].RaffleDetail, msg['user']); } else if (msg['m'].match(/\/jsresetraffle/i)) { msg['X-Spam'] = true; resetRaffle(); cb.sendNotice('Raffle Reset', msg['user']); } else if (msg['m'].match(/\/jsmakeraffle/i)) { msg['X-Spam'] = true; var sTmp = msg['m']; var splitM = sTmp.split(' ', 3); if (splitM.length > 0) { var str = splitM[2]; var iTmp = parseInt(str); if (!isNaN(iTmp)) { var iMid = sTmp.indexOf(str) + str.length; var sName = splitM[1]; //sTmp.substring(iMid); // addItem(iTmp, sDescription) //cb.sendNotice('TEST: ' + sName , msg['user']); for (var i = 0; i < iTmp; i++) { addOneRaffle(sName); } cb.sendNotice(iTmp + ' Raffle(s) Created for ' + sName, msg['user']); } } } else if (msg['m'].match(/\/jsgetrafflecount/i)) { msg['X-Spam'] = true; cb.sendNotice('Raffle Count: ' + (RaffleNextUserPos - 1), msg['user']); } else if (msg['m'].match(/\/jslushoverridetogg/i)) { msg['X-Spam'] = true; IsLushOverrideOn = !IsLushOverrideOn; cb.sendNotice('Lush Override is now ' + (IsLushOverrideOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/jslushtesttogg/i)) { msg['X-Spam'] = true; TEST_LushOn = !TEST_LushOn; cb.sendNotice('Lush TEST is now ' + (TEST_LushOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/jshushoverridetogg/i)) { msg['X-Spam'] = true; IsHushOverrideOn = !IsHushOverrideOn; cb.sendNotice('Hush Override is now ' + (IsHushOverrideOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/jsgetphrasewordusers/i)) { msg['X-Spam'] = true; cb.sendNotice('Phrase Word Users\n' + ArPhraseWordUser.join(' '), msg['user']); } else if (msg['m'].match(/\/jsresetphrasewordusers/i)) { msg['X-Spam'] = true; var sTmp1 = ''; while (ArPhraseWordUser.length > 0) { sTmp1 = ArPhraseWordUser.pop(); } cb.sendNotice('Reset Phrase Word Users', msg['user']); } else if (msg['m'].match(/\/jspmreplacetogg/i)) { msg['X-Spam'] = true; IsPmReplaceOn = !IsPmReplaceOn; cb.sendNotice('PM Replace is now ' + (IsPmReplaceOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/jsitemjartogg/i)) { msg['X-Spam'] = true; IsItemJarOn = !IsItemJarOn; cb.sendNotice('Item Jar is now ' + (IsItemJarOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/jsitemjarreset/i)) { msg['X-Spam'] = true; ItemJarName = ''; ItemJarCost = 0; ItemJarPartial = 0; ItemJarTotal = 0; ItemJarCompleted = 0; cb.sendNotice('Item Jar is Reset ', msg['user']); } else if (msg['m'].match(/\/jssetitemjarname/i)) { msg['X-Spam'] = true; var sTmp = msg['m'].substring(18); ItemJarName = sTmp; cb.drawPanel(); cb.sendNotice('ItemJarName has been changed.', msg['user']); } else if (msg['m'].match(/\/jssetitemjarcost/i)) { msg['X-Spam'] = true; var iTmp = parseInt(msg['m'].substring(18)); if (!isNaN(iTmp)) { ItemJarCost = iTmp; cb.drawPanel(); cb.sendNotice('ItemJarCost has been changed.', msg['user']); } } else if (msg['m'].match(/\/jsadditemjar/i)) { msg['X-Spam'] = true; var iTmp = parseInt(msg['m'].substring(14)); if (!isNaN(iTmp)) { ItemJarCompleted += iTmp; cb.drawPanel(); cb.sendNotice('ItemJarToal has been added.', msg['user']); } } else if (msg['m'].match(/\/jsrolldicetogg/i)) { msg['X-Spam'] = true; IsRollDiceOn = !IsRollDiceOn; cb.sendNotice('Roll Dice is now ' + (IsRollDiceOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/jsrolldice/i)) { msg['X-Spam'] = true; rollDice('test'); } else if (msg['m'].match(/\/jsrolldicereset/i)) { msg['X-Spam'] = true; RollDiceCount = 0; var sTmp1 = ''; while (RollDiceWinners.length > 0) { sTmp1 = RollDiceWinners.pop(); } while (RollDiceCustomMatches.length > 0) { sTmp1 = RollDiceCustomMatches.pop(); } cb.sendNotice('Roll Dice is Reset ', msg['user']); } else if (msg['m'].match(/\/jssetrolldicematch/i)) { msg['X-Spam'] = true; var iTmp = parseInt(msg['m'].substring(20)); if (!isNaN(iTmp)) { RollDiceMatch = iTmp; cb.sendNotice('Roll Dice Match has been changed.', msg['user']); } } else if (msg['m'].match(/\/jssetrolldicecustommatch/i)) { msg['X-Spam'] = true; var iTmp = parseInt(msg['m'].substring(26)); if (!isNaN(iTmp)) { RollDiceCustomMatch = iTmp; cb.sendNotice('Roll Dice Custom Match has been changed.', msg['user']); } } else if (msg['m'].match(/\/jssetrolldicephrase/i)) { msg['X-Spam'] = true; var sTmp = msg['m'].substring(21); RollDicePhrase = sTmp; cb.sendNotice('Roll Dice Phrase has been changed.', msg['user']); } else if (msg['m'].match(/\/jssetrolldicewait/i)) { msg['X-Spam'] = true; var iTmp = parseInt(msg['m'].substring(19)); if (!isNaN(iTmp)) { RollDiceWaitToRepeatInSec = iTmp; cb.sendNotice('Roll Dice Wait in Sec has been changed.', msg['user']); } } else if (msg['m'].match(/\/jsgetrolldicewinners/i)) { msg['X-Spam'] = true; cb.sendNotice('Roll Dice Winners:\n' + RollDiceWinners.join('\n'), msg['user']); } else if (msg['m'].match(/\/jsgetrolldicecustommatches/i)) { msg['X-Spam'] = true; cb.sendNotice('Roll Dice Winners:\n' + RollDiceCustomMatches.join('\n'), msg['user']); } else if (msg['m'].match(/\/jsload7rolldice/i)) { msg['X-Spam'] = true; RollDiceWaitToRepeatInSec = 10; RollDicePhrase = '1'; RollDiceMatch = 7; IsRollDiceOn = true; Panel21Override = "Prize @ 10 Rolls of # 7"; cb.sendNotice('Roll Dice #7 defaults w 10s', msg['user']); } else if (msg['m'].match(/\/jssetrolldicequiet/i)) { msg['X-Spam'] = true; var iTmp = parseInt(msg['m'].substring(20)); if (!isNaN(iTmp)) { RollDiceQuietLevel = iTmp; cb.sendNotice('Roll Dice Quiet Level has been changed.', msg['user']); } } else if (msg['m'].match(/\/jsidentifygirltogg/i)) { msg['X-Spam'] = true; IsIdentifyGirlOn = !IsIdentifyGirlOn; cb.sendNotice('Indentify Girl is now ' + (IsIdentifyGirlOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/jsidentifytranstogg/i)) { msg['X-Spam'] = true; IsIdentifyTransOn = !IsIdentifyTransOn; cb.sendNotice('Indentify Trans is now ' + (IsIdentifyTransOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/jscatch/i)) { //support alias # ? msg['X-Spam'] = true; var sTmp = msg['m'].substring(9); Aliases[sTmp].ProtectedChatNo = 1; cb.sendNotice('User Caught for protected chat: ' + sTmp, msg['user']); } else if (msg['m'].match(/\/jsrelease/i)) { msg['X-Spam'] = true; var sTmp = msg['m'].substring(11); Aliases[sTmp].ProtectedChatNo = 0; cb.sendNotice('User Released from protected chat: ' + sTmp, msg['user']); } else if (IsIdentifyGirlOn || IsIdentifyTransOn) { if (msg['m'].substring(0, 1) === ".") { msg['X-Spam'] = true; var sTmp = '/r ' + msg['m'].substring(1); var splitM = sTmp.split(' ', 2); if (splitM.length > 0) { var str = splitM[1]; var iTmp = parseInt(str); var sUser = (isNaN(iTmp)) ? str : ArAliases[iTmp]; var iMid = sTmp.indexOf(str) + str.length; var sMsg = sTmp.substring(iMid); cb.sendNotice('Personal Msg To (' + sUser + ') ' + sMsg, cb.room_slug, PMONIM_BACKGROUND); cb.sendNotice('Personal Msg To (' + sUser + ') ' + sMsg, '', PMONIM_BACKGROUND, '#000000', 'normal', 'red'); cb.sendNotice(sMsg, sUser, PMONIM_BACKGROUND); msg['m'] = '(pm on im sent)'; } } } else if (msg['m'].match(/\/jackshotts/i)) { msg['X-Spam'] = true; IsIdentifyGirlOn = true; IsIdentifyTransOn = true; RepeatingNoticeMessage2 = ' :follow '; IsRepeatingNoticeRunning2 = true; RepeatingNoticeTimeInSec2 = 250; startRepeatingNotice2(); Panel11Override = '* JackShotts *'; Panel12Override = '* Please Follow *'; Panel21Override = ' '; cb.drawPanel(); cb.sendNotice('Settings for Jackshotts loaded.', msg['user']); } else if (msg['m'].match(/\/rvbhelp/i)) { msg['X-Spam'] = true; cb.sendNotice('COMMANDS: rvbHelp | rvbGameTogg | rvbGameReset ' + '| rvbGetRedTeam | rvbGetBlueTeam | rvbHideDisplayTogg ', msg['user']); } else if (msg['m'].match(/\/rvbgametogg/i)) { msg['X-Spam'] = true; IsRvbGameOn = !IsRvbGameOn; cb.sendNotice('rvbGame now ' + (IsRvbGameOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/rvbhidedisplaytogg/i)) { msg['X-Spam'] = true; IsRvbHideDisplay = !IsRvbHideDisplay; cb.sendNotice('IsRvbHideDisplay now ' + (IsRvbHideDisplay ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/rvbgamereset/i)) { msg['X-Spam'] = true; resetRvbGame(); cb.sendNotice('rvbGameReset', msg['user']); } else if (msg['m'].match(/\/rvbgetredteam/i)) { msg['X-Spam'] = true; cb.sendNotice('rvb Red Team\n' + ArRvbTeamRedUser.join(' '), msg['user']); } else if (msg['m'].match(/\/rvbgetblueteam/i)) { msg['X-Spam'] = true; cb.sendNotice('rvb Blue Team\n' + ArRvbTeamBlueUser.join(' '), msg['user']); } else if (msg['m'].match(/\/rvbgetgreenteam/i)) { msg['X-Spam'] = true; cb.sendNotice('rvb Green Team\n' + ArRvbTeamGreenUser.join(' '), msg['user']); } else if (msg['m'].match(/\/rvbgetorangeteam/i)) { msg['X-Spam'] = true; cb.sendNotice('rvb Orange Team\n' + ArRvbTeamOrangeUser.join(' '), msg['user']); } // IsRvbHideDisplay else if (msg['m'].match(/\/crhelp/i)) { msg['X-Spam'] = true; cb.sendNotice('COMMANDS: crHelp | crSetMinTip <number> | crHideOn | crHideOff | crList | crClearUsers ' + '| crAddUser <name> | crRemoveUser <name> | crLoadCalDefaults ' + '| crEmoticons | mcHelp | tbHelp ', msg['user']); } else if (msg['m'].match(/\/crhideon/i)) { msg['X-Spam'] = true; hideShow(); } else if (msg['m'].match(/\/crhideoff/i)) { msg['X-Spam'] = true; unhideShow(); } else if (msg['m'].match(/\/crList/i)) { msg['X-Spam'] = true; //list current users cb.sendNotice(getAllUsersWithAccessAsString(), msg['user']); } else if (msg['m'].match(/\/crclearusers/i)) { msg['X-Spam'] = true; //list current users resetUsersWithAccess(); cb.sendNotice('Clearing users of hidden show list. ', msg['user']); } else if (msg['m'].match(/\/cradduser/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var sUser = splitM[1]; //need to do the add action if (!cbjs.arrayContains(cb.limitCam_allUsersWithAccess(), sUser)) { cb.limitCam_addUsers([sUser]); } cb.sendNotice('add user to hidden show list ' + sUser, msg['user']); } else if (msg['m'].match(/\/crremoveuser/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var sUser = splitM[1]; //need to do the add action if (cbjs.arrayContains(cb.limitCam_allUsersWithAccess(), sUser)) { cb.limitCam_removeUsers([sUser]); } cb.sendNotice('remove user from hidden show ' + sUser, msg['user']); } else if (msg['m'].match(/\/crsetmintip/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); TipMin = parseInt(splitM[1]); cb.sendNotice('TipMin set to ' + splitM[1], msg['user']); } else if (msg['m'].match(/\/cremoticons/i)) { msg['X-Spam'] = true; var sTmp = ':cal-a cal-a * :cal-arm cal-arm * :cal-bath cal-bath * :cal-beard cal-beard * ' + ':cal-bye cal-bye * :cal-d cal-d * :cal-dick cal-dick * :cal-drop cal-drop * :cal-e cal-e * :cal-eat cal-eat * ' + ':cal-f cal-f * :cal-f2 cal-f2 * :cal-flex cal-flex * :cal-flex2 cal-flex * :cal-fuck cal-fuck * :cal-fur cal-fur * ' + ':cal-n cal-n * :cal-sick cal-sick * :cal-sit cal-sit * :cal-stop cal-stop * :cal-sweet cal-sweet ' + ':cal-ty :cal-ty * :cal-ty2 cal-ty2 * :cal-wb cal-wb * :cal-wtf cal-wtf * :cal-wuf cal-wuf'; cb.sendNotice(sTmp, msg['user']); } else if (msg['m'].match(/\/crloadcaldefaults/i)) { msg['X-Spam'] = true; loadCalDefaults(); cb.sendNotice('Loading Cal Defaults', msg['user']); } else if (msg['m'].substring(0, 5).toLowerCase() === '/ccc9') { msg['X-Spam'] = true; //add to viewers list where "totaltipped - ticket costs > " loadUsersWithAccessSpecial(); cb.sendNotice('ccc9: SPECIAL Load Users With Access', msg['user']); } //black jack subcode BEGIN else if (msg['m'].match(/\/jsblackjacktogg/i)) { msg['X-Spam'] = true; IsBlackjackOn = !IsBlackjackOn; cb.sendNotice('Blackjack is now ' + (IsBlackjackOn ? 'On' : 'Off'), msg['user']); } else if (msg['m'].match(/\/bjhelp/i)) { msg['X-Spam'] = true; cb.sendNotice('COMMANDS: bjHelp bjTest ', msg['user']); } else if ((msg['m'].match(/\/bj1/i)) || (msg['m'].match(/\/blackjack/i))) { msg['X-Spam'] = true; checkDataBj(msg['user']); shuffleDeckRandom(DeckZ); copyDeck(DeckZ, Aliases[msg['user']].DataBj.DeckA); Aliases[msg['user']].DataBj.IsActiveGame = true; // cb.sendNotice('TEST: ' + listDeck(DeckA), msg['user']); // cb.sendNotice('TEST: ' + listDeckByCard(DeckA), msg['user']); bjDealStart(Aliases[msg['user']].DataBj.DeckA, msg['user']); } else if (msg['m'].match(/\/bjhit/i)) { msg['X-Spam'] = true; bjHit(msg['user']); } else if (msg['m'].match(/\/bjstand/i)) { msg['X-Spam'] = true; bjStand(msg['user']); } else if (msg['m'].match(/\/bjaddcredits/i)) { msg['X-Spam'] = true; var splitM = msg['m'].split(' '); var sUser = splitM[1]; Aliases[sUser].Credit += 100; } else if (msg['m'].match(/\/bjstarx/i)) { msg['X-Spam'] = true; } //black jack subcode END else if (msg['m'].substring(0, 5).match(/\//i)) { msg['X-Spam'] = true; } } //if (iPowerUser) { if (IsUserProfileOn) { if (!IsCached(sUser)) { if (sProfilePrefix != '') { var sMsg = '_____ User-Info: ' + sUser + ' ' + sProfilePrefix; if (Tippers.hasOwnProperty(sUser)) { sMsg += ' ' + Tippers[sUser].TotalTips +'T'; } else { sMsg += ' 0T'; } // cb.sendNotice(sMsg, cb.room_slug, WHISPER_BACKGROUND); // cb.sendNotice(sMsg, '', WHISPER_BACKGROUND, '#000000', 'normal', 'red'); cb.sendNotice(sMsg, 'cb_kyle', '#99C68E'); // "#99C68E" -- frog green } } } if (IsPmOnImOn) { //PmOnIm feature if (msg['m'].substring(0, 4).toLowerCase() === "/pm ") { msg['X-Spam'] = true; var sUser = msg['user']; if (PmOnImUsers.hasOwnProperty(sUser)) { var sMsg = msg['m'].substring(4); cb.sendNotice('PM (' + sUser + ' #' + PmOnImUsers[sUser].AliasNo + ') ' + sMsg, cb.room_slug, PMONIM_BACKGROUND); cb.sendNotice('PM (' + sUser + ' #' + PmOnImUsers[sUser].AliasNo + ') ' + sMsg, '', PMONIM_BACKGROUND, '#000000', 'normal', 'red'); cb.sendNotice('PM (sent) ' + sMsg, sUser, PMONIM_BACKGROUND); msg['m'] = '(pm on im sent)'; } } else if (msg['m'].match(/\/pmhelp/i)) { msg['X-Spam'] = true; var sTmp = msg['m'].substring(8); var sUser = (sTmp != '') ? sTmp : msg['user']; cb.sendNotice(PmOnImHelpInfo, sUser); } } if (IsAntiSpamOn) { //AntiSpam and Advertiser feature if (Aliases[sUser].IsSpammer) { // apply spammers msg['X-Spam'] = true; var sMsg2 = ''; if (Aliases[sUser].IsSpammer9) { sMsg2 = '*** *** ***'; } else { sMsg2 = msg['m']; } // cb.sendNotice('(SPAMMER: ' + sUser + ') ' + sMsg2, cb.room_slug, SPAM_BACKGROUND); cb.sendNotice('(SPAMMER: ' + sUser + ') ' + sMsg2, '', SPAM_BACKGROUND, '#000000', 'normal', 'red'); } else if (!Aliases[sUser].TimeWaitSkip && !iPowerUser) { var iThreshhold = (Date.now() - Aliases[sUser].TimeEntered) ; var sMsg2 = msg['m']; var iMaxThreshold = AntiRobotEnterThreshold * 1000; if (iThreshhold < iMaxThreshold) { //you are trying to speak within 22 s of entering a room. You must be a robot, right? var sUser = msg['user']; cb.sendNotice('(' + sUser + ') ' + sMsg2, cb.room_slug, SPAM_BACKGROUND); cb.sendNotice('(' + sUser + ') ' + sMsg2, '', SPAM_BACKGROUND, '#000000', 'normal', 'red'); msg['m'] = '... ... ...' } else { Aliases[sUser].TimeWaitSkip = true; } } // else if (!Aliases[sUser].TimeWaitSkip) { } //black jack subcode BEGIN if (IsBlackjackOn) { var dataBj = Aliases[msg['user']].DataBj; if (dataBj.IsActiveGame) { var sMsg = '' + msg['m']; if (sMsg == 's') { msg['X-Spam'] = true; bjStand(msg['user']); msg['m'] = '(Blackjack Command Sent - Stand on ' + dataBj.iTotalPlayer + ')'; } else if (sMsg == 'h') { msg['X-Spam'] = true; bjHit(msg['user']); msg['m'] = '(Blackjack Command Sent - Hit)'; } else if (sMsg == 'r') { msg['X-Spam'] = true; cb.sendNotice(dataBj.sHandDealer + '(Showing ' + ((dataBj.iTotalDealer == 1) ? 'Ace' : dataBj.iTotalDealer) + ')\n' + dataBj.sHandPlayer + ' (' + dataBj.iTotalPlayer + dataBj.sAceOption + ')', msg['user'], BLACKJACK_BACKGROUND); cb.sendNotice('h to Hit, s to Stand, r to Refresh, p for Help', msg['user'], BLACKJACK_BACKGROUND); msg['m'] = '(Blackjack Command Sent - Refresh)'; } else if (sMsg == 'p') { msg['X-Spam'] = true; cb.sendNotice('HELP SELECTED. In the works.', msg['user'], BLACKJACK_BACKGROUND); msg['m'] = '(Blackjack Command Sent - Help)'; } } else if (dataBj.IsPlayAgainPrompt) { var sMsg = '' + msg['m']; if (sMsg == 'y') { msg['X-Spam'] = true; dataBj.IsPlayAgainPrompt = false; shuffleDeckRandom(DeckZ); copyDeck(DeckZ, dataBj.DeckA); dataBj.IsActiveGame = true; bjDealStart(dataBj.DeckA, msg['user']); msg['m'] = '(Blackjack Command Sent - Yes)'; } else if (sMsg == 'n') { msg['X-Spam'] = true; dataBj.IsPlayAgainPrompt = false; msg['m'] = '(Blackjack Command Sent - No)'; cb.sendNotice('Thank you for playing.', msg['user'], BLACKJACK_BACKGROUND); } else if (sMsg == 'r') { msg['X-Spam'] = true; dataBj.IsPlayAgainPrompt = false; cb.sendNotice('There is No Active Blackjack Game', msg['user'], BLACKJACK_BACKGROUND); msg['m'] = '(Blackjack Command Sent - Refresh)'; } } } //if (IsBlackjackOn) { //black jack subcode END if (IsPhraseWordEnable) { var iPos = 0; var sTmp1 = ''; sTmp1 = msg['m']; iPos = sTmp1.toLowerCase().indexOf(PhraseWord.toLowerCase()); if (iPos >= 0) { msg['X-Spam'] = true; if (!cbjs.arrayContains(cb.limitCam_allUsersWithAccess(), msg['user'])) { cb.limitCam_addUsers([msg['user']]); ArPhraseWordUser.push(msg['user']); if (true) { //notify users if ticketing is running. cb.sendNotice(TICKET_ICON_CODE + '*** Ticket Show: Thanks for getting a Ticket to the Show: ' + msg['user'] + ' *** ', '', TICKETING_BACKGROUND); } } } } if (IsIdentifyGirlOn || IsIdentifyTransOn) { if (Aliases[msg['user']].ProtectedChatNo == 1) { msg['X-Spam'] = true; var sMsg = msg['m']; var sUser = msg['user']; cb.sendNotice('#' + Aliases[sUser].AliasNo + ' ' + sUser + ': ' + sMsg, cb.room_slug, PMONIM_BACKGROUND); cb.sendNotice('#' + Aliases[sUser].AliasNo + ' ' + sUser + ': ' + sMsg, '', PMONIM_BACKGROUND, '#000000', 'normal', 'red'); } } if (IsTicketingShowActive && SilentNonTicketHolder && (!iPowerUser)) { var sMsg = msg['m']; var sUser = msg['user']; if (!(cbjs.arrayContains(cb.limitCam_allUsersWithAccess(), sUser))) { //msg['m'] = TICKET_ICON_CODE + sMsg; msg['X-Spam'] = true; cb.sendNotice('(' + sUser + ') ' + sMsg, cb.room_slug, SILENT_NON_TICKET_HOLDER_BACKGROUND); cb.sendNotice('(' + sUser + ') ' + sMsg, '', SILENT_NON_TICKET_HOLDER_BACKGROUND, '#000000', 'normal', 'red'); msg['m'] = '(Please wait until after the show or try email. Messaging is not available to Non Ticket Holders, but your message has been sent to the broadcaster and moderator(s)).'; } } if (IsConfOn) { //BUG, DUPLICATE MEESSAGS TO USERS IN CONFERENCE...CHECK BEFORE ADDING. if (Aliases[sUser].InConf != '') { if ((msg['m'].substring(0, 3).toLowerCase() === "/z ") || (msg['m'].substring(0, 3).toLowerCase() === "!z ") ) { var sMsg = msg['m'].substring(3); msg['m'] = sMsg; } else { for (var i = 0; i < ArConf.length; i++) { cb.sendNotice('(' + sUser + ') ' + msg['m'], ArConf[i], CONF_BACKGROUND); } msg['X-Spam'] = true; //msg['m'] = '(im sent to conference)'; msg['m'] = '(IM sent to Conference)'; } } } if (IsRollDiceOn) { if (msg['m'].toLowerCase() == RollDicePhrase) { msg['X-Spam'] = true; var currentTime = Date.now(); var timePassed = currentTime - Aliases[sUser].RollDiceLast; if (timePassed > (RollDiceWaitToRepeatInSec * 1000)) { Aliases[sUser].RollDiceLast = currentTime; rollDice(msg['user']); } else { //tell user how many seconds they have to wait. var waitTime = Math.round(RollDiceWaitToRepeatInSec - (timePassed / 1000)); msg['m'] = '(Sorry you have to wait ' + waitTime + ' seconds to roll again.)'; } } } if (IsUserPrefixOn && (!iPowerUser)) { if (Aliases[sUser].Prefix != '') { var sMsg = msg['m']; msg['m'] = Aliases[sUser].Prefix + ' ' + sMsg; } } if (IsLushOverrideOn) { if (cb.room_slug === msg['user']) { if (TEST_LushOn) { cb.sendNotice('TEST LUSH: ' + msg['m'], 'cb_kyle'); } if (msg['m'].substring(0, 42) === '********My LOVENSE Lush is now reacting to') { var sMsg = msg['m'].substring(42); var iPos = sMsg.indexOf('.'); var iPos2 = sMsg.indexOf('second'); //sMsg = '*** :lushsm on ' + sMsg.substring(0, iPos) + ' for ' + sMsg.substring(iPos + 21); sMsg = '*** :lushsm for ' + sMsg.substring(iPos + 21, iPos2 + 3) + '. Thank You ' + (sMsg.substring(0, iPos-6)).toUpperCase() + '!'; msg['m'] = sMsg; } // justinsandersxxx:********My LOVENSE Lush is now reacting to cxcdn's tip. It will stop after 1 seconds! } } if (IsHushOverrideOn) { if (cb.room_slug === msg['user']) { var sMsg = ''; var iPos = 0; sMsg = msg['m']; if ((sMsg.indexOf('********My LOVENSE Hush is now reacting to')) >= 0) { sMsg = msg['m'].substring(42); iPos = sMsg.indexOf('.'); var iPos2 = sMsg.indexOf('second'); // sMsg = '*** :hushsm on ' + sMsg.substring(0, iPos) + ' for ' + sMsg.substring(iPos + 21); sMsg = '*** :hushsm for ' + sMsg.substring(iPos + 21, iPos2 + 3) + '. Thank You ' + (sMsg.substring(0, iPos-6)).toUpperCase() + '!'; msg['m'] = sMsg; } // calreynolds:********My LOVENSE Hush is now reacting to justalittlebitless's tip. It will stop after 2 seconds! } } if (IsPmReplaceOn && (!iPowerUser)) { if (msg['m'].match(/pm/i)) { var sTmp = '' + msg['m']; sTmp = sTmp.replace(/pm/gi, '*PLOW ME*'); msg['m'] = sTmp; } if (msg['m'].match(/cock/i)) { var sTmp = '' + msg['m']; sTmp = sTmp.replace(/cock/gi, 'C**K'); msg['m'] = sTmp; } if (msg['m'].match(/coke/i)) { var sTmp = '' + msg['m']; sTmp = sTmp.replace(/coke/gi, '*COCK*'); msg['m'] = sTmp; } } kos(iPowerUser, msg); return msg; }); function addPmOnImUser(sUser) { if (!PmOnImUsers.hasOwnProperty(sUser)) { //new alias var user = {}; user.AliasNo = Aliases[sUser].AliasNo; PmOnImUsers[sUser] = user; } } // timers ************************************** function runCountDownTimer() { if (IsCountDownTimerRunning) { var currentTime = Date.now(); CountDownTimerRemainingInSec = CountDownTimerTimeInSec - ((currentTime - CountDownTimerStartTime) / 1000); if (CountDownTimerRemainingInSec > 0) { cb.setTimeout(runCountDownTimer, 7000); } else { CountDownTimerRemainingInSec = CountDownTimerTimeInSec; IsCountDownTimerRunning = false; } } cb.drawPanel(); } function getFormattedTime_helper(piSecs) { var sReturn = ''; var iMin = parseInt(piSecs / 60); var iSec = parseInt(piSecs % 60); if (iMin > 0) { sReturn += iMin + ':'; } else { sReturn += '00:'; } if (iSec < 10) { sReturn += '0'; } sReturn += iSec; return sReturn; } function getFormattedTimer() { var sReturn = ''; if (IsCountDownTimerRunning) { sReturn = '[' + getFormattedTime_helper(CountDownTimerRemainingInSec) + ']'; } else if (IsCountUpTimerRunning) { sReturn = '[' + getFormattedTime_helper(CountUpTimerRunningInSec) + ']'; } return sReturn; } function startCountDownTimer() { IsCountDownTimerRunning = true; CountDownTimerStartTime = Date.now(); cb.setTimeout(runCountDownTimer, 1000); } function runCountUpTimer() { if (IsCountUpTimerRunning) { var currentTime = Date.now(); CountUpTimerRunningInSec = (currentTime - CountUpTimerStartTime) / 1000; cb.setTimeout(runCountUpTimer, 7000); } cb.drawPanel(); } function startCountUpTimer() { IsCountUpTimerRunning = true; CountUpTimerStartTime = Date.now(); cb.setTimeout(runCountUpTimer, 1000); } function stopAllTimers() { IsCountDownTimerRunning = false; IsCountUpTimerRunning = false; } //**************************************************************** function runTopTipperTool() { if (iTopTipperCurrentNo > iTopTipperMaxNo) { iTopTipperCurrentNo = 0; } else if (ArTopTipperValue[iTopTipperCurrentNo] == 0) { iTopTipperCurrentNo = 0; } if (iTopTipperCurrentNo == 0) { Panel21 = 'Latest Tip Received:'; } else { Panel21 = 'Top Tipper #' + iTopTipperCurrentNo + ':'; } // Panel22 = format_username(ArTopTipperUser[iTopTipperCurrentNo]) + ' (' + ArTopTipperValue[iTopTipperCurrentNo] + ')'; Panel22 = format_username(ArTopTipperUser[iTopTipperCurrentNo]); iTopTipperCurrentNo++; cb.drawPanel(); cb.setTimeout(runTopTipperTool, 7500); } function startTopTipperTool() { //loads up the 1 time thank you for last tipper. cb.setTimeout(runTopTipperTool, 1000); } // ****************************************************************** function getHtwTimeRemain () { var iReturn = 0; iReturn = (HtwTimeLimit * 1000) - (Date.now() - HtwStartTime); return iReturn; } function runHtwTool() { if (IsHighestTipperWinsOn) { var iTimeRemain = getHtwTimeRemain(); if (iTimeRemain > 0) { cb.sendNotice('Time left to Tip: ' + (getFormattedTime_helper(iTimeRemain / 1000)) + '. Top Tipper: ' + (HtwTopTipper == '' ? '(none)': HtwTopTipper) + ' with ' + HtwTopTipperValue + '.', '', HTW_BACKGROUND, '#000000'); if (iTimeRemain > 120000) { cb.setTimeout(runHtwTool, 60000); } else { cb.setTimeout(runHtwTool, 12000); } } else { //finished notice IsHighestTipperWinsOn = false; cb.sendNotice('Tipping Contest has Ended. The Highest Tipper this time is ' + (HtwTopTipper == '' ? '(none)': HtwTopTipper) + ' with ' + HtwTopTipperValue, '', HTW_BACKGROUND, '#000000'); } } } function startHtwTool() { IsHighestTipperWinsOn = true; HtwStartTime = Date.now(); HtwTopTipper = ''; HtwTopTipperValue = 0; cb.setTimeout(runHtwTool, 1000); } // ****************************************************************** function checkAndAddTasks(piTip, psUser, psTipMessage) { var iFound = false; for (var prop in Items) { if (Items[prop].Cost == piTip) { iFound = true; //create a Task var task = {}; task.TipCost = piTip; task.TipUser = psUser; task.TipMessage = psTipMessage; task.ItemDesc = Items[prop].Description; task.SubmitTime = Date.now(); task.CompleteTime = ''; task.Status = 'new'; Tasks[++LastTask] = task; if (!HasActiveTask) { HasActiveTask = true; CurrentTask++; TaskPanel31Old = Panel31; TaskPanel32Old = Panel32; Panel31 = ''; Panel32 = ''; TaskPanel31 = 'Current Tip Menu:'; TaskPanel32 = Tasks[LastTask].ItemDesc; cb.setTimeout(completeCurrentTask, 55000); } cb.drawPanel(); if (IsTipMenuNoticeOn) { var sMsg = '*** ' + Tasks[LastTask].TipCost + ' - ' + Tasks[LastTask].ItemDesc + ' by ' + Tasks[LastTask].TipUser + ' ***'; //cb.sendNotice(sMsg, cb.room_slug, TIP_MENU_NOTICE_BACKGROUND, '#000000', 'bold'); //cb.sendNotice(sMsg, '', TIP_MENU_NOTICE_BACKGROUND, '#000000', 'bold'); cb.sendNotice(sMsg, '', '', '#800080', 'bold'); /* if (Tasks[LastTask].TipMessage != '') { sMsg += ' (has tip-note)' } cb.sendNotice(sMsg, '', TIP_MENU_NOTICE_BACKGROUND, '#000000', 'bold', 'red'); */ } break; } } if ((psTipMessage != '') && (!iFound)) { //redundant code?? //create a Task var task = {}; task.TipCost = piTip; task.TipUser = psUser; task.TipMessage = psTipMessage; task.ItemDesc = '(no specific item)'; task.SubmitTime = Date.now(); task.CompleteTime = ''; task.Status = 'new'; Tasks[++LastTask] = task; if (!HasActiveTask) { HasActiveTask = true; CurrentTask++; TaskPanel31Old = Panel31; TaskPanel32Old = Panel32; Panel31 = ''; Panel32 = ''; TaskPanel31 = 'Current Tip Menu:'; TaskPanel32 = Tasks[LastTask].ItemDesc; cb.setTimeout(completeCurrentTask, 55000); } cb.drawPanel(); } } function deleteItemByCost(piTip) { for (var prop in Items) { if (Items[prop].Cost == piTip) { iFound = true; delete Items[prop]; } } } function checkAndAddPmOnImUser(piTip, psUser) { if (IsPmOnImOn) { if (piTip == PmOnImTipCosts) { addPmOnImUser(psUser); cb.sendNotice('Thank you for Tipping for PM on IM CHAT. ' + PmOnImHelpInfo, psUser) } } } function completeCurrentTask() { if (HasActiveTask) { Tasks[CurrentTask].Status = 'completed'; Tasks[CurrentTask].CompleteTime = Date.now(); cb.sendNotice('complete current task: ' + CurrentTask, 'cb_kyle'); if (CurrentTask == LastTask) { HasActiveTask = false; Panel31 = TaskPanel31Old; Panel32 = TaskPanel32Old; TaskPanel31Old = ''; TaskPanel32Old = ''; TaskPanel31 = ''; TaskPanel32 = ''; } else if (CurrentTask < LastTask) { CurrentTask++; TaskPanel32 = Tasks[CurrentTask].ItemDesc; } cb.drawPanel(); } else { cb.sendNotice('no active tasks available.', 'cb_kyle'); } } cb.onEnter(function(user) { var sUser = user['user']; checkAndAddAlias(sUser); if (Aliases[sUser].TimeEntered == 0) { Aliases[sUser].TimeEntered = Date.now(); Aliases[sUser].TimeWaitSkip = false; } Aliases[sUser].has_tokens = user['has_tokens']; if (IsAntiSpamOn) { //AntiSpam and Advertiser feature cb.sendNotice('Welcome ' + user['user'] + '!. (Please wait ' + AntiRobotEnterThreshold + 's before making your first post.)', sUser); } if (NotifyTicketOnEnter) { if (cb.limitCam_userHasAccess(sUser)) { cb.sendNotice(TICKET_ICON_CODE + '(Custom Greeting) *** Ticket Show: You have a Ticket to the Show: ' + sUser + ' ***', sUser, TICKETING_BACKGROUND); cb.sendNotice(TICKET_ICON_CODE + '(on Enter) *** Ticket Show: You have a Ticket to the Show: ' + sUser + ' ***', 'cb_kyle', TICKETING_BACKGROUND); } } if (IsIdentifyGirlOn) { if (user['gender'] == 'f') { cb.sendNotice('Female Alert: #' + Aliases[user['user']].AliasNo + ' ' + user['user'], cb.room_slug, PMONIM_BACKGROUND); cb.sendNotice('Female Alert: #' + Aliases[user['user']].AliasNo + ' ' + user['user'], '', PMONIM_BACKGROUND, '#000000', 'normal', 'red'); Aliases[sUser].ProtectedChatNo = 1; } } if (IsIdentifyTransOn) { if (user['gender'] == 's') { cb.sendNotice('Trans Alert: #' + Aliases[user['user']].AliasNo + ' ' + user['user'], cb.room_slug, PMONIM_BACKGROUND); cb.sendNotice('Trans Alert: #' + Aliases[user['user']].AliasNo + ' ' + user['user'], '', PMONIM_BACKGROUND, '#000000', 'normal', 'red'); Aliases[sUser].ProtectedChatNo = 1; } } }); function initTopTipperArrays() { for (var i = 0; i <= iTopTipperMaxNo; i++) { ArTopTipperValue[i] = 0; ArTopTipperUser[i] = ''; } } function getItemInfo() { var sReturn = ''; for (var prop in Items) { sReturn += '\n' + Items[prop].Description + '(' + Items[prop].Cost + '), '; } sReturn = 'ITEMS:' + sReturn; return sReturn; } function getTaskInfo() { var sReturn = ''; for (var i = ((SuggestedStartTaskDisply > 0) ? SuggestedStartTaskDisply : 1); i <= LastTask; i++) { sReturn += '\n#' + i + ' ' + Tasks[i].Status + ' (' + Tasks[i].TipUser + ')' + Tasks[i].ItemDesc + '(' + Tasks[i].TipCost + ')'; //'): ' + Tasks[i].TipMessage; } return sReturn; } function getTaskInfoWithDetail() { var sReturn = ''; for (var i = ((SuggestedStartTaskDisply > 0) ? SuggestedStartTaskDisply : 1); i <= LastTask; i++) { sReturn += '\n#' + i + ' ' + Tasks[i].Status + ' (' + Tasks[i].TipUser + ' #' + Aliases[Tasks[i].TipUser].AliasNo + ')' + Tasks[i].ItemDesc + '(' + Tasks[i].TipCost + '): ' + Tasks[i].TipMessage.replace(/(?:\r\n|\r|\n)/g, ' * '); } return sReturn; } function getAliasInfo() { var sReturn = '' for (var i = 0; i < ArAliases.length; i++) { sReturn += '\n' + '#' + i + ' ' + ArAliases[i]; } sReturn = 'ALIASES (' + ArAliases.length + '):' + sReturn; return sReturn; Tasks[i].TipCost + '-' } function addSp(psUser) { var splitResult = psUser.split(' '); for (var i = 0; i < splitResult.length; i++) { checkAndAddAlias(splitResult[i]); if (Aliases[splitResult[i]].IsSpammer) { Aliases[splitResult[i]].IsSpammer9 = !Aliases[splitResult[i]].IsSpammer9; } else { Aliases[splitResult[i]].IsSpammer = true; } } } function addUser(psUser) { var splitResult = psUser.split(' '); for (var i = 0; i < splitResult.length; i++) { var sUser = splitResult[i]; if (!cbjs.arrayContains(cb.limitCam_allUsersWithAccess(), sUser)) { cb.limitCam_addUsers([sUser]); } } } function getSpammerList() { var sReturn = ''; for (var prop in Aliases) { if (Aliases[prop].IsSpammer) { sReturn += prop + ' '; } } return sReturn; } function refreshTasksPanel() { } function IsCached(psTmp) { var iReturn = false; var iPos = ArProfileCache.indexOf(psTmp); if (iPos >= 0) { //found iReturn = true; } else { if (ArProfileCache.length >= iMaxProfileCache) { ArProfileCache.shift(); //shift - takes top off. } ArProfileCache.push(psTmp); //push puts at bottom } // var ArProfileCache = []; // var c = 5; return iReturn; } function updateLastTipper(piIndivTip, piTip, psUser) { var sUser = psUser; var iTip = piTip; ArTopTipperUser[0] = sUser; //pos 0 is the last tipper. ArTopTipperValue[0] = piIndivTip; for (var iCount = 1; iCount <= ArTopTipperUser.length; iCount++) { if (sUser == ArTopTipperUser[iCount]) { // iTip += ArTopTipperValue[iCount]; ArTopTipperUser[iCount] = ''; ArTopTipperValue[iCount] = 0; break; } } for (var iCount = 1; iCount <= ArTopTipperValue.length; iCount++) { if (iTip > ArTopTipperValue[iCount]) { var sTmp = ArTopTipperUser[iCount]; var iTmp = ArTopTipperValue[iCount]; ArTopTipperUser[iCount] = sUser; ArTopTipperValue[iCount] = iTip; sUser = sTmp; iTip = iTmp; if (iTip == 0) { break; } //empty slot or break; } } iTopTipperCurrentNo = 0; //reset the leaderboard to see the last tipper. } function getTopTippersInfo() { //used for testing only. var sReturn = 'TopTipper Info:'; for (var iCount = 0; iCount <= iTopTipperMaxNo; iCount++) { sReturn += '\n#' + iCount + ' ' + ArTopTipperUser[iCount] + ': ' + ArTopTipperValue[iCount]; } return sReturn; } function addTip(piTip, psUser) { //start recording peoples tip amounts. var tipuser = psUser; if (Tippers.hasOwnProperty(tipuser)) { Tippers[tipuser].TotalTips += piTip; } else { //new Tipper var tipper = {}; tipper.TotalTips = piTip; tipper.ShowCosts = 0; tipper.SubTotalA = 0; Tippers[tipuser] = tipper; //manually added ones do not have object. } if (IsHighestTipperWinsOn) { if (HtwTippers.hasOwnProperty(tipuser)) { HtwTippers[tipuser].TotalTips += piTip; } else { var tipper = {}; tipper.TotalTips = piTip; HtwTippers[tipuser] = tipper; } if (HtwTippers[tipuser].TotalTips > HtwTopTipperValue) { HtwTopTipperValue = HtwTippers[tipuser].TotalTips; HtwTopTipper = tipuser; cb.sendNotice('The NEW Highest Tipper is ' + HtwTopTipper + ' with ' + HtwTopTipperValue + '.', '', HTW_BACKGROUND, '#000000'); //check threshold and set minimum for someone to counter var iTimeRemain = getHtwTimeRemain(); if (iTimeRemain < (HtwLastCallTime * 1000)) { HtwTimeLimit = (((Date.now() - HtwStartTime)/1000) + HtwLastCallTime); cb.sendNotice('Timer reset to ' + HtwLastCallTime + 's.' , '', HTW_BACKGROUND, '#000000'); } } else { cb.sendNotice(tipuser + ', you are just ' + (HtwTopTipperValue - HtwTippers[tipuser].TotalTips + 1) + ' away from being the Highest Tipper.', '', HTW_BACKGROUND, '#000000'); } } } function setTip(piTip, psUser) { //start recording peoples tip amounts. var tipuser = psUser; if (Tippers.hasOwnProperty(tipuser)) { Tippers[tipuser].TotalTips = piTip; } else { //new Tipper var tipper = {}; tipper.TotalTips = parseInt(piTip); Tippers[tipuser] = tipper; //manually added ones do not have object. } } function hideShow() { //start Hidden show if (!cb.limitCam_isRunning()) { cb.limitCam_start(TipBreakMsg); } // cb.sendNotice('*** hide triggered. '); //ksh test. } function unhideShow() { //end show if (cb.limitCam_isRunning()) { cb.limitCam_stop(); } // cb.sendNotice('*** unhide triggered. '); //ksh test. } function getAllUsersWithAccessAsString() { var sReturn = ''; var userList = cb.limitCam_allUsersWithAccess(); sReturn = '' + userList.length + ' USER(S) WITH ACCESS:'; for (var i = 0; i < userList.length; i++) { sReturn += '\n' + '(#' + i + ') ' + userList[i]; } return sReturn; } //ksh1234 function addShowCostToAllCurrentViewers(piCost) { for (var prop in Tippers) { if (cbjs.arrayContains(cb.limitCam_allUsersWithAccess(), prop)) { Tippers[prop].ShowCosts += piCost; } } } function loadUsersWithAccessSpecial() { var minTipAmount = TipMin; for (var prop in Tippers) { if ((Tippers[prop].TotalTips - Tippers[prop].ShowCosts) >= minTipAmount) { if (!cbjs.arrayContains(cb.limitCam_allUsersWithAccess(), prop)) { cb.limitCam_addUsers([prop]); } } } } function loadUsersWithAccess() { var minTipAmount = TipMin; for (var prop in Tippers) { if (Tippers[prop].TotalTips >= minTipAmount) { if (!cbjs.arrayContains(cb.limitCam_allUsersWithAccess(), prop)) { cb.limitCam_addUsers([prop]); } } } } function resetUsersWithAccess() { var userList = cb.limitCam_allUsersWithAccess(); //reset Lists if (userList.length > 0) { cb.limitCam_removeAllUsers(); } } function getTipInfo(poTippers) { var sReturn = ''; var runningTotal = 0; for (var prop in poTippers) { runningTotal += poTippers[prop].TotalTips; sReturn += '\n' + prop + ':, ' + poTippers[prop].TotalTips + ', (-' + poTippers[prop].ShowCosts + ')'; }//ksh1234 sReturn = 'TIPPERS (TOTAL ' + runningTotal + ')' + sReturn; return sReturn; } function runTicketing() { //use this routine that checks to run every 1 min as a suggestion. // IsTicketingRunning = true; // TicketingStatus = 0; // need test code for people to test theire screent // update subject with correct # if (TicketingStatus == 1) { //Status 1. Notify users. //todo: notify coupons? notifyTicketHolders(); TicketingStatus++; } else if (TicketingStatus == 2) { //Status 2. Countdown timer. //TODO: update control panel. Cannot do from BOT. Implement in APP //todo: start animations if (TicketingTimerInMin > 1) { //TODO: timer counter cb.sendNotice(TICKET_ICON_CODE + '*** Ticket Show: Show starts in ' + TicketingTimerInMin + ' minutes. ***', '', TICKETING_BACKGROUND); if (TicketingMessage != '') { cb.sendNotice(TicketingMessage , '', TICKETING_BACKGROUND); } TicketingTimerInMin--; } else { TicketingStatus++; } } else if (TicketingStatus == 3) { //Status 3. Last Test of the HIdden Scrren //todo: update subject to have crazyticket tage start of show 0 tkns, etc. //todo: set the message for the ticket window. hideShow(); cb.sendNotice(TICKET_ICON_CODE + '*** Ticket Show: Hidden Screen is ON. Show starts in 1 minute. ' + 'If you do not have a ticket, you will get the Hidden Screen. ***', '', TICKETING_BACKGROUND); TicketingStatus++; } else if (TicketingStatus == 4) { //Status 4. Show Start //TODO: timer UP counter //TODO: tip x amount is avilable. //TODO: silence all except ticket holders //only allow ticket holders to speak? allow mods to speak freely, grey-whisper everything else? // cb.sendNotice('*** Ticketing Show: SHOW STARTING. Chat available only to ticket holders, moderators can see non-ticketholder chats. *** '); IsTicketingShowActive = true; cb.sendNotice(TICKET_ICON_CODE + '*** Ticket Show: SHOW IS STARTING. ***', '', TICKETING_BACKGROUND, '#000000', 'bold'); Panel31 = 'Show Timer: '; startCountUpTimer(); TicketingStatus++; } else { //exit runTicketting loop //need to wait for signal to stop // IsTicketingShowActive = false; // IsTicketingRunning = false; return null; } cb.setTimeout(runTicketing, 60000); } function startTicketing() { //TODO: check if already running. IsTicketingRunning = true; TicketingStatus = 1; IsTicketIconOn = true; // turn on ticket icon //update panels Panel31 = 'Ticketing: '; if (TicketPrice > 0) { Panel32 = 'Ticket Price: ' + TicketPrice + ' Tks'; } else { Panel32 = 'Ticket Price: ' + TipMin + ' Tks'; } CountDownTimerTimeInSec = (TicketingTimerInMin + 1) * 60; //adds 1 fore the pre-ticket message startCountDownTimer(); cb.setTimeout(runTicketing, 1000); } function notifyTicketHolders() { var userList = cb.limitCam_allUsersWithAccess(); for (var i = 0; i < userList.length; i++) { cb.sendNotice(TICKET_ICON_CODE + '*** Ticket Show: You have a Ticket to the Show: ' + userList[i] + ' *** ' + TICKET_ICON_CODE, userList[i], TICKETING_BACKGROUND); } } function runRepeatingProgram() { if (!tipbreak_running) { cb.sendNotice('...repeating stopped running...'); return; } cb.setTimeout(runRepeatingProgram, (RepeatWaitTime * 60 * 1000)); cb.setTimeout(runSubProgram, (HideWaitTime * 1000)); //// cb.sendNotice('blip (lights out)...'); //// cb.sendNotice((Date.now() - tipbreak_starttime) / 1000); //// cb.sendNotice(getAllUsersWithAccessAsString()); //// cb.sendNotice('... blip'); hideShow(); } function runSubProgram() { //this program lets users see the screeen after the timeout period. //// cb.sendNotice('lights on...'); //// cb.sendNotice((Date.now() - tipbreak_starttime) / 1000); unhideShow(); } function runRepeatingNotice() { if (IsRepeatingNoticeRunning) { cb.sendNotice(RepeatingNoticeMessage, '', '', RepeatingNotice1ForegroundColor); cb.setTimeout(runRepeatingNotice, RepeatingNoticeTimeInSec * 1000); } } function startRepeatingNotice() { IsRepeatingNoticeRunning = true; cb.setTimeout(runRepeatingNotice, 1000); } function runRepeatingNotice2() { if (IsRepeatingNoticeRunning2) { cb.sendNotice(RepeatingNoticeMessage2); cb.setTimeout(runRepeatingNotice2, RepeatingNoticeTimeInSec2 * 1000); } } function startRepeatingNotice2() { IsRepeatingNoticeRunning2 = true; cb.setTimeout(runRepeatingNotice2, 1000); } function runRepeatingNotice3() { if (IsRepeatingNoticeRunning3) { cb.sendNotice(RepeatingNoticeMessage3, '', '', RepeatingNotice1ForegroundColor3); cb.setTimeout(runRepeatingNotice3, RepeatingNoticeTimeInSec3 * 1000); } } function startRepeatingNotice3() { IsRepeatingNoticeRunning3 = true; cb.setTimeout(runRepeatingNotice3, 1000); } function DeleteAllPropsInObject(pObject) { for (var prop in pObject) { delete pObject[prop]; } } function loadJustinDefaults() { //default room settings for JustinSandersXxx RoomSubject = '#hairy #muscle has #bigcock and #bigass with #lovense #hush for #cum and ticket #cumshow ( #horny #cock #ass #muscles #jerk #lush #ohmibod #pvt )'; cb.changeRoomSubject(RoomSubject); TipMin = 174; TicketPrice = 0; tippedGoal = 3975; tippedSubGoal = 125; MainGoalTitle = 'CUM Goal: '; SubGoalTitle = 'Flash Butt: '; Panel31 = 'Cum Goal: Ticket Show'; Panel32 = 'Sub Goal: Flash Butt'; RepeatingNoticeMessage = '*** Tip Menu: Arm Pits(10) * Bicep Flex(14) * Nipple Pinch(16) * Bicep Flex w Tongue(19) * Stand Up(20) * Leg Flex(21) * Back Flex(22) * Butt Flash(26) * Cock Flash(30) * Spank Butt(40) * Butt Hole(70) * Pillow Fuck(85) * Hard Cock(140) * Requests(25) * Regular PM(110) *** Twitter: @JustinSanders85 ***'; addItem(10, 'Arm Pits'); addItem(14, 'Bicep Flex'); addItem(16, 'Nipple Pinch'); addItem(19, 'Bicep Flex w Tongue'); addItem(20, 'Stand Up'); addItem(21, 'Leg Flex'); addItem(22, 'Back Flex'); addItem(26, 'Butt Flash'); addItem(30, 'Cock Flash'); addItem(40, 'Spank Butt'); addItem(70, 'Butt Hole'); addItem(85, 'Pillow Fuck'); addItem(140, 'Hard Cock'); addItem(25, 'Requests'); addItem(110, 'Regular PM'); IsSubGoalOn = true; IsUserProfileOn = true; // NotifyTicketOnEnter = true; IsTipRemainingOn = true; cb.drawPanel(); var sTmp = '--- :hushsm LUSH LEVELS: :hushsm <br>--- 1 - 14 tokens: LOW vib for 1 sec <br>--- 15 - 99 tokens: MEDIUM vib for 3 sec <br>--- 100 - 499 tokens: MEDIUM vib for 30 sec <br>--- 500 - 999 tokens: HIGH vib for 20 sec <br>--- 1000 - 9999 tokens: ULTRA HIGH vib for 20 sec'; RepeatingNoticeMessage3 = sTmp.replace(/<br>/g, '\n'); IsRepeatingNoticeRunning = true; RepeatingNoticeTimeInSec = 120; startRepeatingNotice(); } function loadCalDefaults() { //default room settings for JustinSandersXxx RoomSubject = 'HUSH Punch my Fart Box ( #hairy #muscle #ass #cock #naked #gay #bear #anal #bigdick #bigcock #daddy #hairy #new #lovense #omibod #lush #hush #pvt )'; cb.changeRoomSubject(RoomSubject); TipMin = 180; tippedGoal = 3975; // tippedSubGoal = 125; MainGoalTitle = 'Goal: '; Panel11Override = '* CalReynolds *'; // SubGoalTitle = 'Flash Butt: '; Panel31 = 'Try the Tip Menu !'; Panel32 = 'Tip 49 to Roll Dice !'; //RepeatingNoticeMessage = '*** Tip Menu: Arm Pits(10) * Bicep Flex(14) * Nipple Pinch(16) * Bicep Flex w Tongue(19) * Stand Up(20) * Leg Flex(21) * Back Flex(22) * Butt Flash(26) * Cock Flash(30) * Spank Butt(40) * Butt Hole(70) * Pillow Fuck(85) * Hard Cock(140) * Requests(25) * Regular PM(110) *** Twitter: @JustinSanders85 ***'; addItem(50, 'Requests'); // IsSubGoalOn = true; IsTipNoLimitOn = true; IsUserProfileOn = true; IsSingleWarningOn = true; // NotifyTicketOnEnter = true; // IsTipRemainingOn = true; cb.drawPanel(); var sTmp = '--- :hushsm SHORT MENU. LEVEL SETTINGS: :hushsm <br>--- 2 - 14 tokens: LOW Vib for 2 sec <br>--- 15 - 49 tokens: LOW Vib for 10 sec <br>--- 50 - 99 tokens: MED Vib for 15 sec <br>--- 100 - 299 tokens: HIGH Vib for 20 sec <br>--- 500 - 775 tokens: HIGH Vib for 45 sec'; RepeatingNoticeMessage3 = sTmp.replace(/<br>/g, '\n'); IsRepeatingNoticeRunning3 = true; RepeatingNoticeTimeInSec3 = 175; startRepeatingNotice3(); } function kos(piPowerUser, poMsg) { var PREFIX_SCAN = 15; var sPreMsg = poMsg['m'].substring(0, PREFIX_SCAN); var sPreMsgPos = sPreMsg.match(/\/\//); if (piPowerUser) { if (sPreMsgPos != null) { //just incase kyle mistypes a command. poMsg['X-Spam'] = true; cb.sendNotice('COMMANDS: |||||| ' + '| crAddUser <name> | crRemoveUser <name> ' + '| crEmoticons | mcHelp | tbHelp ', poMsg['user']); } } } function rvbGetOrAssignTeam(psUser) { var sReturn = ''; if (Aliases[psUser].RvbTeam == '') { var iNum = Math.round(Math.random() * 100); var sBackground = ''; //cb.sendNotice('TEST iNUM. Welcome ' + iNum); if (iNum < 25) { Aliases[psUser].RvbTeam = 'Red'; ArRvbTeamRedUser.push(psUser); sBackground = RvbRedBackground; } else if ((iNum >= 25) && (iNum < 50)) { Aliases[psUser].RvbTeam = 'Blue'; ArRvbTeamBlueUser.push(psUser); sBackground = RvbBlueBackground; } else if ((iNum >= 50) && (iNum < 75)) { Aliases[psUser].RvbTeam = 'Green'; ArRvbTeamGreenUser.push(psUser); sBackground = RvbGreenBackground; } else { Aliases[psUser].RvbTeam = 'Orange'; ArRvbTeamOrangeUser.push(psUser); sBackground = RvbOrangeBackground; } cb.sendNotice('RvBvGvO. ' + psUser + ' is randomly assigned to the ' + Aliases[psUser].RvbTeam + ' Team.', '', sBackground); } sReturn = Aliases[psUser].RvbTeam; return sReturn; } function resetRvbGame() { var sTmp1 = ''; RvbTeamRedTotal = 0; RvbTeamBlueTotal = 0; RvbTeamGreenTotal = 0; RvbTeamOrangeTotal = 0; // clear out user arrray while (ArRvbTeamBlueUser.length > 0) { sTmp1 = ArRvbTeamBlueUser.pop(); Aliases[sTmp1].RvbTeam = ''; } while (ArRvbTeamRedUser.length > 0) { sTmp1 = ArRvbTeamRedUser.pop(); Aliases[sTmp1].RvbTeam = ''; } while (ArRvbTeamGreenUser.length > 0) { sTmp1 = ArRvbTeamGreenUser.pop(); Aliases[sTmp1].RvbTeam = ''; } while (ArRvbTeamOrangeUser.length > 0) { sTmp1 = ArRvbTeamOrangeUser.pop(); Aliases[sTmp1].RvbTeam = ''; } } function applyRvbGame(piTip, psUser) { if (IsRvbGameOn) { var sRvbTeam = rvbGetOrAssignTeam(psUser); // var sRvbTeamLeading = ''; // var sBackground = ''; // var iDiff = 0; if (sRvbTeam == 'Red') { RvbTeamRedTotal += piTip; } else if (sRvbTeam == 'Blue') { RvbTeamBlueTotal += piTip; } else if (sRvbTeam == 'Green') { RvbTeamGreenTotal += piTip; } else if (sRvbTeam == 'Orange') { RvbTeamOrangeTotal += piTip; } ///TODO HOW TO ANNOUCNE WHO IS WINNING???? var iCurrentWinner = 0; var sBackground = ''; var sRvbTeamLeading = ''; var sText1 = ''; iCurrentWinner = RvbTeamRedTotal; sBackground = RvbRedBackground; sRvbTeamLeading = 'RED'; if (iCurrentWinner < RvbTeamBlueTotal) { iCurrentWinner = RvbTeamBlueTotal; sBackground = RvbBlueBackground; sRvbTeamLeading = 'BLUE'; } if (iCurrentWinner < RvbTeamGreenTotal ) { iCurrentWinner = RvbTeamGreenTotal; sBackground = RvbGreenBackground; sRvbTeamLeading = 'GREEN'; } if (iCurrentWinner < RvbTeamOrangeTotal ) { iCurrentWinner = RvbTeamOrangeTotal; sBackground = RvbOrangeBackground; sRvbTeamLeading = 'ORANGE'; } cb.sendNotice('RvBvGvO. ' + sRvbTeamLeading + ' Team Leads by: R(' + (RvbTeamRedTotal-iCurrentWinner) + ') B(' + (RvbTeamBlueTotal-iCurrentWinner) + ') G(' + (RvbTeamGreenTotal-iCurrentWinner) + ') O(' + (RvbTeamOrangeTotal-iCurrentWinner) + ').', '', sBackground); /* iDiff = RvbTeamRedTotal - RvbTeamBlueTotal; if (iDiff > 0) { // red is winning sBackground = RvbRedBackground; sRvbTeamLeading = 'RED'; } else if (iDiff < 0) { //blue is winning sBackground = RvbBlueBackground; sRvbTeamLeading = 'BLUE' } cb.sendNotice('RvBvGvO. ' + sRvbTeamLeading + ' Team is Leading by ' + (Math.abs(iDiff) + 1) + ' tokens.', '', sBackground); */ } } // The following coded was from the original Tip Goal App by TODO (cite original author) // vars var total_tipped = 0; var tippedGoal = 0; //ksh added. var high_tip_username = null; var high_tip_amount = 0; var last_tip_username = null; var last_tip_amount = 0; var subject_is_set_with_0 = false; var IsSubGoalOn = false; //ksh added. var MainGoalTitle = ''; //ksh added. var SubGoalTitle = ''; //ksh added. var subGoal_total_tipped = 0; //ksh added var tippedSubGoal = 0; //ksh added. /* cb.settings_choices = [{ name: 'tokens', type: 'int', minValue: 1, default: 100 }, { name: 'PmOnIm_tip_amount', //Added for PmOnIm type: 'int', minValue: 1, defaultValue: 3, label: 'Tip Cost for PM on IM:' }]; */ tippedGoal = parseInt(cb.settings.tokens); //ksh added. // handlers cb.tipOptions(function(user) { // return; /* return {options:[ {label: 'choice1'}, {label: 'choice2'}, {label: 'choice3'} //, , {label: '' + user} ], label:"Select a choice:"}; */ /* if (user == 'kyle333333') { return {options:[ {label: 'choice1'}, {label: 'choice2'}, {label: 'choice3'} //, , {label: '' + user} ], label:"Select a choice:"}; } else { return; } */ return; }); cb.onTip(function(tip) { //start recording peoples tip amounts. var tipuser = tip['from_user']; checkAndAddAlias(tipuser); addTip(parseInt(tip['amount']), tipuser); //grant users to limit_cam var iUsePrice = 0; if (TicketPrice > 0) { iUsePrice = TicketPrice; } else { iUsePrice = TipMin; } if (parseInt(tip['amount']) >= iUsePrice) { if (!cbjs.arrayContains(cb.limitCam_allUsersWithAccess(), tip['from_user'])) { cb.limitCam_addUsers([tip['from_user']]); if (IsTicketingRunning) { //notify users if ticketing is running. cb.sendNotice(TICKET_ICON_CODE + '*** Ticket Show: Thanks for getting a Ticket to the Show: ' + tip['from_user'] + ' *** ' + TICKET_ICON_CODE, '', TICKETING_BACKGROUND); } } } applyItemJar(tip['amount']); applyRaffle(tip['amount'], tip['from_user']); total_tipped += tip['amount']; if (total_tipped >= tippedGoal) { //ksh changed //total_tipped = tippedGoal; //ksh changed iTipGoalMetNo++; total_tipped -= tippedGoal; if (iTipGoalMetNo == 1) { tippedGoal = TIPPEDGOAL_RESET_VALUE; //ksh changed 2 cb.changeRoomSubject('[0 left] ' + RoomSubject); Panel11 = 'Goal Completed :'; //'Tip Received / Goal :' IsTipNoLimitOn = false; } while (total_tipped > tippedGoal) { total_tipped -= tippedGoal; iTipGoalMetNo++; } } else { if ((tippedGoal - total_tipped) < iSubjectTipRemainThreshold) { var iChange = total_tipped - iSubjectTipRemainLastValueUpdated; if (iChange >= iSubjectTipRemainChange) { iSubjectTipRemainLastValueUpdated = total_tipped; var iRemain = tippedGoal - total_tipped; if (iRemain < 0) { iRemain = 0; } if (iTipGoalMetNo == 0) { cb.changeRoomSubject('[' + iRemain + ' left] ' + RoomSubject); } //run function to change subject [0 left]. } } } // update_subject(); //ksh changed //ksh changed for subGoals START subGoal_total_tipped += tip['amount']; if (subGoal_total_tipped > tippedSubGoal) { subGoal_total_tipped = tippedSubGoal; } //cb.sendNotice( ' user2: ' + psUser); checkAndAddTasks(tip['amount'], tip['from_user'], tip['message']); //ksh added...maybe TODO add notes checkAndAddPmOnImUser(tip['amount'], tip['from_user']); updateLastTipper(parseInt(tip['amount']), Tippers[tipuser].TotalTips, tip['from_user']); applyRvbGame(tip['amount'], tip['from_user']); // **************************************** Lovense 2 token warning END ***** if (IsSingleWarningOn) { if (tip['amount'] == 1) { var iCurrentTime = Date.now(); if (Aliases[tip['from_user']].SingleWarningLastTippedTime == 0) { // Aliases[tip['from_user']].SingleWarningLastTippedTime = iCurrentTime; } else { var iTimeDiff = iCurrentTime - Aliases[tip['from_user']].SingleWarningLastTippedTime; if (iTimeDiff < 3000) { cb.sendNotice('Thanks for the tip, as a reminder Lovense starts at 2 tokens. '); } // Aliases[tip['from_user']].SingleWarningLastTippedTime = iCurrentTime; } Aliases[tip['from_user']].SingleWarningLastTippedTime = iCurrentTime; } // **************************************** Lovense 2 token warning END ***** // tip['from_user'] // tip['amount'] // user.SingleWarningLastTippedTime = 0; // Aliases[sTmp2].Prefix } //ksh changed for subGoals END 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'] } cb.drawPanel(); //show tip-notes to mods { var sMsg = tip['message']; var sUser = '' + tip['from_user']; if (sMsg != '') { cb.sendNotice('(Tip-Note by ' + '#' + Aliases[sUser].AliasNo + '-' + sUser + '=' + Tippers[sUser].TotalTips + ') ' + sMsg.replace(/(?:\r\n|\r|\n)/g, ' * '), '', TIP_NOTE_NOTICE_BACKGROUND, '#000000', 'normal', 'red'); } else { cb.sendNotice('(' + '#' + Aliases[sUser].AliasNo + '-' + sUser + '=' + Tippers[sUser].TotalTips + ') ', '', TIP_NOTE_NOTICE_BACKGROUND, '#000000', 'normal', 'red'); } //ksh1234 } }); cb.onDrawPanel(function(user) { if (IsSubGoalOn) { //ksh added all code for Sub Goal in Panel. return { 'template': '3_rows_of_labels', 'row1_label': (Panel11Override != '') ? Panel11Override : // (( IsTipRemainingOn ? MainGoalTitle + '' + (tippedGoal - total_tipped) + ' Left' + ((iTipGoalMetNo == 0) ? '':' (x' + (iTipGoalMetNo-1) + ')'): MainGoalTitle + '(' + total_tipped + '/' + tippedGoal + ')' + ((iTipGoalMetNo == 0) ? '':' (x' + (iTipGoalMetNo-1) + ')'), // )) 'row1_value': (Panel12Override !='') ? Panel12Override : // (( SubGoalTitle + '(' + subGoal_total_tipped + '/' + tippedSubGoal + ')', // )) 'row2_label': (Panel21Override !='') ? Panel21Override : (IsRvbGameOn && !IsRvbHideDisplay) ? 'GREEN (' + ArRvbTeamGreenUser.length + '): ' + RvbTeamGreenTotal : (Panel21), //'Latest Tip Received:', //'Highest Tip:', 'row2_value': (Panel22Override !='') ? Panel22Override : (IsRvbGameOn && !IsRvbHideDisplay) ? 'ORANGE (' + ArRvbTeamOrangeUser.length + '): ' + RvbTeamOrangeTotal : (Panel22), //format_username(last_tip_username) + ' (' + last_tip_amount + ')', // format_username(high_tip_username) + ' (' + high_tip_amount + ')', 'row3_label': (IsRvbGameOn && !IsRvbHideDisplay)? 'RED (' + ArRvbTeamRedUser.length + '): ' + RvbTeamRedTotal : (Panel31 + getFormattedTimer() + TaskPanel31), //Panel31, 'row3_value': (IsRvbGameOn && !IsRvbHideDisplay) ? 'BLUE (' + ArRvbTeamBlueUser.length + '): ' + RvbTeamBlueTotal : (Panel32 + TaskPanel32), }; } else { return { 'template': '3_rows_of_labels', 'row1_label': (Panel11Override != '') ? Panel11Override : IsItemJarOn ? ItemJarName + ': ' + ItemJarCompleted + ' / ' + ItemJarTotal : // (( IsTipNoLimitOn ? 'Tip Received :' : ( IsTipRemainingOn ? 'Tip Remaining :': Panel11 ), // )) //'Tip Received / Goal :' 'row1_value': (Panel12Override != '') ? Panel12Override : // (( IsTipNoLimitOn ? total_tipped : ( IsTipRemainingOn ? '' + (tippedGoal - total_tipped) + ((iTipGoalMetNo == 0) ? '':' (x' + (iTipGoalMetNo-1) + ')'): '' + total_tipped + ' / ' + tippedGoal + ((iTipGoalMetNo == 0) ? '':' (x' + (iTipGoalMetNo-1) + ')') //ksh changed ), // )) 'row2_label': (Panel21Override !='') ? Panel21Override : (IsRvbGameOn && !IsRvbHideDisplay) ? 'GREEN (' + ArRvbTeamGreenUser.length + '): ' + RvbTeamGreenTotal : (Panel21), //'Latest Tip Received:', //'Highest Tip:', 'row2_value': (Panel22Override !='') ? Panel22Override : IsRollDiceOn ? 'Rolled #' + RollDiceMatch + ' : ' + RollDiceCount + ' x': (IsRvbGameOn && !IsRvbHideDisplay) ? 'ORANGE (' + ArRvbTeamOrangeUser.length + '): ' + RvbTeamOrangeTotal : (Panel22), //format_username(last_tip_username) + ' (' + last_tip_amount + ')', // format_username(high_tip_username) + ' (' + high_tip_amount + ')', 'row3_label': IsItemJarOn ? (ItemJarTotal - ItemJarCompleted) + ' - ' + ItemJarName: (IsRvbGameOn && !IsRvbHideDisplay) ? 'RED (' + ArRvbTeamRedUser.length + '): ' + RvbTeamRedTotal : (Panel31 + getFormattedTimer() + TaskPanel31), //Panel31, 'row3_value': IsItemJarOn ? 'Left: ' + ItemJarPartial + ' / ' + ItemJarCost: (IsRvbGameOn && !IsRvbHideDisplay) ? 'BLUE (' + ArRvbTeamBlueUser.length + '): ' + RvbTeamBlueTotal : (Panel32 + TaskPanel32), }; } }); // helper functions /* //ksh changed function update_subject() { if (tips_remaining() == 0) { if (subject_is_set_with_0) { return; } subject_is_set_with_0 = true; } else { subject_is_set_with_0 = false; } var new_subject = cb.settings.goal_description + " [" + tips_remaining() + " tokens remaining]"; cb.log("Changing subject to: " + new_subject); cb.changeRoomSubject(new_subject); } */ function tips_remaining() { var r = tippedGoal - total_tipped; //ksh changed if (r < 0) { return 0; } else { return r; } } function format_username(val) { if (val === null) { return "--"; } else { return val.substring(0, 12); } } //*** BLACKJACK CODE *** //*** (14 or 14) when having an ace. var IsBlackjackOn = false; var BLACKJACK_BACKGROUND = '#CCFFFF'; //light slate - '#CCFFFF'; medium torquoist- '#48CCCD'; lavendar blue '#ADDFFF'; light seas green - '#3EA99F' var PLAYBACK_TIME = 2000; var IsBlackjackPlaybackRunning = false; var bjPlaybackUsers = []; var DeckZ = []; //used as the template //var POKER_BACK = ':polkalvpokerback'; //var bjIsActiveGame = false; //var bjIsPlayAgainPrompt = false; //var bjsHandDealer = ''; //var bjsHandPlayer = ''; //var bjiTotalDealer = 0; //var bjiAceCountDealer = 0; //var bjiTotalPlayer = 0; //var bjiAceCountPlayer = 0; //var bjiNextCard = 0; //var bjiCredit = 0; //var bjiBetAmount = 1; //var bjsAceOption = ''; function bjHit(psUser) { var dataBj = Aliases[psUser].DataBj; dataBj.iTotalPlayer += getCardValue(dataBj.DeckA[dataBj.iNextCard]); dataBj.sHandPlayer += getCardInfo(dataBj.DeckA[dataBj.iNextCard]) + ' '; if (getCardValue(dataBj.DeckA[dataBj.iNextCard]) == 1) { dataBj.iAceCountPlayer++; } dataBj.iNextCard++; if (dataBj.iTotalPlayer > 21) { cb.sendNotice('* Player Bust *', psUser, BLACKJACK_BACKGROUND); //dataBj.Playback.push('Player Bust'); dataBj.IsActiveGame = false; // bjDealEnd(); //when player bust, no need to prompt h/s. then, display dealers hidden card. //cb.sendNotice(dataBj.sHandPlayer + ' (' + dataBj.iTotalPlayer + ') Bust', psUser, BLACKJACK_BACKGROUND); dataBj.Playback.push(dataBj.sHandPlayer + ' (' + dataBj.iTotalPlayer + ') * Bust *'); dataBj.sHandDealer = 'Dealer: ' + getCardInfo(dataBj.DeckA[1]) + ' ' + getCardInfo(dataBj.DeckA[3]) + ' '; //cb.sendNotice(dataBj.sHandDealer + ' (Dealer Shows)', psUser, BLACKJACK_BACKGROUND); dataBj.Playback.push(dataBj.sHandDealer + ' (Dealer Shows)'); // bjIsActiveGame = false;123 bjDealEnd(psUser); } else if (dataBj.iTotalPlayer == 21) { //cb.sendNotice('Player Draws 21 (Automatic Stand)', psUser, BLACKJACK_BACKGROUND); //cb.sendNotice(dataBj.sHandPlayer + ' (' + dataBj.iTotalPlayer + ')', psUser, BLACKJACK_BACKGROUND); dataBj.Playback.push('* Player Draws 21 (Automatic Stand) *'); dataBj.Playback.push('(' + dataBj.iTotalPlayer + ') ' + dataBj.sHandPlayer); bjStand(psUser); } else { if (dataBj.IsActiveGame) { dataBj.sAceOption = ''; if ((dataBj.iAceCountPlayer > 0) && (dataBj.iTotalPlayer <= 11)) { //allow ace option if decides to allow double / late double dataBj.sAceOption = ' or ' + (dataBj.iTotalPlayer + 10); } cb.sendNotice(dataBj.sHandPlayer + '(' + dataBj.iTotalPlayer + dataBj.sAceOption + ') ', psUser, BLACKJACK_BACKGROUND); cb.sendNotice('h to Hit, s to Stand, r to Refresh, p for Help', psUser, BLACKJACK_BACKGROUND); //dataBj.Playback.push(dataBj.sHandPlayer + ' (' + dataBj.iTotalPlayer + dataBj.sAceOption + ')'); //dataBj.Playback.push('h to Hit, s to Stand, r to Refresh, h for Help'); } else { cb.sendNotice(dataBj.sHandPlayer + '(' + dataBj.iTotalPlayer + ') ' + '* Bust *', psUser, BLACKJACK_BACKGROUND); //dataBj.Playback.push(dataBj.sHandPlayer + ' (' + dataBj.iTotalPlayer + ') Bust'); dataBj.sHandDealer = 'Dealer: ' + getCardInfo(dataBj.DeckA[1]) + ' ' + getCardInfo(dataBj.DeckA[3]) + ' '; cb.sendNotice(dataBj.sHandDealer + ' (Dealer Shows)', psUser, BLACKJACK_BACKGROUND); //dataBj.Playback.push(dataBj.sHandDealer + ' (Dealer Shows)'); // bjIsActiveGame = false;123 bjDealEnd(psUser); } } } function bjStand(psUser) { var dataBj = Aliases[psUser].DataBj; dataBj.IsActiveGame = false; //prevents h,s if ((dataBj.iAceCountPlayer > 0) && (dataBj.iTotalPlayer <=11)) { dataBj.iTotalPlayer += 10; } dataBj.sAceOption = ''; dataBj.sHandDealer = 'Dealer: ' + getCardInfo(dataBj.DeckA[1]) + ' ' + getCardInfo(dataBj.DeckA[3]) + ' '; dataBj.iTotalDealer = getCardValue(dataBj.DeckA[1]) + getCardValue(dataBj.DeckA[3]); if (getCardValue(dataBj.DeckA[1]) == 1) { dataBj.iAceCountDealer++; } if (getCardValue(dataBj.DeckA[3]) == 1) { dataBj.iAceCountDealer++; } if (dataBj.iAceCountDealer > 0) { if (dataBj.iTotalDealer < 7) { dataBj.sAceOption = ' or ' + (dataBj.iTotalDealer + 10); } else if ((dataBj.iTotalDealer >= 7) && (dataBj.iTotalDealer <=11)) { dataBj.iTotalDealer += 10; dataBj.sAceOption = ''; } } //1 cb.sendNotice('Dealer Shows\n' + dataBj.sHandDealer + ' (' + dataBj.iTotalDealer + dataBj.sAceOption + ')', psUser, BLACKJACK_BACKGROUND); dataBj.Playback.push('Dealer Shows\n' + dataBj.sHandDealer + ' (' + dataBj.iTotalDealer + dataBj.sAceOption + ')'); while (dataBj.iTotalDealer < 17) { dataBj.iTotalDealer += getCardValue(dataBj.DeckA[dataBj.iNextCard]); dataBj.sHandDealer += getCardInfo(dataBj.DeckA[dataBj.iNextCard]) + ' '; if (getCardValue(dataBj.DeckA[dataBj.iNextCard]) == 1) { dataBj.iAceCountDealer++; } if ((dataBj.iAceCountDealer > 0) && (dataBj.iTotalDealer <= 11)) { if (dataBj.iTotalDealer >= 7) { dataBj.iTotalDealer += 10; dataBj.sAceOption = ''; } else { dataBj.sAceOption = ' or ' + (dataBj.iTotalDealer + 10); } } //cb.sendNotice('Dealer Hitting\n' + dataBj.sHandDealer + ' (' + dataBj.iTotalDealer + dataBj.sAceOption + ')', psUser, BLACKJACK_BACKGROUND); dataBj.Playback.push('Dealer Hitting\n' + dataBj.sHandDealer + ' (' + dataBj.iTotalDealer + dataBj.sAceOption + ')'); dataBj.iNextCard++; } if (dataBj.iTotalDealer > 21) { //cb.sendNotice('Dealer Busts\n*** Player Wins (' + (dataBj.iBetAmount + dataBj.iBetAmount) + ' credits) ***', psUser, BLACKJACK_BACKGROUND); dataBj.Playback.push('* Dealer Busts *\n*** Player Wins (' + (dataBj.iBetAmount + dataBj.iBetAmount) + ' credits) ***'); Aliases[psUser].Credit += dataBj.iBetAmount + dataBj.iBetAmount ; } else if (dataBj.iTotalDealer >= 17) { var sMsgWin = ''; if (dataBj.iTotalDealer == dataBj.iTotalPlayer) { sMsgWin = '*** Player Ties (Gets '+ (dataBj.iBetAmount) + ' credits) ***'; Aliases[psUser].Credit += dataBj.iBetAmount; } else if (dataBj.iTotalDealer < dataBj.iTotalPlayer) { sMsgWin = '*** Player Wins (' + (dataBj.iBetAmount + dataBj.iBetAmount) + ' credits) ***'; Aliases[psUser].Credit += dataBj.iBetAmount + dataBj.iBetAmount ; } else { sMsgWin = '*** Player Loses ***'; } //cb.sendNotice(sMsgWin, psUser, BLACKJACK_BACKGROUND); dataBj.Playback.push(sMsgWin); } bjDealEnd(psUser); } function newDeck(parDeck) { for (var i = 0; i < 52; i++) { parDeck[i] = i + 1; } } function listDeck(parDeck) { var sReturn = ''; for (var i = 0; i < 52; i++) { sReturn += parDeck[i] + ' '; } return sReturn; } function listDeckByCard(parDeck) { var sReturn = ''; for (var i = 0; i < 52; i++) { sReturn += getCardInfo(parDeck[i]) + ' '; } return sReturn; } function shuffleDeckRandom(parDeck) { // var iNum = Math.round(Math.random() * (ArRaffleUser.length -1)); //if there are 1 user, then only pos 0 is the only choice; hence, length -1 var DECK_TOTAL = 52; var iRnd = 0; var iTmp = 0; for (var i = DECK_TOTAL; i > 0; i--) { iRnd = Math.round(Math.random() * (i - 1)); iTmp = parDeck[i-1]; parDeck[i-1] = parDeck[iRnd]; parDeck[iRnd] = iTmp; } } function getCardValue(piCard) { var iReturn = 0; var iCardNo = piCard % 13; if (iCardNo == 0) { iReturn = 10; } else if (iCardNo == 1) { iReturn = 1; } else if (iCardNo == 11) { iReturn = 10; } else if (iCardNo == 12) { iReturn = 10; } else if (iCardNo == 13) { iReturn = 10; } else { iReturn = iCardNo; } return iReturn; } function getCardInfo(piCard) { var sReturn = ':polkalv'; //example: :polkalv7Club var iSuite = Math.floor(piCard / 13); var iCardNo = piCard % 13; //sReturn = '[' + iSuite + ']'; if (iCardNo == 0) { sReturn += 'King'; } else if (iCardNo == 1) { sReturn += 'Ace'; } else if (iCardNo == 11) { sReturn += 'Jack'; } else if (iCardNo == 12) { sReturn += 'Queen'; } else if (iCardNo == 13) { sReturn += 'King'; } else { sReturn += iCardNo; } if (iSuite == 1) { // 0,4 = spade sReturn += "Heart"; } else if (iSuite == 2) { sReturn += "Club"; } else if (iSuite == 3) { sReturn += "Diamond"; } else { sReturn += "Spade"; } return sReturn; } function bjCheckBj(piCardA, piCardB) { var iReturn = false; var iValueA = getCardValue(piCardA); var iValueB = getCardValue(piCardB); if ((iValueA + iValueB) == 11) { if ((iValueA == 10) || (iValueB == 10)) iReturn = true; } return iReturn; } function bjDealEnd(psUser) { var dataBj = Aliases[psUser].DataBj; var arPlayback = dataBj.Playback; arPlayback.push('You have ' + Aliases[psUser].Credit + ', play again for ' + Aliases[psUser].DataBj.iBetAmount + ' credits (y/n) ?'); // cb.setTimeout(bjPlayback(psUser), PLAYBACK_TIME); // cb.setTimeout(bjPlayback, 500); addIfNotExist(bjPlaybackUsers, psUser); bjPlayback(); // cb.sendNotice('You have ' + Aliases[psUser].Credit + ', play again for ' + Aliases[psUser].DataBj.iBetAmount + ' credits (y/n) ?', psUser, BLACKJACK_BACKGROUND); // Aliases[psUser].DataBj.IsPlayAgainPrompt = true; } function bjPlayback() { var iRunAgain = false; for (var i = 0; i < bjPlaybackUsers.length; i++) { var sUser = bjPlaybackUsers[i]; var dataBj = Aliases[sUser].DataBj; var arPlayback = dataBj.Playback; if (arPlayback.length > 0) { var sTmp = arPlayback.shift(); cb.sendNotice(sTmp, sUser, BLACKJACK_BACKGROUND); iRunAgain = true; } if (arPlayback.length == 1) { Aliases[sUser].DataBj.IsPlayAgainPrompt = true; } } //for (var i = 0; //clean up the bjplayback array for any 0 length items. for (var i = (bjPlaybackUsers.length - 1); i >= 0; i--) { var sUser = bjPlaybackUsers[i]; var arPlayback = Aliases[sUser].DataBj.Playback; if (arPlayback.maxLength == 0) { bjPlaybackUsers.splice(i,1); } } if (iRunAgain) { cb.setTimeout(bjPlayback, PLAYBACK_TIME); } } function bjPlayback2() { // var psUser = 'cb_kyle'; var iRunAgain = false; // for (var i = 0; i < bjPlaybackUsers; i++) { //var sUser = bjPlaybackUsers[i]; var sUser = 'cb_kyle'; var dataBj = Aliases[sUser].DataBj; var arPlayback = dataBj.Playback; if (arPlayback.length > 0) { var sTmp = arPlayback.shift(); cb.sendNotice(sTmp, sUser, BLACKJACK_BACKGROUND); // cb.setTimeout(bjPlayback(psUser), PLAYBACK_TIME); cb.setTimeout(bjPlayback, PLAYBACK_TIME); iRunAgain = true; } if (arPlayback.length == 1) { // cb.sendNotice('You have ' + Aliases[psUser].Credit + ', play again for ' + Aliases[psUser].DataBj.iBetAmount + ' credits (y/n) ?', psUser, BLACKJACK_BACKGROUND); Aliases[sUser].DataBj.IsPlayAgainPrompt = true; } // } //for (var i = 0; //clean up the bjplayback array for any 0 length items. if (iRunAgain) { // cb.setTimeout(bjPlayback, PLAYBACK_TIME); } } function bjDealStart(parDeck, psUser) { //:polkalvpokerback // 0. timeout on game activity. if they do not play their game, they automatically be paused out of the game and return to the chat. //deduct cost for playing check to make sure there is enough tokens to play. var dataBj = Aliases[psUser].DataBj; var iDealerHasBlackjack = false; var iPlayerHasBlackjack = false; if (Aliases[psUser].Credit < dataBj.iBetAmount) { cb.sendNotice('Sorry, you do not have enough credits. You have ' + Aliases[psUser].Credit + ' credits and need ' + dataBj.iBetAmount + '.', psUser, BLACKJACK_BACKGROUND); dataBj.IsActiveGame = false; } else { Aliases[psUser].Credit -= dataBj.iBetAmount; cb.sendNotice('Player has ' + Aliases[psUser].Credit + ' credits. Betting ' + dataBj.iBetAmount + ' credits.', psUser, BLACKJACK_BACKGROUND); dataBj.iAceCountPlayer = 0; dataBj.iAceCountDealer = 0; //1. initial deal to player and Dealer //bjsHandDealer = 'Dealer: ' + POKER_BACK + ' ' + getCardInfo(parDeck[3]) + ' '; dataBj.sHandDealer = 'Dealer: ' + dataBj.POKER_BACK + ' ' + getCardInfo(parDeck[3]) + ' '; // dataBj.sHandPlayer = 'Player: ' + getCardInfo(parDeck[0]) + ' ' + getCardInfo(parDeck[2]) + ' '; dataBj.sHandPlayer = psUser + ': ' + getCardInfo(parDeck[0]) + ' ' + getCardInfo(parDeck[2]) + ' '; if (getCardValue(parDeck[0]) == 1) { dataBj.iAceCountPlayer++; } if (getCardValue(parDeck[2]) == 1) { dataBj.iAceCountPlayer++; } dataBj.iTotalDealer = getCardValue(parDeck[3]); dataBj.iTotalPlayer = getCardValue(parDeck[0]) + getCardValue(parDeck[2]); dataBj.iNextCard = 4; iDealerHasBlackjack = bjCheckBj(parDeck[1], parDeck[3]); iPlayerHasBlackjack = bjCheckBj(parDeck[0], parDeck[2]); if (iDealerHasBlackjack && iPlayerHasBlackjack) { //push dataBj.sHandDealer = 'Dealer: ' + getCardInfo(parDeck[1]) + ' ' + getCardInfo(parDeck[3]) + ' '; cb.sendNotice(dataBj.sHandDealer + '\n' + dataBj.sHandPlayer + ' \nBoth Dealer and Player has Blackjack. *** PUSH (Recives ' + dataBj.iBetAmount + ' credits) ***', psUser, BLACKJACK_BACKGROUND); Aliases[psUser].Credit += dataBj.iBetAmount; dataBj.IsActiveGame = false; dataBj.IsPlayAgainPrompt = true; bjDealEnd(psUser); } else if (iPlayerHasBlackjack) { dataBj.sHandDealer = 'Dealer: ' + getCardInfo(parDeck[1]) + ' ' + getCardInfo(parDeck[3]) + ' '; cb.sendNotice(dataBj.sHandDealer + '\n' + dataBj.sHandPlayer + ' \n*** Player has Blackjack (Gets ' + (dataBj.iBetAmount + dataBj.iBetAmount + Math.ceil(dataBj.iBetAmount/2)) + ' credits) ***', psUser, BLACKJACK_BACKGROUND); Aliases[psUser].Credit += dataBj.iBetAmount + dataBj.iBetAmount + (Math.ceil(dataBj.iBetAmount/2)); dataBj.IsActiveGame = false; dataBj.IsPlayAgainPrompt = true; bjDealEnd(psUser); } else if (iDealerHasBlackjack) { dataBj.sHandDealer = 'Dealer: ' + getCardInfo(parDeck[1]) + ' ' + getCardInfo(parDeck[3]) + ' '; cb.sendNotice(dataBj.sHandDealer + '\n' + dataBj.sHandPlayer + ' \nDealer has Blackjack.', psUser, BLACKJACK_BACKGROUND); dataBj.IsActiveGame = false; dataBj.IsPlayAgainPrompt = true; bjDealEnd(psUser); } else { //calculate ace option dataBj.sAceOption = ''; if ((dataBj.iAceCountPlayer > 0) && (dataBj.iTotalPlayer <= 11)) { dataBj.sAceOption = ' or ' + (dataBj.iTotalPlayer + 10); } cb.sendNotice(dataBj.sHandDealer + '(Showing ' + ((dataBj.iTotalDealer == 1) ? 'Ace' : dataBj.iTotalDealer) + ')\n' + dataBj.sHandPlayer + ' (' + dataBj.iTotalPlayer + dataBj.sAceOption + ')', psUser, BLACKJACK_BACKGROUND); cb.sendNotice('h to Hit, s to Stand, r to Refresh, p for Help', psUser, BLACKJACK_BACKGROUND); } } } function addIfNotExist(parBjPlaybackUsers, psUser) { var iFound = false; iFound = containsString(parBjPlaybackUsers, psUser); if (!iFound) { parBjPlaybackUsers.push(psUser); } } function containsString(pArray, pStr) { var iReturn = false; for (i = 0; i < pArray.length ; i++) { if (pArray[i] == pStr) { iReturn = true; break; } } return iReturn; } function copyDeck(pFromDeck, pToDeck) { for (var i = 0; i < pFromDeck.length; i++) { pToDeck[i] = pFromDeck[i]; } } function checkDataBj(psUser) { if (!Aliases[psUser].DataBj.hasOwnProperty('POKER_BACK')) { //new alias var dataBj = {}; dataBj.POKER_BACK = ':polkalvpokerback'; dataBj.Playback = []; dataBj.DeckA = []; dataBj.IsActiveGame = false; dataBj.IsPlayAgainPrompt = false; dataBj.sHandDealer = ''; dataBj.sHandPlayer = ''; dataBj.iTotalDealer = 0; dataBj.iAceCountDealer = 0; dataBj.iTotalPlayer = 0; dataBj.iAceCountPlayer = 0; dataBj.iNextCard = 0; dataBj.iBetAmount = 1; dataBj.sAceOption = ''; // newDeck(dataBj.DeckA); Aliases[psUser].DataBj = dataBj; } } /* Title: BlackJack Author: cb_kyle (at Chaturbate) Version: 0.1 (02/09/2018) Cost: If you like this, please donate a Tip to the author. Anything is greatly appreciated. If you use this regularly, please Tip at least 1 Token per day that you use this. (If you have more than 200 users in your room, please consider more than a 1 Token Tip.) (Free to tyleramerica) *** IN DEVELOPMENT *** Description: BlackJack. Hit and Stand Working on: Late Double Down Avoiding: Insurance, Splits, Surrender -- Not wanting to offer more complexities. Possible Advantes (in development): Blackjack pays more, maybe 2x. Late Double. */ //put bj commands in whisper colors //hitting to 11 or 21 (with ace) does not automatically stay //create delay setting between hits. //add accounting //"epic replay" -- create replay with 5 next cards? //add 'h' - help //add late Double //congratulate in public for blackjack or high Win //cap max winning to block risk of cheating //allow the use of single deck until a cut card at 26 //after timeout, disable y/n questions. //*** error (13 or 15) on dealer with aces //dealer blackjack does not ask to play again. // ************************************************************ function init() { initTopTipperArrays(); startTopTipperTool(); // resetUsersWithAccess(); //hide this to avoid manipulating any exiting Ticket bots, at this point in time. addSp('apassaraporn petersonsterling ckiptonon poutoutain merslek bella543838'); // kyle111111 .. addSp('puedehave bitemeboy broome357 coloryourworldz detroitcadilac ggwwnnssty imotnre jake10240 jefffpittsburgh nighel'); // haters addSp('heavymetal2009 hermiesballs avamarie99 canadafun2015 ek9009 pussylover69996 siteseer swimmerboy5000 tolsineew youaremessedup'); // haters addSp('danielstephenking dark0101aa felched69 jackforster guillermo107 guillermomessone123 harry_520 nhdude2014 orangehexagonsun superrichfun hotnyboy29'); //just annoying people addSp('jasperbowenshepherd grolarbear ryaryarya898989 seadog712 zehen83'); // trickers addSp('pesteringuranus tina_tiara tina__tiara starbuckz420 perfect_imperfection lincoln1205 bbc_pat sammymula h_a_z_e'); // f**ktards addSp('icumalot4you aadem413 alextreksi44 alexxcox9 asianstud88 beast6677 boys4actions canadastudfunn caxondx collegeboy789 dellsuper diamondrossex dick_gr gary_owen_w'); // live spammers addSp('themightylegend guillermo946 guillermo106 ededd_n_eddy hairy_andreas handicappedsex hillary_clit juliostefano kittyeevee linhorton lisanne36 longhorns123 loupgar08'); // live spammers addSp('merllok33 mike_jones18 naughtymike007 nicebickcock olivettoboy panther1976 pudsix misterbater1205'); // live spammers addSp('inferni4u tinycockballs45m sebastian_muscle sexcamboy20ven weedidxxx zsebkendo22'); //addSpammer('jaypotipas fantacyland sirjohn88'); // nightmancometh //for BlackJack. Use this as template newDeck(DeckZ); } init();
© Copyright Chaturbate 2011- 2025. All Rights Reserved.