Commit Graph

187 Commits

Author SHA1 Message Date
Dev
99cb77d3cf Save scav quests into scav profile when accepting them 2023-10-17 16:31:21 +01:00
Dev
650a3173c8 Implement Pickup quests for scav
It seems like these are scav-only
2023-10-17 16:28:48 +01:00
Dev
5a0e16634e Fixed seasonal event items not appearing on flea during event
Don't rely on globals event value for event check, store event bools on SeasonaleventService class construction

Remove dupe function `getSeasonalEventItemsToBlock(), rely on `getAllSeasonalEventItems()`
2023-10-14 16:52:48 +01:00
Dev
0b50385b84 Fix error on death because extract is undefined 2023-10-14 10:31:01 +01:00
Refringe
7948e3473c Refactor of InsuranceController & New ItemHelper Methods (!151)
This commit is my second go-around at refactoring the `InsuranceController`, attempting to improving the code's modularity, maintainability, and efficiency while squashing a few bugs along the way.

1. **InsuranceController.ts**
    - Removed `ITemplateItem` import, as it is no longer used.
    - Introduced the `adoptOrphanedItems` method to manage orphaned items in the insurance list.
        - Since "normal" items are individually rolled for deletion, and can be nested within one another, there are situations where a parent item is deleted, leaving its children orphaned. This method moves those orphaned children from their missing parent into the root of the insurance container.
    - Overhauled `findItemsToDelete` method to improve its efficiency and readability:
        - Divided the original monolithic method into smaller, specialized methods like `populateItemsMap`, `populateParentAttachmentsMap`, `processRegularItems`, and `processAttachments`.
        - Changed the return type to `Set<string>` for better performance.
        - Introduced `EnrichedItem` interface (a simple extension of the `Item` interface) to add additional item data, like `name` and `maxPrice` to `Item` objects as they're processed throughout the class. This is done in place of repeatedly querying for this data, or complicating return types.
        - Enhanced logging capabilities to debug the item deletion process. Due to the *current* lack of testing available I've stepped up the amount of debug logging that is done. This will hopefully help us find issues in the future.
    - Modified the `rollForItemDelete` method, now renamed to `rollForDelete`, to include more detailed logging, return a boolean directly, and changed the `insuredItem` parameter to be optional.
    - Added new methods for dealing with some of the particulars that arise from item adoption and creating item maps.
    - Improved inline comments and documentation for better code maintainability.

2. **ItemHelper.ts**
    - Added the `isRaidModdable` method to check if an item is *actually* modifiable in-raid, which takes into account not just the item, but the item that it's attached to.
    - Added the `getAttachmentMainParent` method to fetch the main parent item of a given attachment, useful for item hierarchy traversal. For example, if you pass it an item ID of a suppressor, it will traverse up the muzzle brake, barrel, upper receiver, and return the gun that the suppressor is ultimately attached to, even if that gun is located within other multiple containers.
    - Added the `isAttachmentAttached` method to check if an item is an attachment that is currently attached to its parent.

**Fixes:**
 - Resolved an issue that caused item attachments from being property grouped together for deletion rolls. This issue prevented valuable attachments from being taken first.
 - Resolved an issue that caused child items being orphaned when their parent was removed due to an insurance roll. Probable cause of the bug that made the client spaz out and send repeated insurance packages to the profile---Though I'm still unable to reproduce.
 - Probably more...

Co-authored-by: Refringe <brownelltyler@gmail.com>
Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/151
Co-authored-by: Refringe <refringe@noreply.dev.sp-tarkov.com>
Co-committed-by: Refringe <refringe@noreply.dev.sp-tarkov.com>
2023-10-14 09:05:49 +00:00
TheSparta
723f8db572 Updated dependencies + A few other things (!150)
Initially this was going to be an update to dependencies but it seems i got a little carried away!

Anyways this PR removes 2 unused dependencies (`jshint` and `utf-8-validate`), and 2 other, `del` and `fs-extra` that were replaced by the built-in `fs/promises`.

It also renames all `tsconfig` and `Dockerfile` files, in a way that when viewed in a file tree sorted alphabetically they will be next to each other.

It also updates the typescript target to `ES2022`, and changes moduleResolution from `Node` to `Node10` (this isn't an update, they are the same thing but `Node` is now deprecated).

It also adds the `node:` discriminator to every import from built-in modules.

It also has major changes to the build script, `del` and `fs-extra` were only being used in the build script, it's now using `fs/promises` instead, cleaned up the code from some functions, adds better documentation to a few functions, and renames some gulp tasks and npm scripts to better represent what they actually do.

And finally it updates dependencies, except for `atomically` which can't be updated unless the project switches to ESM.

Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/150
Co-authored-by: TheSparta <thesparta@noreply.dev.sp-tarkov.com>
Co-committed-by: TheSparta <thesparta@noreply.dev.sp-tarkov.com>
2023-10-14 09:01:41 +00:00
Dev
8e377594da Split up code inside validateQuestAssortUnlocksExist() to improve readability 2023-10-13 09:45:47 +01:00
Dev
3c3fd56e65 Send gift to player after taking coop extract 2023-10-12 20:04:50 +01:00
Dev
db619a30b3 Add boss item blacklist and wire into:
airdrops
scav cases
sealed weapon containers
daily quests

Default boss item filter to on
2023-10-12 11:00:04 +01:00
Refringe
52172f2953 InsuranceController Quality and Maintainability (!148)
This pull request aims to refactor the InsuranceController class to improve its code quality and maintainability. The changes include restructuring methods, adding detailed comments, and enhancing the overall logic for processing insured items.

Specific changes include:

- Updating the `findItemstoDelete()` method (and the entire class, really) to keep track of which items are tagged using a Set. This *ensures* that an item can only be attempted to be deleted once, as Sets cannot contain duplicates.

- Changing the method in which we remove insurance packages from the profile. We were iterating over them using a `for` in reverse order and then removing them with a splice and the current index. On paper this should work, but funny things were happening... Sometimes. I've created a new method that removes packages from a profile by matching against the package systemData date, time, and location. This should give us a specific insurance package (as we don't have an ID to use). In addition to this we're fetching a new instance of the profile to edit, instead of modifying packages that are being iterated over as they're being iterated over.

-----

I was unable to reproduce the issue where insurance packages were not being removed from the profile, but hopefully these simplified approaches lead to less funny business.

Co-authored-by: Refringe <brownelltyler@gmail.com>
Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/148
Co-authored-by: Refringe <refringe@noreply.dev.sp-tarkov.com>
Co-committed-by: Refringe <refringe@noreply.dev.sp-tarkov.com>
2023-10-12 08:38:22 +00:00
Dev
968911e3de Refactored repeatable quest system
Moved quest generation code into its own class
Moved shared methods used by controller and generator into helper class
2023-10-11 17:43:57 +01:00
Dev
0986bd0932 Make separate bossKill min/max properties + adjust various difficulty values 2023-10-11 17:05:06 +01:00
Dev
c2a6ca678e Add support for daily quests to request specific weapon kill requirements on elimination quests 2023-10-11 17:04:18 +01:00
Dev
2f2e7c2e32 Variable rename to aid in readability 2023-10-11 10:47:54 +01:00
Dev
f67c4293d8 Merge used profile mods onto a single record for each mod by name, choosing newest 2023-10-10 17:01:29 +01:00
Dev
76d8b944d5 Store `AvailableAfter value in statusTimer of timelocked quest
Send locked quest to client when requested
Delete `availableAfter` property when accepting a quest
2023-10-10 16:18:55 +01:00
Dev
8edc43e9de Do not send timelocked quests to client until timer is passed 2023-10-10 14:46:23 +01:00
chomp
0b67a9a0e9 0.13.5.0 (!147)
Co-authored-by: Dev <dev@dev.sp-tarkov.com>
Co-authored-by: Terkoiz <terkoiz@noreply.dev.sp-tarkov.com>
Co-authored-by: TheSparta <thesparta@noreply.dev.sp-tarkov.com>
Co-authored-by: Refringe <refringe@noreply.dev.sp-tarkov.com>
Co-authored-by: Kaeno <e>
Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/147
2023-10-10 11:03:20 +00:00
Dev
96ef616d48 Add comments 2023-08-10 14:30:29 +01:00
Dev
91ec0144ed Esxpose two endpoints for launcher to get mod-related data 2023-08-10 14:29:09 +01:00
Dev
96de45e580 Expose SPT friend nickname in core config 2023-08-09 16:01:51 +01:00
Dev
643cf9a268 Regenerate item cache on game start
Fixes 'item missing from cache' errors seen when using multiple mods that add items to the game
2023-08-09 12:04:31 +01:00
Dev
b3f5ea8287 FIx null excpetion when a weapon reward is picked that has no presets
We only want the default preset, so use that function instead
2023-08-09 11:52:20 +01:00
chomp
c1a4c544bc Add JSONC support to server configs + use by modders (!112)
Replaced calls (where possible) to JSON.parse/stringify with use of `jsonUtil` functions
`VFS.ts` was tricky, it can't be updated as it'd create a circular dependency

Also add json5 to package.json for modders to have access to

Co-authored-by: Dev <dev@dev.sp-tarkov.com>
Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/112
2023-08-09 10:49:45 +00:00
Dev
6262d74acc Pass the location insurance was lost into sendLostInsuranceMessage()
make use of mailSendService.sendLocalisedNpcMessageToPlayer()
Make use of new `insuranceFailedLabs` array in prapors json data
2023-08-07 22:43:00 +01:00
Dev
14c6104b65 FIx dialogs not showing 2023-08-04 18:58:00 +01:00
Dev
4dc290c284 Nullgaurd against mods that adjust map static data 2023-08-04 12:57:16 +01:00
Dev
dbf9955272 potential fix for custom trader issue 2023-08-03 15:46:50 +01:00
Dev
beb7c5069b Improve profile fixing system
Remove more modded items from profile when config set to true, warn of set to false

Handle weapon presets + messages containing modded items
2023-08-03 14:36:53 +01:00
Dev
cbcd431f09 Fixed new profiles failing to start game during christmas/new years event
Add new function in dialog helper for getting dialogs frm profile - creates empty object if none found

Set gift collection time to 48 hours if none supplied
2023-08-03 12:25:09 +01:00
Dev
831dec7e55 Check for and remove dialogs with the key "undefined" 2023-08-01 23:16:06 +01:00
Dev
1bf3dba1a9 Add 1% chance all PMCs in players game are named after them with random prefixes 2023-08-01 13:31:58 +01:00
Dev
82de7c097d Replace old "evil x" pmc name system with v2 2023-08-01 12:51:40 +01:00
Dev
a912f7c9cd When bsg flea blacklsit is disabled, set all items as sellable on flea 2023-07-31 15:41:10 +01:00
Dev
59b2fc3602 Typo fix 2023-07-30 19:29:19 +01:00
Dev
b25342d2f5 Log error when RAID_CONFIGURATION values cannot be found inside getBotDifficulty() 2023-07-28 17:11:18 +01:00
Dev
ef03d546ce Improvements to PMC gear variety + comment changes 2023-07-26 16:41:54 +01:00
Dev
76dce7a548 Nullguard across multiple dialogueController methods to prevent missing profile/dialog from killing client 2023-07-26 12:47:42 +01:00
Dev
06d39b26a9 Improvements to chat responses
Exit response code when gift code entered

Reply to additional keywords

Randomisd responses + added multiple
2023-07-26 09:38:33 +01:00
Dev
0a1913ab49 Fix issue with completing Sadist not failing Colleagues Part 3
Added fail state to colleagues p3
Reworked loop inside `getQuestsFailedByCompletingQuest()`  to use .some() instead
Reworked `failQuests()` to check all fail conditions instead of just the first one
2023-07-25 19:20:17 +01:00
Dev
b16d849280 Only add player to users inside getProfilesForMail() if they dont exist 2023-07-25 15:59:39 +01:00
Dev
8178f40b5d Comment improvements 2023-07-25 14:04:21 +01:00
Dev
38b921a7e4 Move gift checks into GiftService.sendPraporStartingGift 2023-07-25 11:17:54 +01:00
Dev
41b4bdc432 Fix bug that casued prapor to send new player gifts regardless of how old profile was
Surround gift sending code with gift recieved check first
2023-07-25 10:36:23 +01:00
Dev
fd365df8ba FIx getGameConfig() failing on profile creation 2023-07-25 10:22:12 +01:00
Dev
070b9c7ad6 Send total in game time on game start 2023-07-24 16:38:28 +01:00
Dev
848302e769 Convert post-raid player status into an enum and update usages 2023-07-24 16:30:03 +01:00
Dev
ad576a937a Comment improvements 2023-07-24 15:52:55 +01:00
Dev
40149edeb2 axmc bot weapon generation improvements
Slight weapon variety improvement for PMCs

