Finish new job routes system

This commit is contained in:
Vortrex
2022-02-10 17:57:57 -06:00
parent 13affb28eb
commit 6fe8e17459

View File

@@ -14,7 +14,7 @@ function initJobScript() {
createAllJobPickups();
createAllJobBlips();
setAllJobIndexes();
setAllJobDataIndexes();
logToConsole(LOG_INFO, "[VRR.Job]: Job script initialized successfully!");
return true;
@@ -39,7 +39,7 @@ function loadJobsFromDatabase() {
tempJobData.locations = loadJobLocationsFromDatabase(tempJobData.databaseId);
tempJobData.equipment = loadJobEquipmentsFromDatabase(tempJobData.databaseId);
tempJobData.uniforms = loadJobUniformsFromDatabase(tempJobData.databaseId);
//tempJobData.routes = loadJobRoutesFromDatabase(tempJobData.databaseId);
tempJobData.routes = loadJobRoutesFromDatabase(tempJobData.databaseId);
tempJobs.push(tempJobData);
logToConsole(LOG_DEBUG, `[VRR.Job]: Job '${tempJobData.name}' loaded from database successfully!`);
}
@@ -96,14 +96,14 @@ function loadJobRoutesFromDatabase(jobDatabaseId) {
let dbAssoc;
if(dbConnection) {
dbQuery = queryDatabase(dbConnection, "SELECT * FROM `job_route` WHERE `job_route_enabled` = 1 AND `job_route_job` = " + toString(jobDatabaseId));
dbQuery = queryDatabase(dbConnection, `SELECT * FROM job_route WHERE job_route_enabled = 1 AND job_route_job = ${jobDatabaseId}`);
if(dbQuery) {
if(dbQuery.numRows > 0) {
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
let tempJobRouteData = new JobEquipmentData(dbAssoc);
let tempJobRouteData = new JobRouteData(dbAssoc);
tempJobRouteData.locations = loadJobRouteLocationsFromDatabase(tempJobRouteData.databaseId);
tempJobRoutes.push(tempJobRouteData);
logToConsole(LOG_DEBUG, `[VRR.Job]: Job equipment '${tempJobRouteData.name}' loaded from database successfully!`);
logToConsole(LOG_DEBUG, `[VRR.Job]: Job route '${tempJobRouteData.name}' loaded from database successfully!`);
}
}
freeDatabaseQuery(dbQuery);
@@ -126,7 +126,7 @@ function loadJobRouteLocationsFromDatabase(jobRouteId) {
let dbAssoc;
if(dbConnection) {
dbQuery = queryDatabase(dbConnection, "SELECT * FROM `job_route_loc` WHERE `job_route_loc_enabled` = 1 AND `job_route_loc_route` = " + toString(jobRouteId));
dbQuery = queryDatabase(dbConnection, `SELECT * FROM job_route_loc WHERE job_route_loc_enabled = 1 AND job_route_loc_route = ${jobRouteId}`);
if(dbQuery) {
if(dbQuery.numRows > 0) {
while(dbAssoc = fetchQueryAssoc(dbQuery)) {
@@ -141,7 +141,7 @@ function loadJobRouteLocationsFromDatabase(jobRouteId) {
}
logToConsole(LOG_DEBUG, `[VRR.Job]: ${tempJobRouteLocations.length} locations for job route ${jobRouteId} loaded from database successfully!`);
return tempJobEquipmentItems;
return tempJobRouteLocations;
}
// ===========================================================================
@@ -631,6 +631,7 @@ function stopWorking(client) {
deleteJobItems(client);
restorePlayerJobLockerItems(client);
respawnJobVehicle(client);
sendPlayerStopJobRoute(client);
let jobId = getPlayerJob(client);
switch(getJobType(jobId)) {
@@ -963,6 +964,8 @@ function createJob(name) {
tempJobData.pickupModel = getGameData().pickupModels[getGame()].job;
getServerData().jobs.push(tempJobData);
saveJobToDatabase(tempJobData);
setAllJobDataIndexes();
}
// ===========================================================================
@@ -992,15 +995,8 @@ function deleteJobLocationCommand(command, params, client) {
messageAdmins(`{ALTCOLOUR}${getPlayerName(client)} {MAINCOLOUR}deleted location {ALTCOLOUR}${closestJobLocation.index} (DB ID ${closestJobLocation.databaseId}) {MAINCOLOUR}for the {jobYellow}${getJobData(closestJobLocation.jobIndex).name} {MAINCOLOUR}job`);
if(closestJobLocation.databaseId > 0) {
quickDatabaseQuery(`DELETE FROM job_loc WHERE job_loc_id = ${closestJobLocation.databaseId}`);
}
let tempIndex = closestJobLocation.index;
let tempJob = closestJobLocation.job;
deleteJobLocation(closestJobLocation);
getJobData(getJobIdFromDatabaseId(tempJob)).locations.splice(tempIndex, 1);
}
// ===========================================================================
@@ -1150,7 +1146,7 @@ function setJobPickupCommand(command, params, client) {
// ===========================================================================
function toggleJobRouteEnabledCommand(command, params, client) {
let jobId = getPlayerJobRoute(client);
let jobId = getPlayerJob(client);
let jobRoute = getPlayerJobRoute(client);
let clients = getClients();
@@ -1187,7 +1183,7 @@ function setJobRouteNameCommand(command, params, client) {
return false;
}
let jobId = getPlayerJobRoute(client);
let jobId = getPlayerJob(client);
let jobRoute = getPlayerJobRoute(client);
let oldName = getJobData(jobId).routes[jobRoute].name;
@@ -1197,6 +1193,41 @@ function setJobRouteNameCommand(command, params, client) {
// ===========================================================================
function setJobRouteAllLocationDelaysCommand(command, params, client) {
if(!isPlayerWorking(client)) {
messagePlayerError(client, getLocaleString(client, "NeedToBeWorking", "{ALTCOLOUR}/startwork{MAINCOLOUR}"));
return false;
}
if(!isPlayerOnJobRoute(client)) {
messagePlayerError(client, getLocaleString(client, "NeedToBeOnJobRoute", "{ALTCOLOUR}/startroute{MAINCOLOUR}"));
return false;
}
if(areParamsEmpty(params)) {
messagePlayerSyntax(client, getCommandSyntaxText(command));
return false;
}
let jobId = getPlayerJob(client);
let jobRoute = getPlayerJobRoute(client);
let delay = getParam(params, " ", 1);
if(isNaN(delay)) {
messagePlayerError(client, getLocaleString(client, "TimeNotNumber"))
return false;
}
for(let i in getJobData(jobId).routes[jobRoute].locations) {
getJobData(jobId).routes[jobRoute].locations[i].stopDelay = delay;
getJobData(jobId).routes[jobRoute].locations[i].needsSaved = true;
}
messageAdmins(`${getPlayerName(client)} {MAINCOLOUR}${getEnabledDisabledFromBool(getJobData(jobId).enabled)}{MAINCOLOUR} set route {ALTCOLOUR}${oldName}{MAINCOLOUR} location's stop delays to {ALTCOLOUR}${delay/1000}{MAINCOLOUR} seconds for the {jobYellow}${getJobData(jobId).name}{MAINCOLOUR} job`);
}
// ===========================================================================
function setJobRouteVehicleColoursCommand(command, params, client) {
if(!isPlayerWorking(client)) {
messagePlayerError(client, getLocaleString(client, "NeedToBeWorking", "{ALTCOLOUR}/startwork{MAINCOLOUR}"));
@@ -1213,14 +1244,14 @@ function setJobRouteVehicleColoursCommand(command, params, client) {
return false;
}
let jobId = getPlayerJobRoute(client);
let jobId = getPlayerJob(client);
let jobRoute = getPlayerJobRoute(client);
let colour1 = getParam(params, " ", 1);
let colour2 = getParam(params, " ", 2);
getJobData(jobId).routes[jobRoute].vehicleColour1 = colour1;
getJobData(jobId).routes[jobRoute].vehicleColour1 = colour2;
getJobData(jobId).routes[jobRoute].vehicleColour1 = toInteger(colour1);
getJobData(jobId).routes[jobRoute].vehicleColour1 = toInteger(colour2);
getJobData(jobId).routes[jobRoute].needsSaved = true;
let clients = getClients();
@@ -1228,7 +1259,7 @@ function setJobRouteVehicleColoursCommand(command, params, client) {
if(isPlayerWorking(clients[i])) {
if(isPlayerOnJobRoute(clients[i])) {
if(getPlayerJob(clients[i]) == jobId && getPlayerJobRoute(clients[i]) == jobRoute) {
setVehicleColours(getPlayerJobVehicle(clients[i]), getJobRouteData(getPlayerJob(clients[i], getPlayerJobRoute(clients[i])).vehicleColour1, getJobRouteData(getPlayerJob(clients[i], getPlayerJobRoute(clients[i])).vehicleColour2, 1, 1)));
setVehicleColours(getPlayerVehicle(clients[i]), getJobRouteData(getPlayerJob(clients[i]), getPlayerJobRoute(clients[i])).vehicleColour1, toInteger(colour1), toInteger(colour2), 1, 1);
messagePlayerAlert(clients[i], );
messagePlayerAlert(clients[i], getLocaleString(client, "CurrentJobRouteVehicleColoursChanged"));
}
@@ -1257,7 +1288,7 @@ function setJobRouteFinishMessageCommand(command, params, client) {
return false;
}
let jobId = getPlayerJobRoute(client);
let jobId = getPlayerJob(client);
let jobRoute = getPlayerJobRoute(client);
getJobData(jobId).routes[jobRoute].finishMessage = params;
@@ -1283,7 +1314,7 @@ function setJobRouteStartMessageCommand(command, params, client) {
return false;
}
let jobId = getPlayerJobRoute(client);
let jobId = getPlayerJob(client);
let jobRoute = getPlayerJobRoute(client);
getJobData(jobId).routes[jobRoute].startMessage = params;
@@ -1309,7 +1340,7 @@ function setJobRouteLocationArriveMessageCommand(command, params, client) {
return false;
}
let jobId = getPlayerJobRoute(client);
let jobId = getPlayerJob(client);
let jobRoute = getPlayerJobRoute(client);
getJobData(jobId).routes[jobRoute].locationArriveMessage = params;
@@ -1335,7 +1366,7 @@ function setJobRouteLocationNextMessageCommand(command, params, client) {
return false;
}
let jobId = getPlayerJobRoute(client);
let jobId = getPlayerJob(client);
let jobRoute = getPlayerJobRoute(client);
getJobData(jobId).routes[jobRoute].locationNextMessage = params;
@@ -1361,7 +1392,7 @@ function setJobRoutePayCommand(command, params, client) {
return false;
}
let jobId = getPlayerJobRoute(client);
let jobId = getPlayerJob(client);
let jobRoute = getPlayerJobRoute(client);
let amount = getParam(params, " ", 1);
@@ -1547,7 +1578,7 @@ function jobStartRouteCommand(command, params, client) {
}
if(getJobData(getPlayerJob(client)).routes.length == 0) {
messagePlayerError(client, "Your job doesn't have any routes!");
messagePlayerError(client, "Your job doesn't have any routes for this location!");
return false;
}
@@ -1556,7 +1587,22 @@ function jobStartRouteCommand(command, params, client) {
return false;
}
startJobRoute(client);
if(isPlayerOnJobRoute(client)) {
messagePlayerError(client, "You're already on a job route! Finish the route or use /stoproute");
return false;
}
let forceRoute = -1;
if(doesPlayerHaveStaffPermission(client, getStaffFlagValue("ManageJobs"))) {
if(!areParamsEmpty(params)) {
let tempRoute = getJobRouteFromParams(params, getPlayerJob(client));
if(tempRoute != false) {
forceRoute = tempRoute;
}
}
}
startJobRoute(client, forceRoute);
return true;
}
@@ -1573,17 +1619,17 @@ function jobStopRouteCommand(command, params, client) {
return false;
}
if(!doesPlayerHaveJobType(client, VRR_JOB_BUS) && !doesPlayerHaveJobType(client, VRR_JOB_GARBAGE)) {
messagePlayerError(client, "Your job doesn't use a route!");
return false;
}
//if(!doesPlayerHaveJobType(client, VRR_JOB_BUS) && !doesPlayerHaveJobType(client, VRR_JOB_GARBAGE)) {
// messagePlayerError(client, "Your job doesn't use a route!");
// return false;
//}
if(!isPlayerOnJobRoute(client)) {
messagePlayerError(client, "You aren't on a job route!");
return false;
}
stopJobRoute(client);
stopJobRoute(client, false, false);
return true;
}
@@ -1611,38 +1657,65 @@ function isPlayerWorking(client) {
// ===========================================================================
function startJobRoute(client) {
let jobRoute = getRandomJobRoute(getClosestJobLocationForJob(getPlayerPosition(client), getPlayerJob(client)));
function startJobRoute(client, forceRoute = -1) {
let jobId = getPlayerJob(client);
let jobRoute = 0;
if(forceRoute == -1) {
jobRoute = getRandomJobRouteForLocation(getClosestJobLocationForJob(getPlayerPosition(client), jobId));
} else {
jobRoute = forceRoute;
}
if(jobRoute == -1) {
messagePlayerError(client, `There are no routes for this location.`);
return false;
}
logToConsole(LOG_DEBUG, `${getPlayerDisplayForConsole(client)} is starting job route ${jobRoute} for job ${jobId}`);
getPlayerData(client).jobRoute = jobRoute;
getPlayerData(client).jobRouteStop = 0;
getPlayerData(client).jobRouteLocation = 0;
getPlayerData(client).jobRouteVehicle = getPlayerVehicle(client);
getPlayerVehicle(client).colour1 = getJobRouteData(getPlayerJob(client), jobRoute).vehicleColour1;
getPlayerVehicle(client).colour2 = getJobRouteData(getPlayerJob(client), jobRoute).vehicleColour2;
if(getJobRouteData(getPlayerJob(client), jobRoute).locations.length > 0) {
showCurrentJobStop(client);
}
messagePlayerNormal(client, getJobRouteData(getPlayerJob(client), jobRoute).startMessage);
getPlayerVehicle(client).colour1 = getJobRouteData(jobId, jobRoute).vehicleColour1;
getPlayerVehicle(client).colour2 = getJobRouteData(jobId, jobRoute).vehicleColour2;
messagePlayerNormal(client, getJobRouteData(jobId, jobRoute).startMessage);
if(getJobRouteData(jobId, jobRoute).locations.length > 0) {
showCurrentJobLocation(client);
} else {
messagePlayerError(client, `There are no locations for this route.`);
}
}
// ===========================================================================
function stopJobRoute(client, successful = false, alertPlayer = true) {
let jobId = getPlayerJob(client);
if(alertPlayer) {
messagePlayerAlert(client, replaceJobRouteStringsInMessage(getJobRouteData(jobId, getPlayerJobRoute(client)).finishMessage), jobId, getPlayerJobRoute(client));
}
if(successful == true) {
finishSuccessfulJobRoute(client);
return false;
}
stopReturnToJobVehicleCountdown(client);
sendPlayerStopJobRoute(client);
respawnVehicle(getPlayerData(client).jobRouteVehicle);
getPlayerData(client).jobRouteVehicle = false;
getPlayerData(client).jobRoute = false;
getPlayerData(client).jobRouteStop = false;
if(alertPlayer) {
messagePlayerAlert(client, getJobRouteData(getPlayerJob(client), jobRoute).finishMessage);
}
getPlayerData(client).jobRouteVehicle = false;
getPlayerData(client).jobRoute = -1;
getPlayerData(client).jobRouteLocation = -1;
}
// ===========================================================================
function isPlayerOnJobRoute(client) {
if(getPlayerData(client).jobRoute != false) {
if(getPlayerData(client).jobRoute != -1) {
return true;
}
@@ -1718,23 +1791,30 @@ function canPlayerUseJob(client, jobId) {
// ===========================================================================
function deleteJobLocation(jobLocationData) {
if(jobLocationData.pickup) {
deleteGameElement(jobLocationData.pickup);
if(jobLocationData.databaseId > 0) {
quickDatabaseQuery(`DELETE FROM job_loc WHERE job_loc_id = ${jobLocationData.databaseId}`);
}
deleteJobLocationBlip(tempJob, tempLocation);
deleteJobLocationPickup(tempJob, tempLocation);
getJobData(getJobIdFromDatabaseId(tempJob)).locations.splice(tempLocation, 1);
setAllJobDataIndexes();
}
// ===========================================================================
function freezeJobVehicleForRouteStop(client) {
function freezePlayerJobVehicleForRouteLocation(client) {
getVehicleData(getPlayerVehicle(client)).engine = false;
getPlayerVehicle(client).engine = false;
setVehicleEngine(getPlayerVehicle(client), getVehicleData(getPlayerVehicle(client)).engine);
//setPlayerControlState(client, false);
}
// ===========================================================================
function unFreezeJobVehicleForRouteStop(client) {
function unFreezePlayerJobVehicleForRouteLocation(client) {
getVehicleData(getPlayerVehicle(client)).engine = true;
getPlayerVehicle(client).engine = true;
setVehicleEngine(getPlayerVehicle(client), getVehicleData(getPlayerVehicle(client)).engine);
//setPlayerControlState(client, true);
}
// ===========================================================================
@@ -1823,7 +1903,7 @@ function saveJobToDatabase(jobData) {
return false;
}
if(!jobData.needsSaved) {
if(jobData.needsSaved == false) {
logToConsole(LOG_DEBUG, `[VRR.Job]: Job ${jobData.name} doesn't need saved. Skipping ...`);
return false;
}
@@ -1876,8 +1956,8 @@ function saveJobRouteToDatabase(jobRouteData) {
return false;
}
if(!jobRouteData.needsSaved) {
logToConsole(LOG_DEBUG, `[VRR.Job]: Job route ${jobRouteData.name} (${jobRouteData.databaseId}) doesn't need saved. Skipping ...`);
if(jobRouteData.needsSaved == false) {
logToConsole(LOG_DEBUG, `[VRR.Job]: Job route ${jobRouteData.name} (DB ID ${jobRouteData.databaseId}) doesn't need saved. Skipping ...`);
return false;
}
@@ -1895,8 +1975,8 @@ function saveJobRouteToDatabase(jobRouteData) {
["job_route_job_loc", jobRouteData.locationId],
["job_route_enabled", boolToInt(jobRouteData.enabled)],
["job_route_name", safeName],
["job_route_col1_r", jobRouteData.vehicleColour1],
["job_route_col2_r", jobRouteData.vehicleColour2],
["job_route_veh_colour1", jobRouteData.vehicleColour1],
["job_route_veh_colour2", jobRouteData.vehicleColour2],
["job_route_start_msg", safeStartMessage],
["job_route_finish_msg", safeFinishMessage],
["job_route_loc_arrive_msg", safeLocationArriveMessage],
@@ -1927,14 +2007,14 @@ function saveJobRouteToDatabase(jobRouteData) {
// ===========================================================================
function saveJobRouteLocationsToDatabase(jobRouteLocationData) {
function saveJobRouteLocationToDatabase(jobRouteLocationData) {
if(!jobRouteLocationData) {
// Invalid job route position data
return false;
}
if(!jobRouteLocationData.needsSaved) {
logToConsole(LOG_DEBUG, `[VRR.Job]: Job route location ${jobRouteLocationData.name} (${jobRouteLocationData.databaseId}) doesn't need saved. Skipping ...`);
if(jobRouteLocationData.needsSaved == false) {
logToConsole(LOG_DEBUG, `[VRR.Job]: Job route location ${jobRouteLocationData.name} (DB ID ${jobRouteLocationData.databaseId}) doesn't need saved. Skipping ...`);
return false;
}
@@ -1951,7 +2031,7 @@ function saveJobRouteLocationsToDatabase(jobRouteLocationData) {
["job_route_loc_z", jobRouteLocationData.position.z],
["job_route_loc_pay", jobRouteLocationData.pay],
["job_route_loc_delay", jobRouteLocationData.stopDelay],
["job_route_loc_prev", jobRouteLocationData.previousStop]
];
let dbQuery = null;
@@ -2177,7 +2257,7 @@ function saveAllJobsToDatabase() {
for(let p in getServerData().jobs[i].routes) {
saveJobRouteToDatabase(getServerData().jobs[i].routes[p]);
for(let q in getServerData().jobs[i].routes[p].routes) {
for(let q in getServerData().jobs[i].routes[p].locations) {
saveJobRouteLocationToDatabase(getServerData().jobs[i].routes[p].locations[q]);
}
}
@@ -2325,12 +2405,32 @@ function isPlayerOnJobBlackList(client, jobId) {
// ===========================================================================
function playerArrivedAtJobRouteStop(client) {
function playerArrivedAtJobRouteLocation(client) {
let jobId = getPlayerJob(client);
if(!isPlayerOnJobRoute(client)) {
return false;
}
playerArrivedAtJobRouteLocationStop(client);
if(isLastLocationOnJobRoute(jobId, getPlayerJobRoute(client), getPlayerJobRouteLocation(client))) {
finishSuccessfulJobRoute(client);
return false;
}
showGameMessage(client, removeColoursInMessage(getJobRouteData(jobId, getPlayerJobRoute(client)).locationArriveMessage), getJobData(jobId).colour, 3500);
if(getJobRouteLocationData(jobId, getPlayerJobRoute(client),getPlayerJobRouteLocation(client)).stopDelay > 0) {
freezePlayerJobVehicleForRouteLocation(client);
getPlayerData(client).jobRouteLocation = getNextLocationOnJobRoute(jobId, getPlayerJobRoute(client), getPlayerJobRouteLocation(client));
setTimeout(function() {
showCurrentJobLocation(client);
showGameMessage(client, removeColoursInMessage(getJobRouteData(jobId, getPlayerJobRoute(client)).locationNextMessage), getJobData(jobId).colour, 3500);
unFreezePlayerJobVehicleForRouteLocation(client);
}, getJobRouteLocationData(jobId, getPlayerJobRoute(client),getPlayerJobRouteLocation(client)).stopDelay);
} else {
getPlayerData(client).jobRouteLocation = getNextLocationOnJobRoute(jobId, getPlayerJobRoute(client), getPlayerJobRouteLocation(client));
showCurrentJobLocation(client);
showGameMessage(client, removeColoursInMessage(getJobRouteData(jobId, getPlayerJobRoute(client)).locationNextMessage), getJobData(jobId).colour, 3500);
}
}
// ===========================================================================
@@ -2458,7 +2558,7 @@ function createJobRouteLocationCommand(command, params, client) {
let routeId = getPlayerData(client).jobRoute;
let jobRouteData = getServerData().jobs[jobId].routes[routeId];
let routeLocationName = getParam(params, " ", 1);
let routeLocationName = params;
createJobRouteLocation(routeLocationName, getPlayerPosition(client), jobRouteData);
messageAdmins(`${getPlayerName(client)}{MAINCOLOUR} created location {ALTCOLOUR}${routeLocationName}{MAINCOLOUR} for route {ALTCOLOUR}${jobRouteData.name}{MAINCOLOUR} for job {jobYellow}${getJobData(jobId).name}`);
@@ -2477,26 +2577,30 @@ function createJobRoute(routeName, closestJobLocation) {
tempJobRouteData.vehicleColour1 = 1;
tempJobRouteData.vehicleColour2 = 1;
tempJobRouteData.pay = 500;
tempJobRouteData.startMessage = `You are now on route {ALTCOLOUR}${routeName}{MAINCOLOUR} for the {jobYellow}${getJobData(closestJobLocation.jobIndex).name} job!`;
tempJobRouteData.finishMessage = `You have finished route {ALTCOLOUR}${routeName}{MAINCOLOUR} for the {jobYellow}${getJobData(closestJobLocation.jobIndex).name} job, and will receive $${tempJobRouteData.pay} next payday!`;
tempJobRouteData.locationArriveMessage = `You arrived at a point in job route {ALTCOLOUR}${routeName}{MAINCOLOUR}.`;
tempJobRouteData.locationNextMessage = `Drive to the next point on the route (looking for the blinking dot on the map).`;
tempJobRouteData.jobIndex = closestJobLocation.jobIndex;
tempJobRouteData.startMessage = `You are now on route {ALTCOLOUR}{JOBROUTENAME}{MAINCOLOUR} for the {jobYellow}{JOBNAME}{MAINCOLOUR} job!`;
tempJobRouteData.finishMessage = `You have finished the {ALTCOLOUR}{JOBROUTENAME}{MAINCOLOUR} route and {ALTCOLOUR}{JOBROUTEPAY}{MAINCOLOUR} has been added to your next paycheck!`;
tempJobRouteData.locationArriveMessage = `You arrived at a stop.`;
tempJobRouteData.locationNextMessage = `Drive to the next stop.`;
getJobData(closestJobLocation.jobIndex).routes.push(tempJobRouteData);
saveJobRouteToDatabase(tempJobRouteData);
setAllJobDataIndexes();
}
// ===========================================================================
function createJobRouteLocation(routeLocationName, position, jobRouteData) {
let tempJobRouteData = new JobRouteData(false);
let tempJobRouteLocationData = new JobRouteLocationData(false);
tempJobRouteLocationData.name = routeLocationName;
tempJobRouteLocationData.jobRoute = jobRouteData.databaseId;
tempJobRouteLocationData.routeId = jobRouteData.databaseId;
tempJobRouteLocationData.enabled = true;
tempJobRouteLocationData.needsSaved = true;
tempJobRouteLocationData.position = position;
tempJobRouteLocationData.routeIndex = jobRouteData.index;
getJobData(jobRouteData.jobIndex).routes[jobRouteData.index].push(tempJobRouteLocationData);
getJobData(jobRouteData.jobIndex).routes[jobRouteData.index].locations.push(tempJobRouteLocationData);
saveJobRouteLocationToDatabase(tempJobRouteLocationData);
setAllJobDataIndexes();
}
@@ -2505,7 +2609,7 @@ function createJobRouteLocation(routeLocationName, position, jobRouteData) {
function deleteJobRouteLocationCommand(command, params, client) {
let closestJobRouteLocation = getClosestJobRouteLocation(getPlayerPosition(client));
messageAdmins(`{ALTCOLOUR}${getPlayerName(client)} {MAINCOLOUR}deleted route location {ALTCOLOUR}${closestJobRouteLocation.index} (DB ID ${closestJobRouteLocation.databaseId}) {MAINCOLOUR}for the {ALTCOLOUR}${closestJobRouteLocation.name}{jobYellow} route of the ${getJobData(closestJobLocation.jobIndex).name} {MAINCOLOUR}job`);
messageAdmins(`{ALTCOLOUR}${getPlayerName(client)}{MAINCOLOUR} deleted route location {ALTCOLOUR}${closestJobRouteLocation.index} (DB ID ${closestJobRouteLocation.databaseId}){MAINCOLOUR} for the {ALTCOLOUR}${closestJobRouteLocation.name}{jobYellow} route of the {jobYellow}${getJobData(closestJobLocation.jobIndex).name}{MAINCOLOUR} job`);
if(closestJobRouteLocation.databaseId > 0) {
quickDatabaseQuery(`DELETE FROM job_route_loc WHERE job_route_loc_id = ${closestJobRouteLocation.databaseId}`);
@@ -2516,6 +2620,7 @@ function deleteJobRouteLocationCommand(command, params, client) {
getJobData(getJobIdFromDatabaseId(tempJob)).routes[tempJobRoute].locations.splice(tempIndex, 1);
setAllJobDataIndexes();
collectAllGarbage();
}
// ===========================================================================
@@ -2524,6 +2629,10 @@ function deleteJobRouteCommand(command, params, client) {
let jobId = getPlayerJob(client);
let jobRoute = getPlayerData(client).jobRoute;
if(!areParamsEmpty(client)) {
jobRoute = getJobRouteFromParams(params);
}
let jobRouteData = getServerData().jobs[jobId].routes[jobRoute];
let clients = getClients();
@@ -2538,10 +2647,12 @@ function deleteJobRouteCommand(command, params, client) {
}
}
messageAdmins(`{ALTCOLOUR}${getPlayerName(client)} {MAINCOLOUR}deleted route {ALTCOLOUR}${jobRouteData.name} (DB ID ${jobRouteData.databaseId}) {MAINCOLOUR}for the ${getJobData(jobId).name} {MAINCOLOUR}job`);
messageAdmins(`{ALTCOLOUR}${getPlayerName(client)}{MAINCOLOUR} deleted route {ALTCOLOUR}${jobRouteData.name} (DB ID ${jobRouteData.databaseId}) {MAINCOLOUR}for the {jobYellow}${getJobData(jobId).name}{MAINCOLOUR} job`);
quickDatabaseQuery(`DELETE FROM job_route_loc WHERE job_route_loc_route = ${jobRouteData.databaseId}`);
quickDatabaseQuery(`DELETE FROM job_route WHERE job_route_id = ${jobRouteData.databaseId}`);
if(jobRouteData.databaseId > 0) {
quickDatabaseQuery(`DELETE FROM job_route WHERE job_route_id = ${jobRouteData.databaseId}`);
quickDatabaseQuery(`DELETE FROM job_route_loc WHERE job_route_loc_route = ${jobRouteData.databaseId}`);
}
clearArray(getServerData().jobs[jobId].routes[jobRoute].locations);
getServerData().jobs[jobId].routes.splice(jobRoute, 1);
@@ -2552,44 +2663,6 @@ function deleteJobRouteCommand(command, params, client) {
// ===========================================================================
function setAllJobIndexes() {
for(let i in getServerData().jobs) {
getServerData().jobs[i].index = i;
for(let j in getServerData().jobs[i].locations) {
getServerData().jobs[i].locations[j].index = j;
getServerData().jobs[i].locations[j].jobIndex = i;
}
for(let k in getServerData().jobs[i].uniforms) {
getServerData().jobs[i].uniforms[k].index = k;
getServerData().jobs[i].uniforms[k].jobIndex = i;
}
for(let m in getServerData().jobs[i].equipment) {
getServerData().jobs[i].equipment[m].index = m;
getServerData().jobs[i].equipment[m].jobIndex = i;
for(let n in getServerData().jobs[i].equipment[m].items) {
getServerData().jobs[i].equipment[m].items[n].index = n;
getServerData().jobs[i].equipment[m].items[n].equipmentIndex = m;
}
}
for(let p in getServerData().jobs[i].routes) {
getServerData().jobs[i].routes[j].index = p;
getServerData().jobs[i].routes[j].jobIndex = i;
for(let q in getServerData().jobs[i].routes[p].locations) {
getServerData().jobs[i].routes[p].items[q].index = n;
getServerData().jobs[i].routes[p].items[q].routeIndex = p;
}
}
}
}
// ===========================================================================
function getJobFromParams(params) {
if(isNaN(params)) {
for(let i in getServerData().jobs) {
@@ -2664,9 +2737,13 @@ function getPlayerJobVehicle(client) {
// ===========================================================================
function getRandomJobRoute(closestJobLocation) {
let randomRoute = getRandom(0, closestJobLocation.routeCache.length-1);
return getJobData(closestJobLocation.jobIndex).routes[randomRoute].index;
function getRandomJobRouteForLocation(closestJobLocation) {
if(closestJobLocation.routeCache.length > 0) {
let randomRoute = getRandom(0, closestJobLocation.routeCache.length-1);
let routeId = closestJobLocation.routeCache[randomRoute];
return getJobRouteData(closestJobLocation.jobIndex, routeId).index;
}
return -1;
}
// ===========================================================================
@@ -2682,6 +2759,17 @@ function getJobRouteData(jobId, routeId) {
// ===========================================================================
/**
* @param {number} jobIndex - The data index of the job
* @param {number} routeIndex - The data index of the job route
* @return {JobRouteLocationData} The jobroutes's data (class instance)
*/
function getJobRouteLocationData(jobId, routeId, routeLocationId) {
return getServerData().jobs[jobId].routes[routeId].locations[routeLocationId];
}
// ===========================================================================
function getClosestJobLocationForJob(position, jobId) {
let closestJobLocation = false;
for(let i in getServerData().jobs[jobId].locations) {
@@ -2690,4 +2778,101 @@ function getClosestJobLocationForJob(position, jobId) {
}
}
return closestJobLocation;
}
}
// ===========================================================================
function getPlayerJobRoute(client) {
return getPlayerData(client).jobRoute;
}
// ===========================================================================
function getPlayerJobRouteLocation(client) {
return getPlayerData(client).jobRouteLocation;
}
// ===========================================================================
function showCurrentJobLocation(client) {
let jobId = getPlayerJob(client);
sendJobRouteLocationToPlayer(client, getJobRouteLocationData(jobId, getPlayerJobRoute(client), getPlayerJobRouteLocation(client)).position, getJobData(jobId).colour);
}
// ===========================================================================
function finishSuccessfulJobRoute(client) {
let jobId = getPlayerJob(client);
let jobRouteData = getJobRouteData(jobId, getPlayerJobRoute(client));
let payout = toInteger(applyServerInflationMultiplier(jobRouteData.pay));
getPlayerData(client).payDayAmount = getPlayerData(client).payDayAmount + payout;
messagePlayerSuccess(client, replaceJobRouteStringsInMessage(jobRouteData.finishMessage, jobId, jobRouteData.index));
stopReturnToJobVehicleCountdown(client);
sendPlayerStopJobRoute(client);
respawnVehicle(getPlayerData(client).jobRouteVehicle);
getPlayerData(client).jobRouteVehicle = false;
getPlayerData(client).jobRoute = -1;
getPlayerData(client).jobRouteLocation = -1;
}
// ===========================================================================
function getNextLocationOnJobRoute(jobId, routeId, currentLocationId) {
if(!isLastLocationOnJobRoute(jobId, routeId, currentLocationId)) {
return currentLocationId+1;
} else {
return getJobRouteData(jobId, routeId).locations.length-1;
}
}
// ===========================================================================
function isLastLocationOnJobRoute(jobId, routeId, currentLocationId) {
if(currentLocationId == getJobRouteData(jobId, routeId).locations.length-1) {
return true;
}
return false;
}
// ===========================================================================
function getJobRouteFromParams(params, jobId) {
if(isNaN(params)) {
for(let i in getServerData().jobs[jobId].routes) {
if(toLowerCase(getServerData().jobs[jobId].routes[i].name).indexOf(toLowerCase(params)) != -1) {
return i;
}
}
} else {
if(typeof getServerData().jobs[jobId].routes[params] != "undefined") {
return toInteger(params);
}
}
return false;
}
// ===========================================================================
function replaceJobRouteStringsInMessage(messageText, jobId, jobRouteId) {
let tempJobRouteData = getJobRouteData(jobId, jobRouteId);
let tempFind = `{JOBROUTENAME}`;
let tempRegex = new RegExp(tempFind, 'g');
messageText = messageText.replace(tempRegex, tempJobRouteData.name);
tempFind = `{JOBROUTEPAY}`;
tempRegex = new RegExp(tempFind, 'g');
messageText = messageText.replace(tempRegex, `$${tempJobRouteData.pay}`);
tempFind = `{JOBNAME}`;
tempRegex = new RegExp(tempFind, 'g');
messageText = messageText.replace(tempRegex, getJobData(tempJobRouteData.jobIndex).name);
return messageText;
}
// ===========================================================================