From 1eac24669f12b44f33435c2d648e442126c9d891 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sat, 29 Oct 2022 10:05:28 -0500 Subject: [PATCH 01/37] Force ground snow --- scripts/client/utilities.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/scripts/client/utilities.js b/scripts/client/utilities.js index 490bcef1..b5a400a0 100644 --- a/scripts/client/utilities.js +++ b/scripts/client/utilities.js @@ -224,13 +224,11 @@ function setLocalPlayerInterior(interior) { // =========================================================================== -function setSnowState(falling, ground) { +function setSnowState(falling, ground, forceGround) { logToConsole(LOG_DEBUG, `[AGRP.Utilities] Setting falling snow to ${falling} and ground snow to ${ground}`); snowing = falling; - if (ground) { - forceSnowing(false); - forceSnowing(ground); - } + snow.enabled = ground; + forceSnowing(forceGround); } // =========================================================================== From 98fda983a5e4d55b0f5b09f991d9b4abca1e5cb1 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sat, 29 Oct 2022 10:05:43 -0500 Subject: [PATCH 02/37] Show reply action tip if not seen --- scripts/server/chat.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/server/chat.js b/scripts/server/chat.js index f8381793..32408799 100644 --- a/scripts/server/chat.js +++ b/scripts/server/chat.js @@ -225,7 +225,7 @@ function privateMessageCommand(command, params, client) { getPlayerData(targetClient).privateMessageReplyTo = client; messagePlayerPrivateMessage(targetClient, client, messageText); - if (hasPlayerSeenActionTip(targetClient, "ReplyToDirectMessage")) { + if (!hasPlayerSeenActionTip(targetClient, "ReplyToDirectMessage")) { messagePlayerTip(targetClient, getGroupedLocaleString(targetClient, "ActionTips", "ReplyToDirectMessage", "{ALTCOLOUR}/reply{MAINCOLOUR}")); } } From 455e87bd8722140021545a6cedc792d77e6e8036 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sat, 29 Oct 2022 10:05:56 -0500 Subject: [PATCH 03/37] Set default current pickup to null --- scripts/server/client.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/server/client.js b/scripts/server/client.js index d8b20f8b..d1f89b17 100644 --- a/scripts/server/client.js +++ b/scripts/server/client.js @@ -115,7 +115,7 @@ class ClientData { // Misc this.changingCharacterName = false; - this.currentPickup = false; + this.currentPickup = null; this.usingSkinSelect = false; this.keyBinds = []; this.incomingDamageMultiplier = 1; From a817db618bd678d00a9b6ef6edb6be886651f685 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sat, 29 Oct 2022 10:06:57 -0500 Subject: [PATCH 04/37] Custom weather array --- scripts/server/config.js | 12 ++-- scripts/server/timers.js | 35 ++++++++-- scripts/server/utilities.js | 14 ++-- scripts/shared/gamedata.js | 136 ++++++++++++++++++++---------------- 4 files changed, 118 insertions(+), 79 deletions(-) diff --git a/scripts/server/config.js b/scripts/server/config.js index 6d03f89a..e8517c1c 100644 --- a/scripts/server/config.js +++ b/scripts/server/config.js @@ -387,7 +387,7 @@ function applyConfigToServer(tempServerConfig) { if (isWeatherSupported()) { logToConsole(LOG_DEBUG, `[AGRP.Config]: Setting weather to ${tempServerConfig.weather}`); - game.forceWeather(tempServerConfig.weather); + game.forceWeather(getWeatherData(tempServerConfig.weather).weatherId); } updateServerRules(); @@ -583,19 +583,19 @@ function setWeatherCommand(command, params, client) { return false; } - let weatherId = getWeatherFromParams(getParam(params, " ", 1)); + let weatherIndex = getWeatherFromParams(getParam(params, " ", 1)); - if (!weatherId) { + if (!getWeatherData(weatherIndex)) { messagePlayerError(client, `That weather ID or name is invalid!`); return false; } - game.forceWeather(toInteger(weatherId)); - getServerConfig().weather = weatherId; + game.forceWeather(getWeatherData(weatherIndex).weatherId); + getServerConfig().weather = weatherIndex; getServerConfig().needsSaved = true; - announceAdminAction("ServerWeatherSet", getPlayerName(client), getGameConfig().weatherNames[getGame()][toInteger(weatherId)]); + announceAdminAction("ServerWeatherSet", getPlayerName(client), getWeatherData(weatherIndex).name); updateServerRules(); return true; } diff --git a/scripts/server/timers.js b/scripts/server/timers.js index c35d6327..b31d18e6 100644 --- a/scripts/server/timers.js +++ b/scripts/server/timers.js @@ -134,11 +134,18 @@ function thirtyMinuteTimerFunction() { checkPayDays(); } + checkInactiveVehicleRespawns(); + if (isGameFeatureSupported("snow")) { - checkSnowChance(); + setSnowWithChance(); } - checkInactiveVehicleRespawns(); + if (isGameFeatureSupported("weather")) { + setRandomWeather(); + } + + updateServerRules(); + saveServerDataToDatabase(); } @@ -330,7 +337,7 @@ function checkInactiveVehicleRespawns() { if (getVehicleData(vehicles[i]).lastActiveTime != false) { if (getCurrentUnixTimestamp() - getVehicleData(vehicles[i]).lastActiveTime >= getGlobalConfig().vehicleInactiveRespawnDelay) { respawnVehicle(vehicles[i]); - getVehicleData(vehicles[i]).lastActiveTime = false; + //getVehicleData(vehicles[i]).lastActiveTime = false; } } } else { @@ -342,13 +349,31 @@ function checkInactiveVehicleRespawns() { // =========================================================================== -function checkSnowChance() { +function setSnowWithChance() { let date = new Date(); - let shouldBeSnowing = getRandomBoolWithProbability(getGlobalConfig().monthlyChanceOfSnow[date.getMonths()]); + let shouldBeSnowing = getRandomBoolWithProbability(getGlobalConfig().monthlyChanceOfSnow[date.getMonth()]); getServerConfig().groundSnow = shouldBeSnowing; getServerConfig().fallingSnow = shouldBeSnowing; + updatePlayerSnowState(null); } +// =========================================================================== + +function setRandomWeather() { + let randomWeatherIndex = getRandom(0, getGameConfig().weather[getGame()].length - 1); + + if (getServerConfig().fallingSnow == true) { + while (getWeatherData(randomWeatherIndex).allowWithSnow == false) { + randomWeatherIndex = getRandom(0, getGameConfig().weather[getGame()].length - 1); + } + } + + game.forceWeather(getWeatherData(weatherIndex).weatherId); + getServerConfig().weather = weatherIndex; + + getServerConfig().needsSaved = true; +} + // =========================================================================== \ No newline at end of file diff --git a/scripts/server/utilities.js b/scripts/server/utilities.js index 55e569e3..a09d5a09 100644 --- a/scripts/server/utilities.js +++ b/scripts/server/utilities.js @@ -101,8 +101,8 @@ function updateServerRules() { if (isWeatherSupported()) { if (getServerConfig() != false) { - if (typeof getGameConfig().weatherNames[getGame()] != "undefined") { - let tempText = getGameConfig().weatherNames[getGame()][getServerConfig().weather]; + if (getWeatherData(getServerConfig().weather) != false) { + let tempText = getWeatherData(getServerConfig().weather).name; timeWeatherRule.push(tempText); } } @@ -124,14 +124,16 @@ function updateServerRules() { function getWeatherFromParams(params) { if (isNaN(params)) { - for (let i in getGameConfig().weatherNames[getGame()]) { - if (toLowerCase(getGameConfig().weatherNames[getGame()][i]).indexOf(toLowerCase(params)) != -1) { + for (let i in getGameConfig().weather[getGame()]) { + if (toLowerCase(getGameConfig().weather[getGame()][i].name).indexOf(toLowerCase(params)) != -1) { return i; } } } else { - if (typeof getGameConfig().weatherNames[getGame()][params] != "undefined") { - return toInteger(params); + for (let i in getGameConfig().weather[getGame()]) { + if (typeof getGameConfig().weather[getGame()][i].weatherId != "undefined") { + return toInteger(i); + } } } diff --git a/scripts/shared/gamedata.js b/scripts/shared/gamedata.js index a6bba225..dfdbee43 100644 --- a/scripts/shared/gamedata.js +++ b/scripts/shared/gamedata.js @@ -29,6 +29,16 @@ class AnimationData { // =========================================================================== +class WeatherData { + constructor(weatherId, name, allowWithSnow) { + this.weatherId = weatherId; + this.name = name; + this.allowWithSnow = allowWithSnow; + } +} + +// =========================================================================== + let supportedFeatures = { // Invalid, GTAIII, GTAVC, GTASA, Invalid, GTAIV, Invalid, Invalid, Invalid, M1, M2, M3, M1DE time: { @@ -563,77 +573,79 @@ let gameData = { } }, - weatherNames: { + weather: { [AGRP_GAME_GTA_III]: [ // GTA III - "Clear", - "Overcast", - "Thunderstorm", - "Fog", - "Clear", - "Rainy", - "Dark/Cloudy", - "Light/Cloudy", - "Overcast/Cloudy", - "Grey/Cloudy" + new WeatherData(0, "Clear", true), + new WeatherData(1, "Overcast", false), + new WeatherData(2, "Thunderstorm", false), + new WeatherData(3, "Fog", true), + new WeatherData(4, "Clear", false), + new WeatherData(5, "Rainy", false), + new WeatherData(6, "Dark/Cloudy", false), + new WeatherData(7, "Light/Cloudy", false), + new WeatherData(8, "Overcast/Cloudy", true), + new WeatherData(9, "Grey/Cloudy", false), ], [AGRP_GAME_GTA_VC]: [ // GTA Vice City - "Partly Cloudy", - "Overcast", - "Thunderstorm", - "Fog", - "Sunny", - "Hurricane", - "Dark/Cloudy", - "Light/Cloudy", - "Overcast/Cloudy", - "Grey/Cloudy" + new WeatherData(0, "Clear", true), + new WeatherData(1, "Overcast", false), + new WeatherData(2, "Thunderstorm", false), + new WeatherData(3, "Fog", true), + new WeatherData(4, "Sunny", false), + new WeatherData(5, "Hurricane", false), + new WeatherData(6, "Dark/Cloudy", false), + new WeatherData(7, "Light/Cloudy", false), + new WeatherData(8, "Overcast/Cloudy", true), + new WeatherData(9, "Grey/Cloudy", false), ], [AGRP_GAME_GTA_SA]: [ // GTA San Andreas - "Blue Skies", - "Blue Skies", - "Blue Skies", - "Blue Skies", - "Blue Skies", - "Blue Skies", - "Blue Skies", - "Blue Skies", - "Thunderstorm", - "Cloudy/Foggy", - "Clear Blue Skies", - "Heatwave", - "Dull/Colorless", - "Dull/Colorless", - "Dull/Colorless", - "Dull/Colorless", - "Dull/Rainy", - "Heatwave", - "Heatwave", - "Sandstorm", - "Greenish/Foggy" + new WeatherData(0, "Blue Skies", false), + new WeatherData(1, "Blue Skies", false), + new WeatherData(2, "Blue Skies", false), + new WeatherData(3, "Blue Skies", false), + new WeatherData(4, "Blue Skies", false), + new WeatherData(5, "Blue Skies", false), + new WeatherData(6, "Blue Skies", false), + new WeatherData(7, "Blue Skies", false), + new WeatherData(8, "Thunderstorm", false), + new WeatherData(9, "Cloudy/Foggy", false), + new WeatherData(10, "Clear Blue Skies", false), + new WeatherData(11, "Heatwave", false), + new WeatherData(12, "Dull/Colorless", false), + new WeatherData(13, "Dull/Colorless", false), + new WeatherData(14, "Dull/Colorless", false), + new WeatherData(15, "Dull/Colorless", false), + new WeatherData(16, "Dull/Rainy", false), + new WeatherData(17, "Heatwave", false), + new WeatherData(18, "Heatwave", false), + new WeatherData(19, "Sandstorm", false), + new WeatherData(20, "Greenish/Foggy", false), ], [AGRP_GAME_GTA_IV]: [ // GTA IV - "Extra Sunny", - "Sunny", - "Sunny/Windy", - "Cloudy", - "Rain", - "Light Rain", - "Foggy", - "Thunderstorm", - "Extra Sunny", - "Sunny/Windy", + new WeatherData(1, "Blue Skies", false), + new WeatherData(2, "Extra Sunny", false), + new WeatherData(3, "Sunny", false), + new WeatherData(4, "Sunny/Windy", false), + new WeatherData(5, "Cloudy", false), + new WeatherData(6, "Rain", false), + new WeatherData(7, "Light Rain", false), + new WeatherData(8, "Foggy", false), + new WeatherData(9, "Thunderstorm", false), + new WeatherData(10, "Extra Sunny", false), + new WeatherData(11, "Sunny/Windy", false), ], [AGRP_GAME_GTA_IV_EFLC]: [ // GTA IV EFLC - "Extra Sunny", - "Sunny", - "Sunny/Windy", - "Cloudy", - "Rain", - "Light Rain", - "Foggy", - "Thunderstorm", - "Extra Sunny", - "Sunny/Windy", + new WeatherData(1, "Blue Skies", false), + new WeatherData(2, "Extra Sunny", false), + new WeatherData(3, "Sunny", false), + new WeatherData(4, "Sunny/Windy", false), + new WeatherData(5, "Cloudy", false), + new WeatherData(6, "Rain", false), + new WeatherData(7, "Light Rain", false), + new WeatherData(8, "Foggy", false), + new WeatherData(9, "Thunderstorm", false), + new WeatherData(10, "Extra Sunny", false), + new WeatherData(11, "Sunny/Windy", false), ], [AGRP_GAME_GTA_V]: [ From c75ef6b89ab264d34ac4505b6f456366daf6756f Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sat, 29 Oct 2022 10:07:06 -0500 Subject: [PATCH 05/37] Reduce default log level --- scripts/server/core.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/server/core.js b/scripts/server/core.js index a4d28ae2..fc10709e 100644 --- a/scripts/server/core.js +++ b/scripts/server/core.js @@ -10,7 +10,7 @@ let scriptVersion = "1.2"; let serverStartTime = 0; -let logLevel = LOG_INFO | LOG_DEBUG | LOG_VERBOSE; // LOG_ERROR|LOG_WARN; +let logLevel = LOG_INFO; // LOG_ERROR|LOG_WARN; let playerResourceReady = new Array(server.maxClients).fill(false); let playerResourceStarted = new Array(server.maxClients).fill(false); From 3eda3acef7c6d70acf838d2dd9d6c8af5884710a Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sat, 29 Oct 2022 10:07:36 -0500 Subject: [PATCH 06/37] Set player distance to infinite + fix veh save --- scripts/server/event.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/scripts/server/event.js b/scripts/server/event.js index caa5526f..99f600cf 100644 --- a/scripts/server/event.js +++ b/scripts/server/event.js @@ -205,12 +205,6 @@ function onPedExitingVehicle(event, ped, vehicle) { let client = getClientFromPlayerElement(ped); getPlayerData(client).pedState = AGRP_PEDSTATE_EXITINGVEHICLE; } - - if (!getVehicleData(vehicle).spawnLocked) { - getVehicleData(vehicle).spawnPosition = getVehiclePosition(vehicle); - getVehicleData(vehicle).spawnRotation = getVehicleHeading(vehicle); - getVehicleData(vehicle).needsSaved = true; - } } // =========================================================================== @@ -511,7 +505,7 @@ async function onPlayerSpawn(client) { if (isGameFeatureSupported("snow")) { logToConsole(LOG_DEBUG, `[AGRP.Event] Sending snow states to ${getPlayerDisplayForConsole(client)}`); - updatePlayerSnowState(client); + updatePlayerSnowState(client, true); } if (areServerElementsSupported() && isGameFeatureSupported("walkStyle")) { @@ -629,7 +623,9 @@ async function onPlayerSpawn(client) { if (areServerElementsSupported()) { if (getGlobalConfig().playerStreamInDistance == -1 || getGlobalConfig().playerStreamOutDistance == -1) { - getPlayerPed(client).netFlags.distanceStreaming = false; + //getPlayerPed(client).netFlags.distanceStreaming = false; + setElementStreamInDistance(getPlayerPed(client), 99999); + setElementStreamOutDistance(getPlayerPed(client), 99999); } else { setElementStreamInDistance(getPlayerPed(client), getServerConfig().playerStreamInDistance); setElementStreamOutDistance(getPlayerPed(client), getServerConfig().playerStreamOutDistance); @@ -679,6 +675,12 @@ function onPedExitedVehicle(event, ped, vehicle, seat) { if (client != null) { getPlayerData(client).pedState = AGRP_PEDSTATE_READY; + if (getVehicleData(vehicle).spawnLocked == false && canPlayerManageVehicle(client, vehicle) == true) { + getVehicleData(vehicle).spawnPosition = getVehiclePosition(vehicle); + getVehicleData(vehicle).spawnRotation = getVehicleHeading(vehicle); + getVehicleData(vehicle).needsSaved = true; + } + stopRadioStreamForPlayer(client); if (!getVehicleData(vehicle)) { From afed90a2eb3abdce2b0f444ce2bbfa1ef61d2601 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sat, 29 Oct 2022 10:07:49 -0500 Subject: [PATCH 07/37] Fix DM message + show sent message --- scripts/server/messaging.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/server/messaging.js b/scripts/server/messaging.js index 2dac16fb..4f00c566 100644 --- a/scripts/server/messaging.js +++ b/scripts/server/messaging.js @@ -232,7 +232,8 @@ function messagePlayersInRace(raceId, message) { // =========================================================================== function messagePlayerPrivateMessage(toClient, fromClient, messageText) { - messagePlayerNormal(toClient, `{yellow}[DM] ${getCharacterFullName(fromClient)}{MAINCOLOUR}says: {ALTCOLOUR}${messageText}`); + messagePlayerNormal(toClient, `📥 {yellow}DM from ${getCharacterFullName(fromClient)}{MAINCOLOUR}: ${messageText}`); + messagePlayerNormal(fromClient, `📤 {yellow}DM to ${getCharacterFullName(toClient)}{MAINCOLOUR}: ${messageText}`); } // =========================================================================== From 7f1ab3a3e46e217d6342a21b905b8840629af181 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sat, 29 Oct 2022 10:08:02 -0500 Subject: [PATCH 08/37] Fix property enter/exit --- scripts/server/misc.js | 106 ++++++++++++++++++++++++++++++----------- 1 file changed, 79 insertions(+), 27 deletions(-) diff --git a/scripts/server/misc.js b/scripts/server/misc.js index a464cb3a..5592ef05 100644 --- a/scripts/server/misc.js +++ b/scripts/server/misc.js @@ -211,42 +211,52 @@ function enterExitPropertyCommand(command, params, client) { return false; } + let position = getPlayerPosition(client); + let dimension = getPlayerDimension(client); + + /* // The player's currentPickup wasn't always being set. This prevented entering/exiting a property. // Needs further testing and tweaks. - if (!getPlayerData(client).currentPickup) { - let ownerType = getEntityData(getPlayerData(client).currentPickup, "agrp.owner.type"); - let ownerId = getEntityData(getPlayerData(client).currentPickup, "agrp.owner.id"); + if (getPlayerData(client).currentPickup != null) { + if (getDistance(getPlayerData(client).currentPickup.position, getPlayerPosition(client)) <= 2) { + let ownerType = getEntityData(getPlayerData(client).currentPickup, "agrp.owner.type"); + let ownerId = getEntityData(getPlayerData(client).currentPickup, "agrp.owner.id"); - switch (ownerType) { - case AGRP_PICKUP_BUSINESS_ENTRANCE: - isBusiness = true; - isEntrance = true; - closestProperty = getServerData().businesses[ownerId]; - break; + switch (ownerType) { + case AGRP_PICKUP_BUSINESS_ENTRANCE: + isBusiness = true; + isEntrance = true; + closestProperty = getServerData().businesses[ownerId]; + break; - case AGRP_PICKUP_BUSINESS_EXIT: - isBusiness = true; - isEntrance = false; - closestProperty = getServerData().businesses[ownerId]; - break; + case AGRP_PICKUP_BUSINESS_EXIT: + isBusiness = true; + isEntrance = false; + closestProperty = getServerData().businesses[ownerId]; + break; - case AGRP_PICKUP_HOUSE_ENTRANCE: - isBusiness = false; - isEntrance = true; - closestProperty = getServerData().houses[ownerId]; - break; + case AGRP_PICKUP_HOUSE_ENTRANCE: + isBusiness = false; + isEntrance = true; + closestProperty = getServerData().houses[ownerId]; + break; - case AGRP_PICKUP_HOUSE_EXIT: - isBusiness = false; - isEntrance = false; - closestProperty = getServerData().houses[ownerId]; - break; + case AGRP_PICKUP_HOUSE_EXIT: + isBusiness = false; + isEntrance = false; + closestProperty = getServerData().houses[ownerId]; + break; - default: - return false; + default: + return false; + } + } else { + getPlayerData(client).currentPickup = null; } } + */ + /* // Check businesses first if (closestProperty == null) { let businessIndex = getClosestBusinessEntrance(getPlayerPosition(client), getPlayerDimension(client)); @@ -284,6 +294,48 @@ function enterExitPropertyCommand(command, params, client) { closestProperty = getServerData().houses[houseIndex]; } } + */ + + // Check businesses first + if (closestProperty == null) { + for (let i in getServerData().businesses) { + if (getServerData().businesses[i].entranceDimension == dimension) { + if (getDistance(position, getServerData().businesses[i].entrancePosition) <= getGlobalConfig().enterPropertyDistance) { + isBusiness = true; + isEntrance = true; + closestProperty = getServerData().businesses[i]; + } + } else { + if (getServerData().businesses[i].exitDimension == dimension) { + if (getDistance(position, getServerData().businesses[i].exitPosition) <= getGlobalConfig().exitPropertyDistance) { + isBusiness = true; + isEntrance = false; + closestProperty = getServerData().businesses[i]; + } + } + } + } + } + + if (closestProperty == null) { + for (let i in getServerData().houses) { + if (getServerData().houses[i].entranceDimension == dimension) { + if (getDistance(position, getServerData().houses[i].entrancePosition) <= getGlobalConfig().enterPropertyDistance) { + isBusiness = false; + isEntrance = true; + closestProperty = getServerData().houses[i]; + } + } else { + if (getServerData().houses[i].exitDimension == dimension) { + if (getDistance(position, getServerData().houses[i].exitPosition) <= getGlobalConfig().exitPropertyDistance) { + isBusiness = false; + isEntrance = false; + closestProperty = getServerData().houses[i]; + } + } + } + } + } if (closestProperty == null) { logToConsole(LOG_DEBUG, `${getPlayerDisplayForConsole(client)}'s closest door is null`); @@ -293,7 +345,7 @@ function enterExitPropertyCommand(command, params, client) { logToConsole(LOG_DEBUG, `${getPlayerDisplayForConsole(client)}'s closest door is ${(isBusiness) ? closestProperty.name : closestProperty.description} ${(isEntrance) ? "entrance" : "exit"}`); let englishId = getLocaleFromParams("English"); - let typeString = (isBusiness) ? getLocaleString(client, "Business") : getLocaleString(client, "House"); + let typeString = (isBusiness) ? getLanguageLocaleString(englishId, "Business") : getLanguageLocaleString(englishId, "House"); let nameString = (isBusiness) ? closestProperty.name : closestProperty.description; if (isEntrance) { From 0f49ebfa63de789169830e7870e69ed0b8d5e3fb Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sat, 29 Oct 2022 10:08:09 -0500 Subject: [PATCH 09/37] Force ground snow --- scripts/server/netevents.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/server/netevents.js b/scripts/server/netevents.js index c5c884dd..2c4739b0 100644 --- a/scripts/server/netevents.js +++ b/scripts/server/netevents.js @@ -222,10 +222,10 @@ function syncPlayerProperties(client) { // =========================================================================== -function updatePlayerSnowState(client) { +function updatePlayerSnowState(client, forceGroundSnow = false) { if (isSnowSupported(getGame())) { logToConsole(LOG_DEBUG, `[AGRP.Client] Setting ${getPlayerDisplayForConsole(client)}'s snow state (Falling: ${toUpperCase(getOnOffFromBool(getServerConfig().fallingSnow))}, Ground: ${toUpperCase(getOnOffFromBool(getServerConfig().groundSnow))})`); - sendNetworkEventToPlayer("agrp.snow", client, getServerConfig().fallingSnow, getServerConfig().groundSnow); + sendNetworkEventToPlayer("agrp.snow", client, getServerConfig().fallingSnow, getServerConfig().groundSnow, forceGroundSnow); } } From 2e75230d387c01b4e1ace4b079b07109744ce011 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sat, 29 Oct 2022 10:08:32 -0500 Subject: [PATCH 10/37] Shorten floats in near veh + don't take money for admin cmds --- scripts/server/vehicle.js | 43 +++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/scripts/server/vehicle.js b/scripts/server/vehicle.js index ebe14652..3699a92b 100644 --- a/scripts/server/vehicle.js +++ b/scripts/server/vehicle.js @@ -428,11 +428,11 @@ function getNearbyVehiclesCommand(command, params, client) { } let vehiclesList = nearbyVehicles.map(function (x) { - return `{ALTCOLOUR}${getVehicleData(x).index}: {MAINCOLOUR}${getVehicleName(x)} {mediumGrey}(${toFloat(getDistance(getPlayerPosition(client), getVehiclePosition(x)), 2)} ${getLocaleString(client, "Meters")} ${getGroupedLocaleString(client, "CardinalDirections", getCardinalDirectionName(getCardinalDirection(getPlayerPosition(client), getVehiclePosition(x))))}`; + return `{ALTCOLOUR}${getVehicleData(x).index}: {MAINCOLOUR}${getVehicleName(x)} {mediumGrey}(${toFloat(getDistance(getPlayerPosition(client), getVehiclePosition(x))).toFixed(2)} ${toLowerCase(getLocaleString(client, "Meters"))} ${toLowerCase(getGroupedLocaleString(client, "CardinalDirections", getCardinalDirectionName(getCardinalDirection(getPlayerPosition(client), getVehiclePosition(x)))))})`; }); let chunkedList = splitArrayIntoChunks(vehiclesList, 4); - messagePlayerNormal(client, makeChatBoxSectionHeader(getLocaleString(client, "HeaderVehiclesInRangeList", `${distance} ${getLocaleString(client, "Meters")} `))); + messagePlayerNormal(client, makeChatBoxSectionHeader(getLocaleString(client, "HeaderVehiclesInRangeList", `${distance} ${toLowerCase(getLocaleString(client, "Meters"))}`))); for (let i in chunkedList) { messagePlayerInfo(client, chunkedList[i].join(", ")); } @@ -609,8 +609,8 @@ function vehicleAdminColourCommand(command, params, client) { let colour1 = toInteger(getParam(params, " ", 1)) || 0; let colour2 = toInteger(getParam(params, " ", 2)) || 0; - takePlayerCash(client, getGlobalConfig().resprayVehicleCost); - updatePlayerCash(client); + //takePlayerCash(client, getGlobalConfig().resprayVehicleCost); + //updatePlayerCash(client); vehicle.colour1 = colour1; vehicle.colour2 = colour2; getVehicleData(vehicle).colour1 = colour1; @@ -618,7 +618,7 @@ function vehicleAdminColourCommand(command, params, client) { getVehicleData(vehicle).needsSaved = true; - meActionToNearbyPlayers(client, `resprays the ${getVehicleName(vehicle)}'s colours`); + //meActionToNearbyPlayers(client, `resprays the ${getVehicleName(vehicle)}'s colours`); } // =========================================================================== @@ -639,10 +639,10 @@ function vehicleAdminRepairCommand(command, params, client) { } logToConsole(LOG_DEBUG, `${getPlayerDisplayForConsole(client)} repaired their ${getVehicleName(vehicle)} vehicle`); - takePlayerCash(client, getGlobalConfig().repairVehicleCost); + //takePlayerCash(client, getGlobalConfig().repairVehicleCost); repairVehicle(vehicle); getVehicleData(vehicle).needsSaved = true; - meActionToNearbyPlayers(client, `repairs the ${getVehicleName(vehicle)}`); + //meActionToNearbyPlayers(client, `repairs the ${getVehicleName(vehicle)}`); } // =========================================================================== @@ -660,10 +660,10 @@ function vehicleAdminLiveryCommand(command, params, client) { return false; } - if (getPlayerCurrentSubAccount(client).cash < getGlobalConfig().repairVehicleCost) { - messagePlayerError(client, `You don't have enough money to change the vehicle's livery (need ${getCurrencyString(getGlobalConfig().resprayVehicleCost - getPlayerCurrentSubAccount(client).cash)} more!)`); - return false; - } + //if (getPlayerCurrentSubAccount(client).cash < getGlobalConfig().repairVehicleCost) { + // messagePlayerError(client, `You don't have enough money to change the vehicle's livery (need ${getCurrencyString(getGlobalConfig().resprayVehicleCost - getPlayerCurrentSubAccount(client).cash)} more!)`); + // return false; + //} let livery = toInteger(params) || 3; @@ -675,7 +675,7 @@ function vehicleAdminLiveryCommand(command, params, client) { setEntityData(vehicle, "agrp.livery", livery, true); forcePlayerToSyncElementProperties(null, vehicle); - meActionToNearbyPlayers(client, `sets the ${getVehicleName(vehicle)}'s livery/paintjob'`); + //meActionToNearbyPlayers(client, `sets the ${getVehicleName(vehicle)}'s livery/paintjob'`); } // =========================================================================== @@ -698,6 +698,11 @@ function buyVehicleCommand(command, params, client) { return false; } + if (canPlayerManageVehicle(client, vehicle)) { + messagePlayerError(client, getLocaleString(client, "AlreadyOwnVehicle")); + return false; + } + if (getPlayerCurrentSubAccount(client).cash < getVehicleData(vehicle).buyPrice) { messagePlayerError(client, getLocaleString(client, "VehiclePurchaseNotEnoughMoney")); return false; @@ -845,7 +850,7 @@ function doesPlayerHaveVehicleKeys(client, vehicle) { // =========================================================================== -function doesClientOwnVehicle(client, vehicle) { +function canPlayerManageVehicle(client, vehicle) { let vehicleData = getVehicleData(vehicle); if (doesPlayerHaveStaffPermission(client, getStaffFlagValue("ManageVehicles"))) { @@ -866,6 +871,12 @@ function doesClientOwnVehicle(client, vehicle) { } } + if (vehicleData.ownerType == AGRP_VEHOWNER_BIZ) { + if (canPlayerManageBusiness(client, getBusinessIdFromDatabaseId(vehicleData.ownerId))) { + return true; + } + } + return false; } @@ -1079,9 +1090,10 @@ function setVehicleRentPriceCommand(command, params, client) { return false; } - if (!doesClientOwnVehicle(client, vehicle)) { + if (!canPlayerManageVehicle(client, vehicle)) { if (!doesPlayerHaveStaffPermission(client, getStaffFlagValue("ManageVehicles"))) { messagePlayerError(client, "You can't set the rent price for this vehicle!"); + return false; } } @@ -1108,9 +1120,10 @@ function setVehicleBuyPriceCommand(command, params, client) { return false; } - if (!doesClientOwnVehicle(client, vehicle)) { + if (!canPlayerManageVehicle(client, vehicle)) { if (!doesPlayerHaveStaffPermission(client, getStaffFlagValue("ManageVehicles"))) { messagePlayerError(client, "You can't set the buy price for this vehicle!"); + return false; } } From 0e32d8bed8fd5256dd0f3fa8e6fa6aba39ec674c Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sat, 29 Oct 2022 10:08:50 -0500 Subject: [PATCH 11/37] Add probability bool and weather data util --- scripts/shared/utilities.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/scripts/shared/utilities.js b/scripts/shared/utilities.js index 72713157..6239a4a9 100644 --- a/scripts/shared/utilities.js +++ b/scripts/shared/utilities.js @@ -1121,7 +1121,7 @@ let profanityFilterWords = [ "anus", "apeshit", "arsehole", - "ass", + //"ass", "asshole", "assmunch", "autoerotic", @@ -3230,4 +3230,20 @@ function isServerGoingToChangeMapsSoon(hour, minute) { return false; } +// =========================================================================== + +function getRandomBoolWithProbability(percentChance) { + return (Math.random() < percentChance / 100); +} + +// =========================================================================== + +function getWeatherData(weatherIndex, gameId = getGame()) { + if (typeof getGameConfig().weather[gameId][weatherIndex] == "undefined") { + return false; + } + + return getGameConfig().weather[gameId][weatherIndex]; +} + // =========================================================================== \ No newline at end of file From 160090674ad54b12dff4acbd3353cbd7d310fe21 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 2 Nov 2022 06:48:29 -0500 Subject: [PATCH 12/37] Fix wrong var name in local cash --- scripts/client/utilities.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/client/utilities.js b/scripts/client/utilities.js index b5a400a0..59fa4df6 100644 --- a/scripts/client/utilities.js +++ b/scripts/client/utilities.js @@ -600,7 +600,7 @@ function updateLocalPlayerMoney() { } if (getGame() == AGRP_GAME_GTA_IV) { - natives.setMultiplayerHudCash(amount); + natives.setMultiplayerHudCash(localPlayerMoney); } } From d7eb7d3e3a68b8f06f679cda9efad952c73435eb Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 2 Nov 2022 06:48:40 -0500 Subject: [PATCH 13/37] Force snow if enabled --- scripts/server/client.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/server/client.js b/scripts/server/client.js index d1f89b17..eb29856e 100644 --- a/scripts/server/client.js +++ b/scripts/server/client.js @@ -228,7 +228,7 @@ function initClient(client) { sendPlayerCurrencyString(client); sendPlayerGUIColours(client); sendPlayerGUIInit(client); - updatePlayerSnowState(client); + updatePlayerSnowState(client, getServerConfig().groundSnow); //logToConsole(LOG_DEBUG, `[AGRP.Account] Showing connect camera to ${getPlayerDisplayForConsole(client)} ...`); //showConnectCameraToPlayer(client); From c091cb249a09df5d10e8040d3b9c43ab963be044 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 2 Nov 2022 06:48:49 -0500 Subject: [PATCH 14/37] JSDoc --- scripts/server/command.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/scripts/server/command.js b/scripts/server/command.js index d5342c76..152df10c 100644 --- a/scripts/server/command.js +++ b/scripts/server/command.js @@ -81,6 +81,8 @@ function loadCommands() { new CommandData("chatfilter", toggleAccountProfanityFilterCommand, "", getStaffFlagValue("None"), true, false, "Turns on/off profanity filter"), new CommandData("chatemoji", toggleAccountReplaceEmojiCommand, "", getStaffFlagValue("None"), true, false, "Turns on/off automatic emoji"), new CommandData("emoji", toggleAccountReplaceEmojiCommand, "", getStaffFlagValue("None"), true, false, "Turns on/off automatic emoji"), + //new CommandData("resetkeybinds", resetKeyBindsCommand, "", getStaffFlagValue("None"), true, false, "Resets all your keybinds to default"), + //new CommandData("copykeybinds", copyKeyBindsToServerCommand, "", getStaffFlagValue("None"), true, false, "Copies all your current keybinds to another server"), //new CommandData("noblood", toggleAccountHideBloodCommand, "", getStaffFlagValue("None"), true, false, "Turns on/off blood in-game"), ], ammunation: [], @@ -719,6 +721,9 @@ function addAllCommandHandlers() { // =========================================================================== +/** + * @return {CommandData} command + */ function getCommand(command) { let commandGroups = getCommands() for (let i in commandGroups) { @@ -735,6 +740,9 @@ function getCommand(command) { // =========================================================================== +/** + * @return {CommandData} command + */ function getCommandData(command) { return getCommand(command); } @@ -1029,10 +1037,10 @@ function cacheAllCommandsAliases() { // =========================================================================== -function getCommandAliasesNames(command) { +function getCommandAliasesNames(commandData) { let commandAliases = []; - for (let i in command.aliases) { - commandAliases.push(command.aliases[i].name); + for (let i in commandData.aliases) { + commandAliases.push(commandData.aliases[i].name); } return commandAliases; From d144ef954df2c979fbe76d7d973ff0f0a4ec6eca Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 2 Nov 2022 06:49:21 -0500 Subject: [PATCH 15/37] Comment some unused stuff --- scripts/server/event.js | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/scripts/server/event.js b/scripts/server/event.js index 99f600cf..4c8808f2 100644 --- a/scripts/server/event.js +++ b/scripts/server/event.js @@ -241,16 +241,16 @@ function onResourceStop(event, resource) { function onPedEnteredSphere(event, ped, sphere) { logToConsole(LOG_WARN | LOG_DEBUG, `[AGRP.Event] Ped ${ped.id} entered sphere ${sphere.id}!`); - if (ped.isType(ELEMENT_PLAYER)) { - let client = getClientFromPlayerElement(ped); + //if (ped.isType(ELEMENT_PLAYER)) { + // let client = getClientFromPlayerElement(ped); - // Handled client-side since server spheres aren't showing on GTAC atm (bug) - //if (isPlayerOnJobRoute(client)) { - // if (sphere == getJobRouteLocationData(getPlayerJob(client), getPlayerJobRoute(client), getPlayerJobRouteLocation(client)).marker) { - // playerArrivedAtJobRouteLocation(client); - // } - //} - } + // Handled client-side since server spheres aren't showing on GTAC atm (bug) + //if (isPlayerOnJobRoute(client)) { + // if (sphere == getJobRouteLocationData(getPlayerJob(client), getPlayerJobRoute(client), getPlayerJobRouteLocation(client)).marker) { + // playerArrivedAtJobRouteLocation(client); + // } + //} + //} } // =========================================================================== @@ -280,6 +280,7 @@ function onPedPickupPickedUp(event, ped, pickup) { // =========================================================================== +/* function onPedWasted(event, ped, killerPed, weapon, pedPiece) { logToConsole(LOG_WARN | LOG_DEBUG, `[AGRP.Event] Ped ${ped.id} wasted by ped ${killerPed.id}!`); @@ -291,6 +292,7 @@ function onPedWasted(event, ped, killerPed, weapon, pedPiece) { onPlayerWasted(getClientFromPlayerElement(ped), killerClient, weapon, pedPiece); } } +*/ // =========================================================================== @@ -390,12 +392,12 @@ function onPlayerDeath(client, killer, weapon, pedPiece) { function onPedSpawn(ped) { logToConsole(LOG_WARN | LOG_DEBUG, `[AGRP.Event] Ped ${ped.id} spawned!`); - if (ped.type == ELEMENT_PLAYER) { - if (getGame() != AGRP_GAME_MAFIA_ONE && getGame() != AGRP_GAME_GTA_IV) { - //setTimeout(onPlayerSpawn, 250, ped); - //onPlayerSpawn(); - } - } + //if (ped.type == ELEMENT_PLAYER) { + // if (getGame() != AGRP_GAME_MAFIA_ONE && getGame() != AGRP_GAME_GTA_IV) { + // //setTimeout(onPlayerSpawn, 250, getClientFromPlayerElement(ped)); + // //onPlayerSpawn(getClientFromPlayerElement(ped)); + // } + //} } // =========================================================================== @@ -503,10 +505,10 @@ async function onPlayerSpawn(client) { setPlayer2DRendering(client, true, true, true, true, true, true); } - if (isGameFeatureSupported("snow")) { - logToConsole(LOG_DEBUG, `[AGRP.Event] Sending snow states to ${getPlayerDisplayForConsole(client)}`); - updatePlayerSnowState(client, true); - } + //if (isGameFeatureSupported("snow")) { + // logToConsole(LOG_DEBUG, `[AGRP.Event] Sending snow states to ${getPlayerDisplayForConsole(client)}`); + // updatePlayerSnowState(client, true); + //} if (areServerElementsSupported() && isGameFeatureSupported("walkStyle")) { logToConsole(LOG_DEBUG, `[AGRP.Event] Setting player walking style for ${getPlayerDisplayForConsole(client)}`); From cf0c578699dbbfa39938b06d97332676eeee0e8c Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 2 Nov 2022 06:49:29 -0500 Subject: [PATCH 16/37] Fix command help --- scripts/server/help.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/scripts/server/help.js b/scripts/server/help.js index 0b39ed60..f52105fe 100644 --- a/scripts/server/help.js +++ b/scripts/server/help.js @@ -348,22 +348,23 @@ function showCommandHelpMessage(client, commandName) { commandName = commandName.slice(1); } - let command = getCommandData(commandName); - let aliases = getCommandAliasesNames(command); + let commandData = getCommandData(commandName); + let aliases = getCommandAliasesNames(commandData); messagePlayerInfo(client, makeChatBoxSectionHeader(getLocaleString(client, "HeaderCommandInfo", commandName))); - messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Description: ${command.helpDescription}`); + messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Description: ${commandData.helpDescription}`); + messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Usage: /${commandData.command} ${commandData.syntaxString}`); if (aliases.length > 0) { - messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Aliases: ${aliases.join(", ")}`); + messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Aliases: ${aliases.map(alias => `/${alias.command}`).join(", ")}`); } else { messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Aliases: (None)`); } - //messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Usable on Discord: ${getYesNoFromBool(command.allowOnDiscord)}`); + //messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Usable on Discord: ${getYesNoFromBool(commandData.allowOnDiscord)}`); //if(doesPlayerHaveStaffPermission(client, getStaffFlagValue("BasicModeration"))) { - // messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Usable on Discord: ${getYesNoFromBool(command.allowOnDiscord)}`); + // messagePlayerNormal(client, `{clanOrange}• {MAINCOLOUR}Usable on Discord: ${getYesNoFromBool(commandData.allowOnDiscord)}`); //} } From 44895aa2d083c842184e95d09dd5d263a1cb5023 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 2 Nov 2022 06:49:46 -0500 Subject: [PATCH 17/37] Comment keybind combo (unfinished) --- scripts/server/keybind.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/server/keybind.js b/scripts/server/keybind.js index 0e1617a2..6641fe4d 100644 --- a/scripts/server/keybind.js +++ b/scripts/server/keybind.js @@ -106,14 +106,14 @@ function copyKeyBindsToServerCommand(command, params, client) { // =========================================================================== -function addPlayerKeyBind(client, keys, command, params, tempKey = false) { +function addPlayerKeyBind(client, keyId, command, params, tempKey = false) { let keyBindData = new KeyBindData(false, keys, `${command} ${params}`); if (tempKey == true) { keyBindData.databaseId = -1; } getPlayerData(client).keyBinds.push(keyBindData); - sendAddAccountKeyBindToClient(client, keys, (keys.length > 1) ? AGRP_KEYSTATE_COMBO : AGRP_KEYSTATE_UP); + sendAddAccountKeyBindToClient(client, keyId, AGRP_KEYSTATE_UP); if (!doesPlayerHaveKeyBindsDisabled(client) && doesPlayerHaveKeyBindForCommand(client, "enter")) { let keyId = getPlayerKeyBindForCommand(client, "enter"); From 95abb20b5e834c3ffd9095ef4dab80778ff38668 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 2 Nov 2022 06:50:03 -0500 Subject: [PATCH 18/37] Fallback country ISO code if GeoIP fails --- scripts/server/locale.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/server/locale.js b/scripts/server/locale.js index e506a96e..742b08aa 100644 --- a/scripts/server/locale.js +++ b/scripts/server/locale.js @@ -297,7 +297,7 @@ async function translateMessage(messageText, translateFrom = getGlobalConfig().l // =========================================================================== -function getLocaleFromCountryISO(isoCode) { +function getLocaleFromCountryISO(isoCode = "US") { for (let i in getLocales()) { for (let j in getLocales()[i].countries) { if (toLowerCase(getLocales()[i].countries[j]) == toLowerCase(isoCode)) { From 79812375f1cecec9098ba20ea54872a4370a0fd7 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 2 Nov 2022 06:50:33 -0500 Subject: [PATCH 19/37] Remove some extra IV workarounds --- scripts/server/native/connected.js | 34 +++++++++++++++--------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/scripts/server/native/connected.js b/scripts/server/native/connected.js index 5f2a1f1f..2975fbbe 100644 --- a/scripts/server/native/connected.js +++ b/scripts/server/native/connected.js @@ -193,9 +193,9 @@ function getVehicleHeading(vehicle) { // =========================================================================== function setVehicleHeading(vehicle, heading) { - if (getGame() == AGRP_GAME_GTA_IV) { - return sendNetworkEventToPlayer("agrp.vehPosition", null, getVehicleForNetworkEvent(vehicle), heading); - } + //if (getGame() == AGRP_GAME_GTA_IV) { + // return sendNetworkEventToPlayer("agrp.vehPosition", null, getVehicleForNetworkEvent(vehicle), heading); + //} return vehicle.heading = heading; } @@ -227,12 +227,12 @@ function getVehicleSyncer(vehicle) { // =========================================================================== function getVehicleForNetworkEvent(vehicle) { - if (getGame() == AGRP_GAME_GTA_IV) { - if (getVehicleData(vehicle).ivNetworkId != -1) { - return getVehicleData(vehicle).ivNetworkId; - } - return -1; - } + //if (getGame() == AGRP_GAME_GTA_IV) { + // if (getVehicleData(vehicle).ivNetworkId != -1) { + // return getVehicleData(vehicle).ivNetworkId; + // } + // return -1; + //} return vehicle.id; } @@ -1112,9 +1112,9 @@ function getClosestCivilian(position) { // =========================================================================== function getVehiclesInRange(position, range) { - if (getGame() == AGRP_GAME_GTA_IV) { - return getServerData().vehicles.reduce((i, j) => (getDistance(position, i.syncPosition) <= getDistance(position, j.syncPosition)) ? i : j); - } + //if (getGame() == AGRP_GAME_GTA_IV) { + // return getServerData().vehicles.reduce((i, j) => (getDistance(position, i.syncPosition) <= getDistance(position, j.syncPosition)) ? i : j); + //} return getElementsByTypeInRange(ELEMENT_VEHICLE, position, range); } @@ -1241,11 +1241,11 @@ function getPlayerPed(client) { return null; } - if (getGame() == AGRP_GAME_GTA_IV) { - return getPlayerData(client).ped; - } else { - return client.player; - } + //if (getGame() == AGRP_GAME_GTA_IV) { + // return getPlayerData(client).ped; + //} else { + return client.player; + //} } // =========================================================================== From 39ec134b2523977cfca48b97ad3570f3c7e3439b Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 2 Nov 2022 06:50:53 -0500 Subject: [PATCH 20/37] Handle reset keybinds prompt --- scripts/server/prompt.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/scripts/server/prompt.js b/scripts/server/prompt.js index 92ceed04..86efdcdf 100644 --- a/scripts/server/prompt.js +++ b/scripts/server/prompt.js @@ -245,7 +245,22 @@ function playerPromptAnswerYes(client) { } case AGRP_PROMPT_RESETKEYBINDS: { - messagePlayerSuccess(client, getLocaleString(client, "KeyBindsReset")); + // TODO: Needs database query! + + //for (let i in getPlayerData(client).keyBinds) { + // removePlayerKeyBind(client, getPlayerData(client).keyBinds[i].key) + //} + + //for (let i in getGlobalConfig().keyBind.defaultKeyBinds) { + // let tempKeyBindData = new KeyBindData(false); + // tempKeyBindData.databaseId = -1; + // tempKeyBindData.key = getKeyIdFromParams(getGlobalConfig().keyBind.defaultKeyBinds[i].keyName); + // tempKeyBindData.commandString = getGlobalConfig().keyBind.defaultKeyBinds[i].commandString; + // tempKeyBindData.keyState = getGlobalConfig().keyBind.defaultKeyBinds[i].keyState; + // getPlayerData(client).keyBinds.push(tempKeyBindData); + //} + + //messagePlayerSuccess(client, getLocaleString(client, "KeyBindsReset")); break; } From 20d8b1709999d9c27566764f0cff10ab518fc098 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 2 Nov 2022 06:51:13 -0500 Subject: [PATCH 21/37] Use older game char spawn mechanism for IV --- scripts/server/subaccount.js | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/scripts/server/subaccount.js b/scripts/server/subaccount.js index b5298bdb..b269361b 100644 --- a/scripts/server/subaccount.js +++ b/scripts/server/subaccount.js @@ -517,22 +517,9 @@ function selectCharacter(client, characterId = -1) { //setPlayerCameraLookAt(client, getPosBehindPos(spawnPosition, spawnHeading, 5), spawnPosition); getPlayerData(client).pedState = AGRP_PEDSTATE_SPAWNING; - if (getGame() <= AGRP_GAME_GTA_SA) { + if (getGame() <= AGRP_GAME_GTA_IV_EFLC) { spawnPlayer(client, spawnPosition, spawnHeading, getGameConfig().skins[getGame()][skin][0], spawnInterior, spawnDimension); onPlayerSpawn(client); - } else if (getGame() == AGRP_GAME_GTA_IV) { - //spawnPlayer(client, spawnPosition, spawnHeading, getGameConfig().skins[getGame()][skin][0], spawnInterior, spawnDimension); - clearPlayerWeapons(client); - setPlayerPosition(client, spawnPosition); - setPlayerHeading(client, spawnHeading); - //setPlayerInterior(client, spawnInterior); - //setPlayerDimension(client, spawnDimension); - restorePlayerCamera(client); - setPlayerSkin(client, skin); - setTimeout(function () { - onPlayerSpawn(client); - //stopRadioStreamForPlayer(client); - }, 500); } else if (getGame() == AGRP_GAME_MAFIA_ONE) { //spawnPlayer(client, spawnPosition, spawnHeading, getGameConfig().skins[getGame()][skin][0]); //logToConsole(LOG_DEBUG, `[AGRP.SubAccount] Spawning ${getPlayerDisplayForConsole(client)} as ${getGameConfig().skins[getGame()][skin][1]} (${getGameConfig().skins[getGame()][skin][0]})`); From 757df5db8663bbcd6a3eeb079a6840f0f762d798 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 2 Nov 2022 06:51:34 -0500 Subject: [PATCH 22/37] Don't force snow when starting/stopping --- scripts/server/timers.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/server/timers.js b/scripts/server/timers.js index b31d18e6..e40210b1 100644 --- a/scripts/server/timers.js +++ b/scripts/server/timers.js @@ -356,7 +356,7 @@ function setSnowWithChance() { getServerConfig().groundSnow = shouldBeSnowing; getServerConfig().fallingSnow = shouldBeSnowing; - updatePlayerSnowState(null); + updatePlayerSnowState(null, false); } // =========================================================================== @@ -370,8 +370,8 @@ function setRandomWeather() { } } - game.forceWeather(getWeatherData(weatherIndex).weatherId); - getServerConfig().weather = weatherIndex; + game.forceWeather(getWeatherData(randomWeatherIndex).weatherId); + getServerConfig().weather = randomWeatherIndex; getServerConfig().needsSaved = true; } From b1f9042b962c1b77a41b3b34a860541a15e53e66 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 2 Nov 2022 06:51:47 -0500 Subject: [PATCH 23/37] Fallback country ISO code if GeoIP fails --- scripts/server/utilities.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/server/utilities.js b/scripts/server/utilities.js index a09d5a09..9faaef7c 100644 --- a/scripts/server/utilities.js +++ b/scripts/server/utilities.js @@ -640,6 +640,10 @@ function processPlayerEnteringExitingProperty(client) { // =========================================================================== function getPlayerCountryISOCode(client) { + if (getPlayerIP(client) == "127.0.0.1" || getPlayerIP(client).indexOf("192.168.") != -1) { + return "US"; + } + return module.geoip.getCountryISO(getGlobalConfig().geoIPCountryDatabaseFilePath, getPlayerIP(client)); } From fdf2d4a02f18ae1ba5c54e52735dc9205a1d5b07 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 2 Nov 2022 06:52:01 -0500 Subject: [PATCH 24/37] Enable server elements for IV (testing) --- scripts/shared/gamedata.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/shared/gamedata.js b/scripts/shared/gamedata.js index dfdbee43..c7bfdf3c 100644 --- a/scripts/shared/gamedata.js +++ b/scripts/shared/gamedata.js @@ -65,8 +65,8 @@ let supportedFeatures = { [AGRP_GAME_GTA_III]: true, [AGRP_GAME_GTA_VC]: true, [AGRP_GAME_GTA_SA]: true, - [AGRP_GAME_GTA_IV]: false, - [AGRP_GAME_GTA_IV_EFLC]: false, + [AGRP_GAME_GTA_IV]: true, + [AGRP_GAME_GTA_IV_EFLC]: true, [AGRP_GAME_MAFIA_ONE]: true, [AGRP_GAME_MAFIA_TWO]: true, [AGRP_GAME_MAFIA_THREE]: true From 01ba414e9c271110e28e76ae5583f23ba96b0daa Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Wed, 2 Nov 2022 06:52:11 -0500 Subject: [PATCH 25/37] Fix object model from params --- scripts/shared/utilities.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/shared/utilities.js b/scripts/shared/utilities.js index 6239a4a9..fd37ccae 100644 --- a/scripts/shared/utilities.js +++ b/scripts/shared/utilities.js @@ -1697,7 +1697,7 @@ function isGTAIV() { // =========================================================================== function areServerElementsSupported() { - return supportedFeatures.serverElements[getGame()]; + return isGameFeatureSupported("serverElements") } // =========================================================================== @@ -1818,7 +1818,7 @@ function getSkinIndexFromName(name, gameId = getGame()) { function getObjectModelIndexFromName(model, gameId = getGame()) { let objects = getGameConfig().objects[gameId]; for (let i in objects) { - if (toLowerCase(objects[i][0]).indexOf(toLowerCase(model)) != -1) { + if (toLowerCase(objects[i][1]).indexOf(toLowerCase(model)) != -1) { return i; } } @@ -1831,7 +1831,7 @@ function getObjectModelIndexFromName(model, gameId = getGame()) { function getObjectModelIndexFromModel(model, gameId = getGame()) { let objects = getGameConfig().objects[gameId]; for (let i in objects) { - if (toLowerCase(objects[i][1]).indexOf(toLowerCase(model)) != -1) { + if (toLowerCase(objects[i][0]).indexOf(toLowerCase(model)) != -1) { return i; } } From 2aefa093408a5779cb588349313d26cb3178f4a7 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 7 Nov 2022 13:35:49 -0600 Subject: [PATCH 26/37] Fixes for new IV sync --- scripts/client/business.js | 2 +- scripts/client/house.js | 2 +- scripts/client/job.js | 2 +- scripts/client/sync.js | 29 +++++++++++++++-------------- scripts/server/business.js | 6 +++--- scripts/server/event.js | 18 ++++++++++-------- scripts/server/house.js | 4 ++-- scripts/server/vehicle.js | 12 ++++-------- 8 files changed, 37 insertions(+), 38 deletions(-) diff --git a/scripts/client/business.js b/scripts/client/business.js index 50eed775..f151cc6f 100644 --- a/scripts/client/business.js +++ b/scripts/client/business.js @@ -38,7 +38,7 @@ function initBusinessScript() { function receiveBusinessFromServer(businessId, name, entrancePosition, blipModel, pickupModel, buyPrice, rentPrice, hasInterior, locked, hasItems) { logToConsole(LOG_DEBUG, `[AGRP.Business] Received business ${businessId} (${name}) from server`); - if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE) { + if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE || getGame() == AGRP_GAME_GTA_IV) { if (getBusinessData(businessId) != false) { let businessData = getBusinessData(businessId); businessData.name = name; diff --git a/scripts/client/house.js b/scripts/client/house.js index d84dff36..f31ec154 100644 --- a/scripts/client/house.js +++ b/scripts/client/house.js @@ -29,7 +29,7 @@ class HouseData { function receiveHouseFromServer(houseId, description, entrancePosition, blipModel, pickupModel, buyPrice, rentPrice, hasInterior, locked) { logToConsole(LOG_DEBUG, `[AGRP.House] Received house ${houseId} (${name}) from server`); - if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE) { + if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE || getGame() == AGRP_GAME_GTA_IV) { if (getHouseData(houseId) != false) { let houseData = getHouseData(houseId); houseData.description = description; diff --git a/scripts/client/job.js b/scripts/client/job.js index 2b57a2f0..1e7fff6f 100644 --- a/scripts/client/job.js +++ b/scripts/client/job.js @@ -140,7 +140,7 @@ function hideJobRouteLocation() { function receiveJobFromServer(jobId, jobLocationId, name, position, blipModel, pickupModel) { logToConsole(LOG_DEBUG, `[AGRP.Job] Received job ${jobId} (${name}) from server`); - if (getGame() == AGRP_GAME_GTA_IV) { + if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE || getGame() == AGRP_GAME_GTA_IV) { if (getJobData(jobId) != false) { let jobData = getJobData(jobId); jobData.jobLocationId = jobLocationId; diff --git a/scripts/client/sync.js b/scripts/client/sync.js index 34cc7a78..3af0c8f5 100644 --- a/scripts/client/sync.js +++ b/scripts/client/sync.js @@ -47,15 +47,15 @@ function processSync(event, deltaTime) { // =========================================================================== function setVehicleLights(vehicleId, state) { - if (getGame() == AGRP_GAME_GTA_IV) { - if (!state) { - natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 0)); - } else { - natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 1)); - } - } else { - getElementFromId(vehicleId).lights = state; - } + //if (getGame() == AGRP_GAME_GTA_IV) { + // if (!state) { + // natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 0)); + // } else { + // natives.forceCarLights(natives.getVehicleFromNetworkId(vehicleId, 1)); + // } + //} else { + getElementFromId(vehicleId).lights = state; + //} } // =========================================================================== @@ -73,11 +73,12 @@ function syncVehicleProperties(vehicle) { if (doesEntityDataExist(vehicle, "agrp.lights")) { let lightStatus = getEntityData(vehicle, "agrp.lights"); - if (!lightStatus) { - vehicle.lightStatus = 2; - } else { - vehicle.lightStatus = 1; - } + vehicle.lights = lightStatus; + } + + if (doesEntityDataExist(vehicle, "agrp.locked")) { + let lockStatus = getEntityData(vehicle, "agrp.locked"); + vehicle.locked = lockStatus; } if (doesEntityDataExist(vehicle, "agrp.invincible")) { diff --git a/scripts/server/business.js b/scripts/server/business.js index bc2dd99b..774f3ed4 100644 --- a/scripts/server/business.js +++ b/scripts/server/business.js @@ -2028,7 +2028,7 @@ function createBusinessEntrancePickup(businessId) { logToConsole(LOG_VERBOSE, `[AGRP.Job]: Creating entrance pickup for business ${businessData.name}`); - if (areServerElementsSupported() && getGame() != AGRP_GAME_MAFIA_ONE) { + if (areServerElementsSupported() && getGame() != AGRP_GAME_MAFIA_ONE && getGame() != AGRP_GAME_GTA_IV) { let entrancePickup = null; if (isGameFeatureSupported("pickup")) { let pickupModelId = getGameConfig().pickupModels[getGame()].Business; @@ -2105,7 +2105,7 @@ function createBusinessEntranceBlip(businessId) { logToConsole(LOG_VERBOSE, `[AGRP.Job]: Creating entrance blip for business ${businessData.name} (model ${blipModelId})`); - if (areServerElementsSupported() && getGame() != AGRP_GAME_MAFIA_ONE) { + if (areServerElementsSupported() && getGame() != AGRP_GAME_MAFIA_ONE && getGame() != AGRP_GAME_GTA_IV) { let entranceBlip = createGameBlip(businessData.entrancePosition, blipModelId, 1, getColourByType("businessBlue")); if (entranceBlip != null) { if (businessData.entranceDimension != -1) { @@ -2875,7 +2875,7 @@ function getBusinessIdFromDatabaseId(databaseId) { // Updates all pickup data for a business by businessId function updateBusinessPickupLabelData(businessId) { - if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE) { + if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE || getGame() == AGRP_GAME_GTA_IV) { sendBusinessToPlayer(null, businessId, getBusinessData(businessId).name, getBusinessData(businessId).entrancePosition, getBusinessEntranceBlipModelForNetworkEvent(businessId), getBusinessEntrancePickupModelForNetworkEvent(businessId), getBusinessData(businessId).buyPrice, getBusinessData(businessId).rentPrice, getBusinessData(businessId).hasInterior, getBusinessData(businessId).locked, doesBusinessHaveAnyItemsToBuy(businessId)); return false; } diff --git a/scripts/server/event.js b/scripts/server/event.js index 4c8808f2..b710b80c 100644 --- a/scripts/server/event.js +++ b/scripts/server/event.js @@ -393,7 +393,7 @@ function onPedSpawn(ped) { logToConsole(LOG_WARN | LOG_DEBUG, `[AGRP.Event] Ped ${ped.id} spawned!`); //if (ped.type == ELEMENT_PLAYER) { - // if (getGame() != AGRP_GAME_MAFIA_ONE && getGame() != AGRP_GAME_GTA_IV) { + // if (getGame() != AGRP_GAME_MAFIA_ONE) { // //setTimeout(onPlayerSpawn, 250, getClientFromPlayerElement(ped)); // //onPlayerSpawn(getClientFromPlayerElement(ped)); // } @@ -454,7 +454,7 @@ async function onPlayerSpawn(client) { // return false; //} - if (isCustomCameraSupported() && getGame() != AGRP_GAME_GTA_IV && getGame() != AGRP_GAME_GTA_IV_EFLC) { + if (isCustomCameraSupported()) { logToConsole(LOG_DEBUG, `[AGRP.Event] Restoring ${getPlayerDisplayForConsole(client)}'s camera`); restorePlayerCamera(client); } @@ -585,11 +585,13 @@ async function onPlayerSpawn(client) { sendNameTagDistanceToClient(client, getServerConfig().nameTagDistance); } - if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE) { + if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE || getGame() == AGRP_GAME_GTA_IV) { logToConsole(LOG_DEBUG, `[AGRP.Event] Sending properties, jobs, and vehicles to ${getPlayerDisplayForConsole(client)} (no server elements)`); sendAllBusinessesToPlayer(client); sendAllHousesToPlayer(client); - sendAllJobsToPlayer(client); + if (getGame() != AGRP_GAME_GTA_IV) { + sendAllJobsToPlayer(client); + } requestPlayerPedNetworkId(client); } @@ -672,6 +674,10 @@ function onPlayerCommand(event, client, command, params) { function onPedExitedVehicle(event, ped, vehicle, seat) { logToConsole(LOG_WARN | LOG_DEBUG, `[AGRP.Event] Ped ${ped.id} exited vehicle ${vehicle.id} from seat ${seat}!`); + if (getVehicleData(vehicle) == false) { + return false; + } + if (ped.isType(ELEMENT_PLAYER)) { let client = getClientFromPlayerElement(ped); if (client != null) { @@ -716,10 +722,6 @@ function onPedEnteredVehicle(event, ped, vehicle, seat) { return false; } - if (getGame() == AGRP_GAME_GTA_IV) { - vehicle = getVehicleFromIVNetworkId(clientVehicle); - } - if (!getVehicleData(vehicle)) { return false; } diff --git a/scripts/server/house.js b/scripts/server/house.js index cdb4ffae..5531537f 100644 --- a/scripts/server/house.js +++ b/scripts/server/house.js @@ -1056,7 +1056,7 @@ function createHouseEntrancePickup(houseId) { return false; } - if (areServerElementsSupported() && getGame() != AGRP_GAME_MAFIA_ONE) { + if (areServerElementsSupported() && getGame() != AGRP_GAME_MAFIA_ONE && getGame() != AGRP_GAME_GTA_IV) { let entrancePickup = null; if (isGameFeatureSupported("pickup")) { let pickupModelId = getGameConfig().pickupModels[getGame()].House; @@ -1781,7 +1781,7 @@ function getHouseFromParams(params) { // =========================================================================== function updateHousePickupLabelData(houseId) { - if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE) { + if (!areServerElementsSupported() || getGame() == AGRP_GAME_MAFIA_ONE || getGame() == AGRP_GAME_GTA_IV) { sendHouseToPlayer(null, houseId, getHouseData(houseId).description, getHouseData(houseId).entrancePosition, getHouseEntranceBlipModelForNetworkEvent(houseId), getHouseEntrancePickupModelForNetworkEvent(houseId), getHouseData(houseId).buyPrice, getHouseData(houseId).rentPrice, getHouseData(houseId).hasInterior, getHouseData(houseId).locked); return false; } diff --git a/scripts/server/vehicle.js b/scripts/server/vehicle.js index 3699a92b..6e026798 100644 --- a/scripts/server/vehicle.js +++ b/scripts/server/vehicle.js @@ -338,15 +338,11 @@ function spawnAllVehicles() { * @return {VehicleData} The vehicles's data (class instance) */ function getVehicleData(vehicle) { - if (getGame() != AGRP_GAME_GTA_IV) { - if (isVehicleObject(vehicle)) { - let dataIndex = getEntityData(vehicle, "agrp.dataSlot"); - if (typeof getServerData().vehicles[dataIndex] != "undefined") { - return getServerData().vehicles[dataIndex]; - } + if (isVehicleObject(vehicle)) { + let dataIndex = getEntityData(vehicle, "agrp.dataSlot"); + if (typeof getServerData().vehicles[dataIndex] != "undefined") { + return getServerData().vehicles[dataIndex]; } - } else { - return getServerData().vehicles.find((v) => v.ivNetworkId == vehicle); } return false; From eae9e8266b00f7286a6aafe2925609dfa43fac25 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 7 Nov 2022 13:36:22 -0600 Subject: [PATCH 27/37] Remove engine workaround --- scripts/client/event.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/client/event.js b/scripts/client/event.js index 056fc09d..717deb69 100644 --- a/scripts/client/event.js +++ b/scripts/client/event.js @@ -176,10 +176,10 @@ function onPedExitedVehicle(event, ped, vehicle, seat) { if (areServerElementsSupported()) { if (inVehicleSeat == 0) { //setVehicleEngine(vehicle.id, false); - if (!inVehicle.engine) { - parkedVehiclePosition = false; - parkedVehicleHeading = false; - } + //if (!inVehicle.engine) { + // parkedVehiclePosition = false; + // parkedVehicleHeading = false; + //} } } } @@ -216,7 +216,7 @@ function onPedEnteredVehicle(event, ped, vehicle, seat) { //parkedVehiclePosition = inVehicle.position; //parkedVehicleHeading = inVehicle.heading; if (doesEntityDataExist(vehicle, "agrp.server") == true) { - setVehicleEngine(vehicle.id, false); + //setVehicleEngine(vehicle.id, false); setVehicleEngine(vehicle.id, getEntityData(vehicle, "agrp.engine")); //setLocalPlayerControlState(false, false); } From e1c82789d7c6ee414ee44d09b6d1707959584075 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 7 Nov 2022 13:36:29 -0600 Subject: [PATCH 28/37] Unfinished command --- scripts/server/command.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/server/command.js b/scripts/server/command.js index 152df10c..ce2a2ea1 100644 --- a/scripts/server/command.js +++ b/scripts/server/command.js @@ -595,6 +595,7 @@ function loadCommands() { new CommandData("biz", getPlayerCurrentBusinessCommand, "", getStaffFlagValue("BasicModeration"), true, true, "Gets which business a player is at/in"), new CommandData("business", getPlayerCurrentBusinessCommand, "", getStaffFlagValue("BasicModeration"), true, true, "Gets which business a player is at/in"), new CommandData("house", getPlayerCurrentHouseCommand, "", getStaffFlagValue("BasicModeration"), true, true, "Gets which house a player is at/in"), + //new CommandData("clearchat", clearChatCommand, "", getStaffFlagValue("None"), true, true, "Clears the chat"), ], startup: [], subAccount: [ From cab6eace3accdfe8dcd4d8c09114bc7ead5da9a4 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 7 Nov 2022 13:36:43 -0600 Subject: [PATCH 29/37] Vehicle engine util --- scripts/server/native/connected.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/server/native/connected.js b/scripts/server/native/connected.js index 2975fbbe..2e247b1d 100644 --- a/scripts/server/native/connected.js +++ b/scripts/server/native/connected.js @@ -588,14 +588,17 @@ function setVehicleLights(vehicle, lights) { // =========================================================================== function setVehicleEngine(vehicle, engine) { - vehicle.engine = engine; + //vehicle.engine = engine; setEntityData(vehicle, "agrp.engine", engine, true); + sendNetworkEventToPlayer("agrp.veh.engine", null, vehicle.id, engine); } // =========================================================================== function setVehicleLocked(vehicle, locked) { vehicle.locked = locked; + setEntityData(vehicle, "agrp.locked", locked, true); + sendNetworkEventToPlayer("agrp.veh.locked", null, vehicle.id, locked); } // =========================================================================== From f9d1e8c384398c4c0de08441c41b8a3f127270ef Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 7 Nov 2022 13:36:52 -0600 Subject: [PATCH 30/37] Remove old workaround for IV --- scripts/server/utilities.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/scripts/server/utilities.js b/scripts/server/utilities.js index 9faaef7c..df6f617a 100644 --- a/scripts/server/utilities.js +++ b/scripts/server/utilities.js @@ -441,11 +441,13 @@ function isClientInitialized(client) { // =========================================================================== function getPedForNetworkEvent(ped) { - if (getGame() == AGRP_GAME_GTA_IV) { - return ped; - } else { - return ped.id; - } + //if (getGame() == AGRP_GAME_GTA_IV) { + // return ped; + //} else { + // return ped.id; + //} + + return ped.id; } // =========================================================================== From 0703ccb1a321830d02cafb7cc9ad572e081e1b7a Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 7 Nov 2022 13:37:19 -0600 Subject: [PATCH 31/37] Use cloudy/foggy weather for snow in SA --- scripts/shared/gamedata.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/shared/gamedata.js b/scripts/shared/gamedata.js index c7bfdf3c..6d2e6e70 100644 --- a/scripts/shared/gamedata.js +++ b/scripts/shared/gamedata.js @@ -136,8 +136,8 @@ let supportedFeatures = { [AGRP_GAME_GTA_III]: true, [AGRP_GAME_GTA_VC]: true, [AGRP_GAME_GTA_SA]: true, - [AGRP_GAME_GTA_IV]: false, - [AGRP_GAME_GTA_IV_EFLC]: false, + [AGRP_GAME_GTA_IV]: true, + [AGRP_GAME_GTA_IV_EFLC]: true, [AGRP_GAME_MAFIA_ONE]: false, [AGRP_GAME_MAFIA_TWO]: false, [AGRP_GAME_MAFIA_THREE]: false @@ -608,7 +608,7 @@ let gameData = { new WeatherData(6, "Blue Skies", false), new WeatherData(7, "Blue Skies", false), new WeatherData(8, "Thunderstorm", false), - new WeatherData(9, "Cloudy/Foggy", false), + new WeatherData(9, "Cloudy/Foggy", true), new WeatherData(10, "Clear Blue Skies", false), new WeatherData(11, "Heatwave", false), new WeatherData(12, "Dull/Colorless", false), From 5862349117707b1422a5d7dca12408c0194fc116 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Mon, 21 Nov 2022 11:38:41 -0600 Subject: [PATCH 32/37] New util for is player owner of vehicle --- scripts/server/vehicle.js | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/scripts/server/vehicle.js b/scripts/server/vehicle.js index 6e026798..5310fff9 100644 --- a/scripts/server/vehicle.js +++ b/scripts/server/vehicle.js @@ -694,7 +694,7 @@ function buyVehicleCommand(command, params, client) { return false; } - if (canPlayerManageVehicle(client, vehicle)) { + if (doesPlayerOwnVehicle(client, vehicle)) { messagePlayerError(client, getLocaleString(client, "AlreadyOwnVehicle")); return false; } @@ -878,6 +878,34 @@ function canPlayerManageVehicle(client, vehicle) { // =========================================================================== +function doesPlayerOwnVehicle(client, vehicle) { + let vehicleData = getVehicleData(vehicle); + + if (vehicleData.ownerType == AGRP_VEHOWNER_PLAYER) { + if (vehicleData.ownerId == getPlayerData(client).accountData.databaseId) { + return true; + } + } + + if (vehicleData.ownerType == AGRP_VEHOWNER_CLAN) { + if (vehicleData.ownerId == getPlayerCurrentSubAccount(client).clan) { + if (doesPlayerHaveClanPermission(client, "ManageVehicles") || doesPlayerHaveClanPermission(client, "owner")) { + return true; + } + } + } + + if (vehicleData.ownerType == AGRP_VEHOWNER_BIZ) { + if (canPlayerManageBusiness(client, getBusinessIdFromDatabaseId(vehicleData.ownerId))) { + return true; + } + } + + return false; +} + +// =========================================================================== + function setVehicleJobCommand(command, params, client) { if (!isPlayerInAnyVehicle(client)) { messagePlayerError(client, getLocaleString(client, "MustBeInAVehicle")); From df05c184993b3c311770a16cd4860f7a2154e85c Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sat, 10 Dec 2022 01:53:47 -0600 Subject: [PATCH 33/37] Rename client main to core to match server --- scripts/client/{main.js => core.js} | 10 ++++++++++ 1 file changed, 10 insertions(+) rename scripts/client/{main.js => core.js} (89%) diff --git a/scripts/client/main.js b/scripts/client/core.js similarity index 89% rename from scripts/client/main.js rename to scripts/client/core.js index fc32dc29..7283da4f 100644 --- a/scripts/client/main.js +++ b/scripts/client/core.js @@ -84,6 +84,15 @@ let profanityFilterEnabled = false; let localLocaleId = 0; +/** + * @typedef {Object} ServerData + * @property {Array.} houses + * @property {Array.} businesses + * @property {Array.} vehicles + * @property {Array} localeStrings + * @property {Array} localeOptions + * @property {Object} cvars +*/ let serverData = { houses: [], businesses: [], @@ -91,6 +100,7 @@ let serverData = { localeOptions: [], vehicles: [], jobs: [], + cvars: {}, }; let localPlayerMoney = 0; From 268a3a5f60f422e8cfb3eaef9573c32dd49f8a1f Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sat, 10 Dec 2022 01:54:01 -0600 Subject: [PATCH 34/37] Add new script cvars system --- scripts/client/netevents.js | 6 ++++++ scripts/server/netevents.js | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/scripts/client/netevents.js b/scripts/client/netevents.js index 2bdbf954..b1442b36 100644 --- a/scripts/client/netevents.js +++ b/scripts/client/netevents.js @@ -464,4 +464,10 @@ function updatePlayerPing(playerName, ping) { playerPing[playerName] = ping; } +// =========================================================================== + +function receiveClientVariablesFromServer(clientVariablesString) { + serverData.cvars = JSON.parse(clientVariablesString); +} + // =========================================================================== \ No newline at end of file diff --git a/scripts/server/netevents.js b/scripts/server/netevents.js index 2c4739b0..e7e23b3e 100644 --- a/scripts/server/netevents.js +++ b/scripts/server/netevents.js @@ -1317,4 +1317,10 @@ function fadePlayerCamera(client, fadeIn, time, colour = toColour(0, 0, 0, 255)) sendNetworkEventToPlayer("agrp.fadeCamera", client, fadeIn, time, colour); } +// ========================================================================== + +function sendClientVariablesToClient(client) { + sendNetworkEventToPlayer("agrp.cvar", client, JSON.stringify(clientVariables)); +} + // ========================================================================== \ No newline at end of file From db40be75772ba73ec420efbec60aa08d08add8fc Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sat, 10 Dec 2022 01:54:11 -0600 Subject: [PATCH 35/37] Use falling snow only --- scripts/client/utilities.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/scripts/client/utilities.js b/scripts/client/utilities.js index 59fa4df6..774d9011 100644 --- a/scripts/client/utilities.js +++ b/scripts/client/utilities.js @@ -227,8 +227,13 @@ function setLocalPlayerInterior(interior) { function setSnowState(falling, ground, forceGround) { logToConsole(LOG_DEBUG, `[AGRP.Utilities] Setting falling snow to ${falling} and ground snow to ${ground}`); snowing = falling; - snow.enabled = ground; - forceSnowing(forceGround); + //snow.force = ground; + //if (forceGround == true) { + // forceSnowing(forceGround); + // groundSnow.flush(); + //} else { + // snow.enabled = ground; + //} } // =========================================================================== From 5044f6466e1aeacb9aa3a84c2073952374036604 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sat, 10 Dec 2022 01:54:20 -0600 Subject: [PATCH 36/37] Add vehicle seat constants to shared --- scripts/server/vehicle.js | 19 +++++++++---------- scripts/shared/const.js | 6 ++++++ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/scripts/server/vehicle.js b/scripts/server/vehicle.js index 5310fff9..fa09247a 100644 --- a/scripts/server/vehicle.js +++ b/scripts/server/vehicle.js @@ -19,14 +19,6 @@ const AGRP_VEHOWNER_BIZ = 6; // Owned by a business (also i // =========================================================================== -// Vehicle Seats -const AGRP_VEHSEAT_DRIVER = 0; -const AGRP_VEHSEAT_FRONTPASSENGER = 1; -const AGRP_VEHSEAT_REARLEFTPASSENGER = 2; -const AGRP_VEHSEAT_REARRIGHTPASSENGER = 3; - -// =========================================================================== - /** * @class Representing a vehicle's data. Loaded and saved in the database * @property {Array.} trunkItemCache @@ -165,6 +157,14 @@ class VehicleData { this.licensePlate = toInteger(dbAssoc["veh_license_plate"]); } } + + saveToDatabase() { + saveVehicleToDatabase(this); + } + + respawn() { + respawnVehicle(this.vehicle); + } }; // =========================================================================== @@ -327,8 +327,8 @@ function spawnAllVehicles() { let vehicle = spawnVehicle(getServerData().vehicles[i]); getServerData().vehicles[i].vehicle = vehicle; setEntityData(vehicle, "agrp.dataSlot", i, false); - setAllVehicleIndexes(); } + setAllVehicleIndexes(); } // =========================================================================== @@ -1703,7 +1703,6 @@ function createPermanentVehicle(modelIndex, position, heading, interior = 0, dim setEntityData(vehicle, "agrp.dataSlot", slot - 1, false); } - return vehicle; } diff --git a/scripts/shared/const.js b/scripts/shared/const.js index 69d75c75..7efe2014 100644 --- a/scripts/shared/const.js +++ b/scripts/shared/const.js @@ -138,3 +138,9 @@ const AGRP_NPC_ACTION_SPRINTTO = 4; const AGRP_NPC_ACTION_FOLLOW = 5; const AGRP_NPC_ACTION_DEFEND = 6; const AGRP_NPC_ACTION_GUARD_AREA = 7; + +// Vehicle Seats +const AGRP_VEHSEAT_DRIVER = 0; +const AGRP_VEHSEAT_FRONTPASSENGER = 1; +const AGRP_VEHSEAT_REARLEFTPASSENGER = 2; +const AGRP_VEHSEAT_REARRIGHTPASSENGER = 3; \ No newline at end of file From 700e928bcc5e1b5b9661330415b732971175f616 Mon Sep 17 00:00:00 2001 From: Vortrex <3858226+VortrexFTW@users.noreply.github.com> Date: Sat, 10 Dec 2022 01:54:55 -0600 Subject: [PATCH 37/37] Increment script version --- scripts/server/core.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/server/core.js b/scripts/server/core.js index fc10709e..faa5cd34 100644 --- a/scripts/server/core.js +++ b/scripts/server/core.js @@ -8,9 +8,9 @@ // TYPE: Server (JavaScript) // =========================================================================== -let scriptVersion = "1.2"; +let scriptVersion = "1.3"; let serverStartTime = 0; -let logLevel = LOG_INFO; // LOG_ERROR|LOG_WARN; +let logLevel = LOG_INFO | LOG_ERROR | LOG_WARN; let playerResourceReady = new Array(server.maxClients).fill(false); let playerResourceStarted = new Array(server.maxClients).fill(false);