mirror of
https://github.com/sp-tarkov/server.git
synced 2025-02-13 02:30:43 -05:00
On quest completion, store hideout customisation unlocks inside profile json
Append the unlock customisations to results of `client/customization/storage` call Added `hideoutCustomisationUnlocks` to profile on creation
This commit is contained in:
parent
4d039bf869
commit
9b16af7cb6
@ -230,8 +230,12 @@ export class CustomizationController {
|
||||
public getCustomisationStorage(sessionID: string, info: IEmptyRequestData): ICustomisationStorage[] {
|
||||
const customisationResultsClone = this.cloner.clone(this.databaseService.getTemplates().customisationStorage);
|
||||
|
||||
// Some game versions have additional dogtag variants, add them
|
||||
const profile = this.profileHelper.getFullProfile(sessionID);
|
||||
if (!profile) {
|
||||
return customisationResultsClone;
|
||||
}
|
||||
|
||||
// Some game versions have additional dogtag variants, add them
|
||||
switch (this.getGameEdition(profile)) {
|
||||
case GameEditions.EDGE_OF_DARKNESS:
|
||||
// Gets EoD tags
|
||||
@ -295,6 +299,9 @@ export class CustomizationController {
|
||||
}
|
||||
}
|
||||
|
||||
// Append on customisations unlocked by player to results
|
||||
customisationResultsClone.push(...(profile.hideoutCustomisationUnlocks ?? []));
|
||||
|
||||
return customisationResultsClone;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,9 @@
|
||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { BanType, Common, ICounterKeyValue, IStats } from "@spt/models/eft/common/tables/IBotBase";
|
||||
import { ICustomisationStorage } from "@spt/models/eft/common/tables/ICustomisationStorage";
|
||||
import { IItem } from "@spt/models/eft/common/tables/IItem";
|
||||
import { IQuestReward } from "@spt/models/eft/common/tables/IQuest";
|
||||
import { ISearchFriendResponse } from "@spt/models/eft/profile/ISearchFriendResponse";
|
||||
import { ISpt, ISptProfile } from "@spt/models/eft/profile/ISptProfile";
|
||||
import { IValidateNicknameRequestData } from "@spt/models/eft/profile/IValidateNicknameRequestData";
|
||||
@ -607,4 +609,40 @@ export class ProfileHelper {
|
||||
|
||||
return fullFavorites;
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a hideout customisation unlock inside a profile
|
||||
* @param fullProfile Profile to add unlock to
|
||||
* @param reward reward given to player with customisation data
|
||||
* @param source Source of reward, e.g. "unlockedInGame" for quests and "achievement" for achievements
|
||||
*/
|
||||
public addHideoutCustomisationUnlock(fullProfile: ISptProfile, reward: IQuestReward, source: string): void {
|
||||
// Get matching db data for reward
|
||||
const hideoutCustomisationDb = this.databaseService
|
||||
.getHideout()
|
||||
.customisation.globals.find((customisation) => customisation.itemId === reward.target);
|
||||
if (!hideoutCustomisationDb) {
|
||||
this.logger.warning(
|
||||
`Unable to add hideout customisaiton reward: ${reward.target} to profile: ${fullProfile.info.id} as matching object cannot be found in hideout/customisation.json`,
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
fullProfile.hideoutCustomisationUnlocks ||= [];
|
||||
if (fullProfile.hideoutCustomisationUnlocks?.some((unlock) => unlock.id === hideoutCustomisationDb.id)) {
|
||||
this.logger.warning(
|
||||
`Profile: ${fullProfile.info.id} already has hideout customisaiton reward: ${reward.target}, skipping`,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const rewardToStore: ICustomisationStorage = {
|
||||
id: hideoutCustomisationDb.id,
|
||||
source: source,
|
||||
type: hideoutCustomisationDb.type,
|
||||
};
|
||||
|
||||
fullProfile.hideoutCustomisationUnlocks.push(rewardToStore);
|
||||
}
|
||||
}
|
||||
|
@ -919,7 +919,13 @@ export class QuestHelper {
|
||||
): IItem[] {
|
||||
// Repeatable quest base data is always in PMCProfile, `profileData` may be scav profile
|
||||
// TODO: consider moving repeatable quest data to profile-agnostic location
|
||||
const pmcProfile = this.profileHelper.getPmcProfile(sessionId);
|
||||
const fullProfile = this.profileHelper.getFullProfile(sessionId);
|
||||
const pmcProfile = fullProfile?.characters.pmc;
|
||||
if (!pmcProfile) {
|
||||
this.logger.error(`Unable to get pmc profile for: ${sessionId}, no rewards given`);
|
||||
return [];
|
||||
}
|
||||
|
||||
let questDetails = this.getQuestFromDb(questId, pmcProfile);
|
||||
if (!questDetails) {
|
||||
this.logger.warning(
|
||||
@ -990,6 +996,9 @@ export class QuestHelper {
|
||||
case QuestRewardType.POCKETS:
|
||||
this.profileHelper.replaceProfilePocketTpl(pmcProfile, reward.target);
|
||||
break;
|
||||
case QuestRewardType.CUSTOMIZATION_DIRECT:
|
||||
this.profileHelper.addHideoutCustomisationUnlock(fullProfile, reward, "unlockedInGame");
|
||||
break;
|
||||
default:
|
||||
this.logger.error(
|
||||
this.localisationService.getText("quest-reward_type_not_handled", {
|
||||
|
@ -1,5 +1,5 @@
|
||||
export interface ICustomisationStorage {
|
||||
id: string;
|
||||
id: string; // Customiastion.json/itemId
|
||||
source: string;
|
||||
type: string;
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { ICustomisationStorage } from "@spt/models/eft/common/tables/ICustomisationStorage";
|
||||
import { IItem } from "@spt/models/eft/common/tables/IItem";
|
||||
import { EquipmentBuildType } from "@spt/models/enums/EquipmentBuildType";
|
||||
import { MemberCategory } from "@spt/models/enums/MemberCategory";
|
||||
@ -24,6 +25,7 @@ export interface ISptProfile {
|
||||
achievements: Record<string, number>;
|
||||
/** List of friend profile IDs */
|
||||
friends: string[];
|
||||
hideoutCustomisationUnlocks: ICustomisationStorage[];
|
||||
}
|
||||
|
||||
export class ITraderPurchaseData {
|
||||
|
Loading…
x
Reference in New Issue
Block a user