Commit Graph

39 Commits

Author SHA1 Message Date
Dev
5005a5160a Improve buyItem() handling of multiple and stackable item purchases
rename `reparentPresets` to `reparentItemAndChildren` and move to `itemHelper`
2024-01-14 21:12:56 +00:00
Dev
47a84e508b Fix some quests failing twice (chemical part 4), reducing rep twice as much as it should
Quest failure is handled by client now, no need to find and fail quests in server on quest completion

Move `getQuestsFailedByCompletingQuest()` to questHelper
2024-01-14 12:29:58 +00:00
Dev
41d491dd16 Show error when quest not found in db 2024-01-14 10:27:26 +00:00
Dev
cb18d251ba Improve selection of items to add mods for:
quest rewards
bot loot gen
map loot gen
fence assort gen

Updated `removeRandomModsOfItem()` to also skip slots with a _required prop
2024-01-11 17:42:58 +00:00
Dev
297bc2786a Improve armor quest rewards
Attempt to return the armor preset found in globals.json first as this has default plates, if that fails construct item outselves based on mods _requried properties
2024-01-10 10:04:09 +00:00
Dev
443d8da7f7 FIx server error when passing failed quest data to client 2024-01-09 18:46:44 +00:00
Dev
a9c36ec205 Fix issue with armors as quest rewards not being sent with soft inserts
Centralised a soft insert check into `ItemHelper`

Add extra base types to `generateGearPool()` in equipment bot pool service
2024-01-09 16:49:59 +00:00
Dev
0b3ad5bbd8 Only send failed quest trader messages for non-repeatable quests 2024-01-07 23:51:28 +00:00
Dev
d3afe0b6f3 Fix issue with completing a quest
Altered `addTimeLockedQuestsToProfile()` to not fail when checked quest has no `target` property
Altered `getNewlyAccessibleQuestsWhenStartingQuest()` to check all statuses of quest, not just first
2024-01-06 09:11:04 +00:00
Dev
9dbd3d1acf Updated server handling of quests/repeatable quests to match 0.14 changes - this will break profiles 2024-01-05 19:52:21 +00:00
Dev
9e55a52965 update quest objects and implement get achievemetns 2023-12-27 17:15:38 +00:00
Dev
12cb176a42 Potential fix for failed/repeatable quests keeping their subtask completed status 2023-12-02 00:10:25 +00:00
Dev
b52ea4f1fa Only set start time in resetQuestState() when new status is started 2023-11-30 10:13:45 +00:00
Dev
9ed5869fa6 Reduce calls to this.timeUtil.getTimestamp() inside getQuestReadyForProfile()
Set `startTime` property inside `resetQuestState()`
2023-11-30 10:09:23 +00:00
Dev
288b7cf654 Further cleanup of acceptQuest 2023-11-30 09:36:28 +00:00
Dev
a941a22305 Attempt to resolve issue where failed quests that are restarted retain their previous completed statuses until client restart
New function to purge completed condtions + remove status timers beyond what a newly started quest would have + add updated quest status object to `questsStatus` property on profile changes response object
2023-11-29 23:36:31 +00:00
Dev
1abc7e3604 Handle failing a quest while raiding as scav 2023-11-20 11:19:11 +00:00
Refringe
4ac12ef70a Formatting/Linting Changes (!168)
These are the formatting & linting configuration changes from the `3.8.0` branch and the changes that they make to the overall project.

The majority of these changes are from running two commands:

`npm run lint:fix`
`npm run style:fix`

This has already been run on the `3.8.0` branch and this PR should make `master` play nicer when it comes to merges going forward.

There are now four VSCode plugins recommended for server development. They've been added to the workspace file and a user should get a UI notification when the workspace is opened if they're not installed.

The four plugins are:
https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig
https://marketplace.visualstudio.com/items?itemName=dprint.dprint
https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint
https://marketplace.visualstudio.com/items?itemName=biomejs.biome

Once installed they should just work within the workspace.

Also, be sure to `npm i` to get the new dprint application.

