github sp-tarkov/build v3.4.0
SPT 3.4.0 (20765)

latest releases: 3.11.4, 3.11.3, 3.11.2...
9 months ago

Hotfix #2: 22/12/2022 changes:

  • Added more missing equipment settings for sanitar and gluhar
  • Fixed missing Chinese translations (Thanks iDkGK)
  • Added logging to help diagnose when modded items break their traders/flea market

Hotfix #1: 21/12/2022 changes:

  • Fixed Fence items having very high durability values
  • Fixed Warnings shown during bot generation missing x, using default etc
  • Fixed Limb status effects not carrying over from hideout to raid and from raid to hideout
  • Fixed a rare issue that caused building presets to fail

Requires EFT 0.12.12.20765 (released December 2022)

If this is your first time installing SPT consider using the AKI installer, you can find it here

A guide to installing SPT manually can be found here

Release notes

Significant time was spent refining bots:

  • Making the new PMC generation system work better, fixing issues e.g. not shooting back
  • Expanding the randomisation system PMC weapons use to include nearly all weapon parts, this has resulted in much more varied weapons
  • PMC level now affects the gear they wear, PMCs between level 1 and 15 have a massively reduced pool of items to choose from in an attempt to simulate pre-flea players. This system can be expanded upon with mods
  • Fixing the weapon generation to not create weapons with multiple scopes
  • A system was added to limit scope types per weapon type, e.g. short-range sights for SMGs, riflescopes for sniper rifles

We also spent time working on performance profiling the server looking for code bottlenecks and removing them, this has resulted in:

  • Server startup being reduced by half on most machines
  • Flea load time being made 10x faster when viewing lots of items at once (clicking the weapon parts section)

One change we're very happy with is finding and fixing the 3+ minute start-up times some players experienced, glad that's finally gone.

A LOT of bug fixes and code clean up.

These changes unfortunatly mean there are a LOT of mod breaking changes!

This will be the last patch for awhile, the upcoming EFT patch is likely to cause us a lot of headaches and could take anywhere from weeks to months to get working.

Mod compatibility

Unless stated on the mods hub page, older mods are not compatible with 3.4.0.

Profile compatibility

3.X.X - Compatible
2.3.X and older - Incompatible

Fresh Automatic install instructions

  • Download Escape from Tarkov from https://www.escapefromtarkov.com/
  • Make a new folder somewhere (not your desktop or program files)
  • Download the SPT-INSTALLER tool and copy the contents into the folder you've created
  • Run SPT_AKI_Intaller.exe and let it complete
  • Run Aki.Server.exe and wait for it to start
  • Start Aki.Launcher.exe
  • Enter any username into the username box (NOT the same details as your live account)
  • Click login - choose the edition you want (EoD, Standard etc)
  • Click 'Start game'

Fresh manual install instructions

  • Download Escape from Tarkov from https://www.escapefromtarkov.com/
  • Copy the live Tarkov folder to another location, call it something like "spt340" (Do NOT copy to a protected location, e.g. your Desktop)
  • Do not remove the live Tarkov folder, it must remain in the original install location for SPT to function
  • Copy contents of RELEASE-SPT-3.4.0-20765 (found at the bottom of this post) into your newly created 'spt340' folder using 7Zip
  • Run Aki.Server.exe and wait for it to start
  • Start Aki.Launcher.exe
  • Enter any username into the username box (NOT the same details as your live account)
  • Click login - choose the edition you want (EoD, Standard, etc)
  • Click 'Start game'

Migrating existing profiles to the new version

  • Install SPT 3.4.0 into a fresh folder, copy the user/profiles from your SPT 3.3.0 folder into your new SPT 3.4.0 folder

