Added RPG-7 & Peacemaker Mods

This commit is contained in:
Rage 2025-01-11 04:49:47 -05:00
parent 4be51035f2
commit e1905a5613
41 changed files with 2714 additions and 0 deletions

28
mods/Peacemaker/meta.ini Normal file
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

View File

@ -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": [
]
}
]
}

View File

@ -0,0 +1,4 @@
{
"Debug_Mode": false,
"altdebug": false
}

View File

@ -0,0 +1,112 @@
Disclaimer
Last updated: January 27, 2021
Interpretation and Definitions
Interpretation
The words of which the initial letter is capitalized have meanings defined under the following
conditions. The following definitions shall have the same meaning regardless of whether they
appear in singular or in plural.
Definitions
For the purposes of this Disclaimer:
● Company (referred to as either "the Company", "We", "Us" or "Our" in this Disclaimer)
refers to Senko's Pub.
● Service refers to the Website and any other associated or affiliated content.
● You means the individual accessing the Service, or the company, or other legal entity on
behalf of which such individual is accessing or using the Service, as applicable.
● Website refers to the SP Tarkov website and the Senkos Pub website or app,
accessible from h ttps://www.sp-tarkov.com/ and https://www.guilded.gg/senkospub
respectively.
Disclaimer
The information contained on the Service is for general information purposes only.
The Company assumes no responsibility for errors or omissions in the contents of the Service.
In no event shall the Company be liable for any special, direct, indirect, consequential, or
incidental damages or any damages whatsoever, whether in an action of contract, negligence or
other tort, arising out of or in connection with the use of the Service or the contents of the
Service. The Company reserves the right to make additions, deletions, or modifications to the
contents on the Service at any time without prior notice.
The Company does not warrant that the Service is free of viruses or other harmful components.
External Links Disclaimer
The Service may contain links to external websites that are not provided or maintained by or in
any way affiliated with the Company.
Please note that the Company does not guarantee the accuracy, relevance, timeliness, or
completeness of any information on these external websites.
Errors and Omissions Disclaimer
The information given by the Service is for general guidance on matters of interest only. Even if
the Company takes every precaution to insure that the content of the Service is both current and
accurate, errors can occur. Plus, given the changing nature of laws, rules and regulations, there
may be delays, omissions or inaccuracies in the information contained on the Service.
The Company is not responsible for any errors or omissions, or for the results obtained from the
use of this information.
Fair Use Disclaimer
The Company may use copyrighted material which has not always been specifically authorized
by the copyright owner. The Company is making such material available for criticism, comment,
news reporting, teaching, scholarship, or research.
The Company believes this constitutes a "fair use" of any such copyrighted material as provided
for in section 107 of the United States Copyright law.
If You wish to use copyrighted material from the Service for your own purposes that go beyond
fair use, You must obtain permission from the copyright owner.
Views Expressed Disclaimer
The Service may contain views and opinions which are those of the authors and do not
necessarily reflect the official policy or position of any other author, agency, organization,
employer or company, including the Company.
Comments published by users are their sole responsibility and the users will take full
responsibility, liability and blame for any libel or litigation that results from something written in or
as a direct result of something written in a comment. The Company is not liable for any
comment published by users and reserve the right to delete any comment for any reason
whatsoever.
No Responsibility Disclaimer
The information on the Service is provided with the understanding that the Company is not
herein engaged in rendering legal, accounting, tax, or other professional advice and services.
As such, it should not be used as a substitute for consultation with professional accounting, tax,
legal or other competent advisers.
In no event shall the Company or its suppliers be liable for any special, incidental, indirect, or
consequential damages whatsoever arising out of or in connection with your access or use or
inability to access or use the Service.
"Use at Your Own Risk" Disclaimer
All information in the Service is provided "as is", with no guarantee of completeness, accuracy,
timeliness or of the results obtained from the use of this information, and without warranty of any
kind, express or implied, including, but not limited to warranties of performance, merchantability
and fitness for a particular purpose.
The Company will not be liable to You or anyone else for any decision made or action taken in
reliance on the information given by the Service or for any consequential, special or similar
damages, even if advised of the possibility of such damages.
Contact Us
If you have any questions about this Disclaimer, You can contact Us:
● By email: t eam@sp-tarkov.com
● By visiting us at: https://www.guilded.gg/senkospub

View File

@ -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"
}
}

View File

@ -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/");
});

View File

@ -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
}
}

View File

@ -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"
}
}
}

View File

@ -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": []
}

View File

@ -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

View File

@ -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();

28
mods/RPG-7/meta.ini Normal file
View File

