Mod Details

Dynamic Weather & Seasons

Dynamic Weather & Seasons 1.0.2

Created by PreyToLive

16.3K Downloads

SPT 3.9.8 Compatible

Accelerate the progression of seasons based on the number of raids played. Control the weather type(s) that occur during each season.

Latest Version 1.0.2
SPT 3.9.8

Updated Nov 22, 2024 at 2:39 AM

Version Notes

--- DYNAMIC WEATHER & SEASONS VERSION 1.0.2 — COMPATIBLE WITH SPT 3.9 —

--CHANGELOG—————————————————————————————————————————————–

  • Linux users should be able to use the mod now without issues.
  • Seasons should now consistently update in-game to match what the profile.json shows.

Honestly guys, I’m sorry I’ve procrastinated on uploading this update for so long. I’m working on a client side mod for it at the moment and been wanting to wait and upload the server/client together. Client will be out soon. Please let me know if any of these issues persist.

This download is externally hosted.
Always scan for viruses.

*** If you would like to support me and my work you can donate to me here. Thank you! ***

— Dynamic Weather & Seasons —

DynamicWeatherAndSeasons is a mod that allows control over the weather and seasons for SPTarkov.

— Overview —

- Accelerate the progression of seasons based on the number of raids played.

- Control the weather type(s) that occur during each season.

- Please read the README.md for more information on how to use the mod.

— Installation Instructions —

1. Begin by downloading the ‘PreyToLive-DynamicWeatherAndSeasons-v1.0.1.zip’ file from the provided link or the Github repository.

2. Extract the contents of the downloaded archive. You should now have a folder named ‘PreyToLive-DynamicWeatherAndSeasons’ containing the mod files.

3. Navigate to the location of your SPTarkov folder on your computer.

4. Inside the SPTarkov folder, find the ‘user/mods/’ directory.

5. Place the extracted folder containing the mod files into the ‘mods’ folder within your SPTarkov folder.

Version 1.0.2
Download Mod Version
SPT 3.9.8
Latest Compatible SPT Version

2.4K Downloads

Created Nov 22, 2024 at 2:39 AM

Updated Nov 22, 2024 at 2:39 AM

Virus Total Results

--- DYNAMIC WEATHER & SEASONS VERSION 1.0.2 — COMPATIBLE WITH SPT 3.9 —

--CHANGELOG—————————————————————————————————————————————–

  • Linux users should be able to use the mod now without issues.
  • Seasons should now consistently update in-game to match what the profile.json shows.

Honestly guys, I’m sorry I’ve procrastinated on uploading this update for so long. I’m working on a client side mod for it at the moment and been wanting to wait and upload the server/client together. Client will be out soon. Please let me know if any of these issues persist.

Version 1.0.1
Download Mod Version
SPT 3.9.1
Latest Compatible SPT Version

12.3K Downloads

Created Jul 15, 2024 at 4:21 AM

Updated Jul 15, 2024 at 4:21 AM

Virus Total Results

--- DYNAMIC WEATHER & SEASONS VERSION 1.0.1 — COMPATIBLE WITH SPT 3.9.0 & 3.9.1 —

--CHANGELOG—————————————————————————————————————————————–

  • Added an option that randomly selects a season before each raid. See README.md for example.
  • Added console logs.
Version 1.0.0
Download Mod Version
SPT 3.9.0
Latest Compatible SPT Version

1.5K Downloads

Created Jul 14, 2024 at 5:29 AM

Updated Jul 14, 2024 at 5:29 AM

Virus Total Results

--- DYNAMIC WEATHER & SEASONS VERSION 1.0.0 — COMPATIBLE WITH SPT 3.9.0 —

--CHANGELOG—————————————————————————————————————————————–

  • Accelerate the progression of seasons based on the number of raids played.
  • Control the weather type(s) that occur during each season.
Andrah

Anybody know how to remove snowfall? I read all the comments and the snow falling indoors hasn’t been fixed

0 Likes
RGRBEATTIE

Hello,

I have been playing recently and because it is now 2025 the weather mod is coming up on the server, date not found switching to default summer. Will uninstalling and re installing the mod fix it?

Playing on SPT 3.9.8

Regards.

0 Likes
ezlife

such a great mod, hopefully it gets updated.

1 Like
losrtverd

Does this work in 3.10 ? I don’t want to accidentally break my game

0 Likes
xlegendary

Does anyone know if this works if I just change the version from 3.9 to 3.10?

0 Likes

it does not.

0 Likes
PreyToLive

It’s a BSG bug.

1 Like
AcidMC

Yes, experienced. I noticed it happens about first time in raid in this season or smth. Don’t know if it’s the mod’s issue.

