Friday, September 20, 2024 12:00:28 AM
> settings

Customize


Authenticate

> functions.js
var waitingForResponse = false;
var currentMembers = [];
var currentServer = -1;
var currentTerritory = -1;


///////////////////////////////////////////////////////////////////
/*
	Initialize the main screen
*/
///////////////////////////////////////////////////////////////////
function initMain()
{
    ////////////////////////
    //	Utilities
    ////////////////////////
    // EH to set a clicked on list item to active
    $(".list-group").on("click", "li", function(e)
    {
        $that = $(this);
        $that.parent().find('li').removeClass('active');
        $that.addClass('active');
    });

    // Sorting function for the leaderboards, needs replaced with something better
    $('#id_Leaderboard th').click(function()
    {
        var table = $(this).parents('table').eq(0)
        var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()))
        this.asc = !this.asc
        if (!this.asc)
        {
            rows = rows.reverse()
        }
        for (var i = 0; i < rows.length; i++)
        {
            table.append(rows[i])
        }
    });
    
    // For the sidebar once the screen is small enough
    $("#btn_ToggleSideBar").click(function()
    {
        toggleSideBar();
    });
    
    // When the stuff is small enough, close the side bar
    $(".collapse h5").click(function()
    {
        if ($(document).width() < 1500) 
        {
            toggleSideBar();
        }
    });

    ////////////////////////
    //	Territory Management
    ///////////////////////
    $("#btn_PromotePlayer").click(function()
    {
        promotePlayer();
    });
    $("#btn_DemotePlayer").click(function()
    {
        demotePlayer();
    });
    $("#btn_KickPlayer").click(function()
    {
        kickPlayer();
    });
    $("#btn_AddPlayer").click(function()
    {
        addPlayer();
    });
    $("#id_ManagableTerritories").click(function()
    {
        loadTerritory();
    });
    $("#id_territoryMembers").click(function()
    {
        toggleManagementButtons();
    });
    $("#btn_UpgradeTerritory").click(function()
    {
        upgradeTerritory("view");
    });
    $("#btn_upgradeConfirm").click(function()
    {
        upgradeTerritory("confirm");
    });
    $("#btn_MakePayment").click(function()
    {
        makePayment("view");
    });
    $("#btn_paymentConfirm").click(function()
    {
        makePayment("confirm");
    });

    ////////////////////////
    //	Modals!
    ////////////////////////
    $("#server_information").on("show.bs.modal", function(e)
    {
        updateServerInfoModal(e)
    });
}


///////////////////////////////////////////////////////////////////
/*
    Toggles the sidebar 
*/
///////////////////////////////////////////////////////////////////
function toggleSideBar()
{
    var padding = $('#btn_ToggleSideBar').css('padding-left');
    var newPadding = (padding == '0px') ? '350px' : '0px';
    $('#btn_ToggleSideBar').css('padding-left',newPadding);
    
    if ($("#id_SideBar").width() == 0)
    {
        $("#id_SideBar").removeClass("collapse_sidebar");
        $("#id_SideBar").addClass("show_sidebar");
        $('#ico_SideBar').addClass("fa-rotate-180");
    }
    else
    {
        $("#id_SideBar").removeClass("show_sidebar");
        $("#id_SideBar").addClass("collapse_sidebar");
        $('#ico_SideBar').removeClass("fa-rotate-180");
    } 
}


