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; } });