0
0
mirror of https://github.com/sp-tarkov/modules.git synced 2025-02-13 08:50:43 -05:00

111 Commits

Author SHA1 Message Date
Dev
64296e3e62 Revert "Improve async bundles (!123)"
This reverts commit 9e65e68c81f47b05b29244f08d3cb2b9edc8616d.
2024-05-12 23:03:30 +01:00
Merijn Hendriks
9e65e68c81 Improve async bundles (!123)
Synchronizes the changes with NoHurry.AsyncBundleLoader.

A large chunk of this coded has been tested at scale in Fika with very good results.

- Targets `EasyAssets.Create` instead of using a complex lookup pattern
- Delays downloading of bundles to initial loading screen
- Bundles are downloaded using intended sequence
- Improved logging of bundle loading

Reviewed-on: SPT-AKI/Modules#123
Co-authored-by: Merijn Hendriks <merijn.d.hendriks@gmail.com>
Co-committed-by: Merijn Hendriks <merijn.d.hendriks@gmail.com>
2024-05-06 19:44:28 +00:00
Merijn Hendriks
4b401e7449 async-bundles (!117)
This patch contains the following:

- Initial async VFS code (for reading / writing files)
- Simplified Http Client code
- Added async support to Http Client, RequestHandler
- Improved RequestHandler logging
- Deferred bundle loading to EasyAssetPatch
- Make GetManifestJson run async

This comes with a number of benefits:

- When downloading bundles, it will mention which files succeeded or failed to download
- Bundle loading happens in the initial screen, not the white screen
- Fixed the issue where bundle loading could break bepinex loading (too long load time)
- Modders can now make async http request and read/write files async

I removed logging of sessionid inside the RequestHandler for each request, sessionid is already visible from bepinex log startup parameters.

At last, sorry for the amount of commits it took. I initially wanted to target the 3.9.0 branch, but decided to use 3.8.1 instead as async request can really help out some mods.

Reviewed-on: SPT-AKI/Modules#117
Co-authored-by: Merijn Hendriks <merijn.d.hendriks@gmail.com>
Co-committed-by: Merijn Hendriks <merijn.d.hendriks@gmail.com>
2024-05-06 10:28:51 +00:00
Dev
6041bea712 made AddLoot() async Task so it can be awaited 2024-04-11 16:20:15 +01:00
Dev
558d5a3f6e Added money to non-FiR list for PMCs 2024-04-08 10:07:11 +01:00
42d2ac37dd
increase the ragdoll limits to hopefully prevent bodys falling into themselves 2024-04-05 00:17:23 -04:00
2fbaef5eff Clamp the Y velocity so bots dont go flying into the air. 2024-04-01 14:03:10 +01:00
Merijn Hendriks
9c89c31c68 Modernize HTTP v2 (!104)
This PR won't affect modders who have already updated their mods to 3.8.0. They just need to re-compile.

