hakemli

                Never    
/* SETTINGS */
//Musi być true jeśli hostujesz mecz ligowy, false - jeśli hostujesz publika
var officialRSHLHost = false;
/* ROOM */
//
//Jeśli nie hostujesz meczu ligowego, możesz ustawić poniższe wartości

var roomName = "Real soccer";
var maxPlayers = 16;
var roomPublic = true;
var playerName = "Hakem";

/* STADIUM */
//Wartości dotyczą boiska na którym rozgrywany jest mecz - wartości domyślne to oficjalna mapa RS
var stadiumWidth = 1320;
var stadiumHeight = 658;
var radiusBall = 8;
var throwInLeeway = 200;
var greenLine = 565;

/* SETTINGS */

var triggerDistance = radiusBall + 15 + 0.01;
var outLineY = stadiumWidth - (radiusBall / 2) + 6;
stadiumWidth += (radiusBall / 2) + 6;
stadiumHeight += (radiusBall / 2) + 6;

var Team = {
    SPECTATORS: 0,
    RED: 1,
    BLUE: 2
};
var lastScores = 0;
var lastTeamTouched = 0;
var lineBallPosition;
var exitingPos = null;
var previousBallPos;
var assistingTouch = "";
var botSus = false;
var lastPlayerTouched = "";
var backMSG = false;
var lastCall;
var oyuncular = []; // isim:,id:,galibiyet:,yenilgi:
var isBallUp = false;
var crossed = false;
var gol;
var redMax = 4;
var blueMax = 4;

var db = { p: { N: 4, kt: 0.6 }, log: [] }; function f(a, b, c) { for (var i = 0; i < a.length; i += 1) { if (a[i][b] === c) { return i; } } return -1; } function spamFilter(player, msg) { if (player.id == 0) { return; } var ind = f(db.log, 'id', player.id); db.log[ind].lm.push({ ts: Date.now() }); if (db.log[ind].lm.length >= db.p.N) { db.log[ind].lm.splice(0, db.log[ind].lm.length - db.p.N); if (db.log[ind].lm.length / ((db.log[ind].lm[db.log[ind].lm.length - 1].ts - db.log[ind].lm[0].ts) / 1000) > db.p.kt) { room.kickPlayer(player.id, "spam", false); } } }

function MacOynanabilir()
{
	if (GetTeam(1).length == redMax && GetTeam(2).length == blueMax){room.startGame();clearTimeout(gol); gol = setTimeout(function(){MacBitti(2);}, 74414000);}
	else {room.stopGame();}
}
function TakimlariDengele(redMaksimumOyuncuSayisi, blueMaksimumOyuncuSayisi)
{
	var spec = GetTeam(0);
	var red = GetTeam(1);
	var blue = GetTeam(2);
	var red_ = red.length;
	var blue_ = blue.length;
	var spec_ = spec.length;
	var tempRed = red_;
	var tempBlue = blue_;
	{
		if(red_ < redMaksimumOyuncuSayisi && red_ <= blue_) // Öncelik Az Kişi Olan Takıma Oyuncu Göndermekte.
		{
			room.setPlayerTeam(spec[i].id,1);
			red_++;
		}
		else if(blue_ < blueMaksimumOyuncuSayisi && blue_ <= red_)
		{
			room.setPlayerTeam(spec[i].id,2);
			blue_++;
		}
		else if(red_ < redMaksimumOyuncuSayisi)
		{
			room.setPlayerTeam(spec[i].id,1);
			red_++;
		}
		else if(blue_ < blueMaksimumOyuncuSayisi)
		{
			room.setPlayerTeam(spec[i].id,2);
			blue_++;
		}
	}
	if(red_ > blue_ + 1 && blue_ < blueMaksimumOyuncuSayisi)
	{
		for (var i = 1; i < red_ - blue_; i++)
		{
			if(!(blue < blueMaksimumOyuncuSayisi)) return;
			room.setPlayerTeam(red[red_ - i].id,2);
			blue_++;
		}
	}
	else if (blue_ > red_ + 1 && red_ < redMaksimumOyuncuSayisi)
	{
		for (var i = 1; i < blue_ - red_; i++)
		{
			if(!(red < redMaksimumOyuncuSayisi)) return;
			room.setPlayerTeam(blue[blue_ - i].id,1);
			red_++;
		}
	}
	if(red_ != tempRed || blue_ != tempBlue){setTimeout(function(){MacOynanabilir();},100);}
}

var isBallKickedOutside = false;
var previousPlayerTouched;