Known SPT issues

  • Server exe has a different icon (green shape)
  • Scav daily quests have not been implemented; they will be added in a future release
  • RARE: Sometimes you'll start a map with no extracts, the only way to escape is to press alt+f4
  • Some quests need PMCs to spawn in map locations with no bot spawns, making them impossible to complete (e.g. kill x PMCs in scav fortress/base)
  • Selecting the overview tab as a scav can break your client - workaround: alt+f4 to escape
  • Looting while extracting can break the client - workaround: alt+f4 to escape
  • Some Christmas items can still be found as loot
  • Your active flea offers are marked as expired when the server is offline and items are returned in the mail
  • Flea categories don't always show the correct number of offers when filtering by item
  • Extracts are not the same as live, scavs can spawn in PMC spots
  • Completing a quest that pushes a trader to the next loyalty level does not always correctly unlock the new level's items - workaround: buy an item from the trader to trigger the missing items to show
  • The server will not load when placed in a folder path containing Unicode characters
  • Looting a PMC dogtag doesn't always show their name on the post-raid kill screen
  • Some high level items unlocked through quests are missing from traders' assorts, these will be added as we unlock them on live and dump the data
  • Insured quest items that are consumed in a quest can be returned to the player

Known NON-SPT issues

  • Enabling the scav war option on the pre-raid screen causes bots to spin and shoot the ground
  • BSG have blacklisted a lot of high-level items from the flea. You can disable this blacklist by using a mod/editing configs/ragfair.json/dynamic/blacklist/enableBsgList/false
  • Rogues are insanely difficult, this is by BSG's design
  • Opening a 120 bullet ammo pack in-raid creates a single stack of 120
  • Tagging items in raid with special characters, e.g. , or " can corrupt the profile on exiting the raid
  • Using horde mode on maps like Customs will cause large numbers of sniper scavs to spawn together in clumps

Changes

  • Feature: Updated to work with 20765 (BSG made a lot of code changes for 20765, we also had to adjust a lot of our code to get it working)
  • Feature: Update flea prices to match live (17th December)
  • Feature: Airdrop planes now shoot flares as they're dropping thier cargo crate (thanks SamSwat)
  • Feature: Increase therapist insurance return chance to 90%
  • Feature: Bleeds now persist post-raid
  • Feature: Fence sells weapon presets
  • Feature: Fence weapons/armor have drastically lower durability
  • Feature: Empty scope mount fixing code now applies to all bot types, not just PMCs
  • Feature: Added system to allow whitelisting bot scope types per weapon type
    • SMGs can equip Colllamator, CompactCollimator, IronSight, whereas Snipers can equip
      OpticScope, IronSight, SpecialScope, AssaultScope
    • Only enabled for PMCs, but system can be used by modders for other bot types
  • Feature: Added MP18, Toz-106, Klin, DVL, Saiga-9, Remington 700, Orsis T-5000 to PMCs weapon pool
  • Feature: Added paging to flea
  • Feature: Added lots of additional weapon mods for PMCs
  • Feature: Bot level is tied to gear, bots between the levels of 1 and 14 have lower quality equipment, smaller weapon pool and fewer weapon mod choices
    • This is to simulate them not having access to the flea market
  • Feature: PMCs of a roughly equal level spawn in maps with you, the level range they have to choose from is between 1 and current player level + 15
    • This is to simulate the progression of other players during the wipe
  • Feature: Added 25% chance of PMC group spawns at the start of a factory raid
  • Feature: Added 25% chance of PMC group spawns at scav base on customs, scav base on woods
    and pier on shoreline to help players complete Capturing Outposts quest
  • Feature: Allow ncstar backup mount regardless of current weapon scope limit value
    • Only spawn ncstar on weapons if it has an existing assault/optic/special scope
  • Feature: Added missing voices to raiders/rogues
  • Feature: Only disallow weapon mod mounts being added to weapon when scope limit reached if the scope is the only slot they have
  • Feature: Allow scopes that have sub scopes to bypass scope limits
  • Feature: Christmas event starts on the 16th of December instead of the 17th
  • Feature: PMCs wear santa hats/beards during christmas event
  • Feature: NVGs on bots can be configured in configs/bot.json (default is still 50% active chance)
  • Feature: When picking up a gun from a dead AI, if it supports full auto, that will be its default state
  • Feature: Armor below 60% is no longer sellable to most traders, can be configured in configs/trader.json (fence still buys all armors regardless of durability level)
  • Added mod_stock and mod_reciever to pmc randomisation
  • Feature: Added more warnings and errors to the translation system
  • Feature: Flea offer count adjusted from 8 to 15, to 7 to 30
  • Optimisation: Reduced server start up time significantly
  • Optimisation: Small optimisations throughout codebase applied
  • Optimisation: Significantly improved speed of searching flea