0 Likes
zeekzag

1.0.2 works like a charm. No problems with seasons so far, thank you!

0 Likes
AcidMC

urmw

0 Likes
TheMutedBalaclava

Thank you for your efforts updating and bringing this to the community! o7

0 Likes
AGX

Hello anyone having issues with it running on Linux. I solved mine by using the following code below. If anyone has further issues please let me know. Everything should work perfectly as it does for me. Thank you for the mod hopefully and update releases soon so no one has to edit their own to work correctly.

FILE IS: sptdir/user/mods/DynamicWeatherAndSeasons/src/DWSMain.TS

/* * DynamicWeatherAndSeasons v1.0.1 * MIT License * Copyright (c) 2024 PreyToLive */ /* eslint-disable @typescript-eslint/no-var-requires */ /* eslint-disable @typescript-eslint/brace-style */ import { DependencyContainer } from “tsyringe”; import { WeatherCallbacks } from “@spt/callbacks/WeatherCallbacks”; import { PreSptModLoader } from “@spt/loaders/PreSptModLoader”; import { ConfigTypes } from “@spt/models/enums/ConfigTypes”; import { IPostSptLoadMod } from “@spt/models/external/IPostSptLoadMod”; import { IEmptyRequestData } from “@spt/models/eft/common/IEmptyRequestData”; import { IWeatherConfig } from “@spt/models/spt/config/IWeatherConfig”; import { ILogger } from “@spt/models/spt/utils/ILogger”; import { ConfigServer } from “@spt/servers/ConfigServer”; import { StaticRouterModService } from “@spt/services/mod/staticRouter/StaticRouterModService”; import { LoggerTypes } from “../enums/DWSEnumLogger”; import * as path from “path”; import * as fs from “fs”; import pkg from “../package.json”; class DWSMain implements IPostSptLoadMod { private logger: ILogger; private weatherCallbacks: WeatherCallbacks; public preSptLoad(container: DependencyContainer): void { this.logger = container.resolve<ILogger>(“WinstonLogger”); this.weatherCallbacks = container.resolve<WeatherCallbacks>(“WeatherCallbacks”); const preSptModLoader = container.resolve<PreSptModLoader>(“PreSptModLoader”); const staticRouterModService: StaticRouterModService = container.resolve<StaticRouterModService>(“StaticRouterModService”); const modName = ${pkg.author}-${pkg.name}-v${pkg.version}; const modPath = preSptModLoader.getModPath(path.basename(path.dirname(__dirname.split(’/’).pop()))); const dbProfile = require(“../db/profile.json“); let profileDay = dbProfile.date.day; let profileMonth = dbProfile.date.month; let profileYear = dbProfile.date.year; let profileSeason = dbProfile.season; staticRouterModService.registerStaticRouter( \[${pkg.name}\] /client/items, [ { url: “/client/items”, action: (url: string, info: any, sessionID: string, output: string): any => { try { const sptConfigsWeather: IWeatherConfig = container.resolve<ConfigServer>(“ConfigServer”).getConfig<IWeatherConfig>(ConfigTypes.WEATHER); const dbConfig = require(“../config/config.json“); const dbWeather = require(“../db/weather.json“); if (dbConfig.modEnabled) { // START UPDATE PROFILE const monthDurationInRaids = dbConfig.monthDurationInRaids; const monthIndices = { january: 1, february: 2, march: 3, april: 4, may: 5, june: 6, july: 7, august: 8, september: 9, october: 10, november: 11, december: 12 } profileDay++; if (profileDay > monthDurationInRaids) { const monthIndex = monthIndices[profileMonth] || 1; const nextMonthIndex = monthIndex === 12 ? 1 : monthIndex + 1; profileDay = 1; profileMonth = Object.keys(monthIndices).find(key => monthIndices[key] === nextMonthIndex) || “january”; if (nextMonthIndex === 1) { profileYear++; } } if (dbConfig.randomMonthEachRaid) { const randomMonthIndex = Math.floor(Math.random() * 12) + 1 profileMonth = Object.keys(monthIndices).find(key => monthIndices[key] === randomMonthIndex); } profileSeason = dbConfig.months[profileMonth]; // START UPDATE WEATHER AND SEASONS const weatherSelections: Record<string, number> = {}; for (const [key, value] of Object.entries(dbConfig.seasons[profileSeason].weather)) { if (Array.isArray(value) && value.length > 0) { const selectedValue = value[Math.floor(Math.random() * value.length)]; if (typeof selectedValue === “number”) { weatherSelections[key] = selectedValue; } } } const { clouds, rain, wind, fog, temp, pressure } = weatherSelections; // CLOUDS const cloudsProfileDesc: string[] = [ “clear sky”, “partly cloudy”, “mostly cloudy”, “overcast with scattered clouds”, “completely overcast with thick clouds” ]; const cloudsProfile = cloudsProfileDesc[clouds]; sptConfigsWeather.weather.clouds = dbWeather.clouds[clouds]; // RAIN const rainProfileDesc: string[] = [ “no rain”, “light rain”, “moderate rain”, “heavy rain”, “intense rain” ]; let rainProfile: string; if (clouds === 0) { rainProfile = rainProfileDesc[0]; sptConfigsWeather.weather.rain = dbWeather.rain[0]; sptConfigsWeather.weather.rainIntensity = dbWeather.rainIntensity[0]; } else { rainProfile = rainProfileDesc[rain]; sptConfigsWeather.weather.rain = dbWeather.rain[rain]; sptConfigsWeather.weather.rainIntensity = dbWeather.rainIntensity[rain]; } // WIND const windProfileDesc: string[] = [ “calm”, “gentle breeze”, “moderate breeze”, “strong wind”, “stormy wind” ]; const windProfile = windProfileDesc[wind]; sptConfigsWeather.weather.windSpeed = dbWeather.windSpeed[wind]; sptConfigsWeather.weather.windGustiness = dbWeather.windGustiness[wind]; const seasonIndices: Record<string, number> = { “spring”: 1, “summer”: 2, “autumn”: 3, “winter”: 4 }; const seasonIndex = seasonIndices[profileSeason] || 0; sptConfigsWeather.weather.windDirection = dbWeather.windDirection[seasonIndex]; // FOG const fogProfileDesc: string[] = [ “no fog”, “light fog”, “moderate fog”, “dense fog”, “thick fog” ]; const fogProfile = fogProfileDesc[fog]; sptConfigsWeather.weather.fog = dbWeather.fog[fog]; // TEMP const tempProfileDesc: string[] = [ “very cold”, “cold”, “mild”, “warm”, “hot” ]; const tempProfile = tempProfileDesc[temp]; sptConfigsWeather.weather.temp = dbWeather.temp[temp]; // PRESSURE const pressureProfileDesc: string[] = [ “very low pressure”, “low pressure”, “normal pressure”, “high pressure”, “very high pressure” ]; const pressureProfile = pressureProfileDesc[pressure]; sptConfigsWeather.weather.pressure = dbWeather.pressure[pressure]; // SEASON let seasonOverrideValue: number; if (profileSeason === “spring”) { seasonOverrideValue = 3; } else if (profileSeason === “summer”) { if (clouds >= 3 && rain >= 3) { seasonOverrideValue = 4; } else { seasonOverrideValue = 0; } } else if (profileSeason === “autumn”) { seasonOverrideValue = 1; } else if (profileSeason === “winter”) { seasonOverrideValue = 2; } else { seasonOverrideValue = Math.floor(Math.random() * 4); } sptConfigsWeather.overrideSeason = seasonOverrideValue; // END UPDATE WEATHER AND SEASONS const newProfileData = { mod: modName, date: { day: profileDay, month: profileMonth, year: profileYear }, season: profileSeason, weather: { clouds: cloudsProfile, rain: rainProfile, wind: windProfile, fog: fogProfile, temp: tempProfile, pressure: pressureProfile } } const profilePath = path.join(modPath, “PreyToLive-DynamicWeatherAndSeasons/db/profile.json”); fs.writeFileSync(profilePath, JSON.stringify(newProfileData, null, 4)); // END UPDATE PROFILE if (dbConfig.consoleLogs) { this.logger.log(Mod: ${pkg.name}: console logs, LoggerTypes.INFO); this.logger.log(season: ${profileSeason}, LoggerTypes.INFO); this.logger.log(weather: clouds: ${clouds}: ${cloudsProfile}, LoggerTypes.INFO); this.logger.log(weather: rain: ${rain}: ${rainProfile}, LoggerTypes.INFO); this.logger.log(weather: wind: ${wind}: ${windProfile}, LoggerTypes.INFO); this.logger.log(weather: fog: ${fog}: ${fogProfile}, LoggerTypes.INFO); this.logger.log(weather: temp: ${temp}: ${tempProfile}, LoggerTypes.INFO); this.logger.log(weather: pressure: ${pressure}: ${pressureProfile}, LoggerTypes.INFO); } } } catch (err) { this.logger.error(Error in \[${pkg.name}\] /client/items: ${err.message}); } return output; } } ],

0 Likes
PreyToLive

Just uploaded v1.0.2. Let me know if you still have any issues.

0 Likes

Details