From 29e273bf6060dfec1ef90fa788ddc25082aad008 Mon Sep 17 00:00:00 2001 From: VortrexFTW Date: Sat, 5 Sep 2020 02:30:39 -0500 Subject: [PATCH] Add vehicles, util funcs. Fix jobs --- scripts/client/gui.js | 6 +- scripts/server/account.js | 86 ++++++++++++++++------------- scripts/server/class.js | 5 +- scripts/server/command.js | 1 + scripts/server/job.js | 7 +-- scripts/server/security.js | 2 + scripts/server/startup.js | 1 + scripts/server/utilities.js | 22 +++++++- scripts/server/vehicle.js | 106 +++++++++++++++++++++++++----------- 9 files changed, 155 insertions(+), 81 deletions(-) diff --git a/scripts/client/gui.js b/scripts/client/gui.js index 79e877de..01cf51ba 100644 --- a/scripts/client/gui.js +++ b/scripts/client/gui.js @@ -290,7 +290,7 @@ app.init = function() textFont: robotoFont, textAlign: 0.5, }, - }, checkLogin); + }, checkLogin); login.notRegisteredLabel = login.window.text(20, 240, 175, 20, "Don't have an account?", { main: { @@ -541,7 +541,7 @@ app.init = function() textFont: robotoFont, } }); - //register.passwordInput.masked = true; + register.passwordInput.masked = true; register.passwordInput.placeholder = "Password"; register.confirmPasswordInput = register.window.textInput(20, 130, 260, 25, '', { @@ -561,7 +561,7 @@ app.init = function() textFont: robotoFont, } }); - //register.confirmPasswordInput.masked = true; + register.confirmPasswordInput.masked = true; register.confirmPasswordInput.placeholder = "Confirm password"; register.emailInput = register.window.textInput(20, 160, 260, 25, '', { diff --git a/scripts/server/account.js b/scripts/server/account.js index 00afa910..368f5845 100644 --- a/scripts/server/account.js +++ b/scripts/server/account.js @@ -57,7 +57,7 @@ function loginCommand(command, params, client) { return false; } - if(isAccountPasswordCorrect(serverData.clients[client.index].accountData, hashAccountPassword(client.name, params))) { + if(isAccountPasswordCorrect(getClientData(client).accountData, hashAccountPassword(client.name, params))) { messageClientError(client, "Incorrect username or password!"); return false; } @@ -110,7 +110,7 @@ function registerCommand(command, params, client) { return false; } - serverData.clients[client.index].accountData = accountData; + getClientData(client).accountData = accountData; messageClientSuccess(client, "Your account has been created!"); messageClientAlert(client, "To play on the server, you will need to make a character."); } @@ -146,7 +146,7 @@ function changePasswordCommand(command, params, client) { let oldPassword = splitParams[0]; let newPassword = splitParams[1]; - if(isAccountPasswordCorrect(serverData.clients[client.index].accountData, hashAccountPassword(client.name, oldPassword))) { + if(isAccountPasswordCorrect(getClientData(client).accountData, hashAccountPassword(client.name, oldPassword))) { messageClientError(client, "The old password is invalid!"); return false; } @@ -157,7 +157,7 @@ function changePasswordCommand(command, params, client) { return false; } - serverData.clients[client.index].accountData.password = hashAccountPassword(serverData.clients[client.index].accountData.name, params); + getClientData(client).accountData.password = hashAccountPassword(getClientData(client).accountData.name, params); messageClientSuccess(client, "Your password has been changed!"); } @@ -183,31 +183,29 @@ function switchCharacterCommand(command, params, client) { return false; } - let subAccountId = serverData.clients[client.index].currentSubAccount; - serverData.clients[client.index].subAccounts[subAccountId].spawnPosition = client.player.position; - serverData.clients[client.index].subAccounts[subAccountId].spawnHeading = client.player.heading; + getClientCurrentSubAccount(client).spawnPosition = client.player.position; + getClientCurrentSubAccount(client).spawnHeading = client.player.heading; - let tempSubAccount = serverData.clients[client.index].subAccounts[subAccountId]; + let tempSubAccount = getClientCurrentSubAccount(client); saveSubAccountToDatabase(tempSubAccount); client.despawnPlayer(); triggerNetworkEvent("ag.connectCamera", client, serverConfig.connectCameraPosition[server.game], serverConfig.connectCameraLookAt[server.game]); - triggerNetworkEvent("ag.showCharacterSelect", client, tempSubAccount.firstName, tempSubAccount.lastName, tempSubAccount.placeOfOrigin, tempSubAccount.dateOfBirth, tempSubAccount.skin); } // --------------------------------------------------------------------------- function isClientLoggedIn(client) { - let loggedIn = serverData.clients[client.index].loggedIn; + let loggedIn = getClientData(client).loggedIn; return loggedIn; } // --------------------------------------------------------------------------- function isClientRegistered(client) { - if(serverData.clients[client.index].accountData != false) { - if(serverData.clients[client.index].accountData.databaseId != 0) { + if(getClientData(client).accountData != false) { + if(getClientData(client).accountData.databaseId != 0) { return true; } } @@ -396,14 +394,13 @@ function hashAccountPassword(name, password) { // --------------------------------------------------------------------------- function saltAccountInfo(name, password) { - // Will be added later - return name + "." + password; + return "asshat.gaming." + String(accountSaltHash) + "." + String(name) + "." + String(password); } // --------------------------------------------------------------------------- function loginSuccess(client) { - serverData.clients[client.index].loggedIn = true; + getClientData(client).loggedIn = true; triggerNetworkEvent("ag.loginSuccess", client); } @@ -501,7 +498,7 @@ addNetworkHandler("ag.checkLogin", function(client, password) { return false; } - if(!isAccountPasswordCorrect(serverData.clients[client.index].accountData, hashAccountPassword(client.name, password))) { + if(!isAccountPasswordCorrect(getClientData(client).accountData, hashAccountPassword(client.name, password))) { //messageClientError(client, "Invalid password!"); triggerNetworkEvent("ag.loginFailed", client, "Invalid password! " + String(loginAttemptsRemaining) + " tries remaining."); return false; @@ -509,12 +506,12 @@ addNetworkHandler("ag.checkLogin", function(client, password) { loginSuccess(client); - if(serverData.clients[client.index].subAccounts.length == 0) { + if(getClientData(client).subAccounts.length == 0) { triggerNetworkEvent("ag.showPrompt", client, "You have no characters. Would you like to make one?", "No characters"); client.setData("ag.prompt", AG_PROMPT_CREATEFIRSTCHAR, false); } else { - serverData.clients[client.index].currentSubAccount = 0; - let tempSubAccount = serverData.clients[client.index].subAccounts[0]; + getClientData(client).currentSubAccount = 0; + let tempSubAccount = getClientData(client).subAccounts[0]; triggerNetworkEvent("ag.showCharacterSelect", client, tempSubAccount.firstName, tempSubAccount.lastName, tempSubAccount.placeOfOrigin, tempSubAccount.dateOfBirth, tempSubAccount.skin); } }); @@ -575,11 +572,14 @@ addNetworkHandler("ag.checkRegistration", function(client, password, confirmPass return false; } - serverData.clients[client.index].accountData = accountData; + getClientData(client).accountData = accountData; + getClientData(client).loggedIn = true; + messageClientSuccess(client, "Your account has been created!"); messageClientAlert(client, "To play on the server, you will need to make a character."); triggerNetworkEvent("ag.registrationSuccess", client); triggerNetworkEvent("ag.showPrompt", client, "You have no characters. Would you like to make one?", "No Characters"); + client.setData("ag.prompt", AG_PROMPT_CREATEFIRSTCHAR, false); }); @@ -611,33 +611,33 @@ addNetworkHandler("ag.checkNewCharacter", function(client, firstName, lastName, return false; } - let subAccountData = createSubAccount(serverData.clients[client.index].accountData.databaseId, firstName, lastName, skinId, dateOfBirth, placeOfOrigin); + let subAccountData = createSubAccount(getClientData(client).accountData.databaseId, firstName, lastName, skinId, dateOfBirth, placeOfOrigin); if(!subAccountData) { triggerNetworkEvent("ag.newCharacterFailed", client, "Something went wrong. Your character could not be created!"); messageClientAlert(client, "Asshat Gaming staff have been notified of the problem and will fix it shortly."); return false; } - serverData.clients[client.index].accountData.subAccounts = loadSubAccountsFromAccount(serverData.clients[client.index].accountData.databaseId); + getClientData(client).subAccounts = loadSubAccountsFromAccount(getClientData(client).accountData.databaseId); triggerNetworkEvent("ag.newCharacterSuccess", client); - serverData.clients[client.index].currentSubAccount = 0; - let tempSubAccount = serverData.clients[client.index].subAccounts[0]; + getClientData(client).currentSubAccount = 0; + let tempSubAccount = getClientData(client).subAccounts[0]; triggerNetworkEvent("ag.showCharacterSelect", client, tempSubAccount.firstName, tempSubAccount.lastName, tempSubAccount.placeOfOrigin, tempSubAccount.dateOfBirth, tempSubAccount.skin); }); // --------------------------------------------------------------------------- addNetworkHandler("ag.previousCharacter", function(client) { - if(serverData.clients[client.index].subAccounts.length > 1) { - if(serverData.clients[client.index].currentSubAccount <= 0) { - serverData.clients[client.index].currentSubAccount = serverData.clients[client.index].subAccounts.length-1; + if(getClientData(client).subAccounts.length > 1) { + if(getClientData(client).currentSubAccount <= 0) { + getClientData(client).currentSubAccount = getClientData(client).subAccounts.length-1; } else { - serverData.clients[client.index].currentSubAccount--; + getClientData(client).currentSubAccount--; } - let subAccountId = serverData.clients[client.index].currentSubAccount; - let tempSubAccount = serverData.clients[client.index].subAccounts[subAccountId]; + let subAccountId = getClientData(client).currentSubAccount; + let tempSubAccount = getClientData(client).subAccounts[subAccountId]; triggerNetworkEvent("ag.switchCharacterSelect", client, tempSubAccount.firstName, tempSubAccount.lastName, tempSubAccount.placeOfOrigin, tempSubAccount.dateOfBirth, tempSubAccount.skin); } }); @@ -645,15 +645,15 @@ addNetworkHandler("ag.previousCharacter", function(client) { // --------------------------------------------------------------------------- addNetworkHandler("ag.nextCharacter", function(client) { - if(serverData.clients[client.index].subAccounts.length > 1) { - if(serverData.clients[client.index].currentSubAccount >= serverData.clients[client.index].subAccounts.length-1) { - serverData.clients[client.index].currentSubAccount = 0; + if(getClientData(client).subAccounts.length > 1) { + if(getClientData(client).currentSubAccount >= getClientData(client).subAccounts.length-1) { + getClientData(client).currentSubAccount = 0; } else { - serverData.clients[client.index].currentSubAccount++; + getClientData(client).currentSubAccount++; } - let subAccountId = serverData.clients[client.index].currentSubAccount; - let tempSubAccount = serverData.clients[client.index].subAccounts[subAccountId]; + let subAccountId = getClientData(client).currentSubAccount; + let tempSubAccount = getClientData(client).subAccounts[subAccountId]; triggerNetworkEvent("ag.switchCharacterSelect", client, tempSubAccount.firstName, tempSubAccount.lastName, tempSubAccount.placeOfOrigin, tempSubAccount.dateOfBirth, tempSubAccount.skin); } }); @@ -663,8 +663,8 @@ addNetworkHandler("ag.nextCharacter", function(client) { addNetworkHandler("ag.selectCharacter", function(client) { triggerNetworkEvent("ag.characterSelectSuccess", client); - let subAccountId = serverData.clients[client.index].currentSubAccount; - let tempSubAccount = serverData.clients[client.index].subAccounts[subAccountId]; + let subAccountId = getClientData(client).currentSubAccount; + let tempSubAccount = getClientData(client).subAccounts[subAccountId]; spawnPlayer(client, tempSubAccount.spawnPosition, tempSubAccount.spawnHeading, tempSubAccount.skin); }); @@ -719,4 +719,12 @@ function initClient(client) { triggerNetworkEvent("ag.showRegistration", client); //messageClient("Welcome to Asshat Gaming RP, " + String(client.name) + "! Please /register to continue.", client, serverConfig.colour.byName["white"]); } -} \ No newline at end of file +} + +// --------------------------------------------------------------------------- + +function getClientData(client) { + return serverData.clients[client.index]; +} + +// --------------------------------------------------------------------------- \ No newline at end of file diff --git a/scripts/server/class.js b/scripts/server/class.js index e80c687b..26266373 100644 --- a/scripts/server/class.js +++ b/scripts/server/class.js @@ -74,6 +74,7 @@ function initClassTable() { this.isWorking = false; this.jobUniform = this.skin; this.lastJobVehicle = null; + this.job = -1; this.weapons = []; } @@ -127,8 +128,8 @@ function initClassTable() { this.rentPrice = vehicleAssoc["veh_buy_price"]; // Position and Rotation - this.savedPosition = new Vec3(vehicleAssoc["veh_pos_x"], vehicleAssoc["veh_pos_y"], vehicleAssoc["veh_pos_z"]); - this.savedRotation = new Vec3(vehicleAssoc["veh_rot_x"], vehicleAssoc["veh_rot_y"], vehicleAssoc["veh_rot_z"]); + this.spawnPosition = new Vec3(vehicleAssoc["veh_pos_x"], vehicleAssoc["veh_pos_y"], vehicleAssoc["veh_pos_z"]); + this.spawnRotation = Number(vehicleAssoc["veh_rot_z"]); // Colour Info this.colour1IsRGBA = vehicleAssoc["veh_col1_isrgba"]; diff --git a/scripts/server/command.js b/scripts/server/command.js index 42f08465..cd66e875 100644 --- a/scripts/server/command.js +++ b/scripts/server/command.js @@ -85,6 +85,7 @@ function loadCommandData() { commandData("startwork", startWorkingCommand, "", getStaffFlagValue("none"), true, false), commandData("stopwork", stopWorkingCommand, "", getStaffFlagValue("none"), true, false), commandData("quitjob", quitJobCommand, "", getStaffFlagValue("none"), true, false), + commandData("uniform", jobUniformCommand, "", getStaffFlagValue("none"), true, false), commandData("radio", jobRadioCommand, "", getStaffFlagValue("none"), true, false), commandData("r", jobRadioCommand, "", getStaffFlagValue("none"), true, false), diff --git a/scripts/server/job.js b/scripts/server/job.js index ff61b5af..5b43163b 100644 --- a/scripts/server/job.js +++ b/scripts/server/job.js @@ -173,8 +173,8 @@ function takeJobCommand(command, params, client) { return false; } - if(getClientCurrentSubAccount(client).job != AG_JOB_NONE) { - getClientCurrentSubAccount(client).job = closestJob.jobType; + if(getClientCurrentSubAccount(client).job == -1) { + getClientCurrentSubAccount(client).job = getJobIndex(closestJob); } messageClientSuccess(client, "You now have the " + String(closestJob.name) + " job"); @@ -214,7 +214,7 @@ function startWorkingCommand(command, params, client) { return false; } - if(getClientCurrentSubAccount(client).job != closestJob.jobType) { + 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; @@ -339,7 +339,6 @@ function stopWorking(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; diff --git a/scripts/server/security.js b/scripts/server/security.js index a176474e..225fe1b1 100644 --- a/scripts/server/security.js +++ b/scripts/server/security.js @@ -7,3 +7,5 @@ // DESC: Provides security functions and usage // TYPE: Server (JavaScript) // =========================================================================== + +let accountSaltHash = "FGjD49yWqMrW" \ No newline at end of file diff --git a/scripts/server/startup.js b/scripts/server/startup.js index 1e5f799c..eda38625 100644 --- a/scripts/server/startup.js +++ b/scripts/server/startup.js @@ -24,6 +24,7 @@ function initServerScripts() { initAccountScript(); initChatScript(); initJobScript(); + initVehicleScript(); } // --------------------------------------------------------------------------- diff --git a/scripts/server/utilities.js b/scripts/server/utilities.js index b0392d7b..22da75b8 100644 --- a/scripts/server/utilities.js +++ b/scripts/server/utilities.js @@ -2451,6 +2451,12 @@ function getClosestJobPoint(position) { // --------------------------------------------------------------------------- +function getJobIndex(jobData) { + return serverData.jobs[server.game].indexOf(jobData); +} + +// --------------------------------------------------------------------------- + function getVehiclesInRange(position, distance) { return getElementsByType(ELEMENT_VEHICLE).filter(x => x.position.distance(position) <= distance); } @@ -3213,4 +3219,18 @@ function saveAllServerDataToDatabase() { saveAllHousesToDatabase(); saveAllBusinessesToDatabase(); saveAllClansToDatabase(); -} \ No newline at end of file +} + +// --------------------------------------------------------------------------- + +function intToBool(intVal) { + return !!intVal; +} + +// --------------------------------------------------------------------------- + +function boolToInt(boolVal) { + return (boolVal) ? 1 : 0; +} + +// --------------------------------------------------------------------------- \ No newline at end of file diff --git a/scripts/server/vehicle.js b/scripts/server/vehicle.js index 8a1bd121..b7fadc43 100644 --- a/scripts/server/vehicle.js +++ b/scripts/server/vehicle.js @@ -10,48 +10,53 @@ function initVehicleScript() { - console.log("[Asshat.Clan]: Initializing vehicle script ..."); +dd console.log("[Asshat.Vehicle]: Initializing vehicle script ..."); serverData.vehicles = loadVehiclesFromDatabase(); spawnAllVehicles(); addVehicleCommandHandlers(); - console.log("[Asshat.Clan]: Vehicle script initialized successfully!"); + console.log("[Asshat.Vehicle]: Vehicle script initialized successfully!"); return true; } // --------------------------------------------------------------------------- function addVehicleCommandHandlers() { - console.log("[Asshat.Clan]: Adding vehicle command handlers ..."); - let vehicleCommands = vehicleCommands.clan; + console.log("[Asshat.Vehicle]: Adding vehicle command handlers ..."); + let vehicleCommands = serverCommands.vehicle; for(let i in vehicleCommands) { addCommandHandler(vehicleCommands[i].command, vehicleCommands[i].handlerFunction); } - console.log("[Asshat.Clan]: Vehicle command handlers added successfully!"); + console.log("[Asshat.Vehicle]: Vehicle command handlers added successfully!"); return true; } -function loadVehiclesFromDatabase() { - let dbConnection = connectToDatabase(); - if(dbConnection) { - accountName = dbConnection.escapeString(accountName); - let dbQueryString = format("SELECT * FROM `veh_main` WHERE `veh_game` = %d", serverGame); - let dbQuery = dbConnection.query(dbQueryString); - if(dbQuery) { - while(dbAssoc = dbQuery.fetchAssoc()) { - let vehicleData = new vehicleData(dbAssoc); - serverData.vehicles.push(vehicleData); - - } - } - disconnectFromDatabase(dbConnection); - } - - return false; -} - // --------------------------------------------------------------------------- -function saveVehiclesToDatabase() { +function loadVehiclesFromDatabase() { + console.log("[Asshat.Vehicle]: Loading vehicles from database ..."); + let dbConnection = connectToDatabase(); + let tempVehicles = []; + let dbAssoc; + if(dbConnection) { + let dbQueryString = `SELECT * FROM veh_main WHERE veh_server = ${serverId}`; + let dbQuery = dbConnection.query(dbQueryString); + if(dbQuery) { + while(dbAssoc = dbQuery.fetchAssoc()) { + let tempVehicleData = new serverClasses.vehicleData(dbAssoc); + tempVehicles.push(tempVehicleData); + } + dbQuery.free(); + } + disconnectFromDatabase(dbConnection); + } + + console.log("[Asshat.Vehicle]: " + tempVehicles.length + " vehicles loaded from database successfully!"); + return tempVehicles; +} + +// --------------------------------------------------------------------------- + +function saveAllVehiclesToDatabase() { let vehicles = serverData.vehicles; for(let i in vehicles) { saveVehicleToDatabase(vehicles[i]); @@ -72,7 +77,7 @@ function saveVehicleToDatabase(vehicleData) { // dbQueryColourFields = "`veh_col1_rgba`, `veh_col2_rgba`, `veh_col3_rgba`, `veh_col4_rgba`"; // dbQueryColourValues = vehicleData.colour1Red, `veh_col1_g`, `veh_col1_b`, `veh_col1_a`, `veh_col2_r`, `veh_col2_g`, `veh_col2_b`, `veh_col2_a`, `veh_col3_r`, `veh_col3_g`, `veh_col3_b`, `veh_col3_a`, `veh_col4_r`, `veh_col4_g`, `veh_col4_b`, `veh_col4_a`,"; //} - let dbQueryString = "INSERT INTO `veh_main` (`veh_model`, `veh_pos_x`, `veh_pos_y`, `veh_pos_z`, veh_owner_type`, `veh_owner_id`) VALUES (" + vehicleData.modelId + ", " + vehicleData.spawnPosition.x + ", " + vehicleData.spawnPosition.y + ", " + vehicleData.spawnPosition.z + ", " + vehicleData.spawnRotation.z + ", " + vehicleData.ownerType + ", " + vehicleData.ownerId + ");"; + let dbQueryString = "INSERT INTO `veh_main` (`veh_model`, `veh_pos_x`, `veh_pos_y`, `veh_pos_z`, veh_owner_type`, `veh_owner_id`) VALUES (" + vehicleData.model + ", " + vehicleData.spawnPosition.x + ", " + vehicleData.spawnPosition.y + ", " + vehicleData.spawnPosition.z + ", " + vehicleData.spawnRotation.z + ", " + vehicleData.ownerType + ", " + vehicleData.ownerId + ");"; let dbQuery = dbConnection.query(dbQueryString); getVehicleData(vehicleData.vehicle).databaseId = dbConnection.insertId; } else { @@ -90,8 +95,9 @@ function saveVehicleToDatabase(vehicleData) { function spawnAllVehicles() { for(let i in serverData.vehicles) { - let vehicle = gta.createVehicle(serverData.vehicles[i].modelId, serverData.vehicles[i].spawnPosition, serverData.vehicles[i].spawnHeading); - vehicle.locked = serverData.vehicles[i].locked; + console.log(serverData.vehicles[i].spawnRotation); + let vehicle = gta.createVehicle(serverData.vehicles[i].model, serverData.vehicles[i].spawnPosition, serverData.vehicles[i].spawnRotation); + addToWorld(vehicle); if(serverData.vehicles[i].colour1IsRGBA && serverData.vehicles[i].colour2IsRGBA) { vehicle.setRGBColours(serverData.vehicles[i].colour1RGBA, serverData.vehicles[i].colour2RGBA); @@ -102,11 +108,14 @@ function spawnAllVehicles() { vehicle.colour4 = serverData.vehicles[i].colour4; } - vehicle.engine = serverData.vehicles[i].engine; - vehicle.lights = serverData.vehicles[i].engine; + vehicle.engine = intToBool(serverData.vehicles[i].engine); + //vehicle.lights = intToBool(serverData.vehicles[i].lights); //vehicle.health = serverData.vehicles[i].health; + + //vehicle.position = serverData.vehicles[i].spawnPosition; + vehicle.heading = serverData.vehicles[i].spawnRotation; - addToWorld(vehicle); + vehicle.locked = intToBool(serverData.vehicles[i].locked); serverData.vehicles[i].vehicle = vehicle; vehicle.setData("ag.dataSlot", i, false); @@ -122,8 +131,41 @@ function getVehicleData(vehicle) { // --------------------------------------------------------------------------- -function saveAllVehiclesToDatabase() { +function vehicleLockCommand(command, params, client) { + if(getCommand(command).requireLogin) { + if(!isClientLoggedIn(client)) { + messageClientError(client, "You must be logged in to use this command!"); + 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 closestVehicle = getClosestVehicle(); + if((!client.player.vehicle && doesClientHaveVehicleKeys(client, closestVehicle) && closestVehicle.position.distance(client.player.position) <= 5) || client.player.vehicle) { + if(getVehicleData(closestVehicle).locked) { + closestVehicle.locked = false; + getVehicleData(closestVehicles).locked = false; + } else { + closestVehicle.locked = true; + getVehicleData(closestVehicles).locked = true; + } + } + + if(areParamsEmpty(params)) { + messageClientSyntax(client, getCommandSyntaxText(command)); + return false; + } } // --------------------------------------------------------------------------- \ No newline at end of file