Co-authored-by: Refringe <brownelltyler@gmail.com>
Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/168
2023-11-16 21:42:06 +00:00
Dev
203ef0c011 Centralise getting a skill from a player profile into one location profileHelper.getSkillFromProfile() 2023-11-07 15:17:38 +00:00
Dev
5a60e4dcf0 Consolodate multiple functions (incrementSkillLevel, rewardSkillpoints) that do the same task into one addSkillpointsToPlayer, make them use enum for skill type instead of string 2023-11-07 11:20:25 +00:00
DrakiaXYZ
ebeda336db Implement live-like calculation of Weapon Maintenance XP (!164)
- Implement formula based on 30 weapon repairs done on live
- Return the repair amount as `repairAmount` from `repairItemByKit`
- Add an additional `repairPoints` to `RepairDetails` to return the repair points used
- Update `repairAmount` references to `repairPoints` to keep old behavior
- Add new parameter to rewardSkillPoints that applies live-like level scaling
- Only give weapon maintenance XP when using a repair kit

This implementation comes with a "Crit Fail" and "Crit Success" mechanic to account for live sometimes randomly being -4 or +4 off from my estimated values. By default the chance of each is 10%, and they can overlap and cancel each other out

Spreadsheet of live repair data:
https://docs.google.com/spreadsheets/d/1-tR4WYelhZfKZ3ZDbxr3nd73Y60E1wQRjDWONpMVSew/edit?usp=sharing

Useful columns:
C: The amount of dura attempted to be repaired, this is used in the estimated skill calculated
G: Hand entered value of how much skill gain I actually saw on live (Multiplied by 10 for readability. So "3.2" would be "32")
J: The estimated skill gain, based on the calculation included in this merge request
K: How far off the estimated skill gain was (Negative implies we guessed high and the actual result was lower)

One thing of note:
I've modified all the existing references to `repairAmount` to be the new `repairPoints` when a repair kit is used. This is to keep the existing behaviour outside of my direct changes as much as possible.

However, this seems to be incorrect in some cases (For example, buff chance is repairPoints/maxDura, but repairPoints will go down the higher your int. I'm assuming this is meant to be repairedDura/maxDura). May want to update these references to use `repairAmount` once they've been confirmed to expect the repair amount instead of repair points used.

Co-authored-by: DrakiaXYZ <565558+TheDgtl@users.noreply.github.com>
Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/164
Co-authored-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
Co-committed-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
2023-11-02 08:56:02 +00:00
Dev
de2f70fb79 Remove replaced repeatable quest from PMC and scav profile 2023-10-21 17:39:44 +01:00
TheSparta
418d9f2a8f Import path alias on the whole project (!157)
- Ability to use @spt-aki path alias on the whole project.
- Swapped all imports from relative paths, for imports using the path alias.

Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/157
Co-authored-by: TheSparta <thesparta@noreply.dev.sp-tarkov.com>
Co-committed-by: TheSparta <thesparta@noreply.dev.sp-tarkov.com>
2023-10-19 17:21:17 +00:00
Dev
68a8d34489 Protect against a missing upd object inside changeItemStack() 2023-10-10 22:37:38 +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
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
b2530a6083 log not implemented message for stash row reward 2023-08-06 16:54:31 +01:00
Dev
946512ca6d FIx server error with not being able to find singular hiddeout craft now there are two DSP crafts 2023-08-02 12:57:08 +01:00
Dev
9e056cf8f3 Handle failing quests post-raid if they are now failed and were not pre-raid 2023-07-25 19:50:46 +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
3526b2764a Migrate quest fail to new MailSendService 2023-07-22 13:02:42 +01:00
Dev
129fe0dc97 Localise server errors 2023-07-19 11:00:34 +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
eb445b2820 Refactor doesPlayerLevelFulfilCondition() to handle more than just > 2023-05-22 16:00:09 +01:00
Dev
87c1c80a78 Handle getting quest status when player profile lacks a Quests array 2023-05-22 15:50:10 +01:00
Dev
1fc35881d8 Refactor: Update various functions with changes from code review 2023-03-21 14:19:49 +00:00
Dev
3d849b427b Squashed 22 commits in an attempt to fix Gitea object bloat 2023-03-05 22:02:56 +02:00
Dev
e1310d74ca Add Repo 2023-03-03 15:23:46 +00:00