Advertisement
Guest User

Untitled

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