mirror of
https://github.com/sp-tarkov/server.git
synced 2025-02-13 09:50:43 -05:00
Added system to filter blacklisted items from static and dynamic loot positions
Moved seasonal item filter code to different position inside `generateDynamicLoot()`
This commit is contained in:
parent
5131fb2dcc
commit
2a587d80d8
@ -20,6 +20,7 @@ import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig";
|
|||||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||||
|
import { ItemFilterService } from "@spt/services/ItemFilterService";
|
||||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||||
import { SeasonalEventService } from "@spt/services/SeasonalEventService";
|
import { SeasonalEventService } from "@spt/services/SeasonalEventService";
|
||||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||||
@ -58,6 +59,7 @@ export class LocationGenerator
|
|||||||
@inject("ContainerHelper") protected containerHelper: ContainerHelper,
|
@inject("ContainerHelper") protected containerHelper: ContainerHelper,
|
||||||
@inject("PresetHelper") protected presetHelper: PresetHelper,
|
@inject("PresetHelper") protected presetHelper: PresetHelper,
|
||||||
@inject("LocalisationService") protected localisationService: LocalisationService,
|
@inject("LocalisationService") protected localisationService: LocalisationService,
|
||||||
|
@inject("ItemFilterService") protected itemFilterService: ItemFilterService,
|
||||||
@inject("ConfigServer") protected configServer: ConfigServer,
|
@inject("ConfigServer") protected configServer: ConfigServer,
|
||||||
@inject("PrimaryCloner") protected cloner: ICloner,
|
@inject("PrimaryCloner") protected cloner: ICloner,
|
||||||
)
|
)
|
||||||
@ -570,6 +572,11 @@ export class LocationGenerator
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.itemFilterService.isItemBlacklisted(icd.tpl))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
itemDistribution.push(new ProbabilityObject(icd.tpl, icd.relativeProbability));
|
itemDistribution.push(new ProbabilityObject(icd.tpl, icd.relativeProbability));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -697,29 +704,31 @@ export class LocationGenerator
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure no blacklisted items are in pool
|
||||||
|
spawnPoint.template.Items = spawnPoint.template.Items
|
||||||
|
.filter((item) => !this.itemFilterService.isItemBlacklisted(item._tpl));
|
||||||
|
|
||||||
|
// Ensure no seasonal items are in pool
|
||||||
|
if (!seasonalEventActive)
|
||||||
|
{
|
||||||
|
spawnPoint.template.Items = spawnPoint.template.Items
|
||||||
|
.filter((item) => !seasonalItemTplBlacklist.includes(item._tpl));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Has no items, useless
|
||||||
if (!spawnPoint.template.Items || spawnPoint.template.Items.length === 0)
|
if (!spawnPoint.template.Items || spawnPoint.template.Items.length === 0)
|
||||||
{
|
{
|
||||||
this.logger.error(
|
this.logger.warning(
|
||||||
this.localisationService.getText("location-spawnpoint_missing_items", spawnPoint.template.Id),
|
this.localisationService.getText("location-spawnpoint_missing_items", spawnPoint.template.Id),
|
||||||
);
|
);
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Construct container to hold above filtered items, letting us pick an item for the spot
|
||||||
const itemArray = new ProbabilityObjectArray<string>(this.mathUtil, this.cloner);
|
const itemArray = new ProbabilityObjectArray<string>(this.mathUtil, this.cloner);
|
||||||
for (const itemDist of spawnPoint.itemDistribution)
|
for (const itemDist of spawnPoint.itemDistribution)
|
||||||
{
|
{
|
||||||
if (
|
|
||||||
!seasonalEventActive
|
|
||||||
&& seasonalItemTplBlacklist.includes(
|
|
||||||
spawnPoint.template.Items.find((item) => item._id === itemDist.composedKey.key)?._tpl ?? "",
|
|
||||||
)
|
|
||||||
)
|
|
||||||
{
|
|
||||||
// Skip seasonal event items if they're not enabled
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
itemArray.push(new ProbabilityObject(itemDist.composedKey.key, itemDist.relativeProbability));
|
itemArray.push(new ProbabilityObject(itemDist.composedKey.key, itemDist.relativeProbability));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -734,8 +743,10 @@ export class LocationGenerator
|
|||||||
const chosenComposedKey = itemArray.draw(1)[0];
|
const chosenComposedKey = itemArray.draw(1)[0];
|
||||||
const createItemResult = this.createDynamicLootItem(chosenComposedKey, spawnPoint, staticAmmoDist);
|
const createItemResult = this.createDynamicLootItem(chosenComposedKey, spawnPoint, staticAmmoDist);
|
||||||
|
|
||||||
// Root id can change when generating a weapon
|
// Root id can change when generating a weapon, ensure ids match
|
||||||
spawnPoint.template.Root = createItemResult.items[0]._id;
|
spawnPoint.template.Root = createItemResult.items[0]._id;
|
||||||
|
|
||||||
|
// Overwrite entire pool with chosen item
|
||||||
spawnPoint.template.Items = createItemResult.items;
|
spawnPoint.template.Items = createItemResult.items;
|
||||||
|
|
||||||
loot.push(spawnPoint.template);
|
loot.push(spawnPoint.template);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user