* This is to address [Issue 652](https://dev.sp-tarkov.com/SPT/Issues/issues/652).
* Added messages with gift codes inside project/assets/database/locales/server/en.json
* Update pmcchatresponse.json to include new pity message type.
* Update logic in project/src/services/PmcChatResponseService.ts to now account for pity messages that are sent.
The message's %giftcode% will now be replaced with a random gift code from assets\configs\gifts.json
* Example:
- ![image](/attachments/ade2686a-8dcb-4c11-9457-88e003a47416)
Co-authored-by: Scuvy <Scuvy@gmail.com>
Co-authored-by: chomp <chomp@noreply.dev.sp-tarkov.com>
Reviewed-on: https://dev.sp-tarkov.com/SPT/Server/pulls/359
Co-authored-by: Scuvy <scuvy@noreply.dev.sp-tarkov.com>
Co-committed-by: Scuvy <scuvy@noreply.dev.sp-tarkov.com>
FixesSPT/Issues#677
Fence should be locked in Tournament Profile.
Setting Fences base.json `unlockedByDefault` to `false` makes the profile able to lock Fence
Code from Client:
Shows that unlockedByDefault overrides whatever is written in the Profile data on init.
![image](/attachments/7336f96c-31c0-4ea3-848d-65320cf41340)
Working Screen from Game:
![image](/attachments/b94f368e-91c4-4641-a31e-8b0d8c60d239)
Reviewed-on: https://dev.sp-tarkov.com/SPT/Server/pulls/358
Co-authored-by: TetrisGG <dmiller2606@gmail.com>
Co-committed-by: TetrisGG <dmiller2606@gmail.com>
Wired up `getClientRepeatableQuests()` to retrieve this value + reduced indentation of function
Updated `changeRepeatableQuest()` to decrement free daily value from profile
Add ability to tell if we planted the item at a quest location (fishing gear, SV98) and dont return it with insurance
Reviewed-on: https://dev.sp-tarkov.com/SPT/Server/pulls/350
Co-authored-by: Kaeno <kaeno@noreply.dev.sp-tarkov.com>
Co-committed-by: Kaeno <kaeno@noreply.dev.sp-tarkov.com>
Store meta-data on weapon as its being generated e.g. if it has an optic/front sight/rear sight
use above meta-data to force a low/high profile gas block on weapon during generation
Rebranded src code and scripts to SPT
Co-authored-by: clodan <clodan@clodan.com>
Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/345
Co-authored-by: Alex <clodan@noreply.dev.sp-tarkov.com>
Co-committed-by: Alex <clodan@noreply.dev.sp-tarkov.com>
- Make `PenetrationDamageMod` optional in ITemplateItem
- Cache handbook values if they're found after initial cache generation
- Refactor how caching in RagfairPriceService is handled
-- Rename `generate` methods to `refresh` to better indicate their purpose
-- If item price isn't found in cache, try to find it and add it
-- Refresh caches prior to returning all flea prices (This is only triggered via a route call, so shouldn't happen often)
-- Remove storage of whether we've generated cache, it should always be done on load, and we dynamically add to it, so it's not necessary to keep track of
Co-authored-by: DrakiaXYZ <565558+TheDgtl@users.noreply.github.com>
Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/334
Co-authored-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
Co-committed-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
This PR fixes an issue in RecursiveCloner where null value properties of any type (i.e. arrays, nullable primitives) were being converted to empty objects.
An example of where this is a problem can occur when starting a raid in 3.9. The client would attempt to convert the empty object (created by the RecursiveCloner) to an Array and it would result in a JSON error.
Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/338
Co-authored-by: paulov <v2k4gameplay@outlook.com>
Co-committed-by: paulov <v2k4gameplay@outlook.com>
Fixes an error in getExperience when players are over level 79
Co-authored-by: DrakiaXYZ <565558+TheDgtl@users.noreply.github.com>
Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/337
Co-authored-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
Co-committed-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
This update now runs Prettier before ESLint (with the Stylistic plugin) for code formatting. This takes care of a lot of the edge cases that ESLint doesn't touch by itself. Also adds the `eslint-plugin-unused-imports` ESLint plugin to remove unused imports and the `eslint-plugin-switch-allman` ESLint plugin to enforce Allman braces on case declarations.
The VSCode format-on-save function now requires two additional extentions to be installed: Prettier and Format Code Action. Links can be found in the README and in the recommended extentions section of VSCode when the workspace is open.
Co-authored-by: chomp <chomp@noreply.dev.sp-tarkov.com>
Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/336
Co-authored-by: Refringe <me@refringe.com>
Co-committed-by: Refringe <me@refringe.com>
- Remove locale check for give command (Now handled in the localeService itself)
- Fix variable names/spelling/lowercase in LocaleService.getPlatformForServerLocale (should be no change in behaviour)
- Rewrite LocaleService.getPlatformForClientLocale to not depend on serverSupportedLocales, and instead just use the tables for validity checking
- Expand fallback of client locale handling to include the region code (Handles Czech and Korean locales)
- Write tests for locales
Co-authored-by: DrakiaXYZ <565558+TheDgtl@users.noreply.github.com>
Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/332
Co-authored-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
Co-committed-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
I don't want em'. Grumble. Ahem...
This change allows for "extra" parentheses to be added in situations where, without them, the code could possibly, potentially be seen as maybe a little-bit, tiny confusing.
Also, fixes a bunch of other ESLint errors. Mostly down to naming warnings now. Mostly.
I'm currently hosting the Project Fika Docker on a dedicated Server to have the Server up 24/7 without the need to let my PC run.
When hosting this as a docker container behind traefik (reverse proxy), the logger currently logs the internal IP of the traefik container.
This change makes it so that the headers that traefik/nginx can set are actually read and used. If these headers are not present, we fall back to the original method of using the `socket.remoteAdress`.
Since this is for logging only, the security implications are minimal.
Co-authored-by: Vincent Niehues <vincent.niehues@zeitag.ch>
Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/329
Co-authored-by: vniehues <vniehues@noreply.dev.sp-tarkov.com>
Co-committed-by: vniehues <vniehues@noreply.dev.sp-tarkov.com>
Comment changes
Variable change
Only log debug message when default mod not found + multiple choices exist in pool
Fixed possible nullref if `getMatchingPreset()` returns null
This is the first pass of ESLint on the codebase.
ESLint formatting is less strict when it comes to line-length and line-breaks then dprint/biome, so if you see formatting that you don't like... fix it! It shouldn't require a configuration change.
- This should merge clean into master (when the time comes).
- This will not merge clean into `3.9.0-DEV`, but the conflicts aren't that bad.
Now has a chance to not pick any to remove (default 10%)
Now only removes attachments that are above a rouble price (default 2000)
Stores attachments in a dictionary weighted by rouble price
Picks random amount of attachments to remove and then picks from pool by price, removing items from pool as they're picked