Fixes

  • Fix: Added validation to BotGenerationHelper.isItemIncompatibleWithCurrentItems() to assist in finding invalid items
  • Fix: Removed ability for PMCs to use Gluhar personality as it has issues
  • Fix: Adjusted PMCs max level to be 78, not 70
  • Fix: Added missing CAN_TALK property to PMC difficulties, defaulted to false
  • Fix: Adjusted allowed bot personalities for PMCs, will reduce chance of 'brain dead' PMCs
  • Fix: Added check to prevent a weapon spawning as loose loot with a laser/light attachment causes the server to throw an error
  • Fix: Added missing quest images
  • Fix: Hid prapors test mail message from being sent to player
  • Fix: Added back mk-18 trade on Jaeger
  • Fix: Added helmet reward purchase to Ragman after completion of Chemical Part 4
  • Fix: Don't soft-lock when looting a container while extracting (BSG bug with offline raids)
  • Fix: Flashbangs now trigger the annoying BZZZZZZZZ sound
  • Fix: Lasers on bots weapons can now be active
  • Fix: Scope and light/laser limits will be used when generating PMC weapons
  • Fix: Weapon mod limit code now classifies range finders as a laser attachment when counting light/laser limits
  • Fix: Bots will spawn with empty attachment mods less often
  • Fix: Bot scope/laser limits are working again
  • Fix: Fixed server erroring when buying lots of items on flea very quickly
  • Fix: Always disallow mounts being added to a weapon that only hold only flashlights once flashlight limit reached
  • Fix: Add AKMP-system front and rear sights to blacklist
  • Fix: Lowered chance game loading takes 3+ minutes
  • Fix: Openable lootable containers (e.g. pumpkins) now give the correct number of rewards
  • Fix: Resolved an issue that caused AI to stare and not shoot at you
  • Fix: Restating the server will not reset purchase limits
  • Fix: Fixed issue that would soft lock the client if an items handbook price was a decimal
  • Fix: Made Dollar/Euro flea offers have more relative prices when compared to their rouble counterparts
  • Fix: Prepare to Escape profile has a fixed SV-98
  • Fix: Partially repairing a weapon doesn't repair it fully
  • Fix: Reduced chance rare face masks appear on assault scavs

