Update types to match server

This commit is contained in:
Chomp 2022-06-21 11:09:32 +01:00
parent cc73e0591c
commit 55211d8c4f
344 changed files with 7537 additions and 4876 deletions

View File

@ -55,7 +55,7 @@ export declare class InitialModLoader implements IModLoader {
protected executeMods(container: DependencyContainer): void;
sortModsLoadOrder(): string[];
protected addMod(mod: string): Promise<void>;
protected areModDependenciesFulfilled(mod: IPackageJsonData, loadedMods: Record<string, IPackageJsonData>): boolean;
protected areModDependenciesFulfilled(pkg: IPackageJsonData, loadedMods: Record<string, IPackageJsonData>): boolean;
protected isModCompatible(mod: IPackageJsonData, loadedMods: Record<string, IPackageJsonData>): boolean;
protected validMod(mod: string): boolean;
protected getLoadOrderRecursive(mod: string, result: Record<string, string>, visited: Record<string, string>): void;

View File

@ -0,0 +1,10 @@
export interface IMatch {
metrics: Metrics;
}
export interface Metrics {
Keys: number[];
NetProcessingBins: number[];
RenderBins: number[];
GameUpdateBins: number[];
MemoryMeasureInterval: number;
}

View File

@ -7,288 +7,234 @@ export interface ITemplateItem {
_proto: string;
}
export interface Props {
Name: string;
ShortName: string;
Description: string;
Weight: number;
BackgroundColor: string;
Width: number;
Height: number;
StackMaxSize: number;
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: Slot[];
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: Xyz;
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: Slot[];
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;
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[];
Unlootable?: boolean;
UnlootableFromSlot?: string;
UnlootableFromSide?: string[];
AnimationVariantsNumber?: number;
DiscardingBlock?: boolean;
RagFairCommissionModifier?: number;
IsAlwaysAvailableForInsurance?: boolean;
DiscardLimit?: number;
MaxResource?: number;
Resource?: number;
DogTagQualities?: boolean;
Grids?: Grid[];
Slots?: Slot[];
CanPutIntoDuringTheRaid?: boolean;
CantRemoveFromSlotsDuringRaid?: string[];
KeyIds?: string[];
TagColor?: number;
TagName?: string;
Durability?: number;
Accuracy?: number;
Recoil?: number;
Loudness?: number;
EffectiveDistance?: number;
Ergonomics?: number;
Velocity?: number;
RaidModdable?: boolean;
ToolModdable?: boolean;
BlocksFolding?: boolean;
BlocksCollapsible?: boolean;
IsAnimated?: boolean;
HasShoulderContact?: boolean;
SightingRange?: number;
DoubleActionAccuracyPenaltyMult?: number;
ModesCount: any;
DurabilityBurnModificator?: number;
HeatFactor?: number;
CoolFactor?: number;
foodUseTime?: number;
foodEffectType?: string;
MaxRepairResource: number;
RepairQuality: number;
RepairType: string;
TargetItemFilter: string[];
apResource: number;
krResource: number;
muzzleModType?: string;
CustomAimPlane?: string;
sightModType?: string;
aimingSensitivity?: number;
SightModesCount?: number;
OpticCalibrationDistances?: number[];
ScopesCount?: number;
AimSensitivity: any;
Zooms?: number[][];
CalibrationDistances?: number[][];
Intensity?: number;
Mask?: string;
MaskSize?: number;
NoiseIntensity?: number;
NoiseScale?: number;
Color?: Color;
DiffuseIntensity?: number;
HasHinge?: boolean;
RampPalette?: string;
DepthFade?: number;
RoughnessCoef?: number;
SpecularCoef?: number;
MainTexColorCoef?: number;
MinimumTemperatureValue?: number;
RampShift?: number;
HeatMin?: number;
ColdMax?: number;
IsNoisy?: boolean;
IsFpsStuck?: boolean;
IsGlitch?: boolean;
IsMotionBlurred?: boolean;
IsPixelated?: boolean;
PixelationBlockCount?: number;
ShiftsAimCamera?: number;
magAnimationIndex?: number;
Cartridges?: Slot[];
CanFast?: boolean;
CanHit?: boolean;
CanAdmin?: boolean;
LoadUnloadModifier?: number;
CheckTimeModifier?: number;
CheckOverride?: number;
ReloadMagType?: string;
VisibleAmmoRangesString?: string;
MalfunctionChance?: number;
IsShoulderContact?: boolean;
Foldable?: boolean;
Retractable?: boolean;
SizeReduceRight?: number;
CenterOfImpact?: number;
ShotgunDispersion?: number;
IsSilencer?: boolean;
DeviationCurve?: number;
DeviationMax?: number;
SearchSound?: string;
BlocksArmorVest?: boolean;
speedPenaltyPercent?: number;
GridLayoutName?: string;
SpawnFilter?: any[];
containType?: any[];
sizeWidth?: number;
sizeHeight?: number;
isSecured?: boolean;
spawnTypes?: string;
lootFilter?: any[];
spawnRarity?: string;
minCountSpawn?: number;
maxCountSpawn?: number;
openedByKeyID?: any[];
RigLayoutName?: string;
MaxDurability?: number;
armorZone?: string[];
armorClass: any;
mousePenalty?: number;
weaponErgonomicPenalty?: number;
BluntThroughput?: number;
ArmorMaterial?: string;
weapClass?: string;
weapUseType?: string;
ammoCaliber?: string;
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;
bEffDist?: number;
bHearDist?: number;
isChamberLoad?: boolean;
chamberAmmoCount?: number;
isBoltCatch?: boolean;
defMagType?: string;
defAmmo?: string;
AdjustCollimatorsToTrajectory?: boolean;
shotgunDispersion?: number;
Chambers?: Slot[];
CameraRecoil?: number;
CameraSnap?: number;
ReloadMode?: string;
AimPlane?: number;
TacticalReloadStiffnes?: Xyz;
TacticalReloadFixation?: number;
RecoilCenter?: Xyz;
RotationCenter?: Xyz;
RotationCenterNoStock?: Xyz;
FoldedSlot?: string;
CompactHandling?: boolean;
MinRepairDegradation?: number;
MaxRepairDegradation?: 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;
MinRepairKitDegradation?: number;
MaxRepairKitDegradation?: number;
BlocksEarpiece?: boolean;
BlocksEyewear?: boolean;
BlocksHeadwear?: boolean;
BlocksFaceCover?: boolean;
Indestructibility?: number;
headSegments?: string[];
FaceShieldComponent?: boolean;
FaceShieldMask?: string;
MaterialType?: string;
RicochetParams?: Xyz;
DeafStrength?: string;
BlindnessProtection?: number;
Distortion?: number;
CompressorTreshold?: number;
CompressorAttack?: number;
@ -299,11 +245,120 @@ export interface Props {
CompressorVolume?: number;
AmbientVolume?: number;
DryVolume?: number;
headSegments?: string[];
FaceShieldComponent?: boolean;
RicochetParams?: Xyz;
DeafStrength?: string;
BlindnessProtection: number;
foodUseTime?: number;
foodEffectType?: string;
StimulatorBuffs?: string;
effects_health: any;
effects_damage: any;
MaximumNumberOfUsage?: number;
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;
AppliedTrunkRotation?: Xyz;
AppliedHeadRotation?: Xyz;
DisplayOnModel?: boolean;
AdditionalAnimationLayer?: number;
StaminaBurnRate?: number;
ColliderScaleMultiplier?: Xyz;
ConfigPathStr?: string;
MaxMarkersCount?: number;
scaleMin?: number;
scaleMax?: number;
medUseTime?: number;
medEffectType?: string;
MaxHpResource?: number;
hpResourceRate?: number;
apResource?: number;
krResource?: number;
MaxOpticZoom?: number;
MaxRepairResource?: number;
TargetItemFilter?: string[];
RepairQuality?: number;
RepairType?: string;
StackMinRandom?: number;
StackMaxRandom?: number;
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?: Xyz;
ArmorDistanceDistanceDamage?: Xyz;
Blindness?: Xyz;
IsLightAndSoundShot?: boolean;
LightAndSoundShotAngle?: number;
LightAndSoundShotSelfContusionTime?: number;
LightAndSoundShotSelfContusionStrength?: number;
MalfMisfireChance?: number;
MalfFeedChance?: number;
StackSlots?: StackSlot[];
type?: string;
eqMin?: number;
eqMax?: number;
rate?: number;
ThrowType?: string;
ExplDelay?: number;
Strength?: number;
ContusionDistance?: number;
throwDamMax?: number;
explDelay?: number;
EmitTime?: number;
CanBeHiddenDuringThrow?: boolean;
MinTimeToContactExplode?: number;
ExplosionEffectType?: string;
}
export interface Prefab {
path: string;

View File

@ -1,6 +1,7 @@
export interface IPackageJsonData {
incompatibilities?: string[];
dependencies?: string[];
modDependencies?: Record<string, string>;
name: string;
author: string;
version: string;

View File

@ -5,6 +5,7 @@ import { IBotType } from "../../eft/common/tables/IBotType";
import { ICustomizationItem } from "../../eft/common/tables/ICustomizationItem";
import { IHandbookBase } from "../../eft/common/tables/IHandbookBase";
import { ILootBase } from "../../eft/common/tables/ILootBase";
import { IMatch } from "../../eft/common/tables/IMatch";
import { IQuest } from "../../eft/common/tables/IQuest";
import { IRepeatableQuestDatabase } from "../../eft/common/tables/IRepeatableQuests";
import { ITemplateItem } from "../../eft/common/tables/ITemplateItem";
@ -18,22 +19,22 @@ import { ILocations } from "./ILocations";
import { IServerBase } from "./IServerBase";
import { ISettingsBase } from "./ISettingsBase";
export interface IDatabaseTables {
bots: {
bots?: {
types: Record<string, IBotType>;
base: IBotBase;
core: IBotCore;
};
hideout: {
hideout?: {
areas: IHideoutArea[];
production: IHideoutProduction[];
scavcase: IHideoutScavCase[];
settings: IHideoutSettingsBase;
};
locales: ILocaleBase;
locations: ILocations;
loot: ILootBase;
match: any;
templates: {
locales?: ILocaleBase;
locations?: ILocations;
loot?: ILootBase;
match?: IMatch;
templates?: {
character: string[];
items: Record<string, ITemplateItem>;
quests: IQuest[];
@ -44,8 +45,8 @@ export interface IDatabaseTables {
profiles: any;
prices: Record<string, number>;
};
traders: Record<string, ITrader>;
globals: IGlobals;
server: IServerBase;
settings: ISettingsBase;
traders?: Record<string, ITrader>;
globals?: IGlobals;
server?: IServerBase;
settings?: ISettingsBase;
}

View File

@ -0,0 +1,5 @@
import { Preset } from "../../eft/common/IGlobals";
export interface CustomPreset {
key: string;
preset: Preset;
}

View File

@ -0,0 +1,6 @@
import { ITraderAssort } from "../../eft/common/tables/ITrader";
import { Traders } from "../../enums/Traders";
export interface CustomTraderAssortData {
traderId: Traders;
assorts: ITraderAssort;
}

View File

@ -0,0 +1,13 @@
import { HandbookItem } from "../models/eft/common/tables/IHandbookBase";
import { ILogger } from "../models/spt/utils/ILogger";
export declare class CustomHandbookItemService {
protected logger: ILogger;
private customHandbookItems;
constructor(logger: ILogger);
/**
* Add handbook item
* @param handbookItem item to add
*/
add(handbookItem: HandbookItem): void;
get(): HandbookItem[];
}

View File

@ -0,0 +1,11 @@
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
export declare class CustomItemService {
protected logger: ILogger;
protected databaseServer: DatabaseServer;
private customItems;
constructor(logger: ILogger, databaseServer: DatabaseServer);
add(itemToAdd: ITemplateItem): void;
get(): ITemplateItem[];
}

View File

@ -0,0 +1,14 @@
import { CustomTraderAssortData } from "../models/spt/services/CustomTraderAssortData";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
export declare class CustomTraderAssortService {
protected logger: ILogger;
protected databaseServer: DatabaseServer;
private customAssorts;
constructor(logger: ILogger, databaseServer: DatabaseServer);
/**
* Add assorts to a specific trader
*/
add(assortsToAdd: CustomTraderAssortData): void;
get(): CustomTraderAssortData[];
}

View File

@ -0,0 +1,19 @@
import { Preset } from "../models/eft/common/IGlobals";
import { CustomPreset } from "../models/spt/services/CustomPreset";
import { ILogger } from "../models/spt/utils/ILogger";
export declare class CustomPresetService {
protected logger: ILogger;
private customPresets;
constructor(logger: ILogger);
/**
* Add custom preset to internal array
* @param presetKey presets key
* @param presetToAdd preset item to add
*/
add(presetKey: string, presetToAdd: Preset): void;
/**
* Get all custom presets
* @returns
*/
get(): CustomPreset[];
}

View File

@ -1,18 +1,52 @@
import { VFS } from "./VFS";
import { JsonUtil } from "./JsonUtil";
import { DatabaseServer } from "../servers/DatabaseServer";
import { ImageRouter } from "../routers/ImageRouter";
import { OnLoad } from "../di/OnLoad";
import { IDatabaseTables } from "../models/spt/server/IDatabaseTables";
import { ILogger } from "../models/spt/utils/ILogger";
import { ImageRouter } from "../routers/ImageRouter";
import { DatabaseServer } from "../servers/DatabaseServer";
import { CustomHandbookItemService } from "../services/CustomHandbookItemService";
import { CustomItemService } from "../services/CustomItemService";
import { CustomPresetService } from "../services/customPresetService";
import { CustomTraderAssortService } from "../services/CustomTraderAssortService";
import { JsonUtil } from "./JsonUtil";
import { VFS } from "./VFS";
export declare class DatabaseImporter extends OnLoad {
protected logger: ILogger;
protected vfs: VFS;
protected jsonUtil: JsonUtil;
protected databaseServer: DatabaseServer;
protected customItemService: CustomItemService;
protected customTraderAssortService: CustomTraderAssortService;
protected customHandbookItemService: CustomHandbookItemService;
protected customPresetService: CustomPresetService;
protected imageRouter: ImageRouter;
constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, databaseServer: DatabaseServer, imageRouter: ImageRouter);
constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, databaseServer: DatabaseServer, customItemService: CustomItemService, customTraderAssortService: CustomTraderAssortService, customHandbookItemService: CustomHandbookItemService, customPresetService: CustomPresetService, imageRouter: ImageRouter);
onLoad(): void;
/**
* Read all json files in database folder and map into a json object
* @param filepath path to database folder
*/
protected hydrateDatabase(filepath: string): void;
/**
* Get all items added through CustomItemService and add to database.templates.items
* @param dataToImport db data to amend
*/
protected addCustomItemsToDb(dataToImport: IDatabaseTables): void;
/**
* Get all assorts added through CustomTraderAssortService and add to database.traders[x].assort
* @param dataToImport db data to amend
*/
protected addCustomTraderAssortsToDb(dataToImport: IDatabaseTables): void;
/**
* Get all custom handbook items added through CustomHandbookItemService and add to database.templates.handbook.items
* @param dataToImport db data to amend
*/
protected addCustomHandbookItemsToDb(dataToImport: IDatabaseTables): void;
/**
* Get all custom preset items added through CustomPresetService and add to database.globals.ItemPresets
* @param dataToImport
*/
protected addCustomPresetsToDb(dataToImport: IDatabaseTables): void;
getRoute(): string;
loadRecursive(filepath: string): any;
loadRecursive(filepath: string): IDatabaseTables;
loadImages(filepath: string): void;
}

View File

@ -55,7 +55,7 @@ export declare class InitialModLoader implements IModLoader {
protected executeMods(container: DependencyContainer): void;
sortModsLoadOrder(): string[];
protected addMod(mod: string): Promise<void>;
protected areModDependenciesFulfilled(mod: IPackageJsonData, loadedMods: Record<string, IPackageJsonData>): boolean;
protected areModDependenciesFulfilled(pkg: IPackageJsonData, loadedMods: Record<string, IPackageJsonData>): boolean;
protected isModCompatible(mod: IPackageJsonData, loadedMods: Record<string, IPackageJsonData>): boolean;
protected validMod(mod: string): boolean;
protected getLoadOrderRecursive(mod: string, result: Record<string, string>, visited: Record<string, string>): void;

View File

@ -0,0 +1,10 @@
export interface IMatch {
metrics: Metrics;
}
export interface Metrics {
Keys: number[];
NetProcessingBins: number[];
RenderBins: number[];
GameUpdateBins: number[];
MemoryMeasureInterval: number;
}

View File

@ -7,288 +7,234 @@ export interface ITemplateItem {
_proto: string;
}
export interface Props {
Name: string;
ShortName: string;
Description: string;
Weight: number;
BackgroundColor: string;
Width: number;
Height: number;
StackMaxSize: number;
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: Slot[];
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: Xyz;
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: Slot[];
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;
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[];
Unlootable?: boolean;
UnlootableFromSlot?: string;
UnlootableFromSide?: string[];
AnimationVariantsNumber?: number;
DiscardingBlock?: boolean;
RagFairCommissionModifier?: number;
IsAlwaysAvailableForInsurance?: boolean;
DiscardLimit?: number;
MaxResource?: number;
Resource?: number;
DogTagQualities?: boolean;
Grids?: Grid[];
Slots?: Slot[];
CanPutIntoDuringTheRaid?: boolean;
CantRemoveFromSlotsDuringRaid?: string[];
KeyIds?: string[];
TagColor?: number;
TagName?: string;
Durability?: number;
Accuracy?: number;
Recoil?: number;
Loudness?: number;
EffectiveDistance?: number;
Ergonomics?: number;
Velocity?: number;
RaidModdable?: boolean;
ToolModdable?: boolean;
BlocksFolding?: boolean;
BlocksCollapsible?: boolean;
IsAnimated?: boolean;
HasShoulderContact?: boolean;
SightingRange?: number;
DoubleActionAccuracyPenaltyMult?: number;
ModesCount: any;
DurabilityBurnModificator?: number;
HeatFactor?: number;
CoolFactor?: number;
foodUseTime?: number;
foodEffectType?: string;
MaxRepairResource: number;
RepairQuality: number;
RepairType: string;
TargetItemFilter: string[];
apResource: number;
krResource: number;
muzzleModType?: string;
CustomAimPlane?: string;
sightModType?: string;
aimingSensitivity?: number;
SightModesCount?: number;
OpticCalibrationDistances?: number[];
ScopesCount?: number;
AimSensitivity: any;
Zooms?: number[][];
CalibrationDistances?: number[][];
Intensity?: number;
Mask?: string;
MaskSize?: number;
NoiseIntensity?: number;
NoiseScale?: number;
Color?: Color;
DiffuseIntensity?: number;
HasHinge?: boolean;
RampPalette?: string;
DepthFade?: number;
RoughnessCoef?: number;
SpecularCoef?: number;
MainTexColorCoef?: number;
MinimumTemperatureValue?: number;
RampShift?: number;
HeatMin?: number;
ColdMax?: number;
IsNoisy?: boolean;
IsFpsStuck?: boolean;
IsGlitch?: boolean;
IsMotionBlurred?: boolean;
IsPixelated?: boolean;
PixelationBlockCount?: number;
ShiftsAimCamera?: number;
magAnimationIndex?: number;
Cartridges?: Slot[];
CanFast?: boolean;
CanHit?: boolean;
CanAdmin?: boolean;
LoadUnloadModifier?: number;
CheckTimeModifier?: number;
CheckOverride?: number;
ReloadMagType?: string;
VisibleAmmoRangesString?: string;
MalfunctionChance?: number;
IsShoulderContact?: boolean;
Foldable?: boolean;
Retractable?: boolean;
SizeReduceRight?: number;
CenterOfImpact?: number;
ShotgunDispersion?: number;
IsSilencer?: boolean;
DeviationCurve?: number;
DeviationMax?: number;
SearchSound?: string;
BlocksArmorVest?: boolean;
speedPenaltyPercent?: number;
GridLayoutName?: string;
SpawnFilter?: any[];
containType?: any[];
sizeWidth?: number;
sizeHeight?: number;
isSecured?: boolean;
spawnTypes?: string;
lootFilter?: any[];
spawnRarity?: string;
minCountSpawn?: number;
maxCountSpawn?: number;
openedByKeyID?: any[];
RigLayoutName?: string;
MaxDurability?: number;
armorZone?: string[];
armorClass: any;
mousePenalty?: number;
weaponErgonomicPenalty?: number;
BluntThroughput?: number;
ArmorMaterial?: string;
weapClass?: string;
weapUseType?: string;
ammoCaliber?: string;
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;
bEffDist?: number;
bHearDist?: number;
isChamberLoad?: boolean;
chamberAmmoCount?: number;
isBoltCatch?: boolean;
defMagType?: string;
defAmmo?: string;
AdjustCollimatorsToTrajectory?: boolean;
shotgunDispersion?: number;
Chambers?: Slot[];
CameraRecoil?: number;
CameraSnap?: number;
ReloadMode?: string;
AimPlane?: number;
TacticalReloadStiffnes?: Xyz;
TacticalReloadFixation?: number;
RecoilCenter?: Xyz;
RotationCenter?: Xyz;
RotationCenterNoStock?: Xyz;
FoldedSlot?: string;
CompactHandling?: boolean;
MinRepairDegradation?: number;
MaxRepairDegradation?: 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;
MinRepairKitDegradation?: number;
MaxRepairKitDegradation?: number;
BlocksEarpiece?: boolean;
BlocksEyewear?: boolean;
BlocksHeadwear?: boolean;
BlocksFaceCover?: boolean;
Indestructibility?: number;
headSegments?: string[];
FaceShieldComponent?: boolean;
FaceShieldMask?: string;
MaterialType?: string;
RicochetParams?: Xyz;
DeafStrength?: string;
BlindnessProtection?: number;
Distortion?: number;
CompressorTreshold?: number;
CompressorAttack?: number;
@ -299,11 +245,120 @@ export interface Props {
CompressorVolume?: number;
AmbientVolume?: number;
DryVolume?: number;
headSegments?: string[];
FaceShieldComponent?: boolean;
RicochetParams?: Xyz;
DeafStrength?: string;
BlindnessProtection: number;
foodUseTime?: number;
foodEffectType?: string;
StimulatorBuffs?: string;
effects_health: any;
effects_damage: any;
MaximumNumberOfUsage?: number;
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;
AppliedTrunkRotation?: Xyz;
AppliedHeadRotation?: Xyz;
DisplayOnModel?: boolean;
AdditionalAnimationLayer?: number;
StaminaBurnRate?: number;
ColliderScaleMultiplier?: Xyz;
ConfigPathStr?: string;
MaxMarkersCount?: number;
scaleMin?: number;
scaleMax?: number;
medUseTime?: number;
medEffectType?: string;
MaxHpResource?: number;
hpResourceRate?: number;
apResource?: number;
krResource?: number;
MaxOpticZoom?: number;
MaxRepairResource?: number;
TargetItemFilter?: string[];
RepairQuality?: number;
RepairType?: string;
StackMinRandom?: number;
StackMaxRandom?: number;
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?: Xyz;
ArmorDistanceDistanceDamage?: Xyz;
Blindness?: Xyz;
IsLightAndSoundShot?: boolean;
LightAndSoundShotAngle?: number;
LightAndSoundShotSelfContusionTime?: number;
LightAndSoundShotSelfContusionStrength?: number;
MalfMisfireChance?: number;
MalfFeedChance?: number;
StackSlots?: StackSlot[];
type?: string;
eqMin?: number;
eqMax?: number;
rate?: number;
ThrowType?: string;
ExplDelay?: number;
Strength?: number;
ContusionDistance?: number;
throwDamMax?: number;
explDelay?: number;
EmitTime?: number;
CanBeHiddenDuringThrow?: boolean;
MinTimeToContactExplode?: number;
ExplosionEffectType?: string;
}
export interface Prefab {
path: string;

View File

@ -1,6 +1,7 @@
export interface IPackageJsonData {
incompatibilities?: string[];
dependencies?: string[];
modDependencies?: Record<string, string>;
name: string;
author: string;
version: string;

View File

@ -5,6 +5,7 @@ import { IBotType } from "../../eft/common/tables/IBotType";
import { ICustomizationItem } from "../../eft/common/tables/ICustomizationItem";
import { IHandbookBase } from "../../eft/common/tables/IHandbookBase";
import { ILootBase } from "../../eft/common/tables/ILootBase";
import { IMatch } from "../../eft/common/tables/IMatch";
import { IQuest } from "../../eft/common/tables/IQuest";
import { IRepeatableQuestDatabase } from "../../eft/common/tables/IRepeatableQuests";
import { ITemplateItem } from "../../eft/common/tables/ITemplateItem";
@ -18,22 +19,22 @@ import { ILocations } from "./ILocations";
import { IServerBase } from "./IServerBase";
import { ISettingsBase } from "./ISettingsBase";
export interface IDatabaseTables {
bots: {
bots?: {
types: Record<string, IBotType>;
base: IBotBase;
core: IBotCore;
};
hideout: {
hideout?: {
areas: IHideoutArea[];
production: IHideoutProduction[];
scavcase: IHideoutScavCase[];
settings: IHideoutSettingsBase;
};
locales: ILocaleBase;
locations: ILocations;
loot: ILootBase;
match: any;
templates: {
locales?: ILocaleBase;
locations?: ILocations;
loot?: ILootBase;
match?: IMatch;
templates?: {
character: string[];
items: Record<string, ITemplateItem>;
quests: IQuest[];
@ -44,8 +45,8 @@ export interface IDatabaseTables {
profiles: any;
prices: Record<string, number>;
};
traders: Record<string, ITrader>;
globals: IGlobals;
server: IServerBase;
settings: ISettingsBase;
traders?: Record<string, ITrader>;
globals?: IGlobals;
server?: IServerBase;
settings?: ISettingsBase;
}

View File

@ -0,0 +1,5 @@
import { Preset } from "../../eft/common/IGlobals";
export interface CustomPreset {
key: string;
preset: Preset;
}

View File

@ -0,0 +1,6 @@
import { ITraderAssort } from "../../eft/common/tables/ITrader";
import { Traders } from "../../enums/Traders";
export interface CustomTraderAssortData {
traderId: Traders;
assorts: ITraderAssort;
}

View File

@ -0,0 +1,13 @@
import { HandbookItem } from "../models/eft/common/tables/IHandbookBase";
import { ILogger } from "../models/spt/utils/ILogger";
export declare class CustomHandbookItemService {
protected logger: ILogger;
private customHandbookItems;
constructor(logger: ILogger);
/**
* Add handbook item
* @param handbookItem item to add
*/
add(handbookItem: HandbookItem): void;
get(): HandbookItem[];
}

View File

@ -0,0 +1,11 @@
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
export declare class CustomItemService {
protected logger: ILogger;
protected databaseServer: DatabaseServer;
private customItems;
constructor(logger: ILogger, databaseServer: DatabaseServer);
add(itemToAdd: ITemplateItem): void;
get(): ITemplateItem[];
}

View File

@ -0,0 +1,14 @@
import { CustomTraderAssortData } from "../models/spt/services/CustomTraderAssortData";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
export declare class CustomTraderAssortService {
protected logger: ILogger;
protected databaseServer: DatabaseServer;
private customAssorts;
constructor(logger: ILogger, databaseServer: DatabaseServer);
/**
* Add assorts to a specific trader
*/
add(assortsToAdd: CustomTraderAssortData): void;
get(): CustomTraderAssortData[];
}

View File

@ -0,0 +1,19 @@
import { Preset } from "../models/eft/common/IGlobals";
import { CustomPreset } from "../models/spt/services/CustomPreset";
import { ILogger } from "../models/spt/utils/ILogger";
export declare class CustomPresetService {
protected logger: ILogger;
private customPresets;
constructor(logger: ILogger);
/**
* Add custom preset to internal array
* @param presetKey presets key
* @param presetToAdd preset item to add
*/
add(presetKey: string, presetToAdd: Preset): void;
/**
* Get all custom presets
* @returns
*/
get(): CustomPreset[];
}

View File

@ -1,18 +1,52 @@
import { VFS } from "./VFS";
import { JsonUtil } from "./JsonUtil";
import { DatabaseServer } from "../servers/DatabaseServer";
import { ImageRouter } from "../routers/ImageRouter";
import { OnLoad } from "../di/OnLoad";
import { IDatabaseTables } from "../models/spt/server/IDatabaseTables";
import { ILogger } from "../models/spt/utils/ILogger";
import { ImageRouter } from "../routers/ImageRouter";
import { DatabaseServer } from "../servers/DatabaseServer";
import { CustomHandbookItemService } from "../services/CustomHandbookItemService";
import { CustomItemService } from "../services/CustomItemService";
import { CustomPresetService } from "../services/customPresetService";
import { CustomTraderAssortService } from "../services/CustomTraderAssortService";
import { JsonUtil } from "./JsonUtil";
import { VFS } from "./VFS";
export declare class DatabaseImporter extends OnLoad {
protected logger: ILogger;
protected vfs: VFS;
protected jsonUtil: JsonUtil;
protected databaseServer: DatabaseServer;
protected customItemService: CustomItemService;
protected customTraderAssortService: CustomTraderAssortService;
protected customHandbookItemService: CustomHandbookItemService;
protected customPresetService: CustomPresetService;
protected imageRouter: ImageRouter;
constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, databaseServer: DatabaseServer, imageRouter: ImageRouter);
constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, databaseServer: DatabaseServer, customItemService: CustomItemService, customTraderAssortService: CustomTraderAssortService, customHandbookItemService: CustomHandbookItemService, customPresetService: CustomPresetService, imageRouter: ImageRouter);
onLoad(): void;
/**
* Read all json files in database folder and map into a json object
* @param filepath path to database folder
*/
protected hydrateDatabase(filepath: string): void;
/**
* Get all items added through CustomItemService and add to database.templates.items
* @param dataToImport db data to amend
*/
protected addCustomItemsToDb(dataToImport: IDatabaseTables): void;
/**
* Get all assorts added through CustomTraderAssortService and add to database.traders[x].assort
* @param dataToImport db data to amend
*/
protected addCustomTraderAssortsToDb(dataToImport: IDatabaseTables): void;
/**
* Get all custom handbook items added through CustomHandbookItemService and add to database.templates.handbook.items
* @param dataToImport db data to amend
*/
protected addCustomHandbookItemsToDb(dataToImport: IDatabaseTables): void;
/**
* Get all custom preset items added through CustomPresetService and add to database.globals.ItemPresets
* @param dataToImport
*/
protected addCustomPresetsToDb(dataToImport: IDatabaseTables): void;
getRoute(): string;
loadRecursive(filepath: string): any;
loadRecursive(filepath: string): IDatabaseTables;
loadImages(filepath: string): void;
}

View File

@ -55,7 +55,7 @@ export declare class InitialModLoader implements IModLoader {
protected executeMods(container: DependencyContainer): void;
sortModsLoadOrder(): string[];
protected addMod(mod: string): Promise<void>;
protected areModDependenciesFulfilled(mod: IPackageJsonData, loadedMods: Record<string, IPackageJsonData>): boolean;
protected areModDependenciesFulfilled(pkg: IPackageJsonData, loadedMods: Record<string, IPackageJsonData>): boolean;
protected isModCompatible(mod: IPackageJsonData, loadedMods: Record<string, IPackageJsonData>): boolean;
protected validMod(mod: string): boolean;
protected getLoadOrderRecursive(mod: string, result: Record<string, string>, visited: Record<string, string>): void;

View File

@ -0,0 +1,10 @@
export interface IMatch {
metrics: Metrics;
}
export interface Metrics {
Keys: number[];
NetProcessingBins: number[];
RenderBins: number[];
GameUpdateBins: number[];
MemoryMeasureInterval: number;
}

View File

@ -7,288 +7,234 @@ export interface ITemplateItem {
_proto: string;
}
export interface Props {
Name: string;
ShortName: string;
Description: string;
Weight: number;
BackgroundColor: string;
Width: number;
Height: number;
StackMaxSize: number;
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: Slot[];
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: Xyz;
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: Slot[];
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;
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[];
Unlootable?: boolean;
UnlootableFromSlot?: string;
UnlootableFromSide?: string[];
AnimationVariantsNumber?: number;
DiscardingBlock?: boolean;
RagFairCommissionModifier?: number;
IsAlwaysAvailableForInsurance?: boolean;
DiscardLimit?: number;
MaxResource?: number;
Resource?: number;
DogTagQualities?: boolean;
Grids?: Grid[];
Slots?: Slot[];
CanPutIntoDuringTheRaid?: boolean;
CantRemoveFromSlotsDuringRaid?: string[];
KeyIds?: string[];
TagColor?: number;
TagName?: string;
Durability?: number;
Accuracy?: number;
Recoil?: number;
Loudness?: number;
EffectiveDistance?: number;
Ergonomics?: number;
Velocity?: number;
RaidModdable?: boolean;
ToolModdable?: boolean;
BlocksFolding?: boolean;
BlocksCollapsible?: boolean;
IsAnimated?: boolean;
HasShoulderContact?: boolean;
SightingRange?: number;
DoubleActionAccuracyPenaltyMult?: number;
ModesCount: any;
DurabilityBurnModificator?: number;
HeatFactor?: number;
CoolFactor?: number;
foodUseTime?: number;
foodEffectType?: string;
MaxRepairResource: number;
RepairQuality: number;
RepairType: string;
TargetItemFilter: string[];
apResource: number;
krResource: number;
muzzleModType?: string;
CustomAimPlane?: string;
sightModType?: string;
aimingSensitivity?: number;
SightModesCount?: number;
OpticCalibrationDistances?: number[];
ScopesCount?: number;
AimSensitivity: any;
Zooms?: number[][];
CalibrationDistances?: number[][];
Intensity?: number;
Mask?: string;
MaskSize?: number;
NoiseIntensity?: number;
NoiseScale?: number;
Color?: Color;
DiffuseIntensity?: number;
HasHinge?: boolean;
RampPalette?: string;
DepthFade?: number;
RoughnessCoef?: number;
SpecularCoef?: number;
MainTexColorCoef?: number;
MinimumTemperatureValue?: number;
RampShift?: number;
HeatMin?: number;
ColdMax?: number;
IsNoisy?: boolean;
IsFpsStuck?: boolean;
IsGlitch?: boolean;
IsMotionBlurred?: boolean;
IsPixelated?: boolean;
PixelationBlockCount?: number;
ShiftsAimCamera?: number;
magAnimationIndex?: number;
Cartridges?: Slot[];
CanFast?: boolean;
CanHit?: boolean;
CanAdmin?: boolean;
LoadUnloadModifier?: number;
CheckTimeModifier?: number;
CheckOverride?: number;
ReloadMagType?: string;
VisibleAmmoRangesString?: string;
MalfunctionChance?: number;
IsShoulderContact?: boolean;
Foldable?: boolean;
Retractable?: boolean;
SizeReduceRight?: number;
CenterOfImpact?: number;
ShotgunDispersion?: number;
IsSilencer?: boolean;
DeviationCurve?: number;
DeviationMax?: number;
SearchSound?: string;
BlocksArmorVest?: boolean;
speedPenaltyPercent?: number;
GridLayoutName?: string;
SpawnFilter?: any[];
containType?: any[];
sizeWidth?: number;
sizeHeight?: number;
isSecured?: boolean;
spawnTypes?: string;
lootFilter?: any[];
spawnRarity?: string;
minCountSpawn?: number;
maxCountSpawn?: number;
openedByKeyID?: any[];
RigLayoutName?: string;
MaxDurability?: number;
armorZone?: string[];
armorClass: any;
mousePenalty?: number;
weaponErgonomicPenalty?: number;
BluntThroughput?: number;
ArmorMaterial?: string;
weapClass?: string;
weapUseType?: string;
ammoCaliber?: string;
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;
bEffDist?: number;
bHearDist?: number;
isChamberLoad?: boolean;
chamberAmmoCount?: number;
isBoltCatch?: boolean;
defMagType?: string;
defAmmo?: string;
AdjustCollimatorsToTrajectory?: boolean;
shotgunDispersion?: number;
Chambers?: Slot[];
CameraRecoil?: number;
CameraSnap?: number;
ReloadMode?: string;
AimPlane?: number;
TacticalReloadStiffnes?: Xyz;
TacticalReloadFixation?: number;
RecoilCenter?: Xyz;
RotationCenter?: Xyz;
RotationCenterNoStock?: Xyz;
FoldedSlot?: string;
CompactHandling?: boolean;
MinRepairDegradation?: number;
MaxRepairDegradation?: 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;
MinRepairKitDegradation?: number;
MaxRepairKitDegradation?: number;
BlocksEarpiece?: boolean;
BlocksEyewear?: boolean;
BlocksHeadwear?: boolean;
BlocksFaceCover?: boolean;
Indestructibility?: number;
headSegments?: string[];
FaceShieldComponent?: boolean;
FaceShieldMask?: string;
MaterialType?: string;
RicochetParams?: Xyz;
DeafStrength?: string;
BlindnessProtection?: number;
Distortion?: number;
CompressorTreshold?: number;
CompressorAttack?: number;
@ -299,11 +245,120 @@ export interface Props {
CompressorVolume?: number;
AmbientVolume?: number;
DryVolume?: number;
headSegments?: string[];
FaceShieldComponent?: boolean;
RicochetParams?: Xyz;
DeafStrength?: string;
BlindnessProtection: number;
foodUseTime?: number;
foodEffectType?: string;
StimulatorBuffs?: string;
effects_health: any;
effects_damage: any;
MaximumNumberOfUsage?: number;
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;
AppliedTrunkRotation?: Xyz;
AppliedHeadRotation?: Xyz;
DisplayOnModel?: boolean;
AdditionalAnimationLayer?: number;
StaminaBurnRate?: number;
ColliderScaleMultiplier?: Xyz;
ConfigPathStr?: string;
MaxMarkersCount?: number;
scaleMin?: number;
scaleMax?: number;
medUseTime?: number;
medEffectType?: string;
MaxHpResource?: number;
hpResourceRate?: number;
apResource?: number;
krResource?: number;
MaxOpticZoom?: number;
MaxRepairResource?: number;
TargetItemFilter?: string[];
RepairQuality?: number;
RepairType?: string;
StackMinRandom?: number;
StackMaxRandom?: number;
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?: Xyz;
ArmorDistanceDistanceDamage?: Xyz;
Blindness?: Xyz;
IsLightAndSoundShot?: boolean;
LightAndSoundShotAngle?: number;
LightAndSoundShotSelfContusionTime?: number;
LightAndSoundShotSelfContusionStrength?: number;
MalfMisfireChance?: number;
MalfFeedChance?: number;
StackSlots?: StackSlot[];
type?: string;
eqMin?: number;
eqMax?: number;
rate?: number;
ThrowType?: string;
ExplDelay?: number;
Strength?: number;
ContusionDistance?: number;
throwDamMax?: number;
explDelay?: number;
EmitTime?: number;
CanBeHiddenDuringThrow?: boolean;
MinTimeToContactExplode?: number;
ExplosionEffectType?: string;
}
export interface Prefab {
path: string;

View File

@ -1,6 +1,7 @@
export interface IPackageJsonData {
incompatibilities?: string[];
dependencies?: string[];
modDependencies?: Record<string, string>;
name: string;
author: string;
version: string;

View File

@ -5,6 +5,7 @@ import { IBotType } from "../../eft/common/tables/IBotType";
import { ICustomizationItem } from "../../eft/common/tables/ICustomizationItem";
import { IHandbookBase } from "../../eft/common/tables/IHandbookBase";
import { ILootBase } from "../../eft/common/tables/ILootBase";
import { IMatch } from "../../eft/common/tables/IMatch";
import { IQuest } from "../../eft/common/tables/IQuest";
import { IRepeatableQuestDatabase } from "../../eft/common/tables/IRepeatableQuests";
import { ITemplateItem } from "../../eft/common/tables/ITemplateItem";
@ -18,22 +19,22 @@ import { ILocations } from "./ILocations";
import { IServerBase } from "./IServerBase";
import { ISettingsBase } from "./ISettingsBase";
export interface IDatabaseTables {
bots: {
bots?: {
types: Record<string, IBotType>;
base: IBotBase;
core: IBotCore;
};
hideout: {
hideout?: {
areas: IHideoutArea[];
production: IHideoutProduction[];
scavcase: IHideoutScavCase[];
settings: IHideoutSettingsBase;
};
locales: ILocaleBase;
locations: ILocations;
loot: ILootBase;
match: any;
templates: {
locales?: ILocaleBase;
locations?: ILocations;
loot?: ILootBase;
match?: IMatch;
templates?: {
character: string[];
items: Record<string, ITemplateItem>;
quests: IQuest[];
@ -44,8 +45,8 @@ export interface IDatabaseTables {
profiles: any;
prices: Record<string, number>;
};
traders: Record<string, ITrader>;
globals: IGlobals;
server: IServerBase;
settings: ISettingsBase;
traders?: Record<string, ITrader>;
globals?: IGlobals;
server?: IServerBase;
settings?: ISettingsBase;
}

View File

@ -0,0 +1,5 @@
import { Preset } from "../../eft/common/IGlobals";
export interface CustomPreset {
key: string;
preset: Preset;
}

View File

@ -0,0 +1,6 @@
import { ITraderAssort } from "../../eft/common/tables/ITrader";
import { Traders } from "../../enums/Traders";
export interface CustomTraderAssortData {
traderId: Traders;
assorts: ITraderAssort;
}

View File

@ -0,0 +1,13 @@
import { HandbookItem } from "../models/eft/common/tables/IHandbookBase";
import { ILogger } from "../models/spt/utils/ILogger";
export declare class CustomHandbookItemService {
protected logger: ILogger;
private customHandbookItems;
constructor(logger: ILogger);
/**
* Add handbook item
* @param handbookItem item to add
*/
add(handbookItem: HandbookItem): void;
get(): HandbookItem[];
}

View File

@ -0,0 +1,11 @@
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
export declare class CustomItemService {
protected logger: ILogger;
protected databaseServer: DatabaseServer;
private customItems;
constructor(logger: ILogger, databaseServer: DatabaseServer);
add(itemToAdd: ITemplateItem): void;
get(): ITemplateItem[];
}

View File

@ -0,0 +1,14 @@
import { CustomTraderAssortData } from "../models/spt/services/CustomTraderAssortData";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
export declare class CustomTraderAssortService {
protected logger: ILogger;
protected databaseServer: DatabaseServer;
private customAssorts;
constructor(logger: ILogger, databaseServer: DatabaseServer);
/**
* Add assorts to a specific trader
*/
add(assortsToAdd: CustomTraderAssortData): void;
get(): CustomTraderAssortData[];
}

View File

@ -0,0 +1,19 @@
import { Preset } from "../models/eft/common/IGlobals";
import { CustomPreset } from "../models/spt/services/CustomPreset";
import { ILogger } from "../models/spt/utils/ILogger";
export declare class CustomPresetService {
protected logger: ILogger;
private customPresets;
constructor(logger: ILogger);
/**
* Add custom preset to internal array
* @param presetKey presets key
* @param presetToAdd preset item to add
*/
add(presetKey: string, presetToAdd: Preset): void;
/**
* Get all custom presets
* @returns
*/
get(): CustomPreset[];
}

View File

@ -1,18 +1,52 @@
import { VFS } from "./VFS";
import { JsonUtil } from "./JsonUtil";
import { DatabaseServer } from "../servers/DatabaseServer";
import { ImageRouter } from "../routers/ImageRouter";
import { OnLoad } from "../di/OnLoad";
import { IDatabaseTables } from "../models/spt/server/IDatabaseTables";
import { ILogger } from "../models/spt/utils/ILogger";
import { ImageRouter } from "../routers/ImageRouter";
import { DatabaseServer } from "../servers/DatabaseServer";
import { CustomHandbookItemService } from "../services/CustomHandbookItemService";
import { CustomItemService } from "../services/CustomItemService";
import { CustomPresetService } from "../services/customPresetService";
import { CustomTraderAssortService } from "../services/CustomTraderAssortService";
import { JsonUtil } from "./JsonUtil";
import { VFS } from "./VFS";
export declare class DatabaseImporter extends OnLoad {
protected logger: ILogger;
protected vfs: VFS;
protected jsonUtil: JsonUtil;
protected databaseServer: DatabaseServer;
protected customItemService: CustomItemService;
protected customTraderAssortService: CustomTraderAssortService;
protected customHandbookItemService: CustomHandbookItemService;
protected customPresetService: CustomPresetService;
protected imageRouter: ImageRouter;
constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, databaseServer: DatabaseServer, imageRouter: ImageRouter);
constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, databaseServer: DatabaseServer, customItemService: CustomItemService, customTraderAssortService: CustomTraderAssortService, customHandbookItemService: CustomHandbookItemService, customPresetService: CustomPresetService, imageRouter: ImageRouter);
onLoad(): void;
/**
* Read all json files in database folder and map into a json object
* @param filepath path to database folder
*/
protected hydrateDatabase(filepath: string): void;
/**
* Get all items added through CustomItemService and add to database.templates.items
* @param dataToImport db data to amend
*/
protected addCustomItemsToDb(dataToImport: IDatabaseTables): void;
/**
* Get all assorts added through CustomTraderAssortService and add to database.traders[x].assort
* @param dataToImport db data to amend
*/
protected addCustomTraderAssortsToDb(dataToImport: IDatabaseTables): void;
/**
* Get all custom handbook items added through CustomHandbookItemService and add to database.templates.handbook.items
* @param dataToImport db data to amend
*/
protected addCustomHandbookItemsToDb(dataToImport: IDatabaseTables): void;
/**
* Get all custom preset items added through CustomPresetService and add to database.globals.ItemPresets
* @param dataToImport
*/
protected addCustomPresetsToDb(dataToImport: IDatabaseTables): void;
getRoute(): string;
loadRecursive(filepath: string): any;
loadRecursive(filepath: string): IDatabaseTables;
loadImages(filepath: string): void;
}

View File

@ -5,8 +5,8 @@ import { IBotBase } from "../models/eft/common/tables/IBotBase";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class BotCallbacks {
private botController;
private httpResponse;
protected botController: BotController;
protected httpResponse: HttpResponseUtil;
constructor(botController: BotController, httpResponse: HttpResponseUtil);
getBotLimit(url: string, info: IEmptyRequestData, sessionID: string): string;
getBotDifficulty(url: string, info: IEmptyRequestData, sessionID: string): string;

View File

@ -1,15 +1,16 @@
import { BundleLoader } from "../loaders/BundleLoader";
import { IHttpConfig } from "../models/spt/config/IHttpConfig";
import { IHttpServer } from "../models/spt/server/IHttpServer";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class BundleCallbacks {
private logger;
private httpResponse;
private httpServer;
private bundleLoader;
private configServer;
private httpConfig;
protected logger: ILogger;
protected httpResponse: HttpResponseUtil;
protected httpServer: IHttpServer;
protected bundleLoader: BundleLoader;
protected configServer: ConfigServer;
protected httpConfig: IHttpConfig;
constructor(logger: ILogger, httpResponse: HttpResponseUtil, httpServer: IHttpServer, bundleLoader: BundleLoader, configServer: ConfigServer);
sendBundle(sessionID: string, req: any, resp: any, body: any): any;
getBundles(url: string, info: any, sessionID: string): string;

View File

@ -9,9 +9,9 @@ import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRout
import { SaveServer } from "../servers/SaveServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class CustomizationCallbacks {
private customizationController;
private saveServer;
private httpResponse;
protected customizationController: CustomizationController;
protected saveServer: SaveServer;
protected httpResponse: HttpResponseUtil;
constructor(customizationController: CustomizationController, saveServer: SaveServer, httpResponse: HttpResponseUtil);
getSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<{
_id: string;

View File

@ -12,8 +12,8 @@ import { ISettingsBase } from "../models/spt/server/ISettingsBase";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class DataCallbacks {
private httpResponse;
private databaseServer;
protected httpResponse: HttpResponseUtil;
protected databaseServer: DatabaseServer;
constructor(httpResponse: HttpResponseUtil, databaseServer: DatabaseServer);
getSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ISettingsBase>;
getGlobals(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGlobals>;

View File

@ -21,10 +21,10 @@ import { HashUtil } from "../utils/HashUtil";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class DialogueCallbacks extends OnUpdate {
private hashUtil;
private timeUtil;
private httpResponse;
private dialogueController;
protected hashUtil: HashUtil;
protected timeUtil: TimeUtil;
protected httpResponse: HttpResponseUtil;
protected dialogueController: DialogueController;
constructor(hashUtil: HashUtil, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, dialogueController: DialogueController);
getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetFriendListDataResponse>;
getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<any[]>;

View File

@ -8,9 +8,9 @@ import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { Watermark } from "../utils/Watermark";
declare class GameCallbacks {
private httpResponse;
private watermark;
private gameController;
protected httpResponse: HttpResponseUtil;
protected watermark: Watermark;
protected gameController: GameController;
constructor(httpResponse: HttpResponseUtil, watermark: Watermark, gameController: GameController);
versionValidate(url: string, info: IVersionValidateRequestData, sessionID: string): INullResponseData;
gameStart(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;

View File

@ -1,7 +1,7 @@
import { HandbookController } from "../controllers/HandbookController";
import { OnLoad } from "../di/OnLoad";
export declare class HandbookCallbacks extends OnLoad {
private handbookController;
protected handbookController: HandbookController;
constructor(handbookController: HandbookController);
onLoad(): void;
getRoute(): string;

View File

@ -9,9 +9,9 @@ import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyRespons
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class HealthCallbacks {
private httpResponse;
private profileHelper;
private healthController;
protected httpResponse: HttpResponseUtil;
protected profileHelper: ProfileHelper;
protected healthController: HealthController;
constructor(httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, healthController: HealthController);
syncHealth(url: string, info: ISyncHealthRequestData, sessionID: string): IGetBodyResponseData<string>;
offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): IItemEventRouterResponse;

View File

@ -11,11 +11,12 @@ import { IHideoutToggleAreaRequestData } from "../models/eft/hideout/IHideoutTog
import { IHideoutUpgradeCompleteRequestData } from "../models/eft/hideout/IHideoutUpgradeCompleteRequestData";
import { IHideoutUpgradeRequestData } from "../models/eft/hideout/IHideoutUpgradeRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IHideoutConfig } from "../models/spt/config/IHideoutConfig";
import { ConfigServer } from "../servers/ConfigServer";
export declare class HideoutCallbacks extends OnUpdate {
private hideoutController;
private configServer;
private hideoutConfig;
protected hideoutController: HideoutController;
protected configServer: ConfigServer;
protected hideoutConfig: IHideoutConfig;
constructor(hideoutController: HideoutController, // TODO: delay needed
configServer: ConfigServer);
upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse;

View File

@ -1,7 +1,7 @@
import { OnLoad } from "../di/OnLoad";
import { IHttpServer } from "../models/spt/server/IHttpServer";
export declare class HttpCallbacks extends OnLoad {
private httpServer;
protected httpServer: IHttpServer;
constructor(httpServer: IHttpServer);
onLoad(): void;
getRoute(): string;

View File

@ -3,14 +3,16 @@ import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData";
import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData";
import { IAirdropConfig } from "../models/spt/config/IAirdropConfig";
import { IInRaidConfig } from "../models/spt/config/IInRaidConfig";
import { ConfigServer } from "../servers/ConfigServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class InraidCallbacks {
private inraidController;
private httpResponse;
private configServer;
private airdropConfig;
private inraidConfig;
protected inraidController: InraidController;
protected httpResponse: HttpResponseUtil;
protected configServer: ConfigServer;
protected airdropConfig: IAirdropConfig;
protected inraidConfig: IInRaidConfig;
constructor(inraidController: InraidController, httpResponse: HttpResponseUtil, configServer: ConfigServer);
registerPlayer(url: string, info: IRegisterPlayerRequestData, sessionID: string): INullResponseData;
saveProgress(url: string, info: ISaveProgressRequestData, sessionID: string): INullResponseData;

View File

@ -5,15 +5,16 @@ import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyRespons
import { IGetInsuranceCostRequestData } from "../models/eft/insurance/IGetInsuranceCostRequestData";
import { IInsureRequestData } from "../models/eft/insurance/IInsureRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig";
import { ConfigServer } from "../servers/ConfigServer";
import { InsuranceService } from "../services/InsuranceService";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class InsuranceCallbacks extends OnLoadOnUpdate {
private insuranceController;
private insuranceService;
private httpResponse;
private configServer;
private insuranceConfig;
protected insuranceController: InsuranceController;
protected insuranceService: InsuranceService;
protected httpResponse: HttpResponseUtil;
protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig;
constructor(insuranceController: InsuranceController, insuranceService: InsuranceService, httpResponse: HttpResponseUtil, configServer: ConfigServer);
onLoad(): void;
getInsuranceCost(url: string, info: IGetInsuranceCostRequestData, sessionID: string): IGetBodyResponseData<any>;

View File

@ -18,7 +18,7 @@ import { IInventoryToggleRequestData } from "../models/eft/inventory/IInventoryT
import { IInventoryTransferRequestData } from "../models/eft/inventory/IInventoryTransferRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
export declare class InventoryCallbacks {
private inventoryController;
protected inventoryController: InventoryController;
constructor(inventoryController: InventoryController);
moveItem(pmcData: IPmcData, body: IInventoryMoveRequestData, sessionID: string): IItemEventRouterResponse;
removeItem(pmcData: IPmcData, body: IInventoryRemoveRequestData, sessionID: string): IItemEventRouterResponse;

View File

@ -4,8 +4,8 @@ import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRout
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class ItemEventCallbacks {
private httpResponse;
private itemEventRouter;
protected httpResponse: HttpResponseUtil;
protected itemEventRouter: ItemEventRouter;
constructor(httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter);
handleEvents(url: string, info: IItemEventRouterRequest, sessionID: string): IGetBodyResponseData<IItemEventRouterResponse>;
}

View File

@ -8,10 +8,10 @@ import { SaveServer } from "../servers/SaveServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { Watermark } from "../utils/Watermark";
declare class LauncherCallbacks {
private httpResponse;
private launcherController;
private saveServer;
private watermark;
protected httpResponse: HttpResponseUtil;
protected launcherController: LauncherController;
protected saveServer: SaveServer;
protected watermark: Watermark;
constructor(httpResponse: HttpResponseUtil, launcherController: LauncherController, saveServer: SaveServer, watermark: Watermark);
connect(): string;
login(url: string, info: ILoginRequestData, sessionID: string): string;

View File

@ -6,8 +6,8 @@ import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyRespons
import { IGetLocationRequestData } from "../models/eft/location/IGetLocationRequestData";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class LocationCallbacks {
private httpResponse;
private locationController;
protected httpResponse: HttpResponseUtil;
protected locationController: LocationController;
constructor(httpResponse: HttpResponseUtil, locationController: LocationController);
getLocationData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ILocationsGenerateAllResponse>;
getLocation(url: string, info: IGetLocationRequestData, sessionID: string): IGetBodyResponseData<ILocationBase>;

View File

@ -9,10 +9,10 @@ import { DatabaseServer } from "../servers/DatabaseServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { JsonUtil } from "../utils/JsonUtil";
export declare class MatchCallbacks {
private httpResponse;
private jsonUtil;
private matchController;
private databaseServer;
protected httpResponse: HttpResponseUtil;
protected jsonUtil: JsonUtil;
protected matchController: MatchController;
protected databaseServer: DatabaseServer;
constructor(httpResponse: HttpResponseUtil, jsonUtil: JsonUtil, matchController: MatchController, databaseServer: DatabaseServer);
updatePing(url: string, info: any, sessionID: string): INullResponseData;
exitMatch(url: string, info: any, sessionID: string): INullResponseData;

View File

@ -1,16 +1,17 @@
import { OnLoad } from "../di/OnLoad";
import { DelayedModLoader } from "../loaders/DelayedModLoader";
import { IHttpConfig } from "../models/spt/config/IHttpConfig";
import { IHttpServer } from "../models/spt/server/IHttpServer";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
declare class ModCallbacks extends OnLoad {
private logger;
private httpResponse;
private httpServer;
private modLoader;
private configServer;
private httpConfig;
protected logger: ILogger;
protected httpResponse: HttpResponseUtil;
protected httpServer: IHttpServer;
protected modLoader: DelayedModLoader;
protected configServer: ConfigServer;
protected httpConfig: IHttpConfig;
constructor(logger: ILogger, httpResponse: HttpResponseUtil, httpServer: IHttpServer, modLoader: DelayedModLoader, configServer: ConfigServer);
onLoad(): void;
getRoute(): string;

View File

@ -3,7 +3,7 @@ import { IPmcData } from "../models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { INoteActionData } from "../models/eft/notes/INoteActionData";
export declare class NoteCallbacks {
private noteController;
protected noteController: NoteController;
constructor(noteController: NoteController);
addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;

View File

@ -6,9 +6,9 @@ import { INotifierChannel } from "../models/eft/notifier/INotifier";
import { ISelectProfileRequestData } from "../models/eft/notifier/ISelectProfileRequestData";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class NotifierCallbacks {
private httpServerHelper;
private httpResponse;
private notifierController;
protected httpServerHelper: HttpServerHelper;
protected httpResponse: HttpResponseUtil;
protected notifierController: NotifierController;
constructor(httpServerHelper: HttpServerHelper, httpResponse: HttpResponseUtil, notifierController: NotifierController);
/**
* If we don't have anything to send, it's ok to not send anything back
@ -16,7 +16,7 @@ export declare class NotifierCallbacks {
* until we actually have something to send because otherwise we'd spam the client
* and the client would abort the connection due to spam.
*/
sendNotification(sessionID: string, req: any, resp: any, data: any): void;
sendNotification(_sessionID: string, req: any, resp: any, _data: any): void;
getNotifier(url: string, info: any, sessionID: string): IGetBodyResponseData<any[]>;
createNotifierChannel(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<INotifierChannel>;
selectProfile(url: string, info: ISelectProfileRequestData, sessionID: string): IGetBodyResponseData<any>;

View File

@ -6,8 +6,8 @@ import { IPresetBuildActionRequestData } from "../models/eft/presetBuild/IPreset
import { WeaponBuild } from "../models/eft/profile/IAkiProfile";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class PresetBuildCallbacks {
private httpResponse;
private presetBuildController;
protected httpResponse: HttpResponseUtil;
protected presetBuildController: PresetBuildController;
constructor(httpResponse: HttpResponseUtil, presetBuildController: PresetBuildController);
getHandbookUserlist(url: string, info: any, sessionID: string): IGetBodyResponseData<WeaponBuild[]>;
saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse;

View File

@ -1,7 +1,7 @@
import { PresetController } from "../controllers/PresetController";
import { OnLoad } from "../di/OnLoad";
export declare class PresetCallbacks extends OnLoad {
private presetController;
protected presetController: PresetController;
constructor(presetController: PresetController);
onLoad(): void;
getRoute(): string;

View File

@ -12,9 +12,9 @@ import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNic
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class ProfileCallbacks {
private httpResponse;
private timeUtil;
private profileController;
protected httpResponse: HttpResponseUtil;
protected timeUtil: TimeUtil;
protected profileController: ProfileController;
constructor(httpResponse: HttpResponseUtil, timeUtil: TimeUtil, profileController: ProfileController);
createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData<any>;
getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;

View File

@ -13,9 +13,9 @@ import { IListQuestsRequestData } from "../models/eft/quests/IListQuestsRequestD
import { IRepeatableQuestChangeRequest } from "../models/eft/quests/IRepeatableQuestChangeRequest";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class QuestCallbacks {
private httpResponse;
private questController;
private repeatableQuestController;
protected httpResponse: HttpResponseUtil;
protected questController: QuestController;
protected repeatableQuestController: RepeatableQuestController;
constructor(httpResponse: HttpResponseUtil, questController: QuestController, repeatableQuestController: RepeatableQuestController);
changeRepeatableQuest(pmcData: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse;
acceptQuest(pmcData: IPmcData, body: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;

View File

@ -3,6 +3,7 @@ import { OnLoadOnUpdate } from "../di/OnLoadOnUpdate";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IAddOfferRequestData } from "../models/eft/ragfair/IAddOfferRequestData";
import { IExtendOfferRequestData } from "../models/eft/ragfair/IExtendOfferRequestData";
@ -10,19 +11,20 @@ import { IGetItemPriceResult } from "../models/eft/ragfair/IGetItemPriceResult";
import { IGetMarketPriceRequestData } from "../models/eft/ragfair/IGetMarketPriceRequestData";
import { IRemoveOfferRequestData } from "../models/eft/ragfair/IRemoveOfferRequestData";
import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData";
import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { RagfairServer } from "../servers/RagfairServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { JsonUtil } from "../utils/JsonUtil";
export declare class RagfairCallbacks extends OnLoadOnUpdate {
private httpResponse;
private logger;
private jsonUtil;
private ragfairServer;
private ragfairController;
private configServer;
private ragfairConfig;
protected httpResponse: HttpResponseUtil;
protected logger: ILogger;
protected jsonUtil: JsonUtil;
protected ragfairServer: RagfairServer;
protected ragfairController: RagfairController;
protected configServer: ConfigServer;
protected ragfairConfig: IRagfairConfig;
constructor(httpResponse: HttpResponseUtil, logger: ILogger, jsonUtil: JsonUtil, ragfairServer: RagfairServer, ragfairController: RagfairController, configServer: ConfigServer);
onLoad(): void;
getRoute(): string;
@ -33,4 +35,5 @@ export declare class RagfairCallbacks extends OnLoadOnUpdate {
removeOffer(pmcData: IPmcData, info: IRemoveOfferRequestData, sessionID: string): IItemEventRouterResponse;
extendOffer(pmcData: IPmcData, info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse;
onUpdate(timeSinceLastRun: number): boolean;
sendReport(url: string, info: any, sessionID: string): INullResponseData;
}

View File

@ -4,7 +4,7 @@ import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRout
import { IRepairActionDataRequest } from "../models/eft/repair/IRepairActionDataRequest";
import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepairActionDataRequest";
export declare class RepairCallbacks {
private repairController;
protected repairController: RepairController;
constructor(repairController: RepairController);
traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;

View File

@ -1,7 +1,7 @@
import { OnLoadOnUpdate } from "../di/OnLoadOnUpdate";
import { SaveServer } from "../servers/SaveServer";
export declare class SaveCallbacks extends OnLoadOnUpdate {
private saveServer;
protected saveServer: SaveServer;
constructor(saveServer: SaveServer);
onLoad(): void;
getRoute(): string;

View File

@ -4,7 +4,7 @@ import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRout
import { IProcessBaseTradeRequestData } from "../models/eft/trade/IProcessBaseTradeRequestData";
import { IProcessRagfairTradeRequestData } from "../models/eft/trade/IProcessRagfairTradeRequestData";
export declare class TradeCallbacks {
private tradeController;
protected tradeController: TradeController;
constructor(tradeController: TradeController);
processTrade(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string): IItemEventRouterResponse;
processRagfairTrade(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse;

View File

@ -5,8 +5,8 @@ import { IBarterScheme, ITraderAssort, ITraderBase } from "../models/eft/common/
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class TraderCallbacks extends OnLoadOnUpdate {
private httpResponse;
private traderController;
protected httpResponse: HttpResponseUtil;
protected traderController: TraderController;
constructor(httpResponse: HttpResponseUtil, traderController: TraderController);
onLoad(): void;
getRoute(): string;

View File

@ -3,8 +3,8 @@ import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class WeatherCallbacks {
private httpResponse;
private weatherController;
protected httpResponse: HttpResponseUtil;
protected weatherController: WeatherController;
constructor(httpResponse: HttpResponseUtil, weatherController: WeatherController);
getWeather(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
}

View File

@ -3,7 +3,7 @@ import { IPmcData } from "../models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IWishlistActionData } from "../models/eft/wishlist/IWishlistActionData";
export declare class WishlistCallbacks {
private wishlistController;
protected wishlistController: WishlistController;
constructor(wishlistController: WishlistController);
addToWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;
removeFromWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;

View File

@ -4,17 +4,32 @@ import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequest
import { IBotBase } from "../models/eft/common/tables/IBotBase";
import { IBotCore } from "../models/eft/common/tables/IBotCore";
import { Difficulty } from "../models/eft/common/tables/IBotType";
import { IBotConfig } from "../models/spt/config/IBotConfig";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
export declare class BotController {
private databaseServer;
private botGenerator;
private botHelper;
private configServer;
private botConfig;
protected databaseServer: DatabaseServer;
protected botGenerator: BotGenerator;
protected botHelper: BotHelper;
protected configServer: ConfigServer;
protected botConfig: IBotConfig;
constructor(databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, configServer: ConfigServer);
getBotLimit(type: string): number;
getBotDifficulty(type: string, difficulty: string): IBotCore | Difficulty;
/**
* Return the number of bot loadout varieties to be generated
* @param type bot Type we want the loadout gen count for
* @returns
*/
getBotPresetGenerationLimit(type: string): number;
getBotCoreDifficulty(): IBotCore;
/**
* Get bot difficulty settings
* adjust PMC settings to ensure they engage the correct bot types
* @param type what bot the server is requesting settings for
* @param difficulty difficulty level server requested settings for
* @returns Difficulty object
*/
getBotDifficulty(type: string, difficulty: string): Difficulty;
protected getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string): Difficulty;
generate(info: IGenerateBotsRequestData, playerScav?: boolean): IBotBase[];
getBotCap(): number;
}

View File

@ -9,14 +9,14 @@ import { ItemEventRouter } from "../routers/ItemEventRouter";
import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
export declare class CustomizationController {
private logger;
private itemEventRouter;
private databaseServer;
private saveServer;
private profileHelper;
protected logger: ILogger;
protected itemEventRouter: ItemEventRouter;
protected databaseServer: DatabaseServer;
protected saveServer: SaveServer;
protected profileHelper: ProfileHelper;
constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper);
getTraderSuits(traderID: string, sessionID: string): ISuit[];
wearClothing(pmcData: IPmcData, body: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse;
buyClothing(pmcData: IPmcData, body: IBuyClothingRequestData, sessionID: string): IItemEventRouterResponse;
private getAllTraderSuits;
protected getAllTraderSuits(sessionID: string): ISuit[];
}

View File

@ -3,13 +3,13 @@ import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachme
import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListDataResponse";
import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { DialogueInfo } from "../models/eft/profile/IAkiProfile";
import { DialogueInfo, Message } from "../models/eft/profile/IAkiProfile";
import { SaveServer } from "../servers/SaveServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class DialogueController {
private httpResponse;
private saveServer;
private dialogueHelper;
protected httpResponse: HttpResponseUtil;
protected saveServer: SaveServer;
protected dialogueHelper: DialogueHelper;
constructor(httpResponse: HttpResponseUtil, saveServer: SaveServer, dialogueHelper: DialogueHelper);
getFriendList(sessionID: string): IGetFriendListDataResponse;
generateDialogueList(sessionID: string): IGetBodyResponseData<DialogueInfo[]>;
@ -19,7 +19,7 @@ export declare class DialogueController {
setDialoguePin(dialogueID: string, shouldPin: boolean, sessionID: string): void;
setRead(dialogueIDs: string[], sessionID: string): void;
getAllAttachments(dialogueID: string, sessionID: string): IGetAllAttachmentsResponse;
private messagesHaveUncollectedRewards;
private removeExpiredItems;
protected messagesHaveUncollectedRewards(messages: Message[]): boolean;
protected removeExpiredItems(sessionID: string): void;
update(): void;
}

View File

@ -1,28 +1,33 @@
import { GameHelper } from "../helpers/GameHelper";
import { HttpServerHelper } from "../helpers/HttpServerHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IPmcDataRepeatableQuest, IRepeatableQuest } from "../models/eft/common/tables/IRepeatableQuests";
import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse";
import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
import { IHttpConfig } from "../models/spt/config/IHttpConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { Watermark } from "../utils/Watermark";
export declare class GameController {
private logger;
private watermark;
private httpServerHelper;
private profileHelper;
private configServer;
private httpConfig;
constructor(logger: ILogger, watermark: Watermark, httpServerHelper: HttpServerHelper, profileHelper: ProfileHelper, configServer: ConfigServer);
protected logger: ILogger;
protected watermark: Watermark;
protected httpServerHelper: HttpServerHelper;
protected profileHelper: ProfileHelper;
protected gameHelper: GameHelper;
protected configServer: ConfigServer;
protected httpConfig: IHttpConfig;
constructor(logger: ILogger, watermark: Watermark, httpServerHelper: HttpServerHelper, profileHelper: ProfileHelper, gameHelper: GameHelper, configServer: ConfigServer);
gameStart(_url: string, _info: IEmptyRequestData, sessionID: string): void;
private addMissingBonusesProperty;
private addMissingRepeatableQuestsProperty;
private addMissingWeaponRepairSkill;
private addMissingAkiVersionTagToProfile;
private addMissingArmorRepairSkill;
private fixNullTraderSalesSums;
private removeDanglingConditionCounters;
private removeDanglingBackendCounters;
protected addMissingBonusesProperty(pmcProfile: IPmcData): void;
protected addMissingRepeatableQuestsProperty(pmcProfile: IPmcData): void;
protected addMissingWeaponRepairSkill(pmcProfile: IPmcData): void;
protected addMissingAkiVersionTagToProfile(fullProfile: IAkiProfile): void;
protected addMissingArmorRepairSkill(pmcProfile: IPmcData): void;
protected fixNullTraderSalesSums(pmcProfile: IPmcData): void;
protected removeDanglingBackendCounters(pmcProfile: IPmcData): void;
getGameConfig(sessionID: string): IGameConfigResponse;
getServer(): any[];
private getActiveRepeatableQuests;
protected getActiveRepeatableQuests(repeatableQuests: IPmcDataRepeatableQuest[]): IRepeatableQuest[];
}

View File

@ -1,8 +1,8 @@
import { HandbookHelper } from "../helpers/HandbookHelper";
import { DatabaseServer } from "../servers/DatabaseServer";
export declare class HandbookController {
private databaseServer;
private handbookHelper;
protected databaseServer: DatabaseServer;
protected handbookHelper: HandbookHelper;
constructor(databaseServer: DatabaseServer, handbookHelper: HandbookHelper);
load(): void;
}

View File

@ -11,12 +11,12 @@ import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRout
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ILogger } from "../models/spt/utils/ILogger";
export declare class HealthController {
private logger;
private itemEventRouter;
private itemHelper;
private paymentService;
private inventoryHelper;
private healthHelper;
protected logger: ILogger;
protected itemEventRouter: ItemEventRouter;
protected itemHelper: ItemHelper;
protected paymentService: PaymentService;
protected inventoryHelper: InventoryHelper;
protected healthHelper: HealthHelper;
constructor(logger: ILogger, itemEventRouter: ItemEventRouter, itemHelper: ItemHelper, paymentService: PaymentService, inventoryHelper: InventoryHelper, healthHelper: HealthHelper);
saveVitality(pmcData: IPmcData, info: ISyncHealthRequestData, sessionID: string): void;
offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): IItemEventRouterResponse;

View File

@ -3,10 +3,12 @@ import { InventoryHelper } from "../helpers/InventoryHelper";
import { PaymentHelper } from "../helpers/PaymentHelper";
import { PresetHelper } from "../helpers/PresetHelper";
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 { IHideoutContinousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinousProductionStartRequestData";
import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction";
import { IHideoutPutItemInRequestData } from "../models/eft/hideout/IHideoutPutItemInRequestData";
import { IHideoutScavCase } from "../models/eft/hideout/IHideoutScavCase";
import { IHideoutScavCaseStartRequestData } from "../models/eft/hideout/IHideoutScavCaseStartRequestData";
import { IHideoutSingleProductionStartRequestData } from "../models/eft/hideout/IHideoutSingleProductionStartRequestData";
import { IHideoutTakeItemOutRequestData } from "../models/eft/hideout/IHideoutTakeItemOutRequestData";
@ -14,6 +16,7 @@ import { IHideoutTakeProductionRequestData } from "../models/eft/hideout/IHideou
import { IHideoutToggleAreaRequestData } from "../models/eft/hideout/IHideoutToggleAreaRequestData";
import { IHideoutUpgradeRequestData } from "../models/eft/hideout/IHideoutUpgradeRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IHideoutConfig } from "../models/spt/config/IHideoutConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ConfigServer } from "../servers/ConfigServer";
@ -25,32 +28,41 @@ import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class HideoutController {
private logger;
private hashUtil;
private timeUtil;
private databaseServer;
private randomUtil;
private inventoryHelper;
private saveServer;
private playerService;
private presetHelper;
private paymentHelper;
private itemEventRouter;
private httpResponse;
private profileHelper;
private hideoutHelper;
private configServer;
private hideoutConfig;
protected logger: ILogger;
protected hashUtil: HashUtil;
protected timeUtil: TimeUtil;
protected databaseServer: DatabaseServer;
protected randomUtil: RandomUtil;
protected inventoryHelper: InventoryHelper;
protected saveServer: SaveServer;
protected playerService: PlayerService;
protected presetHelper: PresetHelper;
protected paymentHelper: PaymentHelper;
protected itemEventRouter: ItemEventRouter;
protected httpResponse: HttpResponseUtil;
protected profileHelper: ProfileHelper;
protected hideoutHelper: HideoutHelper;
protected configServer: ConfigServer;
protected hideoutConfig: IHideoutConfig;
constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, itemEventRouter: ItemEventRouter, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, configServer: ConfigServer);
upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse;
upgradeComplete(pmcData: IPmcData, body: HideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse;
putItemsInAreaSlots(pmcData: IPmcData, body: IHideoutPutItemInRequestData, 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;
singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, 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;
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;
update(): void;
}

View File

@ -6,24 +6,25 @@ import { QuestHelper } from "../helpers/QuestHelper";
import { TraderHelper } from "../helpers/TraderHelper";
import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData";
import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData";
import { IInRaidConfig } from "../models/spt/config/IInRaidConfig";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
import { InsuranceService } from "../services/InsuranceService";
import { JsonUtil } from "../utils/JsonUtil";
export declare class InraidController {
private saveServer;
private jsonUtil;
private databaseServer;
private questHelper;
private itemHelper;
private extendedProfileHelper;
private healthHelper;
private traderHelper;
private insuranceService;
private inRaidHelper;
private configServer;
private inraidConfig;
protected saveServer: SaveServer;
protected jsonUtil: JsonUtil;
protected databaseServer: DatabaseServer;
protected questHelper: QuestHelper;
protected itemHelper: ItemHelper;
protected extendedProfileHelper: ExtendedProfileHelper;
protected healthHelper: HealthHelper;
protected traderHelper: TraderHelper;
protected insuranceService: InsuranceService;
protected inRaidHelper: InRaidHelper;
protected configServer: ConfigServer;
protected inraidConfig: IInRaidConfig;
constructor(saveServer: SaveServer, jsonUtil: JsonUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, extendedProfileHelper: ExtendedProfileHelper, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, configServer: ConfigServer);
addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void;
saveProgress(offraidData: ISaveProgressRequestData, sessionID: string): void;

View File

@ -5,6 +5,7 @@ import { IPmcData } from "../models/eft/common/IPmcData";
import { IGetInsuranceCostRequestData } from "../models/eft/insurance/IGetInsuranceCostRequestData";
import { IInsureRequestData } from "../models/eft/insurance/IInsureRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ConfigServer } from "../servers/ConfigServer";
@ -15,19 +16,19 @@ import { PaymentService } from "../services/PaymentService";
import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class InsuranceController {
private logger;
private randomUtil;
private itemEventRouter;
private timeUtil;
private saveServer;
private databaseServer;
private itemHelper;
private profileHelper;
private dialogueHelper;
private paymentService;
private insuranceService;
private configServer;
private insuranceConfig;
protected logger: ILogger;
protected randomUtil: RandomUtil;
protected itemEventRouter: ItemEventRouter;
protected timeUtil: TimeUtil;
protected saveServer: SaveServer;
protected databaseServer: DatabaseServer;
protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper;
protected dialogueHelper: DialogueHelper;
protected paymentService: PaymentService;
protected insuranceService: InsuranceService;
protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig;
constructor(logger: ILogger, randomUtil: RandomUtil, itemEventRouter: ItemEventRouter, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, paymentService: PaymentService, // TODO: delay required
insuranceService: InsuranceService, configServer: ConfigServer);
processReturn(): void;

View File

@ -27,15 +27,15 @@ import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
export declare class InventoryController {
private logger;
private hashUtil;
private jsonUtil;
private databaseServer;
private presetHelper;
private inventoryHelper;
private profileHelper;
private paymentHelper;
private itemEventRouter;
protected logger: ILogger;
protected hashUtil: HashUtil;
protected jsonUtil: JsonUtil;
protected databaseServer: DatabaseServer;
protected presetHelper: PresetHelper;
protected inventoryHelper: InventoryHelper;
protected profileHelper: ProfileHelper;
protected paymentHelper: PaymentHelper;
protected itemEventRouter: ItemEventRouter;
constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, presetHelper: PresetHelper, inventoryHelper: InventoryHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, itemEventRouter: ItemEventRouter);
/**
* Move Item

View File

@ -3,23 +3,24 @@ import { IChangeRequestData } from "../models/eft/launcher/IChangeRequestData";
import { ILoginRequestData } from "../models/eft/launcher/ILoginRequestData";
import { IRegisterData } from "../models/eft/launcher/IRegisterData";
import { Info } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
import { HashUtil } from "../utils/HashUtil";
export declare class LauncherController {
private hashUtil;
private saveServer;
private httpServerHelper;
private databaseServer;
private configServer;
private coreConfig;
protected hashUtil: HashUtil;
protected saveServer: SaveServer;
protected httpServerHelper: HttpServerHelper;
protected databaseServer: DatabaseServer;
protected configServer: ConfigServer;
protected coreConfig: ICoreConfig;
constructor(hashUtil: HashUtil, saveServer: SaveServer, httpServerHelper: HttpServerHelper, databaseServer: DatabaseServer, configServer: ConfigServer);
connect(): any;
find(sessionIdKey: string): Info;
login(info: ILoginRequestData): string;
register(info: IRegisterData): string;
private createAccount;
protected createAccount(info: IRegisterData): string;
changeUsername(info: IChangeRequestData): string;
changePassword(info: IChangeRequestData): string;
wipe(info: IRegisterData): string;

View File

@ -6,11 +6,11 @@ import { DatabaseServer } from "../servers/DatabaseServer";
import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class LocationController {
private jsonUtil;
private logger;
private locationGenerator;
private databaseServer;
private timeUtil;
protected jsonUtil: JsonUtil;
protected logger: ILogger;
protected locationGenerator: LocationGenerator;
protected databaseServer: DatabaseServer;
protected timeUtil: TimeUtil;
constructor(jsonUtil: JsonUtil, logger: ILogger, locationGenerator: LocationGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil);
get(location: string): ILocationBase;
generate(name: string): ILocationBase;

View File

@ -4,21 +4,23 @@ import { IPmcData } from "../models/eft/common/IPmcData";
import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData";
import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestData";
import { IStartOfflineRaidRequestData } from "../models/eft/match/IStartOffineRaidRequestData";
import { IInRaidConfig } from "../models/spt/config/IInRaidConfig";
import { IMatchConfig } from "../models/spt/config/IMatchConfig";
import { ConfigServer } from "../servers/ConfigServer";
import { SaveServer } from "../servers/SaveServer";
import { MatchLocationService } from "../services/MatchLocationService";
export declare class MatchController {
private saveServer;
private profileHelper;
private matchLocationService;
private traderHelper;
private configServer;
private matchConfig;
private inraidConfig;
protected saveServer: SaveServer;
protected profileHelper: ProfileHelper;
protected matchLocationService: MatchLocationService;
protected traderHelper: TraderHelper;
protected configServer: ConfigServer;
protected matchConfig: IMatchConfig;
protected inraidConfig: IInRaidConfig;
constructor(saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, configServer: ConfigServer);
getEnabled(): boolean;
getProfile(info: IGetProfileRequestData): IPmcData[];
private getMatch;
protected getMatch(location: any): any;
createGroup(sessionID: string, info: any): any;
deleteGroup(info: any): void;
joinMatch(info: any, sessionID: string): any[];

View File

@ -3,7 +3,7 @@ import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRout
import { INoteActionData } from "../models/eft/notes/INoteActionData";
import { ItemEventRouter } from "../routers/ItemEventRouter";
declare class NoteController {
private itemEventRouter;
protected itemEventRouter: ItemEventRouter;
constructor(itemEventRouter: ItemEventRouter);
addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;

View File

@ -3,11 +3,11 @@ import { NotificationService } from "../services/NotificationService";
import { INotifierChannel } from "../models/eft/notifier/INotifier";
import { HttpServerHelper } from "../helpers/HttpServerHelper";
export declare class NotifierController {
private notifierHelper;
private httpServerHelper;
private notificationService;
private pollInterval;
private timeout;
protected notifierHelper: NotifierHelper;
protected httpServerHelper: HttpServerHelper;
protected notificationService: NotificationService;
protected pollInterval: number;
protected timeout: number;
constructor(notifierHelper: NotifierHelper, httpServerHelper: HttpServerHelper, notificationService: NotificationService);
/**
* Resolve an array of session notifications.

View File

@ -7,10 +7,10 @@ import { ItemEventRouter } from "../routers/ItemEventRouter";
import { SaveServer } from "../servers/SaveServer";
import { HashUtil } from "../utils/HashUtil";
export declare class PresetBuildController {
private hashUtil;
private itemEventRouter;
private itemHelper;
private saveServer;
protected hashUtil: HashUtil;
protected itemEventRouter: ItemEventRouter;
protected itemHelper: ItemHelper;
protected saveServer: SaveServer;
constructor(hashUtil: HashUtil, itemEventRouter: ItemEventRouter, itemHelper: ItemHelper, saveServer: SaveServer);
getUserBuilds(sessionID: string): WeaponBuild[];
saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse;

View File

@ -1,8 +1,8 @@
import { PresetHelper } from "../helpers/PresetHelper";
import { DatabaseServer } from "../servers/DatabaseServer";
export declare class PresetController {
private presetHelper;
private databaseServer;
protected presetHelper: PresetHelper;
protected databaseServer: DatabaseServer;
constructor(presetHelper: PresetHelper, databaseServer: DatabaseServer);
initialize(): void;
}

View File

@ -14,13 +14,13 @@ import { SaveServer } from "../servers/SaveServer";
import { HashUtil } from "../utils/HashUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class ProfileController {
private hashUtil;
private timeUtil;
private saveServer;
private databaseServer;
private itemHelper;
private traderHelper;
private extendedProfileHelper;
protected hashUtil: HashUtil;
protected timeUtil: TimeUtil;
protected saveServer: SaveServer;
protected databaseServer: DatabaseServer;
protected itemHelper: ItemHelper;
protected traderHelper: TraderHelper;
protected extendedProfileHelper: ExtendedProfileHelper;
constructor(hashUtil: HashUtil, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, traderHelper: TraderHelper, extendedProfileHelper: ExtendedProfileHelper);
getMiniProfiles(): IMiniProfile[];
getMiniProfile(sessionID: string): any;

View File

@ -4,11 +4,12 @@ import { ProfileHelper } from "../helpers/ProfileHelper";
import { QuestConditionHelper } from "../helpers/QuestConditionHelper";
import { QuestHelper } from "../helpers/QuestHelper";
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 { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData";
import { ICompleteQuestRequestData } from "../models/eft/quests/ICompleteQuestRequestData";
import { IHandoverQuestRequestData } from "../models/eft/quests/IHandoverQuestRequestData";
import { IQuestConfig } from "../models/spt/config/IQuestConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ConfigServer } from "../servers/ConfigServer";
@ -16,22 +17,58 @@ import { DatabaseServer } from "../servers/DatabaseServer";
import { PlayerService } from "../services/PlayerService";
import { TimeUtil } from "../utils/TimeUtil";
export declare class QuestController {
private logger;
private timeUtil;
private itemEventRouter;
private databaseServer;
private itemHelper;
private dialogueHelper;
private profileHelper;
private questHelper;
private questConditionHelper;
private playerService;
private configServer;
private questConfig;
protected logger: ILogger;
protected timeUtil: TimeUtil;
protected itemEventRouter: ItemEventRouter;
protected databaseServer: DatabaseServer;
protected itemHelper: ItemHelper;
protected dialogueHelper: DialogueHelper;
protected profileHelper: ProfileHelper;
protected questHelper: QuestHelper;
protected questConditionHelper: QuestConditionHelper;
protected playerService: PlayerService;
protected configServer: ConfigServer;
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);
/**
* 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[];
acceptQuest(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;
/**
* 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;
}

View File

@ -20,6 +20,7 @@ import { IGetMarketPriceRequestData } from "../models/eft/ragfair/IGetMarketPric
import { IGetOffersResult } from "../models/eft/ragfair/IGetOffersResult";
import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer";
import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData";
import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ConfigServer } from "../servers/ConfigServer";
@ -33,30 +34,30 @@ import { RagfairRequiredItemsService } from "../services/RagfairRequiredItemsSer
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class RagfairController {
private logger;
private timeUtil;
private httpResponse;
private itemEventRouter;
private ragfairServer;
private ragfairPriceService;
private databaseServer;
private itemHelper;
private saveServer;
private ragfairSellHelper;
private ragfairTaxHelper;
private ragfairSortHelper;
private ragfairOfferHelper;
private profileHelper;
private paymentService;
private handbookHelper;
private paymentHelper;
private inventoryHelper;
private ragfairHelper;
private ragfairOfferService;
private ragfairRequiredItemsService;
private ragfairOfferGenerator;
private configServer;
private ragfairConfig;
protected logger: ILogger;
protected timeUtil: TimeUtil;
protected httpResponse: HttpResponseUtil;
protected itemEventRouter: ItemEventRouter;
protected ragfairServer: RagfairServer;
protected ragfairPriceService: RagfairPriceService;
protected databaseServer: DatabaseServer;
protected itemHelper: ItemHelper;
protected saveServer: SaveServer;
protected ragfairSellHelper: RagfairSellHelper;
protected ragfairTaxHelper: RagfairTaxHelper;
protected ragfairSortHelper: RagfairSortHelper;
protected ragfairOfferHelper: RagfairOfferHelper;
protected profileHelper: ProfileHelper;
protected paymentService: PaymentService;
protected handbookHelper: HandbookHelper;
protected paymentHelper: PaymentHelper;
protected inventoryHelper: InventoryHelper;
protected ragfairHelper: RagfairHelper;
protected ragfairOfferService: RagfairOfferService;
protected ragfairRequiredItemsService: RagfairRequiredItemsService;
protected ragfairOfferGenerator: RagfairOfferGenerator;
protected configServer: ConfigServer;
protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter, ragfairServer: RagfairServer, ragfairPriceService: RagfairPriceService, databaseServer: DatabaseServer, itemHelper: ItemHelper, saveServer: SaveServer, ragfairSellHelper: RagfairSellHelper, ragfairTaxHelper: RagfairTaxHelper, ragfairSortHelper: RagfairSortHelper, ragfairOfferHelper: RagfairOfferHelper, profileHelper: ProfileHelper, paymentService: PaymentService, handbookHelper: HandbookHelper, paymentHelper: PaymentHelper, inventoryHelper: InventoryHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, ragfairRequiredItemsService: RagfairRequiredItemsService, ragfairOfferGenerator: RagfairOfferGenerator, configServer: ConfigServer);
getOffers(sessionID: string, info: ISearchRequestData): IGetOffersResult;
update(): void;

View File

@ -5,21 +5,23 @@ import { IPmcData } from "../models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IRepairActionDataRequest } from "../models/eft/repair/IRepairActionDataRequest";
import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepairActionDataRequest";
import { IRepairConfig } from "../models/spt/config/IRepairConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { PaymentService } from "../services/PaymentService";
export declare class RepairController {
private logger;
private itemEventRouter;
private databaseServer;
private questHelper;
private traderHelper;
private paymentService;
private repairHelper;
private configServer;
private repairConfig;
protected logger: ILogger;
protected itemEventRouter: ItemEventRouter;
protected databaseServer: DatabaseServer;
protected questHelper: QuestHelper;
protected traderHelper: TraderHelper;
protected paymentService: PaymentService;
protected repairHelper: RepairHelper;
protected configServer: ConfigServer;
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);
/**
* Repair with trader
@ -36,5 +38,5 @@ export declare class RepairController {
* @param sessionID session id
* @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 { PresetHelper } from "../helpers/PresetHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
@ -9,7 +10,7 @@ import { ICompletion, ICompletionAvailableFor, IElimination, IEliminationConditi
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IRepeatableQuestChangeRequest } from "../models/eft/quests/IRepeatableQuestChangeRequest";
import { ELocationName } from "../models/enums/ELocationName";
import { IRepeatableQuestConfig } from "../models/spt/config/IQuestConfig";
import { IQuestConfig, IRepeatableQuestConfig } from "../models/spt/config/IQuestConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ConfigServer } from "../servers/ConfigServer";
@ -48,22 +49,23 @@ export interface ITargetLocation {
locations: string[];
}
export declare class RepeatableQuestController {
private timeUtil;
private logger;
private randomUtil;
private mathUtil;
private jsonUtil;
private databaseServer;
private itemHelper;
private presetHelper;
private profileHelper;
private ragfairServerHelper;
private itemEventRouter;
private paymentService;
private objectId;
private configServer;
private questConfig;
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);
protected timeUtil: TimeUtil;
protected logger: ILogger;
protected randomUtil: RandomUtil;
protected mathUtil: MathUtil;
protected jsonUtil: JsonUtil;
protected databaseServer: DatabaseServer;
protected itemHelper: ItemHelper;
protected presetHelper: PresetHelper;
protected profileHelper: ProfileHelper;
protected gameHelper: GameHelper;
protected ragfairServerHelper: RagfairServerHelper;
protected itemEventRouter: ItemEventRouter;
protected paymentService: PaymentService;
protected objectId: ObjectId;
protected configServer: ConfigServer;
protected questConfig: IQuestConfig;
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
* Returns an array of objects in the format of repeatable quests to the client.

View File

@ -9,11 +9,11 @@ import { IProcessBaseTradeRequestData } from "../models/eft/trade/IProcessBaseTr
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ILogger } from "../models/spt/utils/ILogger";
declare class TradeController {
private logger;
private itemEventRouter;
private tradeHelper;
private profileHelper;
private ragfairServer;
protected logger: ILogger;
protected itemEventRouter: ItemEventRouter;
protected tradeHelper: TradeHelper;
protected profileHelper: ProfileHelper;
protected ragfairServer: RagfairServer;
constructor(logger: ILogger, itemEventRouter: ItemEventRouter, tradeHelper: TradeHelper, profileHelper: ProfileHelper, ragfairServer: RagfairServer);
confirmTrading(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string, foundInRaid?: boolean, upd?: Upd): IItemEventRouterResponse;
confirmRagfairTrading(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse;

View File

@ -8,14 +8,14 @@ import { TraderAssortService } from "../services/TraderAssortService";
import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class TraderController {
private logger;
private databaseServer;
private traderAssortHelper;
private profileHelper;
private traderHelper;
private timeUtil;
private traderAssortService;
private jsonUtil;
protected logger: ILogger;
protected databaseServer: DatabaseServer;
protected traderAssortHelper: TraderAssortHelper;
protected profileHelper: ProfileHelper;
protected traderHelper: TraderHelper;
protected timeUtil: TimeUtil;
protected traderAssortService: TraderAssortService;
protected jsonUtil: JsonUtil;
constructor(logger: ILogger, databaseServer: DatabaseServer, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, timeUtil: TimeUtil, traderAssortService: TraderAssortService, jsonUtil: JsonUtil);
load(): void;
getTrader(traderID: string, sessionID: string): ITraderBase;

View File

@ -1,10 +1,11 @@
import { WeatherGenerator } from "../generators/WeatherGenerator";
import { IWeatherData } from "../models/eft/weather/IWeatherData";
import { IWeatherConfig } from "../models/spt/config/IWeatherConfig";
import { ConfigServer } from "../servers/ConfigServer";
export declare class WeatherController {
private weatherGenerator;
private configServer;
private weatherConfig;
protected weatherGenerator: WeatherGenerator;
protected configServer: ConfigServer;
protected weatherConfig: IWeatherConfig;
constructor(weatherGenerator: WeatherGenerator, configServer: ConfigServer);
generate(): IWeatherData;
}

View File

@ -3,7 +3,7 @@ import { IPmcData } from "../models/eft/common/IPmcData";
import { IWishlistActionData } from "../models/eft/wishlist/IWishlistActionData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
export declare class WishlistController {
private itemEvenRouter;
protected itemEvenRouter: ItemEventRouter;
constructor(itemEvenRouter: ItemEventRouter);
addToWishList(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;
removeFromWishList(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;

View File

@ -1,7 +1,10 @@
import { BotHelper } from "../helpers/BotHelper";
import { GameEventHelper } from "../helpers/GameEventHelper";
import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData";
import { Health as PmcHealth } from "../models/eft/common/IPmcData";
import { IBotBase } from "../models/eft/common/tables/IBotBase";
import { Health, Inventory, Skills } from "../models/eft/common/tables/IBotType";
import { IBotConfig } from "../models/spt/config/IBotConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
@ -9,28 +12,35 @@ import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil";
import { BotInventoryGenerator } from "./BotInventoryGenerator";
declare namespace BotGenerator {
interface IRandomisedBotLevelResult {
level: number;
exp: number;
}
}
export declare class BotGenerator {
private logger;
private hashUtil;
private randomUtil;
private jsonUtil;
private databaseServer;
private botInventoryGenerator;
private botHelper;
private gameEventHelper;
private configServer;
private botConfig;
protected logger: ILogger;
protected hashUtil: HashUtil;
protected randomUtil: RandomUtil;
protected jsonUtil: JsonUtil;
protected databaseServer: DatabaseServer;
protected botInventoryGenerator: BotInventoryGenerator;
protected botHelper: BotHelper;
protected gameEventHelper: GameEventHelper;
protected configServer: ConfigServer;
protected botConfig: IBotConfig;
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botHelper: BotHelper, gameEventHelper: GameEventHelper, configServer: ConfigServer);
generate(info: IGenerateBotsRequestData, playerScav?: boolean): IBotBase[];
private generateBot;
private generateRandomLevel;
protected generateBot(bot: IBotBase, role: string, isPmc: boolean): IBotBase;
protected generateRandomLevel(min: number, max: number): BotGenerator.IRandomisedBotLevelResult;
/** Converts health object to the required format */
private generateHealth;
private generateSkills;
private getPmcRole;
private removeChristmasItemsFromBotInventory;
private generateId;
private generateInventoryID;
private getPMCDifficulty;
private generateDogtag;
protected generateHealth(healthObj: Health, playerScav?: boolean): PmcHealth;
protected generateSkills(skillsObj: Skills): Skills;
protected getPmcRole(pmcSide: string): string;
protected removeChristmasItemsFromBotInventory(nodeInventory: Inventory): void;
protected generateId(bot: IBotBase): IBotBase;
protected generateInventoryID(profile: IBotBase): IBotBase;
protected getPMCDifficulty(requestedDifficulty: string): string;
protected generateDogtag(bot: IBotBase): IBotBase;
}
export {};

View File

@ -1,5 +1,5 @@
import { Inventory as PmcInventory } from "../models/eft/common/IPmcData";
import { Inventory, Chances, Generation } from "../models/eft/common/tables/IBotType";
import { Inventory, Chances, Generation, Mods } from "../models/eft/common/tables/IBotType";
import { HashUtil } from "../utils/HashUtil";
import { RandomUtil } from "../utils/RandomUtil";
import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper";
@ -9,16 +9,16 @@ import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
export declare class BotInventoryGenerator {
private logger;
private hashUtil;
private randomUtil;
private databaseServer;
private botWeaponGenerator;
private botLootGenerator;
private botGeneratorHelper;
private weightedRandomHelper;
protected logger: ILogger;
protected hashUtil: HashUtil;
protected randomUtil: RandomUtil;
protected databaseServer: DatabaseServer;
protected botWeaponGenerator: BotWeaponGenerator;
protected botLootGenerator: BotLootGenerator;
protected botGeneratorHelper: BotGeneratorHelper;
protected weightedRandomHelper: WeightedRandomHelper;
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, weightedRandomHelper: WeightedRandomHelper);
generateInventory(templateInventory: Inventory, equipmentChances: Chances, generation: Generation, botRole: string, isPmc: boolean): PmcInventory;
private generateEquipment;
private generateInventoryBase;
protected generateEquipment(equipmentSlot: string, equipmentPool: Record<string, number>, modPool: Mods, spawnChances: Chances, botRole: string, inventory: PmcInventory): void;
protected generateInventoryBase(): PmcInventory;
}

View File

@ -3,25 +3,27 @@ import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper";
import { HandbookHelper } from "../helpers/HandbookHelper";
import { Inventory as PmcInventory } from "../models/eft/common/IPmcData";
import { ItemMinMax, Items } from "../models/eft/common/tables/IBotType";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { IBotConfig } from "../models/spt/config/IBotConfig";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil";
export declare class BotLootGenerator {
private jsonUtil;
private hashUtil;
private randomUtil;
private databaseServer;
private handbookHelper;
private botGeneratorHelper;
private pmcLootGenerator;
private configServer;
private botConfig;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected randomUtil: RandomUtil;
protected databaseServer: DatabaseServer;
protected handbookHelper: HandbookHelper;
protected botGeneratorHelper: BotGeneratorHelper;
protected pmcLootGenerator: PMCLootGenerator;
protected configServer: ConfigServer;
protected botConfig: IBotConfig;
constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, pmcLootGenerator: PMCLootGenerator, configServer: ConfigServer);
generateLoot(lootPool: Items, itemCounts: ItemMinMax, isPmc: boolean, inventory: PmcInventory): void;
private getRandomisedCount;
private addLootFromPool;
protected getRandomisedCount(min: number, max: number, nValue: number): number;
protected addLootFromPool(pool: ITemplateItem[], equipmentSlots: string[], count: number, inventory: PmcInventory, totalValueLimit?: number, useLimits?: boolean): void;
/** Compares two item templates by their price to spawn chance ratio */
private compareByValue;
protected compareByValue(a: ITemplateItem, b: ITemplateItem): number;
}

View File

@ -2,43 +2,87 @@ 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 { 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 {
private logger;
private hashUtil;
private databaseServer;
private itemHelper;
private weightedRandomHelper;
private botGeneratorHelper;
private randomUtil;
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, weaponPool: Record<string, number>, modPool: Mods, modChances: ModsChances, magCounts: MinMax, botRole: string, isPmc: boolean, inventory: PmcInventory): void;
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 */
private isWeaponValid;
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
*/
private generateExtraMagazines;
private addBullets;
* 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;
/**
* Finds and returns tpl of ammo that should be used, while making sure it's compatible
* 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
* @returns compatible ammo tpl
*/
private getCompatibleAmmo;
/** Fill existing magazines to full, while replacing their contents with specified ammo */
private fillExistingMagazines;
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

@ -6,6 +6,8 @@ import { RagfairServerHelper } from "../helpers/RagfairServerHelper";
import { ILooseLoot, SpawnpointTemplate } from "../models/eft/common/ILooseLoot";
import { Item } from "../models/eft/common/tables/IItem";
import { IStaticAmmoDetails, IStaticContainerProps, IStaticForcedProps, IStaticLootDetails } from "../models/eft/common/tables/ILootBase";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { ILocationConfig } from "../models/spt/config/ILocationConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { JsonUtil } from "../utils/JsonUtil";
@ -18,27 +20,27 @@ export interface IContainerItem {
height: number;
}
export declare class LocationGenerator {
private logger;
private jsonUtil;
private objectId;
private randomUtil;
private ragfairServerHelper;
private itemHelper;
private mathUtil;
private gameEventHelper;
private containerHelper;
private presetHelper;
private configServer;
private locationConfig;
protected logger: ILogger;
protected jsonUtil: JsonUtil;
protected objectId: ObjectId;
protected randomUtil: RandomUtil;
protected ragfairServerHelper: RagfairServerHelper;
protected itemHelper: ItemHelper;
protected mathUtil: MathUtil;
protected gameEventHelper: GameEventHelper;
protected containerHelper: ContainerHelper;
protected presetHelper: PresetHelper;
protected configServer: ConfigServer;
protected locationConfig: ILocationConfig;
constructor(logger: ILogger, jsonUtil: JsonUtil, objectId: ObjectId, randomUtil: RandomUtil, ragfairServerHelper: RagfairServerHelper, itemHelper: ItemHelper, mathUtil: MathUtil, gameEventHelper: GameEventHelper, containerHelper: ContainerHelper, presetHelper: PresetHelper, configServer: ConfigServer);
generateContainerLoot(containerIn: IStaticContainerProps, staticForced: IStaticForcedProps[], staticLootDist: Record<string, IStaticLootDetails>, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, locationName: string): IStaticContainerProps;
private getLooseLootMultiplerForLocation;
private getStaticLootMultiplerForLocation;
protected getLooseLootMultiplerForLocation(location: string): number;
protected getStaticLootMultiplerForLocation(location: string): number;
generateDynamicLoot(dynamicLootDist: ILooseLoot, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, locationName: string): SpawnpointTemplate[];
private createItem;
private getRandomCompatibleCaliberTemplateId;
private getRandomValidCaliber;
private drawAmmoTpl;
private createRandomMagCartridges;
private createCartidges;
protected createItem(tpl: string, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, parentId?: string): IContainerItem;
protected getRandomCompatibleCaliberTemplateId(item: ITemplateItem): string;
protected getRandomValidCaliber(magTemplate: ITemplateItem): string;
protected drawAmmoTpl(caliber: string, staticAmmoDist: Record<string, IStaticAmmoDetails[]>): string;
protected createRandomMagCartridges(magTemplate: ITemplateItem, parentId: string, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, caliber?: string): Item;
protected createCartidges(parentId: string, ammoTpl: string, stackCount: number): Item;
}

View File

@ -1,13 +1,14 @@
import { ItemHelper } from "../helpers/ItemHelper";
import { DatabaseServer } from "../servers/DatabaseServer";
import { ConfigServer } from "../servers/ConfigServer";
import { IBotConfig } from "../models/spt/config/IBotConfig";
export declare class PMCLootGenerator {
private itemHelper;
private databaseServer;
private configServer;
private pocketLootPool;
private backpackLootPool;
private botConfig;
protected itemHelper: ItemHelper;
protected databaseServer: DatabaseServer;
protected configServer: ConfigServer;
protected pocketLootPool: string[];
protected backpackLootPool: string[];
protected botConfig: IBotConfig;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer);
generatePMCPocketLootPool(): string[];
generatePMCBackpackLootPool(): string[];

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