This is a resubmission of my previous PR (SPT-AKI/Modules#99) with additional code cleanup and fixes.
Instead of outright removing the functionality, this time I deprecate it instead (marked for removal in next release).

Requires SPT-AKI/Server#274 to function.

## Overview

- HTTP modernization
  - Adds `Aki.Common.Http.Client`, a replacement for `Aki.Common.Http.Request` and builds on top of `System.Net.Http.HttpClient`
  - Implements failsafe retries when requesting during busy connections
  - Improved debugging
  - Improved performance
  - Deprecades old request code
- Bundle system
  - Fixes remote downloaded bundles using external IP
  - Implements functional bundle caching from remote sources
  - Implements multi-threaded bundle downloads
  - Implements Unity-compatible bundle format support
  - Extensive cleanup
  - Deprecated unneccecary models

## Why?

In it's current state, the bundle system is ducktaped together in 2021, fundumentally broken and in desperate need of a cleanup and fixes.
The HTTP code hasn't been updated since 2021, and `HttpWebRequest` has been deprecated by Microsoft for a while now.
There was also a lot of opportunity left for simple performance gains that even reduces the complexity of the code.

As for why not two separate PRs (HTTP modernization, bundle rework): both were deeply interconnected. A change in one requires modification in the other. Hence the current approach.

## Testing

The code has been validated and tested by @TheSparta and me.
A large section of the code has been implemented and tested extensively by modders.

### Local

1. Start the game from 127.0.0.1
2. The game starts loading bundles from the mods path

### Remote, full re-aquire

1. Start the server from LAN IP (http.json, set host to `cmd > ipconfig` address, example: `192.168.178.32`)
2. Start the game from LAN IP
3. A folder named `user/cache/bundles` is created

### Remote, partial-aquire (deleted)

1. Ensure all bundles are cached
2. Delete one of the aquired bundles from cache
3. Start the server from LAN IP (http.json, set host to `cmd > ipconfig` address, example: `192.168.178.32`)
4. Start the game from LAN IP
5. The bundle is redownloaded

### Remote, partial-aquire (invalid crc)

1. Ensure all bundles are cached
2. Update a bundle mod with a new bundle on the same path
3. Start the server from LAN IP (http.json, set host to `cmd > ipconfig` address, example: `192.168.178.32`)
4. Start the game from LAN IP
5. The bundle is redownloaded

### Remote, use cache

1. Ensure all bundles are cached
2. Start the server from LAN IP (http.json, set host to `cmd > ipconfig` address, example: `192.168.178.32`)
3. Start the game from LAN IP
4. The game starts loading bundles from the cache path

## Risk assessment

In order to reduce friction between releases, this PR introduces a deprecation system.
Obsolete classes and methods have been marked deprecated.
These will remain available for the current release and continue to function as normal for this release.
A warning will be displayed during build when a modder relies on the deprecated functionality.
The marked classes and methods are to be removed in the next release.

The server-side changes have no impact on modders.

## Deprecation

The following classes are affected:

- `Aki.Common.Http.Request`: Replaced by `Aki.Common.Http.Request`
- `Aki.Common.Http.WebConstants`: Replaced by functionality from `System.Net.Http`
- `Aki.Custom.Models.BundleInfo`: Replaced by `Aki.Custom.Models.BundleItem`

The following methods are affected:

- `Aki.Common.Http.RequestHandler.GetData(path, hasHost)`: `hasHost` enables connection outside intended host.
- `Aki.Common.Http.RequestHandler.GetJson(path, hasHost)`: `hasHost` enables connection outside intended host.
- `Aki.Common.Http.RequestHandler.PostJson(path, json, hasHost)`: `hasHost` enables connection outside intended host.
- `Aki.Common.Http.RequestHandler.PutJson(path, json, hasHost)`: `hasHost` enables connection outside intended host.

The deprecated methods and `Aki.Custom.Models.BundleInfo` are self-contained and can be removed independently.
The deprecated classes require removal of all deprecated code at once.

Reviewed-on: SPT-AKI/Modules#104
Reviewed-by: TheSparta <thesparta@noreply.dev.sp-tarkov.com>
Co-authored-by: Merijn Hendriks <merijn.d.hendriks@gmail.com>
Co-committed-by: Merijn Hendriks <merijn.d.hendriks@gmail.com>
2024-03-29 18:43:46 +00:00
Merijn Hendriks
245f21c3d8 Improve bundle documentation (!101)
Most of this code was (re-)written in 0.12.9, almost 3 years ago.
Current understanding of how it worked was limited, so I went back and broke it until I understood it properly.

I added comments where I could and slightly altered the logic of `GetManifestJson` to make it easier to read.

Regarding removal of `GetManifestBundle`: you can't. While `Windows.json` contains most of the bundle info, some info (like `Doge`) resides outside of this. Removing `GetManifestBundle` results in the game failing to load.

Reviewed-on: SPT-AKI/Modules#101
Co-authored-by: Merijn Hendriks <merijn.d.hendriks@gmail.com>
Co-committed-by: Merijn Hendriks <merijn.d.hendriks@gmail.com>
2024-03-25 09:53:20 +00:00
Dev
065c446e83 Update patch to skip doing changes if group owner is player - same as client 2024-03-20 17:38:32 +00:00
f43e907193 Fix patch looking for wrong Wildspawntype enum 2024-03-19 12:15:56 +00:00
b1e1841311 Small optimization 2024-03-17 16:00:40 +00:00
de325c8b0d remove CulistsPriestEvent and RavangeZryachiyEvent from running IsEnemyPatch Letting them use BSG logic instead.
Added a patch to handle Closing all extracts but 1 for when cultist ritual succeeds in halloween event.
Halloween Event doesnt seem to work well when map has newspawn system enabled. I think bots are getting stuck getting loaded. causing delayed spawns of cultists.
2024-03-17 12:47:59 +00:00
Cj
293fa8d90c Enable BSG logging (!96)
Needs merged with: SPT-AKI/Server#262

Short story first: Last night I was poking around the code as I always do looking for the cause of an exception and got sick and tired of the generic bad exceptions we always work off of. So I fixed it.

This allows us access to BSG's internal logging using Nlog. This is useful for everybody. Not just SPT dev's, but mod dev's alike. It can be enabled from `core.json` with the option to send the output to the server.

Here's an example of the improvement, its huge. Bepinex console is the gerneric logging we always use, the editor behind it is the improved logging from Nlog. Its night and day.

![image](/attachments/491dd8b6-e89a-4809-b19e-c5906ab6989e)

The levels are based off of Nlog ordinals where low is more logging, high is less. (Stupid I know, but what can you do)

Verbosity is as follows:
 * In all cases, except off, better exceptions will be logged.
 * to see the logging output in your bepinex logs, make sure you have debug logging enabled in bepinex.
 * WARNING: trace-info logging will quickly create log files in the megabytes.
 * 0 - trace
 * 1 - debug
 * 2 - info
 * 3 - warn
 * 4 - error
 * 5 - fatal
 * 6 - off

Co-authored-by: Cj <161484149+CJ-SPT@users.noreply.github.com>
Reviewed-on: SPT-AKI/Modules#96
Co-authored-by: Cj <cj@noreply.dev.sp-tarkov.com>
Co-committed-by: Cj <cj@noreply.dev.sp-tarkov.com>
2024-03-16 21:04:00 +00:00
Dev
eec51e84f1 Exit application when a patch fails 2024-03-14 17:18:42 +00:00
99313c9cc0 Update RagfairFeePatch 2024-03-14 17:13:35 +00:00
Dev
27c0d3f0ae Added patch failure handling, thanks to Drakia 2024-03-14 17:08:20 +00:00
Dev
fa423cb9be Update for 29197 2024-03-14 11:23:51 +00:00
Cj
73db17ea78 Show mods loaded in cool debug message (!95)
needs merged with: SPT-AKI/Server#258

Shows if mods are loaded in the cool debug message, will show if either server mods or client mods are present.

Co-authored-by: Cj <161484149+CJ-SPT@users.noreply.github.com>
Reviewed-on: SPT-AKI/Modules#95
Co-authored-by: Cj <cj@noreply.dev.sp-tarkov.com>
Co-committed-by: Cj <cj@noreply.dev.sp-tarkov.com>
2024-03-11 22:02:45 +00:00
6a77131249 Resolve an issue where Release builds of the server caused exceptions in the client (!94)
Some code cleanup and refactoring

Co-authored-by: DrakiaXYZ <565558+TheDgtl@users.noreply.github.com>
Reviewed-on: SPT-AKI/Modules#94
Co-authored-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
Co-committed-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
2024-03-11 08:44:50 +00:00
059334d0cd Fix the BTR turretview bot being visible (!92)
Rewrite the BTRTurretView attach patch, so we no longer need the BotInit patch

Co-authored-by: DrakiaXYZ <565558+TheDgtl@users.noreply.github.com>
Reviewed-on: SPT-AKI/Modules#92
Co-authored-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
Co-committed-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
2024-03-10 09:43:15 +00:00
Cj
b87b569ece Implement getting data from server, and showing release notes (!90)
Needs merged with: SPT-AKI/Server#249

Added
- Moved beta disclaimer text to the server
- Moved `PreventClientModsPatch` to AKI.Debugging as it makes more sense here after this PR. People who need to know, know why.
- Ability to show a release note summary to users in-game
- Cool debug message only shows build hash.

Instructions for testing
- Since I opted to store properties in the registry, its not as straight forward as deleting a file. (Thanks Drakia for the suggestion). So in order to test you need to open up regedit and navigate to `Computer\HKEY_CURRENT_USER\Software\Battlestate Games\EscapeFromTarkov` inside of that directory are 3 values stored in relation to this PR.

`SPT_AcceptedBETerms` - `REG_DWORD` that stores a value of 0 or 1
`SPT_ShownReleaseNotes` - `REG_DWORD` that stores a value of 0 or 1
`SPT_Version` - `REG_BINARY` that stores a binary converted string.

In order to reset after first run for a second test, you just delete all 3 entries.

Co-authored-by: Cj <161484149+CJ-SPT@users.noreply.github.com>
Reviewed-on: SPT-AKI/Modules#90
Co-authored-by: Cj <cj@noreply.dev.sp-tarkov.com>
Co-committed-by: Cj <cj@noreply.dev.sp-tarkov.com>
2024-03-07 22:10:07 +00:00
2ff471e754 Remove GClass Refs for cultist amulet patch 2024-02-28 20:34:15 +00:00
Dev
0429799dea 28965 2024-02-27 18:57:49 +00:00
Kaeno
9328c4c956 Add patch that removes Culists amulet when you kill a cultist. First pass at implementing this 2024-02-25 17:36:27 +00:00
a43ea41a75 CheckandaddEnemypatch now returns a bool. Set result to not include isAI Checks. Needs testing (!85)
Co-authored-by: Kaeno <e>
Reviewed-on: SPT-AKI/Modules#85
2024-02-22 16:57:57 +00:00
e1caef80dc Fix multiple NREs thrown in bot code (!84)
1) The called bot's enemy position is being passed to TryCall, instead of the calling bot's enemy position. This is both incorrect and can lead to an NRE if the called bot has no enemy. Fix by passing in the calling bot's enemy position