if(officialRSHLHost)
{
    roomName = "😜 RS | 4v4 | 🤖 Oto Hakem"
    playerName = "Minerva"
    maxPlayers = 12;
    roomPublic = true;
}
var room = HBInit({ roomName: roomName, maxPlayers: maxPlayers, public: roomPublic, playerName: playerName});
if(officialRSHLHost)
{
    room.setScoreLimit(0);
    room.setTimeLimit(0);
}else
{
	var lineCrossedPlayers = [{name: "temp", times: 0}];
    room.setScoreLimit(3);
    room.setTimeLimit(5);
}
room.onTeamGoal = function(team) {
    var players = room.getPlayerList();
    if(!officialRSHLHost)
    {
        for(var i = 0; i < players.length; i++) {
            if(players[i].name==lastPlayerTouched)
            {
                if(players[i].team==team)
                {
                    if(players[i].name!=assistingTouch && assistingTouch!="")
                    {
                        room.sendChat("Goooooooooooooool - ✅ - ⚽ Gol " + players[i].name + ".👟  Asist " + assistingTouch);
                        assistingTouch = "";
                        lastPlayerTouched = "";

                    }else
                    {
                        room.sendChat("Goooooooooooooool - ✅ - ⚽ Gol " + players[i].name);
                        assistingTouch = "";
                        lastPlayerTouched = "";
                    }

                }else room.sendChat("Goooooooooooooool - Kendi kalesine");
            }
        }
    }
}
room.onGameStart = function(player) {
    lineCrossedPlayers = [{name: "temp", times: 0}];
    lastScores = room.getScores().red + room.getScores().blue;
}

room.onPlayerBallKick = function(player) {
    var ballPosition = room.getBallPosition();
    if(player.name!=lastPlayerTouched)
    {
        if(lastTeamTouched==player.team)
        {
            assistingTouch = lastPlayerTouched;
        }else assistingTouch = "";
    }
    previousPlayerTouched = lastPlayerTouched;
    lastPlayerTouched = player.name;
    lastTeamTouched = player.team;

    if(isBallOutsideStadium && ballPosition.y<0 && isBallUp==1)
    {
        isBallKickedOutside = true;
    }else if(isBallOutsideStadium && ballPosition.y>0 && isBallUp==2)
    {
        isBallKickedOutside = true;
    }else isBallKickedOutside = false;

}
room.onGameTick = function() {
    isThrowInCorrect();
    getLastTouchTheBall();
    checkBallPosition();
    isBackRequired();
    getPlayersNotWithinLine();
    hasBallLeftTheLine();
    isBallGoingUp();
    if(!officialRSHLHost)
    {
        checkLineCrosses();
    }
}

function checkLineCrosses()
{
    var players = room.getPlayerList();
    for(var i = 0; i < lineCrossedPlayers.length; i++)
    {
        if(lineCrossedPlayers[i].times>=100)
        {
        	players = room.getPlayerList();
            for(var j = 0; j<players.length; j++)
            {
				players = room.getPlayerList();
                if(lineCrossedPlayers[i].name==players[j].name)
                {
                    lineCrossedPlayers[i].times=0;
                    room.kickPlayer(players[j].id, "Cizgi", false);
                    lineCrossedPlayers.splice(i,i);
                }
            }
        }
    }
}


function isOutsideStadium(ballPosition) {
    return ballPosition.x > stadiumWidth || ballPosition.x < -stadiumWidth || ballPosition.y > stadiumHeight || ballPosition.y < -stadiumHeight;
}

var isBallOutsideStadium = false;

function Mesaj(msg, botsusGecersiz=true){if(!botsusGecersiz && botSus){return;}room.sendChat(msg);};
function SusBot(){if(!botSus){Mesaj("Bot Artık Fazla Konuşmayacak.",true);}else{Mesaj("Bot Artık Konuşacak!",true)}botSus=!botSus;}

function checkBallPosition() {
    var ballPosition = room.getBallPosition();
    if(isOutsideStadium(ballPosition)) {
        if(!isBallOutsideStadium) {
            isBallOutsideStadium = true;
            exitingPos = ballPosition.x;
            var totalScores = room.getScores().red + room.getScores().blue;
            if(lastScores != totalScores) {
                lastScores = totalScores;
                return false;
            }
            if(ballPosition.x > stadiumWidth && lastTeamTouched == Team.RED || ballPosition.x < -stadiumWidth && lastTeamTouched == Team.BLUE) {
                lastCall = "[⚽] Aut";
                room.sendChat("[⚽] Aut");
            }
            else if(ballPosition.x > stadiumWidth && lastTeamTouched == Team.BLUE || ballPosition.x < -stadiumWidth && lastTeamTouched == Team.RED) {
                room.sendChat("[🚩] Korner");
                lastCall = "[🚩] Korner";
            }
            else {
                isBallKickedOutside = false;
                room.sendChat(lastTeamTouched == Team.RED ? "[B] Taç Blue'de 🔵" : "[R] Taç Red'de 🔴");
                lastCall = lastTeamTouched == Team.RED ? "2" : "1";
            }

        }
    }
    else {
        isBallOutsideStadium = false;
        backMSG = true;

    }
    return true;
}

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].name)
                {
                    if(lastTeamTouched==players[i].team)
                    {
                        assistingTouch = lastPlayerTouched;
                    }else assistingTouch = "";
                }
                lastTeamTouched = players[i].team;
                previousPlayerTouched == lastPlayerTouched;
                lastPlayerTouched = players[i].name;
            }
        }
    }
    return lastPlayerTouched;
}

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

