Added RPG-7 & Peacemaker Mods

This commit is contained in:
2025-01-11 04:49:47 -05:00
parent 4be51035f2
commit e1905a5613
41 changed files with 2714 additions and 0 deletions
+28
View File
@@ -0,0 +1,28 @@
[General]
gameName=spt
modid=0
version=d2025.1.11.0
newestVersion=
category="1,"
nexusFileStatus=1
installationFile=choccy-saa-1.0.7.zip
repository=Nexus
ignoredVersion=
comments=
notes=
nexusDescription=
url=
hasCustomURL=true
lastNexusQuery=
lastNexusUpdate=
nexusLastModified=2025-01-11T09:13:21Z
nexusCategory=0
converted=false
validated=false
color=@Variant(\0\0\0\x43\0\xff\xff\0\0\0\0\0\0\0\0)
tracked=0
[installedFiles]
1\modid=0
1\fileid=0
size=1
@@ -0,0 +1,75 @@
{
"manifest": [
{
"key": "assets/weapons/colt_saa/patron_1143x33mmr_lead.bundle",
"dependencyKeys": [
"shaders",
"cubemaps"
]
},
{
"key": "assets/weapons/colt_saa/weapon_colt_single_action_army_container.bundle",
"dependencyKeys": [
"assets/content/weapons/additional_hands/client_assets.bundle",
"assets/content/weapons/wip/kibas tuning prefabs/muzzlejets_templates/default_assets.bundle",
"assets/systems/effects/heathaze/defaultheathaze.bundle",
"assets/systems/effects/muzzleflash/muzzleflash.bundle",
"assets/systems/effects/smoke.bundle",
"assets/weapons/colt_saa/main_store.bundle",
"assets/weapons/colt_saa/saa_bank.bundle",
"assets/content/audio/weapons/generic"
]
},
{
"key": "assets/weapons/colt_saa/weapon_colt_single_action_army_container_debugging.bundle",
"dependencyKeys": [
"assets/content/weapons/additional_hands/client_assets.bundle",
"assets/content/weapons/wip/kibas tuning prefabs/muzzlejets_templates/default_assets.bundle",
"assets/systems/effects/heathaze/defaultheathaze.bundle",
"assets/systems/effects/muzzleflash/muzzleflash.bundle",
"assets/systems/effects/smoke.bundle",
"assets/weapons/colt_saa/main_store.bundle",
"assets/weapons/colt_saa/saa_bank.bundle",
"assets/content/audio/weapons/generic"
]
},
{
"key": "assets/weapons/colt_saa/weapon_colt_single_action_army_container_debugging_alt.bundle",
"dependencyKeys": [
"assets/content/weapons/additional_hands/client_assets.bundle",
"assets/content/weapons/wip/kibas tuning prefabs/muzzlejets_templates/default_assets.bundle",
"assets/systems/effects/heathaze/defaultheathaze.bundle",
"assets/systems/effects/muzzleflash/muzzleflash.bundle",
"assets/systems/effects/smoke.bundle",
"assets/weapons/colt_saa/main_store.bundle",
"assets/weapons/colt_saa/saa_bank.bundle",
"assets/content/audio/weapons/generic"
]
},
{
"key": "assets/weapons/colt_saa/main_store.bundle",
"dependencyKeys": [
"shaders",
"cubemaps",
"assets/weapons/colt_saa/texture.bundle"
]
},
{
"key": "assets/weapons/colt_saa/texture.bundle",
"dependencyKeys": [
]
},
{
"key": "assets/weapons/colt_saa/mod_magazine_colt_army_cylinder.bundle",
"dependencyKeys": [
"assets/weapons/colt_saa/main_store.bundle"
]
},
{
"key": "assets/weapons/colt_saa/saa_bank.bundle",
"dependencyKeys": [
]
}
]
}
@@ -0,0 +1,4 @@
{
"Debug_Mode": false,
"altdebug": false
}
@@ -0,0 +1,26 @@
{
"name": "SAA",
"version": "1.0.7",
"main": "src/mod.js",
"license": "CC-BY 3.0",
"author": "Choccy",
"isBundleMod": true,
"sptVersion": "~3.10",
"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"
}
}
@@ -0,0 +1,72 @@
#!/usr/bin/env node
// This is a simple script used to build a mod package. The script will copy necessary files to the build directory
// and compress the build directory into a zip file that can be easily shared.
const fs = require("fs-extra");
const glob = require("glob");
const zip = require('bestzip');
const path = require("path");
// Load the package.json file to get some information about the package so we can name things appropriately. This is
// atypical, and you would never do this in a production environment, but this script is only used for development so
// it's fine in this case. Some of these values are stored in environment variables, but those differ between node
// versions; the 'author' value is not available after node v14.
const { author, name:packageName, version } = require("./package.json");
// Generate the name of the package, stripping out all non-alphanumeric characters in the 'author' and 'name'.
const modName = `${author.replace(/[^a-z0-9]/gi, "")}-${packageName.replace(/[^a-z0-9]/gi, "")}-${version}`;
console.log(`Generated package name: ${modName}`);
// Delete the old build directory and compressed package file.
fs.rmSync(`${__dirname}/dist`, { force: true, recursive: true });
console.log("Previous build files deleted.");
// Generate a list of files that should not be copied over into the distribution directory. This is a blacklist to ensure
// we always copy over additional files and directories that authors may have added to their project. This may need to be
// expanded upon by the mod author to allow for node modules that are used within the mod; example commented out below.
const ignoreList = [
"node_modules/",
// "node_modules/!(weighted|glob)", // Instead of excluding the entire node_modules directory, allow two node modules.
"src/**/*.js",
"types/",
".git/",
".gitea/",
".eslintignore",
".eslintrc.json",
".gitignore",
".DS_Store",
"packageBuild.ts",
"mod.code-workspace",
"package-lock.json",
"tsconfig.json"
];
const exclude = glob.sync(`{${ignoreList.join(",")}}`, { realpath: true, dot: true });
// For some reason these basic-bitch functions won't allow us to copy a directory into itself, so we have to resort to
// using a temporary directory, like an idiot. Excuse the normalize spam; some modules cross-platform, some don't...
fs.copySync(__dirname, path.normalize(`${__dirname}/../~${modName}`), {filter:(filePath) =>
{
return !exclude.includes(filePath);
}});
fs.moveSync(path.normalize(`${__dirname}/../~${modName}`), path.normalize(`${__dirname}/${modName}`), { overwrite: true });
fs.copySync(path.normalize(`${__dirname}/${modName}`), path.normalize(`${__dirname}/dist`));
console.log("Build files copied.");
// Compress the files for easy distribution. The compressed file is saved into the dist directory. When uncompressed we
// need to be sure that it includes a directory that the user can easily copy into their game mods directory.
zip({
source: modName,
destination: `dist/${modName}.zip`,
cwd: __dirname
}).catch(function(err)
{
console.error("A bestzip error has occurred: ", err.stack);
}).then(function()
{
console.log(`Compressed mod package to: /dist/${modName}.zip`);
// Now that we're done with the compression we can delete the temporary build directory.
fs.rmSync(`${__dirname}/${modName}`, { force: true, recursive: true });
console.log("Build successful! your zip file has been created and is ready to be uploaded to hub.sp-tarkov.com/files/");
});
@@ -0,0 +1,82 @@
{
"items": [
{
"_id": "6651564f6b50749c3c503af5",
"_tpl": "665152810b4c784f2258d7d0",
"parentId": "hideout",
"slotId": "hideout",
"upd": {
"UnlimitedCount": true,
"StackObjectsCount": 2375,
"FireMode": {
"FireMode": "single"
}
}
},
{
"_id": "65f6e6c2fab2670ee1dd550f",
"_tpl": "665154c4019e9e7d5ad6d0cc",
"parentId": "6651564f6b50749c3c503af5",
"slotId": "mod_magazine"
},
{
"_id": "66515659559711f98644d702",
"_tpl": "665154c4019e9e7d5ad6d0cc",
"parentId": "hideout",
"slotId": "hideout",
"upd": {
"UnlimitedCount": true,
"StackObjectsCount": 5732
}
},
{
"_id": "66515661ac3ab013c5a5308c",
"_tpl": "65f3e7fa6d952338bde17f8a",
"parentId": "hideout",
"slotId": "hideout",
"upd": {
"UnlimitedCount": true,
"StackObjectsCount": 5732
}
}
],
"barter_scheme": {
"6651564f6b50749c3c503af5": [
[
{
"_tpl": "5e54f62086f774219b0f1937",
"count": 1
},
{
"_tpl": "5bc9bdb8d4351e003562b8a1",
"count": 1
},
{
"_tpl": "5bc9b355d4351e6d1509862a",
"count": 1
}
]
],
"66515659559711f98644d702": [
[
{
"_tpl": "5449016a4bdc2d6f028b456f",
"count": 21554
}
]
],
"66515661ac3ab013c5a5308c": [
[
{
"_tpl": "5449016a4bdc2d6f028b456f",
"count": 2875
}
]
]
},
"loyal_level_items":{
"6651564f6b50749c3c503af5": 3,
"66515659559711f98644d702": 3,
"66515661ac3ab013c5a5308c": 3
}
}
@@ -0,0 +1,29 @@
{
"ItemPresets": {
"65f3e931ac7e6374d1edae28": {
"_changeWeaponName": false,
"_encyclopedia": "665152810b4c784f2258d7d0",
"_id": "65f3e931ac7e6374d1edae28",
"_items": [
{
"_id": "65f3e93d2054f73e342c8c7e",
"_tpl": "665152810b4c784f2258d7d0",
"upd": {
"FireMode": {
"FireMode": "single"
}
}
},
{
"_id": "65f3e96e4069bbc8d4d79f8e",
"_tpl": "665154c4019e9e7d5ad6d0cc",
"parentId": "65f3e93d2054f73e342c8c7e",
"slotId": "mod_magazine"
}
],
"_name": "Peacemaker Stock",
"_parent": "65f3e93d2054f73e342c8c7e",
"_type": "Preset"
}
}
}
@@ -0,0 +1,319 @@
{
"spawnsRezerv": [
{
"locationId": "(78.797 2.4313 -13.9751|37.4873 226.9819 316.1582)",
"probability": 0.345273,
"template": {
"Id": "6651567375381abb786f3a5b",
"IsContainer": false,
"useGravity": true,
"randomRotation": false,
"Position": {
"x": 78.797,
"y": 2.4313,
"z": -13.9751
},
"Rotation": {
"x": 37.4873,
"y": 226.9819,
"z": 316.1582
},
"IsGroupPosition": false,
"GroupPositions": [],
"IsAlwaysSpawn": false,
"Root": "6651567738f38ab0f6c52bc2",
"Items": [
{
"_id": "6651567ed962a5b792248fa6",
"_tpl": "665152810b4c784f2258d7d0"
},
{
"_id": "665156862404d5899b738021",
"_tpl": "665154c4019e9e7d5ad6d0cc",
"parentId": "6651567ed962a5b792248fa6",
"slotId": "mod_magazine"
}
]
},
"itemDistribution": [
{
"composedKey": {
"key": "6651567ed962a5b792248fa6"
},
"relativeProbability": 8
}
]
},
{
"locationId": "(11.5916 -0.7892 4.6904|353.6969 48.8262 41.7712)",
"probability": 0.044532,
"template": {
"Id": "66515689253af484c5f1303a",
"IsContainer": false,
"useGravity": true,
"randomRotation": false,
"Position": {
"x": 11.5916,
"y": -0.7892,
"z": 4.6904
},
"Rotation": {
"x": 353.6969,
"y": 48.8262,
"z": 41.7712
},
"IsGroupPosition": false,
"GroupPositions": [],
"IsAlwaysSpawn": false,
"Root": "6651568ca4b26f481f19cda6",
"Items": [
{
"_id": "66515693328c890700469175",
"_tpl": "665152810b4c784f2258d7d0"
},
{
"_id": "665156918928bd149c60e827",
"_tpl": "665154c4019e9e7d5ad6d0cc",
"parentId": "66515693328c890700469175",
"slotId": "mod_magazine"
}
]
},
"itemDistribution": [
{
"composedKey": {
"key": "66515693328c890700469175"
},
"relativeProbability": 8
}
]
},
{
"locationId": "(-57.1463 2.6746 20.5125|332.6287 14.0353 93.8348)",
"probability": 0.007432,
"template": {
"Id": "6651569a10759cb0de48342f",
"IsContainer": false,
"useGravity": true,
"randomRotation": false,
"Position": {
"x": -57.1463,
"y": 2.6746,
"z": 20.5125
},
"Rotation": {
"x": 332.6287,
"y": 14.0353,
"z": 93.8348
},
"IsGroupPosition": false,
"GroupPositions": [],
"IsAlwaysSpawn": false,
"Root": "6651569d1466068c6cf8b2b2",
"Items": [
{
"_id": "665156a3b260a8bf5125a4b7",
"_tpl": "665152810b4c784f2258d7d0"
},
{
"_id": "665156a05ac9ddcd5afa52d2",
"_tpl": "665154c4019e9e7d5ad6d0cc",
"parentId": "665156a3b260a8bf5125a4b7",
"slotId": "mod_magazine"
}
]
},
"itemDistribution": [
{
"composedKey": {
"key": "665156a3b260a8bf5125a4b7"
},
"relativeProbability": 8
}
]
},
{
"locationId": "(-40.0311 19.3493 182.6263|359.9928 29.7891 272.4274)",
"probability": 0.115632,
"template": {
"Id": "665156b386eb1fb0aa4423d8",
"IsContainer": false,
"useGravity": true,
"randomRotation": false,
"Position": {
"x": -40.0311,
"y": 19.3493,
"z": 182.6263
},
"Rotation": {
"x": 359.9928,
"y": 29.7891,
"z": 272.4274
},
"IsGroupPosition": false,
"GroupPositions": [],
"IsAlwaysSpawn": false,
"Root": "665156b6e05850fe3e39d38e",
"Items": [
{
"_id": "665156bcf71631770429e3ad",
"_tpl": "665152810b4c784f2258d7d0"
},
{
"_id": "665156b953844543601b15ca",
"_tpl": "665154c4019e9e7d5ad6d0cc",
"parentId": "665156bcf71631770429e3ad",
"slotId": "mod_magazine"
}
]
},
"itemDistribution": [
{
"composedKey": {
"key": "665156bcf71631770429e3ad"
},
"relativeProbability": 8
}
]
}
],
"spawnsWoods":[
{
"locationId": "(54.0311 -1.9997 -47.0143|1.7769 44.5448 93.2316)",
"probability": 0.15673,
"template": {
"Id": "665156c6e89a63667409ae9b",
"IsContainer": false,
"useGravity": true,
"randomRotation": false,
"Position": {
"x": 54.0311,
"y": -1.9997,
"z": -47.0143
},
"Rotation": {
"x": 1.7769,
"y": 44.5448,
"z": 93.2316
},
"IsGroupPosition": false,
"GroupPositions": [],
"IsAlwaysSpawn": false,
"Root": "665156ca4aeb42ea90e12402",
"Items": [
{
"_id": "665156d18439fd78ee89f7fa",
"_tpl": "665152810b4c784f2258d7d0"
},
{
"_id": "665156cdfbc726f414d55e81",
"_tpl": "665154c4019e9e7d5ad6d0cc",
"parentId": "665156d18439fd78ee89f7fa",
"slotId": "mod_magazine"
}
]
},
"itemDistribution": [
{
"composedKey": {
"key": "665156d18439fd78ee89f7fa"
},
"relativeProbability": 8
}
]
},
{
"locationId": "(-203.8976 -1.006 217.1824|359.8936 156.5553 49.0165)",
"probability": 0.24673,
"template": {
"Id": "665156d66283b8245a51ee10",
"IsContainer": false,
"useGravity": true,
"randomRotation": false,
"Position": {
"x": -203.8976,
"y": -1.006,
"z": 217.1824
},
"Rotation": {
"x": 359.8936,
"y": 156.5553,
"z": 49.0165
},
"IsGroupPosition": false,
"GroupPositions": [],
"IsAlwaysSpawn": false,
"Root": "665156d92118013ac5fc6364",
"Items": [
{
"_id": "665156e00c98d72dd4cde0f9",
"_tpl": "665152810b4c784f2258d7d0"
},
{
"_id": "665156ddb836ed40339d2688",
"_tpl": "665154c4019e9e7d5ad6d0cc",
"parentId": "665156e00c98d72dd4cde0f9",
"slotId": "mod_magazine"
}
]
},
"itemDistribution": [
{
"composedKey": {
"key": "665156e00c98d72dd4cde0f9"
},
"relativeProbability": 8
}
]
}
],
"spawnsFactory": [
{
"locationId": "(25.5145 8.6044 40.7727|0.1531 106.4753 158.1044)",
"probability": 0.07643,
"template": {
"Id": "665156e757dec8b8d7dd5f0b",
"IsContainer": false,
"useGravity": true,
"randomRotation": false,
"Position": {
"x": 25.5145,
"y": 8.6044,
"z": 40.7727
},
"Rotation": {
"x": 0.1531,
"y": 106.4753,
"z": 158.1044
},
"IsGroupPosition": false,
"GroupPositions": [],
"IsAlwaysSpawn": false,
"Root": "665156eac2285ec483385e8d",
"Items": [
{
"_id": "665156ef5ddfea15aa6e1b1b",
"_tpl": "665152810b4c784f2258d7d0"
},
{
"_id": "665156edbf39d6a24be36ec7",
"_tpl": "665154c4019e9e7d5ad6d0cc",
"parentId": "665156ef5ddfea15aa6e1b1b",
"slotId": "mod_magazine"
}
]
},
"itemDistribution": [
{
"composedKey": {
"key": "665156ef5ddfea15aa6e1b1b"
},
"relativeProbability": 4
}
]
}
],
"spawnsLight": [],
"spawnsShore": [],
"spawnsCustom": []
}
@@ -0,0 +1,452 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.mod = exports.WeaponIds = void 0;
const Item_Preset_json_1 = __importDefault(require("../src/Item_Preset.json"));
const global_item_preset_json_1 = __importDefault(require("../src/global_item_preset.json"));
const config_json_1 = __importDefault(require("../config/config.json"));
const Spawns_json_1 = __importDefault(require("../src/loot/Spawns.json"));
const ItemTpl_1 = require("C:/snapshot/project/obj/models/enums/ItemTpl");
const Traders_1 = require("C:/snapshot/project/obj/models/enums/Traders");
var WeaponIds;
(function (WeaponIds) {
WeaponIds["COLT_PEACEMAKER"] = "665152810b4c784f2258d7d0";
})(WeaponIds || (exports.WeaponIds = WeaponIds = {}));
class Mod {
postDBLoad(container) {
const customitem = container.resolve("CustomItemService");
const databaseServer = container.resolve("DatabaseServer");
const dbTables = databaseServer.getTables();
const globals = dbTables.globals;
const PK = dbTables.traders[Traders_1.Traders.PEACEKEEPER].assort;
const SKR = dbTables.traders[Traders_1.Traders.SKIER].assort;
// WEAPON LISTING AND ATTACHMENT
const Patron_1143x33 = {
itemTplToClone: "5c0d56a986f774449d5de529",
overrideProperties: {
Weight: 0.0165,
ArmorDamage: 58,
BulletMassGram: 16.5,
Caliber: "Caliber1143x33mmR",
Damage: 102,
ExaminedByDefault: false,
FragmentType: "",
FragmentationChance: 0,
InitialSpeed: 343,
HeavyBleedingDelta: 0.24,
LightBleedingDelta: 0.33,
PenetrationChanceObstacle: 0.32,
PenetrationPower: 67,
PenetrationPowerDiviation: 0.211,
Prefab: {
path: "assets/weapons/colt_saa/patron_1143x33mmr_lead.bundle",
rcid: ""
},
StaminaBurnPerDamage: 0.733,
casingMass: 14,
ammoRec: 47,
MalfFeedChance: 0,
MalfMisfireChance: 0,
StackMaxSize: 20,
StackMaxRandom: 10
},
parentId: "5485a8684bdc2da71d8b4567",
newId: "65f3e7fa6d952338bde17f8a",
handbookParentId: "5b47574386f77428ca22b33b",
handbookPriceRoubles: 1086,
fleaPriceRoubles: 1244,
locales: {
"en": {
name: ".45 Colt +P",
shortName: ".45C+P",
description: "The .45 Colt (11.43×33mmR), is a rimmed, straight-walled, handgun cartridge dating to 1872. The .45 Colt is loaded with black powder, but with recent years it is now loaded with a smokeless powder. Providing a powerful force with the cost of recoil."
}
}
};
customitem.createItemFromClone(Patron_1143x33);
const colt_saa = {
itemTplToClone: "61a4c8884f95bc3b2c5dc96f",
overrideProperties: {
Prefab: {
path: "assets/weapons/colt_saa/weapon_colt_single_action_army_container.bundle",
rcid: ""
},
BackgroundColor: "yellow",
aimingSensitivity: 0.7,
AimPlane: 0.15,
CenterOfImpact: 0.045,
DeviationCurve: 3,
DeviationMax: 8,
Ergonomics: 95,
ExaminedByDefault: true,
ExamineExperience: 18,
HeatFactorGun: 0.76,
IronSightRange: 100,
LootExperience: 25,
RecoilAngle: 94,
RecoilCenter: {
x: 0,
y: -0.491,
z: -0.023
},
RecoilForceUp: 422,
RecoilForceBack: 240,
RecoilPosZMult: 0.7,
RecoilCamera: 0.016,
RecoilReturnPathDampingHandRotation: 0.68,
RecoilReturnSpeedHandRotation: 3.26,
RecoilDampingHandRotation: 0.74,
CameraToWeaponAngleStep: 0.01,
CameraSnap: 4,
RotationCenterNoStock: {
x: 0,
y: -0.491,
z: -0.023
},
Slots: [
{
_id: "665154a231f1039d7fccbcd5",
"_mergeSlotWithChildren": false,
"_name": "mod_magazine",
"_parent": WeaponIds.COLT_PEACEMAKER,
"_props": {
"filters": [
{
"AnimationIndex": 0,
"Filter": [
"665154c4019e9e7d5ad6d0cc"
]
}
]
},
"_proto": "55d30c394bdc2dae468b4577",
"_required": true
}
],
Weight: 1.048,
ammoCaliber: "Caliber1143x33mmR",
defAmmo: "65f3e7fa6d952338bde17f8a",
defMagType: "665154c4019e9e7d5ad6d0cc",
durabSpawnMax: 100,
durabSpawnMin: 35,
weapFireType: ["single"]
},
parentId: "617f1ef5e8b54b0998387733",
newId: WeaponIds.COLT_PEACEMAKER,
handbookParentId: "5b5f792486f77447ed5636b3",
handbookPriceRoubles: 12987,
fleaPriceRoubles: 174335,
locales: {
"en": {
name: "Colt Single Action Army \"Peacemaker\" 11.43x33mmR Revolver",
shortName: "Peacemaker",
description: "The Colt Single Action Army, also known as SAA, is a single-action revolver handgun. It was designed for the U.S. government service revolver trials of 1872 by Colt's Patent Firearms Manufacturing Company and was adopted as the standard-issued pistol of the U.S. Army from 1873 until 1892. Today, they are mainly bought as memorabilia by collectors and re-enactors. It is recommended to not load all 6 shot as the hammer wil hit the round even if it's not cocked (but that's real life). This one has engraving all over it, offering no tactical advantage whatsoever."
}
}
};
customitem.createItemFromClone(colt_saa);
const colt_cylinder = {
itemTplToClone: "619f54a1d25cbd424731fb99",
overrideProperties: {
Cartridges: [
{
"_id": "66515612ca5e57294f5e3527",
"_max_count": 6,
"_name": "cartridges",
"_parent": "665154c4019e9e7d5ad6d0cc",
"_props": {
"filters": [
{
"Filter": [
"65f3e7fa6d952338bde17f8a"
]
}
]
},
"_proto": "5748538b2459770af276a261"
}
],
Ergonomics: -12,
Weight: 0.21,
ExamineExperience: 12,
Prefab: {
path: "assets/weapons/colt_saa/mod_magazine_colt_army_cylinder.bundle",
rcid: ""
},
Slots: [
{
"_id": "665156168ca9d58731082a0a",
"_mergeSlotWithChildren": false,
"_name": "camora_000",
"_parent": "665154c4019e9e7d5ad6d0cc",
"_props": {
"filters": [
{
"Filter": [
"65f3e7fa6d952338bde17f8a"
],
MaxStackCount: 1
}
]
},
"_proto": "55d4af244bdc2d962f8b4571",
"_required": false
},
{
"_id": "66515619ddd2bbaccbae878b",
"_mergeSlotWithChildren": false,
"_name": "camora_001",
"_parent": "665154c4019e9e7d5ad6d0cc",
"_props": {
"filters": [
{
"Filter": [
"65f3e7fa6d952338bde17f8a"
],
MaxStackCount: 1
}
]
},
"_proto": "55d4af244bdc2d962f8b4571",
"_required": false
},
{
"_id": "6651561ed786bdb78ba7577d",
"_mergeSlotWithChildren": false,
"_name": "camora_002",
"_parent": "665154c4019e9e7d5ad6d0cc",
"_props": {
"filters": [
{
"Filter": [
"65f3e7fa6d952338bde17f8a"
],
"MaxStackCount": 1
}
]
},
"_proto": "55d4af244bdc2d962f8b4571",
"_required": false
},
{
"_id": "665156238098aeabb396b22e",
"_mergeSlotWithChildren": false,
"_name": "camora_003",
"_parent": "665154c4019e9e7d5ad6d0cc",
"_props": {
"filters": [
{
"Filter": [
"65f3e7fa6d952338bde17f8a"
],
"MaxStackCount": 1
}
]
},
"_proto": "55d4af244bdc2d962f8b4571",
"_required": false
},
{
"_id": "66515627af664f37df1da465",
"_mergeSlotWithChildren": false,
"_name": "camora_004",
"_parent": "665154c4019e9e7d5ad6d0cc",
"_props": {
"filters": [
{
"Filter": [
"65f3e7fa6d952338bde17f8a"
],
"MaxStackCount": 1
}
]
},
"_proto": "55d4af244bdc2d962f8b4571",
"_required": false
},
{
"_id": "6651562b36f0014c0cb19e14",
"_mergeSlotWithChildren": false,
"_name": "camora_005",
"_parent": "665154c4019e9e7d5ad6d0cc",
"_props": {
"filters": [
{
"Filter": [
"65f3e7fa6d952338bde17f8a"
],
"MaxStackCount": 1
}
]
},
"_proto": "55d4af244bdc2d962f8b4571",
"_required": false
}
]
},
parentId: "610720f290b75a49ff2e5e25",
newId: "665154c4019e9e7d5ad6d0cc",
handbookParentId: "5b5f754a86f774094242f19b",
handbookPriceRoubles: 2553,
fleaPriceRoubles: 4348,
locales: {
"en": {
name: "Colt Single Action Army 6-Round Cylinder",
shortName: "Colt SAA",
description: "6-Round standard issue cylinder for the SAA. This one has been customized with intricate engraving."
}
}
};
customitem.createItemFromClone(colt_cylinder);
const Patron_1143x33_PACK = {
itemTplToClone: "5649ed104bdc2d3d1c8b458b",
overrideProperties: {
StackSlots: [
{
"_id": "6651562fa7842ba5dacc9d7d",
"_max_count": 20,
"_name": "cartridges",
"_parent": "66515174b0b7affec08d22aa",
"_props": {
"filters": [
{
"Filter": [
"65f3e7fa6d952338bde17f8a"
]
}
]
},
"_proto": "5748538b2459770af276a261"
}
],
Prefab: {
path: "assets/content/items/ammo/boxes/item_ammo_box_7_62x54mm_r.bundle",
rcid: ""
},
ammoCaliber: "Caliber1143x33mmR"
},
parentId: "543be5cb4bdc2deb348b4568",
newId: "66515174b0b7affec08d22aa",
handbookParentId: "5b47574386f77428ca22b33c",
handbookPriceRoubles: 1763,
fleaPriceRoubles: 2876,
locales: {
"en": {
name: ".45 Colt +P 20 Cartridges Pack",
shortName: ".45C+P",
description: "A 20-round pack for .45 Colt cartridges."
}
}
};
customitem.createItemFromClone(Patron_1143x33_PACK);
// MASTERY AND TRADER
const saa_mastery = {
"Name": "Colt Single Action",
"Templates": [
WeaponIds.COLT_PEACEMAKER
],
"Level2": 450,
"Level3": 900
};
globals.config.Mastering.push(saa_mastery);
if (config_json_1.default.Debug_Mode && config_json_1.default.altdebug != true) {
dbTables.templates.items[WeaponIds.COLT_PEACEMAKER]._props.Prefab.path = "assets/weapons/colt_saa/weapon_colt_single_action_army_container_debugging.bundle";
}
else if (config_json_1.default.Debug_Mode && config_json_1.default.altdebug) {
dbTables.templates.items[WeaponIds.COLT_PEACEMAKER]._props.Prefab.path = "assets/weapons/colt_saa/weapon_colt_single_action_army_container_debugging_alt.bundle";
}
for (const itemPreset in global_item_preset_json_1.default.ItemPresets) {
globals.ItemPresets[itemPreset] = global_item_preset_json_1.default.ItemPresets[itemPreset];
}
//trader push
SKR.items.push(...Item_Preset_json_1.default.items);
for (const bsc in Item_Preset_json_1.default.barter_scheme) {
SKR.barter_scheme[bsc] = Item_Preset_json_1.default.barter_scheme[bsc];
}
for (const llv in Item_Preset_json_1.default.loyal_level_items) {
SKR.loyal_level_items[llv] = Item_Preset_json_1.default.loyal_level_items[llv];
}
//push loot
const safeLoot = {
"tpl": WeaponIds.COLT_PEACEMAKER,
"relativeProbability": 24
};
const ammopack = {
tpl: "66515174b0b7affec08d22aa",
"relativeProbability": 146
};
const locations = dbTables.locations;
locations.rezervbase.looseLoot.spawnpoints.push(...Spawns_json_1.default.spawnsRezerv);
locations.woods.looseLoot.spawnpoints.push(...Spawns_json_1.default.spawnsWoods);
locations.factory4_day.looseLoot.spawnpoints.push(...Spawns_json_1.default.spawnsFactory);
locations.factory4_night.looseLoot.spawnpoints.push(...Spawns_json_1.default.spawnsFactory);
for (const locationKey in locations) {
const location = locations[locationKey];
if (!location || !location.staticLoot) {
continue;
}
const safe = location.staticLoot[ItemTpl_1.ItemTpl.LOOTCONTAINER_SAFE];
if (safe) {
safe.itemDistribution.push(safeLoot);
}
const weaponbox5x5 = location.staticLoot[ItemTpl_1.ItemTpl.LOOTCONTAINER_WEAPON_BOX_5X5];
if (weaponbox5x5) {
weaponbox5x5.itemDistribution.push(ammopack);
}
location.staticLoot[ItemTpl_1.ItemTpl.LOOTCONTAINER_WEAPON_BOX_4X4]?.itemDistribution.push(ammopack);
location.staticLoot[ItemTpl_1.ItemTpl.LOOTCONTAINER_WEAPON_BOX_6X3]?.itemDistribution.push(ammopack);
location.staticLoot[ItemTpl_1.ItemTpl.LOOTCONTAINER_WEAPON_BOX_5X2]?.itemDistribution.push(ammopack);
location.staticLoot[ItemTpl_1.ItemTpl.LOOTCONTAINER_WOODEN_CRATE]?.itemDistribution.push(ammopack);
if (!location || !location.staticAmmo) {
continue;
}
location.staticAmmo["Caliber1143x33mmR"] =
[
{
tpl: "65f3e7fa6d952338bde17f8a",
relativeProbability: 1
}
];
}
const scavy = dbTables.bots.types["assault"];
scavy.inventory.equipment.Holster[WeaponIds.COLT_PEACEMAKER] = 9;
scavy.inventory.mods[WeaponIds.COLT_PEACEMAKER] =
{
mod_magazine: [
"665154c4019e9e7d5ad6d0cc"
]
};
scavy.inventory.mods["665154c4019e9e7d5ad6d0cc"] =
{
camora_000: [
"65f3e7fa6d952338bde17f8a"
],
camora_001: [
"65f3e7fa6d952338bde17f8a"
],
camora_002: [
"65f3e7fa6d952338bde17f8a"
],
camora_003: [
"65f3e7fa6d952338bde17f8a"
],
camora_004: [
"65f3e7fa6d952338bde17f8a"
],
camora_005: [
"65f3e7fa6d952338bde17f8a"
]
};
scavy.inventory.Ammo["Caliber1143x33mmR"] =
{
"65f3e7fa6d952338bde17f8a": 1
};
customitem.addCustomWeaponToPMCs(WeaponIds.COLT_PEACEMAKER, 7, "Holster");
//ON GOD WACKY AHH ID INVENTORY THING
dbTables.templates.items["55d7217a4bdc2d86028b456d"]._props.Slots[2]._props.filters[0].Filter.push(WeaponIds.COLT_PEACEMAKER);
}
}
exports.mod = new Mod();
//# sourceMappingURL=mod.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,494 @@
/* eslint-disable @typescript-eslint/indent */
/* eslint-disable @typescript-eslint/naming-convention */
import { DependencyContainer } from "tsyringe";
import { IPostDBLoadMod } from "@spt/models/external/IPostDBLoadMod";
import { CustomItemService } from "@spt/services/mod/CustomItemService";
import { NewItemFromCloneDetails } from "@spt/models/spt/mod/NewItemDetails";
import { DatabaseServer } from "@spt/servers/DatabaseServer";
import { ILocation } from "@spt/models/eft/common/ILocation";
import preset_file from "../src/Item_Preset.json";
import global_preset_file from "../src/global_item_preset.json";
import config from "../config/config.json";
import spawnPoints from "../src/loot/Spawns.json";
import { ItemTpl } from "@spt/models/enums/ItemTpl";
import { Traders } from "@spt/models/enums/Traders";
import { BodyPart, IBotType } from "@spt/models/eft/common/tables/IBotType";
export enum WeaponIds
{
COLT_PEACEMAKER = "665152810b4c784f2258d7d0"
}
class Mod implements IPostDBLoadMod
{
public postDBLoad(container: DependencyContainer): void {
const customitem = container.resolve<CustomItemService>("CustomItemService");
const databaseServer = container.resolve<DatabaseServer>("DatabaseServer");
const dbTables = databaseServer.getTables();
const globals = dbTables.globals;
const PK = dbTables.traders[Traders.PEACEKEEPER].assort;
const SKR = dbTables.traders[Traders.SKIER].assort;
// WEAPON LISTING AND ATTACHMENT
const Patron_1143x33: NewItemFromCloneDetails = {
itemTplToClone: "5c0d56a986f774449d5de529",
overrideProperties: {
Weight: 0.0165,
ArmorDamage: 58,
BulletMassGram: 16.5,
Caliber: "Caliber1143x33mmR",
Damage: 102,
ExaminedByDefault: false,
FragmentType: "",
FragmentationChance: 0,
InitialSpeed: 343,
HeavyBleedingDelta: 0.24,
LightBleedingDelta: 0.33,
PenetrationChanceObstacle: 0.32,
PenetrationPower: 67,
PenetrationPowerDiviation: 0.211,
Prefab: {
path: "assets/weapons/colt_saa/patron_1143x33mmr_lead.bundle",
rcid: ""
},
StaminaBurnPerDamage: 0.733,
casingMass: 14,
ammoRec: 47,
MalfFeedChance: 0,
MalfMisfireChance: 0,
StackMaxSize: 20,
StackMaxRandom: 10
},
parentId: "5485a8684bdc2da71d8b4567",
newId: "65f3e7fa6d952338bde17f8a",
handbookParentId: "5b47574386f77428ca22b33b",
handbookPriceRoubles: 1086,
fleaPriceRoubles: 1244,
locales: {
"en": {
name: ".45 Colt +P",
shortName: ".45C+P",
description: "The .45 Colt (11.43×33mmR), is a rimmed, straight-walled, handgun cartridge dating to 1872. The .45 Colt is loaded with black powder, but with recent years it is now loaded with a smokeless powder. Providing a powerful force with the cost of recoil."
}
}
}
customitem.createItemFromClone(Patron_1143x33);
const colt_saa: NewItemFromCloneDetails = {
itemTplToClone: "61a4c8884f95bc3b2c5dc96f",
overrideProperties: {
Prefab: {
path: "assets/weapons/colt_saa/weapon_colt_single_action_army_container.bundle",
rcid: ""
},
BackgroundColor: "yellow",
aimingSensitivity: 0.7,
AimPlane: 0.15,
CenterOfImpact: 0.045,
DeviationCurve: 3,
DeviationMax: 8,
Ergonomics: 95,
ExaminedByDefault: true,
ExamineExperience: 18,
HeatFactorGun: 0.76,
IronSightRange: 100,
LootExperience: 25,
RecoilAngle: 94,
RecoilCenter:
{
x: 0,
y: -0.491,
z: -0.023
},
RecoilForceUp: 422,
RecoilForceBack: 240,
RecoilPosZMult: 0.7,
RecoilCamera: 0.016,
RecoilReturnPathDampingHandRotation: 0.68,
RecoilReturnSpeedHandRotation: 3.26,
RecoilDampingHandRotation: 0.74,
CameraToWeaponAngleStep: 0.01,
CameraSnap: 4,
RotationCenterNoStock:
{
x: 0,
y: -0.491,
z: -0.023
},
Slots: [
{
_id: "665154a231f1039d7fccbcd5",
"_mergeSlotWithChildren": false,
"_name": "mod_magazine",
"_parent": WeaponIds.COLT_PEACEMAKER,
"_props": {
"filters": [
{
"AnimationIndex": 0,
"Filter": [
"665154c4019e9e7d5ad6d0cc"
]
}
]
},
"_proto": "55d30c394bdc2dae468b4577",
"_required": true
}
],
Weight: 1.048,
ammoCaliber: "Caliber1143x33mmR",
defAmmo: "65f3e7fa6d952338bde17f8a",
defMagType: "665154c4019e9e7d5ad6d0cc",
durabSpawnMax: 100,
durabSpawnMin: 35,
weapFireType: ["single"]
},
parentId: "617f1ef5e8b54b0998387733",
newId: WeaponIds.COLT_PEACEMAKER,
handbookParentId: "5b5f792486f77447ed5636b3",
handbookPriceRoubles: 12987,
fleaPriceRoubles: 174335,
locales: {
"en": {
name: "Colt Single Action Army \"Peacemaker\" 11.43x33mmR Revolver",
shortName: "Peacemaker",
description: "The Colt Single Action Army, also known as SAA, is a single-action revolver handgun. It was designed for the U.S. government service revolver trials of 1872 by Colt's Patent Firearms Manufacturing Company and was adopted as the standard-issued pistol of the U.S. Army from 1873 until 1892. Today, they are mainly bought as memorabilia by collectors and re-enactors. It is recommended to not load all 6 shot as the hammer wil hit the round even if it's not cocked (but that's real life). This one has engraving all over it, offering no tactical advantage whatsoever."
}
}
}
customitem.createItemFromClone(colt_saa);
const colt_cylinder: NewItemFromCloneDetails = {
itemTplToClone: "619f54a1d25cbd424731fb99",
overrideProperties: {
Cartridges: [
{
"_id": "66515612ca5e57294f5e3527",
"_max_count": 6,
"_name": "cartridges",
"_parent": "665154c4019e9e7d5ad6d0cc",
"_props": {
"filters": [
{
"Filter": [
"65f3e7fa6d952338bde17f8a"
]
}
]
},
"_proto": "5748538b2459770af276a261"
}
],
Ergonomics: -12,
Weight: 0.21,
ExamineExperience: 12,
Prefab:
{
path: "assets/weapons/colt_saa/mod_magazine_colt_army_cylinder.bundle",
rcid: ""
},
Slots: [
{
"_id": "665156168ca9d58731082a0a",
"_mergeSlotWithChildren": false,
"_name": "camora_000",
"_parent": "665154c4019e9e7d5ad6d0cc",
"_props": {
"filters": [
{
"Filter": [
"65f3e7fa6d952338bde17f8a"
],
MaxStackCount: 1
}
]
},
"_proto": "55d4af244bdc2d962f8b4571",
"_required": false
},
{
"_id": "66515619ddd2bbaccbae878b",
"_mergeSlotWithChildren": false,
"_name": "camora_001",
"_parent": "665154c4019e9e7d5ad6d0cc",
"_props": {
"filters": [
{
"Filter": [
"65f3e7fa6d952338bde17f8a"
],
MaxStackCount: 1
}
]
},
"_proto": "55d4af244bdc2d962f8b4571",
"_required": false
},
{
"_id": "6651561ed786bdb78ba7577d",
"_mergeSlotWithChildren": false,
"_name": "camora_002",
"_parent": "665154c4019e9e7d5ad6d0cc",
"_props": {
"filters": [
{
"Filter": [
"65f3e7fa6d952338bde17f8a"
],
"MaxStackCount": 1
}
]
},
"_proto": "55d4af244bdc2d962f8b4571",
"_required": false
},
{
"_id": "665156238098aeabb396b22e",
"_mergeSlotWithChildren": false,
"_name": "camora_003",
"_parent": "665154c4019e9e7d5ad6d0cc",
"_props": {
"filters": [
{
"Filter": [
"65f3e7fa6d952338bde17f8a"
],
"MaxStackCount": 1
}
]
},
"_proto": "55d4af244bdc2d962f8b4571",
"_required": false
},
{
"_id": "66515627af664f37df1da465",
"_mergeSlotWithChildren": false,
"_name": "camora_004",
"_parent": "665154c4019e9e7d5ad6d0cc",
"_props": {
"filters": [
{
"Filter": [
"65f3e7fa6d952338bde17f8a"
],
"MaxStackCount": 1
}
]
},
"_proto": "55d4af244bdc2d962f8b4571",
"_required": false
},
{
"_id": "6651562b36f0014c0cb19e14",
"_mergeSlotWithChildren": false,
"_name": "camora_005",
"_parent": "665154c4019e9e7d5ad6d0cc",
"_props": {
"filters": [
{
"Filter": [
"65f3e7fa6d952338bde17f8a"
],
"MaxStackCount": 1
}
]
},
"_proto": "55d4af244bdc2d962f8b4571",
"_required": false
}
]
},
parentId: "610720f290b75a49ff2e5e25",
newId: "665154c4019e9e7d5ad6d0cc",
handbookParentId: "5b5f754a86f774094242f19b",
handbookPriceRoubles: 2553,
fleaPriceRoubles: 4348,
locales: {
"en": {
name: "Colt Single Action Army 6-Round Cylinder",
shortName: "Colt SAA",
description: "6-Round standard issue cylinder for the SAA. This one has been customized with intricate engraving."
}
}
}
customitem.createItemFromClone(colt_cylinder);
const Patron_1143x33_PACK: NewItemFromCloneDetails = {
itemTplToClone: "5649ed104bdc2d3d1c8b458b",
overrideProperties: {
StackSlots: [
{
"_id": "6651562fa7842ba5dacc9d7d",
"_max_count": 20,
"_name": "cartridges",
"_parent": "66515174b0b7affec08d22aa",
"_props": {
"filters": [
{
"Filter": [
"65f3e7fa6d952338bde17f8a"
]
}
]
},
"_proto": "5748538b2459770af276a261"
}
],
Prefab: {
path: "assets/content/items/ammo/boxes/item_ammo_box_7_62x54mm_r.bundle",
rcid: ""
},
ammoCaliber: "Caliber1143x33mmR"
},
parentId: "543be5cb4bdc2deb348b4568",
newId: "66515174b0b7affec08d22aa",
handbookParentId: "5b47574386f77428ca22b33c",
handbookPriceRoubles: 1763,
fleaPriceRoubles: 2876,
locales: {
"en": {
name: ".45 Colt +P 20 Cartridges Pack",
shortName: ".45C+P",
description: "A 20-round pack for .45 Colt cartridges."
}
}
}
customitem.createItemFromClone(Patron_1143x33_PACK);
// MASTERY AND TRADER
const saa_mastery = {
"Name": "Colt Single Action",
"Templates": [
WeaponIds.COLT_PEACEMAKER
],
"Level2": 450,
"Level3": 900
}
globals.config.Mastering.push(saa_mastery)
if (config.Debug_Mode && config.altdebug != true)
{
dbTables.templates.items[WeaponIds.COLT_PEACEMAKER]._props.Prefab.path = "assets/weapons/colt_saa/weapon_colt_single_action_army_container_debugging.bundle";
}
else if (config.Debug_Mode && config.altdebug)
{
dbTables.templates.items[WeaponIds.COLT_PEACEMAKER]._props.Prefab.path = "assets/weapons/colt_saa/weapon_colt_single_action_army_container_debugging_alt.bundle";
}
for (const itemPreset in global_preset_file.ItemPresets)
{
globals.ItemPresets[itemPreset] = global_preset_file.ItemPresets[itemPreset];
}
//trader push
SKR.items.push(...preset_file.items);
for (const bsc in preset_file.barter_scheme)
{
SKR.barter_scheme[bsc] = preset_file.barter_scheme[bsc];
}
for (const llv in preset_file.loyal_level_items)
{
SKR.loyal_level_items[llv] = preset_file.loyal_level_items[llv];
}
//push loot
const safeLoot =
{
"tpl": WeaponIds.COLT_PEACEMAKER,
"relativeProbability": 24
}
const ammopack =
{
tpl: "66515174b0b7affec08d22aa",
"relativeProbability": 146
}
const locations = dbTables.locations;
locations.rezervbase.looseLoot.spawnpoints.push(...spawnPoints.spawnsRezerv);
locations.woods.looseLoot.spawnpoints.push(...spawnPoints.spawnsWoods);
locations.factory4_day.looseLoot.spawnpoints.push(...spawnPoints.spawnsFactory);
locations.factory4_night.looseLoot.spawnpoints.push(...spawnPoints.spawnsFactory);
for (const locationKey in locations)
{
const location: ILocation = locations[locationKey];
if (!location || !location.staticLoot)
{
continue
}
const safe = location.staticLoot[ItemTpl.LOOTCONTAINER_SAFE];
if (safe)
{
safe.itemDistribution.push(safeLoot);
}
const weaponbox5x5 = location.staticLoot[ItemTpl.LOOTCONTAINER_WEAPON_BOX_5X5];
if (weaponbox5x5)
{
weaponbox5x5.itemDistribution.push(ammopack);
}
location.staticLoot[ItemTpl.LOOTCONTAINER_WEAPON_BOX_4X4]?.itemDistribution.push(ammopack);
location.staticLoot[ItemTpl.LOOTCONTAINER_WEAPON_BOX_6X3]?.itemDistribution.push(ammopack);
location.staticLoot[ItemTpl.LOOTCONTAINER_WEAPON_BOX_5X2]?.itemDistribution.push(ammopack);
location.staticLoot[ItemTpl.LOOTCONTAINER_WOODEN_CRATE]?.itemDistribution.push(ammopack);
if (!location || !location.staticAmmo)
{
continue
}
location.staticAmmo["Caliber1143x33mmR"] =
[
{
tpl: "65f3e7fa6d952338bde17f8a",
relativeProbability: 1
}
]
}
const scavy = dbTables.bots.types["assault"];
scavy.inventory.equipment.Holster[WeaponIds.COLT_PEACEMAKER] = 9;
scavy.inventory.mods[WeaponIds.COLT_PEACEMAKER] =
{
mod_magazine: [
"665154c4019e9e7d5ad6d0cc"
]
}
scavy.inventory.mods["665154c4019e9e7d5ad6d0cc"] =
{
camora_000: [
"65f3e7fa6d952338bde17f8a"
],
camora_001: [
"65f3e7fa6d952338bde17f8a"
],
camora_002: [
"65f3e7fa6d952338bde17f8a"
],
camora_003: [
"65f3e7fa6d952338bde17f8a"
],
camora_004: [
"65f3e7fa6d952338bde17f8a"
],
camora_005: [
"65f3e7fa6d952338bde17f8a"
]
}
scavy.inventory.Ammo["Caliber1143x33mmR"] =
{
"65f3e7fa6d952338bde17f8a": 1
}
customitem.addCustomWeaponToPMCs(WeaponIds.COLT_PEACEMAKER, 7, "Holster")
//ON GOD WACKY AHH ID INVENTORY THING
dbTables.templates.items["55d7217a4bdc2d86028b456d"]._props.Slots[2]._props.filters[0].Filter.push(WeaponIds.COLT_PEACEMAKER);
}
}
export const mod = new Mod();