Compare commits
98 Commits
Author | SHA1 | Date | |
---|---|---|---|
06cd058ff5 | |||
7a6611cc52 | |||
c064401358 | |||
7924e6b4ee | |||
69a2be46d9 | |||
8b338f9de3 | |||
![]() |
826c09e4d2 | ||
![]() |
aedc750e92 | ||
![]() |
0b31c2d7e6 | ||
![]() |
d25805829f | ||
5047eb4f59 | |||
54249526b6 | |||
ebba822c39 | |||
fe8e894ec7 | |||
f102261929 | |||
7866e7925d | |||
b8513b826d | |||
7c4562f27e | |||
30f7fefbf1 | |||
f0cd475ec6 | |||
718527d28f | |||
b270b68eb1 | |||
6d15a8a8e5 | |||
7644b3b8ba | |||
b13ae1a87d | |||
b19104a9ef | |||
7ef9c48699 | |||
75f3bee2c3 | |||
ed5e804797 | |||
628d60c9b8 | |||
2cdf7faed1 | |||
633be843c2 | |||
5ffa1878fb | |||
9bf1f8f521 | |||
9abebf5574 | |||
e2b9579b22 | |||
03d15f8921 | |||
e41a3ce171 | |||
9816e4ba4d | |||
3343de4bfd | |||
4efd319ea4 | |||
798e6e5ff5 | |||
cdf7f22092 | |||
9e11363335 | |||
e31e8e2509 | |||
a0b57a172d | |||
962acc3387 | |||
06e8608fab | |||
71e5011088 | |||
d0c3af8b3f | |||
a84cb8df8b | |||
71012ee4c1 | |||
1341bba01e | |||
0e2bd15157 | |||
bb23da5649 | |||
c863e4f0a1 | |||
8122825612 | |||
548c6e95ff | |||
e31e0af393 | |||
0125faf465 | |||
c9dbaa4015 | |||
653ff6e01a | |||
5b04caf8ed | |||
0065d8c22f | |||
86fe8d774a | |||
c48fac9302 | |||
305e4a345d | |||
c6b9ec6872 | |||
985d207f45 | |||
7aa4e30bbf | |||
be06517eb0 | |||
47a62b91e1 | |||
50d3a5b905 | |||
3b60118bac | |||
f7c5834ac0 | |||
9809799975 | |||
1166e86afd | |||
d2a5be136e | |||
66be4aef5c | |||
75dfb8d990 | |||
350a6298f6 | |||
9c52493885 | |||
82162d0694 | |||
faff6a2cd0 | |||
de26947c2d | |||
f0249f92e7 | |||
bd1a9f7dd6 | |||
33ef4ac243 | |||
4178e23c73 | |||
2ee1d4855f | |||
0a53729a61 | |||
110472207b | |||
956ce2954b | |||
e6b2ef64e7 | |||
a026ab7795 | |||
fde387fb10 | |||
3f68b519e2 | |||
2a1e50f934 |
446
.gitignore
vendored
Normal file
446
.gitignore
vendored
Normal file
@ -0,0 +1,446 @@
|
||||
lib-cov
|
||||
*.seed
|
||||
*.log
|
||||
*.csv
|
||||
*.dat
|
||||
*.out
|
||||
*.pid
|
||||
*.gz
|
||||
*.swp
|
||||
*.lnk
|
||||
|
||||
pids
|
||||
logs
|
||||
results
|
||||
tmp
|
||||
|
||||
# Build
|
||||
public/css/main.css
|
||||
mod.zip
|
||||
|
||||
# Coverage reports
|
||||
coverage
|
||||
|
||||
# API keys and secrets
|
||||
.env
|
||||
|
||||
# Dependency directory
|
||||
node_modules/
|
||||
bower_components/
|
||||
deps/
|
||||
dependencies/
|
||||
|
||||
# Editors
|
||||
.idea
|
||||
*.iml
|
||||
*.code-workspace
|
||||
|
||||
# OS metadata
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Ignore built ts files
|
||||
dist
|
||||
|
||||
# ignore lock files
|
||||
yarn.lock
|
||||
package-lock.json
|
||||
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.*
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
[Ww][Ii][Nn]32/
|
||||
[Aa][Rr][Mm]/
|
||||
[Aa][Rr][Mm]64/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUnit
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
nunit-*.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# ASP.NET Scaffolding
|
||||
ScaffoldingReadMe.txt
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_h.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*_wpftmp.csproj
|
||||
*.log
|
||||
*.tlog
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Coverlet is a free, cross platform Code Coverage Tool
|
||||
coverage*.json
|
||||
coverage*.xml
|
||||
coverage*.info
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# NuGet Symbol Packages
|
||||
*.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
*.appxbundle
|
||||
*.appxupload
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!?*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
*- [Bb]ackup.rdl
|
||||
*- [Bb]ackup ([0-9]).rdl
|
||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
|
||||
*.vbp
|
||||
|
||||
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
|
||||
*.dsw
|
||||
*.dsp
|
||||
|
||||
# Visual Studio 6 technical files
|
||||
*.ncb
|
||||
*.aps
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# CodeRush personal settings
|
||||
.cr/personal
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
|
||||
# Local History for Visual Studio
|
||||
.localhistory/
|
||||
|
||||
# Visual Studio History (VSHistory) files
|
||||
.vshistory/
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup/
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide/
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
||||
|
||||
# VS Code files for those working on multiple tools
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
*.code-workspace
|
||||
|
||||
# Local History for Visual Studio Code
|
||||
.history/
|
||||
|
||||
# Windows Installer files from build outputs
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# JetBrains Rider
|
||||
*.sln.iml
|
42
ClientMod/ClearVision.csproj
Normal file
42
ClientMod/ClearVision.csproj
Normal file
@ -0,0 +1,42 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<AssemblyName>LimboFPS.ClearVision</AssemblyName>
|
||||
<Description>ClearVision Client Mod</Description>
|
||||
<Version>1.0.0</Version>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Aki.Common">
|
||||
<HintPath>dependencies\Aki.Common.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Aki.Reflection">
|
||||
<HintPath>dependencies\Aki.Reflection.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>dependencies\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="BepInEx">
|
||||
<HintPath>dependencies\BepInEx.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Comfort">
|
||||
<HintPath>dependencies\Comfort.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json">
|
||||
<HintPath>dependencies\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine">
|
||||
<HintPath>dependencies\UnityEngine.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.CoreModule">
|
||||
<HintPath>dependencies\UnityEngine.CoreModule.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||
<Optimize>False</Optimize>
|
||||
</PropertyGroup>
|
||||
</Project>
|
25
ClientMod/ClearVision.sln
Normal file
25
ClientMod/ClearVision.sln
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.5.002.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClearVision", "ClearVision.csproj", "{F7BF68FF-3070-4ADD-A033-D0919D7FF046}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{F7BF68FF-3070-4ADD-A033-D0919D7FF046}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F7BF68FF-3070-4ADD-A033-D0919D7FF046}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F7BF68FF-3070-4ADD-A033-D0919D7FF046}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F7BF68FF-3070-4ADD-A033-D0919D7FF046}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {1E483CBF-BD06-41A8-9E3F-41DD8E4C79F4}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
89
ClientMod/ClearVisionPatches.cs
Normal file
89
ClientMod/ClearVisionPatches.cs
Normal file
@ -0,0 +1,89 @@
|
||||
using UnityEngine;
|
||||
using BSG.CameraEffects;
|
||||
using Aki.Reflection.Patching;
|
||||
using System.Reflection;
|
||||
using Comfort.Common;
|
||||
using EFT;
|
||||
|
||||
namespace ClearVision {
|
||||
public class GogglesPatches : ModulePatch {
|
||||
protected override MethodBase GetTargetMethod() {
|
||||
Logger.LogInfo("GogglesPatches GTM()");
|
||||
var result = typeof(NightVision).GetMethod("method_1", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||
return result;
|
||||
}
|
||||
|
||||
[PatchPostfix]
|
||||
static void Postfix() {
|
||||
if(Plugin.GlobalEnabled.Value && Singleton<GameWorld>.Instantiated) { // sanity check
|
||||
// Get Camera
|
||||
GameObject maincam = GameObject.Find("FPS Camera");
|
||||
NightVision nv = maincam.GetComponent<NightVision>();
|
||||
CC_Vintage vintage = maincam.GetComponent<CC_Vintage>();
|
||||
if(nv != null && nv.On) {
|
||||
Logger.LogInfo("nv is not null and is enabled/being enabled");
|
||||
nv.Intensity = Plugin.NVGIntensity.Value;
|
||||
nv.NoiseIntensity = Plugin.NVGNoiseIntensity.Value;
|
||||
nv.NoiseScale = Plugin.NVGNoiseScale.Value;
|
||||
if (Plugin.NVGMaskEnabled.Value) {
|
||||
nv.TextureMask.enabled = true;
|
||||
nv.TextureMask.Size = Plugin.NVGMaskSize.Value;
|
||||
}
|
||||
else {
|
||||
nv.TextureMask.enabled = false;
|
||||
}
|
||||
nv.Color = Plugin.NVGColor.Value;
|
||||
|
||||
vintage.enabled = false;
|
||||
nv.ApplySettings();
|
||||
return;
|
||||
}
|
||||
else {
|
||||
vintage.enabled = true;
|
||||
nv.ApplySettings();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class ScopePatches : ModulePatch {
|
||||
protected override MethodBase GetTargetMethod() {
|
||||
Logger.LogInfo("ScopePatches GTM()");
|
||||
var result = typeof(ThermalVision).GetMethod("method_1", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||
return result;
|
||||
}
|
||||
|
||||
[PatchPostfix]
|
||||
static void Postfix() {
|
||||
if(Plugin.GlobalEnabled.Value && Singleton<GameWorld>.Instantiated) { // sanity check
|
||||
GameObject maincam = GameObject.Find("FPS Camera");
|
||||
ThermalVision t7 = maincam.GetComponent<ThermalVision>();
|
||||
if(t7.On) {
|
||||
t7.IsGlitch = Plugin.T7Glitch.Value;
|
||||
t7.IsPixelated = Plugin.T7Pixel.Value;
|
||||
t7.IsNoisy = Plugin.T7Noise.Value;
|
||||
t7.IsMotionBlurred = Plugin.T7MotionBlur.Value;
|
||||
t7.IsFpsStuck = Plugin.T7FpsLock.Value;
|
||||
if (Plugin.T7FpsLock.Value) {
|
||||
t7.StuckFpsUtilities.MaxFramerate = Plugin.T7FpsMax.Value;
|
||||
t7.StuckFpsUtilities.MinFramerate = Plugin.T7FpsMax.Value;
|
||||
}
|
||||
if(Plugin.T7MaskEnabled.Value) {
|
||||
t7.TextureMask.enabled = true;
|
||||
t7.TextureMask.Size = Plugin.T7MaskSize.Value;
|
||||
}
|
||||
else{
|
||||
t7.TextureMask.enabled = false;
|
||||
}
|
||||
// Far/near clip plane distance is done on the optic_camera for each "mode" acording to UABEA,
|
||||
// just need to see where it is in the data structure
|
||||
return;
|
||||
}
|
||||
else
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
6
ClientMod/NuGet.Config
Normal file
6
ClientMod/NuGet.Config
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<packageSources>
|
||||
<add key="BepInEx" value="https://nuget.bepinex.dev/v3/index.json" />
|
||||
</packageSources>
|
||||
</configuration>
|
56
ClientMod/Plugin.cs
Normal file
56
ClientMod/Plugin.cs
Normal file
@ -0,0 +1,56 @@
|
||||
using BepInEx;
|
||||
using BepInEx.Configuration;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ClearVision {
|
||||
[BepInPlugin("com.LimboFPS.ClearVision", "LimboFPS.ClearVision", "1.0.2")]
|
||||
public class Plugin : BaseUnityPlugin {
|
||||
public static ConfigEntry<bool> GlobalEnabled { get; set; }
|
||||
|
||||
// NVG Sights
|
||||
public static ConfigEntry<bool> NVGEnabled { get; set; }
|
||||
public static ConfigEntry<float> NVGIntensity { get; set; }
|
||||
public static ConfigEntry<float> NVGNoiseIntensity { get; set; }
|
||||
public static ConfigEntry<float> NVGNoiseScale { get; set; }
|
||||
public static ConfigEntry<bool> NVGMaskEnabled { get; set; }
|
||||
public static ConfigEntry<float> NVGMaskSize { get; set; }
|
||||
public static ConfigEntry<Color> NVGColor { get; set; }
|
||||
|
||||
// T-7 Thermal Goggles
|
||||
public static ConfigEntry<bool> T7Enabled { get; set; }
|
||||
public static ConfigEntry<bool> T7Glitch { get; set; }
|
||||
public static ConfigEntry<bool> T7Noise { get; set; }
|
||||
public static ConfigEntry<bool> T7Pixel { get; set; }
|
||||
public static ConfigEntry<bool> T7FpsLock { get; set; }
|
||||
public static ConfigEntry<int> T7FpsMax { get; set; }
|
||||
public static ConfigEntry<bool> T7MotionBlur { get; set; }
|
||||
public static ConfigEntry<bool> T7MaskEnabled { get; set; }
|
||||
public static ConfigEntry<float> T7MaskSize { get; set; }
|
||||
|
||||
private void Start() {
|
||||
Logger.LogInfo("ClearVision Start()");
|
||||
GlobalEnabled = Config.Bind("ClearVision", "GlobalEnabled", true, new ConfigDescription("Main Toggle", null));
|
||||
// NVG Goggles
|
||||
NVGEnabled = Config.Bind("NVG", "NVGEnabled", true, new ConfigDescription("Enable GPNVG-18", null));
|
||||
NVGIntensity = Config.Bind("NVG", "NVGIntensity", 2.0f, new ConfigDescription("NVG Intensity", null));
|
||||
NVGNoiseIntensity = Config.Bind("NVG", "NVGNoiseIntensity", 0.0f, new ConfigDescription("NVG Noise Intensity", null));
|
||||
NVGNoiseScale = Config.Bind("NVG", "NVGNoiseScale", 0.0f, new ConfigDescription("NVG Noise Scale", null));
|
||||
NVGMaskEnabled = Config.Bind("NVG", "NVGMaskEnabled", false, new ConfigDescription("NVG Mask Overlay", null));
|
||||
NVGMaskSize = Config.Bind("NVG", "NVGMaskSize", 1.5f, new ConfigDescription("NVG Mask Overlay Size", null));
|
||||
NVGColor = Config.Bind("NVG", "NVGColor", new Color(0.00f, 0.78f, 0.78f, 0.99f), new ConfigDescription("NVG Color", null));
|
||||
// T-7
|
||||
T7Enabled = Config.Bind("T7", "T7Enabled", true, new ConfigDescription("Enable T-7", null));
|
||||
T7Noise = Config.Bind("T7", "T7Noise", false, new ConfigDescription("T-7 Thermal Noise", null));
|
||||
T7Glitch = Config.Bind("T7", "T7Glitch", false, new ConfigDescription("T-7 Thermal Glitchiness", null));
|
||||
T7Pixel = Config.Bind("T7", "T7Pixel", false, new ConfigDescription("T-7 Thermal Pixelation", null));
|
||||
T7MotionBlur = Config.Bind("T7", "T7MotionBlur", false, new ConfigDescription("T-7 Thermal Motion Blur", null));
|
||||
T7FpsLock = Config.Bind("T7", "T7Fps", false, new ConfigDescription("T-7 FPS Lock Enabled", null));
|
||||
T7FpsMax = Config.Bind("T7", "T7FpsMax", 60, new ConfigDescription("T-7 FPS Max FPS", new AcceptableValueRange<int>(15, 60)));
|
||||
T7MaskEnabled = Config.Bind("T7", "T7MaskEnabled", false, new ConfigDescription("T-7 Mask Overlay On/Off", null));
|
||||
T7MaskSize = Config.Bind("T7", "T7MaskSize", 1.5f, new ConfigDescription("T-7 Mask Overlay Size", new AcceptableValueRange<float>(0f, 5f)));
|
||||
|
||||
new GogglesPatches().Enable();
|
||||
new ScopePatches().Enable();
|
||||
}
|
||||
}
|
||||
}
|
158
LICENSE
158
LICENSE
@ -1,158 +0,0 @@
|
||||
Creative Commons Attribution-NonCommercial 4.0 International
|
||||
|
||||
Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors.
|
||||
|
||||
Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public.
|
||||
|
||||
Creative Commons Attribution-NonCommercial 4.0 International Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
|
||||
|
||||
Section 1 – Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
|
||||
|
||||
d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
|
||||
|
||||
e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
|
||||
|
||||
f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
|
||||
|
||||
g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
h. Licensor means the individual(s) or entity(ies) granting rights under this Public License.
|
||||
|
||||
i. NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange.
|
||||
|
||||
j. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
|
||||
|
||||
k. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
|
||||
|
||||
l. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
|
||||
|
||||
Section 2 – Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
A. reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and
|
||||
|
||||
B. produce, reproduce, and Share Adapted Material for NonCommercial purposes only.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section 6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
|
||||
|
||||
B. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes.
|
||||
|
||||
Section 3 – License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified form), You must:
|
||||
|
||||
A. retain the following if it is supplied by the Licensor with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
|
||||
|
||||
B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
|
||||
|
||||
C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
|
||||
|
||||
4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License.
|
||||
|
||||
Section 4 – Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only;
|
||||
|
||||
b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
|
||||
For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
|
||||
|
||||
Section 5 – Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
|
||||
|
||||
b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
|
||||
|
||||
Section 6 – Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
|
||||
|
||||
Section 7 – Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
|
||||
|
||||
Section 8 – Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
|
||||
|
||||
Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
175
LICENSE.MD
Normal file
175
LICENSE.MD
Normal file
@ -0,0 +1,175 @@
|
||||
## creative commons
|
||||
|
||||
# Attribution-NonCommercial-ShareAlike 4.0 International
|
||||
|
||||
Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
|
||||
|
||||
### Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
|
||||
|
||||
* __Considerations for licensors:__ Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. [More considerations for licensors](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensors).
|
||||
|
||||
* __Considerations for the public:__ By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. [More considerations for the public](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensees).
|
||||
|
||||
## Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
|
||||
|
||||
### Section 1 – Definitions.
|
||||
|
||||
a. __Adapted Material__ means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
|
||||
|
||||
b. __Adapter's License__ means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. __BY-NC-SA Compatible License__ means a license listed at [creativecommons.org/compatiblelicenses](http://creativecommons.org/compatiblelicenses), approved by Creative Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. __Copyright and Similar Rights__ means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
|
||||
|
||||
e. __Effective Technological Measures__ means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
|
||||
|
||||
f. __Exceptions and Limitations__ means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
|
||||
|
||||
g. __License Elements__ means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution, NonCommercial, and ShareAlike.
|
||||
|
||||
h. __Licensed Material__ means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
|
||||
|
||||
i. __Licensed Rights__ means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. __Licensor__ means the individual(s) or entity(ies) granting rights under this Public License.
|
||||
|
||||
k. __NonCommercial__ means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange.
|
||||
|
||||
l. __Share__ means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
|
||||
|
||||
m. __Sui Generis Database Rights__ means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
|
||||
|
||||
n. __You__ means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
|
||||
|
||||
### Section 2 – Scope.
|
||||
|
||||
a. ___License grant.___
|
||||
|
||||
1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
A. reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and
|
||||
|
||||
B. produce, reproduce, and Share Adapted Material for NonCommercial purposes only.
|
||||
|
||||
2. __Exceptions and Limitations.__ For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
|
||||
|
||||
3. __Term.__ The term of this Public License is specified in Section 6(a).
|
||||
|
||||
4. __Media and formats; technical modifications allowed.__ The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
|
||||
|
||||
5. __Downstream recipients.__
|
||||
|
||||
A. __Offer from the Licensor – Licensed Material.__ Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
|
||||
|
||||
B. __Additional offer from the Licensor – Adapted Material.__ Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply.
|
||||
|
||||
C. __No downstream restrictions.__ You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
|
||||
|
||||
6. __No endorsement.__ Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. ___Other rights.___
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes.
|
||||
|
||||
### Section 3 – License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the following conditions.
|
||||
|
||||
a. ___Attribution.___
|
||||
|
||||
1. If You Share the Licensed Material (including in modified form), You must:
|
||||
|
||||
A. retain the following if it is supplied by the Licensor with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
|
||||
|
||||
B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
|
||||
|
||||
C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
|
||||
|
||||
b. ___ShareAlike.___
|
||||
|
||||
In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-NC-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply.
|
||||
|
||||
### Section 4 – Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only;
|
||||
|
||||
b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
|
||||
|
||||
### Section 5 – Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. __Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.__
|
||||
|
||||
b. __To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.__
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
|
||||
|
||||
### Section 6 – Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
|
||||
|
||||
### Section 7 – Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
|
||||
|
||||
### Section 8 – Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
|
||||
|
||||
> Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” The text of the Creative Commons public licenses is dedicated to the public domain under the CC0 Public Domain Dedication. Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
|
||||
>
|
||||
> Creative Commons may be contacted at creativecommons.org
|
20
ServerMod/.buildignore
Normal file
20
ServerMod/.buildignore
Normal file
@ -0,0 +1,20 @@
|
||||
/.buildignore
|
||||
/.DS_Store
|
||||
/.editorconfig
|
||||
/.eslintignore
|
||||
/.eslintrc.json
|
||||
/.git
|
||||
/.github
|
||||
/.gitignore
|
||||
/.gitlab
|
||||
/.nvmrc
|
||||
/.prettierrc
|
||||
/.vscode
|
||||
/build.mjs
|
||||
/dist
|
||||
/images
|
||||
/mod.code-workspace
|
||||
/node_modules
|
||||
/package-lock.json
|
||||
/tsconfig.json
|
||||
/types
|
10
ServerMod/.eslintignore
Normal file
10
ServerMod/.eslintignore
Normal file
@ -0,0 +1,10 @@
|
||||
# Exclude these folders from linting
|
||||
**/node_modules
|
||||
/tmp
|
||||
/dist
|
||||
/types
|
||||
|
||||
# Exclude these filetypes from linting
|
||||
*.json
|
||||
*.txt
|
||||
*.exe
|
98
ServerMod/.eslintrc.json
Normal file
98
ServerMod/.eslintrc.json
Normal file
@ -0,0 +1,98 @@
|
||||
{
|
||||
"root": true,
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"plugins": [
|
||||
"@typescript-eslint"
|
||||
],
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
"plugin:@typescript-eslint/eslint-recommended",
|
||||
"plugin:@typescript-eslint/recommended"
|
||||
],
|
||||
"rules": {
|
||||
"@typescript-eslint/no-explicit-any": 0,
|
||||
"@typescript-eslint/no-unused-vars": 1,
|
||||
"@typescript-eslint/no-empty-interface": 0,
|
||||
"@typescript-eslint/no-namespace": 0,
|
||||
"@typescript-eslint/comma-dangle": 1,
|
||||
"@typescript-eslint/func-call-spacing": 2,
|
||||
"@typescript-eslint/quotes": 1,
|
||||
"@typescript-eslint/brace-style": [
|
||||
"warn",
|
||||
"allman"
|
||||
],
|
||||
"@typescript-eslint/naming-convention": [
|
||||
"warn",
|
||||
{
|
||||
"selector": "default",
|
||||
"format": [
|
||||
"camelCase"
|
||||
],
|
||||
"leadingUnderscore": "allow"
|
||||
},
|
||||
{
|
||||
"selector": "typeLike",
|
||||
"format": [
|
||||
"PascalCase"
|
||||
]
|
||||
},
|
||||
{
|
||||
"selector": "objectLiteralProperty",
|
||||
"format": [
|
||||
"PascalCase",
|
||||
"camelCase"
|
||||
],
|
||||
"leadingUnderscore": "allow"
|
||||
},
|
||||
{
|
||||
"selector": "typeProperty",
|
||||
"format": [
|
||||
"PascalCase",
|
||||
"camelCase"
|
||||
],
|
||||
"leadingUnderscore": "allow"
|
||||
},
|
||||
{
|
||||
"selector": "enumMember",
|
||||
"format": [
|
||||
"UPPER_CASE"
|
||||
]
|
||||
}
|
||||
],
|
||||
"@typescript-eslint/indent": [
|
||||
"warn",
|
||||
4
|
||||
],
|
||||
"@typescript-eslint/no-unused-expressions": [
|
||||
"warn",
|
||||
{
|
||||
"allowShortCircuit": false,
|
||||
"allowTernary": false
|
||||
}
|
||||
],
|
||||
"@typescript-eslint/keyword-spacing": [
|
||||
"warn",
|
||||
{
|
||||
"before": true,
|
||||
"after": true
|
||||
}
|
||||
],
|
||||
"@typescript-eslint/explicit-module-boundary-types": [
|
||||
"warn",
|
||||
{
|
||||
"allowArgumentsExplicitlyTypedAsAny": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"overrides": [
|
||||
{
|
||||
"files": [
|
||||
"*.mjs",
|
||||
"*.ts"
|
||||
],
|
||||
"env": {
|
||||
"node": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
381
ServerMod/build.mjs
Normal file
381
ServerMod/build.mjs
Normal file
@ -0,0 +1,381 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Build Script
|
||||
*
|
||||
* This script automates the build process for server-side SPT mod projects, facilitating the creation of distributable
|
||||
* mod packages. It performs a series of operations as outlined below:
|
||||
* - Loads the .buildignore file, which is used to list files that should be ignored during the build process.
|
||||
* - Loads the package.json to get project details so a descriptive name can be created for the mod package.
|
||||
* - Creates a distribution directory and a temporary working directory.
|
||||
* - Copies files to the temporary directory while respecting the .buildignore rules.
|
||||
* - Creates a zip archive of the project files.
|
||||
* - Moves the zip file to the root of the distribution directory.
|
||||
* - Cleans up the temporary directory.
|
||||
*
|
||||
* It's typical that this script be customized to suit the needs of each project. For example, the script can be updated
|
||||
* to perform additional operations, such as moving the mod package to a specific location or uploading it to a server.
|
||||
* This script is intended to be a starting point for developers to build upon.
|
||||
*
|
||||
* Usage:
|
||||
* - Run this script using npm: `npm run build`
|
||||
* - Use `npm run buildinfo` for detailed logging.
|
||||
*
|
||||
* Note:
|
||||
* - Ensure that all necessary Node.js modules are installed before running the script: `npm install`
|
||||
* - The script reads configurations from the `package.json` and `.buildignore` files; ensure they are correctly set up.
|
||||
*
|
||||
* @author Refringe
|
||||
* @version v1.0.0
|
||||
*/
|
||||
|
||||
import os from "node:os";
|
||||
import path from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import fs from "fs-extra";
|
||||
import ignore from "ignore";
|
||||
import archiver from "archiver";
|
||||
import winston from "winston";
|
||||
|
||||
// Get the command line arguments to determine whether to use verbose logging.
|
||||
const args = process.argv.slice(2);
|
||||
const verbose = args.includes("--verbose") || args.includes("-v");
|
||||
|
||||
// Configure the Winston logger to use colours.
|
||||
const logColors = {
|
||||
error: "red",
|
||||
warn: "yellow",
|
||||
info: "grey",
|
||||
success: "green",
|
||||
};
|
||||
winston.addColors(logColors);
|
||||
|
||||
// Create a logger instance to log build progress. Configure the logger levels to allow for different levels of logging
|
||||
// based on the verbosity flag, and set the console transport to log messages of the appropriate level.
|
||||
const logger = winston.createLogger({
|
||||
levels: {
|
||||
error: 0,
|
||||
warn: 1,
|
||||
success: 2,
|
||||
info: 3,
|
||||
},
|
||||
format: winston.format.combine(
|
||||
winston.format.colorize(),
|
||||
winston.format.printf(info => {
|
||||
return `${info.level}: ${info.message}`;
|
||||
})
|
||||
),
|
||||
transports: [
|
||||
new winston.transports.Console({
|
||||
level: verbose ? "info" : "success",
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
/**
|
||||
* The main function orchestrates the build process for creating a distributable mod package. It leverages a series of
|
||||
* helper functions to perform various tasks such as loading configuration files, setting up directories, copying files
|
||||
* according to `.buildignore` rules, and creating a ZIP archive of the project files.
|
||||
*
|
||||
* Utilizes the Winston logger to provide information on the build status at different stages of the process.
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
async function main() {
|
||||
// Get the current directory where the script is being executed
|
||||
const currentDir = getCurrentDirectory();
|
||||
|
||||
// Defining at this scope because we need to use it in the finally block.
|
||||
let projectDir;
|
||||
|
||||
try {
|
||||
// Load the .buildignore file to set up an ignore handler for the build process.
|
||||
const buildIgnorePatterns = await loadBuildIgnoreFile(currentDir);
|
||||
|
||||
// Load the package.json file to get project details.
|
||||
const packageJson = await loadPackageJson(currentDir);
|
||||
|
||||
// Create a descriptive name for the mod package.
|
||||
const projectName = createProjectName(packageJson);
|
||||
logger.log("success", `Project name created: ${projectName}`);
|
||||
|
||||
// Remove the old distribution directory and create a fresh one.
|
||||
const distDir = await removeOldDistDirectory(currentDir);
|
||||
logger.log("info", "Distribution directory successfully cleaned.");
|
||||
|
||||
// Create a temporary working directory to perform the build operations.
|
||||
projectDir = await createTemporaryDirectoryWithProjectName(projectName);
|
||||
logger.log("success", "Temporary working directory successfully created.");
|
||||
logger.log("info", projectDir);
|
||||
|
||||
// Copy files to the temporary directory while respecting the .buildignore rules.
|
||||
logger.log("info", "Beginning copy operation using .buildignore file...");
|
||||
await copyFiles(currentDir, projectDir, buildIgnorePatterns);
|
||||
logger.log("success", "Files successfully copied to temporary directory.");
|
||||
|
||||
// Create a zip archive of the project files.
|
||||
logger.log("info", "Beginning folder compression...");
|
||||
const zipFilePath = path.join(path.dirname(projectDir), `${projectName}.zip`);
|
||||
await createZipFile(projectDir, zipFilePath, "user/mods/" + projectName);
|
||||
logger.log("success", "Archive successfully created.");
|
||||
logger.log("info", zipFilePath);
|
||||
|
||||
// Move the zip file inside of the project directory, within the temporary working directory.
|
||||
const zipFileInProjectDir = path.join(projectDir, `${projectName}.zip`);
|
||||
await fs.move(zipFilePath, zipFileInProjectDir);
|
||||
logger.log("success", "Archive successfully moved.");
|
||||
logger.log("info", zipFileInProjectDir);
|
||||
|
||||
// Move the temporary directory into the distribution directory.
|
||||
await fs.move(projectDir, distDir);
|
||||
logger.log("success", "Temporary directory successfully moved into project distribution directory.");
|
||||
|
||||
// Log the success message. Write out the path to the mod package.
|
||||
logger.log("success", "------------------------------------");
|
||||
logger.log("success", "Build script completed successfully!");
|
||||
logger.log("success", "Your mod package has been created in the 'dist' directory:");
|
||||
logger.log("success", `/${path.relative(process.cwd(), path.join(distDir, `${projectName}.zip`))}`);
|
||||
logger.log("success", "------------------------------------");
|
||||
if (!verbose) {
|
||||
logger.log("success", "To see a detailed build log, use `npm run buildinfo`.");
|
||||
logger.log("success", "------------------------------------");
|
||||
}
|
||||
} catch (err) {
|
||||
// If any of the file operations fail, log the error.
|
||||
logger.log("error", "An error occurred: " + err);
|
||||
} finally {
|
||||
// Clean up the temporary directory, even if the build fails.
|
||||
if (projectDir) {
|
||||
try {
|
||||
await fs.promises.rm(projectDir, { force: true, recursive: true });
|
||||
logger.log("info", "Cleaned temporary directory.");
|
||||
} catch (err) {
|
||||
logger.log("error", "Failed to clean temporary directory: " + err);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the current working directory where the script is being executed. This directory is used as a reference
|
||||
* point for various file operations throughout the build process, ensuring that paths are resolved correctly regardless
|
||||
* of the location from which the script is invoked.
|
||||
*
|
||||
* @returns {string} The absolute path of the current working directory.
|
||||
*/
|
||||
function getCurrentDirectory() {
|
||||
return path.dirname(fileURLToPath(import.meta.url));
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the `.buildignore` file and sets up an ignore handler using the `ignore` module. The `.buildignore` file
|
||||
* contains a list of patterns describing files and directories that should be ignored during the build process. The
|
||||
* ignore handler created by this method is used to filter files and directories when copying them to the temporary
|
||||
* directory, ensuring that only necessary files are included in the final mod package.
|
||||
*
|
||||
* @param {string} currentDirectory - The absolute path of the current working directory.
|
||||
* @returns {Promise<ignore>} A promise that resolves to an ignore handler.
|
||||
*/
|
||||
async function loadBuildIgnoreFile(currentDir) {
|
||||
const buildIgnorePath = path.join(currentDir, ".buildignore");
|
||||
|
||||
try {
|
||||
// Attempt to read the contents of the .buildignore file asynchronously.
|
||||
const fileContent = await fs.promises.readFile(buildIgnorePath, "utf-8");
|
||||
|
||||
// Return a new ignore instance and add the rules from the .buildignore file (split by newlines).
|
||||
return ignore().add(fileContent.split("\n"));
|
||||
} catch (err) {
|
||||
logger.log("warn", "Failed to read .buildignore file. No files or directories will be ignored.");
|
||||
|
||||
// Return an empty ignore instance, ensuring the build process can continue.
|
||||
return ignore();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the `package.json` file and returns its content as a JSON object. The `package.json` file contains important
|
||||
* project details such as the name and version, which are used in later stages of the build process to create a
|
||||
* descriptive name for the mod package. The method reads the file from the current working directory, ensuring that it
|
||||
* accurately reflects the current state of the project.
|
||||
*
|
||||
* @param {string} currentDirectory - The absolute path of the current working directory.
|
||||
* @returns {Promise<Object>} A promise that resolves to a JSON object containing the contents of the `package.json`.
|
||||
*/
|
||||
async function loadPackageJson(currentDir) {
|
||||
const packageJsonPath = path.join(currentDir, "package.json");
|
||||
|
||||
// Read the contents of the package.json file asynchronously as a UTF-8 string.
|
||||
const packageJsonContent = await fs.promises.readFile(packageJsonPath, "utf-8");
|
||||
|
||||
return JSON.parse(packageJsonContent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a descriptive name for the mod package using details from the `package.json` file. The name is created by
|
||||
* concatenating the project name, version, and a timestamp, resulting in a unique and descriptive file name for each
|
||||
* build. This name is used as the base name for the temporary working directory and the final ZIP archive, helping to
|
||||
* identify different versions of the mod package easily.
|
||||
*
|
||||
* @param {Object} packageJson - A JSON object containing the contents of the `package.json` file.
|
||||
* @returns {string} A string representing the constructed project name.
|
||||
*/
|
||||
function createProjectName(packageJson) {
|
||||
// Remove any non-alphanumeric characters from the author and name.
|
||||
const author = packageJson.author.replace(/\W/g, "");
|
||||
const name = packageJson.name.replace(/\W/g, "");
|
||||
|
||||
// Ensure the name is lowercase, as per the package.json specification.
|
||||
return `${author}-${name}`.toLowerCase();
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines the location of the distribution directory where the final mod package will be stored and deletes any
|
||||
* existing distribution directory to ensure a clean slate for the build process.
|
||||
*
|
||||
* @param {string} currentDirectory - The absolute path of the current working directory.
|
||||
* @returns {Promise<string>} A promise that resolves to the absolute path to the distribution directory.
|
||||
*/
|
||||
async function removeOldDistDirectory(projectDir) {
|
||||
const distPath = path.join(projectDir, "dist");
|
||||
await fs.remove(distPath);
|
||||
return distPath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a temporary working directory using the project name. This directory serves as a staging area where project
|
||||
* files are gathered before being archived into the final mod package. The method constructs a unique directory path
|
||||
* by appending the project name to a base temporary directory path, ensuring that each build has its own isolated
|
||||
* working space. This approach facilitates clean and organized build processes, avoiding potential conflicts with other
|
||||
* builds.
|
||||
*
|
||||
* @param {string} currentDirectory - The absolute path of the current working directory.
|
||||
* @param {string} projectName - The constructed project name, used to create a unique path for the temporary directory.
|
||||
* @returns {Promise<string>} A promise that resolves to the absolute path of the newly created temporary directory.
|
||||
*/
|
||||
async function createTemporaryDirectoryWithProjectName(projectName) {
|
||||
// Create a new directory in the system's temporary folder to hold the project files.
|
||||
const tempDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), "spt-mod-build-"));
|
||||
|
||||
// Create a subdirectory within the temporary directory using the project name for this specific build.
|
||||
const projectDir = path.join(tempDir, projectName);
|
||||
await fs.ensureDir(projectDir);
|
||||
|
||||
return projectDir;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies the project files to the temporary directory while respecting the rules defined in the `.buildignore` file.
|
||||
* The method is recursive, iterating over all files and directories in the source directory and using the ignore
|
||||
* handler to filter out files and directories that match the patterns defined in the `.buildignore` file. This ensures
|
||||
* that only the necessary files are included in the final mod package, adhering to the specifications defined by the
|
||||
* developer in the `.buildignore` file.
|
||||
*
|
||||
* The copy operations are delayed and executed in parallel to improve efficiency and reduce the build time. This is
|
||||
* achieved by creating an array of copy promises and awaiting them all at the end of the function.
|
||||
*
|
||||
* @param {string} sourceDirectory - The absolute path of the current working directory.
|
||||
* @param {string} destinationDirectory - The absolute path of the temporary directory where the files will be copied.
|
||||
* @param {Ignore} ignoreHandler - The ignore handler created from the `.buildignore` file.
|
||||
* @returns {Promise<void>} A promise that resolves when all copy operations are completed successfully.
|
||||
*/
|
||||
async function copyFiles(srcDir, destDir, ignoreHandler) {
|
||||
try {
|
||||
// Read the contents of the source directory to get a list of entries (files and directories).
|
||||
const entries = await fs.promises.readdir(srcDir, { withFileTypes: true });
|
||||
|
||||
// Initialize an array to hold the promises returned by recursive calls to copyFiles and copyFile operations.
|
||||
const copyOperations = [];
|
||||
|
||||
for (const entry of entries) {
|
||||
// Define the source and destination paths for each entry.
|
||||
const srcPath = path.join(srcDir, entry.name);
|
||||
const destPath = path.join(destDir, entry.name);
|
||||
|
||||
// Get the relative path of the source file to check against the ignore handler.
|
||||
const relativePath = path.relative(process.cwd(), srcPath);
|
||||
|
||||
// If the ignore handler dictates that this file should be ignored, skip to the next iteration.
|
||||
if (ignoreHandler.ignores(relativePath)) {
|
||||
logger.log("info", `Ignored: /${path.relative(process.cwd(), srcPath)}`);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (entry.isDirectory()) {
|
||||
// If the entry is a directory, create the corresponding temporary directory and make a recursive call
|
||||
// to copyFiles to handle copying the contents of the directory.
|
||||
await fs.ensureDir(destPath);
|
||||
copyOperations.push(copyFiles(srcPath, destPath, ignoreHandler));
|
||||
} else {
|
||||
// If the entry is a file, add a copyFile operation to the copyOperations array and log the event when
|
||||
// the operation is successful.
|
||||
copyOperations.push(
|
||||
fs.copy(srcPath, destPath).then(() => {
|
||||
logger.log("info", `Copied: /${path.relative(process.cwd(), srcPath)}`);
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Await all copy operations to ensure all files and directories are copied before exiting the function.
|
||||
await Promise.all(copyOperations);
|
||||
} catch (err) {
|
||||
// Log an error message if any error occurs during the copy process.
|
||||
logger.log("error", "Error copying files: " + err);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a ZIP archive of the project files located in the temporary directory. The method uses the `archiver` module
|
||||
* to create a ZIP file, which includes all the files that have been copied to the temporary directory during the build
|
||||
* process. The ZIP file is named using the project name, helping to identify the contents of the archive easily.
|
||||
*
|
||||
* @param {string} directoryPath - The absolute path of the temporary directory containing the project files.
|
||||
* @param {string} projectName - The constructed project name, used to name the ZIP file.
|
||||
* @returns {Promise<string>} A promise that resolves to the absolute path of the created ZIP file.
|
||||
*/
|
||||
async function createZipFile(directoryToZip, zipFilePath, containerDirName) {
|
||||
return new Promise((resolve, reject) => {
|
||||
// Create a write stream to the specified ZIP file path.
|
||||
const output = fs.createWriteStream(zipFilePath);
|
||||
|
||||
// Create a new archiver instance with ZIP format and maximum compression level.
|
||||
const archive = archiver("zip", {
|
||||
zlib: { level: 9 },
|
||||
});
|
||||
|
||||
// Set up an event listener for the 'close' event to resolve the promise when the archiver has finalized.
|
||||
output.on("close", function () {
|
||||
logger.log("info", "Archiver has finalized. The output and the file descriptor have closed.");
|
||||
resolve();
|
||||
});
|
||||
|
||||
// Set up an event listener for the 'warning' event to handle warnings appropriately, logging them or rejecting
|
||||
// the promise based on the error code.
|
||||
archive.on("warning", function (err) {
|
||||
if (err.code === "ENOENT") {
|
||||
logger.log("warn", `Archiver issued a warning: ${err.code} - ${err.message}`);
|
||||
} else {
|
||||
reject(err);
|
||||
}
|
||||
});
|
||||
|
||||
// Set up an event listener for the 'error' event to reject the promise if any error occurs during archiving.
|
||||
archive.on("error", function (err) {
|
||||
reject(err);
|
||||
});
|
||||
|
||||
// Pipe archive data to the file.
|
||||
archive.pipe(output);
|
||||
|
||||
// Add the directory to the archive, under the provided directory name.
|
||||
archive.directory(directoryToZip, containerDirName);
|
||||
|
||||
// Finalize the archive, indicating that no more files will be added and triggering the 'close' event once all
|
||||
// data has been written.
|
||||
archive.finalize();
|
||||
});
|
||||
}
|
||||
|
||||
// Engage!
|
||||
main();
|
@ -34,6 +34,39 @@
|
||||
"assets/commonassets/physics/physicsmaterials.bundle",
|
||||
"packages/com.unity.postproessing/postprocessing/postprocessresources.bundle"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "assets/content/items/mods/scopes/scope_all_sig_sauer_echo1_thermal_reflex_sight_1_2x_30hz.bundle",
|
||||
"dependencyKeys": [
|
||||
"shaders",
|
||||
"cubemap",
|
||||
"assets/systems/effects/nightvision.bundle",
|
||||
"assets/systems/effects/nightvision/mask_nv_textures",
|
||||
"assets/commonassets/physics/physicsmaterials.bundle",
|
||||
"packages/com.unity.postproessing/postprocessing/postprocessresources.bundle"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "assets/content/items/mods/scopes/scope_base_armasight_zeus_pro_640_2_16x50_30hz.bundle",
|
||||
"dependencyKeys": [
|
||||
"shaders",
|
||||
"cubemap",
|
||||
"assets/systems/effects/nightvision.bundle",
|
||||
"assets/systems/effects/nightvision/mask_nv_textures",
|
||||
"assets/commonassets/physics/physicsmaterials.bundle",
|
||||
"packages/com.unity.postproessing/postprocessing/postprocessresources.bundle"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "assets/content/items/mods/tactical/tactical_mp155_kalashnikov_ultima_camera_thermal.bundle",
|
||||
"dependencyKeys": [
|
||||
"shaders",
|
||||
"cubemap",
|
||||
"assets/systems/effects/nightvision.bundle",
|
||||
"assets/systems/effects/nightvision/mask_nv_textures",
|
||||
"assets/commonassets/physics/physicsmaterials.bundle",
|
||||
"packages/com.unity.postproessing/postprocessing/postprocessresources.bundle"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
71
ServerMod/cfg/config.json
Normal file
71
ServerMod/cfg/config.json
Normal file
@ -0,0 +1,71 @@
|
||||
{
|
||||
"ClearVision": {
|
||||
"Enabled": true
|
||||
},
|
||||
"GPNVG" : {
|
||||
"Enabled": false,
|
||||
"Intensity": 2.3,
|
||||
"NoiseIntensity": 0.0,
|
||||
"NoiseScale": 0.0,
|
||||
"DiffuseIntensity": 0.0,
|
||||
"Mask": "Anvis",
|
||||
"MaskSize": 1.5,
|
||||
"Red": 0,
|
||||
"Green": 200,
|
||||
"Blue": 200,
|
||||
"Alpha": 254
|
||||
},
|
||||
"N15" : {
|
||||
"Enabled": false,
|
||||
"Intensity": 2.3,
|
||||
"NoiseIntensity": 0.0,
|
||||
"NoiseScale": 0.0,
|
||||
"DiffuseIntensity": 0.0,
|
||||
"Mask": "Anvis",
|
||||
"MaskSize": 1.5,
|
||||
"Red": 0,
|
||||
"Green": 100,
|
||||
"Blue": 200,
|
||||
"Alpha": 254
|
||||
},
|
||||
"PVS14" : {
|
||||
"Enabled": false,
|
||||
"Intensity": 2.3,
|
||||
"NoiseIntensity": 0.0,
|
||||
"NoiseScale": 0.0,
|
||||
"DiffuseIntensity": 0.0,
|
||||
"Mask": "Anvis",
|
||||
"MaskSize": 1.5,
|
||||
"Red": 200,
|
||||
"Green": 100,
|
||||
"Blue": 100,
|
||||
"Alpha": 235
|
||||
},
|
||||
"PNV10T" : {
|
||||
"Enabled": false,
|
||||
"Intensity": 2.3,
|
||||
"NoiseIntensity": 0.0,
|
||||
"NoiseScale": 0.0,
|
||||
"DiffuseIntensity": 0.0,
|
||||
"Mask": "Anvis",
|
||||
"MaskSize": 1.5,
|
||||
"Red": 0,
|
||||
"Green": 200,
|
||||
"Blue": 0,
|
||||
"Alpha": 254
|
||||
},
|
||||
"T7" : {
|
||||
"Enabled": false,
|
||||
"Noise": false,
|
||||
"NoiseIntensity": 0.0,
|
||||
"MotionBlur": false,
|
||||
"Mask": "Anvis",
|
||||
"RampPalette": "BlackHot",
|
||||
"RampShift": 0.05,
|
||||
"MaskSize": 1.5,
|
||||
"HeatMin": 0.40,
|
||||
"ColdMax": 0.25,
|
||||
"ColorCoef": 1.5,
|
||||
"ClipPlane": 1000
|
||||
}
|
||||
}
|
29
ServerMod/package.json
Normal file
29
ServerMod/package.json
Normal file
@ -0,0 +1,29 @@
|
||||
{
|
||||
"name": "clearvision",
|
||||
"version": "2.0.6",
|
||||
"author": "LimboFPS",
|
||||
"license": "CC BY-NC 4.0",
|
||||
"main": "src/mod.js",
|
||||
"akiVersion": "~3.10.x",
|
||||
"loadBefore": [],
|
||||
"loadAfter": [],
|
||||
"incompatibilities": [],
|
||||
"isBundleMod": true,
|
||||
"scripts": {
|
||||
"setup": "npm i",
|
||||
"build": "node ./build.mjs",
|
||||
"buildinfo": "node ./build.mjs --verbose"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "20.11",
|
||||
"@typescript-eslint/eslint-plugin": "7.2",
|
||||
"@typescript-eslint/parser": "7.2",
|
||||
"archiver": "^6.0",
|
||||
"eslint": "8.57",
|
||||
"fs-extra": "11.2",
|
||||
"ignore": "^5.2",
|
||||
"tsyringe": "4.8.0",
|
||||
"typescript": "5.4",
|
||||
"winston": "3.12"
|
||||
}
|
||||
}
|
114
ServerMod/src/mod.ts
Normal file
114
ServerMod/src/mod.ts
Normal file
@ -0,0 +1,114 @@
|
||||
import { DependencyContainer } from "tsyringe";
|
||||
|
||||
import { IPostDBLoadMod } from "@spt/models/external/IPostDBLoadMod";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { DatabaseServer } from "@spt/servers/DatabaseServer";
|
||||
import modConfig from "../cfg/config.json";
|
||||
|
||||
class Mod implements IPostDBLoadMod
|
||||
{
|
||||
// Code added here will be run AFTER the server has started
|
||||
public postDBLoad(container: DependencyContainer): void
|
||||
{
|
||||
// get the logger from the server container
|
||||
const logger = container.resolve<ILogger>("WinstonLogger");
|
||||
try
|
||||
{
|
||||
const databaseServer = container.resolve<DatabaseServer>("DatabaseServer");
|
||||
const items = databaseServer.getTables().templates.items;
|
||||
|
||||
const pvs14 = items["57235b6f24597759bf5a30f1"];
|
||||
const n15 = items["5c066e3a0db834001b7353f0"];
|
||||
const gpnvg = items["5c0558060db834001b735271"];
|
||||
const pnv10 = items["5c0696830db834001d23f5da"];
|
||||
const t7 = items["5c110624d174af029e69734c"];
|
||||
|
||||
if (modConfig.ClearVision.Enabled)
|
||||
{
|
||||
//AN/PVS-14 Night Vision Monocular
|
||||
if (modConfig.PVS14.Enabled)
|
||||
{
|
||||
pvs14._props.Intensity = modConfig.PVS14.Intensity;
|
||||
pvs14._props.Mask = modConfig.PVS14.Mask;
|
||||
pvs14._props.MaskSize = modConfig.PVS14.MaskSize;
|
||||
pvs14._props.NoiseIntensity = modConfig.PVS14.NoiseIntensity;
|
||||
pvs14._props.NoiseScale = modConfig.PVS14.NoiseScale;
|
||||
pvs14._props.DiffuseIntensity = modConfig.PVS14.DiffuseIntensity;
|
||||
pvs14._props.Color.r = modConfig.PVS14.Red;
|
||||
pvs14._props.Color.g = modConfig.PVS14.Green;
|
||||
pvs14._props.Color.b = modConfig.PVS14.Blue;
|
||||
pvs14._props.Color.a = modConfig.PVS14.Alpha;
|
||||
logger.info("CV: AN/PVS14 Monocular tuned!");
|
||||
}
|
||||
|
||||
//Armasight N-15
|
||||
if (modConfig.N15.Enabled)
|
||||
{
|
||||
n15._props.Intensity = modConfig.N15.Intensity;
|
||||
n15._props.Mask = modConfig.N15.Mask;
|
||||
n15._props.MaskSize = modConfig.N15.MaskSize;
|
||||
n15._props.NoiseIntensity = modConfig.N15.NoiseIntensity;
|
||||
n15._props.NoiseScale = modConfig.N15.NoiseScale;
|
||||
n15._props.DiffuseIntensity = modConfig.N15.DiffuseIntensity;
|
||||
n15._props.Color.r = modConfig.N15.Red;
|
||||
n15._props.Color.g = modConfig.N15.Green;
|
||||
n15._props.Color.b = modConfig.N15.Blue;
|
||||
n15._props.Color.a = modConfig.N15.Alpha;
|
||||
logger.info("CV: Armasight N-15 tuned!");
|
||||
}
|
||||
//GPNVG-18
|
||||
if (modConfig.GPNVG.Enabled)
|
||||
{
|
||||
gpnvg._props.Intensity = modConfig.GPNVG.Intensity;
|
||||
gpnvg._props.Mask = modConfig.GPNVG.Mask;
|
||||
gpnvg._props.MaskSize = modConfig.GPNVG.MaskSize;
|
||||
gpnvg._props.NoiseIntensity = modConfig.GPNVG.NoiseIntensity;
|
||||
gpnvg._props.NoiseScale = modConfig.GPNVG.NoiseScale;
|
||||
gpnvg._props.DiffuseIntensity = modConfig.GPNVG.DiffuseIntensity;
|
||||
gpnvg._props.Color.r = modConfig.GPNVG.Red;
|
||||
gpnvg._props.Color.g = modConfig.GPNVG.Green;
|
||||
gpnvg._props.Color.b = modConfig.GPNVG.Blue;
|
||||
gpnvg._props.Color.a = modConfig.GPNVG.Alpha;
|
||||
logger.info("CV: GPNVG-18 tuned!");
|
||||
}
|
||||
//PNV-10T
|
||||
if (modConfig.PNV10T.Enabled)
|
||||
{
|
||||
pnv10._props.Intensity = modConfig.PNV10T.Intensity;
|
||||
pnv10._props.Mask = modConfig.PNV10T.Mask;
|
||||
pnv10._props.MaskSize = modConfig.PNV10T.MaskSize;
|
||||
pnv10._props.NoiseIntensity = modConfig.PNV10T.NoiseIntensity;
|
||||
pnv10._props.NoiseScale = modConfig.PNV10T.NoiseScale;
|
||||
pnv10._props.DiffuseIntensity = modConfig.PNV10T.DiffuseIntensity;
|
||||
pnv10._props.Color.r = modConfig.PNV10T.Red;
|
||||
pnv10._props.Color.g = modConfig.PNV10T.Green;
|
||||
pnv10._props.Color.b = modConfig.PNV10T.Blue;
|
||||
pnv10._props.Color.a = modConfig.PNV10T.Alpha;
|
||||
logger.info("CV: PNV-10T tuned!");
|
||||
}
|
||||
//T-7 Thermal Goggles
|
||||
if (modConfig.T7.Enabled)
|
||||
{
|
||||
t7._props.IsNoisy = modConfig.T7.Noise;
|
||||
t7._props.NoiseIntensity = modConfig.T7.NoiseIntensity;
|
||||
t7._props.IsMotionBlurred = modConfig.T7.MotionBlur;
|
||||
t7._props.Mask = modConfig.T7.Mask;
|
||||
t7._props.MaskSize = modConfig.T7.MaskSize;
|
||||
t7._props.HeatMin = modConfig.T7.HeatMin;
|
||||
t7._props.ColdMax = modConfig.T7.ColdMax;
|
||||
logger.info("CV: T-7 Thermal Goggles tuned!");
|
||||
}
|
||||
}
|
||||
else
|
||||
logger.warning("CV: No db changes made!")
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
logger.error("CV: Error loading mod");
|
||||
logger.error((e as Error).message);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { mod: new Mod() }
|
18
ServerMod/tsconfig.json
Normal file
18
ServerMod/tsconfig.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"allowJs": true,
|
||||
"module": "NodeNext",
|
||||
"target": "ES2022",
|
||||
"moduleResolution": "NodeNext",
|
||||
"esModuleInterop": true,
|
||||
"downlevelIteration": true,
|
||||
"experimentalDecorators": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"resolveJsonModule": true,
|
||||
"outDir": "tmp",
|
||||
"paths": {
|
||||
"@spt/*": ["./types/*"],
|
||||
},
|
||||
},
|
||||
"exclude": ["node_modules", "dist", "tmp"],
|
||||
}
|
6
ServerMod/types/ErrorHandler.d.ts
vendored
Normal file
6
ServerMod/types/ErrorHandler.d.ts
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
export declare class ErrorHandler {
|
||||
private logger;
|
||||
private readLine;
|
||||
constructor();
|
||||
handleCriticalError(err: Error): void;
|
||||
}
|
5
ServerMod/types/Program.d.ts
vendored
Normal file
5
ServerMod/types/Program.d.ts
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
export declare class Program {
|
||||
private errorHandler;
|
||||
constructor();
|
||||
start(): Promise<void>;
|
||||
}
|
21
ServerMod/types/callbacks/AchievementCallbacks.d.ts
vendored
Normal file
21
ServerMod/types/callbacks/AchievementCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
import { AchievementController } from "@spt/controllers/AchievementController";
|
||||
import { ProfileController } from "@spt/controllers/ProfileController";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { ICompletedAchievementsResponse } from "@spt/models/eft/profile/ICompletedAchievementsResponse";
|
||||
import { IGetAchievementsResponse } from "@spt/models/eft/profile/IGetAchievementsResponse";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
export declare class AchievementCallbacks {
|
||||
protected achievementController: AchievementController;
|
||||
protected profileController: ProfileController;
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
constructor(achievementController: AchievementController, profileController: ProfileController, httpResponse: HttpResponseUtil);
|
||||
/**
|
||||
* Handle client/achievement/list
|
||||
*/
|
||||
getAchievements(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetAchievementsResponse>;
|
||||
/**
|
||||
* Handle client/achievement/statistic
|
||||
*/
|
||||
statistic(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ICompletedAchievementsResponse>;
|
||||
}
|
45
ServerMod/types/callbacks/BotCallbacks.d.ts
vendored
Normal file
45
ServerMod/types/callbacks/BotCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,45 @@
|
||||
import { ApplicationContext } from "@spt/context/ApplicationContext";
|
||||
import { BotController } from "@spt/controllers/BotController";
|
||||
import { IGenerateBotsRequestData } from "@spt/models/eft/bot/IGenerateBotsRequestData";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { IBotBase } from "@spt/models/eft/common/tables/IBotBase";
|
||||
import { IDifficulties } from "@spt/models/eft/common/tables/IBotType";
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
export declare class BotCallbacks {
|
||||
protected botController: BotController;
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected applicationContext: ApplicationContext;
|
||||
constructor(botController: BotController, httpResponse: HttpResponseUtil, applicationContext: ApplicationContext);
|
||||
/**
|
||||
* Handle singleplayer/settings/bot/limit
|
||||
* Is called by client to define each bot roles wave limit
|
||||
* @returns string
|
||||
*/
|
||||
getBotLimit(url: string, info: IEmptyRequestData, sessionID: string): string;
|
||||
/**
|
||||
* Handle singleplayer/settings/bot/difficulty
|
||||
* @returns string
|
||||
*/
|
||||
getBotDifficulty(url: string, info: IEmptyRequestData, sessionID: string): string;
|
||||
/**
|
||||
* Handle singleplayer/settings/bot/difficulties
|
||||
* @returns dictionary of every bot and its diffiulty settings
|
||||
*/
|
||||
getAllBotDifficulties(url: string, info: IEmptyRequestData, sessionID: string): Record<string, IDifficulties>;
|
||||
/**
|
||||
* Handle client/game/bot/generate
|
||||
* @returns IGetBodyResponseData
|
||||
*/
|
||||
generateBots(url: string, info: IGenerateBotsRequestData, sessionID: string): Promise<IGetBodyResponseData<IBotBase[]>>;
|
||||
/**
|
||||
* Handle singleplayer/settings/bot/maxCap
|
||||
* @returns string
|
||||
*/
|
||||
getBotCap(url: string, info: IEmptyRequestData, sessionID: string): string;
|
||||
/**
|
||||
* Handle singleplayer/settings/bot/getBotBehaviours
|
||||
* @returns string
|
||||
*/
|
||||
getBotBehaviours(): string;
|
||||
}
|
34
ServerMod/types/callbacks/BuildsCallbacks.d.ts
vendored
Normal file
34
ServerMod/types/callbacks/BuildsCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
import { BuildController } from "@spt/controllers/BuildController";
|
||||
import { ISetMagazineRequest } from "@spt/models/eft/builds/ISetMagazineRequest";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData";
|
||||
import { IPresetBuildActionRequestData } from "@spt/models/eft/presetBuild/IPresetBuildActionRequestData";
|
||||
import { IRemoveBuildRequestData } from "@spt/models/eft/presetBuild/IRemoveBuildRequestData";
|
||||
import { IUserBuilds } from "@spt/models/eft/profile/ISptProfile";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
export declare class BuildsCallbacks {
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected buildController: BuildController;
|
||||
constructor(httpResponse: HttpResponseUtil, buildController: BuildController);
|
||||
/**
|
||||
* Handle client/builds/list
|
||||
*/
|
||||
getBuilds(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IUserBuilds>;
|
||||
/**
|
||||
* Handle client/builds/magazine/save
|
||||
*/
|
||||
createMagazineTemplate(url: string, request: ISetMagazineRequest, sessionID: string): INullResponseData;
|
||||
/**
|
||||
* Handle client/builds/weapon/save
|
||||
*/
|
||||
setWeapon(url: string, info: IPresetBuildActionRequestData, sessionID: string): INullResponseData;
|
||||
/**
|
||||
* Handle client/builds/equipment/save
|
||||
*/
|
||||
setEquipment(url: string, info: IPresetBuildActionRequestData, sessionID: string): INullResponseData;
|
||||
/**
|
||||
* Handle client/builds/delete
|
||||
*/
|
||||
deleteBuild(url: string, info: IRemoveBuildRequestData, sessionID: string): INullResponseData;
|
||||
}
|
16
ServerMod/types/callbacks/BundleCallbacks.d.ts
vendored
Normal file
16
ServerMod/types/callbacks/BundleCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
import { BundleLoader } from "@spt/loaders/BundleLoader";
|
||||
import { IHttpConfig } from "@spt/models/spt/config/IHttpConfig";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
export declare class BundleCallbacks {
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected bundleLoader: BundleLoader;
|
||||
protected configServer: ConfigServer;
|
||||
protected httpConfig: IHttpConfig;
|
||||
constructor(httpResponse: HttpResponseUtil, bundleLoader: BundleLoader, configServer: ConfigServer);
|
||||
/**
|
||||
* Handle singleplayer/bundles
|
||||
*/
|
||||
getBundles(url: string, info: any, sessionID: string): string;
|
||||
getBundle(url: string, info: any, sessionID: string): string;
|
||||
}
|
28
ServerMod/types/callbacks/ClientLogCallbacks.d.ts
vendored
Normal file
28
ServerMod/types/callbacks/ClientLogCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,28 @@
|
||||
import { ClientLogController } from "@spt/controllers/ClientLogController";
|
||||
import { ModLoadOrder } from "@spt/loaders/ModLoadOrder";
|
||||
import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData";
|
||||
import { IClientLogRequest } from "@spt/models/spt/logging/IClientLogRequest";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
/** Handle client logging related events */
|
||||
export declare class ClientLogCallbacks {
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected clientLogController: ClientLogController;
|
||||
protected configServer: ConfigServer;
|
||||
protected localisationService: LocalisationService;
|
||||
protected modLoadOrder: ModLoadOrder;
|
||||
constructor(httpResponse: HttpResponseUtil, clientLogController: ClientLogController, configServer: ConfigServer, localisationService: LocalisationService, modLoadOrder: ModLoadOrder);
|
||||
/**
|
||||
* Handle /singleplayer/log
|
||||
*/
|
||||
clientLog(url: string, info: IClientLogRequest, sessionID: string): INullResponseData;
|
||||
/**
|
||||
* Handle /singleplayer/release
|
||||
*/
|
||||
releaseNotes(): string;
|
||||
/**
|
||||
* Handle /singleplayer/enableBSGlogging
|
||||
*/
|
||||
bsgLogging(): string;
|
||||
}
|
35
ServerMod/types/callbacks/CustomizationCallbacks.d.ts
vendored
Normal file
35
ServerMod/types/callbacks/CustomizationCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
import { CustomizationController } from "@spt/controllers/CustomizationController";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { ISuit } from "@spt/models/eft/common/tables/ITrader";
|
||||
import { IBuyClothingRequestData } from "@spt/models/eft/customization/IBuyClothingRequestData";
|
||||
import { IGetSuitsResponse } from "@spt/models/eft/customization/IGetSuitsResponse";
|
||||
import { IWearClothingRequestData } from "@spt/models/eft/customization/IWearClothingRequestData";
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { SaveServer } from "@spt/servers/SaveServer";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
export declare class CustomizationCallbacks {
|
||||
protected customizationController: CustomizationController;
|
||||
protected saveServer: SaveServer;
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
constructor(customizationController: CustomizationController, saveServer: SaveServer, httpResponse: HttpResponseUtil);
|
||||
/**
|
||||
* Handle client/trading/customization/storage
|
||||
* @returns IGetSuitsResponse
|
||||
*/
|
||||
getSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetSuitsResponse>;
|
||||
/**
|
||||
* Handle client/trading/customization
|
||||
* @returns ISuit[]
|
||||
*/
|
||||
getTraderSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ISuit[]>;
|
||||
/**
|
||||
* Handle CustomizationWear event
|
||||
*/
|
||||
wearClothing(pmcData: IPmcData, body: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle CustomizationBuy event
|
||||
*/
|
||||
buyClothing(pmcData: IPmcData, body: IBuyClothingRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
}
|
86
ServerMod/types/callbacks/DataCallbacks.d.ts
vendored
Normal file
86
ServerMod/types/callbacks/DataCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,86 @@
|
||||
import { HideoutController } from "@spt/controllers/HideoutController";
|
||||
import { TraderController } from "@spt/controllers/TraderController";
|
||||
import { TraderHelper } from "@spt/helpers/TraderHelper";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { IGlobals } from "@spt/models/eft/common/IGlobals";
|
||||
import { ICustomizationItem } from "@spt/models/eft/common/tables/ICustomizationItem";
|
||||
import { IHandbookBase } from "@spt/models/eft/common/tables/IHandbookBase";
|
||||
import { IGetItemPricesResponse } from "@spt/models/eft/game/IGetItemPricesResponse";
|
||||
import { IHideoutArea } from "@spt/models/eft/hideout/IHideoutArea";
|
||||
import { IHideoutProductionData } from "@spt/models/eft/hideout/IHideoutProduction";
|
||||
import { IHideoutSettingsBase } from "@spt/models/eft/hideout/IHideoutSettingsBase";
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { ISettingsBase } from "@spt/models/spt/server/ISettingsBase";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
import { TimeUtil } from "@spt/utils/TimeUtil";
|
||||
/**
|
||||
* Handle client requests
|
||||
*/
|
||||
export declare class DataCallbacks {
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected timeUtil: TimeUtil;
|
||||
protected traderHelper: TraderHelper;
|
||||
protected databaseService: DatabaseService;
|
||||
protected traderController: TraderController;
|
||||
protected hideoutController: HideoutController;
|
||||
constructor(httpResponse: HttpResponseUtil, timeUtil: TimeUtil, traderHelper: TraderHelper, databaseService: DatabaseService, traderController: TraderController, hideoutController: HideoutController);
|
||||
/**
|
||||
* Handle client/settings
|
||||
* @returns ISettingsBase
|
||||
*/
|
||||
getSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ISettingsBase>;
|
||||
/**
|
||||
* Handle client/globals
|
||||
* @returns IGlobals
|
||||
*/
|
||||
getGlobals(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGlobals>;
|
||||
/**
|
||||
* Handle client/items
|
||||
* @returns string
|
||||
*/
|
||||
getTemplateItems(url: string, info: IEmptyRequestData, sessionID: string): string;
|
||||
/**
|
||||
* Handle client/handbook/templates
|
||||
* @returns IHandbookBase
|
||||
*/
|
||||
getTemplateHandbook(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHandbookBase>;
|
||||
/**
|
||||
* Handle client/customization
|
||||
* @returns Record<string, ICustomizationItem
|
||||
*/
|
||||
getTemplateSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<Record<string, ICustomizationItem>>;
|
||||
/**
|
||||
* Handle client/account/customization
|
||||
* @returns string[]
|
||||
*/
|
||||
getTemplateCharacter(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<string[]>;
|
||||
/**
|
||||
* Handle client/hideout/settings
|
||||
* @returns IHideoutSettingsBase
|
||||
*/
|
||||
getHideoutSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutSettingsBase>;
|
||||
getHideoutAreas(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutArea[]>;
|
||||
getHideoutProduction(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutProductionData>;
|
||||
/**
|
||||
* Handle client/languages
|
||||
*/
|
||||
getLocalesLanguages(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<Record<string, string>>;
|
||||
/**
|
||||
* Handle client/menu/locale
|
||||
*/
|
||||
getLocalesMenu(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<string>;
|
||||
/**
|
||||
* Handle client/locale
|
||||
*/
|
||||
getLocalesGlobal(url: string, info: IEmptyRequestData, sessionID: string): string;
|
||||
/**
|
||||
* Handle client/hideout/qte/list
|
||||
*/
|
||||
getQteList(url: string, info: IEmptyRequestData, sessionID: string): string;
|
||||
/**
|
||||
* Handle client/items/prices/
|
||||
* Called when viewing a traders assorts
|
||||
*/
|
||||
getItemPrices(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetItemPricesResponse>;
|
||||
}
|
111
ServerMod/types/callbacks/DialogueCallbacks.d.ts
vendored
Normal file
111
ServerMod/types/callbacks/DialogueCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,111 @@
|
||||
import { DialogueController } from "@spt/controllers/DialogueController";
|
||||
import { OnUpdate } from "@spt/di/OnUpdate";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { IUIDRequestData } from "@spt/models/eft/common/request/IUIDRequestData";
|
||||
import { IAcceptFriendRequestData, ICancelFriendRequestData, IDeclineFriendRequestData } from "@spt/models/eft/dialog/IAcceptFriendRequestData";
|
||||
import { IAddUserGroupMailRequest } from "@spt/models/eft/dialog/IAddUserGroupMailRequest";
|
||||
import { IChangeGroupMailOwnerRequest } from "@spt/models/eft/dialog/IChangeGroupMailOwnerRequest";
|
||||
import { IChatServer } from "@spt/models/eft/dialog/IChatServer";
|
||||
import { IClearMailMessageRequest } from "@spt/models/eft/dialog/IClearMailMessageRequest";
|
||||
import { ICreateGroupMailRequest } from "@spt/models/eft/dialog/ICreateGroupMailRequest";
|
||||
import { IDeleteFriendRequest } from "@spt/models/eft/dialog/IDeleteFriendRequest";
|
||||
import { IFriendRequestData } from "@spt/models/eft/dialog/IFriendRequestData";
|
||||
import { IFriendRequestSendResponse } from "@spt/models/eft/dialog/IFriendRequestSendResponse";
|
||||
import { IGetAllAttachmentsRequestData } from "@spt/models/eft/dialog/IGetAllAttachmentsRequestData";
|
||||
import { IGetAllAttachmentsResponse } from "@spt/models/eft/dialog/IGetAllAttachmentsResponse";
|
||||
import { IGetChatServerListRequestData } from "@spt/models/eft/dialog/IGetChatServerListRequestData";
|
||||
import { IGetFriendListDataResponse } from "@spt/models/eft/dialog/IGetFriendListDataResponse";
|
||||
import { IGetMailDialogInfoRequestData } from "@spt/models/eft/dialog/IGetMailDialogInfoRequestData";
|
||||
import { IGetMailDialogListRequestData } from "@spt/models/eft/dialog/IGetMailDialogListRequestData";
|
||||
import { IGetMailDialogViewRequestData } from "@spt/models/eft/dialog/IGetMailDialogViewRequestData";
|
||||
import { IGetMailDialogViewResponseData } from "@spt/models/eft/dialog/IGetMailDialogViewResponseData";
|
||||
import { IPinDialogRequestData } from "@spt/models/eft/dialog/IPinDialogRequestData";
|
||||
import { IRemoveDialogRequestData } from "@spt/models/eft/dialog/IRemoveDialogRequestData";
|
||||
import { IRemoveMailMessageRequest } from "@spt/models/eft/dialog/IRemoveMailMessageRequest";
|
||||
import { IRemoveUserGroupMailRequest } from "@spt/models/eft/dialog/IRemoveUserGroupMailRequest";
|
||||
import { ISendMessageRequest } from "@spt/models/eft/dialog/ISendMessageRequest";
|
||||
import { ISetDialogReadRequestData } from "@spt/models/eft/dialog/ISetDialogReadRequestData";
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData";
|
||||
import { IDialogueInfo } from "@spt/models/eft/profile/ISptProfile";
|
||||
import { HashUtil } from "@spt/utils/HashUtil";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
import { TimeUtil } from "@spt/utils/TimeUtil";
|
||||
export declare class DialogueCallbacks implements OnUpdate {
|
||||
protected hashUtil: HashUtil;
|
||||
protected timeUtil: TimeUtil;
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected dialogueController: DialogueController;
|
||||
constructor(hashUtil: HashUtil, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, dialogueController: DialogueController);
|
||||
/**
|
||||
* Handle client/friend/list
|
||||
* @returns IGetFriendListDataResponse
|
||||
*/
|
||||
getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetFriendListDataResponse>;
|
||||
/**
|
||||
* Handle client/chatServer/list
|
||||
* @returns IChatServer[]
|
||||
*/
|
||||
getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<IChatServer[]>;
|
||||
/** Handle client/mail/dialog/list */
|
||||
getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<IDialogueInfo[]>;
|
||||
/** Handle client/mail/dialog/view */
|
||||
getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>;
|
||||
/** Handle client/mail/dialog/info */
|
||||
getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<IDialogueInfo>;
|
||||
/** Handle client/mail/dialog/remove */
|
||||
removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
|
||||
/** Handle client/mail/dialog/pin */
|
||||
pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
|
||||
/** Handle client/mail/dialog/unpin */
|
||||
unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
|
||||
/** Handle client/mail/dialog/read */
|
||||
setRead(url: string, info: ISetDialogReadRequestData, sessionID: string): IGetBodyResponseData<any[]>;
|
||||
/**
|
||||
* Handle client/mail/dialog/getAllAttachments
|
||||
* @returns IGetAllAttachmentsResponse
|
||||
*/
|
||||
getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse | undefined>;
|
||||
/** Handle client/mail/msg/send */
|
||||
sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<string>;
|
||||
/** Handle client/friend/request/list/outbox */
|
||||
listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
|
||||
/**
|
||||
* Handle client/friend/request/list/inbox
|
||||
*/
|
||||
listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
|
||||
/**
|
||||
* Handle client/friend/request/send
|
||||
*/
|
||||
sendFriendRequest(url: string, request: IFriendRequestData, sessionID: string): IGetBodyResponseData<IFriendRequestSendResponse>;
|
||||
/**
|
||||
* Handle client/friend/request/accept-all
|
||||
*/
|
||||
acceptAllFriendRequests(url: string, request: IEmptyRequestData, sessionID: string): INullResponseData;
|
||||
/**
|
||||
* Handle client/friend/request/accept
|
||||
*/
|
||||
acceptFriendRequest(url: string, request: IAcceptFriendRequestData, sessionID: string): IGetBodyResponseData<boolean>;
|
||||
/**
|
||||
* Handle client/friend/request/decline
|
||||
*/
|
||||
declineFriendRequest(url: string, request: IDeclineFriendRequestData, sessionID: string): IGetBodyResponseData<boolean>;
|
||||
/**
|
||||
* Handle client/friend/request/cancel
|
||||
*/
|
||||
cancelFriendRequest(url: string, request: ICancelFriendRequestData, sessionID: string): IGetBodyResponseData<boolean>;
|
||||
/** Handle client/friend/delete */
|
||||
deleteFriend(url: string, request: IDeleteFriendRequest, sessionID: string): INullResponseData;
|
||||
/** Handle client/friend/ignore/set */
|
||||
ignoreFriend(url: string, request: IUIDRequestData, sessionID: string): INullResponseData;
|
||||
/** Handle client/friend/ignore/remove */
|
||||
unIgnoreFriend(url: string, request: IUIDRequestData, sessionID: string): INullResponseData;
|
||||
clearMail(url: string, request: IClearMailMessageRequest, sessionID: string): IGetBodyResponseData<any[]>;
|
||||
removeMail(url: string, request: IRemoveMailMessageRequest, sessionID: string): IGetBodyResponseData<any[]>;
|
||||
createGroupMail(url: string, info: ICreateGroupMailRequest, sessionID: string): IGetBodyResponseData<any[]>;
|
||||
changeMailGroupOwner(url: string, info: IChangeGroupMailOwnerRequest, sessionID: string): IGetBodyResponseData<any[]>;
|
||||
addUserToMail(url: string, info: IAddUserGroupMailRequest, sessionID: string): IGetBodyResponseData<any[]>;
|
||||
removeUserFromMail(url: string, info: IRemoveUserGroupMailRequest, sessionID: string): IGetBodyResponseData<any[]>;
|
||||
onUpdate(timeSinceLastRun: number): Promise<boolean>;
|
||||
getRoute(): string;
|
||||
}
|
106
ServerMod/types/callbacks/GameCallbacks.d.ts
vendored
Normal file
106
ServerMod/types/callbacks/GameCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,106 @@
|
||||
import { GameController } from "@spt/controllers/GameController";
|
||||
import { OnLoad } from "@spt/di/OnLoad";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { IUIDRequestData } from "@spt/models/eft/common/request/IUIDRequestData";
|
||||
import { ICheckVersionResponse } from "@spt/models/eft/game/ICheckVersionResponse";
|
||||
import { ICurrentGroupResponse } from "@spt/models/eft/game/ICurrentGroupResponse";
|
||||
import { IGameConfigResponse } from "@spt/models/eft/game/IGameConfigResponse";
|
||||
import { IGameEmptyCrcRequestData } from "@spt/models/eft/game/IGameEmptyCrcRequestData";
|
||||
import { IGameKeepAliveResponse } from "@spt/models/eft/game/IGameKeepAliveResponse";
|
||||
import { IGameLogoutResponseData } from "@spt/models/eft/game/IGameLogoutResponseData";
|
||||
import { IGameModeRequestData } from "@spt/models/eft/game/IGameModeRequestData";
|
||||
import { IGameModeResponse } from "@spt/models/eft/game/IGameModeResponse";
|
||||
import { IGameStartResponse } from "@spt/models/eft/game/IGameStartResponse";
|
||||
import { IGetRaidTimeRequest } from "@spt/models/eft/game/IGetRaidTimeRequest";
|
||||
import { IGetRaidTimeResponse } from "@spt/models/eft/game/IGetRaidTimeResponse";
|
||||
import { ISendSurveyOpinionRequest } from "@spt/models/eft/game/ISendSurveyOpinionRequest";
|
||||
import { IServerDetails } from "@spt/models/eft/game/IServerDetails";
|
||||
import { ISurveyResponseData } from "@spt/models/eft/game/ISurveyResponseData";
|
||||
import { IVersionValidateRequestData } from "@spt/models/eft/game/IVersionValidateRequestData";
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData";
|
||||
import { SaveServer } from "@spt/servers/SaveServer";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
import { Watermark } from "@spt/utils/Watermark";
|
||||
export declare class GameCallbacks implements OnLoad {
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected watermark: Watermark;
|
||||
protected saveServer: SaveServer;
|
||||
protected gameController: GameController;
|
||||
constructor(httpResponse: HttpResponseUtil, watermark: Watermark, saveServer: SaveServer, gameController: GameController);
|
||||
onLoad(): Promise<void>;
|
||||
getRoute(): string;
|
||||
/**
|
||||
* Handle client/game/version/validate
|
||||
* @returns INullResponseData
|
||||
*/
|
||||
versionValidate(url: string, info: IVersionValidateRequestData, sessionID: string): INullResponseData;
|
||||
/**
|
||||
* Handle client/game/start
|
||||
* @returns IGameStartResponse
|
||||
*/
|
||||
gameStart(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGameStartResponse>;
|
||||
/**
|
||||
* Handle client/game/logout
|
||||
* Save profiles on game close
|
||||
* @returns IGameLogoutResponseData
|
||||
*/
|
||||
gameLogout(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGameLogoutResponseData>;
|
||||
/**
|
||||
* Handle client/game/config
|
||||
* @returns IGameConfigResponse
|
||||
*/
|
||||
getGameConfig(url: string, info: IGameEmptyCrcRequestData, sessionID: string): IGetBodyResponseData<IGameConfigResponse>;
|
||||
/**
|
||||
* Handle client/game/mode
|
||||
* @returns IGameModeResponse
|
||||
*/
|
||||
getGameMode(url: string, info: IGameModeRequestData, sessionID: string): IGetBodyResponseData<IGameModeResponse>;
|
||||
/**
|
||||
* Handle client/server/list
|
||||
*/
|
||||
getServer(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IServerDetails[]>;
|
||||
/**
|
||||
* Handle client/match/group/current
|
||||
*/
|
||||
getCurrentGroup(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ICurrentGroupResponse>;
|
||||
/**
|
||||
* Handle client/checkVersion
|
||||
*/
|
||||
validateGameVersion(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ICheckVersionResponse>;
|
||||
/**
|
||||
* Handle client/game/keepalive
|
||||
* @returns IGameKeepAliveResponse
|
||||
*/
|
||||
gameKeepalive(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGameKeepAliveResponse>;
|
||||
/**
|
||||
* Handle singleplayer/settings/version
|
||||
* @returns string
|
||||
*/
|
||||
getVersion(url: string, info: IEmptyRequestData, sessionID: string): string;
|
||||
/**
|
||||
* Handle /client/report/send & /client/reports/lobby/send
|
||||
* @returns INullResponseData
|
||||
*/
|
||||
reportNickname(url: string, info: IUIDRequestData, sessionID: string): INullResponseData;
|
||||
/**
|
||||
* Handle singleplayer/settings/getRaidTime
|
||||
* @returns string
|
||||
*/
|
||||
getRaidTime(url: string, request: IGetRaidTimeRequest, sessionID: string): IGetRaidTimeResponse;
|
||||
/**
|
||||
* Handle /client/survey
|
||||
* @returns INullResponseData
|
||||
*/
|
||||
getSurvey(url: string, request: IEmptyRequestData, sessionId: string): INullResponseData | IGetBodyResponseData<ISurveyResponseData>;
|
||||
/**
|
||||
* Handle client/survey/view
|
||||
* @returns INullResponseData
|
||||
*/
|
||||
getSurveyView(url: string, request: any, sessionId: string): INullResponseData;
|
||||
/**
|
||||
* Handle client/survey/opinion
|
||||
* @returns INullResponseData
|
||||
*/
|
||||
sendSurveyOpinion(url: string, request: ISendSurveyOpinionRequest, sessionId: string): INullResponseData;
|
||||
}
|
8
ServerMod/types/callbacks/HandbookCallbacks.d.ts
vendored
Normal file
8
ServerMod/types/callbacks/HandbookCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
import { HandbookController } from "@spt/controllers/HandbookController";
|
||||
import { OnLoad } from "@spt/di/OnLoad";
|
||||
export declare class HandbookCallbacks implements OnLoad {
|
||||
protected handbookController: HandbookController;
|
||||
constructor(handbookController: HandbookController);
|
||||
onLoad(): Promise<void>;
|
||||
getRoute(): string;
|
||||
}
|
39
ServerMod/types/callbacks/HealthCallbacks.d.ts
vendored
Normal file
39
ServerMod/types/callbacks/HealthCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
import { HealthController } from "@spt/controllers/HealthController";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IHealthTreatmentRequestData } from "@spt/models/eft/health/IHealthTreatmentRequestData";
|
||||
import { IOffraidEatRequestData } from "@spt/models/eft/health/IOffraidEatRequestData";
|
||||
import { IOffraidHealRequestData } from "@spt/models/eft/health/IOffraidHealRequestData";
|
||||
import { IWorkoutData } from "@spt/models/eft/health/IWorkoutData";
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
export declare class HealthCallbacks {
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected healthController: HealthController;
|
||||
constructor(httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, healthController: HealthController);
|
||||
/**
|
||||
* Custom spt server request found in modules/QTEPatch.cs
|
||||
* @param url
|
||||
* @param info HealthListener.Instance.CurrentHealth class
|
||||
* @param sessionID session id
|
||||
* @returns empty response, no data sent back to client
|
||||
*/
|
||||
handleWorkoutEffects(url: string, info: IWorkoutData, sessionID: string): IGetBodyResponseData<string>;
|
||||
/**
|
||||
* Handle Eat
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle Heal
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle RestoreHealth
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
healthTreatment(pmcData: IPmcData, info: IHealthTreatmentRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
}
|
90
ServerMod/types/callbacks/HideoutCallbacks.d.ts
vendored
Normal file
90
ServerMod/types/callbacks/HideoutCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,90 @@
|
||||
import { HideoutController } from "@spt/controllers/HideoutController";
|
||||
import { OnUpdate } from "@spt/di/OnUpdate";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IHandleQTEEventRequestData } from "@spt/models/eft/hideout/IHandleQTEEventRequestData";
|
||||
import { IHideoutCancelProductionRequestData } from "@spt/models/eft/hideout/IHideoutCancelProductionRequestData";
|
||||
import { IHideoutCircleOfCultistProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutCircleOfCultistProductionStartRequestData";
|
||||
import { IHideoutContinuousProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutContinuousProductionStartRequestData";
|
||||
import { IHideoutDeleteProductionRequestData } from "@spt/models/eft/hideout/IHideoutDeleteProductionRequestData";
|
||||
import { IHideoutImproveAreaRequestData } from "@spt/models/eft/hideout/IHideoutImproveAreaRequestData";
|
||||
import { IHideoutPutItemInRequestData } from "@spt/models/eft/hideout/IHideoutPutItemInRequestData";
|
||||
import { IHideoutScavCaseStartRequestData } from "@spt/models/eft/hideout/IHideoutScavCaseStartRequestData";
|
||||
import { IHideoutSingleProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutSingleProductionStartRequestData";
|
||||
import { IHideoutTakeItemOutRequestData } from "@spt/models/eft/hideout/IHideoutTakeItemOutRequestData";
|
||||
import { IHideoutTakeProductionRequestData } from "@spt/models/eft/hideout/IHideoutTakeProductionRequestData";
|
||||
import { IHideoutToggleAreaRequestData } from "@spt/models/eft/hideout/IHideoutToggleAreaRequestData";
|
||||
import { IHideoutUpgradeCompleteRequestData } from "@spt/models/eft/hideout/IHideoutUpgradeCompleteRequestData";
|
||||
import { IHideoutUpgradeRequestData } from "@spt/models/eft/hideout/IHideoutUpgradeRequestData";
|
||||
import { IRecordShootingRangePoints } from "@spt/models/eft/hideout/IRecordShootingRangePoints";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { IHideoutConfig } from "@spt/models/spt/config/IHideoutConfig";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
export declare class HideoutCallbacks implements OnUpdate {
|
||||
protected hideoutController: HideoutController;
|
||||
protected configServer: ConfigServer;
|
||||
protected hideoutConfig: IHideoutConfig;
|
||||
constructor(hideoutController: HideoutController, // TODO: delay needed
|
||||
configServer: ConfigServer);
|
||||
/**
|
||||
* Handle HideoutUpgrade event
|
||||
*/
|
||||
upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle HideoutUpgradeComplete event
|
||||
*/
|
||||
upgradeComplete(pmcData: IPmcData, body: IHideoutUpgradeCompleteRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle HideoutPutItemsInAreaSlots
|
||||
*/
|
||||
putItemsInAreaSlots(pmcData: IPmcData, body: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle HideoutTakeItemsFromAreaSlots event
|
||||
*/
|
||||
takeItemsFromAreaSlots(pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle HideoutToggleArea event
|
||||
*/
|
||||
toggleArea(pmcData: IPmcData, body: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle HideoutSingleProductionStart event
|
||||
*/
|
||||
singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle HideoutScavCaseProductionStart event
|
||||
*/
|
||||
scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle HideoutContinuousProductionStart
|
||||
*/
|
||||
continuousProductionStart(pmcData: IPmcData, body: IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle HideoutTakeProduction event
|
||||
*/
|
||||
takeProduction(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle HideoutQuickTimeEvent
|
||||
*/
|
||||
handleQTEEvent(pmcData: IPmcData, request: IHandleQTEEventRequestData, sessionId: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle client/game/profile/items/moving - RecordShootingRangePoints
|
||||
*/
|
||||
recordShootingRangePoints(pmcData: IPmcData, request: IRecordShootingRangePoints, sessionId: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle client/game/profile/items/moving - RecordShootingRangePoints
|
||||
*/
|
||||
improveArea(pmcData: IPmcData, request: IHideoutImproveAreaRequestData, sessionId: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle client/game/profile/items/moving - HideoutCancelProductionCommand
|
||||
*/
|
||||
cancelProduction(pmcData: IPmcData, request: IHideoutCancelProductionRequestData, sessionId: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle client/game/profile/items/moving - HideoutCircleOfCultistProductionStart
|
||||
*/
|
||||
circleOfCultistProductionStart(pmcData: IPmcData, request: IHideoutCircleOfCultistProductionStartRequestData, sessionId: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle client/game/profile/items/moving - HideoutDeleteProductionCommand
|
||||
*/
|
||||
hideoutDeleteProductionCommand(pmcData: IPmcData, request: IHideoutDeleteProductionRequestData, sessionId: string): IItemEventRouterResponse;
|
||||
onUpdate(timeSinceLastRun: number): Promise<boolean>;
|
||||
getRoute(): string;
|
||||
}
|
9
ServerMod/types/callbacks/HttpCallbacks.d.ts
vendored
Normal file
9
ServerMod/types/callbacks/HttpCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
import { OnLoad } from "@spt/di/OnLoad";
|
||||
import { HttpServer } from "@spt/servers/HttpServer";
|
||||
export declare class HttpCallbacks implements OnLoad {
|
||||
protected httpServer: HttpServer;
|
||||
constructor(httpServer: HttpServer);
|
||||
onLoad(): Promise<void>;
|
||||
getRoute(): string;
|
||||
getImage(): string;
|
||||
}
|
38
ServerMod/types/callbacks/InraidCallbacks.d.ts
vendored
Normal file
38
ServerMod/types/callbacks/InraidCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
import { InraidController } from "@spt/controllers/InraidController";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData";
|
||||
import { IRegisterPlayerRequestData } from "@spt/models/eft/inRaid/IRegisterPlayerRequestData";
|
||||
import { IScavSaveRequestData } from "@spt/models/eft/inRaid/IScavSaveRequestData";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
/**
|
||||
* Handle client requests
|
||||
*/
|
||||
export declare class InraidCallbacks {
|
||||
protected inraidController: InraidController;
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
constructor(inraidController: InraidController, httpResponse: HttpResponseUtil);
|
||||
/**
|
||||
* Handle client/location/getLocalloot
|
||||
* Store active map in profile + applicationContext
|
||||
* @param url
|
||||
* @param info register player request
|
||||
* @param sessionID Session id
|
||||
* @returns Null http response
|
||||
*/
|
||||
registerPlayer(url: string, info: IRegisterPlayerRequestData, sessionID: string): INullResponseData;
|
||||
/**
|
||||
* Handle raid/profile/scavsave
|
||||
* @param url
|
||||
* @param info Save progress request
|
||||
* @param sessionID Session id
|
||||
* @returns Null http response
|
||||
*/
|
||||
saveProgress(url: string, info: IScavSaveRequestData, sessionID: string): INullResponseData;
|
||||
/**
|
||||
* Handle singleplayer/settings/raid/menu
|
||||
* @returns JSON as string
|
||||
*/
|
||||
getRaidMenuSettings(): string;
|
||||
getTraitorScavHostileChance(url: string, info: IEmptyRequestData, sessionId: string): string;
|
||||
getBossConvertSettings(url: string, info: IEmptyRequestData, sessionId: string): string;
|
||||
}
|
32
ServerMod/types/callbacks/InsuranceCallbacks.d.ts
vendored
Normal file
32
ServerMod/types/callbacks/InsuranceCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
import { InsuranceController } from "@spt/controllers/InsuranceController";
|
||||
import { OnUpdate } from "@spt/di/OnUpdate";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { IGetInsuranceCostRequestData } from "@spt/models/eft/insurance/IGetInsuranceCostRequestData";
|
||||
import { IGetInsuranceCostResponseData } from "@spt/models/eft/insurance/IGetInsuranceCostResponseData";
|
||||
import { IInsureRequestData } from "@spt/models/eft/insurance/IInsureRequestData";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { IInsuranceConfig } from "@spt/models/spt/config/IInsuranceConfig";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { InsuranceService } from "@spt/services/InsuranceService";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
export declare class InsuranceCallbacks implements OnUpdate {
|
||||
protected insuranceController: InsuranceController;
|
||||
protected insuranceService: InsuranceService;
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected configServer: ConfigServer;
|
||||
protected insuranceConfig: IInsuranceConfig;
|
||||
constructor(insuranceController: InsuranceController, insuranceService: InsuranceService, httpResponse: HttpResponseUtil, configServer: ConfigServer);
|
||||
/**
|
||||
* Handle client/insurance/items/list/cost
|
||||
* @returns IGetInsuranceCostResponseData
|
||||
*/
|
||||
getInsuranceCost(url: string, info: IGetInsuranceCostRequestData, sessionID: string): IGetBodyResponseData<IGetInsuranceCostResponseData>;
|
||||
/**
|
||||
* Handle Insure event
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
onUpdate(secondsSinceLastRun: number): Promise<boolean>;
|
||||
getRoute(): string;
|
||||
}
|
63
ServerMod/types/callbacks/InventoryCallbacks.d.ts
vendored
Normal file
63
ServerMod/types/callbacks/InventoryCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,63 @@
|
||||
import { InventoryController } from "@spt/controllers/InventoryController";
|
||||
import { QuestController } from "@spt/controllers/QuestController";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IInventoryBindRequestData } from "@spt/models/eft/inventory/IInventoryBindRequestData";
|
||||
import { IInventoryCreateMarkerRequestData } from "@spt/models/eft/inventory/IInventoryCreateMarkerRequestData";
|
||||
import { IInventoryDeleteMarkerRequestData } from "@spt/models/eft/inventory/IInventoryDeleteMarkerRequestData";
|
||||
import { IInventoryEditMarkerRequestData } from "@spt/models/eft/inventory/IInventoryEditMarkerRequestData";
|
||||
import { IInventoryExamineRequestData } from "@spt/models/eft/inventory/IInventoryExamineRequestData";
|
||||
import { IInventoryFoldRequestData } from "@spt/models/eft/inventory/IInventoryFoldRequestData";
|
||||
import { IInventoryMergeRequestData } from "@spt/models/eft/inventory/IInventoryMergeRequestData";
|
||||
import { IInventoryMoveRequestData } from "@spt/models/eft/inventory/IInventoryMoveRequestData";
|
||||
import { IInventoryReadEncyclopediaRequestData } from "@spt/models/eft/inventory/IInventoryReadEncyclopediaRequestData";
|
||||
import { IInventoryRemoveRequestData } from "@spt/models/eft/inventory/IInventoryRemoveRequestData";
|
||||
import { IInventorySortRequestData } from "@spt/models/eft/inventory/IInventorySortRequestData";
|
||||
import { IInventorySplitRequestData } from "@spt/models/eft/inventory/IInventorySplitRequestData";
|
||||
import { IInventorySwapRequestData } from "@spt/models/eft/inventory/IInventorySwapRequestData";
|
||||
import { IInventoryTagRequestData } from "@spt/models/eft/inventory/IInventoryTagRequestData";
|
||||
import { IInventoryToggleRequestData } from "@spt/models/eft/inventory/IInventoryToggleRequestData";
|
||||
import { IInventoryTransferRequestData } from "@spt/models/eft/inventory/IInventoryTransferRequestData";
|
||||
import { IOpenRandomLootContainerRequestData } from "@spt/models/eft/inventory/IOpenRandomLootContainerRequestData";
|
||||
import { IPinOrLockItemRequest } from "@spt/models/eft/inventory/IPinOrLockItemRequest";
|
||||
import { IRedeemProfileRequestData } from "@spt/models/eft/inventory/IRedeemProfileRequestData";
|
||||
import { ISetFavoriteItems } from "@spt/models/eft/inventory/ISetFavoriteItems";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { IFailQuestRequestData } from "@spt/models/eft/quests/IFailQuestRequestData";
|
||||
export declare class InventoryCallbacks {
|
||||
protected inventoryController: InventoryController;
|
||||
protected questController: QuestController;
|
||||
constructor(inventoryController: InventoryController, questController: QuestController);
|
||||
/** Handle client/game/profile/items/moving Move event */
|
||||
moveItem(pmcData: IPmcData, body: IInventoryMoveRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/** Handle Remove event */
|
||||
removeItem(pmcData: IPmcData, body: IInventoryRemoveRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/** Handle Split event */
|
||||
splitItem(pmcData: IPmcData, body: IInventorySplitRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
mergeItem(pmcData: IPmcData, body: IInventoryMergeRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
transferItem(pmcData: IPmcData, request: IInventoryTransferRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/** Handle Swap */
|
||||
swapItem(pmcData: IPmcData, body: IInventorySwapRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
foldItem(pmcData: IPmcData, body: IInventoryFoldRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
toggleItem(pmcData: IPmcData, body: IInventoryToggleRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
unbindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
examineItem(pmcData: IPmcData, body: IInventoryExamineRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/** Handle ReadEncyclopedia */
|
||||
readEncyclopedia(pmcData: IPmcData, body: IInventoryReadEncyclopediaRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/** Handle ApplyInventoryChanges */
|
||||
sortInventory(pmcData: IPmcData, body: IInventorySortRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
createMapMarker(pmcData: IPmcData, body: IInventoryCreateMarkerRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
deleteMapMarker(pmcData: IPmcData, body: IInventoryDeleteMarkerRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
editMapMarker(pmcData: IPmcData, body: IInventoryEditMarkerRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/** Handle OpenRandomLootContainer */
|
||||
openRandomLootContainer(pmcData: IPmcData, body: IOpenRandomLootContainerRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
redeemProfileReward(pmcData: IPmcData, body: IRedeemProfileRequestData, sessionId: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
setFavoriteItem(pmcData: IPmcData, body: ISetFavoriteItems, sessionId: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/**
|
||||
* TODO - MOVE INTO QUEST CODE
|
||||
* Handle game/profile/items/moving - QuestFail
|
||||
*/
|
||||
failQuest(pmcData: IPmcData, request: IFailQuestRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
pinOrLock(pmcData: IPmcData, request: IPinOrLockItemRequest, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
}
|
19
ServerMod/types/callbacks/ItemEventCallbacks.d.ts
vendored
Normal file
19
ServerMod/types/callbacks/ItemEventCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { Warning } from "@spt/models/eft/itemEvent/IItemEventRouterBase";
|
||||
import { IItemEventRouterRequest } from "@spt/models/eft/itemEvent/IItemEventRouterRequest";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { ItemEventRouter } from "@spt/routers/ItemEventRouter";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
export declare class ItemEventCallbacks {
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected itemEventRouter: ItemEventRouter;
|
||||
constructor(httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter);
|
||||
handleEvents(url: string, info: IItemEventRouterRequest, sessionID: string): Promise<IGetBodyResponseData<IItemEventRouterResponse>>;
|
||||
/**
|
||||
* Return true if the passed in list of warnings contains critical issues
|
||||
* @param warnings The list of warnings to check for critical errors
|
||||
* @returns
|
||||
*/
|
||||
private isCriticalError;
|
||||
protected getErrorCode(warnings: Warning[]): number;
|
||||
}
|
29
ServerMod/types/callbacks/LauncherCallbacks.d.ts
vendored
Normal file
29
ServerMod/types/callbacks/LauncherCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
import { LauncherController } from "@spt/controllers/LauncherController";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { IChangeRequestData } from "@spt/models/eft/launcher/IChangeRequestData";
|
||||
import { ILoginRequestData } from "@spt/models/eft/launcher/ILoginRequestData";
|
||||
import { IRegisterData } from "@spt/models/eft/launcher/IRegisterData";
|
||||
import { IRemoveProfileData } from "@spt/models/eft/launcher/IRemoveProfileData";
|
||||
import { SaveServer } from "@spt/servers/SaveServer";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
import { Watermark } from "@spt/utils/Watermark";
|
||||
export declare class LauncherCallbacks {
|
||||
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;
|
||||
register(url: string, info: IRegisterData, sessionID: string): "FAILED" | "OK";
|
||||
get(url: string, info: ILoginRequestData, sessionID: string): string;
|
||||
changeUsername(url: string, info: IChangeRequestData, sessionID: string): "FAILED" | "OK";
|
||||
changePassword(url: string, info: IChangeRequestData, sessionID: string): "FAILED" | "OK";
|
||||
wipe(url: string, info: IRegisterData, sessionID: string): "FAILED" | "OK";
|
||||
getServerVersion(): string;
|
||||
ping(url: string, info: IEmptyRequestData, sessionID: string): string;
|
||||
removeProfile(url: string, info: IRemoveProfileData, sessionID: string): string;
|
||||
getCompatibleTarkovVersion(): string;
|
||||
getLoadedServerMods(): string;
|
||||
getServerModsProfileUsed(url: string, info: IEmptyRequestData, sessionId: string): string;
|
||||
}
|
16
ServerMod/types/callbacks/LocationCallbacks.d.ts
vendored
Normal file
16
ServerMod/types/callbacks/LocationCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
import { LocationController } from "@spt/controllers/LocationController";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { ILocationsGenerateAllResponse } from "@spt/models/eft/common/ILocationsSourceDestinationBase";
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { IGetAirdropLootRequest } from "@spt/models/eft/location/IGetAirdropLootRequest";
|
||||
import { IGetAirdropLootResponse } from "@spt/models/eft/location/IGetAirdropLootResponse";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
export declare class LocationCallbacks {
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected locationController: LocationController;
|
||||
constructor(httpResponse: HttpResponseUtil, locationController: LocationController);
|
||||
/** Handle client/locations */
|
||||
getLocationData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ILocationsGenerateAllResponse>;
|
||||
/** Handle client/airdrop/loot */
|
||||
getAirdropLoot(url: string, info: IGetAirdropLootRequest, sessionID: string): IGetBodyResponseData<IGetAirdropLootResponse>;
|
||||
}
|
86
ServerMod/types/callbacks/MatchCallbacks.d.ts
vendored
Normal file
86
ServerMod/types/callbacks/MatchCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,86 @@
|
||||
import { MatchController } from "@spt/controllers/MatchController";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { IMetrics } from "@spt/models/eft/common/tables/IMatch";
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData";
|
||||
import { IEndLocalRaidRequestData } from "@spt/models/eft/match/IEndLocalRaidRequestData";
|
||||
import { IGetRaidConfigurationRequestData } from "@spt/models/eft/match/IGetRaidConfigurationRequestData";
|
||||
import { IGroupCharacter } from "@spt/models/eft/match/IGroupCharacter";
|
||||
import { IMatchGroupCurrentResponse } from "@spt/models/eft/match/IMatchGroupCurrentResponse";
|
||||
import { IMatchGroupInviteSendRequest } from "@spt/models/eft/match/IMatchGroupInviteSendRequest";
|
||||
import { IMatchGroupPlayerRemoveRequest } from "@spt/models/eft/match/IMatchGroupPlayerRemoveRequest";
|
||||
import { IMatchGroupStartGameRequest } from "@spt/models/eft/match/IMatchGroupStartGameRequest";
|
||||
import { IMatchGroupStatusRequest } from "@spt/models/eft/match/IMatchGroupStatusRequest";
|
||||
import { IMatchGroupStatusResponse } from "@spt/models/eft/match/IMatchGroupStatusResponse";
|
||||
import { IMatchGroupTransferRequest } from "@spt/models/eft/match/IMatchGroupTransferRequest";
|
||||
import { IProfileStatusResponse } from "@spt/models/eft/match/IProfileStatusResponse";
|
||||
import { IPutMetricsRequestData } from "@spt/models/eft/match/IPutMetricsRequestData";
|
||||
import { IRequestIdRequest } from "@spt/models/eft/match/IRequestIdRequest";
|
||||
import { IStartLocalRaidRequestData } from "@spt/models/eft/match/IStartLocalRaidRequestData";
|
||||
import { IStartLocalRaidResponseData } from "@spt/models/eft/match/IStartLocalRaidResponseData";
|
||||
import { IUpdatePingRequestData } from "@spt/models/eft/match/IUpdatePingRequestData";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
import { JsonUtil } from "@spt/utils/JsonUtil";
|
||||
export declare class MatchCallbacks {
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected jsonUtil: JsonUtil;
|
||||
protected matchController: MatchController;
|
||||
protected databaseService: DatabaseService;
|
||||
constructor(httpResponse: HttpResponseUtil, jsonUtil: JsonUtil, matchController: MatchController, databaseService: DatabaseService);
|
||||
/** Handle client/match/updatePing */
|
||||
updatePing(url: string, info: IUpdatePingRequestData, sessionID: string): INullResponseData;
|
||||
exitMatch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
|
||||
/** Handle client/match/group/exit_from_menu */
|
||||
exitFromMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
|
||||
/** Handle client/match/group/current */
|
||||
groupCurrent(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IMatchGroupCurrentResponse>;
|
||||
/** Handle client/match/group/looking/start */
|
||||
startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
|
||||
/** Handle client/match/group/looking/stop */
|
||||
stopGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
|
||||
/** Handle client/match/group/invite/send */
|
||||
sendGroupInvite(url: string, info: IMatchGroupInviteSendRequest, sessionID: string): IGetBodyResponseData<string>;
|
||||
/** Handle client/match/group/invite/accept */
|
||||
acceptGroupInvite(url: string, info: IRequestIdRequest, sessionId: string): IGetBodyResponseData<IGroupCharacter[]>;
|
||||
/** Handle client/match/group/invite/decline */
|
||||
declineGroupInvite(url: string, info: IRequestIdRequest, sessionId: string): IGetBodyResponseData<boolean>;
|
||||
/** Handle client/match/group/invite/cancel */
|
||||
cancelGroupInvite(url: string, info: IRequestIdRequest, sessionID: string): IGetBodyResponseData<boolean>;
|
||||
/** Handle client/match/group/transfer */
|
||||
transferGroup(url: string, info: IMatchGroupTransferRequest, sessionId: string): IGetBodyResponseData<boolean>;
|
||||
/** Handle client/match/group/invite/cancel-all */
|
||||
cancelAllGroupInvite(url: string, info: IEmptyRequestData, sessionId: string): IGetBodyResponseData<boolean>;
|
||||
/** Handle client/putMetrics */
|
||||
putMetrics(url: string, request: IPutMetricsRequestData, sessionId: string): INullResponseData;
|
||||
/** Handle client/analytics/event-disconnect */
|
||||
eventDisconnect(url: string, request: IPutMetricsRequestData, sessionId: string): INullResponseData;
|
||||
serverAvailable(url: string, info: IEmptyRequestData, sessionId: string): IGetBodyResponseData<boolean>;
|
||||
/** Handle match/group/start_game */
|
||||
joinMatch(url: string, info: IMatchGroupStartGameRequest, sessionID: string): IGetBodyResponseData<IProfileStatusResponse>;
|
||||
/** Handle client/getMetricsConfig */
|
||||
getMetrics(url: string, info: any, sessionID: string): IGetBodyResponseData<IMetrics>;
|
||||
/**
|
||||
* Called periodically while in a group
|
||||
* Handle client/match/group/status
|
||||
* @returns
|
||||
*/
|
||||
getGroupStatus(url: string, info: IMatchGroupStatusRequest, sessionID: string): IGetBodyResponseData<IMatchGroupStatusResponse>;
|
||||
/** Handle client/match/group/delete */
|
||||
deleteGroup(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<boolean>;
|
||||
leaveGroup(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<boolean>;
|
||||
/** Handle client/match/group/player/remove */
|
||||
removePlayerFromGroup(url: string, info: IMatchGroupPlayerRemoveRequest, sessionID: string): IGetBodyResponseData<boolean>;
|
||||
/** Handle client/match/local/start */
|
||||
startLocalRaid(url: string, info: IStartLocalRaidRequestData, sessionID: string): IGetBodyResponseData<IStartLocalRaidResponseData>;
|
||||
/** Handle client/match/local/end */
|
||||
endLocalRaid(url: string, info: IEndLocalRaidRequestData, sessionID: string): INullResponseData;
|
||||
/** Handle client/raid/configuration */
|
||||
getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData;
|
||||
/** Handle client/raid/configuration-by-profile */
|
||||
getConfigurationByProfile(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData;
|
||||
/** Handle client/match/group/raid/ready */
|
||||
raidReady(url: string, info: IEmptyRequestData, sessionId: string): IGetBodyResponseData<boolean>;
|
||||
/** Handle client/match/group/raid/not-ready */
|
||||
notRaidReady(url: string, info: IEmptyRequestData, sessionId: string): IGetBodyResponseData<boolean>;
|
||||
}
|
20
ServerMod/types/callbacks/ModCallbacks.d.ts
vendored
Normal file
20
ServerMod/types/callbacks/ModCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
import { OnLoad } from "@spt/di/OnLoad";
|
||||
import { PostSptModLoader } from "@spt/loaders/PostSptModLoader";
|
||||
import { IHttpConfig } from "@spt/models/spt/config/IHttpConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { HttpFileUtil } from "@spt/utils/HttpFileUtil";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
export declare class ModCallbacks implements OnLoad {
|
||||
protected logger: ILogger;
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected httpFileUtil: HttpFileUtil;
|
||||
protected postSptModLoader: PostSptModLoader;
|
||||
protected localisationService: LocalisationService;
|
||||
protected configServer: ConfigServer;
|
||||
protected httpConfig: IHttpConfig;
|
||||
constructor(logger: ILogger, httpResponse: HttpResponseUtil, httpFileUtil: HttpFileUtil, postSptModLoader: PostSptModLoader, localisationService: LocalisationService, configServer: ConfigServer);
|
||||
onLoad(): Promise<void>;
|
||||
getRoute(): string;
|
||||
}
|
14
ServerMod/types/callbacks/NoteCallbacks.d.ts
vendored
Normal file
14
ServerMod/types/callbacks/NoteCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
import { NoteController } from "@spt/controllers/NoteController";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { INoteActionData } from "@spt/models/eft/notes/INoteActionData";
|
||||
export declare class NoteCallbacks {
|
||||
protected noteController: NoteController;
|
||||
constructor(noteController: NoteController);
|
||||
/** Handle AddNote event */
|
||||
addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
|
||||
/** Handle EditNote event */
|
||||
editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
|
||||
/** Handle DeleteNote event */
|
||||
deleteNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
|
||||
}
|
34
ServerMod/types/callbacks/NotifierCallbacks.d.ts
vendored
Normal file
34
ServerMod/types/callbacks/NotifierCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
import { NotifierController } from "@spt/controllers/NotifierController";
|
||||
import { HttpServerHelper } from "@spt/helpers/HttpServerHelper";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { IUIDRequestData } from "@spt/models/eft/common/request/IUIDRequestData";
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { INotifierChannel } from "@spt/models/eft/notifier/INotifier";
|
||||
import { ISelectProfileResponse } from "@spt/models/eft/notifier/ISelectProfileResponse";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
import { JsonUtil } from "@spt/utils/JsonUtil";
|
||||
export declare class NotifierCallbacks {
|
||||
protected httpServerHelper: HttpServerHelper;
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected jsonUtil: JsonUtil;
|
||||
protected notifierController: NotifierController;
|
||||
constructor(httpServerHelper: HttpServerHelper, httpResponse: HttpResponseUtil, jsonUtil: JsonUtil, notifierController: NotifierController);
|
||||
/**
|
||||
* If we don't have anything to send, it's ok to not send anything back
|
||||
* because notification requests can be long-polling. In fact, we SHOULD wait
|
||||
* 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;
|
||||
/** Handle push/notifier/get */
|
||||
/** Handle push/notifier/getwebsocket */
|
||||
getNotifier(url: string, info: any, sessionID: string): IGetBodyResponseData<any[]>;
|
||||
/** Handle client/notifier/channel/create */
|
||||
createNotifierChannel(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<INotifierChannel>;
|
||||
/**
|
||||
* Handle client/game/profile/select
|
||||
* @returns ISelectProfileResponse
|
||||
*/
|
||||
selectProfile(url: string, info: IUIDRequestData, sessionID: string): IGetBodyResponseData<ISelectProfileResponse>;
|
||||
notify(url: string, info: any, sessionID: string): string;
|
||||
}
|
8
ServerMod/types/callbacks/PresetCallbacks.d.ts
vendored
Normal file
8
ServerMod/types/callbacks/PresetCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
import { PresetController } from "@spt/controllers/PresetController";
|
||||
import { OnLoad } from "@spt/di/OnLoad";
|
||||
export declare class PresetCallbacks implements OnLoad {
|
||||
protected presetController: PresetController;
|
||||
constructor(presetController: PresetController);
|
||||
onLoad(): Promise<void>;
|
||||
getRoute(): string;
|
||||
}
|
90
ServerMod/types/callbacks/ProfileCallbacks.d.ts
vendored
Normal file
90
ServerMod/types/callbacks/ProfileCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,90 @@
|
||||
import { ProfileController } from "@spt/controllers/ProfileController";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData";
|
||||
import { IGetMiniProfileRequestData } from "@spt/models/eft/launcher/IGetMiniProfileRequestData";
|
||||
import { IGetProfileStatusResponseData } from "@spt/models/eft/profile/GetProfileStatusResponseData";
|
||||
import { ICreateProfileResponse } from "@spt/models/eft/profile/ICreateProfileResponse";
|
||||
import { IGetOtherProfileRequest } from "@spt/models/eft/profile/IGetOtherProfileRequest";
|
||||
import { IGetOtherProfileResponse } from "@spt/models/eft/profile/IGetOtherProfileResponse";
|
||||
import { IGetProfileSettingsRequest } from "@spt/models/eft/profile/IGetProfileSettingsRequest";
|
||||
import { IProfileChangeNicknameRequestData } from "@spt/models/eft/profile/IProfileChangeNicknameRequestData";
|
||||
import { IProfileChangeVoiceRequestData } from "@spt/models/eft/profile/IProfileChangeVoiceRequestData";
|
||||
import { IProfileCreateRequestData } from "@spt/models/eft/profile/IProfileCreateRequestData";
|
||||
import { ISearchFriendRequestData } from "@spt/models/eft/profile/ISearchFriendRequestData";
|
||||
import { ISearchFriendResponse } from "@spt/models/eft/profile/ISearchFriendResponse";
|
||||
import { IValidateNicknameRequestData } from "@spt/models/eft/profile/IValidateNicknameRequestData";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
import { TimeUtil } from "@spt/utils/TimeUtil";
|
||||
/** Handle profile related client events */
|
||||
export declare class ProfileCallbacks {
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected timeUtil: TimeUtil;
|
||||
protected profileController: ProfileController;
|
||||
protected profileHelper: ProfileHelper;
|
||||
constructor(httpResponse: HttpResponseUtil, timeUtil: TimeUtil, profileController: ProfileController, profileHelper: ProfileHelper);
|
||||
/**
|
||||
* Handle client/game/profile/create
|
||||
*/
|
||||
createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData<ICreateProfileResponse>;
|
||||
/**
|
||||
* Handle client/game/profile/list
|
||||
* Get the complete player profile (scav + pmc character)
|
||||
*/
|
||||
getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>;
|
||||
/**
|
||||
* Handle client/game/profile/savage/regenerate
|
||||
* Handle the creation of a scav profile for player
|
||||
* Occurs post-raid and when profile first created immediately after character details are confirmed by player
|
||||
* @param url
|
||||
* @param info empty
|
||||
* @param sessionID Session id
|
||||
* @returns Profile object
|
||||
*/
|
||||
regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>;
|
||||
/**
|
||||
* Handle client/game/profile/voice/change event
|
||||
*/
|
||||
changeVoice(url: string, info: IProfileChangeVoiceRequestData, sessionID: string): INullResponseData;
|
||||
/**
|
||||
* Handle client/game/profile/nickname/change event
|
||||
* Client allows player to adjust their profile name
|
||||
*/
|
||||
changeNickname(url: string, info: IProfileChangeNicknameRequestData, sessionID: string): IGetBodyResponseData<any>;
|
||||
/**
|
||||
* Handle client/game/profile/nickname/validate
|
||||
*/
|
||||
validateNickname(url: string, info: IValidateNicknameRequestData, sessionID: string): IGetBodyResponseData<any>;
|
||||
/**
|
||||
* Handle client/game/profile/nickname/reserved
|
||||
*/
|
||||
getReservedNickname(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<string>;
|
||||
/**
|
||||
* Handle client/profile/status
|
||||
* Called when creating a character when choosing a character face/voice
|
||||
*/
|
||||
getProfileStatus(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetProfileStatusResponseData>;
|
||||
/**
|
||||
* Handle client/profile/view
|
||||
* Called when viewing another players profile
|
||||
*/
|
||||
getOtherProfile(url: string, request: IGetOtherProfileRequest, sessionID: string): IGetBodyResponseData<IGetOtherProfileResponse>;
|
||||
/**
|
||||
* Handle client/profile/settings
|
||||
*/
|
||||
getProfileSettings(url: string, info: IGetProfileSettingsRequest, sessionId: string): IGetBodyResponseData<boolean>;
|
||||
/**
|
||||
* Handle client/game/profile/search
|
||||
*/
|
||||
searchFriend(url: string, info: ISearchFriendRequestData, sessionID: string): IGetBodyResponseData<ISearchFriendResponse[]>;
|
||||
/**
|
||||
* Handle launcher/profile/info
|
||||
*/
|
||||
getMiniProfile(url: string, info: IGetMiniProfileRequestData, sessionID: string): string;
|
||||
/**
|
||||
* Handle /launcher/profiles
|
||||
*/
|
||||
getAllMiniProfiles(url: string, info: IEmptyRequestData, sessionID: string): string;
|
||||
}
|
44
ServerMod/types/callbacks/QuestCallbacks.d.ts
vendored
Normal file
44
ServerMod/types/callbacks/QuestCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
import { QuestController } from "@spt/controllers/QuestController";
|
||||
import { RepeatableQuestController } from "@spt/controllers/RepeatableQuestController";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IQuest } from "@spt/models/eft/common/tables/IQuest";
|
||||
import { IPmcDataRepeatableQuest } from "@spt/models/eft/common/tables/IRepeatableQuests";
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { IAcceptQuestRequestData } from "@spt/models/eft/quests/IAcceptQuestRequestData";
|
||||
import { ICompleteQuestRequestData } from "@spt/models/eft/quests/ICompleteQuestRequestData";
|
||||
import { IHandoverQuestRequestData } from "@spt/models/eft/quests/IHandoverQuestRequestData";
|
||||
import { IListQuestsRequestData } from "@spt/models/eft/quests/IListQuestsRequestData";
|
||||
import { IRepeatableQuestChangeRequest } from "@spt/models/eft/quests/IRepeatableQuestChangeRequest";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
export declare class QuestCallbacks {
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected questController: QuestController;
|
||||
protected repeatableQuestController: RepeatableQuestController;
|
||||
constructor(httpResponse: HttpResponseUtil, questController: QuestController, repeatableQuestController: RepeatableQuestController);
|
||||
/**
|
||||
* Handle RepeatableQuestChange event
|
||||
*/
|
||||
changeRepeatableQuest(pmcData: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle QuestAccept event
|
||||
*/
|
||||
acceptQuest(pmcData: IPmcData, body: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle QuestComplete event
|
||||
*/
|
||||
completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle QuestHandover event
|
||||
*/
|
||||
handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle client/quest/list
|
||||
*/
|
||||
listQuests(url: string, info: IListQuestsRequestData, sessionID: string): IGetBodyResponseData<IQuest[]>;
|
||||
/**
|
||||
* Handle client/repeatalbeQuests/activityPeriods
|
||||
*/
|
||||
activityPeriods(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IPmcDataRepeatableQuest[]>;
|
||||
}
|
62
ServerMod/types/callbacks/RagfairCallbacks.d.ts
vendored
Normal file
62
ServerMod/types/callbacks/RagfairCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,62 @@
|
||||
import { RagfairController } from "@spt/controllers/RagfairController";
|
||||
import { OnLoad } from "@spt/di/OnLoad";
|
||||
import { OnUpdate } from "@spt/di/OnUpdate";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { IAddOfferRequestData } from "@spt/models/eft/ragfair/IAddOfferRequestData";
|
||||
import { IExtendOfferRequestData } from "@spt/models/eft/ragfair/IExtendOfferRequestData";
|
||||
import { IGetItemPriceResult } from "@spt/models/eft/ragfair/IGetItemPriceResult";
|
||||
import { IGetMarketPriceRequestData } from "@spt/models/eft/ragfair/IGetMarketPriceRequestData";
|
||||
import { IGetOffersResult } from "@spt/models/eft/ragfair/IGetOffersResult";
|
||||
import { IGetRagfairOfferByIdRequest } from "@spt/models/eft/ragfair/IGetRagfairOfferByIdRequest";
|
||||
import { IRagfairOffer } from "@spt/models/eft/ragfair/IRagfairOffer";
|
||||
import { IRemoveOfferRequestData } from "@spt/models/eft/ragfair/IRemoveOfferRequestData";
|
||||
import { ISearchRequestData } from "@spt/models/eft/ragfair/ISearchRequestData";
|
||||
import { ISendRagfairReportRequestData } from "@spt/models/eft/ragfair/ISendRagfairReportRequestData";
|
||||
import { IStorePlayerOfferTaxAmountRequestData } from "@spt/models/eft/ragfair/IStorePlayerOfferTaxAmountRequestData";
|
||||
import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { RagfairServer } from "@spt/servers/RagfairServer";
|
||||
import { RagfairTaxService } from "@spt/services/RagfairTaxService";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
/**
|
||||
* Handle ragfair related callback events
|
||||
*/
|
||||
export declare class RagfairCallbacks implements OnLoad, OnUpdate {
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected ragfairServer: RagfairServer;
|
||||
protected ragfairController: RagfairController;
|
||||
protected ragfairTaxService: RagfairTaxService;
|
||||
protected configServer: ConfigServer;
|
||||
protected ragfairConfig: IRagfairConfig;
|
||||
constructor(httpResponse: HttpResponseUtil, ragfairServer: RagfairServer, ragfairController: RagfairController, ragfairTaxService: RagfairTaxService, configServer: ConfigServer);
|
||||
onLoad(): Promise<void>;
|
||||
getRoute(): string;
|
||||
onUpdate(timeSinceLastRun: number): Promise<boolean>;
|
||||
/**
|
||||
* Handle client/ragfair/search
|
||||
* Handle client/ragfair/find
|
||||
*/
|
||||
search(url: string, info: ISearchRequestData, sessionID: string): IGetBodyResponseData<IGetOffersResult>;
|
||||
/** Handle client/ragfair/itemMarketPrice */
|
||||
getMarketPrice(url: string, info: IGetMarketPriceRequestData, sessionID: string): IGetBodyResponseData<IGetItemPriceResult>;
|
||||
/** Handle RagFairAddOffer event */
|
||||
addOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/** Handle RagFairRemoveOffer event */
|
||||
removeOffer(pmcData: IPmcData, info: IRemoveOfferRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/** Handle RagFairRenewOffer event */
|
||||
extendOffer(pmcData: IPmcData, info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle /client/items/prices
|
||||
* Called when clicking an item to list on flea
|
||||
*/
|
||||
getFleaPrices(url: string, request: IEmptyRequestData, sessionID: string): IGetBodyResponseData<Record<string, number>>;
|
||||
/** Handle client/reports/ragfair/send */
|
||||
sendReport(url: string, info: ISendRagfairReportRequestData, sessionID: string): INullResponseData;
|
||||
storePlayerOfferTaxAmount(url: string, request: IStorePlayerOfferTaxAmountRequestData, sessionId: string): INullResponseData;
|
||||
/** Handle client/ragfair/offer/findbyid */
|
||||
getFleaOfferById(url: string, request: IGetRagfairOfferByIdRequest, sessionID: string): IGetBodyResponseData<IRagfairOffer>;
|
||||
}
|
27
ServerMod/types/callbacks/RepairCallbacks.d.ts
vendored
Normal file
27
ServerMod/types/callbacks/RepairCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
import { RepairController } from "@spt/controllers/RepairController";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { IRepairActionDataRequest } from "@spt/models/eft/repair/IRepairActionDataRequest";
|
||||
import { ITraderRepairActionDataRequest } from "@spt/models/eft/repair/ITraderRepairActionDataRequest";
|
||||
export declare class RepairCallbacks {
|
||||
protected repairController: RepairController;
|
||||
constructor(repairController: RepairController);
|
||||
/**
|
||||
* Handle TraderRepair event
|
||||
* use trader to repair item
|
||||
* @param pmcData Player profile
|
||||
* @param traderRepairRequest Request object
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
traderRepair(pmcData: IPmcData, traderRepairRequest: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle Repair event
|
||||
* Use repair kit to repair item
|
||||
* @param pmcData Player profile
|
||||
* @param repairRequest Request object
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
repair(pmcData: IPmcData, repairRequest: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
|
||||
}
|
16
ServerMod/types/callbacks/SaveCallbacks.d.ts
vendored
Normal file
16
ServerMod/types/callbacks/SaveCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
import { OnLoad } from "@spt/di/OnLoad";
|
||||
import { OnUpdate } from "@spt/di/OnUpdate";
|
||||
import { ICoreConfig } from "@spt/models/spt/config/ICoreConfig";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { SaveServer } from "@spt/servers/SaveServer";
|
||||
import { BackupService } from "@spt/services/BackupService";
|
||||
export declare class SaveCallbacks implements OnLoad, OnUpdate {
|
||||
protected saveServer: SaveServer;
|
||||
protected configServer: ConfigServer;
|
||||
protected backupService: BackupService;
|
||||
protected coreConfig: ICoreConfig;
|
||||
constructor(saveServer: SaveServer, configServer: ConfigServer, backupService: BackupService);
|
||||
onLoad(): Promise<void>;
|
||||
getRoute(): string;
|
||||
onUpdate(secondsSinceLastRun: number): Promise<boolean>;
|
||||
}
|
18
ServerMod/types/callbacks/TradeCallbacks.d.ts
vendored
Normal file
18
ServerMod/types/callbacks/TradeCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
import { TradeController } from "@spt/controllers/TradeController";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { IProcessBaseTradeRequestData } from "@spt/models/eft/trade/IProcessBaseTradeRequestData";
|
||||
import { IProcessRagfairTradeRequestData } from "@spt/models/eft/trade/IProcessRagfairTradeRequestData";
|
||||
import { ISellScavItemsToFenceRequestData } from "@spt/models/eft/trade/ISellScavItemsToFenceRequestData";
|
||||
export declare class TradeCallbacks {
|
||||
protected tradeController: TradeController;
|
||||
constructor(tradeController: TradeController);
|
||||
/**
|
||||
* Handle client/game/profile/items/moving TradingConfirm event
|
||||
*/
|
||||
processTrade(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/** Handle RagFairBuyOffer event */
|
||||
processRagfairTrade(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/** Handle SellAllFromSavage event */
|
||||
sellAllFromSavage(pmcData: IPmcData, body: ISellScavItemsToFenceRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
}
|
27
ServerMod/types/callbacks/TraderCallbacks.d.ts
vendored
Normal file
27
ServerMod/types/callbacks/TraderCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
import { TraderController } from "@spt/controllers/TraderController";
|
||||
import { OnLoad } from "@spt/di/OnLoad";
|
||||
import { OnUpdate } from "@spt/di/OnUpdate";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { ITraderAssort, ITraderBase } from "@spt/models/eft/common/tables/ITrader";
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { IModdedTraders } from "@spt/models/spt/config/ITraderConfig";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
export declare class TraderCallbacks implements OnLoad, OnUpdate {
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected traderController: TraderController;
|
||||
protected configServer: ConfigServer;
|
||||
constructor(httpResponse: HttpResponseUtil, // TODO: delay required
|
||||
traderController: TraderController, configServer: ConfigServer);
|
||||
onLoad(): Promise<void>;
|
||||
onUpdate(): Promise<boolean>;
|
||||
getRoute(): string;
|
||||
/** Handle client/trading/api/traderSettings */
|
||||
getTraderSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderBase[]>;
|
||||
/** Handle client/trading/api/getTrader */
|
||||
getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderBase>;
|
||||
/** Handle client/trading/api/getTraderAssort */
|
||||
getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderAssort>;
|
||||
/** Handle /singleplayer/moddedTraders */
|
||||
getModdedTraderData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IModdedTraders>;
|
||||
}
|
18
ServerMod/types/callbacks/WeatherCallbacks.d.ts
vendored
Normal file
18
ServerMod/types/callbacks/WeatherCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
import { WeatherController } from "@spt/controllers/WeatherController";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
|
||||
import { IWeatherData } from "@spt/models/eft/weather/IWeatherData";
|
||||
import { IGetLocalWeatherResponseData } from "@spt/models/spt/weather/IGetLocalWeatherResponseData";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
export declare class WeatherCallbacks {
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected weatherController: WeatherController;
|
||||
constructor(httpResponse: HttpResponseUtil, weatherController: WeatherController);
|
||||
/**
|
||||
* Handle client/weather
|
||||
* @returns IWeatherData
|
||||
*/
|
||||
getWeather(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IWeatherData>;
|
||||
/** Handle client/localGame/weather */
|
||||
getLocalWeather(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetLocalWeatherResponseData>;
|
||||
}
|
16
ServerMod/types/callbacks/WishlistCallbacks.d.ts
vendored
Normal file
16
ServerMod/types/callbacks/WishlistCallbacks.d.ts
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
import { WishlistController } from "@spt/controllers/WishlistController";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { IAddToWishlistRequest } from "@spt/models/eft/wishlist/IAddToWishlistRequest";
|
||||
import { IChangeWishlistItemCategoryRequest } from "@spt/models/eft/wishlist/IChangeWishlistItemCategoryRequest";
|
||||
import { IRemoveFromWishlistRequest } from "@spt/models/eft/wishlist/IRemoveFromWishlistRequest";
|
||||
export declare class WishlistCallbacks {
|
||||
protected wishlistController: WishlistController;
|
||||
constructor(wishlistController: WishlistController);
|
||||
/** Handle AddToWishList event */
|
||||
addToWishlist(pmcData: IPmcData, request: IAddToWishlistRequest, sessionID: string): IItemEventRouterResponse;
|
||||
/** Handle RemoveFromWishList event */
|
||||
removeFromWishlist(pmcData: IPmcData, request: IRemoveFromWishlistRequest, sessionID: string): IItemEventRouterResponse;
|
||||
/** Handle ChangeWishlistItemCategory */
|
||||
changeWishlistItemCategory(pmcData: IPmcData, request: IChangeWishlistItemCategoryRequest, sessionID: string): IItemEventRouterResponse;
|
||||
}
|
20
ServerMod/types/context/ApplicationContext.d.ts
vendored
Normal file
20
ServerMod/types/context/ApplicationContext.d.ts
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
import { ContextVariable } from "@spt/context/ContextVariable";
|
||||
import { ContextVariableType } from "@spt/context/ContextVariableType";
|
||||
export declare class ApplicationContext {
|
||||
private variables;
|
||||
private static holderMaxSize;
|
||||
/**
|
||||
* Called like:
|
||||
* ```
|
||||
* const registerPlayerInfo = this.applicationContext.getLatestValue(ContextVariableType.REGISTER_PLAYER_REQUEST).getValue<IRegisterPlayerRequestData>();
|
||||
*
|
||||
* const activePlayerSessionId = this.applicationContext.getLatestValue(ContextVariableType.SESSION_ID).getValue<string>();
|
||||
*
|
||||
* const matchInfo = this.applicationContext.getLatestValue(ContextVariableType.RAID_CONFIGURATION).getValue<IGetRaidConfigurationRequestData>();
|
||||
* ```
|
||||
*/
|
||||
getLatestValue(type: ContextVariableType): ContextVariable | undefined;
|
||||
getValues(type: ContextVariableType): ContextVariable[] | undefined;
|
||||
addValue(type: ContextVariableType, value: any): void;
|
||||
clearValues(type: ContextVariableType): void;
|
||||
}
|
10
ServerMod/types/context/ContextVariable.d.ts
vendored
Normal file
10
ServerMod/types/context/ContextVariable.d.ts
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
import { ContextVariableType } from "@spt/context/ContextVariableType";
|
||||
export declare class ContextVariable {
|
||||
private value;
|
||||
private timestamp;
|
||||
private type;
|
||||
constructor(value: any, type: ContextVariableType);
|
||||
getValue<T>(): T;
|
||||
getTimestamp(): Date;
|
||||
getType(): ContextVariableType;
|
||||
}
|
13
ServerMod/types/context/ContextVariableType.d.ts
vendored
Normal file
13
ServerMod/types/context/ContextVariableType.d.ts
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
export declare enum ContextVariableType {
|
||||
/** Logged in users session id */
|
||||
SESSION_ID = 0,
|
||||
/** Currently acive raid information */
|
||||
RAID_CONFIGURATION = 1,
|
||||
/** SessionID + Timestamp when client first connected, has _ between values */
|
||||
CLIENT_START_TIMESTAMP = 2,
|
||||
/** When player is loading into map and loot is requested */
|
||||
REGISTER_PLAYER_REQUEST = 3,
|
||||
RAID_ADJUSTMENTS = 4,
|
||||
/** Data returned from client request object from endLocalRaid() */
|
||||
TRANSIT_INFO = 5
|
||||
}
|
23
ServerMod/types/controllers/AchievementController.d.ts
vendored
Normal file
23
ServerMod/types/controllers/AchievementController.d.ts
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
import { ICompletedAchievementsResponse } from "@spt/models/eft/profile/ICompletedAchievementsResponse";
|
||||
import { IGetAchievementsResponse } from "@spt/models/eft/profile/IGetAchievementsResponse";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
/**
|
||||
* Logic for handling In Raid callbacks
|
||||
*/
|
||||
export declare class AchievementController {
|
||||
protected logger: ILogger;
|
||||
protected databaseService: DatabaseService;
|
||||
constructor(logger: ILogger, databaseService: DatabaseService);
|
||||
/**
|
||||
* Get base achievements
|
||||
* @param sessionID Session id
|
||||
*/
|
||||
getAchievements(sessionID: string): IGetAchievementsResponse;
|
||||
/**
|
||||
* Shows % of 'other' players who've completed each achievement
|
||||
* @param sessionId Session id
|
||||
* @returns ICompletedAchievementsResponse
|
||||
*/
|
||||
getAchievementStatistics(sessionId: string): ICompletedAchievementsResponse;
|
||||
}
|
146
ServerMod/types/controllers/BotController.d.ts
vendored
Normal file
146
ServerMod/types/controllers/BotController.d.ts
vendored
Normal file
@ -0,0 +1,146 @@
|
||||
import { ApplicationContext } from "@spt/context/ApplicationContext";
|
||||
import { BotGenerator } from "@spt/generators/BotGenerator";
|
||||
import { BotDifficultyHelper } from "@spt/helpers/BotDifficultyHelper";
|
||||
import { BotHelper } from "@spt/helpers/BotHelper";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
|
||||
import { MinMax } from "@spt/models/common/MinMax";
|
||||
import { ICondition, IGenerateBotsRequestData } from "@spt/models/eft/bot/IGenerateBotsRequestData";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IBotBase } from "@spt/models/eft/common/tables/IBotBase";
|
||||
import { IBotCore } from "@spt/models/eft/common/tables/IBotCore";
|
||||
import { IDifficultyCategories } from "@spt/models/eft/common/tables/IBotType";
|
||||
import { IGetRaidConfigurationRequestData } from "@spt/models/eft/match/IGetRaidConfigurationRequestData";
|
||||
import { IBotGenerationDetails } from "@spt/models/spt/bots/BotGenerationDetails";
|
||||
import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
|
||||
import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { BotGenerationCacheService } from "@spt/services/BotGenerationCacheService";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { MatchBotDetailsCacheService } from "@spt/services/MatchBotDetailsCacheService";
|
||||
import { SeasonalEventService } from "@spt/services/SeasonalEventService";
|
||||
import { RandomUtil } from "@spt/utils/RandomUtil";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
export declare class BotController {
|
||||
protected logger: ILogger;
|
||||
protected databaseService: DatabaseService;
|
||||
protected botGenerator: BotGenerator;
|
||||
protected botHelper: BotHelper;
|
||||
protected botDifficultyHelper: BotDifficultyHelper;
|
||||
protected weightedRandomHelper: WeightedRandomHelper;
|
||||
protected botGenerationCacheService: BotGenerationCacheService;
|
||||
protected matchBotDetailsCacheService: MatchBotDetailsCacheService;
|
||||
protected localisationService: LocalisationService;
|
||||
protected seasonalEventService: SeasonalEventService;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected configServer: ConfigServer;
|
||||
protected applicationContext: ApplicationContext;
|
||||
protected randomUtil: RandomUtil;
|
||||
protected cloner: ICloner;
|
||||
protected botConfig: IBotConfig;
|
||||
protected pmcConfig: IPmcConfig;
|
||||
constructor(logger: ILogger, databaseService: DatabaseService, botGenerator: BotGenerator, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, weightedRandomHelper: WeightedRandomHelper, botGenerationCacheService: BotGenerationCacheService, matchBotDetailsCacheService: MatchBotDetailsCacheService, localisationService: LocalisationService, seasonalEventService: SeasonalEventService, profileHelper: ProfileHelper, configServer: ConfigServer, applicationContext: ApplicationContext, randomUtil: RandomUtil, cloner: ICloner);
|
||||
/**
|
||||
* Return the number of bot load-out varieties to be generated
|
||||
* @param type bot Type we want the load-out gen count for
|
||||
* @returns number of bots to generate
|
||||
*/
|
||||
getBotPresetGenerationLimit(type: string): number;
|
||||
/**
|
||||
* Handle singleplayer/settings/bot/difficulty
|
||||
* Get the core.json difficulty settings from database/bots
|
||||
* @returns IBotCore
|
||||
*/
|
||||
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 diffLevel difficulty level server requested settings for
|
||||
* @param raidConfig OPTIONAL - applicationContext Data stored at start of raid
|
||||
* @param ignoreRaidSettings should raid settings chosen pre-raid be ignored
|
||||
* @returns Difficulty object
|
||||
*/
|
||||
getBotDifficulty(type: string, diffLevel: string, raidConfig?: IGetRaidConfigurationRequestData, ignoreRaidSettings?: boolean): IDifficultyCategories;
|
||||
getAllBotDifficulties(): Record<string, any>;
|
||||
/**
|
||||
* Generate bot profiles and store in cache
|
||||
* @param sessionId Session id
|
||||
* @param info bot generation request info
|
||||
* @returns IBotBase array
|
||||
*/
|
||||
generate(sessionId: string, info: IGenerateBotsRequestData): Promise<IBotBase[]>;
|
||||
/**
|
||||
* On first bot generation bots are generated and stored inside a cache, ready to be used later
|
||||
* @param request Bot generation request object
|
||||
* @param pmcProfile Player profile
|
||||
* @param sessionId Session id
|
||||
* @returns IBotBase[]
|
||||
*/
|
||||
protected generateMultipleBotsAndCache(request: IGenerateBotsRequestData, pmcProfile: IPmcData, sessionId: string): Promise<IBotBase[]>;
|
||||
protected getMostRecentRaidSettings(): IGetRaidConfigurationRequestData;
|
||||
/**
|
||||
* Get min/max level range values for a specific map
|
||||
* @param location Map name e.g. factory4_day
|
||||
* @returns MinMax
|
||||
*/
|
||||
protected getPmcLevelRangeForMap(location: string): MinMax;
|
||||
/**
|
||||
* Create a BotGenerationDetails for the bot generator to use
|
||||
* @param condition Client data defining bot type and difficulty
|
||||
* @param pmcProfile Player who is generating bots
|
||||
* @param allPmcsHaveSameNameAsPlayer Should all PMCs have same name as player
|
||||
* @param raidSettings Settings chosen pre-raid by player
|
||||
* @param botCountToGenerate How many bots to generate
|
||||
* @param generateAsPmc Force bot being generated a PMC
|
||||
* @returns BotGenerationDetails
|
||||
*/
|
||||
protected getBotGenerationDetailsForWave(condition: ICondition, pmcProfile: IPmcData, allPmcsHaveSameNameAsPlayer: boolean, raidSettings: IGetRaidConfigurationRequestData, botCountToGenerate: number, generateAsPmc: boolean): IBotGenerationDetails;
|
||||
/**
|
||||
* Get players profile level
|
||||
* @param pmcProfile Profile to get level from
|
||||
* @returns Level as number
|
||||
*/
|
||||
protected getPlayerLevelFromProfile(pmcProfile: IPmcData): number;
|
||||
/**
|
||||
* Generate many bots and store then on the cache
|
||||
* @param condition the condition details to generate the bots with
|
||||
* @param botGenerationDetails the bot details to generate the bot with
|
||||
* @param sessionId Session id
|
||||
* @returns A promise for the bots to be done generating
|
||||
*/
|
||||
protected generateWithBotDetails(condition: ICondition, botGenerationDetails: IBotGenerationDetails, sessionId: string): Promise<void>;
|
||||
/**
|
||||
* Generate a single bot and store in the cache
|
||||
* @param botGenerationDetails the bot details to generate the bot with
|
||||
* @param sessionId Session id
|
||||
* @param cacheKey the cache key to store the bot with
|
||||
* @returns A promise for the bot to be stored
|
||||
*/
|
||||
protected generateSingleBotAndStoreInCache(botGenerationDetails: IBotGenerationDetails, sessionId: string, cacheKey: string): Promise<void>;
|
||||
/**
|
||||
* Pull a single bot out of cache and return, if cache is empty add bots to it and then return
|
||||
* @param sessionId Session id
|
||||
* @param request Bot generation request object
|
||||
* @returns Single IBotBase object
|
||||
*/
|
||||
protected returnSingleBotFromCache(sessionId: string, request: IGenerateBotsRequestData): Promise<IBotBase[]>;
|
||||
protected getPmcConversionMinMaxForLocation(requestedBotRole: string, location: string): MinMax;
|
||||
protected updateBotGenerationDetailsToRandomBoss(botGenerationDetails: IBotGenerationDetails, possibleBossTypeWeights: Record<string, number>): void;
|
||||
/**
|
||||
* Get the difficulty passed in, if its not "asonline", get selected difficulty from config
|
||||
* @param requestedDifficulty
|
||||
* @returns
|
||||
*/
|
||||
getPMCDifficulty(requestedDifficulty: string): string;
|
||||
/**
|
||||
* Get the max number of bots allowed on a map
|
||||
* Looks up location player is entering when getting cap value
|
||||
* @param location The map location cap was requested for
|
||||
* @returns cap number
|
||||
*/
|
||||
getBotCap(location: string): number;
|
||||
getAiBotBrainTypes(): any;
|
||||
}
|
38
ServerMod/types/controllers/BuildController.d.ts
vendored
Normal file
38
ServerMod/types/controllers/BuildController.d.ts
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { ISetMagazineRequest } from "@spt/models/eft/builds/ISetMagazineRequest";
|
||||
import { IPresetBuildActionRequestData } from "@spt/models/eft/presetBuild/IPresetBuildActionRequestData";
|
||||
import { IRemoveBuildRequestData } from "@spt/models/eft/presetBuild/IRemoveBuildRequestData";
|
||||
import { IUserBuilds } from "@spt/models/eft/profile/ISptProfile";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
|
||||
import { SaveServer } from "@spt/servers/SaveServer";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { HashUtil } from "@spt/utils/HashUtil";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
export declare class BuildController {
|
||||
protected logger: ILogger;
|
||||
protected hashUtil: HashUtil;
|
||||
protected eventOutputHolder: EventOutputHolder;
|
||||
protected databaseService: DatabaseService;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected localisationService: LocalisationService;
|
||||
protected itemHelper: ItemHelper;
|
||||
protected saveServer: SaveServer;
|
||||
protected cloner: ICloner;
|
||||
constructor(logger: ILogger, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, databaseService: DatabaseService, profileHelper: ProfileHelper, localisationService: LocalisationService, itemHelper: ItemHelper, saveServer: SaveServer, cloner: ICloner);
|
||||
/** Handle client/handbook/builds/my/list */
|
||||
getUserBuilds(sessionID: string): IUserBuilds;
|
||||
/** Handle client/builds/weapon/save */
|
||||
saveWeaponBuild(sessionId: string, body: IPresetBuildActionRequestData): void;
|
||||
/** Handle client/builds/equipment/save event */
|
||||
saveEquipmentBuild(sessionID: string, request: IPresetBuildActionRequestData): void;
|
||||
/** Handle client/builds/delete */
|
||||
removeBuild(sessionID: string, request: IRemoveBuildRequestData): void;
|
||||
protected removePlayerBuild(idToRemove: string, sessionID: string): void;
|
||||
/**
|
||||
* Handle client/builds/magazine/save
|
||||
*/
|
||||
createMagazineTemplate(sessionId: string, request: ISetMagazineRequest): void;
|
||||
}
|
10
ServerMod/types/controllers/ClientLogController.d.ts
vendored
Normal file
10
ServerMod/types/controllers/ClientLogController.d.ts
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
import { IClientLogRequest } from "@spt/models/spt/logging/IClientLogRequest";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
export declare class ClientLogController {
|
||||
protected logger: ILogger;
|
||||
constructor(logger: ILogger);
|
||||
/**
|
||||
* Handle /singleplayer/log
|
||||
*/
|
||||
clientLog(logRequest: IClientLogRequest): void;
|
||||
}
|
70
ServerMod/types/controllers/CustomizationController.d.ts
vendored
Normal file
70
ServerMod/types/controllers/CustomizationController.d.ts
vendored
Normal file
@ -0,0 +1,70 @@
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { ISuit } from "@spt/models/eft/common/tables/ITrader";
|
||||
import { IBuyClothingRequestData, IPaymentItemForClothing } from "@spt/models/eft/customization/IBuyClothingRequestData";
|
||||
import { IWearClothingRequestData } from "@spt/models/eft/customization/IWearClothingRequestData";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
|
||||
import { SaveServer } from "@spt/servers/SaveServer";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
export declare class CustomizationController {
|
||||
protected logger: ILogger;
|
||||
protected eventOutputHolder: EventOutputHolder;
|
||||
protected databaseService: DatabaseService;
|
||||
protected saveServer: SaveServer;
|
||||
protected localisationService: LocalisationService;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected readonly clothingIds: {
|
||||
lowerParentId: string;
|
||||
upperParentId: string;
|
||||
};
|
||||
constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, databaseService: DatabaseService, saveServer: SaveServer, localisationService: LocalisationService, profileHelper: ProfileHelper);
|
||||
/**
|
||||
* Get purchasable clothing items from trader that match players side (usec/bear)
|
||||
* @param traderID trader to look up clothing for
|
||||
* @param sessionID Session id
|
||||
* @returns ISuit array
|
||||
*/
|
||||
getTraderSuits(traderID: string, sessionID: string): ISuit[];
|
||||
/**
|
||||
* Handle CustomizationWear event
|
||||
* Equip one to many clothing items to player
|
||||
*/
|
||||
wearClothing(pmcData: IPmcData, wearClothingRequest: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle CustomizationBuy event
|
||||
* Purchase/unlock a clothing item from a trader
|
||||
* @param pmcData Player profile
|
||||
* @param buyClothingRequest Request object
|
||||
* @param sessionId Session id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
buyClothing(pmcData: IPmcData, buyClothingRequest: IBuyClothingRequestData, sessionId: string): IItemEventRouterResponse;
|
||||
protected getTraderClothingOffer(sessionId: string, offerId: string): ISuit;
|
||||
/**
|
||||
* Has an outfit been purchased by a player
|
||||
* @param suitId clothing id
|
||||
* @param sessionID Session id of profile to check for clothing in
|
||||
* @returns true if already purchased
|
||||
*/
|
||||
protected outfitAlreadyPurchased(suitId: string, sessionID: string): boolean;
|
||||
/**
|
||||
* Update output object and player profile with purchase details
|
||||
* @param sessionId Session id
|
||||
* @param pmcData Player profile
|
||||
* @param itemsToPayForClothingWith Clothing purchased
|
||||
* @param output Client response
|
||||
*/
|
||||
protected payForClothingItems(sessionId: string, pmcData: IPmcData, itemsToPayForClothingWith: IPaymentItemForClothing[], output: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* Update output object and player profile with purchase details for single piece of clothing
|
||||
* @param sessionId Session id
|
||||
* @param pmcData Player profile
|
||||
* @param paymentItemDetails Payment details
|
||||
* @param output Client response
|
||||
*/
|
||||
protected payForClothingItem(sessionId: string, pmcData: IPmcData, paymentItemDetails: IPaymentItemForClothing, output: IItemEventRouterResponse): void;
|
||||
protected getAllTraderSuits(sessionID: string): ISuit[];
|
||||
}
|
161
ServerMod/types/controllers/DialogueController.d.ts
vendored
Normal file
161
ServerMod/types/controllers/DialogueController.d.ts
vendored
Normal file
@ -0,0 +1,161 @@
|
||||
import { IDialogueChatBot } from "@spt/helpers/Dialogue/IDialogueChatBot";
|
||||
import { DialogueHelper } from "@spt/helpers/DialogueHelper";
|
||||
import { NotificationSendHelper } from "@spt/helpers/NotificationSendHelper";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { IDeleteFriendRequest } from "@spt/models/eft/dialog/IDeleteFriendRequest";
|
||||
import { IFriendRequestData } from "@spt/models/eft/dialog/IFriendRequestData";
|
||||
import { IFriendRequestSendResponse } from "@spt/models/eft/dialog/IFriendRequestSendResponse";
|
||||
import { IGetAllAttachmentsResponse } from "@spt/models/eft/dialog/IGetAllAttachmentsResponse";
|
||||
import { IGetFriendListDataResponse } from "@spt/models/eft/dialog/IGetFriendListDataResponse";
|
||||
import { IGetMailDialogViewRequestData } from "@spt/models/eft/dialog/IGetMailDialogViewRequestData";
|
||||
import { IGetMailDialogViewResponseData } from "@spt/models/eft/dialog/IGetMailDialogViewResponseData";
|
||||
import { ISendMessageRequest } from "@spt/models/eft/dialog/ISendMessageRequest";
|
||||
import { IDialogue, IDialogueInfo, IMessage, ISptProfile, IUserDialogInfo } from "@spt/models/eft/profile/ISptProfile";
|
||||
import { MessageType } from "@spt/models/enums/MessageType";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { SaveServer } from "@spt/servers/SaveServer";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { MailSendService } from "@spt/services/MailSendService";
|
||||
import { TimeUtil } from "@spt/utils/TimeUtil";
|
||||
export declare class DialogueController {
|
||||
protected logger: ILogger;
|
||||
protected saveServer: SaveServer;
|
||||
protected timeUtil: TimeUtil;
|
||||
protected dialogueHelper: DialogueHelper;
|
||||
protected notificationSendHelper: NotificationSendHelper;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected mailSendService: MailSendService;
|
||||
protected localisationService: LocalisationService;
|
||||
protected configServer: ConfigServer;
|
||||
protected dialogueChatBots: IDialogueChatBot[];
|
||||
constructor(logger: ILogger, saveServer: SaveServer, timeUtil: TimeUtil, dialogueHelper: DialogueHelper, notificationSendHelper: NotificationSendHelper, profileHelper: ProfileHelper, mailSendService: MailSendService, localisationService: LocalisationService, configServer: ConfigServer, dialogueChatBots: IDialogueChatBot[]);
|
||||
registerChatBot(chatBot: IDialogueChatBot): void;
|
||||
/** Handle onUpdate spt event */
|
||||
update(): void;
|
||||
/**
|
||||
* Handle client/friend/list
|
||||
* @returns IGetFriendListDataResponse
|
||||
*/
|
||||
getFriendList(sessionID: string): IGetFriendListDataResponse;
|
||||
/**
|
||||
* Handle client/mail/dialog/list
|
||||
* Create array holding trader dialogs and mail interactions with player
|
||||
* Set the content of the dialogue on the list tab.
|
||||
* @param sessionID Session Id
|
||||
* @returns array of dialogs
|
||||
*/
|
||||
generateDialogueList(sessionID: string): IDialogueInfo[];
|
||||
/**
|
||||
* Get the content of a dialogue
|
||||
* @param dialogueID Dialog id
|
||||
* @param sessionID Session Id
|
||||
* @returns DialogueInfo
|
||||
*/
|
||||
getDialogueInfo(dialogueID: string, sessionID: string): IDialogueInfo;
|
||||
/**
|
||||
* Get the users involved in a dialog (player + other party)
|
||||
* @param dialog The dialog to check for users
|
||||
* @param messageType What type of message is being sent
|
||||
* @param sessionID Player id
|
||||
* @returns IUserDialogInfo array
|
||||
*/
|
||||
getDialogueUsers(dialog: IDialogue, messageType: MessageType, sessionID: string): IUserDialogInfo[] | undefined;
|
||||
/**
|
||||
* Handle client/mail/dialog/view
|
||||
* Handle player clicking 'messenger' and seeing all the messages they've recieved
|
||||
* Set the content of the dialogue on the details panel, showing all the messages
|
||||
* for the specified dialogue.
|
||||
* @param request Get dialog request
|
||||
* @param sessionId Session id
|
||||
* @returns IGetMailDialogViewResponseData object
|
||||
*/
|
||||
generateDialogueView(request: IGetMailDialogViewRequestData, sessionId: string): IGetMailDialogViewResponseData;
|
||||
/**
|
||||
* Get dialog from player profile, create if doesn't exist
|
||||
* @param profile Player profile
|
||||
* @param request get dialog request (params used when dialog doesnt exist in profile)
|
||||
* @returns Dialogue
|
||||
*/
|
||||
protected getDialogByIdFromProfile(profile: ISptProfile, request: IGetMailDialogViewRequestData): IDialogue;
|
||||
/**
|
||||
* Get the users involved in a mail between two entities
|
||||
* @param fullProfile Player profile
|
||||
* @param dialogUsers The participants of the mail
|
||||
* @returns IUserDialogInfo array
|
||||
*/
|
||||
protected getProfilesForMail(fullProfile: ISptProfile, dialogUsers?: IUserDialogInfo[]): IUserDialogInfo[];
|
||||
/**
|
||||
* Get a count of messages with attachments from a particular dialog
|
||||
* @param sessionID Session id
|
||||
* @param dialogueID Dialog id
|
||||
* @returns Count of messages with attachments
|
||||
*/
|
||||
protected getUnreadMessagesWithAttachmentsCount(sessionID: string, dialogueID: string): number;
|
||||
/**
|
||||
* Does array have messages with uncollected rewards (includes expired rewards)
|
||||
* @param messages Messages to check
|
||||
* @returns true if uncollected rewards found
|
||||
*/
|
||||
protected messagesHaveUncollectedRewards(messages: IMessage[]): boolean;
|
||||
/**
|
||||
* Handle client/mail/dialog/remove
|
||||
* Remove an entire dialog with an entity (trader/user)
|
||||
* @param dialogueId id of the dialog to remove
|
||||
* @param sessionId Player id
|
||||
*/
|
||||
removeDialogue(dialogueId: string, sessionId: string): void;
|
||||
/** Handle client/mail/dialog/pin && Handle client/mail/dialog/unpin */
|
||||
setDialoguePin(dialogueId: string, shouldPin: boolean, sessionId: string): void;
|
||||
/**
|
||||
* Handle client/mail/dialog/read
|
||||
* Set a dialog to be read (no number alert/attachment alert)
|
||||
* @param dialogueIds Dialog ids to set as read
|
||||
* @param sessionId Player profile id
|
||||
*/
|
||||
setRead(dialogueIds: string[], sessionId: string): void;
|
||||
/**
|
||||
* Handle client/mail/dialog/getAllAttachments
|
||||
* Get all uncollected items attached to mail in a particular dialog
|
||||
* @param dialogueId Dialog to get mail attachments from
|
||||
* @param sessionId Session id
|
||||
* @returns IGetAllAttachmentsResponse
|
||||
*/
|
||||
getAllAttachments(dialogueId: string, sessionId: string): IGetAllAttachmentsResponse | undefined;
|
||||
/** client/mail/msg/send */
|
||||
sendMessage(sessionId: string, request: ISendMessageRequest): string;
|
||||
/**
|
||||
* Get messages from a specific dialog that have items not expired
|
||||
* @param sessionId Session id
|
||||
* @param dialogueId Dialog to get mail attachments from
|
||||
* @returns Message array
|
||||
*/
|
||||
protected getActiveMessagesFromDialog(sessionId: string, dialogueId: string): IMessage[];
|
||||
/**
|
||||
* Return array of messages with uncollected items (includes expired)
|
||||
* @param messages Messages to parse
|
||||
* @returns messages with items to collect
|
||||
*/
|
||||
protected getMessagesWithAttachments(messages: IMessage[]): IMessage[];
|
||||
/**
|
||||
* Delete expired items from all messages in player profile. triggers when updating traders.
|
||||
* @param sessionId Session id
|
||||
*/
|
||||
protected removeExpiredItemsFromMessages(sessionId: string): void;
|
||||
/**
|
||||
* Removes expired items from a message in player profile
|
||||
* @param sessionId Session id
|
||||
* @param dialogueId Dialog id
|
||||
*/
|
||||
protected removeExpiredItemsFromMessage(sessionId: string, dialogueId: string): void;
|
||||
/**
|
||||
* Has a dialog message expired
|
||||
* @param message Message to check expiry of
|
||||
* @returns true or false
|
||||
*/
|
||||
protected messageHasExpired(message: IMessage): boolean;
|
||||
/** Handle client/friend/request/send */
|
||||
sendFriendRequest(sessionID: string, request: IFriendRequestData): IFriendRequestSendResponse;
|
||||
/** Handle client/friend/delete */
|
||||
deleteFriend(sessionID: string, request: IDeleteFriendRequest): void;
|
||||
}
|
137
ServerMod/types/controllers/GameController.d.ts
vendored
Normal file
137
ServerMod/types/controllers/GameController.d.ts
vendored
Normal file
@ -0,0 +1,137 @@
|
||||
import { ApplicationContext } from "@spt/context/ApplicationContext";
|
||||
import { HideoutHelper } from "@spt/helpers/HideoutHelper";
|
||||
import { HttpServerHelper } from "@spt/helpers/HttpServerHelper";
|
||||
import { InventoryHelper } from "@spt/helpers/InventoryHelper";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { PreSptModLoader } from "@spt/loaders/PreSptModLoader";
|
||||
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { ICheckVersionResponse } from "@spt/models/eft/game/ICheckVersionResponse";
|
||||
import { ICurrentGroupResponse } from "@spt/models/eft/game/ICurrentGroupResponse";
|
||||
import { IGameConfigResponse } from "@spt/models/eft/game/IGameConfigResponse";
|
||||
import { IGameKeepAliveResponse } from "@spt/models/eft/game/IGameKeepAliveResponse";
|
||||
import { IGameModeRequestData } from "@spt/models/eft/game/IGameModeRequestData";
|
||||
import { IGetRaidTimeRequest } from "@spt/models/eft/game/IGetRaidTimeRequest";
|
||||
import { IGetRaidTimeResponse } from "@spt/models/eft/game/IGetRaidTimeResponse";
|
||||
import { IServerDetails } from "@spt/models/eft/game/IServerDetails";
|
||||
import { ISurveyResponseData } from "@spt/models/eft/game/ISurveyResponseData";
|
||||
import { ISptProfile } from "@spt/models/eft/profile/ISptProfile";
|
||||
import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
|
||||
import { ICoreConfig } from "@spt/models/spt/config/ICoreConfig";
|
||||
import { IHideoutConfig } from "@spt/models/spt/config/IHideoutConfig";
|
||||
import { IHttpConfig } from "@spt/models/spt/config/IHttpConfig";
|
||||
import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { CustomLocationWaveService } from "@spt/services/CustomLocationWaveService";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { GiftService } from "@spt/services/GiftService";
|
||||
import { ItemBaseClassService } from "@spt/services/ItemBaseClassService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { OpenZoneService } from "@spt/services/OpenZoneService";
|
||||
import { PostDbLoadService } from "@spt/services/PostDbLoadService";
|
||||
import { ProfileActivityService } from "@spt/services/ProfileActivityService";
|
||||
import { ProfileFixerService } from "@spt/services/ProfileFixerService";
|
||||
import { RaidTimeAdjustmentService } from "@spt/services/RaidTimeAdjustmentService";
|
||||
import { SeasonalEventService } from "@spt/services/SeasonalEventService";
|
||||
import { HashUtil } from "@spt/utils/HashUtil";
|
||||
import { RandomUtil } from "@spt/utils/RandomUtil";
|
||||
import { TimeUtil } from "@spt/utils/TimeUtil";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
export declare class GameController {
|
||||
protected logger: ILogger;
|
||||
protected databaseService: DatabaseService;
|
||||
protected timeUtil: TimeUtil;
|
||||
protected hashUtil: HashUtil;
|
||||
protected preSptModLoader: PreSptModLoader;
|
||||
protected httpServerHelper: HttpServerHelper;
|
||||
protected inventoryHelper: InventoryHelper;
|
||||
protected randomUtil: RandomUtil;
|
||||
protected hideoutHelper: HideoutHelper;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected profileFixerService: ProfileFixerService;
|
||||
protected localisationService: LocalisationService;
|
||||
protected postDbLoadService: PostDbLoadService;
|
||||
protected customLocationWaveService: CustomLocationWaveService;
|
||||
protected openZoneService: OpenZoneService;
|
||||
protected seasonalEventService: SeasonalEventService;
|
||||
protected itemBaseClassService: ItemBaseClassService;
|
||||
protected giftService: GiftService;
|
||||
protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
|
||||
protected profileActivityService: ProfileActivityService;
|
||||
protected applicationContext: ApplicationContext;
|
||||
protected configServer: ConfigServer;
|
||||
protected cloner: ICloner;
|
||||
protected httpConfig: IHttpConfig;
|
||||
protected coreConfig: ICoreConfig;
|
||||
protected ragfairConfig: IRagfairConfig;
|
||||
protected hideoutConfig: IHideoutConfig;
|
||||
protected botConfig: IBotConfig;
|
||||
constructor(logger: ILogger, databaseService: DatabaseService, timeUtil: TimeUtil, hashUtil: HashUtil, preSptModLoader: PreSptModLoader, httpServerHelper: HttpServerHelper, inventoryHelper: InventoryHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, postDbLoadService: PostDbLoadService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, raidTimeAdjustmentService: RaidTimeAdjustmentService, profileActivityService: ProfileActivityService, applicationContext: ApplicationContext, configServer: ConfigServer, cloner: ICloner);
|
||||
load(): void;
|
||||
/**
|
||||
* Handle client/game/start
|
||||
*/
|
||||
gameStart(_url: string, _info: IEmptyRequestData, sessionID: string, startTimeStampMS: number): void;
|
||||
protected migrate39xProfile(fullProfile: ISptProfile): void;
|
||||
/**
|
||||
* Handle client/game/config
|
||||
*/
|
||||
getGameConfig(sessionID: string): IGameConfigResponse;
|
||||
/**
|
||||
* Handle client/game/mode
|
||||
*/
|
||||
getGameMode(sessionID: string, info: IGameModeRequestData): any;
|
||||
/**
|
||||
* Handle client/server/list
|
||||
*/
|
||||
getServer(sessionId: string): IServerDetails[];
|
||||
/**
|
||||
* Handle client/match/group/current
|
||||
*/
|
||||
getCurrentGroup(sessionId: string): ICurrentGroupResponse;
|
||||
/**
|
||||
* Handle client/checkVersion
|
||||
*/
|
||||
getValidGameVersion(sessionId: string): ICheckVersionResponse;
|
||||
/**
|
||||
* Handle client/game/keepalive
|
||||
*/
|
||||
getKeepAlive(sessionId: string): IGameKeepAliveResponse;
|
||||
/**
|
||||
* Handle singleplayer/settings/getRaidTime
|
||||
*/
|
||||
getRaidTime(sessionId: string, request: IGetRaidTimeRequest): IGetRaidTimeResponse;
|
||||
/**
|
||||
* Players set botReload to a high value and don't expect the crazy fast reload speeds, give them a warn about it
|
||||
* @param pmcProfile Player profile
|
||||
*/
|
||||
protected warnOnActiveBotReloadSkill(pmcProfile: IPmcData): void;
|
||||
/**
|
||||
* When player logs in, iterate over all active effects and reduce timer
|
||||
* @param pmcProfile Profile to adjust values for
|
||||
*/
|
||||
protected updateProfileHealthValues(pmcProfile: IPmcData): void;
|
||||
/**
|
||||
* Send starting gifts to profile after x days
|
||||
* @param pmcProfile Profile to add gifts to
|
||||
*/
|
||||
protected sendPraporGiftsToNewProfiles(pmcProfile: IPmcData): void;
|
||||
/**
|
||||
* Get a list of installed mods and save their details to the profile being used
|
||||
* @param fullProfile Profile to add mod details to
|
||||
*/
|
||||
protected saveActiveModsToProfile(fullProfile: ISptProfile): void;
|
||||
/**
|
||||
* Add the logged in players name to PMC name pool
|
||||
* @param pmcProfile Profile of player to get name from
|
||||
*/
|
||||
protected addPlayerToPMCNames(pmcProfile: IPmcData): void;
|
||||
/**
|
||||
* Check for a dialog with the key 'undefined', and remove it
|
||||
* @param fullProfile Profile to check for dialog in
|
||||
*/
|
||||
protected checkForAndRemoveUndefinedDialogs(fullProfile: ISptProfile): void;
|
||||
protected logProfileDetails(fullProfile: ISptProfile): void;
|
||||
getSurvey(sessionId: string): ISurveyResponseData;
|
||||
}
|
8
ServerMod/types/controllers/HandbookController.d.ts
vendored
Normal file
8
ServerMod/types/controllers/HandbookController.d.ts
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
import { HandbookHelper } from "@spt/helpers/HandbookHelper";
|
||||
import { DatabaseServer } from "@spt/servers/DatabaseServer";
|
||||
export declare class HandbookController {
|
||||
protected databaseServer: DatabaseServer;
|
||||
protected handbookHelper: HandbookHelper;
|
||||
constructor(databaseServer: DatabaseServer, handbookHelper: HandbookHelper);
|
||||
load(): void;
|
||||
}
|
60
ServerMod/types/controllers/HealthController.d.ts
vendored
Normal file
60
ServerMod/types/controllers/HealthController.d.ts
vendored
Normal file
@ -0,0 +1,60 @@
|
||||
import { HealthHelper } from "@spt/helpers/HealthHelper";
|
||||
import { InventoryHelper } from "@spt/helpers/InventoryHelper";
|
||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IHealthTreatmentRequestData } from "@spt/models/eft/health/IHealthTreatmentRequestData";
|
||||
import { IOffraidEatRequestData } from "@spt/models/eft/health/IOffraidEatRequestData";
|
||||
import { IOffraidHealRequestData } from "@spt/models/eft/health/IOffraidHealRequestData";
|
||||
import { IWorkoutData } from "@spt/models/eft/health/IWorkoutData";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { PaymentService } from "@spt/services/PaymentService";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
export declare class HealthController {
|
||||
protected logger: ILogger;
|
||||
protected eventOutputHolder: EventOutputHolder;
|
||||
protected itemHelper: ItemHelper;
|
||||
protected paymentService: PaymentService;
|
||||
protected inventoryHelper: InventoryHelper;
|
||||
protected localisationService: LocalisationService;
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected healthHelper: HealthHelper;
|
||||
protected cloner: ICloner;
|
||||
constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, itemHelper: ItemHelper, paymentService: PaymentService, inventoryHelper: InventoryHelper, localisationService: LocalisationService, httpResponse: HttpResponseUtil, healthHelper: HealthHelper, cloner: ICloner);
|
||||
/**
|
||||
* When healing in menu
|
||||
* @param pmcData Player profile
|
||||
* @param request Healing request
|
||||
* @param sessionID Player id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
offraidHeal(pmcData: IPmcData, request: IOffraidHealRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle Eat event
|
||||
* Consume food/water outside of a raid
|
||||
* @param pmcData Player profile
|
||||
* @param request Eat request
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
offraidEat(pmcData: IPmcData, request: IOffraidEatRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle RestoreHealth event
|
||||
* Occurs on post-raid healing page
|
||||
* @param pmcData player profile
|
||||
* @param healthTreatmentRequest Request data from client
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
healthTreatment(pmcData: IPmcData, healthTreatmentRequest: IHealthTreatmentRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* applies skills from hideout workout.
|
||||
* @param pmcData Player profile
|
||||
* @param info Request data
|
||||
* @param sessionID
|
||||
*/
|
||||
applyWorkoutChanges(pmcData: IPmcData, info: IWorkoutData, sessionId: string): void;
|
||||
}
|
303
ServerMod/types/controllers/HideoutController.d.ts
vendored
Normal file
303
ServerMod/types/controllers/HideoutController.d.ts
vendored
Normal file
@ -0,0 +1,303 @@
|
||||
import { ScavCaseRewardGenerator } from "@spt/generators/ScavCaseRewardGenerator";
|
||||
import { HideoutHelper } from "@spt/helpers/HideoutHelper";
|
||||
import { InventoryHelper } from "@spt/helpers/InventoryHelper";
|
||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||
import { PaymentHelper } from "@spt/helpers/PaymentHelper";
|
||||
import { PresetHelper } from "@spt/helpers/PresetHelper";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IBotHideoutArea, IProduct, ITaskConditionCounter } from "@spt/models/eft/common/tables/IBotBase";
|
||||
import { IHandleQTEEventRequestData } from "@spt/models/eft/hideout/IHandleQTEEventRequestData";
|
||||
import { IHideoutArea, IStage } from "@spt/models/eft/hideout/IHideoutArea";
|
||||
import { IHideoutCancelProductionRequestData } from "@spt/models/eft/hideout/IHideoutCancelProductionRequestData";
|
||||
import { IHideoutCircleOfCultistProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutCircleOfCultistProductionStartRequestData";
|
||||
import { IHideoutContinuousProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutContinuousProductionStartRequestData";
|
||||
import { IHideoutDeleteProductionRequestData } from "@spt/models/eft/hideout/IHideoutDeleteProductionRequestData";
|
||||
import { IHideoutImproveAreaRequestData } from "@spt/models/eft/hideout/IHideoutImproveAreaRequestData";
|
||||
import { IHideoutProduction } from "@spt/models/eft/hideout/IHideoutProduction";
|
||||
import { IHideoutPutItemInRequestData } from "@spt/models/eft/hideout/IHideoutPutItemInRequestData";
|
||||
import { IHideoutScavCaseStartRequestData } from "@spt/models/eft/hideout/IHideoutScavCaseStartRequestData";
|
||||
import { IHideoutSingleProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutSingleProductionStartRequestData";
|
||||
import { IHideoutTakeItemOutRequestData } from "@spt/models/eft/hideout/IHideoutTakeItemOutRequestData";
|
||||
import { IHideoutTakeProductionRequestData } from "@spt/models/eft/hideout/IHideoutTakeProductionRequestData";
|
||||
import { IHideoutToggleAreaRequestData } from "@spt/models/eft/hideout/IHideoutToggleAreaRequestData";
|
||||
import { IHideoutUpgradeCompleteRequestData } from "@spt/models/eft/hideout/IHideoutUpgradeCompleteRequestData";
|
||||
import { IHideoutUpgradeRequestData } from "@spt/models/eft/hideout/IHideoutUpgradeRequestData";
|
||||
import { IQteData, IQteResult } from "@spt/models/eft/hideout/IQteData";
|
||||
import { IRecordShootingRangePoints } from "@spt/models/eft/hideout/IRecordShootingRangePoints";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { HideoutAreas } from "@spt/models/enums/HideoutAreas";
|
||||
import { IHideoutConfig } from "@spt/models/spt/config/IHideoutConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { SaveServer } from "@spt/servers/SaveServer";
|
||||
import { CircleOfCultistService } from "@spt/services/CircleOfCultistService";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { FenceService } from "@spt/services/FenceService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { PlayerService } from "@spt/services/PlayerService";
|
||||
import { ProfileActivityService } from "@spt/services/ProfileActivityService";
|
||||
import { HashUtil } from "@spt/utils/HashUtil";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
import { RandomUtil } from "@spt/utils/RandomUtil";
|
||||
import { TimeUtil } from "@spt/utils/TimeUtil";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
export declare class HideoutController {
|
||||
protected logger: ILogger;
|
||||
protected hashUtil: HashUtil;
|
||||
protected timeUtil: TimeUtil;
|
||||
protected databaseService: DatabaseService;
|
||||
protected randomUtil: RandomUtil;
|
||||
protected inventoryHelper: InventoryHelper;
|
||||
protected itemHelper: ItemHelper;
|
||||
protected saveServer: SaveServer;
|
||||
protected playerService: PlayerService;
|
||||
protected presetHelper: PresetHelper;
|
||||
protected paymentHelper: PaymentHelper;
|
||||
protected eventOutputHolder: EventOutputHolder;
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected hideoutHelper: HideoutHelper;
|
||||
protected scavCaseRewardGenerator: ScavCaseRewardGenerator;
|
||||
protected localisationService: LocalisationService;
|
||||
protected profileActivityService: ProfileActivityService;
|
||||
protected configServer: ConfigServer;
|
||||
protected fenceService: FenceService;
|
||||
protected circleOfCultistService: CircleOfCultistService;
|
||||
protected cloner: ICloner;
|
||||
/** Key used in TaskConditionCounters array */
|
||||
protected static nameTaskConditionCountersCraftingId: string;
|
||||
protected hideoutConfig: IHideoutConfig;
|
||||
constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseService: DatabaseService, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, itemHelper: ItemHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, eventOutputHolder: EventOutputHolder, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, localisationService: LocalisationService, profileActivityService: ProfileActivityService, configServer: ConfigServer, fenceService: FenceService, circleOfCultistService: CircleOfCultistService, cloner: ICloner);
|
||||
/**
|
||||
* Handle HideoutUpgrade event
|
||||
* Start a hideout area upgrade
|
||||
* @param pmcData Player profile
|
||||
* @param request upgrade start request
|
||||
* @param sessionID Session id
|
||||
* @param output Client response
|
||||
*/
|
||||
startUpgrade(pmcData: IPmcData, request: IHideoutUpgradeRequestData, sessionID: string, output: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* Handle HideoutUpgradeComplete event
|
||||
* Complete a hideout area upgrade
|
||||
* @param pmcData Player profile
|
||||
* @param request Completed upgrade request
|
||||
* @param sessionID Session id
|
||||
* @param output Client response
|
||||
*/
|
||||
upgradeComplete(pmcData: IPmcData, request: IHideoutUpgradeCompleteRequestData, sessionID: string, output: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* Upgrade wall status to visible in profile if medstation/water collector are both level 1
|
||||
* @param pmcData Player profile
|
||||
*/
|
||||
protected SetWallVisibleIfPrereqsMet(pmcData: IPmcData): void;
|
||||
/**
|
||||
* @param pmcData Profile to edit
|
||||
* @param output Object to send back to client
|
||||
* @param sessionID Session/player id
|
||||
* @param profileParentHideoutArea Current hideout area for profile
|
||||
* @param dbHideoutArea Hideout area being upgraded
|
||||
* @param hideoutStage Stage hideout area is being upgraded to
|
||||
*/
|
||||
protected addContainerImprovementToProfile(output: IItemEventRouterResponse, sessionID: string, pmcData: IPmcData, profileParentHideoutArea: IBotHideoutArea, dbHideoutArea: IHideoutArea, hideoutStage: IStage): void;
|
||||
/**
|
||||
* Add stand1/stand2/stand3 inventory items to profile, depending on passed in hideout stage
|
||||
* @param sessionId Session id
|
||||
* @param equipmentPresetStage Current EQUIPMENT_PRESETS_STAND stage data
|
||||
* @param pmcData Player profile
|
||||
* @param equipmentPresetHideoutArea
|
||||
* @param output Response to send back to client
|
||||
*/
|
||||
protected addMissingPresetStandItemsToProfile(sessionId: string, equipmentPresetStage: IStage, pmcData: IPmcData, equipmentPresetHideoutArea: IHideoutArea, output: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* Add an inventory item to profile from a hideout area stage data
|
||||
* @param pmcData Profile to update
|
||||
* @param dbHideoutArea Hideout area from db being upgraded
|
||||
* @param hideoutStage Stage area upgraded to
|
||||
*/
|
||||
protected addUpdateInventoryItemToProfile(sessionId: string, pmcData: IPmcData, dbHideoutArea: IHideoutArea, hideoutStage: IStage): void;
|
||||
/**
|
||||
* @param output Object to send to client
|
||||
* @param sessionID Session/player id
|
||||
* @param areaType Hideout area that had stash added
|
||||
* @param hideoutDbData Hideout area that caused addition of stash
|
||||
* @param hideoutStage Hideout area upgraded to this
|
||||
*/
|
||||
protected addContainerUpgradeToClientOutput(sessionID: string, areaType: HideoutAreas, hideoutDbData: IHideoutArea, hideoutStage: IStage, output: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* Handle HideoutPutItemsInAreaSlots
|
||||
* Create item in hideout slot item array, remove item from player inventory
|
||||
* @param pmcData Profile data
|
||||
* @param addItemToHideoutRequest reqeust from client to place item in area slot
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse object
|
||||
*/
|
||||
putItemsInAreaSlots(pmcData: IPmcData, addItemToHideoutRequest: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle HideoutTakeItemsFromAreaSlots event
|
||||
* Remove item from hideout area and place into player inventory
|
||||
* @param pmcData Player profile
|
||||
* @param request Take item out of area request
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
takeItemsFromAreaSlots(pmcData: IPmcData, request: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Find resource item in hideout area, add copy to player inventory, remove Item from hideout slot
|
||||
* @param sessionID Session id
|
||||
* @param pmcData Profile to update
|
||||
* @param removeResourceRequest client request
|
||||
* @param output response to send to client
|
||||
* @param hideoutArea Area fuel is being removed from
|
||||
* @returns IItemEventRouterResponse response
|
||||
*/
|
||||
protected removeResourceFromArea(sessionID: string, pmcData: IPmcData, removeResourceRequest: IHideoutTakeItemOutRequestData, output: IItemEventRouterResponse, hideoutArea: IBotHideoutArea): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle HideoutToggleArea event
|
||||
* Toggle area on/off
|
||||
* @param pmcData Player profile
|
||||
* @param request Toggle area request
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
toggleArea(pmcData: IPmcData, request: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle HideoutSingleProductionStart event
|
||||
* Start production for an item from hideout area
|
||||
* @param pmcData Player profile
|
||||
* @param body Start prodution of single item request
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle HideoutScavCaseProductionStart event
|
||||
* Handles event after clicking 'start' on the scav case hideout page
|
||||
* @param pmcData player profile
|
||||
* @param body client request object
|
||||
* @param sessionID session id
|
||||
* @returns item event router response
|
||||
*/
|
||||
scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Adjust scav case time based on fence standing
|
||||
*
|
||||
* @param pmcData Player profile
|
||||
* @param productionTime Time to complete scav case in seconds
|
||||
* @returns Adjusted scav case time in seconds
|
||||
*/
|
||||
protected getScavCaseTime(pmcData: IPmcData, productionTime: number): number;
|
||||
/**
|
||||
* Add generated scav case rewards to player profile
|
||||
* @param pmcData player profile to add rewards to
|
||||
* @param rewards reward items to add to profile
|
||||
* @param recipeId recipe id to save into Production dict
|
||||
*/
|
||||
protected addScavCaseRewardsToProfile(pmcData: IPmcData, rewards: IProduct[], recipeId: string): void;
|
||||
/**
|
||||
* Start production of continuously created item
|
||||
* @param pmcData Player profile
|
||||
* @param request Continious production request
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
continuousProductionStart(pmcData: IPmcData, request: IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle HideoutTakeProduction event
|
||||
* Take completed item out of hideout area and place into player inventory
|
||||
* @param pmcData Player profile
|
||||
* @param request Remove production from area request
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
takeProduction(pmcData: IPmcData, request: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Take recipe-type production out of hideout area and place into player inventory
|
||||
* @param sessionID Session id
|
||||
* @param recipe Completed recipe of item
|
||||
* @param pmcData Player profile
|
||||
* @param request Remove production from area request
|
||||
* @param output Output object to update
|
||||
*/
|
||||
protected handleRecipe(sessionID: string, recipe: IHideoutProduction, pmcData: IPmcData, request: IHideoutTakeProductionRequestData, output: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* Get the "CounterHoursCrafting" TaskConditionCounter from a profile
|
||||
* @param pmcData Profile to get counter from
|
||||
* @param recipe Recipe being crafted
|
||||
* @returns ITaskConditionCounter
|
||||
*/
|
||||
protected getHoursCraftingTaskConditionCounter(pmcData: IPmcData, recipe: IHideoutProduction): ITaskConditionCounter;
|
||||
/**
|
||||
* Handles generating case rewards and sending to player inventory
|
||||
* @param sessionID Session id
|
||||
* @param pmcData Player profile
|
||||
* @param request Get rewards from scavcase craft request
|
||||
* @param output Output object to update
|
||||
*/
|
||||
protected handleScavCase(sessionID: string, pmcData: IPmcData, request: IHideoutTakeProductionRequestData, output: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* Get quick time event list for hideout
|
||||
* // TODO - implement this
|
||||
* @param sessionId Session id
|
||||
* @returns IQteData array
|
||||
*/
|
||||
getQteList(sessionId: string): IQteData[];
|
||||
/**
|
||||
* Handle HideoutQuickTimeEvent on client/game/profile/items/moving
|
||||
* Called after completing workout at gym
|
||||
* @param sessionId Session id
|
||||
* @param pmcData Profile to adjust
|
||||
* @param request QTE result object
|
||||
*/
|
||||
handleQTEEventOutcome(sessionId: string, pmcData: IPmcData, request: IHandleQTEEventRequestData, output: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* Apply mild/severe muscle pain after gym use
|
||||
* @param pmcData Profile to apply effect to
|
||||
* @param finishEffect Effect data to apply after completing QTE gym event
|
||||
*/
|
||||
protected handleMusclePain(pmcData: IPmcData, finishEffect: IQteResult): void;
|
||||
/**
|
||||
* Record a high score from the shooting range into a player profiles overallcounters
|
||||
* @param sessionId Session id
|
||||
* @param pmcData Profile to update
|
||||
* @param request shooting range score request
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
recordShootingRangePoints(sessionId: string, pmcData: IPmcData, request: IRecordShootingRangePoints): void;
|
||||
/**
|
||||
* Handle client/game/profile/items/moving - HideoutImproveArea
|
||||
* @param sessionId Session id
|
||||
* @param pmcData Profile to improve area in
|
||||
* @param request Improve area request data
|
||||
*/
|
||||
improveArea(sessionId: string, pmcData: IPmcData, request: IHideoutImproveAreaRequestData): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle client/game/profile/items/moving HideoutCancelProductionCommand
|
||||
* @param sessionId Session id
|
||||
* @param pmcData Profile with craft to cancel
|
||||
* @param request Cancel production request data
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
cancelProduction(sessionId: string, pmcData: IPmcData, request: IHideoutCancelProductionRequestData): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle client/game/profile/items/moving - HideoutCircleOfCultistProductionStart
|
||||
* @param sessionId Session id
|
||||
* @param pmcData Profile of crafter
|
||||
* @param request Request data
|
||||
*/
|
||||
circleOfCultistProductionStart(sessionId: string, pmcData: IPmcData, request: IHideoutCircleOfCultistProductionStartRequestData): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle HideoutDeleteProductionCommand event
|
||||
* @param sessionId Session id
|
||||
* @param pmcData Player profile
|
||||
* @param request Client request data
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
hideoutDeleteProductionCommand(sessionId: string, pmcData: IPmcData, request: IHideoutDeleteProductionRequestData): IItemEventRouterResponse;
|
||||
/**
|
||||
* Function called every `hideoutConfig.runIntervalSeconds` seconds as part of onUpdate event
|
||||
*/
|
||||
update(): void;
|
||||
}
|
45
ServerMod/types/controllers/InraidController.d.ts
vendored
Normal file
45
ServerMod/types/controllers/InraidController.d.ts
vendored
Normal file
@ -0,0 +1,45 @@
|
||||
import { ApplicationContext } from "@spt/context/ApplicationContext";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { IRegisterPlayerRequestData } from "@spt/models/eft/inRaid/IRegisterPlayerRequestData";
|
||||
import { IScavSaveRequestData } from "@spt/models/eft/inRaid/IScavSaveRequestData";
|
||||
import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
|
||||
import { IInRaidConfig } from "@spt/models/spt/config/IInRaidConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { SaveServer } from "@spt/servers/SaveServer";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
/**
|
||||
* Logic for handling In Raid callbacks
|
||||
*/
|
||||
export declare class InraidController {
|
||||
protected logger: ILogger;
|
||||
protected saveServer: SaveServer;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected localisationService: LocalisationService;
|
||||
protected applicationContext: ApplicationContext;
|
||||
protected configServer: ConfigServer;
|
||||
protected inRaidConfig: IInRaidConfig;
|
||||
protected botConfig: IBotConfig;
|
||||
constructor(logger: ILogger, saveServer: SaveServer, profileHelper: ProfileHelper, localisationService: LocalisationService, applicationContext: ApplicationContext, configServer: ConfigServer);
|
||||
/**
|
||||
* Save locationId to active profiles inraid object AND app context
|
||||
* @param sessionID Session id
|
||||
* @param info Register player request
|
||||
*/
|
||||
addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void;
|
||||
/**
|
||||
* Handle raid/profile/scavsave
|
||||
* Save profile state to disk
|
||||
* Handles pmc/pscav
|
||||
* @param offraidProfileData Post-raid scav profile data
|
||||
* @param sessionID Session id
|
||||
*/
|
||||
savePostRaidProfileForScav(offraidProfileData: IScavSaveRequestData, sessionID: string): void;
|
||||
/**
|
||||
* Get the inraid config from configs/inraid.json
|
||||
* @returns InRaid Config
|
||||
*/
|
||||
getInraidConfig(): IInRaidConfig;
|
||||
getTraitorScavHostileChance(url: string, sessionID: string): number;
|
||||
getBossConvertSettings(url: string, sessionId: string): string[];
|
||||
}
|
220
ServerMod/types/controllers/InsuranceController.d.ts
vendored
Normal file
220
ServerMod/types/controllers/InsuranceController.d.ts
vendored
Normal file
@ -0,0 +1,220 @@
|
||||
import { DialogueHelper } from "@spt/helpers/DialogueHelper";
|
||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { TraderHelper } from "@spt/helpers/TraderHelper";
|
||||
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IItem } from "@spt/models/eft/common/tables/IItem";
|
||||
import { IGetInsuranceCostRequestData } from "@spt/models/eft/insurance/IGetInsuranceCostRequestData";
|
||||
import { IGetInsuranceCostResponseData } from "@spt/models/eft/insurance/IGetInsuranceCostResponseData";
|
||||
import { IInsureRequestData } from "@spt/models/eft/insurance/IInsureRequestData";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { IInsurance } from "@spt/models/eft/profile/ISptProfile";
|
||||
import { IInsuranceConfig } from "@spt/models/spt/config/IInsuranceConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { SaveServer } from "@spt/servers/SaveServer";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { InsuranceService } from "@spt/services/InsuranceService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { MailSendService } from "@spt/services/MailSendService";
|
||||
import { PaymentService } from "@spt/services/PaymentService";
|
||||
import { RagfairPriceService } from "@spt/services/RagfairPriceService";
|
||||
import { HashUtil } from "@spt/utils/HashUtil";
|
||||
import { MathUtil } from "@spt/utils/MathUtil";
|
||||
import { RandomUtil } from "@spt/utils/RandomUtil";
|
||||
import { TimeUtil } from "@spt/utils/TimeUtil";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
export declare class InsuranceController {
|
||||
protected logger: ILogger;
|
||||
protected randomUtil: RandomUtil;
|
||||
protected mathUtil: MathUtil;
|
||||
protected hashUtil: HashUtil;
|
||||
protected eventOutputHolder: EventOutputHolder;
|
||||
protected timeUtil: TimeUtil;
|
||||
protected saveServer: SaveServer;
|
||||
protected databaseService: DatabaseService;
|
||||
protected itemHelper: ItemHelper;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected dialogueHelper: DialogueHelper;
|
||||
protected weightedRandomHelper: WeightedRandomHelper;
|
||||
protected traderHelper: TraderHelper;
|
||||
protected paymentService: PaymentService;
|
||||
protected insuranceService: InsuranceService;
|
||||
protected mailSendService: MailSendService;
|
||||
protected ragfairPriceService: RagfairPriceService;
|
||||
protected localisationService: LocalisationService;
|
||||
protected configServer: ConfigServer;
|
||||
protected cloner: ICloner;
|
||||
protected insuranceConfig: IInsuranceConfig;
|
||||
constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseService: DatabaseService, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, weightedRandomHelper: WeightedRandomHelper, traderHelper: TraderHelper, paymentService: PaymentService, insuranceService: InsuranceService, mailSendService: MailSendService, ragfairPriceService: RagfairPriceService, localisationService: LocalisationService, configServer: ConfigServer, cloner: ICloner);
|
||||
/**
|
||||
* Process insurance items of all profiles prior to being given back to the player through the mail service.
|
||||
*
|
||||
* @returns void
|
||||
*/
|
||||
processReturn(): void;
|
||||
/**
|
||||
* Process insurance items of a single profile prior to being given back to the player through the mail service.
|
||||
*
|
||||
* @returns void
|
||||
*/
|
||||
processReturnByProfile(sessionID: string): void;
|
||||
/**
|
||||
* Get all insured items that are ready to be processed in a specific profile.
|
||||
*
|
||||
* @param sessionID Session ID of the profile to check.
|
||||
* @param time The time to check ready status against. Current time by default.
|
||||
* @returns All insured items that are ready to be processed.
|
||||
*/
|
||||
protected filterInsuredItems(sessionID: string, time?: number): IInsurance[];
|
||||
/**
|
||||
* This method orchestrates the processing of insured items in a profile.
|
||||
*
|
||||
* @param insuranceDetails The insured items to process.
|
||||
* @param sessionID The session ID that should receive the processed items.
|
||||
* @returns void
|
||||
*/
|
||||
protected processInsuredItems(insuranceDetails: IInsurance[], sessionID: string): void;
|
||||
/**
|
||||
* Count all items in all insurance packages.
|
||||
* @param insurance
|
||||
* @returns
|
||||
*/
|
||||
protected countAllInsuranceItems(insurance: IInsurance[]): number;
|
||||
/**
|
||||
* Remove an insurance package from a profile using the package's system data information.
|
||||
*
|
||||
* @param sessionID The session ID of the profile to remove the package from.
|
||||
* @param index The array index of the insurance package to remove.
|
||||
* @returns void
|
||||
*/
|
||||
protected removeInsurancePackageFromProfile(sessionID: string, insPackage: IInsurance): void;
|
||||
/**
|
||||
* Finds the items that should be deleted based on the given Insurance object.
|
||||
*
|
||||
* @param rootItemParentID - The ID that should be assigned to all "hideout"/root items.
|
||||
* @param insured - The insurance object containing the items to evaluate for deletion.
|
||||
* @returns A Set containing the IDs of items that should be deleted.
|
||||
*/
|
||||
protected findItemsToDelete(rootItemParentID: string, insured: IInsurance): Set<string>;
|
||||
/**
|
||||
* Initialize a Map object that holds main-parents to all of their attachments. Note that "main-parent" in this
|
||||
* context refers to the parent item that an attachment is attached to. For example, a suppressor attached to a gun,
|
||||
* not the backpack that the gun is located in (the gun's parent).
|
||||
*
|
||||
* @param rootItemParentID - The ID that should be assigned to all "hideout"/root items.
|
||||
* @param insured - The insurance object containing the items to evaluate.
|
||||
* @param itemsMap - A Map object for quick item look-up by item ID.
|
||||
* @returns A Map object containing parent item IDs to arrays of their attachment items.
|
||||
*/
|
||||
protected populateParentAttachmentsMap(rootItemParentID: string, insured: IInsurance, itemsMap: Map<string, IItem>): Map<string, IItem[]>;
|
||||
/**
|
||||
* Remove attachments that can not be moddable in-raid from the parentAttachmentsMap. If no moddable attachments
|
||||
* remain, the parent is removed from the map as well.
|
||||
*
|
||||
* @param parentAttachmentsMap - A Map object containing parent item IDs to arrays of their attachment items.
|
||||
* @param itemsMap - A Map object for quick item look-up by item ID.
|
||||
* @returns A Map object containing parent item IDs to arrays of their attachment items which are not moddable in-raid.
|
||||
*/
|
||||
protected removeNonModdableAttachments(parentAttachmentsMap: Map<string, IItem[]>, itemsMap: Map<string, IItem>): Map<string, IItem[]>;
|
||||
/**
|
||||
* Process "regular" insurance items. Any insured item that is not an attached, attachment is considered a "regular"
|
||||
* item. This method iterates over them, preforming item deletion rolls to see if they should be deleted. If so,
|
||||
* they (and their attached, attachments, if any) are marked for deletion in the toDelete Set.
|
||||
*
|
||||
* @param insured The insurance object containing the items to evaluate.
|
||||
* @param toDelete A Set to keep track of items marked for deletion.
|
||||
* @param parentAttachmentsMap A Map object containing parent item IDs to arrays of their attachment items.
|
||||
* @returns void
|
||||
*/
|
||||
protected processRegularItems(insured: IInsurance, toDelete: Set<string>, parentAttachmentsMap: Map<string, IItem[]>): void;
|
||||
/**
|
||||
* Process parent items and their attachments, updating the toDelete Set accordingly.
|
||||
*
|
||||
* @param mainParentToAttachmentsMap A Map object containing parent item IDs to arrays of their attachment items.
|
||||
* @param itemsMap A Map object for quick item look-up by item ID.
|
||||
* @param traderId The trader ID from the Insurance object.
|
||||
* @param toDelete A Set object to keep track of items marked for deletion.
|
||||
*/
|
||||
protected processAttachments(mainParentToAttachmentsMap: Map<string, IItem[]>, itemsMap: Map<string, IItem>, traderId: string, toDelete: Set<string>): void;
|
||||
/**
|
||||
* Takes an array of attachment items that belong to the same main-parent item, sorts them in descending order by
|
||||
* their maximum price. For each attachment, a roll is made to determine if a deletion should be made. Once the
|
||||
* number of deletions has been counted, the attachments are added to the toDelete Set, starting with the most
|
||||
* valuable attachments first.
|
||||
*
|
||||
* @param attachments The array of attachment items to sort, filter, and roll.
|
||||
* @param traderId The ID of the trader to that has ensured these items.
|
||||
* @param toDelete The array that accumulates the IDs of the items to be deleted.
|
||||
* @returns void
|
||||
*/
|
||||
protected processAttachmentByParent(attachments: IItem[], traderId: string, toDelete: Set<string>): void;
|
||||
protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: IItem[], attachmentPrices: Record<string, number>): void;
|
||||
protected weightAttachmentsByPrice(attachments: IItem[]): Record<string, number>;
|
||||
/**
|
||||
* Get count of items to remove from weapon (take into account trader + price of attachment)
|
||||
* @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price
|
||||
* @param traderId Trader attachment insured against
|
||||
* @returns Attachment count to remove
|
||||
*/
|
||||
protected getAttachmentCountToRemove(weightedAttachmentByPrice: Record<string, number>, traderId: string): number;
|
||||
/**
|
||||
* Remove items from the insured items that should not be returned to the player.
|
||||
*
|
||||
* @param insured The insured items to process.
|
||||
* @param toDelete The items that should be deleted.
|
||||
* @returns void
|
||||
*/
|
||||
protected removeItemsFromInsurance(insured: IInsurance, toDelete: Set<string>): void;
|
||||
/**
|
||||
* Handle sending the insurance message to the user that potentially contains the valid insurance items.
|
||||
*
|
||||
* @param sessionID The session ID that should receive the insurance message.
|
||||
* @param insurance The context of insurance to use.
|
||||
* @returns void
|
||||
*/
|
||||
protected sendMail(sessionID: string, insurance: IInsurance): void;
|
||||
protected IsMapLabsAndInsuranceDisabled(insurance: IInsurance, labsId?: string): boolean;
|
||||
/**
|
||||
* Update IInsurance object with new messageTemplateId and wipe out items array data
|
||||
*/
|
||||
protected handleLabsInsurance(traderDialogMessages: Record<string, string[]>, insurance: IInsurance): void;
|
||||
/**
|
||||
* Determines whether an insured item should be removed from the player's inventory based on a random roll and
|
||||
* trader-specific return chance.
|
||||
*
|
||||
* @param traderId The ID of the trader who insured the item.
|
||||
* @param insuredItem Optional. The item to roll for. Only used for logging.
|
||||
* @returns true if the insured item should be removed from inventory, false otherwise, or undefined on error.
|
||||
*/
|
||||
protected rollForDelete(traderId: string, insuredItem?: IItem): boolean | undefined;
|
||||
/**
|
||||
* Handle Insure event
|
||||
* Add insurance to an item
|
||||
*
|
||||
* @param pmcData Player profile
|
||||
* @param body Insurance request
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse object to send to client
|
||||
*/
|
||||
insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Insure softinserts of Armor that has softinsert slots
|
||||
* Allows armors to come back after being lost correctly
|
||||
* @param item Armor item to be insured
|
||||
* @param pmcData Player profile
|
||||
* @param body Insurance request data
|
||||
*/
|
||||
insureSoftInserts(item: IItem, pmcData: IPmcData, body: IInsureRequestData): void;
|
||||
/**
|
||||
* Handle client/insurance/items/list/cost
|
||||
* Calculate insurance cost
|
||||
*
|
||||
* @param request request object
|
||||
* @param sessionID session id
|
||||
* @returns IGetInsuranceCostResponseData object to send to client
|
||||
*/
|
||||
cost(request: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData;
|
||||
}
|
241
ServerMod/types/controllers/InventoryController.d.ts
vendored
Normal file
241
ServerMod/types/controllers/InventoryController.d.ts
vendored
Normal file
@ -0,0 +1,241 @@
|
||||
import { LootGenerator } from "@spt/generators/LootGenerator";
|
||||
import { HideoutHelper } from "@spt/helpers/HideoutHelper";
|
||||
import { InventoryHelper } from "@spt/helpers/InventoryHelper";
|
||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||
import { PaymentHelper } from "@spt/helpers/PaymentHelper";
|
||||
import { PresetHelper } from "@spt/helpers/PresetHelper";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { QuestHelper } from "@spt/helpers/QuestHelper";
|
||||
import { TraderHelper } from "@spt/helpers/TraderHelper";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IInventoryBindRequestData } from "@spt/models/eft/inventory/IInventoryBindRequestData";
|
||||
import { IInventoryCreateMarkerRequestData } from "@spt/models/eft/inventory/IInventoryCreateMarkerRequestData";
|
||||
import { IInventoryDeleteMarkerRequestData } from "@spt/models/eft/inventory/IInventoryDeleteMarkerRequestData";
|
||||
import { IInventoryEditMarkerRequestData } from "@spt/models/eft/inventory/IInventoryEditMarkerRequestData";
|
||||
import { IInventoryExamineRequestData } from "@spt/models/eft/inventory/IInventoryExamineRequestData";
|
||||
import { IInventoryFoldRequestData } from "@spt/models/eft/inventory/IInventoryFoldRequestData";
|
||||
import { IInventoryMergeRequestData } from "@spt/models/eft/inventory/IInventoryMergeRequestData";
|
||||
import { IInventoryMoveRequestData } from "@spt/models/eft/inventory/IInventoryMoveRequestData";
|
||||
import { IInventoryReadEncyclopediaRequestData } from "@spt/models/eft/inventory/IInventoryReadEncyclopediaRequestData";
|
||||
import { IInventoryRemoveRequestData } from "@spt/models/eft/inventory/IInventoryRemoveRequestData";
|
||||
import { IInventorySortRequestData } from "@spt/models/eft/inventory/IInventorySortRequestData";
|
||||
import { IInventorySplitRequestData } from "@spt/models/eft/inventory/IInventorySplitRequestData";
|
||||
import { IInventorySwapRequestData } from "@spt/models/eft/inventory/IInventorySwapRequestData";
|
||||
import { IInventoryTagRequestData } from "@spt/models/eft/inventory/IInventoryTagRequestData";
|
||||
import { IInventoryToggleRequestData } from "@spt/models/eft/inventory/IInventoryToggleRequestData";
|
||||
import { IInventoryTransferRequestData } from "@spt/models/eft/inventory/IInventoryTransferRequestData";
|
||||
import { IOpenRandomLootContainerRequestData } from "@spt/models/eft/inventory/IOpenRandomLootContainerRequestData";
|
||||
import { IPinOrLockItemRequest } from "@spt/models/eft/inventory/IPinOrLockItemRequest";
|
||||
import { IRedeemProfileRequestData } from "@spt/models/eft/inventory/IRedeemProfileRequestData";
|
||||
import { ISetFavoriteItems } from "@spt/models/eft/inventory/ISetFavoriteItems";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { ISptProfile } from "@spt/models/eft/profile/ISptProfile";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { FenceService } from "@spt/services/FenceService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { MapMarkerService } from "@spt/services/MapMarkerService";
|
||||
import { PlayerService } from "@spt/services/PlayerService";
|
||||
import { RagfairOfferService } from "@spt/services/RagfairOfferService";
|
||||
import { HashUtil } from "@spt/utils/HashUtil";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
import { RandomUtil } from "@spt/utils/RandomUtil";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
export declare class InventoryController {
|
||||
protected logger: ILogger;
|
||||
protected hashUtil: HashUtil;
|
||||
protected itemHelper: ItemHelper;
|
||||
protected randomUtil: RandomUtil;
|
||||
protected databaseService: DatabaseService;
|
||||
protected fenceService: FenceService;
|
||||
protected presetHelper: PresetHelper;
|
||||
protected inventoryHelper: InventoryHelper;
|
||||
protected questHelper: QuestHelper;
|
||||
protected hideoutHelper: HideoutHelper;
|
||||
protected ragfairOfferService: RagfairOfferService;
|
||||
protected mapMarkerService: MapMarkerService;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected paymentHelper: PaymentHelper;
|
||||
protected traderHelper: TraderHelper;
|
||||
protected localisationService: LocalisationService;
|
||||
protected playerService: PlayerService;
|
||||
protected lootGenerator: LootGenerator;
|
||||
protected eventOutputHolder: EventOutputHolder;
|
||||
protected httpResponseUtil: HttpResponseUtil;
|
||||
protected cloner: ICloner;
|
||||
constructor(logger: ILogger, hashUtil: HashUtil, itemHelper: ItemHelper, randomUtil: RandomUtil, databaseService: DatabaseService, fenceService: FenceService, presetHelper: PresetHelper, inventoryHelper: InventoryHelper, questHelper: QuestHelper, hideoutHelper: HideoutHelper, ragfairOfferService: RagfairOfferService, mapMarkerService: MapMarkerService, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, traderHelper: TraderHelper, localisationService: LocalisationService, playerService: PlayerService, lootGenerator: LootGenerator, eventOutputHolder: EventOutputHolder, httpResponseUtil: HttpResponseUtil, cloner: ICloner);
|
||||
/**
|
||||
* Move Item
|
||||
* change location of item with parentId and slotId
|
||||
* transfers items from one profile to another if fromOwner/toOwner is set in the body.
|
||||
* otherwise, move is contained within the same profile_f.
|
||||
* @param pmcData Profile
|
||||
* @param moveRequest Move request data
|
||||
* @param sessionID Session id
|
||||
* @param output Client response
|
||||
*/
|
||||
moveItem(pmcData: IPmcData, moveRequest: IInventoryMoveRequestData, sessionID: string, output: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* Get a event router response with inventory trader message
|
||||
* @param output Item event router response
|
||||
* @returns Item event router response
|
||||
*/
|
||||
protected appendTraderExploitErrorResponse(output: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* Handle Remove event
|
||||
* Implements functionality "Discard" from Main menu (Stash etc.)
|
||||
* Removes item from PMC Profile
|
||||
*/
|
||||
discardItem(pmcData: IPmcData, request: IInventoryRemoveRequestData, sessionID: string, output: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* Split Item
|
||||
* spliting 1 stack into 2
|
||||
* @param pmcData Player profile (unused, getOwnerInventoryItems() gets profile)
|
||||
* @param request Split request
|
||||
* @param sessionID Session/player id
|
||||
* @param output Client response
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
splitItem(pmcData: IPmcData, request: IInventorySplitRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/**
|
||||
* Fully merge 2 inventory stacks together into one stack (merging where both stacks remain is called 'transfer')
|
||||
* Deletes item from `body.item` and adding number of stacks into `body.with`
|
||||
* @param pmcData Player profile (unused, getOwnerInventoryItems() gets profile)
|
||||
* @param body Merge request
|
||||
* @param sessionID Player id
|
||||
* @param output Client response
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
mergeItem(pmcData: IPmcData, body: IInventoryMergeRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/**
|
||||
* TODO: Adds no data to output to send to client, is this by design?
|
||||
* Transfer items from one stack into another while keeping original stack
|
||||
* Used to take items from scav inventory into stash or to insert ammo into mags (shotgun ones) and reloading weapon by clicking "Reload"
|
||||
* @param pmcData Player profile
|
||||
* @param body Transfer request
|
||||
* @param sessionID Session id
|
||||
* @param output Client response
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
transferItem(pmcData: IPmcData, body: IInventoryTransferRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/**
|
||||
* Swap Item
|
||||
* its used for "reload" if you have weapon in hands and magazine is somewhere else in rig or backpack in equipment
|
||||
* Also used to swap items using quick selection on character screen
|
||||
*/
|
||||
swapItem(pmcData: IPmcData, request: IInventorySwapRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handles folding of Weapons
|
||||
*/
|
||||
foldItem(pmcData: IPmcData, request: IInventoryFoldRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Toggles "Toggleable" items like night vision goggles and face shields.
|
||||
* @param pmcData player profile
|
||||
* @param body Toggle request
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
toggleItem(pmcData: IPmcData, body: IInventoryToggleRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Add a tag to an inventory item
|
||||
* @param pmcData profile with item to add tag to
|
||||
* @param body tag request data
|
||||
* @param sessionID session id
|
||||
* @returns client response object
|
||||
*/
|
||||
tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Bind an inventory item to the quick access menu at bottom of player screen
|
||||
* Handle bind event
|
||||
* @param pmcData Player profile
|
||||
* @param bindRequest Reqeust object
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
bindItem(pmcData: IPmcData, bindRequest: IInventoryBindRequestData, sessionID: string): void;
|
||||
/**
|
||||
* Unbind an inventory item from quick access menu at bottom of player screen
|
||||
* Handle unbind event
|
||||
* @param pmcData Player profile
|
||||
* @param bindRequest Request object
|
||||
* @param sessionID Session id
|
||||
* @param output Client response
|
||||
*/
|
||||
unbindItem(pmcData: IPmcData, request: IInventoryBindRequestData, sessionID: string, output: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* Handles examining an item
|
||||
* @param pmcData player profile
|
||||
* @param body request object
|
||||
* @param sessionID session id
|
||||
* @param output Client response
|
||||
* @returns response
|
||||
*/
|
||||
examineItem(pmcData: IPmcData, body: IInventoryExamineRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/**
|
||||
* Flag an item as seen in profiles encyclopedia + add inspect xp to profile
|
||||
* @param itemTpls Inspected item tpls
|
||||
* @param fullProfile Profile to add xp to
|
||||
*/
|
||||
protected flagItemsAsInspectedAndRewardXp(itemTpls: string[], fullProfile: ISptProfile): void;
|
||||
/**
|
||||
* Get the tplid of an item from the examine request object
|
||||
* @param request Response request
|
||||
* @returns tplId
|
||||
*/
|
||||
protected getExaminedItemTpl(request: IInventoryExamineRequestData): string;
|
||||
readEncyclopedia(pmcData: IPmcData, body: IInventoryReadEncyclopediaRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle ApplyInventoryChanges
|
||||
* Sorts supplied items.
|
||||
* @param pmcData Player profile
|
||||
* @param request sort request
|
||||
* @param sessionID Session id
|
||||
*/
|
||||
sortInventory(pmcData: IPmcData, request: IInventorySortRequestData, sessionID: string): void;
|
||||
/**
|
||||
* Add note to a map
|
||||
* @param pmcData Player profile
|
||||
* @param request Add marker request
|
||||
* @param sessionID Session id
|
||||
* @param output Client response
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
createMapMarker(pmcData: IPmcData, request: IInventoryCreateMarkerRequestData, sessionID: string, output: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* Delete a map marker
|
||||
* @param pmcData Player profile
|
||||
* @param request Delete marker request
|
||||
* @param sessionID Session id
|
||||
* @param output Client response
|
||||
*/
|
||||
deleteMapMarker(pmcData: IPmcData, request: IInventoryDeleteMarkerRequestData, sessionID: string, output: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* Edit an existing map marker
|
||||
* @param pmcData Player profile
|
||||
* @param request Edit marker request
|
||||
* @param sessionID Session id
|
||||
* @param output Client response
|
||||
*/
|
||||
editMapMarker(pmcData: IPmcData, request: IInventoryEditMarkerRequestData, sessionID: string, output: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* Handle OpenRandomLootContainer event
|
||||
* Handle event fired when a container is unpacked (currently only the halloween pumpkin)
|
||||
* @param pmcData Profile data
|
||||
* @param body Open loot container request data
|
||||
* @param sessionID Session id
|
||||
* @param output Client response
|
||||
*/
|
||||
openRandomLootContainer(pmcData: IPmcData, body: IOpenRandomLootContainerRequestData, sessionID: string, output: IItemEventRouterResponse): void;
|
||||
redeemProfileReward(pmcData: IPmcData, request: IRedeemProfileRequestData, sessionId: string): void;
|
||||
setFavoriteItem(pmcData: IPmcData, request: ISetFavoriteItems, sessionId: string): void;
|
||||
/**
|
||||
* Handle /client/game/profile/items/moving - PinLock
|
||||
* Requires no response to client, only server change
|
||||
* @param pmcData Players profile
|
||||
* @param request Pin/Lock request data
|
||||
* @param sessionID Session id
|
||||
* @param output data to send back to client
|
||||
*/
|
||||
pinOrLock(pmcData: IPmcData, request: IPinOrLockItemRequest, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
}
|
65
ServerMod/types/controllers/LauncherController.d.ts
vendored
Normal file
65
ServerMod/types/controllers/LauncherController.d.ts
vendored
Normal file
@ -0,0 +1,65 @@
|
||||
import { HttpServerHelper } from "@spt/helpers/HttpServerHelper";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { PreSptModLoader } from "@spt/loaders/PreSptModLoader";
|
||||
import { IChangeRequestData } from "@spt/models/eft/launcher/IChangeRequestData";
|
||||
import { ILoginRequestData } from "@spt/models/eft/launcher/ILoginRequestData";
|
||||
import { IRegisterData } from "@spt/models/eft/launcher/IRegisterData";
|
||||
import { IConnectResponse } from "@spt/models/eft/profile/IConnectResponse";
|
||||
import { IModDetails, Info } from "@spt/models/eft/profile/ISptProfile";
|
||||
import { ICoreConfig } from "@spt/models/spt/config/ICoreConfig";
|
||||
import { IPackageJsonData } from "@spt/models/spt/mod/IPackageJsonData";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { SaveServer } from "@spt/servers/SaveServer";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { HashUtil } from "@spt/utils/HashUtil";
|
||||
import { RandomUtil } from "@spt/utils/RandomUtil";
|
||||
import { TimeUtil } from "@spt/utils/TimeUtil";
|
||||
export declare class LauncherController {
|
||||
protected logger: ILogger;
|
||||
protected hashUtil: HashUtil;
|
||||
protected timeUtil: TimeUtil;
|
||||
protected randomUtil: RandomUtil;
|
||||
protected saveServer: SaveServer;
|
||||
protected httpServerHelper: HttpServerHelper;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected databaseService: DatabaseService;
|
||||
protected localisationService: LocalisationService;
|
||||
protected preSptModLoader: PreSptModLoader;
|
||||
protected configServer: ConfigServer;
|
||||
protected coreConfig: ICoreConfig;
|
||||
constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, randomUtil: RandomUtil, saveServer: SaveServer, httpServerHelper: HttpServerHelper, profileHelper: ProfileHelper, databaseService: DatabaseService, localisationService: LocalisationService, preSptModLoader: PreSptModLoader, configServer: ConfigServer);
|
||||
connect(): IConnectResponse;
|
||||
/**
|
||||
* Get descriptive text for each of the profile edtions a player can choose, keyed by profile.json profile type e.g. "Edge Of Darkness"
|
||||
* @returns Dictionary of profile types with related descriptive text
|
||||
*/
|
||||
protected getProfileDescriptions(): Record<string, string>;
|
||||
find(sessionId: string): Info;
|
||||
login(info: ILoginRequestData): string;
|
||||
register(info: IRegisterData): string;
|
||||
protected createAccount(info: IRegisterData): string;
|
||||
protected generateProfileId(): string;
|
||||
protected formatID(timeStamp: number, counter: number): string;
|
||||
changeUsername(info: IChangeRequestData): string;
|
||||
changePassword(info: IChangeRequestData): string;
|
||||
/**
|
||||
* Handle launcher requesting profile be wiped
|
||||
* @param info IRegisterData
|
||||
* @returns Session id
|
||||
*/
|
||||
wipe(info: IRegisterData): string;
|
||||
getCompatibleTarkovVersion(): string;
|
||||
/**
|
||||
* Get the mods the server has currently loaded
|
||||
* @returns Dictionary of mod name and mod details
|
||||
*/
|
||||
getLoadedServerMods(): Record<string, IPackageJsonData>;
|
||||
/**
|
||||
* Get the mods a profile has ever loaded into game with
|
||||
* @param sessionId Player id
|
||||
* @returns Array of mod details
|
||||
*/
|
||||
getServerModsProfileUsed(sessionId: string): IModDetails[];
|
||||
}
|
27
ServerMod/types/controllers/LocationController.d.ts
vendored
Normal file
27
ServerMod/types/controllers/LocationController.d.ts
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
import { ILocationsGenerateAllResponse } from "@spt/models/eft/common/ILocationsSourceDestinationBase";
|
||||
import { IGetAirdropLootRequest } from "@spt/models/eft/location/IGetAirdropLootRequest";
|
||||
import { IGetAirdropLootResponse } from "@spt/models/eft/location/IGetAirdropLootResponse";
|
||||
import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { AirdropService } from "@spt/services/AirdropService";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
export declare class LocationController {
|
||||
protected logger: ILogger;
|
||||
protected databaseService: DatabaseService;
|
||||
protected airdropService: AirdropService;
|
||||
protected configServer: ConfigServer;
|
||||
protected cloner: ICloner;
|
||||
protected locationConfig: ILocationConfig;
|
||||
constructor(logger: ILogger, databaseService: DatabaseService, airdropService: AirdropService, configServer: ConfigServer, cloner: ICloner);
|
||||
/**
|
||||
* Handle client/locations
|
||||
* Get all maps base location properties without loot data
|
||||
* @param sessionId Players Id
|
||||
* @returns ILocationsGenerateAllResponse
|
||||
*/
|
||||
generateAll(sessionId: string): ILocationsGenerateAllResponse;
|
||||
/** Handle client/airdrop/loot */
|
||||
getAirdropLoot(request: IGetAirdropLootRequest): IGetAirdropLootResponse;
|
||||
}
|
52
ServerMod/types/controllers/MatchController.d.ts
vendored
Normal file
52
ServerMod/types/controllers/MatchController.d.ts
vendored
Normal file
@ -0,0 +1,52 @@
|
||||
import { ApplicationContext } from "@spt/context/ApplicationContext";
|
||||
import { IEndLocalRaidRequestData } from "@spt/models/eft/match/IEndLocalRaidRequestData";
|
||||
import { IGetRaidConfigurationRequestData } from "@spt/models/eft/match/IGetRaidConfigurationRequestData";
|
||||
import { IMatchGroupStartGameRequest } from "@spt/models/eft/match/IMatchGroupStartGameRequest";
|
||||
import { IMatchGroupStatusRequest } from "@spt/models/eft/match/IMatchGroupStatusRequest";
|
||||
import { IMatchGroupStatusResponse } from "@spt/models/eft/match/IMatchGroupStatusResponse";
|
||||
import { IProfileStatusResponse } from "@spt/models/eft/match/IProfileStatusResponse";
|
||||
import { IStartLocalRaidRequestData } from "@spt/models/eft/match/IStartLocalRaidRequestData";
|
||||
import { IStartLocalRaidResponseData } from "@spt/models/eft/match/IStartLocalRaidResponseData";
|
||||
import { IMatchConfig } from "@spt/models/spt/config/IMatchConfig";
|
||||
import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { SaveServer } from "@spt/servers/SaveServer";
|
||||
import { LocationLifecycleService } from "@spt/services/LocationLifecycleService";
|
||||
import { MatchLocationService } from "@spt/services/MatchLocationService";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
export declare class MatchController {
|
||||
protected logger: ILogger;
|
||||
protected saveServer: SaveServer;
|
||||
protected matchLocationService: MatchLocationService;
|
||||
protected configServer: ConfigServer;
|
||||
protected applicationContext: ApplicationContext;
|
||||
protected locationLifecycleService: LocationLifecycleService;
|
||||
protected cloner: ICloner;
|
||||
protected matchConfig: IMatchConfig;
|
||||
protected pmcConfig: IPmcConfig;
|
||||
constructor(logger: ILogger, saveServer: SaveServer, matchLocationService: MatchLocationService, configServer: ConfigServer, applicationContext: ApplicationContext, locationLifecycleService: LocationLifecycleService, cloner: ICloner);
|
||||
getEnabled(): boolean;
|
||||
/** Handle client/match/group/delete */
|
||||
deleteGroup(info: any): void;
|
||||
/** Handle match/group/start_game */
|
||||
joinMatch(info: IMatchGroupStartGameRequest, sessionId: string): IProfileStatusResponse;
|
||||
/** Handle client/match/group/status */
|
||||
getGroupStatus(info: IMatchGroupStatusRequest): IMatchGroupStatusResponse;
|
||||
/**
|
||||
* Handle /client/raid/configuration
|
||||
* @param request Raid config request
|
||||
* @param sessionID Session id
|
||||
*/
|
||||
configureOfflineRaid(request: IGetRaidConfigurationRequestData, sessionID: string): void;
|
||||
/**
|
||||
* Convert a difficulty value from pre-raid screen to a bot difficulty
|
||||
* @param botDifficulty dropdown difficulty value
|
||||
* @returns bot difficulty
|
||||
*/
|
||||
protected convertDifficultyDropdownIntoBotDifficulty(botDifficulty: string): string;
|
||||
/** Handle client/match/local/start */
|
||||
startLocalRaid(sessionId: string, request: IStartLocalRaidRequestData): IStartLocalRaidResponseData;
|
||||
/** Handle client/match/local/end */
|
||||
endLocalRaid(sessionId: string, request: IEndLocalRaidRequestData): void;
|
||||
}
|
11
ServerMod/types/controllers/NoteController.d.ts
vendored
Normal file
11
ServerMod/types/controllers/NoteController.d.ts
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { INoteActionData } from "@spt/models/eft/notes/INoteActionData";
|
||||
import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
|
||||
export declare class NoteController {
|
||||
protected eventOutputHolder: EventOutputHolder;
|
||||
constructor(eventOutputHolder: EventOutputHolder);
|
||||
addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
|
||||
editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
|
||||
deleteNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
|
||||
}
|
23
ServerMod/types/controllers/NotifierController.d.ts
vendored
Normal file
23
ServerMod/types/controllers/NotifierController.d.ts
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
import { HttpServerHelper } from "@spt/helpers/HttpServerHelper";
|
||||
import { NotifierHelper } from "@spt/helpers/NotifierHelper";
|
||||
import { INotifierChannel } from "@spt/models/eft/notifier/INotifier";
|
||||
import { NotificationService } from "@spt/services/NotificationService";
|
||||
export declare class NotifierController {
|
||||
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.
|
||||
*
|
||||
* If no notifications are currently queued then intermittently check for new notifications until either
|
||||
* one or more appear or when a timeout expires.
|
||||
* If no notifications are available after the timeout, use a default message.
|
||||
*/
|
||||
notifyAsync(sessionID: string): Promise<unknown>;
|
||||
getServer(sessionID: string): string;
|
||||
/** Handle client/notifier/channel/create */
|
||||
getChannel(sessionID: string): INotifierChannel;
|
||||
}
|
10
ServerMod/types/controllers/PresetController.d.ts
vendored
Normal file
10
ServerMod/types/controllers/PresetController.d.ts
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
import { PresetHelper } from "@spt/helpers/PresetHelper";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
export declare class PresetController {
|
||||
protected logger: ILogger;
|
||||
protected presetHelper: PresetHelper;
|
||||
protected databaseService: DatabaseService;
|
||||
constructor(logger: ILogger, presetHelper: PresetHelper, databaseService: DatabaseService);
|
||||
initialize(): void;
|
||||
}
|
129
ServerMod/types/controllers/ProfileController.d.ts
vendored
Normal file
129
ServerMod/types/controllers/ProfileController.d.ts
vendored
Normal file
@ -0,0 +1,129 @@
|
||||
import { PlayerScavGenerator } from "@spt/generators/PlayerScavGenerator";
|
||||
import { DialogueHelper } from "@spt/helpers/DialogueHelper";
|
||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { QuestHelper } from "@spt/helpers/QuestHelper";
|
||||
import { TraderHelper } from "@spt/helpers/TraderHelper";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { IMiniProfile } from "@spt/models/eft/launcher/IMiniProfile";
|
||||
import { IGetProfileStatusResponseData } from "@spt/models/eft/profile/GetProfileStatusResponseData";
|
||||
import { IGetOtherProfileRequest } from "@spt/models/eft/profile/IGetOtherProfileRequest";
|
||||
import { IGetOtherProfileResponse } from "@spt/models/eft/profile/IGetOtherProfileResponse";
|
||||
import { IGetProfileSettingsRequest } from "@spt/models/eft/profile/IGetProfileSettingsRequest";
|
||||
import { IProfileChangeNicknameRequestData } from "@spt/models/eft/profile/IProfileChangeNicknameRequestData";
|
||||
import { IProfileChangeVoiceRequestData } from "@spt/models/eft/profile/IProfileChangeVoiceRequestData";
|
||||
import { IProfileCreateRequestData } from "@spt/models/eft/profile/IProfileCreateRequestData";
|
||||
import { ISearchFriendRequestData } from "@spt/models/eft/profile/ISearchFriendRequestData";
|
||||
import { ISearchFriendResponse } from "@spt/models/eft/profile/ISearchFriendResponse";
|
||||
import { ISptProfile } from "@spt/models/eft/profile/ISptProfile";
|
||||
import { IValidateNicknameRequestData } from "@spt/models/eft/profile/IValidateNicknameRequestData";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
|
||||
import { SaveServer } from "@spt/servers/SaveServer";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { MailSendService } from "@spt/services/MailSendService";
|
||||
import { ProfileFixerService } from "@spt/services/ProfileFixerService";
|
||||
import { SeasonalEventService } from "@spt/services/SeasonalEventService";
|
||||
import { HashUtil } from "@spt/utils/HashUtil";
|
||||
import { TimeUtil } from "@spt/utils/TimeUtil";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
export declare class ProfileController {
|
||||
protected logger: ILogger;
|
||||
protected hashUtil: HashUtil;
|
||||
protected cloner: ICloner;
|
||||
protected timeUtil: TimeUtil;
|
||||
protected saveServer: SaveServer;
|
||||
protected databaseService: DatabaseService;
|
||||
protected itemHelper: ItemHelper;
|
||||
protected profileFixerService: ProfileFixerService;
|
||||
protected localisationService: LocalisationService;
|
||||
protected seasonalEventService: SeasonalEventService;
|
||||
protected mailSendService: MailSendService;
|
||||
protected playerScavGenerator: PlayerScavGenerator;
|
||||
protected eventOutputHolder: EventOutputHolder;
|
||||
protected traderHelper: TraderHelper;
|
||||
protected dialogueHelper: DialogueHelper;
|
||||
protected questHelper: QuestHelper;
|
||||
protected profileHelper: ProfileHelper;
|
||||
constructor(logger: ILogger, hashUtil: HashUtil, cloner: ICloner, timeUtil: TimeUtil, saveServer: SaveServer, databaseService: DatabaseService, itemHelper: ItemHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, seasonalEventService: SeasonalEventService, mailSendService: MailSendService, playerScavGenerator: PlayerScavGenerator, eventOutputHolder: EventOutputHolder, traderHelper: TraderHelper, dialogueHelper: DialogueHelper, questHelper: QuestHelper, profileHelper: ProfileHelper);
|
||||
/**
|
||||
* Handle /launcher/profiles
|
||||
*/
|
||||
getMiniProfiles(): IMiniProfile[];
|
||||
/**
|
||||
* Handle launcher/profile/info
|
||||
*/
|
||||
getMiniProfile(sessionID: string): IMiniProfile;
|
||||
/**
|
||||
* Handle client/game/profile/list
|
||||
*/
|
||||
getCompleteProfile(sessionID: string): IPmcData[];
|
||||
/**
|
||||
* Handle client/game/profile/create
|
||||
* @param info Client reqeust object
|
||||
* @param sessionID Player id
|
||||
* @returns Profiles _id value
|
||||
*/
|
||||
createProfile(info: IProfileCreateRequestData, sessionID: string): string;
|
||||
/**
|
||||
* make profiles pmcData.Inventory.equipment unique
|
||||
* @param pmcData Profile to update
|
||||
*/
|
||||
protected updateInventoryEquipmentId(pmcData: IPmcData): void;
|
||||
/**
|
||||
* Delete a profile
|
||||
* @param sessionID Id of profile to delete
|
||||
*/
|
||||
protected deleteProfileBySessionId(sessionID: string): void;
|
||||
/**
|
||||
* Iterate over all quests in player profile, inspect rewards for the quests current state (accepted/completed)
|
||||
* and send rewards to them in mail
|
||||
* @param profileDetails Player profile
|
||||
* @param sessionID Session id
|
||||
* @param response Event router response
|
||||
*/
|
||||
protected givePlayerStartingQuestRewards(profileDetails: ISptProfile, sessionID: string, response: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* For each trader reset their state to what a level 1 player would see
|
||||
* @param sessionId Session id of profile to reset
|
||||
*/
|
||||
protected resetAllTradersInProfile(sessionId: string): void;
|
||||
/**
|
||||
* Generate a player scav object
|
||||
* PMC profile MUST exist first before pscav can be generated
|
||||
* @param sessionID
|
||||
* @returns IPmcData object
|
||||
*/
|
||||
generatePlayerScav(sessionID: string): IPmcData;
|
||||
/**
|
||||
* Handle client/game/profile/nickname/validate
|
||||
*/
|
||||
validateNickname(info: IValidateNicknameRequestData, sessionID: string): string;
|
||||
/**
|
||||
* Handle client/game/profile/nickname/change event
|
||||
* Client allows player to adjust their profile name
|
||||
*/
|
||||
changeNickname(info: IProfileChangeNicknameRequestData, sessionID: string): string;
|
||||
/**
|
||||
* Handle client/game/profile/voice/change event
|
||||
*/
|
||||
changeVoice(info: IProfileChangeVoiceRequestData, sessionID: string): void;
|
||||
/**
|
||||
* Handle client/game/profile/search
|
||||
*/
|
||||
getFriends(info: ISearchFriendRequestData, sessionID: string): ISearchFriendResponse[];
|
||||
/**
|
||||
* Handle client/profile/status
|
||||
*/
|
||||
getProfileStatus(sessionId: string): IGetProfileStatusResponseData;
|
||||
/**
|
||||
* Handle client/profile/view
|
||||
*/
|
||||
getOtherProfile(sessionId: string, request: IGetOtherProfileRequest): IGetOtherProfileResponse;
|
||||
/**
|
||||
* Handle client/profile/settings
|
||||
*/
|
||||
setChosenProfileIcon(sessionId: string, request: IGetProfileSettingsRequest): boolean;
|
||||
}
|
144
ServerMod/types/controllers/QuestController.d.ts
vendored
Normal file
144
ServerMod/types/controllers/QuestController.d.ts
vendored
Normal file
@ -0,0 +1,144 @@
|
||||
import { DialogueHelper } from "@spt/helpers/DialogueHelper";
|
||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { QuestConditionHelper } from "@spt/helpers/QuestConditionHelper";
|
||||
import { QuestHelper } from "@spt/helpers/QuestHelper";
|
||||
import { TraderHelper } from "@spt/helpers/TraderHelper";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IItem } from "@spt/models/eft/common/tables/IItem";
|
||||
import { IQuest, IQuestCondition } from "@spt/models/eft/common/tables/IQuest";
|
||||
import { IRepeatableQuest } from "@spt/models/eft/common/tables/IRepeatableQuests";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { IAcceptQuestRequestData } from "@spt/models/eft/quests/IAcceptQuestRequestData";
|
||||
import { ICompleteQuestRequestData } from "@spt/models/eft/quests/ICompleteQuestRequestData";
|
||||
import { IFailQuestRequestData } from "@spt/models/eft/quests/IFailQuestRequestData";
|
||||
import { IHandoverQuestRequestData } from "@spt/models/eft/quests/IHandoverQuestRequestData";
|
||||
import { IQuestConfig } from "@spt/models/spt/config/IQuestConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { LocaleService } from "@spt/services/LocaleService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { MailSendService } from "@spt/services/MailSendService";
|
||||
import { PlayerService } from "@spt/services/PlayerService";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
import { TimeUtil } from "@spt/utils/TimeUtil";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
export declare class QuestController {
|
||||
protected logger: ILogger;
|
||||
protected timeUtil: TimeUtil;
|
||||
protected httpResponseUtil: HttpResponseUtil;
|
||||
protected eventOutputHolder: EventOutputHolder;
|
||||
protected databaseService: DatabaseService;
|
||||
protected itemHelper: ItemHelper;
|
||||
protected dialogueHelper: DialogueHelper;
|
||||
protected mailSendService: MailSendService;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected traderHelper: TraderHelper;
|
||||
protected questHelper: QuestHelper;
|
||||
protected questConditionHelper: QuestConditionHelper;
|
||||
protected playerService: PlayerService;
|
||||
protected localeService: LocaleService;
|
||||
protected localisationService: LocalisationService;
|
||||
protected configServer: ConfigServer;
|
||||
protected cloner: ICloner;
|
||||
protected questConfig: IQuestConfig;
|
||||
constructor(logger: ILogger, timeUtil: TimeUtil, httpResponseUtil: HttpResponseUtil, eventOutputHolder: EventOutputHolder, databaseService: DatabaseService, itemHelper: ItemHelper, dialogueHelper: DialogueHelper, mailSendService: MailSendService, profileHelper: ProfileHelper, traderHelper: TraderHelper, questHelper: QuestHelper, questConditionHelper: QuestConditionHelper, playerService: PlayerService, localeService: LocaleService, localisationService: LocalisationService, configServer: ConfigServer, cloner: ICloner);
|
||||
/**
|
||||
* Handle client/quest/list
|
||||
* 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[];
|
||||
/**
|
||||
* Handle QuestAccept event
|
||||
* Handle the client accepting a quest and starting it
|
||||
* Send starting rewards if any to player and
|
||||
* Send start notification if any to player
|
||||
* @param pmcData Profile to update
|
||||
* @param acceptedQuest Quest accepted
|
||||
* @param sessionID Session id
|
||||
* @returns Client response
|
||||
*/
|
||||
acceptQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
*
|
||||
* @param questConditions Conditions to iterate over and possibly add to profile
|
||||
* @param pmcData Profile to add to
|
||||
* @param questId Quest conditions came from
|
||||
*/
|
||||
protected addTaskConditionCountersToProfile(questConditions: IQuestCondition[], pmcData: IPmcData, questId: string): void;
|
||||
/**
|
||||
* TODO - Move this code into RepeatableQuestController
|
||||
* Handle the client accepting a repeatable quest and starting it
|
||||
* Send starting rewards if any to player and
|
||||
* Send start notification if any to player
|
||||
* @param pmcData Profile to update with new quest
|
||||
* @param acceptedQuest Quest being accepted
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
acceptRepeatableQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Look for an accepted quest inside player profile, return matching
|
||||
* @param pmcData Profile to search through
|
||||
* @param acceptedQuest Quest to search for
|
||||
* @returns IRepeatableQuest
|
||||
*/
|
||||
protected getRepeatableQuestFromProfile(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData): IRepeatableQuest;
|
||||
/**
|
||||
* Handle QuestComplete event
|
||||
* Update completed quest in profile
|
||||
* Add newly unlocked quests to profile
|
||||
* Also recalculate their level due to exp rewards
|
||||
* @param pmcData Player profile
|
||||
* @param body Completed quest request
|
||||
* @param sessionID Session id
|
||||
* @returns ItemEvent client response
|
||||
*/
|
||||
completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle QuestHandover event
|
||||
* @param pmcData Player profile
|
||||
* @param handoverQuestRequest handover item request
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
handoverQuest(pmcData: IPmcData, handoverQuestRequest: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Show warning to user and write to log that repeatable quest failed a condition check
|
||||
* @param handoverQuestRequest Quest request
|
||||
* @param output Response to send to user
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
protected showRepeatableQuestInvalidConditionError(handoverQuestRequest: IHandoverQuestRequestData, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/**
|
||||
* Show warning to user and write to log quest item handed over did not match what is required
|
||||
* @param handoverQuestRequest Quest request
|
||||
* @param itemHandedOver Non-matching item found
|
||||
* @param handoverRequirements Quest handover requirements
|
||||
* @param output Response to send to user
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
protected showQuestItemHandoverMatchError(handoverQuestRequest: IHandoverQuestRequestData, itemHandedOver: IItem, handoverRequirements: IQuestCondition, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/**
|
||||
* Increment a backend counter stored value by an amount,
|
||||
* Create counter if it does not exist
|
||||
* @param pmcData Profile to find backend counter in
|
||||
* @param conditionId backend counter id to update
|
||||
* @param questId quest id counter is associated with
|
||||
* @param counterValue value to increment the backend counter with
|
||||
*/
|
||||
protected updateProfileTaskConditionCounterValue(pmcData: IPmcData, conditionId: string, questId: string, counterValue: number): void;
|
||||
/**
|
||||
* Handle /client/game/profile/items/moving - QuestFail
|
||||
* @param pmcData Pmc profile
|
||||
* @param request Fail qeust request
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
failQuest(pmcData: IPmcData, request: IFailQuestRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
}
|
252
ServerMod/types/controllers/RagfairController.d.ts
vendored
Normal file
252
ServerMod/types/controllers/RagfairController.d.ts
vendored
Normal file
@ -0,0 +1,252 @@
|
||||
import { RagfairOfferGenerator } from "@spt/generators/RagfairOfferGenerator";
|
||||
import { HandbookHelper } from "@spt/helpers/HandbookHelper";
|
||||
import { InventoryHelper } from "@spt/helpers/InventoryHelper";
|
||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||
import { PaymentHelper } from "@spt/helpers/PaymentHelper";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { RagfairHelper } from "@spt/helpers/RagfairHelper";
|
||||
import { RagfairOfferHelper } from "@spt/helpers/RagfairOfferHelper";
|
||||
import { RagfairSellHelper } from "@spt/helpers/RagfairSellHelper";
|
||||
import { RagfairSortHelper } from "@spt/helpers/RagfairSortHelper";
|
||||
import { TraderHelper } from "@spt/helpers/TraderHelper";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IItem } from "@spt/models/eft/common/tables/IItem";
|
||||
import { ITraderAssort } from "@spt/models/eft/common/tables/ITrader";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { ISptProfile } from "@spt/models/eft/profile/ISptProfile";
|
||||
import { IAddOfferRequestData, IRequirement } from "@spt/models/eft/ragfair/IAddOfferRequestData";
|
||||
import { IExtendOfferRequestData } from "@spt/models/eft/ragfair/IExtendOfferRequestData";
|
||||
import { IGetItemPriceResult } from "@spt/models/eft/ragfair/IGetItemPriceResult";
|
||||
import { IGetMarketPriceRequestData } from "@spt/models/eft/ragfair/IGetMarketPriceRequestData";
|
||||
import { IGetOffersResult } from "@spt/models/eft/ragfair/IGetOffersResult";
|
||||
import { IGetRagfairOfferByIdRequest } from "@spt/models/eft/ragfair/IGetRagfairOfferByIdRequest";
|
||||
import { IRagfairOffer } from "@spt/models/eft/ragfair/IRagfairOffer";
|
||||
import { IRemoveOfferRequestData } from "@spt/models/eft/ragfair/IRemoveOfferRequestData";
|
||||
import { ISearchRequestData } from "@spt/models/eft/ragfair/ISearchRequestData";
|
||||
import { IProcessBuyTradeRequestData } from "@spt/models/eft/trade/IProcessBuyTradeRequestData";
|
||||
import { FleaOfferType } from "@spt/models/enums/FleaOfferType";
|
||||
import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { RagfairServer } from "@spt/servers/RagfairServer";
|
||||
import { SaveServer } from "@spt/servers/SaveServer";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { PaymentService } from "@spt/services/PaymentService";
|
||||
import { RagfairOfferService } from "@spt/services/RagfairOfferService";
|
||||
import { RagfairPriceService } from "@spt/services/RagfairPriceService";
|
||||
import { RagfairRequiredItemsService } from "@spt/services/RagfairRequiredItemsService";
|
||||
import { RagfairTaxService } from "@spt/services/RagfairTaxService";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
import { TimeUtil } from "@spt/utils/TimeUtil";
|
||||
/**
|
||||
* Handle RagfairCallback events
|
||||
*/
|
||||
export declare class RagfairController {
|
||||
protected logger: ILogger;
|
||||
protected timeUtil: TimeUtil;
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected eventOutputHolder: EventOutputHolder;
|
||||
protected ragfairServer: RagfairServer;
|
||||
protected ragfairPriceService: RagfairPriceService;
|
||||
protected databaseService: DatabaseService;
|
||||
protected itemHelper: ItemHelper;
|
||||
protected saveServer: SaveServer;
|
||||
protected ragfairSellHelper: RagfairSellHelper;
|
||||
protected ragfairTaxService: RagfairTaxService;
|
||||
protected ragfairSortHelper: RagfairSortHelper;
|
||||
protected ragfairOfferHelper: RagfairOfferHelper;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected paymentService: PaymentService;
|
||||
protected handbookHelper: HandbookHelper;
|
||||
protected paymentHelper: PaymentHelper;
|
||||
protected inventoryHelper: InventoryHelper;
|
||||
protected traderHelper: TraderHelper;
|
||||
protected ragfairHelper: RagfairHelper;
|
||||
protected ragfairOfferService: RagfairOfferService;
|
||||
protected ragfairRequiredItemsService: RagfairRequiredItemsService;
|
||||
protected ragfairOfferGenerator: RagfairOfferGenerator;
|
||||
protected localisationService: LocalisationService;
|
||||
protected configServer: ConfigServer;
|
||||
protected ragfairConfig: IRagfairConfig;
|
||||
constructor(logger: ILogger, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, eventOutputHolder: EventOutputHolder, ragfairServer: RagfairServer, ragfairPriceService: RagfairPriceService, databaseService: DatabaseService, itemHelper: ItemHelper, saveServer: SaveServer, ragfairSellHelper: RagfairSellHelper, ragfairTaxService: RagfairTaxService, ragfairSortHelper: RagfairSortHelper, ragfairOfferHelper: RagfairOfferHelper, profileHelper: ProfileHelper, paymentService: PaymentService, handbookHelper: HandbookHelper, paymentHelper: PaymentHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, ragfairRequiredItemsService: RagfairRequiredItemsService, ragfairOfferGenerator: RagfairOfferGenerator, localisationService: LocalisationService, configServer: ConfigServer);
|
||||
/**
|
||||
* Handles client/ragfair/find
|
||||
* Returns flea offers that match required search parameters
|
||||
* @param sessionID Player id
|
||||
* @param searchRequest Search request data
|
||||
* @returns IGetOffersResult
|
||||
*/
|
||||
getOffers(sessionID: string, searchRequest: ISearchRequestData): IGetOffersResult;
|
||||
/**
|
||||
* Handle client/ragfair/offer/findbyid
|
||||
* Occurs when searching for `#x` on flea
|
||||
* @param sessionId Player id
|
||||
* @param request Request data
|
||||
* @returns IRagfairOffer
|
||||
*/
|
||||
getOfferById(sessionId: string, request: IGetRagfairOfferByIdRequest): IRagfairOffer;
|
||||
/**
|
||||
* Get offers for the client based on type of search being performed
|
||||
* @param searchRequest Client search request data
|
||||
* @param itemsToAdd Comes from ragfairHelper.filterCategories()
|
||||
* @param traderAssorts Trader assorts
|
||||
* @param pmcProfile Player profile
|
||||
* @returns array of offers
|
||||
*/
|
||||
protected getOffersForSearchType(searchRequest: ISearchRequestData, itemsToAdd: string[], traderAssorts: Record<string, ITraderAssort>, pmcProfile: IPmcData): IRagfairOffer[];
|
||||
/**
|
||||
* Get categories for the type of search being performed, linked/required/all
|
||||
* @param searchRequest Client search request data
|
||||
* @param offers Ragfair offers to get categories for
|
||||
* @returns record with templates + counts
|
||||
*/
|
||||
protected getSpecificCategories(pmcProfile: IPmcData, searchRequest: ISearchRequestData, offers: IRagfairOffer[]): Record<string, number>;
|
||||
/**
|
||||
* Add index to all offers passed in (0-indexed)
|
||||
* @param offers Offers to add index value to
|
||||
*/
|
||||
protected addIndexValueToOffers(offers: IRagfairOffer[]): void;
|
||||
/**
|
||||
* Update a trader flea offer with buy restrictions stored in the traders assort
|
||||
* @param offer Flea offer to update
|
||||
* @param fullProfile Players full profile
|
||||
*/
|
||||
protected setTraderOfferPurchaseLimits(offer: IRagfairOffer, fullProfile: ISptProfile): void;
|
||||
/**
|
||||
* Adjust ragfair offer stack count to match same value as traders assort stack count
|
||||
* @param offer Flea offer to adjust stack size of
|
||||
*/
|
||||
protected setTraderOfferStackSize(offer: IRagfairOffer): void;
|
||||
/**
|
||||
* Is the flea search being performed a 'linked' search type
|
||||
* @param info Search request
|
||||
* @returns True if it is a 'linked' search type
|
||||
*/
|
||||
protected isLinkedSearch(info: ISearchRequestData): boolean;
|
||||
/**
|
||||
* Is the flea search being performed a 'required' search type
|
||||
* @param info Search request
|
||||
* @returns True if it is a 'required' search type
|
||||
*/
|
||||
protected isRequiredSearch(info: ISearchRequestData): boolean;
|
||||
/**
|
||||
* Check all profiles and sell player offers / send player money for listing if it sold
|
||||
*/
|
||||
update(): void;
|
||||
/**
|
||||
* Called when creating an offer on flea, fills values in top right corner
|
||||
* @param getPriceRequest Client request object
|
||||
* @param ignoreTraderOffers Should trader offers be ignored in the calcualtion
|
||||
* @returns min/avg/max values for an item based on flea offers available
|
||||
*/
|
||||
getItemMinAvgMaxFleaPriceValues(getPriceRequest: IGetMarketPriceRequestData, ignoreTraderOffers?: boolean): IGetItemPriceResult;
|
||||
/**
|
||||
* List item(s) on flea for sale
|
||||
* @param pmcData Player profile
|
||||
* @param offerRequest Flea list creation offer
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
addPlayerOffer(pmcData: IPmcData, offerRequest: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Create a flea offer for a single item - uncludes an item with > 1 sized stack
|
||||
* e.g. 1 ammo stack of 30 cartridges
|
||||
* @param sessionID Session id
|
||||
* @param offerRequest Offer request from client
|
||||
* @param fullProfile Full profile of player
|
||||
* @param output Response to send to client
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
protected createSingleOffer(sessionID: string, offerRequest: IAddOfferRequestData, fullProfile: ISptProfile, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/**
|
||||
* Create a flea offer for multiples of the same item, can be single items or items with multiple in the stack
|
||||
* e.g. 2 ammo stacks of 30 cartridges each
|
||||
* Each item can be purchsed individually
|
||||
* @param sessionID Session id
|
||||
* @param offerRequest Offer request from client
|
||||
* @param fullProfile Full profile of player
|
||||
* @param output Response to send to client
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
protected createMultiOffer(sessionID: string, offerRequest: IAddOfferRequestData, fullProfile: ISptProfile, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/**
|
||||
* Create a flea offer for multiple items, can be single items or items with multiple in the stack
|
||||
* e.g. 2 ammo stacks of 30 cartridges each
|
||||
* The entire package must be purchased in one go
|
||||
* @param sessionID Session id
|
||||
* @param offerRequest Offer request from client
|
||||
* @param fullProfile Full profile of player
|
||||
* @param output Response to send to client
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
protected createPackOffer(sessionID: string, offerRequest: IAddOfferRequestData, fullProfile: ISptProfile, output: IItemEventRouterResponse): IItemEventRouterResponse;
|
||||
/**
|
||||
* Given a client request, determine what type of offer is being created
|
||||
* single/multi/pack
|
||||
* @param offerRequest Client request
|
||||
* @returns FleaOfferType
|
||||
*/
|
||||
protected getOfferType(offerRequest: IAddOfferRequestData): FleaOfferType;
|
||||
/**
|
||||
* Charge player a listing fee for using flea, pulls charge from data previously sent by client
|
||||
* @param sessionID Player id
|
||||
* @param rootItem Base item being listed (used when client tax cost not found and must be done on server)
|
||||
* @param pmcData Player profile
|
||||
* @param requirementsPriceInRub Rouble cost player chose for listing (used when client tax cost not found and must be done on server)
|
||||
* @param itemStackCount How many items were listed by player (used when client tax cost not found and must be done on server)
|
||||
* @param offerRequest Add offer request object from client
|
||||
* @param output IItemEventRouterResponse
|
||||
* @returns True if charging tax to player failed
|
||||
*/
|
||||
protected chargePlayerTaxFee(sessionID: string, rootItem: IItem, pmcData: IPmcData, requirementsPriceInRub: number, itemStackCount: number, offerRequest: IAddOfferRequestData, output: IItemEventRouterResponse): boolean;
|
||||
/**
|
||||
* Is the item to be listed on the flea valid
|
||||
* @param offerRequest Client offer request
|
||||
* @param errorMessage message to show to player when offer is invalid
|
||||
* @returns Is offer valid
|
||||
*/
|
||||
protected isValidPlayerOfferRequest(offerRequest: IAddOfferRequestData, errorMessage: string): boolean;
|
||||
/**
|
||||
* Get the handbook price in roubles for the items being listed
|
||||
* @param requirements
|
||||
* @returns Rouble price
|
||||
*/
|
||||
protected calculateRequirementsPriceInRub(requirements: IRequirement[]): number;
|
||||
/**
|
||||
* Using item ids from flea offer request, find corresponding items from player inventory and return as array
|
||||
* @param pmcData Player profile
|
||||
* @param itemIdsFromFleaOfferRequest Ids from request
|
||||
* @returns Array of items from player inventory
|
||||
*/
|
||||
protected getItemsToListOnFleaFromInventory(pmcData: IPmcData, itemIdsFromFleaOfferRequest: string[]): {
|
||||
items: IItem[][] | undefined;
|
||||
errorMessage: string | undefined;
|
||||
};
|
||||
createPlayerOffer(sessionId: string, requirements: IRequirement[], items: IItem[], sellInOnePiece: boolean): IRagfairOffer;
|
||||
getAllFleaPrices(): Record<string, number>;
|
||||
getStaticPrices(): Record<string, number>;
|
||||
/**
|
||||
* User requested removal of the offer, actually reduces the time to 71 seconds,
|
||||
* allowing for the possibility of extending the auction before it's end time
|
||||
* @param removeRequest Remove offer request
|
||||
* @param sessionId Players id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
removeOffer(removeRequest: IRemoveOfferRequestData, sessionId: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Extend a ragfair offers listing time
|
||||
* @param extendRequest Extend offer request
|
||||
* @param sessionId Players id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
extendOffer(extendRequest: IExtendOfferRequestData, sessionId: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Create a basic trader request object with price and currency type
|
||||
* @param currency What currency: RUB, EURO, USD
|
||||
* @param value Amount of currency
|
||||
* @returns IProcessBuyTradeRequestData
|
||||
*/
|
||||
protected createBuyTradeRequestObject(currency: string, value: number): IProcessBuyTradeRequestData;
|
||||
}
|
45
ServerMod/types/controllers/RepairController.d.ts
vendored
Normal file
45
ServerMod/types/controllers/RepairController.d.ts
vendored
Normal file
@ -0,0 +1,45 @@
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { QuestHelper } from "@spt/helpers/QuestHelper";
|
||||
import { RepairHelper } from "@spt/helpers/RepairHelper";
|
||||
import { TraderHelper } from "@spt/helpers/TraderHelper";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { IRepairActionDataRequest } from "@spt/models/eft/repair/IRepairActionDataRequest";
|
||||
import { ITraderRepairActionDataRequest } from "@spt/models/eft/repair/ITraderRepairActionDataRequest";
|
||||
import { IRepairConfig } from "@spt/models/spt/config/IRepairConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { PaymentService } from "@spt/services/PaymentService";
|
||||
import { RepairService } from "@spt/services/RepairService";
|
||||
export declare class RepairController {
|
||||
protected logger: ILogger;
|
||||
protected eventOutputHolder: EventOutputHolder;
|
||||
protected databaseService: DatabaseService;
|
||||
protected questHelper: QuestHelper;
|
||||
protected traderHelper: TraderHelper;
|
||||
protected paymentService: PaymentService;
|
||||
protected repairHelper: RepairHelper;
|
||||
protected repairService: RepairService;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected repairConfig: IRepairConfig;
|
||||
constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, databaseService: DatabaseService, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, repairService: RepairService, profileHelper: ProfileHelper);
|
||||
/**
|
||||
* Handle TraderRepair event
|
||||
* Repair with trader
|
||||
* @param sessionID session id
|
||||
* @param body endpoint request data
|
||||
* @param pmcData player profile
|
||||
* @returns item event router action
|
||||
*/
|
||||
traderRepair(sessionID: string, body: ITraderRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse;
|
||||
/**
|
||||
* Handle Repair event
|
||||
* Repair with repair kit
|
||||
* @param sessionID session id
|
||||
* @param body endpoint request data
|
||||
* @param pmcData player profile
|
||||
* @returns item event router action
|
||||
*/
|
||||
repairWithKit(sessionID: string, body: IRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse;
|
||||
}
|
179
ServerMod/types/controllers/RepeatableQuestController.d.ts
vendored
Normal file
179
ServerMod/types/controllers/RepeatableQuestController.d.ts
vendored
Normal file
@ -0,0 +1,179 @@
|
||||
import { RepeatableQuestGenerator } from "@spt/generators/RepeatableQuestGenerator";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { QuestHelper } from "@spt/helpers/QuestHelper";
|
||||
import { RepeatableQuestHelper } from "@spt/helpers/RepeatableQuestHelper";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IPmcDataRepeatableQuest, IRepeatableQuest } from "@spt/models/eft/common/tables/IRepeatableQuests";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { ISptProfile } from "@spt/models/eft/profile/ISptProfile";
|
||||
import { IRepeatableQuestChangeRequest } from "@spt/models/eft/quests/IRepeatableQuestChangeRequest";
|
||||
import { ELocationName } from "@spt/models/enums/ELocationName";
|
||||
import { IQuestConfig, IRepeatableQuestConfig } from "@spt/models/spt/config/IQuestConfig";
|
||||
import { IGetRepeatableByIdResult } from "@spt/models/spt/quests/IGetRepeatableByIdResult";
|
||||
import { IQuestTypePool } from "@spt/models/spt/repeatable/IQuestTypePool";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { PaymentService } from "@spt/services/PaymentService";
|
||||
import { ProfileFixerService } from "@spt/services/ProfileFixerService";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
import { ObjectId } from "@spt/utils/ObjectId";
|
||||
import { RandomUtil } from "@spt/utils/RandomUtil";
|
||||
import { TimeUtil } from "@spt/utils/TimeUtil";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
export declare class RepeatableQuestController {
|
||||
protected logger: ILogger;
|
||||
protected databaseService: DatabaseService;
|
||||
protected timeUtil: TimeUtil;
|
||||
protected randomUtil: RandomUtil;
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected profileFixerService: ProfileFixerService;
|
||||
protected localisationService: LocalisationService;
|
||||
protected eventOutputHolder: EventOutputHolder;
|
||||
protected paymentService: PaymentService;
|
||||
protected objectId: ObjectId;
|
||||
protected repeatableQuestGenerator: RepeatableQuestGenerator;
|
||||
protected repeatableQuestHelper: RepeatableQuestHelper;
|
||||
protected questHelper: QuestHelper;
|
||||
protected configServer: ConfigServer;
|
||||
protected cloner: ICloner;
|
||||
protected questConfig: IQuestConfig;
|
||||
constructor(logger: ILogger, databaseService: DatabaseService, timeUtil: TimeUtil, randomUtil: RandomUtil, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, eventOutputHolder: EventOutputHolder, paymentService: PaymentService, objectId: ObjectId, repeatableQuestGenerator: RepeatableQuestGenerator, repeatableQuestHelper: RepeatableQuestHelper, questHelper: QuestHelper, configServer: ConfigServer, cloner: ICloner);
|
||||
/**
|
||||
* Handle client/repeatalbeQuests/activityPeriods
|
||||
* Returns an array of objects in the format of repeatable quests to the client.
|
||||
* repeatableQuestObject = {
|
||||
* id: Unique Id,
|
||||
* name: "Daily",
|
||||
* endTime: the time when the quests expire
|
||||
* activeQuests: currently available quests in an array. Each element of quest type format (see assets/database/templates/repeatableQuests.json).
|
||||
* inactiveQuests: the quests which were previously active (required by client to fail them if they are not completed)
|
||||
* }
|
||||
*
|
||||
* The method checks if the player level requirement for repeatable quests (e.g. daily lvl5, weekly lvl15) is met and if the previously active quests
|
||||
* are still valid. This ischecked by endTime persisted in profile accordning to the resetTime configured for each repeatable kind (daily, weekly)
|
||||
* in QuestCondig.js
|
||||
*
|
||||
* If the condition is met, new repeatableQuests are created, old quests (which are persisted in the profile.RepeatableQuests[i].activeQuests) are
|
||||
* moved to profile.RepeatableQuests[i].inactiveQuests. This memory is required to get rid of old repeatable quest data in the profile, otherwise
|
||||
* they'll litter the profile's Quests field.
|
||||
* (if the are on "Succeed" but not "Completed" we keep them, to allow the player to complete them and get the rewards)
|
||||
* The new quests generated are again persisted in profile.RepeatableQuests
|
||||
*
|
||||
* @param {string} sessionID Player's session id
|
||||
*
|
||||
* @returns {array} Array of "repeatableQuestObjects" as described above
|
||||
*/
|
||||
getClientRepeatableQuests(sessionID: string): IPmcDataRepeatableQuest[];
|
||||
/**
|
||||
* Expire quests and replace expired quests with ready-to-hand-in quests inside generatedRepeatables.activeQuests
|
||||
* @param generatedRepeatables Repeatables to process (daily/weekly)
|
||||
* @param pmcData Player profile
|
||||
*/
|
||||
protected processExpiredQuests(generatedRepeatables: IPmcDataRepeatableQuest, pmcData: IPmcData): void;
|
||||
/**
|
||||
* Check if a repeatable quest type (daily/weekly) is active for the given profile
|
||||
* @param repeatableConfig Repeatable quest config
|
||||
* @param pmcData Player profile
|
||||
* @returns True if profile is allowed to access dailies
|
||||
*/
|
||||
protected canProfileAccessRepeatableQuests(repeatableConfig: IRepeatableQuestConfig, pmcData: IPmcData): boolean;
|
||||
/**
|
||||
* Does player have daily scav quests unlocked
|
||||
* @param pmcData Player profile to check
|
||||
* @returns True if unlocked
|
||||
*/
|
||||
protected playerHasDailyScavQuestsUnlocked(pmcData: IPmcData): boolean;
|
||||
/**
|
||||
* Does player have daily pmc quests unlocked
|
||||
* @param pmcData Player profile to check
|
||||
* @param repeatableConfig Config of daily type to check
|
||||
* @returns True if unlocked
|
||||
*/
|
||||
protected playerHasDailyPmcQuestsUnlocked(pmcData: IPmcData, repeatableConfig: IRepeatableQuestConfig): boolean;
|
||||
/**
|
||||
* Get the number of quests to generate - takes into account charisma state of player
|
||||
* @param repeatableConfig Config
|
||||
* @param pmcData Player profile
|
||||
* @returns Quest count
|
||||
*/
|
||||
protected getQuestCount(repeatableConfig: IRepeatableQuestConfig, pmcData: IPmcData): number;
|
||||
/**
|
||||
* Get repeatable quest data from profile from name (daily/weekly), creates base repeatable quest object if none exists
|
||||
* @param repeatableConfig daily/weekly config
|
||||
* @param pmcData Profile to search
|
||||
* @returns IPmcDataRepeatableQuest
|
||||
*/
|
||||
protected getRepeatableQuestSubTypeFromProfile(repeatableConfig: IRepeatableQuestConfig, pmcData: IPmcData): IPmcDataRepeatableQuest;
|
||||
/**
|
||||
* Just for debug reasons. Draws dailies a random assort of dailies extracted from dumps
|
||||
*/
|
||||
generateDebugDailies(dailiesPool: any, factory: any, number: number): any;
|
||||
/**
|
||||
* Used to create a quest pool during each cycle of repeatable quest generation. The pool will be subsequently
|
||||
* narrowed down during quest generation to avoid duplicate quests. Like duplicate extractions or elimination quests
|
||||
* where you have to e.g. kill scavs in same locations.
|
||||
* @param repeatableConfig main repeatable quest config
|
||||
* @param pmcLevel level of pmc generating quest pool
|
||||
* @returns IQuestTypePool
|
||||
*/
|
||||
protected generateQuestPool(repeatableConfig: IRepeatableQuestConfig, pmcLevel: number): IQuestTypePool;
|
||||
protected createBaseQuestPool(repeatableConfig: IRepeatableQuestConfig): IQuestTypePool;
|
||||
/**
|
||||
* Return the locations this PMC is allowed to get daily quests for based on their level
|
||||
* @param locations The original list of locations
|
||||
* @param pmcLevel The players level
|
||||
* @returns A filtered list of locations that allow the player PMC level to access it
|
||||
*/
|
||||
protected getAllowedLocationsForPmcLevel(locations: Record<ELocationName, string[]>, pmcLevel: number): Partial<Record<ELocationName, string[]>>;
|
||||
/**
|
||||
* Return true if the given pmcLevel is allowed on the given location
|
||||
* @param location The location name to check
|
||||
* @param pmcLevel The level of the pmc
|
||||
* @returns True if the given pmc level is allowed to access the given location
|
||||
*/
|
||||
protected isPmcLevelAllowedOnLocation(location: string, pmcLevel: number): boolean;
|
||||
debugLogRepeatableQuestIds(pmcData: IPmcData): void;
|
||||
/**
|
||||
* Handle RepeatableQuestChange event
|
||||
*
|
||||
* Replace a players repeatable quest
|
||||
* @param pmcData Player profile
|
||||
* @param changeRequest Request object
|
||||
* @param sessionID Session id
|
||||
* @returns IItemEventRouterResponse
|
||||
*/
|
||||
changeRepeatableQuest(pmcData: IPmcData, changeRequest: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Remove the provided quest from pmc and scav character profiles
|
||||
* @param fullProfile Profile to remove quest from
|
||||
* @param questToReplaceId Quest id to remove from profile
|
||||
*/
|
||||
protected removeQuestFromProfile(fullProfile: ISptProfile, questToReplaceId: string): void;
|
||||
/**
|
||||
* Clean up the repeatables `changeRequirement` dictionary of expired data
|
||||
* @param repeatablesOfTypeInProfile The repeatables that have the replaced and new quest
|
||||
* @param replacedQuestId Id of the replaced quest
|
||||
*/
|
||||
protected cleanUpRepeatableChangeRequirements(repeatablesOfTypeInProfile: IPmcDataRepeatableQuest, replacedQuestId: string): void;
|
||||
/**
|
||||
* Find a repeatable (daily/weekly/scav) from a players profile by its id
|
||||
* @param questId Id of quest to find
|
||||
* @param pmcData Profile that contains quests to look through
|
||||
* @returns IGetRepeatableByIdResult
|
||||
*/
|
||||
protected getRepeatableById(questId: string, pmcData: IPmcData): IGetRepeatableByIdResult;
|
||||
protected attemptToGenerateRepeatableQuest(sessionId: string, pmcData: IPmcData, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IRepeatableQuest;
|
||||
/**
|
||||
* Some accounts have access to free repeatable quest refreshes
|
||||
* Track the usage of them inside players profile
|
||||
* @param fullProfile Player profile
|
||||
* @param repeatableSubType Can be daily / weekly / scav repeatable
|
||||
* @param repeatableTypeName Subtype of repeatable quest: daily / weekly / scav
|
||||
* @returns Is the repeatable being replaced for free
|
||||
*/
|
||||
protected useFreeRefreshIfAvailable(fullProfile: ISptProfile, repeatableSubType: IPmcDataRepeatableQuest, repeatableTypeName: string): boolean;
|
||||
}
|
105
ServerMod/types/controllers/TradeController.d.ts
vendored
Normal file
105
ServerMod/types/controllers/TradeController.d.ts
vendored
Normal file
@ -0,0 +1,105 @@
|
||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { RagfairOfferHelper } from "@spt/helpers/RagfairOfferHelper";
|
||||
import { TradeHelper } from "@spt/helpers/TradeHelper";
|
||||
import { TraderHelper } from "@spt/helpers/TraderHelper";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IItem } from "@spt/models/eft/common/tables/IItem";
|
||||
import { ITraderBase } from "@spt/models/eft/common/tables/ITrader";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { IRagfairOffer } from "@spt/models/eft/ragfair/IRagfairOffer";
|
||||
import { IProcessBaseTradeRequestData } from "@spt/models/eft/trade/IProcessBaseTradeRequestData";
|
||||
import { IOfferRequest, IProcessRagfairTradeRequestData } from "@spt/models/eft/trade/IProcessRagfairTradeRequestData";
|
||||
import { ISellScavItemsToFenceRequestData } from "@spt/models/eft/trade/ISellScavItemsToFenceRequestData";
|
||||
import { Traders } from "@spt/models/enums/Traders";
|
||||
import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig";
|
||||
import { ITraderConfig } from "@spt/models/spt/config/ITraderConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { RagfairServer } from "@spt/servers/RagfairServer";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { MailSendService } from "@spt/services/MailSendService";
|
||||
import { RagfairPriceService } from "@spt/services/RagfairPriceService";
|
||||
import { HashUtil } from "@spt/utils/HashUtil";
|
||||
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||
import { RandomUtil } from "@spt/utils/RandomUtil";
|
||||
import { TimeUtil } from "@spt/utils/TimeUtil";
|
||||
export declare class TradeController {
|
||||
protected logger: ILogger;
|
||||
protected databaseService: DatabaseService;
|
||||
protected eventOutputHolder: EventOutputHolder;
|
||||
protected tradeHelper: TradeHelper;
|
||||
protected timeUtil: TimeUtil;
|
||||
protected randomUtil: RandomUtil;
|
||||
protected hashUtil: HashUtil;
|
||||
protected itemHelper: ItemHelper;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected ragfairOfferHelper: RagfairOfferHelper;
|
||||
protected traderHelper: TraderHelper;
|
||||
protected ragfairServer: RagfairServer;
|
||||
protected httpResponse: HttpResponseUtil;
|
||||
protected localisationService: LocalisationService;
|
||||
protected ragfairPriceService: RagfairPriceService;
|
||||
protected mailSendService: MailSendService;
|
||||
protected configServer: ConfigServer;
|
||||
protected ragfairConfig: IRagfairConfig;
|
||||
protected traderConfig: ITraderConfig;
|
||||
constructor(logger: ILogger, databaseService: DatabaseService, eventOutputHolder: EventOutputHolder, tradeHelper: TradeHelper, timeUtil: TimeUtil, randomUtil: RandomUtil, hashUtil: HashUtil, itemHelper: ItemHelper, profileHelper: ProfileHelper, ragfairOfferHelper: RagfairOfferHelper, traderHelper: TraderHelper, ragfairServer: RagfairServer, httpResponse: HttpResponseUtil, localisationService: LocalisationService, ragfairPriceService: RagfairPriceService, mailSendService: MailSendService, configServer: ConfigServer);
|
||||
/** Handle TradingConfirm event */
|
||||
confirmTrading(pmcData: IPmcData, request: IProcessBaseTradeRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/** Handle RagFairBuyOffer event */
|
||||
confirmRagfairTrading(pmcData: IPmcData, request: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Buy an item off the flea sold by a trader
|
||||
* @param sessionId Session id
|
||||
* @param pmcData Player profile
|
||||
* @param fleaOffer Offer being purchased
|
||||
* @param requestOffer request data from client
|
||||
* @param output Output to send back to client
|
||||
*/
|
||||
protected buyTraderItemFromRagfair(sessionId: string, pmcData: IPmcData, fleaOffer: IRagfairOffer, requestOffer: IOfferRequest, output: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* Buy an item off the flea sold by a PMC
|
||||
* @param sessionId Session id
|
||||
* @param pmcData Player profile
|
||||
* @param fleaOffer Offer being purchased
|
||||
* @param requestOffer Request data from client
|
||||
* @param output Output to send back to client
|
||||
*/
|
||||
protected buyPmcItemFromRagfair(sessionId: string, pmcData: IPmcData, fleaOffer: IRagfairOffer, requestOffer: IOfferRequest, output: IItemEventRouterResponse): void;
|
||||
/**
|
||||
* Is the provided offerid and ownerid from a player made offer
|
||||
* @param offerId Id of the offer
|
||||
* @param offerOwnerId Owner id
|
||||
* @returns true if offer was made by a player
|
||||
*/
|
||||
protected isPlayerOffer(offerId: string, offerOwnerId: string): boolean;
|
||||
/**
|
||||
* Does Player have necessary trader loyalty to purchase flea offer
|
||||
* @param sellerIsTrader is seller trader
|
||||
* @param fleaOffer Flea offer being bought
|
||||
* @param pmcData Player profile
|
||||
* @returns True if player can buy offer
|
||||
*/
|
||||
protected playerLacksTraderLoyaltyLevelToBuyOffer(fleaOffer: IRagfairOffer, pmcData: IPmcData): boolean;
|
||||
/** Handle SellAllFromSavage event */
|
||||
sellScavItemsToFence(pmcData: IPmcData, request: ISellScavItemsToFenceRequestData, sessionId: string): IItemEventRouterResponse;
|
||||
/**
|
||||
* Send the specified rouble total to player as mail
|
||||
* @param sessionId Session id
|
||||
* @param trader Trader to sell items to
|
||||
* @param output IItemEventRouterResponse
|
||||
*/
|
||||
protected mailMoneyToPlayer(sessionId: string, roublesToSend: number, trader: Traders): void;
|
||||
/**
|
||||
* Looks up an items children and gets total handbook price for them
|
||||
* @param parentItemId parent item that has children we want to sum price of
|
||||
* @param items All items (parent + children)
|
||||
* @param handbookPrices Prices of items from handbook
|
||||
* @param traderDetails Trader being sold to to perform buy category check against
|
||||
* @returns Rouble price
|
||||
*/
|
||||
protected getPriceOfItemAndChildren(parentItemId: string, items: IItem[], handbookPrices: Record<string, number>, traderDetails: ITraderBase): number;
|
||||
}
|
66
ServerMod/types/controllers/TraderController.d.ts
vendored
Normal file
66
ServerMod/types/controllers/TraderController.d.ts
vendored
Normal file
@ -0,0 +1,66 @@
|
||||
import { FenceBaseAssortGenerator } from "@spt/generators/FenceBaseAssortGenerator";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { TraderAssortHelper } from "@spt/helpers/TraderAssortHelper";
|
||||
import { TraderHelper } from "@spt/helpers/TraderHelper";
|
||||
import { ITraderAssort, ITraderBase } from "@spt/models/eft/common/tables/ITrader";
|
||||
import { IGetItemPricesResponse } from "@spt/models/eft/game/IGetItemPricesResponse";
|
||||
import { ITraderConfig } from "@spt/models/spt/config/ITraderConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { FenceService } from "@spt/services/FenceService";
|
||||
import { RagfairPriceService } from "@spt/services/RagfairPriceService";
|
||||
import { TraderAssortService } from "@spt/services/TraderAssortService";
|
||||
import { TraderPurchasePersisterService } from "@spt/services/TraderPurchasePersisterService";
|
||||
import { TimeUtil } from "@spt/utils/TimeUtil";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
export declare class TraderController {
|
||||
protected logger: ILogger;
|
||||
protected timeUtil: TimeUtil;
|
||||
protected databaseService: DatabaseService;
|
||||
protected traderAssortHelper: TraderAssortHelper;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected traderHelper: TraderHelper;
|
||||
protected traderAssortService: TraderAssortService;
|
||||
protected ragfairPriceService: RagfairPriceService;
|
||||
protected traderPurchasePersisterService: TraderPurchasePersisterService;
|
||||
protected fenceService: FenceService;
|
||||
protected fenceBaseAssortGenerator: FenceBaseAssortGenerator;
|
||||
protected configServer: ConfigServer;
|
||||
protected cloner: ICloner;
|
||||
protected traderConfig: ITraderConfig;
|
||||
constructor(logger: ILogger, timeUtil: TimeUtil, databaseService: DatabaseService, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, traderAssortService: TraderAssortService, ragfairPriceService: RagfairPriceService, traderPurchasePersisterService: TraderPurchasePersisterService, fenceService: FenceService, fenceBaseAssortGenerator: FenceBaseAssortGenerator, configServer: ConfigServer, cloner: ICloner);
|
||||
/**
|
||||
* Runs when onLoad event is fired
|
||||
* Iterate over traders, ensure a pristine copy of their assorts is stored in traderAssortService
|
||||
* Store timestamp of next assort refresh in nextResupply property of traders .base object
|
||||
*/
|
||||
load(): void;
|
||||
/**
|
||||
* Runs when onUpdate is fired
|
||||
* If current time is > nextResupply(expire) time of trader, refresh traders assorts and
|
||||
* Fence is handled slightly differently
|
||||
* @returns has run
|
||||
*/
|
||||
update(): boolean;
|
||||
/**
|
||||
* Handle client/trading/api/traderSettings
|
||||
* Return an array of all traders
|
||||
* @param sessionID Session id
|
||||
* @returns array if ITraderBase objects
|
||||
*/
|
||||
getAllTraders(sessionID: string): ITraderBase[];
|
||||
/**
|
||||
* Order traders by their traderId (Ttid)
|
||||
* @param traderA First trader to compare
|
||||
* @param traderB Second trader to compare
|
||||
* @returns 1,-1 or 0
|
||||
*/
|
||||
protected sortByTraderId(traderA: ITraderBase, traderB: ITraderBase): number;
|
||||
/** Handle client/trading/api/getTrader */
|
||||
getTrader(sessionID: string, traderID: string): ITraderBase;
|
||||
/** Handle client/trading/api/getTraderAssort */
|
||||
getAssort(sessionId: string, traderId: string): ITraderAssort;
|
||||
/** Handle client/items/prices/TRADERID */
|
||||
getItemPrices(sessionId: string, traderId: string): IGetItemPricesResponse;
|
||||
}
|
23
ServerMod/types/controllers/WeatherController.d.ts
vendored
Normal file
23
ServerMod/types/controllers/WeatherController.d.ts
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
import { WeatherGenerator } from "@spt/generators/WeatherGenerator";
|
||||
import { WeatherHelper } from "@spt/helpers/WeatherHelper";
|
||||
import { IWeatherData } from "@spt/models/eft/weather/IWeatherData";
|
||||
import { IWeatherConfig } from "@spt/models/spt/config/IWeatherConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { IGetLocalWeatherResponseData } from "@spt/models/spt/weather/IGetLocalWeatherResponseData";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { RaidWeatherService } from "@spt/services/RaidWeatherService";
|
||||
import { SeasonalEventService } from "@spt/services/SeasonalEventService";
|
||||
export declare class WeatherController {
|
||||
protected weatherGenerator: WeatherGenerator;
|
||||
protected logger: ILogger;
|
||||
protected configServer: ConfigServer;
|
||||
protected seasonalEventService: SeasonalEventService;
|
||||
protected raidWeatherService: RaidWeatherService;
|
||||
protected weatherHelper: WeatherHelper;
|
||||
protected weatherConfig: IWeatherConfig;
|
||||
constructor(weatherGenerator: WeatherGenerator, logger: ILogger, configServer: ConfigServer, seasonalEventService: SeasonalEventService, raidWeatherService: RaidWeatherService, weatherHelper: WeatherHelper);
|
||||
/** Handle client/weather */
|
||||
generate(): IWeatherData;
|
||||
/** Handle client/localGame/weather */
|
||||
generateLocal(sesssionId: string): IGetLocalWeatherResponseData;
|
||||
}
|
16
ServerMod/types/controllers/WishlistController.d.ts
vendored
Normal file
16
ServerMod/types/controllers/WishlistController.d.ts
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { IAddToWishlistRequest } from "@spt/models/eft/wishlist/IAddToWishlistRequest";
|
||||
import { IChangeWishlistItemCategoryRequest } from "@spt/models/eft/wishlist/IChangeWishlistItemCategoryRequest";
|
||||
import { IRemoveFromWishlistRequest } from "@spt/models/eft/wishlist/IRemoveFromWishlistRequest";
|
||||
import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
|
||||
export declare class WishlistController {
|
||||
protected eventOutputHolder: EventOutputHolder;
|
||||
constructor(eventOutputHolder: EventOutputHolder);
|
||||
/** Handle AddToWishList */
|
||||
addToWishList(pmcData: IPmcData, request: IAddToWishlistRequest, sessionID: string): IItemEventRouterResponse;
|
||||
/** Handle RemoveFromWishList event */
|
||||
removeFromWishList(pmcData: IPmcData, request: IRemoveFromWishlistRequest, sessionID: string): IItemEventRouterResponse;
|
||||
/** Handle changeWishlistItemCategory event */
|
||||
changeWishlistItemCategory(pmcData: IPmcData, request: IChangeWishlistItemCategoryRequest, sessionID: string): IItemEventRouterResponse;
|
||||
}
|
19
ServerMod/types/di/Container.d.ts
vendored
Normal file
19
ServerMod/types/di/Container.d.ts
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
import { DependencyContainer } from "tsyringe";
|
||||
/**
|
||||
* Handle the registration of classes to be used by the Dependency Injection code
|
||||
*/
|
||||
export declare class Container {
|
||||
static registerPostLoadTypes(container: DependencyContainer, childContainer: DependencyContainer): void;
|
||||
static registerTypes(depContainer: DependencyContainer): void;
|
||||
static registerPrimaryDependencies(depContainer: DependencyContainer): void;
|
||||
static registerListTypes(depContainer: DependencyContainer): void;
|
||||
private static registerUtils;
|
||||
private static registerRouters;
|
||||
private static registerGenerators;
|
||||
private static registerHelpers;
|
||||
private static registerLoaders;
|
||||
private static registerCallbacks;
|
||||
private static registerServices;
|
||||
private static registerServers;
|
||||
private static registerControllers;
|
||||
}
|
4
ServerMod/types/di/OnLoad.d.ts
vendored
Normal file
4
ServerMod/types/di/OnLoad.d.ts
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
export interface OnLoad {
|
||||
onLoad(): Promise<void>;
|
||||
getRoute(): string;
|
||||
}
|
4
ServerMod/types/di/OnUpdate.d.ts
vendored
Normal file
4
ServerMod/types/di/OnUpdate.d.ts
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
export interface OnUpdate {
|
||||
onUpdate(timeSinceLastRun: number): Promise<boolean>;
|
||||
getRoute(): string;
|
||||
}
|
38
ServerMod/types/di/Router.d.ts
vendored
Normal file
38
ServerMod/types/di/Router.d.ts
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { ISptProfile } from "@spt/models/eft/profile/ISptProfile";
|
||||
export declare class Router {
|
||||
protected handledRoutes: HandledRoute[];
|
||||
getTopLevelRoute(): string;
|
||||
protected getHandledRoutes(): HandledRoute[];
|
||||
protected getInternalHandledRoutes(): HandledRoute[];
|
||||
canHandle(url: string, partialMatch?: boolean): boolean;
|
||||
}
|
||||
export declare class StaticRouter extends Router {
|
||||
private routes;
|
||||
constructor(routes: RouteAction[]);
|
||||
handleStatic(url: string, info: any, sessionID: string, output: string): Promise<any>;
|
||||
getHandledRoutes(): HandledRoute[];
|
||||
}
|
||||
export declare class DynamicRouter extends Router {
|
||||
private routes;
|
||||
constructor(routes: RouteAction[]);
|
||||
handleDynamic(url: string, info: any, sessionID: string, output: string): Promise<any>;
|
||||
getHandledRoutes(): HandledRoute[];
|
||||
}
|
||||
export declare class ItemEventRouterDefinition extends Router {
|
||||
handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string, output: IItemEventRouterResponse): Promise<any>;
|
||||
}
|
||||
export declare class SaveLoadRouter extends Router {
|
||||
handleLoad(profile: ISptProfile): ISptProfile;
|
||||
}
|
||||
export declare class HandledRoute {
|
||||
route: string;
|
||||
dynamic: boolean;
|
||||
constructor(route: string, dynamic: boolean);
|
||||
}
|
||||
export declare class RouteAction {
|
||||
url: string;
|
||||
action: (url: string, info: any, sessionID: string, output: string) => Promise<any>;
|
||||
constructor(url: string, action: (url: string, info: any, sessionID: string, output: string) => Promise<any>);
|
||||
}
|
5
ServerMod/types/di/Serializer.d.ts
vendored
Normal file
5
ServerMod/types/di/Serializer.d.ts
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
import { IncomingMessage, ServerResponse } from "node:http";
|
||||
export declare class Serializer {
|
||||
serialize(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): Promise<void>;
|
||||
canHandle(something: string): boolean;
|
||||
}
|
291
ServerMod/types/generators/BotEquipmentModGenerator.d.ts
vendored
Normal file
291
ServerMod/types/generators/BotEquipmentModGenerator.d.ts
vendored
Normal file
@ -0,0 +1,291 @@
|
||||
import { BotGeneratorHelper } from "@spt/helpers/BotGeneratorHelper";
|
||||
import { BotHelper } from "@spt/helpers/BotHelper";
|
||||
import { BotWeaponGeneratorHelper } from "@spt/helpers/BotWeaponGeneratorHelper";
|
||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||
import { PresetHelper } from "@spt/helpers/PresetHelper";
|
||||
import { ProbabilityHelper } from "@spt/helpers/ProbabilityHelper";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
|
||||
import { IPreset } from "@spt/models/eft/common/IGlobals";
|
||||
import { IMods, IModsChances } from "@spt/models/eft/common/tables/IBotType";
|
||||
import { IItem } from "@spt/models/eft/common/tables/IItem";
|
||||
import { ISlot, ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
|
||||
import { ModSpawn } from "@spt/models/enums/ModSpawn";
|
||||
import { IChooseRandomCompatibleModResult } from "@spt/models/spt/bots/IChooseRandomCompatibleModResult";
|
||||
import { IFilterPlateModsForSlotByLevelResult } from "@spt/models/spt/bots/IFilterPlateModsForSlotByLevelResult";
|
||||
import { IGenerateEquipmentProperties } from "@spt/models/spt/bots/IGenerateEquipmentProperties";
|
||||
import { IGenerateWeaponRequest } from "@spt/models/spt/bots/IGenerateWeaponRequest";
|
||||
import { IModToSpawnRequest } from "@spt/models/spt/bots/IModToSpawnRequest";
|
||||
import { EquipmentFilters, IBotConfig, IEquipmentFilterDetails } from "@spt/models/spt/config/IBotConfig";
|
||||
import { ExhaustableArray } from "@spt/models/spt/server/ExhaustableArray";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { BotEquipmentFilterService } from "@spt/services/BotEquipmentFilterService";
|
||||
import { BotEquipmentModPoolService } from "@spt/services/BotEquipmentModPoolService";
|
||||
import { BotWeaponModLimitService } from "@spt/services/BotWeaponModLimitService";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { ItemFilterService } from "@spt/services/ItemFilterService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { HashUtil } from "@spt/utils/HashUtil";
|
||||
import { RandomUtil } from "@spt/utils/RandomUtil";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
export declare class BotEquipmentModGenerator {
|
||||
protected logger: ILogger;
|
||||
protected hashUtil: HashUtil;
|
||||
protected randomUtil: RandomUtil;
|
||||
protected probabilityHelper: ProbabilityHelper;
|
||||
protected databaseService: DatabaseService;
|
||||
protected itemHelper: ItemHelper;
|
||||
protected botEquipmentFilterService: BotEquipmentFilterService;
|
||||
protected itemFilterService: ItemFilterService;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected botWeaponModLimitService: BotWeaponModLimitService;
|
||||
protected botHelper: BotHelper;
|
||||
protected botGeneratorHelper: BotGeneratorHelper;
|
||||
protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper;
|
||||
protected weightedRandomHelper: WeightedRandomHelper;
|
||||
protected presetHelper: PresetHelper;
|
||||
protected localisationService: LocalisationService;
|
||||
protected botEquipmentModPoolService: BotEquipmentModPoolService;
|
||||
protected configServer: ConfigServer;
|
||||
protected cloner: ICloner;
|
||||
protected botConfig: IBotConfig;
|
||||
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseService: DatabaseService, itemHelper: ItemHelper, botEquipmentFilterService: BotEquipmentFilterService, itemFilterService: ItemFilterService, profileHelper: ProfileHelper, botWeaponModLimitService: BotWeaponModLimitService, botHelper: BotHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, weightedRandomHelper: WeightedRandomHelper, presetHelper: PresetHelper, localisationService: LocalisationService, botEquipmentModPoolService: BotEquipmentModPoolService, configServer: ConfigServer, cloner: ICloner);
|
||||
/**
|
||||
* Check mods are compatible and add to array
|
||||
* @param equipment Equipment item to add mods to
|
||||
* @param modPool Mod list to choose frm
|
||||
* @param parentId parentid of item to add mod to
|
||||
* @param parentTemplate Template object of item to add mods to
|
||||
* @param specificBlacklist The relevant blacklist from bot.json equipment dictionary
|
||||
* @param forceSpawn should this mod be forced to spawn
|
||||
* @returns Item + compatible mods as an array
|
||||
*/
|
||||
generateModsForEquipment(equipment: IItem[], parentId: string, parentTemplate: ITemplateItem, settings: IGenerateEquipmentProperties, specificBlacklist: IEquipmentFilterDetails, shouldForceSpawn?: boolean): IItem[];
|
||||
/**
|
||||
* Filter a bots plate pool based on its current level
|
||||
* @param settings Bot equipment generation settings
|
||||
* @param modSlot Armor slot being filtered
|
||||
* @param existingPlateTplPool Plates tpls to choose from
|
||||
* @param armorItem The armor items db template
|
||||
* @returns Array of plate tpls to choose from
|
||||
*/
|
||||
protected filterPlateModsForSlotByLevel(settings: IGenerateEquipmentProperties, modSlot: string, existingPlateTplPool: string[], armorItem: ITemplateItem): IFilterPlateModsForSlotByLevelResult;
|
||||
/**
|
||||
* Add mods to a weapon using the provided mod pool
|
||||
* @param sessionId Session id
|
||||
* @param request Data used to generate the weapon
|
||||
* @returns Weapon + mods array
|
||||
*/
|
||||
generateModsForWeapon(sessionId: string, request: IGenerateWeaponRequest): IItem[];
|
||||
/**
|
||||
* Should the provided bot have its stock chance values altered to 100%
|
||||
* @param modSlot Slot to check
|
||||
* @param botEquipConfig Bots equipment config/chance values
|
||||
* @param modToAddTemplate Mod being added to bots weapon
|
||||
* @returns True if it should
|
||||
*/
|
||||
protected shouldForceSubStockSlots(modSlot: string, botEquipConfig: EquipmentFilters, modToAddTemplate: ITemplateItem): boolean;
|
||||
/**
|
||||
* Is this modslot a front or rear sight
|
||||
* @param modSlot Slot to check
|
||||
* @returns true if it's a front/rear sight
|
||||
*/
|
||||
protected modIsFrontOrRearSight(modSlot: string, tpl: string): boolean;
|
||||
/**
|
||||
* Does the provided mod details show the mod can hold a scope
|
||||
* @param modSlot e.g. mod_scope, mod_mount
|
||||
* @param modsParentId Parent id of mod item
|
||||
* @returns true if it can hold a scope
|
||||
*/
|
||||
protected modSlotCanHoldScope(modSlot: string, modsParentId: string): boolean;
|
||||
/**
|
||||
* Set mod spawn chances to defined amount
|
||||
* @param modSpawnChances Chance dictionary to update
|
||||
*/
|
||||
protected adjustSlotSpawnChances(modSpawnChances: IModsChances, modSlotsToAdjust: string[], newChancePercent: number): void;
|
||||
/**
|
||||
* Does the provided modSlot allow muzzle-related items
|
||||
* @param modSlot Slot id to check
|
||||
* @param modsParentId OPTIONAL: parent id of modslot being checked
|
||||
* @returns True if modSlot can have muzzle-related items
|
||||
*/
|
||||
protected modSlotCanHoldMuzzleDevices(modSlot: string, modsParentId?: string): boolean;
|
||||
/**
|
||||
* Sort mod slots into an ordering that maximises chance of a successful weapon generation
|
||||
* @param unsortedSlotKeys Array of mod slot strings to sort
|
||||
* @param itemTplWithKeysToSort The Tpl of the item with mod keys being sorted
|
||||
* @returns Sorted array
|
||||
*/
|
||||
protected sortModKeys(unsortedSlotKeys: string[], itemTplWithKeysToSort: string): string[];
|
||||
/**
|
||||
* Get a Slot property for an item (chamber/cartridge/slot)
|
||||
* @param modSlot e.g patron_in_weapon
|
||||
* @param parentTemplate item template
|
||||
* @returns Slot item
|
||||
*/
|
||||
protected getModItemSlotFromDb(modSlot: string, parentTemplate: ITemplateItem): ISlot;
|
||||
/**
|
||||
* Randomly choose if a mod should be spawned, 100% for required mods OR mod is ammo slot
|
||||
* @param itemSlot slot the item sits in from db
|
||||
* @param modSlotName Name of slot the mod sits in
|
||||
* @param modSpawnChances Chances for various mod spawns
|
||||
* @param botEquipConfig Various config settings for generating this type of bot
|
||||
* @returns ModSpawn.SPAWN when mod should be spawned, ModSpawn.DEFAULT_MOD when default mod should spawn, ModSpawn.SKIP when mod is skipped
|
||||
*/
|
||||
protected shouldModBeSpawned(itemSlot: ISlot, modSlotName: string, modSpawnChances: IModsChances, botEquipConfig: EquipmentFilters): ModSpawn;
|
||||
/**
|
||||
* Choose a mod to fit into the desired slot
|
||||
* @param request Data used to choose an appropriate mod with
|
||||
* @returns itemHelper.getItem() result
|
||||
*/
|
||||
protected chooseModToPutIntoSlot(request: IModToSpawnRequest): [boolean, ITemplateItem] | undefined;
|
||||
/**
|
||||
* Given the passed in array of magaizne tpls, look up the min size set in config and return only those that have that size or larger
|
||||
* @param modSpawnRequest Request data
|
||||
* @param modPool Pool of magazine tpls to filter
|
||||
* @returns Filtered pool of magazine tpls
|
||||
*/
|
||||
protected getFilterdMagazinePoolByCapacity(modSpawnRequest: IModToSpawnRequest, modPool: string[]): string[];
|
||||
/**
|
||||
* Choose a weapon mod tpl for a given slot from a pool of choices
|
||||
* Checks chosen tpl is compatible with all existing weapon items
|
||||
* @param modPool Pool of mods that can be picked from
|
||||
* @param parentSlot Slot the picked mod will have as a parent
|
||||
* @param choiceTypeEnum How should chosen tpl be treated: DEFAULT_MOD/SPAWN/SKIP
|
||||
* @param weapon Array of weapon items chosen item will be added to
|
||||
* @param modSlotName Name of slot picked mod will be placed into
|
||||
* @returns Chosen weapon details
|
||||
*/
|
||||
protected getCompatibleWeaponModTplForSlotFromPool(request: IModToSpawnRequest, modPool: string[], parentSlot: ISlot, choiceTypeEnum: ModSpawn, weapon: IItem[], modSlotName: string): IChooseRandomCompatibleModResult;
|
||||
/**
|
||||
*
|
||||
* @param modPool Pool of item Tpls to choose from
|
||||
* @param modSpawnType How should the slot choice be handled - forced/normal etc
|
||||
* @param weapon Weapon mods at current time
|
||||
* @param modSlotName Name of mod slot being filled
|
||||
* @returns IChooseRandomCompatibleModResult
|
||||
*/
|
||||
protected getCompatibleModFromPool(modPool: string[], modSpawnType: ModSpawn, weapon: IItem[]): IChooseRandomCompatibleModResult;
|
||||
protected createExhaustableArray<T>(itemsToAddToArray: T[]): ExhaustableArray<T>;
|
||||
/**
|
||||
* Get a list of mod tpls that are compatible with the current weapon
|
||||
* @param modPool
|
||||
* @param tplBlacklist Tpls that are incompatible and should not be used
|
||||
* @returns string array of compatible mod tpls with weapon
|
||||
*/
|
||||
protected getFilteredModPool(modPool: string[], tplBlacklist: Set<string>): string[];
|
||||
/**
|
||||
* Filter mod pool down based on various criteria:
|
||||
* Is slot flagged as randomisable
|
||||
* Is slot required
|
||||
* Is slot flagged as default mod only
|
||||
* @param request
|
||||
* @param weaponTemplate Mods root parent (weapon/equipment)
|
||||
* @returns Array of mod tpls
|
||||
*/
|
||||
protected getModPoolForSlot(request: IModToSpawnRequest, weaponTemplate: ITemplateItem): string[];
|
||||
protected getModPoolForDefaultSlot(request: IModToSpawnRequest, weaponTemplate: ITemplateItem): string[];
|
||||
protected getMatchingModFromPreset(request: IModToSpawnRequest, weaponTemplate: ITemplateItem): IItem;
|
||||
/**
|
||||
* Get default preset for weapon OR get specific weapon presets for edge cases (mp5/silenced dvl)
|
||||
* @param weaponTemplate Weapons db template
|
||||
* @param parentItemTpl Tpl of the parent item
|
||||
* @returns Default preset found
|
||||
*/
|
||||
protected getMatchingPreset(weaponTemplate: ITemplateItem, parentItemTpl: string): IPreset | undefined;
|
||||
/**
|
||||
* Temp fix to prevent certain combinations of weapons with mods that are known to be incompatible
|
||||
* @param weapon Array of items that make up a weapon
|
||||
* @param modTpl Mod to check compatibility with weapon
|
||||
* @returns True if incompatible
|
||||
*/
|
||||
protected weaponModComboIsIncompatible(weapon: IItem[], modTpl: string): boolean;
|
||||
/**
|
||||
* Create a mod item with provided parameters as properties + add upd property
|
||||
* @param modId _id
|
||||
* @param modTpl _tpl
|
||||
* @param parentId parentId
|
||||
* @param modSlot slotId
|
||||
* @param modTemplate Used to add additional properties in the upd object
|
||||
* @param botRole The bots role mod is being created for
|
||||
* @returns Item object
|
||||
*/
|
||||
protected createModItem(modId: string, modTpl: string, parentId: string, modSlot: string, modTemplate: ITemplateItem, botRole: string): IItem;
|
||||
/**
|
||||
* Get a list of containers that hold ammo
|
||||
* e.g. mod_magazine / patron_in_weapon_000
|
||||
* @returns string array
|
||||
*/
|
||||
protected getAmmoContainers(): string[];
|
||||
/**
|
||||
* Get a random mod from an items compatible mods Filter array
|
||||
* @param fallbackModTpl Default value to return if parentSlot Filter is empty
|
||||
* @param parentSlot Item mod will go into, used to get compatible items
|
||||
* @param modSlot Slot to get mod to fill
|
||||
* @param items Items to ensure picked mod is compatible with
|
||||
* @returns Item tpl
|
||||
*/
|
||||
protected getRandomModTplFromItemDb(fallbackModTpl: string, parentSlot: ISlot, modSlot: string, items: IItem[]): string | undefined;
|
||||
/**
|
||||
* Check if mod exists in db + is for a required slot
|
||||
* @param modToAdd Db template of mod to check
|
||||
* @param slotAddedToTemplate Slot object the item will be placed as child into
|
||||
* @param modSlot Slot the mod will fill
|
||||
* @param parentTemplate Db template of the mods being added
|
||||
* @param botRole Bots wildspawntype (assault/pmcBot/exUsec etc)
|
||||
* @returns True if valid for slot
|
||||
*/
|
||||
protected isModValidForSlot(modToAdd: [boolean, ITemplateItem], slotAddedToTemplate: ISlot, modSlot: string, parentTemplate: ITemplateItem, botRole: string): boolean;
|
||||
/**
|
||||
* Find mod tpls of a provided type and add to modPool
|
||||
* @param desiredSlotName Slot to look up and add we are adding tpls for (e.g mod_scope)
|
||||
* @param modTemplate db object for modItem we get compatible mods from
|
||||
* @param modPool Pool of mods we are adding to
|
||||
* @param botEquipBlacklist A blacklist of items that cannot be picked
|
||||
*/
|
||||
protected addCompatibleModsForProvidedMod(desiredSlotName: string, modTemplate: ITemplateItem, modPool: IMods, botEquipBlacklist: IEquipmentFilterDetails): void;
|
||||
/**
|
||||
* Get the possible items that fit a slot
|
||||
* @param parentItemId item tpl to get compatible items for
|
||||
* @param modSlot Slot item should fit in
|
||||
* @param botEquipBlacklist Equipment that should not be picked
|
||||
* @returns Array of compatible items for that slot
|
||||
*/
|
||||
protected getDynamicModPool(parentItemId: string, modSlot: string, botEquipBlacklist: IEquipmentFilterDetails): string[];
|
||||
/**
|
||||
* Take a list of tpls and filter out blacklisted values using itemFilterService + botEquipmentBlacklist
|
||||
* @param allowedMods Base mods to filter
|
||||
* @param botEquipBlacklist Equipment blacklist
|
||||
* @param modSlot Slot mods belong to
|
||||
* @returns Filtered array of mod tpls
|
||||
*/
|
||||
protected filterModsByBlacklist(allowedMods: string[], botEquipBlacklist: IEquipmentFilterDetails, modSlot: string): string[];
|
||||
/**
|
||||
* With the shotgun revolver (60db29ce99594040e04c4a27) 12.12 introduced CylinderMagazines.
|
||||
* Those magazines (e.g. 60dc519adf4c47305f6d410d) have a "Cartridges" entry with a _max_count=0.
|
||||
* Ammo is not put into the magazine directly but assigned to the magazine's slots: The "camora_xxx" slots.
|
||||
* This function is a helper called by generateModsForItem for mods with parent type "CylinderMagazine"
|
||||
* @param items The items where the CylinderMagazine's camora are appended to
|
||||
* @param modPool ModPool which should include available cartridges
|
||||
* @param cylinderMagParentId The CylinderMagazine's UID
|
||||
* @param cylinderMagTemplate The CylinderMagazine's template
|
||||
*/
|
||||
protected fillCamora(items: IItem[], modPool: IMods, cylinderMagParentId: string, cylinderMagTemplate: ITemplateItem): void;
|
||||
/**
|
||||
* Take a record of camoras and merge the compatible shells into one array
|
||||
* @param camorasWithShells Dictionary of camoras we want to merge into one array
|
||||
* @returns String array of shells for multiple camora sources
|
||||
*/
|
||||
protected mergeCamoraPools(camorasWithShells: Record<string, string[]>): string[];
|
||||
/**
|
||||
* Filter out non-whitelisted weapon scopes
|
||||
* Controlled by bot.json weaponSightWhitelist
|
||||
* e.g. filter out rifle scopes from SMGs
|
||||
* @param weapon Weapon scopes will be added to
|
||||
* @param scopes Full scope pool
|
||||
* @param botWeaponSightWhitelist Whitelist of scope types by weapon base type
|
||||
* @returns Array of scope tpls that have been filtered to just ones allowed for that weapon type
|
||||
*/
|
||||
protected filterSightsByWeaponType(weapon: IItem, scopes: string[], botWeaponSightWhitelist: Record<string, string[]>): string[];
|
||||
}
|
202
ServerMod/types/generators/BotGenerator.d.ts
vendored
Normal file
202
ServerMod/types/generators/BotGenerator.d.ts
vendored
Normal file
@ -0,0 +1,202 @@
|
||||
import { BotInventoryGenerator } from "@spt/generators/BotInventoryGenerator";
|
||||
import { BotLevelGenerator } from "@spt/generators/BotLevelGenerator";
|
||||
import { BotGeneratorHelper } from "@spt/helpers/BotGeneratorHelper";
|
||||
import { BotHelper } from "@spt/helpers/BotHelper";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
|
||||
import { MinMax } from "@spt/models/common/MinMax";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { IBaseJsonSkills, IBaseSkill, IBotBase, IInfo, IHealth as PmcHealth, ISkills as botSkills } from "@spt/models/eft/common/tables/IBotBase";
|
||||
import { IAppearance, IBodyPart, IBotType, IHealth, IInventory } from "@spt/models/eft/common/tables/IBotType";
|
||||
import { IBotGenerationDetails } from "@spt/models/spt/bots/BotGenerationDetails";
|
||||
import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
|
||||
import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { BotEquipmentFilterService } from "@spt/services/BotEquipmentFilterService";
|
||||
import { BotNameService } from "@spt/services/BotNameService";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { ItemFilterService } from "@spt/services/ItemFilterService";
|
||||
import { SeasonalEventService } from "@spt/services/SeasonalEventService";
|
||||
import { HashUtil } from "@spt/utils/HashUtil";
|
||||
import { RandomUtil } from "@spt/utils/RandomUtil";
|
||||
import { TimeUtil } from "@spt/utils/TimeUtil";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
export declare class BotGenerator {
|
||||
protected logger: ILogger;
|
||||
protected hashUtil: HashUtil;
|
||||
protected randomUtil: RandomUtil;
|
||||
protected timeUtil: TimeUtil;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected databaseService: DatabaseService;
|
||||
protected botInventoryGenerator: BotInventoryGenerator;
|
||||
protected botLevelGenerator: BotLevelGenerator;
|
||||
protected botEquipmentFilterService: BotEquipmentFilterService;
|
||||
protected weightedRandomHelper: WeightedRandomHelper;
|
||||
protected botHelper: BotHelper;
|
||||
protected botGeneratorHelper: BotGeneratorHelper;
|
||||
protected seasonalEventService: SeasonalEventService;
|
||||
protected itemFilterService: ItemFilterService;
|
||||
protected botNameService: BotNameService;
|
||||
protected configServer: ConfigServer;
|
||||
protected cloner: ICloner;
|
||||
protected botConfig: IBotConfig;
|
||||
protected pmcConfig: IPmcConfig;
|
||||
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, profileHelper: ProfileHelper, databaseService: DatabaseService, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botGeneratorHelper: BotGeneratorHelper, seasonalEventService: SeasonalEventService, itemFilterService: ItemFilterService, botNameService: BotNameService, configServer: ConfigServer, cloner: ICloner);
|
||||
/**
|
||||
* Generate a player scav bot object
|
||||
* @param role e.g. assault / pmcbot
|
||||
* @param difficulty easy/normal/hard/impossible
|
||||
* @param botTemplate base bot template to use (e.g. assault/pmcbot)
|
||||
* profile PMC profile of player generating pscav
|
||||
* @returns IBotBase
|
||||
*/
|
||||
generatePlayerScav(sessionId: string, role: string, difficulty: string, botTemplate: IBotType, profile: IPmcData): IBotBase;
|
||||
/**
|
||||
* Create 1 bot of the type/side/difficulty defined in botGenerationDetails
|
||||
* @param sessionId Session id
|
||||
* @param botGenerationDetails details on how to generate bots
|
||||
* @returns constructed bot
|
||||
*/
|
||||
prepareAndGenerateBot(sessionId: string, botGenerationDetails: IBotGenerationDetails): IBotBase;
|
||||
/**
|
||||
* Get a clone of the default bot base object and adjust its role/side/difficulty values
|
||||
* @param botRole Role bot should have
|
||||
* @param botSide Side bot should have
|
||||
* @param difficulty Difficult bot should have
|
||||
* @returns Cloned bot base
|
||||
*/
|
||||
protected getPreparedBotBase(botRole: string, botSide: string, difficulty: string): IBotBase;
|
||||
/**
|
||||
* Get a clone of the database\bots\base.json file
|
||||
* @returns IBotBase object
|
||||
*/
|
||||
protected getCloneOfBotBase(): IBotBase;
|
||||
/**
|
||||
* Create a IBotBase object with equipment/loot/exp etc
|
||||
* @param sessionId Session id
|
||||
* @param bot Bots base file
|
||||
* @param botJsonTemplate Bot template from db/bots/x.json
|
||||
* @param botGenerationDetails details on how to generate the bot
|
||||
* @returns IBotBase object
|
||||
*/
|
||||
protected generateBot(sessionId: string, bot: IBotBase, botJsonTemplate: IBotType, botGenerationDetails: IBotGenerationDetails): IBotBase;
|
||||
/**
|
||||
* Should this bot have a name like "name (Pmc Name)" and be alterd by client patch to be hostile to player
|
||||
* @param botRole Role bot has
|
||||
* @returns True if name should be simulated pscav
|
||||
*/
|
||||
protected shouldSimulatePlayerScav(botRole: string): boolean;
|
||||
/**
|
||||
* Get exp for kill by bot difficulty
|
||||
* @param experience Dict of difficulties and experience
|
||||
* @param botDifficulty the killed bots difficulty
|
||||
* @param role Role of bot (optional, used for error logging)
|
||||
* @returns Experience for kill
|
||||
*/
|
||||
protected getExperienceRewardForKillByDifficulty(experience: Record<string, MinMax>, botDifficulty: string, role: string): number;
|
||||
/**
|
||||
* Get the standing value change when player kills a bot
|
||||
* @param standingForKill Dictionary of standing values keyed by bot difficulty
|
||||
* @param botDifficulty Difficulty of bot to look up
|
||||
* @param role Role of bot (optional, used for error logging)
|
||||
* @returns Standing change value
|
||||
*/
|
||||
protected getStandingChangeForKillByDifficulty(standingForKill: Record<string, number>, botDifficulty: string, role: string): number;
|
||||
/**
|
||||
* Get the agressor bonus value when player kills a bot
|
||||
* @param standingForKill Dictionary of standing values keyed by bot difficulty
|
||||
* @param botDifficulty Difficulty of bot to look up
|
||||
* @param role Role of bot (optional, used for error logging)
|
||||
* @returns Standing change value
|
||||
*/
|
||||
protected getAgressorBonusByDifficulty(aggressorBonus: Record<string, number>, botDifficulty: string, role: string): number;
|
||||
/**
|
||||
* Set weighting of flagged equipment to 0
|
||||
* @param botJsonTemplate Bot data to adjust
|
||||
* @param botGenerationDetails Generation details of bot
|
||||
*/
|
||||
protected filterBlacklistedGear(botJsonTemplate: IBotType, botGenerationDetails: IBotGenerationDetails): void;
|
||||
protected addAdditionalPocketLootWeightsForUnheardBot(botJsonTemplate: IBotType): void;
|
||||
/**
|
||||
* Remove items from item.json/lootableItemBlacklist from bots inventory
|
||||
* @param botInventory Bot to filter
|
||||
*/
|
||||
protected removeBlacklistedLootFromBotTemplate(botInventory: IInventory): void;
|
||||
/**
|
||||
* Choose various appearance settings for a bot using weights: head/body/feet/hands
|
||||
* @param bot Bot to adjust
|
||||
* @param appearance Appearance settings to choose from
|
||||
* @param botGenerationDetails Generation details
|
||||
*/
|
||||
protected setBotAppearance(bot: IBotBase, appearance: IAppearance, botGenerationDetails: IBotGenerationDetails): void;
|
||||
/**
|
||||
* Log the number of PMCs generated to the debug console
|
||||
* @param output Generated bot array, ready to send to client
|
||||
*/
|
||||
protected logPmcGeneratedCount(output: IBotBase[]): void;
|
||||
/**
|
||||
* Converts health object to the required format
|
||||
* @param healthObj health object from bot json
|
||||
* @param playerScav Is a pscav bot being generated
|
||||
* @returns PmcHealth object
|
||||
*/
|
||||
protected generateHealth(healthObj: IHealth, playerScav?: boolean): PmcHealth;
|
||||
/**
|
||||
* Sum up body parts max hp values, return the bodypart collection with lowest value
|
||||
* @param bodies Body parts to sum up
|
||||
* @returns Lowest hp collection
|
||||
*/
|
||||
protected getLowestHpBody(bodies: IBodyPart[]): IBodyPart | undefined;
|
||||
/**
|
||||
* Get a bots skills with randomsied progress value between the min and max values
|
||||
* @param botSkills Skills that should have their progress value randomised
|
||||
* @returns
|
||||
*/
|
||||
protected generateSkills(botSkills: IBaseJsonSkills): botSkills;
|
||||
/**
|
||||
* Randomise the progress value of passed in skills based on the min/max value
|
||||
* @param skills Skills to randomise
|
||||
* @param isCommonSkills Are the skills 'common' skills
|
||||
* @returns Skills with randomised progress values as an array
|
||||
*/
|
||||
protected getSkillsWithRandomisedProgressValue(skills: Record<string, IBaseSkill>, isCommonSkills: boolean): IBaseSkill[];
|
||||
/**
|
||||
* Generate an id+aid for a bot and apply
|
||||
* @param bot bot to update
|
||||
* @returns updated IBotBase object
|
||||
*/
|
||||
protected addIdsToBot(bot: IBotBase): void;
|
||||
/**
|
||||
* Update a profiles profile.Inventory.equipment value with a freshly generated one
|
||||
* Update all inventory items that make use of this value too
|
||||
* @param profile Profile to update
|
||||
*/
|
||||
protected generateInventoryId(profile: IBotBase): void;
|
||||
/**
|
||||
* Randomise a bots game version and account category
|
||||
* Chooses from all the game versions (standard, eod etc)
|
||||
* Chooses account type (default, Sherpa, etc)
|
||||
* @param botInfo bot info object to update
|
||||
* @returns Chosen game version
|
||||
*/
|
||||
protected setRandomisedGameVersionAndCategory(botInfo: IInfo): string;
|
||||
/**
|
||||
* Add a side-specific (usec/bear) dogtag item to a bots inventory
|
||||
* @param bot bot to add dogtag to
|
||||
* @returns Bot with dogtag added
|
||||
*/
|
||||
protected addDogtagToBot(bot: IBotBase): void;
|
||||
/**
|
||||
* Get a dogtag tpl that matches the bots game version and side
|
||||
* @param side Usec/Bear
|
||||
* @param gameVersion edge_of_darkness / standard
|
||||
* @returns item tpl
|
||||
*/
|
||||
protected getDogtagTplByGameVersionAndSide(side: string, gameVersion: string): string;
|
||||
/**
|
||||
* Adjust a PMCs pocket tpl to UHD if necessary, otherwise do nothing
|
||||
* @param bot Pmc object to adjust
|
||||
*/
|
||||
protected setPmcPocketsByGameVersion(bot: IBotBase): void;
|
||||
}
|
136
ServerMod/types/generators/BotInventoryGenerator.d.ts
vendored
Normal file
136
ServerMod/types/generators/BotInventoryGenerator.d.ts
vendored
Normal file
@ -0,0 +1,136 @@
|
||||
import { ApplicationContext } from "@spt/context/ApplicationContext";
|
||||
import { BotEquipmentModGenerator } from "@spt/generators/BotEquipmentModGenerator";
|
||||
import { BotLootGenerator } from "@spt/generators/BotLootGenerator";
|
||||
import { BotWeaponGenerator } from "@spt/generators/BotWeaponGenerator";
|
||||
import { BotGeneratorHelper } from "@spt/helpers/BotGeneratorHelper";
|
||||
import { BotHelper } from "@spt/helpers/BotHelper";
|
||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||
import { WeatherHelper } from "@spt/helpers/WeatherHelper";
|
||||
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
|
||||
import { IInventory as PmcInventory } from "@spt/models/eft/common/tables/IBotBase";
|
||||
import { IBotType, IChances, IEquipment, IGeneration, IInventory } from "@spt/models/eft/common/tables/IBotType";
|
||||
import { IGetRaidConfigurationRequestData } from "@spt/models/eft/match/IGetRaidConfigurationRequestData";
|
||||
import { EquipmentSlots } from "@spt/models/enums/EquipmentSlots";
|
||||
import { IGenerateEquipmentProperties } from "@spt/models/spt/bots/IGenerateEquipmentProperties";
|
||||
import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { BotEquipmentFilterService } from "@spt/services/BotEquipmentFilterService";
|
||||
import { BotEquipmentModPoolService } from "@spt/services/BotEquipmentModPoolService";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { HashUtil } from "@spt/utils/HashUtil";
|
||||
import { RandomUtil } from "@spt/utils/RandomUtil";
|
||||
export declare class BotInventoryGenerator {
|
||||
protected logger: ILogger;
|
||||
protected hashUtil: HashUtil;
|
||||
protected randomUtil: RandomUtil;
|
||||
protected databaseService: DatabaseService;
|
||||
protected applicationContext: ApplicationContext;
|
||||
protected botWeaponGenerator: BotWeaponGenerator;
|
||||
protected botLootGenerator: BotLootGenerator;
|
||||
protected botGeneratorHelper: BotGeneratorHelper;
|
||||
protected profileHelper: ProfileHelper;
|
||||
protected botHelper: BotHelper;
|
||||
protected weightedRandomHelper: WeightedRandomHelper;
|
||||
protected itemHelper: ItemHelper;
|
||||
protected weatherHelper: WeatherHelper;
|
||||
protected localisationService: LocalisationService;
|
||||
protected botEquipmentFilterService: BotEquipmentFilterService;
|
||||
protected botEquipmentModPoolService: BotEquipmentModPoolService;
|
||||
protected botEquipmentModGenerator: BotEquipmentModGenerator;
|
||||
protected configServer: ConfigServer;
|
||||
protected botConfig: IBotConfig;
|
||||
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseService: DatabaseService, applicationContext: ApplicationContext, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, profileHelper: ProfileHelper, botHelper: BotHelper, weightedRandomHelper: WeightedRandomHelper, itemHelper: ItemHelper, weatherHelper: WeatherHelper, localisationService: LocalisationService, botEquipmentFilterService: BotEquipmentFilterService, botEquipmentModPoolService: BotEquipmentModPoolService, botEquipmentModGenerator: BotEquipmentModGenerator, configServer: ConfigServer);
|
||||
/**
|
||||
* Add equipment/weapons/loot to bot
|
||||
* @param sessionId Session id
|
||||
* @param botJsonTemplate Base json db file for the bot having its loot generated
|
||||
* @param botRole Role bot has (assault/pmcBot)
|
||||
* @param isPmc Is bot being converted into a pmc
|
||||
* @param botLevel Level of bot being generated
|
||||
* @param chosenGameVersion Game version for bot, only really applies for PMCs
|
||||
* @returns PmcInventory object with equipment/weapons/loot
|
||||
*/
|
||||
generateInventory(sessionId: string, botJsonTemplate: IBotType, botRole: string, isPmc: boolean, botLevel: number, chosenGameVersion: string): PmcInventory;
|
||||
/**
|
||||
* Create a pmcInventory object with all the base/generic items needed
|
||||
* @returns PmcInventory object
|
||||
*/
|
||||
protected generateInventoryBase(): PmcInventory;
|
||||
/**
|
||||
* Add equipment to a bot
|
||||
* @param sessionId Session id
|
||||
* @param templateInventory bot/x.json data from db
|
||||
* @param wornItemChances Chances items will be added to bot
|
||||
* @param botRole Role bot has (assault/pmcBot)
|
||||
* @param botInventory Inventory to add equipment to
|
||||
* @param botLevel Level of bot
|
||||
* @param chosenGameVersion Game version for bot, only really applies for PMCs
|
||||
*/
|
||||
protected generateAndAddEquipmentToBot(sessionId: string, templateInventory: IInventory, wornItemChances: IChances, botRole: string, botInventory: PmcInventory, botLevel: number, chosenGameVersion: string, raidConfig: IGetRaidConfigurationRequestData): void;
|
||||
/**
|
||||
* Remove non-armored rigs from parameter data
|
||||
* @param templateEquipment Equpiment to filter TacticalVest of
|
||||
* @param botRole Role of bot vests are being filtered for
|
||||
*/
|
||||
protected filterRigsToThoseWithProtection(templateEquipment: IEquipment, botRole: string): void;
|
||||
/**
|
||||
* Remove armored rigs from parameter data
|
||||
* @param templateEquipment Equpiment to filter TacticalVest of
|
||||
* @param botRole Role of bot vests are being filtered for
|
||||
* @param allowEmptyResult Should the function return all rigs when 0 unarmored are found
|
||||
*/
|
||||
protected filterRigsToThoseWithoutProtection(templateEquipment: IEquipment, botRole: string, allowEmptyResult?: boolean): void;
|
||||
/**
|
||||
* Add a piece of equipment with mods to inventory from the provided pools
|
||||
* @param sessionId Session id
|
||||
* @param settings Values to adjust how item is chosen and added to bot
|
||||
* @returns true when item added
|
||||
*/
|
||||
protected generateEquipment(settings: IGenerateEquipmentProperties): boolean;
|
||||
/**
|
||||
* Get all possible mods for item and filter down based on equipment blacklist from bot.json config
|
||||
* @param itemTpl Item mod pool is being retrieved and filtered
|
||||
* @param equipmentBlacklist Blacklist to filter mod pool with
|
||||
* @returns Filtered pool of mods
|
||||
*/
|
||||
protected getFilteredDynamicModsForItem(itemTpl: string, equipmentBlacklist: Record<string, string[]>): Record<string, string[]>;
|
||||
/**
|
||||
* Work out what weapons bot should have equipped and add them to bot inventory
|
||||
* @param templateInventory bot/x.json data from db
|
||||
* @param equipmentChances Chances bot can have equipment equipped
|
||||
* @param sessionId Session id
|
||||
* @param botInventory Inventory to add weapons to
|
||||
* @param botRole assault/pmcBot/bossTagilla etc
|
||||
* @param isPmc Is the bot being generated as a pmc
|
||||
* @param itemGenerationLimitsMinMax Limits for items the bot can have
|
||||
* @param botLevel level of bot having weapon generated
|
||||
*/
|
||||
protected generateAndAddWeaponsToBot(templateInventory: IInventory, equipmentChances: IChances, sessionId: string, botInventory: PmcInventory, botRole: string, isPmc: boolean, itemGenerationLimitsMinMax: IGeneration, botLevel: number): void;
|
||||
/**
|
||||
* Calculate if the bot should have weapons in Primary/Secondary/Holster slots
|
||||
* @param equipmentChances Chances bot has certain equipment
|
||||
* @returns What slots bot should have weapons generated for
|
||||
*/
|
||||
protected getDesiredWeaponsForBot(equipmentChances: IChances): {
|
||||
slot: EquipmentSlots;
|
||||
shouldSpawn: boolean;
|
||||
}[];
|
||||
/**
|
||||
* Add weapon + spare mags/ammo to bots inventory
|
||||
* @param sessionId Session id
|
||||
* @param weaponSlot Weapon slot being generated
|
||||
* @param templateInventory bot/x.json data from db
|
||||
* @param botInventory Inventory to add weapon+mags/ammo to
|
||||
* @param equipmentChances Chances bot can have equipment equipped
|
||||
* @param botRole assault/pmcBot/bossTagilla etc
|
||||
* @param isPmc Is the bot being generated as a pmc
|
||||
* @param itemGenerationWeights
|
||||
*/
|
||||
protected addWeaponAndMagazinesToInventory(sessionId: string, weaponSlot: {
|
||||
slot: EquipmentSlots;
|
||||
shouldSpawn: boolean;
|
||||
}, templateInventory: IInventory, botInventory: PmcInventory, equipmentChances: IChances, botRole: string, isPmc: boolean, itemGenerationWeights: IGeneration, botLevel: number): void;
|
||||
}
|
32
ServerMod/types/generators/BotLevelGenerator.d.ts
vendored
Normal file
32
ServerMod/types/generators/BotLevelGenerator.d.ts
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
import { MinMax } from "@spt/models/common/MinMax";
|
||||
import { IRandomisedBotLevelResult } from "@spt/models/eft/bot/IRandomisedBotLevelResult";
|
||||
import { IBotBase } from "@spt/models/eft/common/tables/IBotBase";
|
||||
import { IBotGenerationDetails } from "@spt/models/spt/bots/BotGenerationDetails";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { MathUtil } from "@spt/utils/MathUtil";
|
||||
import { RandomUtil } from "@spt/utils/RandomUtil";
|
||||
export declare class BotLevelGenerator {
|
||||
protected logger: ILogger;
|
||||
protected randomUtil: RandomUtil;
|
||||
protected databaseService: DatabaseService;
|
||||
protected mathUtil: MathUtil;
|
||||
constructor(logger: ILogger, randomUtil: RandomUtil, databaseService: DatabaseService, mathUtil: MathUtil);
|
||||
/**
|
||||
* Return a randomised bot level and exp value
|
||||
* @param levelDetails Min and max of level for bot
|
||||
* @param botGenerationDetails Details to help generate a bot
|
||||
* @param bot Bot the level is being generated for
|
||||
* @returns IRandomisedBotLevelResult object
|
||||
*/
|
||||
generateBotLevel(levelDetails: MinMax, botGenerationDetails: IBotGenerationDetails, bot: IBotBase): IRandomisedBotLevelResult;
|
||||
protected chooseBotLevel(min: number, max: number, shift: number, number: number): number;
|
||||
/**
|
||||
* Return the min and max bot level based on a relative delta from the PMC level
|
||||
* @param botGenerationDetails Details to help generate a bot
|
||||
* @param levelDetails
|
||||
* @param maxlevel Max level allowed
|
||||
* @returns A MinMax of the lowest and highest level to generate the bots
|
||||
*/
|
||||
protected getRelativeBotLevelRange(botGenerationDetails: IBotGenerationDetails, levelDetails: MinMax, maxAvailableLevel: number): MinMax;
|
||||
}
|
148
ServerMod/types/generators/BotLootGenerator.d.ts
vendored
Normal file
148
ServerMod/types/generators/BotLootGenerator.d.ts
vendored
Normal file
@ -0,0 +1,148 @@
|
||||
import { BotWeaponGenerator } from "@spt/generators/BotWeaponGenerator";
|
||||
import { BotGeneratorHelper } from "@spt/helpers/BotGeneratorHelper";
|
||||
import { BotHelper } from "@spt/helpers/BotHelper";
|
||||
import { HandbookHelper } from "@spt/helpers/HandbookHelper";
|
||||
import { InventoryHelper } from "@spt/helpers/InventoryHelper";
|
||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
|
||||
import { IInventory as PmcInventory } from "@spt/models/eft/common/tables/IBotBase";
|
||||
import { IBotType, IInventory, IModsChances } from "@spt/models/eft/common/tables/IBotType";
|
||||
import { IItem } from "@spt/models/eft/common/tables/IItem";
|
||||
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
|
||||
import { EquipmentSlots } from "@spt/models/enums/EquipmentSlots";
|
||||
import { IItemSpawnLimitSettings } from "@spt/models/spt/bots/IItemSpawnLimitSettings";
|
||||
import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
|
||||
import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { BotLootCacheService } from "@spt/services/BotLootCacheService";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { HashUtil } from "@spt/utils/HashUtil";
|
||||
import { RandomUtil } from "@spt/utils/RandomUtil";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
export declare class BotLootGenerator {
|
||||
protected logger: ILogger;
|
||||
protected hashUtil: HashUtil;
|
||||
protected randomUtil: RandomUtil;
|
||||
protected itemHelper: ItemHelper;
|
||||
protected inventoryHelper: InventoryHelper;
|
||||
protected databaseService: DatabaseService;
|
||||
protected handbookHelper: HandbookHelper;
|
||||
protected botGeneratorHelper: BotGeneratorHelper;
|
||||
protected botWeaponGenerator: BotWeaponGenerator;
|
||||
protected weightedRandomHelper: WeightedRandomHelper;
|
||||
protected botHelper: BotHelper;
|
||||
protected botLootCacheService: BotLootCacheService;
|
||||
protected localisationService: LocalisationService;
|
||||
protected configServer: ConfigServer;
|
||||
protected cloner: ICloner;
|
||||
protected botConfig: IBotConfig;
|
||||
protected pmcConfig: IPmcConfig;
|
||||
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, databaseService: DatabaseService, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botLootCacheService: BotLootCacheService, localisationService: LocalisationService, configServer: ConfigServer, cloner: ICloner);
|
||||
protected getItemSpawnLimitsForBot(botRole: string): IItemSpawnLimitSettings;
|
||||
/**
|
||||
* Add loot to bots containers
|
||||
* @param sessionId Session id
|
||||
* @param botJsonTemplate Base json db file for the bot having its loot generated
|
||||
* @param isPmc Will bot be a pmc
|
||||
* @param botRole Role of bot, e.g. asssult
|
||||
* @param botInventory Inventory to add loot to
|
||||
* @param botLevel Level of bot
|
||||
*/
|
||||
generateLoot(sessionId: string, botJsonTemplate: IBotType, isPmc: boolean, botRole: string, botInventory: PmcInventory, botLevel: number): void;
|
||||
/**
|
||||
* Gets the rouble cost total for loot in a bots backpack by the bots levl
|
||||
* Will return 0 for non PMCs
|
||||
* @param botLevel Bots level
|
||||
* @param isPmc Is the bot a PMC
|
||||
* @returns number
|
||||
*/
|
||||
protected getBackpackRoubleTotalByLevel(botLevel: number, isPmc: boolean): number;
|
||||
/**
|
||||
* Get an array of the containers a bot has on them (pockets/backpack/vest)
|
||||
* @param botInventory Bot to check
|
||||
* @returns Array of available slots
|
||||
*/
|
||||
protected getAvailableContainersBotCanStoreItemsIn(botInventory: PmcInventory): EquipmentSlots[];
|
||||
/**
|
||||
* Force healing items onto bot to ensure they can heal in-raid
|
||||
* @param botInventory Inventory to add items to
|
||||
* @param botRole Role of bot (pmcBEAR/pmcUSEC)
|
||||
*/
|
||||
protected addForcedMedicalItemsToPmcSecure(botInventory: PmcInventory, botRole: string): void;
|
||||
/**
|
||||
* Take random items from a pool and add to an inventory until totalItemCount or totalValueLimit or space limit is reached
|
||||
* @param pool Pool of items to pick from with weight
|
||||
* @param equipmentSlots What equipment slot will the loot items be added to
|
||||
* @param totalItemCount Max count of items to add
|
||||
* @param inventoryToAddItemsTo Bot inventory loot will be added to
|
||||
* @param botRole Role of the bot loot is being generated for (assault/pmcbot)
|
||||
* @param itemSpawnLimits Item spawn limits the bot must adhere to
|
||||
* @param totalValueLimitRub Total value of loot allowed in roubles
|
||||
* @param isPmc Is bot being generated for a pmc
|
||||
*/
|
||||
protected addLootFromPool(pool: Record<string, number>, equipmentSlots: string[], totalItemCount: number, inventoryToAddItemsTo: PmcInventory, botRole: string, itemSpawnLimits?: IItemSpawnLimitSettings, totalValueLimitRub?: number, isPmc?: boolean, containersIdFull?: Set<string>): void;
|
||||
protected createWalletLoot(walletId: string): IItem[][];
|
||||
/**
|
||||
* Some items need child items to function, add them to the itemToAddChildrenTo array
|
||||
* @param itemToAddTemplate Db template of item to check
|
||||
* @param itemToAddChildrenTo Item to add children to
|
||||
* @param isPmc Is the item being generated for a pmc (affects money/ammo stack sizes)
|
||||
* @param botRole role bot has that owns item
|
||||
*/
|
||||
protected addRequiredChildItemsToParent(itemToAddTemplate: ITemplateItem, itemToAddChildrenTo: IItem[], isPmc: boolean, botRole: string): void;
|
||||
/**
|
||||
* Add generated weapons to inventory as loot
|
||||
* @param botInventory inventory to add preset to
|
||||
* @param equipmentSlot slot to place the preset in (backpack)
|
||||
* @param templateInventory bots template, assault.json
|
||||
* @param modChances chances for mods to spawn on weapon
|
||||
* @param botRole bots role .e.g. pmcBot
|
||||
* @param isPmc are we generating for a pmc
|
||||
*/
|
||||
protected addLooseWeaponsToInventorySlot(sessionId: string, botInventory: PmcInventory, equipmentSlot: string, templateInventory: IInventory, modChances: IModsChances, botRole: string, isPmc: boolean, botLevel: number, containersIdFull?: Set<string>): void;
|
||||
/**
|
||||
* Hydrate item limit array to contain items that have a limit for a specific bot type
|
||||
* All values are set to 0
|
||||
* @param botRole Role the bot has
|
||||
* @param limitCount
|
||||
*/
|
||||
protected initItemLimitArray(botRole: string, limitCount: Record<string, number>): void;
|
||||
/**
|
||||
* Check if an item has reached its bot-specific spawn limit
|
||||
* @param itemTemplate Item we check to see if its reached spawn limit
|
||||
* @param botRole Bot type
|
||||
* @param itemSpawnLimits
|
||||
* @returns true if item has reached spawn limit
|
||||
*/
|
||||
protected itemHasReachedSpawnLimit(itemTemplate: ITemplateItem, botRole: string, itemSpawnLimits: IItemSpawnLimitSettings): boolean;
|
||||
/**
|
||||
* Randomise the stack size of a money object, uses different values for pmc or scavs
|
||||
* @param botRole Role bot has that has money stack
|
||||
* @param itemTemplate item details from db
|
||||
* @param moneyItem Money item to randomise
|
||||
*/
|
||||
protected randomiseMoneyStackSize(botRole: string, itemTemplate: ITemplateItem, moneyItem: IItem): void;
|
||||
/**
|
||||
* Randomise the size of an ammo stack
|
||||
* @param isPmc Is ammo on a PMC bot
|
||||
* @param itemTemplate item details from db
|
||||
* @param ammoItem Ammo item to randomise
|
||||
*/
|
||||
protected randomiseAmmoStackSize(isPmc: boolean, itemTemplate: ITemplateItem, ammoItem: IItem): void;
|
||||
/**
|
||||
* Get spawn limits for a specific bot type from bot.json config
|
||||
* If no limit found for a non pmc bot, fall back to defaults
|
||||
* @param botRole what role does the bot have
|
||||
* @returns Dictionary of tplIds and limit
|
||||
*/
|
||||
protected getItemSpawnLimitsForBotType(botRole: string): Record<string, number>;
|
||||
/**
|
||||
* Get the parentId or tplId of item inside spawnLimits object if it exists
|
||||
* @param itemTemplate item we want to look for in spawn limits
|
||||
* @param spawnLimits Limits to check for item
|
||||
* @returns id as string, otherwise undefined
|
||||
*/
|
||||
protected getMatchingIdFromSpawnLimits(itemTemplate: ITemplateItem, spawnLimits: Record<string, number>): string;
|
||||
}
|
190
ServerMod/types/generators/BotWeaponGenerator.d.ts
vendored
Normal file
190
ServerMod/types/generators/BotWeaponGenerator.d.ts
vendored
Normal file
@ -0,0 +1,190 @@
|
||||
import { BotEquipmentModGenerator } from "@spt/generators/BotEquipmentModGenerator";
|
||||
import { IInventoryMagGen } from "@spt/generators/weapongen/IInventoryMagGen";
|
||||
import { BotGeneratorHelper } from "@spt/helpers/BotGeneratorHelper";
|
||||
import { BotWeaponGeneratorHelper } from "@spt/helpers/BotWeaponGeneratorHelper";
|
||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
|
||||
import { IInventory as PmcInventory } from "@spt/models/eft/common/tables/IBotBase";
|
||||
import { IGenerationData, IInventory, IModsChances } from "@spt/models/eft/common/tables/IBotType";
|
||||
import { IItem } from "@spt/models/eft/common/tables/IItem";
|
||||
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
|
||||
import { IGenerateWeaponResult } from "@spt/models/spt/bots/IGenerateWeaponResult";
|
||||
import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
|
||||
import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig";
|
||||
import { IRepairConfig } from "@spt/models/spt/config/IRepairConfig";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||
import { BotWeaponModLimitService } from "@spt/services/BotWeaponModLimitService";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { RepairService } from "@spt/services/RepairService";
|
||||
import { HashUtil } from "@spt/utils/HashUtil";
|
||||
import { RandomUtil } from "@spt/utils/RandomUtil";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
export declare class BotWeaponGenerator {
|
||||
protected logger: ILogger;
|
||||
protected hashUtil: HashUtil;
|
||||
protected databaseService: DatabaseService;
|
||||
protected itemHelper: ItemHelper;
|
||||
protected weightedRandomHelper: WeightedRandomHelper;
|
||||
protected botGeneratorHelper: BotGeneratorHelper;
|
||||
protected randomUtil: RandomUtil;
|
||||
protected configServer: ConfigServer;
|
||||
protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper;
|
||||
protected botWeaponModLimitService: BotWeaponModLimitService;
|
||||
protected botEquipmentModGenerator: BotEquipmentModGenerator;
|
||||
protected localisationService: LocalisationService;
|
||||
protected repairService: RepairService;
|
||||
protected inventoryMagGenComponents: IInventoryMagGen[];
|
||||
protected cloner: ICloner;
|
||||
protected readonly modMagazineSlotId = "mod_magazine";
|
||||
protected botConfig: IBotConfig;
|
||||
protected pmcConfig: IPmcConfig;
|
||||
protected repairConfig: IRepairConfig;
|
||||
constructor(logger: ILogger, hashUtil: HashUtil, databaseService: DatabaseService, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil, configServer: ConfigServer, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botWeaponModLimitService: BotWeaponModLimitService, botEquipmentModGenerator: BotEquipmentModGenerator, localisationService: LocalisationService, repairService: RepairService, inventoryMagGenComponents: IInventoryMagGen[], cloner: ICloner);
|
||||
/**
|
||||
* Pick a random weapon based on weightings and generate a functional weapon
|
||||
* @param equipmentSlot Primary/secondary/holster
|
||||
* @param botTemplateInventory e.g. assault.json
|
||||
* @param weaponParentId
|
||||
* @param modChances
|
||||
* @param botRole role of bot, e.g. assault/followerBully
|
||||
* @param isPmc Is weapon generated for a pmc
|
||||
* @returns GenerateWeaponResult object
|
||||
*/
|
||||
generateRandomWeapon(sessionId: string, equipmentSlot: string, botTemplateInventory: IInventory, weaponParentId: string, modChances: IModsChances, botRole: string, isPmc: boolean, botLevel: number): IGenerateWeaponResult;
|
||||
/**
|
||||
* Get a random weighted weapon from a bots pool of weapons
|
||||
* @param equipmentSlot Primary/secondary/holster
|
||||
* @param botTemplateInventory e.g. assault.json
|
||||
* @returns weapon tpl
|
||||
*/
|
||||
pickWeightedWeaponTplFromPool(equipmentSlot: string, botTemplateInventory: IInventory): string;
|
||||
/**
|
||||
* Generated a weapon based on the supplied weapon tpl
|
||||
* @param weaponTpl Weapon tpl to generate (use pickWeightedWeaponTplFromPool())
|
||||
* @param slotName Slot to fit into, primary/secondary/holster
|
||||
* @param botTemplateInventory e.g. assault.json
|
||||
* @param weaponParentId ParentId of the weapon being generated
|
||||
* @param modChances Dictionary of item types and % chance weapon will have that mod
|
||||
* @param botRole e.g. assault/exusec
|
||||
* @param isPmc Is weapon being generated for a pmc
|
||||
* @returns GenerateWeaponResult object
|
||||
*/
|
||||
generateWeaponByTpl(sessionId: string, weaponTpl: string, slotName: string, botTemplateInventory: IInventory, weaponParentId: string, modChances: IModsChances, botRole: string, isPmc: boolean, botLevel: number): IGenerateWeaponResult;
|
||||
/**
|
||||
* Insert a cartridge(s) into a weapon
|
||||
* Handles all chambers - patron_in_weapon, patron_in_weapon_000 etc
|
||||
* @param weaponWithModsArray Weapon and mods
|
||||
* @param ammoTpl Cartridge to add to weapon
|
||||
* @param chamberSlotIds name of slots to create or add ammo to
|
||||
*/
|
||||
protected addCartridgeToChamber(weaponWithModsArray: IItem[], ammoTpl: string, chamberSlotIds: string[]): void;
|
||||
/**
|
||||
* Create array with weapon base as only element and
|
||||
* add additional properties based on weapon type
|
||||
* @param weaponTpl Weapon tpl to create item with
|
||||
* @param weaponParentId Weapons parent id
|
||||
* @param equipmentSlot e.g. primary/secondary/holster
|
||||
* @param weaponItemTemplate db template for weapon
|
||||
* @param botRole for durability values
|
||||
* @returns Base weapon item in array
|
||||
*/
|
||||
protected constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): IItem[];
|
||||
/**
|
||||
* 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 Value used for the parentid
|
||||
* @returns array of weapon mods
|
||||
*/
|
||||
protected getPresetWeaponMods(weaponTpl: string, equipmentSlot: string, weaponParentId: string, itemTemplate: ITemplateItem, botRole: string): IItem[];
|
||||
/**
|
||||
* Checks if all required slots are occupied on a weapon and all it's mods
|
||||
* @param weaponItemArray Weapon + mods
|
||||
* @param botRole role of bot weapon is for
|
||||
* @returns true if valid
|
||||
*/
|
||||
protected isWeaponValid(weaponItemArray: IItem[], botRole: string): boolean;
|
||||
/**
|
||||
* Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets.
|
||||
* Additionally, adds extra bullets to SecuredContainer
|
||||
* @param generatedWeaponResult object with properties for generated weapon (weapon mods pool / weapon template / ammo tpl)
|
||||
* @param magWeights Magazine weights for count to add to inventory
|
||||
* @param inventory Inventory to add magazines to
|
||||
* @param botRole The bot type we're getting generating extra mags for
|
||||
*/
|
||||
addExtraMagazinesToInventory(generatedWeaponResult: IGenerateWeaponResult, magWeights: IGenerationData, inventory: PmcInventory, botRole: string): void;
|
||||
/**
|
||||
* Add Grendaes for UBGL to bots vest and secure container
|
||||
* @param weaponMods Weapon array with mods
|
||||
* @param generatedWeaponResult result of weapon generation
|
||||
* @param inventory bot inventory to add grenades to
|
||||
*/
|
||||
protected addUbglGrenadesToBotInventory(weaponMods: IItem[], generatedWeaponResult: IGenerateWeaponResult, inventory: PmcInventory): void;
|
||||
/**
|
||||
* 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
|
||||
* @param botRole the bot type we are getting the magazine for
|
||||
* @returns magazine tpl string
|
||||
*/
|
||||
protected getMagazineTplFromWeaponTemplate(weaponMods: IItem[], weaponTemplate: ITemplateItem, botRole: string): string;
|
||||
/**
|
||||
* Finds and return a compatible ammo tpl based on the bots ammo weightings (x.json/inventory/equipment/ammo)
|
||||
* @param cartridgePool Dict of all cartridges keyed by type e.g. Caliber556x45NATO
|
||||
* @param weaponTemplate Weapon details from db we want to pick ammo for
|
||||
* @returns Ammo tpl that works with the desired gun
|
||||
*/
|
||||
protected getWeightedCompatibleAmmo(cartridgePool: Record<string, Record<string, number>>, weaponTemplate: ITemplateItem): string;
|
||||
/**
|
||||
* Get the cartridge ids from a weapon template that work with the weapon
|
||||
* @param weaponTemplate Weapon db template to get cartridges for
|
||||
* @returns Array of cartridge tpls
|
||||
*/
|
||||
protected getCompatibleCartridgesFromWeaponTemplate(weaponTemplate: ITemplateItem): string[];
|
||||
/**
|
||||
* Get a weapons compatible cartridge caliber
|
||||
* @param weaponTemplate Weapon to look up caliber of
|
||||
* @returns caliber as string
|
||||
*/
|
||||
protected getWeaponCaliber(weaponTemplate: ITemplateItem): string;
|
||||
/**
|
||||
* Fill existing magazines to full, while replacing their contents with specified ammo
|
||||
* @param weaponMods Weapon with children
|
||||
* @param magazine Magazine item
|
||||
* @param cartridgeTpl Cartridge to insert into magazine
|
||||
*/
|
||||
protected fillExistingMagazines(weaponMods: IItem[], magazine: IItem, cartridgeTpl: string): void;
|
||||
/**
|
||||
* Add desired ammo tpl as item to weaponmods array, placed as child to UBGL
|
||||
* @param weaponMods Weapon with children
|
||||
* @param ubglMod UBGL item
|
||||
* @param ubglAmmoTpl Grenade ammo tpl
|
||||
*/
|
||||
protected fillUbgl(weaponMods: IItem[], ubglMod: IItem, ubglAmmoTpl: string): void;
|
||||
/**
|
||||
* Add cartridge item to weapon Item array, if it already exists, update
|
||||
* @param weaponWithMods Weapon items array to amend
|
||||
* @param magazine magazine item details we're adding cartridges to
|
||||
* @param chosenAmmoTpl cartridge to put into the magazine
|
||||
* @param newStackSize how many cartridges should go into the magazine
|
||||
* @param magazineTemplate magazines db template
|
||||
*/
|
||||
protected addOrUpdateMagazinesChildWithAmmo(weaponWithMods: IItem[], magazine: IItem, chosenAmmoTpl: string, magazineTemplate: ITemplateItem): 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: IItem[], magazineId: string, ammoTpl: string): void;
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user