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

Fixed issue with redeemProfileReward() not correctly levelling up traders, causing player to only see level 1 trader items until a restart

This commit is contained in:
Dev 2024-05-25 15:45:27 +01:00
parent ca737d2f62
commit ef8307540b
2 changed files with 23 additions and 3 deletions

View File

@ -7,6 +7,7 @@ import { PaymentHelper } from "@spt/helpers/PaymentHelper";
import { PresetHelper } from "@spt/helpers/PresetHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { QuestHelper } from "@spt/helpers/QuestHelper";
import { TraderHelper } from "@spt/helpers/TraderHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { Item } from "@spt/models/eft/common/tables/IItem";
import { IAddItemsDirectRequest } from "@spt/models/eft/inventory/IAddItemsDirectRequest";
@ -63,6 +64,7 @@ export class InventoryController
@inject("RagfairOfferService") protected ragfairOfferService: RagfairOfferService,
@inject("ProfileHelper") protected profileHelper: ProfileHelper,
@inject("PaymentHelper") protected paymentHelper: PaymentHelper,
@inject("TraderHelper") protected traderHelper: TraderHelper,
@inject("LocalisationService") protected localisationService: LocalisationService,
@inject("PlayerService") protected playerService: PlayerService,
@inject("LootGenerator") protected lootGenerator: LootGenerator,
@ -965,15 +967,18 @@ export class InventoryController
{
case "TraderSalesSum":
pmcData.TradersInfo[mailEvent.entity].salesSum = mailEvent.value;
this.traderHelper.lvlUp(mailEvent.entity, pmcData);
this.logger.success(`Set trader ${mailEvent.entity}: Sales Sum to: ${mailEvent.value}`);
break;
case "TraderStanding":
pmcData.TradersInfo[mailEvent.entity].standing = mailEvent.value;
this.traderHelper.lvlUp(mailEvent.entity, pmcData);
this.logger.success(`Set trader ${mailEvent.entity}: Standing to: ${mailEvent.value}`);
break;
case "ProfileLevel":
pmcData.Info.Experience = mailEvent.value;
pmcData.Info.Level = this.playerService.calculateLevel(pmcData);
// Will calculate level below
this.traderHelper.validateTraderStandingsAndPlayerLevelForProfile(sessionId);
this.logger.success(`Set profile xp to: ${mailEvent.value}`);
break;
case "SkillPoints":

View File

@ -224,10 +224,25 @@ export class TraderHelper
return newStanding < 0 ? 0 : newStanding;
}
/**
* iterate over a profiles traders and ensure they have the correct loyaltyLevel for the player
* @param sessionId Profile to check
*/
public validateTraderStandingsAndPlayerLevelForProfile(sessionId: string): void
{
const profile = this.profileHelper.getPmcProfile(sessionId);
const traders = Object.keys(this.databaseServer.getTables().traders);
for (const trader of traders)
{
this.lvlUp(trader, profile);
}
}
/**
* Calculate traders level based on exp amount and increments level if over threshold
* @param traderID trader to check standing of
* @param pmcData profile to update trader in
* Also validates and updates player level if not correct based on XP value
* @param traderID Trader to check standing of
* @param pmcData Profile to update trader in
*/
public lvlUp(traderID: string, pmcData: IPmcData): void
{