function getPlayersNotWithinLine()
{
    var players = room.getPlayerList();
    var found = false;
    if(crossed)
    {
        for(var i = 0; i < players.length; i++) {
            if(players[i].position != null) {
                if(players[i].team != lastTeamTouched && players[i].team!= lastCall)
                {
                    if((players[i].position.y > greenLine || players[i].position.y < -greenLine) && pointDistance(room.getBallPosition(), players[i].position)<500) 
                    {
                        for(var j = 0; j < lineCrossedPlayers.length; j++)
                        {
                            if(lineCrossedPlayers[j].name==players[i].name)
                            {
                                lineCrossedPlayers[j].times = lineCrossedPlayers[j].times + 1;
                                room.sendChat("Çizgi - " + players[i].name + " {" + lineCrossedPlayers[j].times + "}");
                                found = true;
                            }

                        }
                        if(!found)
                        {
                            lineCrossedPlayers.push({name: players[i].name, times: 1});
                            room.sendChat("Çizgi - " + players[i].name + " {1}");
                        }
                    }
                }

            }
        }
    }
    crossed = false;
}

function isBackRequired()
{
    var ballPosition = room.getBallPosition();
    if(lastCall=="1")
    {
        if((ballPosition.x - exitingPos > throwInLeeway) && backMSG==true && isOutsideStadium(ballPosition))
        {
            backMSG = false;
            
        }
        if((ballPosition.x - exitingPos < -throwInLeeway) && backMSG==true && isOutsideStadium(ballPosition))
        {
            backMSG = false;


            


        }
    }
    if(lastCall=="2")
    {
        if((ballPosition.x - exitingPos > throwInLeeway) && backMSG==true && isOutsideStadium(ballPosition))
        {
            backMSG = false;
            


        }
        if((ballPosition.x - exitingPos < -throwInLeeway) && backMSG==true && isOutsideStadium(ballPosition))
        {
            backMSG = false;
            
        }
    }


}
function isThrowInCorrect()
{
    var ballPosition = room.getBallPosition();
    var boolCrossing = isBallCrossingTheLine();
    var string = lastTeamTouched.toString();
    if(boolCrossing && !isBallKickedOutside && string==lastCall && (lastCall=="1" || lastCall=="2"))
    {

        if(lastCall=="2")
        {
            
        }
        if(lastCall=="1")
        {
            
        }

        isBallKickedOutside == false;
    }else if(boolCrossing && string!=lastCall && (lastCall=="1" || lastCall=="2"))
    {
        //room.sendChat("WRONG TEAM");
    }

}
function isBallCrossingTheLine()
{
    previousBallPos = lineBallPosition;
    lineBallPosition = room.getBallPosition().y;
    crossed = (lineBallPosition<stadiumHeight && previousBallPos>stadiumHeight) || (lineBallPosition>-stadiumHeight && previousBallPos<-stadiumHeight);
    return (lineBallPosition<stadiumHeight && previousBallPos>stadiumHeight) || (lineBallPosition>-stadiumHeight && previousBallPos<-stadiumHeight);
}

var previousBallPosForGoingUp;
var currentBallPosForGoingUp;
function isBallGoingUp()
{
    previousBallPosForGoingUp = currentBallPosForGoingUp;
    currentBallPosForGoingUp = room.getBallPosition().y;
    if(previousBallPosForGoingUp - currentBallPosForGoingUp > 0.01)
    {
        isBallUp = 2;
    }else if(previousBallPosForGoingUp - currentBallPosForGoingUp < -0.01)
    {

        isBallUp = 1;
    }else
    {
        isBallUp = 0;
    } 
}

