From 72a4e8268e3cd91847c4cf3f97c47b7cdc609f7f Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 30 May 2022 07:36:45 -0500 Subject: [PATCH 01/15] Fix chat window not being shown --- scripts/client/gui.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/client/gui.js b/scripts/client/gui.js index a621196a..853dcb58 100644 --- a/scripts/client/gui.js +++ b/scripts/client/gui.js @@ -101,6 +101,8 @@ function closeAllWindows() { guiRightKey = false; guiUpKey = false; guiDownKey = false; + + setChatWindowEnabled(true); } // =========================================================================== From 73a521c9dc024b0b4d492aa082ad52751d74dc50 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 30 May 2022 07:36:55 -0500 Subject: [PATCH 02/15] Fix sending job to client --- scripts/client/job.js | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/scripts/client/job.js b/scripts/client/job.js index 9c49adcb..407d94df 100644 --- a/scripts/client/job.js +++ b/scripts/client/job.js @@ -20,9 +20,10 @@ let jobBlipBlinkTimer = null; // =========================================================================== class JobData { - constructor(jobId, name, position, blipModel, pickupModel) { + constructor(jobId, jobLocationId, name, position, blipModel, pickupModel) { this.index = -1; this.jobId = jobId; + this.jobLocationId = jobLocationId; this.name = name; this.position = position; this.blipModel = blipModel; @@ -134,12 +135,13 @@ function hideJobRouteLocation() { // =========================================================================== -function receiveJobFromServer(jobId, name, position, blipModel, pickupModel) { +function receiveJobFromServer(jobId, jobLocationId, name, position, blipModel, pickupModel) { logToConsole(LOG_DEBUG, `[VRR.Job] Received job ${jobId} (${name}) from server`); if(getGame() == VRR_GAME_GTA_IV) { if(getJobData(jobId) != false) { let jobData = getJobData(jobId); + jobData.jobLocationId = jobLocationId; jobData.name = name; jobData.position = position; jobData.blipModel = blipModel; @@ -178,9 +180,9 @@ function receiveJobFromServer(jobId, name, position, blipModel, pickupModel) { } } else { logToConsole(LOG_DEBUG, `[VRR.Job] Job ${jobId} doesn't exist. Adding ...`); - let tempJobData = new JobData(jobId, name, position, blipModel, pickupModel); + let tempJobData = new JobData(jobId, jobLocationId, name, position, blipModel, pickupModel); if(blipModel != -1) { - let blipId = createGameBlip(tempJobData.blipModel, tempJobData.position, tempJobData.name); + let blipId = createGameBlip(blipModel, tempJobData.position, tempJobData.name); if(blipId != -1) { tempJobData.blipId = blipId; } @@ -188,7 +190,7 @@ function receiveJobFromServer(jobId, name, position, blipModel, pickupModel) { } else { logToConsole(LOG_DEBUG, `[VRR.Job] Job ${jobId} has no blip.`); } - jobs.push(tempJobData); + getServerData().jobs.push(tempJobData); setAllJobDataIndexes(); } } @@ -201,9 +203,9 @@ function receiveJobFromServer(jobId, name, position, blipModel, pickupModel) { * @return {JobData} The job's data (class instance) */ function getJobData(jobId) { - for(let i in jobs) { - if(jobs[i].jobId == jobId) { - return jobs[i]; + for(let i in getServerData().jobs) { + if(getServerData().jobs[i].jobId == jobId) { + return getServerData().jobs[i]; } } @@ -213,7 +215,7 @@ function receiveJobFromServer(jobId, name, position, blipModel, pickupModel) { // =========================================================================== function setAllJobDataIndexes() { - for(let i in jobs) { + for(let i in getServerData().jobs) { jobs[i].index = i; } } From 338b73142cff64daec28e5c5a536558d4cf4c4c5 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 30 May 2022 07:37:05 -0500 Subject: [PATCH 03/15] Sync element properties on spawn --- scripts/client/server.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/client/server.js b/scripts/client/server.js index 844d7fb3..41bf72d6 100644 --- a/scripts/client/server.js +++ b/scripts/client/server.js @@ -207,16 +207,16 @@ function onServerSpawnedLocalPlayer(state) { calledDeathEvent = false; }, 1000); - getPeds().filter(ped => !ped.isType(ELEMENT_PLAYER)).forEach(ped => { + getElementsByType(ELEMENT_PED).filter(ped => !ped.isType(ELEMENT_PLAYER)).forEach(ped => { syncCivilianProperties(ped); }); - getPlayers().forEach(player => { + getElementsByType(ELEMENT_PLAYER).forEach(player => { syncPlayerProperties(player); }); - getVehicles().forEach(veh => { - syncVehicleProperties(veh); + getElementsByType(ELEMENT_VEHICLE).forEach(vehicle => { + syncVehicleProperties(vehicle); }); } } From 36d6cd507eb3904623ba355c636f1109095bcdf7 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 30 May 2022 07:37:15 -0500 Subject: [PATCH 04/15] Fix CS veh stuff --- scripts/client/vehicle.js | 75 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 72 insertions(+), 3 deletions(-) diff --git a/scripts/client/vehicle.js b/scripts/client/vehicle.js index 700ff7be..3011f195 100644 --- a/scripts/client/vehicle.js +++ b/scripts/client/vehicle.js @@ -7,11 +7,56 @@ // TYPE: Client (JavaScript) // =========================================================================== -function receiveVehicleFromServer(vehicleId, position, model, colour1, colour2, colour3 = 0, colour4 = 0) { - logToConsole(LOG_DEBUG, `[VRR.Job] Received vehicle ${vehicleId} (${getVehicleNameFromModel(model, getGame())}) from server`); +class VehicleData { + constructor(vehicleId, model, position, heading, colour1, colour2, colour3, colour4, locked, lights, engine, licensePlate) { + this.index = -1; + this.vehicleId = vehicleId; + this.model = model; + this.position = position; + this.heading = heading; + this.colour1 = colour1; + this.colour2 = colour2; + this.colour3 = colour3; + this.colour4 = colour4; + this.pickupModel = pickupModel; + this.locked = locked; + this.lights = lights; + this.engine = engine; + this.licensePlate = licensePlate; + this.ivNetworkId = -1; + } +} - if(getGame() == VRR_GAME_GTA_IV) { +// =========================================================================== +function receiveVehicleFromServer(vehicleId, position, model, colour1, colour2, colour3 = 0, colour4 = 0, locked = false, lights = false, engine = false, licensePlate = "") { + logToConsole(LOG_DEBUG, `[VRR.Vehicle] Received vehicle ${vehicleId} (${getVehicleNameFromModel(model, getGame())}) from server`); + + if(getGame() != VRR_GAME_GTA_IV) { + return false; + } + + if(getVehicleData(vehicleId) != false) { + let vehicleData = getVehicleData(vehicleId); + //vehicleData.position = position; + //vehicleData.heading = heading; + //vehicleData.model + vehicleData.colour1 = colour1; + vehicleData.colour2 = colour2; + vehicleData.colour3 = colour3; + vehicleData.colour4 = colour4; + vehicleData.engine = engine; + vehicleData.lights = lights; + vehicleData.locked = locked; + vehicleData.licensePlate = ""; + + let vehicle = natives.getVehicleFromNetworkId(vehicleId.ivNetworkId); + } else { + //logToConsole(LOG_DEBUG, `[VRR.Vehicle] Vehicle ${vehicleId} doesn't exist. Adding ...`); + //let tempVehicleData = new VehicleData(vehicleId, name, position, blipModel, pickupModel); + + //vehicles.push(tempVehicleData); + //setAllJobDataIndexes(); } } @@ -59,4 +104,28 @@ function setVehiclePurchaseState(state, vehicleId, position) { vehiclePurchasePosition = position; } +// =========================================================================== + +/** + * @param {number} vehicleId - The ID of the job (initially provided by server) + * @return {VehicleData} The vehicle's data (class instance) + */ + function getVehicleData(vehicleId) { + for(let i in getServerData().vehicles) { + if(getServerData().vehicles[i].vehicleId == vehicleId) { + return getServerData().vehicles[i]; + } + } + + return false; +} + +// =========================================================================== + +function setAllVehicleDataIndexes() { + for(let i in getServerData().vehicles) { + getServerData().vehicles[i].index = i; + } +} + // =========================================================================== \ No newline at end of file From ab23ddf4b95bd1678ea7299475ba190519b257c6 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 30 May 2022 07:37:23 -0500 Subject: [PATCH 05/15] Add some debug logging --- scripts/server/account.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/scripts/server/account.js b/scripts/server/account.js index 8f68aa8c..c3b9f551 100644 --- a/scripts/server/account.js +++ b/scripts/server/account.js @@ -1169,28 +1169,41 @@ function savePlayerToDatabase(client) { // =========================================================================== function initClient(client) { + logToConsole(LOG_DEBUG, `[VRR.Account] Initializing client ${getPlayerDisplayForConsole(client)} ...`); + if(isConsole(client)) { + logToConsole(LOG_DEBUG|LOG_ERROR, `[VRR.Account] Client initialization failed for ${getPlayerDisplayForConsole(client)}! (is console client)`); return false; } - if(doesEntityDataExist(client, "vrr.isInitialized") || getEntityData(client, "vrr.isInitialized") == true) { + logToConsole(LOG_DEBUG, `[VRR.Account] Initializing client ${getPlayerDisplayForConsole(client)} ...`); + + if(playerInitialized[client.index] == true) { + logToConsole(LOG_DEBUG|LOG_ERROR, `[VRR.Account] Client initialization failed for ${getPlayerDisplayForConsole(client)}! (already initialized)`); return false; } setEntityData(client, "vrr.isInitialized", true, false); sendPlayerGUIColours(client); + + logToConsole(LOG_DEBUG, `[VRR.Account] Initializing GUI for ${getPlayerDisplayForConsole(client)} ...`); sendPlayerGUIInit(client); updatePlayerSnowState(client); + logToConsole(LOG_DEBUG, `[VRR.Account] Showing connect camera to ${getPlayerDisplayForConsole(client)} ...`); showConnectCameraToPlayer(client); messageClient(`Please wait ...`, client, getColourByName("softGreen")); + logToConsole(LOG_DEBUG, `[VRR.Account] Waiting for 2.5 seconds to prevent race attack ...`); setTimeout(function() { if(client != null) { clearChatBox(client); + logToConsole(LOG_DEBUG, `[VRR.Account] Loading account for ${getPlayerDisplayForConsole(client)}`); let tempAccountData = loadAccountFromName(getPlayerName(client), true); + + logToConsole(LOG_DEBUG, `[VRR.Account] Loading subaccounts for ${getPlayerDisplayForConsole(client)}`); let tempSubAccounts = loadSubAccountsFromAccount(tempAccountData.databaseId); getServerData().clients[getPlayerId(client)] = new ClientData(client, tempAccountData, tempSubAccounts); From 1722eafa6f510a8d3c0f973f1c5c1b57d90beec3 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 30 May 2022 07:37:41 -0500 Subject: [PATCH 06/15] Fix automated bug report for biz info error --- scripts/server/business.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/server/business.js b/scripts/server/business.js index 01bec471..29944f8a 100644 --- a/scripts/server/business.js +++ b/scripts/server/business.js @@ -723,11 +723,12 @@ function getBusinessInfoCommand(command, params, client) { break; case VRR_BIZOWNER_NONE: - submitBugReport(client, `[AUTOMATED REPORT] getBusinessInfoCommand() - Invalid ownerType for business ${businessId}/${getBusinessData(businessId).databaseId}`); - ownerName = "INVALID"; + //submitBugReport(client, `[AUTOMATED REPORT] getBusinessInfoCommand() - Invalid ownerType for business ${businessId}/${getBusinessData(businessId).databaseId}`); + ownerName = "None"; break; default: + submitBugReport(client, `[AUTOMATED REPORT] getBusinessInfoCommand() - Invalid ownerType ${businessData.ownerType} for business ${businessId}/${getBusinessData(businessId).databaseId}`); ownerName = "None"; break; } From ea49a41c45afd7c9d2a212a77c9e0a038426640a Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 30 May 2022 07:37:52 -0500 Subject: [PATCH 07/15] Use some more locale strings --- scripts/server/chat.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/scripts/server/chat.js b/scripts/server/chat.js index 8bc9223b..06a3f921 100644 --- a/scripts/server/chat.js +++ b/scripts/server/chat.js @@ -18,22 +18,22 @@ function initChatScript() { function processPlayerChat(client, messageText) { if(!isConsole(client)) { if(!getPlayerData(client)) { - messagePlayerError(client, "You need to login before you can chat!"); + messagePlayerError(client, getLocaleString(client, "MustBeLoggedInAndSpawnedToChat")); return false; } if(!isPlayerLoggedIn(client)) { - messagePlayerError(client, "You need to login before you can chat!"); + messagePlayerError(client, getLocaleString(client, "MustBeLoggedInAndSpawnedToChat")); return false; } if(!isPlayerSpawned(client)) { - messagePlayerError(client, "You need to spawn before you can chat!"); + messagePlayerError(client, getLocaleString(client, "MustBeLoggedInAndSpawnedToChat")); return false; } if(isPlayerMuted(client)) { - messagePlayerError(client, "You are muted and can't chat!"); + messagePlayerError(client, getLocaleString(client, "MutedCantChat")); return false; } @@ -74,7 +74,7 @@ function meActionCommand(command, params, client) { function doActionCommand(command, params, client) { if(isPlayerMuted(client)) { - messagePlayerError(client, "You are muted and can't chat!"); + messagePlayerError(client, getLocaleString(client, "MutedCantChat")); return false; } @@ -91,7 +91,7 @@ function doActionCommand(command, params, client) { function shoutCommand(command, params, client) { if(isPlayerMuted(client)) { - messagePlayerError(client, "You are muted and can't chat!"); + messagePlayerError(client, getLocaleString(client, "MutedCantChat")); return false; } @@ -108,7 +108,7 @@ function shoutCommand(command, params, client) { function megaphoneChatCommand(command, params, client) { if(isPlayerMuted(client)) { - messagePlayerError(client, "You are muted and can't chat!"); + messagePlayerError(client, getLocaleString(client, "MutedCantChat")); return false; } @@ -118,7 +118,7 @@ function megaphoneChatCommand(command, params, client) { } if(!canPlayerUseMegaphone(client)) { - messagePlayerError(client, "You must have a megaphone item or be in an emergency vehicle!"); + messagePlayerError(client, getLocaleString(client, "CantUseMegaphone")); return false; } @@ -130,7 +130,7 @@ function megaphoneChatCommand(command, params, client) { function talkCommand(command, params, client) { if(isPlayerMuted(client)) { - messagePlayerError(client, "You are muted and can't chat!"); + messagePlayerError(client, getLocaleString(client, "MutedCantChat")); return false; } @@ -147,7 +147,7 @@ function talkCommand(command, params, client) { function whisperCommand(command, params, client) { if(isPlayerMuted(client)) { - messagePlayerError(client, "You are muted and can't chat!"); + messagePlayerError(client, getLocaleString(client, "MutedCantChat")); return false; } @@ -164,7 +164,7 @@ function whisperCommand(command, params, client) { function adminChatCommand(command, params, client) { if(isPlayerMuted(client)) { - messagePlayerError(client, "You are muted and can't chat!"); + messagePlayerError(client, getLocaleString(client, "MutedCantChat")); return false; } @@ -180,7 +180,7 @@ function adminChatCommand(command, params, client) { function clanChatCommand(command, params, client) { if(isPlayerMuted(client)) { - messagePlayerError(client, "You are muted and can't chat!"); + messagePlayerError(client, getLocaleString(client, "MutedCantChat")); return false; } From a097da7a63d1bb67e20214e41ab8c4101d5f4f69 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 30 May 2022 07:38:48 -0500 Subject: [PATCH 08/15] Use arrays for client init states, not client data --- scripts/server/client.js | 51 ++++++++++++++++++++++++++++------------ scripts/server/core.js | 5 ++++ scripts/server/event.js | 7 +++++- 3 files changed, 47 insertions(+), 16 deletions(-) diff --git a/scripts/server/client.js b/scripts/server/client.js index 9e896186..d776ea15 100644 --- a/scripts/server/client.js +++ b/scripts/server/client.js @@ -107,9 +107,9 @@ function updatePlayerPing(client) { // =========================================================================== function playerClientReady(client) { - setEntityData(client, "vrr.isReady", true, false); - logToConsole(LOG_DEBUG, `${getPlayerDisplayForConsole(client)}'s client resources are downloaded and ready!`); - if(getEntityData(client, "vrr.isStarted") == true) { + playerResourceReady[client.index] = true; + logToConsole(LOG_DEBUG, `[VRR.Client] ${getPlayerDisplayForConsole(client)}'s client resources are downloaded and ready! Started: ${getYesNoFromBool(playerResourceStarted[client.index])}`); + if(playerResourceStarted[client.index] == true) { initClient(client); } } @@ -117,16 +117,16 @@ function playerClientReady(client) { // =========================================================================== function playerGUIReady(client) { - setEntityData(client, "vrr.guiReady", true, false); - logToConsole(LOG_DEBUG, `${getPlayerDisplayForConsole(client)}'s client GUI is initialized and ready!`); + playerGUI[client.index] = true; + logToConsole(LOG_DEBUG, `[VRR.Client] ${getPlayerDisplayForConsole(client)}'s client GUI is initialized and ready!`); } // =========================================================================== function playerClientStarted(client) { - setEntityData(client, "vrr.isStarted", true, false); - logToConsole(LOG_DEBUG, `${getPlayerDisplayForConsole(client)}'s client resources are started and running!`); - if(getEntityData(client, "vrr.isReady") == true) { + playerResourceStarted[client.index] = true; + logToConsole(LOG_DEBUG, `[VRR.Client] ${getPlayerDisplayForConsole(client)}'s client resources are started and running! Ready: ${getYesNoFromBool(playerResourceReady[client.index])}`); + if(playerResourceReady[client.index] == true) { initClient(client); } } @@ -134,7 +134,7 @@ function playerClientStarted(client) { // =========================================================================== function playerClientStopped(client) { - logToConsole(LOG_DEBUG, `${getPlayerDisplayForConsole(client)}'s client resources have stopped (possibly error?). Kicking them from the server ...`); + logToConsole(LOG_DEBUG, `[VRR.Client] ${getPlayerDisplayForConsole(client)}'s client resources have stopped (possibly error?). Kicking them from the server ...`); disconnectPlayer(client); } @@ -1100,6 +1100,18 @@ function sendHouseToPlayer(client, houseId, description, entrancePosition, blipM // ========================================================================== +function sendJobToPlayer(client, jobId, jobLocationId, name, position) { + sendNetworkEventToPlayer("vrr.job", client, jobId, jobLocationId, name, position); +} + +// ========================================================================== + +function sendVehicleToPlayer(client, vehicleId, model, position, heading, colour1, colour2, colour3, colour4) { + sendNetworkEventToPlayer("vrr.vehicle", client, vehicleId, model, position, heading, colour1, colour2, colour3, colour4); +} + +// ========================================================================== + function sendAllBusinessesToPlayer(client) { let businesses = getServerData().businesses; for(let i in businesses) { @@ -1119,12 +1131,21 @@ function sendAllHousesToPlayer(client) { // ========================================================================== function sendAllJobsToPlayer(client) { - //let jobs = getServerData().jobs; - //for(let i in jobs) { - // for(let j in jobs[i].locations) { - // sendJobToPlayer(client, jobs[i].index, jobs[i].name, jobs[i].locations[j].position, jobs[i].blipModel); - // } - //} + let jobs = getServerData().jobs; + for(let i in jobs) { + for(let j in jobs[i].locations) { + sendJobToPlayer(client, jobs[i].index, jobs[i].locations[j].index, jobs[i].name, jobs[i].locations[j].position, jobs[i].blipModel); + } + } +} + +// ========================================================================== + +function sendAllVehiclesToPlayer(client) { + let vehicles = getServerData().vehicles; + for(let i in vehicles) { + sendVehicleToPlayer(client, vehicles[i].index, vehicles[i].model, vehicles[i].syncPosition, vehicles[i].syncHeading, vehicles[i].colour1, vehicles[i].colour2, vehicles[i].colour3, vehicles[i].colour4); + } } // ========================================================================== diff --git a/scripts/server/core.js b/scripts/server/core.js index 1339a18d..4dd19aca 100644 --- a/scripts/server/core.js +++ b/scripts/server/core.js @@ -11,6 +11,11 @@ let scriptVersion = "1.1"; let serverStartTime = 0; let logLevel = LOG_INFO|LOG_DEBUG|LOG_VERBOSE; // LOG_ERROR|LOG_WARN; +let playerResourceReady = new Array(server.maxClients).fill(false); +let playerResourceStarted = new Array(server.maxClients).fill(false); +let playerInitialized = new Array(server.maxClients).fill(false); +let playerGUI = new Array(server.maxClients).fill(false); + // =========================================================================== /** diff --git a/scripts/server/event.js b/scripts/server/event.js index 6349a8f8..6aea77aa 100644 --- a/scripts/server/event.js +++ b/scripts/server/event.js @@ -126,6 +126,11 @@ function onPlayerQuit(event, client, quitReasonId) { resetClientStuff(client); getServerData().clients[getPlayerId(client)] = null; } + + playerResourceReady[client.index] = false; + playerResourceStarted[client.index] = false; + playerInitialized[client.index] = false; + playerGUIReady[client.index] = false; } // =========================================================================== @@ -623,7 +628,7 @@ function onPlayerSpawn(client) { if(!areServerElementsSupported()) { sendAllBusinessesToPlayer(client); sendAllHousesToPlayer(client); - sendAllJobsToPlayer(client); + //sendAllJobsToPlayer(client); //sendAllVehiclesToPlayer(client); requestPlayerPedNetworkId(client); } From c4916adc5531ba000936d698f4ffb50d1f4e35cd Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 30 May 2022 07:40:48 -0500 Subject: [PATCH 09/15] Don't loop houses if there are none --- scripts/server/house.js | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/scripts/server/house.js b/scripts/server/house.js index 24e4c318..2c1b6953 100644 --- a/scripts/server/house.js +++ b/scripts/server/house.js @@ -659,20 +659,22 @@ function getClosestHouseExit(position, dimension) { // =========================================================================== function getPlayerHouse(client) { - if(getPlayerDimension(client) == getGameConfig().mainWorldDimension[getGame()]) { - let closestEntrance = getClosestHouseEntrance(getPlayerPosition(client), getPlayerDimension(client)); - if(getDistance(getPlayerPosition(client), getHouseData(closestEntrance).entrancePosition) <= getGlobalConfig().enterPropertyDistance) { - return getHouseData(closestEntrance).index; - } - } else { - let closestEntrance = getClosestHouseEntrance(getPlayerPosition(client), getPlayerDimension(client)); - if(getDistance(getPlayerPosition(client), getHouseData(closestEntrance).entrancePosition) <= getGlobalConfig().enterPropertyDistance) { - return getHouseData(closestEntrance).index; - } + if(getServerData().houses.length > 0) { + if(getPlayerDimension(client) == getGameConfig().mainWorldDimension[getGame()]) { + let closestEntrance = getClosestHouseEntrance(getPlayerPosition(client), getPlayerDimension(client)); + if(getDistance(getPlayerPosition(client), getHouseData(closestEntrance).entrancePosition) <= getGlobalConfig().enterPropertyDistance) { + return getHouseData(closestEntrance).index; + } + } else { + let closestEntrance = getClosestHouseEntrance(getPlayerPosition(client), getPlayerDimension(client)); + if(getDistance(getPlayerPosition(client), getHouseData(closestEntrance).entrancePosition) <= getGlobalConfig().enterPropertyDistance) { + return getHouseData(closestEntrance).index; + } - for(let i in getServerData().houses) { - if(getServerData().houses[i].hasInterior && getServerData().houses[i].exitDimension == getPlayerDimension(client)) { - return i; + for(let i in getServerData().houses) { + if(getServerData().houses[i].hasInterior && getServerData().houses[i].exitDimension == getPlayerDimension(client)) { + return i; + } } } } From ceac2b6a612ca205f5dd37d3d785ba61c42e06a2 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 30 May 2022 07:41:00 -0500 Subject: [PATCH 10/15] Use locale string for badge info header --- scripts/server/item.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/server/item.js b/scripts/server/item.js index 4d74aa67..cf9bb58e 100644 --- a/scripts/server/item.js +++ b/scripts/server/item.js @@ -1018,7 +1018,7 @@ function playerUseItem(client, hotBarSlot) { let clients = getClients(); for(let i in clients) { if(getDistance(getPlayerPosition(client), getPlayerPosition(clients[i])) <= 7) { - makeChatBoxSectionHeader(clients[i], getLocaleString(client, "Badge", getCharacterFullName(client))); + makeChatBoxSectionHeader(clients[i], getLocaleString(client, "HeaderBadgeInfo", getCharacterFullName(client))); messagePlayerNormal(client, `{clanOrange}Type:{MAINCOLOUR} ${getJobData(getPlayerJob(client)).name}`); messagePlayerNormal(client, `{clanOrange}ID:{MAINCOLOUR} ${addPrefixNumberFill(getPlayerCurrentSubAccount(client).databaseId, 5)}`); messagePlayerNormal(client, `{clanOrange}Rank:{MAINCOLOUR} ${getJobRankName(getPlayerJob(client), getPlayerJobRank(client))}`); From 79fe95a7f468672803ba490b3c30f72c812bd509 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 30 May 2022 07:41:08 -0500 Subject: [PATCH 11/15] Remove unused var --- scripts/server/keybind.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/server/keybind.js b/scripts/server/keybind.js index 3dfaf3ec..e941f4d4 100644 --- a/scripts/server/keybind.js +++ b/scripts/server/keybind.js @@ -46,8 +46,6 @@ function addKeyBindCommand(command, params, client) { // =========================================================================== function removeKeyBindCommand(command, params, client) { - let splitParams = params.split(" "); - let keyId = getKeyIdFromParams(getParam(params, " ", 1)); if(!keyId) { From 36ccae416f7a57271031984124072f8d3f140e53 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 30 May 2022 07:41:23 -0500 Subject: [PATCH 12/15] Revert back to previous locale util --- scripts/server/locale.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/scripts/server/locale.js b/scripts/server/locale.js index 1b2c9366..966aa1e5 100644 --- a/scripts/server/locale.js +++ b/scripts/server/locale.js @@ -61,12 +61,30 @@ function getGroupedLocaleString(client, stringName, index, ...args) { function getRawLocaleString(stringName, localeId) { return getLocaleStrings()[localeId][stringName]; + + //if(findResourceByName("agrp_locale").exports.doesLocaleStringExist(localeId, stringName) == false) { + // return ""; + //} + + //let tempString = findResourceByName("agrp_locale").exports.getRawLocaleString(localeId, stringName); + //if(tempString == "" || tempString == null || tempString == undefined) { + // return ""; + //} } // =========================================================================== function getRawGroupedLocaleString(stringName, localeId, index) { return getLocaleStrings()[localeId][stringName][index]; + + //if(findResourceByName("agrp_locale").exports.doesLocaleStringExist(localeId, stringName) == false) { + // return ""; + //} + + //let tempString = findResourceByName("agrp_locale").exports.getRawLocaleString(localeId, stringName); + //if(tempString == "" || tempString == null || tempString == undefined) { + // return ""; + //} } // =========================================================================== From bde028ca26b69be0f2ac7a1860d05968b6212c64 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 30 May 2022 07:41:37 -0500 Subject: [PATCH 13/15] Wrong util name for vec3 --- scripts/shared/gamedata.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/shared/gamedata.js b/scripts/shared/gamedata.js index 106f9685..fee7e5ca 100644 --- a/scripts/shared/gamedata.js +++ b/scripts/shared/gamedata.js @@ -6631,7 +6631,7 @@ let gameData = { ["Apartment 107", 0, 200, toVector3(209.76, -1273.40, 19.27), toVector3(26.67, -1328.89, 13.00), 11, null], ], npcs: [ - ["Front Desk Clerk", 160, toVector(215.11, -1272.65, 12.09), 2.95], + ["Front Desk Clerk", 160, toVector3(215.11, -1272.65, 12.09), 2.95], ] } } From 82bba6f3ed5190ea998eac10915dcd1232a7aa3a Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Tue, 31 May 2022 08:34:12 -0500 Subject: [PATCH 14/15] Fix stop working message --- scripts/server/job.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/server/job.js b/scripts/server/job.js index d35664be..821a48a9 100644 --- a/scripts/server/job.js +++ b/scripts/server/job.js @@ -641,9 +641,10 @@ function stopWorking(client) { restorePlayerJobLockerItems(client); respawnJobVehicle(client); sendPlayerStopJobRoute(client); - messageDiscordEventChannel(`💼 ${getPlayerName(client)} has stopped working as a ${getJobData(jobId).name}`); let jobId = getPlayerJob(client); + messageDiscordEventChannel(`💼 ${getPlayerName(client)} has stopped working as a ${getJobData(jobId).name}`); + switch(getJobType(jobId)) { case VRR_JOB_POLICE: messagePlayerInfo(client, "Your uniform, equipment, and vehicle have been returned to the police station"); From eabf63cf86035eba0ac128afaaa9f48a9014ed80 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Tue, 31 May 2022 08:34:35 -0500 Subject: [PATCH 15/15] Fix closest NPC to check interior and dimension --- scripts/server/npc.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/server/npc.js b/scripts/server/npc.js index 536ae921..bb646408 100644 --- a/scripts/server/npc.js +++ b/scripts/server/npc.js @@ -473,9 +473,13 @@ function getNPCInfoCommand(command, params, client) { function getClosestNPC(position) { let npcs = getServerData().npcs; + + let interior = getPlayerInterior(client); + let dimension = getPlayerDimension(client); + let closest = 0; for(let i in npcs) { - if(getDistance(npcs[i].ped.position, position) < getDistance(npcs[closest].ped.position, position)) { + if(getDistance(npcs[i].ped.position, position) < getDistance(npcs[closest].ped.position, position) && npcs[closest].interior == interior && npcs[closest].dimension == dimension) { closest = i; } }