///////////////////////////////////////////////////////////////////
/*
	Gets information or upgrades the territory 
*/
///////////////////////////////////////////////////////////////////
function upgradeTerritory(option)
{
    if (waitingForResponse) return;
    waitingForResponse = true;

    if (option === "view")
    {
        // Send the request to the server
        $.ajax(
        {
            type: "POST",
            url: 'upgradeTerritory.php',
            data:
            {
                index: currentServer,
                tid: currentTerritory,
                type: "info"
            },
            success: function(data)
            {

                data = JSON.parse(data);

                if (data["result"] == 1)
                {
                    data = data["return"];

                    var playerMoney = parseInt(data["player_money"]);
                    var upgradeCost = parseInt(data["new_price"]);

                    $("#id_upgradeFromBuildSize").text(data["old_radius"] + " meters");
                    $("#id_upgradeFromMaxObjects").text(data["old_max"]);
                    $("#id_upgradeToCost").html(parseInt(data["new_price"]).toLocaleString() + '<img class="poptabs-inline" src="img/poptabs.png">');
                    $("#id_upgradeToBuildSize").text(data["new_radius"] + " meters");
                    $("#id_upgradeToMaxObjects").text(data["new_max"]);
                    $("#id_upgradePlayerMoneyStart").html(playerMoney.toLocaleString() + '<img class="poptabs-inline" src="img/poptabs.png">');
                    $("#id_upgradeTotalCost").html((upgradeCost * -1).toLocaleString() + '<img class="poptabs-inline" src="img/poptabs.png">');
                    $("#id_upgradePlayerMoneyEnd").html((playerMoney - upgradeCost).toLocaleString() + '<img class="poptabs-inline" src="img/poptabs.png">');

                    // Enable or disable based if the player has enough money
                    $("#btn_upgradeConfirm").prop("disabled", playerMoney < upgradeCost);

                    // show the modal!
                    $("#upgrade_territory").modal("show");
                }
                else
                {
                    showToast(data["return"], "error", "Oops!");
                }

                waitingForResponse = false;
            }
        });
    }
    else
    {
        // Send the request to the server
        $.ajax(
        {
            type: "POST",
            url: 'upgradeTerritory.php',
            data:
            {
                index: currentServer,
                tid: currentTerritory,
                type: "confirm"
            },
            success: function(data)
            {

                data = JSON.parse(data);

                if (data["result"] == 1)
                {
                    data = data["return"];
                    $("#id_TerritoryObjects").text(data["object_count"] + "/" + parseInt(data["max_objects"]));
                    $("#id_TerritoryBuildSize").text(parseInt(data["radius"]) + " meters");

                    if (data["price"] === null)
                    {
                        $("#id_UpgradeCost").text("Max Level");
                    }
                    else
                    {
                        $("#id_UpgradeCost").html(parseInt(data["price"]).toLocaleString() + '<img class="poptabs-inline" src="img/poptabs.png">');
                    }


                    showToast("Your territory has been upgraded!", "success", "Congrats!");
                    $("#upgrade_territory").modal("hide");
                }
                else
                {
                    showToast(data["return"], "error", "Oops!");
                    $("#upgrade_territory").modal("hide");
                }

                waitingForResponse = false;
            }
        });
    }

}


///////////////////////////////////////////////////////////////////
/*
	Views and makes a territory protection payment
*/
///////////////////////////////////////////////////////////////////
function makePayment(option)
{
    if (waitingForResponse) return;
    waitingForResponse = true;

    if (option === "view")
    {
        // Send the request to the server
        $.ajax(
        {
            type: "POST",
            url: 'payTerritory.php',
            data:
            {
                index: currentServer,
                tid: currentTerritory,
                type: "info"
            },
            success: function(data)
            {
                data = JSON.parse(data);

                if (data["result"] == 1)
                {
                    data = data["return"];

                    var playerMoney = parseInt(data["current_locker_amount"]);
                    var paymentCost = parseInt(data["current_objects"]) * parseInt(data["price_per_object"]);

                    // Convert the MySQL time into an array
                    var t = data["current_due_date"].split(/[- :]/);

                    // Convert the arrayed MySQL time into a javascript time stamp
                    var currentDueDate = new Date(Date.UTC(t[0], t[1] - 1, t[2], t[3], t[4], t[5]));

                    // Convert the MySQL time into an array
                    t = data["next_due_date"].split(/[- :]/);

                    // Convert the arrayed MySQL time into a javascript time stamp
                    var nextDueDate = new Date(Date.UTC(t[0], t[1] - 1, t[2], t[3], t[4], t[5]));

                    $("#id_paymentCurrentDueDate").text((currentDueDate.getMonth() + 1) + "/" + currentDueDate.getDate() + "/" + currentDueDate.getFullYear() + " " + formatAMPM(currentDueDate) + " (" + currentDueDate.toLocaleString('en',
                    {
                        timeZoneName: 'short'
                    }).split(' ').pop() + ")");
                    $("#id_paymentNextDueDate").text((nextDueDate.getMonth() + 1) + "/" + nextDueDate.getDate() + "/" + nextDueDate.getFullYear() + " " + formatAMPM(nextDueDate) + " (" + nextDueDate.toLocaleString('en',
                    {
                        timeZoneName: 'short'
                    }).split(' ').pop() + ")");
                    $("#id_paymentPlayerMoneyStart").html(playerMoney.toLocaleString() + '<img class="poptabs-inline" src="img/poptabs.png">');
                    $("#id_paymentPaymentCost").html((paymentCost * -1).toLocaleString() + '<img class="poptabs-inline" src="img/poptabs.png">');
                    $("#id_paymentPlayerMoneyEnd").html((playerMoney - paymentCost).toLocaleString() + '<img class="poptabs-inline" src="img/poptabs.png">');

                    // Enable or disable based if the player has enough money
                    $("#btn_paymentConfirm").prop("disabled", playerMoney < paymentCost);

                    // show the modal!
                    $("#make_payment").modal("show");
                }
                else
                {
                    showToast(data["return"], "error", "Oops!");
                }

                waitingForResponse = false;
            }
        });
    }
    else
    {
        // Send the request to the server
        $.ajax(
        {
            type: "POST",
            url: 'payTerritory.php',
            data:
            {
                index: currentServer,
                tid: currentTerritory,
                type: "confirm"
            },
            success: function(data)
            {
                data = JSON.parse(data);

                if (data["result"] == 1)
                {
                    data = data["return"];

                    // Convert the MySQL time into an array
                    var t = data["next_due_date"].split(/[- :]/);

                    // Convert the arrayed MySQL time into a javascript time stamp
                    var nextDueDate = new Date(Date.UTC(t[0], t[1] - 1, t[2], t[3], t[4], t[5]));

                    $("#id_ProtectionDueDate").text((nextDueDate.getMonth() + 1) + "/" + nextDueDate.getDate() + "/" + nextDueDate.getFullYear() + " " + formatAMPM(nextDueDate) + " (" + nextDueDate.toLocaleString('en',
                    {
                        timeZoneName: 'short'
                    }).split(' ').pop() + ")");

                    showToast("Your territory protection has been paid!", "success", "Protected!");
                    $("#make_payment").modal("hide");
                }
                else
                {
                    showToast(data["return"], "error", "Oops!");
                    $("#make_payment").modal("hide");
                }

                waitingForResponse = false;
            }
        });
    }
}




