Replace labsAccessCardChancePercent with lootItemsToAddChancePercent inside playerscav.json

Fixed scav generation on profile generation always using fence rep 0

Added small % chance to add red flare to pscav
This commit is contained in:
Dev 2024-02-16 09:59:43 +00:00
parent 2965709535
commit 7bc867a8f7
4 changed files with 101 additions and 44 deletions

View File

@ -77,7 +77,9 @@
"whitelist": []
}
},
"labsAccessCardChancePercent": 0
"labsAccessCardChancePercent": 0,
"lootItemsToAddChancePercent": {
}
},
"-6": {
"botTypeForLoot": "assault",
@ -162,7 +164,8 @@
"whitelist": []
}
},
"labsAccessCardChancePercent": 0
"lootItemsToAddChancePercent": {
}
},
"-5": {
"botTypeForLoot": "assault",
@ -247,7 +250,8 @@
"whitelist": []
}
},
"labsAccessCardChancePercent": 0
"lootItemsToAddChancePercent": {
}
},
"-4": {
"botTypeForLoot": "assault",
@ -332,7 +336,8 @@
"whitelist": []
}
},
"labsAccessCardChancePercent": 0
"lootItemsToAddChancePercent": {
}
},
"-3": {
"botTypeForLoot": "assault",
@ -417,7 +422,8 @@
"whitelist": []
}
},
"labsAccessCardChancePercent": 0
"lootItemsToAddChancePercent": {
}
},
"-2": {
"botTypeForLoot": "assault",
@ -502,7 +508,8 @@
"whitelist": []
}
},
"labsAccessCardChancePercent": 0
"lootItemsToAddChancePercent": {
}
},
"-1": {
"botTypeForLoot": "assault",
@ -587,7 +594,8 @@
"whitelist": []
}
},
"labsAccessCardChancePercent": 0
"lootItemsToAddChancePercent": {
}
},
"0": {
"botTypeForLoot": "assault",
@ -672,7 +680,8 @@
"whitelist": []
}
},
"labsAccessCardChancePercent": 0
"lootItemsToAddChancePercent": {
}
},
"1": {
"botTypeForLoot": "assault",
@ -759,7 +768,9 @@
"whitelist": []
}
},
"labsAccessCardChancePercent": 3
"lootItemsToAddChancePercent": {
"5c94bbff86f7747ee735c08f": 3
}
},
"2": {
"botTypeForLoot": "assault",
@ -842,7 +853,10 @@
"whitelist": []
}
},
"labsAccessCardChancePercent": 6
"lootItemsToAddChancePercent": {
"5c94bbff86f7747ee735c08f": 6,
"62178c4d4ecf221597654e3d": 3
}
},
"3": {
"botTypeForLoot": "assault",
@ -928,7 +942,10 @@
"whitelist": []
}
},
"labsAccessCardChancePercent": 11
"lootItemsToAddChancePercent": {
"5c94bbff86f7747ee735c08f": 11,
"62178c4d4ecf221597654e3d": 8
}
},
"4": {
"botTypeForLoot": "assault",
@ -1013,7 +1030,11 @@
"whitelist": []
}
},
"labsAccessCardChancePercent": 17
"lootItemsToAddChancePercent": {
"5c94bbff86f7747ee735c08f": 17,
"62178c4d4ecf221597654e3d": 13
}
},
"5": {
"botTypeForLoot": "assault",
@ -1098,7 +1119,10 @@
"whitelist": []
}
},
"labsAccessCardChancePercent": 22
"lootItemsToAddChancePercent": {
"5c94bbff86f7747ee735c08f": 22,
"62178c4d4ecf221597654e3d": 18
}
},
"6": {
"botTypeForLoot": "assault",
@ -1182,7 +1206,10 @@
"whitelist": []
}
},
"labsAccessCardChancePercent": 27
"lootItemsToAddChancePercent": {
"5c94bbff86f7747ee735c08f": 27,
"62178c4d4ecf221597654e3d": 23
}
}
}
}

View File

@ -214,10 +214,10 @@ export class ProfileController
this.givePlayerStartingQuestRewards(profileDetails, sessionID, response);
}
this.saveServer.getProfile(sessionID).characters.scav = this.generatePlayerScav(sessionID);
this.resetAllTradersInProfile(sessionID);
this.saveServer.getProfile(sessionID).characters.scav = this.generatePlayerScav(sessionID);
// Store minimal profile and reload it
this.saveServer.saveProfile(sessionID);
this.saveServer.loadProfile(sessionID);

View File

