Advertisement
Guest User

Untitled

a guest
Oct 6th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.18 KB | None | 0 0
  1. /* global Infinity */
  2.  
  3. var express = require('express');
  4. var app = express();
  5. var serv = require('http').Server(app);
  6.  
  7. app.get('/',function(req, res) {
  8. res.sendFile(__dirname + '/client/index.html');
  9. });
  10. app.use('/client',express.static(__dirname + '/client'));
  11.  
  12. serv.listen(11157);
  13. console.log("Server started.");
  14.  
  15. var SOCKET_LIST = {};
  16. var ROOM_LIST = [];
  17. ROOM_LIST[0] = new Room("default", "" , 999 , true);
  18. var DEBUG = false;
  19.  
  20. PRELOBBYROOM = new Room("prelobby","", 999, true);
  21.  
  22. //SOCKET
  23. ///////////////////////////////////////////////////////////////////
  24. ///////////////////////////////////////////////////////////////////
  25. var io = require('socket.io')(serv,{});
  26. io.sockets.on('connection', function(socket){
  27. socket.id = Math.random();
  28. socket.username = "";
  29. SOCKET_LIST[socket.id] = socket;
  30. socket.room = PRELOBBYROOM;
  31. //DEBUG
  32. socket.on("evalServer",function(data){
  33. if(!DEBUG)
  34. return;
  35. var res = eval(data);
  36. socket.emit("evalAnswer",res);
  37. });
  38.  
  39. //Signing In/Out///////////////////////////////////////////
  40. socket.on("signIn",function(data){
  41. if(isUsernameTaken(data)){
  42. socket.emit("signInResponse",{success:false});
  43. } else {
  44. socket.username = data.username;
  45. /*socket.room = ROOM_LIST[0];
  46. socket.room.playerList[socket.id] = socket;
  47. joinLeaveMessage("join", socket.room, socket.username, socket);
  48. refreshUserChat(socket.room);
  49. refreshRoomName(socket);
  50. refreshRoomList();*/
  51. socket.emit("joinRoom",0,"");
  52. socket.emit("signInResponse",{success:true});
  53. }
  54. });
  55. socket.on("disconnect",function(){
  56. delete SOCKET_LIST[socket.id];
  57. delete socket.room.playerList[socket.id];
  58. refreshUserChat(socket.room);
  59. if(socket.username !== ""){
  60. for(var i in socket.room.playerList){
  61. socket.room.playerList[i].emit("addToChat",socket.username+" has left!");
  62. }
  63. }
  64. refreshRoomList();
  65. });
  66. //Chat /////////////////////////////////////////////////
  67. socket.on("chatToEveryone",function(data){
  68. for(var i in socket.room.playerList){
  69. socket.room.playerList[i].emit("addToChat",socket.username + ": " + data);
  70. }
  71. });
  72.  
  73. //ROOMS ///////////////////////////////////////////////
  74. socket.on("joinRoom",function(data,pw){
  75. if(pw === ROOM_LIST[data].password){
  76. socket.emit("toggleRoomList",ROOM_LIST[data].name);
  77.  
  78. //Leave Old Room
  79. delete socket.room.playerList[socket.id];
  80. refreshUserChat(socket.room);
  81. joinLeaveMessage("leave", socket.room, socket.username, socket);
  82.  
  83. //Join New Room
  84. ROOM_LIST[data].playerList[socket.id] = socket;
  85. socket.room = ROOM_LIST[data];
  86. joinLeaveMessage("join", socket.room, socket.username, socket);
  87. refreshUserChat(socket.room);
  88. refreshRoomName(socket);
  89. if(socket.room.hasStarted){
  90. socket.emit("startGame");
  91. refreshBoard(socket.room);
  92. }
  93. refreshRoomList();
  94. }else{
  95. socket.emit("enterRoomPassword",data);
  96. }
  97. });
  98.  
  99. socket.on("createRoom", function(name, pw){
  100. var newRoom = ROOM_LIST.push(new Room(name,pw,10,true));
  101. socket.emit("joinRoom",newRoom-1,pw);
  102. });
  103.  
  104. socket.on("checkRoomNames",function(name,pw){
  105. for(var i=0;i<ROOM_LIST.length;i++){
  106. if(name === ROOM_LIST[i].name){
  107. socket.emit("createRoomFinal",false,name,pw);
  108. return;
  109. }
  110. }
  111. socket.emit("createRoomFinal",true,name,pw);
  112. });
  113.  
  114. socket.on("startGame", function(){
  115. var totalPlayers = 0;
  116. for(var i in socket.room.playerList){
  117. totalPlayers++;
  118. }
  119. if(totalPlayers < 3){
  120. socket.emit("addToChat","At least 3 Players required!");
  121. return;
  122. }
  123. for(var i in socket.room.playerList){
  124. socket.room.playerList[i].emit("startGame");
  125. }
  126. socket.room.hasStarted = true;
  127. newGame(socket.room);
  128. });
  129.  
  130. socket.on('error',function(er){
  131. console.log(er);
  132. });
  133.  
  134.  
  135. //GAME
  136. socket.on("chooseChancellor",function(chancellorToBe){
  137. socket.room.playingPlayers[chancellorToBe].chancellor = true;
  138. for(var i=0;i<socket.room.playingPlayers.length;i++){
  139. socket.room.playingPlayers[i].vote = "";
  140. }
  141. socket.room.state = "voting";
  142. refreshBoard(socket.room);
  143. });
  144.  
  145. socket.on("voted",function(who,result){
  146. socket.room.playingPlayers[who].vote = result;
  147. checkVotes(socket.room);
  148. refreshBoard(socket.room);
  149. });
  150.  
  151. socket.on("presidentDiscarded",function(cardID){
  152. socket.room.drawPileArray.splice(cardID,1);
  153. socket.room.discardPile++;
  154. socket.room.state = "chancellorSelectingCards";
  155. refreshBoard(socket.room);
  156. });
  157.  
  158. socket.on("chancellorEnacted",function(cardID){
  159. socket.room.justVetoed = false;
  160. var cardFaction = socket.room.drawPileArray[cardID];
  161. playCard(socket.room,socket.room.drawPileArray[cardID],true);
  162. socket.room.drawPileArray.splice(0,2);
  163. socket.room.discardPile++;
  164. checkDrawPile(socket.room);
  165. if(socket.room.state !== "gameover"){
  166. //CHECK IF PRESIDENT POWERS SHOULD BE STARTED HERE
  167. if(cardFaction === false && socket.room.presidentPowers[socket.room.fascistEnacted-1] !== ""){
  168. socket.room.state = socket.room.presidentPowers[socket.room.fascistEnacted-1];
  169. }else{
  170. newPresident(socket.room,-1,"success");
  171. }
  172. }
  173. refreshBoard(socket.room);
  174. });
  175.  
  176. socket.on("lookAtTopThreeDone",function(){
  177. newPresident(socket.room,-1,"success");
  178. refreshBoard(socket.room);
  179. });
  180.  
  181. socket.on("killPlayer",function(playerID){
  182. for(var i in socket.room.playerList){
  183. socket.room.playerList[i].emit("editRightNews",socket.username + " killed " + socket.room.playingPlayers[playerID].name +"</br> <span style='font-size: 70%'> Vengeance? Justice? ");//</span> </br> <span style='font-size: 50%'> Fire and Blood. </br>
  184. }
  185. socket.room.playingPlayers[playerID].dead = true;
  186. checkForLastPlayerRemaining(socket.room);
  187. if(socket.room.playingPlayers[playerID].hitler){
  188. socket.room.state = "gameover";
  189. socket.room.won = "liberal";
  190. for(var i in socket.room.playerList){
  191. socket.room.playerList[i].emit("addToChat", "Hitler has been killed. </br> Liberals Win!");
  192. }
  193. uploadScore(socket.room);
  194. }
  195.  
  196.  
  197. if(socket.room.state !== "gameover"){
  198. newPresident(socket.room,-1,"success");
  199. socket.room.playingPlayers[playerID].notHitlerConfirmed = true;
  200. }
  201.  
  202. refreshBoard(socket.room);
  203. });
  204.  
  205. socket.on("selectPresident",function(playerID){
  206. newPresident(socket.room,playerID,"success");
  207. refreshBoard(socket.room);
  208. });
  209.  
  210. socket.on("investigate",function(){
  211. newPresident(socket.room,-1,"success");
  212. refreshBoard(socket.room);
  213. });
  214.  
  215. socket.on("requestVeto",function(){
  216. socket.room.state = "requestingVeto";
  217. socket.room.justVetoed = true;
  218. refreshBoard(socket.room);
  219. });
  220.  
  221. socket.on("vetoAnswer",function(data){
  222. if(data){
  223. socket.room.justVetoed = false;
  224. socket.room.drawPileArray.splice(0,2);
  225. socket.room.discardPile+=2;
  226. checkDrawPile(socket.room);
  227. socket.room.electionTracker++;
  228. checkElectionTracker(socket.room);
  229. if(socket.room.state !== "gameover"){
  230. newPresident(socket.room,-1,"fail");
  231. }
  232. }else{
  233. socket.room.state = "chancellorSelectingCards";
  234. }
  235. refreshBoard(socket.room);
  236. });
  237.  
  238. socket.on("newGame",function(){
  239. newGame(socket.room);
  240. for(var i in socket.room.playerList){
  241. socket.room.playerList[i].emit("addToChat", socket.username + " has started a new game.");
  242. }
  243. });
  244.  
  245. //Score
  246. socket.on("scoreInfo",function(data,username,win,faction){
  247. //win is true for won false for loss
  248. //faction is true for fascist, false for liberal
  249.  
  250. var url = "http://dreamlo.com/lb/ooZS3aGkuECoVFR87VuWEAabMJKHEQcE-lZAu5TD8kVQ/add/";
  251.  
  252. if(data !== ""){
  253. var splitData = data.split("|");
  254. var score = parseInt(splitData[1]);
  255. var losses = parseInt(splitData[2]);
  256. var factionStats = splitData[3].split("-"); //FORMAT: LiberalWins-LiberalLosses-FascistWins-FascistLosses
  257. var libW = parseInt(factionStats[0]);
  258. var libL = parseInt(factionStats[1]);
  259. var fasW = parseInt(factionStats[2]);
  260. var fasL = parseInt(factionStats[3]);
  261. }else{
  262. var score = 0;
  263. var losses = 0;
  264. var libW = 0;
  265. var libL = 0;
  266. var fasW = 0;
  267. var fasL = 0;
  268. }
  269.  
  270. if(win){
  271. score++;
  272. if(faction){
  273. fasW++;
  274. }else{
  275. libW++;
  276. }
  277. }else{
  278. losses++;
  279. if(faction){
  280. fasL++;
  281. }else{
  282. libL++;
  283. }
  284. }
  285. url += username + "/" + score + "/" + losses + "/" + libW + "-" + libL + "-" + fasW + "-" + fasL;
  286.  
  287. socket.emit("uploadScore",url);
  288. });
  289. });
  290. ////////////////////////////////////////////////////////////////////////////////
  291. //GLOBAL////////////////////////////////////////////////////////////////////////
  292. ////////////////////////////////////////////////////////////////////////////////
  293. var isUsernameTaken = function(data){
  294. var taken = false;
  295. for(var i in SOCKET_LIST){
  296. if(SOCKET_LIST[i].username === data.username) taken = true;
  297. }
  298. return taken;
  299. };
  300.  
  301. //Chat Methods
  302. var refreshUserChat = function(room){
  303. for(var i in room.playerList){
  304. room.playerList[i].emit("clearUserChat");
  305. for(var j in room.playerList){
  306. var name = room.playerList[j].username;
  307. room.playerList[i].emit("addToUserChat",name);
  308. }
  309. }
  310. };
  311.  
  312. //ROOM
  313. function Room(name, password, maxPlayers, isOpen) {
  314. this.name = name;
  315. this.password = password;
  316. this.maxPlayers = maxPlayers;
  317. this.isOpen = isOpen;
  318.  
  319. this.playerList = {};
  320.  
  321. //EDIT this and you also need to edit, newGame() and removePlayerList();
  322.  
  323. //Game
  324. this.hasStarted = false;
  325. this.playingPlayers = [];
  326. this.drawPile = 17;
  327. this.discardPile = 0;
  328. this.liberalEnacted = 0;
  329. this.fascistEnacted = 0;
  330. this.electionTracker = 0;
  331. this.won = "";
  332. this.presidentPowers = [];
  333. this.justVetoed = false;
  334.  
  335. this.drawPileArray = [true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false];
  336.  
  337. //States, choosing Chancellor, Voting, President is Choosing, Chancellor is Choosing, (All President Powers)
  338. this.state = "choosingChancellor";
  339. };
  340.  
  341. function Player(name){
  342. this.name = name;
  343. this.dead = false;
  344. this.president = false;
  345. this.previousPresident = false;
  346. this.fascist = false;
  347. this.hitler = false;
  348. this.chancellor = false; //needed?
  349. this.previousChancellor = false;
  350. this.vote = ""; //ja nein
  351. this.notHitlerConfirmed = false;
  352. };
  353.  
  354.  
  355. var refreshRoomList = function(){
  356. checkForEmptyRooms(); //IMPORTANT refreshRoomList calls checkforEmptyRooms -> destroying unused rooms
  357. var sendRoomList = [];
  358. for(var i=0;i<ROOM_LIST.length;i++){
  359. var playerAmount = 0;
  360. for(var j in ROOM_LIST[i].playerList){
  361. playerAmount ++;
  362. }
  363. sendRoomList[i] = {name: ROOM_LIST[i].name, password: ROOM_LIST[i].password, maxPlayers: ROOM_LIST[i].maxPlayers, isOpen: ROOM_LIST[i].isOpen, currentPlayerAmount: playerAmount};
  364. }
  365.  
  366. for(var i in ROOM_LIST[0].playerList){
  367. ROOM_LIST[0].playerList[i].emit("fillRoomList",sendRoomList);
  368. }
  369. };
  370.  
  371. var joinLeaveMessage = function(joinLeave, room, name, myself){
  372. var message = "";
  373. if(joinLeave === "join"){
  374. message = " has joined ";
  375. }else{
  376. message = " has left ";
  377. }
  378. for(var i in room.playerList){
  379. if(room.playerList[i] === myself){
  380. continue;
  381. }
  382. room.playerList[i].emit("addToChat", name + message + room.name + ".");
  383. }
  384. };
  385.  
  386. var refreshRoomName = function (socket){
  387. socket.emit("refreshRoomName", socket.room.name);
  388. };
  389.  
  390. var checkForEmptyRooms = function(){
  391. for(var i=1;i<ROOM_LIST.length;i++){
  392. var playerAmount = 0;
  393. for(var j in ROOM_LIST[i].playerList){
  394. playerAmount ++;
  395. }
  396. if(playerAmount == 0){
  397. ROOM_LIST.splice(i,1);
  398. refreshRoomList();
  399. break;
  400. }
  401. }
  402. };
  403.  
  404. ///////////////////////////////////////////////////////////////////////////////
  405. //GAME/////////////////////////////////////////////////////////////////////////
  406. ///////////////////////////////////////////////////////////////////////////////
  407.  
  408. var newGame = function(room){
  409. room.playingPlayers = playerListToArray(room.playerList);
  410. room.drawPile = 17;
  411. room.discardPile = 0;
  412. room.liberalEnacted = 0;
  413. room.fascistEnacted = 0;
  414. room.electionTracker = 0;
  415. room.state = "choosingChancellor";
  416. room.drawPileArray = newDrawPile(6,11);
  417. room.won = ""; // fascist or liberal if they won
  418. room.presidentPowers = defaultPresidentPowers(room.playingPlayers.length);
  419. room.justVetoed = false;
  420.  
  421. assignFascistsAndHitler(room.playingPlayers);
  422. assignInitialPresident(room.playingPlayers);
  423.  
  424. refreshBoard(room);
  425. };
  426.  
  427. var refreshBoard = function(room){
  428. for(var i in room.playerList){
  429. var roomToSend = removePlayerList(room);
  430. room.playerList[i].emit("refreshBoard",roomToSend);
  431. }
  432. };
  433.  
  434. var playerListToArray = function(obj){
  435. var newArray = [];
  436. for(var i in obj){
  437. newArray.push(new Player(obj[i].username));
  438. }
  439. return newArray;
  440. };
  441.  
  442. var assignFascistsAndHitler = function(playingPlayers){
  443. var fascistAmount = Math.ceil(playingPlayers.length / 2) - 1;
  444. if(fascistAmount === 0){
  445. fascistAmount = 1;
  446. }
  447.  
  448. var IDs = [];
  449. for(var i=0;i<playingPlayers.length;i++){
  450. IDs.push(i);
  451. }
  452.  
  453. var fascistArray = [];
  454. for(var i=0;i<fascistAmount;i++){
  455. var randomID = randomRange(0,IDs.length-1);
  456. playingPlayers[IDs[randomID]].fascist = true;
  457. fascistArray.push(IDs[randomID]);
  458. IDs.splice(randomID,1);
  459. }
  460.  
  461. var hitlerID = fascistArray[randomRange(0,fascistArray.length-1)];
  462. playingPlayers[hitlerID].hitler = true;
  463. };
  464.  
  465. var assignInitialPresident = function(playingPlayers){
  466. playingPlayers[randomRange(0,playingPlayers.length-1)].president = true;
  467. };
  468.  
  469. var checkVotes = function(room){
  470. var jaCount = 0;
  471. var totalPlayers = 0;
  472. var chancellorID = -1;
  473. for(var i=0;i<room.playingPlayers.length;i++){
  474. if(room.playingPlayers[i].vote === "" && !room.playingPlayers[i].dead){ //If not everyone has voted return
  475. return;
  476. }
  477. }
  478. for(var i=0;i<room.playingPlayers.length;i++){
  479. if(room.playingPlayers[i].vote === "ja"){
  480. jaCount++;
  481. }
  482. if(room.playingPlayers[i].chancellor){
  483. chancellorID = i;
  484. }
  485. if(!room.playingPlayers[i].dead){
  486. totalPlayers++;
  487. }
  488. }
  489.  
  490. if(jaCount > totalPlayers/2){
  491. //Election Successful
  492. if(room.fascistEnacted >= 3){
  493. if(room.playingPlayers[chancellorID].hitler){
  494. room.won = "fascist";
  495. room.state = "gameover";
  496. uploadScore(room);
  497. for(var i in room.playerList){
  498. room.playerList[i].emit("addToChat", "Hitler as been elected as Chancellor after 3 Fascist Policies were enacted. </br> Fascists Win!");
  499. }
  500. }else{
  501. room.playingPlayers[chancellorID].notHitlerConfirmed = true;
  502. }
  503. }
  504. if(room.state !== "gameover"){
  505. room.state = "presidentSelectingCards";
  506. room.drawPile -= 3;
  507. }
  508. }else{
  509. //Election Failed
  510. room.electionTracker++;
  511. checkElectionTracker(room);
  512. if(room.state !== "gameover"){
  513. //Change president and chancellor and state
  514. newPresident(room,-1,"fail");
  515. }
  516. }
  517. refreshBoard(room);
  518. };
  519.  
  520. var checkElectionTracker = function(room){
  521. if(room.electionTracker >= 3){
  522. playCard(room,room.drawPileArray.shift(),false);
  523. room.drawPile--;
  524. room.electionTracker = 0;
  525. for(var i=0;i<room.playingPlayers.length;i++){
  526. room.playingPlayers[i].previousPresident = false;
  527. room.playingPlayers[i].previousChancellor = false;
  528. }
  529. }
  530.  
  531. refreshBoard(room);
  532. };
  533.  
  534. var newDrawPile = function(liberal,fascist){
  535. var newArray = [];
  536. for(var i=0;i<liberal;i++){
  537. newArray.push(true);
  538. }
  539. for(var i=0;i<fascist;i++){
  540. newArray.push(false);
  541. }
  542. shuffleArray(newArray);
  543. return newArray;
  544. };
  545.  
  546. var playCard = function(room,card,election){
  547. var presidentName = "";
  548. var chancellorName = "";
  549. for(var i=0;i<room.playingPlayers.length;i++){
  550. if(room.playingPlayers[i].president){
  551. presidentName = room.playingPlayers[i].name;
  552. }else if(room.playingPlayers[i].chancellor){
  553. chancellorName = room.playingPlayers[i].name;
  554. }
  555. }
  556. if(card === true){
  557. room.liberalEnacted++;
  558. if(election){
  559. for(var i in room.playerList){
  560. room.playerList[i].emit("editLeftNews","<p> <span style='color: blue'> President " + presidentName + " </span> and <span style='color:salmon'> Chancellor " + chancellorName + " </span> enacted a <span style='color:dodgerblue'> Liberal Policy </span> </p>");
  561. }
  562. }else{
  563. for(var i in room.playerList){
  564. room.playerList[i].emit("editLeftNews","<p> The Populace enacted a <span style='color:dodgerblue'> Liberal Policy </span> </p>");
  565. }
  566. }
  567. }else{
  568. room.fascistEnacted++;
  569. if(election){
  570. for(var i in room.playerList){
  571. room.playerList[i].emit("editLeftNews","<p> <span style='color: blue'> President " + presidentName + " </span> and <span style='color:salmon'> Chancellor " + chancellorName + " </span> enacted a <span style='color:red'> Fascist Policy </span> </p>");
  572. }
  573. }else{
  574. for(var i in room.playerList){
  575. room.playerList[i].emit("editLeftNews","<p> The Populace enacted a <span style='color:red'> Fascist Policy </span> </p>");
  576. }
  577. }
  578. }
  579. if(room.liberalEnacted >= 5){
  580. room.won = "liberal";
  581. room.state = "gameover";
  582. uploadScore(room);
  583. for(var i in room.playerList){
  584. room.playerList[i].emit("addToChat", "5 Liberal Policies were enacted. </br> Liberals Win!");
  585. }
  586. }else if(room.fascistEnacted >= 6){
  587. room.won = "fascist";
  588. room.state = "gameover";
  589. uploadScore(room);
  590. for(var i in room.playerList){
  591. room.playerList[i].emit("addToChat", "6 Fascist Policies were enacted. </br> Fascists Win!");
  592. }
  593. }
  594. };
  595.  
  596. var newPresident = function(room,id,electionResult){
  597. //Move current to previous
  598. var currentPresidentID = -1;
  599. var totalPlayers = 0;
  600. if(electionResult === "success"){
  601. room.electionTracker = 0;
  602. for(var i=0;i<room.playingPlayers.length;i++){
  603. room.playingPlayers[i].previousPresident = false;
  604. room.playingPlayers[i].previousChancellor = false;
  605. }
  606. }
  607.  
  608. for(var i=0;i<room.playingPlayers.length;i++){
  609. totalPlayers++;
  610. if(room.playingPlayers[i].president){
  611. currentPresidentID = i;
  612. if(electionResult === "success"){
  613. room.playingPlayers[i].previousPresident = true;
  614. }
  615. room.playingPlayers[i].president = false;
  616. }
  617. if(room.playingPlayers[i].chancellor && electionResult === "success"){
  618. room.playingPlayers[i].previousChancellor = true;
  619. }
  620. room.playingPlayers[i].chancellor = false;
  621. }
  622.  
  623. if(id === -1){ //Next President in line
  624. //Doesnt work for 2 Players!
  625. do{
  626. if((totalPlayers % 2) === 0){ //is even
  627. if((currentPresidentID+2) === totalPlayers-1){
  628. currentPresidentID+=2;
  629. }else if(currentPresidentID === (totalPlayers-1)){
  630. currentPresidentID=0;
  631. }else{
  632. currentPresidentID = (currentPresidentID+2) % (totalPlayers-1);
  633. }
  634. }else{
  635. currentPresidentID = (currentPresidentID+2) % totalPlayers;
  636. }
  637. }while(room.playingPlayers[currentPresidentID].dead)
  638.  
  639. room.playingPlayers[currentPresidentID].president = true;
  640. }else{
  641. room.playingPlayers[id].president = true;
  642. }
  643.  
  644. room.state = "choosingChancellor";
  645. };
  646.  
  647. var checkDrawPile = function(room){
  648. if(room.drawPileArray.length < 3){
  649. room.discardPile = 0;
  650. room.drawPile = 17 - (room.liberalEnacted + room.fascistEnacted);
  651. room.drawPileArray = newDrawPile(6 - room.liberalEnacted, 11 - room.fascistEnacted);
  652. }
  653. };
  654.  
  655. var defaultPresidentPowers = function(totalPlayers){
  656. var newPowerArray = [];
  657. if(totalPlayers <= 6){
  658. newPowerArray[0] = "";
  659. newPowerArray[1] = "";
  660. newPowerArray[2] = "lookAtTopThree";
  661. newPowerArray[3] = "kill";
  662. newPowerArray[4] = "kill";
  663. }else if(totalPlayers === 7 || totalPlayers === 8){
  664. newPowerArray[0] = "";
  665. newPowerArray[1] = "investigate";
  666. newPowerArray[2] = "pickPresident";
  667. newPowerArray[3] = "kill";
  668. newPowerArray[4] = "kill";
  669. }else if(totalPlayers >= 9){
  670. newPowerArray[0] = "investigate";
  671. newPowerArray[1] = "investigate";
  672. newPowerArray[2] = "pickPresident";
  673. newPowerArray[3] = "kill";
  674. newPowerArray[4] = "kill";
  675. }
  676. return newPowerArray;
  677. };
  678.  
  679. var checkForLastPlayerRemaining = function(room){
  680. var alivePlayers = 0;
  681. var aliveFaction;
  682. for(var i=0;i<room.playingPlayers.length;i++){
  683. if(!room.playingPlayers[i].dead){
  684. alivePlayers++;
  685. aliveFaction = room.playingPlayers[i].fascist;
  686. }
  687. }
  688. if(alivePlayers <= 1){
  689. room.state = "gameover";
  690. if(aliveFaction){
  691. room.won = "fascist";
  692. }else{
  693. room.won = "liberal";
  694. }
  695. uploadScore(room);
  696. }
  697. };
  698.  
  699. var uploadScore = function(room){
  700. var whoWon;
  701. if(room.won === "liberal"){
  702. whoWon = false;
  703. }else if(room.won === "fascist"){
  704. whoWon = true;
  705. }else{
  706. console.log("This shouldn't happen!");
  707. }
  708. var player;
  709. for(var j in room.playerList){
  710. player = room.playerList[j];
  711. break;
  712. }
  713. for(var i=0;i<room.playingPlayers.length;i++){
  714.  
  715. if(room.playingPlayers[i].fascist === whoWon){
  716. addScore(player,room.playingPlayers[i].name,true,room.playingPlayers[i].fascist);
  717. }else{
  718. addScore(player,room.playingPlayers[i].name,false,room.playingPlayers[i].fascist);
  719. }
  720. }
  721. };
  722.  
  723. //UTILIY
  724. var randomRange = function(min,max){
  725. return Math.floor(Math.random() * (max - min + 1)) + min;
  726. };
  727.  
  728. var removePlayerList = function(room){
  729. //To avoid "Stack Overflow" when sending this over the network
  730. var newObj = {};
  731. newObj.name = room.name;
  732. newObj.password = room.password;
  733. newObj.maxPlayers = room.maxPlayers;
  734. newObj.isOpen = room.isOpen;
  735.  
  736. newObj.hasStarted = room.hasStarted;
  737. newObj.playingPlayers = room.playingPlayers; //it's by reference issue?
  738. newObj.drawPile = room.drawPile;
  739. newObj.discardPile = room.discardPile;
  740. newObj.liberalEnacted = room.liberalEnacted;
  741. newObj.fascistEnacted = room.fascistEnacted;
  742. newObj.electionTracker = room.electionTracker;
  743.  
  744. newObj.drawPileArray = room.drawPileArray;
  745. newObj.won = room.won;
  746. newObj.presidentPowers = room.presidentPowers;
  747. newObj.justVetoed = room.justVetoed;
  748.  
  749. //States, choosing Chancellor, President is Choosing, Chancellor is Choosing, (All President Powers)
  750. newObj.state = room.state;
  751.  
  752. return newObj;
  753. };
  754.  
  755. var shuffleArray = function(array){
  756. var currentIndex = array.length, temporaryValue, randomIndex;
  757.  
  758. // While there remain elements to shuffle...
  759. while (0 !== currentIndex) {
  760.  
  761. // Pick a remaining element...
  762. randomIndex = Math.floor(Math.random() * currentIndex);
  763. currentIndex -= 1;
  764.  
  765. // And swap it with the current element.
  766. temporaryValue = array[currentIndex];
  767. array[currentIndex] = array[randomIndex];
  768. array[randomIndex] = temporaryValue;
  769. }
  770.  
  771. return array;
  772. };
  773.  
  774. var addScore = function(socket,username,win,faction){
  775. var url = "http://dreamlo.com/lb/57b739d48af6030b20b12111/pipe-get/";
  776. url += username;
  777. socket.emit("getScoreInfo",url,username,win,faction);
  778. };
  779.  
  780.  
  781.  
  782.  
  783. //NOTES
  784. //After a Special Election, the Presidency returns to its original order.
  785. //room list showing if game in progress and only playing players
  786.  
  787. //right when third election fails -> play card? or after 4th?
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement