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]: [