Skip to content

Instantly share code, notes, and snippets.

@MerijnHendriks
Last active November 4, 2020 13:46
Show Gist options
  • Select an option

  • Save MerijnHendriks/ac8dba12c21b87d8af9ff702be795351 to your computer and use it in GitHub Desktop.

Select an option

Save MerijnHendriks/ac8dba12c21b87d8af9ff702be795351 to your computer and use it in GitHub Desktop.
Example weapon mod for SPT-AKI Alpha R5
/* mod.js
* license: NCSA
* copyright: Senko's Pub
* website: https://www.guilded.gg/senkospub
* authors:
* - Senko-san (Merijn Hendriks)
*/
class Mod
{
constructor()
{
this.modname = "senko-ar57";
common_f.logger.logInfo(`Loading: ${this.modname}`);
core_f.packager.onLoad[this.modname] = this.load.bind(this);
}
load()
{
// get allowed ammo from p90
const ammo = common_f.json.clone(database_f.server.tables.templates.items["5cc82d76e24e8d00134b4b83"]
._props.Chambers[0]._props.filters[0].Filter);
// register item templates
this.createMagItemTemplate("senko_ar57_mag", "59c1383d86f774290a37e0ca", 80, ammo);
this.createBarrelItemTemplate();
this.createUpperItemTemplate();
this.createReceiverItemTemplate(ammo);
// register weapon preset
this.createWeaponPreset("senko_ar57_default");
// register handbook templates
this.createHandbookTemplate("senko_ar57_mag", "59c1383d86f774290a37e0ca", 1);
this.createHandbookTemplate("senko_ar57_barrel", "58aeaaa886f7744fc1560f81", 1);
this.createHandbookTemplate("senko_ar57_upper", "5c07a8770db8340023300450", 1);
this.createHandbookTemplate("senko_ar57_receiver", "5447a9cd4bdc2dbd208b4567", 1);
// register flea market offer
this.createTraderOffer("senko_ar57_mag", "ragfair");
this.createTraderOffer("senko_ar57_barrel", "ragfair");
this.createTraderOffer("senko_ar57_upper", "ragfair");
this.createTraderOffer("senko_ar57_receiver", "ragfair");
}
createHandbookTemplate(id, template, price)
{
// clone handbook template
let item = database_f.server.tables.templates.handbook.Items.find((t) => {
return t.Id === template;
});
item.Id = id;
item.Price = price;
// add new handbook template to database
database_f.server.tables.templates.handbook.Items[id] = item;
}
createTraderOffer(id, trader)
{
// add item
database_f.server.tables.traders[trader].assort.items.push({
"_id": id,
"_tpl": id,
"parentId": "hideout",
"slotId": "hideout",
"upd": {
"UnlimitedCount": true,
"StackObjectsCount": 999999999
}
});
// add purchase cost
database_f.server.tables.traders[trader].assort.barter_scheme[id] = [
[
{
"count": database_f.server.tables.templates.handbook.Items[id].Price,
"_tpl": "5449016a4bdc2d6f028b456f"
}
]
]
// add trader standing requirement
database_f.server.tables.traders.ragfair.assort.loyal_level_items[id] = 1;
}
createWeaponPreset(id)
{
//
}
createMagItemTemplate(id, template, size, ammo)
{
// clone item template
let item = common_f.json.clone(database_f.server.tables.templates.items[template]);
// basic properties
item._id = id;
item._name = id;
// set size
item._props.Cartridges[0]._max_count = size;
// set allowed ammo
item._props.Cartridges[0]._props.filters[0].Filter = ammo;
// add new item template to database
database_f.server.tables.templates.items[id] = item;
}
createBarrelItemTemplate()
{
// clone MPX-SD barrel
let item = common_f.json.clone(database_f.server.tables.templates.items["58aeaaa886f7744fc1560f81"]);
// basic properties
item._id = "senko_ar57_barrel";
item._name = item._id;
// set allowed muzzles
item._props.Slots[0]._props.filters[0].Filter = [
"5cc82796e24e8d000f5859a8",
];
// add new item template to database
database_f.server.tables.templates.items[item._id] = item;
}
createUpperItemTemplate()
{
// clone noveske ar15 upper
let item = common_f.json.clone(database_f.server.tables.templates.items["5c07a8770db8340023300450"]);
// basic properties
item._id = "senko_ar57_upper";
item._name = item._id;
// set allowed barrels
item._props.Slots[1]._props.filters[0].Filter = [
"senko_ar57_barrel",
];
// set allowed handguards
item._props.Slots[1]._props.filters[0].Filter = [
"5d123102d7ad1a004e475fe5"
];
// add new item template to database
database_f.server.tables.templates.items[item._id] = item;
}
createReceiverItemTemplate(ammo)
{
// clone cold m4 receiver
let item = common_f.json.clone(database_f.server.tables.templates.items["5447a9cd4bdc2dbd208b4567"]);
// basic properties
item._id = "senko_ar57_receiver";
item._name = item._id;
// set ammo type
item._props.ammoCaliber = "Caliber57x28";
// set allowed ammo
item._props.Chambers[0]._props.filters[0].Filter = ammo;
// set allowed mags
item._props.Slots[1]._props.filters[0].Filter = [
"senko_ar57_mag"
];
// set allowed uppers
item._props.Slots[2]._props.filters[0].Filter = [
"senko_ar57_upper"
];
// set allowed charging handles
item._props.Slots[4]._props.filters[0].Filter = [
"5d44334ba4b9362b346d1948"
];
// add new item template to databases
database_f.server.tables.templates.items[item._id] = item;
}
}
module.exports.Mod = Mod;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment