0% found this document useful (0 votes)
1K views67 pages

RSRhbanz1 1 5

1. The document describes the changelog and settings for Real Soccer Revolution (RSR) version 1.1.5. It includes details like the build date, author, and added features like a powershot mode toggle. 2. The document also provides useful links for hosting headless games and player authentication. 3. The majority of the document contains code defining the map layout, physics properties, and other variables for the soccer game.

Uploaded by

Phúc Quang
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1K views67 pages

RSRhbanz1 1 5

1. The document describes the changelog and settings for Real Soccer Revolution (RSR) version 1.1.5. It includes details like the build date, author, and added features like a powershot mode toggle. 2. The document also provides useful links for hosting headless games and player authentication. 3. The majority of the document contains code defining the map layout, physics properties, and other variables for the soccer game.

Uploaded by

Phúc Quang
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 67

// ===============================| RSR |===============================

// Version: 1.1.5
// Build Date: 20-April-21
// Author: Kuma @ hbanz
// Website: hbanz.org/realsoccer
// * Real Soccer Revolution (RSR)
// Changelog:
// 1.0 Official Release
// 1.1 Powershot mode added with toggle (credit to Winky)
//
// =========================================================================

// =========================================================================
// Usefull Links
// ------------------------------------------------
// https://www.haxball.com/headless
// https://github.com/haxball/haxball-issues/wiki/Headless-Host
// https://www.haxball.com/headlesstoken
// https://www.haxball.com/playerauth
// =========================================================================
//else if (Math.abs(teamR.length - teamB.length) == teamS.length && teamS.length >
0) {
// const n = Math.abs(teamR.length - teamB.length);

//Real Soccer Variables


var throwTimeOut = 420; // 7 seconds (var is in game ticks)
var gkTimeOut = 600; // 10 seconds (var is in game ticks)
var ckTimeOut = 600; // 10 seconds (var is in game ticks)
var throwinDistance = 270; // distance players can move the ball during throw in
var mapBGColor = "86A578"; // default 718C5A
var superAdminCode ="khoadz"; // !admin 505050
var allowPublicAdmin = false; // if true then !admin command is enabled
var powerShotMode = true;
var resetdoi = false;
var autoStart = true; // default
var testcurve = false;
var autoswap = false;
var colorball = "FFFFFF";
var ballcolor = "0xFFFFFF";

/*-------------------------------- STADIUMS ---------------------------------*/


function getRealSoccerMap() {
var realSoccerMap =
`{"name":"MAP","width":1300,"height":670,"spawnDistance":560,"bg":
{"type":"grass","width":1150,"height":600,"kickOffRadius":180,"cornerRadius":0,"col
or":"`+mapBGColor+`"},"playerPhysics":
{"bCoef":0.3,"invMass":0.5,"damping":0.96,"acceleration":0.12,"kickingAcceleration"
:0.07,"kickingDamping":0.96,"kickStrength":5.68},"ballPhysics":
{"radius":8.5,"bCoef":0.5,"invMass":1.05,"damping":0.986,"color":
"`+colorball+`","cMask":["all"],"cGroup":["ball"]},"vertexes":
[{"x":0,"y":675,"trait":"kickOffBarrier"},{"x":0,"y":180,"trait":"kickOffBarrier"},
{"x":0,"y":-180,"trait":"kickOffBarrier"},{"x":0,"y":-
675,"trait":"kickOffBarrier"},{"x":1150,"y":320,"trait":"line"},
{"x":840,"y":320,"trait":"line"},{"x":1150,"y":-320,"trait":"line"},{"x":840,"y":-
320,"trait":"line"},{"x":1150,"y":180,"trait":"line"},
{"x":1030,"y":180,"trait":"line"},{"x":1150,"y":-180,"trait":"line"},
{"x":1030,"y":-180,"trait":"line"},{"x":840,"y":-130,"trait":"line","curve":-130},
{"x":840,"y":130,"trait":"line","curve":-130},{"x":-1150,"y":-320,"trait":"line"},
{"x":-840,"y":-320,"trait":"line"},{"x":-1150,"y":320,"trait":"line"},{"x":-
840,"y":320,"trait":"line"},{"x":-1150,"y":-175,"trait":"line"},{"x":-1030,"y":-
175,"trait":"line"},{"x":-1150,"y":175,"trait":"line"},{"x":-
1030,"y":175,"trait":"line"},{"x":-840,"y":130,"trait":"line","curve":-130},{"x":-
840,"y":-130,"trait":"line","curve":-130},{"x":935,"y":3,"trait":"line"},
{"x":935,"y":-3,"trait":"line"},{"x":-935,"y":3,"trait":"line"},{"x":-935,"y":-
3,"trait":"line"},{"x":-1150,"y":570,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"x":-1120,"y":600,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"x":-1120,"y":-600,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"x":-1150,"y":-570,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"x":1120,"y":600,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"x":1150,"y":570,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"x":1150,"y":-570,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"x":1120,"y":-600,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"x":0,"y":180,"bCoef":0.1,"cMask":["red","blue"],"cGroup":
["blueKO"],"trait":"kickOffBarrier","curve":-180},{"x":0,"y":-
180,"bCoef":0.1,"cMask":["red","blue"],"cGroup":
["redKO"],"trait":"kickOffBarrier","curve":180},{"x":0,"y":180,"bCoef":0.1,"cMask":
["red","blue"],"cGroup":["redKO"],"trait":"kickOffBarrier","curve":180},{"x":-
1030,"y":-40,"bCoef":-5.7,"cMask":["ball"],"cGroup":
["c0"],"trait":"line","curve":70,"color":"576C46","vis":false},{"x":-
1030,"y":40,"bCoef":-5.7,"cMask":["ball"],"cGroup":
["c0"],"trait":"line","curve":70,"color":"576C46","vis":false},{"x":1030,"y":-
40,"bCoef":-5.7,"cMask":["ball"],"cGroup":["c0"],"trait":"line","curve":-
70,"color":"576C46","vis":false},{"x":1030,"y":40,"bCoef":-5.7,"cMask":
["ball"],"cGroup":["c0"],"trait":"line","curve":-70,"color":"576C46","vis":false},
{"x":1030,"y":-40,"trait":"line","color":"576C46"},
{"x":1030,"y":40,"trait":"line","color":"576C46"},{"x":-1030,"y":-
40,"trait":"line","color":"576C46"},{"x":-
1030,"y":40,"trait":"line","color":"576C46"},{"x":0,"y":3,"trait":"line"},
{"x":0,"y":-3,"trait":"line"},{"x":-1300,"y":-460,"bCoef":0,"cMask":
["c1"],"cGroup":["red","blue"],"color":"ec644b","vis":false},{"x":1300,"y":-
460,"bCoef":0,"cMask":["c1"],"cGroup":["red","blue"],"color":"ec644b","vis":false},
{"x":-1300,"y":460,"bCoef":0,"cMask":["c1"],"cGroup":
["red","blue"],"color":"ec644b","vis":false},{"x":1300,"y":460,"bCoef":0,"cMask":
["c1"],"cGroup":["red","blue"],"color":"ec644b","vis":false},{"x":-1295,"y":-
320,"cMask":["c0"],"cGroup":["red","blue"]},{"x":-304,"y":-324,"cMask":
["c0"],"cGroup":["red","blue"],"_selected":"segment"},{"x":-304,"y":316,"cMask":
["c0"],"cGroup":["red","blue"],"_selected":"segment"},{"x":-1295,"y":320,"cMask":
["c0"],"cGroup":["red","blue"]},{"x":1295,"y":-320,"cMask":["c0"],"cGroup":
["red","blue"]},{"x":306,"y":-319,"cMask":["c0"],"cGroup":["red","blue"]},
{"x":306,"y":321,"cMask":["c0"],"cGroup":["red","blue"]},{"x":1295,"y":320,"cMask":
["c0"],"cGroup":["red","blue"]},{"x":-1150,"y":-124,"bCoef":0.1,"cMask":
["ball","red","blue"]},{"x":-1210,"y":-124,"bCoef":0.1,"cMask":
["red","blue"],"bias":0,"curve":5},{"x":-1150,"y":124,"bCoef":0.1,"cMask":
["ball","red","blue"]},{"x":-1210,"y":124,"bCoef":0.1,"cMask":
["red","blue"],"bias":0,"curve":5},{"x":-1250,"y":-158,"bCoef":0,"cMask":["ball"]},
{"x":-1250,"y":158,"bCoef":0,"cMask":["ball"]},
{"x":1150,"y":124,"bCoef":0.1,"cMask":["ball","red","blue"]},
{"x":1210,"y":124,"bCoef":0.1,"cMask":["red","blue"],"curve":-5},{"x":1150,"y":-
124,"bCoef":0.1,"cMask":["ball","red","blue"]},{"x":1210,"y":-
124,"bCoef":0.1,"cMask":["red","blue"],"curve":-5},{"x":1250,"y":-
158,"bCoef":0,"cMask":["ball"]},{"x":1250,"y":158,"bCoef":0,"cMask":["ball"]},
{"x":-327,"y":-457,"cMask":["c0"],"cGroup":["red","blue"]},{"x":-303,"y":-
327,"cMask":["c0"],"cGroup":["red","blue"]},{"x":-394,"y":-595,"cMask":
["c0"],"cGroup":["red","blue"]},{"x":-327,"y":-461,"cMask":["c0"],"cGroup":
["red","blue"]},{"x":-403,"y":-669,"cMask":["c0"],"cGroup":["red","blue"]},{"x":-
395,"y":-596,"cMask":["c0"],"cGroup":["red","blue"]},{"x":-304,"y":316,"cMask":
["c0"],"cGroup":["red","blue"]},{"x":-328,"y":459,"cMask":["c0"],"cGroup":
["red","blue"]},{"x":-328,"y":460,"cMask":["c0"],"cGroup":["red","blue"]},{"x":-
379,"y":600,"cMask":["c0"],"cGroup":["red","blue"]},{"x":-379,"y":601,"cMask":
["c0"],"cGroup":["red","blue"]},{"x":-384,"y":668,"cMask":["c0"],"cGroup":
["red","blue"]},{"x":307.61590626147046,"y":319.0654264152458,"cMask":
["c0"],"cGroup":["red","blue"]},
{"x":323.9057685035773,"y":453.0528899636434,"cMask":["c0"],"cGroup":
["red","blue"]},{"x":306.4664672761953,"y":322.01140503348614,"cMask":
["c0"],"cGroup":["red","blue"]},
{"x":383.88891087287516,"y":594.2443296174146,"cMask":["c0"],"cGroup":
["red","blue"]},{"x":323.7048331685431,"y":457.04783989964193,"cMask":
["c0"],"cGroup":["red","blue"]},
{"x":389.16024453074044,"y":668.6030079372144,"cMask":["c0"],"cGroup":
["red","blue"]},{"x":384.83741452311625,"y":595.2933009351727,"cMask":
["c0"],"cGroup":["red","blue"]},{"x":330,"y":-461,"cMask":["c0"],"cGroup":
["red","blue"]},{"x":306,"y":-318,"cMask":["c0"],"cGroup":["red","blue"]},
{"x":388,"y":-600,"cMask":["c0"],"cGroup":["red","blue"]},{"x":334,"y":-
465,"cMask":["c0"],"cGroup":["red","blue"]},{"x":394,"y":-667,"cMask":
["c0"],"cGroup":["red","blue"]},{"x":388,"y":-600,"cMask":["c0"],"cGroup":
["red","blue"]}],"segments":[{"v0":0,"v1":1,"trait":"kickOffBarrier"},
{"v0":2,"v1":3,"trait":"kickOffBarrier"},{"v0":4,"v1":5,"trait":"line","y":320},
{"v0":5,"v1":7,"trait":"line","x":840},{"v0":6,"v1":7,"trait":"line","y":-320},
{"v0":8,"v1":9,"trait":"line","y":180},{"v0":9,"v1":11,"trait":"line","x":1030},
{"v0":10,"v1":11,"trait":"line","y":-180},{"v0":12,"v1":13,"curve":-
130,"trait":"line","x":840},{"v0":14,"v1":15,"trait":"line","y":-320},
{"v0":15,"v1":17,"trait":"line","x":-840},{"v0":16,"v1":17,"trait":"line","y":320},
{"v0":18,"v1":19,"trait":"line","y":-175},{"v0":19,"v1":21,"trait":"line","x":-
1030},{"v0":20,"v1":21,"trait":"line","y":175},{"v0":22,"v1":23,"curve":-
130,"trait":"line","x":-840},{"v0":24,"v1":25,"curve":-180,"trait":"line","x":935},
{"v0":26,"v1":27,"curve":-180,"trait":"line","x":-935},
{"v0":24,"v1":25,"curve":180,"trait":"line","x":935},
{"v0":26,"v1":27,"curve":180,"trait":"line","x":-935},
{"v0":24,"v1":25,"curve":90,"trait":"line","x":935},
{"v0":26,"v1":27,"curve":90,"trait":"line","x":-935},{"v0":24,"v1":25,"curve":-
90,"trait":"line","x":935},{"v0":26,"v1":27,"curve":-90,"trait":"line","x":-935},
{"v0":24,"v1":25,"trait":"line","x":935},{"v0":26,"v1":27,"trait":"line","x":-935},
{"v0":28,"v1":29,"curve":90,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"v0":30,"v1":31,"curve":90,"bCoef":-2.9,"cMask":
["ball"],"cGroup":["c0"],"trait":"line"},{"v0":32,"v1":33,"curve":90,"bCoef":-
2.9,"cMask":["ball"],"cGroup":["c0"],"trait":"line"},
{"v0":34,"v1":35,"curve":90,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"v0":37,"v1":36,"curve":-
180,"vis":false,"bCoef":0.1,"cGroup":["blueKO"],"trait":"kickOffBarrier"},
{"v0":39,"v1":40,"curve":70,"vis":false,"color":"576C46","bCoef":-5.7,"cMask":
["ball"],"cGroup":["c0"],"trait":"line","x":-1030},{"v0":41,"v1":42,"curve":-
70,"vis":false,"color":"576C46","bCoef":-5.7,"cMask":["ball"],"cGroup":
["c0"],"trait":"line","x":1030},
{"v0":37,"v1":38,"curve":180,"vis":false,"bCoef":0.1,"cMask":
["red","blue"],"cGroup":["redKO"],"trait":"kickOffBarrier"},
{"v0":43,"v1":44,"vis":true,"color":"576C46","trait":"line","x":1030},
{"v0":45,"v1":46,"vis":true,"color":"576C46","trait":"line","x":-1030},
{"v0":47,"v1":48,"curve":-180,"trait":"line","x":-935},
{"v0":47,"v1":48,"curve":180,"trait":"line","x":-935},
{"v0":47,"v1":48,"curve":90,"trait":"line","x":-935},{"v0":47,"v1":48,"curve":-
90,"trait":"line","x":-935},{"v0":47,"v1":48,"trait":"line","x":-935},
{"v0":49,"v1":50,"vis":false,"color":"ec644b","bCoef":0,"cMask":["c1"],"cGroup":
["red","blue"],"y":-460},
{"v0":51,"v1":52,"vis":false,"color":"ec644b","bCoef":0,"cMask":["c1"],"cGroup":
["red","blue"],"y":460},{"v0":53,"v1":54,"vis":false,"color":"ec644b","cMask":
["c0"],"cGroup":["red","blue"]},
{"v0":54,"v1":55,"vis":false,"color":"ec644b","cMask":["c0"],"cGroup":
["red","blue"],"_selected":true},
{"v0":55,"v1":56,"vis":false,"color":"ec644b","cMask":["c0"],"cGroup":
["red","blue"]},{"v0":57,"v1":58,"vis":false,"cMask":["c0"],"cGroup":
["red","blue"]},{"v0":58,"v1":59,"vis":false,"cMask":["c0"],"cGroup":
["red","blue"],"curve":0},{"v0":59,"v1":60,"vis":false,"cMask":["c0"],"cGroup":
["red","blue"]},{"v0":61,"v1":62,"color":"FFFFFF","bCoef":0.1,"cMask":
["ball","red","blue"],"y":-124},
{"v0":63,"v1":64,"color":"FFFFFF","bCoef":0.1,"cMask":
["ball","red","blue"],"y":124},
{"v0":64,"v1":62,"curve":5,"color":"FFFFFF","bCoef":0.1,"cMask":
["ball","red","blue"],"bias":0},
{"v0":62,"v1":65,"color":"FFFFFF","bCoef":0,"cMask":["ball"]},{"v0":64,"v1":66
,"color":"FFFFFF","bCoef":0,"cMask":["ball"]},
{"v0":67,"v1":68,"color":"FFFFFF","bCoef":0.1,"cMask":
["ball","red","blue"],"y":124},
{"v0":69,"v1":70,"color":"FFFFFF","bCoef":0.1,"cMask":["ball","red","blue"],"y":-
124},{"v0":68,"v1":70,"curve":-5,"color":"FFFFFF","bCoef":0.1,"cMask":
["ball","red","blue"]},{"v0":70,"v1":71,"color":"FFFFFF","bCoef":0,"cMask":
["ball"]},{"v0":68,"v1":72,"color":"FFFFFF","bCoef":0,"cMask":["ball"]},
{"v0":73,"v1":74,"vis":false,"color":"ec644b","cMask":["c0"],"cGroup":
["red","blue"]},{"v0":75,"v1":76,"vis":false,"color":"ec644b","cMask":
["c0"],"cGroup":["red","blue"]},
{"v0":77,"v1":78,"vis":false,"color":"ec644b","cMask":["c0"],"cGroup":
["red","blue"]},{"v0":79,"v1":80,"vis":false,"color":"ec644b","cMask":
["c0"],"cGroup":["red","blue"]},
{"v0":81,"v1":82,"vis":false,"color":"ec644b","cMask":["c0"],"cGroup":
["red","blue"]},{"v0":83,"v1":84,"vis":false,"color":"ec644b","cMask":
["c0"],"cGroup":["red","blue"]},
{"v0":86,"v1":87,"vis":false,"color":"ec644b","cMask":["c0"],"cGroup":
["red","blue"]},{"v0":88,"v1":89,"vis":false,"color":"ec644b","cMask":
["c0"],"cGroup":["red","blue"]},
{"v0":90,"v1":91,"vis":false,"color":"ec644b","cMask":["c0"],"cGroup":
["red","blue"]},{"v0":92,"v1":93,"vis":false,"color":"ec644b","cMask":
["c0"],"cGroup":["red","blue"]},
{"v0":94,"v1":95,"vis":false,"color":"ec644b","cMask":["c0"],"cGroup":
["red","blue"]},{"v0":96,"v1":97,"vis":false,"color":"ec644b","cMask":
["c0"],"cGroup":["red","blue"]}],"goals":[{"p0":[-1161.45,124],"p1":[-1161.45,-
124],"team":"red"},{"p0":[1161.45,124],"p1":[1161.45,-
124],"team":"blue","radius":0,"invMass":1}],"discs":[{"radius":0,"invMass":0,"pos":
[-1311,-19],"color":"ffffffff","bCoef":0,"cMask":["red"],"cGroup":["ball"]},
{"radius":0,"invMass":0,"pos":[-1310,29],"color":"ffffffff","bCoef":0,"cMask":
["blue"],"cGroup":["ball"]},{"radius":0,"invMass":0,"pos":[-
1308,62],"color":"ffffffff","bCoef":0,"cMask":["red","blue"],"cGroup":["ball"]},
{"radius":2.7,"pos":[-1150,600],"cGroup":["ball"],"trait":"cornerflag"},
{"radius":2.7,"pos":[1150,-600],"cGroup":["ball"],"trait":"cornerflag"},
{"radius":2.7,"pos":[1150,600],"cGroup":["ball"],"trait":"cornerflag"},
{"radius":5,"invMass":0,"pos":[-1150,-124],"bCoef":0.5,"trait":"goalPost"},
{"radius":5,"invMass":0,"pos":[-1150,124],"bCoef":0.5,"trait":"goalPost"},
{"radius":2,"invMass":0,"pos":[-1250,-
158],"color":"000000","bCoef":1,"trait":"goalPost"},{"radius":2,"invMass":0,"pos":
[-1250,158],"color":"000000","bCoef":1,"trait":"goalPost"},
{"radius":5,"invMass":0,"pos":[1150,-124],"bCoef":0.5,"trait":"goalPost"},
{"radius":5,"invMass":0,"pos":[1150,124],"bCoef":0.5,"trait":"goalPost"},
{"radius":2,"invMass":0,"pos":[1250,-
158],"color":"000000","bCoef":1,"trait":"goalPost"},{"radius":2,"invMass":0,"pos":
[1250,158],"color":"000000","bCoef":1,"trait":"goalPost"},{"radius":2.7,"pos":[-
1150,-600],"cGroup":["ball"],"trait":"cornerflag"},{"radius":0,"pos":[-1149,-
460],"cMask":["none"]},{"radius":0,"pos":[1149,-460],"cMask":["none"]},
{"radius":0,"pos":[-1149,-460],"cMask":["none"]},{"radius":0,"pos":[1149,-
460],"cMask":["none"]},{"radius":0,"pos":[-1149,460],"cMask":["none"]},
{"radius":0,"pos":[1149,460],"cMask":["none"]},{"radius":0,"pos":[-
1149,460],"cMask":["none"]},{"radius":0,"pos":[1149,460],"cMask":
["none"]}],"planes":[{"normal":[0,1],"dist":-627,"bCoef":0,"cGroup":
["ball"],"trait":"ballArea"},{"normal":[0,-1],"dist":-627,"bCoef":0,"cGroup":
["ball"],"trait":"ballArea"},{"normal":[0,1],"dist":-670,"bCoef":0},{"normal":[0,-
1],"dist":-673,"bCoef":0},{"normal":[1,0],"dist":-1300,"bCoef":0},{"normal":[-
1,0],"dist":-1300,"bCoef":0.1},{"normal":[1,0],"dist":-1230,"bCoef":0,"cMask":
["ball"],"cGroup":["ball"]},{"normal":[-1,0],"dist":-1230,"bCoef":0,"cMask":
["ball"],"cGroup":["ball"]}],"traits":{"ballArea":{"vis":false,"bCoef":0,"cMask":
["ball"],"cGroup":["ball"]},"goalPost":{"radius":5,"invMass":0,"bCoef":1,"cGroup":
["ball"]},"rightNet":{"radius":0,"invMass":1,"bCoef":0,"cGroup":
["ball","c3"]},"leftNet":{"radius":0,"invMass":1,"bCoef":0,"cGroup":
["ball","c2"]},"stanchion":{"radius":3,"invMass":0,"bCoef":3,"cMask":
["none"]},"cornerflag":
{"radius":3,"invMass":0,"bCoef":0.2,"color":"FFFF00","cMask":
["ball"]},"reargoalNetleft":{"vis":true,"bCoef":0.1,"cMask":
["ball","red","blue"],"curve":10,"color":"C7E6BD"},"reargoalNetright":
{"vis":true,"bCoef":0.1,"cMask":["ball","red","blue"],"curve":-
10,"color":"C7E6BD"},"sidegoalNet":{"vis":true,"bCoef":1,"cMask":
["ball","red","blue"],"color":"C7E6BD"},"kickOffBarrier":
{"vis":false,"bCoef":0.1,"cGroup":["redKO","blueKO"],"cMask":
["red","blue"]},"line":{"vis":true,"cMask":[],"color":"C7E6BD"}},"joints":
[{"d0":16,"d1":17,"strength":"rigid","color":"ec7458","length":null},
{"d0":18,"d1":19,"strength":"rigid","color":"48bef9","length":null},
{"d0":20,"d1":21,"strength":"rigid","color":"ec7458","length":null},
{"d0":22,"d1":23,"strength":"rigid","color":"48bef9","length":null}],"redSpawnPoint
s":[],"blueSpawnPoints":[],"canBeStored":false}`;

return realSoccerMap;
}

var realSoccerMap =
`{"name":"MAP","width":1300,"height":670,"spawnDistance":560,"bg":
{"type":"grass","width":1150,"height":600,"kickOffRadius":180,"cornerRadius":0,"col
or":"`+mapBGColor+`"},"playerPhysics":
{"bCoef":0.3,"invMass":0.5,"damping":0.96,"acceleration":0.12,"kickingAcceleration"
:0.07,"kickingDamping":0.96,"kickStrength":5.68},"ballPhysics":
{"radius":8.5,"bCoef":0.5,"invMass":1.05,"damping":0.986,"color":"`+colorball+`","c
Mask":["all"],"cGroup":["ball"]},"vertexes":
[{"x":0,"y":675,"trait":"kickOffBarrier"},{"x":0,"y":180,"trait":"kickOffBarrier"},
{"x":0,"y":-180,"trait":"kickOffBarrier"},{"x":0,"y":-
675,"trait":"kickOffBarrier"},{"x":1150,"y":320,"trait":"line"},
{"x":840,"y":320,"trait":"line"},{"x":1150,"y":-320,"trait":"line"},{"x":840,"y":-
320,"trait":"line"},{"x":1150,"y":180,"trait":"line"},
{"x":1030,"y":180,"trait":"line"},{"x":1150,"y":-180,"trait":"line"},
{"x":1030,"y":-180,"trait":"line"},{"x":840,"y":-130,"trait":"line","curve":-130},
{"x":840,"y":130,"trait":"line","curve":-130},{"x":-1150,"y":-320,"trait":"line"},
{"x":-840,"y":-320,"trait":"line"},{"x":-1150,"y":320,"trait":"line"},{"x":-
840,"y":320,"trait":"line"},{"x":-1150,"y":-175,"trait":"line"},{"x":-1030,"y":-
175,"trait":"line"},{"x":-1150,"y":175,"trait":"line"},{"x":-
1030,"y":175,"trait":"line"},{"x":-840,"y":130,"trait":"line","curve":-130},{"x":-
840,"y":-130,"trait":"line","curve":-130},{"x":935,"y":3,"trait":"line"},
{"x":935,"y":-3,"trait":"line"},{"x":-935,"y":3,"trait":"line"},{"x":-935,"y":-
3,"trait":"line"},{"x":-1150,"y":570,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"x":-1120,"y":600,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"x":-1120,"y":-600,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"x":-1150,"y":-570,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"x":1120,"y":600,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"x":1150,"y":570,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"x":1150,"y":-570,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"x":1120,"y":-600,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"x":0,"y":180,"bCoef":0.1,"cMask":["red","blue"],"cGroup":
["blueKO"],"trait":"kickOffBarrier","curve":-180},{"x":0,"y":-
180,"bCoef":0.1,"cMask":["red","blue"],"cGroup":
["redKO"],"trait":"kickOffBarrier","curve":180},{"x":0,"y":180,"bCoef":0.1,"cMask":
["red","blue"],"cGroup":["redKO"],"trait":"kickOffBarrier","curve":180},{"x":-
1030,"y":-40,"bCoef":-5.7,"cMask":["ball"],"cGroup":
["c0"],"trait":"line","curve":70,"color":"576C46","vis":false},{"x":-
1030,"y":40,"bCoef":-5.7,"cMask":["ball"],"cGroup":
["c0"],"trait":"line","curve":70,"color":"576C46","vis":false},{"x":1030,"y":-
40,"bCoef":-5.7,"cMask":["ball"],"cGroup":["c0"],"trait":"line","curve":-
70,"color":"576C46","vis":false},{"x":1030,"y":40,"bCoef":-5.7,"cMask":
["ball"],"cGroup":["c0"],"trait":"line","curve":-70,"color":"576C46","vis":false},
{"x":1030,"y":-40,"trait":"line","color":"576C46"},
{"x":1030,"y":40,"trait":"line","color":"576C46"},{"x":-1030,"y":-
40,"trait":"line","color":"576C46"},{"x":-
1030,"y":40,"trait":"line","color":"576C46"},{"x":0,"y":3,"trait":"line"},
{"x":0,"y":-3,"trait":"line"},{"x":-1300,"y":-460,"bCoef":0,"cMask":
["c1"],"cGroup":["red","blue"],"color":"ec644b","vis":false},{"x":1300,"y":-
460,"bCoef":0,"cMask":["c1"],"cGroup":["red","blue"],"color":"ec644b","vis":false},
{"x":-1300,"y":460,"bCoef":0,"cMask":["c1"],"cGroup":
["red","blue"],"color":"ec644b","vis":false},{"x":1300,"y":460,"bCoef":0,"cMask":
["c1"],"cGroup":["red","blue"],"color":"ec644b","vis":false},{"x":-1295,"y":-
320,"cMask":["c0"],"cGroup":["red","blue"]},{"x":-304,"y":-324,"cMask":
["c0"],"cGroup":["red","blue"],"_selected":"segment"},{"x":-304,"y":316,"cMask":
["c0"],"cGroup":["red","blue"],"_selected":"segment"},{"x":-1295,"y":320,"cMask":
["c0"],"cGroup":["red","blue"]},{"x":1295,"y":-320,"cMask":["c0"],"cGroup":
["red","blue"]},{"x":306,"y":-319,"cMask":["c0"],"cGroup":["red","blue"]},
{"x":306,"y":321,"cMask":["c0"],"cGroup":["red","blue"]},{"x":1295,"y":320,"cMask":
["c0"],"cGroup":["red","blue"]},{"x":-1150,"y":-124,"bCoef":0.1,"cMask":
["ball","red","blue"]},{"x":-1210,"y":-124,"bCoef":0.1,"cMask":
["red","blue"],"bias":0,"curve":5},{"x":-1150,"y":124,"bCoef":0.1,"cMask":
["ball","red","blue"]},{"x":-1210,"y":124,"bCoef":0.1,"cMask":
["red","blue"],"bias":0,"curve":5},{"x":-1250,"y":-158,"bCoef":0,"cMask":["ball"]},
{"x":-1250,"y":158,"bCoef":0,"cMask":["ball"]},
{"x":1150,"y":124,"bCoef":0.1,"cMask":["ball","red","blue"]},
{"x":1210,"y":124,"bCoef":0.1,"cMask":["red","blue"],"curve":-5},{"x":1150,"y":-
124,"bCoef":0.1,"cMask":["ball","red","blue"]},{"x":1210,"y":-
124,"bCoef":0.1,"cMask":["red","blue"],"curve":-5},{"x":1250,"y":-
158,"bCoef":0,"cMask":["ball"]},{"x":1250,"y":158,"bCoef":0,"cMask":["ball"]},
{"x":-327,"y":-457,"cMask":["c0"],"cGroup":["red","blue"]},{"x":-303,"y":-
327,"cMask":["c0"],"cGroup":["red","blue"]},{"x":-394,"y":-595,"cMask":
["c0"],"cGroup":["red","blue"]},{"x":-327,"y":-461,"cMask":["c0"],"cGroup":
["red","blue"]},{"x":-403,"y":-669,"cMask":["c0"],"cGroup":["red","blue"]},{"x":-
395,"y":-596,"cMask":["c0"],"cGroup":["red","blue"]},{"x":-304,"y":316,"cMask":
["c0"],"cGroup":["red","blue"]},{"x":-328,"y":459,"cMask":["c0"],"cGroup":
["red","blue"]},{"x":-328,"y":460,"cMask":["c0"],"cGroup":["red","blue"]},{"x":-
379,"y":600,"cMask":["c0"],"cGroup":["red","blue"]},{"x":-379,"y":601,"cMask":
["c0"],"cGroup":["red","blue"]},{"x":-384,"y":668,"cMask":["c0"],"cGroup":
["red","blue"]},{"x":307.61590626147046,"y":319.0654264152458,"cMask":
["c0"],"cGroup":["red","blue"]},
{"x":323.9057685035773,"y":453.0528899636434,"cMask":["c0"],"cGroup":
["red","blue"]},{"x":306.4664672761953,"y":322.01140503348614,"cMask":
["c0"],"cGroup":["red","blue"]},
{"x":383.88891087287516,"y":594.2443296174146,"cMask":["c0"],"cGroup":
["red","blue"]},{"x":323.7048331685431,"y":457.04783989964193,"cMask":
["c0"],"cGroup":["red","blue"]},
{"x":389.16024453074044,"y":668.6030079372144,"cMask":["c0"],"cGroup":
["red","blue"]},{"x":384.83741452311625,"y":595.2933009351727,"cMask":
["c0"],"cGroup":["red","blue"]},{"x":330,"y":-461,"cMask":["c0"],"cGroup":
["red","blue"]},{"x":306,"y":-318,"cMask":["c0"],"cGroup":["red","blue"]},
{"x":388,"y":-600,"cMask":["c0"],"cGroup":["red","blue"]},{"x":334,"y":-
465,"cMask":["c0"],"cGroup":["red","blue"]},{"x":394,"y":-667,"cMask":
["c0"],"cGroup":["red","blue"]},{"x":388,"y":-600,"cMask":["c0"],"cGroup":
["red","blue"]}],"segments":[{"v0":0,"v1":1,"trait":"kickOffBarrier"},
{"v0":2,"v1":3,"trait":"kickOffBarrier"},{"v0":4,"v1":5,"trait":"line","y":320},
{"v0":5,"v1":7,"trait":"line","x":840},{"v0":6,"v1":7,"trait":"line","y":-320},
{"v0":8,"v1":9,"trait":"line","y":180},{"v0":9,"v1":11,"trait":"line","x":1030},
{"v0":10,"v1":11,"trait":"line","y":-180},{"v0":12,"v1":13,"curve":-
130,"trait":"line","x":840},{"v0":14,"v1":15,"trait":"line","y":-320},
{"v0":15,"v1":17,"trait":"line","x":-840},{"v0":16,"v1":17,"trait":"line","y":320},
{"v0":18,"v1":19,"trait":"line","y":-175},{"v0":19,"v1":21,"trait":"line","x":-
1030},{"v0":20,"v1":21,"trait":"line","y":175},{"v0":22,"v1":23,"curve":-
130,"trait":"line","x":-840},{"v0":24,"v1":25,"curve":-180,"trait":"line","x":935},
{"v0":26,"v1":27,"curve":-180,"trait":"line","x":-935},
{"v0":24,"v1":25,"curve":180,"trait":"line","x":935},
{"v0":26,"v1":27,"curve":180,"trait":"line","x":-935},
{"v0":24,"v1":25,"curve":90,"trait":"line","x":935},
{"v0":26,"v1":27,"curve":90,"trait":"line","x":-935},{"v0":24,"v1":25,"curve":-
90,"trait":"line","x":935},{"v0":26,"v1":27,"curve":-90,"trait":"line","x":-935},
{"v0":24,"v1":25,"trait":"line","x":935},{"v0":26,"v1":27,"trait":"line","x":-935},
{"v0":28,"v1":29,"curve":90,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"v0":30,"v1":31,"curve":90,"bCoef":-2.9,"cMask":
["ball"],"cGroup":["c0"],"trait":"line"},{"v0":32,"v1":33,"curve":90,"bCoef":-
2.9,"cMask":["ball"],"cGroup":["c0"],"trait":"line"},
{"v0":34,"v1":35,"curve":90,"bCoef":-2.9,"cMask":["ball"],"cGroup":
["c0"],"trait":"line"},{"v0":37,"v1":36,"curve":-
180,"vis":false,"bCoef":0.1,"cGroup":["blueKO"],"trait":"kickOffBarrier"},
{"v0":39,"v1":40,"curve":70,"vis":false,"color":"576C46","bCoef":-5.7,"cMask":
["ball"],"cGroup":["c0"],"trait":"line","x":-1030},{"v0":41,"v1":42,"curve":-
70,"vis":false,"color":"576C46","bCoef":-5.7,"cMask":["ball"],"cGroup":
["c0"],"trait":"line","x":1030},
{"v0":37,"v1":38,"curve":180,"vis":false,"bCoef":0.1,"cMask":
["red","blue"],"cGroup":["redKO"],"trait":"kickOffBarrier"},
{"v0":43,"v1":44,"vis":true,"color":"576C46","trait":"line","x":1030},
{"v0":45,"v1":46,"vis":true,"color":"576C46","trait":"line","x":-1030},
{"v0":47,"v1":48,"curve":-180,"trait":"line","x":-935},
{"v0":47,"v1":48,"curve":180,"trait":"line","x":-935},
{"v0":47,"v1":48,"curve":90,"trait":"line","x":-935},{"v0":47,"v1":48,"curve":-
90,"trait":"line","x":-935},{"v0":47,"v1":48,"trait":"line","x":-935},
{"v0":49,"v1":50,"vis":false,"color":"ec644b","bCoef":0,"cMask":["c1"],"cGroup":
["red","blue"],"y":-460},
{"v0":51,"v1":52,"vis":false,"color":"ec644b","bCoef":0,"cMask":["c1"],"cGroup":
["red","blue"],"y":460},{"v0":53,"v1":54,"vis":false,"color":"ec644b","cMask":
["c0"],"cGroup":["red","blue"]},
{"v0":54,"v1":55,"vis":false,"color":"ec644b","cMask":["c0"],"cGroup":
["red","blue"],"_selected":true},
{"v0":55,"v1":56,"vis":false,"color":"ec644b","cMask":["c0"],"cGroup":
["red","blue"]},{"v0":57,"v1":58,"vis":false,"cMask":["c0"],"cGroup":
["red","blue"]},{"v0":58,"v1":59,"vis":false,"cMask":["c0"],"cGroup":
["red","blue"],"curve":0},{"v0":59,"v1":60,"vis":false,"cMask":["c0"],"cGroup":
["red","blue"]},{"v0":61,"v1":62,"color":"FFFFFF","bCoef":0.1,"cMask":
["ball","red","blue"],"y":-124},
{"v0":63,"v1":64,"color":"FFFFFF","bCoef":0.1,"cMask":
["ball","red","blue"],"y":124},
{"v0":64,"v1":62,"curve":5,"color":"FFFFFF","bCoef":0.1,"cMask":
["ball","red","blue"],"bias":0},
{"v0":62,"v1":65,"color":"FFFFFF","bCoef":0,"cMask":["ball"]},{"v0":64,"v1":66,"
color":"FFFFFF","bCoef":0,"cMask":["ball"]},
{"v0":67,"v1":68,"color":"FFFFFF","bCoef":0.1,"cMask":
["ball","red","blue"],"y":124},
{"v0":69,"v1":70,"color":"FFFFFF","bCoef":0.1,"cMask":["ball","red","blue"],"y":-
124},{"v0":68,"v1":70,"curve":-5,"color":"FFFFFF","bCoef":0.1,"cMask":
["ball","red","blue"]},{"v0":70,"v1":71,"color":"FFFFFF","bCoef":0,"cMask":
["ball"]},{"v0":68,"v1":72,"color":"FFFFFF","bCoef":0,"cMask":["ball"]},
{"v0":73,"v1":74,"vis":false,"color":"ec644b","cMask":["c0"],"cGroup":
["red","blue"]},{"v0":75,"v1":76,"vis":false,"color":"ec644b","cMask":
["c0"],"cGroup":["red","blue"]},
{"v0":77,"v1":78,"vis":false,"color":"ec644b","cMask":["c0"],"cGroup":
["red","blue"]},{"v0":79,"v1":80,"vis":false,"color":"ec644b","cMask":
["c0"],"cGroup":["red","blue"]},
{"v0":81,"v1":82,"vis":false,"color":"ec644b","cMask":["c0"],"cGroup":
["red","blue"]},{"v0":83,"v1":84,"vis":false,"color":"ec644b","cMask":
["c0"],"cGroup":["red","blue"]},
{"v0":86,"v1":87,"vis":false,"color":"ec644b","cMask":["c0"],"cGroup":
["red","blue"]},{"v0":88,"v1":89,"vis":false,"color":"ec644b","cMask":
["c0"],"cGroup":["red","blue"]},
{"v0":90,"v1":91,"vis":false,"color":"ec644b","cMask":["c0"],"cGroup":
["red","blue"]},{"v0":92,"v1":93,"vis":false,"color":"ec644b","cMask":
["c0"],"cGroup":["red","blue"]},
{"v0":94,"v1":95,"vis":false,"color":"ec644b","cMask":["c0"],"cGroup":
["red","blue"]},{"v0":96,"v1":97,"vis":false,"color":"ec644b","cMask":
["c0"],"cGroup":["red","blue"]}],"goals":[{"p0":[-1161.45,124],"p1":[-1161.45,-
124],"team":"red"},{"p0":[1161.45,124],"p1":[1161.45,-
124],"team":"blue","radius":0,"invMass":1}],"discs":[{"radius":0,"invMass":0,"pos":
[-1311,-19],"color":"ffffffff","bCoef":0,"cMask":["red"],"cGroup":["ball"]},
{"radius":0,"invMass":0,"pos":[-1310,29],"color":"ffffffff","bCoef":0,"cMask":
["blue"],"cGroup":["ball"]},{"radius":0,"invMass":0,"pos":[-
1308,62],"color":"ffffffff","bCoef":0,"cMask":["red","blue"],"cGroup":["ball"]},
{"radius":2.7,"pos":[-1150,600],"cGroup":["ball"],"trait":"cornerflag"},
{"radius":2.7,"pos":[1150,-600],"cGroup":["ball"],"trait":"cornerflag"},
{"radius":2.7,"pos":[1150,600],"cGroup":["ball"],"trait":"cornerflag"},
{"radius":5,"invMass":0,"pos":[-1150,-124],"bCoef":0.5,"trait":"goalPost"},
{"radius":5,"invMass":0,"pos":[-1150,124],"bCoef":0.5,"trait":"goalPost"},
{"radius":2,"invMass":0,"pos":[-1250,-
158],"color":"000000","bCoef":1,"trait":"goalPost"},{"radius":2,"invMass":0,"pos":
[-1250,158],"color":"000000","bCoef":1,"trait":"goalPost"},
{"radius":5,"invMass":0,"pos":[1150,-124],"bCoef":0.5,"trait":"goalPost"},
{"radius":5,"invMass":0,"pos":[1150,124],"bCoef":0.5,"trait":"goalPost"},
{"radius":2,"invMass":0,"pos":[1250,-
158],"color":"000000","bCoef":1,"trait":"goalPost"},{"radius":2,"invMass":0,"pos":
[1250,158],"color":"000000","bCoef":1,"trait":"goalPost"},{"radius":2.7,"pos":[-
1150,-600],"cGroup":["ball"],"trait":"cornerflag"},{"radius":0,"pos":[-1149,-
460],"cMask":["none"]},{"radius":0,"pos":[1149,-460],"cMask":["none"]},
{"radius":0,"pos":[-1149,-460],"cMask":["none"]},{"radius":0,"pos":[1149,-
460],"cMask":["none"]},{"radius":0,"pos":[-1149,460],"cMask":["none"]},
{"radius":0,"pos":[1149,460],"cMask":["none"]},{"radius":0,"pos":[-
1149,460],"cMask":["none"]},{"radius":0,"pos":[1149,460],"cMask":
["none"]}],"planes":[{"normal":[0,1],"dist":-627,"bCoef":0,"cGroup":
["ball"],"trait":"ballArea"},{"normal":[0,-1],"dist":-627,"bCoef":0,"cGroup":
["ball"],"trait":"ballArea"},{"normal":[0,1],"dist":-670,"bCoef":0},{"normal":[0,-
1],"dist":-673,"bCoef":0},{"normal":[1,0],"dist":-1300,"bCoef":0},{"normal":[-
1,0],"dist":-1300,"bCoef":0.1},{"normal":[1,0],"dist":-1230,"bCoef":0,"cMask":
["ball"],"cGroup":["ball"]},{"normal":[-1,0],"dist":-1230,"bCoef":0,"cMask":
["ball"],"cGroup":["ball"]}],"traits":{"ballArea":{"vis":false,"bCoef":0,"cMask":
["ball"],"cGroup":["ball"]},"goalPost":{"radius":5,"invMass":0,"bCoef":1,"cGroup":
["ball"]},"rightNet":{"radius":0,"invMass":1,"bCoef":0,"cGroup":
["ball","c3"]},"leftNet":{"radius":0,"invMass":1,"bCoef":0,"cGroup":
["ball","c2"]},"stanchion":{"radius":3,"invMass":0,"bCoef":3,"cMask":
["none"]},"cornerflag":
{"radius":3,"invMass":0,"bCoef":0.2,"color":"FFFF00","cMask":
["ball"]},"reargoalNetleft":{"vis":true,"bCoef":0.1,"cMask":
["ball","red","blue"],"curve":10,"color":"C7E6BD"},"reargoalNetright":
{"vis":true,"bCoef":0.1,"cMask":["ball","red","blue"],"curve":-
10,"color":"C7E6BD"},"sidegoalNet":{"vis":true,"bCoef":1,"cMask":
["ball","red","blue"],"color":"C7E6BD"},"kickOffBarrier":
{"vis":false,"bCoef":0.1,"cGroup":["redKO","blueKO"],"cMask":
["red","blue"]},"line":{"vis":true,"cMask":[],"color":"C7E6BD"}},"joints":
[{"d0":16,"d1":17,"strength":"rigid","color":"ec7458","length":null},
{"d0":18,"d1":19,"strength":"rigid","color":"48bef9","length":null},
{"d0":20,"d1":21,"strength":"rigid","color":"ec7458","length":null},
{"d0":22,"d1":23,"strength":"rigid","color":"48bef9","length":null}],"redSpawnPoint
s":[],"blueSpawnPoints":[],"canBeStored":false}`;

/*------------------------------ END OF STADIUMS ----------------------------*/

// ------------------------------------------------
// Global Variables
// ------------------------------------------------
var roomName = "⚽ Rᴇᴀʟ Sᴏᴄᴄᴇʀ ⚽";
var roomPassword = null;
var maxPlayers = 20;
var roomPublic = false;
var token = "";
var roomLink = "";
var gameTime = 10; //default game time if 0 is selected
var map = "RSR";
var superAdmins = [];
var rolePro = [];
var roleTa = [];
var roleToxic = [];
var roleVipPro = [];
var roleVipPro2 = [];
var JMap = JSON.parse(realSoccerMap);

var room = HBInit({


roomName: roomName,
password: roomPassword,
maxPlayers: maxPlayers,
public: roomPublic,
geo: {"lat":16.0023,"lon":105.9999,"code":"vn"},
noPlayer: true,
token: token
});
var roomObject = {
randomUniforms: true,
};

function initPlayerStats(player){
}

// Team //
var teams = ["spectators","red","blue"];
function movePlayersToTeams(player,message){
var team = parseInt(message.split(" ")[1]);
var players = room.getPlayerList();

if(player.admin == true){
if(0 <= team && team <= 2){
players.forEach(p => room.setPlayerTeam(p.id,team));
room.sendAnnouncement("Tất cả người chơi đã bị chuyển qua " + teams[team]
+ " bởi " + player.name,null,0x00FF00,"bold",0);
}
else{
room.sendAnnouncement("ID Team không hợp
lệ!",player.id,0xFFFF00,"bold",1);
}
}
else{
room.sendAnnouncement("You have no authorization to move players to
teams!",player.id,0xFF0000,"bold",2);
}
}

// chat
var messageColors = {
superadmin: 0xfff000,
admin: 0x66ff00,
pro: 0x00ffff,
vippro: 0x00ffff,
red: 0xEB3636,
blue: 0x0fc0fc,
spec: 0xFFFFFF
};
var statusplay = " [Đang đá] ";
var statusreserve = "🔰";
var prefixsuperadmin = "👑"
var prefixadmin = "👑";
var prefixpro = "⭐";
var prefixvippro = "🌟";
var prefixtoxic = "🤡";
var prefixta = "Tạ";
var prefixvippro2 = "🏅"
var prefixred = "🔴";
var prefixblue = "🔵";
var messageTarget = null;
var messageFonts = {normal: "normal", bold: "bold", italic: "italic", small:
"small", small_bold: "small-bold", small_italic: "small-italic"};
var messageSounds = {nothing: 0, normal: 1, highlight: 2};

// color random
/* var teams = [
{ ID: 1, name: "1", uniform: [{ angle: 55, mainColor: [0xC4D6E9, 0x7E8FA1,
0xC4D6E9], avatarColor: 0x08070F }, { angle: 10, mainColor: [0x18202B, 0x0C3F51,
0x18202B], avatarColor: 0xF9812D }] },
{ ID: 2, name: "2", uniform: [{ angle: 45, mainColor: [0x2E5FC5, 0x454569,
0x2E5FC5], avatarColor: 0xE4282D }, { angle: 60, mainColor: [0x000305, 0xFFFFFF,
0x000000], avatarColor: 0xFFFFFF }] },
{ ID: 3, name: "3", uniform: [{ angle: 45, mainColor: [0x252B38, 0x333A44,
0x252B38], avatarColor: 0xFFFFFF }, { angle: 45, mainColor: [0x9B3D58, 0xB0436C,
0x9B3D58], avatarColor: 0xFFFFFF }] },
{ ID: 4, name: "4", uniform: [{ angle: 95, mainColor: [0x9A2734, 0xBF2E2F,
0xBF2E2F], avatarColor: 0xFAF9FA }, { angle: 0, mainColor: [0x141217, 0xB9BFD7],
avatarColor: 0x878695 }] },
{ ID: 5, name: "5", uniform: [{ angle: 0, mainColor: [0xFFFFFF, 0x8E5D5D,
0xFFFFFF], avatarColor: 0x451517 }, { angle: 0, mainColor: [0xFF0000, 0x000000,
0xFF1212], avatarColor: 0xFFFFFF }] },
{ ID: 6, name: "6", uniform: [{ angle: 60, mainColor: [0xFFDE3B, 0xFF9538,
0xFF5A30], avatarColor: 0xFFFFFF }, { angle: 60, mainColor: [0xFF4C30, 0xE01919,
0xA81919], avatarColor: 0xFFFFFF }] },
{ ID: 7, name: "7", uniform: [{ angle: 0, mainColor: [0x060B2B, 0xBCBCC6,
0x060B2B], avatarColor: 0xFFFFFF }, { angle: 0, mainColor: [0x241944, 0x12151C,
0x241944], avatarColor: 0xa27546 }] },
{ ID: 8, name: "8", uniform: [{ angle: 45, mainColor: [0x750087, 0xA100BA],
avatarColor: 0xFFFFFF }, { angle: 0, mainColor: [0xE3DB00, 0xBFBF00, 0xA19600],
avatarColor: 0xFFFFFF }] },
{ ID: 9, name: "9", uniform: [{ angle: 45, mainColor: [0xFFFFFF, 0xB4EDF8,
0xFFFFFF], avatarColor: 0xF2A3F5A }, { angle: 45, mainColor: [0xCC1385, 0xF0F0F0,
0xCC1385], avatarColor: 0x030303 }] },
{ ID: 10, name: "10", uniform: [{ angle: 90, mainColor: [0xFA99F7, 0xF8C7FF,
0xFFFFFF], avatarColor: 0x000000 }, { angle: 60, mainColor: [0x0080FF, 0x2B0B77],
avatarColor: 0xFFFFFF }] },
{ ID: 11, name: "11", uniform: [{ angle: 140, mainColor: [0x000000, 0xBF0000,
0x000000], avatarColor: 0xADAD47 }, { angle: 0, mainColor: [0xA100FF, 0xFFFFFF],
avatarColor: 0x000000 }] },
{ ID: 12, name: "12", uniform: [{ angle: 0, mainColor: [0x700000, 0x00058A,
0x700000], avatarColor: 0xFFEE03 }, { angle: 0, mainColor: [0x004182, 0x000000,
0x004182], avatarColor: 0xFFFFFF }] },
{ ID: 13, name: "13", uniform: [{ angle: 60, mainColor: [0xF7FF00, 0x776700,
0x303300], avatarColor: 0xFFFFFF }, { angle: 60, mainColor: [0xA100FF, 0x430077,
0x250033], avatarColor: 0xFFFFFF }] },
{ ID: 14, name: "14", uniform: [{ angle: 60, mainColor: [0x11FF00, 0x047700,
0x073300], avatarColor: 0xFFFFFF }, { angle: 60, mainColor: [0xFFFFFF, 0x777777,
0x333333], avatarColor: 0x2E8FFF }] },
{ ID: 14, name: "14", uniform: [{ angle: 0, mainColor: [0x0080FF, 0xF8FFF7,
0x0080FF], avatarColor: 0x000000 }, { angle: 0, mainColor: [0x004077, 0xFFF700,
0x004077], avatarColor: 0xFFFFFF }] },
]; */
var teams = [
{ ID: 1, shortName: "trn", longName: "KF Tirana", country: "Albania", uniform:
[{ angle: 0, mainColor: [0x0059AB, 0xFFFFFF, 0x0059AB], avatarColor: 0xFFCA03 },
{ angle: 0, mainColor: [0xFFCA03], avatarColor: 0x0059AB }] },
{ ID: 2, shortName: "boca", longName: "Club Atlético Boca Juniors", country:
"Argentina", uniform: [{ angle: 0, mainColor: [0x103F79, 0xF3B229, 0x103F79],
avatarColor: 0xFFFFFF }, { angle: 0, mainColor: [0xFFFFFF], avatarColor:
0x103F79 }] },
{ ID: 3, shortName: "rvp", longName: "Club Atlético River Plate", country:
"Argentina", uniform: [{ angle: 30, mainColor: [0xFFFFFF, 0xFF0000, 0xFFFFFF],
avatarColor: 0x000000 }, { angle: 0, mainColor: [0x000000, 0x404040, 0x000000],
avatarColor: 0xFF0000 }] },
{ ID: 4, shortName: "mlb", longName: "Melbourne City FC", country: "Australia",
uniform: [{ angle: 0, mainColor: [0x7AB2E1], avatarColor: 0xE31934 }, { angle: 0,
mainColor: [0x000000], avatarColor: 0xE31934 }] },
{ ID: 5, shortName: "slz", longName: "FC Red Bull Salzburg", country:
"Austria", uniform: [{ angle: 15, mainColor: [0xFF0000, 0xFFFFFF, 0xFF0000],
avatarColor: 0x000000 }, { angle: 15, mainColor: [0x000080, 0xFFFF00, 0x000080],
avatarColor: 0xFFFFFF }] },
{ ID: 6, shortName: "sgrz", longName: "SK Sturm Graz", country: "Austria",
uniform: [{ angle: 0, mainColor: [0xFFFFFF, 0x000000, 0xFFFFFF], avatarColor:
0x00C000 }, { angle: 0, mainColor: [0x000000], avatarColor: 0x00C000 }] },
{ ID: 7, shortName: "bate", longName: "FK BATE Borisov", country: "Belarus",
uniform: [{ angle: 0, mainColor: [0xFFFF00, 0x0080FF, 0xFFFF00], avatarColor:
0x000000 }, { angle: 0, mainColor: [0xFFFF00], avatarColor: 0x0080FF }] },
{ ID: 8, shortName: "gml", longName: "FK Gomel", country: "Belarus", uniform:
[{ angle: 0, mainColor: [0xFFFFFF, 0x00C000, 0xFFFFFF], avatarColor: 0x000000 },
{ angle: 0, mainColor: [0x000000, 0x00FF00, 0x000000], avatarColor: 0xFFFFFF }] },
{ ID: 9, shortName: "clb", longName: "Club Brugge KV", country: "Belgium",
uniform: [{ angle: 0, mainColor: [0x000000, 0x0000FF, 0x000000], avatarColor:
0xFFFFFF }, { angle: 45, mainColor: [0xFFFFFF, 0xC0C0C0, 0xFFFFFF], avatarColor:
0x0000FF }] },
{ ID: 10, shortName: "gnt", longName: "KAA Gent", country: "Belgium", uniform:
[{ angle: 0, mainColor: [0x0000FF], avatarColor: 0xFFFFFF }, { angle: 0, mainColor:
[0xFFFF00], avatarColor: 0x0000FF }] },
{ ID: 11, shortName: "gnk", longName: "KRC Genk", country: "Belgium", uniform:
[{ angle: 0, mainColor: [0x000080, 0x0000FF, 0x000080], avatarColor: 0xFFFFFF },
{ angle: 90, mainColor: [0x000000, 0xFFFFFF, 0x000000], avatarColor: 0x0000FF }] },
{ ID: 12, shortName: "ant", longName: "Royal Antwerp FC", country: "Belgium",
uniform: [{ angle: 90, mainColor: [0xC00000, 0xFF0000, 0xC00000], avatarColor:
0xFFFFFF }, { angle: 0, mainColor: [0xFFFF00, 0xFFFF00, 0x000000], avatarColor:
0xFF0000 }] },
{ ID: 13, shortName: "and", longName: "RSC Anderlecht", country: "Belgium",
uniform: [{ angle: 0, mainColor: [0x8000FF, 0x400080, 0x8000FF], avatarColor:
0xFFFFFF }, { angle: 0, mainColor: [0xFFFFFF, 0xC0C0C0, 0xFFFFFF], avatarColor:
0x8000FF }] },
{ ID: 14, shortName: "fla", longName: "CR Flamengo", country: "Brazil",
uniform: [{ angle: 90, mainColor: [0x000000, 0xFF0000, 0x000000], avatarColor:
0xFFFFFF }, { angle: 90, mainColor: [0xFFFFFF, 0x000000, 0xFFFFFF], avatarColor:
0xFF0000 }] },
{ ID: 15, shortName: "san", longName: "Santos FC", country: "Brazil", uniform:
[{ angle: 0, mainColor: [0xC00000, 0xFF4000, 0xC00000], avatarColor: 0x000000 },
{ angle: 0, mainColor: [0xFF4000, 0xC00000], avatarColor: 0x000000 }] },
{ ID: 16, shortName: "sao", longName: "São Paulo FC", country: "Brazil",
uniform: [{ angle: 0, mainColor: [0xFFFFFF, 0xE0E0E0, 0xFFFFFF], avatarColor:
0x000000 }, { angle: 0, mainColor: [0x000000, 0xFFFFFF, 0x000000], avatarColor:
0xFFFF00 }] },
{ ID: 17, shortName: "cor", longName: "SC Corinthians Paulista", country:
"Brazil", uniform: [{ angle: 90, mainColor: [0xFFFFFF, 0x000000, 0xFFFFFF],
avatarColor: 0x808080 }, { angle: 90, mainColor: [0x000000, 0xFFFFFF, 0x000000],
avatarColor: 0x008000 }] },
{ ID: 18, shortName: "pal", longName: "SE Palmeiras", country: "Brazil",
uniform: [{ angle: 90, mainColor: [0x008000, 0xFFFFFF, 0x008000], avatarColor:
0xFFFFC0 }, { angle: 0, mainColor: [0xFFFFFF, 0x008000, 0xFFFFFF], avatarColor:
0xFFFFC0 }] },
{ ID: 19, shortName: "lud", longName: "PFK Ludogorets Razgrad", country:
"Bulgaria", uniform: [{ angle: 75, mainColor: [0x008000, 0xFFFFFF, 0x008000],
avatarColor: 0x000000 }, { angle: 0, mainColor: [0x008000], avatarColor:
0xFFFFFF }] },
{ ID: 20, shortName: "bei", longName: "Beijing Guoan FC", country: "China",
uniform: [{ angle: 0, mainColor: [0x00C000, 0x008000, 0x00C000], avatarColor:
0xFFFF00 }, { angle: 0, mainColor: [0x80FF00, 0xFFFFFF, 0x80FF00], avatarColor:
0xFFFF00 }] },
{ ID: 21, shortName: "gua", longName: "Guangzhou FC", country: "China",
uniform: [{ angle: 90, mainColor: [0xFF4000, 0xFFFFFF, 0xFF4000], avatarColor:
0x000000 }, { angle: 90, mainColor: [0xFFFF00, 0x808080, 0xFFFF00], avatarColor:
0xFFFFFF }] },
{ ID: 22, shortName: "zag", longName: "GNK Dinamo Zagreb", country: "Croatia",
uniform: [{ angle: 45, mainColor: [0x000080, 0x0000FF, 0x000080], avatarColor:
0xFFFFFF }, { angle: 90, mainColor: [0xFF8000, 0xFFFF00, 0xFFFF00], avatarColor:
0x0000FF }] },
{ ID: 23, shortName: "sppr", longName: "Sparta Prague", country: "Czechia",
uniform: [{ angle: 0, mainColor: [0x800000, 0xFFFFFF, 0x000000], avatarColor:
0xFFC000 }, { angle: 0, mainColor: [0xFFFFFF, 0x800000, 0xFFFFFF], avatarColor:
0xFFC000 }] },
{ ID: 24, shortName: "plz", longName: "FC Viktoria Plzeň", country: "Czechia",
uniform: [{ angle: 0, mainColor: [0x0000FF, 0xFF0000, 0x0000FF], avatarColor:
0xFFFFFF }, { angle: 0, mainColor: [0x000000, 0x0000FF, 0xFF0000], avatarColor:
0xFFFFFF }] },
{ ID: 25, shortName: "sgm", longName: "SK Sigma Olomouc", country: "Czechia",
uniform: [{ angle: 0, mainColor: [0x4080C0, 0xFFFFFF, 0x4080C0], avatarColor:
0x000000 }, { angle: 0, mainColor: [0xFF0000, 0xC00000, 0xFF0000], avatarColor:
0x0000FF }] },
{ ID: 26, shortName: "slpr", longName: "SK Slavia Prague", country: "Czechia",
uniform: [{ angle: 0, mainColor: [0xFF0000, 0xFFFFFF], avatarColor: 0x000000 },
{ angle: 0, mainColor: [0x0060C0, 0x0080FF], avatarColor: 0x000000 }] },
{ ID: 27, shortName: "bro", longName: "Brøndby IF", country: "Denmark",
uniform: [{ angle: 90, mainColor: [0xFFFF00, 0x0000FF, 0x0000FF], avatarColor:
0x000000 }, { angle: 0, mainColor: [0x404040, 0x808080, 0x404040], avatarColor:
0xFFFF00 }] },
{ ID: 28, shortName: "cop", longName: "Copenhagen FC", country: "Denmark",
uniform: [{ angle: 0, mainColor: [0xFFFFFF], avatarColor: 0x0000FF }, { angle: 90,
mainColor: [0x000080, 0x000000, 0x000000], avatarColor: 0xFFFFFF }] },
{ ID: 29, shortName: "mid", longName: "FC Midtjylland", country: "Denmark",
uniform: [{ angle: 90, mainColor: [0x000000, 0x000000, 0xFFFFFF], avatarColor:
0xFF0000 }, { angle: 90, mainColor: [0x804080, 0x000080, 0x000080], avatarColor:
0xFFFFFF }] },
{ ID: 30, shortName: "nrs", longName: "FC Nordsjælland", country: "Denmark",
uniform: [{ angle: 0, mainColor: [0xFF0000], avatarColor: 0xFFFFFF }, { angle: 0,
mainColor: [0x0080FF], avatarColor: 0xFFFFFF }] },
{ ID: 31, shortName: "alh", longName: "Al Ahly", country: "Egypt", uniform:
[{ angle: 90, mainColor: [0xFF0000, 0xFFFFFF, 0xFF0000], avatarColor: 0xC0C000 }, {
angle: 90, mainColor: [0xC0C0C0, 0x000000, 0xC0C000], avatarColor: 0xC0C000 }] },
{ ID: 32, shortName: "mon", longName: "AS Monaco FC", country: "France",
uniform: [{ angle: 120, mainColor: [0xFF0000, 0xFFFFFF, 0xFFFFFF], avatarColor:
0xC0C000 }, { angle: 0, mainColor: [0x000000], avatarColor: 0xC0C000 }] },
{ ID: 33, shortName: "asse", longName: "AS Saint-Étienne", country: "France",
uniform: [{ angle: 90, mainColor: [0x00C000, 0xFFFFFF, 0x00C000], avatarColor:
0x000000 }, { angle: 90, mainColor: [0xFFFFFF, 0x00C000, 0xFFFFFF], avatarColor:
0x000000 }] },
{ ID: 34, shortName: "lil", longName: "Lille OSC", country: "France", uniform:
[{ angle: 90, mainColor: [0xFF0000, 0x000080, 0x000080], avatarColor: 0xFFFFFF }, {
angle: 90, mainColor: [0xFFFFFF, 0xFFFFFF, 0x000000], avatarColor: 0x000080 }] },
{ ID: 35, shortName: "ol", longName: "Olympique Lyonnais", country: "France",
uniform: [{ angle: 0, mainColor: [0xFFFFFF, 0xFF0000, 0x0000FF], avatarColor:
0x000000 }, { angle: 0, mainColor: [0xFF0000], avatarColor: 0x0000FF }] },
{ ID: 36, shortName: "mar", longName: "Olympique Marseille", country: "France",
uniform: [{ angle: 0, mainColor: [0x00C0FF, 0xFFFFFF, 0x00C0FF], avatarColor:
0x000000 }, { angle: 90, mainColor: [0x404080, 0x202040, 0x00C0FF], avatarColor:
0xFFFFFF }] },
{ ID: 37, shortName: "psg", longName: "Paris Saint Germain FC", country:
"France", uniform: [{ angle: 0, mainColor: [0x000080], avatarColor: 0xFF0000 },
{ angle: 0, mainColor: [0xFFFFFF, 0xFFFFFF, 0x000080], avatarColor: 0xFF0000 }] },
{ ID: 38, shortName: "lev", longName: "Bayer 04 Leverkusen", country:
"Germany", uniform: [{ angle: 90, mainColor: [0xFF0000, 0x000000, 0xFF0000],
avatarColor: 0xFFFFFF }, { angle: 0, mainColor: [0xFFFFFF, 0xC0C0C0, 0xFFFFFF],
avatarColor: 0xFF0000 }] },
{ ID: 39, shortName: "bay", longName: "Bayern Munchen", country: "Germany",
uniform: [{ angle: 90, mainColor: [0xFF0000, 0xC00000, 0xFF0000], avatarColor:
0xFFFFFF }, { angle: 90, mainColor: [0x000000, 0x404040, 0x000000], avatarColor:
0xC0C000 }] },
{ ID: 40, shortName: "dor", longName: "Borussia Dortmund", country: "Germany",
uniform: [{ angle: 90, mainColor: [0xFFFF00, 0x000000, 0xFFFF00], avatarColor:
0xFFFFFF }, { angle: 0, mainColor: [0x000000], avatarColor: 0xFFFF00 }] },
{ ID: 41, shortName: "sch", longName: "FC Schalke 04", country: "Germany",
uniform: [{ angle: 90, mainColor: [0x0000FF, 0xFFFFFF, 0x0000FF], avatarColor:
0x000000 }, { angle: 90, mainColor: [0xFFFFFF, 0x000080, 0xFFFFFF], avatarColor:
0x00FFFF }] },
{ ID: 42, shortName: "lei", longName: "RB Leipzig", country: "Germany",
uniform: [{ angle: 90, mainColor: [0xFFFFFF, 0xFF0000, 0xFF0000], avatarColor:
0xFFC000 }, { angle: 90, mainColor: [0x000000], avatarColor: 0xC0C000 }] },
{ ID: 43, shortName: "wol", longName: "VfL Wolfsburg", country: "Germany",
uniform: [{ angle: 0, mainColor: [0x00FF00], avatarColor: 0xFFFFFF }, { angle: 0,
mainColor: [0x000000, 0x00FF00, 0x000000], avatarColor: 0xFFFFFF }] },
{ ID: 44, shortName: "aek", longName: "AEK", country: "Greece", uniform:
[{ angle: 45, mainColor: [0x000000, 0xFFFF00, 0x000000], avatarColor: 0xFFFFFF }, {
angle: 90, mainColor: [0x000000, 0xFFFF00, 0xFFFF00], avatarColor: 0xFFFFFF }] },
{ ID: 45, shortName: "oly", longName: "Olympiacos", country: "Greece", uniform:
[{ angle: 0, mainColor: [0xFFFFFF, 0xFF0000, 0xFFFFFF], avatarColor: 0x000000 },
{ angle: 90, mainColor: [0xC0C0C0, 0xFFFFFF, 0xC0C0C0], avatarColor: 0x000000 }] },
{ ID: 46, shortName: "pan", longName: "Panathinaikos FC", country: "Greece",
uniform: [{ angle: 0, mainColor: [0x00C060], avatarColor: 0xFFFFFF }, { angle: 0,
mainColor: [0xFFFFFF], avatarColor: 0x00C060 }] },
{ ID: 47, shortName: "paok", longName: "PAOK", country: "Greece", uniform:
[{ angle: 0, mainColor: [0xFFFFFF, 0x000000, 0xFFFFFF], avatarColor: 0x008080 },
{ angle: 0, mainColor: [0x000000, 0x404040, 0x000000], avatarColor: 0xFFFFFF }] },
{ ID: 48, shortName: "btj", longName: "Beitar Jerusalem FC", country: "Israel",
uniform: [{ angle: 0, mainColor: [0x000000, 0xFFFF00, 0x000000], avatarColor:
0xFFFFFF }, { angle: 0, mainColor: [0x000000], avatarColor: 0xFFFF00 }] },
{ ID: 49, shortName: "hbe", longName: "Hapoel Be'er Sheva FC", country:
"Israel", uniform: [{ angle: 90, mainColor: [0xFF0000, 0xFFFFFF, 0xFFFFFF],
avatarColor: 0x000000 }, { angle: 90, mainColor: [0xE0E0E0, 0xFFFFFF, 0xFFFFFF],
avatarColor: 0xFF0000 }] },
{ ID: 50, shortName: "mch", longName: "Maccabi Haifa FC", country: "Israel",
uniform: [{ angle: 0, mainColor: [0xFFFFFF, 0x008000], avatarColor: 0x000000 },
{ angle: 90, mainColor: [0x404040, 0x000000, 0x404040], avatarColor: 0xFFFFFF }] },
{ ID: 51, shortName: "mca", longName: "Maccabi Tel Aviv FC", country: "Israel",
uniform: [{ angle: 90, mainColor: [0xFFFF00, 0x0000FF, 0xFFFF00], avatarColor:
0x000000 }, { angle: 90, mainColor: [0x000000, 0x000000, 0xFFFF00], avatarColor:
0xFFFFFF }] },
{ ID: 52, shortName: "mil", longName: "AC Milan", country: "Italy", uniform: [{
angle: 0, mainColor: [0xFF0000, 0x000000, 0xFF0000], avatarColor: 0xFFFFFF },
{ angle: 0, mainColor: [0xFEDCBA], avatarColor: 0x800000 }] },
{ ID: 53, shortName: "rom", longName: "AS Roma FC", country: "Italy", uniform:
[{ angle: 90, mainColor: [0xC00000, 0xFFC000, 0xC00000], avatarColor: 0xFFFFFF }, {
angle: 90, mainColor: [0x000080, 0x0000C0, 0x000080], avatarColor: 0xFFFFFF }] },
{ ID: 54, shortName: "int", longName: "FC Internazionale Milano", country:
"Italy", uniform: [{ angle: 0, mainColor: [0x000080, 0x0000FF, 0x000080],
avatarColor: 0xFFFFFF }, { angle: 0, mainColor: [0x000000, 0x0000FF, 0x000000],
avatarColor: 0xFFFFFF }] },
{ ID: 55, shortName: "juv", longName: "Juventus FC", country: "Italy", uniform:
[{ angle: 0, mainColor: [0xFFFFFF, 0x000000, 0xFFFFFF], avatarColor: 0xFFFF00 },
{ angle: 0, mainColor: [0x404040], avatarColor: 0xFFFF00 }] },
{ ID: 56, shortName: "nap", longName: "SSC Napoli", country: "Italy", uniform:
[{ angle: 90, mainColor: [0x0080FF, 0xFFFFFF, 0x0080FF], avatarColor: 0x000080 }, {
angle: 0, mainColor: [0x808000, 0xFFFFFF, 0x808000], avatarColor: 0x000080 }] },
{ ID: 57, shortName: "tor", longName: "Torino FC", country: "Italy", uniform:
[{ angle: 90, mainColor: [0x800000, 0xFFFFFF, 0x000000], avatarColor: 0xFFC000 }, {
angle: 45, mainColor: [0xFFFFFF, 0x800000, 0xFFFFFF], avatarColor: 0xFFC000 }] },
{ ID: 58, shortName: "ksh", longName: "Kashima Antlers", country: "Japan",
uniform: [{ angle: 90, mainColor: [0xFF0000, 0xC0C0C0, 0x000000], avatarColor:
0xFFFFFF }, { angle: 90, mainColor: [0xC0C0C0, 0xFFFFFF, 0xFFFFFF], avatarColor:
0xFF0000 }] },
{ ID: 59, shortName: "kws", longName: "Kawasaki Frontale", country: "Japan",
uniform: [{ angle: 90, mainColor: [0x0080FF, 0x0080FF, 0x000040], avatarColor:
0xFFFFFF }, { angle: 0, mainColor: [0xC0C0C0, 0xC0C0C0, 0xFFFFFF], avatarColor:
0x0080FF }] },
{ ID: 60, shortName: "tig", longName: "Tigres UANL", country: "Mexico",
uniform: [{ angle: 0, mainColor: [0xFFC000], avatarColor: 0x0000FF }, { angle: 0,
mainColor: [0xC0D0E0], avatarColor: 0xFFC000 }] },
{ ID: 61, shortName: "ajx", longName: "AFC AJAX", country: "Netherlands",
uniform: [{ angle: 0, mainColor: [0xFFFFFF, 0xFF0000, 0xFFFFFF], avatarColor:
0x000000 }, { angle: 90, mainColor: [0x000080, 0x0000FF, 0x000080], avatarColor:
0xFFFFFF }] },
{ ID: 62, shortName: "az", longName: "AZ Alkmaar", country: "Netherlands",
uniform: [{ angle: 60, mainColor: [0xFF0000, 0xFFFFFF], avatarColor: 0x000000 },
{ angle: 0, mainColor: [0x404040, 0x000000, 0x404040], avatarColor: 0xFFFFFF }] },
{ ID: 63, shortName: "twe", longName: "FC Twente", country: "Netherlands",
uniform: [{ angle: 0, mainColor: [0xC00000], avatarColor: 0xFFFFFF }, { angle: 90,
mainColor: [0x000080, 0xC00000, 0x000080], avatarColor: 0xFFFFFF }] },
{ ID: 64, shortName: "fey", longName: "Feyenoord", country: "Netherlands",
uniform: [{ angle: 0, mainColor: [0xFF0000, 0xFFFFFF], avatarColor: 0x202020 },
{ angle: 0, mainColor: [0xC0C0C0, 0x808080], avatarColor: 0xFFFFFF }] },
{ ID: 65, shortName: "psv", longName: "PSV Eindhoven", country: "Netherlands",
uniform: [{ angle: 90, mainColor: [0xFF0000, 0x000000, 0xFFFFFF], avatarColor:
0xC0C000 }, { angle: 0, mainColor: [0x203040], avatarColor: 0xA0E0A0 }] },
{ ID: 66, shortName: "mol", longName: "Molde FK", country: "Norway", uniform:
[{ angle: 90, mainColor: [0x0000FF, 0xFFFFFF, 0xFFFFFF], avatarColor: 0x000000 }, {
angle: 90, mainColor: [0xFFFFFF, 0x0000FF, 0x0000FF], avatarColor: 0x000000 }] },
{ ID: 67, shortName: "tro", longName: "Tromsø IL", country: "Norway", uniform:
[{ angle: 0, mainColor: [0xFF0000, 0xFFC000, 0xFF0000], avatarColor: 0xFFC000 },
{ angle: 0, mainColor: [0x000000, 0xFFC000, 0x000000], avatarColor: 0xFFFFFF }] },
{ ID: 68, shortName: "lgw", longName: "Legia Warszawa", country: "Poland",
uniform: [{ angle: 150, mainColor: [0xFFFFFF, 0xFFFFFF, 0x008000], avatarColor:
0xFF0000 }, { angle: 90, mainColor: [0x00C000, 0x008000, 0x008000], avatarColor:
0xFFFFFF }] },
{ ID: 69, shortName: "lpz", longName: "KKS Lech Poznań", country: "Poland",
uniform: [{ angle: 0, mainColor: [0x0000C0, 0x000080, 0x0000C0], avatarColor:
0xFFFF00 }, { angle: 0, mainColor: [0xFFFFFF, 0xC0C0C0, 0xFFFFFF], avatarColor:
0x0000FF }] },
{ ID: 70, shortName: "por", longName: "FC Porto", country: "Portugal", uniform:
[{ angle: 0, mainColor: [0x0000FF, 0xFFFFFF, 0x0000FF], avatarColor: 0x000000 },
{ angle: 90, mainColor: [0x000080, 0x000000, 0x000080], avatarColor: 0xFFFFFF }] },
{ ID: 71, shortName: "bra", longName: "SC Braga", country: "Portugal", uniform:
[{ angle: 90, mainColor: [0xFF0000, 0xFFFFFF, 0xFF0000], avatarColor: 0xC0C000 }, {
angle: 0, mainColor: [0x006030], avatarColor: 0xC0C000 }] },
{ ID: 72, shortName: "ben", longName: "SL Benfica", country: "Portugal",
uniform: [{ angle: 90, mainColor: [0xFF0000, 0xFFFFFF, 0xFF0000], avatarColor:
0x000000 }, { angle: 90, mainColor: [0x000000, 0xFFFFFF, 0x000000], avatarColor:
0xFF0000 }] },
{ ID: 73, shortName: "spo", longName: "Sporting CP", country: "Portugal",
uniform: [{ angle: 90, mainColor: [0x00C000, 0xFFFFFF, 0x00C000], avatarColor:
0xFFC000 }, { angle: 90, mainColor: [0xC0FF00, 0x000000, 0xC0FF00], avatarColor:
0x00C000 }] },
{ ID: 74, shortName: "clj", longName: "CFR Cluj", country: "Romania", uniform:
[{ angle: 0, mainColor: [0x800000, 0xFFFFFF, 0x800000], avatarColor: 0x000000 },
{ angle: 0, mainColor: [0xFFFFFF], avatarColor: 0x800000 }] },
{ ID: 75, shortName: "fcsb", longName: "FCSB", country: "Romania", uniform:
[{ angle: 0, mainColor: [0xFF0000, 0x0000FF, 0xFF0000], avatarColor: 0xFFFF00 },
{ angle: 90, mainColor: [0xFFFFFF, 0xA0C0E0, 0xFFFFFF], avatarColor: 0xFFC000 }] },
{ ID: 76, shortName: "dym", longName: "FC Dynamo Moscow", country: "Russia",
uniform: [{ angle: 0, mainColor: [0x0080FF], avatarColor: 0xC0C000 }, { angle: 90,
mainColor: [0xFFFFFF], avatarColor: 0x0080FF }] },
{ ID: 77, shortName: "kra", longName: "FC Krasnodar", country: "Russia",
uniform: [{ angle: 0, mainColor: [0x000000, 0x008000, 0x000000], avatarColor:
0xFFFFFF }, { angle: 0, mainColor: [0x008080, 0x00FFFF, 0x00FFFF], avatarColor:
0x000000 }] },
{ ID: 78, shortName: "spa", longName: "FC Spartak Moscow", country: "Russia",
uniform: [{ angle: 60, mainColor: [0xC00000, 0xFFFFFF, 0xC00000], avatarColor:
0x000000 }, { angle: 90, mainColor: [0xFFFFFF, 0xFF0000, 0xFFFFFF], avatarColor:
0x000000 }] },
{ ID: 79, shortName: "znt", longName: "FK Zenit", country: "Russia", uniform:
[{ angle: 0, mainColor: [0x0080FF], avatarColor: 0xC0C000 }, { angle: 90,
mainColor: [0xFFFFFF], avatarColor: 0x0080FF }] },
{ ID: 80, shortName: "lkm", longName: "Lokomotiv Moscow", country: "Russia",
uniform: [{ angle: 90, mainColor: [0x008000, 0xFF0000, 0x008000], avatarColor:
0xFFFFFF }, { angle: 90, mainColor: [0xFFFFFF, 0xFF0000, 0xFFFFFF], avatarColor:
0x008000 }] },
{ ID: 81, shortName: "cska", longName: "PFC CSKA Moscow", country: "Russia",
uniform: [{ angle: 90, mainColor: [0xC00030, 0x3000C0, 0x3000C0], avatarColor:
0xFFC000 }, { angle: 90, mainColor: [0xC0C0C0, 0xFFFFFF, 0xFFFFFF], avatarColor:
0x000000 }] },
{ ID: 82, shortName: "cel", longName: "Celtic FC", country: "Scotland",
uniform: [{ angle: 90, mainColor: [0xFFFFFF, 0x00C000, 0xFFFFFF], avatarColor:
0x000000 }, { angle: 0, mainColor: [0x008000], avatarColor: 0xC0C000 }] },
{ ID: 83, shortName: "ran", longName: "Glasgow Rangers", country: "Scotland",
uniform: [{ angle: 90, mainColor: [0x0080FF, 0xFFFFFF, 0x000000], avatarColor:
0xFF0000 }, { angle: 90, mainColor: [0x000000, 0x000000, 0xFF0000], avatarColor:
0xFFFFFF }] },
{ ID: 84, shortName: "crv", longName: "FK Crvena Zvezda", country: "Serbia",
uniform: [{ angle: 55, mainColor: [0xFFFFFF, 0xFF0000, 0xFF0000], avatarColor:
0x000000 }, { angle: 0, mainColor: [0x003030], avatarColor: 0xFFFFFF }] },
{ ID: 85, shortName: "par", longName: "FK Partizan Belgrade", country:
"Serbia", uniform: [{ angle: 90, mainColor: [0xFFFFFF, 0x000000, 0x000000],
avatarColor: 0x808080 }, { angle: 0, mainColor: [0xFFFFFF], avatarColor:
0x000000 }] },
{ ID: 86, shortName: "bil", longName: "Athletic Bilbao", country: "Spain",
uniform: [{ angle: 0, mainColor: [0xFF0000, 0xFFFFFF, 0xFF0000], avatarColor:
0x000000 }, { angle: 0, mainColor: [0x80FF80], avatarColor: 0x000000 }] },
{ ID: 87, shortName: "atm", longName: "Atlético Madrid", country: "Spain",
uniform: [{ angle: 0, mainColor: [0xFF0000, 0xFFFFFF, 0xFF0000], avatarColor:
0x000000 }, { angle: 90, mainColor: [0x000080, 0xFF0000, 0xFF0000], avatarColor:
0xFFFFFF }] },
{ ID: 88, shortName: "bar", longName: "FC Barcelona", country: "Spain",
uniform: [{ angle: 0, mainColor: [0x004D98, 0xA50044, 0x004D98], avatarColor:
0xFFED02 }, { angle: 0, mainColor: [0xD0C0E0], avatarColor: 0xFFFFFF }] },
{ ID: 89, shortName: "rma", longName: "Real Madrid CF", country: "Spain",
uniform: [{ angle: 135, mainColor: [0xFFFFFF, 0x004996, 0xFFFFFF], avatarColor:
0xFCBF00 }, { angle: 90, mainColor: [0x004996], avatarColor: 0xFCBF00 }] },
{ ID: 90, shortName: "sev", longName: "Sevilla FC", country: "Spain", uniform:
[{ angle: 0, mainColor: [0xFFFFFF, 0xFF0000, 0xFFFFFF], avatarColor: 0xC0C000 },
{ angle: 0, mainColor: [0xFF0000, 0xFFFFFF, 0xFF0000], avatarColor: 0x000000 }] },
{ ID: 91, shortName: "val", longName: "Valencia CF", country: "Spain", uniform:
[{ angle: 0, mainColor: [0xFFDF1C, 0xEE3524, 0xFFDF1C], avatarColor: 0x000000 },
{ angle: 90, mainColor: [0xC00000], avatarColor: 0xFFDF1C }] },
{ ID: 92, shortName: "aik", longName: "AIK Stockholm", country: "Sweden",
uniform: [{ angle: 0, mainColor: [0x003155, 0xFFEE00, 0x003155], avatarColor:
0xC9AD00 }, { angle: 0, mainColor: [0xFFEE00], avatarColor: 0x000000 }] },
{ ID: 93, shortName: "mal", longName: "Malmö FF", country: "Sweden", uniform:
[{ angle: 90, mainColor: [0x2F97DA, 0xFFFFFF, 0x2F97DA], avatarColor: 0x000000 }, {
angle: 0, mainColor: [0x174B6D], avatarColor: 0x2F97DA }] },
{ ID: 94, shortName: "bas", longName: "FC Basel", country: "Switzerland",
uniform: [{ angle: 0, mainColor: [0xFF0000, 0x0000FF], avatarColor: 0xFFC000 },
{ angle: 90, mainColor: [0x000000, 0xFFFFFF, 0xFFFFFF], avatarColor: 0x0000FF }] },
{ ID: 95, shortName: "zur", longName: "Zurich FK", country: "Switzerland",
uniform: [{ angle: 0, mainColor: [0xFFFFFF, 0xC0C0C0, 0xFFFFFF], avatarColor:
0x000000 }, { angle: 0, mainColor: [0x000000, 0x404040, 0x000000], avatarColor:
0xFFFFFF }] },
{ ID: 96, shortName: "bjk", longName: "Beşiktaş JK", country: "Turkey",
uniform: [{ angle: 0, mainColor: [0x000000, 0xFFFFFF, 0x000000], avatarColor:
0xFF0000 }, { angle: 0, mainColor: [0x000000], avatarColor: 0xFFFFFF }] },
{ ID: 97, shortName: "brs", longName: "Bursaspor SK", country: "Turkey",
uniform: [{ angle: 0, mainColor: [0x02863A, 0xFFFFFF, 0x02863A], avatarColor:
0x000000 }, { angle: 135, mainColor: [0xFFFFFF, 0xC0C0C0, 0xFFFFFF], avatarColor:
0x02863A }] },
{ ID: 98, shortName: "fb", longName: "Fenerbahçe SK", country: "Turkey",
uniform: [{ angle: 0, mainColor: [0x000080, 0xFFFF00, 0x000080], avatarColor:
0xFFFFFF }, { angle: 90, mainColor: [0xE0E0C0, 0xC0C0A0, 0xE0E0C0], avatarColor:
0x000080 }] },
{ ID: 99, shortName: "gs", longName: "Galatasaray SK", country: "Turkey",
uniform: [{ angle: 45, mainColor: [0xFDB912, 0xA90432], avatarColor: 0xFFFFFF },
{ angle: 0, mainColor: [0x000000], avatarColor: 0xFDB912 }] },
{ ID: 100, shortName: "bsk", longName: "Istanbul Başakşehir FK", country:
"Turkey", uniform: [{ angle: 90, mainColor: [0xFF8000, 0x000080, 0xFF8000],
avatarColor: 0xFFFFFF }, { angle: 90, mainColor: [0x000080, 0xFF8000, 0x000080],
avatarColor: 0xFFFFFF }] },
{ ID: 101, shortName: "ts", longName: "Trabzonspor SK", country: "Turkey",
uniform: [{ angle: 0, mainColor: [0x800000, 0x0080FF, 0x800000], avatarColor:
0xFFFFFF }, { angle: 90, mainColor: [0x000080, 0x0000C0, 0x000080], avatarColor:
0xFFFFFF }] },
{ ID: 102, shortName: "ars", longName: "Arsenal FC", country: "UK", uniform: [{
angle: 0, mainColor: [0xFFFFFF, 0xFF0000, 0xFFFFFF], avatarColor: 0x808000 },
{ angle: 0, mainColor: [0xFFFF80], avatarColor: 0x000000 }] },
{ ID: 103, shortName: "che", longName: "Chelsea FC", country: "UK", uniform: [{
angle: 0, mainColor: [0x034694], avatarColor: 0xFFFFFF }, { angle: 90, mainColor:
[0xFFFF00, 0x000000, 0xFFFF00], avatarColor: 0xFFFFFF }] },
{ ID: 104, shortName: "liv", longName: "Liverpool FC", country: "UK", uniform:
[{ angle: 0, mainColor: [0xC00000], avatarColor: 0xFFFFFF }, { angle: 90,
mainColor: [0xFEDCBA, 0x000000, 0xFEDCBA], avatarColor: 0xFFFFFF }] },
{ ID: 105, shortName: "mu", longName: "Manchester United FC", country: "UK",
uniform: [{ angle: 90, mainColor: [0xFF0000, 0xFFFFFF, 0x000000], avatarColor:
0xFFFF00 }, { angle: 90, mainColor: [0x00C0FF, 0x0080FF, 0x00C0FF], avatarColor:
0xFF0000 }] },
{ ID: 106, shortName: "mc", longName: "Manchester City FC", country: "UK",
uniform: [{ angle: 0, mainColor: [0x00C0FF], avatarColor: 0xFFFFFF }, { angle: 0,
mainColor: [0xFFFFFF], avatarColor: 0x00C0FF }] },
{ ID: 107, shortName: "tot", longName: "Tottenham Hotspur FC", country: "UK",
uniform: [{ angle: 90, mainColor: [0xFFFFFF, 0x000080, 0x000080], avatarColor:
0xFF0000 }, { angle: 90, mainColor: [0x000080, 0x000040, 0x000040], avatarColor:
0xFFFFFF }] },
{ ID: 108, shortName: "dyk", longName: "Dynamo Kyiv", country: "Ukraine",
uniform: [{ angle: 90, mainColor: [0x176FC1, 0xFFFFFF, 0xFFFFFF], avatarColor:
0xBF851E }, { angle: 90, mainColor: [0x176FC1, 0x000040, 0x000040], avatarColor:
0xBF851E }] },
{ ID: 109, shortName: "krp", longName: "Karpaty Lviv", country: "Ukraine",
uniform: [{ angle: 0, mainColor: [0x037B4F], avatarColor: 0xEAB306 }, { angle: 90,
mainColor: [0xFFFFFF, 0x037B4F, 0x037B4F], avatarColor: 0xEAB306 }] },
{ ID: 110, shortName: "mtl", longName: "Metallist Kharkiv", country: "Ukraine",
uniform: [{ angle: 0, mainColor: [0xFFC000], avatarColor: 0x000080 }, { angle: 0,
mainColor: [0x000080], avatarColor: 0xFFC000 }] },
{ ID: 111, shortName: "don", longName: "Shakhtar Donetsk", country: "Ukraine",
uniform: [{ angle: 90, mainColor: [0xFF8000, 0x000000, 0xFF8000], avatarColor:
0xFFFFFF }, { angle: 90, mainColor: [0x000000, 0xFF8000, 0x000000], avatarColor:
0xFFFFFF }] },
{ ID: 112, shortName: "lag", longName: "LA Galaxy", country: "USA", uniform: [{
angle: 0, mainColor: [0xFFFFFF], avatarColor: 0x000080 }, { angle: 0, mainColor:
[0x000000, 0x008000, 0x000000], avatarColor: 0xFFFFFF }] },
];

var defaultUniforms = [
{ team: 1, angle: 47, mainColor: [0x8F0000, 0x630000, 0x3B0000], avatarColor:
0xFFFFFF },
{ team: 2, angle: 47, mainColor: [0x0029BF, 0x001D85, 0x040057], avatarColor:
0xFFFFFF }
];

function clearUniforms() {
defaultUniforms.forEach(du => {
room.setTeamColors(du.team, du.angle, du.avatarColor, du.mainColor);
});
}

function getRandomIntegers(length) {
var randomInts = [0, 0];
var numbers = [];
if (!isNaN(length)) {
for (var n = 1; n <= length; n++) {
numbers.push(n);
}
}
for (var i = 0; i < randomInts.length; i++) {
randomInts[i] = numbers[Math.floor(Math.random() * numbers.length)];
if (i < randomInts.length - 1) {
var index = numbers.indexOf(randomInts[i]);
index !== -1 ? numbers.splice(index, 1) : console.log("Error in
deleting random number");
}
}
return randomInts;
}

function randomUniforms() {
if (roomObject.randomUniforms == true) {
var randomInts = getRandomIntegers(teams.length);
var t = [{ int: randomInts[0], teamID: 1 }, { int: randomInts[1], teamID: 2
}];
t.forEach(x => {
var index = teams.findIndex(team => team.ID == x.int);
var tindex = t.findIndex(o => o.teamID == x.teamID);
if (index !== -1) {
room.setTeamColors(x.teamID, teams[x.int -
1].uniform[tindex].angle, teams[x.int - 1].uniform[tindex].avatarColor, teams[x.int
- 1].uniform[tindex].mainColor);
}
else {
console.log("Error in random uniforms setting");
}
});
}
else {
console.log("Random uniforms feature is currently turned off.");
}
}

//poss
const Team = { SPECTATORS: 0, RED: 1, BLUE: 2 };
var players;
var teamR;
var teamB;
var teamS;
const playerRadius = 15;
var ballRadius = 9;
const triggerDistance = playerRadius + ballRadius + 0.01;
var lastTouches = Array(2).fill(null);
var lastTeamTouched;
var activePlay = false;
const State = { PLAY: 0, PAUSE: 1, STOP: 2 };
const Situation = { STOP: 0, KICKOFF: 1, PLAY: 2, GOAL: 3 };
var gameState = State.STOP;
var playSituation = Situation.STOP;
var init = "init";
var gk = [init, init];

/* OPTIONS */

var afkLimit = 30;


var drawTimeLimit = Infinity;
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
var slowMode = 0;

/* PLAYERS */

var extendedP = [];


const eP = { ID: 0, AUTH: 1, AFK: 2, ACT: 3 };
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}
var players;
var teamR;
var teamB;
var teamS;

/* GAME */

var lastTeamTouched;
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)
var countAFK = false; // Created to get better track of activity
var activePlay = false; // Created to get better track of the possession
var goldenGoal = false;
var SMSet = new Set(); // Set created to get slow mode which is useful in
chooseMode
var banList = []; // Getting track of the bans, so we can unban ppl if we want
//poss
var possession = [0, 0];
var actionZoneHalf = [0, 0];
var streak = 0;

function teamPoss() {
if (gameState == State.PLAY){
let possessionRedPct = (possession[0] / (possession[0] +
possession[1])) * 100;
let possessionBluePct = 100 - possessionRedPct;
let possessionString = `🔴 ${possessionRedPct.toFixed(0)}% - $
{possessionBluePct.toFixed(0)}% 🔵`;
whisper(`📊 Tỉ lệ kiểm soát bóng: 🔴 ${possessionString}\n`, player.id,
0xffff00, "normal");
}
else if (gameState == State.STOP){
whisper("Trận đấu chưa bắt đầu!", player.id, 0xff0000, "normal");
}
}

function updateTeams() {
players = room.getPlayerList().filter((player) => player.id != 0); // && !
getAFK(player));
teamR = players.filter(p => p.team === Team.RED);
teamB = players.filter(p => p.team === Team.BLUE);
teamS = players.filter(p => p.team === Team.SPECTATORS);
}

function handleInactivity() { // handles inactivity : players will be kicked after


afkLimit
if (countAFK && (teamR.length + teamB.length) > 1) {
for (var i = 0; i < teamR.length ; i++) {
setActivity(teamR[i], getActivity(teamR[i]) + 1);
}
for (var i = 0; i < teamB.length ; i++) {
setActivity(teamB[i], getActivity(teamB[i]) + 1);
}
}
for (var i = 0; i < extendedP.length ; i++) {
if (extendedP[i][eP.ACT] == 60 * (2/3 * afkLimit)) {
whisper("Nếu bạn không di chuyển hoặc chat sau " +
Math.floor(afkLimit / 3) + " giây, bạn sẽ được chuyển vào dự bị!", extendedP[i]
[eP.ID], 0x8b0000, "bold");
}
if (extendedP[i][eP.ACT] >= 60 * afkLimit) {
extendedP[i][eP.ACT] = 0;
room.setPlayerTeam(extendedP[i][eP.ID], 0);
announce(room.getPlayer(extendedP[i][eP.ID]).name + " đã được
chuyển vào dự bị do AFK!");
whisper("Bạn đã được chuyển vào dự bị do AFK!", extendedP[i]
[eP.ID], 0xffffff, "normal")
}
}
}

function getAuth(player) {
return extendedP.filter((a) => a[0] == player.id) != null ?
extendedP.filter((a) => a[0] == player.id)[0][eP.AUTH] : null;
}

/*function getAFK(player) {
return extendedP.filter((a) => a[0] == player.id) != null ?
extendedP.filter((a) => a[0] == player.id)[0][eP.AFK] : null;
}

function setAFK(player, value) {


extendedP.filter((a) => a[0] == player.id).forEach((player) => player[eP.AFK]
= value);
} */

function getActivity(player) {
return extendedP.filter((a) => a[0] == player.id) != null ?
extendedP.filter((a) => a[0] == player.id)[0][eP.ACT] : null;
}

function setActivity(player, value) {


extendedP.filter((a) => a[0] == player.id).forEach((player) => player[eP.ACT]
= value);
}

function getLastTouchOfTheBall() {
const ballPosition = room.getBallPosition();
updateTeams();
let playerArray = [];
for (let player of players) {
if (player.position != null) {
var distanceToBall = pointDistance(player.position, ballPosition);
if (distanceToBall < triggerDistance) {
if (playSituation == Situation.KICKOFF) playSituation =
Situation.PLAY;
playerArray.push([player, distanceToBall]);
}
}
}
}

// winner

function endGame() { // no stopGame() function in it


if (game.redScore > game.blueScore) {
streak++;
announce("Trận đấu kết thúc với tỉ số là" + " 🟥 " + game.redScore + " -
" + game.blueScore + " 🟦 | " + "Đội 🔴 đã dành chiến thắng! | Chuỗi thắng: " +
streak + " 🏆");
}
else if (game.redScore < game.blueScore) {
streak = 1;
announce("Trận đấu kết thúc với tỉ số là" + " 🟥 " + game.redScore + " -
" + game.blueScore + " 🟦 | " + "Đội 🔵 đã dành chiến thắng! | Chuỗi thắng: " +
streak + " 🏆");
}
else {
streak = 0;
announce("Trận đấu kết thúc với tỉ số là" + " 🟥 " + game.redScore + " -
" + game.blueScore + " 🟦 | " + "Cả hai đội đều hòa!");
}
let possessionRedPct = (possession[0] / (possession[0] + possession[1])) *
100;
let possessionBluePct = 100 - possessionRedPct;
let possessionString = `🔴 ${possessionRedPct.toFixed(0)}% - $
{possessionBluePct.toFixed(0)}% 🔵`;
let actionRedPct = (actionZoneHalf[0] / (actionZoneHalf[0] +
actionZoneHalf[1])) * 100;
let actionBluePct = 100 - actionRedPct;
let actionString = `🔴 ${actionRedPct.toFixed(0)}% - $
{actionBluePct.toFixed(0)}% 🔵`;
announce(`📊Tỉ lệ kiểm soát bóng: ${possessionString}\n` + `📊Tỉ lệ bóng
trong khu vực: ${actionString}\n`);

sendmvp();
/*mvp = SortRanks();
room.sendAnnouncement("Người chơi xuất sắc nhất trận đấu:\n " + mvp.name + "
| Ghi bàn: " + mvp.matchgoals + " | Kiến tạo: " + mvp.matchassists, null, 0xadff2f,
"bold", 0);
assistingTouch = undefined;
lastPlayerTouched = undefined;
playerList.filter(p => playerList[p.id - 1].isInTheRoom ==
true).forEach(p => { playerList[p.id - 1].matchgoals = 0; playerList[p.id -
1].matchassists = 0; });*/
}

function sendmvp() {
if (game.redScore > game.blueScore) {
mvp = SortRanks();
TopScorer();
announce("Người chơi xuất sắc nhất trận đấu: " + mvp.name + " | Ghi bàn: " +
mvp.matchgoals + " | Kiến tạo: " + mvp.matchassists, null, 0xadff2f, "bold", 0);
assistingTouch = undefined;
lastPlayerTouched = undefined;
playerList.filter(p => playerList[p.id - 1].isInTheRoom ==
true).forEach(p => { playerList[p.id - 1].matchgoals = 0; playerList[p.id -
1].matchassists = 0; });
}
else if (game.redScore < game.blueScore) {
mvp = SortRanks();
TopScorer();
announce("Người chơi xuất sắc nhất trận đấu: " + mvp.name + " | Ghi bàn: " +
mvp.matchgoals + " | Kiến tạo: " + mvp.matchassists, null, 0xadff2f, "bold", 0);
assistingTouch = undefined;
lastPlayerTouched = undefined;
playerList.filter(p => playerList[p.id - 1].isInTheRoom ==
true).forEach(p => { playerList[p.id - 1].matchgoals = 0; playerList[p.id -
1].matchassists = 0; });
}
else if (game.redScore == 0 && game.blueScore == 0){
TopScorer();
announce("Trận đấu hòa 🟥 0 - 0 🟦 nên sẽ không có ai MVP!", null,
0xff0000, "bold", 0);
assistingTouch = undefined;
lastPlayerTouched = undefined;
playerList.filter(p => playerList[p.id - 1].isInTheRoom ==
true).forEach(p => { playerList[p.id - 1].matchgoals = 0; playerList[p.id -
1].matchassists = 0; });
}
else {
mvp = SortRanks();
TopScorer();
announce("Người chơi xuất sắc nhất trận đấu: " + mvp.name + " | Ghi bàn: " +
mvp.matchgoals + " | Kiến tạo: " + mvp.matchassists, null, 0xadff2f, "bold", 0);
assistingTouch = undefined;
lastPlayerTouched = undefined;
playerList.filter(p => playerList[p.id - 1].isInTheRoom ==
true).forEach(p => { playerList[p.id - 1].matchgoals = 0; playerList[p.id -
1].matchassists = 0; });
}
}

// reset team
function resetTeam() {
if (resetdoi == true) {
for (var i = 0; i < teamR.length; i++) {
room.setPlayerTeam(teamR[teamR.length - 1 - i].id,
Team.SPECTATORS);
}
for (var i = 0; i < teamB.length; i++) {
room.setPlayerTeam(teamB[teamB.length - 1 - i].id,
Team.SPECTATORS);
}
announce("Các đội đã được chuyển vào dự bị");
}
}

function getGameStats() {
if (playSituation == Situation.PLAY && gameState == State.PLAY) {
lastTeamTouched == Team.RED ? possession[0]++ : possession[1]++;
var ballPosition = room.getBallPosition();
ballPosition.x < 0 ? actionZoneHalf[0]++ : actionZoneHalf[1]++;
var k = [-1, Infinity];
for (var i = 0; i < teamR.length; i++) {
if (teamR[i].position.x < k[1]) {
k[0] = teamR[i];
k[1] = teamR[i].position.x;
}
}
}
}

function isGk(){ // gives the mosts backward players before the first kickOff
var players = room.getPlayerList();
var min = players[0];
min.position = {x: room.getBallPosition().x + 60}
var max = min;

for (var i = 0; i < players.length; i++) {


if (players[i].position != null){
if (min.position.x > players[i].position.x) min = players[i];
if (max.position.x < players[i].position.x) max = players[i];
}
}
return [min, max]
}

function gkFun(player){ // !gk


if (room.getScores() != null && room.getScores().time < 60){
if (player.team == 1) {
gk[0] = player;
}
else if (player.team == 2){
gk[1] = player;
}
}
return;
}

//swap
function swapTeam() {
if (autoswap == true) {
var players = room.getPlayerList().filter((player) => player.id != 0 );
if ( players.length == 0 ) return false;
players.forEach(function(player) {
if (player.team == 1) {
room.setPlayerTeam(player.id, 2);
}
if (player.team == 2) {
room.setPlayerTeam(player.id, 1);
}
announce("Các đội đã được đổi sân!");
});
}
}

// auto admin

function autoAdmin(player) {
if (player.name == "𝙕𝙞𝙣𝙭_") {
room.setPlayerAdmin(player.id, true);
if (superAdmins.indexOf(player.id) === -1) {
superAdmins.push(player.id);
}
}
}

function rolePro(player) {
if (rolePro.indexOf(player.id) === -1) {
rolePro.push(player.id);
}
}

function roleTa(player) {
if (roleTa.indexOf(player.id) === -1) {
roleTa.push(player.id);
}
}

function roleToxic(player) {
if (roleToxic.indexOf(player.id) === -1) {
roleToxic.push(player.id);
}
}

//mvp
var lastScores = 0;
var lastTeamTouched = 0;
var previousBallPos;
var assistingTouch = undefined;
var lastPlayerTouched = undefined;
var previousPlayerTouched;
var radiusBall = JMap.ballPhysics.radius; //Requires your map to have ballPhysics
with a real radius value.
var radiusPlayer = JMap.playerPhysics.radius; //Requires your map to have
playerPhysics with a real radius value.
var mvp;
var playerList = [];

function getLastTouchTheBall() {
var ballPosition = room.getBallPosition();
var players = room.getPlayerList();
for (var i = 0; i < players.length; i++) {
if (players[i].position != null) {
var distanceToBall = pointDistance(players[i].position, ballPosition);
if (distanceToBall < triggerDistance) {
if (lastPlayerTouched != players[i]) {
if (lastTeamTouched == players[i].team) {
assistingTouch = lastPlayerTouched;
}
else {
assistingTouch = undefined;
}
}
lastTeamTouched = players[i].team;
previousPlayerTouched == lastPlayerTouched;
lastPlayerTouched = players[i];
}
}
}
return lastPlayerTouched;
}

function pointDistance(p1, p2) {


return Math.hypot(p1.x - p2.x, p1.y - p2.y);
}

function SortRanks() {
mvp = playerList[0];
for(var i=0; i<playerList.length; i++){
if(playerList[i].matchgoals > mvp.matchgoals){
mvp = playerList[i];
}
else if(playerList[i].matchgoals == mvp.matchgoals){
if(playerList[i].matchassists > mvp.matchassists){
mvp = playerList[i];
}
}
}

return mvp;
}

function TopScorer() {
var Best = playerList[0];
for(var i=0; i<playerList.length; i++){
if(playerList[i].banthang > Best.banthang){
Best = playerList[i];
}
else if(playerList[i].banthang == Best.banthang){
}
}
if(Best == null){return}announce("Người chơi ghi bàn nhiều nhất: " +
Best.name + " | Ghi bàn: " + Best.banthang, null, 0xadff2f, "bold", 0);
}

var overall = [];


function topgoal() {
for(var i=0; i<playerList.length; i++){
score = playerList[i].banthang;
players = playerList[i].name
// Goal: 5 pts, assist: 3 pts, win: 3 pts, cs: 6 pts, lose: -7 pts, og:
-4 pts
overall.push({name: players, value: score});
}
overall.sort(function(a,b){
return b.value - a.value;
})
let top5 = overall.splice(0, 5);
let pos = 1;
if (top5.length) {
announce("[⚽] TOP 5 NGƯỜI GHI BÀN NHIỀU NHẤT [⚽]: ", null, 0xFFE121, "bold",
0);
}
while (top5.length) {
let tmp = top5.splice(0, 5);
let message = tmp.map(e => `${pos++}) ${e.name} - ${e.value} Bàn
thắng`).join("\n");
announce(message, null, 0xFFE121, "normal", 0);
}
}

/*var interval = 300000;

function autoclearBan(){
announce("Danh sách ban đã được làm sạch!");
room.clearBans();
banList = [];
}

var sendMessageInterval = setInterval(function(){autoclearBan();},interval); */

function Level() {
for(var i=0; i<playerList.length; i++){
if (playerList[i].banthang == 2) {
if (rolePro.indexOf(playerList[i].id) === -1) {
rolePro.push(playerList[i].id);
}
}
else if (playerList[i].banthang == 5) {
if (roleVipPro.indexOf(playerList[i].id) === -1) {
roleVipPro.push(playerList[i].id);
}
}
else if (playerList[i].banthang == 8) {
if (roleVipPro2.indexOf(playerList[i].id) === -1) {
roleVipPro2.push(playerList[i].id);
}
}
}
}

// votekick
var timeObject = {Seconds: 1000, Minutes: 60000, Hours: 3600000};
var ids = [];
var bikick = [];
var votekickdangdienra = false;
var kick_count = 0;
var nonkick_count = 0;
var davote = [];

// -------------------------------------------------
// Classes
// -------------------------------------------------
class Game {
constructor() {
this.time = 0;
this.paused = false;
this.ballRadius;
this.rsTouchTeam = 0;
this.rsActive = true;
this.rsReady = false;
this.rsCorner = false;
this.rsGoalKick = false;
this.rsSwingTimer = 1000;
this.rsTimer;
this.ballOutPositionX;
this.ballOutPositionY;
this.throwInPosY;
this.outStatus = "";
this.warningCount = 0;
this.bringThrowBack = false;
this.extraTime = false;
this.extraTimeCount = 0;
this.extraTimeEnd;
this.extraTimeAnnounced = false;
this.lastPlayAnnounced = false;
this.boosterState;
this.throwinKicked = false;
this.pushedOut;
this.lastKickerId;
this.lastKickerName;
this.lastKickerTeam;
this.secondLastKickerId;
this.secondLastKickerName;
this.secondLastKickerTeam;
this.redScore = 0;
this.blueScore = 0;
this.powershotCounter = 0;
this.powershotID = 0;
this.powershotTrigger = true;
}

updateLastKicker(id, name, team) {


this.secondLastKickerId = this.lastKickerId;
this.secondLastKickerName = this.lastKickerName;
this.secondLastKickerTeam = this.lastKickerTeam;

this.lastKickerId = id;
this.lastKickerName = name;
this.lastKickerTeam = team;
}
}
class BallTouch {
constructor(player, time, goal, position) {
this.player = player;
this.time = time;
this.goal = goal;
this.position = position;
}
}

room.setCustomStadium(realSoccerMap);
room.setScoreLimit(0);
room.setTimeLimit(10);
room.setTeamsLock(true);

room.onRoomLink = function(url) {
roomLink = url;
console.log(roomLink);
}

room.onStadiumChange = function(newStadiumName, byPlayer) {


if (byPlayer != null) {
map = "custom";
}
else {
map = "RSR";
}
}

room.onPlayerJoin = function(player) {
extendedP.push([player.id, player.auth, player.conn, false, 0, 0, false]);

var playerObject;
if (localStorage.getItem(player.auth) == null) { //On first join
playerObject = { auth: player.auth, conn: player.conn, name: player.name,
id: player.id, goals: 0, assists: 0, matchgoals: 0, matchassists: 0, banthang: 0,
kientao: 0, topgoal: 0, isInTheRoom: true };
localStorage.setItem(player.auth, JSON.stringify(playerObject));

playerList[player.id - 1] = { auth: player.auth, conn: player.conn, name:


player.name, id: player.id, goals: 0, assists: 0, matchgoals: 0, matchassists: 0,
banthang: 0, kientao: 0, topgoal: 0, isInTheRoom: true };
}
else if (localStorage.getItem(player.auth) != null) { //On second are more
joins
playerList[player.id - 1] = { auth: player.auth, conn: player.conn, name:
player.name, id: player.id, goals:
JSON.parse(localStorage.getItem(player.auth)).goals, assists:
JSON.parse(localStorage.getItem(player.auth)).assists, matchgoals: 0, matchassists:
0, banthang: 0, kientao: 0, topgoal: 0, isInTheRoom: true };
}
console.log(player.name + " đã vào phòng");
whisper("🎇 Chào mừng bạn đến với ⚽ Rᴇᴀʟ Sᴏᴄᴄᴇʀ ⚽ 🎇", player.id,
0xffd700, "bold", 0);
whisper("🎇 Nhập !help để xem các lệnh có sẵn 🎇", player.id,
0xffd700, "bold", 0); //chào mừng đến với giải đấu World War 2 Championship
room.sendAnnouncement(" Nhập !teamred hoặc !teamblue để chọn đội", null,
0xffd700, "bold", 0);

ids[player.id] = player.name;
displayAdminMessage();

sleep(150).then(() => {
var players = room.getPlayerList();
for(var i=0; i<players.length; i++) {
for(var j=0; j<i; j++) {
if(players[i].name == players[j].name){
room.kickPlayer(players[i].id,"Trùng tên, vui lòng đặt tên
khác.",false);
}
}
}
});
sleep(500).then(() => {
autoAdmin(player);
});
}

room.onPlayerLeave = function(player) {
playerList[player.id - 1].isInTheRoom = false;
var playerObject = { auth: playerList[player.id - 1].auth, conn:
playerList[player.id - 1].conn, name: player.name, id: player.id, goals:
JSON.parse(localStorage.getItem(playerList[player.id - 1].auth)).goals, assists:
JSON.parse(localStorage.getItem(playerList[player.id - 1].auth)).assists,
matchgoals: 0, matchassists: 0, banthang: 0, kientao: 0, isInTheRoom: false };
localStorage.setItem(playerList[player.id - 1].auth,
JSON.stringify(playerObject));

updateTeams();
displayAdminMessage();
setActivity(player, 0);
console.log(player.name + " đã rời khỏi phòng");

let index = superAdmins.indexOf(player.id);


if (index > -1) {
sleep(100).then(() => {
superAdmins.splice(index, 1);
});
}
}

room.onPlayerAdminChange = function(changedPlayer, byPlayer) {


if (byPlayer != null) {
if (changedPlayer.id != byPlayer.id) {
if (superAdmins.indexOf(changedPlayer.id) > -1) {
room.kickPlayer(byPlayer.id, "Bạn không thể xóa quyền Super
Admin", false);
room.setPlayerAdmin(changedPlayer.id, true);
}
}
else {
if (changedPlayer.admin == false) {
let index = superAdmins.indexOf(changedPlayer.id);
if (index > -1) {
superAdmins.splice(index, 1);
}
}
}
}
}

var possession = [0, 0];


var actionZoneHalf = [0, 0];
room.onGameStart = function(byPlayer) {
if (map == "RSR") {
room.setDiscProperties(0, {invMass: 1.05});
if (byPlayer == null) {
game = new Game();
announce("Trận đấu sẽ kéo dài trong " + gameTime + " phút");
}
else {
if (room.getScores().timeLimit != 0) {
gameTime = room.getScores().timeLimit / 60;
}
else {
gameTime = 10;
}
lastTeamTouched = Team.SPECTATORS;
countAFK = true;
possession = [0, 0];
actionZoneHalf = [0, 0];
gameState = State.PLAY;
playSituation = Situation.KICKOFF;
activePlay = false;
lastPlayersTouched = [null, null];

assistingTouch = undefined;
lastPlayerTouched = undefined;
playerList.filter(p => playerList[p.id - 1].isInTheRoom ==
true).forEach(p => { playerList[p.id - 1].matchgoals = 0; playerList[p.id -
1].matchassists = 0; });

randomUniforms();
room.stopGame();
room.setTimeLimit(0);
room.startGame();
room.setDiscProperties(0, {color: ballcolor});
}
}
}

room.onGameStop = function(byPlayer) {
if (map == "RSR") {
if (byPlayer != null) {
gameState = State.STOP;
room.setTimeLimit(gameTime);
gk = [init, init];
kickOff = false;
hasFinished = false;
if(roomObject.randomUniforms == true) clearUniforms();
assistingTouch = undefined;
lastPlayerTouched = undefined;
playerList.filter(p => playerList[p.id - 1].isInTheRoom ==
true).forEach(p => { playerList[p.id - 1].matchgoals = 0; playerList[p.id -
1].matchassists = 0; });
}
}
}

room.onPlayerActivity = function(player) {
setActivity(player, 0);
}

room.onPlayerBallKick = function(player) {
if (map == "RSR") {
game.rsTouchTeam = player.team;
game.updateLastKicker(player.id, player.name, player.team);
lastTeamTouched = player.team;
//=========== POWERSHOT CODE ===========
if (powerShotMode == true) {
if (game.powershotCounter > 80 && game.powershotCounter < 150) {
room.setDiscProperties(0, {xgravity:
room.getPlayerDiscProperties(player.id).xspeed * 0.012, ygravity: 0});
game.rsSwingTimer = 500;
sleep(600).then(() => {
room.setDiscProperties(0, {xgravity: 0, ygravity:
0});
});
}
else {
if (game.powershotCounter > 150) {
room.setDiscProperties(0, {xgravity: -
room.getPlayerDiscProperties(player.id).yspeed/40, ygravity: -
room.getPlayerDiscProperties(player.id).yspeed/30});
game.rsSwingTimer = 10000;
room.sendAnnouncement(game.lastKickerName + " đã thực
hiện cú sút mạnh!", player.pm, 0x33dddd, "bold", 1);
sleep(1500).then(() => {
room.setDiscProperties(0, {xgravity: 0,
ygravity: 0});
});
}
}

game.powershotCounter = 0;
game.powershotID = 0;
game.powershotTrigger = false;
if (parseFloat(room.getDiscProperties(0).invMass.toFixed(2)) !=
1.05) {
room.setDiscProperties(0, {invMass: 1.05});
}
room.setDiscProperties(0, {color: ballcolor});
}
//=========== POWERSHOT CODE ===========

if (game.rsReady == true) {
var players = room.getPlayerList().filter((player) => player.team
!= 0);
players.forEach(function(player) {
if
(room.getPlayerDiscProperties(player.id).invMass.toFixed(1) != 0.3) {
room.setPlayerDiscProperties(player.id, {invMass:
0.3});
}
});
}

if (game.rsActive == false && game.rsReady == true && (game.rsCorner ==


true || game.rsGoalKick == true)) { // make game active on kick from CK/GK
game.boosterState = true;

game.rsActive = true;
game.rsReady = false;
room.setDiscProperties(1, {x: 2000, y: 2000 });
room.setDiscProperties(2, {x: 2000, y: 2000 });
room.setDiscProperties(0, {color: ballcolor});
game.rsTimer = 1000000;
game.warningCount++;

// set gravity for real soccer corners/goalkicks


if (game.rsCorner == true) {
room.setDiscProperties(0, {xgravity:
room.getPlayerDiscProperties(player.id).xspeed/16*-1, ygravity:
room.getPlayerDiscProperties(player.id).yspeed/16*0.1});
}
if (game.rsGoalKick == true) {
room.setDiscProperties(0, {xgravity:
room.getPlayerDiscProperties(player.id).xspeed/20*0.05, ygravity:
room.getPlayerDiscProperties(player.id).xspeed/20*-1});
}

game.rsCorner = false;
game.rsGoalKick = false;
game.outStatus = "";
}

if (game.rsActive == false && (game.outStatus == "redThrow" ||


game.outStatus == "blueThrow")) {
game.outStatus = "";
game.rsActive = true;
game.rsReady = false;
room.setDiscProperties(0, {color: "0xff8c00"}); //ball color
game.rsTimer = 1000000;
game.warningCount++;
}
if (player != lastPlayerTouched) {
if (lastTeamTouched == player.team) {
assistingTouch = lastPlayerTouched;
} else assistingTouch = undefined;
}
previousPlayerTouched = lastPlayerTouched;
lastPlayerTouched = player;
lastTeamTouched = player.team;
}
}

room.onPlayerKicked = function(kickedPlayer, reason, ban, byPlayer) {


ban == true ? banList.push([kickedPlayer.name, kickedPlayer.id]) : null;
if (superAdmins.indexOf(kickedPlayer.id) > -1 && byPlayer != null) {
room.kickPlayer(byPlayer.id, "Bạn không thể kick/ban Admin", true);
room.clearBans();
}
}

room.onPlayerChat = function(player, message) {


player.team != Team.SPECTATORS ? setActivity(player, 0) : null;
var players = room.getPlayerList();
console.log("[" + player.id + "]" + player.name + ": " + message);
if (message.startsWith("!")) {
message = message.substr(1);
let args = message.split(" ");
if (args[0] == "admin" && args.length == 1 && allowPublicAdmin ==
false) {
if (isAdminPresent() == false) {
room.setPlayerAdmin(player.id, true);
}
else {
whisper("Đã có Admin hoặc lệnh !admin không được phép!",
player.id);
}
}
else if (args[0] == "admin" && args.length == 2) {
if (args[1] == superAdminCode) {
room.setPlayerAdmin(player.id, true);
if (superAdmins.indexOf(player.id) === -1) {
superAdmins.push(player.id);
}
announce(player.name + " đã được trao quyền Super Admin");
}
}
else if (args[0] == "role") {
if(player.admin == true){
if (args[1] == "pro") {
var players = room.getPlayerList();
var id = parseInt(message.split(" ")[2]);
var p = players.find(x => x.id == id);

if(p){
if(p.id == player.id){
room.sendAnnouncement("Bạn không thể đưa role
cho chính mình!", player.id, 0xFFFFFF, "bold");
}
else{
if (rolePro.indexOf(p.id) === -1) {
rolePro.push(p.id);
}
}
}
else{
room.sendAnnouncement("Không tìm thấy người
chơi với ID đó! Nhập !ids để xem id của các người chơi.", player.id, 0xFFFFFF,
"bold");
}
return false;
}
else if (args[1] == "pro2") {
var players = room.getPlayerList();
var id = parseInt(message.split(" ")[2]);
var p = players.find(x => x.id == id);

if(p){
if(p.id == player.id){
room.sendAnnouncement("Bạn không thể đưa
role cho chính mình!", player.id, 0xFFFFFF, "bold");
}
else{
if (roleVipPro.indexOf(p.id) === -1) {
roleVipPro.push(p.id);
}
}
}
else{
room.sendAnnouncement("Không tìm thấy người
chơi với ID đó! Nhập !ids để xem id của các người chơi.", player.id, 0xFFFFFF,
"bold");
}
return false;
}
else if (args[1] == "pro3") {
var players = room.getPlayerList();
var id = parseInt(message.split(" ")[2]);
var p = players.find(x => x.id == id);

if(p){
if(p.id == player.id){
room.sendAnnouncement("Bạn không thể đưa role
cho chính mình!", player.id, 0xFFFFFF, "bold");
}
else{
if (roleVipPro2.indexOf(p.id) === -1) {
roleVipPro2.push(p.id);
}
}
}
else{
room.sendAnnouncement("Không tìm thấy người chơi với
ID đó! Nhập !ids để xem id của các người chơi.", player.id, 0xFFFFFF, "bold");
}
return false;
}
else if (args[1] == "he") {
var players = room.getPlayerList();
var id = parseInt(message.split(" ")[2]);
var p = players.find(x => x.id == id);

if(p){
if(p.id == player.id){
room.sendAnnouncement("Bạn không thể đưa
role cho chính mình!", player.id, 0xFFFFFF, "bold");
}
else{
if (roleToxic.indexOf(p.id) === -1) {
roleToxic.push(p.id);
}
}
}
else{
room.sendAnnouncement("Không tìm thấy người
chơi với ID đó! Nhập !ids để xem id của các người chơi.", player.id, 0xFFFFFF,
"bold");
}

return false;
}
else if (player.admin == false){
room.sendAnnouncement("Bạn không có quyền sử dụng
lệnh này!",player.id,0xFF0000,"bold",2);
}
}
}
else if (args[0] == "rolehelp") {
if (player.admin) {
whisper("Sử dụng: !role [pro/pro2/pro3/he]
[id]",player.id);
}
}
else if (args[0] == "tbchat") {
if (player.admin) {
msg = message.substr(6).trim();
announce("📢: " + msg, player.pm, 0x3fed09, 'bold', 1);
}
}
else if (args[0] == "banlist" && args.length == 1) {
if (banList.length == 0) {
whisper("Không có người chơi nào trong danh sách bị ban!",
player.id, null, 0x8b0000);
return false;
}
var cstm = "Danh sách người bị ban:\n";
for (var i = 0; i < banList.length; i++) {
if (140 - cstm.length < ("[ID: " + (banList[i][1]) + "] - "
+ banList[i][0] + "\n").length) {
whisper(cstm, player.id, 0xffd700);
cstm = "... ";
}
cstm += "[ID: " + (banList[i][1]) + "] - " + banList[i][0]
+ "\n";
}
cstm = cstm.substring(0, cstm.length - 2);
cstm += " ";
whisper(cstm, player.id, 0xffd700);
}
else if (args[0] == "gkhelp") {
whisper("Cầu thủ cuối cùng của cả hai đội được chọn làm thủ môn
(nếu Bot sai, hãy nhập !gk).", player.id, null, "normal");
}
else if (args[0] == "poss" && args.length == 1) {
if (gameState == State.PLAY){
let possessionRedPct = (possession[0] / (possession[0] +
possession[1])) * 100;
let possessionBluePct = 100 - possessionRedPct;
let possessionString = `🔴 ${possessionRedPct.toFixed(0)}%
- ${possessionBluePct.toFixed(0)}% 🔵`;
whisper(`📊 Tỉ lệ kiểm soát bóng: ${possessionString}\n`,
player.id, 0xffff00, "normal");
}
else if (gameState == State.STOP){
whisper("Trận đấu chưa bắt đầu!", player.id, 0xff0000,
"normal");
}
}
else if (args[0] == "teamred" && args.length == 1) {
updateTeams();
if (teamR.length == 6) {
whisper("Đội 🔴 đã đủ người! (Tối đa 6 người trong mỗi
đội)", player.id)
}
else {
room.setPlayerTeam(player.id, 1);
whisper("Bạn đã được chuyển sang đội 🔴", player.id);
}
}
else if (args[0] == "topgoalreset" && args.length == 1) {
if (player.admin == true) {
overall = [];
playerList.filter(p => playerList[p.id - 1].isInTheRoom ==
true).forEach(p => { playerList[p.id - 1].banthang = 0; playerList[p.id -
1].kientao = 0; });
}
}
else if (args[0] == "topgoal" && args.length == 1) {
for(var i=0; i<playerList.length; i++){
score = playerList[i].banthang;
players = playerList[i].name
// Goal: 5 pts, assist: 3 pts, win: 3 pts, cs:
6 pts, lose: -7 pts, og: -4 pts
overall.push({name: players, value: score});
}
overall.sort(function(a,b){
return b.value - a.value;
})
let top5 = overall.splice(0, 5);
let pos = 1;
if (top5.length) {
whisper("[⚽] TOP NGƯỜI GHI BÀN NHIỀU NHẤT [⚽]: ",
player.id, 0xadff2f, "bold", 0);
}
while (top5.length) {
let tmp = top5.splice(0, 5);
let message = tmp.map(e => `${pos++}. ${e.name} - $
{e.value} Bàn thắng`).join("\n");
whisper(message, player.id, 0xadff2f, "normal", 0);
}
}
else if (args[0] == "teamblue" && args.length == 1) {
updateTeams();
if (teamB.length == 6) {
whisper("Đội 🔵 đã đủ người! (Tối đa 6 người trong mỗi
đội)", player.id)
}
else {
room.setPlayerTeam(player.id, 2);
whisper("Bạn đã được chuyển sang đội 🔵", player.id);
}
}
else if (args[0] == "spec" && args.length == 1) {
room.setPlayerTeam(player.id, 0);
whisper("Bạn đã được chuyển vào dự bị", player.id);
}
else if (args[0] == "scripts" && args.length == 1) {
whisper("Link: https://bit.ly/3bupkNu click vào để lấy code!",
player.id);
}
else if (args[0] == "sech" && args.length == 1) {
room.kickPlayer(player.id, "SECH", false);
}
else if (args[0] == "resetdoi" && args.length == 1) {
if (player.admin) {
if (resetdoi == true) {
resetTeam();
}
else {
whisper("Reset Đội đã bị tắt!", player.id, null,
0xFF0000)
}
}
}
else if (args[0] == "ast" && args.length == 1) {
if (player.admin) {
if (autoStart == true) {
autoStart = false;
whisper("AutoStart đã được tắt ", player.id, null,
0xFF0000);
}
else {
autoStart = true;
announce("AutoStart đã được bật ", player.id, null,
0x00FF00);
}
}
}
else if (args[0] == "testcurve" && args.length == 1) {
if (player.admin) {
if (testcurve == false) {
testcurve = true;
announce("TestCurve đã được bật bởi " + player.name,
null, 0x00FF00);
}
else {
testcurve = false;
announce("TestCurve đã được tắt bởi " + player.name,
null, 0xFF0000);
}
}
}
else if (args[0] == "autoswap" && args.length == 1) {
if (player.admin) {
if (autoswap == true) {
autoswap = false;
whisper("autoswap đã được tắt ", player.id);
}
else {
autoswap = true;
whisper("autoswap đã được bật ", player.id);
}
}
}
else if (args[0] == "ids" && args.length == 1) {
var players = room.getPlayerList();
var p = players.find(x => x.id == id);

room.sendAnnouncement("Danh sách id người chơi:\n" +


players.map(x => "[ID: " + x.id + "] - " + x.name).join("\
n"),player.id,0x00ffff,"normal",2);
}
else if ((args[0] == "reset" || args[0] == "rst") && player.admin)
{ //ps
if (resetdoi == true) {
resetdoi = false;
announce("ResetTeam đã được tắt bởi " + player.name, null,
0xFF0000);
}
else {
resetdoi = true;
announce("ResetTeam đã được bật bởi " + player.name, null,
0x00FF00);
}
}
else if (args[0] == "mainskin" && args.length == 1 && player.admin) {
room.setTeamColors(1, 47, 0xFFFFFF, [0x8F0000, 0x630000,
0x3B0000]);
room.setTeamColors(2, 47, 0xFFFFFF, [0x0029BF, 0x001D85,
0x040057]);
}
else if (args[0] == "clearbans") {
if (player.admin) {
room.clearBans();
announce("Danh sách ban đã được clear bởi " + player.name);
banList = [];
}
else {
whisper("Lệnh chỉ dành cho Admin", player.id);
}
}
else if (args[0] == "maubong" && player.admin) {
if (args[1] == "reset") {
ballcolor = "0xFFFFFF";
colorball = "FFFFFF";
room.setDiscProperties(0, {color: "0xFFFFFF"});
}
else if (args[1] == "1") {
ballcolor = "0xf5deb3";
colorball = "f5deb3";
room.setDiscProperties(0, {color: "0xf5deb3"});
}
else if (args[1] == "2") {
ballcolor = "0xadff2f";
colorball = "adff2f";
room.setDiscProperties(0, {color: "0xadff2f"});
}
else if (args[1] == "3") {
ballcolor = "0xe0ffff";
colorball = "e0ffff";
room.setDiscProperties(0, {color: "0xe0ffff"});
}
else if (args[1] == "4") {
ballcolor = "0xd8bfd8";
colorball = "d8bfd8";
room.setDiscProperties(0, {color: "0xd8bfd8"});
}
else if (args[1] == "5") {
ballcolor = "0xffb6c1";
colorball = "ffb6c1";
room.setDiscProperties(0, {color: "0xffb6c1"});
}
else if (args[1] == "6") {
ballcolor = "0xd3d3d3";
colorball = "d3d3d3";
room.setDiscProperties(0, {color: "0xd3d3d3"});
//announce(player.name + " đã thay đổi màu bóng!");
}
}
else if (args[0] == "admincode" && player.admin) {
if (args[1] == "reset") {
superAdminCode = "khoadz";
whisper("Đã reset Superadmin code" ,player.id);
}
else {
superAdminCode = args[1];
whisper("Superadmin code đã được thay đổi thành " +
args[1],player.id);
}
}
else if (args[0] == "court" && args.length == 1) {
whisper("Màu nền hiện tại là " + mapBGColor);
}
else if (args[0] == "court" && args.length == 2 && player.admin) {
if (room.getScores() == null) {
if (args[1] == "reset") {
mapBGColor = "86A578";
announce("Màu nền bản đồ được đặt lại bởi " +
player.name);
}
else {
mapBGColor = args[1];
announce("Màu nền của bản đồ được đặt thành " +
args[1] + " bởi " + player.name);
}
room.setCustomStadium(realSoccerMap);
}
else {
whisper("Không thể thay đổi màu nền bản đồ khi trò chơi
đang diễn ra", player.id);
}
}
else if (args[0] == "swap") {
if (player.admin) {
if (args.length == 1) {
var players = room.getPlayerList().filter((player) =>
player.id != 0 );
if ( players.length == 0 ) return false;
players.forEach(function(player) {
if (player.team == 1) {
room.setPlayerTeam(player.id, 2);
}
if (player.team == 2) {
room.setPlayerTeam(player.id, 1);
}
});
announce("🔄 Các đội đã được hoán đổi");
}
}
else {
whisper("Lệnh chỉ dành cho Admin", player.id);
}
}
else if (args[0] == "setpassword" && player.admin) {
if (superAdmins.indexOf(player.id) > -1) {
room.setPassword(args[1]);
roomPassword = args[1];
announce("Mật khẩu đã được thay đổi bởi " + player.name);
}
else {
whisper("Chỉ Admin mới có thể thay đổi mật khẩu",
player.id);
}
}
else if (args[0] == "clearpassword" && player.admin) {
if (superAdmins.indexOf(player.id) > -1) {
room.setPassword(null);
roomPassword = null;
announce("Mật khẩu đã được xóa bởi " + player.name);
}
else {
whisper("Chỉ Admin mởi có thể xóa mật khẩu", player.id);
}
}
else if (args[0] == "rs" && player.admin) {
if (room.getScores() == null) {
room.setCustomStadium(realSoccerMap);
}
else {
whisper("Không thể thay đổi map khi trận đấu đang diễn ra",
player.id);
}
}
else if (args[0] == "hvl" && player.admin) {
if (room.getScores() == null) {
room.setCustomStadium(getHaxVietMap());
}
else {
whisper("Không thể thay đổi map khi trận đấu đang diễn ra",
player.id);
}
}
else if (args[0] == "rr" && player.admin) {
gk = [init, init];
kickOff = false;
hasFinished = false;
countAFK = true;
room.stopGame();
randomUniforms();
room.startGame();
room.setDiscProperties(0, {color: ballcolor});
}
else if (args[0] == "randkit" && args.length == 1 && player.admin) {
randomUniforms();
}
else if (args[0] == "move" && player.admin) {
movePlayersToTeams(player,message);
}
else if (args[0] == "bb") {
room.kickPlayer(player.id, "Bye", false);
}
else if (args[0] == "roomsech") {
room.kickPlayer(player.id, "Room sech vcl", false);
}
else if ((args[0] == "powershot" || args[0] == "ps") && player.admin) {
//ps
if (powerShotMode == false) {
powerShotMode = true;
announce("Powershot đã được bật bởi " + player.name, null,
0x00FF00);
}
else {
powerShotMode = false;
announce("Powershot đã được tắt bởi " + player.name, null,
0xFF0000);
}
}
else if (args[0] == "help") {
if (superAdmins.indexOf(player.id) > -1) {
displayHelpDev(player.id, args[1]);
displayHelpAdmin(player.id, args[1]);
displayHelp(player.id, args[1]);
}
else if(player.admin == true){
displayHelpAdmin(player.id, args[1]);
displayHelp(player.id, args[1]);
}
else {
displayHelp(player.id, args[1]);
}
}
else if (args[0] == "lenh") {
if(player.admin == true){
displayHelpAdmin(player.id, args[1]);
displayHelp(player.id, args[1]);
}
else {
displayHelp(player.id, args[1]);
}
}
else if (args[0] == "ban") {
if(player.admin == true){
var players = room.getPlayerList();
var id = parseInt(message.split(" ")[1]);
var p = players.find(x => x.id == id);
if(p){
if(p.id == player.id){
room.sendAnnouncement("Bạn không thể ban chính mình!
Nhập !ids để xem id của các người chơi.", player.id, 0xFFFFFF, "bold");
}
else{
room.kickPlayer(p.id,"Bạn đã bị ban bởi " +
player.name + ".",true);
}
}
else{
whisper("Không tìm thấy người chơi với ID đó! Nhập !ids để
xem id của các người chơi.", player.id, 0xFFFFFF, "bold");
}

return false;
}
else{
room.sendAnnouncement("Bạn không có quyền sử dụng lệnh
này!",player.id,0xFF0000,"bold",2);
}
}
else if (args[0] == "thongbao") {
if (player.admin) {
msg + message.substr(6).trim();
sendAnnouncement(" Thông Báo: " + msg, player.pm, 0xFFFFFF, 2);
}
}
else if (args[0] == "kick") {
if(player.admin == true){
var players = room.getPlayerList();
var id = parseInt(message.split(" ")[1]);
var p = players.find(x => x.id == id);

if(p){
if(p.id == player.id){
room.sendAnnouncement("Bạn không thể kick chính mình!
Nhập !ids để xem id của các người chơi.",player.id, 0xFFFFFF, "bold");
}
else{
room.kickPlayer(p.id,"Bạn đã bị kick bởi " +
player.name + ".",false);
}
}
else{
room.sendAnnouncement("Không tìm thấy người chơi với ID đó!
Nhập !ids để xem id của các người chơi.", player.id, 0xFFFFFF, "bold");
}

}
else{
room.sendAnnouncement("Bạn không có quyền sử dụng lệnh
này!",player.id,0xFF0000,"bold",2);
}

}
else if (args[0] == "super") {
let superMsg = "Super Admins: ";
superAdmins.forEach(function(id) {
if (room.getPlayer(id) != null || room.getPlayer(id) !=
undefined) {
superMsg = superMsg + room.getPlayer(id).name + ", ";
}
});
if (superAdmins.length > 0) {
superMsg = superMsg.slice(0, -2);
}
else {
superMsg = "Không có super admin nào hiện diện";
}
whisper(superMsg, player.id);
}
return false;
}
if (message.startsWith("t ")) {
teamMsg = message.substring(1).trim();
teamMsg = message.substr(6).trim();
if (player.team == 1) {
var players = room.getPlayerList().filter((player) =>
player.team == 1);
players.forEach(function(teamPlayer) {
room.sendAnnouncement("[Team] " + player.name + ": "
+ teamMsg, teamPlayer.id, 0xED6A5A, "normal", 1);
});
}
if (player.team == 2) {
var players = room.getPlayerList().filter((player) =>
player.team == 2);
players.forEach(function(teamPlayer) {
room.sendAnnouncement("[Team] " + player.name + ": "
+ teamMsg, teamPlayer.id, 0x5995ED, "normal", 1);
});
}
if (player.team == 0) {
var players = room.getPlayerList().filter((player) =>
player.team == 0);
players.forEach(function(teamPlayer) {
room.sendAnnouncement("[Spec] " + player.name + ": "
+ teamMsg, teamPlayer.id, 0xdee7fa, "normal", 1);
});
}
return false;
}
if (message.startsWith("@@")) {
message = message.substr(2).trim();
if (message.indexOf(' ') !== -1) {
let args = message.match(/^(\S+)\s(.*)/).slice(1);

if (args.length > 1) {
var pmMsg = args[1];
var players = room.getPlayerList();
var pmSent = false;
players.forEach(function(pmPlayer) {
if (pmPlayer.name === args[0] || pmPlayer.name ===
args[0].replace(/_/g, ' ')) {
whisper("[PM > " + pmPlayer.name + "] " +
player.name + ": " + pmMsg, player.id, 0xff20ff, "normal", 1);
whisper("[PM] " + player.name + ": " + pmMsg,
pmPlayer.id, 0xff20ff, "normal", 1);
pmSent = true;
}
});
if (pmSent == false) {
whisper("Không thể tìm thấy người chơi '" + args[0] +
"'", player.id, 0xff20ff, "normal", 1);
}
return false;
}
}
}
if (superAdmins.indexOf(player.id) > -1){
room.sendAnnouncement(`[${prefixsuperadmin}] ${player.name}: $
{message}`,messageTarget,messageColors.superadmin,messageFonts.bold,messageSounds.n
ormal);
return false;
}
if(player.admin){
room.sendAnnouncement(`[${prefixadmin}] ${player.name}: $
{message}`,messageTarget,messageColors.admin,messageFonts.bold,messageSounds.normal
);
return false;
}
//role vip pro 2
if (roleVipPro2.indexOf(player.id) > -1){
room.sendAnnouncement(`[ID: ${player.id}][${prefixvippro2}] - $
{player.name}: $
{message}`,messageTarget,messageColors.vippro,messageFonts.normal,messageSounds.nor
mal);
return false;
}
//role vippro
if (roleVipPro.indexOf(player.id) > -1){
if(player.team == 1){
room.sendAnnouncement(`[ID: ${player.id}][${prefixvippro}] - $
{player.name}: $
{message}`,messageTarget,messageColors.red,messageFonts.normal,messageSounds.normal
);
return false;
}
}
if (roleVipPro.indexOf(player.id) > -1){
if(player.team == 2){
room.sendAnnouncement(`[ID: ${player.id}][${prefixvippro}] - $
{player.name}: $
{message}`,messageTarget,messageColors.blue,messageFonts.normal,messageSounds.norma
l);
return false;
}
}
if (roleVipPro.indexOf(player.id) > -1){
if(player.team == 0){
room.sendAnnouncement(`[ID: ${player.id}][${prefixvippro}] - $
{player.name}: $
{message}`,messageTarget,messageColors.spec,messageFonts.normal,messageSounds.norma
l);
return false;
}
}
//role pro
if (rolePro.indexOf(player.id) > -1){
if(player.team == 1){
room.sendAnnouncement(`[ID: ${player.id}][${prefixpro}] - $
{player.name}: $
{message}`,messageTarget,messageColors.red,messageFonts.normal,messageSounds.normal
);
return false;
}
}
if (rolePro.indexOf(player.id) > -1){
if(player.team == 2){
room.sendAnnouncement(`[ID: ${player.id}][${prefixpro}] - $
{player.name}: $
{message}`,messageTarget,messageColors.blue,messageFonts.normal,messageSounds.norma
l);
return false;
}
}
if (rolePro.indexOf(player.id) > -1){
if(player.team == 0){
room.sendAnnouncement(`[ID: ${player.id}][${prefixpro}] - $
{player.name}: $
{message}`,messageTarget,messageColors.spec,messageFonts.normal,messageSounds.norma
l);
return false;normal
}
}
//role chuahe
if (roleToxic.indexOf(player.id) > -1){
if(player.team == 1){
room.sendAnnouncement(`[ID: ${player.id}][${prefixtoxic}] - $
{player.name}: $
{message}`,messageTarget,messageColors.red,messageFonts.normal,messageSounds.normal
);
return false;
}
}
if (roleToxic.indexOf(player.id) > -1){
if(player.team == 2){
room.sendAnnouncement(`[ID: ${player.id}][${prefixtoxic}] - $
{player.name}: $
{message}`,messageTarget,messageColors.blue,messageFonts.normal,messageSounds.norma
l);
return false;
}
}
if (roleToxic.indexOf(player.id) > -1){
if(player.team == 0){
room.sendAnnouncement(`[ID: ${player.id}][${prefixtoxic}] - $
{player.name}: $
{message}`,messageTarget,messageColors.spec,messageFonts.normal,messageSounds.norma
l);
return false;
}
}
if(player.team == 1){
room.sendAnnouncement(`[ID: ${player.id}][${prefixred}] - $
{player.name}: $
{message}`,messageTarget,messageColors.red,messageFonts.normal,messageSounds.normal
);
return false;
}
if(player.team == 2){
room.sendAnnouncement(`[ID: ${player.id}][${prefixblue}] - $
{player.name}: $
{message}`,messageTarget,messageColors.blue,messageFonts.normal,messageSounds.norma
l);
return false;
}
if(player.team == 0){
room.sendAnnouncement(`[ID: ${player.id}][${statusreserve}] - $
{player.name}: $
{message}`,messageTarget,messageColors.spec,messageFonts.normal,messageSounds.norma
l);
return false;
}
}

function displayHelpDev(id, selection) {


if (selection == null) {
whisper("Dev commands:", id, 0xff4500, "small");
whisper("- !ast (autostart)", id, 0xff4500, "small");
whisper("- !testcurve", id, 0xff4500, "small");
whisper("- !rst (auto reset team)", id, 0xff4500, "small");
whisper("- !move [teamid]", id, 0xff4500, "small");
}
}

function displayHelpAdmin(id, selection) {


if (selection == null) {
whisper("Các lệnh có sẵn cho Admin:", id, 0xffd700, "small");
whisper("- !tbchat [msg] (gửi thông báo)", id, 0xffd700, "small");
whisper("- !rs (chọn map real soccer)", id, 0xffd700, "small");
whisper("- !rr (khởi động lại trận đấu)", id, 0xffd700, "small");
whisper("- !swap (hoán đổi các đội) ", id, 0xffd700, "small");
whisper("- !clearsbans (unban cho tất cả người bị ban)", id, 0xffd700,
"small");
whisper("- !ban/!kick [id] (ban/kick người chơi)", id, 0xffd700,
"small");
whisper("- !randkit (random kit)", id, 0xffd700, "small");
whisper("- !role [pro/pro2/he] [id]", id, 0xffd700, "small");
}
}

function displayHelp(id, selection) {


if (selection == null) {
whisper("Các lệnh có sẵn:", id, 0x76ff7a, "small");
whisper("- @@[player] [msg] (để chat riêng)", id, 0x76ff7a, "small");
whisper("- !t [msg] (để chat với team)", id, 0x76ff7a, "small");
whisper("- !bb (bye) / !roomsech (room sech vcl!!!) / !sech
(sech!!!!!!)", id, 0x76ff7a, "small");
whisper("- !teamred hoặc !teamblue để chọn đội / !spec để ra dự bị",
id, 0x76ff7a, "small");
whisper("- !ids (xem id các người chơi trong phòng)", id, 0x76ff7a,
"small");
whisper("- !poss (xem tỉ lệ kiểm soát bóng)", id, 0x76ff7a, "small");
whisper("- !banlist (xem danh sách người bị ban)", id, 0x76ff7a,
"small");
whisper("- !topgoal (top 5 người ghi bàn)", id, 0x76ff7a, "small");
whisper("- !scripts (để lấy code)", id, 0x76ff7a, "small");
}
}

room.onPlayerTeamChange = function(changedPlayer, byPlayer) {


updateTeams();
if (map == "RSR") {
if (room.getScores() != null) {
if (game.rsActive == false) {
room.getPlayerList().forEach(function(player) {
if (changedPlayer.team == Team.SPECTATORS) {
setActivity(changedPlayer, 0);
}
if (player != undefined) {
if (game.rsGoalKick == true || game.rsCorner ==
true) {
room.setPlayerDiscProperties(player.id,
{invMass: 9999999});
}
}
});
}
}
/*if (getAFK(changedPlayer) && changedPlayer.team != Team.SPECTATORS) {
room.setPlayerTeam(changedPlayer.id, Team.SPECTATORS);
whisper(changedPlayer.name + " đang AFK!");
return;
}*/
}
}

room.onTeamGoal = function(team) {
if (map == "RSR") {
game.rsActive = false;
countAFK = true;

let possessionRedPct = (possession[0] / (possession[0] +


possession[1])) * 100;
let possessionBluePct = 100 - possessionRedPct;
let possessionString = `🔴 ${possessionRedPct.toFixed(0)}% - $
{possessionBluePct.toFixed(0)}% 🔵`;
let actionRedPct = (actionZoneHalf[0] / (actionZoneHalf[0] +
actionZoneHalf[1])) * 100;
let actionBluePct = 100 - actionRedPct;
let actionString = `🔴 ${actionRedPct.toFixed(0)}% - $
{actionBluePct.toFixed(0)}% 🔵`;

var players = room.getPlayerList();


let goalTime = secondsToMinutes(Math.floor(room.getScores().time));
let scorer;
let assister = "";
let goalType;

if (team == 1) {
if (game.lastKickerTeam == 1) { //if goal type is goal
goalType = "⚽ Ghi bàn bởi ";
scorer = game.lastKickerName;
playerList[game.lastKickerId - 1].banthang++;
playerList[game.lastKickerId - 1].matchgoals++;
avatarCelebration(game.lastKickerId, "⚽");
if (game.secondLastKickerTeam == 1 && game.lastKickerId !=
game.secondLastKickerId) { // if assist is from teammate
playerList[game.secondLastKickerId - 1].matchassists+
+;
playerList[game.secondLastKickerId - 1].kientao++;
assister = " (🅰️ Kiến tạo: " +
game.secondLastKickerName + ")";
avatarCelebration(game.secondLastKickerId, "🅰️");
}
}
if (game.lastKickerTeam == 2) { //if goal type is owngoal
goalType = "😂 Phản lưới bởi ";
scorer = game.lastKickerName;
avatarCelebration(game.lastKickerId, "🤡");
if (game.secondLastKickerTeam == 1) { // if owngoal was
assisted
assister = " (🅰️ Kiến tạo: " +
game.secondLastKickerName + ")";
avatarCelebration(game.secondLastKickerId, "🅰️");
}
}
game.redScore++;
}
if (team == 2) {
if (game.lastKickerTeam == 2) { //if goal type is goal
playerList[game.lastKickerId - 1].banthang++;
playerList[game.lastKickerId - 1].matchgoals++;
goalType = "⚽ Ghi bàn bởi ";
scorer = game.lastKickerName;
avatarCelebration(game.lastKickerId, "⚽");
if (game.secondLastKickerTeam == 2 && game.lastKickerId !=
game.secondLastKickerId) { // if assist is from teammate
playerList[game.secondLastKickerId - 1].matchassists+
+;
playerList[game.secondLastKickerId - 1].kientao++;
assister = " (🅰️ Kiến tạo: " +
game.secondLastKickerName + ")";
avatarCelebration(game.secondLastKickerId, "🅰️");
}
}
if (game.lastKickerTeam == 1) { //if goal type is owngoal
goalType = "😂 Phản lưới bởi ";
scorer = game.lastKickerName;
avatarCelebration(game.lastKickerId, "🤡");
if (game.secondLastKickerTeam == 2) { // if owngoal was
assisted
assister = " (🅰️ Kiến tạo: " +
game.secondLastKickerName + ")";
avatarCelebration(game.secondLastKickerId, "🅰️");
}
}
game.blueScore++;
}
announce("[🕐" + goalTime + "]" + " 🟥 " + game.redScore + " - " +
game.blueScore + " 🟦 " + goalType + scorer + assister); // : (player) đã phá hủy
thành công cứ điểm của địch
//announce(`📊 Tỉ lệ kiểm soát bóng: ${possessionString}\n` + `📊 Tỉ lệ
bóng trong khu vực: ${actionString}\n`);
game.lastKicker = undefined;
game.secondLastKicker = undefined;
game.lastKickerTeam = undefined;
game.secondLastKickerTeam = undefined;
Level();
sleep(1900).then(() => {
room.setDiscProperties(0, {color: ballcolor});
});
sleep(1500).then(() => {
if (testcurve == true) {
gk = [init, init];
kickOff = false;
hasFinished = false;
room.stopGame();
randomUniforms();
room.startGame();
}
})
}
}

room.onPositionsReset = function() {
if (map == "RSR") {
room.setDiscProperties(0, {color: ballcolor});
if (game.lastPlayAnnounced == true) {
room.pauseGame(true);
game.lastPlayAnnounced = false;
countAFK = true;
sleep(500).then(() => {
endGame();
room.stopGame();
gk = [init, init];
kickOff = false;
hasFinished = false;
if (autoStart == true){
announce("Trận đấu sẽ bắt đầu sau 10 giây");
sleep(10500).then(() => {
room.startGame(true);
randomUniforms();
room.setDiscProperties(0, {color: ballcolor});
})
}
})
sleep(3500).then(() => {
resetTeam();
swapTeam();
})
}
}
}

var kickOff = false;


var hasFinished = false;
room.onGameTick = function() {
if (map = "RSR") {
updateGameStatus();
handleBallTouch();
realSoccerRef();
getLastTouchOfTheBall();
getGameStats();
handleInactivity();
getLastTouchTheBall();
if (kickOff == false) { // simplest comparison to not charge usulessly
the tick thing
if (room.getScores().time != 0){
kickOff = true;
gk = isGk();
announce("🔴 GK: " + gk[0].name + " | 🔵 GK: " + gk[1].name)
}
}
}
}

function realSoccerRef() {
blockThrowIn();
blockGoalKick();
removeBlock();
if (game.time == gameTime * 60 && game.extraTimeAnnounced == false) {
extraTime();
game.extraTimeAnnounced = true;
}

if (game.time == game.extraTimeEnd && game.lastPlayAnnounced == false)


{
announce("Lần gỡ cuối", null, null, null, 1);
game.lastPlayAnnounced = true;
}

if (game.rsCorner == true || game.rsGoalKick == true) { //add extra


time
game.extraTimeCount++;
}

if (game.rsTimer < 99999 && game.paused == false && game.rsActive ==


false && game.rsReady == true) {
game.rsTimer++;
}

if (game.rsSwingTimer < 150 && game.rsCorner == false &&


game.rsGoalKick == false) {
game.rsSwingTimer++;
if (game.rsSwingTimer > 5) {
room.setDiscProperties(0, {xgravity:
room.getDiscProperties(0).xgravity * 0.97, ygravity:
room.getDiscProperties(0).ygravity * 0.97}); //0.97
}
if (game.rsSwingTimer == 150) {
room.setDiscProperties(0, {xgravity: 0, ygravity: 0});
}
}
if (game.boosterState == true) {
game.boosterCount++;
}

if (game.boosterCount > 30) {


game.boosterState = false;
game.boosterCount = 0;
room.setDiscProperties(0, {cMask: 63});
}

if (room.getBallPosition().x == 0 && room.getBallPosition().y == 0) {


game.rsActive = true;
game.outStatus = "";
}

if (game.rsActive == false && game.rsReady == true) { //expire barrier


time
if (game.outStatus == "redThrow") {
if (game.rsTimer == throwTimeOut - 120) { // warning
indicator
ballWarning("0xff3f34", ++game.warningCount);
}
if (game.rsTimer == throwTimeOut && game.bringThrowBack ==
false) { // switch to blue throw
game.outStatus = "blueThrow";
game.rsTimer = 0;
room.setDiscProperties(3, {x: 0, y: 2000, radius:
0});
sleep(100).then(() => {
room.setDiscProperties(0, {color: "0x0fbcf9",
xspeed: 0, yspeed: 0, x: game.ballOutPositionX, y: game.throwInPosY});
});
}
}
else if (game.outStatus == "blueThrow") {
if (game.rsTimer == throwTimeOut - 120) { // warning
indicator
ballWarning("0x0fbcf9", ++game.warningCount);
}
if (game.rsTimer == throwTimeOut && game.bringThrowBack ==
false) { // switch to red throw
game.outStatus = "redThrow";
game.rsTimer = 0;
room.setDiscProperties(3, {x: 0, y: 2000, radius:
0});
sleep(100).then(() => {
room.setDiscProperties(0, {color: "0xff3f34",
xspeed: 0, yspeed: 0, x: game.ballOutPositionX, y: game.throwInPosY});
});
}
}
else if (game.outStatus == "blueGK" || game.outStatus == "redGK")
{
if (game.rsTimer == gkTimeOut - 120) { // warning indicator
if (game.outStatus == "blueGK") {
ballWarning("0x0fbcf9", ++game.warningCount);
}
if (game.outStatus == "redGK") {
ballWarning("0xff3f34", ++game.warningCount);
}
}
if (game.rsTimer == gkTimeOut) {
game.outStatus = "";
room.setDiscProperties(0, {color: ballcolor});
game.rsTimer = 1000000;

}
}
else if (game.outStatus == "blueCK" || game.outStatus == "redCK")
{
if (game.rsTimer == ckTimeOut - 120) {
if (game.outStatus == "blueCK") {
ballWarning("0x0fbcf9", ++game.warningCount);
}
if (game.outStatus == "redCK") {
ballWarning("0xff3f34", ++game.warningCount);
}
}
if (game.rsTimer == ckTimeOut) {
game.outStatus = "";
room.setDiscProperties(1, {x: 0, y: 2000, radius:
0});
room.setDiscProperties(2, {x: 0, y: 2000, radius:
0});
room.setDiscProperties(0, {color: ballcolor});
game.rsTimer = 1000000;

}
}
}

if (game.rsActive == true) {
if ((room.getBallPosition().y > 611.45 ||
room.getBallPosition().y < -611.45)) {
game.rsActive = false;
if (game.lastPlayAnnounced == true) {
room.pauseGame(true);
game.lastPlayAnnounced = false;
sleep(500).then(() => {
endGame();
room.stopGame();
gk = [init, init];
kickOff = false;
hasFinished = false;
if (autoStart == true){
announce("Trận đấu sẽ bắt đầu sau 10
giây");
sleep(10500).then(() => {
room.startGame(true);
randomUniforms();
})
}
})
sleep(3500).then(() => {
resetTeam();
swapTeam();
})
}

room.setDiscProperties(0, {xgravity: 0, ygravity: 0});

game.ballOutPositionX = Math.round(room.getBallPosition().x
* 10) / 10;
if (room.getBallPosition().y > 611.45) {
game.ballOutPositionY = 400485;
game.throwInPosY = 610;
}
if (room.getBallPosition().y < -611.45) {
game.ballOutPositionY = -400485;
game.throwInPosY = -610;
}
if (room.getBallPosition().x > 1130) {
game.ballOutPositionX = 1130;
}
if (room.getBallPosition().x < -1130) {
game.ballOutPositionX = -1130;
}

if (game.rsTouchTeam == 1) {
room.setDiscProperties(3, {x: game.ballOutPositionX,
y: game.throwInPosY, radius: 18 });
sleep(100).then(() => {
game.outStatus = "blueThrow";
game.throwinKicked = false;
game.rsTimer = 0;
game.rsReady = true;
room.setDiscProperties(0, {xspeed: 0, yspeed:
0, x: game.ballOutPositionX, y: game.throwInPosY, xgravity: 0, ygravity: 0});
//announce("🖐️ Ném biên dành cho 🔵");
room.setDiscProperties(0, {color: "0x0fbcf9"});

});
sleep(100).then(() => {
room.setDiscProperties(3, {x: 0, y: 2000,
radius: 0});
});
sleep(1500).then(() => {
if (testcurve == true) {
gk = [init, init];
kickOff = false;
hasFinished = false;
room.stopGame();
randomUniforms();
room.startGame();
}
})
}
else {
room.setDiscProperties(3, {x: game.ballOutPositionX,
y: game.throwInPosY, radius: 18 });
sleep(100).then(() => {
game.outStatus = "redThrow";
game.throwinKicked = false;
game.rsTimer = 0;
game.rsReady = true;
room.setDiscProperties(0, {xspeed: 0, yspeed:
0, x: game.ballOutPositionX, y: game.throwInPosY, xgravity: 0, ygravity: 0});
//announce("🖐️ Ném biên dành cho 🔴");
room.setDiscProperties(0, {color: "0xff3f34"});

});
sleep(100).then(() => {
room.setDiscProperties(3, {x: 0, y: 2000,
radius: 0});
});
sleep(1500).then(() => {
if (testcurve == true) {
gk = [init, init];
kickOff = false;
hasFinished = false;
room.stopGame();
randomUniforms();
room.startGame();
}
})
}
}

if (room.getBallPosition().x > 1161.45 &&


(room.getBallPosition().y > 124 || room.getBallPosition().y < -124)) {
game.rsActive = false;
if (game.lastPlayAnnounced == true) {
room.pauseGame(true);
game.lastPlayAnnounced = false;
sleep(500).then(() => {
endGame();
room.stopGame();
gk = [init, init];
kickOff = false;
hasFinished = false;
if (autoStart == true){
announce("Trận đấu sẽ bắt đầu sau 10
giây");
sleep(10500).then(() => {
room.startGame(true);
randomUniforms();
})
}
})
sleep(3500).then(() => {
resetTeam();
swapTeam();
})
}
room.setDiscProperties(0, {xgravity: 0, ygravity: 0});
room.getPlayerList().forEach(function(player) {
room.setPlayerDiscProperties(player.id, {invMass:
100000});
});

if (game.rsTouchTeam == 1) {
room.setDiscProperties(3, {x: 1060, y: 0, radius:
18 });
sleep(100).then(() => {
game.outStatus = "blueGK";
game.rsTimer = 0;
game.rsReady = true;
//("🥅 Goal Kick: 🔵 Blue");
game.rsGoalKick = true;
game.rsSwingTimer = 0;
game.boosterCount = 0;
game.boosterState = false;
room.setDiscProperties(0, {xspeed: 0, yspeed:
0, x: 1060, y: 0, color: "0x0fbcf9", cMask: 268435519, xgravity: 0, ygravity: 0});
});
sleep(3000).then(() => {
room.setDiscProperties(3, {x: 0, y: 2000,
radius: 0});
});
sleep(1500).then(() => {
if (testcurve == true) {
gk = [init, init];
kickOff = false;
hasFinished = false;
room.stopGame();
randomUniforms();
room.startGame();
}
})
}
else {
announce("🚩 Phạt góc dành cho 🔴");

game.rsSwingTimer = 0;
if (room.getBallPosition().y < -124) {

room.setDiscProperties(3, {x: 1140, y: -590,


radius: 18 });
sleep(100).then(() => {
game.rsCorner = true;
game.outStatus = "redCK";
game.rsTimer = 0;
game.rsReady = true;
game.boosterCount = 0;
game.boosterState = false;
room.setDiscProperties(0, {x: 1140, y: -
590, xspeed: 0, yspeed: 0, color: "0xff3f34", cMask: 268435519, xgravity: 0,
ygravity: 0});
room.setDiscProperties(2, {x: 1150, y: -
670, radius: 420 });
room.setDiscProperties(3, {x: 0, y: 2000,
radius: 0});
});
sleep(1500).then(() => {
if (testcurve == true) {
gk = [init, init];
kickOff = false;
hasFinished = false;
room.stopGame();
randomUniforms();
room.startGame();
}
})
}
if (room.getBallPosition().y > 124) {
room.setDiscProperties(3, {x: 1140, y: 590,
radius: 18 });
sleep(100).then(() => {
game.rsCorner = true;
game.outStatus = "redCK";
game.rsTimer = 0;
game.rsReady = true;
game.boosterCount = 0;
game.boosterState = false;
room.setDiscProperties(0, {x: 1140, y:
590, xspeed: 0, yspeed: 0, color: "0xff3f34", cMask: 268435519, xgravity: 0,
ygravity: 0});
room.setDiscProperties(2, {x: 1150, y:
670, radius: 420 });
room.setDiscProperties(3, {x: 0, y: 2000,
radius: 0});
});
}
}
}
if (room.getBallPosition().x < -1161.45 &&
(room.getBallPosition().y > 124 || room.getBallPosition().y < -124)) {
game.rsActive = false;
if (game.lastPlayAnnounced == true) {
room.pauseGame(true);
game.lastPlayAnnounced = false;
sleep(500).then(() => {
endGame();
room.stopGame();
gk = [init, init];
kickOff = false;
hasFinished = false;
if (autoStart == true){
announce("Trận đấu sẽ bắt đầu sau 10
giây");
sleep(10500).then(() => {
room.startGame(true);
randomUniforms();
})
}
})
sleep(3500).then(() => {
resetTeam();
swapTeam();
})
}
room.setDiscProperties(0, {xgravity: 0, ygravity: 0});
room.getPlayerList().forEach(function(player) {
room.setPlayerDiscProperties(player.id, {invMass:
100000});
});

if (game.rsTouchTeam == 1) {
announce("🚩 Phạt góc dành cho 🔵");
game.rsSwingTimer = 0;
if (room.getBallPosition().y < -124) {
room.setDiscProperties(3, {x: -1140, y: -590,
radius: 18 });
sleep(100).then(() => {
game.rsCorner = true;
game.outStatus = "blueCK";
game.rsTimer = 0;
game.rsReady = true;
game.boosterCount = 0;
game.boosterState = false;
room.setDiscProperties(0, {x: -1140, y: -
590, xspeed: 0, yspeed: 0, color: "0x0fbcf9", cMask: 268435519, xgravity: 0,
ygravity: 0});
room.setDiscProperties(1, {x: -1150, y: -
670, radius: 420 });
room.setDiscProperties(3, {x: 0, y: 2000,
radius: 0});
});
sleep(1500).then(() => {
if (testcurve == true) {
gk = [init, init];
kickOff = false;
hasFinished = false;
room.stopGame();
randomUniforms();
room.startGame();
}
})
}
if (room.getBallPosition().y > 124) {
room.setDiscProperties(3, {x: -1140, y: 590,
radius: 18 });
sleep(100).then(() => {
game.rsCorner = true;
game.outStatus = "blueCK";
game.rsTimer = 0;
game.rsReady = true;
game.boosterCount = 0;
game.boosterState = false;
room.setDiscProperties(0, {x: -1140, y:
590, xspeed: 0, yspeed: 0, color: "0x0fbcf9", cMask: 268435519, xgravity: 0,
ygravity: 0});
room.setDiscProperties(1, {x: -1150, y:
670, radius: 420 });
room.setDiscProperties(3, {x: 0, y: 2000,
radius: 0});
});
}
}
else {
room.setDiscProperties(3, {x: -1060, y: 0, radius: 18
});
sleep(100).then(() => {
game.outStatus = "redGK";
game.rsTimer = 0;
game.rsReady = true;
//announce("🥅 Goal Kick: 🔴 Red");
game.rsGoalKick = true;
game.rsSwingTimer = 0;
game.boosterCount = 0;
game.boosterState = false;
room.setDiscProperties(0, {xspeed: 0, yspeed:
0, x: -1060, y: 0, color: "0xff3f34", cMask: 268435519, xgravity: 0, ygravity: 0});
});
sleep(3000).then(() => {
room.setDiscProperties(3, {x: 0, y: 2000,
radius: 0});
});
sleep(1500).then(() => {
if (testcurve == true) {
gk = [init, init];
kickOff = false;
hasFinished = false;
room.stopGame();
randomUniforms();
room.startGame();
}
})
}
}
}
}

function handleBallTouch() {
var players = room.getPlayerList();
var ballPosition = room.getBallPosition();
var ballRadius = game.ballRadius;
var playerRadius = 15;
var triggerDistance = ballRadius + playerRadius + 0.01;

for (var i = 0; i < players.length; i++) { // Iterate over all the players
var player = players[i];
if ( player.position == null ) continue;
var distanceToBall = pointDistance(player.position, ballPosition);
if ( distanceToBall < triggerDistance ) {
game.rsTouchTeam = player.team;
game.throwinKicked = false;

//=========== POWERSHOT CODE ===========


if (game.rsCorner == false && game.rsGoalKick == false &&
game.outStatus != "blueThrow" && game.outStatus != "redThrow" && powerShotMode ==
true) {
if (game.powershotID != player.id) {
game.powershotID = player.id;
game.powershotTrigger = false;
game.powershotCounter = 0;

} else {
game.powershotCounter++
if (game.powershotCounter > 80 &&
game.powershotCounter < 150 && game.powershotTrigger == false &&
Math.round(room.getDiscProperties(0).invMass) != 2) {
room.setDiscProperties(0, { invMass: 1.7 })
//room.sendAnnouncement("POWERSHOT ACTIVATED!",
game.powershotID, 0x33dd33, "bold", 1);
game.powershotTrigger = true
room.setDiscProperties(0, { color:
'0xffff00' })
} else {
if (game.powershotCounter > 150 &&
game.powershotCounter < 200) {
room.setDiscProperties(0, { invMass: 2 })
//room.sendAnnouncement("POWERSHOT
ACTIVATED!", game.powershotID, 0x33dd33, "bold", 1);
game.powershotTrigger = true
room.setDiscProperties(0, { color:
'0xffdf00' })
/*} else {
if (game.powershotCounter > 200 &&
game.powershotCounter < 250) {
room.setDiscProperties(0,
{ invMass: 2 })
//room.sendAnnouncement("POWERSHOT
ACTIVATED!", game.powershotID, 0x33dd33, "bold", 1);
game.powershotTrigger = true
room.setDiscProperties(0, { color:
'0xdaa520' })
}
}
} */
}
}
}
/*} else {
game.powershotCounter++
if (game.powershotCounter > 100 &&
game.powershotCounter < 150 && game.powershotTrigger == false &&
Math.round(room.getDiscProperties(0).invMass) != 2) {
room.setDiscProperties(0, { invMass: 2 })
//room.sendAnnouncement("POWERSHOT ACTIVATED!",
game.powershotID, 0x33dd33, "bold", 1);
game.powershotTrigger = true
room.setDiscProperties(0, { color:
'0xFFFF00' })
} else {
if (game.powershotCounter > 120 &&
game.powershotCounter < 150) {
room.setDiscProperties(0, { invMass:
1.5 })
//room.sendAnnouncement("POWERSHOT
ACTIVATED!", game.powershotID, 0x33dd33, "bold", 1);
game.powershotTrigger = true
room.setDiscProperties(0, { color:
'0x298A08' })
} else {
if (game.powershotCounter > 150 &&
game.powershotCounter < 170) {
room.setDiscProperties(0,
{ invMass: 2 })
//room.sendAnnouncement("POWERSHOT
ACTIVATED!", game.powershotID, 0x33dd33, "bold", 1);
game.powershotTrigger = true
room.setDiscProperties(0, { color:
'0x08385E' })
}
}
}
}*/
}
//=========== POWERSHOT CODE ===========

if (game.rsCorner == false &&


room.getDiscProperties(0).xgravity != 0) {
room.setDiscProperties(0, {xgravity: 0, ygravity:0});
game.rsSwingTimer = 10000;
}
}
//=========== POWERSHOT CODE ===========
if ( distanceToBall > triggerDistance +3 && player.id ==
game.powershotID && game.powershotTrigger == true && powerShotMode == true) {
game.powershotTrigger = false;
game.powershotCounter = 0;
game.powershotid = 0;
if (parseFloat(room.getDiscProperties(0).invMass.toFixed(2)) !=
1.05) {
room.setDiscProperties(0, {color: ballcolor, invMass:
1.05});
//room.sendAnnouncement("Bạn không thể sút mạnh được nũa!",
game.powershotID, 0xdd3333, "bold", 2);
}
}
//=========== POWERSHOT CODE ===========
}
}

function updateGameStatus() {
game.time = Math.floor(room.getScores().time);
game.ballRadius = room.getDiscProperties(0).radius;
}

function announce(msg, targetId, color, style, sound) {


if (color == null) {
color = 0xFFFD82;
}
if (style == null) {
style = "bold";
}
if (sound == null) {
sound = 0;
}
room.sendAnnouncement(msg, targetId, color, style, sound);
console.log("Announce: " + msg);
}

function whisper(msg, targetId, color, style, sound) {


if (color == null) {
color = 0x66C7FF;
}
if (style == null) {
style = "normal";
}
if (sound == null) {
sound = 0;
}
room.sendAnnouncement(msg, targetId, color, style, sound);
if (room.getPlayer(targetId) != null) {
console.log("Whisper -> " + room.getPlayer(targetId).name + ": " +
msg);
}
}

function isAdminPresent() {
var players = room.getPlayerList();
if (players.find((player) => player.admin) != null) {
return true;
}
else {
return false;
}
}

function displayAdminMessage() {
if (isAdminPresent() == false && allowPublicAdmin == false) {
announce("Hiện không có Admin nào. Nhập !admin để được trao quyền
Admin");
}
}

function pointDistance(p1, p2) {


var d1 = p1.x - p2.x;
var d2 = p1.y - p2.y;
return Math.sqrt(d1 * d1 + d2 * d2);
}

function sleep (time) {


return new Promise((resolve) => setTimeout(resolve, time));
}

function ballWarning(origColour, warningCount) {


sleep(200).then(() => {
if (game.warningCount == warningCount) {
room.setDiscProperties(0, {color: ballcolor});
}
});
sleep(400).then(() => {
if (game.warningCount == warningCount) {
room.setDiscProperties(0, {color: origColour});
}
});
sleep(600).then(() => {
if (game.warningCount == warningCount) {
room.setDiscProperties(0, {color: ballcolor});
}
});
sleep(800).then(() => {
if (game.warningCount == warningCount) {
room.setDiscProperties(0, {color: origColour});
}
});
sleep(1000).then(() => {
if (game.warningCount == warningCount) {
room.setDiscProperties(0, {color: ballcolor});
}
});
sleep(1200).then(() => {
if (game.warningCount == warningCount) {
room.setDiscProperties(0, {color: origColour});
}
});
sleep(1400).then(() => {
if (game.warningCount == warningCount) {
room.setDiscProperties(0, {color: ballcolor});
}
});
sleep(1600).then(() => {
if (game.warningCount == warningCount) {
room.setDiscProperties(0, {color: origColour});
}
});
sleep(1675).then(() => {
if (game.warningCount == warningCount) {
room.setDiscProperties(0, {color: ballcolor});
}
});
sleep(1750).then(() => {
if (game.warningCount == warningCount) {
room.setDiscProperties(0, {color: origColour});
}
});
}

function extraTime() {
var extraSeconds = Math.ceil(game.extraTimeCount / 60);
game.extraTimeEnd = (gameTime * 60) + extraSeconds;
announce("Bù giờ: " + extraSeconds + " Giây", null, null, null, 1);
}

function avatarCelebration(playerId, avatar) {


room.setPlayerAvatar(playerId, avatar);
sleep(250).then(() => {
room.setPlayerAvatar(playerId, null);
});
sleep(500).then(() => {
room.setPlayerAvatar(playerId, avatar);
});
sleep(750).then(() => {
room.setPlayerAvatar(playerId, null);
});
sleep(1000).then(() => {
room.setPlayerAvatar(playerId, avatar);
});
sleep(1250).then(() => {
room.setPlayerAvatar(playerId, null);
});
sleep(1500).then(() => {
room.setPlayerAvatar(playerId, avatar);
});
sleep(1750).then(() => {
room.setPlayerAvatar(playerId, null);
});
sleep(2000).then(() => {
room.setPlayerAvatar(playerId, avatar);
});
sleep(2250).then(() => {
room.setPlayerAvatar(playerId, null);
});
sleep(2500).then(() => {
room.setPlayerAvatar(playerId, avatar);
});
sleep(2750).then(() => {
room.setPlayerAvatar(playerId, null);
});
sleep(3000).then(() => {
room.setPlayerAvatar(playerId, avatar);
});
sleep(3250).then(() => {
room.setPlayerAvatar(playerId, null);
});
}

function secondsToMinutes(time) {
// Hours, minutes and seconds
var hrs = ~~(time / 3600);
var mins = ~~((time % 3600) / 60);
var secs = ~~time % 60;

// Output like "1:01" or "4:03:59" or "123:03:59"


var ret = "";
if (hrs > 0) {
ret += "" + hrs + ":" + (mins < 10 ? "0" : "");
}
ret += "" + mins + ":" + (secs < 10 ? "0" : "");
ret += "" + secs;
return ret;
}

function blockThrowIn() {
var players = room.getPlayerList().filter((player) => player.team !=
0);
if (room.getBallPosition().y < 0) { // top throw line
if (game.outStatus == "redThrow") {
players.forEach(function(player) {
if (room.getPlayerDiscProperties(player.id).invMass !
= 9999999) {
room.setPlayerDiscProperties(player.id,
{invMass: 9999999});
}
if (player.team == 2 &&
room.getPlayerDiscProperties(player.id).y < 0) {
if
(room.getPlayerDiscProperties(player.id).cGroup != 536870918) {
room.setPlayerDiscProperties(player.id,
{cGroup: 536870918});
}
if (player.position.y < -460) {
room.setPlayerDiscProperties(player.id,
{y: -445});
}
}
if (player.team == 1 &&
room.getPlayerDiscProperties(player.id).cGroup != 2) {
room.setPlayerDiscProperties(player.id,
{cGroup: 2});
}
if (room.getDiscProperties(17).x != 1149) { // show
top red line
room.setDiscProperties(17, {x: 1149});
}
if (room.getDiscProperties(19).x != -1149) { // hide
top blue line
room.setDiscProperties(19, {x: -1149});
}
});
}
if (game.outStatus == "blueThrow") {
players.forEach(function(player) {
if (room.getPlayerDiscProperties(player.id).invMass !
= 9999999) {
room.setPlayerDiscProperties(player.id,
{invMass: 9999999});
}
if (player.team == 1 &&
room.getPlayerDiscProperties(player.id).y < 0) {
if
(room.getPlayerDiscProperties(player.id).cGroup != 536870918) {
room.setPlayerDiscProperties(player.id,
{cGroup: 536870918});
}
if (player.position.y < -460) {
room.setPlayerDiscProperties(player.id,
{y: -445});
}
}
if (player.team == 2 &&
room.getPlayerDiscProperties(player.id).cGroup != 2) {
room.setPlayerDiscProperties(player.id,
{cGroup: 2});
}
if (room.getDiscProperties(19).x != 1149) { // show
top blue line
room.setDiscProperties(19, {x: 1149});
}
if (room.getDiscProperties(17).x != -1149) { // hide
top red line
room.setDiscProperties(17, {x: -1149});
}
});
}
}
if (room.getBallPosition().y > 0) { // bottom throw line
if (game.outStatus == "redThrow") {
players.forEach(function(player) {
if (room.getPlayerDiscProperties(player.id).invMass !
= 9999999) {
room.setPlayerDiscProperties(player.id,
{invMass: 9999999});
}
if (player.team == 2 &&
room.getPlayerDiscProperties(player.id).y > 0) {
if
(room.getPlayerDiscProperties(player.id).cGroup != 536870918) {
room.setPlayerDiscProperties(player.id,
{cGroup: 536870918});
}
if (player.position.y > 460) {
room.setPlayerDiscProperties(player.id,
{y: 445});
}
}
if (player.team == 1 &&
room.getPlayerDiscProperties(player.id).cGroup != 2) {
room.setPlayerDiscProperties(player.id,
{cGroup: 2});
}
if (room.getDiscProperties(21).x != 1149) { // show
bottom red line
room.setDiscProperties(21, {x: 1149});
}
if (room.getDiscProperties(23).x != -1149) { // hide
bottom blue line
room.setDiscProperties(23, {x: -1149});
}
});
}
if (game.outStatus == "blueThrow") {
players.forEach(function(player) {
if (room.getPlayerDiscProperties(player.id).invMass !
= 9999999) {
room.setPlayerDiscProperties(player.id,
{invMass: 9999999});
}
if (player.team == 1 &&
room.getPlayerDiscProperties(player.id).y > 0) {
if
(room.getPlayerDiscProperties(player.id).cGroup != 536870918) {
room.setPlayerDiscProperties(player.id,
{cGroup: 536870918});
}
if (player.position.y > 460) {
room.setPlayerDiscProperties(player.id,
{y: 445});
}
}
if (player.team == 2 &&
room.getPlayerDiscProperties(player.id).cGroup != 2) {
room.setPlayerDiscProperties(player.id,
{cGroup: 2});
}
if (room.getDiscProperties(23).x != 1149) { // show
bottom blue line
room.setDiscProperties(23, {x: 1149});
}
if (room.getDiscProperties(21).x != -1149) { // hide
bottom red line
room.setDiscProperties(21, {x: -1149});
}
});
}
}
}
function blockGoalKick() {
var players = room.getPlayerList().filter((player) => player.team !=
0);
if (room.getBallPosition().x < 0) { // left side red goal kick
if (game.outStatus == "redGK") {
players.forEach(function(player) {
if (player.team == 2 &&
room.getPlayerDiscProperties(player.id).x < 0) {
if
(room.getPlayerDiscProperties(player.id).cGroup != 268435462) {
room.setPlayerDiscProperties(player.id,
{cGroup: 268435462});
}
if (player.position.x < -305 &&
player.position.y > -597 && player.position.y < 597 && player.position.y > -408 &&
player.position.y < 408 && player.position.y > -666 && player.position.y < 666)
{ //840, -320, 320
room.setPlayerDiscProperties(player.id,
{x: -295}); //-825
}
}
if (player.team == 1 &&
room.getPlayerDiscProperties(player.id).cGroup != 2) {
room.setPlayerDiscProperties(player.id,
{cGroup: 2});
}
});
}
}
if (room.getBallPosition().x > 0) { // right side blue goal kick
if (game.outStatus == "blueGK") {
players.forEach(function(player) {
if (player.team == 1 &&
room.getPlayerDiscProperties(player.id).x > 0) {
if
(room.getPlayerDiscProperties(player.id).cGroup != 268435462) {
room.setPlayerDiscProperties(player.id,
{cGroup: 268435462});
}
if (player.position.x > 305 &&
player.position.y > -593 && player.position.y < 597 && player.position.y > -425 &&
player.position.y < 408 && player.position.y > -666 && player.position.y < 666) {
room.setPlayerDiscProperties(player.id,
{x: 295});
}
}
if (player.team == 2 &&
room.getPlayerDiscProperties(player.id).cGroup != 2) {
room.setPlayerDiscProperties(player.id,
{cGroup: 2});
}
});
}
}
}
function removeBlock() {
var players = room.getPlayerList().filter((player) => player.team !=
0);
if (game.outStatus == "") {
players.forEach(function(player) {
if (player.team == 1 &&
room.getPlayerDiscProperties(player.id).cGroup != 2) {
room.setPlayerDiscProperties(player.id, {cGroup: 2});
}
if (player.team == 2 &&
room.getPlayerDiscProperties(player.id).cGroup != 4) {
room.setPlayerDiscProperties(player.id, {cGroup: 4});
}
});
if (room.getDiscProperties(17).x != -1149) { // hide top red line
room.setDiscProperties(17, {x: -1149});
}
if (room.getDiscProperties(19).x != -1149) { // hide top blue
line
room.setDiscProperties(19, {x: -1149});
}
if (room.getDiscProperties(21).x != -1149) { // hide bottom red
line
room.setDiscProperties(21, {x: -1149});
}
if (room.getDiscProperties(23).x != -1149) { // hide bottom blue
line
room.setDiscProperties(23, {x: -1149});
}
}
}

You might also like