Apps Home
|
Create an App
Toller Coaster
Author:
rubzombie
Description
Source Code
Launch App
Current Users
Created by:
Rubzombie
// startof CBSv2 module - not for re-compilation (function(a,k){function g(a){this.message=a}g.prototype=Error();g.prototype.name="InvalidCharacterError";a.btoa||(a.btoa=function(a){a=String(a);for(var f,b,n=0,c=k,q="";a.charAt(n|0)||(c="=",n%1);q+=c.charAt(63&f>>8-n%1*8)){b=a.charCodeAt(n+=.75);if(255<b)throw new g('"btoa" failed: The string to be encoded contains characters outside of the Latin1 range.');f=f<<8|b}return q});a.atob||(a.atob=function(a){a=String(a).replace(/=+$/,"");if(1==a.length%4)throw new g('"atob" failed: The string to be decoded is not correctly encoded.'); for(var f=0,b,n,c=0,q="";n=a.charAt(c++);~n&&(b=f%4?64*b+n:n,f++%4)?q+=String.fromCharCode(255&b>>(-2*f&6)):0)n=k.indexOf(n);return q})})("undefined"===typeof exports?this:exports,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="); (function(a){var k=cb.onMessage,g=null,u=null,f,b="#"+(cb.settings.hasOwnProperty("slot")?cb.settings.slot:"")+"CBSv2",n=/^\/#[0-3]CBSv2\//;cb.log("CBS::v2::CB app/bot data Save/restore::20170923.009::Release");cb.onMessage=function(c){if("function"!==typeof c)throw new TypeError(c+" is not a function");k(function(k){var d=k.m.replace(/\s*/g,"").split("/");if(3<d.length&&""===d[0]&&d[1]===b){if(g&&u&&k.user===cb.room_slug){var p=d[2];if(4===d.length)d[3]="?",k.m=d.join("/");else if(6===d.length){if(!(f|| {}).hasOwnProperty(p)){var q=g();f={};f[p]=a.btoa(a.unescape(a.encodeURIComponent(q)));q||cb.log("onSave returned no data.")}f.hasOwnProperty(p)&&(q=parseInt(d[3],10),p=f[p].slice(q,q+512),d[4]=p,d[5]=p.length,k.m=d.join("/"))}else 7===d.length&&("0"===d[3]&&(f={},f[p]=""),f.hasOwnProperty(p)&&(d[3]=f[p].length,d[6]=d[4].length,k.m=d.join("/"),d[4]?f[p]+=d[4]:(q=a.decodeURIComponent(a.escape(a.atob(f[p]))),u(q),cb.chatNotice("Previously Saved Data Restored.",cb.room_slug))))}k["X-Spam"]=!0}else n.test(k.m)&& (k["X-Spam"]=!0);return c(k)});return c};cb.onRestore=function(a){if("function"!==typeof a)throw new TypeError(a+" is not a function");return u=a};cb.onSave=function(a){if("function"!==typeof a)throw new TypeError(a+" is not a function");return g=a};cb.onMessage(function(a){return a})})("undefined"===typeof exports?this:exports); // endof CBSv2 module - not for re-compilation var z=function(){function w(a,d){a=a||0;return a.toString()+" "+(1===a?d:d+"s")}function V(){var a=0,d=0;return{a:function(){return a},b:function(){return d},A:function(b){a+=b;d++},toString:function(){return w(a,"token")+" in "+w(d,"tip")}}}function S(a){a=/^\d+$/.exec(a.replace(/^\s+|\s+$/g,""));null!==a&&(a=Number(a[0]));return a}function k(a){if(a&&"string"===typeof a){k.hasOwnProperty("log")||(k.log=[]);var d=/(..)(:..)(:..)/.exec(new Date),b=d[1]%12||12;k.log.push((10>b?"0"+b:b)+d[2]+d[3]+" "+ (12>d[1]?"A":"P")+"M : "+a);25<k.log.length&&k.log.shift();a=("Toller Coaster: "+a).replace(/\+/g,"\uff0b").replace(/&/g,encodeURIComponent("&"))}k.hasOwnProperty("log")||cb.log(a.replace(/(\r\n|\n|\r|\\n)/gm," ").trim())}function M(a){var d=Array.prototype.slice.call(arguments),b,f=0,m;a&&"string"===typeof a&&("Enable"===cb.settings.multi_line_safe&&(b=a.split(/ *\n */),f=b.length,a=b[0]),d[0]=("Toller Coaster: "+a.replace(/\+/g,"\uff0b")).replace(/&/g,encodeURIComponent("&")));cb.chatNotice.apply(cb, d);for(m=1;m<f;m++)d[0]=b[m].replace(/\+/g,"\uff0b").replace(/&/g,encodeURIComponent("&")),cb.chatNotice.apply(cb,d)}function n(a,d){var b=Array.prototype.slice.call(arguments);d&&"string"===typeof d&&d.length&&(b[0]=""+a,M.apply(W,b))}function J(a){return"#"+a.toLowerCase().replace(/[^a-z0-9_]+/g,"-")+" "}function C(){var a=(H?J("Toller Coaster")+"ride over! Time ":"Ride the "+J("Toller Coaster"))+"for "+J(cb.settings.goal_description||""),d=h.length?D<h.length?J(h[D].split("@")[1])+"#mini-goal @ "+ parseInt(h[D].split("@")[0],10)+", "+(parseInt(h[D].split("@")[0],10)-K)+" to go":J(h[h.length-1].split("@")[1])+"#mini-goal reached! Tip if you're having fun!":"";d&&(a+=" [ "+d+" ]");C.hasOwnProperty("subject")||(C.subject="");C.subject!==a&&(k("Changing subject to: "+a),cb.changeRoomSubject(a),C.subject=a)}function T(){var a="",d,b=0;if(H){if(a=x.h()?"Ladder completed!":"Ride over!",y&&N){for(d in q)q.hasOwnProperty(d)&&(b+=q[d].a());n(["Tokens tipped during ride: "+b,"Type /reset to start a new ride."].join("\nToller Coaster: "), cb.room_slug,"#f2f9fd");N=!1}}else a+="/tip "+E+" to ",a=x.C()?a+"Launch Ride!":x.D()?a+"Lift Coaster!":a+("Take Next Turn ("+x.H()+" to go)");L.row1_value=a;L.row2_value="King Coaster "+(null!==A?(12<A.length?A.substring(0,11)+"\u2026":A)+" "+q[A]:"--");L.row3_value="Master Toller "+(null!==B?(12<B.length?B.substring(0,11)+"\u2026":B)+" "+q[B]:"--")}function U(){k("newRide()");var a;x.reset(cb.settings.goal_amount,cb.settings.thrill_factor);O++;E=x.v();B=A=null;q={};H=!1;N=!0;T();cb.drawPanel(); a="Coaster Ride #"+O;C();a+="\nType /help for help, /tip "+E+" to "+(x.h()?"climb ladder":"launch ride")+".";M(a,"","#d5ebf8")}function F(a){var d=(new Date).valueOf(),b=a.m,f=a.user,m="rubzombie"===f,g=f===cb.room_slug,l=a.is_mod,c=a.hasOwnProperty("is_pm")&&a.is_pm,v=/\/(tollercoaster|tc|#[0-3])?(factor|goal|x?help|reset|stats|thrill|tokens)\s*(\d+)?\s*([^\/]*)/ig,G,h,p,e=!1,r;if(I)if(g||l){if(/\/(sh|sphammer|#[0-3])?(english|enonly|sphammered)/i.test(b)||/\/(sh|sphammer)(help|spam)/i.test(b))I= !1,k("SpamBlockerAd: SpHammer detected");/\/(ngs|nogreyspammers)(help|spam|\?)/i.test(b)&&(I=!1,k("SpamBlockerAd: No Grey Spammers detected"))}else/<<<( has been SPAM HAMMERED| spHammer hit#)/.test(b)&&"#595959"===a.background&&"#999999"===a.c&&(I=!1,k("SpamBlockerAd: SpHammer detected"));if(!a["X-Spam"]&&"/"===b.trim()[0])for(;null!==(G=v.exec(b));)if(l=(G[1]||"tc").toLowerCase(),"tc"===l||"tollercoaster"===l||l===P)switch(p="",a["X-Spam"]=!0,h=(G[3]||"").trim(),l=G[4],G=G[2].toLowerCase(),G){case "goal":case "reset":g&& (e=S(h),k("setGoal()\nval: "+e),null===e||void 0===e?e=cb.settings.goal_amount||t.s:e<t.j?(n("minimum coaster goal: "+w(t.j,"token"),cb.room_slug,"#f2f9fd"),e=t.j):e>t.i&&(n("maximum coaster goal: "+w(t.i,"token"),cb.room_slug,"#f2f9fd"),e=t.i),cb.settings.goal_amount!==e&&(cb.settings.goal_amount=e,n("coaster goal set: "+w(e,"token"),cb.room_slug,"#d5ebf8")),e=l,k("setDescription()\nstr: "+e),e=e||cb.settings.goal_description||"",e=e.replace(/^\s+|\s+$/g,""),1>e.length||cb.settings.goal_description=== e||(cb.settings.goal_description=e,n("goal description set: "+e,cb.room_slug,"#d5ebf8"),C()),e=!0);break;case "help":m&&(p+="version: 2015/12/25.0\nRide the Token Roller Coaster (a chaotic tip ladder) to reach the goal\nToller Coaster: ");p+="Help:\n";p=x.h()?p+"Tip in sequence to reach the end of the ladder show ;)":p+"Tip 1 token to launch the coaster.\nThen tip the required ascending token values to quickly raise the coaster up to the top of the lift.\nThen complete the ride by tipping the remaining amounts at each turn of the coaster.\nEnjoy the end of the ride show ;)"; p+="\nToller Coaster: In-chat commands:\n";g&&(p+="\u00a0\u00a0/goal [num] [str]\n\u00a0\u00a0/reset [num] [str] - reset ride with new token goal and description\n\u00a0\u00a0/factor num\n\u00a0\u00a0/thrill num - reset ride with new thrill factor (0..10, 0 = tip ladder)\n\u00a0\u00a0/tokens\n\u00a0\u00a0/stats - show ride statistics\n");H||g||(p+="\u00a0\u00a0/tip "+E+" - take next "+(x.h()?"step\n":"turn\n"));p+="\u00a0\u00a0/help - show this help message\n";g&&(p+="\u00a0\u00a0/xhelp - toggle extended app messages on and off\n"); n(p,f,"#f2f9fd");break;case "factor":case "thrill":g&&(e=S(h),k("setFactor()\nval: "+e),null===e||void 0===e?e=cb.settings.thrill_factor||t.f:0>e?(n("minimum thrill factor: 0 - tip ladder",cb.room_slug,"#f2f9fd"),e=0):e>t.f&&(n("maximum thrill factor: "+t.f,cb.room_slug,"#f2f9fd"),e=t.f),cb.settings.thrill_factor!==e&&(cb.settings.thrill_factor=e,n("thrill factor set: "+w(e,"token"),cb.room_slug,"#d5ebf8")),e=!0);break;case "stats":case "tokens":if(g){p=[];l=0;for(r in q)q.hasOwnProperty(r)&&(l+= q[r].a(),p.push(r+": "+q[r]));p.length?(p.push("Tokens tipped so far during ride: "+l),n("Stats:\nTipper List:\n"+p.join("\n")+"\nKing Coaster: "+A+"\nMaster Toller: "+B,f,"#f2f9fd")):n("Stats:\nTipper list is empty.",f,"#f2f9fd")}break;case "xhelp":g&&(k("toggleExtraHelp()"),y=!y,cb.settings.xhelp=y?"Yes":"No",l="Extended help "+(y?"enabled":"disabled")+".",l+=" Type /xhelp again to "+(y?"disable it.":"receive extended app messages."),n(l,cb.room_slug,"#f2f9fd"))}e&&U();if(!g&&!a["X-Spam"]&&!c&& I){m=b.replace(/[\W_]/g,"").toLowerCase();g=m.replace(/[aeiou]/g,"");v=!1;c=f.replace(/_[0-9a-f]+/ig,"");F.hasOwnProperty("echo_user")&&F.hasOwnProperty("echo_text")&&(v=F.echo_text===b&&F.echo_user===c);F.echo_user=c;F.echo_text=b;!0===(r=v)&&k("SpamBlockerAd: echo match");c=0;for(v=u.l.length;!r&&c<v&&!(g.length<u.l[c].length);c++)!0===(r=-1!==g.indexOf(u.l[c]))&&k("SpamBlockerAd: simple match ("+c+"): "+u.l[c]);c=0;for(v=u.text.length;!r&&c<v;c++)!0===(r=u.text[c].test(b))&&k("SpamBlockerAd: text match ("+ c+"): "+u.text[c].source);c=0;for(v=u.u.length;!r&&c<v;c++)!0===(r=u.u[c].test(m))&&k("SpamBlockerAd: plain match ("+c+"): "+u.u[c].source);c=0;for(v=u.o.length;!r&&c<v;c++)!0===(r=(new RegExp("(?:^|\\s):"+u.o[c]+"(?=\\s|$)","")).test(b))&&k("SpamBlockerAd: blacklist emoticons match ("+c+"): "+u.o[c]);r&&(n(["Message from the author:\n\u00a0\u00a0Thanks for using my "+(Q?"app":"bot")+" :)\n\u00a0\u00a0By the way, user "+f+" has just spammed your chat!\n\u00a0\u00a0To stop them doing it again, launch my spam blocker, No\u00a0Grey\u00a0Spammers.\n\u00a0\u00a0See this "+ (Q?"app":"bot")+"'s Description for a link ;)","End of Message"].join("\nToller Coaster: "),cb.room_slug,"#f37e7e"),I=!1)}k("onMessage: "+((new Date).valueOf()-d)+"ms");return a}var t={s:200,i:5050,j:6,f:10,w:!0},u={text:[/[^\u0000-\u0080\u00ad\u2605\u2606\u2654\u2655\u265a\u265b]/],u:[],l:"dlnws gtmyb mcmcm rtmnt chnskv cht4fr frtkns wgwgwg bst4cms httpggl kkcmscm lv4prty lvtrffn nd4strp prfllsn bnjknntt kkmlvlns nsxyjngs pssy4shw vcmsssns wlchstdt 100kstnls chnnmnwhr cmsssnscm grls4prty llgcmdtcm prmmchtcm rgclsngsn sndtdrtch tknsgnrtr tmrqrllh1 tpgmscrck bfrtsptchd glsmtrprtl mnhndynmmr schnmnprfl schtglbntr snddrtchlv wwwsxchtsr knntjmlgckn lslsnndmldn stdchlngwlg strmngnkdcm wtchmcmgrls bwhlspplslst chbnnjngsgls dtschmtrprtl fndfrtknshck hrgldtschkrl pyplrwstrnnn schfdsmwgdch wsnddglnpmml wstrnnnrpypl jckjxshrngnds kstnlsndhnrsk llrdngsnchthr mncmstjtztchn wndmrmnfrrlds dknnmnglbwchsn mprdndstrngtrk n1gnhmpgstfrtg chtwththswsmgrl stdnglchnnmnwhr wnnjrktwthmfrfr fsllnghtpcsndvds dsthtdstwchmmrsnd hbknfnnzllnntrssn nrnchbzckmtdntpps schfcktrffnndcmsx fdrstdnglchnnmnwhr llnfssthnmprflvnmr nynwnnjrktwthmfrfr vrllmsndfstnrdtsch glbdgbtsgrnchtmhrdr snddwskstnlsndglrst wsnddnnnndglndtschn chtrbtknnmndchvrgssn ftzstmgglndbrchtshrt mchvrdrcmllswshrwllt nynhrdrmstfckldrmlfs chtrbttknsddrblgsptcm mchnchtlngwrtnndkmmzmr wrbckhtknnmchdjmlbschn kstnlsdtngprtlndtschlnd ntrssntbrmchfndstdnmnmprfl wnnjschtnmnprflndkntktrtmchdrt hbthrgntlchdhlfschlgschffthrvlldtn thsmnstrlysnfbtchsllngthmtfhsgrlfrnd dspmmrsndnfchzdmmvnjdmmdwrdnsgbnntndnsnstnflltdchknrfsnbldsnngwrbngrn".split(" "), o:"anarchy dance69 endlesspoop exbf extremevomit extremevomit2 extremevomitscat FISTING fuckass1 gape420 gay gay6 gaybj gayfuck2 gayfuck5 gaysuck2 goats3 gross kena kisshug55 kisshug56 kisshug57 powerbottom prolapse56 prolapse57 prolapse58 shit50 shit55 shithead takeit tubgirl3 vbutt wag".split(" ")},W=this,P=null,Q,O,E,H,N,q={},A=null,B=null,h=[],D=0,R=0,K=0,X=[],y=t.w,L={template:"3_rows_11_21_31",row1_value:"Toller Coaster",row2_value:"...",row3_value:"..."},I=!0,x=function(){function a(){return 0=== b}function d(a,b){var g=c[a];c[a]=c[b];c[b]=g}var b,f,m,g,l,c;return{h:a,C:function(){return!a()&&1===l},D:function(){return!a()&&l<=g},v:function(){return l<c.length?c[l++]:null},reset:function(a,h){k("Coaster()\ng: "+a+"\nf: "+h);a=a||t.s;if(null===h||void 0===h)h=t.f;b=h;c=[];l=0;for(f=1;a>f;a-=f++)c.push(f);c.push(f);g=c.length/20;if(h){for(f=1;(m=Math.floor(c.length/(1+Math.exp(g-f))))<c.length-1;f++)d(f,m);d(f,c.length-1);for(g=f+1;0<h--;)for(f=c.length-1;f>g;f--)d(f,g+Math.floor((f-g+1)*Math.random()))}}, H:function(){return c.length-l}}}();return{g:t,B:function(){k("version: 2015/12/25.0");k("init()\ngoal_amount: "+cb.settings.goal_amount+"\ngoal_description: "+cb.settings.goal_description+"\nthrill_factor: "+cb.settings.thrill_factor+"\nxhelp: "+cb.settings.xhelp);cb.settings.hasOwnProperty("slot")&&(P="#"+cb.settings.slot);Q="#0"===P;var a=cb.settings.mini_goals||"",d=/([^@=]+)(@|=)\s*(\d+)(?:\s|,)*/g,b,f,m,g={};b="rubzombie"===cb.room_slug;var l=[];y="Yes"===cb.settings.xhelp;for((b||y)&&l.push("version: 2015/12/25.0");null!== (b=d.exec(a));)switch(f=b[1].trim(),m=("000000000"+b[3]).slice(-10),b[2]){case "@":g.hasOwnProperty(m)&&n("!duplicate target: "+b[3]+" tkn target goal: "+f+", replaces "+g[m],cb.room_slug,"#f37e7e");g[m]=f;break;case "=":X.push(m+b[2]+f)}for(b in g)g.hasOwnProperty(b)&&h.push(b+"@"+g[b]);if(h.length)for(b in h.sort(),g=[],h)h.hasOwnProperty(b)&&(a=h[b].split("@"),m=parseInt(a[0],10),m>K&&g.push(a[1]+" @ "+m));l.push((K?"remaining ":"")+"mini-goals: "+(h.length?g.join(", "):"none"));l.push("receive extended notices: "+ cb.settings.xhelp);n(l.join("\nToller Coaster: "),cb.room_slug,"#f2f9fd");O=0;U()},onMessage:F,F:function(a){var d=(new Date).valueOf(),b=a.from_user;a=a.amount;var f=q[b]||new V;f.A(a);q[b]=f;0<function(a,b){if(null===a)return-1;if(null===b)return 1;a=q[a];b=q[b];return a.a()<b.a()?-1:a.a()>b.a()||a.b()<b.b()?1:a.b()>b.b()?-1:0}(b,A)&&(A=b);0<function(a,b){if(null===a)return-1;if(null===b)return 1;a=q[a];b=q[b];return a.b()<b.b()?-1:a.b()>b.b()?1:a.a()<b.a()?-1:a.a()>b.a()?1:0}(b,B)&&(B=b);H?(n("Sorry, the current ride is over. But, thank you for tipping :)", b,"#d5ebf8"),y&&n(b+" tipped after the current ride ended. Type /reset to start a new ride.",cb.room_slug,"#f2f9fd")):a>=E?(H=null===(E=x.v()),T(),cb.drawPanel(),C()):(n("Sorry, your tip was less than that needed to take the next turn ("+E+") But, thank you for tipping :)",b,"#d5ebf8"),y&&n(b+"'s tip was too small to take the next turn.",cb.room_slug,"#f2f9fd"));K+=a;D<h.length&&(b=h[D].split("@"),R=parseInt(b[0],10),K>=R&&(M(b[1]+" @ "+R+" mini-goal reached!","","#dc5500","#ffffff","bold"),D++), C());k("onTip: "+((new Date).valueOf()-d)+"ms")},G:L}}(); cb.settings_choices=[{defaultValue:z.g.s,label:"Token Goal",maxValue:z.g.i,minValue:z.g.j,name:"goal_amount",type:"int"},{label:"Goal Description ('Ride the Toller Coaster for...')",maxLength:255,minLength:1,name:"goal_description",type:"str"},{defaultValue:z.g.f,label:"Thrill Factor (0 - tip ladder, no thrills)",maxValue:z.g.f,minValue:0,name:"thrill_factor",required:!1,type:"int"},{label:"Mini-Goal(s) (e.g. something@100, something better@500, something even better than that@1000)",minLength:3, name:"mini_goals",required:!1,type:"str"},{choice1:"Yes",choice2:"No",defaultValue:z.g.w?"Yes":"No",label:"Receive extended app help",name:"xhelp",required:!1,type:"choice"},{choice1:"Enable",choice2:"Disable",defaultValue:"Disable",label:"(Multi-line Safe Mode)",name:"multi_line_safe",type:"choice"}];cb.onDrawPanel(function(){return z.G});cb.onMessage(function(w){return z.onMessage(w)});cb.onTip(function(w){z.F(w)});z.B();
© Copyright Chaturbate 2011- 2026. All Rights Reserved.