2) In the TryCall method, the caller's enemy is added to the called bot, however the code doesn't verify that it was added before accessing it in the `EnemyInfos` array. This can throw a missing key exception if the bot failed to add to the enemies list. Fix by making sure the enemy is added to the enemy list before executing TryCall

3) When a BotOwner is disposed, the CalledData is never properly cleaned up, resulting in a bot's OnEnemyAdd being triggered after the bot has been killed, this can throw an NRE. Fix by calling CalledData.SetOff before BotOwner.Dispose

Co-authored-by: DrakiaXYZ <565558+TheDgtl@users.noreply.github.com>
Reviewed-on: SPT-AKI/Modules#84
Co-authored-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
Co-committed-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
2024-02-22 09:13:09 +00:00
Kaeno
625442d2e3 Gets the value from server. No longer hard coded to 10 2024-02-16 16:14:11 +00:00
Kaeno
1759abd842 Make sure the patch only runs while ingame and on a scav 2024-02-16 15:49:18 +00:00
c7bc0b0514 Rework build process (!83)
Co-authored-by: CWXDEV <CWXDEV@outlook.com>
Reviewed-on: SPT-AKI/Modules#83
2024-02-16 10:13:58 +00:00
44e9f44f70 Fix error when BTR kills enemy (!82)
Fixes an NRE when the BTR kills an enemy while using cover fire service

