Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Stats: "Auth" : '["0-Games", "1-Wins", "2-Draws", "3-Losses", "4-Winrate", "5-Goals", "6-Assists", "7-GK", "8-CS", "9-CS%", "10-Role", "11-Nick"]'
  2.  
  3. /* VARIABLES */
  4.  
  5. /* ROOM */
  6.  
  7. const roomName = "haxshot auto 3v3";
  8. const botName = "Host";
  9. const maxPlayers = 28;
  10. const roomPublic = true;
  11. const geo = [{"code": "PL", "lat": 51.9, "lon": 19.1}, {"code": "FR", "lat": 46.2, "lon": 2.2}, {"code": "PL", "lat": 51.9, "lon": 19.1}, {"code": "GB", "lat": 55.3, "lon": -3.4}, {"code": "PT", "lat": 39.3, "lon": -8.2}];
  12.  
  13. const room = HBInit({ roomName: roomName, maxPlayers: maxPlayers, public: roomPublic, playerName: botName, geo: geo[0] });
  14.  
  15. const scoreLimitClassic = 3;
  16. const scoreLimitBig = 3;
  17. const timeLimitClassic = 3;
  18. const timeLimitBig = 3;
  19.  
  20. room.setTeamsLock(true);
  21.  
  22. var adminPassword = 'peja' + getRandomInt(1300);
  23. console.log("adminPassword : " + adminPassword);
  24.  
  25. let angle = 60;
  26.  
  27. const number = () => {
  28. return Math.floor(Math.random() * 2 + 1)
  29. }
  30.  
  31. const setColors = (id) => {
  32. let self = setInterval(() => {
  33. angle += 55;
  34. if (number() === 1) {
  35. room.setTeamColors(id, angle, 0xFFFFFF, [0x50f441, 0xe5f441]);
  36. } else {
  37. room.setTeamColors(id, angle, 0xFFFFFF, [0xf441b2, 0xc441f4]);
  38. }
  39. }, 10)
  40.  
  41. setTimeout(() => {
  42. clearInterval(self);
  43. room.setTeamColors(1, angle, 0xf44b42, [0xFF0000, 0xFF0000])
  44. room.setTeamColors(2, angle, 0xf44b42, [0x0000FF, 0x0000FF])
  45. }, 10000)
  46. }
  47.  
  48. /* STADIUM */
  49.  
  50. const playerRadius = 15;
  51. var ballRadius = 10;
  52. const triggerDistance = playerRadius + ballRadius + 0.01;
  53. var aloneMap = '{"name":"HAXSHOT - NO GOAL","width":420,"height":200,"spawnDistance":170,"bg":{"type":"grass","width":370,"height":170,"kickOffRadius":75,"cornerRadius":0},"vertexes":[{"x":-370,"y":170,"trait":"ballArea"},{"x":-370,"y":64,"trait":"ballArea"},{"x":-370,"y":-64,"trait":"ballArea"},{"x":-370,"y":-170,"trait":"ballArea"},{"x":370,"y":170,"trait":"ballArea"},{"x":370,"y":64,"trait":"ballArea"},{"x":370,"y":-64,"trait":"ballArea"},{"x":370,"y":-170,"trait":"ballArea"},{"x":0,"y":200,"trait":"kickOffBarrier"},{"x":0,"y":75,"trait":"kickOffBarrier"},{"x":0,"y":-75,"trait":"kickOffBarrier"},{"x":0,"y":-200,"trait":"kickOffBarrier"},{"x":-380,"y":-64,"trait":"goalNet"},{"x":-400,"y":-44,"trait":"goalNet"},{"x":-400,"y":44,"trait":"goalNet"},{"x":-380,"y":64,"trait":"goalNet"},{"x":380,"y":-64,"trait":"goalNet"},{"x":400,"y":-44,"trait":"goalNet"},{"x":400,"y":44,"trait":"goalNet"},{"x":380,"y":64,"trait":"goalNet"}],"segments":[{"v0":0,"v1":1,"trait":"ballArea"},{"v0":2,"v1":3,"trait":"ballArea"},{"v0":4,"v1":5,"trait":"ballArea"},{"v0":6,"v1":7,"trait":"ballArea"},{"v0":12,"v1":13,"trait":"goalNet","curve":-90},{"v0":13,"v1":14,"trait":"goalNet"},{"v0":14,"v1":15,"trait":"goalNet","curve":-90},{"v0":16,"v1":17,"trait":"goalNet","curve":90},{"v0":17,"v1":18,"trait":"goalNet"},{"v0":18,"v1":19,"trait":"goalNet","curve":90},{"v0":8,"v1":9,"trait":"kickOffBarrier"},{"v0":9,"v1":10,"trait":"kickOffBarrier","curve":180,"cGroup":["blueKO"]},{"v0":9,"v1":10,"trait":"kickOffBarrier","curve":-180,"cGroup":["redKO"]},{"v0":10,"v1":11,"trait":"kickOffBarrier"}],"goals":[],"discs":[{"pos":[-370,64],"trait":"goalPost","color":"FFCCCC"},{"pos":[-370,-64],"trait":"goalPost","color":"FFCCCC"},{"pos":[370,64],"trait":"goalPost","color":"CCCCFF"},{"pos":[370,-64],"trait":"goalPost","color":"CCCCFF"}],"planes":[{"normal":[0,1],"dist":-170,"trait":"ballArea"},{"normal":[0,-1],"dist":-170,"trait":"ballArea"},{"normal":[0,1],"dist":-200,"bCoef":0.1},{"normal":[0,-1],"dist":-200,"bCoef":0.1},{"normal":[1,0],"dist":-420,"bCoef":0.1},{"normal":[-1,0],"dist":-420,"bCoef":0.1}],"traits":{"ballArea":{"vis":false,"bCoef":1,"cMask":["ball"]},"goalPost":{"radius":8,"invMass":0,"bCoef":0.5},"goalNet":{"vis":true,"bCoef":0.1,"cMask":["ball"]},"kickOffBarrier":{"vis":false,"bCoef":0.1,"cGroup":["redKO","blueKO"],"cMask":["red","blue"]}}}'
  54. var classicMap = ''; // Insert your map for 1v1 and 2v2 here. To get minimum file size, here are the instructions : 1. Download the map 2. Go to https://cssminifier.com 3. Paste the result
  55. var bigMap = '.'; // Read above
  56.  
  57. /* OPTIONS */
  58.  
  59. var afkLimit = 12;
  60. var drawTimeLimit = Infinity;
  61. var maxTeamSize = 3; // This works for 1 (you might want to adapt things to remove some useless stats in 1v1 like assist or cs), 2, 3 or 4
  62. var slowMode = 0;
  63.  
  64. /* PLAYERS */
  65.  
  66. const Team = { SPECTATORS: 0, RED: 1, BLUE: 2 };
  67. var extendedP = [];
  68. const eP = { ID: 0, AUTH: 1, CONN: 2, AFK: 3, ACT: 4, GK: 5, MUTE: 6 };
  69. const Ss = { GA: 0, WI: 1, DR: 2, LS: 3, WR: 4, GL: 5, AS: 6, GK: 7, CS: 8, CP: 9, RL: 10, NK: 11}
  70. var players;
  71. var teamR;
  72. var teamB;
  73. var teamS;
  74.  
  75. /* GAME */
  76.  
  77. var lastTeamTouched;
  78. var lastPlayersTouched; // These allow to get good goal notifications (it should be lastPlayersKicked, waiting on a next update to get better track of shots on target)
  79. var countAFK = false; // Created to get better track of activity
  80. var activePlay = false; // Created to get better track of the possession
  81. var goldenGoal = false;
  82. var SMSet = new Set(); // Set created to get slow mode which is useful in chooseMode
  83. var banList = []; // Getting track of the bans, so we can unban ppl if we want
  84.  
  85. /* STATS */
  86.  
  87. var game;
  88. var GKList = ["",""];
  89. var Rposs = 0;
  90. var Bposs = 0;
  91. var point = [{"x": 0, "y": 0}, {"x": 0, "y": 0}]; // created to get ball speed
  92. var ballSpeed;
  93. var lastWinner = Team.SPECTATORS;
  94. var streak = 0;
  95. var allBlues = []; // This is to count the players who should be counted for the stats. This includes players who left after the game has started, doesn't include those who came too late or ...
  96. var allReds = []; // ... those who came in a very unequal game.
  97.  
  98. /* BALANCE & CHOOSE */
  99.  
  100. var inChooseMode = false; // This variable enables to distinguish the 2 phases of playing and choosing which should be dealt with very differently
  101. var redCaptainChoice = "";
  102. var blueCaptainChoice = "";
  103. var chooseTime = 20;
  104. var timeOutCap;
  105.  
  106. /* AUXILIARY */
  107.  
  108. var checkTimeVariable = false; // This is created so the chat doesn't get spammed when a game is ending via timeLimit
  109. var statNumber = 0; // This allows the room to be given stat information every X minutes
  110. var endGameVariable = false; // This variable with the one below helps distinguish the cases where games are stopped because they have finished to the ones where games are stopped due to player movements or resetting teams
  111. var resettingTeams = false;
  112. var capLeft = false;
  113. var statInterval = 6;
  114.  
  115. loadMap(aloneMap, 0, 0);
  116.  
  117. let playersInfo = {};
  118. let connections = []
  119. let messages = {
  120.  
  121. }
  122. /* OBJECTS */
  123.  
  124. function Goal(time, team, striker, assist) {
  125. this.time = time;
  126. this.team = team;
  127. this.striker = striker;
  128. this.assist = assist;
  129. }
  130.  
  131. function Game(date, scores, goals) {
  132. this.date = date;
  133. this.scores = scores;
  134. this.goals = goals;
  135. }
  136.  
  137. /* FUNCTIONS */
  138.  
  139. /* AUXILIARY FUNCTIONS */
  140.  
  141. function getRandomInt(max) { // returns a random number from 0 to max-1
  142. return Math.floor(Math.random() * Math.floor(max));
  143. }
  144.  
  145. function getTime(scores) { // returns the current time of the game
  146. return "[" + Math.floor(Math.floor(scores.time/60)/10).toString() + Math.floor(Math.floor(scores.time/60)%10).toString() + ":" + Math.floor(Math.floor(scores.time - (Math.floor(scores.time/60) * 60))/10).toString() + Math.floor(Math.floor(scores.time - (Math.floor(scores.time/60) * 60))%10).toString() + "]"
  147. }
  148.  
  149. function pointDistance(p1, p2) {
  150. var d1 = p1.x - p2.x;
  151. var d2 = p1.y - p2.y;
  152. return Math.sqrt(d1 * d1 + d2 * d2);
  153. }
  154.  
  155. /* BUTTONS */
  156.  
  157. function topBtn() {
  158. if (teamS.length == 0) {
  159. return;
  160. }
  161. else {
  162. if (teamR.length == teamB.length) {
  163. if (teamS.length > 1) {
  164. room.setPlayerTeam(teamS[0].id, Team.RED);
  165. room.setPlayerTeam(teamS[1].id, Team.BLUE);
  166. }
  167. return;
  168. }
  169. else if (teamR.length < teamB.length) {
  170. room.setPlayerTeam(teamS[0].id, Team.RED);
  171. }
  172. else {
  173. room.setPlayerTeam(teamS[0].id, Team.BLUE);
  174. }
  175. }
  176. }
  177.  
  178. function randomBtn() {
  179. if (teamS.length == 0) {
  180. return;
  181. }
  182. else {
  183. if (teamR.length == teamB.length) {
  184. if (teamS.length > 1) {
  185. var r = getRandomInt(teamS.length);
  186. room.setPlayerTeam(teamS[r].id, Team.RED);
  187. teamS = teamS.filter((spec) => spec.id != teamS[r].id);
  188. room.setPlayerTeam(teamS[getRandomInt(teamS.length)].id, Team.BLUE);
  189. }
  190. return;
  191. }
  192. else if (teamR.length < teamB.length) {
  193. room.setPlayerTeam(teamS[getRandomInt(teamS.length)].id, Team.RED);
  194. }
  195. else {
  196. room.setPlayerTeam(teamS[getRandomInt(teamS.length)].id, Team.BLUE);
  197. }
  198. }
  199. }
  200.  
  201. function blueToSpecBtn() {
  202. resettingTeams = true;
  203. setTimeout(() => { resettingTeams = false; }, 100);
  204. for (var i = 0; i < teamB.length; i++) {
  205. room.setPlayerTeam(teamB[teamB.length - 1 - i].id, Team.SPECTATORS);
  206. }
  207. }
  208.  
  209. function redToSpecBtn() {
  210. resettingTeams = true;
  211. setTimeout(() => { resettingTeams = false; }, 100);
  212. for (var i = 0; i < teamR.length; i++) {
  213. room.setPlayerTeam(teamR[teamR.length - 1 - i].id, Team.SPECTATORS);
  214. }
  215. }
  216.  
  217. function resetBtn() {
  218. resettingTeams = true;
  219. setTimeout(() => { resettingTeams = false; }, 100);
  220. if (teamR.length <= teamB.length) {
  221. for (var i = 0; i < teamR.length; i++) {
  222. room.setPlayerTeam(teamB[teamB.length - 1 - i].id, Team.SPECTATORS);
  223. room.setPlayerTeam(teamR[teamR.length - 1 - i].id, Team.SPECTATORS);
  224. }
  225. for (var i = teamR.length; i < teamB.length; i++) {
  226. room.setPlayerTeam(teamB[teamB.length - 1 - i].id, Team.SPECTATORS);
  227. }
  228. }
  229. else {
  230. for (var i = 0; i < teamB.length; i++) {
  231. room.setPlayerTeam(teamB[teamB.length - 1 - i].id, Team.SPECTATORS);
  232. room.setPlayerTeam(teamR[teamR.length - 1 - i].id, Team.SPECTATORS);
  233. }
  234. for (var i = teamB.length; i < teamR.length; i++) {
  235. room.setPlayerTeam(teamR[teamR.length - 1 - i].id, Team.SPECTATORS);
  236. }
  237. }
  238. }
  239.  
  240. function blueToRedBtn() {
  241. resettingTeams = true;
  242. setTimeout(() => { resettingTeams = false; }, 100);
  243. for (var i = 0; i < teamB.length; i++) {
  244. room.setPlayerTeam(teamB[i].id, Team.RED);
  245. }
  246. }
  247.  
  248. /* GAME FUNCTIONS */
  249.  
  250. function checkTime() {
  251. const scores = room.getScores();
  252. game.scores = scores;
  253. if (Math.abs(scores.time - scores.timeLimit) <= 0.01 && scores.timeLimit != 0) {
  254. if (scores.red != scores.blue) {
  255. if (checkTimeVariable == false) {
  256. checkTimeVariable = true;
  257. setTimeout(() => { checkTimeVariable = false; }, 3000);
  258. scores.red > scores.blue ? endGame(Team.RED) : endGame(Team.BLUE);
  259. setTimeout(() => { room.stopGame(); }, 2000);
  260. }
  261. return;
  262. }
  263. goldenGoal = true;
  264. room.sendAnnouncement("⚽ Złoty gol, kto strzeli wygrywa.");
  265. }
  266. if (Math.abs(drawTimeLimit * 60 - scores.time - 60) <= 0.01 && players.length > 2) {
  267. if (checkTimeVariable == false) {
  268. checkTimeVariable = true;
  269. setTimeout(() => { checkTimeVariable = false; }, 10);
  270. room.sendAnnouncement("⌛ 60 Sekund do końca gry !");
  271. }
  272. }
  273. if (Math.abs(scores.time - drawTimeLimit * 60) <= 0.01 && players.length > 2) {
  274. if (checkTimeVariable == false) {
  275. checkTimeVariable = true;
  276. setTimeout(() => { checkTimeVariable = false; }, 10);
  277. endGame(Team.SPECTATORS);
  278. room.stopGame();
  279. goldenGoal = false;
  280. }
  281. }
  282. }
  283.  
  284. function endGame(winner) { // handles the end of a game : no stopGame function inside
  285. players.length >= 2 * maxTeamSize - 1 ? activateChooseMode() : null;
  286. const scores = room.getScores();
  287. game.scores = scores;
  288. Rposs = Rposs/(Rposs+Bposs);
  289. Bposs = 1 - Rposs;
  290. lastWinner = winner;
  291. endGameVariable = true;
  292. if (winner == Team.RED) {
  293. streak++;
  294. room.sendAnnouncement("🔴 Czerwoni Wygrali " + scores.red + "-" + scores.blue + " ! Wygrane z rzędu : " + streak + " 🏆");
  295. }
  296. else if (winner == Team.BLUE) {
  297. streak = 1;
  298. room.sendAnnouncement("🔵 Niebiescy Wygrali " + scores.blue + "-" + scores.red + " ! Wygrane z rzędu : " + streak + " 🏆");
  299. }
  300. else {
  301. streak = 0;
  302. room.sendAnnouncement("💤 Osiągnięto limit! 💤");
  303. }
  304. room.sendAnnouncement("⚽ Posiadanie piłki : 🔴 " + (Rposs*100).toPrecision(3).toString() + "% : " + (Bposs*100).toPrecision(3).toString() + "% 🔵");
  305. scores.red == 0 ? (scores.blue == 0 ? room.sendAnnouncement("🏆 " + GKList[0].name + " and " + GKList[1].name + " Wygrał ❗ ") : room.sendAnnouncement("🏆 " + GKList[1].name + " Zachował czyste konto ❗ ")) : scores.blue == 0 ? room.sendAnnouncement("🏆 " + GKList[0].name + " Zachował czyste konto ❗ ") : null;
  306. updateStats();
  307. }
  308.  
  309. function quickRestart() {
  310. room.stopGame();
  311. setTimeout(() => { room.startGame(); }, 2000);
  312. }
  313.  
  314. function resumeGame() {
  315. setTimeout(() => { room.startGame(); }, 2000);
  316. setTimeout(() => { room.pauseGame(false); }, 1000);
  317. }
  318.  
  319. function activateChooseMode() {
  320. inChooseMode = true;
  321. slowMode = 2;
  322. room.sendAnnouncement("2 sekundowy tryb spowolniony uruchomiony !");
  323. }
  324.  
  325. function deactivateChooseMode() {
  326. inChooseMode = false;
  327. clearTimeout(timeOutCap);
  328. if (slowMode != 0) {
  329. slowMode = 0;
  330. room.sendAnnouncement("Tryb powolny zakończony. ⭐");
  331. }
  332. redCaptainChoice = "";
  333. blueCaptainChoice = "";
  334. }
  335.  
  336. function loadMap(map, scoreLim, timeLim) {
  337. if (map == aloneMap) {
  338. room.setCustomStadium(aloneMap);
  339. }
  340. else if (map == classicMap) {
  341. (classicMap != '') ? room.setCustomStadium(classicMap) : room.setDefaultStadium("Classic");
  342. }
  343. else if (map == bigMap) {
  344. (bigMap != '.') ? room.setCustomStadium(bigMap) : room.setDefaultStadium("Big");
  345. }
  346. else {
  347. room.setCustomStadium(map);
  348. }
  349. room.setScoreLimit(scoreLim);
  350. room.setTimeLimit(timeLim);
  351. }
  352.  
  353. /* PLAYER FUNCTIONS */
  354.  
  355. function updateTeams() { // update the players' list and all the teams' list
  356. players = room.getPlayerList().filter((player) => player.id != 0 && !getAFK(player));
  357. teamR = players.filter(p => p.team === Team.RED);
  358. teamB = players.filter(p => p.team === Team.BLUE);
  359. teamS = players.filter(p => p.team === Team.SPECTATORS);
  360. }
  361.  
  362. function handleInactivity() { // handles inactivity : players will be kicked after afkLimit
  363. if (countAFK && (teamR.length + teamB.length) > 1) {
  364. for (var i = 0; i < teamR.length ; i++) {
  365. setActivity(teamR[i], getActivity(teamR[i]) + 1);
  366. }
  367. for (var i = 0; i < teamB.length ; i++) {
  368. setActivity(teamB[i], getActivity(teamB[i]) + 1);
  369. }
  370. }
  371. for (var i = 0; i < extendedP.length ; i++) {
  372. if (extendedP[i][eP.ACT] == 60 * (2/3 * afkLimit)) {
  373. room.sendChat("⛔ @" + room.getPlayer(extendedP[i][eP.ID]).name + ", Jeśli nie napiszesz wiadomosci na czacie ani sie nie ruszysz w ciagu: " + Math.floor(afkLimit / 3) + " sekund zostaniesz wyrzucony !", extendedP[i][eP.ID]);
  374. }
  375. if (extendedP[i][eP.ACT] >= 60 * afkLimit) {
  376. extendedP[i][eP.ACT] = 0;
  377. if (room.getScores().time <= afkLimit - 0.5) {
  378. setTimeout(() => { !inChooseMode ? quickRestart() : room.stopGame(); }, 10);
  379. }
  380. room.kickPlayer(extendedP[i][eP.ID], "AFK, Następnym razem graj", false);
  381. }
  382. }
  383. }
  384.  
  385. function getAuth(player) {
  386. return extendedP.filter((a) => a[0] == player.id) != null ? extendedP.filter((a) => a[0] == player.id)[0][eP.AUTH] : null;
  387. }
  388.  
  389. function getAFK(player) {
  390. return extendedP.filter((a) => a[0] == player.id) != null ? extendedP.filter((a) => a[0] == player.id)[0][eP.AFK] : null;
  391. }
  392.  
  393. function setAFK(player, value) {
  394. extendedP.filter((a) => a[0] == player.id).forEach((player) => player[eP.AFK] = value);
  395. }
  396.  
  397. function getActivity(player) {
  398. return extendedP.filter((a) => a[0] == player.id) != null ? extendedP.filter((a) => a[0] == player.id)[0][eP.ACT] : null;
  399. }
  400.  
  401. function setActivity(player, value) {
  402. extendedP.filter((a) => a[0] == player.id).forEach((player) => player[eP.ACT] = value);
  403. }
  404.  
  405. function getGK(player) {
  406. return extendedP.filter((a) => a[0] == player.id) != null ? extendedP.filter((a) => a[0] == player.id)[0][eP.GK] : null;
  407. }
  408.  
  409. function setGK(player, value) {
  410. extendedP.filter((a) => a[0] == player.id).forEach((player) => player[eP.GK] = value);
  411. }
  412.  
  413. function getMute(player) {
  414. return extendedP.filter((a) => a[0] == player.id) != null ? extendedP.filter((a) => a[0] == player.id)[0][eP.MUTE] : null;
  415. }
  416.  
  417. function setMute(player, value) {
  418. extendedP.filter((a) => a[0] == player.id).forEach((player) => player[eP.MUTE] = value);
  419. }
  420.  
  421. /* BALANCE & CHOOSE FUNCTIONS */
  422.  
  423. function updateRoleOnPlayerIn() {
  424. updateTeams();
  425. if (inChooseMode) {
  426. if (players.length == 6) {
  427. loadMap(bigMap, scoreLimitBig, timeLimitBig);
  428. }
  429. getSpecList(teamR.length <= teamB.length ? teamR[0] : teamB[0]);
  430. }
  431. balanceTeams();
  432. }
  433.  
  434. function updateRoleOnPlayerOut() {
  435. updateTeams();
  436. if (room.getScores() != null) {
  437. var scores = room.getScores();
  438. if (players.length >= 2 * maxTeamSize && scores.time >= (5/6) * game.scores.timeLimit && teamR.length != teamB.length) {
  439. if (teamR.length < teamB.length) {
  440. if (scores.blue - scores.red == 2) {
  441. endGame(Team.BLUE);
  442. room.sendAnnouncement("🤖 Wykryto Ragequit. Gra zakończona. 🤖");
  443. setTimeout(() => { room.stopGame(); }, 100);
  444. return;
  445. }
  446. }
  447. else {
  448. if (scores.red - scores.blue == 2) {
  449. endGame(Team.RED);
  450. room.sendAnnouncement("🤖 Wykryto Ragequit. Gra zakończona. 🤖");
  451. setTimeout(() => { room.stopGame(); }, 100);
  452. return;
  453. }
  454. }
  455. }
  456. }
  457. if (inChooseMode) {
  458. if (players.length == 5) {
  459. loadMap(classicMap, scoreLimitClassic, timeLimitClassic);
  460. }
  461. if (teamR.length == 0 || teamB.length == 0) {
  462. teamR.length == 0 ? room.setPlayerTeam(teamS[0].id, Team.RED) : room.setPlayerTeam(teamS[0].id, Team.BLUE);
  463. return;
  464. }
  465. if (Math.abs(teamR.length - teamB.length) == teamS.length) {
  466. room.sendAnnouncement("🤖 Nie mam wyboru, pozwól mi się tym zająć... 🤖", player.id, 0x808080, 'small-bold', 2);
  467. deactivateChooseMode();
  468. resumeGame();
  469. var b = teamS.length;
  470. if (teamR.length > teamB.length) {
  471. for (var i = 0 ; i < b ; i++) {
  472. setTimeout(() => { room.setPlayerTeam(teamS[0].id, Team.BLUE); }, 5*i);
  473. }
  474. }
  475. else {
  476. for (var i = 0 ; i < b ; i++) {
  477. setTimeout(() => { room.setPlayerTeam(teamS[0].id, Team.RED); }, 5*i);
  478. }
  479. }
  480. return;
  481. }
  482. if (streak == 0 && room.getScores() == null) {
  483. if (Math.abs(teamR.length - teamB.length) == 2) { // if someone left a team has 2 more players than the other one, put the last chosen guy back in his place so it's fair
  484. room.sendAnnouncement("🤖 Równoważenie zespołów... 🤖", player.id, 0x808080, 'small-bold', 2);
  485. teamR.length > teamB.length ? room.setPlayerTeam(teamR[teamR.length - 1].id, Team.SPECTATORS) : room.setPlayerTeam(teamB[teamB.length - 1].id, Team.SPECTATORS);
  486. }
  487. }
  488. if (teamR.length == teamB.length && teamS.length < 2) {
  489. deactivateChooseMode();
  490. resumeGame();
  491. return;
  492. }
  493. capLeft ? choosePlayer() : getSpecList(teamR.length <= teamB.length ? teamR[0] : teamB[0]);
  494. }
  495. balanceTeams();
  496. }
  497.  
  498. function balanceTeams() {
  499. if (!inChooseMode) {
  500. if (players.length == 1 && teamR.length == 0) {
  501. quickRestart();
  502. loadMap(aloneMap, 0, 0);
  503. room.setPlayerTeam(players[0].id, Team.RED);
  504. }
  505. else if (Math.abs(teamR.length - teamB.length) == teamS.length && teamS.length > 0) {
  506. const n = Math.abs(teamR.length - teamB.length);
  507. if (players.length == 2) {
  508. quickRestart();
  509. loadMap(classicMap, scoreLimitClassic, timeLimitClassic);
  510. }
  511. if (teamR.length > teamB.length) {
  512. for (var i = 0 ; i < n ; i++) {
  513. room.setPlayerTeam(teamS[i].id, Team.BLUE);
  514. }
  515. }
  516. else {
  517. for (var i = 0 ; i < n ; i++) {
  518. room.setPlayerTeam(teamS[i].id, Team.RED);
  519. }
  520. }
  521. }
  522. else if (Math.abs(teamR.length - teamB.length) > teamS.length) {
  523. const n = Math.abs(teamR.length - teamB.length);
  524. if (players.length == 1) {
  525. quickRestart();
  526. loadMap(aloneMap, 0, 0);
  527. room.setPlayerTeam(players[0].id, Team.RED);
  528. return;
  529. }
  530. else if (players.length == 5) {
  531. quickRestart();
  532. loadMap(classicMap, scoreLimitClassic, timeLimitClassic);
  533. }
  534. if (players.length == maxTeamSize * 2 - 1) {
  535. allReds = [];
  536. allBlues = [];
  537. }
  538. if (teamR.length > teamB.length) {
  539. for (var i = 0 ; i < n ; i++) {
  540. room.setPlayerTeam(teamR[teamR.length - 1 - i].id, Team.SPECTATORS);
  541. }
  542. }
  543. else {
  544. for (var i = 0 ; i < n ; i++) {
  545. room.setPlayerTeam(teamB[teamB.length - 1 - i].id, Team.SPECTATORS);
  546. }
  547. }
  548. }
  549. else if (Math.abs(teamR.length - teamB.length) < teamS.length && teamR.length != teamB.length) {
  550. room.pauseGame(true);
  551. activateChooseMode();
  552. choosePlayer();
  553. }
  554. else if (teamS.length >= 2 && teamR.length == teamB.length && teamR.length < maxTeamSize) {
  555. if (teamR.length == 2) {
  556. quickRestart();
  557. loadMap(bigMap, scoreLimitBig, timeLimitBig);
  558. }
  559. topBtn();
  560. }
  561. }
  562. }
  563.  
  564. function choosePlayer() {
  565. clearTimeout(timeOutCap);
  566. if (teamR.length <= teamB.length && teamR.length != 0) {
  567. room.sendAnnouncement("💡 Aby wybrac gracza wpisz jego numerek z listy lub uzyj 'top', 'random' or 'bottom'.", teamR[0].id, player.id);
  568. timeOutCap = setTimeout(function (player) { room.sendAnnouncement(" Obudź się @" + player.name + ", zostały ci tylko " + Number.parseInt(chooseTime / 2) + " sekundy na wybor !", player.id); timeOutCap = setTimeout(function (player) { room.kickPlayer(player.id, "Nie wybrałeś w porę !", false); }, chooseTime * 500, teamR[0]); }, chooseTime * 1000, teamR[0]);
  569. }
  570. else if (teamB.length < teamR.length && teamB.length != 0) {
  571. room.sendAnnouncement("💡 Aby wybrac gracza wpisz jego numerek z listy lub uzyj 'top', 'random' or 'bottom'.", teamB[0].id, player.id);
  572. timeOutCap = setTimeout(function (player) { room.sendAnnouncement(" Obudź się @" + player.name + ", zostały ci tylko " + Number.parseInt(chooseTime / 2) + " sekundy na wybor !", player.id); timeOutCap = setTimeout(function (player) { room.kickPlayer(player.id, "Nie wybrałeś w porę !", false); }, chooseTime * 500, teamB[0]); }, chooseTime * 1000, teamB[0]);
  573. }
  574. if (teamR.length != 0 && teamB.length != 0) getSpecList(teamR.length <= teamB.length ? teamR[0] : teamB[0]);
  575. }
  576.  
  577. function getSpecList(player) {
  578. var cstm = "Gracze : ";
  579. for (var i = 0 ; i < teamS.length ; i++) {
  580. if (140 - cstm.length < (teamS[i].name + "[" + (i+1) + "], ").length) {
  581. room.sendAnnouncement(cstm, player.id);
  582. cstm = "... ";
  583. }
  584. cstm += teamS[i].name + "[" + (i+1) + "], ";
  585. }
  586. cstm = cstm.substring(0,cstm.length - 2);
  587. cstm += ".";
  588. room.sendAnnouncement(cstm, player.id);
  589. }
  590.  
  591. /* STATS FUNCTIONS */
  592.  
  593. function getLastTouchOfTheBall() {
  594. const ballPosition = room.getBallPosition();
  595. updateTeams();
  596. for (var i = 0; i < players.length; i++) {
  597. if (players[i].position != null) {
  598. var distanceToBall = pointDistance(players[i].position, ballPosition);
  599. if (distanceToBall < triggerDistance) {
  600. !activePlay ? activePlay = true : null;
  601. if (lastTeamTouched == players[i].team && lastPlayersTouched[0] != null && lastPlayersTouched[0].id != players[i].id) {
  602. lastPlayersTouched[1] = lastPlayersTouched[0];
  603. lastPlayersTouched[0] = players[i];
  604. }
  605. lastTeamTouched = players[i].team;
  606. }
  607. }
  608. }
  609. }
  610.  
  611. function getStats() { // gives possession, ball speed and GK of each team
  612. if (activePlay) {
  613. updateTeams();
  614. lastTeamTouched == Team.RED ? Rposs++ : Bposs++;
  615. var ballPosition = room.getBallPosition();
  616. point[1] = point[0];
  617. point[0] = ballPosition;
  618. ballSpeed = (pointDistance(point[0], point[1]) * 60 * 60 * 60)/15000;
  619. var k = [-1, Infinity];
  620. for (var i = 0; i < teamR.length; i++) {
  621. if (teamR[i].position.x < k[1]) {
  622. k[0] = teamR[i];
  623. k[1] = teamR[i].position.x;
  624. }
  625. }
  626. k[0] != -1 ? setGK(k[0], getGK(k[0]) + 1) : null;
  627. k = [-1, -Infinity];
  628. for (var i = 0; i < teamB.length; i++) {
  629. if (teamB[i].position.x > k[1]) {
  630. k[0] = teamB[i];
  631. k[1] = teamB[i].position.x;
  632. }
  633. }
  634. k[0] != -1 ? setGK(k[0], getGK(k[0]) + 1) : null;
  635. findGK();
  636. }
  637. }
  638.  
  639. function updateStats() {
  640. if (players.length >= 2 * maxTeamSize && (game.scores.time >= (5 / 6) * game.scores.timeLimit || game.scores.red == game.scores.scoreLimit || game.scores.blue == game.scores.scoreLimit) && allReds.length >= maxTeamSize && allBlues.length >= maxTeamSize) {
  641. var stats;
  642. for (var i = 0; i < allReds.length; i++) {
  643. localStorage.getItem(getAuth(allReds[i])) ? stats = JSON.parse(localStorage.getItem(getAuth(allReds[i]))) : stats = [0, 0, 0, 0, "0.00", 0, 0, 0, 0, "0.00", "player", allReds[i].name];
  644. stats[Ss.GA]++;
  645. lastWinner == Team.RED ? stats[Ss.WI]++ : lastWinner == Team.BLUE ? stats[Ss.LS]++ : stats[Ss.DR]++;
  646. stats[Ss.WR] = (100 * stats[Ss.WI] / stats[Ss.GA]).toPrecision(3);
  647. localStorage.setItem(getAuth(allReds[i]), JSON.stringify(stats));
  648. }
  649. for (var i = 0; i < allBlues.length; i++) {
  650. localStorage.getItem(getAuth(allBlues[i])) ? stats = JSON.parse(localStorage.getItem(getAuth(allBlues[i]))) : stats = [0, 0, 0, 0, "0.00", 0, 0, 0, 0, "0.00", "player", allBlues[i].name];
  651. stats[Ss.GA]++;
  652. lastWinner == Team.BLUE ? stats[Ss.WI]++ : lastWinner == Team.RED ? stats[Ss.LS]++ : stats[Ss.DR]++;
  653. stats[Ss.WR] = (100 * stats[Ss.WI] / stats[Ss.GA]).toPrecision(3);
  654. localStorage.setItem(getAuth(allBlues[i]), JSON.stringify(stats));
  655. }
  656. for (var i = 0; i < game.goals.length; i++) {
  657. if (game.goals[i].striker != null) {
  658. if ((allBlues.concat(allReds)).findIndex((player) => player.id == game.goals[i].striker.id) != -1) {
  659. stats = JSON.parse(localStorage.getItem(getAuth(game.goals[i].striker)));
  660. stats[Ss.GL]++;
  661. localStorage.setItem(getAuth(game.goals[i].striker), JSON.stringify(stats));
  662. }
  663. }
  664. if (game.goals[i].assist != null) {
  665. if ((allBlues.concat(allReds)).findIndex((player) => player.name == game.goals[i].assist.name) != -1) {
  666. stats = JSON.parse(localStorage.getItem(getAuth(game.goals[i].assist)));
  667. stats[Ss.AS]++;
  668. localStorage.setItem(getAuth(game.goals[i].assist), JSON.stringify(stats));
  669. }
  670. }
  671. }
  672. if (allReds.findIndex((player) => player.id == GKList[0].id) != -1) {
  673. stats = JSON.parse(localStorage.getItem(getAuth(GKList[0])));
  674. stats[Ss.GK]++;
  675. game.scores.blue == 0 ? stats[Ss.CS]++ : null;
  676. stats[Ss.CP] = (100 * stats[Ss.CS] / stats[Ss.GK]).toPrecision(3);
  677. localStorage.setItem(getAuth(GKList[0]), JSON.stringify(stats));
  678. }
  679. if (allBlues.findIndex((player) => player.id == GKList[1].id) != -1) {
  680. stats = JSON.parse(localStorage.getItem(getAuth(GKList[1])));
  681. stats[Ss.GK]++;
  682. game.scores.red == 0 ? stats[Ss.CS]++ : null;
  683. stats[Ss.CP] = (100 * stats[Ss.CS] / stats[Ss.GK]).toPrecision(3);
  684. localStorage.setItem(getAuth(GKList[1]), JSON.stringify(stats));
  685. }
  686. }
  687. }
  688.  
  689. function findGK() {
  690. var tab = [[-1,""], [-1,""]];
  691. for (var i = 0; i < extendedP.length ; i++) {
  692. if (room.getPlayer(extendedP[i][eP.ID]) != null && room.getPlayer(extendedP[i][eP.ID]).team == Team.RED) {
  693. if (tab[0][0] < extendedP[i][eP.GK]) {
  694. tab[0][0] = extendedP[i][eP.GK];
  695. tab[0][1] = room.getPlayer(extendedP[i][eP.ID]);
  696. }
  697. }
  698. else if (room.getPlayer(extendedP[i][eP.ID]) != null && room.getPlayer(extendedP[i][eP.ID]).team == Team.BLUE) {
  699. if (tab[1][0] < extendedP[i][eP.GK]) {
  700. tab[1][0] = extendedP[i][eP.GK];
  701. tab[1][1] = room.getPlayer(extendedP[i][eP.ID]);
  702. }
  703. }
  704. }
  705. GKList = [tab[0][1], tab[1][1]];
  706. }
  707.  
  708. setInterval(() => {
  709. var tableau = [];
  710. if (statNumber % 5 == 0) {
  711. Object.keys(localStorage).forEach(function (key) { if (!["player_name", "view_mode", "geo", "avatar", "player_auth_key"].includes(key)) { tableau.push([(JSON.parse(localStorage.getItem(key))[Ss.NK]), (JSON.parse(localStorage.getItem(key))[Ss.GA])]); } });
  712. if (tableau.length < 5) {
  713. return false;
  714. }
  715. tableau.sort(function (a, b) { return b[1] - a[1]; });
  716. room.sendAnnouncement("🎮 Gry> #1 " + tableau[0][0] + ": " + tableau[0][1] + " #2 " + tableau[1][0] + ": " + tableau[1][1] + " #3 " + tableau[2][0] + ": " + tableau[2][1] + " #4 " + tableau[3][0] + ": " + tableau[3][1] + " #5 " + tableau[4][0] + ": " + tableau[4][1], player.id, "0xB919E6", "bold", 2);
  717. }
  718. if (statNumber % 5 == 1) {
  719. Object.keys(localStorage).forEach(function (key) { if (!["player_name", "view_mode", "geo", "avatar", "player_auth_key"].includes(key)) { tableau.push([(JSON.parse(localStorage.getItem(key))[Ss.NK]), (JSON.parse(localStorage.getItem(key))[Ss.WI])]); } });
  720. if (tableau.length < 5) {
  721. return false;
  722. }
  723. tableau.sort(function (a, b) { return b[1] - a[1]; });
  724. room.sendAnnouncement("🏆 Wygrane> #1 " + tableau[0][0] + ": " + tableau[0][1] + " #2 " + tableau[1][0] + ": " + tableau[1][1] + " #3 " + tableau[2][0] + ": " + tableau[2][1] + " #4 " + tableau[3][0] + ": " + tableau[3][1] + " #5 " + tableau[4][0] + ": " + tableau[4][1], player.id, "0x00C45C", "bold", 2);
  725. }
  726. if (statNumber % 5 == 2) {
  727. Object.keys(localStorage).forEach(function (key) { if (!["player_name", "view_mode", "geo", "avatar", "player_auth_key"].includes(key)) { tableau.push([(JSON.parse(localStorage.getItem(key))[Ss.NK]), (JSON.parse(localStorage.getItem(key))[Ss.GL])]); } });
  728. if (tableau.length < 5) {
  729. return false;
  730. }
  731. tableau.sort(function (a, b) { return b[1] - a[1]; });
  732. room.sendAnnouncement("⚽ Gole> #1 " + tableau[0][0] + ": " + tableau[0][1] + " #2 " + tableau[1][0] + ": " + tableau[1][1] + " #3 " + tableau[2][0] + ": " + tableau[2][1] + " #4 " + tableau[3][0] + ": " + tableau[3][1] + " #5 " + tableau[4][0] + ": " + tableau[4][1], player.id, "0xDE0004", "bold", 2);
  733. }
  734. if (statNumber % 5 == 3) {
  735. Object.keys(localStorage).forEach(function (key) { if (!["player_name", "view_mode", "geo", "avatar", "player_auth_key"].includes(key)) { tableau.push([(JSON.parse(localStorage.getItem(key))[Ss.NK]), (JSON.parse(localStorage.getItem(key))[Ss.AS])]); } });
  736. if (tableau.length < 5) {
  737. return false;
  738. }
  739. tableau.sort(function (a, b) { return b[1] - a[1]; });
  740. room.sendAnnouncement("🥅 Asysty> #1 " + tableau[0][0] + ": " + tableau[0][1] + " #2 " + tableau[1][0] + ": " + tableau[1][1] + " #3 " + tableau[2][0] + ": " + tableau[2][1] + " #4 " + tableau[3][0] + ": " + tableau[3][1] + " #5 " + tableau[4][0] + ": " + tableau[4][1], player.id, "0xFCCE00", "bold", 2);
  741. }
  742. if (statNumber % 5 == 4) {
  743. Object.keys(localStorage).forEach(function (key) { if (!["player_name", "view_mode", "geo", "avatar", "player_auth_key"].includes(key)) { tableau.push([(JSON.parse(localStorage.getItem(key))[Ss.NK]), (JSON.parse(localStorage.getItem(key))[Ss.CS])]); } });
  744. if (tableau.length < 5) {
  745. return false;
  746. }
  747. tableau.sort(function (a, b) { return b[1] - a[1]; });
  748. room.sendAnnouncement("🏴󠁨󠁵󠁣󠁳󠁿 CS> #1 " + tableau[0][0] + ": " + tableau[0][1] + " #2 " + tableau[1][0] + ": " + tableau[1][1] + " #3 " + tableau[2][0] + ": " + tableau[2][1] + " #4 " + tableau[3][0] + ": " + tableau[3][1] + " #5 " + tableau[4][0] + ": " + tableau[4][1], player.id, "0x00FFBB", "bold", 2);
  749. }
  750. statNumber++;
  751. }, statInterval * 60 * 1000);
  752.  
  753. /* EVENTS */
  754.  
  755. /* PLAYER MOVEMENT */
  756.  
  757. room.onPlayerJoin = function(player) {
  758. extendedP.push([player.id, player.auth, player.conn, false, 0, 0, false]);
  759. updateRoleOnPlayerIn();
  760. room.sendAnnouncement('👋🏻 Witamy Serdecznie ' + player.name + ' ❗ Wpisz !pomoc aby zobaczyć dostępne komendy.', player.id, 0xD408AB, 'bold', 2);
  761. room.sendAnnouncement('Zapraszamy na naszego Discorda: https://discord.gg/bXhmkDy', player.id, 0x00E5FF, 'small-bold', 1);
  762. room.sendAnnouncement('Życzymy miłej gry ! 💪', player.id, 0x0CC402, 'small-bold', 1);
  763. if (localStorage.getItem(player.auth) != null) {
  764. if (JSON.parse(localStorage.getItem(player.auth))[Ss.RL] != "player") {
  765. room.setPlayerAdmin(player.id, true);
  766. room.sendAnnouncement((JSON.parse(localStorage.getItem(player.auth))[Ss.RL] == "master" ? "Admin " : "Admin ") + player.name + " Dołączył na serwer !", player.id, 0xFFEE00, 'small-bold', 2);
  767. }
  768. }
  769. playersInfo[player.name] = [player.auth, player.conn];
  770. let conn = connections.find(a => a[1] === player.conn)
  771. if (conn) {
  772. room.kickPlayer(player.id, "1 gracz = 1 karta", false);
  773. } else {
  774.  
  775. connections.push([player.id, player.conn])
  776. }
  777.  
  778. messages[player.name] = {
  779. lastMsg: null,
  780. status: 0
  781. }
  782. }
  783.  
  784. room.onPlayerTeamChange = function(changedPlayer, byPlayer) {
  785. if (changedPlayer.id == 0) {
  786. room.setPlayerTeam(0, Team.SPECTATORS);
  787. return;
  788. }
  789. if (getAFK(changedPlayer) && changedPlayer.team != Team.SPECTATORS) {
  790. room.setPlayerTeam(changedPlayer.id, Team.SPECTATORS);
  791. room.sendAnnouncement(changedPlayer.name + " Nie można przenieść, bo afczy !");
  792. return;
  793. }
  794. updateTeams();
  795. if (room.getScores() != null) {
  796. var scores = room.getScores();
  797. if (changedPlayer.team != Team.SPECTATORS && scores.time <= (3/4) * scores.timeLimit && Math.abs(scores.blue - scores.red) < 2) {
  798. (changedPlayer.team == Team.RED) ? allReds.push(changedPlayer) : allBlues.push(changedPlayer);
  799. }
  800. }
  801. if (changedPlayer.team == Team.SPECTATORS) {
  802. setActivity(changedPlayer, 0);
  803. }
  804. if (inChooseMode && resettingTeams == false && byPlayer.id == 0) {
  805. if (Math.abs(teamR.length - teamB.length) == teamS.length) {
  806. deactivateChooseMode();
  807. resumeGame();
  808. var b = teamS.length;
  809. if (teamR.length > teamB.length) {
  810. for (var i = 0 ; i < b ; i++) {
  811. setTimeout(() => { room.setPlayerTeam(teamS[0].id, Team.BLUE); }, 200*i);
  812. }
  813. }
  814. else {
  815. for (var i = 0 ; i < b ; i++) {
  816. setTimeout(() => { room.setPlayerTeam(teamS[0].id, Team.RED); }, 200*i);
  817. }
  818. }
  819. return;
  820. }
  821. else if ((teamR.length == maxTeamSize && teamB.length == maxTeamSize) || (teamR.length == teamB.length && teamS.length < 2)) {
  822. deactivateChooseMode();
  823. resumeGame();
  824. }
  825. else if (teamR.length <= teamB.length && redCaptainChoice != "") { // choice remembered
  826. redCaptainChoice == "top" ? room.setPlayerTeam(teamS[0].id, Team.RED) : redCaptainChoice == "random" ? room.setPlayerTeam(teamS[getRandomInt(teamS.length)].id, Team.RED) : room.setPlayerTeam(teamS[teamS.length - 1].id, Team.RED);
  827. return;
  828. }
  829. else if (teamB.length < teamR.length && blueCaptainChoice != "") {
  830. blueCaptainChoice == "top" ? room.setPlayerTeam(teamS[0].id, Team.BLUE) : blueCaptainChoice == "random" ? room.setPlayerTeam(teamS[getRandomInt(teamS.length)].id, Team.BLUE) : room.setPlayerTeam(teamS[teamS.length - 1].id, Team.BLUE);
  831. return;
  832. }
  833. else {
  834. choosePlayer();
  835. }
  836. }
  837. }
  838.  
  839. room.onPlayerLeave = function(player) {
  840. if (teamR.findIndex((red) => red.id == player.id) == 0 && inChooseMode && teamR.length <= teamB.length) {
  841. choosePlayer();
  842. capLeft = true; setTimeout(() => { capLeft = false; }, 10);
  843. }
  844. if (teamB.findIndex((blue) => blue.id == player.id) == 0 && inChooseMode && teamB.length < teamR.length) {
  845. choosePlayer();
  846. capLeft = true; setTimeout(() => { capLeft = false; }, 10);
  847. }
  848. setActivity(player, 0);
  849. updateRoleOnPlayerOut();
  850.  
  851. setTimeout(() => delete playersInfo[player.name], 1000);
  852.  
  853. connections = connections.filter(a => a[0] !== player.id);
  854.  
  855. delete messages[player.name]
  856.  
  857. }
  858.  
  859. room.onPlayerKicked = function(kickedPlayer, reason, ban, byPlayer) {
  860. ban == true ? banList.push([kickedPlayer.name, kickedPlayer.id]) : null;
  861. }
  862.  
  863. /* PLAYER ACTIVITY */
  864.  
  865. room.onPlayerChat = function (player, message) {
  866. message = message.split(/ +/);
  867. player.team != Team.SPECTATORS ? setActivity(player, 0) : null;
  868. if (["!pomoc"].includes(message[0].toLowerCase())) {
  869. room.sendAnnouncement("🌀 Komendy dla gracza : !me, !games, !wins, !goals, !asysty, !cs, !afk, !afks, !mutes, !bans, !bb.", player.id, "0x94EB95", "bold", 2);
  870. player.admin ? room.sendAnnouncement("🔰 Komendy dla Admina : !mute <czas = 3> #<id>, !unmute all/#<id>, !clearbans <numer = all>, !slow <czas>, !endslow", player.id, "0xFF0000", "small-bold",) : null;
  871. }
  872. else if (["!afk"].includes(message[0].toLowerCase())) {
  873. if (players.length != 1 && player.team != Team.SPECTATORS) {
  874. if (player.team == Team.RED && streak > 0 && room.getScores() == null) {
  875. room.setPlayerTeam(player.id, Team.SPECTATORS);
  876. }
  877. else {
  878. room.sendAnnouncement("Nie możesz afczyć podczas gry !", player.id, "0xFFA500", "bold", 2);
  879. return false;
  880. }
  881. }
  882. else if (players.length == 1 && !getAFK(player)) {
  883. room.setPlayerTeam(player.id, Team.SPECTATORS);
  884. }
  885. setAFK(player, !getAFK(player));
  886. room.sendAnnouncement(player.name + (getAFK(player) ? " Zaraz wraca !" : " Jest z powrotem !"));
  887. getAFK(player) ? updateRoleOnPlayerOut() : updateRoleOnPlayerIn();
  888. }
  889. else if (["!afks", "!afklist"].includes(message[0].toLowerCase())) {
  890. var cstm = "💤 Lista graczy, którzy afczą : ";
  891. for (var i = 0; i < extendedP.length; i++) {
  892. if (room.getPlayer(extendedP[i][eP.ID]) != null && getAFK(room.getPlayer(extendedP[i][eP.ID]))) {
  893. if (140 - cstm.length < (room.getPlayer(extendedP[i][eP.ID]).name + ", ").length) {
  894. room.sendAnnouncement(cstm, player.id, "0x008CFF", "bold", 2);
  895. cstm = "... ";
  896. }
  897. cstm += room.getPlayer(extendedP[i][eP.ID]).name + ", ";
  898. }
  899. }
  900. if (cstm == " AFK List : ") {
  901. room.sendAnnouncement("Nie ma nikogo na liście AFK. !", player.id, "0xEE00FF", "bold", 2);
  902. return false;
  903. }
  904. cstm = cstm.substring(0, cstm.length - 2);
  905. cstm += ".";
  906. room.sendAnnouncement(cstm, player.id, "0x8A2BE2", "bold", 2);
  907. }
  908. else if (["!me"].includes(message[0].toLowerCase())) {
  909. var stats;
  910. localStorage.getItem(getAuth(player)) ? stats = JSON.parse(localStorage.getItem(getAuth(player))) : stats = [0, 0, 0, 0, "0.00", 0, 0, 0, 0, "0.00"];
  911. room.sendAnnouncement(" " + player.name + "> Rozegrane gry: " + stats[Ss.GA] + ", Wygrane: " + stats[Ss.WI] + ", Remisy: " + stats[Ss.DR] + ", Przegrane: " + stats[Ss.LS] + ", WinRate: " + stats[Ss.WR] + "%, Gole: " + stats[Ss.GL] + ", Asysty: " + stats[Ss.AS] + ", GK: " + stats[Ss.GK] + ", CS: " + stats[Ss.CS] + ", CS%: " + stats[Ss.CP] + "%", player.id, "0x00A4D6", "bold", 2);
  912. }
  913. else if (["!games"].includes(message[0].toLowerCase())) {
  914. var tableau = [];
  915. Object.keys(localStorage).forEach(function (key) { if (!["player_name", "view_mode", "geo", "avatar", "player_auth_key"].includes(key)) { tableau.push([(JSON.parse(localStorage.getItem(key))[Ss.NK]), (JSON.parse(localStorage.getItem(key))[Ss.GA])]); } });
  916. if (tableau.length < 5) {
  917. room.sendAnnouncement("Za mało rozegrałeś gier !", player.id, "0xB700FF", "bold", 2);
  918. return false;
  919. }
  920. tableau.sort(function (a, b) { return b[1] - a[1]; });
  921. room.sendAnnouncement("Gry> #1 " + tableau[0][0] + ": " + tableau[0][1] + " #2 " + tableau[1][0] + ": " + tableau[1][1] + " #3 " + tableau[2][0] + ": " + tableau[2][1] + " #4 " + tableau[3][0] + ": " + tableau[3][1] + " #5 " + tableau[4][0] + ": " + tableau[4][1], player.id, "0xB919E6", "bold", 2);
  922. }
  923. else if (["!wins"].includes(message[0].toLowerCase())) {
  924. var tableau = [];
  925. Object.keys(localStorage).forEach(function (key) { if (!["player_name", "view_mode", "geo", "avatar", "player_auth_key"].includes(key)) { tableau.push([(JSON.parse(localStorage.getItem(key))[Ss.NK]), (JSON.parse(localStorage.getItem(key))[Ss.WI])]); } });
  926. if (tableau.length < 5) {
  927. room.sendAnnouncement("Za mało rozegrałeś gier !", player.id, "0xB700FF", "bold", 2);
  928. return false;
  929. }
  930. tableau.sort(function (a, b) { return b[1] - a[1]; });
  931. room.sendAnnouncement("Wygrane> #1 " + tableau[0][0] + ": " + tableau[0][1] + " #2 " + tableau[1][0] + ": " + tableau[1][1] + " #3 " + tableau[2][0] + ": " + tableau[2][1] + " #4 " + tableau[3][0] + ": " + tableau[3][1] + " #5 " + tableau[4][0] + ": " + tableau[4][1], player.id, "0x00C45C", "bold", 2);
  932. }
  933. else if (["!goals"].includes(message[0].toLowerCase())) {
  934. var tableau = [];
  935. Object.keys(localStorage).forEach(function (key) { if (!["player_name", "view_mode", "geo", "avatar", "player_auth_key"].includes(key)) { tableau.push([(JSON.parse(localStorage.getItem(key))[Ss.NK]), (JSON.parse(localStorage.getItem(key))[Ss.GL])]); } });
  936. if (tableau.length < 5) {
  937. room.sendAnnouncement("Za mało rozegrałeś gier !", player.id, "0xB700FF", "bold", 2);
  938. return false;
  939. }
  940. tableau.sort(function (a, b) { return b[1] - a[1]; });
  941. room.sendAnnouncement(" Gole> #1 " + tableau[0][0] + ": " + tableau[0][1] + " #2 " + tableau[1][0] + ": " + tableau[1][1] + " #3 " + tableau[2][0] + ": " + tableau[2][1] + " #4 " + tableau[3][0] + ": " + tableau[3][1] + " #5 " + tableau[4][0] + ": " + tableau[4][1], player.id, "0xDE0004", "bold", 2);
  942. }
  943. else if (["!asysty"].includes(message[0].toLowerCase())) {
  944. var tableau = [];
  945. Object.keys(localStorage).forEach(function (key) { if (!["player_name", "view_mode", "geo", "avatar", "player_auth_key"].includes(key)) { tableau.push([(JSON.parse(localStorage.getItem(key))[Ss.NK]), (JSON.parse(localStorage.getItem(key))[Ss.AS])]); } });
  946. if (tableau.length < 5) {
  947. room.sendAnnouncement("Za mało rozegrałeś gier !", player.id, "0xB700FF", "bold", 2);
  948. return false;
  949. }
  950. tableau.sort(function (a, b) { return b[1] - a[1]; });
  951. room.sendAnnouncement("Asysty> #1 " + tableau[0][0] + ": " + tableau[0][1] + " #2 " + tableau[1][0] + ": " + tableau[1][1] + " #3 " + tableau[2][0] + ": " + tableau[2][1] + " #4 " + tableau[3][0] + ": " + tableau[3][1] + " #5 " + tableau[4][0] + ": " + tableau[4][1], player.id, "0xFCCE00", "bold", 2);
  952. }
  953. else if (["!cs"].includes(message[0].toLowerCase())) {
  954. var tableau = [];
  955. Object.keys(localStorage).forEach(function (key) { if (!["player_name", "view_mode", "geo", "avatar", "player_auth_key"].includes(key)) { tableau.push([(JSON.parse(localStorage.getItem(key))[Ss.NK]), (JSON.parse(localStorage.getItem(key))[Ss.CS])]); } });
  956. if (tableau.length < 5) {
  957. room.sendAnnouncement("Za mało rozegrałeś gier !", player.id, "0xB700FF", "bold", 2);
  958. return false;
  959. }
  960. tableau.sort(function (a, b) { return b[1] - a[1]; });
  961. room.sendAnnouncement(" CS> #1 " + tableau[0][0] + ": " + tableau[0][1] + " #2 " + tableau[1][0] + ": " + tableau[1][1] + " #3 " + tableau[2][0] + ": " + tableau[2][1] + " #4 " + tableau[3][0] + ": " + tableau[3][1] + " #5 " + tableau[4][0] + ": " + tableau[4][1], player.id, "0x00FFBB", "bold", 2);
  962. }
  963. else if (["!claim"].includes(message[0].toLowerCase())) {
  964. if (message[1] == adminPassword) {
  965. room.setPlayerAdmin(player.id, true);
  966. var stats;
  967. localStorage.getItem(getAuth(player)) ? stats = JSON.parse(localStorage.getItem(getAuth(player))) : stats = [0, 0, 0, 0, "0.00", 0, 0, 0, 0, "0.00", "player", player.name];
  968. if (stats[Ss.RL] != "master") {
  969. stats[Ss.RL] = "master";
  970. room.sendAnnouncement(player.name + " Został w tym momencie Administratorem 😊 !");
  971. localStorage.setItem(getAuth(player), JSON.stringify(stats));
  972. }
  973. }
  974. }
  975. else if (["!setadmin", "!admin"].includes(message[0].toLowerCase())) {
  976. if (localStorage.getItem(getAuth(player)) && JSON.parse(localStorage.getItem(getAuth(player)))[Ss.RL] == "master") {
  977. if (message.length >= 2 && message[1][0] == "#") {
  978. message[1] = message[1].substring(1, message[1].length);
  979. if (!Number.isNaN(Number.parseInt(message[1])) && room.getPlayer(Number.parseInt(message[1])) != null) {
  980. var stats;
  981. localStorage.getItem(getAuth(room.getPlayer(Number.parseInt(message[1])))) ? stats = JSON.parse(localStorage.getItem(getAuth(room.getPlayer(Number.parseInt(message[1]))))) : stats = [0, 0, 0, 0, "0.00", 0, 0, 0, 0, "0.00", "player", room.getPlayer(Number.parseInt(message[1])).name];
  982. if (stats[Ss.RL] == "player") {
  983. stats[Ss.RL] = "admin";
  984. localStorage.setItem(getAuth(room.getPlayer(Number.parseInt(message[1]))), JSON.stringify(stats));
  985. room.setPlayerAdmin(room.getPlayer(Number.parseInt(message[1])).id, true);
  986. room.sendAnnouncement(room.getPlayer(Number.parseInt(message[1])).name + " Jest teraz administratorem pokoju !");
  987. }
  988. }
  989. }
  990. }
  991. }
  992. else if (["!setplayer", "!removeadmin"].includes(message[0].toLowerCase())) {
  993. if (localStorage.getItem(getAuth(player)) && JSON.parse(localStorage.getItem(getAuth(player)))[Ss.RL] == "master") {
  994. if (message.length >= 2 && message[1][0] == "#") {
  995. message[1] = message[1].substring(1, message[1].length);
  996. if (!Number.isNaN(Number.parseInt(message[1])) && room.getPlayer(Number.parseInt(message[1])) != null) {
  997. var stats;
  998. localStorage.getItem(getAuth(room.getPlayer(Number.parseInt(message[1])))) ? stats = JSON.parse(localStorage.getItem(getAuth(room.getPlayer(Number.parseInt(message[1]))))) : stats = [0, 0, 0, 0, "0.00", 0, 0, 0, 0, "0.00", "player", room.getPlayer(Number.parseInt(message[1])).name];
  999. if (stats[Ss.RL] == "admin") {
  1000. room.sendAnnouncement(room.getPlayer(Number.parseInt(message[1])).name + " Nie jest już administratorem pokoju !");
  1001. stats[Ss.RL] = "player";
  1002. localStorage.setItem(getAuth(room.getPlayer(Number.parseInt(message[1]))), JSON.stringify(stats));
  1003. room.setPlayerAdmin(room.getPlayer(Number.parseInt(message[1])).id, false);
  1004. }
  1005. }
  1006. }
  1007. }
  1008. }
  1009. else if (["!mutes", "!mutelist"].includes(message[0].toLowerCase())) {
  1010. var cstm = " 🔇 Lista osób mute : ";
  1011. for (var i = 0; i < extendedP.length; i++) {
  1012. if (room.getPlayer(extendedP[i][eP.ID]) != null && getMute(room.getPlayer(extendedP[i][eP.ID]))) {
  1013. if (140 - cstm.length < (room.getPlayer(extendedP[i][eP.ID]).name + "[" + (extendedP[i][eP.ID]) + "], ").length) {
  1014. room.sendAnnouncement(cstm, player.id, "0x008CFF", "bold", 2);
  1015. cstm = "... ";
  1016. }
  1017. cstm += room.getPlayer(extendedP[i][eP.ID]).name + "[" + (extendedP[i][eP.ID]) + "], ";
  1018. }
  1019. }
  1020. if (cstm == " 🔇 Lista Mute : ") {
  1021. room.sendAnnouncement("🔇 Nie ma nikogo na liście mute.", player.id, "0xFFA500", "bold", 2);
  1022. return false;
  1023. }
  1024. cstm = cstm.substring(0, cstm.length - 2);
  1025. cstm += ".";
  1026. room.sendAnnouncement(cstm, player.id);
  1027. }
  1028. else if (["!mute"].includes(message[0].toLowerCase())) {
  1029. if (player.admin) {
  1030. updateTeams();
  1031. var timeOut;
  1032. if (!Number.isNaN(Number.parseInt(message[1])) && message.length > 1) {
  1033. if (Number.parseInt(message[1]) > 0) {
  1034. timeOut = Number.parseInt(message[1]) * 60 * 1000;
  1035. }
  1036. else {
  1037. timeOut = 3 * 60 * 1000;
  1038. }
  1039. if (message[2].length > 1 && message[2][0] == "#") {
  1040. message[2] = message[2].substring(1, message[2].length);
  1041. if (!Number.isNaN(Number.parseInt(message[2])) && room.getPlayer(Number.parseInt(message[2])) != null) {
  1042. if (room.getPlayer(Number.parseInt(message[2])).admin || getMute(room.getPlayer(Number.parseInt(message[2])))) {
  1043. return false;
  1044. }
  1045. setTimeout(function (player) { setMute(player, false); }, timeOut, room.getPlayer(Number.parseInt(message[2])));
  1046. setMute(room.getPlayer(Number.parseInt(message[2])), true);
  1047. room.sendAnnouncement(room.getPlayer(Number.parseInt(message[2])).name + " Dostał mute'a na " + (timeOut / 60000) + " minutes!");
  1048. }
  1049. }
  1050. }
  1051. else if (Number.isNaN(Number.parseInt(message[1]))) {
  1052. if (message[1].length > 1 && message[1][0] == "#") {
  1053. message[1] = message[1].substring(1, message[1].length);
  1054. if (!Number.isNaN(Number.parseInt(message[1])) && room.getPlayer(Number.parseInt(message[1])) != null) {
  1055. if (room.getPlayer(Number.parseInt(message[1])).admin || getMute(room.getPlayer(Number.parseInt(message[1])))) {
  1056. return false;
  1057. }
  1058. setTimeout(function (player) { setMute(player, false); }, 3 * 60 * 1000, room.getPlayer(Number.parseInt(message[1])));
  1059. setMute(room.getPlayer(Number.parseInt(message[1])), true);
  1060. room.sendAnnouncement(room.getPlayer(Number.parseInt(message[1])).name + " Został zmutowany na 3 minuty!");
  1061. }
  1062. }
  1063. }
  1064. }
  1065. }
  1066. else if (["!unmute"].includes(message[0].toLowerCase())) {
  1067. if (player.admin && message.length >= 2) {
  1068. if (message[1] == "all") {
  1069. extendedP.forEach((ePlayer) => { ePlayer[eP.MUTE] = false; });
  1070. room.sendAnnouncement("Mute wyczyszczone");
  1071. }
  1072. else if (!Number.isNaN(Number.parseInt(message[1])) && room.getPlayer(Number.parseInt(message[1])) != null && getMute(room.getPlayer(Number.parseInt(message[1])))) {
  1073. setMute(room.getPlayer(Number.parseInt(message[1])), false);
  1074. room.sendAnnouncement(room.getPlayer(Number.parseInt(message[1])).name + " has been unmuted !");
  1075. }
  1076. else if (Number.isNaN(Number.parseInt(message[1]))) {
  1077. if (message[1].length > 1 && message[1][0] == "#") {
  1078. message[1] = message[1].substring(1, message[1].length);
  1079. if (!Number.isNaN(Number.parseInt(message[1])) && room.getPlayer(Number.parseInt(message[1])) != null && getMute(room.getPlayer(Number.parseInt(message[1])))) {
  1080. setMute(room.getPlayer(Number.parseInt(message[1])), false);
  1081. room.sendAnnouncement(room.getPlayer(Number.parseInt(message[1])).name + " has been unmuted !");
  1082. }
  1083. }
  1084. }
  1085. }
  1086. }
  1087. else if (["!slow"].includes(message[0].toLowerCase())) {
  1088. if (player.admin) {
  1089. if (message.length == 1) {
  1090. slowMode = 2;
  1091. room.sendAnnouncement("2 sekundy włączony tryb powolny !");
  1092. }
  1093. else if (message.length == 2) {
  1094. if (!Number.isNaN(Number.parseInt(message[1]))) {
  1095. if (Number.parseInt(message[1]) > 0) {
  1096. slowMode = Number.parseInt(message[1]);
  1097. room.sendAnnouncement(slowMode + " seconds slow mode enabled !");
  1098. return false;
  1099. }
  1100. }
  1101. slowMode = 2;
  1102. room.sendAnnouncement("2 sekundy włączony tryb powolny !");
  1103. }
  1104. }
  1105. }
  1106. else if (["!endslow"].includes(message[0].toLowerCase())) {
  1107. if (player.admin) {
  1108. slowMode != 0 ? room.sendAnnouncement("Tryb powolny zakończony.") : null;
  1109. slowMode = 0;
  1110. }
  1111. }
  1112. else if (["!banlist", "!bans"].includes(message[0].toLowerCase())) {
  1113. if (banList.length == 0) {
  1114. room.sendAnnouncement("Nie ma nikogo na liście banów !", player.id, "0x00FF00", "bold", 2);
  1115. return false;
  1116. }
  1117. var cstm = " 🚫 Lista osób zbanowanych : ";
  1118. for (var i = 0; i < banList.length; i++) {
  1119. if (140 - cstm.length < (banList[i][0] + "[" + (banList[i][1]) + "], ").length) {
  1120. room.sendAnnouncement(cstm, player.id, "0x02ED5D", "bold", 2);
  1121. cstm = "... ";
  1122. }
  1123. cstm += banList[i][0] + "[" + (banList[i][1]) + "], ";
  1124. }
  1125. cstm = cstm.substring(0, cstm.length - 2);
  1126. cstm += ".";
  1127. room.sendAnnouncement(cstm, player.id, "0x7CF000", "bold", 2);
  1128. }
  1129. else if (["!clearbans"].includes(message[0].toLowerCase())) {
  1130. if (player.admin) {
  1131. if (message.length == 1) {
  1132. room.clearBans();
  1133. room.sendAnnouncement("✅ Bany zostały pomyślnie wyczyszczone. !", player.id, 0xFF8400, 'small-bold', 2);
  1134. banList = [];
  1135. }
  1136. if (message.length == 2) {
  1137. if (!Number.isNaN(Number.parseInt(message[1]))) {
  1138. if (Number.parseInt(message[1]) > 0) {
  1139. ID = Number.parseInt(message[1]);
  1140. room.clearBan(ID);
  1141. if (banList.length != banList.filter((array) => array[1] != ID)) {
  1142. room.sendAnnouncement(banList.filter((array) => array[1] == ID)[0][0] + " has been unbanned from the room !");
  1143. }
  1144. setTimeout(() => { banList = banList.filter((array) => array[1] != ID); }, 20);
  1145. }
  1146. }
  1147. }
  1148. }
  1149. }
  1150. else if (["!bb", "!bye", "!cya", "!gn"].includes(message[0].toLowerCase())) {
  1151. room.kickPlayer(player.id, "Elo wariaty", false);
  1152. }
  1153. if (teamR.length != 0 && teamB.length != 0 && inChooseMode) {
  1154. if (player.id == teamR[0].id || player.id == teamB[0].id) { // we care if it's one of the captains choosing
  1155. if (teamR.length <= teamB.length && player.id == teamR[0].id) { // we care if it's red turn && red cap talking
  1156. if (["top", "auto"].includes(message[0].toLowerCase())) {
  1157. room.setPlayerTeam(teamS[0].id, Team.RED);
  1158. redCaptainChoice = "top";
  1159. clearTimeout(timeOutCap);
  1160. room.sendAnnouncement(player.name + " Wybrał z góry !", player.id, "0xE802F0", "bold", 2);
  1161. return false;
  1162. }
  1163. else if (["random", "rand"].includes(message[0].toLowerCase())) {
  1164. var r = getRandomInt(teamS.length);
  1165. room.setPlayerTeam(teamS[r].id, Team.RED);
  1166. redCaptainChoice = "random";
  1167. clearTimeout(timeOutCap);
  1168. room.sendAnnouncement(player.name + " Wybrał losowo !", player.id, "0xE802F0", "bold", 2);
  1169. return false;
  1170. }
  1171. else if (["bottom", "bot"].includes(message[0].toLowerCase())) {
  1172. room.setPlayerTeam(teamS[teamS.length - 1].id, Team.RED);
  1173. redCaptainChoice = "bottom";
  1174. clearTimeout(timeOutCap);
  1175. room.sendAnnouncement(player.name + " Wybrał z dołu !", player.id, "0xE802F0", "bold", 2);
  1176. return false;
  1177. }
  1178. else if (!Number.isNaN(Number.parseInt(message[0]))) {
  1179. if (Number.parseInt(message[0]) > teamS.length || Number.parseInt(message[0]) < 1) {
  1180. room.sendAnnouncement(" Ten numer jest nieprawidłowy !", player.id, "0xFF0000", "bold", 2);
  1181. return false;
  1182. }
  1183. else {
  1184. room.setPlayerTeam(teamS[Number.parseInt(message[0]) - 1].id, Team.RED);
  1185. room.sendAnnouncement(player.name + " Wybrał " + teamS[Number.parseInt(message[0]) - 1].name + " !", player.id, "0xE802F0", "bold", 2);
  1186. return false;
  1187. }
  1188. }
  1189. }
  1190. if (teamR.length > teamB.length && player.id == teamB[0].id) { // we care if it's red turn && red cap talking
  1191. if (["top", "auto"].includes(message[0].toLowerCase())) {
  1192. room.setPlayerTeam(teamS[0].id, Team.BLUE);
  1193. blueCaptainChoice = "top";
  1194. clearTimeout(timeOutCap);
  1195. room.sendAnnouncement(player.name + " Wybrał z góry !", player.id, "0xE802F0", "bold", 2);
  1196. return false;
  1197. }
  1198. else if (["random", "rand"].includes(message[0].toLowerCase())) {
  1199. room.setPlayerTeam(teamS[getRandomInt(teamS.length)].id, Team.BLUE);
  1200. blueCaptainChoice = "random";
  1201. clearTimeout(timeOutCap);
  1202. room.sendAnnouncement(player.name + " Wybrał losowo !", player.id, "0xE802F0", "bold", 2);
  1203. return false;
  1204. }
  1205. else if (["bottom", "bot"].includes(message[0].toLowerCase())) {
  1206. room.setPlayerTeam(teamS[teamS.length - 1].id, Team.BLUE);
  1207. blueCaptainChoice = "bottom";
  1208. clearTimeout(timeOutCap);
  1209. room.sendAnnouncement(player.name + " Wybrał z dołu !", player.id, "0xE802F0", "bold", 2);
  1210. return false;
  1211. }
  1212. else if (!Number.isNaN(Number.parseInt(message[0]))) {
  1213. if (Number.parseInt(message[0]) > teamS.length || Number.parseInt(message[0]) < 1) {
  1214. room.sendAnnouncement(" Ten numer jest nieprawidłowy !", player.id, "0xFF0000", "bold", 2);
  1215. return false;
  1216. }
  1217. else {
  1218. room.setPlayerTeam(teamS[Number.parseInt(message[0]) - 1].id, Team.BLUE);
  1219. room.sendAnnouncement(player.name + " Wybrał " + teamS[Number.parseInt(message[0]) - 1].name + " !", player.id, "0xE802F0", "bold", 2);
  1220. return false;
  1221. }
  1222. }
  1223. }
  1224. }
  1225. }
  1226. if (message[0][0] == "!") {
  1227. return false;
  1228. }
  1229. if (getMute(player)) {
  1230. room.sendAnnouncement("Dostałeś mute'a.", player.id, "0xFF00FF", "bold", 2);
  1231. return false;
  1232. }
  1233. if (slowMode > 0) {
  1234. if (!player.admin) {
  1235. if (!SMSet.has(player.id)) {
  1236. SMSet.add(player.id);
  1237. setTimeout((number) => { SMSet.delete(number); }, slowMode * 1000, player.id);
  1238. }
  1239. else {
  1240. return false;
  1241. }
  1242. }
  1243. }
  1244.  
  1245. localStorage.getItem(getAuth(player)) ? stats = JSON.parse(localStorage.getItem(getAuth(player))) : stats = [0, 0, 0, 0, "0.00", 0, 0, 0, 0, "0.00"];
  1246. var stats;
  1247.  
  1248. if(stats[Ss.RL] == "master"){
  1249. message = message.join(' ')
  1250. room.sendAnnouncement('Master ' + player.name + ': ' + message, null, 0xff0000, "bold", 2);
  1251. return false;
  1252. }
  1253.  
  1254. localStorage.getItem(getAuth(player)) ? stats = JSON.parse(localStorage.getItem(getAuth(player))) : stats = [0, 0, 0, 0, "0.00", 0, 0, 0, 0, "0.00"];
  1255. var stats;
  1256.  
  1257. if(stats[Ss.RL] == "player"){
  1258. message = message.join(' ')
  1259. room.sendAnnouncement('Gracz ' + player.name + ': ' + message, null, 0x808080, "bold", 2);
  1260. return false;
  1261. }
  1262.  
  1263. localStorage.getItem(getAuth(player)) ? stats = JSON.parse(localStorage.getItem(getAuth(player))) : stats = [0, 0, 0, 0, "0.00", 0, 0, 0, 0, "0.00"];
  1264. var stats;
  1265.  
  1266. if(stats[Ss.RL] == "admin"){
  1267. message = message.join(' ')
  1268. room.sendAnnouncement('Admin ' + player.name + ': ' + message, null, 0x1DF700, "bold", 2);
  1269. return false;
  1270. }
  1271.  
  1272. }
  1273.  
  1274. room.onPlayerActivity = function(player) {
  1275. setActivity(player, 0);
  1276. }
  1277.  
  1278. room.onPlayerBallKick = function(player) {
  1279. if (lastPlayersTouched[0] == null || player.id != lastPlayersTouched[0].id) {
  1280. !activePlay ? activePlay = true : null;
  1281. lastTeamTouched = player.team;
  1282. lastPlayersTouched[1] = lastPlayersTouched[0];
  1283. lastPlayersTouched[0] = player;
  1284. }
  1285. }
  1286.  
  1287. /* GAME MANAGEMENT */
  1288.  
  1289. room.onGameStart = function(byPlayer) {
  1290. game = new Game(Date.now(), room.getScores(), []);
  1291. countAFK = true;
  1292. activePlay = false;
  1293. goldenGoal = false;
  1294. endGameVariable = false;
  1295. lastPlayersTouched = [null, null];
  1296. Rposs = 0;
  1297. Bposs = 0;
  1298. GKList = [];
  1299. allReds = [];
  1300. allBlues = [];
  1301. if (teamR.length == maxTeamSize && teamB.length == maxTeamSize) {
  1302. for (var i = 0; i < maxTeamSize; i++) {
  1303. allReds.push(teamR[i]);
  1304. allBlues.push(teamB[i]);
  1305. }
  1306. }
  1307. for (var i = 0; i < extendedP.length; i++) {
  1308. extendedP[i][eP.GK] = 0;
  1309. extendedP[i][eP.ACT] = 0;
  1310. room.getPlayer(extendedP[i][eP.ID]) == null ? extendedP.splice(i, 1) : null;
  1311. }
  1312. deactivateChooseMode();
  1313. }
  1314.  
  1315. room.onGameStop = function(byPlayer) {
  1316. if (byPlayer.id == 0 && endGameVariable) {
  1317. updateTeams();
  1318. if (inChooseMode) {
  1319. if (players.length == 2 * maxTeamSize) {
  1320. inChooseMode = false;
  1321. resetBtn();
  1322. for (var i = 0; i < maxTeamSize; i++) {
  1323. setTimeout(() => { randomBtn(); }, 400*i);
  1324. }
  1325. setTimeout(() => { room.startGame(); }, 2000);
  1326. }
  1327. else {
  1328. if (lastWinner == Team.RED) {
  1329. blueToSpecBtn();
  1330. }
  1331. else if (lastWinner == Team.BLUE) {
  1332. redToSpecBtn();
  1333. blueToRedBtn();
  1334. }
  1335. else {
  1336. resetBtn();
  1337. }
  1338. setTimeout(() => { topBtn(); }, 500);
  1339. }
  1340. }
  1341. else {
  1342. if (players.length == 2) {
  1343. if (lastWinner == Team.BLUE) {
  1344. room.setPlayerTeam(teamB[0].id, Team.RED);
  1345. room.setPlayerTeam(teamR[0].id, Team.BLUE);
  1346. }
  1347. setTimeout(() => { room.startGame(); }, 2000);
  1348. }
  1349. else if (players.length == 3 || players.length >= 2 * maxTeamSize + 1) {
  1350. if (lastWinner == Team.RED) {
  1351. blueToSpecBtn();
  1352. }
  1353. else {
  1354. redToSpecBtn();
  1355. blueToRedBtn();
  1356. }
  1357. setTimeout(() => { topBtn(); }, 200);
  1358. setTimeout(() => { room.startGame(); }, 2000);
  1359. }
  1360. else if (players.length == 4) {
  1361. resetBtn();
  1362. setTimeout(() => { randomBtn(); setTimeout(() => { randomBtn(); }, 500); }, 500);
  1363. setTimeout(() => { room.startGame(); }, 2000);
  1364. }
  1365. else if (players.length == 5 || players.length >= 2 * maxTeamSize + 1) {
  1366. if (lastWinner == Team.RED) {
  1367. blueToSpecBtn();
  1368. }
  1369. else {
  1370. redToSpecBtn();
  1371. blueToRedBtn();
  1372. }
  1373. setTimeout(() => { topBtn(); }, 200);
  1374. activateChooseMode();
  1375. }
  1376. else if (players.length == 6) {
  1377. resetBtn();
  1378. setTimeout(() => { randomBtn(); setTimeout(() => { randomBtn(); setTimeout(() => { randomBtn(); }, 500); }, 500); }, 500);
  1379. setTimeout(() => { room.startGame(); }, 2000);
  1380. }
  1381. }
  1382. }
  1383. }
  1384.  
  1385. room.onGamePause = function(byPlayer) {
  1386. }
  1387.  
  1388. room.onGameUnpause = function (byPlayer) {
  1389. if (teamR.length == 4 && teamB.length == 4 && inChooseMode || (teamR.length == teamB.length && teamS.length < 2 && inChooseMode)) {
  1390. deactivateChooseMode();
  1391. }
  1392. }
  1393.  
  1394. room.onTeamGoal = function(team) {
  1395. activePlay = false;
  1396. countAFK = false;
  1397. const scores = room.getScores();
  1398. game.scores = scores;
  1399. if (lastPlayersTouched[0] != null && lastPlayersTouched[0].team == team) {
  1400. if (lastPlayersTouched[1] != null && lastPlayersTouched[1].team == team) {
  1401. room.sendAnnouncement("⚽ " + getTime(scores) + " Bramkę zdobył " + lastPlayersTouched[0].name + " ! Asystuje : " + lastPlayersTouched[1].name + ". Prędkość strzału podczas bramki : " + ballSpeed.toPrecision(4).toString() + "km/h " + (team == Team.RED ? "🔴" : "🔵"));
  1402. game.goals.push(new Goal(scores.time, team, lastPlayersTouched[0], lastPlayersTouched[1]));
  1403. }
  1404. else {
  1405. room.sendAnnouncement("⚽ " + getTime(scores) + " Bramkę zdobył " + lastPlayersTouched[0].name + " ! Prędkość strzału podczas bramki : " + ballSpeed.toPrecision(4).toString() + "km/h " + (team == Team.RED ? "🔴" : "🔵"));
  1406. game.goals.push(new Goal(scores.time, team, lastPlayersTouched[0], null));
  1407. }
  1408. }
  1409. else {
  1410. room.sendAnnouncement("😂 " + getTime(scores) + " Gol samobójczy trafiony przez " + lastPlayersTouched[0].name + " ! Prędkość strzału podczas bramki : " + ballSpeed.toPrecision(4).toString() + "km/h " + (team == Team.RED ? "🔴" : "🔵"));
  1411. game.goals.push(new Goal(scores.time, team, null, null));
  1412. }
  1413. if (scores.scoreLimit != 0 && (scores.red == scores.scoreLimit || scores.blue == scores.scoreLimit && scores.blue > 0 || goldenGoal == true)) {
  1414. endGame(team);
  1415. goldenGoal = false;
  1416. setTimeout(() => { room.stopGame(); }, 1000);
  1417. }
  1418. setColors(team)
  1419. }
  1420.  
  1421. room.onPositionsReset = function() {
  1422. countAFK = true;
  1423. lastPlayersTouched = [null, null];
  1424. }
  1425.  
  1426. /* MISCELLANEOUS */
  1427.  
  1428. room.onRoomLink = function(url) {
  1429. }
  1430.  
  1431. room.onPlayerAdminChange = function (changedPlayer, byPlayer) {
  1432. if (getMute(changedPlayer) && changedPlayer.admin) {
  1433. room.sendAnnouncement(changedPlayer.name + " has been unmuted.");
  1434. setMute(changedPlayer, false);
  1435. }
  1436. if (byPlayer.id != 0 && localStorage.getItem(getAuth(byPlayer)) && JSON.parse(localStorage.getItem(getAuth(byPlayer)))[Ss.RL] == "admin") {
  1437. room.sendAnnouncement("You don't have permission to name a player admin !", byPlayer.id);
  1438. room.setPlayerAdmin(changedPlayer.id, false);
  1439. }
  1440. }
  1441.  
  1442. room.onStadiumChange = function(newStadiumName, byPlayer) {
  1443. }
  1444.  
  1445. room.onGameTick = function() {
  1446. checkTime();
  1447. getLastTouchOfTheBall();
  1448. getStats();
  1449. handleInactivity();
  1450. }
  1451.  
  1452. let admSend = setInterval(() => {
  1453. room.sendChat('⭐ Team: fikcja, ZUTWLC, Szpok Sans Granie ⭐')
  1454. }, 1000 * 60 * 5)
  1455.  
  1456. let discordSend = setInterval(() => {
  1457. room.sendChat('⭐ Nasz discord: https://discord.gg/bXhmkDy ⭐')
  1458. }, 1000 * 60 * 5)
  1459. let theHaxSend = setInterval(() => {
  1460. room.sendChat('⭐ Discord załozyciela: fikcja#8681 ⭐')
  1461. }, 1000 * 60 * 5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement