Advertisement
Guest User

xd

a guest
Oct 17th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 37.84 KB | None | 0 0
  1. const game = {
  2. roomName: "POWER 1v | TRUEHAX.CBA.PL",
  3. maxPlayers: 6,
  4. playerName: "TRUEHAX.CBA.PL",
  5. public: false,
  6. geo: {
  7. code: "PL",
  8. lat: 52.232544,
  9. lon: 20.997543
  10. }
  11. };
  12.  
  13.  
  14.  
  15. let blackList = ["Ksus", " Ksus"];
  16. let connections = []
  17. const config = {
  18. showGoalInfo: true,
  19. chatEnabled: true,
  20. chatEnabled: true,
  21. muteNewPlayers: false,
  22. adminPassword: "9999999999d"
  23. };
  24.  
  25. const prefixes = {
  26. message: "⏩ ",
  27. cmd: "!"
  28. };
  29. let current_connections = [];
  30. let superAdmins = [];
  31. let mutedPlayers = [];
  32. let noCmdPlayers = [];
  33. let afkPlayers = [];
  34.  
  35. let adminAccess = {
  36. "Faluś": "9999999999d",
  37. "Karana": "Karana2018",
  38. "Wojtas": "Wojtas95",
  39. "bicz rozpierdalacz": "kuuutax-",
  40. "⬅️BacK": "fiatha", "Farmer": "chuje45", "Kąsacz": "Kasacz21", "leeritek": "Mius","ѕωєєи proвoт": "swet",
  41. };
  42.  
  43. let authenticatedAdmins = [];
  44. let adminLogs = {};
  45.  
  46.  
  47. let ball = {
  48. kickedBy: {
  49. player: null,
  50. time: null,
  51. },
  52. touchedBy: {
  53. player: null,
  54. time: null
  55. },
  56. assistingPlayer: null
  57. };
  58.  
  59.  
  60.  
  61. let goals = {};
  62. let ownGoals = {};
  63. let assists = {};
  64. let cmdManager;
  65. let nextPauseAction = true;
  66.  
  67. const room = new HBInit(game);
  68. let bans = {};
  69.  
  70.  
  71. let mikic = '{"name":"Power Finezja Classic fixed from HaxMaps","width":420,"height":200,"spawnDistance":170,"bg":{"type":"grass","width":370,"height":170,"kickOffRadius":75,"cornerRadius":0},"playerPhysics":{"bCoef":0.5,"invMass":0.5,"damping":0.96,"acceleration":0.12,"kickingAcceleration":0.12,"kickingDamping":0.96,"kickStrength":11},"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"},{"bCoef":1,"cMask":["ball"],"trait":"ballArea","x":-380,"y":-64},{"bCoef":1,"cMask":["ball"],"trait":"ballArea","x":-380,"y":64},{"bCoef":1,"cMask":["ball"],"trait":"ballArea","x":380,"y":-64},{"bCoef":1,"cMask":["ball"],"trait":"ballArea","x":380,"y":64},{"bCoef":1,"trait":"ballArea","x":385,"y":64,"cMask":["ball"]},{"bCoef":1,"trait":"ballArea","x":385,"y":170,"cMask":["ball"]},{"bCoef":1,"trait":"ballArea","x":385,"y":-170,"cMask":["ball"]},{"bCoef":1,"trait":"ballArea","x":385,"y":-64,"cMask":["ball"]},{"bCoef":1,"cMask":["ball"],"trait":"ballArea","x":-385,"y":64},{"bCoef":1,"cMask":["ball"],"trait":"ballArea","x":-385,"y":170},{"bCoef":1,"cMask":["ball"],"trait":"ballArea","x":-385,"y":-170},{"bCoef":1,"cMask":["ball"],"trait":"ballArea","x":-385,"y":-64},{"bCoef":1,"cMask":["ball"],"trait":"ballArea","x":-385,"y":-170},{"bCoef":1,"cMask":["ball"],"trait":"ballArea","x":-385,"y":-64},{"bCoef":1,"cMask":["ball"],"trait":"ballArea","x":-385,"y":-170},{"bCoef":1,"cMask":["ball"],"trait":"ballArea","x":-385,"y":-64},{"bCoef":1,"cMask":["ball"],"trait":"ballArea","x":-385,"y":64},{"bCoef":1,"cMask":["ball"],"trait":"ballArea","x":-385,"y":170},{"bCoef":1,"cMask":["ball"],"trait":"ballArea","x":-385,"y":64},{"bCoef":1,"cMask":["ball"],"trait":"ballArea","x":-385,"y":170},{"bCoef":1,"trait":"ballArea","x":385,"y":-170,"cMask":["ball"]},{"bCoef":1,"trait":"ballArea","x":385,"y":-64,"cMask":["ball"]},{"bCoef":1,"trait":"ballArea","x":385,"y":-170,"cMask":["ball"]},{"bCoef":1,"trait":"ballArea","x":385,"y":-64,"cMask":["ball"]},{"bCoef":1,"trait":"ballArea","x":385,"y":64,"cMask":["ball"]},{"bCoef":1,"trait":"ballArea","x":385,"y":170,"cMask":["ball"]},{"bCoef":1,"trait":"ballArea","x":385,"y":64,"cMask":["ball"]},{"bCoef":1,"trait":"ballArea","x":385,"y":170,"cMask":["ball"]}],"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"},{"vis":false,"color":"FFCCCC","bCoef":1,"trait":"ballArea","v0":24,"v1":25,"cMask":["ball"],"x":385},{"vis":false,"color":"CCCCFF","bCoef":1,"trait":"ballArea","v0":26,"v1":27,"x":385,"cMask":["ball"]},{"vis":false,"color":"FFCCCC","bCoef":1,"cMask":["ball"],"trait":"ballArea","v0":28,"v1":29,"x":-385,"curve":0},{"vis":false,"color":"FFCCCC","bCoef":1,"cMask":["ball"],"trait":"ballArea","v0":30,"v1":31,"x":-385},{"vis":false,"color":"FFCCCC","bCoef":1,"cMask":["ball"],"trait":"ballArea","v0":31,"v1":31},{"vis":false,"color":"FFCCCC","bCoef":1,"cMask":["ball"],"trait":"ballArea","v0":32,"v1":33,"x":-385,"curve":-38.6025768017},{"vis":false,"color":"FFCCCC","bCoef":1,"cMask":["ball"],"trait":"ballArea","v0":34,"v1":35,"x":-385,"curve":31.9608748015},{"vis":false,"color":"FFCCCC","bCoef":1,"cMask":["ball"],"trait":"ballArea","v0":36,"v1":37,"x":-385,"curve":-55.0670963503},{"vis":false,"color":"FFCCCC","bCoef":1,"cMask":["ball"],"trait":"ballArea","v0":38,"v1":39,"x":-385,"curve":30.1056948262},{"vis":false,"color":"CCCCFF","bCoef":1,"trait":"ballArea","v0":40,"v1":41,"x":385,"cMask":["ball"],"curve":48.8016671394},{"vis":false,"color":"CCCCFF","bCoef":1,"trait":"ballArea","v0":42,"v1":43,"x":385,"cMask":["ball"],"curve":-34.5238570872},{"vis":false,"color":"FFCCCC","bCoef":1,"trait":"ballArea","v0":44,"v1":45,"cMask":["ball"],"x":385,"curve":43.4541918718},{"vis":false,"color":"FFCCCC","bCoef":1,"trait":"ballArea","v0":46,"v1":47,"cMask":["ball"],"x":385,"curve":-35.5522115092}],"goals":[{"p0":[-376,65],"p1":[-376,-63],"team":"red"},{"p0":[377,63],"p1":[377,-65],"team":"blue","_selected":true}],"discs":[{"pos":[-370,64],"trait":"goalPost","color":"FFCCCC","bCoef":0.5},{"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"]}}}';
  72.  
  73.  
  74. room.setCustomStadium(mikic);
  75.  
  76. room.onStadiumChange = (newStadiumName, byPlayer) => {
  77. if (byPlayer.id !== 0) {
  78. room.setCustomStadium(mikic);
  79. }
  80. }
  81.  
  82. room.onPlayerBallKick = player => {
  83. updateAssistingPlayer(player);
  84.  
  85. let time = Date.now();
  86. let kick = { time, player };
  87. ball.kickedBy = kick;
  88. };
  89.  
  90. room.onTeamGoal = team => {
  91. let scorer;
  92.  
  93. if (ball.kickedBy && ball.touchedBy) {
  94. if (ball.kickedBy.time > ball.touchedBy.time) {
  95. scorer = ball.kickedBy.player;
  96. } else {
  97. scorer = ball.touchedBy.player;
  98. }
  99. } else if (ball.kickedBy) {
  100. scorer = ball.kickedBy.player;
  101. } else if (ball.touchedBy) {
  102. scorer = ball.touchedBy.player;
  103. }
  104.  
  105. if (scorer) {
  106. let ownGoal = scorer.team !== team;
  107. let assistOccured = ball.assistingPlayer && !ownGoal && ball.assistingPlayer.team === team && ball.assistingPlayer.id !== scorer.id;
  108.  
  109. if (config.showGoalInfo) {
  110. let message = `Gola ${ownGoal ? "samobójczego" : ""} zdobył gracz ${scorer.name}`;
  111. if (assistOccured) {
  112. message += ` (${ball.assistingPlayer.name})`;
  113. }
  114. sendMessage(message);
  115. }
  116.  
  117. if (ownGoal) {
  118. let score = ownGoals[scorer.name] || 0;
  119. ownGoals[scorer.name] = score + 1;
  120. } else {
  121. let score = goals[scorer.name] || 0;
  122. goals[scorer.name] = score + 1;
  123. }
  124.  
  125. if (assistOccured) {
  126. let score = assists[ball.assistingPlayer.name] || 0;
  127. assists[ball.assistingPlayer.name] = score + 1;
  128. }
  129. }
  130.  
  131. ball.kickedBy = null;
  132. ball.touchedBy = null;
  133. };
  134.  
  135. room.onPlayerChat = (player, message) => {
  136. if (message.startsWith(prefixes.cmd)) {
  137. if (!canPlayerInvokeCmd(player)) return false;
  138.  
  139. let showMessage = parseCmd(player, message.substring(1));
  140. return showMessage && (!isPlayerMuted(player) && config.chatEnabled || isSuperAdmin(player));
  141. }
  142.  
  143. return !isPlayerMuted(player) && config.chatEnabled || isSuperAdmin(player);
  144. };
  145.  
  146. room.onPlayerKicked = (kickedPlayer, reason, ban, byPlayer) => {
  147. if (isSuperAdmin(kickedPlayer) || authenticatedAdmins.includes(kickedPlayer.id) && !isSuperAdmin(byPlayer)) {
  148. if (ban)
  149. room.clearBans();
  150.  
  151. room.kickPlayer(byPlayer.id, "Tak się bawić nie będziemy", true);
  152. }
  153.  
  154. let banInfo = {};
  155. banInfo.banned = kickedPlayer.name;
  156. banInfo.admin = byPlayer.name;
  157. banInfo.reason = reason;
  158. banInfo.isBan = ban;
  159. banInfo.time = new Date();
  160.  
  161. if (!bans[byPlayer.id]) {
  162. bans[byPlayer.id] = [];
  163. }
  164. bans[byPlayer.id].unshift(banInfo);
  165.  
  166. if (!authenticatedAdmins.includes(byPlayer.id) && !isSuperAdmin(byPlayer)) {
  167. let playerBans = bans[byPlayer.id].filter(ban => ban.isBan);
  168.  
  169. if (playerBans.length >= 5) {
  170. let lastBan = playerBans[0];
  171. let banToCompare = playerBans[4];
  172. let dateDiff = lastBan.time - banToCompare.time;
  173. if (dateDiff <= 1000 * 60 * 5) {
  174. clearAllBans("Admina");
  175. room.kickPlayer(byPlayer.id, "żegnaj trollu", true);
  176. }
  177. }
  178. }
  179. };
  180.  
  181. room.onPlayerAdminChange = (changedPlayer, byPlayer) => {
  182. if (!changedPlayer.admin && (isSuperAdmin(changedPlayer) || authenticatedAdmins.includes(changedPlayer.id) && !isSuperAdmin(byPlayer))) {
  183. if (byPlayer !== null && byPlayer.name !== game.playerName) {
  184. room.setPlayerAdmin(changedPlayer.id, true);
  185. room.setPlayerAdmin(byPlayer.id, false);
  186.  
  187. sendMessage("Próba odebrania uprawnień adminowi wyższej rangi!");
  188. }
  189. }
  190. };
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199. room.onPlayerJoin = player => {
  200. room.sendChat("Welcome " + player.name + ', wpisz !komendy by poznać funkcje rooma!')
  201.  
  202. updateAdmins();
  203.  
  204.  
  205. if (config.muteNewPlayers) {
  206. mutePlayer(player);
  207. }
  208.  
  209. if (blackList.includes(player.name)) {
  210. room.kickPlayer(player.id, "Czarna lista proszę spierdalać !!!", true);
  211. }
  212.  
  213.  
  214. let conn = connections.find(a => a[1] === player.conn)
  215. if (conn) {
  216. room.kickPlayer(player.id, "Miejsce na towją reklame (2 karty)", false)
  217. } else {
  218.  
  219. connections.push([player.id, player.conn])
  220. }
  221.  
  222. };
  223.  
  224. room.onPlayerLeave = player => {
  225. updateAdmins();
  226. unsetPlayerAfk(player);
  227. unsetSuperAdmin(player);
  228.  
  229. if (player.team !== 0 && room.getScores()) {
  230. let players = room.getPlayerList().filter(player => player.team === 0 && !isPlayerAfk(player));
  231. players = players.filter(player => player.id !== 0);
  232. if (players.length) {
  233. room.pauseGame(true);
  234. sendMessage("Gracz z boiska opuścił serwer. Są dostępni gracze na ławce.");
  235. }
  236. }
  237.  
  238. connections = connections.filter(a => a[0] !== player.id)
  239. };
  240.  
  241.  
  242.  
  243.  
  244. room.onPlayerTeamChange = player => {
  245. if (player.id === 0) {
  246. room.setPlayerTeam(0, 0);
  247. }
  248.  
  249. if (player.team !== 0 && isPlayerAfk(player)) {
  250. sendMessage(`Gracz ${player.name} jest AFK`);
  251. room.pauseGame(true);
  252. }
  253. };
  254.  
  255. room.onGameTick = () => {
  256. let players = room.getPlayerList();
  257. let ballPosition = room.getBallPosition();
  258. let ballRadius = 10;
  259. let playerRadius = 15;
  260. let triggerDistance = ballRadius + playerRadius + 0.01;
  261.  
  262. for (let player of players) {
  263. if (!player.position) continue;
  264.  
  265. let distanceToBall = pointDistance(player.position, ballPosition);
  266. if (distanceToBall < triggerDistance) {
  267. updateAssistingPlayer(player);
  268.  
  269. let time = Date.now();
  270. let touch = { time, player };
  271. ball.touchedBy = touch;
  272. }
  273. }
  274. };
  275.  
  276. room.onGameStart = () => {
  277. ball.kickedBy = null;
  278. ball.touchedBy = null;
  279. ball.assistingPlayer = null;
  280.  
  281. let players = room.getPlayerList().filter(player => player.team !== 0 && isPlayerAfk(player));
  282. if (players.length === 1) {
  283. sendMessage(`Gracz ${players[0].name} jest AFK`);
  284. room.pauseGame(true);
  285. } else if (players.length > 1) {
  286. sendMessage(`Gracze ${players.map(player => player.name).join(", ")} są AFK`);
  287. room.pauseGame(true);
  288. }
  289. };
  290.  
  291. room.onGamePause = () => {
  292. nextPauseAction = false;
  293. };
  294.  
  295. room.onGameUnpause = () => {
  296. nextPauseAction = true;
  297. };
  298.  
  299. room.onGameStop = () => {
  300. showAfkPlayers();
  301. };
  302.  
  303. class CmdManager {
  304. constructor() {
  305. this.cmds = [];
  306. }
  307.  
  308. add(cmd) {
  309. this.cmds.push(cmd);
  310. }
  311.  
  312. remove(cmd) {
  313. let index = this.cmds.indexOf(cmd);
  314. if (index !== -1) {
  315. this.cmds.splice(index, 1);
  316. }
  317. }
  318.  
  319. findCmd(message) {
  320. for (let cmd of this.cmds) {
  321. let regex = cmd.getBaseRegex();
  322. if (regex.exec(message)) {
  323. return cmd;
  324. }
  325. }
  326.  
  327. return null;
  328. }
  329.  
  330. extractArguments(cmd, message) {
  331. let regex = cmd.getFullRegex();
  332. let match = regex.exec(message);
  333. if (match) {
  334. let args = [];
  335. for (let i = 1; match[i] !== undefined; i++) {
  336. args.push(match[i]);
  337. }
  338. return { args };
  339. }
  340.  
  341. return { error: cmd.getHelpText() };
  342. }
  343.  
  344. listAdminCmds() {
  345. let list = [];
  346. for (let cmd of this.cmds) {
  347. if (cmd.onlyAdmin) {
  348. list.push(prefixes.cmd + cmd.cmd);
  349. }
  350. }
  351.  
  352. return list;
  353. }
  354.  
  355. listPlayerCmds() {
  356. let list = [];
  357. for (let cmd of this.cmds) {
  358. if (!cmd.onlyAdmin && !cmd.onlySuperAdmin) {
  359. list.push(prefixes.cmd + cmd.cmd);
  360. }
  361. }
  362.  
  363. return list;
  364. }
  365. }
  366.  
  367. class Cmd {
  368. constructor(config, func) {
  369. this.cmd = config.cmd;
  370. this.params = config.params || null;
  371. this.paramsOptional = config.paramsOptional || false;
  372. this.showInChat = config.showInChat || false;
  373. this.onlyAdmin = config.onlyAdmin || false;
  374. this.onlySuperAdmin = config.onlySuperAdmin || false;
  375. this.helpText = config.helpText || null;
  376. this.func = func;
  377. }
  378.  
  379. canPlayerExecute(player) {
  380. if (this.onlySuperAdmin && !isSuperAdmin(player))
  381. return false;
  382. if (this.onlyAdmin && !player.admin)
  383. return false;
  384. return true;
  385. }
  386.  
  387. execute(args) {
  388. return this.func.apply(null, args);
  389. }
  390.  
  391. getHelpText() {
  392. let params = "";
  393. for (let param in this.params) {
  394. params += ` ${param}`;
  395. }
  396. let message = `Użyj ${prefixes.cmd}${this.cmd}${params}`;
  397. if (this.helpText) {
  398. message += ` (${this.helpText})`;
  399. }
  400.  
  401. return message;
  402. }
  403.  
  404. getBaseRegex() {
  405. return new RegExp(`^${this.cmd}\\b`);
  406. }
  407.  
  408. getFullRegex() {
  409. let list = "";
  410. if (this.paramsOptional) {
  411. list = "(?:";
  412. }
  413.  
  414. for (let param in this.params) {
  415. list += ` ${this.params[param]}`;
  416. }
  417.  
  418. if (this.paramsOptional) {
  419. list += ")?";
  420. }
  421.  
  422. return new RegExp(`^${this.cmd}${list}$`);
  423. }
  424. }
  425.  
  426. let setPlayerAfkCmd = new Cmd({ cmd: "afk", showInChat: true }, (invokedBy) => {
  427. if (!isPlayerAfk(invokedBy)) {
  428. setPlayerAfk(invokedBy);
  429. sendMessage(`Gracz ${invokedBy.name} zaraz wraca`, invokedBy);
  430. }
  431. });
  432.  
  433. let setPlayerBackCmd = new Cmd({ cmd: "jj", showInChat: true }, (invokedBy) => {
  434. unsetPlayerAfk(invokedBy);
  435. sendMessage(`Gracz ${invokedBy.name} jest z powrotem`, invokedBy);
  436. });
  437.  
  438. let listAfkPlayers = new Cmd({ cmd: "lafk", showInChat: true }, (invokedBy) => {
  439. showAfkPlayers(invokedBy);
  440. });
  441.  
  442. let mutePlayerByName = new Cmd({ cmd: "mute", params: { name: "(.+)" }, onlyAdmin: true }, (invokedBy, nameToMute) => {
  443. let players = room.getPlayerList().filter(player => player.name.includes(nameToMute));
  444.  
  445. if (players.length === 1) {
  446. process(players);
  447. } else if (!players.length) {
  448. sendMessage(`${nameToMute} nie został odnaleziony`);
  449. } else {
  450. players = players.filter(player => player.name === nameToMute);
  451. if (players.length === 1) {
  452. process(players);
  453. } else {
  454. sendMessage(`Znaleziono wielu graczy pasujących do wzorca ${nameToMute}`);
  455. }
  456. }
  457.  
  458. function process(players) {
  459. let player = players[0];
  460. if (isPlayerMuted(player)) {
  461. unmutePlayer(player);
  462. sendMessage(`${player.name} został odciszony przez ${invokedBy.name}`);
  463. } else {
  464. mutePlayer(player);
  465. sendMessage(`${player.name} został wyciszony przez ${invokedBy.name}`);
  466. }
  467. }
  468. });
  469.  
  470. let mutePlayerById = new Cmd({ cmd: "muteid", params: { id: "(\\d+)" }, onlyAdmin: true }, (invokedBy, idToMute) => {
  471. let player = room.getPlayerList().filter(player => player.id === Number(idToMute))[0];
  472.  
  473. if (player) {
  474. if (isPlayerMuted(player)) {
  475. unmutePlayer(player);
  476. sendMessage(`${player.name} został odciszony przez ${invokedBy.name}`);
  477. } else {
  478. mutePlayer(player);
  479. sendMessage(`${player.name} został wyciszony przez ${invokedBy.name}`);
  480. }
  481. } else {
  482. sendMessage(`Gracz o id ${idToMute} nie został znaleziony`);
  483. }
  484. });
  485.  
  486. let muteNewPlayers = new Cmd({ cmd: "mutenew", onlyAdmin: true }, (invokedBy) => {
  487. config.muteNewPlayers = !config.muteNewPlayers;
  488. if (config.muteNewPlayers) {
  489. sendMessage(`Chat został wyłączony dla nowych graczy przez ${invokedBy.name}`);
  490. }
  491. else {
  492. sendMessage(`Chat został włączony dla nowych graczy przez ${invokedBy.name}`);
  493. clearAllMutes();
  494. }
  495. });
  496.  
  497. let silentMutePlayerByName = new Cmd({ cmd: "smute", params: { name: "(.+)" }, onlyAdmin: true }, (invokedBy, nameToMute) => {
  498. let players = room.getPlayerList().filter(player => player.name.includes(nameToMute));
  499.  
  500. if (players.length === 1) {
  501. process(players);
  502. } else if (players.length > 1) {
  503. players = players.filter(player => player.name === nameToMute);
  504. if (players.length === 1) {
  505. process(players);
  506. }
  507. }
  508.  
  509. function process(players) {
  510. let player = players[0];
  511. if (isPlayerMuted(player)) {
  512. unmutePlayer(player);
  513. } else {
  514. mutePlayer(player);
  515. }
  516. }
  517. });
  518.  
  519. let silentMutePlayerById = new Cmd({ cmd: "smuteid", params: { id: "(\\d+)" }, onlyAdmin: true }, (invokedBy, idToMute) => {
  520. let player = room.getPlayerList().filter(player => player.id === Number(idToMute))[0];
  521.  
  522. if (player) {
  523. if (isPlayerMuted(player)) {
  524. unmutePlayer(player);
  525. } else {
  526. mutePlayer(player);
  527. }
  528. }
  529. });
  530.  
  531. let superAdminLogin = new Cmd({ cmd: `slogin ${config.adminPassword}` }, (invokedBy) => {
  532. if (!invokedBy.admin) {
  533. room.setPlayerAdmin(invokedBy.id, true);
  534. setSuperAdmin(invokedBy);
  535. }
  536. });
  537.  
  538. let adminLogin = new Cmd({ cmd: "login", params: { password: "(.+)" }, paramsOptional: true }, (invokedBy, password) => {
  539. if (!invokedBy.admin) {
  540.  
  541. let adminPassword = adminAccess[invokedBy.name];
  542. if (adminAccess[invokedBy.name] && adminPassword === password) {
  543. room.setPlayerAdmin(invokedBy.id, true);
  544. authenticatedAdmins.push(invokedBy.id);
  545. }
  546. }
  547. });
  548.  
  549. let clearBans = new Cmd({ cmd: "clearbans", onlyAdmin: true }, (invokedBy) => {
  550. clearAllBans(invokedBy.name);
  551. });
  552.  
  553. let clearMutes = new Cmd({ cmd: "clearmutes", onlyAdmin: true }, (invokedBy) => {
  554. clearAllMutes(invokedBy.name);
  555. });
  556.  
  557. let toggleChat = new Cmd({ cmd: "togglechat", onlyAdmin: true }, (invokedBy) => {
  558. if (config.chatEnabled) {
  559. sendMessage(`Chat został wyłączony przez ${invokedBy.name}`);
  560. config.chatEnabled = false;
  561. } else {
  562. config.chatEnabled = true;
  563. sendMessage(`Chat został włączony przez ${invokedBy.name}`);
  564. }
  565. });
  566.  
  567. let muteAll = new Cmd({ cmd: "muteall", onlyAdmin: true }, (invokedBy) => {
  568. const players = room.getPlayerList().filter(player => player.id !== 0);
  569. for (let player of players) {
  570. if (player.name !== invokedBy.name)
  571. mutePlayer(player);
  572. }
  573. sendMessage(`Wszyscy gracze zostali wyciszeni przez ${invokedBy.name}`);
  574. });
  575.  
  576. let clearNoCmdPlayers = new Cmd({ cmd: "clearnocmd", onlyAdmin: true }, (invokedBy) => {
  577. clearAllNoCmdPlayers(invokedBy.name);
  578. });
  579.  
  580.  
  581. let listTopOGPlayers = new Cmd({ cmd: "otop10", showInChat: true }, (invokedBy) => {
  582. let props = Object.keys(ownGoals).map(function (key) {
  583. return { key: key, value: this[key] };
  584. }, ownGoals);
  585.  
  586. props.sort((p1, p2) => p2.value - p1.value);
  587. let top10 = props.splice(0, 10);
  588. let pos = 1;
  589. if (top10.length) {
  590. sendMessage("Top10 Strzelców do własnej bramki: ", invokedBy);
  591. }
  592. while (top10.length) {
  593. let tmp = top10.splice(0, 5);
  594. let message = tmp.map(e => `${pos++}. ${e.key}: ${e.value}`).join(", ");
  595. sendMessage(message, invokedBy);
  596. }
  597. });
  598.  
  599. let listTopPlayers = new Cmd({ cmd: "top10", showInChat: true }, (invokedBy) => {
  600. let props = Object.keys(goals).map(function (key) {
  601. return { key: key, value: this[key] };
  602. }, goals);
  603.  
  604. props.sort((p1, p2) => p2.value - p1.value);
  605. let top10 = props.splice(0, 10);
  606. let pos = 1;
  607. if (top10.length) {
  608. sendMessage("Top10 Strzelców: ", invokedBy);
  609. }
  610. while (top10.length) {
  611. let tmp = top10.splice(0, 5);
  612. let message = tmp.map(e => `${pos++}. ${e.key}: ${e.value}`).join(", ");
  613. sendMessage(message, invokedBy);
  614. }
  615. });
  616.  
  617. let listTopAssistingPlayers = new Cmd({ cmd: "atop10", showInChat: true }, (invokedBy) => {
  618. let props = Object.keys(assists).map(function (key) {
  619. return { key: key, value: this[key] };
  620. }, assists);
  621.  
  622. props.sort((p1, p2) => p2.value - p1.value);
  623. let top10 = props.splice(0, 10);
  624. let pos = 1;
  625. if (top10.length) {
  626. sendMessage("Top10 Asystujących: ", invokedBy);
  627. }
  628. while (top10.length) {
  629. let tmp = top10.splice(0, 5);
  630. let message = tmp.map(e => `${pos++}. ${e.key}: ${e.value}`).join(", ");
  631. sendMessage(message, invokedBy);
  632. }
  633. });
  634.  
  635. let listPlayerGoals = new Cmd({ cmd: "goals", params: { name: "(.+)" }, showInChat: true }, (invokedBy, playerName) => {
  636. let scorers = Object.keys(goals).filter(scorer => scorer.includes(playerName));
  637. let score;
  638. let player = null;
  639.  
  640. if (scorers.length === 1) {
  641. score = goals[scorers[0]];
  642. player = scorers[0];
  643. } else if (!scorers.length) {
  644. score = 0;
  645. } else {
  646. scorers = scorers.filter(scorer => scorer === playerName);
  647. if (scorers.length === 1) {
  648. score = goals[scorers[0]];
  649. player = scorers[0];
  650. } else {
  651. return sendMessage(`Znaleziono wielu graczy pasujących do wzorca ${playerName}`);
  652. }
  653. }
  654.  
  655. player = player || playerName;
  656. sendMessage(`Gracz ${player} bramek ${score}`, invokedBy);
  657. });
  658.  
  659. let listPlayerOwnGoals = new Cmd({ cmd: "owngoals", params: { name: "(.+)" }, showInChat: true }, (invokedBy, playerName) => {
  660. let scorers = Object.keys(ownGoals).filter(scorer => scorer.includes(playerName));
  661. let score;
  662. let player = null;
  663.  
  664. if (scorers.length === 1) {
  665. score = ownGoals[scorers[0]];
  666. player = scorers[0];
  667. } else if (!scorers.length) {
  668. score = 0;
  669. } else {
  670. scorers = scorers.filter(scorer => scorer === playerName);
  671. if (scorers.length === 1) {
  672. score = ownGoals[scorers[0]];
  673. player = scorers[0];
  674. } else {
  675. return sendMessage(`Znaleziono wielu graczy pasujących do wzorca ${playerName}`);
  676. }
  677. }
  678.  
  679. player = player || playerName;
  680. sendMessage(`Gracz ${player} bramek samobójczych ${score}`, invokedBy);
  681. });
  682.  
  683. let listPlayerAssists = new Cmd({ cmd: "assists", params: { name: "(.+)" }, showInChat: true }, (invokedBy, playerName) => {
  684. let scorers = Object.keys(assists).filter(scorer => scorer.includes(playerName));
  685. let score;
  686. let player = null;
  687.  
  688. if (scorers.length === 1) {
  689. score = assists[scorers[0]];
  690. player = scorers[0];
  691. } else if (!scorers.length) {
  692. score = 0;
  693. } else {
  694. scorers = scorers.filter(scorer => scorer === playerName);
  695. if (scorers.length === 1) {
  696. score = assists[scorers[0]];
  697. player = scorers[0];
  698. } else {
  699. return sendMessage(`Znaleziono wielu graczy pasujacych do wzorca ${playerName}`);
  700. }
  701. }
  702.  
  703. player = player || playerName;
  704. sendMessage(`Gracz ${player} asyst ${score}`, invokedBy);
  705. });
  706.  
  707. let listPlayerCmds = new Cmd({ cmd: "komendy", showInChat: true }, (invokedBy) => {
  708. let list = cmdManager.listPlayerCmds();
  709. list = list.filter(cmd => !cmd.includes("login"));
  710. while (list.length) {
  711. let cmds = list.splice(0, 11);
  712. sendMessage(cmds.join(" "), invokedBy);
  713. }
  714. });
  715.  
  716. let listAdminCmds = new Cmd({ cmd: "akomendy", onlyAdmin: true }, (invokedBy) => {
  717. let list = cmdManager.listAdminCmds();
  718. list = list.filter(cmd => !cmd.includes("login"));
  719. while (list.length) {
  720. let cmds = list.splice(0, 8);
  721. sendMessage(cmds.join(" "), invokedBy);
  722. }
  723. });
  724.  
  725. let freeSlotCmd = new Cmd({ cmd: "slot", onlyAdmin: true }, (invokedBy) => {
  726. freeSlot(invokedBy);
  727. });
  728.  
  729. let listPlayers = new Cmd({ cmd: "players", paramsOptional: true, params: { pattern: "(.+)" }, onlyAdmin: true }, (invokedBy, pattern) => {
  730. let players = room.getPlayerList();
  731. if (pattern)
  732. players = players.filter(player => player.name.includes(pattern));
  733.  
  734. for (let player of players) {
  735. sendMessage(`Gracz ${player.name}, id ${player.id}`);
  736. }
  737. });
  738.  
  739. let goalInfoCmd = new Cmd({ cmd: "showgoal", onlyAdmin: true }, (invokedBy) => {
  740. config.showGoalInfo = !config.showGoalInfo;
  741. sendMessage(`Informacje o golu zostały ${config.showGoalInfo ? "włączone" : "wyłączone"} przez ${invokedBy.name}`);
  742. });
  743.  
  744. let giveSuperadmin = new Cmd({ cmd: "givesa", params: { name: "(.+)" }, onlySuperAdmin: true }, (invokedBy, playerName) => {
  745. const player = room.getPlayerList().filter(player => player.name === playerName)[0];
  746. if (player && !isSuperAdmin(player)) {
  747. setSuperAdmin(player);
  748. sendMessage("");
  749. }
  750. });
  751.  
  752. let stopCmdForPlayerByName = new Cmd({
  753. cmd: "nocmd", params: { name: "(.+)" }, onlyAdmin: true, helpText: "blokuje komendy dla gracza"
  754. }, (invokedBy, playerName) => {
  755. let players = room.getPlayerList().filter(player => player.name.includes(playerName));
  756.  
  757. if (players.length === 1) {
  758. process(players);
  759. } else if (!players.length) {
  760. sendMessage(`${playerName} nie został odnaleziony`);
  761. } else {
  762. players = players.filter(player => player.name === playerName);
  763. if (players.length === 1) {
  764. process(players);
  765. } else {
  766. sendMessage(`Znaleziono wielu graczy pasujących do wzorca ${playerName}`);
  767. }
  768. }
  769.  
  770. function process(players) {
  771. let player = players[0];
  772. if (player.id === invokedBy.id) {
  773. return sendMessage("Nie możesz pozbawić sam siebie możliwości wykonywania komend");
  774. }
  775. if (canPlayerInvokeCmd(player)) {
  776. blockCmdForPlayer(player);
  777. sendMessage(`Gracz ${player.name} został pozbawiony możliwości wywoływania komend przez ${invokedBy.name}`);
  778. } else {
  779. unblockCmdForPlayer(player);
  780. sendMessage(`Gracz ${player.name} otrzymał możliwość wywoływania komend przez ${invokedBy.name}`);
  781. }
  782. }
  783. });
  784.  
  785. let stopCmdForPlayerById = new Cmd({
  786. cmd: "nocmdid", params: { player_id: "(\\d+)" }, onlyAdmin: true, helpText: "blokuje komendy dla gracza"
  787. }, (invokedBy, playerId) => {
  788. let player = room.getPlayerList().filter(player => player.id === Number(playerId))[0];
  789.  
  790. if (player) {
  791. if (canPlayerInvokeCmd(player)) {
  792. blockCmdForPlayer(player);
  793. sendMessage(`Gracz ${player.name} został pozbawiony możliwości wywoływania komend przez ${invokedBy.name}`);
  794. } else {
  795. unblockCmdForPlayer(player);
  796. sendMessage(`Gracz ${player.name} otrzymał możliwość wywoływania komend przez ${invokedBy.name}`);
  797. }
  798. } else {
  799. sendMessage(`Gracz o ID ${playerId} nie został odnaleziony`);
  800. }
  801. });
  802.  
  803. let pauseGameCmd = new Cmd({ cmd: "p", showInChat: true }, (invokedBy) => {
  804. if (invokedBy.team !== 0) {
  805. if (nextPauseAction) {
  806. sendMessage(`Gra zatrzymana przez gracza ${invokedBy.name}`);
  807. } else {
  808. sendMessage(`Gra wznowiona przez gracza ${invokedBy.name}`);
  809. }
  810. room.pauseGame(nextPauseAction);
  811. }
  812. });
  813.  
  814. let randomTeams = new Cmd({
  815. cmd: "random", params: { team_size: "(\\d+)" }, showInChat: true, onlyAdmin: true
  816. }, (invokedBy, playersInTeam) => {
  817. playersInTeam = Number(playersInTeam);
  818. let players = room.getPlayerList().filter(player => player.id !== 0);
  819. players = players.filter(player => player.team !== 0 || !isPlayerAfk(player));
  820.  
  821. if (playersInTeam * 2 > players.length) {
  822. return sendMessage(`Nie ma wystarczającej liczby graczy (pomijając graczy AFK) aby wylosować ${playersInTeam} osobowe drużyny`);
  823. }
  824.  
  825. const freePlayers = players.filter(player => player.team === 0);
  826. const redPlayers = players.filter(player => player.team === 1);
  827. const bluePlayers = players.filter(player => player.team === 2);
  828.  
  829. if (redPlayers.length > playersInTeam || bluePlayers.length > playersInTeam) {
  830. return sendMessage(`Drużyny są liczniejsze niż ${playersInTeam} graczy, musisz przenieść zawodników na ławkę`);
  831. }
  832.  
  833. function getFreePlayer() {
  834. let randomId = getRandomInt(0, freePlayers.length - 1);
  835. let player = freePlayers[randomId];
  836. freePlayers.splice(randomId, 1);
  837. return player;
  838. }
  839.  
  840. while (freePlayers && (redPlayers.length < playersInTeam || bluePlayers.length < playersInTeam)) {
  841. let message = "";
  842.  
  843. if (redPlayers.length < playersInTeam) {
  844. let player = getFreePlayer();
  845. room.setPlayerTeam(player.id, 1);
  846. redPlayers.push(player);
  847. message += `${player.name} ==> Red, `;
  848. }
  849.  
  850. if (bluePlayers.length < playersInTeam) {
  851. let player = getFreePlayer();
  852. room.setPlayerTeam(player.id, 2);
  853. bluePlayers.push(player);
  854. message += `${player.name} ==> Blue, `;
  855. }
  856.  
  857. sendMessage(message);
  858. }
  859. });
  860.  
  861. cmdManager = new CmdManager();
  862. cmdManager.add(mutePlayerByName);
  863. cmdManager.add(mutePlayerById);
  864. cmdManager.add(silentMutePlayerByName);
  865. cmdManager.add(silentMutePlayerById);
  866. cmdManager.add(superAdminLogin);
  867. cmdManager.add(adminLogin);
  868. cmdManager.add(clearBans);
  869. cmdManager.add(listPlayerGoals);
  870. cmdManager.add(listPlayerCmds);
  871. cmdManager.add(listAdminCmds);
  872. cmdManager.add(freeSlotCmd);
  873. cmdManager.add(randomTeams);
  874. cmdManager.add(listPlayers);
  875. cmdManager.add(listTopPlayers);
  876. cmdManager.add(goalInfoCmd);
  877. cmdManager.add(giveSuperadmin);
  878. cmdManager.add(stopCmdForPlayerByName);
  879. cmdManager.add(stopCmdForPlayerById);
  880. cmdManager.add(clearMutes);
  881. cmdManager.add(clearNoCmdPlayers);
  882. cmdManager.add(muteAll);
  883. cmdManager.add(toggleChat);
  884. cmdManager.add(muteNewPlayers);
  885. cmdManager.add(listPlayerAssists);
  886. cmdManager.add(listTopAssistingPlayers);
  887. cmdManager.add(setPlayerAfkCmd);
  888. cmdManager.add(setPlayerBackCmd);
  889. cmdManager.add(listAfkPlayers);
  890. cmdManager.add(listTopOGPlayers);
  891. cmdManager.add(listPlayerOwnGoals);
  892. cmdManager.add(pauseGameCmd);
  893.  
  894. function parseCmd(player, message) {
  895. let cmd = cmdManager.findCmd(message);
  896. if (cmd) {
  897. if (cmd.canPlayerExecute(player)) {
  898. let response = cmdManager.extractArguments(cmd, message);
  899. if (response.error) {
  900. sendMessage(response.error, player);
  901. } else {
  902. let args = response.args;
  903. args.unshift(player);
  904. cmd.execute(args);
  905. }
  906. return cmd.showInChat;
  907. }
  908.  
  909. return false;
  910. }
  911.  
  912. return !message.includes("login");
  913. }
  914.  
  915. function sendMessage(message, initiator) {
  916. if ((!initiator || !isPlayerMuted(initiator)) && (config.chatEnabled || initiator && isSuperAdmin(initiator))) {
  917. room.sendChat(prefixes.message + message);
  918. }
  919. }
  920.  
  921. function isPlayerMuted(player) {
  922. return mutedPlayers.includes(player.id);
  923. }
  924.  
  925. function mutePlayer(player) {
  926. mutedPlayers.push(player.id);
  927. }
  928.  
  929. function unmutePlayer(player) {
  930. let index = mutedPlayers.indexOf(player.id);
  931. if (index !== -1) {
  932. mutedPlayers.splice(index, 1);
  933. }
  934. }
  935.  
  936. function isSuperAdmin(player) {
  937. return superAdmins.includes(player.id);
  938. }
  939.  
  940. function setSuperAdmin(player) {
  941. superAdmins.push(player.id);
  942. }
  943.  
  944. function unsetSuperAdmin(player) {
  945. let index = superAdmins.indexOf(player.id);
  946. if (index !== -1) {
  947. superAdmins.splice(index, 1);
  948. }
  949. }
  950.  
  951. function canPlayerInvokeCmd(player) {
  952. return !noCmdPlayers.includes(player.id);
  953. }
  954.  
  955. function blockCmdForPlayer(player) {
  956. noCmdPlayers.push(player.id);
  957. }
  958.  
  959. function unblockCmdForPlayer(player) {
  960. let index = noCmdPlayers.indexOf(player.id);
  961. if (index !== -1) {
  962. noCmdPlayers.splice(index, 1);
  963. }
  964. }
  965.  
  966.  
  967.  
  968. function updateAdmins() {
  969. // Get all players except the host (id = 0 is always the host)
  970. var players = room.getPlayerList().filter((player) => player.id != 0);
  971. if (players.length == 0) return; // No players left, do nothing.
  972. if (players.find((player) => player.admin) != null) return; // There's an admin left so do nothing.
  973. room.setPlayerAdmin(players[0].id, true); // Give admin to the first non admin player in the list
  974. }
  975.  
  976. function freeSlot(invokedBy) {
  977. const players = room.getPlayerList().filter(player => player.id !== 0);
  978. if (players.length !== game.maxPlayers) return;
  979.  
  980. for (let player of players) {
  981. if (player.team === 0 && !player.admin && !isSuperAdmin(player)) {
  982. return room.kickPlayer(player.id, "Potrzebny slot");
  983. }
  984. }
  985.  
  986. for (let player of players) {
  987. if (!player.admin && !isSuperAdmin(player)) {
  988. return room.kickPlayer(player.id, "Potrzebny slot");
  989. }
  990. }
  991.  
  992. for (let player of players) {
  993. if (!isSuperAdmin(player)) {
  994. if (invokedBy !== undefined && invokedBy.id !== player.id) {
  995. return room.kickPlayer(player.id, "Potrzebny slot");
  996. }
  997. }
  998. }
  999.  
  1000. sendMessage("Musisz ręcznie wyrzucić gracza z pokoju");
  1001. console.log("You must kick player manually, all players are privileged");
  1002. }
  1003.  
  1004. function getRandomInt(min, max) {
  1005. return Math.floor(Math.random() * (max - min + 1)) + min;
  1006. }
  1007.  
  1008. function clearAllBans(initiator) {
  1009. room.clearBans();
  1010. sendMessage(`Bany zostały skasowane przez ${initiator}`);
  1011. }
  1012.  
  1013. function clearAllMutes(initiator) {
  1014. mutedPlayers = [];
  1015. if (initiator) {
  1016. sendMessage(`Wszyscy wyciszeni gracze zostali odciszeni przez ${initiator}`);
  1017. }
  1018. }
  1019.  
  1020. function clearAllNoCmdPlayers(initiator) {
  1021. noCmdPlayers = [];
  1022. sendMessage(`Wszyscy gracze bez możliwości używania komend dostali ją z powrotem od ${initiator}`);
  1023. }
  1024.  
  1025. function isPlayerAfk(player) {
  1026. return afkPlayers.includes(player.id);
  1027. }
  1028.  
  1029. function setPlayerAfk(player) {
  1030. afkPlayers.push(player.id);
  1031. if (player.team !== 0) {
  1032. room.setPlayerTeam(player.id, 0);
  1033. }
  1034. }
  1035.  
  1036. function unsetPlayerAfk(player) {
  1037. let index = afkPlayers.indexOf(player.id);
  1038. if (index !== -1) {
  1039. afkPlayers.splice(index, 1);
  1040. }
  1041. }
  1042.  
  1043. function updateAssistingPlayer(initiatingPlayer) {
  1044. let candidate = null;
  1045.  
  1046. if (ball.kickedBy && ball.touchedBy) {
  1047. if (ball.kickedBy.time > ball.touchedBy.time) {
  1048. candidate = ball.kickedBy.player;
  1049. } else {
  1050. candidate = ball.touchedBy.player;
  1051. }
  1052. } else if (ball.kickedBy) {
  1053. candidate = ball.kickedBy.player;
  1054. } else if (ball.touchedBy) {
  1055. candidate = ball.touchedBy.player;
  1056. }
  1057.  
  1058. if (candidate && candidate.id !== initiatingPlayer.id) {
  1059. ball.assistingPlayer = candidate;
  1060. }
  1061. }
  1062.  
  1063. function showAfkPlayers(invokedBy) {
  1064. let players = room.getPlayerList().filter(player => isPlayerAfk(player));
  1065.  
  1066. let line = players.length ? "Gracze AFK: " : "Aktualnie nie ma graczy zadeklarowanych AFK";
  1067. while (players.length) {
  1068. let tmp = players.splice(0, 5);
  1069. line += tmp.map(player => player.name).join(", ");
  1070. sendMessage(line, invokedBy);
  1071. line = "";
  1072. }
  1073. }
  1074.  
  1075. function pointDistance(p1, p2) {
  1076. let d1 = p1.x - p2.x;
  1077. let d2 = p1.y - p2.y;
  1078. return Math.sqrt(d1 * d1 + d2 * d2);
  1079. }
  1080.  
  1081. function download(data, filename, type) {
  1082. var file = new Blob([data], { type: type });
  1083. var a = document.createElement("a"),
  1084. url = URL.createObjectURL(file);
  1085. a.href = url;
  1086. a.download = filename;
  1087. document.body.appendChild(a);
  1088. a.click();
  1089. setTimeout(function () {
  1090. document.body.removeChild(a);
  1091. window.URL.revokeObjectURL(url);
  1092. }, 0);
  1093. }
  1094.  
  1095. function backupServerData() {
  1096. let data = {};
  1097. data.goals = goals;
  1098. data.assists = assists;
  1099. data.ownGoals = ownGoals;
  1100. data.bans = bans;
  1101.  
  1102. let jsonData = JSON.stringify(data);
  1103. download(jsonData, "server_stats.txt", "text/plain");
  1104. }
  1105.  
  1106. function restoreServerData(dataContent) {
  1107. let data = JSON.parse(dataContent);
  1108. if (data.goals) {
  1109. goals = data.goals;
  1110. }
  1111. if (data.assists) {
  1112. assists = data.assists;
  1113. }
  1114. if (data.ownGoals) {
  1115. ownGoals = data.ownGoals;
  1116. }
  1117. if (data.bans) {
  1118. bans = data.bans;
  1119. }
  1120. }
  1121.  
  1122. function showNotificationAboutAFK() {
  1123. sendMessage("Użyj !afk aby zasygnalizować nieobecność");
  1124. let delay = 500;
  1125. setTimeout(() => {
  1126. sendMessage("Wpisz !jj aby oznajmić powrót");
  1127. setTimeout(() => {
  1128. sendMessage("Aby zobaczyć kto jest AFK wprowadź !lafk");
  1129. }, delay)
  1130. }, delay)
  1131. }
  1132.  
  1133.  
  1134. let clearBansInterval = setInterval(clearAllBans, 1000 * 60 * 60, "Arbitra");
  1135. let clearMutesInterval = setInterval(clearAllMutes, 1000 * 60 * 60, "Arbitra");
  1136. let clearNoCmdInterval = setInterval(clearAllNoCmdPlayers, 1000 * 60 * 60, "Arbitra");
  1137.  
  1138.  
  1139. let afkNotificationInterval = setInterval(showNotificationAboutAFK, 1000 * 60 * 15);
  1140.  
  1141. function kickAll() {
  1142. room.getPlayerList().forEach(function (player) {
  1143. if (player.id != 0) {
  1144. room.kickPlayer(player.id, 'Hasło bezpieczeństwa aktywowane!!', true);
  1145. }
  1146. });
  1147. }
  1148.  
  1149. let backupServerDataInterval = setInterval(backupServerData, 10000 * 60 * 30);
  1150. /*goals["nick"] = 0; ownGoals["nick"] = 0; assists["nick"] = 0*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement