diff --git a/locale/chinese.json b/locale/chinese.json
index 57eab3d4..5286e7db 100644
--- a/locale/chinese.json
+++ b/locale/chinese.json
@@ -391,5 +391,7 @@
"NotATester": "You are not a tester!",
"AccessDenied": "AccessDenied",
"InvalidSkin": "That skin is invalid!",
- "HeaderInteriorTypes": "Interiors"
+ "HeaderInteriorTypes": "Interiors List",
+ "ViewInventoryKeyPressTip": "Press {1} to see your items",
+ "ViewInventoryCommandTip": "Use {1} to see your items"
}
diff --git a/locale/english.json b/locale/english.json
index db17cb30..5f68c88e 100644
--- a/locale/english.json
+++ b/locale/english.json
@@ -391,5 +391,7 @@
"NotATester": "You are not a tester!",
"AccessDenied": "AccessDenied",
"InvalidSkin": "That skin is invalid!",
- "HeaderInteriorTypes": "Interiors"
+ "HeaderInteriorTypes": "Interiors List",
+ "ViewInventoryKeyPressTip": "Press {1} to see your items",
+ "ViewInventoryCommandTip": "Use {1} to see your items"
}
diff --git a/locale/polish.json b/locale/polish.json
index 02a57f7c..e38d5e1f 100644
--- a/locale/polish.json
+++ b/locale/polish.json
@@ -391,5 +391,7 @@
"NotATester": "You are not a tester!",
"AccessDenied": "AccessDenied",
"InvalidSkin": "That skin is invalid!",
- "HeaderInteriorTypes": "Interiors"
+ "HeaderInteriorTypes": "Interiors List",
+ "ViewInventoryKeyPressTip": "Press {1} to see your items",
+ "ViewInventoryCommandTip": "Use {1} to see your items"
}
diff --git a/locale/russian.json b/locale/russian.json
index b9a0ade7..82a535d2 100644
--- a/locale/russian.json
+++ b/locale/russian.json
@@ -390,5 +390,7 @@
"NotATester": "Вы не тестировщик!",
"AccessDenied": "Доступ запрещен",
"InvalidSkin": "That skin is invalid!",
- "HeaderInteriorTypes": "Interiors"
+ "HeaderInteriorTypes": "Interiors List",
+ "ViewInventoryKeyPressTip": "Press {1} to see your items",
+ "ViewInventoryCommandTip": "Use {1} to see your items"
}
diff --git a/locale/spanish.json b/locale/spanish.json
index 070a9811..7562b925 100644
--- a/locale/spanish.json
+++ b/locale/spanish.json
@@ -395,5 +395,7 @@
"NotATester": "You are not a tester!",
"AccessDenied": "AccessDenied",
"InvalidSkin": "That skin is invalid!",
- "HeaderInteriorTypes": "Interiors"
+ "HeaderInteriorTypes": "Interiors List",
+ "ViewInventoryKeyPressTip": "Press {1} to see your items",
+ "ViewInventoryCommandTip": "Use {1} to see your items"
}
diff --git a/meta.xml b/meta.xml
index dd4d6d07..79e7de37 100644
--- a/meta.xml
+++ b/meta.xml
@@ -119,6 +119,7 @@
+
diff --git a/scripts/client/business.js b/scripts/client/business.js
index 245826e2..69a73600 100644
--- a/scripts/client/business.js
+++ b/scripts/client/business.js
@@ -8,8 +8,9 @@
// ===========================================================================
class BusinessData {
- constructor(index, name, entrancePosition, blipModel, pickupModel, hasInterior, hasItems) {
- this.index = index;
+ constructor(businessId, name, entrancePosition, blipModel, pickupModel, hasInterior, hasItems) {
+ this.index = -1;
+ this.businessId = businessId;
this.name = name;
this.entrancePosition = entrancePosition;
this.blipModel = blipModel;
@@ -23,30 +24,95 @@ 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) {
- natives.removeBlipAndClearIndex(getBusinessData(businessId).blipId);
- businesses.splice(getBusinessData(businessId).index, 1);
+ 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 {
- 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 changed by the server`);
+ natives.setBlipCoordinates(businessData.blipId, businessData.entrancePosition);
+ natives.changeBlipSprite(businessData.blipId, businessData.blipModel);
+ natives.setBlipMarkerLongDistance(businessData.blipId, false);
+ natives.setBlipAsShortRange(tempBusinessData.blipId, true);
+ natives.changeBlipNameFromAscii(businessData.blipId, `${businessData.name.substr(0, 24)}${(businessData.name.length > 24) ? " ...": ""}`);
+ } else {
+ let blipId = natives.addBlipForCoord(entrancePosition);
+ if(blipId) {
+ businessData.blipId = blipId;
+ natives.changeBlipSprite(businessData.blipId, businessData.blipModel);
+ natives.setBlipMarkerLongDistance(businessData.blipId, false);
+ natives.setBlipAsShortRange(tempBusinessData.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) {
let blipId = natives.addBlipForCoord(entrancePosition);
if(blipId) {
- let tempBusinessData = new BusinessData(businessId, name, entrancePosition, blipModel, pickupModel, hasInterior, hasItems);
tempBusinessData.blipId = blipId;
- natives.changeBlipSprite(blipId, blipModel);
- natives.setBlipMarkerLongDistance(blipId, true);
- natives.changeBlipNameFromAscii(blipId, `${name.substr(0, 24)}${(name.length > 24) ? " ...": ""}`);
- businesses.push(tempBusinessData);
+ natives.changeBlipSprite(tempBusinessData.blipId, blipModel);
+ natives.setBlipMarkerLongDistance(tempBusinessData.blipId, false);
+ natives.setBlipAsShortRange(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();
}
}
}
+// ===========================================================================
+
+/**
+ * @param {number} businessId - The ID of the business (initially provided by server)
+ * @return {BusinessData} The business's data (class instance)
+ */
+function getBusinessData(businessId) {
+ //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;
+}
+
+// ===========================================================================
+
+function setAllBusinessDataIndexes() {
+ for(let i in businesses) {
+ businesses[i].index = i;
+ }
+}
+
// ===========================================================================
\ No newline at end of file
diff --git a/scripts/client/chatbox.js b/scripts/client/chatbox.js
index 37526c4b..64e454f6 100644
--- a/scripts/client/chatbox.js
+++ b/scripts/client/chatbox.js
@@ -46,11 +46,14 @@ function unBindChatBoxKeys() {
// ===========================================================================
function receiveChatBoxMessageFromServer(messageString, colour) {
- if(bottomMessageIndex => chatBoxHistory.length-1) {
- message(messageString, colour);
+ logToConsole(LOG_DEBUG, `[VRR.ChatBox]: Received chatbox message from server: ${messageString}`);
+ let colouredString = replaceColoursInMessage(messageString);
+
+ if(bottomMessageIndex >= chatBoxHistory.length-1) {
+ message(colouredString, colour);
bottomMessageIndex = chatBoxHistory.length-1;
}
- addToChatBoxHistory(messageString, colour);
+ addToChatBoxHistory(colouredString, colour);
}
// ===========================================================================
diff --git a/scripts/client/event.js b/scripts/client/event.js
index 03ae0839..2bc8a09d 100644
--- a/scripts/client/event.js
+++ b/scripts/client/event.js
@@ -95,6 +95,7 @@ function onProcess(event, deltaTime) {
processGameSpecifics();
processNearbyPickups();
processVehiclePurchasing();
+ //processVehicleFires();
}
// ===========================================================================
@@ -144,9 +145,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 +158,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;
}
}
}
@@ -229,4 +224,11 @@ function onLocalPlayerSwitchWeapon(oldWeapon, newWeapon) {
function onCameraProcess(event) {
}
+// ===========================================================================
+
+function onChatOutput(event, messageText, colour) {
+ //event.preventDefault();
+ //receiveChatBoxMessageFromServer(messageText, colour);
+}
+
// ===========================================================================
\ No newline at end of file
diff --git a/scripts/client/house.js b/scripts/client/house.js
new file mode 100644
index 00000000..19631aad
--- /dev/null
+++ b/scripts/client/house.js
@@ -0,0 +1,82 @@
+// ===========================================================================
+// Vortrex's Roleplay Resource
+// https://github.com/VortrexFTW/gtac_roleplay
+// ===========================================================================
+// FILE: house.js
+// DESC: Provides house functions and usage
+// TYPE: Client (JavaScript)
+// ===========================================================================
+
+class HouseData {
+ constructor(houseId, entrancePosition, blipModel, pickupModel, hasInterior) {
+ this.index = -1;
+ this.houseId = houseId;
+ this.entrancePosition = entrancePosition;
+ this.blipModel = blipModel;
+ this.pickupModel = pickupModel;
+ this.hasInterior = hasInterior;
+ this.blipId = -1;
+ }
+}
+
+// ===========================================================================
+
+function receiveHouseFromServer(houseId, entrancePosition, blipModel, pickupModel, hasInterior) {
+ if(getGame() == VRR_GAME_GTA_IV) {
+ if(getHouseData(houseId) != false) {
+ if(blipModel == -1) {
+ natives.removeBlipAndClearIndex(getHouseData(houseId).blipId);
+ getHouseData(houseId).blipId = -1;
+ //houses.splice(getHouseData(houseId).index, 1);
+ //setAllHouseDataIndexes();
+ } else {
+ if(getHouseData(houseId).blipId != -1) {
+ natives.setBlipCoordinates(getHouseData(houseId).blipId, getHouseData(houseId).entrancePosition);
+ natives.changeBlipSprite(getHouseData(houseId).blipId, getHouseData(houseId).blipModel);
+ //natives.changeBlipNameFromAscii(getHouseData(houseId).blipId, `${name.substr(0, 24)}${(name.length > 24) ? " ...": ""}`);
+ } else {
+ let blipId = natives.addBlipForCoord(entrancePosition);
+ if(blipId) {
+ getHouseData(houseId).blipId = blipId;
+ natives.changeBlipSprite(blipId, blipModel);
+ natives.setBlipMarkerLongDistance(blipId, false);
+ }
+ }
+ }
+ } else {
+ let tempHouseData = new HouseData(houseId, entrancePosition, blipModel, pickupModel, hasInterior, hasItems);
+ if(blipModel != -1) {
+ let blipId = natives.addBlipForCoord(entrancePosition);
+ if(blipId) {
+ tempHouseData.blipId = blipId;
+ natives.changeBlipSprite(blipId, blipModel);
+ natives.setBlipMarkerLongDistance(blipId, false);
+ //natives.changeBlipNameFromAscii(blipId, `${name.substr(0, 24)}${(name.length > 24) ? " ...": ""}`);
+ }
+ }
+ houses.push(tempHouseData);
+ setAllHouseDataIndexes();
+ }
+ }
+}
+
+// ===========================================================================
+
+/**
+ * @param {number} houseId - The ID of the house (initially provided by server)
+ * @return {HouseData} The house's data (class instance)
+ */
+function getHouseData(houseId) {
+ let tempHouseData = houses.find((h) => h.houseId == houseId);
+ return (typeof tempHouseData != "undefined") ? tempHouseData : false;
+}
+
+// ===========================================================================
+
+function setAllHouseDataIndexes() {
+ for(let i in houses) {
+ houses[i].index = i;
+ }
+}
+
+// ===========================================================================
\ No newline at end of file
diff --git a/scripts/client/label.js b/scripts/client/label.js
index a8d2664d..4f20d67a 100644
--- a/scripts/client/label.js
+++ b/scripts/client/label.js
@@ -247,17 +247,19 @@ function renderJobLabel(name, position, jobType) {
// -------------------------------------------------------------------------
function processLabelRendering() {
- if(renderLabels && areWorldLabelsSupported()) {
- if(localPlayer != null) {
- if(!areServerElementsSupported()) {
- //for(let i in businesses) {
- // if(pickups[i].getData("vrr.label.type") != null) {
- // if(getDistance(localPlayer.position, pickups[i].position) <= renderLabelDistance) {
-
- // 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) {
diff --git a/scripts/client/main.js b/scripts/client/main.js
index 7e56d8ce..e28117a2 100644
--- a/scripts/client/main.js
+++ b/scripts/client/main.js
@@ -69,8 +69,9 @@ let forceWantedLevel = 0;
// Pre-cache all allowed skins
let allowedSkins = getAllowedSkins(getGame());
-let businesses = {};
-let houses = {};
-let jobs = {};
+let businesses = [];
+let houses = [];
+let jobs = [];
+let vehicles = [];
// ===========================================================================
\ No newline at end of file
diff --git a/scripts/client/server.js b/scripts/client/server.js
index db892867..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);
}
// ===========================================================================
@@ -139,6 +141,8 @@ function setPlayer2DRendering(hudState, labelState, smallGameMessageState, score
natives.displayCash(hudState);
natives.displayAmmo(hudState);
natives.displayHud(hudState);
+ natives.displayRadar(hudState);
+ natives.displayAreaName(hudState);
} else {
if(typeof setHUDEnabled != "undefined") {
setHUDEnabled(hudState);
@@ -257,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;
@@ -301,8 +293,9 @@ function setLocalPlayerInfiniteRun(state) {
function setLocalPlayerSkin(skinId) {
if(getGame() == VRR_GAME_GTA_IV) {
- //natives.changePlayerModel(natives.getPlayerId(), skinId);
- localPlayer.skin = allowedSkins[skinSelectorIndex][0];
+ natives.changePlayerModel(natives.getPlayerId(), skinId);
+ //localPlayer.skin = allowedSkins[skinSelectorIndex][0];
+ //localPlayer.modelIndex = allowedSkins[skinSelectorIndex][0];
} else {
localPlayer.skin = skinId;
}
diff --git a/scripts/client/skin-select.js b/scripts/client/skin-select.js
index 2f3149e7..2b361383 100644
--- a/scripts/client/skin-select.js
+++ b/scripts/client/skin-select.js
@@ -55,7 +55,8 @@ function processSkinSelectKeyPress(keyCode) {
skinSelectMessageTextTop = allowedSkins[skinSelectorIndex][1];
if(getGame() == VRR_GAME_GTA_IV) {
//natives.changePlayerModel(natives.getPlayerId(), allowedSkins[skinSelectorIndex][0]);
- localPlayer.skin = allowedSkins[skinSelectorIndex][0];
+ //localPlayer.skin = allowedSkins[skinSelectorIndex][0];
+ //localPlayer.modelIndex = allowedSkins[skinSelectorIndex][0];
} else {
localPlayer.skin = allowedSkins[skinSelectorIndex][0];
}
@@ -69,7 +70,8 @@ function processSkinSelectKeyPress(keyCode) {
skinSelectMessageTextTop = allowedSkins[skinSelectorIndex][1];
if(getGame() == VRR_GAME_GTA_IV) {
//natives.changePlayerModel(natives.getPlayerId(), allowedSkins[skinSelectorIndex][0]);
- localPlayer.skin = allowedSkins[skinSelectorIndex][0];
+ //localPlayer.skin = allowedSkins[skinSelectorIndex][0];
+ //localPlayer.modelIndex = allowedSkins[skinSelectorIndex][0];
} else {
localPlayer.skin = allowedSkins[skinSelectorIndex][0];
}
diff --git a/scripts/client/startup.js b/scripts/client/startup.js
index e2685005..bd38327f 100644
--- a/scripts/client/startup.js
+++ b/scripts/client/startup.js
@@ -121,12 +121,12 @@ function setUpInitialGame() {
natives.setPickupsFixCars(false);
// HUD and Display
- natives.displayCash(false);
- natives.displayAmmo(false);
- natives.displayHud(false);
- natives.displayRadar(false);
- natives.displayAreaName(false);
- natives.displayPlayerNames(false);
+ //natives.displayCash(false);
+ //natives.displayAmmo(false);
+ //natives.displayHud(false);
+ //natives.displayRadar(false);
+ //natives.displayAreaName(false);
+ //natives.displayPlayerNames(false);
natives.setPoliceRadarBlips(false);
natives.removeTemporaryRadarBlipsForPickups();
natives.displayNonMinigameHelpMessages(false);
@@ -138,14 +138,14 @@ function setUpInitialGame() {
natives.setPlayersDropMoneyInNetworkGame(false);
// Population
- natives.dontSuppressAnyCarModels(5.0);
- natives.dontSuppressAnyPedModels(5.0);
- natives.forceGenerateParkedCarsTooCloseToOthers(5.0);
- natives.setParkedCarDensityMultiplier(5.0);
- natives.setRandomCarDensityMultiplier(5.0);
- natives.setPedDensityMultiplier(5.0);
- natives.setCarDensityMultiplier(5.0);
- natives.setScenarioPedDensityMultiplier(5.0, 5.0);
+ //natives.dontSuppressAnyCarModels(5.0);
+ //natives.dontSuppressAnyPedModels(5.0);
+ //natives.forceGenerateParkedCarsTooCloseToOthers(true);
+ //natives.setParkedCarDensityMultiplier(5.0);
+ //natives.setRandomCarDensityMultiplier(5.0);
+ //natives.setPedDensityMultiplier(5.0);
+ //natives.setCarDensityMultiplier(5.0);
+ //natives.setScenarioPedDensityMultiplier(5.0, 5.0);
natives.switchRandomTrains(true);
natives.switchRandomBoats(true);
natives.switchAmbientPlanes(true);
diff --git a/scripts/client/sync.js b/scripts/client/sync.js
index 2ffe01e3..3a2a3704 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
diff --git a/scripts/client/utilities.js b/scripts/client/utilities.js
index 64570a19..1a120772 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;
}
// ===========================================================================
@@ -808,4 +810,19 @@ function setVehiclePurchaseState(state, vehicleId, position) {
vehiclePurchasePosition = position;
}
+// ===========================================================================
+
+function processVehicleFires() {
+ let vehicles = getElementsByType(ELEMENT_VEHICLE);
+ for(let i in vehicles) {
+ if(vehicles[i].isSyncer) {
+ if(!doesEntityDataExist(vehicles[i], "vrr.fire")) {
+ triggerNetworkEvent("vrr.vehFire", vehicles[i].id);
+ } else {
+ vehicles[i].health = 249;
+ }
+ }
+ }
+}
+
// ===========================================================================
\ No newline at end of file
diff --git a/scripts/server/account.js b/scripts/server/account.js
index 87be5779..549fcdff 100644
--- a/scripts/server/account.js
+++ b/scripts/server/account.js
@@ -1126,6 +1126,7 @@ function initClient(client) {
updatePlayerSnowState(client);
showConnectCameraToPlayer(client);
+
messageClient(`Please wait ...`, client, getColourByName("softGreen"));
setTimeout(function() {
diff --git a/scripts/server/business.js b/scripts/server/business.js
index 9335ea09..3e9faaa2 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);
}
}
}
@@ -1765,9 +1765,9 @@ function buyFromBusinessCommand(command, params, client) {
if(!doesPlayerHaveKeyBindsDisabled(client) && doesPlayerHaveKeyBindForCommand("inv")) {
let keyData = getPlayerKeyBindForCommand("inv");
- messagePlayerNewbieTip(client, getLocaleString(client, "ViewInventoryKeyPressTip"), `{ALTCOLOUR}${getKeyNameFromId(keyData.key)}{MAINCOLOUR}`);
+ messagePlayerNewbieTip(client, getLocaleString(client, "ViewInventoryKeyPressTip", `{ALTCOLOUR}${getKeyNameFromId(keyData.key)}{MAINCOLOUR}`));
} else {
- messagePlayerNewbieTip(client, getLocaleString(client, "ViewInventoryKeyPressTip"), `{ALTCOLOUR}/inv{MAINCOLOUR}`);
+ messagePlayerNewbieTip(client, getLocaleString(client, "ViewInventoryKeyPressTip", `{ALTCOLOUR}/inv{MAINCOLOUR}`));
}
}
diff --git a/scripts/server/chat.js b/scripts/server/chat.js
index fbb63857..554dbeaa 100644
--- a/scripts/server/chat.js
+++ b/scripts/server/chat.js
@@ -13,29 +13,36 @@ function initChatScript() {
return true;
}
+// ===========================================================================
+
function processPlayerChat(client, messageText) {
- if(!getPlayerData(client)) {
- messagePlayerError(client, "You need to login before you can chat!");
- return false;
- }
+ if(!isConsole(client)) {
+ if(!getPlayerData(client)) {
+ messagePlayerError(client, "You need to login before you can chat!");
+ return false;
+ }
- if(!isPlayerLoggedIn(client)) {
- messagePlayerError(client, "You need to login before you can chat!");
- return false;
- }
+ if(!isPlayerLoggedIn(client)) {
+ messagePlayerError(client, "You need to login before you can chat!");
+ return false;
+ }
- if(!isPlayerSpawned(client)) {
- messagePlayerError(client, "You need to spawn before you can chat!");
- return false;
- }
+ if(!isPlayerSpawned(client)) {
+ messagePlayerError(client, "You need to spawn before you can chat!");
+ return false;
+ }
- if(isPlayerMuted(client)) {
- messagePlayerError(client, "You are muted and can't chat!");
- return false;
- }
-
- messageText = messageText.substring(0, 128);
+ if(isPlayerMuted(client)) {
+ messagePlayerError(client, "You are muted and can't chat!");
+ return false;
+ }
+ messageText = messageText.substring(0, 128);
+ messagePlayerNormal(null, `💬 ${getCharacterFullName(client)}: ${messageText}`);
+ } else {
+ messagePlayerNormal(null, `🛡️ (ADMIN) - ${messageText}`);
+ }
+
/*
let clients = getClients();
for(let i in clients) {
@@ -46,8 +53,8 @@ function processPlayerChat(client, messageText) {
messagePlayerNormal(clients[i], `💬 ${getCharacterFullName(client)}: [#FFFFFF]${translatedText}${original}`, clients[i], getColourByName("mediumGrey"));
}
*/
- messagePlayerNormal(null, `💬 ${getCharacterFullName(client)}: ${messageText}`);
- messageDiscordChatChannel(`💬 ${getCharacterFullName(client)}: ${messageText}`);
+
+ //messageDiscordChatChannel(`💬 ${getCharacterFullName(client)}: ${messageText}`);
}
// ===========================================================================
diff --git a/scripts/server/class.js b/scripts/server/class.js
index a4d92a13..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;
}
};
@@ -864,6 +862,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;
diff --git a/scripts/server/client.js b/scripts/server/client.js
index 565fd7b7..5bd79c7c 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);
@@ -521,9 +520,8 @@ function sendPlayerRemoveFromVehicle(client) {
// ===========================================================================
-function sendChatBoxMessageToPlayer(client, message, colour) {
- sendNetworkEventToPlayer("vrr.m", client, message, colour)
- //messageClient(message, client, colour);
+function sendChatBoxMessageToPlayer(client, messageText, colour) {
+ messageClient(messageText, client, colour);
}
// ===========================================================================
@@ -716,6 +714,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);
@@ -1003,8 +1013,8 @@ function makePedPlayAnimation(ped, animationSlot, positionOffset) {
// ===========================================================================
-function makePedStopAnimation(ped) {
- sendNetworkEventToPlayer("vrr.pedStopAnim", null, ped.id);
+function makePedStopAnimation(pedId) {
+ sendNetworkEventToPlayer("vrr.pedStopAnim", null, pedId);
}
// ===========================================================================
@@ -1023,14 +1033,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,48 +1113,44 @@ 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);
}
}
// ==========================================================================
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;
}
// ==========================================================================
diff --git a/scripts/server/config.js b/scripts/server/config.js
index 815f7df1..7e286638 100644
--- a/scripts/server/config.js
+++ b/scripts/server/config.js
@@ -80,13 +80,27 @@ function initConfigScript() {
logToConsole(LOG_DEBUG, "[VRR.Config]: Loading global config ...");
loadGlobalConfig();
- logToConsole(LOG_DEBUG, "[VRR.Config]: Loading server config ...");
+ logToConsole(LOG_INFO, "[VRR.Config]: Loading server config ...");
serverConfig = loadServerConfigFromGameAndPort(server.game, server.port, getMultiplayerMod());
- logToConsole(LOG_DEBUG, "[VRR.Config]: Applying server config ...");
- applyConfigToServer(serverConfig);
+ logToConsole(LOG_INFO, "[VRR.Config]: Applying server config ...");
+ getServerConfig().fallingSnow = intToBool(toInteger(server.getCVar("fallingsnow")));
+ getServerConfig().groundSnow = intToBool(toInteger(server.getCVar("groundsnow")));
+ getServerConfig().useGUI = intToBool(toInteger(server.getCVar("gui")));
+ getServerConfig().showLogo = false;
+ getServerConfig().testerOnly = intToBool(toInteger(server.getCVar("testeronly")));
+ getServerConfig().discordEnabled = false;
+ getServerConfig().createJobPickups = intToBool(toInteger(server.getCVar("jobpickups")));
+ getServerConfig().createBusinessPickups = intToBool(toInteger(server.getCVar("businesspickups")));
+ getServerConfig().createHousePickups = intToBool(toInteger(server.getCVar("housepickups")));
+ getServerConfig().createJobBlips = intToBool(toInteger(server.getCVar("jobblips")));
+ getServerConfig().createBusinessBlips = intToBool(toInteger(server.getCVar("businessblips")));
+ getServerConfig().createHouseBlips = intToBool(toInteger(server.getCVar("houseblips")));
+ getServerConfig().useRealTime = intToBool(toInteger(server.getCVar("realtime")));
+ getServerConfig().antiCheat.enabled = intToBool(toInteger(server.getCVar("anticheat")));
- logToConsole(LOG_DEBUG, "[VRR.Config]: All config loaded and applied successfully!");
+ applyConfigToServer(serverConfig);
+ logToConsole(LOG_DEBUG, "[VRR.Config]: Server config applied successfully!");
logToConsole(LOG_INFO, "[VRR.Config]: Config script initialized!");
}
@@ -131,22 +145,6 @@ function loadServerConfigFromId(tempServerId) {
if(dbQuery.numRows > 0) {
let dbAssoc = fetchQueryAssoc(dbQuery);
let tempServerConfigData = new ServerData(dbAssoc);
-
- tempServerConfigData.fallingSnow = hasBitFlag(tempServerConfigData.settings, getServerSettingsFlagValue("FallingSnow"));
- tempServerConfigData.groundSnow = hasBitFlag(tempServerConfigData.settings, getServerSettingsFlagValue("GroundSnow"));
- tempServerConfigData.useGUI = hasBitFlag(tempServerConfigData.settings, getServerSettingsFlagValue("GUI"));
- tempServerConfigData.showLogo = hasBitFlag(tempServerConfigData.settings, getServerSettingsFlagValue("Logo"));
- tempServerConfigData.testerOnly = hasBitFlag(tempServerConfigData.settings, getServerSettingsFlagValue("Testing"));
- tempServerConfigData.discordEnabled = hasBitFlag(tempServerConfigData.settings, getServerSettingsFlagValue("DiscordBot"));
- tempServerConfigData.createJobPickups = hasBitFlag(tempServerConfigData.settings, getServerSettingsFlagValue("JobPickups"));
- tempServerConfigData.createBusinessPickups = hasBitFlag(tempServerConfigData.settings, getServerSettingsFlagValue("BusinessPickups"));
- tempServerConfigData.createHousePickups = hasBitFlag(tempServerConfigData.settings, getServerSettingsFlagValue("HousePickups"));
- tempServerConfigData.createJobBlips = hasBitFlag(tempServerConfigData.settings, getServerSettingsFlagValue("JobBlips"));
- tempServerConfigData.createBusinessBlips = hasBitFlag(tempServerConfigData.settings, getServerSettingsFlagValue("BusinessBlips"));
- tempServerConfigData.createHouseBlips = hasBitFlag(tempServerConfigData.settings, getServerSettingsFlagValue("HouseBlips"));
- tempServerConfigData.useRealTime = hasBitFlag(tempServerConfigData.settings, getServerSettingsFlagValue("RealTime"));
- tempServerConfigData.antiCheat.enabled = hasBitFlag(tempServerConfigData.settings, getServerSettingsFlagValue("Anticheat"));
-
freeDatabaseQuery(dbQuery);
return tempServerConfigData;
}
diff --git a/scripts/server/event.js b/scripts/server/event.js
index eb0b6294..b7dea80a 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,124 @@ 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);
+ //sendAllVehiclesToPlayer(client);
requestPlayerPedNetworkId(client);
+ }
- getPlayerData(client).payDayTickStart = sdl.ticks;
- //}
+ getPlayerData(client).payDayTickStart = sdl.ticks;
}
// ===========================================================================
diff --git a/scripts/server/locale.js b/scripts/server/locale.js
index f10c0b02..a45ef9e8 100644
--- a/scripts/server/locale.js
+++ b/scripts/server/locale.js
@@ -34,8 +34,6 @@ function getLocaleString(client, stringName, ...args) {
submitBugReport(client, `(AUTOMATED REPORT) Locale string "${stringName}" is missing for "${getPlayerLocaleName(client)}"`);
}
- tempString = replaceColoursInMessage(tempString);
-
for(let i = 1; i <= args.length; i++) {
tempString = tempString.replace(`{${i}}`, args[i-1]);
}
@@ -47,7 +45,6 @@ function getLocaleString(client, stringName, ...args) {
function getGroupedLocaleString(client, stringName, index, ...args) {
let tempString = getRawGroupedLocaleString(stringName, getPlayerData(client).locale, index);
- tempString = replaceColoursInMessage(tempString);
for(let i = 1; i <= args.length; i++) {
tempString = tempString.replace(`{${i}}`, args[i-1]);
diff --git a/scripts/server/messaging.js b/scripts/server/messaging.js
index 29c7eb4d..e990d2be 100644
--- a/scripts/server/messaging.js
+++ b/scripts/server/messaging.js
@@ -33,19 +33,27 @@ function messageAdminAction(messageText) {
*
*/
function messagePlayerNormal(client, messageText, colour = COLOUR_WHITE) {
- if(isConsole(client) || client == null) {
- logToConsole(LOG_INFO, `${removeColoursInMessage(messageText)}`);
+ //if(isConsole(client) || client == null) {
+ // logToConsole(LOG_INFO, `${removeColoursInMessage(messageText)}`);
+ //}
+
+ messageText = replaceColoursInMessage(messageText);
+
+ if(client == null) {
+ message(messageText, colour);
+ } else {
+ messageClient(messageText, client, colour);
}
- sendChatBoxMessageToPlayer(client, `${replaceColoursInMessage(messageText)}`, colour);
+ //sendChatBoxMessageToPlayer(client, messageText, colour);
return true;
}
// ===========================================================================
function messageAdmins(messageText, colour = getColourByName("softRed")) {
- let plainMessage = removeColoursInMessage(messageText);
- console.warn(`🛡️ ${plainMessage}`);
+ //let plainMessage = removeColoursInMessage(messageText);
+ //console.warn(`🛡️ ${plainMessage}`);
let clients = getClients();
for(let i in clients) {
@@ -54,9 +62,9 @@ function messageAdmins(messageText, colour = getColourByName("softRed")) {
}
}
- if(getServerConfig().discordConfig.sendAdminEvents) {
- messageDiscordAdminChannel(plainMessage);
- }
+ //if(getServerConfig().discordConfig.sendAdminEvents) {
+ // messageDiscordAdminChannel(plainMessage);
+ //}
}
// ===========================================================================
@@ -236,17 +244,6 @@ function clearChatBox(client) {
// ===========================================================================
-function replaceEmojiInString(messageString) {
- for(let i in emojiReplaceString) {
- while(messageString.indexOf(emojiReplaceString[i][0]) != -1) {
- messageString = messageString.replace(emojiReplaceString[i][0], emojiReplaceString[i][1]);
- }
- }
- return messageString;
-}
-
-// ===========================================================================
-
function messagePlayerHelpContent(client, messageString) {
messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}${messageString}`);
}
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);
+ }
}
// ===========================================================================
diff --git a/scripts/server/staff.js b/scripts/server/staff.js
index adc48e5c..e0946934 100644
--- a/scripts/server/staff.js
+++ b/scripts/server/staff.js
@@ -46,7 +46,7 @@ function setStaffTitleCommand(command, params, client) {
return false;
}
- let splitParams = params.split("");
+ let splitParams = params.split(" ");
let targetClient = getPlayerFromParams(getParam(params, " ", 1));
let staffTitle = splitParams.slice(1).join(" ");
@@ -999,20 +999,16 @@ function forcePlayerSkinCommand(command, params, client) {
// return false;
//}
- let splitParams = params.split("");
+ let splitParams = params.split(" ");
let targetClient = getPlayerFromParams(splitParams[0]);
let skinIndex = getSkinModelIndexFromParams(splitParams.slice(1).join(" "), getGame());
- console.warn(targetClient.name);
- console.warn(splitParams.slice(1).join(" "));
- console.warn(skinIndex);
-
if(!targetClient) {
messagePlayerError(client, getLocaleString(client, "InvalidPlayer"));
return false;
}
- if(skinIndex == false) {
+ if(!skinIndex) {
messagePlayerError(client, getLocaleString(client, "InvalidSkin"));
return false;
}
@@ -1036,7 +1032,7 @@ function setPlayerHealthCommand(command, params, client) {
// return false;
//}
- let splitParams = params.split("");
+ let splitParams = params.split(" ");
let targetClient = getParam(params, " ", 1);
let health = getParam(params, " ", 2);
diff --git a/scripts/server/subaccount.js b/scripts/server/subaccount.js
index e9a16789..af332474 100644
--- a/scripts/server/subaccount.js
+++ b/scripts/server/subaccount.js
@@ -375,6 +375,11 @@ function selectCharacter(client, characterId = -1) {
spawnPlayer(client, spawnPosition, spawnHeading, getGameConfig().skins[getGame()][skin][0], spawnInterior, spawnDimension);
} else if(getGame() == VRR_GAME_GTA_IV) {
spawnPlayer(client, spawnPosition, spawnHeading, getGameConfig().skins[getGame()][skin][0], spawnInterior, spawnDimension);
+ //setPlayerSkin(client, skin);
+ //setPlayerPosition(client, spawnPosition);
+ //setPlayerHeading(client, spawnHeading);
+ //setPlayerInterior(client, spawnInterior);
+ //setPlayerDimension(client, spawnDimension);
} else if(getGame() >= VRR_GAME_MAFIA_ONE) {
spawnPlayer(client, getGameConfig().skins[getGame()][skin][0], spawnPosition, spawnHeading);
}
diff --git a/scripts/server/utilities.js b/scripts/server/utilities.js
index 92917103..b4f71220 100644
--- a/scripts/server/utilities.js
+++ b/scripts/server/utilities.js
@@ -283,6 +283,7 @@ function showConnectCameraToPlayer(client) {
//setPlayerDimension(client, 0);
setPlayerCameraLookAt(client, getServerConfig().connectCameraPosition, getServerConfig().connectCameraLookAt);
}
+ setPlayer2DRendering(client, false, false, false, false, false, false);
}
// ===========================================================================
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;
}
diff --git a/scripts/shared/gamedata.js b/scripts/shared/gamedata.js
index 75a543ac..eb6c8d05 100644
--- a/scripts/shared/gamedata.js
+++ b/scripts/shared/gamedata.js
@@ -3320,10 +3320,18 @@ let gameData = {
],
meleeWeapons: [
[],
- [1],
- [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
- [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
- [],
+ [1], // III
+ [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], // VC
+ [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], // SA
+ [], // UG
+ [1, 3], // IV
+ [], // Invalid
+ [], // Invalid
+ [], // Invalid
+ [], // M1
+ [], // M2
+ [], // M3
+ [], // M1DE
],
blipSprites: [
false,
@@ -4038,8 +4046,8 @@ let gameData = {
["M4", 500, 2],
["Beretta Shotgun", 500, 2],
["Sniper Rifle", 500, 2],
+ ["Micro Uzi Ammo", 500, 2],
["MP5 Ammo", 500, 2],
- ["Micro Uzi Ammo", 500, 2],
["AK-47 Ammo", 500, 2],
["M4 Ammo", 500, 2],
["Beretta Shotgun Ammo", 500, 2],
@@ -5439,3 +5447,4 @@ let gameData = {
],
};
+// ===========================================================================
\ No newline at end of file