Files
GTA4RP/scripts/server/job.js
2020-09-05 02:30:39 -05:00

537 lines
18 KiB
JavaScript

// ===========================================================================
// Asshat Gaming RP
// http://asshatgaming.com
// © 2020 Asshat Gaming
// ---------------------------------------------------------------------------
// FILE: job.js
// DESC: Provides job functions and usage
// TYPE: Server (JavaScript)
// ===========================================================================
function initJobScript() {
console.log("[Asshat.Job]: Initializing job script ...");
addJobCommandHandlers();
createAllJobPickups();
createAllJobBlips();
//addEvent("onJobPickupCollected", null, 2);
console.log("[Asshat.Job]: Job script initialized successfully!");
return true;
}
// ---------------------------------------------------------------------------
function addJobCommandHandlers() {
console.log("[Asshat.Job]: Adding job command handlers ...");
let jobCommands = serverCommands.job;
for(let i in jobCommands) {
addCommandHandler(jobCommands[i].command, jobCommands[i].handlerFunction);
}
console.log("[Asshat.Job]: Job command handlers added successfully!");
return true;
}
// ---------------------------------------------------------------------------
function createAllJobBlips() {
for(let i in serverData.jobs[server.game]) {
serverData.jobs[server.game][i].blip = createBlip(0, serverData.jobs[server.game][i].position, 2, serverConfig.colour.byName.burntYellow);
//serverData.jobs[server.game][i].position
}
}
// ---------------------------------------------------------------------------
function createAllJobPickups() {
for(let i in serverData.jobs[server.game]) {
serverData.jobs[server.game][i].pickup = createPickup(serverData.jobs[server.game][i].pickupModel, serverData.jobs[server.game][i].position, PICKUP_COLLECTABLE1);
serverData.jobs[server.game][i].pickup.setData("ag.ownerType", AG_PICKUP_JOB, false);
serverData.jobs[server.game][i].pickup.setData("ag.ownerId", i, false);
}
}
// ---------------------------------------------------------------------------
function showJobInformationToPlayer(client, jobType) {
if(!canClientUseJobs(client)){
return false;
}
if(jobType == getClientCurrentSubAccount(client).job) {
messageClientInfo("Welcome back to your job. Use /startwork to begin.");
return false;
}
switch(jobType) {
case AG_JOB_POLICE:
if(!canClientUsePoliceJob(client)) {
return false;
}
messageClientInfo(client, "== Job Help =================================");
messageClientInfo(client, "- Police Officers are enforcers of the law.");
messageClientInfo(client, "- Use /startwork at a police station to work as a Police Officer.");
messageClientInfo(client, "- Use /laws to see a list of laws.");
messageClientInfo(client, "- Commands are: /cuff, /drag, /detain, /arrest, /search /tazer /radio");
messageClientInfo(client, "- When finished, use /stopwork to stop working.");
break;
case AG_JOB_MEDICAL:
messageClientInfo(client, "== Job Help =================================");
messageClientInfo(client, "- Paramedics help people by healing them.");
messageClientInfo(client, "- Use /startwork at the hospital to work as a Paramedic.");
messageClientInfo(client, "- People can enter your ambulance to get healed.");
messageClientInfo(client, "- The pay depends on the player's health before healing them.");
messageClientInfo(client, "- When finished, use /stopwork to stop working.");
break;
case AG_JOB_FIRE:
if(!canClientUseFireJob(client)){
return false;
}
messageClientInfo(client, "== Job Help =================================");
messageClientInfo(client, "- Firefighters put out vehicle and building fires.");
messageClientInfo(client, "- Use /startwork at the fire station to work as a Firefighter.");
messageClientInfo(client, "- Get in a firetruck and you will be told where to go.");
messageClientInfo(client, "- Use the firetruck hose to put out fires");
messageClientInfo(client, "- When finished, use /stopwork to stop working.");
break;
case AG_JOB_BUS:
messageClientInfo(client, "== Job Help =================================");
messageClientInfo(client, "- Bus Drivers transport people around the city on a route");
messageClientInfo(client, "- Use /startwork at the bus depot to work as a Bus Driver.");
messageClientInfo(client, "- Passengers can get on/off at any stop on your route");
messageClientInfo(client, "- Stay on your assigned route. You will be paid when finished.");
messageClientInfo(client, "- When finished, use /stopwork to stop working.");
break;
case AG_JOB_TAXI:
messageClientInfo(client, "== Job Help =================================");
messageClientInfo(client, "- Taxi Drivers transport people around the city");
messageClientInfo(client, "- Use /startwork at the taxi depot to work as a Taxi Driver.");
messageClientInfo(client, "- Use /fare to set a fare. Fares start when a player gets in.");
messageClientInfo(client, "- The meter will run until the player exits the vehicle.");
messageClientInfo(client, "- You will automatically receive the fare money");
messageClientInfo(client, "- When finished, use /stopwork to stop working.");
break;
case AG_JOB_GARBAGE:
messageClientInfo(client, "== Job Help =================================");
messageClientInfo(client, "- Garbage Collectors pick up the trash around the city.");
messageClientInfo(client, "- Use /startwork at the garbage depot to work as a Garbage Collector.");
messageClientInfo(client, "- Drive up to a garbage can or dumpster, and right click to grab a bag.");
messageClientInfo(client, "- Walk up to the back of your truck and right click again to throw the bag in.");
messageClientInfo(client, "- Your truck can hold 25 trashbags. Each bag is worth $25");
messageClientInfo(client, "- Drive to the garbage depot again to deliver trash");
messageClientInfo(client, "- When finished, use /stopwork to stop working.");
break;
case AG_JOB_WEAPON:
break;
case AG_JOB_DRUG:
break;
default:
break;
}
}
// ---------------------------------------------------------------------------
function takeJobCommand(command, params, client) {
if(!canClientUseJobs(client)){
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 closestJob = getClosestJobPoint(client.player.position);
if(closestJob.position.distance(client.player.position) > 5) {
messageClientError(client, "There are no job points close enough!");
return false;
}
if(getClientCurrentSubAccount(client).job == -1) {
getClientCurrentSubAccount(client).job = getJobIndex(closestJob);
}
messageClientSuccess(client, "You now have the " + String(closestJob.name) + " job");
return true;
}
// ---------------------------------------------------------------------------
function startWorkingCommand(command, params, client) {
if(!canClientUseJobs(client)){
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 closestJob = getClosestJobPoint(client.player.position);
if(closestJob.position.distance(client.player.position) > 5) {
messageClientError(client, "There are no job points close enough!");
return false;
}
if(getClientCurrentSubAccount(client).job != getJobIndex(closestJob)) {
messageClientError(client, "This is not your job!");
messageClientInfo(client, "Use /quitjob if you want to quit your current job and take this one.");
return false;
}
startWorking(client);
messageClientSuccess(client, "You are now working as a " + String(closestJob.name));
return true;
}
// ---------------------------------------------------------------------------
function stopWorkingCommand(command, params, client) {
if(!canClientUseJobs(client)){
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 closestJob = getClosestJobPoint(client.player.position);
if(closestJob.position.distance(client.player.position) > 5) {
messageClientError(client, "There are no job points close enough!");
return false;
}
//if(getClientCurrentSubAccount(client).job != closestJob.jobType) {
// messageClientError(client, "This is not your job!");
// messageClientInfo(client, "Use /quitjob if you want to quit your current job and take this one.");
// break;
//}
stopWorking(client);
messageClientSuccess(client, "You have stopped working!");
return true;
}
// ---------------------------------------------------------------------------
function startWorking(client) {
if(!canClientUseJobs(client)){
return false;
}
getClientCurrentSubAccount(client).isWorking = true;
let jobId = getClientCurrentSubAccount(client).job;
switch(serverData.jobs[server.game][jobId].jobType) {
case AG_JOB_POLICE:
messageClientInfo(client, "Use /uniform and /equip to get your equipment.");
break;
case AG_JOB_MEDICAL:
messageClientInfo(client, "Use /uniform and /equip to get your equipment.");
break;
case AG_JOB_FIRE:
messageClientInfo(client, "Use /uniform and /equip to get your equipment.");
break;
case AG_JOB_BUS:
messageClientInfo(client, "Get in a bus to get started.");
break;
case AG_JOB_TAXI:
messageClientInfo(client, "Get in a taxi to get started.");
break;
case AG_JOB_GARBAGE:
messageClientInfo(client, "Get in a trash truck to get started.");
break;
case AG_JOB_WEAPON:
break;
case AG_JOB_DRUG:
break;
default:
break;
}
}
// ---------------------------------------------------------------------------
function stopWorking(client) {
if(!canClientUseJobs(client)){
return false;
}
getClientCurrentSubAccount(client).isWorking = false;
client.player.skin = getClientCurrentSubAccount(client).skin;
let jobVehicle = getClientCurrentSubAccount(client).lastJobVehicle;
if(jobVehicle) {
let vehicleData = getVehicleData(jobVehicle);
jobVehicle.fix();
jobVehicle.position = vehicleData.spawnPosition;
jobVehicle.heading = vehicleData.spawnHeading;
}
triggerNetworkEvent("ag.clearWeapons", client);
let jobId = getClientCurrentSubAccount(client).job;
switch(serverData.jobs[server.game][jobId].jobType) {
case AG_JOB_POLICE:
messageClientInfo(client, "Your uniform, equipment, and police car have been returned to the police station");
break;
case AG_JOB_MEDICAL:
messageClientInfo(client, "Your uniform and ambulance have been returned to the hospital");
break;
case AG_JOB_FIRE:
messageClientInfo(client, "Your uniform and fire truck have been returned to the fire station");
break;
case AG_JOB_BUS:
messageClientInfo(client, "Your bus has been returned to the bus depot");
break;
case AG_JOB_TAXI:
messageClientInfo(client, "Your taxi has been returned to the taxi depot");
break;
case AG_JOB_GARBAGE:
messageClientInfo(client, "Your trash truck has been returned to the city landfill");
break;
case AG_JOB_WEAPON:
break;
case AG_JOB_DRUG:
break;
default:
break;
}
}
// ---------------------------------------------------------------------------
function jobUniformCommand(command, params, client) {
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 uniformId = Number(params) || 0;
let jobId = getClientCurrentSubAccount(client).job;
getClientCurrentSubAccount(client).jobUniform = uniformId;
switch(serverData.jobs[server.game][jobId].jobType) {
case AG_JOB_POLICE:
client.player.modelIndex = serverData.policeJobSkins[server.game][uniformId];
triggerNetworkEvent("ag.giveWeapon", client, 2, 200, false);
triggerNetworkEvent("ag.giveWeapon", client, 1, 1, false);
break;
case AG_JOB_MEDICAL:
client.player.modelIndex = serverData.medicalJobSkins[server.game][uniformId];
messageClientInfo(client, "Your uniform and ambulance have been returned to the hospital");
break;
case AG_JOB_FIRE:
client.player.modelIndex = serverData.fireJobSkins[server.game][uniformId];
messageClientInfo(client, "Your uniform and fire truck have been returned to the fire station");
break;
case AG_JOB_BUS:
client.player.modelIndex = serverData.busJobSkins[server.game][uniformId];
messageClientInfo(client, "Your bus has been returned to the bus depot");
break;
case AG_JOB_TAXI:
client.player.modelIndex = serverData.taxiJobSkins[server.game][uniformId];
messageClientInfo(client, "Your taxi has been returned to the taxi depot");
break;
case AG_JOB_GARBAGE:
client.player.modelIndex = serverData.garbageJobSkins[server.game][uniformId];
messageClientInfo(client, "Your trash truck has been returned to the city landfill");
break;
case AG_JOB_WEAPON:
break;
case AG_JOB_DRUG:
break;
default:
break;
}
}
// ---------------------------------------------------------------------------
function quitJobCommand(command, params, client) {
if(!canClientUseJobs(client)){
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;
}
stopWorking(client);
let tempJob = getClientCurrentSubAccount(client).job;
getClientCurrentSubAccount(client).job = AG_JOB_NONE;
messageClientSuccess(client, "You just quit the " + String(tempJob.name) + " job");
return true;
}
// ---------------------------------------------------------------------------
function jobRadioCommand(command, params, client) {
if(!canClientUseJobs(client)){
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;
}
return true;
}
// ---------------------------------------------------------------------------
function jobDepartmentRadioCommand(command, params, client) {
if(!canClientUseJobs(client)){
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;
}
return true;
}