6cd86e67b0
# Conflicts: # project/.vscode/launch.json # project/assets/database/locations/bigmap/base.json # project/assets/database/locations/interchange/base.json # project/assets/database/locations/rezervbase/base.json # project/gulpfile.mjs # project/package.json # project/src/ErrorHandler.ts # project/src/Program.ts # project/src/callbacks/DataCallbacks.ts # project/src/callbacks/DialogueCallbacks.ts # project/src/callbacks/GameCallbacks.ts # project/src/callbacks/HandbookCallbacks.ts # project/src/callbacks/HealthCallbacks.ts # project/src/callbacks/HttpCallbacks.ts # project/src/callbacks/LauncherCallbacks.ts # project/src/callbacks/LocationCallbacks.ts # project/src/callbacks/MatchCallbacks.ts # project/src/callbacks/ModCallbacks.ts # project/src/callbacks/NotifierCallbacks.ts # project/src/callbacks/PresetCallbacks.ts # project/src/callbacks/ProfileCallbacks.ts # project/src/callbacks/RagfairCallbacks.ts # project/src/callbacks/TraderCallbacks.ts # project/src/context/ApplicationContext.ts # project/src/context/ContextVariableType.ts # project/src/controllers/BotController.ts # project/src/controllers/CustomizationController.ts # project/src/controllers/DialogueController.ts # project/src/controllers/GameController.ts # project/src/controllers/HealthController.ts # project/src/controllers/HideoutController.ts # project/src/controllers/InraidController.ts # project/src/controllers/InsuranceController.ts # project/src/controllers/InventoryController.ts # project/src/controllers/LauncherController.ts # project/src/controllers/LocationController.ts # project/src/controllers/MatchController.ts # project/src/controllers/QuestController.ts # project/src/controllers/RagfairController.ts # project/src/controllers/RepeatableQuestController.ts # project/src/controllers/TradeController.ts # project/src/di/Container.ts # project/src/di/Router.ts # project/src/generators/BotEquipmentModGenerator.ts # project/src/generators/BotLevelGenerator.ts # project/src/generators/BotWeaponGenerator.ts # project/src/generators/LocationGenerator.ts # project/src/generators/LootGenerator.ts # project/src/generators/RepeatableQuestGenerator.ts # project/src/generators/WeatherGenerator.ts # project/src/generators/weapongen/InventoryMagGen.ts # project/src/generators/weapongen/implementations/BarrelInventoryMagGen.ts # project/src/generators/weapongen/implementations/ExternalInventoryMagGen.ts # project/src/helpers/AssortHelper.ts # project/src/helpers/BotGeneratorHelper.ts # project/src/helpers/InRaidHelper.ts # project/src/helpers/ProfileHelper.ts # project/src/helpers/RagfairHelper.ts # project/src/helpers/RagfairOfferHelper.ts # project/src/helpers/TraderHelper.ts # project/src/loaders/ModLoadOrder.ts # project/src/loaders/PostDBModLoader.ts # project/src/loaders/PreAkiModLoader.ts # project/src/models/eft/common/IGlobals.ts # project/src/models/eft/common/ILocationBase.ts # project/src/models/eft/common/tables/IBotBase.ts # project/src/models/eft/common/tables/IProfileTemplate.ts # project/src/models/eft/common/tables/ITemplateItem.ts # project/src/models/eft/dialog/IAcceptFriendRequestData.ts # project/src/models/eft/dialog/IDeleteFriendRequest.ts # project/src/models/eft/game/IGameConfigResponse.ts # project/src/models/eft/game/IGameKeepAliveResponse.ts # project/src/models/eft/game/IGameStartResponse.ts # project/src/models/eft/match/IJoinMatchResult.ts # project/src/models/eft/notifier/INotifier.ts # project/src/models/eft/profile/GetProfileStatusResponseData.ts # project/src/models/eft/trade/IProcessBuyTradeRequestData.ts # project/src/models/eft/trade/IProcessSellTradeRequestData.ts # project/src/models/enums/WildSpawnTypeNumber.ts # project/src/models/spt/bots/BotGenerationDetails.ts # project/src/models/spt/config/IBotConfig.ts # project/src/models/spt/config/IBotDurability.ts # project/src/models/spt/config/IInRaidConfig.ts # project/src/models/spt/config/ILocationConfig.ts # project/src/models/spt/config/IQuestConfig.ts # project/src/models/spt/config/ISeasonalEventConfig.ts # project/src/models/spt/server/ILocations.ts # project/src/models/spt/utils/IUuidGenerator.ts # project/src/routers/dynamic/BotDynamicRouter.ts # project/src/routers/dynamic/BundleDynamicRouter.ts # project/src/routers/dynamic/CustomizationDynamicRouter.ts # project/src/routers/dynamic/DataDynamicRouter.ts # project/src/routers/dynamic/HttpDynamicRouter.ts # project/src/routers/dynamic/InraidDynamicRouter.ts # project/src/routers/dynamic/LocationDynamicRouter.ts # project/src/routers/dynamic/NotifierDynamicRouter.ts # project/src/routers/dynamic/TraderDynamicRouter.ts # project/src/routers/save_load/InsuranceSaveLoadRouter.ts # project/src/routers/save_load/ProfileSaveLoadRouter.ts # project/src/routers/serializers/NotifySerializer.ts # project/src/routers/static/BotStaticRouter.ts # project/src/routers/static/BundleStaticRouter.ts # project/src/routers/static/ClientLogStaticRouter.ts # project/src/routers/static/CustomizationStaticRouter.ts # project/src/routers/static/DataStaticRouter.ts # project/src/routers/static/DialogStaticRouter.ts # project/src/routers/static/GameStaticRouter.ts # project/src/routers/static/HealthStaticRouter.ts # project/src/routers/static/InraidStaticRouter.ts # project/src/routers/static/InsuranceStaticRouter.ts # project/src/routers/static/ItemEventStaticRouter.ts # project/src/routers/static/LauncherStaticRouter.ts # project/src/routers/static/LocationStaticRouter.ts # project/src/routers/static/MatchStaticRouter.ts # project/src/routers/static/NotifierStaticRouter.ts # project/src/routers/static/PresetStaticRouter.ts # project/src/routers/static/ProfileStaticRouter.ts # project/src/routers/static/QuestStaticRouter.ts # project/src/routers/static/RagfairStaticRouter.ts # project/src/routers/static/TraderStaticRouter.ts # project/src/routers/static/WeatherStaticRouter.ts # project/src/services/BotEquipmentFilterService.ts # project/src/services/BotGenerationCacheService.ts # project/src/services/BotWeaponModLimitService.ts # project/src/services/PaymentService.ts # project/src/services/ProfileFixerService.ts # project/src/services/RagfairOfferService.ts # project/src/services/RagfairTaxService.ts # project/src/services/RepairService.ts # project/src/services/SeasonalEventService.ts # project/src/utils/RagfairOfferHolder.ts # project/src/utils/TimeUtil.ts # project/src/utils/UUidGenerator.ts # project/src/utils/VFS.ts # project/src/utils/collections/queue/Queue.ts # project/src/utils/logging/AbstractWinstonLogger.ts # project/src/utils/logging/WinstonMainLogger.ts # project/src/utils/logging/WinstonRequestLogger.ts # project/tests/utils/TimeUtil.test.ts Manually resolved by Refringe. |
||
---|---|---|
project | ||
.drone.yml | ||
.gitattributes | ||
.gitignore | ||
LICENSE.md | ||
README.md | ||
set_gitcredential.sh |
Server
Modding framework for Escape From Tarkov
Privacy
SPT is an open source project. Your commit credentials as author of a commit will be visible by anyone. Please make sure you understand this before submitting a PR. Feel free to use a "fake" username and email on your commits by using the following commands:
git config --local user.name "USERNAME"
git config --local user.email "USERNAME@SOMETHING.com"
Requirements
- NodeJS (with npm)
- Visual Studio Code
- git LFS
Observations
- The server was tested to work with NodeJS 18.15.0, if you are using a different version and experiencing difficulties change it before looking for support
- If you are updating a branch you've had for some time, run
npm ci
before running any tasks. This will run the clean and install target from npm. - You can debug your mods using the server, just copy your mod files into the
user/mods
folder and put breakpoints on the JS files. DO NOT contact the dev team for support on this.
Pulling
- Run
git lfs fetch
andgit lfs pull
to acquire loot files
Setup
- Visual Studio Code > File > Open Workspace... >
project\Server.code-workspace
- Visual Studio Code > Terminal > Run Task... > npm > npm: Install
Build
This is for preparing for a release, not to run locally.
Mode | Location |
---|---|
release | Visual Studio Code > Terminal > Run Build Task... > build:release |
debug | Visual Studio Code > Terminal > Run Build Task... > build:debug |
Test / Run locally
Visual Studio Code > Run > Start Debugging
Features
Progression
Player profile is stored in SPT folder as a JSON file, allowing for changes to persist
- Scav:
- Stats increase by doing scav raids
- Skills increase by doing scav raids
- Scav reputation system (Karma)
- Scavs hostile below certain level
- Scav run cooldown adjustment
- Scav follow chance adjustment
- Scav case
Completion time adjustmentNOT IMPLEMENTEDEquipment chance adjustmentNOT IMPLEMENTED
- Bosses hostile below certain level
Exfil price adjustmentNOT IMPLEMENTED- Improved gear with higher rep
- Increase rep by exiting through car extracts
- PMC:
- Stats increase by doing PMC raids
- Skills increase by doing PMC raids
- Hydration/food
- Increase out of raid
- Post-raid levels are persisted to profile
- Raid stat tracking
- Raid count
- Survived count
- KIA count
- MIA count
- AWOL count
- Kills count
Bots
- Emulated bots:
- assault (scav)
- bossBully (Reshalla)
- bossGluhar
- bossKilla
- bossKnight
- bossKojainy (Shturman)
- bossSanitar
- bossTagilla
- bossZryachiy
- bossBoar (Kaban)
- bossBoarSniper
- curedAssault
- exUsec (Rogue)
- followerBigPipe
- Grenade launcher
- followerBirdEye
- followerBoar
- followerBully
- followerGluharAssault
- followerGluharScout
- followerGluharSecurity
- followerGluharSnipe
- followerKojaniy
- followerSanitar
- followerzryachiy
- gifter (santa)
Gives giftsNOT IMPLEMENTED
- marksman
- pmcBot (raider)
- sectantPriest (Cultist)
- sectantWarrior (Cultist)
- Gear
- Semi-randomised gear chosen with weighting system
- Randomised durability of gear
- Ammo
- Ammo weighting system to mimic live
- Loot
- Semi-randomised loot
- Item type spawn limit system
- Per-map AI types
PMCs
- Simulated PMC players
- Custom weapons
- Semi-randomly generated with weighting system
- Semi-randomly chosen ammo with weighting system
- Custom gear
- Semi-randomly generated with weighting system
- Custom headgear
- Randomised attachments with percentage based chance to appear
- Face shields
- Flashlights
- Randomised attachments with percentage based chance to appear
- Randomised AI brains
- Chooses random AI behaviour from pool of possible bot types (e.g. raider/rogue/killa)
- Dogtags
- Random level
- Random name
- Voices
- Bear/usec voices for each faction
- Loot item blacklist/whitelist
- Highly configurable in config
- Level-relative gear for PMCs from levels 1-15 and 15+
- 1-15 bots have lower-tier items
- 15+ bots have access to anything
- Custom weapons
Inventory
- Move/split/delete stacks
- Tags (add/modify/remove)
- Armor/weapon kit item repair
- Auto-sort
- Out of raid healing
- Out of raid eating
- Special slots (compass etc)
Traders
- Buy/Sell
- Listed items are refreshed every hour
- purchase limits per refresh period
- Track sold rouble count
- Loyalty levels
- Build reputation
- Item repair
- Calculate randomised durability level based on item type/values
- Alternate clothing from Ragman
- Buy/unlock new clothing
- Insurance
- chance for items to be returned - higher chance for more expensive trader
- Chance parts will be stripped from returned weapons
- Fence
- Lists random items for sale
- Emulated system of 'churn' for items sold by fence
- every 4 minutes 20% of fences' items are replaced
- Configurable through config
Flea market
- Buy and sell items
- Prices pulled from live data
- Listing tax fee
- Offer filtering
- Offer search
- Filter by item
- Linked search
- Simulated player offers
- Generated with random names/ratings/expiry times
- Variable prices based on live price (20% above/below)
- Weapon presets as offers
- Bartering offers
- Listed currency
- Rouble
- Euro
- Dollar
- Rating
- Increase flea rating by selling items
- Decrease flea rating by failing to sell items
- Will be purchased by simulated players
- Greater chance listed item will be purchased the lower it is listed for
- Adjust flea prices that are massively below trader buy price
- Receive purchased item through mail from seller
- Sorting by
- Rating
- Price
- Name
- Configurable using config
Quests
Accurate quest listINCOMPLETE (85% complete)- Trader quests
- Accept/Complete
- Daily Quests
- Simulated system of daily quests
- Replace daily quest
- Replace quest with new one
- Charged fee
- Scav daily quests
- Types
- Elimination
- Exit location
- Find
- Trader item unlocks through completion of quests
- Receive mail from traders after accepting/completing/failing a quest
- Item rewards given through mail
Hideout
- Areas supported
- Air filter
- Air filter degradation speed calculation
- Skill levelling boost + 40%
- Bitcoin farm
- Coin generation speed calculation
- Booze generator
- Create moonshine
- Generator
- Fuel usage calculation
- Heating
- Energy regen rate
- Negative effects removal rate x2
- Illumination
- Intel centre
Unlocks scav tasks from fenceNOT IMPLEMENTEDReduces insurance return time by 20%NOT IMPLEMENTED- Quest money reward boost
- Lavatory
- Library
- Medstation
- Nutrition unit
- Rest space
- Scav case
- Custom reward system
- Configurable in config
- Security
- Shooting range
- Solar power
- Stash
- Gives bonus storage space
- Vents
- Water collector
- Workbench
- Christmas tree
- Air filter
- Item crafting
- Found in raid on completion
- Crafts when server not running
Weapon building
- Create weapon presets
- Saving of presets
Raids
- Supported maps
- Customs
- Factory day
- Factory night
- Reserve
- Woods
- Lighthouse
- Laboratory
- Shoreline
- Streets
- Loot
- Generated from over 30,000 loot runs on live, spawn chances calculated from all runs to give fairly accurate depiction of live loot.
- Static loot (containers)
- Each container type can contain items appropriate to that type
- Loose loot
- Randomised loose items found on map
- Airdrops
- Randomised chance of spawning
- Fire red flare to request an airdrop
Drops 1 of 3 randomised loot crate typesNOT IMPLEMENTED- Drops lootable crate in:
- Customs
- Reserve
- Woods
- Lighthouse
- Shoreline
- Streets
- Can be adjusted via config file
- Raid damage
- Exiting a raid with injury to player character will be persisted out of raid
- Post-raid therapist healing
Messages
- Receive from traders
- Pin/unpin senders
- Accept all attachments
- Accept individual mail attachment
Modding
- Extensive system that allows for the modification of nearly any aspect of SPT
- Example mods covering a good slice of modding capabilities
Misc
- Profiles
- Standard/Left Behind/Prepare To Escape/Edge Of Darkness
- Custom profiles
- SPT Easy start
- Lots of money / some QoL skills level 20 / level 69
- SPT Zero to hero
- No money, skills, trader rep or items, only a knife
- SPT Developer
- Testing profile, level 69, most skills maxed, max trader rep
- USEC have all quests ready to start
- BEAR have all quests ready to hand in
- SPT Easy start
- Note system
- Add
- Edit
- Delete
- Extensive config system
- Alter how SPT works
- Holiday themes in hideout on appropriate days
- Halloween
- Christmas
Code
- TypeScript
- Majority of EFT request/response classes passed from client to server have been mapped
- Unit Tests
- Supports tests via jest
- Dependency injection
- Config files accessible from
Aki_Data\Server\configs
/project\assets\configs