Co-authored-by: DrakiaXYZ <565558+TheDgtl@users.noreply.github.com>
Reviewed-on: SPT-AKI/Modules#82
Co-authored-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
Co-committed-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
2024-02-15 08:56:02 +00:00
Kaeno
6f78f23cde Make culists use original function when picking enemies so Cultist amulet from lightkeeper works 2024-02-13 19:15:54 +00:00
Dev
4f0dad24e7 Fixed incorrect traitor scav check 2024-02-13 12:49:02 +00:00
Kaeno
0564961c72 Make sure we are not trying to add ourselfs to our own enemy list. 2024-02-12 17:08:48 +00:00
Kaeno
c340023378 Some more fixes preventing scav raids from working also btr fix 2024-02-12 12:01:27 +00:00
Dev
87d9688ab2 Update class refs for new patch 2024-02-12 11:33:06 +00:00
d08754fb61 Work towards implementing LK services (!79)
- Move clearing trader service data to raid end instead of as part of BTR Manager
- Fix data type for TraderServices ItemsToPay property
- Add ItemsToReceive property to TraderServices (Used for LK amulet)
- Don't throw NRE when nothing is bound to OnTraderServicePurchased

Co-authored-by: DrakiaXYZ <565558+TheDgtl@users.noreply.github.com>
Reviewed-on: SPT-AKI/Modules#79
Co-authored-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
Co-committed-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
2024-02-12 09:22:45 +00:00
Dev
5622e05b13 Add drugs to non-FiR pocket list 2024-02-11 11:56:19 +00:00
Dev
663c5b1460 Small optimisation to PmcFoundInRaidEquipment 2024-02-11 11:47:44 +00:00
Dev
e5c47ab5e9 Don't add FiR to injectors in PMC pockets 2024-02-11 11:16:44 +00:00
Dev
761d6c339d Add patch to make some player scavs hostile to player
Refactored AIHelpers.BotIsPlayerScav to not require a BotOwner object
2024-02-11 10:33:59 +00:00
Kaeno
96f107f1d2 Adds the ability to see items required by pmc quests as a scav like live on Found in Raid Items 2024-02-10 18:07:45 +00:00
Dev
0a1115d0d6 Fix medkits being FiR inside PMC pockets
FIx weapons inside PMC backpacks having FiR mods
Fix PMC armors having FiR plates/soft inserts
Fix PMC headwear having FiR soft inserts
2024-02-05 10:16:52 +00:00
Kaeno
2ebabeffc9 Made Player invincible while in BTR so Border snipers dont kill you while being protected by the BTR 2024-02-05 06:42:59 +00:00
eb443aaa5e Fixed BTR movement speed being tied to a static framerate (!73)
By multiplying `moveSpeed` by `Time.deltaTime` in `BTRVehicle.Update()`, it prevents the BTR movement from desyncing, and possibly going faster or slower than expected.

