update for see item value mod

This commit is contained in:
CWX 2022-06-25 22:30:13 +01:00
parent 99bd83330a
commit f3ed4e59ae
520 changed files with 2407 additions and 1422 deletions

View File

@ -1,46 +0,0 @@
import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
import { Inventory as PmcInventory } from "../models/eft/common/IPmcData";
import { MinMax, Mods, ModsChances } from "../models/eft/common/tables/IBotType";
import { Item } from "../models/eft/common/tables/IItem";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { RandomUtil } from "../utils/RandomUtil";
export declare class BotWeaponGenerator {
protected logger: ILogger;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer;
protected itemHelper: ItemHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected botGeneratorHelper: BotGeneratorHelper;
protected randomUtil: RandomUtil;
constructor(logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil);
generateWeapon(equipmentSlot: string, weaponPool: Record<string, number>, modPool: Mods, modChances: ModsChances, magCounts: MinMax, botRole: string, isPmc: boolean, inventory: PmcInventory): void;
/** Checks if all required slots are occupied on a weapon and all it's mods */
protected isWeaponValid(itemList: Item[]): boolean;
/**
* Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets.
* Additionally, adds extra bullets to SecuredContainer
*
* @param {*} weaponMods
* @param {*} weaponTemplate
* @param {*} magCounts
* @param {*} ammoTpl
* @returns
*/
protected generateExtraMagazines(weaponMods: Item[], weaponTemplate: ITemplateItem, magCounts: MinMax, ammoTpl: string, inventory: PmcInventory): void;
protected addBullets(ammoTpl: string, bulletCount: number, inventory: PmcInventory): void;
/**
* Finds and returns tpl of ammo that should be used, while making sure it's compatible
*
* @param {*} weaponMods
* @param {*} weaponTemplate
* @returns
*/
protected getCompatibleAmmo(weaponMods: Item[], weaponTemplate: ITemplateItem): string;
/** Fill existing magazines to full, while replacing their contents with specified ammo */
protected fillExistingMagazines(weaponMods: Item[], magazine: Item, ammoTpl: string): void;
}

View File

