From c67d8ddf4cc2afaa387e947bec961c8885d09ae9 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sun, 27 Dec 2020 21:27:27 -0600 Subject: [PATCH] Add admin job cmds --- scripts/server/job.js | 240 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 209 insertions(+), 31 deletions(-) diff --git a/scripts/server/job.js b/scripts/server/job.js index bce10f30..50354eb9 100644 --- a/scripts/server/job.js +++ b/scripts/server/job.js @@ -124,7 +124,7 @@ function loadJobLocationsFromDatabase(jobDatabaseId) { while(dbAssoc = fetchQueryAssoc(dbQuery)) { let tempJobLocationData = new serverClasses.jobLocationData(dbAssoc); tempJobLocations.push(tempJobLocationData); - console.log(`[Asshat.Job]: Job location '${tempJobLocationData.name}' loaded from database successfully!`); + console.log(`[Asshat.Job]: Job location '${tempJobLocationData.databaseId}' loaded from database successfully!`); } } freeDatabaseQuery(dbQuery); @@ -321,41 +321,27 @@ function showJobInformationToPlayer(client, jobType) { function takeJobCommand(command, params, client) { if(!canPlayerUseJobs(client)) { - messageClientError(client, "You are not allowed to use jobs!"); + messageClientError(client, "You are not allowed to use any jobs!"); return false; } - if(doesCommandRequireLogin(command)) { - if(!isClientLoggedIn(client)) { - messageClientError(client, "You are not logged in!"); - return false; - } - } - - if(isClientFromDiscord(client)) { - if(!isCommandAllowedOnDiscord(command)) { - messageClientError(client, "That command isn't available on discord!"); - return false; - } - } - - if(!doesClientHaveStaffPermission(client, getCommandRequiredPermissions(command))) { - messageClientError(client, "You do not have permission to use this command!"); - return false; - } - - let closestJobLocation = getClosestJobLocation(client.player.position); + let closestJobLocation = getClosestJobLocation(getPlayerPosition(client)); let jobData = getJobData(closestJobLocation.job); - if(closestJobLocation.position.distance(client.player.position) > getGlobalConfig().takeJobDistance) { + if(closestJobLocation.position.distance(getPlayerPosition(client)) > getGlobalConfig().takeJobDistance) { messageClientError(client, "There are no job points close enough!"); - return false; + return false; } if(getClientCurrentSubAccount(client).job > AG_JOB_NONE) { messageClientError(client, "You already have a job! Use /quitjob to quit your job."); return false; } + + if(!canPlayerUseJob(client, closestJobLocation.job)) { + messageClientError(client, "You can't use this job!"); + return false; + } takeJob(client, closestJobLocation.job); messageClientSuccess(client, "You now have the " + toString(jobData.name) + " job"); @@ -369,10 +355,10 @@ function startWorkingCommand(command, params, client) { return false; } - let closestJobLocation = getClosestJobLocation(client.player.position); + let closestJobLocation = getClosestJobLocation(getPlayerPosition(client)); let jobData = getJobData(closestJobLocation.job); - if(closestJobLocation.position.distance(client.player.position) > getGlobalConfig().startWorkingDistance) { + if(closestJobLocation.position.distance(getPlayerPosition(client)) > getGlobalConfig().startWorkingDistance) { messageClientError(client, "There are no job points close enough!"); return false; } @@ -388,7 +374,6 @@ function startWorkingCommand(command, params, client) { messageClientInfo(client, `If you want this job, use /quitjob to quit your current job.`); return false; } - messageClientSuccess(client, "You are now working as a " + toString(jobData.name)); startWorking(client); @@ -562,7 +547,6 @@ function stopWorking(client) { // --------------------------------------------------------------------------- function jobUniformCommand(command, params, client) { - let jobId = getClientCurrentSubAccount(client).job; let uniforms = getJobData(jobId).uniforms; @@ -595,7 +579,6 @@ function jobUniformCommand(command, params, client) { // --------------------------------------------------------------------------- function jobEquipmentCommand(command, params, client) { - let jobId = getClientCurrentSubAccount(client).job; let equipments = getJobData(jobId).equipment; @@ -715,6 +698,98 @@ function reloadAllJobsCommand(command, params, client) { // --------------------------------------------------------------------------- +function createJobLocationCommand(command, params, client) { + if(areParamsEmpty(params)) { + messageClientSyntax(client, getCommandSyntaxText(command)); + return false; + } + + let splitParams = params.split(" "); + let jobId = getJobFromParams(splitParams[0]); + + if(!getJobData(jobId)) { + messageClientError(client, "That job was not found!"); + return false; + } + + createJobLocation(jobId, getPlayerPosition(client)); + messageAdmins(`[#AAAAAA]${client.name} [#FFFFFF]created a location for the [#AAAAAA]${jobData.name} [#FFFFFF]job`); + return true; +} + +// --------------------------------------------------------------------------- + +function deleteJobLocationCommand(command, params, client) { + let closestJobLocation = getClosestJobLocation(getPlayerPosition(client)); + let jobData = getJobData(closestJobLocation.job); + + messageAdmins(`[#AAAAAA]${client.name} [#FFFFFF]${getEnabledDisabledFromBool(closestJobLocation.enabled)} location [#AAAAAA]${closestJobLocation.databaseId} [#FFFFFF]for the [#AAAAAA]${jobData.name} [#FFFFFF]job`); + + deleteJobLocation(closestJobLocation); +} + +// --------------------------------------------------------------------------- + +function toggleJobLocationEnabledCommand(command, params, client) { + if(areParamsEmpty(params)) { + messageClientSyntax(client, getCommandSyntaxText(command)); + return false; + } + + let closestJobLocation = getClosestJobLocation(getPlayerPosition(client)); + let jobData = getJobData(closestJobLocation.job); + + closestJobLocation.enabled = !closestJobLocation.enabled; + messageAdmins(`[#AAAAAA]${client.name} [#FFFFFF]${getEnabledDisabledFromBool(closestJobLocation.enabled)} location [#AAAAAA]${closestJobLocation.databaseId} [#FFFFFF]for the [#AAAAAA]${jobData.name} [#FFFFFF]job`); +} + +// --------------------------------------------------------------------------- + +function toggleJobEnabledCommand(command, params, client) { + if(areParamsEmpty(params)) { + messageClientSyntax(client, getCommandSyntaxText(command)); + return false; + } + + let closestJobLocation = getClosestJobLocation(getPlayerPosition(client)); + let jobData = getJobData(closestJobLocation.job); + + jobData.enabled = !jobData.enabled; + messageAdmins(`[#AAAAAA]${client.name} [#FFFFFF]${getEnabledDisabledFromBool(jobData.enabled)} [#FFFFFF]the [#AAAAAA]${jobData.name} [#FFFFFF]job`); +} + +// --------------------------------------------------------------------------- + +function toggleJobWhiteListCommand(command, params, client) { + if(areParamsEmpty(params)) { + messageClientSyntax(client, getCommandSyntaxText(command)); + return false; + } + + let closestJobLocation = getClosestJobLocation(getPlayerPosition(client)); + let jobData = getJobData(closestJobLocation.job); + + jobData.whiteListEnabled = !jobData.whiteListEnabled; + messageAdmins(`[#AAAAAA]${client.name} [#FFFFFF]${getEnabledDisabledFromBool(jobData.whiteListEnabled)} [#FFFFFF]the whitelist for the [#AAAAAA]${jobData.name} [#FFFFFF]job`); +} + +// --------------------------------------------------------------------------- + +function toggleJobBlackListCommand(command, params, client) { + if(areParamsEmpty(params)) { + messageClientSyntax(client, getCommandSyntaxText(command)); + return false; + } + + let closestJobLocation = getClosestJobLocation(getPlayerPosition(client)); + let jobData = getJobData(closestJobLocation.job); + + jobData.blackListEnabled = !jobData.blackListEnabled; + messageAdmins(`[#AAAAAA]${client.name} [#FFFFFF]${getEnabledDisabledFromBool(jobData.blackListEnabled)} [#FFFFFF]the blacklist for the [#AAAAAA]${jobData.name} [#FFFFFF]job`); +} + +// --------------------------------------------------------------------------- + function forceAllPlayersToStopWorking() { getClients().forEach(function(client) { stopWorking(client); @@ -823,7 +898,10 @@ function startJobRoute(client) { // --------------------------------------------------------------------------- -function stopJobRoute(client) { +function stopJobRoute(client, successful = false) { + stopReturnToJobVehicleCountdown(client); + triggerNetworkEvent("ag.stopJobRoute", client); + if(doesPlayerHaveJobType(client, AG_JOB_BUS)) { respawnVehicle(getPlayerData(client).busRouteVehicle); messageClientAlert(client, `You stopped the ${getBusRouteData(getPlayerData(client).busRouteIsland, getPlayerData(client).busRoute).name} bus route! Your bus has been returned to the bus depot.`, getColourByName("yellow")); @@ -856,4 +934,104 @@ function isPlayerOnJobRoute(client) { return false; } -// --------------------------------------------------------------------------- \ No newline at end of file +// --------------------------------------------------------------------------- + +function getPlayerJobRouteVehicle(client) { + if(!isPlayerOnJobRoute(client)) { + return false; + } + + if(doesPlayerHaveJobType(client, AG_JOB_BUS)) { + return getPlayerData(client).busRouteVehicle; + } else if(doesPlayerHaveJobType(client, AG_JOB_GARBAGE)) { + return getPlayerData(client).garbageRouteVehicle; + } +} + +// --------------------------------------------------------------------------- + +function startReturnToJobVehicleCountdown(client) { + getPlayerData(client).returnToJobVehicleTick = getGlobalConfig().returnToJobVehicleTime; + getPlayerData(client).returnToJobVehicleTimer = setInterval(function() { + //console.log(getPlayerData(client).returnToJobVehicleTick); + if(getPlayerData(client).returnToJobVehicleTick > 0) { + getPlayerData(client).returnToJobVehicleTick = getPlayerData(client).returnToJobVehicleTick - 1; + //console.warn(`You have ${getPlayerData(client).returnToJobVehicleTick} seconds to return to your job vehicle!`); + showGameMessage(client, `You have ${getPlayerData(client).returnToJobVehicleTick} seconds to return to your job vehicle!`, getColourByName("softRed"), 1500); + } else { + clearInterval(getPlayerData(client).returnToJobVehicleTimer); + getPlayerData(client).returnToJobVehicleTimer = null; + getPlayerData(client).returnToJobVehicleTick = 0; + stopJobRoute(client, false); + } + }, 1000); +} + +// --------------------------------------------------------------------------- + +function stopReturnToJobVehicleCountdown(client) { + if(getPlayerData(client).returnToJobVehicleTimer != null) { + clearInterval(getPlayerData(client).returnToJobVehicleTimer); + getPlayerData(client).returnToJobVehicleTimer = null; + } + + //getPlayerData(client).returnToJobVehicleTick = 0; +} + +// --------------------------------------------------------------------------- + +function sendAllJobLabelsToPlayer(client) { + let tempJobLocations = []; + for(let k in getServerData().jobs) { + for(m in getServerData().jobs[i].locations) { + tempJobLocations.push({ + id: getServerData().jobs[i].locations[j].databaseId, + jobType: getServerData().jobs[i].jobType, + name: getServerData().jobs[i].name, + position: getServerData().jobs[i].locations[j].position, + }); + } + } + + let totalJobLocations = tempJobLocations.length; + let tempJobLabels = []; + let jobLocationsPerNetworkEvent = 100; + let totalNetworkEvents = Math.ceil(totalJobLocations/jobLocationsPerNetworkEvent); + for(let i = 0 ; i < totalNetworkEvents ; i++) { + for(let j = 0 ; j < jobLocationsPerNetworkEvent ; j++) { + let tempJobLocationId = (i*jobLocationsPerNetworkEvent)+j; + if(typeof getServerData().jobs[k] != "undefined") { + let tempJobLabels = []; + tempJobLabels.push([tempJobLocations[i].id, tempJobLocations[i].position, getGameConfig().propertyLabelHeight[getServerGame()], tempJobLocations[i].name, tempJobLocations[i].jobType, false]); + } + } + triggerNetworkEvent("ag.joblabel.all", client, tempJobLabels); + tempJobLabels = []; + } +} + +// --------------------------------------------------------------------------- + +function canPlayerUseJob(client, jobId) { + if(doesPlayerHaveStaffPermission(client, getStaffFlagValue("manageJobs"))) { + return true; + } + + if(!getJobData(jobId)) { + return false; + } + + if(getJobData(jobId).whiteListEnabled) { + if(!isPlayerOnJobWhiteList(client, jobId)) { + return false + } + } +} + +// --------------------------------------------------------------------------- + +function deleteJobLocation(jobLocationData) { + destroyElement(jobLocationData.pickup); + triggerNetworkEvent("ag.joblabel.del", jobLocationData.databaseId); + +} \ No newline at end of file