Reviewed-on: SPT-AKI/Modules#73
Co-authored-by: Arys <arys@noreply.dev.sp-tarkov.com>
Co-committed-by: Arys <arys@noreply.dev.sp-tarkov.com>
2024-01-30 09:37:33 +00:00
53363d5a25 Removed red debug sphere from BTR (!72)
Reviewed-on: SPT-AKI/Modules#72
Co-authored-by: Arys <arys@noreply.dev.sp-tarkov.com>
Co-committed-by: Arys <arys@noreply.dev.sp-tarkov.com>
2024-01-29 20:53:22 +00:00
c01bd92c78 Fix BTR when NVidia Reflex is enabled (!71)
- Before `Application.targetFrameRate` is used in the BTR code, set it to 60. Then set it back afterwards
- Remove an unnecessary error from BTRExtractPassengersPatch, not actually an error state

All credit goes to Ngst for figuring out that NVidia Reflex was causing the BTR issues

Co-authored-by: DrakiaXYZ <565558+TheDgtl@users.noreply.github.com>
Reviewed-on: SPT-AKI/Modules#71
Co-authored-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
Co-committed-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
2024-01-29 19:08:38 +00:00
2d2b4fb78f Removed unnecessary BTR patch (!70)
Reviewed-on: SPT-AKI/Modules#70
Co-authored-by: Arys <arys@noreply.dev.sp-tarkov.com>
Co-committed-by: Arys <arys@noreply.dev.sp-tarkov.com>
2024-01-29 18:08:45 +00:00
a48e40b481 Delayed spawning BTR bot to GameWorld.OnGameStarted (!69)
Honestly this is just a shot in the dark hotfix. I've tested it and these changes still work fine for me.

Let me know if this fixes the BTR not working, Chomp

Reviewed-on: SPT-AKI/Modules#69
Co-authored-by: Arys <arys@noreply.dev.sp-tarkov.com>
Co-committed-by: Arys <arys@noreply.dev.sp-tarkov.com>
2024-01-27 09:05:33 +00:00
a124ace054 Fixed exception caused by BTR not being destroyed at correct time (!68)
Todo:

* Make BTR spawn at random time during raid instead of at start
* ~~Fix BTR trader services not working for subsequent raids in Streets~~ Drakia provided me with a fix and it's included in this PR

TL;DR - It's ready for testing

Co-authored-by: Nympfonic <arys.steam@gmail.com>
Reviewed-on: SPT-AKI/Modules#68
Co-authored-by: Arys <arys@noreply.dev.sp-tarkov.com>
Co-committed-by: Arys <arys@noreply.dev.sp-tarkov.com>
2024-01-26 08:28:29 +00:00