Only generate backpack loot if bot has backpack - reduces warnings during botgen
Move warning mesage to debug

Add sanitar medkit to pmc blacklist

Pass ur to warning message when endpoint body fails json validation

Pass sessionId into `locationController.generateAll()` to help modders when overriding function

Test - Added grizzly x5 to PMC secure containers to see if they heal more when damaged
2023-07-24 13:20:17 +01:00
Dev
f4047489eb Clean up sptFriend generation code - reduce duplication 2023-07-23 12:30:15 +01:00
Dev
c5332986eb Fixed issues with moving items to sorting table after opening sealed container
Also allow money from sold flea offers to enter sorting table

Remove unused addItem() from InventoryController

Add optional param to inventoryHelper.addItem() to allow use of sorting table, default = off
2023-07-23 12:29:00 +01:00
Dev
253fd3a42a Fix prapor gift system failure on new profile creation 2023-07-23 11:36:41 +01:00
Dev
618a41fcd9 Add system to make prapor give giffts the first and second day after starting a fresh character
Add functionality to handle gift service to use locale ids instead of raw text
2023-07-22 23:23:42 +01:00
Dev
41ef304d97 Improve seasonal system to give gifts during event
Add additional equipment to PMCs when event is active
2023-07-22 20:07:58 +01:00
Dev
c3a4caa38a Convert sptDev profiles quest starter email function to use mail send service 2023-07-22 14:02:13 +01:00
Dev
429d357e89 Correctly parse hours into second for quest code 2023-07-22 13:35:49 +01:00
Dev
f3e1dd59fb Migrate quest controller to use new message service instead of dialogHelper 2023-07-22 12:56:15 +01:00
Dev
de356f8f71 Fix bad ref 2023-07-21 19:37:51 +01:00
chomp
a7b4ebe316 Rework message sending to support gift system (!106)
Co-authored-by: Kaeno <e>
Co-authored-by: Dev <dev@dev.sp-tarkov.com>
Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/106
2023-07-21 17:08:32 +00:00
Dev
67706f09fc Fix missing import 2023-07-20 20:51:49 +01:00
chomp
e2a1b10989 Fixed bug to when talking with another user. Player messages shows like its being send from player instead of reciever. (!105)
Co-authored-by: Kaeno <e>
Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/105
2023-07-20 19:27:28 +00:00
Dev
d1d3674332 Localise warning messages 2023-07-19 13:16:45 +01:00
Dev
129fe0dc97 Localise server errors 2023-07-19 11:00:34 +01:00
Dev
3cba3bfd4a Additional types added to BaseClasses 2023-07-18 17:16:23 +01:00
Dev
942c079284 Rename all globals.ts interfaces to improve naming consistency 2023-07-18 15:44:14 +01:00
Dev
ca48f0e83c Add property to location config to allow adding bot min/max spawn limits for maps
Limit marksman on customs/woods/streets between 2 and 4, woods to 2 and 5
2023-07-17 14:40:54 +01:00
Dev
02d43d491c Save time spent in raid to profile 2023-07-17 09:36:10 +01:00
Dev
965e3efbc7 Handle additional events: ignore/set and ignore/remove
Pass full request object generateDialogueView instead of just id

Handle case when getting dialogue from profile that does not exist