Modders

  • Feature: Updated server to Typescript 4.9.4
  • Feature: Added REGISTER_PLAYER_REQUEST to ApplicationContext, has the id of the map the player is loading into. Call like this const registerPlayerInfo = this.applicationContext.getLatestValue(ContextVariableType.REGISTER_PLAYER_REQUEST).getValue<IRegisterPlayerRequestData>();
  • Feature: Added BotEquipmentModPoolService, contains a full mapping of all weapons and equipment in the game and the mods that fit in each of their slots, idential in structure to the mods object inside each bot json (e.g. assault.json)
  • Feature: sptBear and sptUsec can be added to map waves and boss waves
  • Feature: Added randomisation section to configs/bot.json/equipment
    • Uses level range identically to other equipment sections
    • Adjust equipment and mod chances from bot json files (e.g. assault.json)
  • Feature: Moved randomisedArmorSlots into randomistion section, it is now per-level instead of global
  • Feature: Moved randomisedWeaponModSlots into randomistion section, it is now per-level instead of global
  • Feature: Added botRelativeLevelDeltaMax to configs/bot.json/pmc
    • Controls how much higher a PMC bots level can be relative to the players level
  • Feature: added service OpenZoneService
  • Feature: added service CustomLocationWaveService
    • Assists with adding custom boss/normal waves to maps
  • Feature: Added REVOLVER and IRON_SIGHT to BaseClasses
  • Feature Added weaponSightWhitelist to bot.json
  • Feature: Added ItemHelper.isOfBaseClasses() to accompany ItemHelper.isOfBaseClass() to assist in checking if an item tpl inherits from an array of base classes
  • Feature: If a randomised mod has sub-mods but no values in its modPool, check modPool service and use those
  • Feature: Fence weapon preset durability can be configured via configs/trader.json/fence/, presetMaxDurabilityPercentMinMax and armorMaxDurabilityPercentMinMax
  • Feature: Added durabilityPurchaseThreshhold to configs/trader.json allows adjustment of point where each trader will buy damaged armor
  • Feature: Profiles that start the game with a mod will have a record stored in profile.json/aki/mods
  • Fix: Made empty weapon mount mod checking code check for more mount types
  • Fix: Bot generation cache now caches by role and difficulty instead of just role
  • Fix: Reduced bossGluhar weighting inside configs/bot.json/pmc/pmcType to 0 for all maps
  • Fix: Rewrote ragfairOfferGenerator.calculateRoublePrice() to use handbook price of dollars and euros when converting roubles instead of our own values
  • Optimisation: Pass modLimits into generateModsForWeapon() as param instead of creating each loop
  • Optimisation: modHasReachedItemLimit() no longer checks if scopes have reached light/laser max limit
  • Refactor: Altered parameters of botEquipmentFilterService.filterBotEquipment()
  • Refactor: Altered parameters of botGeneratorHelper.generateModsForWeapon()
  • Refactor: Altered parameters of botWeaponGenerator.generateWeaponByTpl()
  • Refactor: Altered parameters of botInventoryGenerator.generateInventory()
  • Refactor: Altered parameters of botInventoryGenerator.generateAndAddEquipmentToBot()
  • Refactor: Altered parameters of botInventoryGenerator.generateAndAddWeaponsToBot()
  • Refactor: Altered parameters of botInventoryGenerator.generateEquipment()
  • Refactor: Altered parameters of botInventoryGenerator.addWeaponAndMagazinesToInventory()
  • Refactor: Altered parameters of botInventoryGenerator.generateRandomWeapon()
  • Refactor: Altered parameters of botLootGenerator.generateLoot()
  • Refactor: Altered parameters of botLootGenerator.addLooseWeaponsToInventorySlot()
  • Refactor: Altered parameters of botGenerator.generateByCondition()
  • Refactor: Altered parameters of botGenerator.generateBot()
  • Refactor: Filtering of bot equipment now occurs in botGenerator.generateBot() instead of botGenerator.generateByCondition()
  • Refactor: New function botGenerator.generateBotNickname()
  • Refactor: New function botHelper.getBotRandomisationDetails()
  • Refactor: New function botEquipmentFilterService.adjustChances()
  • Refactor: New class BotLevelGenerator
  • Refactor: New class BotEquipmentModGenerator
  • Refactor: New class BotWeaponModLimitService
  • Refactor: New class SeasonalEventService
  • Refactor: Move all seasonal code (Christmas/Halloween) into its own service SeasonalEventService
  • Refactor: Renamed TraderHelper.traderFilter() to doesTraderBuyItem()
  • Refactor: Removed botGenerator.generateRandomLevel() replaced with botLevelGenerator.generateBotLevel
  • Refactor: Rewrote BotController.generate(), does majority of what generateByCondition() did
  • Refactor: Renamed FenceService.generateFenceAssortCache() to generateFenceAssorts()
  • Refactor: botGenerationCacheService now stores bots by role and difficulty, not just role
  • Refactor: botGenerator.generateByCondition() renamed to prepareAndGenerateBots() and no longer decided if bots should become PMCs
  • Refactor: Moved: botHelper.getPMCDifficulty() to BotController
  • Refactor: Reworked isItemIncompatibleWithCurrentItems() to return reason why item is incompatible
  • Refactor: project/assets/database/locales/global/xx.json has changed format
  • Refactor: project/assets/database/locales/languages.json has changed format
  • Refactor: traderHelper.isItemUnSellableToTrader() requires traderId be passed as parameter
  • Refactor: Replaced traderHelper.isWeaponBelowTraderBuyDurability() with itemIsBelowSellableDurabilityThreshhold()

Modder guidance

A short guide can be found here

The example mods have been updated for 3.4.0

  • All resolvable classes can be found here
  • Code documentation can be found here

Thanks

Rev and Req for Japanese translations
Lua for Korean translation improvements
Hubert for Polish translation
Fiaf for Swedish translation

Don't miss a new build release

NewReleases is sending notifications on new releases.