@ -0,0 +1,28 @@
[General]
gameName=spt
modid=0
version=d2025.1.11.0
newestVersion=
category="1,"
nexusFileStatus=1
installationFile=choccy-rpg7-1.1.4.zip
repository=Nexus
ignoredVersion=
comments=
notes=
nexusDescription=
url=
hasCustomURL=false
lastNexusQuery=
lastNexusUpdate=
nexusLastModified=2025-01-11T09:13:31Z
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

View File

@ -0,0 +1,49 @@
{
"manifest": [
{
"key": "rpg7/client_assets.bundle",
"dependencyKeys": [
"cubemaps",
"rpg7/textures.bundle",
"shaders"
]
},
{
"key": "rpg7/textures.bundle",
"dependencyKeys": []
},
{
"key": "rpg7/mod_front_sight_rpg7.bundle",
"dependencyKeys": [
"rpg7/client_assets.bundle"
]
},
{
"key": "rpg7/mod_rear_sight_rpg7.bundle",
"dependencyKeys": [
"rpg7/client_assets.bundle"
]
},
{
"key": "rpg7/patron_rpg7_pg7vl_93x40mm.bundle",
"dependencyKeys": [
"cubemaps",
"shaders",
"rpg7/client_assets.bundle"
]
},
{
"key": "rpg7/weapon_rpg7_container.bundle",
"dependencyKeys": [
"assets/content/audio/blendoptions/assets.bundle",
"assets/content/audio/weapons/generic",
"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",
"rpg7/client_assets.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.

View File

@ -0,0 +1,4 @@
{
"ExplosionMin": 30,
"ExplosionMax": 45
}

View File

@ -0,0 +1,112 @@
Disclaimer
Last updated: January 27, 2021
Interpretation and Definitions
Interpretation
The words of which the initial letter is capitalized have meanings defined under the following
conditions. The following definitions shall have the same meaning regardless of whether they
appear in singular or in plural.
Definitions
For the purposes of this Disclaimer:
● Company (referred to as either "the Company", "We", "Us" or "Our" in this Disclaimer)
refers to Senko's Pub.
● Service refers to the Website and any other associated or affiliated content.
● You means the individual accessing the Service, or the company, or other legal entity on
behalf of which such individual is accessing or using the Service, as applicable.
● Website refers to the SP Tarkov website and the Senkos Pub website or app,
accessible from h ttps://www.sp-tarkov.com/ and https://www.guilded.gg/senkospub
respectively.
Disclaimer
The information contained on the Service is for general information purposes only.
The Company assumes no responsibility for errors or omissions in the contents of the Service.
In no event shall the Company be liable for any special, direct, indirect, consequential, or
incidental damages or any damages whatsoever, whether in an action of contract, negligence or
other tort, arising out of or in connection with the use of the Service or the contents of the
Service. The Company reserves the right to make additions, deletions, or modifications to the
contents on the Service at any time without prior notice.
The Company does not warrant that the Service is free of viruses or other harmful components.
External Links Disclaimer
The Service may contain links to external websites that are not provided or maintained by or in
any way affiliated with the Company.
Please note that the Company does not guarantee the accuracy, relevance, timeliness, or
completeness of any information on these external websites.
Errors and Omissions Disclaimer
The information given by the Service is for general guidance on matters of interest only. Even if
the Company takes every precaution to insure that the content of the Service is both current and
accurate, errors can occur. Plus, given the changing nature of laws, rules and regulations, there
may be delays, omissions or inaccuracies in the information contained on the Service.
The Company is not responsible for any errors or omissions, or for the results obtained from the
use of this information.
Fair Use Disclaimer
The Company may use copyrighted material which has not always been specifically authorized
by the copyright owner. The Company is making such material available for criticism, comment,
news reporting, teaching, scholarship, or research.
The Company believes this constitutes a "fair use" of any such copyrighted material as provided
for in section 107 of the United States Copyright law.
If You wish to use copyrighted material from the Service for your own purposes that go beyond
fair use, You must obtain permission from the copyright owner.
Views Expressed Disclaimer
The Service may contain views and opinions which are those of the authors and do not
necessarily reflect the official policy or position of any other author, agency, organization,
employer or company, including the Company.
Comments published by users are their sole responsibility and the users will take full
responsibility, liability and blame for any libel or litigation that results from something written in or
as a direct result of something written in a comment. The Company is not liable for any
comment published by users and reserve the right to delete any comment for any reason
whatsoever.
No Responsibility Disclaimer
The information on the Service is provided with the understanding that the Company is not
herein engaged in rendering legal, accounting, tax, or other professional advice and services.
As such, it should not be used as a substitute for consultation with professional accounting, tax,
legal or other competent advisers.
In no event shall the Company or its suppliers be liable for any special, incidental, indirect, or
consequential damages whatsoever arising out of or in connection with your access or use or
inability to access or use the Service.
"Use at Your Own Risk" Disclaimer
All information in the Service is provided "as is", with no guarantee of completeness, accuracy,
timeliness or of the results obtained from the use of this information, and without warranty of any
kind, express or implied, including, but not limited to warranties of performance, merchantability
and fitness for a particular purpose.
The Company will not be liable to You or anyone else for any decision made or action taken in
reliance on the information given by the Service or for any consequential, special or similar
damages, even if advised of the possibility of such damages.
Contact Us
If you have any questions about this Disclaimer, You can contact Us:
● By email: t eam@sp-tarkov.com
● By visiting us at: https://www.guilded.gg/senkospub

View File

@ -0,0 +1,30 @@
{
"name": "RPG7",
"version": "1.1.4",
"main": "src/mod.js",
"license": "CC-BY 3.0",
"author": "Choccy",
"isBundleMod": true,
"sptVersion": "~3.10",
"loadBefore": [],
"loadAfter": [],
"incompatibilities": [],
"contributors": [],
"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"
}
}

View File

@ -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/");
});

View File

@ -0,0 +1,170 @@
{
"items": [
{
"_id": "668ba3975c1a4c9b79bb68d9",
"_tpl": "668b9c37adf8dd87dcd87df9",
"parentId": "hideout",
"slotId": "hideout",
"upd": {
"UnlimitedCount": false,
"StackObjectsCount": 1053,
"BuyRestrictionCurrent": 0,
"BuyRestrictionMax": 2
}
},
{
"_id": "3d98eada45977b1008bd60fe",
"_tpl": "668b9c27558936e864b4a504",
"parentId": "668ba3975c1a4c9b79bb68d9",
"slotId": "mod_sight_front"
},
{
"_id": "0980a5e03a3b26542b77f091",
"_tpl": "668b9c1b327f6a93d2375db3",
"parentId": "668ba3975c1a4c9b79bb68d9",
"slotId": "mod_sight_rear"
},
{
"_id": "668ba3a3e2754a5d658f9d86",
"_tpl": "668b9c37adf8dd87dcd87df9",
"parentId": "hideout",
"slotId": "hideout",
"upd": {
"UnlimitedCount": false,
"StackObjectsCount": 1053,
"BuyRestrictionCurrent": 0,
"BuyRestrictionMax": 5
}
},
{
"_id": "668ba3d2c7b4aaca11e0b8bb",
"_tpl": "668b9c27558936e864b4a504",
"parentId": "668ba3a3e2754a5d658f9d86",
"slotId": "mod_sight_front"
},
{
"_id": "668ba3ce3c888c935f524bbe",
"_tpl": "668b9c1b327f6a93d2375db3",
"parentId": "668ba3a3e2754a5d658f9d86",
"slotId": "mod_sight_rear"
},
{
"_id": "668ba3afc5745416518fc98c",
"_tpl": "65f484909638b1821d56149e",
"parentId": "hideout",
"slotId": "hideout",
"upd": {
"UnlimitedCount": false,
"StackObjectsCount": 3241,
"BuyRestrictionCurrent": 0,
"BuyRestrictionMax": 5
}
},
{
"_id": "668ba3b4a8df04f0219b9056",
"_tpl": "65f484909638b1821d56149e",
"parentId": "hideout",
"slotId": "hideout",
"upd": {
"UnlimitedCount": false,
"StackObjectsCount": 4091,
"BuyRestrictionCurrent": 0,
"BuyRestrictionMax": 8
}
},
{
"_id": "668ba3c691121ef7a6da0d5b",
"_tpl": "668b9c27558936e864b4a504",
"parentId": "hideout",
"slotId": "hideout",
"upd": {
"UnlimitedCount": true,
"StackObjectsCount": 9999
}
},
{
"_id": "668ba3c093eacd575f37dc7c",
"_tpl": "668b9c1b327f6a93d2375db3",
"parentId": "hideout",
"slotId": "hideout",
"upd": {
"UnlimitedCount": true,
"StackObjectsCount": 9999
}
}
],
"barter_scheme": {
"668ba3975c1a4c9b79bb68d9": [
[
{
"_tpl": "59faff1d86f7746c51718c9c",
"count": 1
},
{
"_tpl": "5d1c819a86f774771b0acd6c",
"count": 3
},
{
"_tpl": "5c12620d86f7743f8b198b72",
"count": 3
},
{
"_tpl": "5d6fc87386f77449db3db94e",
"count": 2
}
]
],
"668ba3a3e2754a5d658f9d86": [
[
{
"_tpl": "5449016a4bdc2d6f028b456f",
"count": 411532
}
]
],
"668ba3afc5745416518fc98c": [
[
{
"_tpl": "5d6fc87386f77449db3db94e",
"count": 3
},
{
"_tpl": "5d1c819a86f774771b0acd6c",
"count": 1
}
]
],
"668ba3b4a8df04f0219b9056": [
[
{
"_tpl": "5449016a4bdc2d6f028b456f",
"count": 75221
}
]
],
"668ba3c691121ef7a6da0d5b": [
[
{
"_tpl": "5449016a4bdc2d6f028b456f",
"count": 1152
}
]
],
"668ba3c093eacd575f37dc7c": [
[
{
"_tpl": "5449016a4bdc2d6f028b456f",
"count": 1152
}
]
]
},
"loyal_level_items":{
"668ba3975c1a4c9b79bb68d9": 1,
"668ba3a3e2754a5d658f9d86": 3,
"668ba3afc5745416518fc98c": 1,
"668ba3b4a8df04f0219b9056": 2,
"668ba3c093eacd575f37dc7c": 1,
"668ba3c691121ef7a6da0d5b": 1
}
}

View File

@ -0,0 +1,130 @@
{
"spawnsRezerv": [
{
"locationId": "(93.1053, 3.3972, -17.8457)",
"probability": 0.00548271211,
"template": {
"Id": "6650379222019b5d201b86e1",
"IsContainer": false,
"useGravity": true,
"randomRotation": false,
"Position": {
"x": 93.1053,
"y": 3.3972,
"z": -17.8457
},
"Rotation": {
"x": 0.0094,
"y": 115.0182,
"z": 89.9465
},
"IsGroupPosition": false,
"GroupPositions": [],
"IsAlwaysSpawn": false,
"Root": "6650379651a307b46b5843fa",
"Items": [
{
"_id": "66503799222398c8f0ffb499",
"_tpl": "668b9c37adf8dd87dcd87df9"
},
{
"_id": "3d98eada45977b1008bd60fe",
"_tpl": "668b9c27558936e864b4a504",
"parentId": "66503799222398c8f0ffb499",
"slotId": "mod_sight_front"
},
{
"_id": "0980a5e03a3b26542b77f091",
"_tpl": "668b9c1b327f6a93d2375db3",
"parentId": "66503799222398c8f0ffb499",
"slotId": "mod_sight_rear"
}
]
},
"itemDistribution": [
{
"composedKey": {
"key": "66503799222398c8f0ffb499"
},
"relativeProbability": 1
}
]
},
{
"locationId": "(92.3145, 3.3779, -17.606)",
"probability": 0.0000815232,
"template": {
"Id": "665037a906a6915e8c1d6cf6",
"IsContainer": false,
"useGravity": true,
"randomRotation": false,
"Position": {
"x": 92.3145,
"y": 3.3779,
"z": -17.606
},
"Rotation": {
"x": -0.0003,
"y": 105.6718,
"z": 228.0094
},
"IsGroupPosition": false,
"GroupPositions": [],
"IsAlwaysSpawn": false,
"Root": "665037adc139b4fe0a2f5a6c",
"Items": [
{
"_id": "665037affc12bfe0662b362b",
"_tpl": "65f484909638b1821d56149e"
}
]
},
"itemDistribution": [
{
"composedKey": {
"key": "665037affc12bfe0662b362b"
},
"relativeProbability": 3
}
]
},
{
"locationId": "(92.5457, 3.3778, -17.4563)",
"probability": 0.0000815232,
"template": {
"Id": "665037b61299defbc2bb7d50",
"IsContainer": false,
"useGravity": true,
"randomRotation": false,
"Position": {
"x": 92.5457,
"y": 3.3778,
"z": -17.4563
},
"Rotation": {
"x": 0.02,
"y": 231.0191,
"z": 174.213
},
"IsGroupPosition": false,
"GroupPositions": [],
"IsAlwaysSpawn": false,
"Root": "665037b9a4193746f8b55fd8",
"Items": [
{
"_id": "665037bc6437b3e76401fb33",
"_tpl": "65f484909638b1821d56149e"
}
]
},
"itemDistribution": [
{
"composedKey": {
"key": "665037bc6437b3e76401fb33"
},
"relativeProbability": 3
}
]
}
]
}

View File

@ -0,0 +1,57 @@
{
"ItemPresets": {
"65f484cd7d39950ce561bad4": {
"_changeWeaponName": false,
"_encyclopedia": "668b9c37adf8dd87dcd87df9",
"_id": "65f484cd7d39950ce561bad4",
"_items": [
{
"_id": "65f484d569e9a755c7c06bf2",
"_tpl": "668b9c37adf8dd87dcd87df9",
"upd": {
"FireMode": {
"FireMode": "single"
}
}
},
{
"_id": "3d98eada45977b1008bd60fe",
"_tpl": "668b9c27558936e864b4a504",
"parentId": "65f484d569e9a755c7c06bf2",
"slotId": "mod_sight_front",
"upd": {
"Sight": {
"ScopesCurrentCalibPointIndexes": [
0
],
"ScopesSelectedModes": [
0
],
"SelectedScope": 0
}
}
},
{
"_id": "0980a5e03a3b26542b77f091",
"_tpl": "668b9c1b327f6a93d2375db3",
"parentId": "65f484d569e9a755c7c06bf2",
"slotId": "mod_sight_rear",
"upd": {
"Sight": {
"ScopesCurrentCalibPointIndexes": [
0
],
"ScopesSelectedModes": [
0
],
"SelectedScope": 0
}
}
}
],
"_name": "RPG-7V2",
"_parent": "65f484d569e9a755c7c06bf2",
"_type": "Preset"
}
}
}

View File

@ -0,0 +1,261 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.mod = void 0;
const ItemTpl_1 = require("C:/snapshot/project/obj/models/enums/ItemTpl");
const Traders_1 = require("C:/snapshot/project/obj/models/enums/Traders");
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 Spawns_json_1 = __importDefault(require("../src/Spawns.json"));
const config_json_1 = __importDefault(require("../config/config.json"));
class Mod {
postDBLoad(container) {
const customitem = container.resolve("CustomItemService");
const databaseserver = container.resolve("DatabaseServer");
const db = databaseserver.getTables();
const globals = db.globals;
const PRP = db.traders[Traders_1.Traders.PRAPOR].assort;
//---WEAPON LISTING AND ATTACHMENT---
const weapon_rpg7 = {
itemTplToClone: "5e81ebcd8e146c7080625e15",
overrideProperties: {
BackgroundColor: "yellow",
AimPlane: 0.03,
AimSensitivity: 0.55,
CenterOfImpact: 0.4,
Chambers: [
{
"_id": "668b9c4618fcdec559709609",
"_mergeSlotWithChildren": false,
"_name": "patron_in_weapon",
"_parent": "668b9c37adf8dd87dcd87df9",
"_props": {
"filters": [
{
"Filter": [
"65f484909638b1821d56149e"
]
}
]
},
"_proto": "55d4af244bdc2d962f8b4571",
"_required": false
}
],
CompactHandling: false,
CanSellOnRagfair: false,
Ergonomics: 34,
Foldable: false,
Height: 2,
Width: 7,
IronSightRange: 50,
LootExperience: 35,
RecoilCenter: {
x: 0.039,
y: -0.016,
z: 0.024
},
RecoilForceBack: 68,
RecoilForceUp: 45,
RecoilDampingHandRotation: 0.75,
RecoilCamera: 0,
blockLeftStance: true,
RotationCenter: {
x: 0.039,
y: -0.016,
z: 0.024
},
RotationCenterNoStock: {
x: 0.039,
y: -0.016,
z: 0.024
},
Weight: 6.3,
defAmmo: "65f484909638b1821d56149e",
ammoCaliber: "Caliber40mm",
isBoltCatch: false,
Slots: [
{
"_id": "668b9c4169fa7f86b96a072f",
"_mergeSlotWithChildren": false,
"_name": "mod_sight_front",
"_parent": "668b9c37adf8dd87dcd87df9",
"_props": {
"filters": [
{
"Filter": [
"668b9c27558936e864b4a504"
],
"Shift": 0
}
]
},
"_proto": "55d30c4c4bdc2db4468b457e",
"_required": false
},
{
"_id": "668b9c2ee622e896622dd1cc",
"_mergeSlotWithChildren": false,
"_name": "mod_sight_rear",
"_parent": "668b9c37adf8dd87dcd87df9",
"_props": {
"filters": [
{
"Filter": [
"668b9c1b327f6a93d2375db3"
],
"Shift": 0
}
]
},
"_proto": "55d30c4c4bdc2db4468b457e",
"_required": false
}
],
Prefab: {
path: "rpg7/weapon_rpg7_container.bundle",
rcid: ""
}
},
parentId: "5447bedf4bdc2d87278b4568",
newId: "668b9c37adf8dd87dcd87df9",
handbookParentId: "5b5f79eb86f77447ed5636b7",
fleaPriceRoubles: 511073,
handbookPriceRoubles: 417322,
locales: {
"en": {
name: "RPG-7V2 \"Ruchnoy Protivotankovyy Granatomot\" Handheld Anti-Tank Grenade Launcher",
shortName: "RPG-7V2",
description: "The RPG-7 is a portable and reusable Shoulder launched rocket propelled grenade launcher. The ruggedness, simplicity, low cost, and effectiveness of the RPG-7 has made it the most widely used anti-armor weapon in the world. Currently around 40 countries use the weapon; it is manufactured in several variants by nine countries. It is popular with irregular and guerrilla forces. The RPG-7 can fire a variety of warheads for anti-armor or anti-personnel."
}
}
};
customitem.createItemFromClone(weapon_rpg7);
const sight_front_rpg7 = {
itemTplToClone: "5ba26b01d4351e0085325a51",
overrideProperties: {
AimSensitivity: [
[
0.55
]
],
Prefab: {
path: "rpg7/mod_front_sight_rpg7.bundle",
rcid: ""
},
SightingRange: 50
},
parentId: "55818ac54bdc2d5b648b456e",
newId: "668b9c27558936e864b4a504",
fleaPriceRoubles: 8755,
handbookPriceRoubles: 7544,
handbookParentId: "5b5f746686f77447ec5d7708",
locales: {
"en": {
name: "RPG-7 Standard Front Iron Sight",
shortName: "RPG-7 Iron",
description: "A standard issue iron sight made for RPG-7"
}
}
};
customitem.createItemFromClone(sight_front_rpg7);
const sight_rear_rpg7 = {
itemTplToClone: "5ba26b17d4351e00367f9bdd",
overrideProperties: {
AimSensitivity: [
[
0.55
]
],
Prefab: {
path: "rpg7/mod_rear_sight_rpg7.bundle",
rcid: ""
},
SightingRange: 50
},
parentId: "55818ac54bdc2d5b648b456e",
newId: "668b9c1b327f6a93d2375db3",
fleaPriceRoubles: 8755,
handbookPriceRoubles: 7544,
handbookParentId: "5b5f746686f77447ec5d7708",
locales: {
"en": {
name: "RPG-7 Standard Rear Iron Sight",
shortName: "RPG-7 Iron",
description: "A standard issue iron sight made for RPG-7"
}
}
};
customitem.createItemFromClone(sight_rear_rpg7);
const patron_pg7vl = {
itemTplToClone: "5ede474b0c226a66f5402622",
overrideProperties: {
ArmorDamage: 100,
AmmoLifeTimeSec: 60,
ArmorDistanceDistanceDamage: {
x: 1,
y: 5,
z: 26
},
CanSellOnRagfair: false,
Caliber: "Caliber93x40mm",
BallisticCoeficient: 0.078,
Damage: 210,
ExplosionStrength: 95,
FragmentsCount: 50,
FuzeArmTimeSec: 0.18,
FragmentType: "5996f6d686f77467977ba6cc",
Height: 1,
Width: 5,
InitialSpeed: 112,
MaxExplosionDistance: config_json_1.default.ExplosionMax,
MinExplosionDistance: config_json_1.default.ExplosionMin,
ExplosionType: "spg_explosion",
PenetrationPower: 0,
Prefab: {
path: "rpg7/patron_rpg7_pg7vl_93x40mm.bundle",
rcid: ""
},
ShowBullet: true,
ShowHitEffectOnExplode: true,
RemoveShellAfterFire: true,
Tracer: true,
TracerColor: "tracerRed",
Weight: 2.6
},
parentId: "5485a8684bdc2da71d8b4567",
newId: "65f484909638b1821d56149e",
fleaPriceRoubles: 86654,
handbookPriceRoubles: 75542,
handbookParentId: "5b47574386f77428ca22b33b",
locales: {
"en": {
name: "PG-7VL Anti-Tank HEAT Warhead",
shortName: "PG-7VL",
description: "RPG-7 Round with an improved HEAT warhead, most effective against light and some armored target. Not recommended to fire into human unless you want red mist."
}
}
};
customitem.createItemFromClone(patron_pg7vl);
//---MASTERY AND TRADER---
PRP.items.push(...Item_Preset_json_1.default.items);
for (const bsc in Item_Preset_json_1.default.barter_scheme) {
PRP.barter_scheme[bsc] = Item_Preset_json_1.default.barter_scheme[bsc];
}
for (const llv in Item_Preset_json_1.default.loyal_level_items) {
PRP.loyal_level_items[llv] = Item_Preset_json_1.default.loyal_level_items[llv];
}
//---Global Weapon Preset---
for (const itemPreset in global_item_preset_json_1.default.ItemPresets) {
globals.ItemPresets[itemPreset] = global_item_preset_json_1.default.ItemPresets[itemPreset];
}
db.locations.rezervbase.looseLoot.spawnpoints.push(...Spawns_json_1.default.spawnsRezerv);
//---For Other tidbits of manipulation---
db.templates.items[ItemTpl_1.ItemTpl.INVENTORY_DEFAULT]._props.Slots[0]._props.filters[0].Filter.push("668b9c37adf8dd87dcd87df9");
db.templates.items[ItemTpl_1.ItemTpl.INVENTORY_DEFAULT]._props.Slots[1]._props.filters[0].Filter.push("668b9c37adf8dd87dcd87df9");
}
}
exports.mod = new Mod();
//# sourceMappingURL=mod.js.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,281 @@
/* eslint-disable no-mixed-spaces-and-tabs */
/* eslint-disable @typescript-eslint/indent */
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 { ItemTpl } from "@spt/models/enums/ItemTpl";
import { Traders } from "@spt/models/enums/Traders";
import preset_file from "../src/Item_Preset.json";
import global_preset_file from "../src/global_item_preset.json";
import loot from "../src/Spawns.json";
import config from "../config/config.json";
class Mod implements IPostDBLoadMod
{
public postDBLoad(container: DependencyContainer): void
{
const customitem = container.resolve<CustomItemService>("CustomItemService");
const databaseserver = container.resolve<DatabaseServer>("DatabaseServer");
const db = databaseserver.getTables()
const globals = db.globals;
const PRP = db.traders[Traders.PRAPOR].assort;
//---WEAPON LISTING AND ATTACHMENT---
const weapon_rpg7: NewItemFromCloneDetails =
{
itemTplToClone: "5e81ebcd8e146c7080625e15",
overrideProperties: {
BackgroundColor: "yellow",
AimPlane: 0.03,
AimSensitivity: 0.55,
CenterOfImpact: 0.4,
Chambers: [
{
"_id": "668b9c4618fcdec559709609",
"_mergeSlotWithChildren": false,
"_name": "patron_in_weapon",
"_parent": "668b9c37adf8dd87dcd87df9",
"_props": {
"filters": [
{
"Filter": [
"65f484909638b1821d56149e"
]
}
]
},
"_proto": "55d4af244bdc2d962f8b4571",
"_required": false
}
],
CompactHandling: false,
CanSellOnRagfair: false,
Ergonomics: 34,
Foldable: false,
Height: 2,
Width: 7,
IronSightRange: 50,
LootExperience: 35,
RecoilCenter: {
x: 0.039,
y: -0.016,
z: 0.024
},
RecoilForceBack: 68,
RecoilForceUp: 45,
RecoilDampingHandRotation: 0.75,
RecoilCamera: 0,
blockLeftStance: true,
RotationCenter: {
x: 0.039,
y: -0.016,
z: 0.024
},
RotationCenterNoStock: {
x: 0.039,
y: -0.016,
z: 0.024
},
Weight: 6.3,
defAmmo: "65f484909638b1821d56149e",
ammoCaliber: "Caliber40mm",
isBoltCatch: false,
Slots: [
{
"_id": "668b9c4169fa7f86b96a072f",
"_mergeSlotWithChildren": false,
"_name": "mod_sight_front",
"_parent": "668b9c37adf8dd87dcd87df9",
"_props": {
"filters": [
{
"Filter": [
"668b9c27558936e864b4a504"
],
"Shift": 0
}
]
},
"_proto": "55d30c4c4bdc2db4468b457e",
"_required": false
},
{
"_id": "668b9c2ee622e896622dd1cc",
"_mergeSlotWithChildren": false,
"_name": "mod_sight_rear",
"_parent": "668b9c37adf8dd87dcd87df9",
"_props": {
"filters": [
{
"Filter": [
"668b9c1b327f6a93d2375db3"
],
"Shift": 0
}
]
},
"_proto": "55d30c4c4bdc2db4468b457e",
"_required": false
}
],
Prefab: {
path: "rpg7/weapon_rpg7_container.bundle",
rcid: ""
}
},
parentId: "5447bedf4bdc2d87278b4568",
newId: "668b9c37adf8dd87dcd87df9",
handbookParentId: "5b5f79eb86f77447ed5636b7",
fleaPriceRoubles: 511073,
handbookPriceRoubles: 417322,
locales: {
"en": {
name: "RPG-7V2 \"Ruchnoy Protivotankovyy Granatomot\" Handheld Anti-Tank Grenade Launcher",
shortName: "RPG-7V2",
description: "The RPG-7 is a portable and reusable Shoulder launched rocket propelled grenade launcher. The ruggedness, simplicity, low cost, and effectiveness of the RPG-7 has made it the most widely used anti-armor weapon in the world. Currently around 40 countries use the weapon; it is manufactured in several variants by nine countries. It is popular with irregular and guerrilla forces. The RPG-7 can fire a variety of warheads for anti-armor or anti-personnel."
}
}
}
customitem.createItemFromClone(weapon_rpg7);
const sight_front_rpg7: NewItemFromCloneDetails ={
itemTplToClone: "5ba26b01d4351e0085325a51",
overrideProperties: {
AimSensitivity: [
[
0.55
]
],
Prefab: {
path: "rpg7/mod_front_sight_rpg7.bundle",
rcid: ""
},
SightingRange: 50
},
parentId: "55818ac54bdc2d5b648b456e",
newId: "668b9c27558936e864b4a504",
fleaPriceRoubles: 8755,
handbookPriceRoubles: 7544,
handbookParentId: "5b5f746686f77447ec5d7708",
locales: {
"en":
{
name: "RPG-7 Standard Front Iron Sight",
shortName: "RPG-7 Iron",
description: "A standard issue iron sight made for RPG-7"
}
}
}
customitem.createItemFromClone(sight_front_rpg7);
const sight_rear_rpg7: NewItemFromCloneDetails ={
itemTplToClone: "5ba26b17d4351e00367f9bdd",
overrideProperties: {
AimSensitivity: [
[
0.55
]
],
Prefab: {
path: "rpg7/mod_rear_sight_rpg7.bundle",
rcid: ""
},
SightingRange: 50
},
parentId: "55818ac54bdc2d5b648b456e",
newId: "668b9c1b327f6a93d2375db3",
fleaPriceRoubles: 8755,
handbookPriceRoubles: 7544,
handbookParentId: "5b5f746686f77447ec5d7708",
locales: {
"en":
{
name: "RPG-7 Standard Rear Iron Sight",
shortName: "RPG-7 Iron",
description: "A standard issue iron sight made for RPG-7"
}
}
}
customitem.createItemFromClone(sight_rear_rpg7);
const patron_pg7vl: NewItemFromCloneDetails ={
itemTplToClone: "5ede474b0c226a66f5402622",
overrideProperties: {
ArmorDamage: 100,
AmmoLifeTimeSec: 60,
ArmorDistanceDistanceDamage: {
x: 1,
y: 5,
z: 26
},
CanSellOnRagfair: false,
Caliber: "Caliber93x40mm",
BallisticCoeficient: 0.078,
Damage: 210,
ExplosionStrength: 95,
FragmentsCount: 50,
FuzeArmTimeSec: 0.18,
FragmentType: "5996f6d686f77467977ba6cc",
Height: 1,
Width: 5,
InitialSpeed: 112,
MaxExplosionDistance: config.ExplosionMax,
MinExplosionDistance: config.ExplosionMin,
ExplosionType: "rpg_explosion",
PenetrationPower: 0,
Prefab: {
path: "rpg7/patron_rpg7_pg7vl_93x40mm.bundle",
rcid: ""
},
ShowBullet: true,
ShowHitEffectOnExplode: true,
RemoveShellAfterFire: true,
Tracer: true,
TracerColor: "tracerRed",
Weight: 2.6
},
parentId: "5485a8684bdc2da71d8b4567",
newId: "65f484909638b1821d56149e",
fleaPriceRoubles: 86654,
handbookPriceRoubles: 75542,
handbookParentId: "5b47574386f77428ca22b33b",
locales: {
"en":
{
name: "PG-7VL Anti-Tank HEAT Warhead",
shortName: "PG-7VL",
description: "RPG-7 Round with an improved HEAT warhead, most effective against light and some armored target. Not recommended to fire into human unless you want red mist."
}
}
}
customitem.createItemFromClone(patron_pg7vl);
//---MASTERY AND TRADER---
PRP.items.push(...preset_file.items);
for (const bsc in preset_file.barter_scheme)
{
PRP.barter_scheme[bsc] = preset_file.barter_scheme[bsc];
}
for (const llv in preset_file.loyal_level_items)
{
PRP.loyal_level_items[llv] = preset_file.loyal_level_items[llv];
}
//---Global Weapon Preset---
for (const itemPreset in global_preset_file.ItemPresets)
{
globals.ItemPresets[itemPreset] = global_preset_file.ItemPresets[itemPreset];
}
db.locations.rezervbase.looseLoot.spawnpoints.push(...loot.spawnsRezerv);
//---For Other tidbits of manipulation---
db.templates.items[ItemTpl.INVENTORY_DEFAULT]._props.Slots[0]._props.filters[0].Filter.push("668b9c37adf8dd87dcd87df9");
db.templates.items[ItemTpl.INVENTORY_DEFAULT]._props.Slots[1]._props.filters[0].Filter.push("668b9c37adf8dd87dcd87df9");
}
}
export const mod = new Mod();

View File

@ -23,6 +23,7 @@
-AI & Combat Tweaks_separator
+Weapon Customizer
+Little Drummer Boy
+RPG-7
+SVD
+M249
+AK-5C
@ -30,6 +31,7 @@
+Armsel Striker-12
+Kel-Tec KSG-12
+China Lake
+Peacemaker
-New Weapons & Gear_separator
+Ref SPT Friendly Quests
-New Traders & Tweaks_separator

View File

@ -23,6 +23,7 @@
+AI & Combat Tweaks_separator
-Weapon Customizer
+Little Drummer Boy
+RPG-7
+SVD
+M249
+AK-5C
@ -30,6 +31,7 @@
+Armsel Striker-12
+Kel-Tec KSG-12
+China Lake
+Peacemaker
+New Weapons & Gear_separator
+Ref SPT Friendly Quests
+New Traders & Tweaks_separator