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