@ -7,7 +7,7 @@ import { BotWeaponGeneratorHelper } from "@spt-aki/helpers/BotWeaponGeneratorHel
import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { Settings, Skills, Stats } from "@spt-aki/models/eft/common/tables/IBotBase";
import { IBotBase, Settings, Skills, Stats } from "@spt-aki/models/eft/common/tables/IBotBase";
import { IBotType } from "@spt-aki/models/eft/common/tables/IBotType";
import { Item } from "@spt-aki/models/eft/common/tables/IItem";
import { AccountTypes } from "@spt-aki/models/enums/AccountTypes";
@ -67,10 +67,7 @@ export class PlayerScavGenerator
const pmcDataClone = this.jsonUtil.clone(profile.characters.pmc);
const existingScavDataClone = this.jsonUtil.clone(profile.characters.scav);
// scav profile can be empty on first profile creation
const scavKarmaLevel = (Object.keys(existingScavDataClone).length === 0)
? 0
: this.getScavKarmaLevel(pmcDataClone);
const scavKarmaLevel = this.getScavKarmaLevel(pmcDataClone);
// use karma level to get correct karmaSettings
const playerScavKarmaSettings = this.playerScavConfig.karmaLevel[scavKarmaLevel];
@ -121,28 +118,12 @@ export class PlayerScavGenerator
scavData.WishList = existingScavDataClone.WishList ?? [];
scavData.Encyclopedia = pmcDataClone.Encyclopedia;
// Add an extra labs card to pscav backpack based on config chance
if (this.randomUtil.getChance100(playerScavKarmaSettings.labsAccessCardChancePercent))
{
const labsCard = this.itemHelper.getItem("5c94bbff86f7747ee735c08f")[1];
const itemsToAdd: Item[] = [{
_id: this.hashUtil.generate(),
_tpl: labsCard._id,
...this.botGeneratorHelper.generateExtraPropertiesForItem(labsCard),
}];
const result = this.botWeaponGeneratorHelper.addItemWithChildrenToEquipmentSlot(
["TacticalVest", "Pockets", "Backpack"],
itemsToAdd[0]._id,
labsCard._id,
itemsToAdd,
scavData.Inventory,
);
if (result !== ItemAddedResult.SUCCESS)
{
this.logger.debug(`Unable to add keycard to bot. Reason: ${ItemAddedResult[result]}`);
}
}
// Add additional items to player scav as loot
this.addAdditionalLootToPlayerScavContainers(playerScavKarmaSettings.lootItemsToAddChancePercent, scavData, [
"TacticalVest",
"Pockets",
"Backpack",
]);
// Remove secure container
scavData = this.profileHelper.removeSecureContainer(scavData);
@ -156,6 +137,55 @@ export class PlayerScavGenerator
return scavData;
}
/**
* Add items picked from `playerscav.lootItemsToAddChancePercent`
* @param possibleItemsToAdd dict of tpl + % chance to be added
* @param scavData
* @param containersToAddTo Possible slotIds to add loot to
*/
protected addAdditionalLootToPlayerScavContainers(
possibleItemsToAdd: Record<string, number>,
scavData: IBotBase,
containersToAddTo: string[],
): void
{
for (const tpl in possibleItemsToAdd)
{
const shouldAdd = this.randomUtil.getChance100(possibleItemsToAdd[tpl]);
if (!shouldAdd)
{
continue;
}
const itemResult = this.itemHelper.getItem(tpl);
if (!itemResult[0])
{
this.logger.warning(`Unable to add ${tpl} to player scav, not an item`);
continue;
}
const itemTemplate = itemResult[1];
const itemsToAdd: Item[] = [{
_id: this.hashUtil.generate(),
_tpl: itemTemplate._id,
...this.botGeneratorHelper.generateExtraPropertiesForItem(itemTemplate),
}];
const result = this.botWeaponGeneratorHelper.addItemWithChildrenToEquipmentSlot(
containersToAddTo,
itemsToAdd[0]._id,
itemTemplate._id,
itemsToAdd,
scavData.Inventory,
);
if (result !== ItemAddedResult.SUCCESS)
{
this.logger.debug(`Unable to add keycard to bot. Reason: ${ItemAddedResult[result]}`);
}
}
}
/**
* Get the scav karama level for a profile
* Is also the fence trader rep level

View File

@ -13,7 +13,7 @@ export interface KarmaLevel
modifiers: Modifiers;
itemLimits: ItemLimits;
equipmentBlacklist: Record<string, string[]>;
labsAccessCardChancePercent: number;
lootItemsToAddChancePercent: Record<string, number>;
}
export interface Modifiers