@ -1,401 +0,0 @@
export interface ITemplateItem {
_id: string;
_name: string;
_parent: string;
_type: string;
_props: Props;
_proto: string;
}
export interface Props {
Name: string;
ShortName: string;
Description: string;
Weight: number;
BackgroundColor: string;
Width: number;
Height: number;
StackMaxSize: number;
Rarity?: string;
SpawnChance?: number;
CreditsPrice?: number;
ItemSound: string;
Prefab: Prefab;
UsePrefab: Prefab;
StackObjectsCount: number;
NotShownInSlot: boolean;
ExaminedByDefault: boolean;
ExamineTime: number;
IsUndiscardable: boolean;
IsUnsaleable: boolean;
IsUnbuyable: boolean;
IsUngivable: boolean;
IsLockedafterEquip: boolean;
QuestItem: boolean;
LootExperience: number;
ExamineExperience: number;
HideEntrails: boolean;
RepairCost: number;
RepairSpeed: number;
ExtraSizeLeft: number;
ExtraSizeRight: number;
ExtraSizeUp: number;
ExtraSizeDown: number;
ExtraSizeForceAdd: boolean;
MergesWithChildren: boolean;
CanSellOnRagfair: boolean;
CanRequireOnRagfair: boolean;
ConflictingItems: string[];
DiscardLimit: number;
Unlootable: boolean;
UnlootableFromSlot: string;
UnlootableFromSide: string[];
AnimationVariantsNumber: number;
DiscardingBlock: boolean;
RagFairCommissionModifier: number;
IsAlwaysAvailableForInsurance: boolean;
Grids: Grid[];
Slots: Slot[];
CanPutIntoDuringTheRaid: boolean;
CantRemoveFromSlotsDuringRaid: string[];
weapClass: string;
weapUseType: string;
ammoCaliber: string;
Durability: number;
MaxDurability: number;
OperatingResource: number;
RepairComplexity: number;
durabSpawnMin: number;
durabSpawnMax: number;
isFastReload: boolean;
RecoilForceUp: number;
RecoilForceBack: number;
Convergence: number;
RecoilAngle: number;
weapFireType: string[];
RecolDispersion: number;
SingleFireRate: number;
CanQueueSecondShot: boolean;
bFirerate: number;
Ergonomics: number;
Velocity: number;
bEffDist: number;
bHearDist: number;
isChamberLoad: boolean;
chamberAmmoCount: number;
isBoltCatch: boolean;
defMagType: string;
defAmmo: string;
AdjustCollimatorsToTrajectory: boolean;
shotgunDispersion: number;
Chambers: Chamber[];
CameraRecoil: number;
CameraSnap: number;
ReloadMode: string;
CenterOfImpact: number;
AimPlane: number;
DeviationCurve: number;
DeviationMax: number;
Foldable: boolean;
Retractable: boolean;
TacticalReloadStiffnes: Xyz;
TacticalReloadFixation: number;
RecoilCenter: Xyz;
RotationCenter: Xyz;
RotationCenterNoStock: Xyz;
SizeReduceRight: number;
FoldedSlot: string;
CompactHandling: boolean;
SightingRange: number;
MinRepairDegradation: number;
MaxRepairDegradation: number;
MinRepairKitDegradation: number;
MaxRepairKitDegradation: number;
IronSightRange: number;
MustBoltBeOpennedForExternalReload: boolean;
MustBoltBeOpennedForInternalReload: boolean;
BoltAction: boolean;
HipAccuracyRestorationDelay: number;
HipAccuracyRestorationSpeed: number;
HipInnaccuracyGain: number;
ManualBoltCatch: boolean;
BurstShotsCount: number;
BaseMalfunctionChance: number;
AllowJam: boolean;
AllowFeed: boolean;
AllowMisfire: boolean;
AllowSlide: boolean;
DurabilityBurnRatio: number;
HeatFactorGun: number;
CoolFactorGun: number;
CoolFactorGunMods: number;
HeatFactorByShot: number;
AllowOverheat: boolean;
DoubleActionAccuracyPenalty: number;
RecoilPosZMult: number;
ShotgunDispersion: number;
StackMinRandom: number;
StackMaxRandom: number;
StackSlots: StackSlot[];
SearchSound: string;
BlocksArmorVest: boolean;
RigLayoutName: string;
armorZone: string[];
armorClass: number;
speedPenaltyPercent: number;
mousePenalty: number;
weaponErgonomicPenalty: number;
BluntThroughput: number;
ArmorMaterial: string;
medUseTime: number;
medEffectType: string;
MaxHpResource: number;
hpResourceRate: number;
StimulatorBuffs: string;
effects_health: EffectsHealth;
effects_damage: EffectsDamage;
knifeHitDelay: number;
knifeHitSlashRate: number;
knifeHitStabRate: number;
knifeHitRadius: number;
knifeHitSlashDam: number;
knifeHitStabDam: number;
knifeDurab: number;
PrimaryDistance: number;
SecondryDistance: number;
SlashPenetration: number;
StabPenetration: number;
PrimaryConsumption: number;
SecondryConsumption: number;
DeflectionConsumption: number;
MaxResource: number;
AppliedTrunkRotation: Xyz;
AppliedHeadRotation: Xyz;
DisplayOnModel: boolean;
AdditionalAnimationLayer: number;
StaminaBurnRate: number;
ColliderScaleMultiplier: Xyz;
ammoType: string;
InitialSpeed: number;
BallisticCoeficient: number;
BulletMassGram: number;
BulletDiameterMilimeters: number;
Damage: number;
ammoAccr: number;
ammoRec: number;
ammoDist: number;
buckshotBullets: number;
PenetrationPower: number;
PenetrationPowerDiviation: number;
ammoHear: number;
ammoSfx: string;
MisfireChance: number;
MinFragmentsCount: number;
MaxFragmentsCount: number;
ammoShiftChance: number;
casingName: string;
casingEjectPower: number;
casingMass: number;
casingSounds: string;
ProjectileCount: number;
PenetrationChance: number;
RicochetChance: number;
FragmentationChance: number;
Deterioration: number;
SpeedRetardation: number;
Tracer: boolean;
TracerColor: string;
TracerDistance: number;
ArmorDamage: number;
Caliber: string;
StaminaBurnPerDamage: number;
HeavyBleedingDelta: number;
LightBleedingDelta: number;
ShowBullet: boolean;
HasGrenaderComponent: boolean;
FuzeArmTimeSec: number;
ExplosionStrength: number;
MinExplosionDistance: number;
MaxExplosionDistance: number;
FragmentsCount: number;
FragmentType: string;
ShowHitEffectOnExplode: boolean;
ExplosionType: string;
AmmoLifeTimeSec: number;
Contusion: Contusion;
ArmorDistanceDistanceDamage: Xyz;
Blindness: Xyz;
IsLightAndSoundShot: boolean;
LightAndSoundShotAngle: number;
LightAndSoundShotSelfContusionTime: number;
LightAndSoundShotSelfContusionStrength: number;
MalfMisfireChance: number;
DurabilityBurnModificator: number;
HeatFactor: number;
MalfFeedChance: number;
Accuracy: number;
Recoil: number;
Loudness: number;
EffectiveDistance: number;
RaidModdable: boolean;
ToolModdable: boolean;
BlocksFolding: boolean;
BlocksCollapsible: boolean;
IsAnimated: boolean;
HasShoulderContact: boolean;
DoubleActionAccuracyPenaltyMult: number;
magAnimationIndex: number;
Cartridges: Cartridge[];
CanFast: boolean;
CanHit: boolean;
CanAdmin: boolean;
LoadUnloadModifier: number;
CheckTimeModifier: number;
CheckOverride: number;
ReloadMagType: string;
VisibleAmmoRangesString: string;
MalfunctionChance: number;
TagColor: number;
TagName: string;
MaximumNumberOfUsage: number;
CustomAimPlane: string;
sightModType: string;
aimingSensitivity: number;
SightModesCount: number;
OpticCalibrationDistances: number[];
ScopesCount: number;
AimSensitivity: number[][];
ModesCount: number[];
Zooms: number[][];
CalibrationDistances: number[][];
Intensity: number;
Mask: string;
MaskSize: number;
NoiseIntensity: number;
NoiseScale: number;
Color: Color;
DiffuseIntensity: number;
HasHinge: boolean;
Resource?: number;
CoolFactor?: number;
foodUseTime?: number;
foodEffectType?: string;
MaxRepairResource: number;
RepairQuality: number;
RepairType: string;
TargetItemFilter: string[];
apResource: number;
krResource: number;
}
export interface Prefab {
path: string;
rcid: string;
}
export interface Grid {
_name: string;
_id: string;
_parent: string;
_props: GridProps;
_proto: string;
}
export interface GridProps {
filters: GridFilter[];
cellsH: number;
cellsV: number;
minCount: number;
maxCount: number;
maxWeight: number;
isSortingTable: boolean;
}
export interface GridFilter {
Filter: string[];
ExcludedFilter: string[];
}
export interface Slot {
_name: string;
_id: string;
_parent: string;
_props: SlotProps;
_required: boolean;
_mergeSlotWithChildren: boolean;
_proto: string;
}
export interface SlotProps {
filters: Filter[];
}
export interface Chamber {
_name: string;
_id: string;
_parent: string;
_props: ChamberProps;
_required: boolean;
_mergeSlotWithChildren: boolean;
_proto: string;
}
export interface ChamberProps {
filters: FilterProps[];
}
export interface FilterProps {
Filter: string[];
}
export interface Xyz {
x: number;
y: number;
z: number;
}
export interface StackSlot {
_name?: string;
_id: string;
_sptTpl: string;
parent: string;
location: any;
slotId: string;
_max_count: number;
_props?: StackSlotProps;
_proto?: string;
upd: any;
}
export interface StackSlotProps {
filters: Filter[];
}
export interface EffectsHealth {
Hydration: Hydration;
}
export interface Hydration {
value: number;
}
export interface EffectsDamage {
Pain: Pain;
Contusion: Contusion;
}
export interface Pain {
delay: number;
duration: number;
fadeOut: number;
}
export interface Contusion {
delay: number;
duration: number;
fadeOut: number;
}
export interface Cartridge {
_name: string;
_id: string;
_parent: string;
_max_count: number;
_props: CartridgeProps;
_proto: string;
}
export interface CartridgeProps {
filters: Filter[];
}
export interface Filter {
Shift?: number;
Filter: string[];
AnimationIndex?: number;
}
export interface Color {
r: number;
g: number;
b: number;
a: number;
}

View File

@ -1,25 +0,0 @@
export declare enum HideoutAreasEnum {
NOTSET = -1,
VENTS = 0,
SECURITY = 1,
LAVATORY = 2,
STASH = 3,
GENERATOR = 4,
HEATING = 5,
WATER_COLLECTOR = 6,
MEDSTATION = 7,
NUTRITION_UNIT = 8,
REST_SPACE = 9,
WORKBENCH = 10,
INTEL_CENTER = 11,
SHOOTING_RANGE = 12,
LIBRARY = 13,
SCAV_CASE = 14,
ILLUMINATION = 15,
PLACE_OF_FAME = 16,
AIR_FILTERING = 17,
SOLAR_POWER = 18,
BOOZE_GENERATOR = 19,
BITCOIN_FARM = 20,
CHRISTMAS_TREE = 21
}

View File

@ -1,13 +0,0 @@
export declare enum MemberCategory {
Default = 0,
Developer = 1,
UniqueId = 2,
Trader = 4,
Group = 8,
System = 16,
ChatModerator = 32,
ChatModeratorWithPermanentBan = 64,
UnitTest = 128,
Sherpa = 256,
Emissary = 512
}

View File

@ -1,10 +0,0 @@
export declare const enum Traders {
PRAPOR = "54cb50c76803fa8b248b4571",
THERAPIST = "54cb57776803fa99248b456e",
FENCE = "579dc571d53a0658a154fbec",
SKIER = "58330581ace78e27b8b10cee",
PEACEKEEPER = "5935c25fb3acc3127c3d8cd9",
MECHANIC = "5a7c2eca46aef81a7ca2145d",
RAGMAN = "5ac3b934156ae10c4430e83c",
JAEGER = "5c0647fdd443bc2504c2d371"
}

