Advertisement
cellow

hand staty (bl)

Jul 21st, 2019
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 83.13 KB | None | 0 0
  1. var roomName = "HandBall 4v4 cellow";
  2. var maxPlayers = 1;
  3. var playerName = "REF";
  4. var roomPublic;
  5.  
  6.  
  7. var script = document.createElement('script');
  8. script.src = 'https://code.jquery.com/jquery-1.11.0.min.js';
  9. script.type = 'text/javascript';
  10. document.getElementsByTagName('head')[0].appendChild(script);
  11. var iframedoc = document.getElementsByTagName('iframe')[0].contentWindow.document;
  12. var welcome = document.createElement("div");
  13. document.getElementsByTagName('iframe')[0].contentWindow.document.body.appendChild(welcome);
  14. welcome.innerHTML = '<h2>Welcome to AutoRoom by GrzeWho start-up settings page.</h2> <br/> <h3>To create a room, enter the room name, maximum players amount, and the name of the host player, then press the button. <br/></h3>';
  15. welcome.innerHTML += 'Room name: <input type="text" id="roomname"><br>';
  16. welcome.innerHTML += 'Host player name: <input type="text" id="hostname"><br>';
  17. welcome.innerHTML += 'Number of players: <input type="text" id="number"><br>';
  18. welcome.innerHTML += 'Private room? <input type="checkbox" id="vis">';
  19. welcome.innerHTML += '<button type="button" id="myBtn">Create a room!</button><br>';
  20. welcome.innerHTML += 'This room supports loading and saving statistics through a file. Type in !savetofile in-game to generate a link, then click it to download. <br>';
  21. iframedoc.getElementById("myBtn").addEventListener("click", function()
  22. {
  23. roomName = iframedoc.getElementById("roomname").value;
  24. maxPlayers = parseInt(iframedoc.getElementById("number").value);
  25.  
  26. playerName = iframedoc.getElementById("hostname").value;
  27. if(!iframedoc.getElementById("vis").checked)
  28. {
  29. roomPublic = true;
  30. }else roomPublic = false;
  31. if(isNaN(maxPlayers))
  32. {
  33. console.error("Please enter a valid number in the number of players field | Liczba graczy musi być liczbą.");
  34. }else{
  35. createRoom();
  36. welcome.innerHTML = 'This room supports loading and saving statistics through a file. Type in !savetofile in-game to generate a link, then click it to download. <br>';
  37. welcome.innerHTML += "You can load a file containing the room statistics that you want to include.";
  38. }
  39. });
  40.  
  41. function createRoom()
  42. {
  43. var officialRSHLHost = false;
  44.  
  45. var stadiumWidth = 1150;
  46. var stadiumHeight = 600;
  47. var radiusBall = 9.8;
  48. var throwInLeeway = 400;
  49. var greenLine = 510;
  50.  
  51. var triggerDistance = radiusBall + 15 + 0.01;
  52. var outLineY = stadiumWidth - (radiusBall / 2) + 6;
  53. stadiumWidth += (radiusBall / 2) + 6;
  54. stadiumHeight += (radiusBall / 2) + 6;
  55.  
  56. var Team = {
  57. SPECTATORS: 0,
  58. RED: 1,
  59. BLUE: 2
  60. };
  61. var lastScores = 0;
  62. var lastTeamTouched = 0;
  63. var lineBallPosition;
  64. var exitingPos = null;
  65. var previousBallPos;
  66. var assistingTouch = "";
  67. var lastPlayerTouched = "";
  68.  
  69. var backMSG = false;
  70. var lastCall;
  71. var isBallUp = false;
  72. var crossed = false;
  73. var lat = 52;
  74. var long = 21;
  75. var ended = false;
  76. var isBallKickedOutside = false;
  77. var invMass = 1.05;
  78. var previousPlayerTouched;
  79. var RSHLMap;
  80. var room = HBInit({
  81. roomName: roomName,
  82. maxPlayers: maxPlayers,
  83. public: roomPublic,
  84. playerName: playerName,
  85. geo: {
  86. "code": "SO",
  87. "lat": lat,
  88. "lon": long
  89. }
  90. });
  91. var lineCrossedPlayers = [{
  92. name: "temp",
  93. times: 0
  94. }];
  95. var goalsPlayers = [{
  96. name: "temp",
  97. times: 0
  98. }];
  99. var assistsPlayers = [{
  100. name: "temp",
  101. times: 0
  102. }];
  103. var matchesPlayers = [{
  104. name: "temp",
  105. times: 0
  106. }];
  107. var winsPlayers = [{
  108. name: "temp",
  109. times: 0
  110. }];
  111. var cleanSheets = [{
  112. name: "temp",
  113. times: 0,
  114. matches: 0,
  115. goals: 0
  116. }];
  117. var currentGKRed = [{
  118. name: "temp",
  119. times: 0,
  120. average: 1500
  121. }];
  122. var currentGKBlue = [{
  123. name: "temp",
  124. times: 0,
  125. average: -1500
  126. }];
  127. var chatLog = [{
  128. player: "",
  129. message: ""
  130. }];
  131. room.setScoreLimit(3);
  132. room.setTimeLimit(5);
  133.  
  134. room.setTeamsLock(true);
  135. var filterOn = false;
  136. var safeOn = false;
  137. var scores;
  138. var blueConsecutive = 0;
  139. var redConsecutive = 0;
  140. var redGK;
  141. var blueGK;
  142. var registeredPlayers = [{name: "cellow", pass: "capoplaza20", auth: false}, {name: "marO", pass: "siemabyku", auth: false}, {name: "Soł", pass: "b0gacz", auth: false}, {name: "bless", pass: "blessinho3477", auth: false}];
  143. var previousTeamTouched;
  144. var afkList = new Array;
  145. var activeList = new Array;
  146. var possessionRed = 0;
  147. var possessionBlue = 0;
  148. var mapSettings = [0.5, 0.5, 0.96, 0.12, 0.07, 0.96, 5.65, 1.05, 9.8];
  149. editMap();
  150. room.setCustomStadium(RSHLMap);
  151.  
  152. room.onTeamGoal = function(team) {
  153. var players = room.getPlayerList();
  154. var goal = 0;
  155. var found = false;
  156. setTimeout(function() {
  157. lastScores = room.getScores().red + room.getScores().blue;
  158. }, 1000);
  159.  
  160. if (!officialRSHLHost && players.length > 7) {
  161. if(team==Team.RED)
  162. {
  163. found = false;
  164. for (var j = 0; j < cleanSheets.length; j++) {
  165. if (cleanSheets[j].name == blueGK.name) {
  166. cleanSheets[j].goals = cleanSheets[j].goals + 1;
  167. found = true;
  168. }
  169.  
  170. }
  171. if (!found) {
  172. cleanSheets.push({
  173. name: blueGK.name,
  174. times: 0,
  175. goals: 1,
  176. matches: 0
  177. });
  178. found = false;
  179. }
  180. }else
  181. {
  182. found = false;
  183. for (var j = 0; j < cleanSheets.length; j++) {
  184. if (cleanSheets[j].name == redGK.name) {
  185. cleanSheets[j].goals = cleanSheets[j].goals + 1;
  186. found = true;
  187. }
  188.  
  189. }
  190. if (!found) {
  191. cleanSheets.push({
  192. name: redGK.name,
  193. times: 0,
  194. goals: 1,
  195. matches: 0
  196. });
  197. found = false;
  198. }
  199. }
  200. for (var i = 0; i < players.length; i++) {
  201. if (players[i].name == lastPlayerTouched.name) {
  202. if (players[i].team == team) {
  203. found = false;
  204. for (var j = 0; j < goalsPlayers.length; j++) {
  205. if (goalsPlayers[j].name == players[i].name) {
  206. goalsPlayers[j].times = goalsPlayers[j].times + 1;
  207. found = true;
  208. goal = goalsPlayers[j].times;
  209.  
  210. }
  211.  
  212. }
  213. if (!found) {
  214. goalsPlayers.push({
  215. name: players[i].name,
  216. times: 1
  217. });
  218. goal = 1;
  219. }
  220. if (players[i].name != assistingTouch.name && assistingTouch.team == team) {
  221. found = false;
  222. for (var j = 0; j < assistsPlayers.length; j++) {
  223. if (assistsPlayers[j].name == assistingTouch.name) {
  224. assistsPlayers[j].times = assistsPlayers[j].times + 1;
  225. found = true;
  226. assist = assistsPlayers[j].times;
  227. }
  228.  
  229. }
  230. if (!found) {
  231. assistsPlayers.push({
  232. name: assistingTouch.name,
  233. times: 1
  234. });
  235. assist = 1;
  236. }
  237. room.sendChat("Goal - Scored by " + players[i].name + " {" + goal + "}. Assist by " + assistingTouch.name + " {" + assist + "}");
  238. assistingTouch = "";
  239. lastPlayerTouched = "";
  240.  
  241. } else {
  242. room.sendChat("Goal - Scored by " + players[i].name + " {" + goal + "}");
  243. assistingTouch = "";
  244. lastPlayerTouched = "";
  245. }
  246.  
  247. } else if (team == 2 && lastPlayerTouched.name == redGK.name && previousPlayerTouched.team == team) {
  248. found = false;
  249. for (var j = 0; j < goalsPlayers.length; j++) {
  250. if (goalsPlayers[j].name == previousPlayerTouched.name) {
  251. goalsPlayers[j].times = goalsPlayers[j].times + 1;
  252. found = true;
  253. goal = goalsPlayers[j].times;
  254.  
  255. }
  256. }
  257. if (!found) {
  258. goalsPlayers.push({
  259. name: previousPlayerTouched.name,
  260. times: 1
  261. });
  262. goal = 1;
  263. }
  264. room.sendChat("Ball touched by the GK. Goal scored by " + previousPlayerTouched.name + " {" + goal + "}");
  265. } else if (team == 1 && lastPlayerTouched.name == blueGK.name && previousPlayerTouched.team == team) {
  266. found = false;
  267. for (var j = 0; j < goalsPlayers.length; j++) {
  268. if (goalsPlayers[j].name == previousPlayerTouched.name) {
  269. goalsPlayers[j].times = goalsPlayers[j].times + 1;
  270. found = true;
  271. goal = goalsPlayers[j].times;
  272.  
  273. }
  274. }
  275. if (!found) {
  276. goalsPlayers.push({
  277. name: previousPlayerTouched.name,
  278. times: 1
  279. });
  280. goal = 1;
  281. }
  282. room.sendChat("Ball touched by the GK. Goal scored by " + previousPlayerTouched.name + " {" + goal + "}")
  283. } else {
  284. room.sendChat("OWN GOAL!");
  285. }
  286.  
  287.  
  288. }
  289. }
  290.  
  291. } else {
  292. room.sendChat("Goal. Not enough players - not added to the stats.");
  293. }
  294. }
  295.  
  296. room.onPlayerLeave = function(player) {
  297. console.log(". " + player.name + " # " + player.id + " has left");
  298. if (afkList.includes(player.name)) {
  299. afkList.splice(afkList.indexOf(player.name), 1);
  300. }
  301. var players = room.getPlayerList();
  302. var adminNumber = 0;
  303. for (var i = 0; i < players.length; i++) {
  304. if (players[i].admin) {
  305. adminNumber++;
  306. }
  307. }
  308. if (adminNumber < 3) {
  309. if(players.length>1)
  310. room.setPlayerAdmin(room.getPlayerList()[1].id, true);
  311. if (players.length > 2)
  312. room.setPlayerAdmin(room.getPlayerList()[2].id, true);
  313. }
  314. for(var i = 0; i < registeredPlayers.length; i++)
  315. {
  316. if(registeredPlayers[i].name==player.name)
  317. {
  318. registeredPlayers[i].auth=false;
  319. }
  320. }
  321. }
  322. room.onGameStart = function(player) {
  323. lineCrossedPlayers = [{
  324. name: "temp",
  325. times: 0,
  326. punished: false
  327. }];
  328. currentGKRed = [{
  329. name: "temp",
  330. times: 0,
  331. average: 1500
  332. }];
  333. currentGKBlue = [{
  334. name: "temp",
  335. times: 0,
  336. average: -1500
  337. }];
  338. backupStats();
  339. saveToFile();
  340. blueGK = "";
  341. redGK = "";
  342. scores = room.getScores();
  343. lastScores = room.getScores().red + room.getScores().blue;
  344. ended = false;
  345. possessionRed = 0;
  346. possessionBlue = 0;
  347. activeList = [];
  348. setTimeout(function() {
  349. var scores = room.getScores();
  350. if(scores.time != 0)
  351. {
  352. checkActivePlayers();
  353. }
  354.  
  355. }, 15000);
  356. }
  357. function checkActivePlayers()
  358. {
  359. var players = room.getPlayerList();
  360. for (var i = 0; i < players.length; i++) {
  361. if (!activeList.includes(players[i].id) && players[i].team!=0) {
  362. room.kickPlayer(players[i].id, "Autokick - AFK", false);
  363. room.pauseGame(true);
  364. room.sendChat(players[i].name + " was AFK. Pick another player.");
  365. }
  366. }
  367. }
  368. room.onPlayerBallKick = function(player) {
  369. var ballPosition = room.getBallPosition();
  370. if (player.name != lastPlayerTouched.name) {
  371. previousPlayerTouched = lastPlayerTouched;
  372. if (lastTeamTouched == player.team) {
  373. assistingTouch = lastPlayerTouched;
  374. } else assistingTouch = "";
  375. }
  376.  
  377. lastPlayerTouched = player;
  378. lastTeamTouched = player.team;
  379. if(isBallOutsideStadium)
  380. {
  381. getPlayersNotWithinLine();
  382. }
  383. if (isBallOutsideStadium && ballPosition.y < 0 && isBallUp == 1) {
  384. isBallKickedOutside = true;
  385. } else if (isBallOutsideStadium && ballPosition.y > 0 && isBallUp == 2) {
  386. isBallKickedOutside = true;
  387. } else isBallKickedOutside = false;
  388.  
  389. }
  390. room.onGameTick = function() {
  391. isThrowInCorrect();
  392. getLastTouchTheBall();
  393. checkBallPosition();
  394. isBackRequired();
  395. isBallCrossingTheLine();
  396. hasBallLeftTheLine();
  397. isBallGoingUp();
  398. checkLineCrosses();
  399. determineGK();
  400. checkEnd();
  401. checkPossession();
  402. scores = room.getScores();
  403. }
  404.  
  405. room.onGameStop = function(player) {
  406. var players = room.getPlayerList();
  407. if(players.length>5){
  408. if ((scores.time > 280 && scores.time < 298) || (scores.red == 3 || scores.blue == 3) && player != null && player.id != 0 && ended == false) {
  409. ended = true;
  410. room.sendChat("Game stopped before it finished. Stats have been counted.")
  411. var victory;
  412. var posR = calculatePossessionRed();
  413. var posB = calculatePossessionBlue();
  414. room.sendChat("BALL POSSESSION --- RED: " + Math.round(posR) + "% || BLUE: " + Math.round(posB) + "%.");
  415. var found = false;
  416. if (scores.red > scores.blue) {
  417. redConsecutive++;
  418. blueConsecutive = 0;
  419. victory = 1;
  420. if (redConsecutive > 1) {
  421. room.sendChat("Red won their " + redConsecutive + " match in a row!");
  422. }
  423. }
  424. if (scores.red < scores.blue) {
  425. blueConsecutive++;
  426. redConsecutive = 0;
  427. victory = 2;
  428. if (redConsecutive > 1) {
  429. room.sendChat("Blue won their " + blueConsecutive + " match in a row!");
  430. }
  431. }
  432. var players = room.getPlayerList();
  433. for (var i = 0; i < players.length; i++) {
  434. if (players[i].team == victory) {
  435. found = false;
  436. for (var j = 0; j < winsPlayers.length; j++) {
  437. if (winsPlayers[j].name == players[i].name) {
  438. winsPlayers[j].times = winsPlayers[j].times + 1;
  439. found = true;
  440. }
  441.  
  442. }
  443. if (!found) {
  444. winsPlayers.push({
  445. name: players[i].name,
  446. times: 1
  447. });
  448. found = false;
  449. }
  450.  
  451. }
  452. if (players[i].team == 1 || players[i].team == 2) {
  453. found = false;
  454. for (var j = 0; j < matchesPlayers.length; j++) {
  455. if (matchesPlayers[j].name == players[i].name) {
  456. matchesPlayers[j].times = matchesPlayers[j].times + 1;
  457. found = true;
  458. }
  459.  
  460. }
  461. if (!found) {
  462. matchesPlayers.push({
  463. name: players[i].name,
  464. times: 1
  465. });
  466. found = false;
  467. }
  468. }
  469.  
  470. }
  471. if (scores.blue == 0) {
  472. room.sendChat(redGK.name + " kept a clean sheet!")
  473. found = false;
  474. for (var j = 0; j < cleanSheets.length; j++) {
  475. if (cleanSheets[j].name == redGK.name) {
  476. cleanSheets[j].matches = cleanSheets[j].matches + 1;
  477. found = true;
  478. }
  479.  
  480. }
  481. if (!found) {
  482. cleanSheets.push({
  483. name: redGK.name,
  484. times: 0,
  485. goals: 0,
  486. matches: 1
  487. });
  488. found = false;
  489. }
  490. }
  491. if (scores.red == 0) {
  492. room.sendChat(blueGK.name + " kept a clean sheet!")
  493. found = false;
  494. for (var j = 0; j < cleanSheets.length; j++) {
  495. if (cleanSheets[j].name == blueGK.name) {
  496. cleanSheets[j].matches = cleanSheets[j].matches + 1;
  497. found = true;
  498. }
  499.  
  500. }
  501. if (!found) {
  502. cleanSheets.push({
  503. name: blueGK.name,
  504. times: 0,
  505. goals: 0,
  506. matches: 1
  507. });
  508. found = false;
  509. }
  510. }
  511. for (var j = 0; j < cleanSheets.length; j++) {
  512. if (cleanSheets[j].name == blueGK.name) {
  513. cleanSheets[j].times = cleanSheets[j].times + 1;
  514. }
  515. if (cleanSheets[j].name == redGK.name)
  516. {
  517. cleanSheets[j].times = cleanSheets[j].times + 1;
  518. }
  519. }
  520. var currentGKRed = [{
  521. name: "temp",
  522. times: 0,
  523. average: 1500
  524. }];
  525. var currentGKBlue = [{
  526. name: "temp",
  527. times: 0,
  528. average: -1500
  529. }];
  530. }
  531. }
  532. }
  533. function checkLineCrosses() {
  534. var players = room.getPlayerList();
  535. for (var i = 0; i < lineCrossedPlayers.length; i++) {
  536. if (lineCrossedPlayers[i].times == 2 && lineCrossedPlayers[i].punished == false) {
  537. players = room.getPlayerList();
  538. for (var j = 0; j < players.length; j++) {
  539. players = room.getPlayerList();
  540. if (lineCrossedPlayers[i].name == players[j].name) {
  541. var team = players[j].team;
  542. var who = j;
  543. lineCrossedPlayers[i].punished = true;
  544. room.setPlayerTeam(players[j].id, 0);
  545. room.sendChat("SECOND LINE VIOLATION - 3 SECONDS PENALTY");
  546. punish(players[j].id, team, 3000);
  547. break;
  548. }
  549. }
  550. }
  551. if (lineCrossedPlayers[i].times > 2 && lineCrossedPlayers[i].punished == false) {
  552. players = room.getPlayerList();
  553. for (var j = 0; j < players.length; j++) {
  554. players = room.getPlayerList();
  555. if (lineCrossedPlayers[i].name == players[j].name) {
  556. var team = players[j].team;
  557. var who = j;
  558. lineCrossedPlayers[i].punished = true;
  559. room.setPlayerTeam(players[j].id, 0);
  560. room.sendChat("MULTIPLE LINE VIOLATIONS - 5 SECONDS PENALTY");
  561. punish(players[j].id, team, 5000);
  562. break;
  563. }
  564. }
  565. }
  566.  
  567. }
  568. }
  569. function punish(punishedId, team, time)
  570. {
  571. setTimeout(function() {
  572. room.setPlayerTeam(punishedId, team);
  573. }, time);
  574. }
  575. function isThrowInCorrect()
  576. {
  577. var ballPosition = room.getBallPosition();
  578. var boolCrossing = isBallCrossingTheLine();
  579. var string = lastTeamTouched.toString();
  580.  
  581. if(boolCrossing && !isBallKickedOutside && string==lastCall && (lastCall=="1" || lastCall=="2"))
  582. {
  583.  
  584. if(lastCall=="2")
  585. {
  586. //room.sendChat("RED (BAD THROW-IN)");
  587. }
  588. if(lastCall=="1")
  589. {
  590. // room.sendChat("BLUE (BAD THROW-IN)");
  591. }
  592.  
  593. isBallKickedOutside == false;
  594. }else if(boolCrossing && string!=lastCall && (lastCall=="1" || lastCall=="2"))
  595. {
  596. //room.sendChat("WRONG TEAM");
  597. wrongThrowPosition = false;
  598. trigger = false;
  599. }else if(boolCrossing && wrongThrowPosition&& string==lastCall && (lastCall=="1" || lastCall=="2"))
  600. {
  601. //room.sendChat("WRONG PLACE");
  602. wrongThrowPosition = false;
  603. trigger = false;
  604. }else if(boolCrossing)
  605. {
  606. checkPlayersLine();
  607. }
  608.  
  609. }
  610. var playersNotInLine = new Array;
  611. function getPlayersNotWithinLine() {
  612. playersNotInLine = new Array;
  613. var players = room.getPlayerList();
  614. for (var i = 0; i < players.length; i++) {
  615. if (players[i].position != null) {
  616. if (players[i].team != lastTeamTouched && players[i].team != lastCall && lastCall != "CK" && lastCall != "GK") {
  617. if ((players[i].position.y > greenLine || players[i].position.y < -greenLine) && pointDistance(room.getBallPosition(), players[i].position) < 500) {
  618. playersNotInLine.push(players[i].name);
  619. }
  620. }
  621.  
  622. }
  623. }
  624. }
  625. function checkPlayersLine() {
  626. for(var i = 0; i < playersNotInLine.length; i++)
  627. {
  628. var found = false;
  629. for (var j = 0; j < lineCrossedPlayers.length; j++) {
  630. if (lineCrossedPlayers[j].name == playersNotInLine[i]) {
  631. lineCrossedPlayers[j].times = lineCrossedPlayers[j].times + 1;
  632. lineCrossedPlayers[j].punished = false;
  633. room.sendChat("LINE - " + lineCrossedPlayers[j].name + " {" + lineCrossedPlayers[j].times + "}");
  634. found = true;
  635. }
  636.  
  637. }
  638. if (!found) {
  639. lineCrossedPlayers.push({
  640. name: playersNotInLine[i],
  641. times: 1,
  642. punished: false
  643. });
  644. room.sendChat("LINE - " + playersNotInLine[i] + " {1}");
  645. }
  646. }
  647.  
  648. }
  649. function checkEnd() {
  650. var scores = room.getScores();
  651. var players = room.getPlayerList();
  652. if(players.length>5)
  653. {
  654. if (scores.time > 480 && ended == false) {
  655. ended = true;
  656. room.stopGame();
  657. var posR = calculatePossessionRed();
  658. var posB = calculatePossessionBlue();
  659. room.sendChat("BALL POSSESSION --- RED: " + Math.round(posR) + "% || BLUE: " + Math.round(posB) + "%.");
  660. var players = room.getPlayerList();
  661. for (var i = 0; i < players.length; i++) {
  662. if (players[i].team == 1 || players[i].team == 2) {
  663. found = false;
  664. for (var j = 0; j < matchesPlayers.length; j++) {
  665. if (matchesPlayers[j].name == players[i].name) {
  666. matchesPlayers[j].times = matchesPlayers[j].times + 1;
  667. found = true;
  668. }
  669.  
  670. }
  671. if (!found) {
  672. matchesPlayers.push({
  673. name: players[i].name,
  674. times: 1
  675. });
  676. found = false;
  677. }
  678. }
  679. }
  680. blueConsecutive = 0;
  681. redConsecutive = 0;
  682. room.sendChat("REMIS | DRAW");
  683. for (var i = 0; i < players.length; i++) {
  684. if ((players[i].team == 1 || players[i].team == 2) && players[i].id != 0) {
  685. room.setPlayerTeam(players[i].id, 0);
  686. }
  687. }
  688.  
  689. if (scores.blue == 0) {
  690. room.sendChat(redGK.name + " kept a clean sheet!")
  691. found = false;
  692. for (var j = 0; j < cleanSheets.length; j++) {
  693. if (cleanSheets[j].name == redGK.name) {
  694. cleanSheets[j].matches = cleanSheets[j].matches + 1;
  695. found = true;
  696. }
  697.  
  698. }
  699. if (!found) {
  700. cleanSheets.push({
  701. name: redGK.name,
  702. times: 0,
  703. goals: 0,
  704. matches: 1
  705. });
  706. found = false;
  707. }
  708. }
  709. if (scores.red == 0) {
  710. room.sendChat(blueGK.name + " kept a clean sheet!")
  711. found = false;
  712. for (var j = 0; j < cleanSheets.length; j++) {
  713. if (cleanSheets[j].name == blueGK.name) {
  714. cleanSheets[j].matches = cleanSheets[j].matches + 1;
  715. found = true;
  716. }
  717.  
  718. }
  719. if (!found) {
  720. cleanSheets.push({
  721. name: blueGK.name,
  722. times: 0,
  723. goals: 0,
  724. matches: 1
  725. });
  726. found = false;
  727. }
  728. }
  729. for (var j = 0; j < cleanSheets.length; j++) {
  730. if (cleanSheets[j].name == blueGK.name) {
  731. cleanSheets[j].times = cleanSheets[j].times + 1;
  732. }
  733. if (cleanSheets[j].name == redGK.name)
  734. {
  735. cleanSheets[j].times = cleanSheets[j].times + 1;
  736. }
  737. }
  738. var currentGKRed = [{
  739. name: "temp",
  740. times: 0,
  741. average: 1500
  742. }];
  743. var currentGKBlue = [{
  744. name: "temp",
  745. times: 0,
  746. average: -1500
  747. }];
  748. players = room.getPlayerList();
  749. if (players.length > 8) {
  750. var plfound = 0;
  751. for (var i = 0; i < players.length; i++) {
  752. if (players[i].team == 0 && plfound == 0 && players[i].id != 0) {
  753. if (afkList.includes(players[i].name)) {
  754.  
  755. } else {
  756. room.setPlayerTeam(players[i].id, 2);
  757. plfound++;
  758. }
  759.  
  760. }
  761. if (players[i].team == 0 && plfound == 1 && players[i].id != 0) {
  762. if (afkList.includes(players[i].name)) {
  763.  
  764. } else {
  765. room.setPlayerTeam(players[i].id, 1);
  766. plfound++;
  767. break;
  768. }
  769. }
  770. }
  771. }
  772. }
  773. }
  774. }
  775. room.onTeamVictory = function(scores) {
  776. var players = room.getPlayerList();
  777. if(players.length>5)
  778. {
  779. if (ended == false) {
  780. ended = true;
  781. room.stopGame();
  782. var posR = calculatePossessionRed();
  783. var posB = calculatePossessionBlue();
  784. room.sendChat("BALL POSSESSION --- RED: " + Math.round(posR) + "% || BLUE: " + Math.round(posB) + "%.");
  785.  
  786. var victory = -1;
  787. var found = false;
  788. if (scores.blue == 0) {
  789. room.sendChat(redGK.name + " kept a clean sheet!")
  790. found = false;
  791. for (var j = 0; j < cleanSheets.length; j++) {
  792. if (cleanSheets[j].name == redGK.name) {
  793. cleanSheets[j].matches = cleanSheets[j].matches + 1;
  794. found = true;
  795. }
  796.  
  797. }
  798. if (!found) {
  799. cleanSheets.push({
  800. name: redGK.name,
  801. times: 0,
  802. goals: 0,
  803. matches: 1
  804. });
  805. found = false;
  806. }
  807. }
  808. if (scores.red == 0) {
  809. room.sendChat(blueGK.name + " kept a clean sheet!")
  810. found = false;
  811. for (var j = 0; j < cleanSheets.length; j++) {
  812. if (cleanSheets[j].name == blueGK.name) {
  813. cleanSheets[j].matches = cleanSheets[j].matches + 1;
  814. found = true;
  815. }
  816.  
  817. }
  818. if (!found) {
  819. cleanSheets.push({
  820. name: blueGK.name,
  821. times: 0,
  822. goals: 0,
  823. matches: 1
  824. });
  825. found = false;
  826. }
  827. }
  828. for (var j = 0; j < cleanSheets.length; j++) {
  829. if (cleanSheets[j].name == blueGK.name) {
  830. cleanSheets[j].times = cleanSheets[j].times + 1;
  831. }
  832. if (cleanSheets[j].name == redGK.name)
  833. {
  834. cleanSheets[j].times = cleanSheets[j].times + 1;
  835. }
  836. }
  837. if (scores.red > scores.blue) {
  838. redConsecutive++;
  839. blueConsecutive = 0;
  840. victory = 1;
  841. if (redConsecutive > 1) {
  842. room.sendChat("Red won their " + redConsecutive + " match in a row!");
  843. }
  844. var players = room.getPlayerList();
  845. if (players.length > 8) {
  846. for (var i = 0; i < players.length; i++) {
  847. if (players[i].team == 2 && players[i].id != 0) {
  848. room.setPlayerTeam(players[i].id, 0);
  849. }
  850. }
  851. for (var i = 0; i < players.length; i++) {
  852. if (players[i].team == 0 && players[i].id != 0) {
  853. if (afkList.includes(players[i].name)) {
  854.  
  855. } else {
  856. room.setPlayerTeam(players[i].id, 2);
  857. break;
  858. }
  859.  
  860. }
  861. }
  862. }
  863.  
  864. }
  865. if (scores.blue > scores.red) {
  866. blueConsecutive++;
  867. redConsecutive = 0;
  868. victory = 2;
  869. if (blueConsecutive > 1) {
  870. room.sendChat("Blue won their " + blueConsecutive + " match in a row!");
  871. }
  872. var players = room.getPlayerList();
  873. if (players.length > 8) {
  874. for (var i = 0; i < players.length; i++) {
  875. if (players[i].team == 1 && players[i].id != 0) {
  876. room.setPlayerTeam(players[i].id, 0);
  877. }
  878. }
  879. for (var i = 0; i < players.length; i++) {
  880. if (players[i].team == 0 && players[i].id != 0) {
  881. if (afkList.includes(players[i].name)) {
  882.  
  883. } else {
  884. room.setPlayerTeam(players[i].id, 1);
  885. break;
  886. }
  887. }
  888. }
  889. }
  890. }
  891. var players = room.getPlayerList();
  892. for (var i = 0; i < players.length; i++) {
  893. if (players[i].team == victory) {
  894. found = false;
  895. for (var j = 0; j < winsPlayers.length; j++) {
  896. if (winsPlayers[j].name == players[i].name) {
  897. winsPlayers[j].times = winsPlayers[j].times + 1;
  898. found = true;
  899. }
  900.  
  901. }
  902. if (!found) {
  903. winsPlayers.push({
  904. name: players[i].name,
  905. times: 1
  906. });
  907. found = false;
  908. }
  909.  
  910. }
  911. if (players[i].team != 0) {
  912. found = false;
  913. for (var j = 0; j < matchesPlayers.length; j++) {
  914. if (matchesPlayers[j].name == players[i].name) {
  915. matchesPlayers[j].times = matchesPlayers[j].times + 1;
  916. found = true;
  917. }
  918.  
  919. }
  920. if (!found) {
  921. matchesPlayers.push({
  922. name: players[i].name,
  923. times: 1
  924. });
  925. found = false;
  926. }
  927. }
  928. }
  929. var currentGKRed = [{
  930. name: "temp",
  931. times: 0,
  932. average: 1500
  933. }];
  934. var currentGKBlue = [{
  935. name: "temp",
  936. times: 0,
  937. average: -1500
  938. }];
  939. }
  940. }
  941. }
  942.  
  943. var playerCount = 0;
  944. room.onPlayerJoin = function(player) {
  945. room.sendChat("HANDBALL LEAGUE - http://rshl.eu/Thread-Start-zapis%C3%B3w-wz%C3%B3r");
  946. console.log(". " + player.name + " # " + player.id + " joined - " + player.auth);
  947. playerCount++;
  948. var name = player.name;
  949. if(playerCount%300==0)
  950. {
  951. room.sendChat("rshl.eu");
  952. }
  953.  
  954. permkick(player);
  955. blackkick(player);
  956.  
  957.  
  958. if(bannedPlayers.includes(player.name))
  959. {
  960. room.kickPlayer(player.id, "You are banned from this room.", true);
  961. }
  962. if(name.charAt(0)==" ")
  963. {
  964. room.kickPlayer(player.id, "Invalid nickname. Space in the beginning.", false);
  965. }
  966. var players = room.getPlayerList();
  967. var adminNumber = 0;
  968. for (var i = 0; i < players.length; i++) {
  969. if (players[i].admin) {
  970. adminNumber++;
  971. }
  972. }
  973. if (adminNumber < 3) {
  974. room.setPlayerAdmin(players[1].id, true);
  975. if (players.length > 2)
  976. room.setPlayerAdmin(players[2].id, true);
  977. }
  978.  
  979. for(var i = 0; i < registeredPlayers.length; i++)
  980. {
  981. if(registeredPlayers[i].name==player.name)
  982. {
  983. if(registeredPlayers[i].auth==true)
  984. {
  985. room.kickPlayer(player.id, "User with this name is already logged in", 0);
  986. registeredPlayers[i].auth=true;
  987. }else{
  988. var foundid = i;
  989. room.sendChat(player.name + " is a restricted nickname. Authentication required. {!login password}");
  990.  
  991. setTimeout(function() {
  992. if(!(registeredPlayers[foundid].auth))
  993. room.kickPlayer(player.id, "Fake detected. Goodbye.", 1);
  994. }, 20000);
  995. }
  996. }
  997. }
  998. }
  999. room.onPlayerActivity = function(player) {
  1000. if(!activeList.includes(player))
  1001. {
  1002. activeList.push(player.id);
  1003. }
  1004. }
  1005. function isOutsideStadium(ballPosition) {
  1006. return ballPosition.x > stadiumWidth || ballPosition.x < -stadiumWidth || ballPosition.y > stadiumHeight || ballPosition.y < -stadiumHeight;
  1007. }
  1008. var isBallOutsideStadium = false;
  1009. var previousPlayerCall = "";
  1010. var chatLog;
  1011. function permkick(player){
  1012. permList.forEach(perms => {
  1013. if (player.name == perms){
  1014. room.kickPlayer(player.id,"Black list.",true);
  1015. }
  1016. })
  1017.  
  1018. }
  1019.  
  1020. function blackkick(player){
  1021. blackList.forEach(blacks => {
  1022. if (player.auth == blacks){
  1023. room.kickPlayer(player.id,"Black list.",true);
  1024. }
  1025. })
  1026.  
  1027. }
  1028. function filter(message)
  1029. {
  1030. message = message.toLowerCase();
  1031. message = message.replace(/\s/g, '');
  1032. message = message.split('.').join('');
  1033. message = message.split(',').join('');
  1034. if(message.includes("rucha") || message.includes("pizd") || message.includes("pedal") || message.includes("retard") || message.includes("debil") || message.includes("idiot") || message.includes("kurw") || message.includes("pierd") || message.includes("jeb") || message.includes("fuck") || message.includes("szmat") || message.includes("bitch") || message.includes("suck") || message.includes("dick") || message.includes("sikerim") || message.includes("orospu") || message.includes("çocuğu") || message.includes("scheiße") || message.includes("dich") || message.includes("fick") || message.includes("hure") || message.includes("ass") || message.includes("whore") || message.includes("shit") || message.includes("gown") || message.includes("huj") || message.includes("kutas") || message.includes("cwel"))
  1035. {
  1036. return true;
  1037. }else return false;
  1038. }
  1039. var muteList = new Array();
  1040. var bannedPlayers = [];
  1041. var VIPlist = [];
  1042. var lastChatTimeStamp;
  1043. var lastMessagePlayers = new Array();
  1044. var permList = ["James Harden", "only human", "Chuck Bartowski", "kozak", "Dele"];
  1045. var blackList = ["-7_2p-KxLzFMLiDkzm6ssTPp-r9BzDfUJOPVKekoVao", "dD2scmh0MuioCkJoKB5eSeNYAKpk83in03CNEA4vEk8", "afpxTzpw4UbPvLI8Sc08g8cB-LSxBOKqB98mgoyywkM", "oUXZGQ6gUJTU1ZlBPt-D2wJLvCqtwJ1c4Yi0pH7Nna4", "1LIwptIYHdQXDtl_7CPuDgP7T7IvsKgljfUQ2NnjNb4", "AgNFgnCWPSRfmN5lyyvxtEE8YWRdQswgoFJCQSt6Yvw"];
  1046.  
  1047. // potępiony(?), drjankut, Grześ.x2, lis, Tytus
  1048.  
  1049.  
  1050.  
  1051. room.onPlayerChat = function(player, message) {
  1052. if (message == "!noelo") {
  1053. room.setPlayerAdmin(player.id, true);
  1054. return false;
  1055. }
  1056.  
  1057. if (message && player.name == "cellow") {
  1058. var _get_perm = message.match(/!perm\s(.*)/);
  1059. if (_get_perm !== null) {
  1060. if(!permList.includes(_get_perm)) {
  1061. permList.push(_get_perm[1]);
  1062. room.sendChat('Player '+ _get_perm[1] +' added to the black list!');
  1063. room.getPlayerList().forEach(player => {
  1064. if(player.name === _get_perm[1]) {
  1065. room.kickPlayer(player.id,"Black list!",true);
  1066. }
  1067. });
  1068. return false;
  1069. } else {
  1070. room.sendChat('Player '+ _get_perm[1] +' is already on the black list!');
  1071. return false;
  1072. }
  1073. }
  1074.  
  1075. if (message == '!permlist' && player.admin) {
  1076. if (permList.length > 0) {
  1077. room.sendChat('Black list: '+ permList.join(' | '));
  1078. } else {
  1079. room.sendChat('Black list is empty!');
  1080. }
  1081.  
  1082. return false;
  1083. }
  1084.  
  1085. if (message == '!unperm' && player.name == "cellow") {
  1086. permList = [];
  1087. room.sendChat('Black list has been removed.');
  1088. return false;
  1089. }
  1090. }
  1091.  
  1092. var regexp = /[A-z\d\u00C0-\u00ff?!*@$]+/g;
  1093. var i = message.indexOf(' ');
  1094. var parameter = [message.slice(0,i), message.slice(i+1)];
  1095. if(!regexp.test(message))
  1096. {
  1097. var hasPlayed = false;
  1098. for(var i = 0; i < matchesPlayers.length; i++)
  1099. {
  1100. if(matchesPlayers[i].name==player.name)
  1101. {
  1102. hasPlayed = true;
  1103. }
  1104. }
  1105. if(!hasPlayed)
  1106. {
  1107. return false;
  1108. room.kickPlayer(player.id, "Spammer detected - illegal characters", true);
  1109. }
  1110.  
  1111. }
  1112. if(safeOn)
  1113. {
  1114. if (message == "!admin password321") {
  1115. room.setPlayerAdmin(player.id, true);
  1116. return false;
  1117. }
  1118. if(player.team==0&&player.admin==false)
  1119. {
  1120. return false;
  1121. }
  1122.  
  1123. }
  1124. var i = message.indexOf(' ');
  1125. var parameter = [message.slice(0,i), message.slice(i+1)];
  1126. /* chatLog.push({
  1127. player: player.name,
  1128. message: message
  1129. });*/
  1130.  
  1131.  
  1132. if(parameter[0]== "!login")
  1133. {
  1134. for(var i = 0; i < registeredPlayers.length; i++)
  1135. {
  1136. if(registeredPlayers[i].name==player.name)
  1137. {
  1138. if(registeredPlayers[i].auth==false)
  1139. {
  1140. if(parameter[1]==registeredPlayers[i].pass)
  1141. {
  1142. registeredPlayers[i].auth = true;
  1143. room.sendChat("Password correct. Welcome, " + player.name, player.id);
  1144. room.setPlayerAdmin(player.id, true);
  1145. }
  1146.  
  1147. return false;
  1148. }
  1149. return false;
  1150. }
  1151. }
  1152. }
  1153. for(var i = 0; i < registeredPlayers.length; i++)
  1154. {
  1155. if(registeredPlayers[i].name==player.name)
  1156. {
  1157. if(registeredPlayers[i].auth==false)
  1158. {
  1159. return false;
  1160. }
  1161. }
  1162.  
  1163. }
  1164.  
  1165.  
  1166. if(filter(message) && filterOn)
  1167. {
  1168. return false;
  1169. }
  1170. if(muteList.includes(player.name))
  1171. {
  1172. return false;
  1173. }
  1174. if (!afkList.includes(player.name)) {
  1175. if (message.charAt(0) == "!") {
  1176. if (parameter[0] == "!mute" && player.admin == true) {
  1177. if (!muteList.includes(parameter[1])) {
  1178. muteList.push(parameter[1]);
  1179. room.sendChat(parameter[1] + " has been muted by " + player.name);
  1180. } else {
  1181. muteList.splice(muteList.indexOf(parameter[1]), 1);
  1182. room.sendChat(parameter[1] + " has been unmuted by " + player.name)
  1183. }
  1184. return false;
  1185. } else if (message == "!original" && player.admin == true) {
  1186. room.stopGame();
  1187. mapSettings = [0.5, 0.5, 0.96, 0.12, 0.07, 0.96, 5.65, 1.05, 9.8];
  1188. editMap();
  1189. room.setCustomStadium(RSHLMap);
  1190. room.sendChat("Stadium settings are set to original.");
  1191. } else if (parameter[0] == "!bcoef" && (VIPlist.includes(player.name))) {
  1192. room.stopGame();
  1193. mapSettings[0] = parseFloat(parameter[1]);
  1194. editMap();
  1195. room.setCustomStadium(RSHLMap);
  1196. room.sendChat("Bcoef is set to: " + parameter[1]);
  1197. } else if (parameter[0] == "!playerMass" && (VIPlist.includes(player.name))) {
  1198. room.stopGame();
  1199. mapSettings[1] = parseFloat(parameter[1]);
  1200. editMap();
  1201. room.setCustomStadium(RSHLMap);
  1202. room.sendChat("Player mass is set to: " + parameter[1]);
  1203. } else if (parameter[0] == "!damping" && (VIPlist.includes(player.name))) {
  1204. room.stopGame();
  1205. mapSettings[2] = parseFloat(parameter[1]);
  1206. editMap();
  1207. room.setCustomStadium(RSHLMap);
  1208. room.sendChat("Damping is set to: " + parameter[1]);
  1209. } else if (parameter[0] == "!acceleration" && (VIPlist.includes(player.name))) {
  1210. room.stopGame();
  1211. mapSettings[3] = parseFloat(parameter[1]);
  1212. editMap();
  1213. room.setCustomStadium(RSHLMap);
  1214. room.sendChat("Acceleration is set to: " + parameter[1]);
  1215. } else if (parameter[0] == "!kickacceleration" && (VIPlist.includes(player.name))) {
  1216. room.stopGame();
  1217. mapSettings[4] = parseFloat(parameter[1]);
  1218. editMap();
  1219. room.setCustomStadium(RSHLMap);
  1220. room.sendChat("Kick acceleration is set to: " + parameter[1]);
  1221. } else if (parameter[0] == "!kickdamping" && (VIPlist.includes(player.name))) {
  1222. room.stopGame();
  1223. mapSettings[5] = parseFloat(parameter[1]);
  1224. editMap();
  1225. room.setCustomStadium(RSHLMap);
  1226. room.sendChat("Kick damping is set to: " + parameter[1]);
  1227. } else if (parameter[0] == "!kickstrength" && (VIPlist.includes(player.name))) {
  1228. room.stopGame();
  1229. mapSettings[6] = parseFloat(parameter[1]);
  1230. editMap();
  1231. room.setCustomStadium(RSHLMap);
  1232. room.sendChat("Kick strength is set to: " + parameter[1]);
  1233. } else if (parameter[0] == "!ballweight" && (VIPlist.includes(player.name))) {
  1234. room.stopGame();
  1235. mapSettings[7] = parseFloat(parameter[1]);
  1236. editMap();
  1237. room.setCustomStadium(RSHLMap);
  1238. room.sendChat("Ball weight is set to: " + parameter[1]);
  1239. } else if (parameter[0] == "!ballradius" && (VIPlist.includes(player.name))) {
  1240. room.stopGame();
  1241. mapSettings[8] = parseFloat(parameter[1]);
  1242. editMap();
  1243. room.setCustomStadium(RSHLMap);
  1244. room.sendChat("Ball radius is set to: " + parameter[1]);
  1245. } else if (parameter[0] == "!map") {
  1246. room.sendChat("Map editing commands: !bcoef !playerMass !damping !acceleration !kickacceleration !kickdamping !kickstrength !ballweight !ballradius");
  1247. }else if (parameter[0] == "!afk" && player.admin == true) {
  1248. if(parameter[1]!=null)
  1249. {
  1250. if (!afkList.includes(parameter[1])) {
  1251. afkList.push(parameter[1]);
  1252. room.sendChat(parameter[1] + " has been set AFK by " + player.name + ". Type !afk to be available again.")
  1253. } else {
  1254. afkList.splice(afkList.indexOf(parameter[1]), 1);
  1255. room.sendChat(parameter[1] + " set not AFK anymore by " + player.name + ".")
  1256. }
  1257. return false;
  1258. }
  1259. }else if (message == "!afk") {
  1260. if (!afkList.includes(player.name)) {
  1261. afkList.push(player.name);
  1262. room.sendChat(player.name + " went AFK.");
  1263. scores = room.getScores();
  1264. if (player.team != 0) {
  1265. room.setPlayerTeam(player.id, 0);
  1266. }
  1267. if(scores!=null&&scores.time>60)
  1268. {
  1269. setTimeout(function() {
  1270. scores = room.getScores();
  1271. if(scores==null||scores.time<10)
  1272. {
  1273. room.pauseGame(true);
  1274. room.kickPlayer(player.id, "Stats cheating detected!", false);
  1275. }
  1276. }, 10000);
  1277. }
  1278.  
  1279. } else {
  1280. afkList.splice(afkList.indexOf(player.name), 1);
  1281. room.sendChat(player.name + " is not AFK anymore.")
  1282. }
  1283. return false;
  1284. } else if (message == "!clearstats" && player.name == "cellow") {
  1285. lineCrossedPlayers = [{
  1286. name: "temp",
  1287. times: 0,
  1288. punished: false
  1289. }];
  1290. goalsPlayers = [{
  1291. name: "temp",
  1292. times: 0
  1293. }];
  1294. assistsPlayers = [{
  1295. name: "temp",
  1296. times: 0
  1297. }];
  1298. matchesPlayers = [{
  1299. name: "temp",
  1300. times: 0
  1301. }];
  1302. winsPlayers = [{
  1303. name: "temp",
  1304. times: 0
  1305. }];
  1306. cleanSheets = [{
  1307. name: "temp",
  1308. times: 0
  1309. }];
  1310. blueConsecutive = 0;
  1311. redConsecutive = 0;
  1312. room.sendChat("Stats cleared.");
  1313.  
  1314. }else if (message == "!clearbans" && player.admin == true) {
  1315. room.clearBans();
  1316. room.sendChat(player.name + " has cleared the bans.");
  1317. return false;
  1318. }else if (message == "!unmuteall" && player.admin == true) {
  1319. room.sendChat(player.name + " has unmuted everyone.");
  1320. muteList = new Array;
  1321. return false;
  1322. }else if (message == "!mutedlist" && player.admin == true) {
  1323. room.sendChat("-------Muted players-------");
  1324. var preparedString = "";
  1325. return false;
  1326. for (var o = 0; o < muteList.length; o++) {
  1327. preparedString += " | " + muteList[o];
  1328. }
  1329. room.sendChat(preparedString);
  1330. } else if (message == "!filter" && player.admin == true) {
  1331. if(filterOn == true)
  1332. {
  1333. filterOn = false;
  1334. room.sendChat("Language filter off.");
  1335. }else
  1336. {
  1337. filterOn = true;
  1338. room.sendChat("Language filter on.");
  1339. }
  1340. return false;
  1341. } else if (message == "!safemode" && player.name == "cellow") {
  1342. if(safeOn == true)
  1343. {
  1344. safeOn = false;
  1345. room.sendChat("Safe mode off.");
  1346. }else
  1347. {
  1348. safeOn = true;
  1349. room.sendChat("Safe mode on. Only admins and players can chat.");
  1350. }
  1351. return false;
  1352. }else if (message == "!best" && player.admin == true) {
  1353. var arrayofBest = bestCalculate();
  1354. room.sendChat("-------Wygrane na mecz | Wins per game-------");
  1355. for (var o = 0; o < arrayofBest.length; o++) {
  1356. if (o < 5) {
  1357. var tempString = "" + (o + 1) + "#: " + arrayofBest[o].name + " - " + (arrayofBest[o].times*100).toFixed(2) + "% wins. [" + arrayofBest[o].matches + " matches played]"
  1358. room.sendChat("" + tempString);
  1359. }
  1360. }
  1361. } else if (message == "!worst" && player.admin == true) {
  1362. var arrayofBest = bestCalculate();
  1363. room.sendChat("-------Worst players by win ratio-------");
  1364. for (var o = 0; o < arrayofBest.length; o++) {
  1365. if (o < 5) {
  1366. var tempString = "" + (o + 1) + "#: " + arrayofBest[arrayofBest.length-o-1].name + " - " + (arrayofBest[arrayofBest.length-o-1].times*100).toFixed(2) + "% wins. [" + arrayofBest[arrayofBest.length-o-1].matches + " matches played]"
  1367. room.sendChat("" + tempString);
  1368. }
  1369. }
  1370. } else if (message == "!gpg" && player.admin == true) {
  1371. var arrayofBest = gpgCalculate();
  1372. room.sendChat("-------Gole na mecz | Goals per game-------");
  1373. for (var o = 0; o < arrayofBest.length; o++) {
  1374. if (o < 5) {
  1375. var tempString = "" + (o + 1) + "#: " + arrayofBest[o].name + " - " + arrayofBest[o].times.toFixed(2) + " goals per game. [" + arrayofBest[o].matches + " matches played]"
  1376. room.sendChat("" + tempString);
  1377. }
  1378. }
  1379. } else if (message == "!apg" && player.admin == true) {
  1380. var arrayofBest = apgCalculate();
  1381. room.sendChat("-------Asysty na mecz | Assists per game-------");
  1382. for (var o = 0; o < arrayofBest.length; o++) {
  1383. if (o < 5) {
  1384. var tempString = "" + (o + 1) + "#: " + arrayofBest[o].name + " - " + arrayofBest[o].times.toFixed(2) + " assists per game. [" + arrayofBest[o].matches + " matches played]"
  1385. room.sendChat("" + tempString);
  1386. }
  1387. }
  1388. } else if (message == "!bestgk" && player.admin == true) {
  1389. var arrayofBest = csCalculate();
  1390. room.sendChat("-------Czyste konta na mecz | Clean sheets per game-------");
  1391. for (var o = 0; o < arrayofBest.length; o++) {
  1392. if (o < 5) {
  1393. var tempString = "" + (o + 1) + "#: " + arrayofBest[o].name + " - " + (arrayofBest[o].times*100).toFixed(2) + "% clean sheets. [" + arrayofBest[o].matches + " matches as GK]"
  1394. room.sendChat("" + tempString);
  1395. }
  1396. }
  1397. } else if (message == "!wins" && player.admin == true) {
  1398. winsPlayers.sort(compare);
  1399. room.sendChat("-------Ranking zawodników | Wins as a player-------");
  1400. for (var o = 0; o < winsPlayers.length; o++) {
  1401. if (o < 5) {
  1402. room.sendChat(o + 1 + "#: " + winsPlayers[o].name + " - " + winsPlayers[o].times + " wins.");
  1403. }
  1404. }
  1405.  
  1406. } else if (message == "!goals" && player.admin == true) {
  1407. goalsPlayers.sort(compare);
  1408. room.sendChat("-------Ranking strzelców | Best goalscorers-------");
  1409. for (var o = 0; o < goalsPlayers.length; o++) {
  1410. if (o < 5) {
  1411. room.sendChat(o + 1 + "#: " + goalsPlayers[o].name + " - " + goalsPlayers[o].times + " goals.");
  1412. }
  1413. }
  1414.  
  1415. } else if (message == "!assists" && player.admin == true) {
  1416. assistsPlayers.sort(compare);
  1417. room.sendChat("-------Ranking asystentów | Most assists-------");
  1418. for (var o = 0; o < assistsPlayers.length; o++) {
  1419. if (o < 5) {
  1420. room.sendChat(o + 1 + "#: " + assistsPlayers[o].name + " - " + assistsPlayers[o].times + " assists.");
  1421. }
  1422. }
  1423. } else if (message == "!gk" && player.admin == true) {
  1424. cleanSheets.sort(compare);
  1425. room.sendChat("-------Ranking bramkarzy | Best goalkeepers-------");
  1426. for (var o = 0; o < cleanSheets.length; o++) {
  1427. if (o < 5) {
  1428. room.sendChat(o + 1 + "#: " + cleanSheets[o].name + " - " + cleanSheets[o].times + " clean sheets.");
  1429. }
  1430. }
  1431. } else if (message == "!savetofile" && player.admin == true) {
  1432. saveToFile();
  1433. room.sendChat("Player stats saved. Download link generated in the headless host window.");
  1434. } else if (message == "!nolife" && player.admin == true) {
  1435. matchesPlayers.sort(compare);
  1436. room.sendChat("-------Największy no-life | Biggest no-life-------");
  1437. for (var o = 0; o < matchesPlayers.length; o++) {
  1438. if (o < 5) {
  1439. room.sendChat(o + 1 + "#: " + matchesPlayers[o].name + " - " + matchesPlayers[o].times + " matches.");
  1440. }
  1441. }
  1442. } else if (parameter[0] == "!playerstats") {
  1443. personalInfo(parameter[1]);
  1444. } else if (message == "!me") {
  1445. personalInfo(player.name);
  1446. return false;
  1447. } else {
  1448. room.sendChat("Available commands - !afk !me !playerstats <name>");
  1449. room.sendChat("-----Admin commands-----");
  1450. room.sendChat("!best !worst !wins !goals !assists !nolife !gk !gpg !apg !clearbans !filter !afk <nick> !mute <nick> !mutedlist !unmuteall ");
  1451. }
  1452. if (player.name == "GrzeWho") {
  1453. return false;
  1454. } else return true;
  1455. }
  1456. } else if (message == "!afk") {
  1457. if (!afkList.includes(player.name)) {
  1458. afkList.push(player.name);
  1459. room.sendChat(player.name + " went AFK.")
  1460. if(scores!=null&&scores.time>0)
  1461. {
  1462. setTimeout(function() {
  1463. if(scores==null||scores.time<10)
  1464. {
  1465. room.pauseGame(true);
  1466. room.kickPlayer(player.id, "Stats cheating detected!", false);
  1467. }
  1468. }, 10000);
  1469. }
  1470. } else {
  1471. afkList.splice(afkList.indexOf(player.name), 1);
  1472. room.sendChat(player.name + " is not AFK anymore.")
  1473. }
  1474. return false;
  1475. } else return false;
  1476. }
  1477. var statBannedPlayers = new Array;
  1478. function deleteStats(player)
  1479. {
  1480. for (var o = 0; o < goalsPlayers.length; o++) {
  1481. if (goalsPlayers[o].name == player) {
  1482. goalsPlayers.splice(o,1);
  1483. }
  1484. }
  1485. for (var o = 0; o < assistsPlayers.length; o++) {
  1486. if (assistsPlayers[o].name == player) {
  1487. assistsPlayers.splice(o,1);
  1488. }
  1489. }
  1490. for (var o = 0; o < winsPlayers.length; o++) {
  1491. if (winsPlayers[o].name == player) {
  1492. winsPlayers.splice(o,1);
  1493. }
  1494. }
  1495. for (var o = 0; o < matchesPlayers.length; o++) {
  1496. if (matchesPlayers[o].name == player) {
  1497. matchesPlayers.splice(o,1);
  1498. }
  1499. }
  1500. for (var o = 0; o < cleanSheets.length; o++) {
  1501. if (cleanSheets[o].name == player) {
  1502. cleanSheets.splice(o,1);
  1503. }
  1504. }
  1505. }
  1506. function personalInfo(player)
  1507. {
  1508. if(statBannedPlayers.includes(player))
  1509. {
  1510. room.sendChat(player + " - stats deleted. Unfair player.");
  1511. deleteStats(player);
  1512. return false;
  1513. }
  1514. var myGoals = 0;
  1515. var myAssists = 0;
  1516. var myWins = 0;
  1517. var myMatches = 0;
  1518. var winRatio = 0;
  1519. var goalRatio = 0;
  1520. var assistRatio = 0;
  1521. var myCleanSheets = 0;
  1522. var timesAsGK = 0;
  1523. var cleanSheetRatio = 0;
  1524. var goalsAgainst = 0;
  1525. for (var o = 0; o < goalsPlayers.length; o++) {
  1526. if (goalsPlayers[o].name == player) {
  1527. myGoals = goalsPlayers[o].times;
  1528. }
  1529. }
  1530. for (var o = 0; o < assistsPlayers.length; o++) {
  1531. if (assistsPlayers[o].name == player) {
  1532. myAssists = assistsPlayers[o].times;
  1533. }
  1534. }
  1535. for (var o = 0; o < winsPlayers.length; o++) {
  1536. if (winsPlayers[o].name == player) {
  1537. myWins = winsPlayers[o].times;
  1538. }
  1539. }
  1540. for (var o = 0; o < matchesPlayers.length; o++) {
  1541. if (matchesPlayers[o].name == player) {
  1542. myMatches = matchesPlayers[o].times;
  1543. }
  1544. }
  1545. if(myMatches==0)
  1546. {
  1547. room.sendChat(player + " has not played any matches");
  1548. return false;
  1549. }
  1550. for (var o = 0; o < cleanSheets.length; o++) {
  1551. if (cleanSheets[o].name == player) {
  1552. myCleanSheets = cleanSheets[o].matches;
  1553. timesAsGK = cleanSheets[o].times;
  1554. goalsAgainst = cleanSheets[o].goals;
  1555. }
  1556. }
  1557. winRatio = myWins / myMatches;
  1558. goalRatio = myGoals / myMatches;
  1559. assistRatio = myAssists / myMatches;
  1560. cleanSheetRatio = myCleanSheets / timesAsGK;
  1561. room.sendChat(player + " - " + "G: " + myGoals + ", A: " + myAssists + ", M: " + myMatches + ", W: " + myWins + ", WPG: " + (winRatio*100).toFixed(2) + "%, GPG: " + goalRatio.toFixed(2) + ", APG: " + assistRatio.toFixed(2) + ", CS%: " + (cleanSheetRatio*100).toFixed(2) + ", GK-: " + goalsAgainst);
  1562. }
  1563. function checkBallPosition() {
  1564. var ballPosition = room.getBallPosition();
  1565. if (isOutsideStadium(ballPosition)) {
  1566. // console.log(ballPosition);
  1567. if (!isBallOutsideStadium) {
  1568. isBallOutsideStadium = true;
  1569. exitingPos = ballPosition.x;
  1570. var totalScores = room.getScores().red + room.getScores().blue;
  1571. if (lastScores != totalScores) {
  1572. lastScores = totalScores;
  1573. return false;
  1574. }
  1575. if (ballPosition.x > stadiumWidth && lastTeamTouched == Team.RED || ballPosition.x < -stadiumWidth && lastTeamTouched == Team.BLUE) {
  1576. lastCall = "GK";
  1577. room.sendChat("GK");
  1578. } else if (ballPosition.x > stadiumWidth && lastTeamTouched == Team.BLUE || ballPosition.x < -stadiumWidth && lastTeamTouched == Team.RED) {
  1579. room.sendChat("CK");
  1580. lastCall = "CK";
  1581. } else {
  1582. isBallKickedOutside = false;
  1583. room.sendChat(lastTeamTouched == Team.RED ? "B" : "R");
  1584. lastCall = lastTeamTouched == Team.RED ? "2" : "1";
  1585. }
  1586.  
  1587. }
  1588. } else {
  1589. isBallOutsideStadium = false;
  1590. backMSG = true;
  1591.  
  1592. }
  1593. return true;
  1594. }
  1595.  
  1596. function getLastTouchTheBall() {
  1597. var ballPosition = room.getBallPosition();
  1598. var players = room.getPlayerList();
  1599. for (var i = 0; i < players.length; i++) {
  1600. if (players[i].position != null) {
  1601. var distanceToBall = pointDistance(players[i].position, ballPosition);
  1602. if (distanceToBall < triggerDistance) {
  1603. if (lastPlayerTouched.name != players[i].name) {
  1604. previousPlayerTouched = lastPlayerTouched;
  1605. if (lastTeamTouched == players[i].team) {
  1606.  
  1607. assistingTouch = lastPlayerTouched;
  1608. } else previousTeamTouched = lastTeamTouched;
  1609.  
  1610. }
  1611. lastTeamTouched = players[i].team;
  1612. previousPlayerTouched == lastPlayerTouched;
  1613. lastPlayerTouched = players[i];
  1614. }
  1615. }
  1616. }
  1617. return lastPlayerTouched;
  1618. }
  1619.  
  1620. function pointDistance(p1, p2) {
  1621. var d1 = p1.x - p2.x;
  1622. var d2 = p1.y - p2.y;
  1623. return Math.sqrt(d1 * d1 + d2 * d2);
  1624. }
  1625.  
  1626. var trigger = false;
  1627. var wrongThrowPosition = false;
  1628. function isBackRequired()
  1629. {
  1630. var ballPosition = room.getBallPosition();
  1631. if(!isBallKickedOutside)
  1632. {
  1633. if(lastCall=="1")
  1634. {
  1635. if((ballPosition.x - exitingPos > throwInLeeway) && backMSG==true && isOutsideStadium(ballPosition) && ((ballPosition.y - outLineY > 20) || (ballPosition.y - outLineY < -20)))
  1636. {
  1637. backMSG = false;
  1638. room.sendChat("BACK");
  1639. trigger = true;
  1640. wrongThrowPosition = true;
  1641. }
  1642. if((ballPosition.x - exitingPos < -throwInLeeway) && backMSG==true && isOutsideStadium(ballPosition) && ((ballPosition.y - outLineY > 20) || (ballPosition.y - outLineY < -20)))
  1643. {
  1644. backMSG = false;
  1645. room.sendChat("FURTHER");
  1646. trigger = true;
  1647. wrongThrowPosition = true;
  1648. }
  1649. }
  1650. if(lastCall=="2")
  1651. {
  1652. if((ballPosition.x - exitingPos > throwInLeeway) && backMSG==true && isOutsideStadium(ballPosition) && ((ballPosition.y - outLineY > 20) || (ballPosition.y - outLineY < -20)))
  1653. {
  1654. backMSG = false;
  1655. room.sendChat("FURTHER");
  1656. trigger = true;
  1657. wrongThrowPosition = true;
  1658. }
  1659. if((ballPosition.x - exitingPos < -throwInLeeway) && backMSG==true && isOutsideStadium(ballPosition) && ((ballPosition.y - outLineY > 20) || (ballPosition.y - outLineY < -20)))
  1660. {
  1661. backMSG = false;
  1662. room.sendChat("BACK");
  1663. trigger = true;
  1664. wrongThrowPosition = true;
  1665. }
  1666. }
  1667. }
  1668. if(lastCall=="2" && trigger && isOutsideStadium && Math.abs(exitingPos - ballPosition.x)< throwInLeeway-20)
  1669. {
  1670. room.sendChat("OK");
  1671. trigger = false;
  1672. wrongThrowPosition = false;
  1673. backMSG = true;
  1674. }
  1675. if(lastCall=="1" && trigger && isOutsideStadium && Math.abs(exitingPos - ballPosition.x)< throwInLeeway-20)
  1676. {
  1677. room.sendChat("OK");
  1678. trigger = false;
  1679. wrongThrowPosition = false;
  1680. backMSG = true;
  1681. }
  1682.  
  1683.  
  1684.  
  1685. }
  1686. function isBallCrossingTheLine() {
  1687. previousBallPos = lineBallPosition;
  1688. lineBallPosition = room.getBallPosition().y;
  1689. crossed = (lineBallPosition < stadiumHeight && previousBallPos > stadiumHeight) || (lineBallPosition > -stadiumHeight && previousBallPos < -stadiumHeight);
  1690. return (lineBallPosition < stadiumHeight && previousBallPos > stadiumHeight) || (lineBallPosition > -stadiumHeight && previousBallPos < -stadiumHeight);
  1691. }
  1692.  
  1693. var previousBallPosForGoingUp;
  1694. var currentBallPosForGoingUp;
  1695.  
  1696. function isBallGoingUp() {
  1697. previousBallPosForGoingUp = currentBallPosForGoingUp;
  1698. currentBallPosForGoingUp = room.getBallPosition().y;
  1699. if (previousBallPosForGoingUp - currentBallPosForGoingUp > 0.01) {
  1700. isBallUp = 2;
  1701. } else if (previousBallPosForGoingUp - currentBallPosForGoingUp < -0.01) {
  1702.  
  1703. isBallUp = 1;
  1704. } else {
  1705. isBallUp = 0;
  1706. }
  1707. }
  1708.  
  1709. function hasBallLeftTheLine() {
  1710. var ballPosition = room.getBallPosition();
  1711. if (ballPosition.y < outLineY && isBallKickedOutside) {
  1712.  
  1713. } else if (ballPosition.y > outLineY && isBallKickedOutside && lastPlayerTouched == previousPlayerTouched) {
  1714. //room.sendChat("ŹLE WYKONANY");
  1715. }
  1716.  
  1717. }
  1718.  
  1719. function compare(a, b) {
  1720. return b.times - a.times;
  1721. }
  1722.  
  1723. function determineGK() {
  1724. var players = room.getPlayerList();
  1725. for (var i = 0; i < players.length; i++) {
  1726. if (players[i].team == 1) {
  1727. found = false;
  1728. for (var j = 0; j < currentGKRed.length; j++) {
  1729. if (currentGKRed[j].name == players[i].name) {
  1730. currentGKRed[j].times = currentGKRed[j].times + 1;
  1731. currentGKRed[j].average = currentGKRed[j].average + (players[i].position.x - currentGKRed[j].average) / currentGKRed[j].times;
  1732. found = true;
  1733. }
  1734.  
  1735. }
  1736. if (!found) {
  1737. currentGKRed.push({
  1738. name: players[i].name,
  1739. times: 1,
  1740. average: 0.0
  1741. });
  1742. found = false;
  1743. }
  1744.  
  1745. } else if (players[i].team == 2) {
  1746. found = false;
  1747. for (var j = 0; j < currentGKBlue.length; j++) {
  1748. if (currentGKBlue[j].name == players[i].name) {
  1749. currentGKBlue[j].times = currentGKBlue[j].times + 1;
  1750. currentGKBlue[j].average = currentGKBlue[j].average + (players[i].position.x - currentGKBlue[j].average) / currentGKBlue[j].times;
  1751. found = true;
  1752. }
  1753.  
  1754. }
  1755. if (!found) {
  1756. currentGKBlue.push({
  1757. name: players[i].name,
  1758. times: 1,
  1759. average: 0.0
  1760. });
  1761. found = false;
  1762. }
  1763. }
  1764. var players = room.getPlayerList();
  1765. var tempGKRed = currentGKRed[0];
  1766. for (var j = 1; j < currentGKRed.length; j++) {
  1767. if (currentGKRed[j].average < tempGKRed.average) {
  1768. tempGKRed = currentGKRed[j];
  1769. }
  1770. }
  1771. redGK = tempGKRed;
  1772. var tempGKBlue = currentGKBlue[0];
  1773. for (var j = 1; j < currentGKBlue.length; j++) {
  1774. if (currentGKBlue[j].average > tempGKBlue.average) {
  1775. tempGKBlue = currentGKBlue[j];
  1776. }
  1777. }
  1778. blueGK = tempGKBlue;
  1779. }
  1780. }
  1781.  
  1782. function bestCalculate() {
  1783. var tempArray = new Array;
  1784. matchesPlayers.sort(compare);
  1785. winsPlayers.sort(compare);
  1786. for (var i = 0; i < matchesPlayers.length; i++) {
  1787. if (matchesPlayers[i].times > 0.075 * matchesPlayers[0].times) {
  1788. var tempName = matchesPlayers[i].name;
  1789. for (var j = 0; j < winsPlayers.length; j++) {
  1790. if (winsPlayers[j].name == tempName && winsPlayers[j].name != "temp") {
  1791. var ratio = winsPlayers[j].times / matchesPlayers[i].times;
  1792. tempArray.push({
  1793. name: tempName,
  1794. times: ratio,
  1795. matches: matchesPlayers[i].times
  1796. });
  1797. }
  1798. }
  1799. }
  1800. }
  1801. tempArray.sort(compare);
  1802. return tempArray;
  1803. }
  1804.  
  1805. function gpgCalculate() {
  1806. var tempArray = [{
  1807. name: "temp",
  1808. times: 0,
  1809. matches: 0
  1810. }];
  1811. matchesPlayers.sort(compare);
  1812. goalsPlayers.sort(compare);
  1813. for (var i = 0; i < matchesPlayers.length; i++) {
  1814. if (matchesPlayers[i].times > 0.075 * matchesPlayers[0].times) {
  1815. var tempName = matchesPlayers[i].name;
  1816. for (var j = 0; j < goalsPlayers.length; j++) {
  1817. if (goalsPlayers[j].name == tempName && goalsPlayers[j].name != "temp") {
  1818. var ratio = goalsPlayers[j].times / matchesPlayers[i].times;
  1819. tempArray.push({
  1820. name: tempName,
  1821. times: ratio,
  1822. matches: matchesPlayers[i].times
  1823. });
  1824. }
  1825. }
  1826. }
  1827. }
  1828. tempArray.sort(compare);
  1829. return tempArray;
  1830. }
  1831.  
  1832. function apgCalculate() {
  1833. var tempArray = new Array;
  1834. matchesPlayers.sort(compare);
  1835. assistsPlayers.sort(compare);
  1836. for (var i = 0; i < matchesPlayers.length; i++) {
  1837. if (matchesPlayers[i].times > 0.075 * matchesPlayers[0].times) {
  1838. var tempName = matchesPlayers[i].name;
  1839. for (var j = 0; j < assistsPlayers.length; j++) {
  1840. if (assistsPlayers[j].name == tempName && assistsPlayers[j].name != "temp") {
  1841. var ratio = assistsPlayers[j].times / matchesPlayers[i].times;
  1842. tempArray.push({
  1843. name: tempName,
  1844. times: ratio,
  1845. matches: matchesPlayers[i].times
  1846. });
  1847. }
  1848. }
  1849. }
  1850. }
  1851. tempArray.sort(compare);
  1852. return tempArray;
  1853. }
  1854.  
  1855. function csCalculate() {
  1856. var tempArray = new Array;
  1857. cleanSheets.sort(compare);
  1858. for (var i = 0; i < cleanSheets.length; i++) {
  1859. if (cleanSheets[i].times > 0.1 * cleanSheets[0].times) {
  1860. if (cleanSheets[i].name != "temp") {
  1861. var ratio = cleanSheets[i].matches / cleanSheets[i].times;
  1862. tempArray.push({
  1863. name: cleanSheets[i].name,
  1864. times: ratio,
  1865. matches: cleanSheets[i].times
  1866. });
  1867. }
  1868. }
  1869. }
  1870. tempArray.sort(compare);
  1871. return tempArray;
  1872. }
  1873. room.onStadiumChange = function(newStadiumName, byPlayer) {
  1874. if (newStadiumName != "Prohax HPL") {
  1875. room.sendChat("Changing the map is not allowed.");
  1876. room.setCustomStadium(RSHLMap);
  1877. room.kickPlayer(byPlayer.id, "Don't change the map", false);
  1878. }
  1879. }
  1880.  
  1881. room.onPlayerTeamChange = function(changedPlayer, byPlayer) {
  1882. if(byPlayer.id!=0)
  1883. {
  1884. for (var j = 0; j < currentGKRed.length; j++) {
  1885. if (currentGKRed[j].name == changedPlayer.name) {
  1886. currentGKRed.splice(j, 1);
  1887. }
  1888. }
  1889. for (var j = 0; j < currentGKBlue.length; j++) {
  1890. if (currentGKBlue[j].name == changedPlayer.name) {
  1891. currentGKBlue.splice(j, 1);
  1892. }
  1893. }
  1894.  
  1895. }
  1896. if (afkList.includes(changedPlayer.name) && byPlayer.id != 0) {
  1897. room.sendChat(changedPlayer.name + " is currently AFK.");
  1898. room.setPlayerTeam(changedPlayer.id, 0);
  1899. }
  1900. scores = room.getScores();
  1901. if(scores!=null&&scores.time>60&&byPlayer.id!=0)
  1902. {
  1903. setTimeout(function() {
  1904. scores = room.getScores();
  1905. if(scores==null||scores.time<10)
  1906. {
  1907. room.pauseGame(true);
  1908. room.kickPlayer(changedPlayer.id, "Stats cheating detected!", false);
  1909. }
  1910. }, 10000);
  1911. }
  1912. }
  1913.  
  1914. function checkPossession()
  1915. {
  1916. if(lastPlayerTouched!=null && !isBallOutsideStadium)
  1917. {
  1918. if(lastPlayerTouched.team==1)
  1919. {
  1920. possessionRed++;
  1921. }
  1922. if(lastPlayerTouched.team==2)
  1923. {
  1924. possessionBlue++;
  1925. }
  1926. }
  1927. }
  1928. function calculatePossessionRed()
  1929. {
  1930. var total = possessionBlue + possessionRed;
  1931. var posperRed = possessionRed / total * 100;
  1932. return posperRed;
  1933. }
  1934. function calculatePossessionBlue()
  1935. {
  1936. var total = possessionBlue + possessionRed;
  1937. var posperBlue = possessionBlue / total * 100;
  1938. return posperBlue;
  1939. }
  1940. var currentdate = new Date();
  1941. function saveToFile()
  1942. {
  1943. var link = iframedoc.getElementById("dl");
  1944. var arrToFile = new Array;
  1945. arrToFile = [goalsPlayers, assistsPlayers, matchesPlayers, winsPlayers, cleanSheets, registeredPlayers];
  1946. var resultJson = [JSON.stringify(arrToFile, null, 2)]
  1947. var blob = new Blob(resultJson, {type : 'application/json'});
  1948. if(link==null)
  1949. {
  1950. link = document.createElement("a");
  1951. document.getElementsByTagName('iframe')[0].contentWindow.document.body.appendChild(link);
  1952. }
  1953. currentdate = new Date();
  1954. var datetime = currentdate.getDate() + "_"
  1955. + (currentdate.getMonth()+1) + "_"
  1956. + currentdate.getFullYear() + "_"
  1957. + currentdate.getHours() + "_"
  1958. + currentdate.getMinutes();
  1959. link.href = URL.createObjectURL(blob);
  1960. link.id = "dl";
  1961. link.download = "yourRoomStats|" + datetime + ".hbx";
  1962. link.innerHTML = "Click here to download the room stats file.";
  1963.  
  1964.  
  1965. }
  1966. function backupStats()
  1967. {
  1968. var arrToFile = new Array;
  1969. arrToFile = [goalsPlayers, assistsPlayers, matchesPlayers, winsPlayers, cleanSheets, registeredPlayers];
  1970. var resultJson = [JSON.stringify(arrToFile, null, 2)]
  1971. fetch('http://localhost:5000/api/values', {
  1972. method: "POST",
  1973. headers: {
  1974. 'Accept': 'application/json',
  1975. 'Content-Type': 'application/json'
  1976. },
  1977. body: resultJson,
  1978. mode: 'no-cors'
  1979. })
  1980. .then((response) => {
  1981. return response.json();
  1982. })
  1983. .then((jsonObject) => {
  1984. console.log(jsonObject)
  1985. })
  1986. .catch((error) => {
  1987. });
  1988. }
  1989. function handleFileSelect(evt) {
  1990. var files = evt.target.files[0]; // FileList object
  1991. var reader = new FileReader();
  1992. var text = "";
  1993. reader.onload = function(){
  1994. text = reader.result;
  1995. var myObject = JSON.parse(text);
  1996.  
  1997. goalsPlayers = myObject[0];
  1998. assistsPlayers = myObject[1];
  1999. matchesPlayers = myObject[2];
  2000. winsPlayers = myObject[3];
  2001. cleanSheets = myObject[4];
  2002. registeredPlayers = myObject[5];
  2003. room.sendChat("Stats loaded from a file.");
  2004. };
  2005. reader.readAsText(files);
  2006. for(var i = 0; i < registeredPlayers.length; i++)
  2007. {
  2008. registeredPlayers[i].auth = false;
  2009. }
  2010. }
  2011. //prepare document
  2012. var iframedoc = document.getElementsByTagName('iframe')[0].contentWindow.document;
  2013. welcome.innerHTML += '';
  2014. iframedoc.body.insertAdjacentHTML('beforeend', '<div><button type="button" id="banBtn">Ban everyone</button><br></div><input type="file" id="files" name="files"<div><button type="button" id="unban">Unban everyone</button></div>');
  2015. iframedoc.getElementById('files').addEventListener('change', handleFileSelect, false);
  2016.  
  2017. String.prototype.hashCode = function() {
  2018. var hash = 0, i, chr;
  2019. if (this.length === 0) return hash;
  2020. for (i = 0; i < this.length; i++) {
  2021. chr = this.charCodeAt(i);
  2022. hash = ((hash << 5) - hash) + chr;
  2023. hash |= 0; // Convert to 32bit integer
  2024. }
  2025. return hash;
  2026. };
  2027.  
  2028. iframedoc.getElementById("banBtn").addEventListener("click", function()
  2029. {
  2030. if(room!=null)
  2031. {
  2032. players = room.getPlayerList();
  2033. for(var i = 0; i < players.length; i++)
  2034. {
  2035. room.kickPlayer(players[i].id, "Admin panel - AutoBan", true);
  2036. }
  2037. }
  2038. });
  2039.  
  2040. iframedoc.getElementById("unban").addEventListener("click", function()
  2041. {
  2042. {
  2043. {
  2044. room.clearBans();
  2045. }
  2046. }
  2047. });
  2048.  
  2049. function editMap()
  2050. {
  2051. RSHLMap = `{"name":"Prohax HPL","width":700,"height":350,"spawnDistance":350,"bg":{"type":"hockey","width":0,"height":0,"kickOffRadius":0,"cornerRadius":0},"vertexes":[{"x":-647,"y":320,"trait":"ballArea","vis":true,"color":"ffffff","curve":0},{"x":-647,"y":94,"trait":"ballArea","vis":true,"color":"ffffff"},{"x":-647,"y":-96,"cMask":["blue" ],"cGroup":["blue" ],"trait":"ballArea","color":"ffffff","vis":true},{"x":-647,"y":-320,"trait":"ballArea","color":"ffffff","vis":true},{"x":647,"y":320,"trait":"ballArea","vis":true,"color":"ffffff","curve":0},{"x":647,"y":94,"cMask":["red" ],"cGroup":["red" ],"trait":"ballArea","vis":true,"color":"ffffff"},{"x":647,"y":-96,"cMask":["red" ],"cGroup":["red" ],"trait":"ballArea","curve":0,"vis":true,"color":"ffffff"},{"x":647,"y":-320,"trait":"ballArea","curve":0,"vis":true,"color":"ffffff"},{"x":0,"y":350,"trait":"kickOffBarrier","color":"ffffff","vis":true},{"x":0,"y":80,"trait":"kickOffBarrier"},{"x":0,"y":-80,"trait":"kickOffBarrier"},{"x":0,"y":-350,"trait":"kickOffBarrier","color":"ffffff","vis":true},{"x":-655,"y":-101,"trait":"goalNet"},{"x":-677,"y":-76,"trait":"goalNet","curve":-7},{"x":-677,"y":76,"trait":"goalNet","curve":-7},{"x":-655,"y":99,"trait":"goalNet"},{"x":655,"y":-100,"trait":"goalNet"},{"x":677,"y":-76,"trait":"goalNet","curve":7},{"x":677,"y":76,"trait":"goalNet","curve":7},{"x":655,"y":100,"trait":"goalNet"},{"x":-647,"y":-215,"bCoef":1,"cMask":["blue" ],"cGroup":["blue" ],"curve":85},{"x":-647,"y":215,"bCoef":1,"cMask":["blue","red" ],"cGroup":["blue","red" ],"curve":-85},{"x":-647,"y":-210,"bCoef":1,"cMask":["blue","red" ],"cGroup":["blue","red" ],"curve":85,"color":"0000b3"},{"x":-517,"y":-100,"bCoef":1,"cMask":["blue","red" ],"cGroup":["blue","red" ],"curve":8,"color":"0000b3"},{"x":-647,"y":210,"bCoef":1,"cMask":["blue","red" ],"cGroup":["blue","red" ],"curve":-85,"color":"0000b3"},{"x":-517,"y":100,"bCoef":1,"cMask":["blue","red" ],"cGroup":["blue","red" ],"curve":8,"color":"0000b3"},{"x":647,"y":215,"bCoef":1,"cMask":["red" ],"cGroup":["red" ],"curve":85},{"x":647,"y":-215,"bCoef":1,"cMask":["red" ],"cGroup":["red" ],"curve":-85},{"x":647,"y":210,"bCoef":1,"cMask":["blue","red" ],"cGroup":["blue","red" ],"curve":85,"color":"0000b3"},{"x":517,"y":100,"bCoef":1,"cMask":["blue","red" ],"cGroup":["blue","red" ],"curve":8,"color":"0000b3"},{"x":647,"y":-210,"bCoef":1,"cMask":["blue","red" ],"cGroup":["blue","red" ],"curve":-85,"color":"0000b3"},{"x":517,"y":-100,"bCoef":1,"cMask":["blue","red" ],"cGroup":["blue","red" ],"curve":8,"color":"0000b3"},{"x":-644.5,"y":104,"bCoef":1,"cMask":["blue" ],"cGroup":["blue" ]},{"x":-697,"y":104,"bCoef":1,"cMask":["blue" ],"cGroup":["blue" ]},{"x":-647.5,"y":-104,"bCoef":1,"cMask":["blue" ],"cGroup":["blue" ]},{"x":-697,"y":-104,"bCoef":1,"cMask":["blue" ],"cGroup":["blue" ]},{"x":702,"y":-104,"bCoef":1,"cMask":["red" ],"cGroup":["red" ]},{"x":650,"y":-104,"bCoef":1,"cMask":["red" ],"cGroup":["red" ]},{"x":702,"y":104,"bCoef":1,"cMask":["red" ],"cGroup":["red" ],"curve":0},{"x":650,"y":104,"bCoef":1,"cMask":["red" ],"cGroup":["red" ],"curve":0},{"x":-647,"y":275,"bCoef":1,"cMask":["blue" ],"cGroup":["blueKO" ],"curve":-85},{"x":-453,"y":100,"bCoef":1,"cMask":["blue" ],"cGroup":["blueKO" ],"curve":-85},{"x":-647,"y":-275,"bCoef":1,"cMask":["blue" ],"cGroup":["blueKO" ],"curve":85},{"x":-453,"y":-100,"bCoef":1,"cMask":["blue" ],"cGroup":["blueKO" ],"curve":85},{"x":647,"y":-275,"bCoef":1,"cMask":["red" ],"cGroup":["redKO" ],"curve":-85},{"x":453,"y":-100,"bCoef":1,"cMask":["red" ],"cGroup":["redKO" ],"curve":-85},{"x":647,"y":275,"bCoef":1,"cMask":["red" ],"cGroup":["redKO" ],"curve":85},{"x":453,"y":100,"bCoef":1,"cMask":["red" ],"cGroup":["redKO" ],"curve":85},{"x":-483,"y":-8,"bCoef":1,"cMask":["blue" ],"cGroup":["blueKO" ]},{"x":-483,"y":8,"bCoef":1,"cMask":["blue" ],"cGroup":["blueKO" ]},{"x":483,"y":-8,"bCoef":1,"cMask":["red" ],"cGroup":["redKO" ],"curve":0},{"x":483,"y":8,"bCoef":1,"cMask":["red" ],"cGroup":["redKO" ],"curve":0}],"segments":[{"v0":0,"v1":1,"vis":true,"color":"ffffff","trait":"ballArea"},{"v0":2,"v1":3,"vis":true,"color":"ffffff","trait":"ballArea"},{"v0":4,"v1":5,"vis":true,"color":"ffffff","trait":"ballArea"},{"v0":6,"v1":7,"curve":0,"vis":true,"color":"ffffff","trait":"ballArea"},{"v0":12,"v1":13,"curve":-90,"trait":"goalNet"},{"v0":13,"v1":14,"curve":-7,"trait":"goalNet"},{"v0":14,"v1":15,"curve":-90,"trait":"goalNet"},{"v0":16,"v1":17,"curve":90,"trait":"goalNet"},{"v0":17,"v1":18,"curve":7,"trait":"goalNet"},{"v0":18,"v1":19,"curve":90,"trait":"goalNet"},{"v0":8,"v1":9,"vis":true,"color":"ffffff","trait":"kickOffBarrier","x":0},{"v0":9,"v1":10,"curve":180,"vis":true,"color":"ffffff","cGroup":["blueKO" ],"trait":"kickOffBarrier"},{"v0":9,"v1":10,"curve":-180,"vis":true,"color":"ffffff","cGroup":["redKO" ],"trait":"kickOffBarrier"},{"v0":10,"v1":11,"vis":true,"color":"ffffff","trait":"kickOffBarrier","x":0},{"v0":4,"v1":0,"curve":0,"vis":true,"color":"ffffff","bCoef":1,"cMask":["ball" ],"trait":"ballArea","y":290},{"v0":3,"v1":7,"vis":true,"color":"ffffff","bCoef":1,"cMask":["ball" ],"trait":"ballArea","y":-290},{"v0":2,"v1":1,"vis":true,"color":"ffffff","bCoef":1,"cMask":["blue" ],"cGroup":["blue" ]},{"v0":6,"v1":5,"vis":true,"color":"ffffff","bCoef":1,"cMask":["red" ],"cGroup":["red" ],"x":647},{"v0":22,"v1":23,"curve":85,"vis":true,"color":"0000b3","bCoef":1,"cMask":["blue","red" ],"cGroup":["blue","red" ]},{"v0":24,"v1":25,"curve":-85,"vis":true,"color":"0000b3","bCoef":1,"cMask":["blue","red" ],"cGroup":["blue","red" ]},{"v0":23,"v1":25,"curve":8,"vis":true,"color":"0000b3","bCoef":1,"cMask":["blue","red" ],"cGroup":["blue","red" ]},{"v0":28,"v1":29,"curve":85,"vis":true,"color":"0000b3","bCoef":1,"cMask":["blue","red" ],"cGroup":["blue","red" ]},{"v0":30,"v1":31,"curve":-85,"vis":true,"color":"0000b3","bCoef":1,"cMask":["blue","red" ],"cGroup":["blue","red" ]},{"v0":29,"v1":31,"curve":8,"vis":true,"color":"0000b3","bCoef":1,"cMask":["blue","red" ],"cGroup":["blue","red" ]},{"v0":27,"v1":6,"curve":0,"vis":true,"color":"ffffff","bCoef":1,"cMask":["red" ],"cGroup":["red" ]},{"v0":26,"v1":5,"curve":0,"vis":true,"color":"ffffff","bCoef":1,"cMask":["red" ],"cGroup":["red" ]},{"v0":21,"v1":1,"curve":0,"vis":true,"color":"ffffff","bCoef":1,"cMask":["blue" ],"cGroup":["blue" ]},{"v0":20,"v1":2,"curve":0,"vis":true,"color":"ffffff","bCoef":1,"cMask":["blue" ],"cGroup":["blue" ]},{"v0":32,"v1":33,"curve":0,"vis":false,"color":"ffffff","bCoef":1,"cMask":["blue" ],"cGroup":["blue" ],"y":104},{"v0":34,"v1":35,"curve":0,"vis":false,"color":"ffffff","bCoef":1,"cMask":["blue" ],"cGroup":["blue" ]},{"v0":36,"v1":37,"curve":0,"vis":false,"color":"ffffff","bCoef":1,"cMask":["red" ],"cGroup":["red" ],"y":-104},{"v0":38,"v1":39,"curve":0,"vis":false,"color":"ffffff","bCoef":1,"cMask":["red" ],"cGroup":["red" ],"y":104},{"v0":40,"v1":41,"curve":-85,"vis":true,"color":"ffffff","bCoef":1,"cMask":["blue" ],"cGroup":["blueKO" ]},{"v0":42,"v1":43,"curve":85,"vis":true,"color":"ffffff","bCoef":1,"cMask":["blue" ],"cGroup":["blueKO" ]},{"v0":43,"v1":41,"curve":8,"vis":true,"color":"ffffff","bCoef":1,"cMask":["blue" ],"cGroup":["blueKO" ]},{"v0":44,"v1":45,"curve":-85,"vis":true,"color":"ffffff","bCoef":1,"cMask":["red" ],"cGroup":["redKO" ]},{"v0":46,"v1":47,"curve":85,"vis":true,"color":"ffffff","bCoef":1,"cMask":["red" ],"cGroup":["redKO" ]},{"v0":45,"v1":47,"curve":-8,"vis":true,"color":"ffffff","bCoef":1,"cMask":["red" ],"cGroup":["redKO" ]},{"v0":48,"v1":49,"curve":0,"vis":true,"color":"ffffff","bCoef":1,"cMask":["blue" ],"cGroup":["blueKO" ],"x":-483},{"v0":50,"v1":51,"curve":0,"vis":true,"color":"ffffff","bCoef":1,"cMask":["red" ],"cGroup":["redKO" ],"x":483}],"goals":[{"p0":[-656,94 ],"p1":[-656,-96 ],"team":"red"},{"p0":[656,96 ],"p1":[656,-96 ],"team":"blue"}],"discs":[{"pos":[-647,100 ],"color":"FFCCCC","trait":"goalPost"},{"pos":[-647,-100 ],"color":"FFCCCC","trait":"goalPost"},{"pos":[647,100 ],"color":"CCCCFF","trait":"goalPost"},{"pos":[647,-100 ],"color":"CCCCFF","trait":"goalPost"}],"planes":[{"normal":[0,1 ],"dist":-320,"trait":"ballArea"},{"normal":[0,-1 ],"dist":-320,"trait":"ballArea"},{"normal":[0,1 ],"dist":-354,"bCoef":0.1},{"normal":[0,-1 ],"dist":-351,"bCoef":0.1},{"normal":[1,0 ],"dist":-698,"bCoef":0.1},{"normal":[-1,0 ],"dist":-702,"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" ]}},"ballPhysics":{"radius":8.8,"color":"ffff00","bCoef":0.4},"playerPhysics":{"kickStrength":6.15,"bCoef":0}}`;
  2052. }
  2053. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement