Apps Home
|
Create an App
Test CH
Author:
adinner
Description
Source Code
Launch App
Current Users
Created by:
Adinner
cb.settings_choices = [{ name:'tokens_to_play', type:'int', minValue:1, maxValue:500, defaultValue:50, label: "Tokens to Play"},{ name: 'hand_size', type: 'int', minValue: 3, maxValue: 10, defaultValue: 5, label: 'Hand Size' },{ name: 'notice_interval', type: 'int', minValue: 1, maxValue: 60, defaultValue: 1, label: 'How often in minutes to display the game notice?' }]; var isBroadcaster = function(user) { return (user == cb.room_slug); }; var isPlayer = function(username) { return players.indexOf(username) > -1; }; var whiteCards = [], blackCards = []; var dealerCards = []; var dealerUserCards = []; var isDealer = false; var players = []; var playedThisRound = []; var roundStarted = false; var userCards = {}; var tipToPlay = cb.settings.tokens_to_play; var notifyTimer = cb.settings.notice_interval*60000; var handSize = cb.settings.hand_size; var gameName = 'Cards Against Humanity'; var sendMessage = function(message,users) { if(users) { cb.sendNotice(gameName+' - '+message,users); } else { cb.sendNotice(gameName+' - '+message); } }; var startRound = function(msg) { isDealer = msg['user']; playedThisRound = []; roundStarted = true; sendMessage('A new round is starting!!'); }; var dealCards = function() { sendMessage('Now dealing cards...'); for(var i = 0; i < players.length; i++) { var count = 0; for(var ii = userCards[players[i]].length; ii < handSize; ii++) { count++; userCards[players[i]].push(whiteCards[Math.floor(Math.random()*whiteCards.length)]); } sendMessage('You received '+count+' new cards. Type /showcards to see them.',players[i]); } }; var drawBlackCard = function(msg) { if(blackCards.length == 0) { sendMessage('We are out of black cards.... Reset app.',isDealer); } else { var card = blackCards[Math.floor(Math.random()*blackCards.length)]; sendMessage('You drew the following card: '+card,isDealer); } }; var showCards = function(msg) { var message = ''; if(isDealer == msg['user']) { for(var i = 0; i < dealerUserCards.length; i++) { message += (i+1)+' - '+dealerUserCards[i]+'\n'; } } else if(isPlayer(msg['user'])) { for(var i = 0; i < userCards[msg['user']].length; i++) { message += (i+1)+' - '+userCards[msg['user']][i]+'\n'; } } sendMessage(message,msg['from_user']); }; var playCard = function(msg) { if(playedThisRound.indexOf(msg['user']) > -1) { sendMessage('You already played a card this round.',msg['user']); return; } var number = msg['m'].replace('/playcard','').trim(); number = parseInt(number); if(isNaN(number)) { sendMessage('That is not a valid number.',msg['user']); } else { if(!userCards[msg['user']][number-1]) { sendMessage('That is not a valid number.',msg['user']); } else { var card = userCards[msg['user']][number-1]; var message = msg['user']+' played a card...'; playedThisRound.push(msg['user']); if(players.length == playedThisRound.length) { message += 'That was the last card! Let\'s hear it!!'; } else { message += 'We are still waiting on '+(players.length-playedThisRound.length)+' more player(s).'; } sendMessage(message); dealerUserCards.push(card); userCards[msg['user']].splice(userCards[msg['user']][number-1],1); } } }; var messageTimeout = function() { if(!roundStarted) { sendMessage('Waiting to play... Tip '+tipToPlay+' tokens to start playing.'); } else { var message = 'We are currently playing a round. '; message += (players.length == 0 ? 'But nobody is playing... Tip '+tipToPlay+' tokens to start!' : (players.join(', ')+' are playing.')); sendMessage(message); for(var i = 0; i < players.length; i++) { var message = ''; if(userCards[players[i]].length == 0) { message += 'You are playing, but you do not have cards yet. Waiting for the next deal.'; } else { message += 'You are playing. You have '+userCards[players[i]].length+' cards. Type /showcards to see your cards.'; } sendMessage(message,players[i]); } sendMessage('You are the dealer.',isDealer); } cb.setTimeout(messageTimeout, notifyTimer); }; cb.onTip(function (tip) { if(tip.amount == tipToPlay) { players.push(tip['from_user']); userCards[tip['from_user']] = []; var message = tip['from_user'] +' is now playing.'; cb.chatNotice(message); } }); cb.onMessage(function (msg) { if (msg['m'] == '/startround') { if(isBroadcaster(msg['user'])) { startRound(msg); } else { sendMessage('You are not allowed to start game rounds.',msg['user']); } msg['X-Spam'] = true; } if (msg['m'] == '/drawblack') { if(isDealer == msg['user']) { drawBlackCard(msg); } else { sendMessage('You are not the dealer.',msg['user']); } msg['X-Spam'] = true; } if (msg['m'] == '/dealcards') { if(isDealer == msg['user']) { dealCards(); } else { sendMessage('You are not the dealer.',msg['user']); } msg['X-Spam'] = true; } if(msg['m'] == '/showcards') { if(isDealer == msg['user'] || isPlayer(msg['user'])) { showCards(msg); } else { sendMessage('You are not playing.',msg['user']); } msg['X-Spam'] = true; } if(msg['m'] == '/players') { sendMessage('Our current players are: '+players.join(', '),msg['user']); msg['X-Spam'] = true; } if(msg['m'] == '/info') { var info = 'Available Commands:\n'; info += 'Dealer: /startround,/drawblack,/dealcards,/showcards,/players,/reset\n'; info += 'Player: /showcards,/players,/playcard[number]'; sendMessage(info,msg['user']); msg['X-Spam'] = true; } if(msg['m'] == '/reset') { sendMessage('We have now reset the game. Players must tip '+tipToPlay+' to play again.'); dealerCards = []; dealerUserCards = []; isDealer = false; players = []; playedThisRound = []; roundStarted = false; userCards = {}; msg['X-Spam'] = true; } if (msg['m'].indexOf('/playcard') == 0) { if(isPlayer(msg['user']) || isDealer == msg['user']) { playCard(msg); } else { sendMessage('You are not currently playing...',msg['user']); } msg['X-Spam'] = true; } return msg; }); cb.onLeave(function(user) { if(players.indexOf(user['user']) > -1) { players.splice(players.indexOf(user['user']),1); cb.chatNotice('Player '+user['user']+' has left the game.'); } }); messageTimeout();
© Copyright Chaturbate 2011- 2025. All Rights Reserved.