View File

@ -1,18 +0,0 @@
import { VFS } from "./VFS";
import { JsonUtil } from "./JsonUtil";
import { DatabaseServer } from "../servers/DatabaseServer";
import { ImageRouter } from "../routers/ImageRouter";
import { OnLoad } from "../di/OnLoad";
import { ILogger } from "../models/spt/utils/ILogger";
export declare class DatabaseImporter extends OnLoad {
protected logger: ILogger;
protected vfs: VFS;
protected jsonUtil: JsonUtil;
protected databaseServer: DatabaseServer;
protected imageRouter: ImageRouter;
constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, databaseServer: DatabaseServer, imageRouter: ImageRouter);
onLoad(): void;
getRoute(): string;
loadRecursive(filepath: string): any;
loadImages(filepath: string): void;
}

View File

@ -1,7 +1,7 @@
{ {
"name": "SeeItemValue", "name": "SeeItemValue",
"author": "KcY", "author": "KcY",
"version": "1.3.0", "version": "1.3.1",
"license": "NCSA Open Source", "license": "NCSA Open Source",
"main": "src/mod.js", "main": "src/mod.js",
"akiVersion": "3.0.0", "akiVersion": "3.0.0",

View File

@ -84,6 +84,12 @@ class SeeItemValue implements IMod
let sMutli = 1; let sMutli = 1;
let parentId = ""; let parentId = "";
// if roubles return 1 and dont check traders.
if (id === "5449016a4bdc2d6f028b456f")
{
return 1;
}
// if TraderPrice in cfg is False get price from flea AVG // if TraderPrice in cfg is False get price from flea AVG
if (this.cfg.TraderPrice === false) if (this.cfg.TraderPrice === false)
{ {

View File

@ -1,3 +1,4 @@
import { GameHelper } from "../helpers/GameHelper";
import { HttpServerHelper } from "../helpers/HttpServerHelper"; import { HttpServerHelper } from "../helpers/HttpServerHelper";
import { ProfileHelper } from "../helpers/ProfileHelper"; import { ProfileHelper } from "../helpers/ProfileHelper";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
@ -14,9 +15,10 @@ export declare class GameController {
protected watermark: Watermark; protected watermark: Watermark;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected gameHelper: GameHelper;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected httpConfig: IHttpConfig; protected httpConfig: IHttpConfig;
constructor(logger: ILogger, watermark: Watermark, httpServerHelper: HttpServerHelper, profileHelper: ProfileHelper, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, httpServerHelper: HttpServerHelper, profileHelper: ProfileHelper, gameHelper: GameHelper, configServer: ConfigServer);
gameStart(_url: string, _info: IEmptyRequestData, sessionID: string): void; gameStart(_url: string, _info: IEmptyRequestData, sessionID: string): void;
protected addMissingBonusesProperty(pmcProfile: IPmcData): void; protected addMissingBonusesProperty(pmcProfile: IPmcData): void;
protected addMissingRepeatableQuestsProperty(pmcProfile: IPmcData): void; protected addMissingRepeatableQuestsProperty(pmcProfile: IPmcData): void;
@ -24,7 +26,6 @@ export declare class GameController {
protected addMissingAkiVersionTagToProfile(fullProfile: IAkiProfile): void; protected addMissingAkiVersionTagToProfile(fullProfile: IAkiProfile): void;
protected addMissingArmorRepairSkill(pmcProfile: IPmcData): void; protected addMissingArmorRepairSkill(pmcProfile: IPmcData): void;
protected fixNullTraderSalesSums(pmcProfile: IPmcData): void; protected fixNullTraderSalesSums(pmcProfile: IPmcData): void;
protected removeDanglingConditionCounters(pmcProfile: IPmcData): void;
protected removeDanglingBackendCounters(pmcProfile: IPmcData): void; protected removeDanglingBackendCounters(pmcProfile: IPmcData): void;
getGameConfig(sessionID: string): IGameConfigResponse; getGameConfig(sessionID: string): IGameConfigResponse;
getServer(): any[]; getServer(): any[];

View File

@ -3,10 +3,12 @@ import { InventoryHelper } from "../helpers/InventoryHelper";
import { PaymentHelper } from "../helpers/PaymentHelper"; import { PaymentHelper } from "../helpers/PaymentHelper";
import { PresetHelper } from "../helpers/PresetHelper"; import { PresetHelper } from "../helpers/PresetHelper";
import { ProfileHelper } from "../helpers/ProfileHelper"; import { ProfileHelper } from "../helpers/ProfileHelper";
import { IPmcData } from "../models/eft/common/IPmcData"; import { HideoutArea, IPmcData, Product } from "../models/eft/common/IPmcData";
import { HideoutUpgradeCompleteRequestData } from "../models/eft/hideout/HideoutUpgradeCompleteRequestData"; import { HideoutUpgradeCompleteRequestData } from "../models/eft/hideout/HideoutUpgradeCompleteRequestData";
import { IHideoutContinousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinousProductionStartRequestData"; import { IHideoutContinousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinousProductionStartRequestData";
import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction";
import { IHideoutPutItemInRequestData } from "../models/eft/hideout/IHideoutPutItemInRequestData"; import { IHideoutPutItemInRequestData } from "../models/eft/hideout/IHideoutPutItemInRequestData";
import { IHideoutScavCase } from "../models/eft/hideout/IHideoutScavCase";
import { IHideoutScavCaseStartRequestData } from "../models/eft/hideout/IHideoutScavCaseStartRequestData"; import { IHideoutScavCaseStartRequestData } from "../models/eft/hideout/IHideoutScavCaseStartRequestData";
import { IHideoutSingleProductionStartRequestData } from "../models/eft/hideout/IHideoutSingleProductionStartRequestData"; import { IHideoutSingleProductionStartRequestData } from "../models/eft/hideout/IHideoutSingleProductionStartRequestData";
import { IHideoutTakeItemOutRequestData } from "../models/eft/hideout/IHideoutTakeItemOutRequestData"; import { IHideoutTakeItemOutRequestData } from "../models/eft/hideout/IHideoutTakeItemOutRequestData";
@ -47,11 +49,20 @@ export declare class HideoutController {
upgradeComplete(pmcData: IPmcData, body: HideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse; upgradeComplete(pmcData: IPmcData, body: HideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse;
putItemsInAreaSlots(pmcData: IPmcData, body: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse; putItemsInAreaSlots(pmcData: IPmcData, body: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse;
takeItemsFromAreaSlots(pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse; takeItemsFromAreaSlots(pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse;
protected removeItemFromGenerator(sessionID: string, pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, output: IItemEventRouterResponse, hideoutArea: HideoutArea): IItemEventRouterResponse;
toggleArea(pmcData: IPmcData, body: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse; toggleArea(pmcData: IPmcData, body: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse;
singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse; singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse; scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse;
protected getRandomisedItemRarityCounter(recipe: IHideoutScavCase): {
[x: string]: number;
};
protected getRandomisedScavRewards(rarityItemCounter: {
[x: string]: number;
}): Product[];
continuousProductionStart(pmcData: IPmcData, body: IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse; continuousProductionStart(pmcData: IPmcData, body: IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
takeProduction(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse; takeProduction(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse;
protected handleRecipie(sessionID: string, recipe: IHideoutProduction, pmcData: IPmcData, body: IHideoutTakeProductionRequestData, output: IItemEventRouterResponse): IItemEventRouterResponse;
protected handleScavCase(sessionID: string, pmcData: IPmcData, body: IHideoutTakeProductionRequestData, output: IItemEventRouterResponse): IItemEventRouterResponse;
registerProduction(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData | IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse; registerProduction(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData | IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
update(): void; update(): void;
} }

View File

@ -4,7 +4,7 @@ import { ProfileHelper } from "../helpers/ProfileHelper";
import { QuestConditionHelper } from "../helpers/QuestConditionHelper"; import { QuestConditionHelper } from "../helpers/QuestConditionHelper";
import { QuestHelper } from "../helpers/QuestHelper"; import { QuestHelper } from "../helpers/QuestHelper";
import { IPmcData } from "../models/eft/common/IPmcData"; import { IPmcData } from "../models/eft/common/IPmcData";
import { IQuest } from "../models/eft/common/tables/IQuest"; import { IQuest, Reward } from "../models/eft/common/tables/IQuest";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData"; import { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData";
import { ICompleteQuestRequestData } from "../models/eft/quests/ICompleteQuestRequestData"; import { ICompleteQuestRequestData } from "../models/eft/quests/ICompleteQuestRequestData";
@ -30,9 +30,45 @@ export declare class QuestController {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected questConfig: IQuestConfig; protected questConfig: IQuestConfig;
constructor(logger: ILogger, timeUtil: TimeUtil, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, itemHelper: ItemHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, questHelper: QuestHelper, questConditionHelper: QuestConditionHelper, playerService: PlayerService, configServer: ConfigServer); constructor(logger: ILogger, timeUtil: TimeUtil, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, itemHelper: ItemHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, questHelper: QuestHelper, questConditionHelper: QuestConditionHelper, playerService: PlayerService, configServer: ConfigServer);
/**
* Get all quests visible to player
* Exclude quests with incomplete preconditions (level/loyalty)
* @param sessionID session id
* @returns array of IQuest
*/
getClientQuests(sessionID: string): IQuest[]; getClientQuests(sessionID: string): IQuest[];
acceptQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; acceptQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
acceptRepeatableQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; acceptRepeatableQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Remove completed quest from profile
* Add newly unlocked quests to profile
* Also recalculate thier level due to exp rewards
* @param pmcData Player profile
* @param body completed quest request
* @param sessionID session id
* @returns ItemEvent response
*/
completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse; completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Send a popup to player on completion of a quest
* @param sessionID session id
* @param pmcData player profile
* @param completedQuestId completed quest id
* @param questRewards rewards given to player
*/
protected sendDialogMessageOnQuestComplete(sessionID: string, pmcData: IPmcData, completedQuestId: string, questRewards: Reward[]): void;
/**
* Returns a list of quests that should be failed when a quest is completed
* @param completedQuestId quest completed id
* @returns array of quests
*/
protected getQuestsFailedByCompletingQuest(completedQuestId: string): IQuest[];
/**
* Fail the quests provided
* @param sessionID session id
* @param pmcData player profile
* @param questsToFail quests to fail
*/
protected failQuests(sessionID: string, pmcData: IPmcData, questsToFail: IQuest[]): void;
handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse; handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse;
} }

View File

@ -21,6 +21,7 @@ export declare class RepairController {
protected repairHelper: RepairHelper; protected repairHelper: RepairHelper;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected repairConfig: IRepairConfig; protected repairConfig: IRepairConfig;
protected readonly WEAPON_SKILL_REPAIR_GAIN: number;
constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer); constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer);
/** /**
* Repair with trader * Repair with trader
@ -37,5 +38,5 @@ export declare class RepairController {
* @param sessionID session id * @param sessionID session id
* @returns item event router action * @returns item event router action
*/ */
repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; repairWithKit(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
} }

View File

@ -1,3 +1,4 @@
import { GameHelper } from "../helpers/GameHelper";
import { ItemHelper } from "../helpers/ItemHelper"; import { ItemHelper } from "../helpers/ItemHelper";
import { PresetHelper } from "../helpers/PresetHelper"; import { PresetHelper } from "../helpers/PresetHelper";
import { ProfileHelper } from "../helpers/ProfileHelper"; import { ProfileHelper } from "../helpers/ProfileHelper";
@ -57,13 +58,14 @@ export declare class RepeatableQuestController {
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected presetHelper: PresetHelper; protected presetHelper: PresetHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected gameHelper: GameHelper;
protected ragfairServerHelper: RagfairServerHelper; protected ragfairServerHelper: RagfairServerHelper;
protected itemEventRouter: ItemEventRouter; protected itemEventRouter: ItemEventRouter;
protected paymentService: PaymentService; protected paymentService: PaymentService;
protected objectId: ObjectId; protected objectId: ObjectId;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected questConfig: IQuestConfig; protected questConfig: IQuestConfig;
constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, ragfairServerHelper: RagfairServerHelper, itemEventRouter: ItemEventRouter, paymentService: PaymentService, objectId: ObjectId, configServer: ConfigServer); constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, gameHelper: GameHelper, ragfairServerHelper: RagfairServerHelper, itemEventRouter: ItemEventRouter, paymentService: PaymentService, objectId: ObjectId, configServer: ConfigServer);
/** /**
* This is the method reached by the /client/repeatalbeQuests/activityPeriods endpoint * This is the method reached by the /client/repeatalbeQuests/activityPeriods endpoint
* Returns an array of objects in the format of repeatable quests to the client. * Returns an array of objects in the format of repeatable quests to the client.

View File

@ -0,0 +1,88 @@
import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
import { Inventory as PmcInventory } from "../models/eft/common/IPmcData";
import { Inventory, MinMax, ModsChances } from "../models/eft/common/tables/IBotType";
import { Item } from "../models/eft/common/tables/IItem";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { RandomUtil } from "../utils/RandomUtil";
export declare class BotWeaponGenerator {
protected logger: ILogger;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer;
protected itemHelper: ItemHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected botGeneratorHelper: BotGeneratorHelper;
protected randomUtil: RandomUtil;
private readonly modMagazineSlotId;
constructor(logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil);
generateWeapon(equipmentSlot: string, templateInventory: Inventory, modChances: ModsChances, magCounts: MinMax, botRole: string, isPmc: boolean, inventory: PmcInventory): void;
/**
* Get the mods necessary to kit out a weapon to its preset level
* @param weaponTpl weapon to find preset for
* @param equipmentSlot the slot the weapon will be placed in
* @param weaponParentId
* @returns array of weapon mods
*/
protected getPresetWeaponMods(weaponTpl: string, equipmentSlot: string, weaponParentId: string, itemTemplate: ITemplateItem, botRole: string): Item[];
/** Checks if all required slots are occupied on a weapon and all it's mods */
protected isWeaponValid(itemList: Item[]): boolean;
/**
* Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets.
* Additionally, adds extra bullets to SecuredContainer
* @param weaponMods
* @param weaponTemplate
* @param magCounts
* @param ammoTpl
* @param inventory
* @returns
*/
protected generateExtraMagazines(weaponMods: Item[], weaponTemplate: ITemplateItem, magCounts: MinMax, ammoTpl: string, inventory: PmcInventory): void;
/**
* Get a randomised count of magazines
* @param magCounts min and max value returned value can be between
* @returns numberical value of magazine count
*/
protected getRandomisedMagazineCount(magCounts: MinMax): number;
/**
* Add ammo to the secure container
* @param stackCount How many stacks of ammo to add
* @param ammoTpl Ammo type to add
* @param stackSize Size of the ammo stack to add
* @param inventory Player inventory
*/
protected addAmmoToSecureContainer(stackCount: number, ammoTpl: string, stackSize: number, inventory: PmcInventory): void;
/**
* Get a weapons magazine tpl from a weapon template
* @param weaponMods mods from a weapon template
* @param weaponTemplate Weapon to get magazine tpl for
* @returns magazine tpl string
*/
protected getMagazineTplFromWeaponTemplate(weaponMods: Item[], weaponTemplate: ITemplateItem): string;
protected addBulletsToVestAndPockets(ammoTpl: string, bulletCount: number, inventory: PmcInventory): void;
/**
* Finds and returns compatible ammo tpl
*
* @param {*} weaponMods
* @param {*} weaponTemplate
* @returns compatible ammo tpl
*/
protected getCompatibleAmmo(weaponMods: Item[], weaponTemplate: ITemplateItem): string;
/**
* Fill existing magazines to full, while replacing their contents with specified ammo
* @param weaponMods
* @param magazine
* @param ammoTpl
*/
protected fillExistingMagazines(weaponMods: Item[], magazine: Item, ammoTpl: string): void;
/**
* Fill each Camora with a bullet
* @param weaponMods Weapon mods to find and update camora mod(s) from
* @param magazineId magazine id to find and add to
* @param ammoTpl ammo template id to hydate with
*/
protected fillCamorasWithAmmo(weaponMods: Item[], magazineId: string, ammoTpl: string): void;
}

View File

@ -12,6 +12,19 @@ export declare class WeatherGenerator {
protected weatherConfig: IWeatherConfig; protected weatherConfig: IWeatherConfig;
constructor(weightedRandomHelper: WeightedRandomHelper, randomUtil: RandomUtil, timeUtil: TimeUtil, configServer: ConfigServer); constructor(weightedRandomHelper: WeightedRandomHelper, randomUtil: RandomUtil, timeUtil: TimeUtil, configServer: ConfigServer);
calculateTime(data: IWeatherData): IWeatherData; calculateTime(data: IWeatherData): IWeatherData;
/**
* Get server uptime seconds multiplied by a multiplier and add to current time as seconds
* Format to BSGs requirements
* @param computedDate current date
* @returns formatted time
*/
protected getAcceleratedTime(computedDate: Date): string;
/**
* Get current time formatted to fit BSGs requirement
* @param computedDate
* @returns
*/
protected getNormalTime(computedDate: Date): string;
generateWeather(data: IWeatherData): IWeatherData; generateWeather(data: IWeatherData): IWeatherData;
protected getWeightedFog(): string; protected getWeightedFog(): string;
protected getWeightedRain(): number; protected getWeightedRain(): number;

View File

@ -13,11 +13,13 @@ import { RandomUtil } from "../utils/RandomUtil";
import { ContainerHelper } from "./ContainerHelper"; import { ContainerHelper } from "./ContainerHelper";
import { InventoryHelper } from "./InventoryHelper"; import { InventoryHelper } from "./InventoryHelper";
import { ItemHelper } from "./ItemHelper"; import { ItemHelper } from "./ItemHelper";
import { ProbabilityHelper } from "./ProbabilityHelper";
export declare class BotGeneratorHelper { export declare class BotGeneratorHelper {
protected logger: ILogger; protected logger: ILogger;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected probabilityHelper: ProbabilityHelper;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected durabilityLimitsHelper: DurabilityLimitsHelper; protected durabilityLimitsHelper: DurabilityLimitsHelper;
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
@ -25,8 +27,36 @@ export declare class BotGeneratorHelper {
protected containerHelper: ContainerHelper; protected containerHelper: ContainerHelper;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected botConfig: IBotConfig; protected botConfig: IBotConfig;
constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper, configServer: ConfigServer); constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper, configServer: ConfigServer);
generateModsForItem(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances, isPmc?: boolean): Item[]; generateModsForItem(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances, isPmc?: boolean): Item[];
/**
* Get a list of non black-listed cartridges from the PMC bot config
* @param modSlot mod item slot
* @param itemModPool
* @returns string array of cartridges PMCs can use
*/
protected getNonBlacklistedCartridges(modSlot: string, itemModPool: Record<string, string[]>): string[];
/**
* randomly choose if a mod should be spawned, 100% for required mods OR mod is ammo slot
* never return true for an item that has 0% spawn chance
* @param itemSlot slot the item sits in
* @param modSlot slot the mod sits in
* @param modSpawnChances Chances for various mod spawns
* @returns boolean true if it should spawn
*/
protected shouldModBeSpawned(itemSlot: Slot, modSlot: string, modSpawnChances: ModsChances): boolean;
/**
* Get a list of containers that hold ammo
* @returns string array
*/
protected getAmmoContainers(): string[];
/**
* Get the slot details for an item (chamber/cartridge/slot)
* @param modSlot e.g patron_in_weapon
* @param parentTemplate item template
* @returns
*/
protected getModItemSlot(modSlot: string, parentTemplate: ITemplateItem): Slot;
/** /**
* With the shotgun revolver (60db29ce99594040e04c4a27) 12.12 introduced CylinderMagazines. * With the shotgun revolver (60db29ce99594040e04c4a27) 12.12 introduced CylinderMagazines.
* Those magazines (e.g. 60dc519adf4c47305f6d410d) have a "Cartridges" entry with a _max_count=0. * Those magazines (e.g. 60dc519adf4c47305f6d410d) have a "Cartridges" entry with a _max_count=0.

View File

@ -34,7 +34,7 @@ export declare class BotHelper {
* @param difficultySettings bot settings to alter * @param difficultySettings bot settings to alter
* @param typesToAdd bot type to add to enemy list * @param typesToAdd bot type to add to enemy list
*/ */
addBotToEnemyList(difficultySettings: Difficulty, typesToAdd: string[]): void; addBotToEnemyList(difficultySettings: Difficulty, typesToAdd: string[], typeBeingEdited: string): void;
/** /**
* Add a bot to the REVENGE_BOT_TYPES array * Add a bot to the REVENGE_BOT_TYPES array
* @param difficultySettings bot settings to alter * @param difficultySettings bot settings to alter

View File

@ -0,0 +1,11 @@
import { IPmcData } from "../models/eft/common/IPmcData";
import { ILogger } from "../models/spt/utils/ILogger";
export declare class GameHelper {
protected logger: ILogger;
constructor(logger: ILogger);
/**
* Remove condition conters no longer used
* @param pmcProfile profile to remove old counters from
*/
removeDanglingConditionCounters(pmcProfile: IPmcData): void;
}

Some files were not shown because too many files have changed in this diff Show More