Improve `getMessagePreview()`  nullguard properties that may be missing
2023-07-15 15:01:23 +01:00
Dev
295ed59739 Additional code comments 2023-07-15 14:49:25 +01:00
Dev
5e3d3f5bd7 Rework generateAll() to not have hardcoded skip of "base" map + moved code around + varaible rename
Made generate() private
2023-07-15 11:58:35 +01:00
Dev
7a1140c229 Extract coder into function from updateProfileBaseState + log nickname on game start 2023-07-15 11:03:54 +01:00
Dev
ee3766aad3 Add SPT friend :3 2023-07-15 11:02:48 +01:00
Dev
18054e4004 Extract code into seperate functions inside ProfileController + add logger to class 2023-07-15 11:01:29 +01:00
Dev
5d20b6b781 Further comment improvements 2023-07-15 11:00:35 +01:00
Dev
2b6980358c Moved keepalive code out of GameCallbacks and into its own function inside GameControler 2023-07-15 10:57:39 +01:00
Dev
d2c2a39075 Add comments + improve comment consistency 2023-07-15 10:56:00 +01:00
Dev
195d0e3b1d Add 'fixes' section to core.json, expose some flags for enabling spt fixes
Added flag to enable deletion of modded items from profile - default is off
Fixed issue where loop would stop checking for modded items after finding the first item
2023-07-15 10:53:08 +01:00
Dev
9288a59a77 Convert some privates to protected + some publics to protected 2023-07-15 10:45:33 +01:00
Dev
162709a5b0 Improve comments in gamecallback/controller
Move public functions to top of class
Use parameter property instead of hard coded string inside healthTreatment()
2023-07-14 12:55:32 +01:00
Dev
455bde264c Improve offraidEat
use .find() instead of iterating over every item in player inventory
Return client error if consumable item not found + localised
2023-07-14 12:53:31 +01:00
Dev
7a16c7e998 Improvements to skill points given after performing actions:
Item crafting:
HideoutManagement skillpoints give
Intellect skillpoints given

Examining item:
Intellect given

Repairing weapon/armor
Intellect given

Cleanup of hideouthelper + reordering of functions

Flagged rewardSkillPoints() as dupe of PlayerService.incrementSkillLevel()
Flagged incrementSkillLevel() as dupe of QuestHelper.rewardsSkillPoints()
Need to decide which one wins

Added nullguards to incrementSkillLevel() + added optional multiplication by global skillprogression rate
Made it update last access timestamp
2023-07-13 10:26:47 +01:00
Dev
fd56bf040e Convert hideout craft exp magic string into config value 2023-07-12 20:12:16 +01:00
Dev
503551c27e Refactor getClientQuests 2023-07-10 15:48:49 +01:00
Dev
d0dcfc523b Move event quest code into own function 2023-07-09 16:31:42 +01:00
Dev
dba6b5f629 Allow modifcaiton of the container airdrop will use (capacity etc) 2023-07-09 14:47:02 +01:00
Dev
ad6b94d8a9 Filter out event quests from data prior to sending them to player
Rework season service to use enum instead of magic strings for event names

Add config property to control showing/hiding non-seasonal event quests from player
2023-07-09 14:45:06 +01:00
Dev
cad5dcd679 Add missing quest assort unlocks to questassort.json
Add function to write to console what quest assort unlocks are missing
2023-07-09 11:33:43 +01:00
Dev
d6fed1aa0f Cleanup of generateContainerLoot() to improve readability 2023-07-02 15:05:32 +01:00
Dev
d28d1a485d Add additional check to prevent trader item preset exploiting 2023-06-30 19:30:49 +01:00
Dev
7ad1fc3996 Add FiR config and wire up + cleanup of openRandomLootContainer() 2023-06-20 17:19:53 +01:00
Dev
26f29e1522 Add sealed crates to airdrops 2023-06-20 16:59:15 +01:00
Dev
0c31719013 Feature: Add code to handle sealed weapon containers when opened in menu
Add handbook price for sealed containers (default of 100rub)
2023-06-20 16:07:05 +01:00
Dev
e4fb8cb40d Refactor getTraderSuits() to make better use of .filter() instead of loops
Moved magic strings into object
Misc comments
2023-06-02 16:21:35 +01:00
Dev
cfbe2739f9 Fix issue with insurance message being incorrect
Moved `sendLostInsuranceMessage()` to `insuranceService` + make it read correct id from locale file
2023-06-01 21:24:23 +01:00
Dev
9bf533a1b1 Add additional comments and formatting fixes 2023-06-01 10:46:16 +01:00
Dev
bb9d3739c4 Move logging 2023-05-30 13:58:02 +01:00
Dev
22279a7353 Log sessionid on game start 2023-05-30 13:55:46 +01:00
Dev
774357c1f3 Move fence logging 2023-05-30 13:36:15 +01:00
Dev
00e1679dd9 Log fence standing changes post-raid 2023-05-30 13:35:34 +01:00
Dev
a4efdf9b43 Revert "Store the location insured gear was lost on + time it was lost against insured items in profile"
This reverts commit 77508ace73.
2023-05-27 22:39:32 +01:00