From cf6970e3e17874fcaa44599887189268b2a6bff0 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 9 Mar 2022 02:49:53 -0600 Subject: [PATCH 01/16] Debug logging --- scripts/client/business.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/scripts/client/business.js b/scripts/client/business.js index 3bcee937..3eb7aee8 100644 --- a/scripts/client/business.js +++ b/scripts/client/business.js @@ -24,19 +24,25 @@ class BusinessData { // =========================================================================== function receiveBusinessFromServer(businessId, name, entrancePosition, blipModel, pickupModel, hasInterior, hasItems) { + logToConsole(LOG_DEBUG, `[VRR.Business] Received business ${businessId} (${name}) from server`); if(getGame() == VRR_GAME_GTA_IV) { if(getBusinessData(businessId) != false) { + logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId} already exists. Checking blip ...`); if(blipModel == -1) { + logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been removed by the server`); natives.removeBlipAndClearIndex(getBusinessData(businessId).blipId); getBusinessData(businessId).blipId = -1; //businesses.splice(getBusinessData(businessId).index, 1); //setAllBusinessDataIndexes(); } else { + logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been changed by the server`); if(getBusinessData(businessId).blipId != -1) { + logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been modified by the server`); natives.setBlipCoordinates(getBusinessData(businessId).blipId, getBusinessData(businessId).entrancePosition); natives.changeBlipSprite(getBusinessData(businessId).blipId, getBusinessData(businessId).blipModel); natives.changeBlipNameFromAscii(getBusinessData(businessId).blipId, `${name.substr(0, 24)}${(name.length > 24) ? " ...": ""}`); } else { + logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been added by the server`); let blipId = natives.addBlipForCoord(entrancePosition); if(blipId) { getBusinessData(businessId).blipId = blipId; @@ -46,8 +52,10 @@ function receiveBusinessFromServer(businessId, name, entrancePosition, blipModel } } } else { + logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId} doesn't exist. Adding ...`); + let tempBusinessData = new BusinessData(businessId, name, entrancePosition, blipModel, pickupModel, hasInterior, hasItems); if(blipModel != -1) { - let tempBusinessData = new BusinessData(businessId, name, entrancePosition, blipModel, pickupModel, hasInterior, hasItems); + logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been added by the server`); let blipId = natives.addBlipForCoord(entrancePosition); if(blipId) { tempBusinessData.blipId = blipId; @@ -55,9 +63,9 @@ function receiveBusinessFromServer(businessId, name, entrancePosition, blipModel natives.setBlipMarkerLongDistance(blipId, false); natives.changeBlipNameFromAscii(blipId, `${name.substr(0, 24)}${(name.length > 24) ? " ...": ""}`); } - businesses.push(tempBusinessData); - setAllBusinessDataIndexes(); } + businesses.push(tempBusinessData); + setAllBusinessDataIndexes(); } } } From 977e0da97d66ff5a72fcba44a4a58e25253be552 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 9 Mar 2022 02:50:03 -0600 Subject: [PATCH 02/16] Enter veh event for IV --- scripts/client/event.js | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/scripts/client/event.js b/scripts/client/event.js index 03ae0839..c654229e 100644 --- a/scripts/client/event.js +++ b/scripts/client/event.js @@ -144,9 +144,7 @@ function onElementStreamIn(event, element) { function onLocalPlayerExitedVehicle(event, vehicle, seat) { logToConsole(LOG_DEBUG, `[VRR.Event] Local player exited vehicle`); - if(areServerElementsSupported()) { - sendNetworkEventToServer("vrr.onPlayerExitVehicle", getVehicleForNetworkEvent(vehicle), seat); - } + sendNetworkEventToServer("vrr.onPlayerExitVehicle", getVehicleForNetworkEvent(vehicle), seat); if(inVehicleSeat) { parkedVehiclePosition = false; @@ -159,17 +157,13 @@ function onLocalPlayerExitedVehicle(event, vehicle, seat) { function onLocalPlayerEnteredVehicle(event, vehicle, seat) { logToConsole(LOG_DEBUG, `[VRR.Event] Local player entered vehicle`); - if(areServerElementsSupported()) { - sendNetworkEventToServer("vrr.onPlayerEnterVehicle", getVehicleForNetworkEvent(vehicle), seat); + sendNetworkEventToServer("vrr.onPlayerEnterVehicle", getVehicleForNetworkEvent(vehicle), seat); - if(inVehicleSeat == 0) { - if(inVehicle.owner != -1) { - inVehicle.engine = false; - if(!inVehicle.engine) { - parkedVehiclePosition = inVehicle.position; - parkedVehicleHeading = inVehicle.heading; - } - } + if(inVehicleSeat == 0) { + inVehicle.engine = false; + if(!inVehicle.engine) { + parkedVehiclePosition = inVehicle.position; + parkedVehicleHeading = inVehicle.heading; } } } From c8d8a84c5d5174140aed7a69b1299cf91d1f2aa5 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 9 Mar 2022 02:50:19 -0600 Subject: [PATCH 03/16] Fix server enter veh event for IV --- scripts/client/house.js | 6 +- scripts/server/event.js | 351 +++++++++++++++++++--------------------- 2 files changed, 172 insertions(+), 185 deletions(-) diff --git a/scripts/client/house.js b/scripts/client/house.js index aca1deca..19631aad 100644 --- a/scripts/client/house.js +++ b/scripts/client/house.js @@ -44,8 +44,8 @@ function receiveHouseFromServer(houseId, entrancePosition, blipModel, pickupMode } } } else { + let tempHouseData = new HouseData(houseId, entrancePosition, blipModel, pickupModel, hasInterior, hasItems); if(blipModel != -1) { - let tempHouseData = new HouseData(houseId, entrancePosition, blipModel, pickupModel, hasInterior, hasItems); let blipId = natives.addBlipForCoord(entrancePosition); if(blipId) { tempHouseData.blipId = blipId; @@ -53,9 +53,9 @@ function receiveHouseFromServer(houseId, entrancePosition, blipModel, pickupMode natives.setBlipMarkerLongDistance(blipId, false); //natives.changeBlipNameFromAscii(blipId, `${name.substr(0, 24)}${(name.length > 24) ? " ...": ""}`); } - houses.push(tempHouseData); - setAllHouseDataIndexes(); } + houses.push(tempHouseData); + setAllHouseDataIndexes(); } } } diff --git a/scripts/server/event.js b/scripts/server/event.js index eb0b6294..b075a17a 100644 --- a/scripts/server/event.js +++ b/scripts/server/event.js @@ -240,131 +240,115 @@ async function onPlayerEnteredVehicle(client, clientVehicle, seat) { return false; } - if(client.player == null) { + let vehicle = null; + + if(getGame() == VRR_GAME_GTA_IV) { + vehicle = getVehicleFromIVNetworkId(clientVehicle); + } else { + if(client.player == null) { + return false; + } + + await waitUntil(() => client != null && client.player != null && client.player.vehicle != null); + + vehicle = client.player.vehicle; + } + + if(!getVehicleData(vehicle)) { return false; } - await waitUntil(() => client != null && client.player != null && client.player.vehicle != null); - //setTimeout(function() { - //if(client.player.vehicle == null) { - // onPlayerEnteredVehicle(client, clientVehicle, seat); - //} + logToConsole(LOG_DEBUG, `[VRR.Event] ${getPlayerDisplayForConsole(client)} entered a ${getVehicleName(vehicle)} (ID: ${vehicle.getData("vrr.dataSlot")}, Database ID: ${getVehicleData(vehicle).databaseId})`); - let vehicle = client.player.vehicle; + getPlayerData(client).lastVehicle = vehicle; + getVehicleData(vehicle).lastActiveTime = getCurrentUnixTimestamp(); - //if(vehicle.syncer != client.index) { - // if(getPlayerVehicleSeat(client) == VRR_VEHSEAT_DRIVER) { - // vehicle.setSyncer(client, true); - // } - //} + if(getPlayerVehicleSeat(client) == VRR_VEHSEAT_DRIVER) { + vehicle.engine = getVehicleData(vehicle).engine; - if(vehicle.owner != -1) { - return false; - } - - if(!getVehicleData(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})`); - - getPlayerData(client).lastVehicle = vehicle; - getVehicleData(vehicle).lastActiveTime = getCurrentUnixTimestamp(); - - if(getPlayerVehicleSeat(client) == VRR_VEHSEAT_DRIVER) { - vehicle.engine = getVehicleData(vehicle).engine; - - if(getVehicleData(vehicle).buyPrice > 0) { - messagePlayerAlert(client, getLocaleString(client, "VehicleForSale", getVehicleName(vehicle), `{ALTCOLOUR}$${makeLargeNumberReadable(getVehicleData(vehicle).buyPrice)}{MAINCOLOUR}`, `{ALTCOLOUR}/vehbuy{MAINCOLOUR}`)); + if(getVehicleData(vehicle).buyPrice > 0) { + 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, getLocaleString(client, "VehicleForRent", getVehicleName(vehicle), `{ALTCOLOUR}$${makeLargeNumberReadable(getVehicleData(vehicle).rentPrice)}{MAINCOLOUR}`, `{ALTCOLOUR}/vehrent{MAINCOLOUR}`)); resetVehiclePosition(vehicle); - } else if(getVehicleData(vehicle).rentPrice > 0) { - if(getVehicleData(vehicle).rentedBy != client) { - messagePlayerAlert(client, getLocaleString(client, "VehicleForRent", getVehicleName(vehicle), `{ALTCOLOUR}$${makeLargeNumberReadable(getVehicleData(vehicle).rentPrice)}{MAINCOLOUR}`, `{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.`); - } } else { - let ownerName = "Nobody"; - let ownerType = "None"; - ownerType = toLowerCase(getVehicleOwnerTypeText(getVehicleData(vehicle).ownerType)); - switch(getVehicleData(vehicle).ownerType) { - case VRR_VEHOWNER_CLAN: - ownerName = getClanData(getClanIdFromDatabaseId(getVehicleData(vehicle).ownerId)).name; - ownerType = "clan"; - break; - - case VRR_VEHOWNER_JOB: - ownerName = getJobData(getJobIdFromDatabaseId(getVehicleData(vehicle).ownerId)).name; - ownerType = "job"; - break; - - case VRR_VEHOWNER_PLAYER: - let subAccountData = loadSubAccountFromId(getVehicleData(vehicle).ownerId); - ownerName = `${subAccountData.firstName} ${subAccountData.lastName}`; - ownerType = "player"; - break; - - case VRR_VEHOWNER_BIZ: - ownerName = getBusinessData(getVehicleData(vehicle).ownerId).name; - ownerType = "business"; - break; - - default: - break; - } - messagePlayerAlert(client, `This ${getVehicleName(vehicle)} belongs to {ALTCOLOUR}${ownerName} (${ownerType})`); + 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.`); } + } else { + let ownerName = "Nobody"; + let ownerType = "None"; + ownerType = toLowerCase(getVehicleOwnerTypeText(getVehicleData(vehicle).ownerType)); + switch(getVehicleData(vehicle).ownerType) { + case VRR_VEHOWNER_CLAN: + ownerName = getClanData(getClanIdFromDatabaseId(getVehicleData(vehicle).ownerId)).name; + ownerType = "clan"; + break; - if(!getVehicleData(vehicle).engine) { - 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`); - } + case VRR_VEHOWNER_JOB: + ownerName = getJobData(getJobIdFromDatabaseId(getVehicleData(vehicle).ownerId)).name; + ownerType = "job"; + break; + + case VRR_VEHOWNER_PLAYER: + let subAccountData = loadSubAccountFromId(getVehicleData(vehicle).ownerId); + ownerName = `${subAccountData.firstName} ${subAccountData.lastName}`; + ownerType = "player"; + break; + + case VRR_VEHOWNER_BIZ: + ownerName = getBusinessData(getVehicleData(vehicle).ownerId).name; + ownerType = "business"; + break; + + default: + break; + } + messagePlayerAlert(client, `This ${getVehicleName(vehicle)} belongs to {ALTCOLOUR}${ownerName} (${ownerType})`); + } + + if(!getVehicleData(vehicle).engine) { + 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 and you don't have the keys to start it`); - + messagePlayerAlert(client, `This ${getVehicleName(vehicle)}'s engine is off. Use /engine to start it`); } - } - resetVehiclePosition(vehicle); - } + } else { + messagePlayerAlert(client, `This ${getVehicleName(vehicle)}'s engine is off and you don't have the keys to start it`); - let currentSubAccount = getPlayerCurrentSubAccount(client); - - if(isPlayerWorking(client)) { - if(getVehicleData(vehicle).ownerType == VRR_VEHOWNER_JOB) { - if(getVehicleData(vehicle).ownerId == getPlayerCurrentSubAccount(client).job) { - getPlayerCurrentSubAccount(client).lastJobVehicle = vehicle; - messagePlayerInfo(client, `Use /startroute to start working in this vehicle`); - } } } + resetVehiclePosition(vehicle); + } - if(isPlayerWorking(client)) { - if(isPlayerOnJobRoute(client)) { - if(vehicle == getPlayerJobRouteVehicle(client)) { - stopReturnToJobVehicleCountdown(client); - } + let currentSubAccount = getPlayerCurrentSubAccount(client); + + if(isPlayerWorking(client)) { + if(getVehicleData(vehicle).ownerType == VRR_VEHOWNER_JOB) { + if(getVehicleData(vehicle).ownerId == getPlayerCurrentSubAccount(client).job) { + getPlayerCurrentSubAccount(client).lastJobVehicle = vehicle; + messagePlayerInfo(client, `Use /startroute to start working in this vehicle`); } } } - if(getVehicleData(vehicle).streamingRadioStation != -1) { - if(getPlayerData(client).streamingRadioStation != getVehicleData(vehicle).streamingRadioStation) { - playRadioStreamForPlayer(client, radioStations[getVehicleData(vehicle).streamingRadioStation].url, true, getPlayerStreamingRadioVolume(client)); + if(isPlayerWorking(client)) { + if(isPlayerOnJobRoute(client)) { + if(vehicle == getPlayerJobRouteVehicle(client)) { + stopReturnToJobVehicleCountdown(client); + } } } - //}, client.ping+500); + } + + if(getVehicleData(vehicle).streamingRadioStation != -1) { + if(getPlayerData(client).streamingRadioStation != getVehicleData(vehicle).streamingRadioStation) { + playRadioStreamForPlayer(client, radioStations[getVehicleData(vehicle).streamingRadioStation].url, true, getPlayerStreamingRadioVolume(client)); + } + } } // =========================================================================== @@ -492,120 +476,123 @@ function onPlayerSpawn(client) { return false; } - //logToConsole(LOG_DEBUG, `[VRR.Event] Setting player skin for ${getPlayerDisplayForConsole(client)} to ${getPlayerCurrentSubAccount(client).skin}`); - //setPlayerSkin(client, getPlayerCurrentSubAccount(client).skin); - - //if(getPlayerData(client).pedState != VRR_PEDSTATE_READY) { + if(isCustomCameraSupported()) { restorePlayerCamera(client); + } - logToConsole(LOG_DEBUG, `[VRR.Event] Storing ${getPlayerDisplayForConsole(client)} ped in client data `); + logToConsole(LOG_DEBUG, `[VRR.Event] Storing ${getPlayerDisplayForConsole(client)} ped in client data `); + if(areServerElementsSupported()) { getPlayerData(client).ped = client.player; + } - logToConsole(LOG_DEBUG, `[VRR.Event] Sending ${getPlayerDisplayForConsole(client)} the 'now playing as' message`); - messagePlayerAlert(client, `You are now playing as: {businessBlue}${getCharacterFullName(client)}`, getColourByName("white")); - messagePlayerNormal(client, "This server is in early development and may restart at any time for updates.", getColourByName("orange")); - messagePlayerNormal(client, "Please report any bugs using /bug and suggestions using /idea", getColourByName("yellow")); + logToConsole(LOG_DEBUG, `[VRR.Event] Sending ${getPlayerDisplayForConsole(client)} the 'now playing as' message`); + messagePlayerAlert(client, `You are now playing as: {businessBlue}${getCharacterFullName(client)}`, getColourByName("white")); + messagePlayerNormal(client, "This server is in early development and may restart at any time for updates.", getColourByName("orange")); + messagePlayerNormal(client, "Please report any bugs using /bug and suggestions using /idea", getColourByName("yellow")); - logToConsole(LOG_DEBUG, `[VRR.Event] Updating spawned state for ${getPlayerDisplayForConsole(client)} to true`); - updatePlayerSpawnedState(client, true); + logToConsole(LOG_DEBUG, `[VRR.Event] Updating spawned state for ${getPlayerDisplayForConsole(client)} to true`); + updatePlayerSpawnedState(client, true); - logToConsole(LOG_DEBUG, `[VRR.Event] Setting player interior for ${getPlayerDisplayForConsole(client)} to ${getPlayerCurrentSubAccount(client).interior}`); - setPlayerInterior(client, getPlayerCurrentSubAccount(client).interior); + logToConsole(LOG_DEBUG, `[VRR.Event] Setting player interior for ${getPlayerDisplayForConsole(client)} to ${getPlayerCurrentSubAccount(client).interior}`); + setPlayerInterior(client, getPlayerCurrentSubAccount(client).interior); - logToConsole(LOG_DEBUG, `[VRR.Event] Setting player dimension for ${getPlayerDisplayForConsole(client)} to ${getPlayerCurrentSubAccount(client).dimension}`); - setPlayerDimension(client, getPlayerCurrentSubAccount(client).dimension); + logToConsole(LOG_DEBUG, `[VRR.Event] Setting player dimension for ${getPlayerDisplayForConsole(client)} to ${getPlayerCurrentSubAccount(client).dimension}`); + setPlayerDimension(client, getPlayerCurrentSubAccount(client).dimension); - //if(getPlayerCurrentSubAccount(client).interior != 0 || getPlayerCurrentSubAccount(client).dimension != 0) { - // updateAllInteriorVehiclesForPlayer(client, getPlayerCurrentSubAccount(client).interior, getPlayerCurrentSubAccount(client).dimension); - //} + //if(getPlayerCurrentSubAccount(client).interior != 0 || getPlayerCurrentSubAccount(client).dimension != 0) { + // updateAllInteriorVehiclesForPlayer(client, getPlayerCurrentSubAccount(client).interior, getPlayerCurrentSubAccount(client).dimension); + //} - logToConsole(LOG_DEBUG, `[VRR.Event] Setting player health for ${getPlayerDisplayForConsole(client)} to ${getPlayerCurrentSubAccount(client).health}`); - setPlayerHealth(client, getPlayerCurrentSubAccount(client).health); + logToConsole(LOG_DEBUG, `[VRR.Event] Setting player health for ${getPlayerDisplayForConsole(client)} to ${getPlayerCurrentSubAccount(client).health}`); + setPlayerHealth(client, getPlayerCurrentSubAccount(client).health); - logToConsole(LOG_DEBUG, `[VRR.Event] Setting player armour for ${getPlayerDisplayForConsole(client)} to ${getPlayerCurrentSubAccount(client).armour}`); - setPlayerArmour(client, getPlayerCurrentSubAccount(client).armour); + logToConsole(LOG_DEBUG, `[VRR.Event] Setting player armour for ${getPlayerDisplayForConsole(client)} to ${getPlayerCurrentSubAccount(client).armour}`); + setPlayerArmour(client, getPlayerCurrentSubAccount(client).armour); - logToConsole(LOG_DEBUG, `[VRR.Event] Sending ${getPlayerDisplayForConsole(client)}'s job type to their client (${getJobIndexFromDatabaseId(getPlayerCurrentSubAccount(client))})`); - sendPlayerJobType(client, getPlayerCurrentSubAccount(client).job); + logToConsole(LOG_DEBUG, `[VRR.Event] Sending ${getPlayerDisplayForConsole(client)}'s job type to their client (${getJobIndexFromDatabaseId(getPlayerCurrentSubAccount(client))})`); + sendPlayerJobType(client, getPlayerCurrentSubAccount(client).job); - logToConsole(LOG_DEBUG, `[VRR.Event] Enabling all rendering states for ${getPlayerDisplayForConsole(client)}`); - setPlayer2DRendering(client, true, true, true, true, true, true); + logToConsole(LOG_DEBUG, `[VRR.Event] Enabling all rendering states for ${getPlayerDisplayForConsole(client)}`); + setPlayer2DRendering(client, true, true, true, true, true, true); - logToConsole(LOG_DEBUG, `[VRR.Event] Sending snow states to ${getPlayerDisplayForConsole(client)}`); + logToConsole(LOG_DEBUG, `[VRR.Event] Sending snow states to ${getPlayerDisplayForConsole(client)}`); + if(isSnowSupported()) { updatePlayerSnowState(client); + } - if(getServerGame() == VRR_GAME_GTA_SA) { - logToConsole(LOG_DEBUG, `[VRR.Event] Setting player walk and fightstyle for ${getPlayerDisplayForConsole(client)}`); - setEntityData(client.player, "vrr.walkStyle", getPlayerCurrentSubAccount(client).walkStyle, true); + if(areServerElementsSupported() && getServerGame() == VRR_GAME_GTA_SA) { + logToConsole(LOG_DEBUG, `[VRR.Event] Setting player walk and fightstyle for ${getPlayerDisplayForConsole(client)}`); + setEntityData(client.player, "vrr.walkStyle", getPlayerCurrentSubAccount(client).walkStyle, true); - setPlayerFightStyle(client, getPlayerCurrentSubAccount(client).fightStyle); - } + setPlayerFightStyle(client, getPlayerCurrentSubAccount(client).fightStyle); + } - logToConsole(LOG_DEBUG, `[VRR.Event] Updating logo state for ${getPlayerDisplayForConsole(client)}`); - if(getServerConfig().showLogo && doesPlayerHaveLogoEnabled(client)) { - updatePlayerShowLogoState(client, true); - } + logToConsole(LOG_DEBUG, `[VRR.Event] Updating logo state for ${getPlayerDisplayForConsole(client)}`); + if(getServerConfig().showLogo && doesPlayerHaveLogoEnabled(client)) { + updatePlayerShowLogoState(client, true); + } - logToConsole(LOG_DEBUG, `[VRR.Event] Caching ${getPlayerDisplayForConsole(client)}'s hotbar items`); - cachePlayerHotBarItems(client); + logToConsole(LOG_DEBUG, `[VRR.Event] Caching ${getPlayerDisplayForConsole(client)}'s hotbar items`); + cachePlayerHotBarItems(client); - logToConsole(LOG_DEBUG, `[VRR.Event] Syncing ${getPlayerDisplayForConsole(client)}'s hotbar`); - updatePlayerHotBar(client); + logToConsole(LOG_DEBUG, `[VRR.Event] Syncing ${getPlayerDisplayForConsole(client)}'s hotbar`); + updatePlayerHotBar(client); - logToConsole(LOG_DEBUG, `[VRR.Event] Setting ${getPlayerDisplayForConsole(client)}'s switchchar state to false`); - getPlayerData(client).switchingCharacter = false; + logToConsole(LOG_DEBUG, `[VRR.Event] Setting ${getPlayerDisplayForConsole(client)}'s switchchar state to false`); + getPlayerData(client).switchingCharacter = false; - if(!doesPlayerHaveKeyBindsDisabled(client) && doesPlayerHaveKeyBindForCommand(client, "enter")) { - let keyId = getPlayerKeyBindForCommand(client, "enter"); - logToConsole(LOG_DEBUG, `[VRR.Event] Sending custom enter property key ID (${keyId.key}, ${toUpperCase(getKeyNameFromId(keyId.key))}) to ${getPlayerDisplayForConsole(client)}`); - sendPlayerEnterPropertyKey(client, keyId.key); - } + if(!doesPlayerHaveKeyBindsDisabled(client) && doesPlayerHaveKeyBindForCommand(client, "enter")) { + let keyId = getPlayerKeyBindForCommand(client, "enter"); + logToConsole(LOG_DEBUG, `[VRR.Event] Sending custom enter property key ID (${keyId.key}, ${toUpperCase(getKeyNameFromId(keyId.key))}) to ${getPlayerDisplayForConsole(client)}`); + sendPlayerEnterPropertyKey(client, keyId.key); + } - //if(isGTAIV()) { - // setEntityData(client.player, "vrr.bodyPartHair", getPlayerCurrentSubAccount(client).bodyParts.hair, true); - // setEntityData(client.player, "vrr.bodyPartHead", getPlayerCurrentSubAccount(client).bodyParts.head, true); - // setEntityData(client.player, "vrr.bodyPartUpper", getPlayerCurrentSubAccount(client).bodyParts.upper, true); - // setEntityData(client.player, "vrr.bodyPartLower", getPlayerCurrentSubAccount(client).bodyParts.lower, true); - // setEntityData(client.player, "vrr.bodyPropHair", getPlayerCurrentSubAccount(client).bodyProps.hair, true); - // setEntityData(client.player, "vrr.bodyPropEyes", getPlayerCurrentSubAccount(client).bodyProps.eyes, true); - // setEntityData(client.player, "vrr.bodyPartHead", getPlayerCurrentSubAccount(client).bodyProps.head, true); - // setEntityData(client.player, "vrr.bodyPartLeftHand", getPlayerCurrentSubAccount(client).bodyProps.leftHand, true); - // setEntityData(client.player, "vrr.bodyPartRightHand", getPlayerCurrentSubAccount(client).bodyProps.rightHand, true); - // setEntityData(client.player, "vrr.bodyPartLeftWrist", getPlayerCurrentSubAccount(client).bodyProps.leftWrist, true); - // setEntityData(client.player, "vrr.bodyPartRightWrist", getPlayerCurrentSubAccount(client).bodyProps.rightWrist, true); - // setEntityData(client.player, "vrr.bodyPartHip", getPlayerCurrentSubAccount(client).bodyProps.hip, true); - // setEntityData(client.player, "vrr.bodyPartLeftFoot", getPlayerCurrentSubAccount(client).bodyProps.leftFoot, true); - // setEntityData(client.player, "vrr.bodyPartRightFoot", getPlayerCurrentSubAccount(client).bodyProps.rightFoot, true); - //} + //if(isGTAIV()) { + // setEntityData(client.player, "vrr.bodyPartHair", getPlayerCurrentSubAccount(client).bodyParts.hair, true); + // setEntityData(client.player, "vrr.bodyPartHead", getPlayerCurrentSubAccount(client).bodyParts.head, true); + // setEntityData(client.player, "vrr.bodyPartUpper", getPlayerCurrentSubAccount(client).bodyParts.upper, true); + // setEntityData(client.player, "vrr.bodyPartLower", getPlayerCurrentSubAccount(client).bodyParts.lower, true); + // setEntityData(client.player, "vrr.bodyPropHair", getPlayerCurrentSubAccount(client).bodyProps.hair, true); + // setEntityData(client.player, "vrr.bodyPropEyes", getPlayerCurrentSubAccount(client).bodyProps.eyes, true); + // setEntityData(client.player, "vrr.bodyPartHead", getPlayerCurrentSubAccount(client).bodyProps.head, true); + // setEntityData(client.player, "vrr.bodyPartLeftHand", getPlayerCurrentSubAccount(client).bodyProps.leftHand, true); + // setEntityData(client.player, "vrr.bodyPartRightHand", getPlayerCurrentSubAccount(client).bodyProps.rightHand, true); + // setEntityData(client.player, "vrr.bodyPartLeftWrist", getPlayerCurrentSubAccount(client).bodyProps.leftWrist, true); + // setEntityData(client.player, "vrr.bodyPartRightWrist", getPlayerCurrentSubAccount(client).bodyProps.rightWrist, true); + // setEntityData(client.player, "vrr.bodyPartHip", getPlayerCurrentSubAccount(client).bodyProps.hip, true); + // setEntityData(client.player, "vrr.bodyPartLeftFoot", getPlayerCurrentSubAccount(client).bodyProps.leftFoot, true); + // setEntityData(client.player, "vrr.bodyPartRightFoot", getPlayerCurrentSubAccount(client).bodyProps.rightFoot, true); + //} - if(isGTAIV()) { - sendPlayerPedPartsAndProps(client); - } + if(isGTAIV()) { + //sendPlayerPedPartsAndProps(client); + } - logToConsole(LOG_DEBUG, `[VRR.Event] Setting ${getPlayerDisplayForConsole(client)}'s ped state to ready`); - getPlayerData(client).pedState = VRR_PEDSTATE_READY; + logToConsole(LOG_DEBUG, `[VRR.Event] Setting ${getPlayerDisplayForConsole(client)}'s ped state to ready`); + getPlayerData(client).pedState = VRR_PEDSTATE_READY; + if(areServerElementsSupported()) { syncPlayerProperties(client); //setTimeout(function() { // syncPlayerProperties(client); //}, 1000); + } - logToConsole(LOG_DEBUG, `[VRR.Event] Syncing ${getPlayerDisplayForConsole(client)}'s cash ${getPlayerCurrentSubAccount(client).cash}`); - updatePlayerCash(client); + logToConsole(LOG_DEBUG, `[VRR.Event] Syncing ${getPlayerDisplayForConsole(client)}'s cash ${getPlayerCurrentSubAccount(client).cash}`); + updatePlayerCash(client); - logToConsole(LOG_DEBUG, `[VRR.Event] Updating all player name tags`); - updateAllPlayerNameTags(); + logToConsole(LOG_DEBUG, `[VRR.Event] Updating all player name tags`); + updateAllPlayerNameTags(); - if(!areServerElementsSupported()) { - sendAllBusinessEntrancesToPlayer(client); - sendAllHouseEntrancesToPlayer(client); - //sendAllJobLocationsToPlayer(client); - } + if(!areServerElementsSupported()) { + sendAllBusinessesToPlayer(client); + sendAllHousesToPlayer(client); + //sendAllJobLocationsToPlayer(client); requestPlayerPedNetworkId(client); + } - getPlayerData(client).payDayTickStart = sdl.ticks; - //} + getPlayerData(client).payDayTickStart = sdl.ticks; } // =========================================================================== From f19e09cd41c6628803419d8e44fcb30e6e1cebb8 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 9 Mar 2022 02:50:38 -0600 Subject: [PATCH 04/16] Check if has server elements when spawning veh --- scripts/server/native/connected.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/server/native/connected.js b/scripts/server/native/connected.js index 1b0f354e..6c6a7393 100644 --- a/scripts/server/native/connected.js +++ b/scripts/server/native/connected.js @@ -526,8 +526,10 @@ function setVehicleColours(vehicle, colour1, colour2, colour3 = -1, colour4 = -1 // =========================================================================== -function createGameVehicle(modelIndex, position, heading) { - return game.createVehicle(getGameConfig().vehicles[getGame()][modelIndex][0], position, heading); +function createGameVehicle(modelIndex, position, heading, toClient = null) { + if(areServerElementsSupported()) { + return game.createVehicle(getGameConfig().vehicles[getGame()][modelIndex][0], position, heading); + } } // =========================================================================== From a78ec09d1351d18c55bb678861c6362fc0d85caa Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 9 Mar 2022 02:50:58 -0600 Subject: [PATCH 05/16] Add IV veh ID to get veh data util --- scripts/server/vehicle.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/scripts/server/vehicle.js b/scripts/server/vehicle.js index a222665c..097f9ad6 100644 --- a/scripts/server/vehicle.js +++ b/scripts/server/vehicle.js @@ -174,13 +174,15 @@ function spawnAllVehicles() { * @return {VehicleData} The vehicles's data (class instance) */ function getVehicleData(vehicle) { - if(isVehicleObject(vehicle)) { - let dataIndex = getEntityData(vehicle, "vrr.dataSlot"); - if(typeof getServerData().vehicles[dataIndex] != "undefined") { - return getServerData().vehicles[dataIndex]; + if(getGame() != VRR_GAME_GTA_IV) { + if(isVehicleObject(vehicle)) { + let dataIndex = getEntityData(vehicle, "vrr.dataSlot"); + if(typeof getServerData().vehicles[dataIndex] != "undefined") { + return getServerData().vehicles[dataIndex]; + } } } else { - + return getServerVehicles().find((v) => v.ivNetworkId == vehicle); } return false; @@ -1403,7 +1405,11 @@ function createPermanentVehicle(modelIndex, position, heading, interior = 0, dim } let slot = getServerData().vehicles.push(tempVehicleData); - setEntityData(vehicle, "vrr.dataSlot", slot-1, false); + + if(areServerElementsSupported()) { + setEntityData(vehicle, "vrr.dataSlot", slot-1, false); + } + return vehicle; } From a9045cab6894cdbd4d80c64d110bd92201045851 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 9 Mar 2022 02:51:27 -0600 Subject: [PATCH 06/16] Sync plr veh + change plr sync event names --- scripts/server/client.js | 41 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/scripts/server/client.js b/scripts/server/client.js index 565fd7b7..36e477c8 100644 --- a/scripts/server/client.js +++ b/scripts/server/client.js @@ -68,9 +68,8 @@ function addAllNetworkHandlers() { addNetworkEventHandler("vrr.weaponDamage", playerDamagedByPlayer); // Misc - addNetworkEventHandler("vrr.player.position", updatePositionInPlayerData); - addNetworkEventHandler("vrr.player.heading", updateHeadingInPlayerData); - addNetworkEventHandler("vrr.player.lookat", setPlayerHeadLookPosition); + addNetworkEventHandler("vrr.plr.pos", updatePositionInPlayerData); + addNetworkEventHandler("vrr.plr.rot", updateHeadingInPlayerData); addNetworkEventHandler("vrr.skinSelected", playerFinishedSkinSelection); addNetworkEventHandler("vrr.clientInfo", updateConnectionLogOnClientInfoReceive); addNetworkEventHandler("vrr.vehBuyState", receiveVehiclePurchaseStateUpdateFromClient); @@ -716,6 +715,18 @@ function updateHeadingInPlayerData(client, heading) { // =========================================================================== +function updatePositionInVehicleData(client, vehicle, position) { + getVehicleData(vehicle).syncPosition = position; +} + +// =========================================================================== + +function updateHeadingInVehicleData(client, vehicle, heading) { + getVehicleData(vehicle).syncHeading = heading; +} + +// =========================================================================== + function forcePlayerIntoSkinSelect(client) { if(getGameConfig().skinChangePosition[getServerGame()].length > 0) { getPlayerData(client).returnToPosition = getPlayerPosition(client); @@ -1023,14 +1034,6 @@ function hideAllPlayerGUI(client) { // =========================================================================== -function setPlayerHeadLookPosition(client, position) { - if(client.player != null) { - setEntityData(client.player, "vrr.headLook", position, true); - } -} - -// =========================================================================== - function requestClientInfo(client) { sendNetworkEventToPlayer("vrr.clientInfo", client); } @@ -1111,35 +1114,31 @@ function setPlayerInfiniteRun(client, state) { // ========================================================================== -function sendBusinessEntranceToPlayer(client, businessId, name, entrancePosition, blipModel, pickupModel, hasInterior, hasItems) { +function sendBusinessToPlayer(client, businessId, name, entrancePosition, blipModel, pickupModel, hasInterior, hasItems) { sendNetworkEventToPlayer("vrr.business", client, businessId, name, entrancePosition, blipModel, pickupModel, hasInterior, hasItems); } // ========================================================================== -function sendHouseEntranceToPlayer(client, houseId, entrancePosition, blipModel, pickupModel, hasInterior) { +function sendHouseToPlayer(client, houseId, entrancePosition, blipModel, pickupModel, hasInterior) { sendNetworkEventToPlayer("vrr.house", client, houseId, entrancePosition, blipModel, pickupModel, hasInterior); } // ========================================================================== -function sendAllBusinessEntrancesToPlayer(client) { +function sendAllBusinessesToPlayer(client) { let businesses = getServerData().businesses; for(let i in businesses) { - if(businesses[i].entranceBlipModel > 0) { - sendBusinessEntranceToPlayer(client, businesses[i].index, businesses[i].name, businesses[i].entrancePosition, businesses[i].entranceBlipModel, businesses[i].entrancePickupModel, businesses[i].hasInterior, false); - } + sendBusinessToPlayer(client, businesses[i].index, businesses[i].name, businesses[i].entrancePosition, businesses[i].entranceBlipModel, businesses[i].entrancePickupModel, businesses[i].hasInterior, false); } } // ========================================================================== -function sendAllHouseEntrancesToPlayer(client) { +function sendAllHousesToPlayer(client) { let houses = getServerData().houses; for(let i in houses) { - if(houses[i].entranceBlipModel > 0) { - sendBusinessEntranceToPlayer(client, businesses[i].index, houses[i].entrancePosition, houses[i].entranceBlipModel, houses[i].entrancePickupModel, houses[i].hasInterior); - } + sendHouseToPlayer(client, houses[i].index, houses[i].entrancePosition, houses[i].entranceBlipModel, houses[i].entrancePickupModel, houses[i].hasInterior); } } From b263c5a3e0fcfb8d400cba806364d31a1d9599cf Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 9 Mar 2022 02:51:37 -0600 Subject: [PATCH 07/16] Add vehdata class members for IV --- scripts/server/class.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/server/class.js b/scripts/server/class.js index a4d92a13..4971aa5c 100644 --- a/scripts/server/class.js +++ b/scripts/server/class.js @@ -864,6 +864,11 @@ class VehicleData { this.index = -1; this.needsSaved = false; + // GTA IV + this.ivNetworkId = -1; + this.syncPosition = toVector3(0.0, 0.0, 0.0); + this.syncHeading = 0.0; + // Ownership this.ownerType = VRR_VEHOWNER_NONE; this.ownerId = 0; From 40281d658a302e70900ded79c1a0ed6d64d60bce Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 9 Mar 2022 02:51:53 -0600 Subject: [PATCH 08/16] Rename send biz/house utils --- scripts/server/business.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/server/business.js b/scripts/server/business.js index 9335ea09..b6bb7d66 100644 --- a/scripts/server/business.js +++ b/scripts/server/business.js @@ -1358,7 +1358,7 @@ function createBusinessEntrancePickup(businessId) { updateBusinessPickupLabelData(businessId); addToWorld(getBusinessData(businessId).entrancePickup); } else { - sendBusinessEntranceToPlayer(null, businessId, getBusinessData(businessId), getBusinessData(businessId).entrancePosition, getBusinessData(businessId).entranceBlipModel, getBusinessData(businessId).entrancePickupModel, getBusinessData(businessId).hasInterior, false); + sendBusinessToPlayer(null, businessId, getBusinessData(businessId), getBusinessData(businessId).entrancePosition, getBusinessData(businessId).entranceBlipModel, getBusinessData(businessId).entrancePickupModel, getBusinessData(businessId).hasInterior, false); } } } @@ -1389,7 +1389,7 @@ function createBusinessEntranceBlip(businessId) { setElementDimension(getBusinessData(businessId).entranceBlip, getBusinessData(businessId).entranceDimension); addToWorld(getBusinessData(businessId).entranceBlip); } else { - sendBusinessEntranceToPlayer(null, businessId, getBusinessData(businessId).name, getBusinessData(businessId).entrancePosition, blipModelId, getBusinessData(businessId).entrancePickupModel, getBusinessData(businessId).hasInterior, false); + sendBusinessToPlayer(null, businessId, getBusinessData(businessId).name, getBusinessData(businessId).entrancePosition, blipModelId, getBusinessData(businessId).entrancePickupModel, getBusinessData(businessId).hasInterior, false); } } } From dc127dfdd03670d462deb9dea81d6d983a987028 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 9 Mar 2022 02:52:06 -0600 Subject: [PATCH 09/16] Add ped parts/props sync event (unfinished) --- scripts/client/server.js | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/scripts/client/server.js b/scripts/client/server.js index 2bd4bf32..5410a2fb 100644 --- a/scripts/client/server.js +++ b/scripts/client/server.js @@ -107,6 +107,8 @@ function addAllNetworkHandlers() { addNetworkEventHandler("vrr.holdObject", makePedHoldObject); addNetworkEventHandler("vrr.playerPedId", sendLocalPlayerNetworkIdToServer); + + addNetworkEventHandler("vrr.ped", setLocalPlayerPedPartsAndProps); } // =========================================================================== @@ -259,18 +261,6 @@ function setElementCollisionsEnabled(elementId, state) { // =========================================================================== -function setLocalPlayerPedPartsAndProps(parts, props) { - for(let i in parts) { - localPlayer.changeBodyPart(parts[0], parts[1], parts[2]); - } - - for(let i in props) { - localPlayer.changeBodyProp(props[0], props[1]); - } -} - -// =========================================================================== - function setLocalPlayerArmour(armour) { if(typeof localPlayer.armour != "undefined") { localPlayer.armour = armour; From eea8ef7397755a017fa321b7f130c79249455629 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 9 Mar 2022 02:52:29 -0600 Subject: [PATCH 10/16] Rename sync net events + add svr element support checks --- scripts/client/sync.js | 49 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/scripts/client/sync.js b/scripts/client/sync.js index 2ffe01e3..b67e4da9 100644 --- a/scripts/client/sync.js +++ b/scripts/client/sync.js @@ -10,8 +10,13 @@ function processSync(event, deltaTime) { if(localPlayer != null) { if(!areServerElementsSupported()) { - sendNetworkEventToServer("vrr.player.position", localPlayer.position); - sendNetworkEventToServer("vrr.player.heading", localPlayer.heading); + sendNetworkEventToServer("vrr.plr.pos", localPlayer.position); + sendNetworkEventToServer("vrr.plr.rot", localPlayer.heading); + + if(localPlayer.vehicle != null) { + sendNetworkEventToServer("vrr.veh.pos", getVehicleForNetworkEvent(localPlayer.vehicle), localPlayer.vehicle.position); + sendNetworkEventToServer("vrr.veh.rot", getVehicleForNetworkEvent(localPlayer.vehicle), localPlayer.vehicle.heading); + } } if(localPlayer.health <= 0) { @@ -39,12 +44,20 @@ function setVehicleEngine(vehicleId, state) { // =========================================================================== function setVehicleLights(vehicleId, state) { + + if(getGame() != VRR_GAME_MAFIA_ONE) { if(!state) { getElementFromId(vehicleId).lightStatus = 2; } else { getElementFromId(vehicleId).lightStatus = 1; } + } else if(getGame() == VRR_GAME_GTA_IV) { + if(!state) { + natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 0)); + } else { + natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 1)); + } } else { if(!state) { getElementFromId(vehicleId).lights = false; @@ -63,6 +76,10 @@ function repairVehicle(syncId) { // =========================================================================== function syncVehicleProperties(vehicle) { + if(!areServerElementsSupported()) { + return false; + } + if(doesEntityDataExist(vehicle, "vrr.lights")) { let lightStatus = getEntityData(vehicle, "vrr.lights"); if(!lightStatus) { @@ -134,6 +151,10 @@ function syncVehicleProperties(vehicle) { // =========================================================================== function syncCivilianProperties(civilian) { + if(!areServerElementsSupported()) { + return false; + } + if(getGame() == VRR_GAME_GTA_III) { if(doesEntityDataExist(civilian, "vrr.scale")) { let scaleFactor = getEntityData(civilian, "vrr.scale"); @@ -226,6 +247,10 @@ function syncCivilianProperties(civilian) { // =========================================================================== function syncPlayerProperties(player) { + if(!areServerElementsSupported()) { + return false; + } + if(getGame() == VRR_GAME_GTA_III) { if(doesEntityDataExist(player, "vrr.scale")) { let scaleFactor = getEntityData(player, "vrr.scale"); @@ -335,6 +360,10 @@ function syncPlayerProperties(player) { // =========================================================================== function syncObjectProperties(object) { + if(!areServerElementsSupported()) { + return false; + } + if(getGame() == VRR_GAME_GTA_III || getGame() == VRR_GAME_GTA_VC) { if(doesEntityDataExist(object, "vrr.scale")) { let scaleFactor = getEntityData(object, "vrr.scale"); @@ -351,6 +380,10 @@ function syncObjectProperties(object) { // =========================================================================== function syncElementProperties(element) { + if(!areServerElementsSupported()) { + return false; + } + if(doesEntityDataExist(element, "vrr.interior")) { if(typeof element.interior != "undefined") { element.interior = getEntityData(element, "vrr.interior"); @@ -389,4 +422,16 @@ function receiveHouseFromServer(houseId, entrancePosition, blipModel, pickupMode } } +// =========================================================================== + +function setLocalPlayerPedPartsAndProps(parts, props) { + for(let i in parts) { + localPlayer.changeBodyPart(parts[i][0], parts[i][1], parts[i][2]); + } + + for(let j in props) { + localPlayer.changeBodyProp(props[j][0], props[j][1]); + } +} + // =========================================================================== \ No newline at end of file From 11976b4e655512b46d083cf2187aea722d3162cb Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 9 Mar 2022 02:52:40 -0600 Subject: [PATCH 11/16] Add net event veh util --- scripts/client/utilities.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scripts/client/utilities.js b/scripts/client/utilities.js index 64570a19..7bb7a926 100644 --- a/scripts/client/utilities.js +++ b/scripts/client/utilities.js @@ -683,9 +683,11 @@ function processLocalPlayerVehicleEntryExitHandling() { // =========================================================================== -function getVehicleForNetworkEvent(vehicleArg) { - // Soon this will also be used to get the IV vehicle via it's ID - return vehicleArg; +function getVehicleForNetworkEvent(vehicle) { + if(getGame() == VRR_GAME_GTA_IV) { + return natives.getNetworkIdFromVehicle(vehicle); + } + return vehicle; } // =========================================================================== From 1a3d875f78ed0e60959a0b0004b0019937c2057a Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 9 Mar 2022 05:16:43 -0600 Subject: [PATCH 12/16] Fix updating business blips for IV --- scripts/client/business.js | 67 +++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 22 deletions(-) diff --git a/scripts/client/business.js b/scripts/client/business.js index 3eb7aee8..48b74bb9 100644 --- a/scripts/client/business.js +++ b/scripts/client/business.js @@ -25,44 +25,60 @@ class BusinessData { function receiveBusinessFromServer(businessId, name, entrancePosition, blipModel, pickupModel, hasInterior, hasItems) { logToConsole(LOG_DEBUG, `[VRR.Business] Received business ${businessId} (${name}) from server`); + if(getGame() == VRR_GAME_GTA_IV) { if(getBusinessData(businessId) != false) { + let businessData = getBusinessData(businessId); + businessData.name = name; + businessData.entrancePosition = entrancePosition; + businessData.blipModel = blipModel; + businessData.pickupModel = pickupModel; + businessData.hasInterior = hasInterior; + businessData.hasItems = hasItems; + logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId} already exists. Checking blip ...`); if(blipModel == -1) { - logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been removed by the server`); - natives.removeBlipAndClearIndex(getBusinessData(businessId).blipId); - getBusinessData(businessId).blipId = -1; - //businesses.splice(getBusinessData(businessId).index, 1); - //setAllBusinessDataIndexes(); - } else { - logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been changed by the server`); - if(getBusinessData(businessId).blipId != -1) { - logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been modified by the server`); - natives.setBlipCoordinates(getBusinessData(businessId).blipId, getBusinessData(businessId).entrancePosition); - natives.changeBlipSprite(getBusinessData(businessId).blipId, getBusinessData(businessId).blipModel); - natives.changeBlipNameFromAscii(getBusinessData(businessId).blipId, `${name.substr(0, 24)}${(name.length > 24) ? " ...": ""}`); + if(businessData.blipId != -1) { + logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been removed by the server`); + natives.removeBlipAndClearIndex(getBusinessData(businessId).blipId); + businessData.blipId = -1; + //businesses.splice(businessData.index, 1); + //setAllBusinessDataIndexes(); + } else { + logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip is unchanged`); + } + } else { + if(businessData.blipId != -1) { + logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been changed by the server`); + natives.setBlipCoordinates(businessData.blipId, businessData.entrancePosition); + natives.changeBlipSprite(businessData.blipId, businessData.blipModel); + natives.setBlipMarkerLongDistance(businessData.blipId, true); + natives.changeBlipNameFromAscii(businessData.blipId, `${businessData.name.substr(0, 24)}${(businessData.name.length > 24) ? " ...": ""}`); } else { - logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been added by the server`); let blipId = natives.addBlipForCoord(entrancePosition); if(blipId) { - getBusinessData(businessId).blipId = blipId; - natives.changeBlipSprite(blipId, blipModel); - natives.setBlipMarkerLongDistance(blipId, false); + businessData.blipId = blipId; + natives.changeBlipSprite(businessData.blipId, businessData.blipModel); + natives.setBlipMarkerLongDistance(businessData.blipId, true); + natives.changeBlipNameFromAscii(businessData.blipId, `${businessData.name.substr(0, 24)}${(businessData.name.length > 24) ? " ...": ""}`); } + logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been added by the server (Model ${blipModel}, ID ${blipId})`); } } } else { logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId} doesn't exist. Adding ...`); let tempBusinessData = new BusinessData(businessId, name, entrancePosition, blipModel, pickupModel, hasInterior, hasItems); if(blipModel != -1) { - logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been added by the server`); let blipId = natives.addBlipForCoord(entrancePosition); if(blipId) { tempBusinessData.blipId = blipId; - natives.changeBlipSprite(blipId, blipModel); - natives.setBlipMarkerLongDistance(blipId, false); - natives.changeBlipNameFromAscii(blipId, `${name.substr(0, 24)}${(name.length > 24) ? " ...": ""}`); + natives.changeBlipSprite(tempBusinessData.blipId, blipModel); + natives.setBlipMarkerLongDistance(tempBusinessData.blipId, true); + natives.changeBlipNameFromAscii(tempBusinessData.blipId, `${name.substr(0, 24)}${(name.length > 24) ? " ...": ""}`); } + logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId}'s blip has been added by the server (Model ${blipModel}, ID ${blipId})`); + } else { + logToConsole(LOG_DEBUG, `[VRR.Business] Business ${businessId} has no blip.`); } businesses.push(tempBusinessData); setAllBusinessDataIndexes(); @@ -77,8 +93,15 @@ function receiveBusinessFromServer(businessId, name, entrancePosition, blipModel * @return {BusinessData} The business's data (class instance) */ function getBusinessData(businessId) { - let tempBusinessData = businesses.find((b) => b.businessId == businessId); - return (typeof tempBusinessData != "undefined") ? tempBusinessData : false; + //let tempBusinessData = businesses.find((b) => b.businessId == businessId); + //return (typeof tempBusinessData != "undefined") ? tempBusinessData[0] : false; + for(let i in businesses) { + if(businesses[i].businessId == businessId) { + return businesses[i]; + } + } + + return false; } // =========================================================================== From d33356b4c2b587ad23eae48f7d1642b97997a20b Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 9 Mar 2022 05:17:02 -0600 Subject: [PATCH 13/16] Add business arrow markers --- scripts/client/label.js | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/scripts/client/label.js b/scripts/client/label.js index d794b549..4f20d67a 100644 --- a/scripts/client/label.js +++ b/scripts/client/label.js @@ -247,19 +247,19 @@ function renderJobLabel(name, position, jobType) { // ------------------------------------------------------------------------- function processLabelRendering() { - if(renderLabels && areWorldLabelsSupported()) { - if(localPlayer != null) { - if(!areServerElementsSupported()) { - //for(let i in businesses) { - // if(getDistance(localPlayer.position, businesses[i].entrancePosition) <= 75.0) { - // natives.drawColouredCylinder(businesses[i].entrancePosition, 0.0, 0.0, 0, 153, 255); - // } - //} - - // natives.getScreenViewportId - // natives.getGameViewportId - // natives.getViewportPositionOfCoord - } else { + if(renderLabels) { + if(!areServerElementsSupported()) { + if(localPlayer != null) { + for(let i in businesses) { + if(getDistance(localPlayer.position, businesses[i].entrancePosition) <= 75.0) { + natives.drawColouredCylinder(getPosBelowPos(businesses[i].entrancePosition, 1.0), 0.0, 0.0, 0, 153, 255, 255); + } + } + } + } + + if(areWorldLabelsSupported()) { + if(localPlayer != null) { let pickups = getElementsByType(ELEMENT_PICKUP); for(let i in pickups) { if(pickups[i].getData("vrr.label.type") != null) { From e371df54b968136bfffb7c40d3d00722492c7938 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 9 Mar 2022 05:17:39 -0600 Subject: [PATCH 14/16] Remove client pedId member (use "ped") --- scripts/server/class.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/server/class.js b/scripts/server/class.js index 4971aa5c..5ece105d 100644 --- a/scripts/server/class.js +++ b/scripts/server/class.js @@ -239,8 +239,6 @@ class ClientData { this.locale = 0; this.enteringVehicle = null; - - this.pedId = -1; } }; From 8ad5c4fff4b173f180085eec9245529a829e5b72 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 9 Mar 2022 05:17:53 -0600 Subject: [PATCH 15/16] Use ped ID in stop anim func --- scripts/server/client.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/server/client.js b/scripts/server/client.js index 36e477c8..ba41871d 100644 --- a/scripts/server/client.js +++ b/scripts/server/client.js @@ -1014,8 +1014,8 @@ function makePedPlayAnimation(ped, animationSlot, positionOffset) { // =========================================================================== -function makePedStopAnimation(ped) { - sendNetworkEventToPlayer("vrr.pedStopAnim", null, ped.id); +function makePedStopAnimation(pedId) { + sendNetworkEventToPlayer("vrr.pedStopAnim", null, pedId); } // =========================================================================== @@ -1145,13 +1145,13 @@ function sendAllHousesToPlayer(client) { // ========================================================================== function makePlayerHoldObjectModel(client, modelIndex) { - sendNetworkEventToPlayer("vrr.holdObject", client, getPlayerData(client).pedId, modelIndex); + sendNetworkEventToPlayer("vrr.holdObject", client, getPlayerData(client).ped, modelIndex); } // ========================================================================== function receivePlayerPedNetworkId(client, pedId) { - getPlayerData(client).pedId = pedId; + getPlayerData(client).ped = pedId; } // ========================================================================== From 1a1f5d4f5de8572d46c363c4c76394d3516247ab Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 9 Mar 2022 05:18:08 -0600 Subject: [PATCH 16/16] Only send businesses for IV (for now) --- scripts/server/event.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/server/event.js b/scripts/server/event.js index b075a17a..b7dea80a 100644 --- a/scripts/server/event.js +++ b/scripts/server/event.js @@ -586,8 +586,9 @@ function onPlayerSpawn(client) { if(!areServerElementsSupported()) { sendAllBusinessesToPlayer(client); - sendAllHousesToPlayer(client); + //sendAllHousesToPlayer(client); //sendAllJobLocationsToPlayer(client); + //sendAllVehiclesToPlayer(client); requestPlayerPedNetworkId(client); }