Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var app = require('express')();
- var http = require('http').createServer(app);
- var io = require('socket.io')(http);
- var maxUsers = 7;
- var sockets = [];
- var killers = [];
- var police = [];
- var healer = [];
- var civilians = [];
- var usersOnline = 0;
- // Dictionary username -> socket
- var userSockets = {};
- // Dictionary username -> number of votes
- var userKillVotes = {};
- //var chosenToBeKilled = "";
- var killersNightKillUsernames = {};
- var socketsIdUsernames = {};
- //var killersDecision = false;
- var mostLikelyKilled = null;
- var killedThisRound = false;
- app.get('/', function(req, res) {
- //res.sendFile(__dirname + '/client.html');
- });
- io.on('connection', function(socket) {
- sockets.push(socket);
- socket.on('disconnect', function(){
- console.log('user disconnected');
- });
- socket.on('enter', function(username) {
- enter(socket, username);
- });
- socket.on('night_kill_vote', function(username) {
- nightKillVote(sockets, username);
- });
- socket.on('heal', function(username) {
- heal(username);
- });
- socket.on('police', function(username) {
- police(socket, username);
- });
- socket.on('kill', function(username){
- kill(username);
- });
- socket.on('day_kill_vote', function(username) {
- ////////////////////////
- console.log('day_kill_vote' + username)
- dayKillVote(socket, username);
- /////////////////////////
- });
- socket.on('day_kill_unvote', function(username) {
- /////////////////////
- console.log('day_kill_unvote' + username)
- dayKillUnvote(socket, username);
- ////////////////////
- });
- });
- http.listen(3000, function(){
- console.log('listening on *:3000');
- });
- function enter(socket, username) {
- console.log("User Entered: " + username);
- userSockets[username] = socket;
- socketsIdUsernames[socket.id] = username;
- usersOnline++;
- if(usersOnline == maxUsers)
- startGame();
- }
- function startGame() {
- var role = 0;
- var usernamesToBeChosen = Object.keys(userSockets);
- var rolesChosen = maxUsers;
- while(rolesChosen > 0)
- {
- var index = Math.floor(Math.random() * rolesChosen)
- var currentUsername = usernamesToBeChosen[index];
- if(rolesChosen > 5) {
- killers.push(currentUsername);
- usernamesToBeChosen.splice(index, 1);
- }
- else if(rolesChosen == 5) {
- police.push(currentUsername);
- usernamesToBeChosen.splice(index, 1);
- }
- else if(rolesChosen == 4) {
- healer.push(currentUsername);
- usernamesToBeChosen.splice(index, 1);
- }
- else {
- civilians.push(currentUsername);
- usernamesToBeChosen.splice(index, 1);
- }
- rolesChosen--;
- }
- var i = 0;
- for(const [key, value] of Object.entries(userSockets)) {
- if(killers.includes(key) == true)
- role = 4;
- else if(police.includes(key) == true)
- role = 3;
- else if(healer.includes(key) == true)
- role = 2;
- else if(civilians.includes(key) == true)
- role = 1;
- value.emit('game_start', {'role':role, 'users':Object.keys(userSockets)});
- }
- setTimeout(function() {
- vibrate();
- }, 2000);
- if(killers.length > 0)
- setTimeout(function() {
- for (var i = 0; i < killers.length; i++)
- {
- userSockets[killers[i]].emit('vibrate', 1);
- }
- }, 2000);
- }
- function vibrate() {
- Object.values(userSockets).forEach(function(value) {
- value.emit("vibrate", 1);
- });
- }
- function heal(username) {
- if(mostLikelyKilled == username) {
- mostLikelyKilled = "";
- }
- setTimeout(function() {
- for (var i = 0; i < healer.length; i++)
- {
- userSockets[healer[i]].emit('vibrate', 1);
- }
- }, 2000);
- if(police.length > 0)
- setTimeout(function() {
- for (var i = 0; i < police.length; i++)
- {
- userSockets[police[i]].emit('vibrate', 1);
- }
- }, 2000);
- }
- function nightKillVote(socket, username)
- {
- killersNightKillUsernames[socket.id] = username;
- console.log(killers)
- for (var i = 0; i < killers.length; i++) {
- ///////////////////////
- userSockets[killers[i]].emit('highlight', {
- "username": username,
- "caller": socketsIdUsernames[socket.id]
- });
- ///////////////////////////
- }
- if(Object.keys(killersNightKillUsernames).length == killers.length)
- {
- var tempUsername = null;
- var areAllTheSame = true;
- Object.values(killersNightKillUsernames).forEach(function(value)
- {
- if(tempUsername == null)
- tempUsername = value;
- else
- {
- if(tempUsername != value){
- areAllTheSame = false;
- }
- }
- });
- if(areAllTheSame)
- {
- console.log("killed " + mostLikelyKilled)
- mostLikelyKilled = tempUsername
- setTimeout(function() {
- for (var i = 0; i < killers.length; i++)
- {
- userSockets[killers[i]].emit('vibrate', 1);
- }
- }, 2000);
- if(healer.length > 0)
- setTimeout(function() {
- for (var i = 0; i < healer.length; i++)
- {
- userSockets[healer[i]].emit('vibrate', 1);
- }
- }, 2000);
- }
- }
- }
- function police(socket, username) {
- socket.emit('check_result', killers.includes(username));
- setTimeout(function() {
- for (var i = 0; i < police.length; i++)
- {
- userSockets[police[i]].emit('vibrate', 1);
- }
- endNight();
- }, 2000);
- }
- function endNight() {
- setTimeout(function() {
- vibrate();
- }, 2000);
- if(mostLikelyKilled == "") {
- Object.values(userSockets).forEach(function(value) {
- value.emit('death_report', "Noone died during the night!");
- });
- }
- else {
- Object.values(userSockets).forEach(function(value) {
- value.emit('death_report', mostLikelyKilled);
- });
- delete userSockets[mostLikelyKilled];
- mostLikelyKilled = "";
- usersOnline--;
- }
- }
- /////////
- function dayKillVote(socket, username) {
- ////////
- if(userKillVotes[username] == undefined) {
- userKillVotes[username] = 1;
- } else {
- userKillVotes[username]++;
- if(userKillVotes[username] > Math.floor(usersOnline / 2)) {
- Object.values(userSockets).forEach(function(value) {
- value.emit('start_timer', username + " has 30 seconds to defend him/herself!");
- });
- }
- }
- ///////////////
- Object.values(userSockets).forEach(function(value) {
- value.emit('highlight', {
- "username": username,
- "caller": socketsIdUsernames[socket.id]
- });
- });
- ////////////////
- }
- /////////////////////
- function dayKillUnvote(socket, username) {
- if(userKillVotes[username] != undefined) {
- userKillVotes[username]--;
- Object.values(userSockets).forEach(function(value) {
- value.emit('unhighlight', {
- "username": username,
- "caller": socketsIdUsernames[socket.id]
- });
- });
- if(userKillVotes[username] + 1 > Math.floor(usersOnline / 2)) {
- Object.values(userSockets).forEach(function(value) {
- value.emit('stop_timer', username + " has defended him/herself!");
- });
- }
- }
- }
- ///////////////////
- function kill(username) {
- if(killedThisRound == false) {
- killedThisRound = true;
- delete userSockets[username];
- usersOnline--;
- if(killers.length >= usersOnline / 2) {
- Object.values(userSockets).forEach(function(value) {
- value.emit('game_over', "The mafia wins!");
- });
- }
- else
- endDay();
- }
- }
- function endDay() {
- setTimeout(function() {
- vibrate();
- }, 2000);
- setTimeout(function() {
- if(killers.length >= usersOnline / 2) {
- Object.values(userSockets).forEach(function(value) {
- value.emit('game_over', "The mafia wins!");
- });
- }
- else if(killers.length > 0) {
- setTimeout(function() {
- vibrate();
- }, 2000);
- }
- else
- {
- Object.values(userSockets).forEach(function(value) {
- value.emit('game_over', "The good guys win!");
- });
- }
- }, 2000);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement