Job rank class and some rank utils

This commit is contained in:
Vortrex
2022-07-24 05:34:21 -05:00
parent 07e65591d0
commit da6d12c8d7

View File

@@ -48,6 +48,9 @@ const AGRP_JOB_ROUTE_LOCATION_TYPE_GARBAGE_BIN = 5; // Garbage in bin (u
* @property {Array.<JobUniformData>} uniforms * @property {Array.<JobUniformData>} uniforms
* @property {Array.<JobLocationData>} locations * @property {Array.<JobLocationData>} locations
* @property {Array.<JobRouteData>} routes * @property {Array.<JobRouteData>} routes
* @property {Array.<JobWhiteListData>} whiteList
* @property {Array.<JobBlackListData>} blackList
* @property {Array.<JobRankData>} ranks
*/ */
class JobData { class JobData {
constructor(dbAssoc = false) { constructor(dbAssoc = false) {
@@ -73,6 +76,7 @@ class JobData {
this.whiteList = []; this.whiteList = [];
this.blackList = []; this.blackList = [];
this.routes = []; this.routes = [];
this.ranks = [];
if (dbAssoc) { if (dbAssoc) {
this.databaseId = dbAssoc["job_id"]; this.databaseId = dbAssoc["job_id"];
@@ -95,6 +99,7 @@ class JobData {
this.whiteList = []; this.whiteList = [];
this.blackList = []; this.blackList = [];
this.routes = []; this.routes = [];
this.ranks = [];
} }
} }
}; };
@@ -354,7 +359,7 @@ class JobLocationData {
this.position = toVector3(dbAssoc["job_loc_pos_x"], dbAssoc["job_loc_pos_y"], dbAssoc["job_loc_pos_z"]); this.position = toVector3(dbAssoc["job_loc_pos_x"], dbAssoc["job_loc_pos_y"], dbAssoc["job_loc_pos_z"]);
this.blip = false; this.blip = false;
this.pickup = false; this.pickup = false;
this.enabled = dbAssoc["job_loc_enabled"]; this.enabled = intToBool(dbAssoc["job_loc_enabled"]);
this.interior = dbAssoc["job_loc_int"]; this.interior = dbAssoc["job_loc_int"];
this.dimension = dbAssoc["job_loc_vw"]; this.dimension = dbAssoc["job_loc_vw"];
this.whoCreated = dbAssoc["job_loc_who_added"]; this.whoCreated = dbAssoc["job_loc_who_added"];
@@ -365,6 +370,39 @@ class JobLocationData {
// =========================================================================== // ===========================================================================
/**
* @class JobRankData Representing a job rank's data. Loaded and saved in the database
*/
class JobRankData {
constructor(dbAssoc = false) {
this.databaseId = 0;
this.jobId = 0;
this.index = -1;
this.jobIndex = -1;
this.name = "";
this.level = 0;
this.enabled = false;
this.pay = 0;
this.whoCreated = 0;
this.whenCreated = 0;
this.flags = 0;
if (dbAssoc) {
this.databaseId = dbAssoc["job_rank_id"];
this.jobId = dbAssoc["job_rank_job"];
this.name = toString(dbAssoc("job_rank_name"));
this.level = toInteger(dbAssoc["job_rank_level"]);
this.enabled = intToBool(dbAssoc["job_rank_enabled"]);
this.pay = toInteger(dbAssoc["job_rank_pay"]);
this.whoCreated = toInteger(dbAssoc["job_rank_who_added"]);
this.whenCreated = toInteger(dbAssoc["job_rank_when_added"]);
this.flags = toInteger(dbAssoc["job_rank_flags"]);
}
}
};
// ===========================================================================
class JobWhiteListData { class JobWhiteListData {
constructor(dbAssoc = false) { constructor(dbAssoc = false) {
this.databaseId = 0; this.databaseId = 0;
@@ -500,6 +538,35 @@ function loadAllJobLocationsFromDatabase() {
// =========================================================================== // ===========================================================================
function loadJobRanksFromDatabase(jobDatabaseId) {
logToConsole(LOG_DEBUG, `[VRR.Job]: Loading ranks for job ${jobDatabaseId} from database ...`);
let tempJobRanks = [];
let dbConnection = connectToDatabase();
let dbQuery = null;
let dbAssoc;
if (dbConnection) {
dbQuery = queryDatabase(dbConnection, `SELECT * FROM job_rank WHERE job_rank_deleted = 0 AND job_rank_enabled = 1 AND job_rank_job = ${jobDatabaseId}`);
if (dbQuery) {
if (dbQuery.numRows > 0) {
while (dbAssoc = fetchQueryAssoc(dbQuery)) {
let tempJobRankData = new JobRankData(dbAssoc);
tempJobRanks.push(tempJobRankData);
logToConsole(LOG_VERBOSE, `[VRR.Job]: Job rank '${tempJobRankData.name}' loaded from database successfully!`);
}
}
freeDatabaseQuery(dbQuery);
}
disconnectFromDatabase(dbConnection);
}
logToConsole(LOG_DEBUG, `[VRR.Job]: ${tempJobRanks.length} ranks for job ${jobDatabaseId} loaded from database successfully!`);
return tempJobRanks;
}
// ===========================================================================
function loadJobRoutesFromDatabase(jobDatabaseId) { function loadJobRoutesFromDatabase(jobDatabaseId) {
logToConsole(LOG_DEBUG, `[VRR.Job]: Loading job routes for job ${jobDatabaseId} from database ...`); logToConsole(LOG_DEBUG, `[VRR.Job]: Loading job routes for job ${jobDatabaseId} from database ...`);
@@ -2606,6 +2673,54 @@ function saveJobToDatabase(jobData) {
// =========================================================================== // ===========================================================================
function saveJobRankToDatabase(jobRankData) {
if (!jobRankData) {
// Invalid job route data
return false;
}
if (jobRankData.needsSaved == false) {
logToConsole(LOG_DEBUG, `[VRR.Job]: Job route ${jobRankData.name} (DB ID ${jobRankData.databaseId}) doesn't need saved. Skipping ...`);
return false;
}
logToConsole(LOG_DEBUG, `[VRR.Job]: Saving job route ${jobRankData.name} to database ...`);
let dbConnection = connectToDatabase();
if (dbConnection) {
let safeName = escapeDatabaseString(dbConnection, jobRankData.name);
let data = [
["job_route_job", jobRankData.jobId],
["job_rank_enabled", boolToInt(jobRankData.enabled)],
["job_rank_name", safeName],
["job_rank_flags", jobRankData.flags],
["job_rank_pay", jobRankData.pay],
["job_route_who_added", jobRankData.whoCreated],
["job_route_when_added", jobRankData.whenCreated],
];
let dbQuery = null;
if (jobRankData.databaseId == 0) {
let queryString = createDatabaseInsertQuery("job_rank", data);
dbQuery = queryDatabase(dbConnection, queryString);
jobRankData.databaseId = getDatabaseInsertId(dbConnection);
} else {
let queryString = createDatabaseUpdateQuery("job_rank", data, `job_rank_id=${jobRankData.databaseId}`);
dbQuery = queryDatabase(dbConnection, queryString);
}
jobRankData.needsSaved = false;
freeDatabaseQuery(dbQuery);
disconnectFromDatabase(dbConnection);
return true;
}
logToConsole(LOG_DEBUG, `[VRR.Job]: Saved job rank ${jobRankData.name} to database!`);
return false;
}
// ===========================================================================
function saveJobRouteToDatabase(jobRouteData) { function saveJobRouteToDatabase(jobRouteData) {
if (!jobRouteData) { if (!jobRouteData) {
// Invalid job route data // Invalid job route data
@@ -2929,6 +3044,10 @@ function saveAllJobsToDatabase() {
saveJobRouteLocationToDatabase(getServerData().jobs[i].routes[p].locations[q]); saveJobRouteLocationToDatabase(getServerData().jobs[i].routes[p].locations[q]);
} }
} }
for (let r in getServerData().jobs[i].ranks) {
saveJobRankToDatabase(getServerData().jobs[i].ranks[r]);
}
} }
} }
@@ -3577,57 +3696,68 @@ function getRandomJobRouteForLocation(closestJobLocation) {
/** /**
* @param {number} jobIndex - The data index of the job * @param {number} jobIndex - The data index of the job
* @param {number} uniformId - The data index of the job route * @param {number} uniformIndex - The data index of the job route
* @return {JobUniformData} The jobroutes's data (class instance) * @return {JobUniformData} The jobroutes's data (class instance)
*/ */
function getJobUniformData(jobId, uniformId) { function getJobUniformData(jobIndex, uniformIndex) {
return getServerData().jobs[jobId].uniform[uniformId]; return getServerData().jobs[jobIndex].uniform[uniformIndex];
} }
// =========================================================================== // ===========================================================================
/** /**
* @param {number} jobIndex - The data index of the job * @param {number} jobIndex - The data index of the job
* @param {number} equipmentId - The data index of the job equipment loadout * @param {number} equipmentIndex - The data index of the job equipment loadout
* @return {JobEquipmentData} The job equipment loadout's data (class instance) * @return {JobEquipmentData} The job equipment loadout's data (class instance)
*/ */
function getJobEquipmentData(jobId, equipmentId) { function getJobEquipmentData(jobIndex, equipmentIndex) {
return getServerData().jobs[jobId].equipment[equipmentId]; return getServerData().jobs[jobIndex].equipment[equipmentIndex];
} }
// =========================================================================== // ===========================================================================
/** /**
* @param {number} jobIndex - The data index of the job * @param {number} jobIndex - The data index of the job
* @param {number} equipmentId - The data index of the job equipment loadout * @param {number} equipmentIndex - The data index of the job equipment loadout
* @param {number} equipmentItemId - The data index of the job equipment item * @param {number} equipmentItemIndex - The data index of the job equipment item
* @return {JobEquipmentItemData} The job equipment loadout's data (class instance) * @return {JobEquipmentItemData} The job equipment loadout's data (class instance)
*/ */
function getJobEquipmentData(jobId, equipmentId, equipmentItemId) { function getJobEquipmentData(jobIndex, equipmentIndex, equipmentItemIndex) {
return getJobEquipmentData(jobId, equipmentId).items[equipmentItemId]; return getJobEquipmentData(jobIndex, equipmentIndex).items[equipmentItemIndex];
} }
// =========================================================================== // ===========================================================================
/** /**
* @param {number} jobIndex - The data index of the job * @param {number} jobIndex - The data index of the job
* @param {number} routeId - The data index of the job route * @param {number} rankIndex - The data index of the job rank
* @return {JobRouteData} The jobroutes's data (class instance) * @return {JobRouteData} The job rank's data (class instance)
*/ */
function getJobRouteData(jobId, routeId) { function getJobRankData(jobIndex, rankIndex) {
return getServerData().jobs[jobId].routes[routeId]; return getServerData().jobs[jobIndex].ranks[rankIndex];
} }
// =========================================================================== // ===========================================================================
/** /**
* @param {number} jobIndex - The data index of the job * @param {number} jobIndex - The data index of the job
* @param {number} routeId - The data index of the job route * @param {number} routeIndex - The data index of the job route
* @param {number} routeLocationId - The data index of the job route location * @return {JobRouteData} The job routes's data (class instance)
* @return {JobRouteLocationData} The jobroutes's data (class instance)
*/ */
function getJobRouteLocationData(jobId, routeId, routeLocationId) { function getJobRouteData(jobIndex, routeIndex) {
return getJobRouteData(jobId, routeId).locations[routeLocationId]; return getServerData().jobs[jobIndex].routes[routeIndex];
}
// ===========================================================================
/**
* @param {number} jobIndex - The data index of the job
* @param {number} routeIndex - The data index of the job route
* @param {number} routeLocationIndex - The data index of the job route location
* @return {JobRouteLocationData} The job route locations's data (class instance)
*/
function getJobRouteLocationData(jobIndex, routeIndex, routeLocationIndex) {
return getJobRouteData(jobIndex, routeIndex).locations[routeLocationIndex];
} }
// =========================================================================== // ===========================================================================