///////////////////////////////////////////////////////////////////
/*
	Promotes the selected player
*/
///////////////////////////////////////////////////////////////////
function promotePlayer()
{
    if (waitingForResponse) return;
    waitingForResponse = true;

    var puid = $("#id_territoryMembers").find(".active").data("uid");

    if (puid === undefined || puid === "")
    {
        showToast("No player selected", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Make sure we aren't trying to promote ourselves
    if (puid === PLAYER_UID)
    {
        showToast("You cannot promote yourself!", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Make sure I am the owner
    if (currentMembers[PLAYER_UID]["rank"] !== "owner")
    {
        showToast("Only owners can promote members!", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Make sure the are a member
    if (!currentMembers.hasOwnProperty(puid))
    {
        showToast("Player is not a member", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Make sure the player in question is a member
    if (currentMembers[puid]["rank"] !== "member")
    {
        showToast("Member is already promoted to the highest level", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Send the request to the server
    $.ajax(
    {
        type: "POST",
        url: 'handleModeration.php',
        data:
        {
            index: currentServer,
            tid: currentTerritory,
            uid: puid,
            option: "1"
        },
        success: function(data)
        {
            data = JSON.parse(data);

            if (data["result"] == 1)
            {
                data = data["return"];

                // Update the current members
                currentMembers[data["uid"]]["rank"] = "moderator";

                // Update the listbox
                var logo = '<span class="pull-right center-block"><i class="fa fa-star-half" aria-hidden="true" style="color: #DB456D;"></i></span>';

                // Find the list elem and add the star!
                $("#id_territoryMembers").find("[data-uid='" + data["uid"] + "']").html('<span class="player_name">' + data["name"] + ' </span>' + logo + '<br><span class="player_uid">(' + data["uid"] + ')</span>');

                // Let em know.
                showToast(data["name"] + " has been promoted", "success", "Promoted!");

                // Update the buttons
                toggleManagementButtons();
            }
            else
            {
                showToast(data["return"], "error", "Oops!");
            }

            waitingForResponse = false;
        }
    });
}


///////////////////////////////////////////////////////////////////
/*
	Demotes the selected player
*/
///////////////////////////////////////////////////////////////////
function demotePlayer()
{
    if (waitingForResponse) return;
    waitingForResponse = true;

    var puid = $("#id_territoryMembers").find(".active").data("uid");

    if (puid === undefined || puid === "")
    {
        showToast("No player selected", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Make sure we aren't trying to promote ourselves
    if (puid === PLAYER_UID)
    {
        showToast("You cannot demote yourself!", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Make sure I am the owner
    if (currentMembers[PLAYER_UID]["rank"] !== "owner")
    {
        showToast("Only owners can demote members!", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Make sure the are a member
    if (!currentMembers.hasOwnProperty(puid))
    {
        showToast("Player is not a member", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Make sure the player in question is a member
    if (currentMembers[puid]["rank"] !== "moderator")
    {
        showToast("Member is already at the lowest level", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Send the request to the server
    $.ajax(
    {
        type: "POST",
        url: 'handleModeration.php',
        data:
        {
            index: currentServer,
            tid: currentTerritory,
            uid: puid,
            option: "0"
        },
        success: function(data)
        {

            data = JSON.parse(data);

            if (data["result"] == 1)
            {
                data = data["return"];

                // Update the current members
                currentMembers[data["uid"]]["rank"] = "member";

                // Find the list elem and add the star!
                $("#id_territoryMembers").find("[data-uid='" + data["uid"] + "']").html('<span class="player_name">' + data["name"] + ' </span><br><span class="player_uid">(' + data["uid"] + ')</span>');

                // Let em know.
                showToast(data["name"] + " has been demoted", "success", "Demoted!");

                // Update the buttons
                toggleManagementButtons();
            }
            else
            {
                showToast(data["return"], "error", "Oops!");
            }

            waitingForResponse = false;
        }
    });
}



///////////////////////////////////////////////////////////////////
/*
	Kicks a player from the territory
*/
///////////////////////////////////////////////////////////////////
function kickPlayer()
{
    if (waitingForResponse) return;
    waitingForResponse = true;

    var puid = $("#id_territoryMembers").find(".active").data("uid");

    if (puid === undefined || puid === "")
    {
        showToast("No player selected", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Make sure we aren't trying to promote ourselves
    if (puid === PLAYER_UID)
    {
        showToast("You cannot kick yourself!", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // No kicky the owner
    if (currentMembers[puid]["rank"] === "owner")
    {
        showToast("You cannot kick the owner", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Make sure I am the owner or moderator
    if (currentMembers[PLAYER_UID]["rank"] !== "owner" && currentMembers[PLAYER_UID]["rank"] !== "moderator")
    {
        showToast("Only owners and moderators can kick members!", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Make sure the are a member
    if (!currentMembers.hasOwnProperty(puid))
    {
        showToast("Player is not a member", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Send the request to the server
    $.ajax(
    {
        type: "POST",
        url: 'handlePlayer.php',
        data:
        {
            index: currentServer,
            tid: currentTerritory,
            uid: puid,
            option: "0"
        },
        success: function(data)
        {
            data = JSON.parse(data);

            if (data["result"] == 1)
            {
                data = data["return"];

                // Remove them from the members
                delete currentMembers[data["uid"]];

                // Find the list elem and remove them
                $("#id_territoryMembers").find("[data-uid='" + data["uid"] + "']").remove();

                // Recreate the list
                $("#id_OnlinePlayersList").empty();

                // Add all the players back to the list again
                JSON.parse(data["online_players"]).forEach(function(_player)
                {
                    if (!currentMembers.hasOwnProperty(_player["uid"]))
                    {
                        $("#id_OnlinePlayersList").append('<option data-uid="' + _player["uid"] + '">' + _player["name"] + ' (' + _player["uid"] + ')' + '</option>');
                    }
                });

                // Let em know.
                showToast(data["name"] + " has been kicked!", "success", "Given the boot!");

                // Update the buttons
                toggleManagementButtons();
            }
            else
            {
                showToast(data["return"], "error", "Oops!");
            }

            waitingForResponse = false;
        }
    });
}


///////////////////////////////////////////////////////////////////
/*
	Adds a player to the territory
*/
///////////////////////////////////////////////////////////////////
function addPlayer()
{
    if (waitingForResponse) return;
    waitingForResponse = true;

    var puid = $('#id_OnlinePlayersList').find(":selected").data("uid");

    if (puid === undefined || puid === "")
    {
        showToast("No player selected", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Make sure we aren't trying to promote ourselves
    if (puid === PLAYER_UID)
    {
        showToast("You cannot add yourself", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Make sure the are a member
    if (currentMembers.hasOwnProperty(puid))
    {
        showToast("Player is already a member", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Make sure I am the owner or moderator
    if (currentMembers[PLAYER_UID]["rank"] !== "owner" && currentMembers[PLAYER_UID]["rank"] !== "moderator")
    {
        showToast("Only owners and moderators can add members!", "error", "Oops!");
        waitingForResponse = false;
        return;
    }

    // Send the request to the server
    $.ajax(
    {
        type: "POST",
        url: 'handlePlayer.php',
        data:
        {
            index: currentServer,
            tid: currentTerritory,
            uid: puid,
            option: "1"
        },
        success: function(data)
        {
            data = JSON.parse(data);
            console.log(data);

            if (data["result"] == 1)
            {
                data = data["return"];

                // Add them to the members
                currentMembers[data["uid"]] = {
                    name: data["name"],
                    rank: "member"
                };

                // Recreate the list
                $("#id_OnlinePlayersList").empty();

                // Add all the players back to the list again
                JSON.parse(data["online_players"]).forEach(function(_player)
                {
                    if (!currentMembers.hasOwnProperty(_player["uid"]))
                    {
                        $("#id_OnlinePlayersList").append('<option data-uid="' + _player["uid"] + '">' + _player["name"] + ' (' + _player["uid"] + ')' + '</option>');
                    }
                });

                // Add them to the listbox
                $("#id_territoryMembers").append('<li class="list-group-item" data-uid="' + data["uid"] + '">' + '<span class="player_name">' + data["name"] + '<br><span class="player_uid">(' + data["uid"] + ')</span></li>');

                // Let em know.
                showToast(data["name"] + " has been added!", "success", "Roll out the red carpet!");

                // Update the buttons
                toggleManagementButtons();
            }
            else
            {
                showToast(data["return"], "error", "Oops!");
            }

            waitingForResponse = false;
        }
    });
}


///////////////////////////////////////////////////////////////////
/*
    Toggles the member management buttons
*/
///////////////////////////////////////////////////////////////////
function toggleManagementButtons()
{
    if (currentMembers[PLAYER_UID]["rank"] === "member") return;

    var selectedUID = $("#id_territoryMembers").find(".active").data("uid");

    if (selectedUID === undefined || selectedUID === "") return;

    $("#btn_KickPlayer").prop("disabled", true);
    $("#btn_DemotePlayer").prop("disabled", true);
    $("#btn_PromotePlayer").prop("disabled", true);

    if (selectedUID === PLAYER_UID) return;

    // Adjust some buttons based on permissions
    switch (currentMembers[selectedUID]["rank"])
    {
        case "moderator":
            if (currentMembers[PLAYER_UID]["rank"] === "owner")
            {
                $("#btn_DemotePlayer").prop("disabled", false);
            }

            $("#btn_KickPlayer").prop("disabled", false);
            break;

        case "member":
            if (currentMembers[PLAYER_UID]["rank"] === "owner")
            {
                $("#btn_PromotePlayer").prop("disabled", false);
            }
            $("#btn_KickPlayer").prop("disabled", false);
            break;

            // You can't do shit to owners
        default:
            break;
    }
}



///////////////////////////////////////////////////////////////////
/*
	Shows the My Stats panel and populates it with data.
*/
///////////////////////////////////////////////////////////////////
function showMyStats(ind)
{
    if (waitingForResponse) return;
    waitingForResponse = true;

    currentServer = ind;

    $("#id_Panel_MyStats").addClass("hidden");
    $("#id_Panel_ServerLeaderboard").addClass("hidden");
    $("#id_Panel_TerritoryManagement").addClass("hidden");

    var spinner = createSpinner();
    spinner.show();

    $.ajax(
    {
        type: "POST",
        url: 'myStats.php',
        data:
        {
            index: ind
        },
        success: function(data)
        {
            data = JSON.parse(data);

            if (data["result"] == 1)
            {
                data = data["return"];
                playerData = data['player'];
                territoryData = data['territory'];

                $("#id_PlayerTerritories > tr").remove();

                $("#id_PlayerName").text(playerData["name"]);
                $("#id_PlayerLocker").text(parseInt(playerData["locker"]).toLocaleString());
                $("#id_PlayerWallet").text(parseInt(playerData["money"]).toLocaleString());
                $("#id_PlayerRespect").text(parseInt(playerData["score"]).toLocaleString());

                // Health is a double from 0 (full health) to 1 (dead), stupid arma
                // Fun fact: Player/vehicle health is using the range above, ammo/fuel uses 0-empty, 1-full range. 
                var health = Math.round((1 - parseFloat(playerData["damage"])) * 100);
                var hunger = Math.round(parseFloat(playerData["hunger"]));
                var thirst = Math.round(parseFloat(playerData["thirst"]));

                var healthColor, hungerColor, thirstColor;

                /*
						Green: #B2EC00
						Yellow: #FFCA12
						Red: #C72651
					*/
                // Handle the color for health
                switch (true)
                {
                    case (health >= 65):
                        healthColor = "#B2EC00";
                        break;
                    case (health < 65 && health >= 25):
                        healthColor = "#FFCA12";
                        break;
                    default:
                        healthColor = "#C72651";
                        break;
                }

                // Handle the color for health
                switch (true)
                {
                    case (hunger >= 65):
                        hungerColor = "#B2EC00";
                        break;
                    case (hunger < 65 && hunger >= 25):
                        hungerColor = "#FFCA12";
                        break;
                    default:
                        hungerColor = "#C72651";
                        break;
                }

                // Handle the color for health
                switch (true)
                {
                    case (thirst >= 65):
                        thirstColor = "#B2EC00";
                        break;
                    case (thirst < 65 && thirst >= 25):
                        thirstColor = "#FFCA12";
                        break;
                    default:
                        thirstColor = "#C72651";
                        break;
                }

                $("#id_PlayerHealth").html("<span style='color:" + healthColor + "'>" + health + "%</span>");
                $("#id_PlayerHunger").html("<span style='color:" + hungerColor + "'>" + hunger + "%</span>");
                $("#id_PlayerThirst").html("<span style='color:" + thirstColor + "'>" + thirst + "%</span>");

                // Handle the territory data
                territoryData.forEach(function(_territory)
                {
                    var membersString = "";
                    var moderators = _territory["moderators"];
                    var members = _territory["build_rights"];

                    // A object full of peoples!				
                    var territoryMembers = {};

                    // Add the owner
                    territoryMembers[_territory["owner_uid"]["uid"]] = {
                        name: _territory["owner_uid"]["name"],
                        rank: "owner"
                    }

                    moderators.forEach(function(_player)
                    {
                        if (!territoryMembers.hasOwnProperty(_player["uid"]))
                        {
                            territoryMembers[_player["uid"]] = {
                                name: _player["name"],
                                rank: "moderator"
                            };
                        }
                    });

                    members.forEach(function(_player)
                    {
                        if (!territoryMembers.hasOwnProperty(_player["uid"]))
                        {
                            territoryMembers[_player["uid"]] = {
                                name: _player["name"],
                                rank: "member"
                            };
                        }
                    });

                    // Finally add them
                    for (var key in territoryMembers)
                    {
                        if (territoryMembers.hasOwnProperty(key))
                        {
                            var _player = territoryMembers[key];
                            var logo = "";

                            switch (_player["rank"])
                            {
                                case "owner":
                                    logo = '<i class="fa fa-star" aria-hidden="true" style="color: #DB456D;"></i>';
                                    break;

                                case "moderator":
                                    logo = '<i class="fa fa-star-half" aria-hidden="true" style="color: #DB456D;"></i>';
                                    break;

                                default:
                                    break;
                            }

                            membersString += _player["name"] + " " + logo + "<br>";
                        }
                    };

                    $("#id_PlayerTerritories").append("<tr><td>" + _territory["name"] + "</td><td>" + membersString + "</td><td></tr>");
                });

                // Show the panel
                $("#id_Panel_MyStats").removeClass("hidden");
            }
            else
            {
                showToast(data["return"], "error", "Oops!");
            }

            // Kill the spinner and renable the button
            spinner.kill();

            waitingForResponse = false;
        }
    });
}



///////////////////////////////////////////////////////////////////
/*
    Shows the server leaderboard 
*/
///////////////////////////////////////////////////////////////////
function showServerLeaderboard(ind)
{
    if (waitingForResponse) return;
    waitingForResponse = true;

    currentServer = ind;

    $("#id_Panel_MyStats").addClass("hidden");
    $("#id_Panel_ServerLeaderboard").addClass("hidden");
    $("#id_Panel_TerritoryManagement").addClass("hidden");

    var spinner = createSpinner();
    spinner.show();

    $.ajax(
    {
        type: "POST",
        url: 'serverLeaderboard.php',
        data:
        {
            index: ind
        },
        success: function(data)
        {
            data = JSON.parse(data);

            if (data["result"] === 1)
            {
                data = data["return"];

                $("#id_ServerLeaderboard > tr").remove();

                // Handle the score data
                data.forEach(function(_player)
                {
                    $("#id_ServerLeaderboard").append(
                        `
							<tr>
							    <td>` + _player["name"] + `</td>
							    <td>` + _player["kills"] + `</td>
							    <td>` + _player["deaths"] + `</td>
							    <td>` + (_player["kills"] / _player["deaths"]).toFixed(2) + `</td>
							    <td>` + (parseInt(_player["locker"]).toLocaleString()) + ` <img class="poptabs-inline" src="img/poptabs.png"></td>
							    <td>` + (parseInt(_player["score"]).toLocaleString()) + `</td>
							    <td>` + _player["clan_name"] + `</td>
							</tr>
						`);
                });

                // Show the panel
                $("#id_Panel_ServerLeaderboard").removeClass("hidden");
            }
            else
            {
                showToast(data["return"], "error", "Oops!");
            }

            // Hide the spinner and renable the button
            spinner.kill();

            waitingForResponse = false;
        }
    });
}



///////////////////////////////////////////////////////////////////
/*
    Shows the territory managment panel and populates the list 
*/
///////////////////////////////////////////////////////////////////
function showTerritoryManagement(ind)
{
    if (waitingForResponse) return;
    waitingForResponse = true;

    currentServer = ind;

    $("#id_Panel_MyStats").addClass("hidden");
    $("#id_Panel_ServerLeaderboard").addClass("hidden");
    $("#id_Panel_TerritoryManagement").addClass("hidden");
    $("#id_ManagableTerritoryInfo").addClass("hidden");
    $("#id_TerritoryAddModerator").addClass("hidden");
    $("#id_TerritoryAddMember").addClass("hidden");

    var spinner = createSpinner();
    spinner.show();

    $.ajax(
    {
        type: "POST",
        url: 'territoryManagement.php',
        data:
        {
            index: ind,
            type: "list"
        },
        success: function(data)
        {
            data = JSON.parse(data);

            if (data["result"] == 1)
            {
                data = data["return"];
                $("#id_ManagableTerritories").empty();

                data.forEach(function(_territory)
                {
                    var html = '<li class="list-group-item" data-tid="' + _territory["id"] + '" data-ind="' + ind + '">' + _territory["name"] + ((parseInt(_territory["protected"]) == 0) ? '<span class="pull-right"><i class="fa fa-exclamation" aria-hidden="true" style="color: #DB456D;"></i></span>' : '') + '</li>';

                    $("#id_ManagableTerritories").append(html);
                });

                // Show the panel
                $("#id_Panel_TerritoryManagement").removeClass("hidden");
            }
            else
            {
                showToast(data["return"], "error", "Oops!");
            }

            // Hide the spinner and renable the button
            spinner.kill();

            waitingForResponse = false;
        }
    });

}

///////////////////////////////////////////////////////////////////
/*
    Loads the selected territory into the panel
*/
///////////////////////////////////////////////////////////////////
function loadTerritory()
{
    if (waitingForResponse) return;
    waitingForResponse = true;

    $("#id_ManagableTerritoryInfo").addClass("hidden");
    $("#id_TerritoryAddModerator").addClass("hidden");
    $("#id_TerritoryAddMember").addClass("hidden");

    // Disable EVERYTHING!!
    $("#btn_PromotePlayer").prop("disabled", true);
    $("#btn_DemotePlayer").prop("disabled", true);
    $("#btn_KickPlayer").prop("disabled", true);
    $("#btn_AddPlayer").prop("disabled", true);
    $("#btn_UpgradeTerritory").prop("disabled", true);
    $("#btn_MakePayment").prop("disabled", true);
    $("#id_OnlinePlayersList").prop("disabled", true);

    // Remove all the players
    $("#id_OnlinePlayersList").empty();

    var spinner = createSpinner("loader-territory");
    spinner.show();

    currentServer = $("#id_ManagableTerritories").find(".active").data("ind");
    currentTerritory = $("#id_ManagableTerritories").find(".active").data("tid");

    $.ajax(
    {
        type: "POST",
        url: 'territoryManagement.php',
        data:
        {
            index: currentServer,
            type: "select",
            id: currentTerritory
        },
        success: function(data)
        {
            data = JSON.parse(data);

            if (data["result"] == 1)
            {
                data = data["return"];

                // Add the territory name
                $("#id_TerritoryName").text(data["name"]);

                // Empty the list
                $("#id_territoryMembers").empty();

                var moderators = data["moderators"];
                var members = data["build_rights"];

                // A object full of peoples!				
                currentMembers = {};

                // Add the owner
                currentMembers[data["owner_uid"]["uid"]] = {
                    name: data["owner_uid"]["name"],
                    rank: "owner"
                }

                moderators.forEach(function(_player)
                {
                    if (!currentMembers.hasOwnProperty(_player["uid"]))
                    {
                        currentMembers[_player["uid"]] = {
                            name: _player["name"],
                            rank: "moderator"
                        };
                    }
                });

                members.forEach(function(_player)
                {
                    if (!currentMembers.hasOwnProperty(_player["uid"]))
                    {
                        currentMembers[_player["uid"]] = {
                            name: _player["name"],
                            rank: "member"
                        };
                    }
                });

                // Finally add them
                for (var key in currentMembers)
                {
                    if (currentMembers.hasOwnProperty(key))
                    {
                        var _player = currentMembers[key];
                        var logo = "";

                        switch (_player["rank"])
                        {
                            case "owner":
                                logo = '<span class="pull-right center-block"><i class="fa fa-star" aria-hidden="true" style="color: #DB456D;"></i></span>';
                                break;

                            case "moderator":
                                logo = '<span class="pull-right center-block"><i class="fa fa-star-half" aria-hidden="true" style="color: #DB456D;"></i></span>';
                                break;

                            default:
                                break;
                        }

                        $("#id_territoryMembers").append('<li class="list-group-item" data-uid="' + key + '">' + '<span class="player_name">' + _player["name"] + ' </span>' + logo + '<br><span class="player_uid">(' + key + ')</span></li>');
                    }
                }

                data["online_players"].forEach(function(_player)
                {
                    if (!currentMembers.hasOwnProperty(_player["uid"]))
                    {
                        $("#id_OnlinePlayersList").append('<option data-uid="' + _player["uid"] + '">' + _player["name"] + ' (' + _player["uid"] + ')' + '</option>');
                    }
                });

                // Convert the MySQL time into an array
                var t = data["last_paid_at"].split(/[- :]/);

                // Convert the arrayed MySQL time into a javascript time stamp
                var dateObj = new Date(Date.UTC(t[0], t[1] - 1, t[2], t[3], t[4], t[5]));

                // Add the amount of time based on server settings (default 7)
                dateObj.setDate(dateObj.getDate() + parseInt(data["territory_life_time"]));

                // Display it to the user DD/MM/YYYY HH:MM TIME_ZONE
                if (data["flag_stolen"] === "0")
                {
                    $("#id_ProtectionDueDate").text((dateObj.getMonth() + 1) + "/" + dateObj.getDate() + "/" + dateObj.getFullYear() + " " + formatAMPM(dateObj) + " (" + dateObj.toLocaleString('en',
                    {
                        timeZoneName: 'short'
                    }).split(' ').pop() + ")");
                    showPaymentWarning(dateObj);
                }
                else
                {
                    $("#id_ProtectionDueDate").html("<span style='color: #c62551;'>FLAG STOLEN</span>");
                    showToast("<span style='color: #c62551;'>Your flag has been stolen!!!</span>", "warning", "Oh noes!");
                }

                // Show how many objects they have out of server settings amount
                $("#id_TerritoryObjects").text(data["object_count"] + "/" + parseInt(data["max_objects"]));

                // Show how must the protection will cost
                $("#id_ProtectionCost").html((parseInt(data["object_count"]) * parseInt(data["price_per_object"])).toLocaleString() + '<img class="poptabs-inline" src="img/poptabs.png">');

                // Build size
                $("#id_TerritoryBuildSize").text(parseInt(data["radius"]) + " meters");

                if (data["price"] === null)
                {
                    // Cost to upgrade
                    $("#id_UpgradeCost").text("Max Level");
                }
                else
                {
                    // Cost to upgrade
                    $("#id_UpgradeCost").html(parseInt(data["price"]).toLocaleString() + '<img class="poptabs-inline" src="img/poptabs.png">');
                }

                // Get our current rank
                var currentRank = currentMembers[PLAYER_UID]["rank"];

                // Enable only if we are the owner, moderator, and we can level it up
                $("#btn_UpgradeTerritory").prop("disabled", (currentRank !== "owner" && currentRank !== "moderator" && data["price"] !== null));

                // Only enable if we are owner or moderator
                $("#id_OnlinePlayersList").prop("disabled", (currentRank !== "owner" && currentRank !== "moderator"));
                $("#btn_AddPlayer").prop("disabled", (currentRank !== "owner" && currentRank !== "moderator"));

                // Just in case
                $("#btn_MakePayment").prop("disabled", false);

                // Show the panel
                $("#id_ManagableTerritoryInfo").removeClass("hidden");
                $("#id_TerritoryAddModerator").removeClass("hidden");
                $("#id_TerritoryAddMember").removeClass("hidden");
            }
            else
            {
                showToast(data["return"], "error", "Oops!");
            }

            // Hide the spinner and renable the button
            spinner.kill();

            waitingForResponse = false;
        }
    });
}




///////////////////////////////////////////////////////////////////
/*
    Refreshes the available servers
*/
///////////////////////////////////////////////////////////////////
function refreshServers(elem)
{
    /*
	$(elem).prop( "disabled", true );
	
	$("#id_ServerContainer div").empty();

	
	$.ajax({
	    type: "POST",
	    url: 'updateServers.php',
	    data: {refresh: true},
	    success: function(data)
			{
				data = JSON.parse(data);
				alert(data);
			}
		});
	*/
    showToast("This isn't implemented yet!", "warning", "Warning!");
}



///////////////////////////////////////////////////////////////////
/*
    Populates the server information modals
*/
///////////////////////////////////////////////////////////////////
function updateServerInfoModal(e)
{
    var serverJson = JSON.parse(e.relatedTarget.dataset.serverinfo);

    $("#server_name").text(serverJson["name"]);
    $("#server_ip_port").text(serverJson["ip"] + ":" + serverJson["port"]);
    $("#server_restart_schedule").text(serverJson["restart_schedule"]);
    $("#server_map").text(serverJson["map"]);
    $("#server_players_online").text(serverJson["online_players"] + "/" + serverJson["max_players"]);
    $("#server_password_protected").text(serverJson["password_protected"]);
    $("#server_version").text(serverJson["server_version"]);

    var modString = "";
    serverJson["mods"].forEach(function(_mod)
    {
        modString += _mod["name"] + " " + _mod["version"];

        if (_mod["link"] !== "")
            modString += " (<a target='_blank' href='" + _mod["link"] + "'>Download</a>)";

        modString += "<br>";
    });

    $("#server_required_mods").html(modString);
}




///////////////////////////////////////////////////////////////////
/*
	initialize for the signin, dumbly simple for stupid me.
*/
///////////////////////////////////////////////////////////////////
function initLogin()
{
    $("#server_info").on("show.bs.modal", function(e)
    {
        updateServerInfoModal(e)
    });

    // just note, the following code is not production as it's purely for testing purposes
    $("#id_DoYourWorst").click(function()
    {
        window.location = '../supersecretbackdoor.php';
    });
}



///////////////////////////////////////////////////////////////////
/*
	The main thing!
	Initializes the pages when the page is ready.
	Some people like if statements, I LOVE switch (true) :D
*/
///////////////////////////////////////////////////////////////////
$(document).ready(function()
{
    switch (true)
    {
        case $("body").is("#page_login"):
            initLogin();
            break;

        case $("body").is("#page_main"):
            initMain();
            break;

        default:
            break;
    }
});
All opinions represented herein are my own
- © 2024 itsthedevman
- build 3c15a1b