You are on page 1of 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