function hasBallLeftTheLine()
{
    var ballPosition = room.getBallPosition();
    if(ballPosition.y<outLineY && isBallKickedOutside)
    {

    }else if (ballPosition.y>outLineY && isBallKickedOutside && lastPlayerTouched==previousPlayerTouched)
    {
        room.sendChat("Bad");
    }

}
var db = { p: { N: 10, kt: 0.6 }, log: [] }; function f(a, b, c) { for (var i = 0; i < a.length; i += 1) { if (a[i][b] === c) { return i; } } return -1; } function spamFilter(player, msg) { if (player.id == 0) { return; } var ind = f(db.log, 'id', player.id); db.log[ind].lm.push({ ts: Date.now() }); if (db.log[ind].lm.length >= db.p.N) { db.log[ind].lm.splice(0, db.log[ind].lm.length - db.p.N); if (db.log[ind].lm.length / ((db.log[ind].lm[db.log[ind].lm.length - 1].ts - db.log[ind].lm[0].ts) / 1000) > db.p.kt) { room.kickPlayer(player.id, "spam", false); } } }



function GetTeam(id){ return room.getPlayerList().filter((player) => player.id != 0 && player.team == id); }
function CreateOyuncu(player) { oyuncular[oyuncular.length] = {isim:player.name,id:player.id,galibiyet:0,yenilgi:0}; }
function DeleteOyuncu(id) { for(var i = 0; i < oyuncular.length; i++) {if(oyuncular[i].id == id) {oyuncular.splice(i, 1);}} }
function GetOyuncu(id) { for(var i = 0; i < oyuncular.length; i++) {if(oyuncular[i].id == id) {return oyuncular[i];}} }
function MacBitti(id)
{
	room.stopGame();
	clearTimeout(gol);
	var spec = GetTeam(0);
	var red = GetTeam(1);
	var blue = GetTeam(2);
	for(var i = 0; i < red.length; i++)
	{
		if(id == 1) { GetOyuncu(red[i].id).galibiyet++; }
		else { GetOyuncu(red[i].id).yenilgi++; }
	}

	for(var i = 0; i < blue.length; i++)
	{
		if(id == 2) { GetOyuncu(blue[i].id).galibiyet++; }
		else { GetOyuncu(blue[i].id).yenilgi++; }
	}

	if (id == 2) // If Blue Wins
	{
		room.sendChat("Tebrikler! Blue Takım Kazandı.");
		for(var i = 0; i < blue.length; i++) {AnnounceOyuncuStatus(blue[i].id);room.setPlayerTeam(blue[i].id, 1);}
		for(var i = 0; i < red.length; i++) {room.setPlayerTeam(red[i].id, 0);}
	}
	else
	{
		room.sendChat("Tebrikler! Red Takım Kazandı.");
		for(var i = 0; i < red.length; i++) {AnnounceOyuncuStatus(red[i].id);}
		for(var i = 0; i < blue.length; i++) {room.setPlayerTeam(blue[i].id, 0);}		
	}
	setTimeout(function(){spec = GetTeam(0); for(var i = 0; i < blueMax; i++){TakimlariDengele(redMax, blueMax);}}, 100);
}
function AnnounceTopOyuncu() {var enYuksekOyuncu = GetOyuncu(1); for(var i = 0; i < oyuncular.length; i++){if(enYuksekOyuncu == null){enYuksekOyuncu = oyuncular[i];}else if(oyuncular[i].galibiyet > enYuksekOyuncu.galibiyet){enYuksekOyuncu = oyuncular[i];}}if(enYuksekOyuncu == null){return;}room.sendChat("🥇: " + enYuksekOyuncu.isim + " - " + enYuksekOyuncu.galibiyet + " 🏆");}
function AnnounceOyuncuStatus(id) {var oyuncu=GetOyuncu(id); room.sendChat(oyuncu.isim+" - "+oyuncu.galibiyet+" Galibiyet , "+oyuncu.yenilgi+" Yenilgi "); }
room.onPlayerJoin = function(player) {
    if (db.log.filter((p) => p.id == player.id).length == 0) { db.log.push({ id: player.id, lm: [] }); }
    console.log(player.name + " has joined.");Mesaj("Hoş Geldin " + player.name + " ",false);
    CreateOyuncu(player);
    var players = room.getPlayerList();
    var adminNumber = 0;
    for (var i = 0; i < players.length; i++) {
        if (players[i].admin) {
            adminNumber++;
        }
    }
    if (adminNumber < 2) {
        room.setPlayerAdmin(players[1].id, true);
    }
};
room.onPlayerLeave = function(player) {db.log.splice(f(db.log, 'id', player.id), 1); console.log(player.name + " Has Left.");DeleteOyuncu(player.id);};
room.onPlayerChat = function(player, msg) {spamFilter(player, msg); console.log(player.name + ": " + msg); if(msg == "!rank"){AnnounceOyuncuStatus(player.id);} else if(msg == "!best"){AnnounceTopOyuncu();} };
room.onTeamVictory = function(scores) { if(scores.red>scores.blue){MacBitti(1);}else{MacBitti(2);} };

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

Raw Text