mirror of
https://github.com/sp-tarkov/server.git
synced 2025-02-13 09:50:43 -05:00
Added ability to convert assault scavs to bosses (!366)
Co-authored-by: Kaeno <kaeno@noreply.dev.sp-tarkov.com> Co-authored-by: Dev <dev@dev.sp-tarkov.com> Reviewed-on: SPT/Server#366
This commit is contained in:
parent
5f6cee3f8b
commit
da955f0a4e
@ -49,17 +49,17 @@
|
|||||||
"pmcBEAR": 15
|
"pmcBEAR": 15
|
||||||
},
|
},
|
||||||
"bosses": [
|
"bosses": [
|
||||||
"bossbully",
|
"bossBully",
|
||||||
"bossgluhar",
|
"bossGluhar",
|
||||||
"bosskilla",
|
"bossKilla",
|
||||||
"bosskojaniy",
|
"bossKojaniy",
|
||||||
"bosssanitar",
|
"bossSanitar",
|
||||||
"bosstagilla",
|
"bossTagilla",
|
||||||
"bossknight",
|
"bossKnight",
|
||||||
"bosszryachiy",
|
"bossZryachiy",
|
||||||
"bossboar",
|
"bossBoar",
|
||||||
"bossboarSniper",
|
"bossBoarSniper",
|
||||||
"bosskolontay"
|
"bossKolontay"
|
||||||
],
|
],
|
||||||
"durability": {
|
"durability": {
|
||||||
"default": {
|
"default": {
|
||||||
@ -2705,5 +2705,26 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lowProfileGasBlockTpls": ["61702f1b67085e45ef140b26", "5dfa3d45dfc58d14537c20b0", "5bb20dcad4351e3bac1212da", "56eabcd4d2720b66698b4574", "6065dc8a132d4d12c81fd8e3", "55d4af3a4bdc2d972f8b456f"],
|
"lowProfileGasBlockTpls": ["61702f1b67085e45ef140b26", "5dfa3d45dfc58d14537c20b0", "5bb20dcad4351e3bac1212da", "56eabcd4d2720b66698b4574", "6065dc8a132d4d12c81fd8e3", "55d4af3a4bdc2d972f8b456f"],
|
||||||
"disableLootOnBotTypes": []
|
"disableLootOnBotTypes": [],
|
||||||
}
|
"assaultToBossConversion": {
|
||||||
|
"bossConvertEnabled": false,
|
||||||
|
"bossesToConvertToWeights": {
|
||||||
|
"bossKilla": 1,
|
||||||
|
"bossSanitar": 1,
|
||||||
|
"bossTagilla": 1,
|
||||||
|
"bossBully": 1,
|
||||||
|
"bossGluhar": 1,
|
||||||
|
"bossKojaniy": 1,
|
||||||
|
"bossKolontay": 1,
|
||||||
|
"bossKnight": 1,
|
||||||
|
"followerBigPipe": 1,
|
||||||
|
"followerBirdEye": 1
|
||||||
|
},
|
||||||
|
"bossConvertMinMax": {
|
||||||
|
"assault": {
|
||||||
|
"min": 100,
|
||||||
|
"max": 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -5,6 +5,7 @@ import { BotGenerator } from "@spt/generators/BotGenerator";
|
|||||||
import { BotDifficultyHelper } from "@spt/helpers/BotDifficultyHelper";
|
import { BotDifficultyHelper } from "@spt/helpers/BotDifficultyHelper";
|
||||||
import { BotHelper } from "@spt/helpers/BotHelper";
|
import { BotHelper } from "@spt/helpers/BotHelper";
|
||||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||||
|
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
|
||||||
import { MinMax } from "@spt/models/common/MinMax";
|
import { MinMax } from "@spt/models/common/MinMax";
|
||||||
import { Condition, IGenerateBotsRequestData } from "@spt/models/eft/bot/IGenerateBotsRequestData";
|
import { Condition, IGenerateBotsRequestData } from "@spt/models/eft/bot/IGenerateBotsRequestData";
|
||||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||||
@ -39,6 +40,7 @@ export class BotController
|
|||||||
@inject("BotGenerator") protected botGenerator: BotGenerator,
|
@inject("BotGenerator") protected botGenerator: BotGenerator,
|
||||||
@inject("BotHelper") protected botHelper: BotHelper,
|
@inject("BotHelper") protected botHelper: BotHelper,
|
||||||
@inject("BotDifficultyHelper") protected botDifficultyHelper: BotDifficultyHelper,
|
@inject("BotDifficultyHelper") protected botDifficultyHelper: BotDifficultyHelper,
|
||||||
|
@inject("WeightedRandomHelper") protected weightedRandomHelper: WeightedRandomHelper,
|
||||||
@inject("BotGenerationCacheService") protected botGenerationCacheService: BotGenerationCacheService,
|
@inject("BotGenerationCacheService") protected botGenerationCacheService: BotGenerationCacheService,
|
||||||
@inject("MatchBotDetailsCacheService") protected matchBotDetailsCacheService: MatchBotDetailsCacheService,
|
@inject("MatchBotDetailsCacheService") protected matchBotDetailsCacheService: MatchBotDetailsCacheService,
|
||||||
@inject("LocalisationService") protected localisationService: LocalisationService,
|
@inject("LocalisationService") protected localisationService: LocalisationService,
|
||||||
@ -434,6 +436,26 @@ export class BotController
|
|||||||
botGenerationDetails.botCountToGenerate = this.botConfig.presetBatch[botGenerationDetails.role];
|
botGenerationDetails.botCountToGenerate = this.botConfig.presetBatch[botGenerationDetails.role];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Only convert to boss when not already converted to PMC & Boss Convert is enabled
|
||||||
|
const {
|
||||||
|
bossConvertEnabled,
|
||||||
|
bossConvertMinMax,
|
||||||
|
bossesToConvertToWeights } = this.botConfig.assaultToBossConversion;
|
||||||
|
if (bossConvertEnabled && !botGenerationDetails.isPmc)
|
||||||
|
{
|
||||||
|
const bossConvertPercent = bossConvertMinMax[requestedBot.Role.toLowerCase()];
|
||||||
|
if (bossConvertPercent)
|
||||||
|
{
|
||||||
|
// Roll a percentage check if we should convert scav to boss
|
||||||
|
if (this.randomUtil.getChance100(
|
||||||
|
this.randomUtil.getInt(bossConvertPercent.min, bossConvertPercent.max)))
|
||||||
|
{
|
||||||
|
this.updateBotGenerationDetailsToRandomBoss(
|
||||||
|
botGenerationDetails,
|
||||||
|
bossesToConvertToWeights);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Construct cache key
|
// Construct cache key
|
||||||
const cacheKey = `${
|
const cacheKey = `${
|
||||||
@ -466,6 +488,19 @@ export class BotController
|
|||||||
return [desiredBot];
|
return [desiredBot];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected updateBotGenerationDetailsToRandomBoss(
|
||||||
|
botGenerationDetails: BotGenerationDetails,
|
||||||
|
possibleBossTypeWeights: Record<string, number>): void
|
||||||
|
{
|
||||||
|
// Seems Actual bosses have the same Brain issues like PMC gaining Boss Brains We cant use all bosses
|
||||||
|
botGenerationDetails.role
|
||||||
|
= this.weightedRandomHelper.getWeightedValue(possibleBossTypeWeights);
|
||||||
|
|
||||||
|
// Bosses are only ever 'normal'
|
||||||
|
botGenerationDetails.botDifficulty = "normal";
|
||||||
|
botGenerationDetails.botCountToGenerate = this.botConfig.presetBatch[botGenerationDetails.role];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the difficulty passed in, if its not "asonline", get selected difficulty from config
|
* Get the difficulty passed in, if its not "asonline", get selected difficulty from config
|
||||||
* @param requestedDifficulty
|
* @param requestedDifficulty
|
||||||
|
@ -139,6 +139,11 @@ export class BotHelper
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* is the provided role a PMC, case-agnostic
|
||||||
|
* @param botRole Role to check
|
||||||
|
* @returns True if role is PMC
|
||||||
|
*/
|
||||||
public botRoleIsPmc(botRole: string): boolean
|
public botRoleIsPmc(botRole: string): boolean
|
||||||
{
|
{
|
||||||
return [this.pmcConfig.usecType.toLowerCase(), this.pmcConfig.bearType.toLowerCase()].includes(
|
return [this.pmcConfig.usecType.toLowerCase(), this.pmcConfig.bearType.toLowerCase()].includes(
|
||||||
|
@ -45,6 +45,14 @@ export interface IBotConfig extends IBaseConfig
|
|||||||
lowProfileGasBlockTpls: string[]
|
lowProfileGasBlockTpls: string[]
|
||||||
/** What bottypes should be excluded from having loot generated on them (backpack/pocket/vest) does not disable food/drink/special/ */
|
/** What bottypes should be excluded from having loot generated on them (backpack/pocket/vest) does not disable food/drink/special/ */
|
||||||
disableLootOnBotTypes: string[]
|
disableLootOnBotTypes: string[]
|
||||||
|
assaultToBossConversion: IAssaultToBossConversion
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IAssaultToBossConversion
|
||||||
|
{
|
||||||
|
bossConvertEnabled: boolean
|
||||||
|
bossesToConvertToWeights: Record<string, number>
|
||||||
|
bossConvertMinMax: Record<string, MinMax>
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Number of bots to generate and store in cache on raid start per bot type */
|
/** Number of bots to generate and store in cache on raid start per bot type */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user