diff --git a/scripts/server/client.js b/scripts/server/client.js index 534a078b..6006e35d 100644 --- a/scripts/server/client.js +++ b/scripts/server/client.js @@ -65,16 +65,15 @@ function addAllNetworkHandlers() { // Item addNetworkEventHandler("vrr.itemActionDelayComplete", playerItemActionDelayComplete); - addNetworkEventHandler("vrr.weaponDamage", playerDamagedByPlayer); + // Misc addNetworkEventHandler("vrr.player.position", updatePositionInPlayerData); addNetworkEventHandler("vrr.player.heading", updateHeadingInPlayerData); addNetworkEventHandler("vrr.player.lookat", setPlayerHeadLookPosition); - addNetworkEventHandler("vrr.skinSelected", playerFinishedSkinSelection); - addNetworkEventHandler("vrr.clientInfo", updateConnectionLogOnClientInfoReceive); + addNetworkEventHandler("vrr.vehBuyState", receiveVehiclePurchaseStateUpdateFromClient); } // =========================================================================== @@ -1122,8 +1121,18 @@ function updateAllInteriorVehiclesForPlayer(client, interior, dimension) { // =========================================================================== -function setPlayerBuyingVehicleState(state, vehicle, position) { +function setPlayerBuyingVehicleState(client, state, vehicleId, position) { + if(getGlobalConfig().useServerSideVehiclePurchaseCheck == false) { + sendNetworkEventToPlayer("vrr.vehBuyState", client, state, vehicleId, position); + } +} +// ========================================================================== + +function receiveVehiclePurchaseStateUpdateFromClient(client, state) { + if(getGlobalConfig().useServerSideVehiclePurchaseCheck == false) { + checkVehicleBuying(client); + } } // =========================================================================== @@ -1132,4 +1141,4 @@ function sendPlayerLogLevel(client, tempLogLevel = logLevel) { sendNetworkEventToPlayer("vrr.logLevel", client, tempLogLevel); } -// =========================================================================== \ No newline at end of file +// ========================================================================== \ No newline at end of file diff --git a/scripts/server/config.js b/scripts/server/config.js index 928f1067..50264580 100644 --- a/scripts/server/config.js +++ b/scripts/server/config.js @@ -70,6 +70,7 @@ let globalConfig = { economy: {}, locales: [], accents: [], + useServerSideVehiclePurchaseCheck: false, }; // =========================================================================== diff --git a/scripts/server/event.js b/scripts/server/event.js index 9d50f45f..581d9b6a 100644 --- a/scripts/server/event.js +++ b/scripts/server/event.js @@ -157,9 +157,11 @@ function onProcess(event, deltaTime) { //checkPlayerPedState(); //checkVehicleBurning(); - getClients().forEach((client) => { - checkVehicleBuying(client); - }); + if(getGlobalConfig().useServerSideVehiclePurchaseCheck == true) { + getClients().forEach((client) => { + checkVehicleBuying(client); + }); + } } // =========================================================================== @@ -299,12 +301,12 @@ async function onPlayerEnteredVehicle(client, clientVehicle, seat) { return false; } - if(getPlayerData(client).enteringVehicle == null || getPlayerData(client).enteringVehicle != vehicle) { - messagePlayerError(client, "You can't enter this vehicle!"); - removePlayerFromVehicle(client); - messageAdmins(`{ALTCOLOUR}${getPlayerName(client)} {MAINCOLOUR}tried to warp into a locked vehicle`); - return false; - } + //if(getPlayerData(client).enteringVehicle == null || getPlayerData(client).enteringVehicle != vehicle) { + // messagePlayerError(client, "You can't enter this vehicle!"); + // removePlayerFromVehicle(client); + // messageAdmins(`{ALTCOLOUR}${getPlayerName(client)} {MAINCOLOUR}tried to warp into a locked vehicle`); + // return false; + //} logToConsole(LOG_DEBUG, `[VRR.Event] ${getPlayerDisplayForConsole(client)} entered a ${getVehicleName(vehicle)} (ID: ${vehicle.getData("vrr.dataSlot")}, Database ID: ${getVehicleData(vehicle).databaseId})`); @@ -315,13 +317,11 @@ async function onPlayerEnteredVehicle(client, clientVehicle, seat) { vehicle.engine = getVehicleData(vehicle).engine; if(getVehicleData(vehicle).buyPrice > 0) { - messagePlayerAlert(client, `This ${getVehicleName(vehicle)} is for sale! Cost: {ALTCOLOUR}$${makeLargeNumberReadable(getVehicleData(vehicle).buyPrice)}`); - messagePlayerTip(client, `Use /vehbuy if you want to buy it.`); + messagePlayerAlert(client, getLocaleString(client, "VehicleForSale", getVehicleName(vehicle), `{ALTCOLOUR}$${makeLargeNumberReadable(getVehicleData(vehicle).buyPrice)}{MAINCOLOUR}`, `{ALTCOLOUR}/vehbuy{MAINCOLOUR}`)); resetVehiclePosition(vehicle); } else if(getVehicleData(vehicle).rentPrice > 0) { if(getVehicleData(vehicle).rentedBy != client) { - messagePlayerAlert(client, `This ${getVehicleName(vehicle)} is for rent! Cost: {ALTCOLOUR}$${makeLargeNumberReadable(getVehicleData(vehicle).rentPrice)} per minute`); - messagePlayerTip(client, `Use /vehrent if you want to rent it.`); + messagePlayerAlert(client, getLocaleString(client, "VehicleForRent", getVehicleName(vehicle), `{ALTCOLOUR}$${makeLargeNumberReadable(getVehicleData(vehicle).rentPrice)}`, `{ALTCOLOUR}/vehrent{MAINCOLOUR}`)); resetVehiclePosition(vehicle); } else { messagePlayerAlert(client, `You are renting this ${getVehicleName(vehicle)} for {ALTCOLOUR}$${makeLargeNumberReadable(getVehicleData(vehicle).rentPrice)} per minute. {MAINCOLOUR}Use {ALTCOLOUR}/stoprent {MAINCOLOUR}if you want to stop renting it.`); @@ -359,15 +359,17 @@ async function onPlayerEnteredVehicle(client, clientVehicle, seat) { } if(!getVehicleData(vehicle).engine) { - if(doesPlayerHaveVehicleKeys(client, vehicle)) { - if(!doesPlayerHaveKeyBindsDisabled(client) && doesPlayerHaveKeyBindForCommand(client, "engine")) { - messagePlayerTip(client, `This ${getVehicleName(vehicle)}'s engine is off. Press {ALTCOLOUR}${toUpperCase(getKeyNameFromId(getPlayerKeyBindForCommand(client, "engine").key))} {MAINCOLOUR}to start it.`); + if(getVehicleData(vehicle).buyPrice == 0 && getVehicleData(vehicle).rentPrice == 0) { + if(doesPlayerHaveVehicleKeys(client, vehicle)) { + if(!doesPlayerHaveKeyBindsDisabled(client) && doesPlayerHaveKeyBindForCommand(client, "engine")) { + messagePlayerTip(client, `This ${getVehicleName(vehicle)}'s engine is off. Press {ALTCOLOUR}${toUpperCase(getKeyNameFromId(getPlayerKeyBindForCommand(client, "engine").key))} {MAINCOLOUR}to start it.`); + } else { + messagePlayerAlert(client, `This ${getVehicleName(vehicle)}'s engine is off. Use /engine to start it`); + } } else { - messagePlayerAlert(client, `This ${getVehicleName(vehicle)}'s engine is off. Use /engine to start it`); - } - } else { - messagePlayerAlert(client, `This ${getVehicleName(vehicle)}'s engine is off and you don't have the keys to start it`); + messagePlayerAlert(client, `This ${getVehicleName(vehicle)}'s engine is off and you don't have the keys to start it`); + } } resetVehiclePosition(vehicle); } diff --git a/scripts/server/vehicle.js b/scripts/server/vehicle.js index caeb66a6..c304ff2b 100644 --- a/scripts/server/vehicle.js +++ b/scripts/server/vehicle.js @@ -580,7 +580,7 @@ function buyVehicleCommand(command, params, client) { vehicle.engine = true; getVehicleData(vehicle).needsSaved = true; - + setPlayerBuyingVehicleState(client, VRR_VEHBUYSTATE_TESTDRIVE, vehicle.id, getVehiclePosition(vehicle)); meActionToNearbyPlayers(client, `receives a set of keys to test drive the ${getVehicleName(vehicle)} and starts the engine`); messagePlayerInfo(client, getLocaleString(client, "DealershipPurchaseTestDrive")); } @@ -1354,18 +1354,22 @@ function createPermanentVehicle(modelIndex, position, heading, interior = 0, dim function checkVehicleBuying(client) { if(!isPlayerLoggedIn(client)) { + setPlayerBuyingVehicleState(client, VRR_VEHBUYSTATE_NONE, null, null); return false; } if(!isPlayerSpawned(client)) { + setPlayerBuyingVehicleState(client, VRR_VEHBUYSTATE_NONE, null, null); return false; } if(!getPlayerData(client)) { + setPlayerBuyingVehicleState(client, VRR_VEHBUYSTATE_NONE, null, null); return false; } if(!getPlayerData(client).buyingVehicle) { + setPlayerBuyingVehicleState(client, VRR_VEHBUYSTATE_NONE, null, null); return false; } @@ -1374,6 +1378,7 @@ function checkVehicleBuying(client) { messagePlayerError(client, getLocaleString(client, "DealershipPurchaseExitedVehicle")); respawnVehicle(getPlayerData(client).buyingVehicle); getPlayerData(client).buyingVehicle = false; + setPlayerBuyingVehicleState(client, VRR_VEHBUYSTATE_NONE, null, null); } return false; } @@ -1383,6 +1388,7 @@ function checkVehicleBuying(client) { messagePlayerError(client, getLocaleString(client, "VehiclePurchaseNotEnoughMoney")); respawnVehicle(getPlayerData(client).buyingVehicle); getPlayerData(client).buyingVehicle = false; + setPlayerBuyingVehicleState(client, VRR_VEHBUYSTATE_NONE, null, null); return false; } @@ -1396,6 +1402,7 @@ function checkVehicleBuying(client) { getVehicleData(getPlayerData(client).buyingVehicle).spawnLocked = false; getPlayerData(client).buyingVehicle = false; messagePlayerSuccess(client, getLocaleString(client, "VehiclePurchaseComplete")); + setPlayerBuyingVehicleState(client, VRR_VEHBUYSTATE_NONE, null, null); return true; }