diff --git a/scripts/client/gui/clanmgr.js b/scripts/client/gui/clanmgr.js index 631635dd..33348a65 100644 --- a/scripts/client/gui/clanmgr.js +++ b/scripts/client/gui/clanmgr.js @@ -8,13 +8,13 @@ // =========================================================================== let clanManager = { - window: null, - generalTab: null, - ranksTab: null, - membersTab: null, - vehiclesTab: null, - businessesTab: null, - housesTab: null, + window: null, + generalTab: null, + ranksTab: null, + membersTab: null, + vehiclesTab: null, + businessesTab: null, + housesTab: null, }; // =========================================================================== \ No newline at end of file diff --git a/scripts/client/gui/error.js b/scripts/client/gui/error.js index 3516f00b..e9802edf 100644 --- a/scripts/client/gui/error.js +++ b/scripts/client/gui/error.js @@ -16,49 +16,49 @@ let errorDialog = { // =========================================================================== function initErrorDialogGUI() { - logToConsole(LOG_DEBUG, `[VRR.GUI] Creating error GUI ...`); - errorDialog.window = mexui.window(game.width/2-200, game.height/2-70, 500, 140, 'ERROR', { - main: { - backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha), - transitionTime: 500, - }, - title: { - textSize: 11.0, - textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255), - backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), - }, - icon: { - textSize: 0.0, - textColour: toColour(0, 0, 0, 0), - backgroundColour: toColour(0, 0, 0, 0), - }, - }); + logToConsole(LOG_DEBUG, `[VRR.GUI] Creating error GUI ...`); + errorDialog.window = mexui.window(game.width/2-200, game.height/2-70, 500, 140, 'ERROR', { + main: { + backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha), + transitionTime: 500, + }, + title: { + textSize: 11.0, + textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255), + backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), + }, + icon: { + textSize: 0.0, + textColour: toColour(0, 0, 0, 0), + backgroundColour: toColour(0, 0, 0, 0), + }, + }); - errorDialog.messageLabel = errorDialog.window.text(15, 50, 470, 75, 'Error Message', { - main: { - textSize: 10.0, - textAlign: 0.5, - textColour: toColour(255, 255, 255, 255), - textFont: mainFont, - }, - focused: { - borderColour: toColour(0, 0, 0, 0), - }, - }); + errorDialog.messageLabel = errorDialog.window.text(15, 50, 470, 75, 'Error Message', { + main: { + textSize: 10.0, + textAlign: 0.5, + textColour: toColour(255, 255, 255, 255), + textFont: mainFont, + }, + focused: { + borderColour: toColour(0, 0, 0, 0), + }, + }); - errorDialog.okayButton = errorDialog.window.button(5, 105, 390, 30, 'OK', { - main: { - backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), - textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255), - textSize: 10.0, - textFont: mainFont, - textAlign: 0.5, - }, - focused: { - borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 255), - }, - }, closeErrorDialog); - logToConsole(LOG_DEBUG, `[VRR.GUI] Created error GUI ...`); + errorDialog.okayButton = errorDialog.window.button(5, 105, 390, 30, 'OK', { + main: { + backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), + textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255), + textSize: 10.0, + textFont: mainFont, + textAlign: 0.5, + }, + focused: { + borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 255), + }, + }, closeErrorDialog); + logToConsole(LOG_DEBUG, `[VRR.GUI] Created error GUI ...`); } // =========================================================================== diff --git a/scripts/client/gui/newchar.js b/scripts/client/gui/newchar.js index fa7ff169..51421096 100644 --- a/scripts/client/gui/newchar.js +++ b/scripts/client/gui/newchar.js @@ -14,101 +14,101 @@ let newCharacter = { skinDropDown: null, spawnAreaDropDown: null, createButton: null, - mainLogoImage: null, + mainLogoImage: null, }; // =========================================================================== function initNewCharacterGUI() { - logToConsole(LOG_DEBUG, `[VRR.GUI] Creating new character GUI ...`); - newCharacter.window = mexui.window(game.width/2-130, game.height/2-115, 300, 230, 'New Character', { - main: { - backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha), - transitionTime: 500, - }, - title: { - textSize: 0.0, - textColour: toColour(0, 0, 0, 0), - backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), - }, - icon: { - textSize: 0.0, - textColour: toColour(0, 0, 0, 0), - backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), - } - }); - newCharacter.window.titleBarIconSize = toVector2(0,0); - newCharacter.window.titleBarHeight = 0; + logToConsole(LOG_DEBUG, `[VRR.GUI] Creating new character GUI ...`); + newCharacter.window = mexui.window(game.width/2-130, game.height/2-115, 300, 230, 'New Character', { + main: { + backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha), + transitionTime: 500, + }, + title: { + textSize: 0.0, + textColour: toColour(0, 0, 0, 0), + backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), + }, + icon: { + textSize: 0.0, + textColour: toColour(0, 0, 0, 0), + backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), + } + }); + newCharacter.window.titleBarIconSize = toVector2(0,0); + newCharacter.window.titleBarHeight = 0; - newCharacter.mainLogoImage = newCharacter.window.image(5, 20, 290, 80, mainLogoPath, { - focused: { - borderColour: toColour(0, 0, 0, 0), - }, - }); + newCharacter.mainLogoImage = newCharacter.window.image(5, 20, 290, 80, mainLogoPath, { + focused: { + borderColour: toColour(0, 0, 0, 0), + }, + }); - newCharacter.messageLabel = newCharacter.window.text(20, 100, 260, 20, 'Name your character', { - main: { - textSize: 10.0, - textAlign: 0.5, - textColour: toColour(200, 200, 200, 255), - textFont: mainFont, - }, - focused: { - borderColour: toColour(0, 0, 0, 0), - }, - }); + newCharacter.messageLabel = newCharacter.window.text(20, 100, 260, 20, 'Name your character', { + main: { + textSize: 10.0, + textAlign: 0.5, + textColour: toColour(200, 200, 200, 255), + textFont: mainFont, + }, + focused: { + borderColour: toColour(0, 0, 0, 0), + }, + }); - newCharacter.firstNameInput = newCharacter.window.textInput(20, 125, 260, 25, '', { - main: { - backgroundColour: toColour(0, 0, 0, 120), - textColour: toColour(200, 200, 200, 255), - textSize: 10.0, - textFont: mainFont, - }, - caret: { - lineColour: toColour(255, 255, 255, 255), - }, - placeholder: { - backgroundColour: toColour(0, 0, 0, 120), - textColour: toColour(200, 200, 200, 200), - textSize: 10.0, - textFont: mainFont, - } - }); - newCharacter.firstNameInput.placeholder = "First Name"; + newCharacter.firstNameInput = newCharacter.window.textInput(20, 125, 260, 25, '', { + main: { + backgroundColour: toColour(0, 0, 0, 120), + textColour: toColour(200, 200, 200, 255), + textSize: 10.0, + textFont: mainFont, + }, + caret: { + lineColour: toColour(255, 255, 255, 255), + }, + placeholder: { + backgroundColour: toColour(0, 0, 0, 120), + textColour: toColour(200, 200, 200, 200), + textSize: 10.0, + textFont: mainFont, + } + }); + newCharacter.firstNameInput.placeholder = "First Name"; - newCharacter.lastNameInput = newCharacter.window.textInput(20, 155, 260, 25, '', { - main: { - backgroundColour: toColour(0, 0, 0, 120), - textColour: toColour(200, 200, 200, 255), - textSize: 10.0, - textFont: mainFont, - }, - caret: { - lineColour: toColour(255, 255, 255, 255), - }, - placeholder: { - backgroundColour: toColour(0, 0, 0, 120), - textColour: toColour(150, 150, 150, 200), - textSize: 10.0, - textFont: mainFont, - } - }); - newCharacter.lastNameInput.placeholder = "Last Name"; + newCharacter.lastNameInput = newCharacter.window.textInput(20, 155, 260, 25, '', { + main: { + backgroundColour: toColour(0, 0, 0, 120), + textColour: toColour(200, 200, 200, 255), + textSize: 10.0, + textFont: mainFont, + }, + caret: { + lineColour: toColour(255, 255, 255, 255), + }, + placeholder: { + backgroundColour: toColour(0, 0, 0, 120), + textColour: toColour(150, 150, 150, 200), + textSize: 10.0, + textFont: mainFont, + } + }); + newCharacter.lastNameInput.placeholder = "Last Name"; - newCharacter.createCharacterButton = newCharacter.window.button(20, 185, 260, 25, 'CREATE CHARACTER', { - main: { - backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), - textColour: toColour(255, 255, 255, 255), - textSize: 10.0, - textFont: mainFont, - textAlign: 0.5, - }, - focused: { - borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), - }, - }, checkNewCharacter); - logToConsole(LOG_DEBUG, `[VRR.GUI] Created new character GUI`); + newCharacter.createCharacterButton = newCharacter.window.button(20, 185, 260, 25, 'CREATE CHARACTER', { + main: { + backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), + textColour: toColour(255, 255, 255, 255), + textSize: 10.0, + textFont: mainFont, + textAlign: 0.5, + }, + focused: { + borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), + }, + }, checkNewCharacter); + logToConsole(LOG_DEBUG, `[VRR.GUI] Created new character GUI`); } // =========================================================================== @@ -157,8 +157,8 @@ function showNewCharacterGUI() { setChatWindowEnabled(false); mexui.setInput(true); newCharacter.window.shown = true; - mexui.focusedInput = newCharacter.firstNameInput; - guiSubmitButton = checkNewCharacter; + mexui.focusedInput = newCharacter.firstNameInput; + guiSubmitButton = checkNewCharacter; } // =========================================================================== \ No newline at end of file diff --git a/scripts/client/native/connected.js b/scripts/client/native/connected.js index bdcf759c..4490167e 100644 --- a/scripts/client/native/connected.js +++ b/scripts/client/native/connected.js @@ -172,6 +172,107 @@ function setEntityData(entity, dataName, dataValue, syncToClients = true) { // =========================================================================== +function setVehicleEngine(vehicleId, state) { + getElementFromId(vehicleId).engine = state; +} + +// =========================================================================== + +function setVehicleLights(vehicleId, state) { + if(getGame() != VRR_GAME_MAFIA_ONE) { + if(!state) { + getElementFromId(vehicleId).lightStatus = 2; + } else { + getElementFromId(vehicleId).lightStatus = 1; + } + } else { + if(!state) { + getElementFromId(vehicleId).lights = false; + } else { + getElementFromId(vehicleId).lights = true; + } + } +} + +// =========================================================================== + +function repairVehicle(syncId) { + getVehicleFromSyncId(syncId).fix(); +} + +// =========================================================================== + +function syncVehicleProperties(vehicle) { + if(doesEntityDataExist(vehicle, "vrr.lights")) { + let lightStatus = getEntityData(vehicle, "vrr.lights"); + if(!lightStatus) { + vehicle.lightStatus = 2; + } else { + vehicle.lightStatus = 1; + } + } + + if(doesEntityDataExist(vehicle, "vrr.invincible")) { + let invincible = getEntityData(vehicle, "vrr.invincible"); + element.setProofs(invincible, invincible, invincible, invincible, invincible); + } + + if(doesEntityDataExist(vehicle, "vrr.panelStatus")) { + let panelsStatus = getEntityData(vehicle, "vrr.panelStatus"); + for(let i in panelsStatus) { + vehicle.setPanelStatus(i, panelsStatus[i]); + } + } + + if(doesEntityDataExist(vehicle, "vrr.wheelStatus")) { + let wheelsStatus = getEntityData(vehicle, "vrr.wheelStatus"); + for(let i in wheelsStatus) { + vehicle.setWheelStatus(i, wheelsStatus[i]); + } + } + + if(doesEntityDataExist(vehicle, "vrr.lightStatus")) { + let lightStatus = getEntityData(vehicle, "vrr.lightStatus"); + for(let i in lightStatus) { + vehicle.setLightStatus(i, lightStatus[i]); + } + } + + if(doesEntityDataExist(vehicle, "vrr.suspensionHeight")) { + let suspensionHeight = getEntityData(vehicle, "vrr.suspensionHeight"); + vehicle.setSuspensionHeight(suspensionHeight); + } + + if(getGame() == VRR_GAME_GTA_SA) { + let allUpgrades = getGameConfig().vehicleUpgrades[getGame()]; + for(let i in allUpgrades) { + vehicle.removeUpgrade(i); + } + + if(doesEntityDataExist(vehicle, "vrr.upgrades")) { + let upgrades = getEntityData(vehicle, "vrr.upgrades"); + for(let i in upgrades) { + if(upgrades[i] != 0) { + vehicle.addUpgrade(upgrades[i]); + } + } + } + } + + if(getGame() == VRR_GAME_GTA_SA || getGame() == VRR_GAME_GTA_IV) { + if(doesEntityDataExist(vehicle, "vrr.livery")) { + let livery = getEntityData(vehicle, "vrr.livery"); + if(getGame() == VRR_GAME_GTA_SA) { + vehicle.setPaintJob(livery); + } else if(getGame() == VRR_GAME_GTA_IV) { + vehicle.livery = livery; + } + } + } +} + +// =========================================================================== + function removeEntityData(entity, dataName) { if(entity != null) { return entity.removeData(dataName); @@ -190,14 +291,225 @@ function doesEntityDataExist(entity, dataName) { // =========================================================================== +function syncCivilianProperties(civilian) { + if(getGame() == VRR_GAME_GTA_III) { + if(doesEntityDataExist(civilian, "vrr.scale")) { + let scaleFactor = getEntityData(civilian, "vrr.scale"); + let tempMatrix = civilian.matrix; + tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z)); + let tempPosition = civilian.position; + civilian.matrix = tempMatrix; + tempPosition.z += scaleFactor.z; + civilian.position = tempPosition; + } + } + + if(getGame() == VRR_GAME_GTA_SA) { + if(doesEntityDataExist(civilian, "vrr.fightStyle")) { + let fightStyle = getEntityData(civilian, "vrr.fightStyle"); + civilian.setFightStyle(fightStyle[0], fightStyle[1]); + } + } + + if(getGame() == VRR_GAME_GTA_III) { + if(doesEntityDataExist(civilian, "vrr.walkStyle")) { + let walkStyle = getEntityData(civilian, "vrr.walkStyle"); + civilian.walkStyle = walkStyle; + } + } + + if(getGame() == VRR_GAME_GTA_IV) { + if(doesEntityDataExist(civilian, "vrr.bodyPropHair")) { + let bodyPropHair = getEntityData(civilian, "vrr.bodyPropHair"); + civilian.changeBodyProp(0, bodyPropHair[0], bodyPropHair[1]); + } + + if(doesEntityDataExist(civilian, "vrr.bodyPropHead")) { + let bodyPropHead = getEntityData(civilian, "vrr.bodyPropHead"); + civilian.changeBodyProp(1, bodyPropHead[0], bodyPropHead[1]); + } + + if(doesEntityDataExist(civilian, "vrr.bodyPropEyes")) { + let bodyPropEyes = getEntityData(civilian, "vrr.bodyPropEyes"); + civilian.changeBodyProp(1, bodyPropEyes[0], bodyPropEyes[1]); + } + + if(doesEntityDataExist(civilian, "vrr.bodyPropLeftHand")) { + let bodyPropLeftHand = getEntityData(civilian, "vrr.bodyPropLeftHand"); + civilian.changeBodyProp(1, bodyPropLeftHand[0], bodyPropLeftHand[1]); + } + + if(doesEntityDataExist(civilian, "vrr.bodyPropRightHand")) { + let bodyPropRightHand = getEntityData(civilian, "vrr.bodyPropRightHand"); + civilian.changeBodyProp(1, bodyPropRightHand[0], bodyPropRightHand[1]); + } + + if(doesEntityDataExist(civilian, "vrr.bodyPropLeftWrist")) { + let bodyPropLeftWrist = getEntityData(civilian, "vrr.bodyPropLeftWrist"); + civilian.changeBodyProp(1, bodyPropLeftWrist[0], bodyPropLeftWrist[1]); + } + + if(doesEntityDataExist(civilian, "vrr.bodyPropRightWrist")) { + let bodyPropRightWrist = getEntityData(civilian, "vrr.bodyPropRightWrist"); + civilian.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]); + } + + if(doesEntityDataExist(civilian, "vrr.bodyPropRightWrist")) { + let bodyPropRightWrist = getEntityData(civilian, "vrr.bodyPropRightWrist"); + civilian.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]); + } + + if(doesEntityDataExist(civilian, "vrr.bodyPropHip")) { + let bodyPropHip = getEntityData(civilian, "vrr.bodyPropHip"); + civilian.changeBodyProp(1, bodyPropHip[0], bodyPropHip[1]); + } + + if(doesEntityDataExist(civilian, "vrr.bodyPropLeftFoot")) { + let bodyPropLeftFoot = getEntityData(civilian, "vrr.bodyPropLeftFoot"); + civilian.changeBodyProp(1, bodyPropLeftFoot[0], bodyPropLeftFoot[1]); + } + + if(doesEntityDataExist(civilian, "vrr.bodyPropRightFoot")) { + let bodyPropRightFoot = getEntityData(civilian, "vrr.bodyPropRightFoot"); + civilian.changeBodyProp(1, bodyPropRightFoot[0], bodyPropRightFoot[1]); + } + } + + if(doesEntityDataExist(civilian, "vrr.anim")) { + let animData = getEntityData(vehicle, "vrr.anim"); + civilian.addAnimation(animData[0], animData[1]); + } +} + +// =========================================================================== + function preventDefaultEventAction(event) { event.preventDefault(); } // =========================================================================== -function getPlayerId(client) { - return client.index; +function syncPlayerProperties(player) { + if(getGame() == VRR_GAME_GTA_III) { + if(doesEntityDataExist(player, "vrr.scale")) { + let scaleFactor = getEntityData(player, "vrr.scale"); + let tempMatrix = player.matrix; + tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z)); + let tempPosition = player.position; + player.matrix = tempMatrix; + tempPosition.z += scaleFactor.z; + player.position = tempPosition; + } + } + + if(getGame() == VRR_GAME_GTA_SA) { + if(doesEntityDataExist(player, "vrr.fightStyle")) { + let fightStyle = getEntityData(player, "vrr.fightStyle"); + player.setFightStyle(fightStyle[0], fightStyle[1]); + } + } + + //if(getGame() == VRR_GAME_GTA_SA) { + // if(doesEntityDataExist(player, "vrr.walkStyle")) { + // let walkStyle = getEntityData(player, "vrr.walkStyle"); + // player.walkStyle = walkStyle; + // } + //} + + if(getGame() == VRR_GAME_GTA_IV) { + if(doesEntityDataExist(player, "vrr.bodyPartHair")) { + let bodyPartHead = getEntityData(player, "vrr.bodyPartHair"); + player.changeBodyPart(0, bodyPartHead[0], bodyPartHair[1]); + } + + if(doesEntityDataExist(player, "vrr.bodyPartHead")) { + let bodyPartHead = getEntityData(player, "vrr.bodyPartHead"); + player.changeBodyPart(1, bodyPartHead[0], bodyPartHead[1]); + } + + if(doesEntityDataExist(player, "vrr.bodyPartUpper")) { + let bodyPartUpper = getEntityData(player, "vrr.bodyPartUpper"); + player.changeBodyPart(1, bodyPartUpper[0], bodyPartUpper[1]); + } + + if(doesEntityDataExist(player, "vrr.bodyPartLower")) { + let bodyPartLower = getEntityData(player, "vrr.bodyPartLower"); + player.changeBodyPart(1, bodyPartLower[0], bodyPartLower[1]); + } + } + + if(getGame() == VRR_GAME_GTA_IV) { + if(doesEntityDataExist(player, "vrr.bodyPropHair")) { + let bodyPropHair = getEntityData(player, "vrr.bodyPropHair"); + player.changeBodyProp(0, bodyPropHair[0], bodyPropHair[1]); + } + + if(doesEntityDataExist(player, "vrr.bodyPropHead")) { + let bodyPropHead = getEntityData(player, "vrr.bodyPropHead"); + player.changeBodyProp(1, bodyPropHead[0], bodyPropHead[1]); + } + + if(doesEntityDataExist(player, "vrr.bodyPropEyes")) { + let bodyPropEyes = getEntityData(player, "vrr.bodyPropEyes"); + player.changeBodyProp(1, bodyPropEyes[0], bodyPropEyes[1]); + } + + if(doesEntityDataExist(player, "vrr.bodyPropLeftHand")) { + let bodyPropLeftHand = getEntityData(player, "vrr.bodyPropLeftHand"); + player.changeBodyProp(1, bodyPropLeftHand[0], bodyPropLeftHand[1]); + } + + if(doesEntityDataExist(player, "vrr.bodyPropRightHand")) { + let bodyPropRightHand = getEntityData(player, "vrr.bodyPropRightHand"); + player.changeBodyProp(1, bodyPropRightHand[0], bodyPropRightHand[1]); + } + + if(doesEntityDataExist(player, "vrr.bodyPropLeftWrist")) { + let bodyPropLeftWrist = getEntityData(player, "vrr.bodyPropLeftWrist"); + player.changeBodyProp(1, bodyPropLeftWrist[0], bodyPropLeftWrist[1]); + } + + if(doesEntityDataExist(player, "vrr.bodyPropRightWrist")) { + let bodyPropRightWrist = getEntityData(player, "vrr.bodyPropRightWrist"); + player.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]); + } + + if(doesEntityDataExist(player, "vrr.bodyPropRightWrist")) { + let bodyPropRightWrist = getEntityData(player, "vrr.bodyPropRightWrist"); + player.changeBodyProp(1, bodyPropRightWrist[0], bodyPropRightWrist[1]); + } + + if(doesEntityDataExist(player, "vrr.bodyPropHip")) { + let bodyPropHip = getEntityData(player, "vrr.bodyPropHip"); + player.changeBodyProp(1, bodyPropHip[0], bodyPropHip[1]); + } + + if(doesEntityDataExist(player, "vrr.bodyPropLeftFoot")) { + let bodyPropLeftFoot = getEntityData(player, "vrr.bodyPropLeftFoot"); + player.changeBodyProp(1, bodyPropLeftFoot[0], bodyPropLeftFoot[1]); + } + + if(doesEntityDataExist(player, "vrr.bodyPropRightFoot")) { + let bodyPropRightFoot = getEntityData(player, "vrr.bodyPropRightFoot"); + player.changeBodyProp(1, bodyPropRightFoot[0], bodyPropRightFoot[1]); + } + } +} + +// =========================================================================== + +function syncObjectProperties(object) { + if(getGame() == VRR_GAME_GTA_III || getGame() == VRR_GAME_GTA_VC) { + if(doesEntityDataExist(object, "vrr.scale")) { + let scaleFactor = getEntityData(object, "vrr.scale"); + let tempMatrix = object.matrix; + tempMatrix.setScale(toVector3(scaleFactor.x, scaleFactor.y, scaleFactor.z)); + let tempPosition = object.position; + object.matrix = tempMatrix; + tempPosition.z += scaleFactor.z; + object.position = tempPosition; + } + } } // =========================================================================== @@ -218,4 +530,41 @@ function getGame() { return game.game; } +// =========================================================================== + +function getPlayerId(client) { + return client.index; +} + +// =========================================================================== + +function syncElementProperties(element) { + if(doesEntityDataExist(element, "vrr.interior")) { + if(typeof element.interior != "undefined") { + element.interior = getEntityData(element, "vrr.interior"); + } + } + + switch(element.type) { + case ELEMENT_VEHICLE: + syncVehicleProperties(element); + break; + + case ELEMENT_PED: + syncCivilianProperties(element); + break; + + case ELEMENT_PLAYER: + syncPlayerProperties(element); + break; + + case ELEMENT_OBJECT: + syncObjectProperties(element); + break; + + default: + break; + } +} + // =========================================================================== \ No newline at end of file diff --git a/scripts/client/sync.js b/scripts/client/sync.js index c3b641d7..0b1f4d99 100644 --- a/scripts/client/sync.js +++ b/scripts/client/sync.js @@ -28,11 +28,23 @@ function processSync(event, deltaTime) { } } - if(streamingRadioElement) { - streamingRadio.position = getElementPosition(streamingRadioElement); - //streamingRadio.volume = getStreamingRadioVolumeForPosition(streamingRadio.position); + sendNetworkEventToServer("vrr.player.position", localPlayer.position); + sendNetworkEventToServer("vrr.player.heading", localPlayer.heading); + } + + if(localPlayer.health <= 0) { + if(!calledDeathEvent) { + logToConsole(LOG_DEBUG, `Local player died`); + localPlayer.clearWeapons(); + calledDeathEvent = true; + sendNetworkEventToServer("vrr.playerDeath"); } } + + if(streamingRadioElement) { + streamingRadio.position = getElementPosition(streamingRadioElement); + //streamingRadio.volume = getStreamingRadioVolumeForPosition(streamingRadio.position); + } } // =========================================================================== @@ -44,8 +56,6 @@ function setVehicleEngine(vehicleId, state) { // =========================================================================== function setVehicleLights(vehicleId, state) { - - if(getGame() != VRR_GAME_MAFIA_ONE) { if(!state) { getElementFromId(vehicleId).lightStatus = 2; diff --git a/scripts/client/utilities.js b/scripts/client/utilities.js index c1cbedf0..9294ceb8 100644 --- a/scripts/client/utilities.js +++ b/scripts/client/utilities.js @@ -364,6 +364,8 @@ function setLocalPlayerInterior(interior) { natives.activateInterior(interiorId, true); natives.loadAllObjectsNow(); } + let interiorId = natives.getInteriorAtCoords(localPlayer.position); + natives.activateInterior(interiorId, true); } } @@ -400,6 +402,15 @@ function isSnowEnabled() { // =========================================================================== +function playPedSpeech(pedName, speechId) { + logToConsole(LOG_DEBUG, `[VRR.Utilities] Making ${pedName}'s ped talk (${speechId})`); + if(getMultiplayerMod() == VRR_MPMOD_GTAC) { + game.SET_CHAR_SAY(int, int); + } +} + +// =========================================================================== + function clearLocalPedState() { logToConsole(LOG_DEBUG, `[VRR.Utilities] Clearing local ped state`); localPlayer.clearObjective(); @@ -809,6 +820,7 @@ function setVehiclePurchaseState(state, vehicleId, position) { // =========================================================================== function processVehicleFires() { + /* let vehicles = getElementsByType(ELEMENT_VEHICLE); for(let i in vehicles) { if(vehicles[i].isSyncer) { @@ -819,6 +831,7 @@ function processVehicleFires() { } } } + */ } // =========================================================================== diff --git a/scripts/server/native/connected.js b/scripts/server/native/connected.js index b0eed7b9..c0e3bf06 100644 --- a/scripts/server/native/connected.js +++ b/scripts/server/native/connected.js @@ -377,11 +377,12 @@ function getElementDimension(element) { // =========================================================================== function setElementDimension(element, dimension) { - if(typeof element.dimension != "undefined") { - element.dimension = dimension; - return true; - } - return false; + if(typeof element.dimension != "undefined") { + logToConsole(LOG_DEBUG, `Setting element ${element} (${element.id}) dimension to ${dimension}`); + element.dimension = dimension; + return true; + } + return false; } // =========================================================================== diff --git a/scripts/server/vehicle.js b/scripts/server/vehicle.js index c8da95bb..65236177 100644 --- a/scripts/server/vehicle.js +++ b/scripts/server/vehicle.js @@ -171,9 +171,9 @@ function spawnAllVehicles() { // =========================================================================== /** - * @param {Vehicle} vehicle - The vehicle element - * @return {VehicleData} The vehicles's data (class instance) - */ + * @param {Vehicle} vehicle - The vehicle element + * @return {VehicleData} The vehicles's data (class instance) + */ function getVehicleData(vehicle) { if(getGame() != VRR_GAME_GTA_IV) { if(isVehicleObject(vehicle)) { @@ -1208,8 +1208,10 @@ function spawnVehicle(vehicleData) { return false; } - setVehicleHeading(vehicle, vehicleData.spawnRotation) + setVehicleHeading(vehicle, vehicleData.spawnRotation); + setElementDimension(vehicle, vehicleData.dimension); addToWorld(vehicle); + vehicleData.vehicle = vehicle; if(isGameFeatureSupported("vehicleColours")) { @@ -1237,7 +1239,6 @@ function spawnVehicle(vehicleData) { logToConsole(LOG_VERBOSE, `[VRR.Vehicle]: Setting vehicle ${vehicle.id}'s lock state to ${toUpperCase(getOnOffFromBool(getVehicleLocked(vehicle)))}`); } - setElementDimension(vehicle.dimension, vehicleData.dimension); //setVehicleHealth(vehicle, 1000); repairVehicle(vehicle); @@ -1247,6 +1248,8 @@ function spawnVehicle(vehicleData) { setEntityData(vehicle, "vrr.engine", vehicleData.engine, true); forcePlayerToSyncElementProperties(null, vehicle); + + return vehicle; }