• Updated Load Order
• Added Lotus Trader Mod • Added Stash Search • Created SVM Preset
|
@ -1,3 +1,28 @@
|
||||||
{
|
{
|
||||||
"order": []
|
"order": [
|
||||||
|
"fika-server",
|
||||||
|
"Virtual's Custom Quest Loader",
|
||||||
|
"[SVM] Server Value Modifier",
|
||||||
|
"tyfon-uifixes",
|
||||||
|
"SPTDynamicMaps",
|
||||||
|
"acidphantasm-bosseshavelegamedals",
|
||||||
|
"acidphantasm-brightlasers",
|
||||||
|
"acidphantasm-refsptfriendlyquests",
|
||||||
|
"acidphantasm-simpleworkoutqte",
|
||||||
|
"Lunnayaluna Lotus",
|
||||||
|
"boogle-skeletonkey",
|
||||||
|
"BRNVG_N-15Adapter",
|
||||||
|
"choccy-chinalake-1.0.2",
|
||||||
|
"choccy-ksg12-1.0.7",
|
||||||
|
"choccy-poseservcomp-1.0.1",
|
||||||
|
"choccy-saa",
|
||||||
|
"choccy-striker-1.0.6",
|
||||||
|
"choccy-type64-1.0.0",
|
||||||
|
"MoxoPixel-TMS",
|
||||||
|
"tyfon-weaponcustomizer",
|
||||||
|
"inory-dynamicgoons",
|
||||||
|
"ChooChoo-TraderModding",
|
||||||
|
"acidphantasm-botplacementsystem",
|
||||||
|
"drunkgeko-gekos_betterprogression"
|
||||||
|
]
|
||||||
}
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
[General]
|
||||||
|
gameName=spt
|
||||||
|
modid=0
|
||||||
|
version=d2025.5.16.0
|
||||||
|
newestVersion=
|
||||||
|
category="-1,"
|
||||||
|
nexusFileStatus=1
|
||||||
|
installationFile=Load.Order.Editor.zip
|
||||||
|
repository=Nexus
|
||||||
|
ignoredVersion=
|
||||||
|
comments=
|
||||||
|
notes=
|
||||||
|
nexusDescription=
|
||||||
|
url=
|
||||||
|
hasCustomURL=true
|
||||||
|
lastNexusQuery=
|
||||||
|
lastNexusUpdate=
|
||||||
|
nexusLastModified=2025-05-17T00:15:11Z
|
||||||
|
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,28 @@
|
||||||
|
[General]
|
||||||
|
gameName=spt
|
||||||
|
modid=0
|
||||||
|
version=d2025.5.16.0
|
||||||
|
newestVersion=
|
||||||
|
category="-1,"
|
||||||
|
nexusFileStatus=1
|
||||||
|
installationFile=Lotus_v1.5.3_for_SPT_3.11_by_Lunnayaluna.7z
|
||||||
|
repository=Nexus
|
||||||
|
ignoredVersion=
|
||||||
|
comments=
|
||||||
|
notes=
|
||||||
|
nexusDescription=
|
||||||
|
url=
|
||||||
|
hasCustomURL=true
|
||||||
|
lastNexusQuery=
|
||||||
|
lastNexusUpdate=
|
||||||
|
nexusLastModified=2025-05-17T00:08:48Z
|
||||||
|
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,18 @@
|
||||||
|
{
|
||||||
|
"manifest": [
|
||||||
|
{
|
||||||
|
"key": "assets/content/items/item_keycard_labs_spec.bundle",
|
||||||
|
"dependencyKeys": [
|
||||||
|
"assets/commonassets/physics/physicsmaterials.bundle",
|
||||||
|
"assets/content/items/spec/item_keycard_lab/item_keycard_lab_gloss_nrm",
|
||||||
|
"assets/content/items/item_keycard_lab_mesh",
|
||||||
|
"cubemaps",
|
||||||
|
"shaders"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "assets/content/items/item_keycard_lab_mesh",
|
||||||
|
"dependencyKeys": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
BIN
mods/Lotus/user/mods/Lunnayaluna Lotus/bundles/assets/content/items/item_keycard_labs_spec.bundle (Stored with Git LFS)
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
{
|
||||||
|
"6747b519aa6cb78b189e6081": {
|
||||||
|
"ItemToClone": "KEYCARD_ACCESS",
|
||||||
|
"OverrideProperties": {
|
||||||
|
"Prefab": {
|
||||||
|
"path": "assets/content/items/spec/item_keycard_lab/item_keycard_lab_white_sanitar.bundle",
|
||||||
|
"rcid": ""
|
||||||
|
},
|
||||||
|
"MaximumNumberOfUsage": 0
|
||||||
|
},
|
||||||
|
"LocalePush": {
|
||||||
|
"en": {
|
||||||
|
"name": "Lotus' Custom Labs Access Card",
|
||||||
|
"shortName": "LotusCC",
|
||||||
|
"description": "A custom access keycard for the Terragroup Lab, a place filled with treasure and danger. This card has been modified by Lotus and does not have any limited uses unlike the normal access cards. Whoever owns this keycard will not have to worry about buying or finding normal access cards ever again."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Handbook": {
|
||||||
|
"HandbookParent": "ElectronicKeys",
|
||||||
|
"HandbookPrice": 3450000
|
||||||
|
},
|
||||||
|
"CloneToFilters": true,
|
||||||
|
"PushToFleaBlacklist": true,
|
||||||
|
"CasePush": {
|
||||||
|
"CaseFiltersToAdd": [
|
||||||
|
"CONTAINER_DOCS",
|
||||||
|
"CONTAINER_SICC",
|
||||||
|
"CONTAINER_WALLET",
|
||||||
|
"CONTAINER_WZ",
|
||||||
|
"CONTAINER_KEYCARDS"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,167 @@
|
||||||
|
{
|
||||||
|
"_id": "6747208ef022cbbfc65c41bf",
|
||||||
|
"working": true,
|
||||||
|
"availableInRaid": false,
|
||||||
|
"items_buy": {
|
||||||
|
"category": [
|
||||||
|
"644120aa86ffbe10ee032b6f",
|
||||||
|
"5c164d2286f774194c5e69fa",
|
||||||
|
"5a341c4086f77401f2541505",
|
||||||
|
"590c745b86f7743cc433c5f2",
|
||||||
|
"543be5cb4bdc2deb348b4568",
|
||||||
|
"5485a8684bdc2da71d8b4567",
|
||||||
|
"5645bcb74bdc2ded0b8b4578",
|
||||||
|
"5448ecbe4bdc2d60728b4568",
|
||||||
|
"55818ae44bdc2dde698b456c",
|
||||||
|
"55818b014bdc2ddc698b456b",
|
||||||
|
"5448bc234bdc2d3c308b4569",
|
||||||
|
"5448f3a64bdc2d60728b456a",
|
||||||
|
"5448f3a14bdc2d27728b4569",
|
||||||
|
"616eb7aea207f41933308f46",
|
||||||
|
"5448e53e4bdc2d60728b4567",
|
||||||
|
"5447e1d04bdc2dff2f8b4567"
|
||||||
|
],
|
||||||
|
"id_list": [
|
||||||
|
"59faff1d86f7746c51718c9c",
|
||||||
|
"567143bf4bdc2d1a0f8b4567",
|
||||||
|
"6656560053eaaa7a23349c86",
|
||||||
|
"67408903268737ef6908d432",
|
||||||
|
"67449b6c89d5e1ddc603f504"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"items_buy_prohibited": {
|
||||||
|
"category": [],
|
||||||
|
"id_list": [
|
||||||
|
"62e910aaf957f2915e0a5e36",
|
||||||
|
"64d0b40fbe2eed70e254e2d4",
|
||||||
|
"65ddcc9cfa85b9f17d0dfb07",
|
||||||
|
"65ca457b4aafb5d7fc0dcb5d",
|
||||||
|
"660312cc4d6cdfa6f500c703",
|
||||||
|
"660bbc98c38b837877075e4a",
|
||||||
|
"660bc341c38b837877075e4c",
|
||||||
|
"6638a5474e92f038531e210e",
|
||||||
|
"66bc98a01a47be227a5e956e",
|
||||||
|
"6655e35b6bc645cb7b059912",
|
||||||
|
"666879d498b97e3a8f09f1ae",
|
||||||
|
"6399f54b0a36db13c823ad21",
|
||||||
|
"66687bc89111279d600b5062",
|
||||||
|
"66d98233302686954b0c6f81",
|
||||||
|
"6707d0bdaab679420007e01a",
|
||||||
|
"6707d0804e617ec94f0e562f",
|
||||||
|
"67408903268737ef6908d432",
|
||||||
|
"67614b542eb91250020f2b86",
|
||||||
|
"67614b6b47c71ea3d40256d7"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"customization_seller": false,
|
||||||
|
"name": "unknown",
|
||||||
|
"surname": "unknown",
|
||||||
|
"nickname": "Lotus",
|
||||||
|
"location": "Located in a hidden camp somewhere at the outskirts of the city",
|
||||||
|
"avatar": "/files/trader/avatar/lotus.png",
|
||||||
|
"balance_rub": 92502500,
|
||||||
|
"balance_dol": 262100,
|
||||||
|
"balance_eur": 175300,
|
||||||
|
"unlockedByDefault": true,
|
||||||
|
"discount": 0,
|
||||||
|
"discount_end": 0,
|
||||||
|
"buyer_up": true,
|
||||||
|
"currency": "RUB",
|
||||||
|
"nextResupply": 1615141448,
|
||||||
|
"repair": {
|
||||||
|
"availability": false,
|
||||||
|
"quality": "0",
|
||||||
|
"excluded_id_list": [],
|
||||||
|
"excluded_category": [],
|
||||||
|
"currency": "5449016a4bdc2d6f028b456f",
|
||||||
|
"currency_coefficient": 1,
|
||||||
|
"price_rate": 1.5
|
||||||
|
},
|
||||||
|
"insurance": {
|
||||||
|
"availability": false,
|
||||||
|
"min_payment": 0,
|
||||||
|
"min_return_hour": 0,
|
||||||
|
"max_return_hour": 1,
|
||||||
|
"max_storage_time": 144,
|
||||||
|
"excluded_category": []
|
||||||
|
},
|
||||||
|
"gridHeight": 300,
|
||||||
|
"loyaltyLevels": [
|
||||||
|
{
|
||||||
|
"minLevel": 0,
|
||||||
|
"minSalesSum": 0,
|
||||||
|
"minStanding": 0,
|
||||||
|
"buy_price_coef": 40,
|
||||||
|
"repair_price_coef": 150,
|
||||||
|
"insurance_price_coef": 10,
|
||||||
|
"exchange_price_coef": 0,
|
||||||
|
"heal_price_coef": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"minLevel": 22,
|
||||||
|
"minSalesSum": 1150000,
|
||||||
|
"minStanding": 0.50,
|
||||||
|
"buy_price_coef": 39,
|
||||||
|
"repair_price_coef": 160,
|
||||||
|
"insurance_price_coef": 13,
|
||||||
|
"exchange_price_coef": 0,
|
||||||
|
"heal_price_coef": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"minLevel": 33,
|
||||||
|
"minSalesSum": 5250000,
|
||||||
|
"minStanding": 1.00,
|
||||||
|
"buy_price_coef": 38,
|
||||||
|
"repair_price_coef": 170,
|
||||||
|
"insurance_price_coef": 15,
|
||||||
|
"exchange_price_coef": 0,
|
||||||
|
"heal_price_coef": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"minLevel": 44,
|
||||||
|
"minSalesSum": 7500000,
|
||||||
|
"minStanding": 1.50,
|
||||||
|
"buy_price_coef": 36,
|
||||||
|
"repair_price_coef": 200,
|
||||||
|
"insurance_price_coef": 20,
|
||||||
|
"exchange_price_coef": 0,
|
||||||
|
"heal_price_coef": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"sell_category": [
|
||||||
|
"82e7fac0b7495d72d4083356",
|
||||||
|
"ac705d3440c1407645e33579",
|
||||||
|
"dc97aee367144dc03389405d",
|
||||||
|
"7ffcc96aa06c7e90940330c5",
|
||||||
|
"e8f46e3ad74b9d862121f9dc",
|
||||||
|
"5b47574386f77428ca22b33e",
|
||||||
|
"5b47574386f77428ca22b33f",
|
||||||
|
"5b5f78dc86f77409407a7f8e",
|
||||||
|
"5b47574386f77428ca22b346",
|
||||||
|
"5b47574386f77428ca22b340",
|
||||||
|
"5b47574386f77428ca22b344",
|
||||||
|
"5b47574386f77428ca22b342",
|
||||||
|
"5b47574386f77428ca22b341",
|
||||||
|
"5b47574386f77428ca22b345",
|
||||||
|
"5b47574386f77428ca22b343",
|
||||||
|
"5b5f71b386f774093f2ecf11",
|
||||||
|
"5b5f71c186f77409407a7ec0",
|
||||||
|
"5b5f71de86f774093f2ecf13",
|
||||||
|
"5b5f724186f77447ed5636ad",
|
||||||
|
"5b5f736886f774094242f193",
|
||||||
|
"5b5f73ec86f774093e6cb4fd",
|
||||||
|
"5b5f74cc86f77447ec5d770a",
|
||||||
|
"5b5f750686f774093e6cb503",
|
||||||
|
"5b5f751486f77447ec5d770c",
|
||||||
|
"5b5f752e86f774093e6cb505",
|
||||||
|
"5b5f754a86f774094242f19b",
|
||||||
|
"5b5f755f86f77447ec5d770e",
|
||||||
|
"5b5f757486f774093e6cb507",
|
||||||
|
"5b5f75b986f77447ec5d7710",
|
||||||
|
"5b5f75c686f774094242f19f",
|
||||||
|
"5b5f75e486f77447ec5d7712",
|
||||||
|
"5b5f760586f774093e6cb509",
|
||||||
|
"5b5f761f86f774094242f1a1",
|
||||||
|
"5b5f764186f77447ec5d7714"
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,581 @@
|
||||||
|
{
|
||||||
|
"started": {
|
||||||
|
"674c97857f760607b0dd4902": "6747c182942fe0faa5478a5e",
|
||||||
|
"66eff8aa50dfc0866a7daf78": "6747c182942fe0faa5478a5e",
|
||||||
|
"66efe4bfbf3cb458208daf74": "6747b9634c79e7f73963b99f",
|
||||||
|
"66efe4ce3e414620786eac92": "6747b9634c79e7f73963b99f",
|
||||||
|
"66efe47b5f041051cd983d37": "6747b9634c79e7f73963b99f",
|
||||||
|
"66efe4d617752580f7f8e38a": "6747b9634c79e7f73963b99f",
|
||||||
|
"676b0c3a3bf304703421b09a": "676b0de9ab6151bd15ce350e",
|
||||||
|
"675dabf3d039190cb9cd6f09": "676b0de9ab6151bd15ce350e",
|
||||||
|
"675dabf18795c931ffd2bb32": "676b0de9ab6151bd15ce350e"
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"677d6f344eba3113fad7afd4": "67d769c37a074517a838b60b",
|
||||||
|
"66eff139198e0f981fd8bddc": "67d769c37a074517a838b60b",
|
||||||
|
"67d6f82faa2cba2cbc043cce": "677eed2aa7eeba8a46e225c3",
|
||||||
|
"67d729ae26544bbb8d36a132": "677eed2aa7eeba8a46e225c3",
|
||||||
|
"67d729a8774e6b19ab9d399f": "67d7fa81e32b6be5326c4935",
|
||||||
|
"67d6bb2a7da52a42b80387cd": "67d7fa81e32b6be5326c4935",
|
||||||
|
"67d729abf4047b1501c8fe2f": "67d7ffac0a45f6fea894beb7",
|
||||||
|
"67d6bbc47da52a42b803a44e": "67d7ffac0a45f6fea894beb7",
|
||||||
|
"66eff992d1763d88c6fbbd08": "67618f93c508b3ae798a0239",
|
||||||
|
"6754d9fa3fcb3b6223bf2c42": "67618f93c508b3ae798a0239",
|
||||||
|
"67e71beb559e4663b5d6c6b0": "67618f93c508b3ae798a0239",
|
||||||
|
"677d58ceb88b111be404fea3": "675a456b801bb92dae60542e",
|
||||||
|
"67e71be704cbf4039c57d095": "675a456b801bb92dae60542e",
|
||||||
|
"66eff1c1904c3b055d9bff50": "67618aad83c2ba931e036514",
|
||||||
|
"67df1b25e02887c6a302eab7": "67618aad83c2ba931e036514",
|
||||||
|
"67488c8a3d4575614519b0cf": "67618aad83c2ba931e036514",
|
||||||
|
"674b8cabbbce13c57f50283e": "67618aad83c2ba931e036514",
|
||||||
|
"67e71947f1d1c07003a77c40": "6761944135ddfb7470a330e4",
|
||||||
|
"67e71bce37b65260fd73cffd": "6761944135ddfb7470a330e4",
|
||||||
|
"67e71bd1dfd75050170d6fa8": "6761944135ddfb7470a330e4",
|
||||||
|
"674dd678e965dc1492bd13b7": "6761ab808567eefeff44ec2a",
|
||||||
|
"66eff45f8d5b23b762c6aecb": "6761ab808567eefeff44ec2a",
|
||||||
|
"67e71bdd96a5d48897c4f069": "6761af40a082b41fbbe3e001",
|
||||||
|
"67e71be02135fdea47216568": "6761af40a082b41fbbe3e001",
|
||||||
|
"674bb87f8b689bf5192b43b7": "6761af40a082b41fbbe3e001",
|
||||||
|
"66eff5b91f9edf144d44bacb": "6761af40a082b41fbbe3e001",
|
||||||
|
"67e71bc98011a032322c159e": "6761b116ffdb1b7a8a15d224",
|
||||||
|
"67e71be3c55af249b9c5d663": "6761b116ffdb1b7a8a15d224",
|
||||||
|
"677d6314eb8d168f97d00c15": "6761b116ffdb1b7a8a15d224",
|
||||||
|
"674bb50d068a122f59ee9aca": "6761b2806123cbc248407012",
|
||||||
|
"67e71bc01df477340499a5fd": "6761b2806123cbc248407012",
|
||||||
|
"67e6f903c3577b1828ba7613": "6761b2806123cbc248407012",
|
||||||
|
"6754ceb7817738ad714c7bcb": "6761b2806123cbc248407012",
|
||||||
|
"67e71beec875a8ffdbb94399": "6761b415c09eec912bb4de63",
|
||||||
|
"67e7194d1fcd737cab43f19b": "6761b415c09eec912bb4de63",
|
||||||
|
"67dc6ff857d1a75cedb44c30": "6761b415c09eec912bb4de63",
|
||||||
|
"67e719412c32083b92cf2e0a": "6761b5c9b3bcd9ade203f808",
|
||||||
|
"67e71950ee36c5f9f02eeb43": "6761b5c9b3bcd9ade203f808",
|
||||||
|
"66eff82d47023e20a020aa8a": "6761b5c9b3bcd9ade203f808",
|
||||||
|
"677d6f3a4ba00ac053a9a889": "6761b5c9b3bcd9ade203f808",
|
||||||
|
"677d64eeb88b111be40927a6": "6761b7767e572e2e09758ad0",
|
||||||
|
"674dfe0098b51b32f87df736": "6761b7767e572e2e09758ad0",
|
||||||
|
"67e6f90015cfac219b594f4f": "6761ba4e01c1c7be63671968",
|
||||||
|
"67e71957eddfd7eb85f5d3cc": "6761ba4e01c1c7be63671968",
|
||||||
|
"67e7195368ce82b06c9c4e1c": "6761ba4e01c1c7be63671968",
|
||||||
|
"66eff2612f88c41f05d2ff57": "6761bd93d87008565f79d473",
|
||||||
|
"674b7a0072ec3529d003cf8c": "6761bd93d87008565f79d473",
|
||||||
|
"66eff3df6d72f3dd6f5276f7": "6761bd93d87008565f79d473",
|
||||||
|
"674ca7601b2588688403dc79": "6761bd93d87008565f79d473",
|
||||||
|
"677d6f37bd96bf8ae7938f37": "6761c02c5d4826402dd81b96",
|
||||||
|
"66eff5ec05413fd9ba61ec09": "6761c02c5d4826402dd81b96",
|
||||||
|
"6748cc7acca993770803f48c": "6761c02c5d4826402dd81b96",
|
||||||
|
"677d6f40a577c7f7de3de9e0": "6761c1e41e5ad9a96c8921a3",
|
||||||
|
"67d6f6d4aa2cba2cbc03f434": "6761c1e41e5ad9a96c8921a3",
|
||||||
|
"67e71bbce0a6c5cddc60ca0f": "6761c1e41e5ad9a96c8921a3",
|
||||||
|
"67e71bc3e45dc3f35c77c854": "6761c1e41e5ad9a96c8921a3",
|
||||||
|
"66eff298ac656a51c76dcd02": "67e7223dc0c2680d41126188",
|
||||||
|
"66eff60c3f784cf04593512e": "67e7223dc0c2680d41126188",
|
||||||
|
"67e71bc6ae802ced300a8827": "67e7223dc0c2680d41126188",
|
||||||
|
"66eff5c7e768197eac1042e2": "67e7223dc0c2680d41126188",
|
||||||
|
"66eff3ef3e9a3ceaff02fabe": "67e72254ae7dd39115ac0b81",
|
||||||
|
"66eff85512ad20db458a91ca": "67e72254ae7dd39115ac0b81",
|
||||||
|
"66eff3ead4c30a8cd1662152": "67e72254ae7dd39115ac0b81",
|
||||||
|
"67d6f8d5aa2cba2cbc04653d": "67e7226a6e39d7ec249b3773",
|
||||||
|
"66eff434682a3743835f1bd1": "67e7226a6e39d7ec249b3773",
|
||||||
|
"674df94b93bee9949b1a9b42": "67e7226a6e39d7ec249b3773",
|
||||||
|
"67623fde0c5be6042a8bc211": "67e96d27ddd9ca3c4adbb5d4",
|
||||||
|
"6748cc18cca993770803e661": "67e96d27ddd9ca3c4adbb5d4",
|
||||||
|
"66efe8f030f38189443e6c83": "67e96d27ddd9ca3c4adbb5d4",
|
||||||
|
"66eff04e0d904d9199841acd": "67e972c039c5f34295a24265",
|
||||||
|
"6766e7f4ecb1c446f310fe6f": "67e972c039c5f34295a24265",
|
||||||
|
"67d7e4102f9296b30114c1bf": "67e972c039c5f34295a24265",
|
||||||
|
"675dabee60219947891dff64": "67e970f55882098f5a4a622b",
|
||||||
|
"66eff7bc11ebe46cb62dce1a": "67e970f55882098f5a4a622b",
|
||||||
|
"66eff8cf80e55596f038546f": "67ea813bd8d2dc676746f53e",
|
||||||
|
"66eff8b48e49a7c58674c7f4": "67ea813bd8d2dc676746f53e",
|
||||||
|
"67d6f87baa2cba2cbc0457e3": "67ea813bd8d2dc676746f53e",
|
||||||
|
"674ca7201b2588688403cf00": "67ee61b9f56b571ce703eec4",
|
||||||
|
"66efe76de2be0a374b00f619": "67ee61b9f56b571ce703eec4",
|
||||||
|
"66efeb2a4af1d1bba2953020": "67ee61bb0084128bf23f5477",
|
||||||
|
"677d6f43403a5ccd069707d5": "67ee61bb0084128bf23f5477",
|
||||||
|
"677d64d3b88b111be409167b": "67ee61bb0084128bf23f5477",
|
||||||
|
"66efee37cdbca0daaf3b15f6": "67efd429317486563c7ee2b2",
|
||||||
|
"674b816e72ec3529d005b92f": "67efd429317486563c7ee2b2",
|
||||||
|
"66efed86279356635424a08c": "67efd3e59f0821f600a4ebed",
|
||||||
|
"67d7e20b53de19505b0a438e": "67efd3e59f0821f600a4ebed",
|
||||||
|
"66efe6d7240a78444a77724c": "67f0fe25a1cd83e3b2ec082f",
|
||||||
|
"66eff80870fcef92eafb43db": "67f0fe25a1cd83e3b2ec082f",
|
||||||
|
"66eff826cd69e4f752143620": "67f0fe25a1cd83e3b2ec082f",
|
||||||
|
"67ee4a5b25496611b8049fd8": "67f107c6cd96ce08caca8b83",
|
||||||
|
"67ee4a5325496611b8049fcb": "67f107c6cd96ce08caca8b83",
|
||||||
|
"66efe7c20190af63a74047ee": "677b4541f0e406dc6526e7aa",
|
||||||
|
"66efe95eae405ac237d25735": "677b4541f0e406dc6526e7aa",
|
||||||
|
"677d58dfb88b111be4050f0c": "677a55a0be2a8922dab9e040",
|
||||||
|
"6754ce9b2108e4a1272cbfdb": "677a55a0be2a8922dab9e040",
|
||||||
|
"66efe6685ba1158aa705138b": "67471f9c63d6ef6fe3ced898",
|
||||||
|
"66eff7ca06c23db52bdc30e1": "67471f9c63d6ef6fe3ced898",
|
||||||
|
"6749df216bab3ba0fc574020": "6769f36baded384a687d97a1",
|
||||||
|
"66efe660245cc8d2fe111b7a": "6769f36baded384a687d97a1",
|
||||||
|
"66effa3e969115256627385c": "6769f51c43d1569d59e3c397",
|
||||||
|
"66eff7b904e431cd9222718b": "6769f51c43d1569d59e3c397",
|
||||||
|
"67623fbfd06e8c69b793cc85": "6769f68fa4eb1eafdf31d38c",
|
||||||
|
"66efe94e501996bc1a4c4b2a": "6769f68fa4eb1eafdf31d38c",
|
||||||
|
"676ac0351fb5f830a32af4ae": "676ac738a2720c6b1da18fef",
|
||||||
|
"67623fa13872b9074d6166b9": "676ac738a2720c6b1da18fef",
|
||||||
|
"66efefe392e5d484dcdb0310": "676ac738a2720c6b1da18fef",
|
||||||
|
"66eff89f286052f1b75d738c": "676aca14fe90a5a838dd04c3",
|
||||||
|
"66eff7c2b3b396e3935fff0d": "676aca14fe90a5a838dd04c3",
|
||||||
|
"66eff78c4de9afeb621befab": "676acb5bc60f9d06283a2234",
|
||||||
|
"66efe919fe95f425e8a56cc3": "676acb5bc60f9d06283a2234",
|
||||||
|
"67e855e76817401d4edde90f": "676ace5f69e9afec028e5221",
|
||||||
|
"67e855eaf9fe22d57416bb4d": "676ace5f69e9afec028e5221",
|
||||||
|
"67e855edeabb8097feb23a58": "676ace5f69e9afec028e5221",
|
||||||
|
"66eff7ccb56cb26ed18b142f": "676af80852ad1f5baf0e8d95",
|
||||||
|
"67623fcb99078358962776ea": "676af80852ad1f5baf0e8d95",
|
||||||
|
"66eff2079547745359f3f590": "676af80852ad1f5baf0e8d95",
|
||||||
|
"66eff7fe89dd1d70c948e067": "676afb0dd0634cb6c93d83c7",
|
||||||
|
"67623fceeabfceb9623502a2": "676afb0dd0634cb6c93d83c7",
|
||||||
|
"6748cbb3cca993770803c882": "676afb0dd0634cb6c93d83c7",
|
||||||
|
"674b9774a54e94a251dad307": "676afe70fdedf195aaaccf56",
|
||||||
|
"67623ffbeddd1e90d95762cf": "676afe70fdedf195aaaccf56",
|
||||||
|
"66eff77214afff64832d251d": "676afe70fdedf195aaaccf56",
|
||||||
|
"66effa00656b4e78e62e637f": "676b0de9ab6151bd15ce350e",
|
||||||
|
"66efecd24a32e04685efcc56": "676b0de9ab6151bd15ce350e",
|
||||||
|
"674e00b52c33555a98039303": "676b0de9ab6151bd15ce350e",
|
||||||
|
"674b3cc897c8956e56421fd1": "67509b40ebc998b7d528d1a1",
|
||||||
|
"6766e7f14d66265c06a1962a": "6766e795bcba079415915b6b",
|
||||||
|
"66efec3c1839dd4413eb1e93": "674720e808312fa336c68ee6",
|
||||||
|
"66efec43e82edf34b32449b0": "674720e808312fa336c68ee6",
|
||||||
|
"66eff885003a78ade2a611a8": "674721e986f435b80234da65",
|
||||||
|
"66effb3b495b558818dc4350": "67472251414d587b8b36ba1f",
|
||||||
|
"66eff7ee27ad0f21e47a0938": "67472251414d587b8b36ba1f",
|
||||||
|
"66eff2bca82e9fb923f4447e": "674722c60ad34fd118ec4c9e",
|
||||||
|
"66eff49c098b9c716ea07bae": "674722c60ad34fd118ec4c9e",
|
||||||
|
"674b3c1ebc5a69a9c0cf21db": "6747235ed723d48c90cb644f",
|
||||||
|
"67623fc6ce95c4aaa00efa21": "6747235ed723d48c90cb644f",
|
||||||
|
"66efe59603176389c4e86b7c": "674723bdd56b0c5b295bb6a1",
|
||||||
|
"66eff404eeaeacd506c2780b": "674723bdd56b0c5b295bb6a1",
|
||||||
|
"66eff33d92c41501a23e2be9": "67472495fb91486f4fb89cb3",
|
||||||
|
"66eff038da9b88aaf02b8e0a": "67472495fb91486f4fb89cb3",
|
||||||
|
"66eff3353262f9415171ae77": "67472503ea7a07fc5c20b8a4",
|
||||||
|
"674b582bf54fed429be77506": "67472503ea7a07fc5c20b8a4",
|
||||||
|
"6748d203cca9937708055c77": "674725ff49d0b6a4089163d2",
|
||||||
|
"66eff917ac059872082a4cfe": "674725ff49d0b6a4089163d2",
|
||||||
|
"66eff1f5429b5b77b64fc030": "674725ff49d0b6a4089163d2",
|
||||||
|
"66eff8d4be49fa7ee0a71605": "6747268e69275427dffb78f7",
|
||||||
|
"6748d0d5cca993770804f66f": "6747268e69275427dffb78f7",
|
||||||
|
"6748d0b3cca993770804f643": "6747268e69275427dffb78f7",
|
||||||
|
"674d0298de99063f5a2a96c0": "674727f9beeec883a8b733e4",
|
||||||
|
"66efe670a56051af0761282d": "674727f9beeec883a8b733e4",
|
||||||
|
"674b99b51e03ad3402431104": "674727f9beeec883a8b733e4",
|
||||||
|
"674b7f6872ec3529d00520d8": "674728d52fe62c289180baf3",
|
||||||
|
"6748d27ecca9937708057a99": "674728d52fe62c289180baf3",
|
||||||
|
"674b9b949d88ef8fc7899579": "674728d52fe62c289180baf3",
|
||||||
|
"66efeb01fe3dc67355719a55": "67472a02e64a37a015c27d4a",
|
||||||
|
"6754d9fdcf566947238d142a": "67472a02e64a37a015c27d4a",
|
||||||
|
"6754da04561b4fc35113249c": "67472a02e64a37a015c27d4a",
|
||||||
|
"66efe5f6f3581c9454d708aa": "67472ac35a736a84d3d9efc5",
|
||||||
|
"66eff8b7bdf536d9a4e09b0b": "67472ac35a736a84d3d9efc5",
|
||||||
|
"67488d3427a91de0d3b8167b": "67472ac35a736a84d3d9efc5",
|
||||||
|
"674b990b8d31722aca3b292b": "67472d3df3e373a389e47c89",
|
||||||
|
"66eff8bdfd7213850e2a0a40": "67472d3df3e373a389e47c89",
|
||||||
|
"674df5352db4e804e4127979": "67472d3df3e373a389e47c89",
|
||||||
|
"67488d328678ee654d0de6c6": "67472de565eb520c7a8af1a5",
|
||||||
|
"66eff880c0fe60478dada058": "67472de565eb520c7a8af1a5",
|
||||||
|
"66eff87d9df5226714a585fa": "67472de565eb520c7a8af1a5",
|
||||||
|
"66eff7706e06ea4177fa9226": "67472e2e0de022e6d88c5efb",
|
||||||
|
"674df53fca6bfe4cdbcd7d8f": "67472e2e0de022e6d88c5efb",
|
||||||
|
"674df502c2ab3797d3777d86": "67472e2e0de022e6d88c5efb",
|
||||||
|
"66eff9d2e654a79c6d02b580": "67472e831d2ad53e655d30e6",
|
||||||
|
"66eff2e72a21d20ad5dfaab5": "67472e831d2ad53e655d30e6",
|
||||||
|
"66eff2efca36c9ed80dd3758": "67472e831d2ad53e655d30e6",
|
||||||
|
"66eff48388a6ad3998a84c06": "67699b1421e57b1c6415f6c3",
|
||||||
|
"66eff47e0549d47c988c35d8": "67699b1421e57b1c6415f6c3",
|
||||||
|
"66eff49fdb147e0aa6df028b": "67699b1421e57b1c6415f6c3",
|
||||||
|
"66eff4a2bf7f57791a6140cb": "67699dc535f6bb1f5781c4cc",
|
||||||
|
"66eff48fa2aa2f19629de531": "67699dc535f6bb1f5781c4cc",
|
||||||
|
"66efeb3af1db39e22b4a1d63": "67699dc535f6bb1f5781c4cc",
|
||||||
|
"66efec7b1281693c240a70c5": "6747508429ca66164b39e637",
|
||||||
|
"66eff2c53be7cb849fbb9e09": "6747508429ca66164b39e637",
|
||||||
|
"66eff2ced0b7ad053b3d29b5": "6747508429ca66164b39e637",
|
||||||
|
"66efec95346852c40fc41ed4": "674750fa37089121191b7d6f",
|
||||||
|
"66efec8ccaabc2202639a127": "674750fa37089121191b7d6f",
|
||||||
|
"66efec9d3e8c72da344c143b": "674750fa37089121191b7d6f",
|
||||||
|
"66eff29fea8fc2edc7a2a0d6": "674751d636b2485baddcf5cc",
|
||||||
|
"674e08712c33555a980564a8": "674751d636b2485baddcf5cc",
|
||||||
|
"66eff9f56843b2b9e7493a03": "674751d636b2485baddcf5cc",
|
||||||
|
"674b985b67e515cdcd0238d8": "67475302960eb9c091be4cd1",
|
||||||
|
"66eff9ccfb346cb1c1ea7f59": "67475302960eb9c091be4cd1",
|
||||||
|
"66eff890cac30dfb538d095b": "67475302960eb9c091be4cd1",
|
||||||
|
"66efe6cd712bbbb8efc4a853": "674753a03ebe62863feec9fb",
|
||||||
|
"66efe90a0b16706a665840d4": "674753a03ebe62863feec9fb",
|
||||||
|
"674b800172ec3529d0054c94": "674753a03ebe62863feec9fb",
|
||||||
|
"66eff10696d3be6c5565f78a": "674753f1d8d87605a4fcb912",
|
||||||
|
"674e01672c33555a9803bdad": "674753f1d8d87605a4fcb912",
|
||||||
|
"66eff8a12953e862bcdd7a58": "674754bfd14fc231ec90d9d9",
|
||||||
|
"66eff9a5b7780b5c5fde3788": "674754bfd14fc231ec90d9d9",
|
||||||
|
"66eff43e52a3831d671eb168": "674755987736d5ac91837615",
|
||||||
|
"66efe97297b4223c46693049": "674755987736d5ac91837615",
|
||||||
|
"66efe9685f501f70ee1b1595": "674755987736d5ac91837615",
|
||||||
|
"6754ce7e69912f371aadce28": "674756876ef598122bb9239d",
|
||||||
|
"66eff03f87ba7071ada55be3": "674756876ef598122bb9239d",
|
||||||
|
"66eff915cd7abba61b4203a2": "674756876ef598122bb9239d",
|
||||||
|
"674b7f6e72ec3529d00520df": "674757075b3b3631a4b3efd5",
|
||||||
|
"66eff7ece016d80ad7c29412": "674757075b3b3631a4b3efd5",
|
||||||
|
"66efed638575d416265bc8bd": "6747575b5a841fdbf0ca37ae",
|
||||||
|
"674cbbec8f3ea92bd005b905": "6747575b5a841fdbf0ca37ae",
|
||||||
|
"66efe9328531a19e66004703": "6747575b5a841fdbf0ca37ae",
|
||||||
|
"6748cf63cca993770804991a": "67475893d98f889c82fee39b",
|
||||||
|
"6748c998cca9937708037c56": "67475893d98f889c82fee39b",
|
||||||
|
"674e05dd2c33555a9804b4ea": "674758ea142f52a016ecd92d",
|
||||||
|
"66efe9557b5f7b117d7a4236": "674758ea142f52a016ecd92d",
|
||||||
|
"6748cefecca9937708048a12": "674758ea142f52a016ecd92d",
|
||||||
|
"674b7f1472ec3529d00504a2": "67475931380e79bc84d831b9",
|
||||||
|
"66eff9efdb0beeecd4f2ae57": "67475931380e79bc84d831b9",
|
||||||
|
"66eff1d91275cb76b7edaaf8": "67475931380e79bc84d831b9",
|
||||||
|
"66efe946519bfbdf002f5013": "67475c58c8d4ae3b9baf7d38",
|
||||||
|
"674c9ae678d2bd7da4057bb8": "67475dbb321ddf314e6fbcad",
|
||||||
|
"6754cea5cf2173ceaac6649a": "67475dbb321ddf314e6fbcad",
|
||||||
|
"66eff8181ee04815fa01711c": "67475dbb321ddf314e6fbcad",
|
||||||
|
"66eff1d23173428695440a6b": "67475e21aeda0864d4faf7c4",
|
||||||
|
"66eff8946930a5c2f9b0275f": "67475e21aeda0864d4faf7c4",
|
||||||
|
"6748ca87cca9937708038b9e": "67475e21aeda0864d4faf7c4",
|
||||||
|
"6748d363cca993770805c9e7": "674763ebeceb4fed8a506543",
|
||||||
|
"66eff85a1d911576f93b86c1": "674763ebeceb4fed8a506543",
|
||||||
|
"6748d035cca993770804d6f8": "674764d429eb6b5966202149",
|
||||||
|
"6748d20dcca9937708055ca4": "674764d429eb6b5966202149",
|
||||||
|
"66eff1191b37f511fa6e71cd": "674764d429eb6b5966202149",
|
||||||
|
"66eff7e4f4d516a0b62f7b4e": "674765571af3e5be54af699a",
|
||||||
|
"66eff8af3c0c3696de643c4d": "674765571af3e5be54af699a",
|
||||||
|
"66eff00e826fea2a05279ecb": "674765571af3e5be54af699a",
|
||||||
|
"66eff0a7f2538f79b8c8ca8f": "6747652eea4bfbdfa2e46ab4",
|
||||||
|
"66efec84616930f1ce3cee51": "6747652eea4bfbdfa2e46ab4",
|
||||||
|
"66eff1677bb7ab893ca038e1": "6747652eea4bfbdfa2e46ab4",
|
||||||
|
"66efe6c7ec6ae357b9948ac3": "6747652eea4bfbdfa2e46ab4",
|
||||||
|
"66efed77ab10a03dc879bbd9": "6747652eea4bfbdfa2e46ab4",
|
||||||
|
"67488d377f3a76a6c67b8a57": "6747659d16e95b47fe2caa09",
|
||||||
|
"66eff88adc0bc97ea072f572": "6747659d16e95b47fe2caa09",
|
||||||
|
"674c977f0f03336f9e03e957": "6747659d16e95b47fe2caa09",
|
||||||
|
"66eff75386ecb2f8c0aa08bf": "674766077f5e08878af90bc8",
|
||||||
|
"66eff7c488c504eac93d702f": "674766077f5e08878af90bc8",
|
||||||
|
"66eff805513928022b0bf487": "674766077f5e08878af90bc8",
|
||||||
|
"66efeae1b699426f74418e94": "6747666815fa03b3fc03a041",
|
||||||
|
"66eff7b6062195a5c9550e57": "6747666815fa03b3fc03a041",
|
||||||
|
"66eff7229cbb6521e13fe878": "6747666815fa03b3fc03a041",
|
||||||
|
"674b91ec85ab001038070806": "67476842ad02e25c2e1b92ad",
|
||||||
|
"674cbda88f3ea92bd00650d7": "67476842ad02e25c2e1b92ad",
|
||||||
|
"674cbd8c8f3ea92bd0064245": "67476842ad02e25c2e1b92ad",
|
||||||
|
"674b922185ab001038071829": "674768fd740e1d790ed07302",
|
||||||
|
"66efe84f0513caae1e4693cb": "674768fd740e1d790ed07302",
|
||||||
|
"66efe8257cd7eddd89cd7f00": "674768fd740e1d790ed07302",
|
||||||
|
"6748cd56cca9937708042050": "6747b30780131eae6aa2cc23",
|
||||||
|
"674dd361dfa6c982c40391e2": "6747b30780131eae6aa2cc23",
|
||||||
|
"66eff82048e521fc6b9a61cf": "6747b30780131eae6aa2cc23",
|
||||||
|
"66efe6e6dd714512ad185ca8": "6747b568ffb78dbbb8a7968d",
|
||||||
|
"66efe7bb942150cf107edce9": "6747b568ffb78dbbb8a7968d",
|
||||||
|
"66efea122aae9919541dc4d0": "6747b568ffb78dbbb8a7968d",
|
||||||
|
"66eff4107ceb45d0965b6675": "6747b5ed539d24e909acae8f",
|
||||||
|
"66efe7a56cc5349d202b88a6": "6747b5ed539d24e909acae8f",
|
||||||
|
"66efe78e9ce743cb1928ac0b": "6747b5ed539d24e909acae8f",
|
||||||
|
"6754ce8d478087ff223868b0": "6747b5ed539d24e909acae8f",
|
||||||
|
"66eff38ccc16d3eaf2f30ebe": "6747b6d1b00b3bfcb6b02f94",
|
||||||
|
"66eff385d630633adea236b4": "6747b6d1b00b3bfcb6b02f94",
|
||||||
|
"66efe82ca1581f5494160efa": "6747b6d1b00b3bfcb6b02f94",
|
||||||
|
"66efe805dfe24886fde7ea9e": "6747b877505baa44d501d079",
|
||||||
|
"66efe8a845c3392ba1ac9fb2": "6747b877505baa44d501d079",
|
||||||
|
"66efea1e8ebe17f706dc2d59": "6747b877505baa44d501d079",
|
||||||
|
"66eff8cc88fb66d27c4a6aaa": "6747b877505baa44d501d079",
|
||||||
|
"674b43d80cb526a7a2a92af0": "6747b8d6b8b522e15a7aa392",
|
||||||
|
"66eff34f9eff2343d96a6b98": "6747b8d6b8b522e15a7aa392",
|
||||||
|
"66eff229c7601827be4936dc": "6747b8d6b8b522e15a7aa392",
|
||||||
|
"6748ceb0cca9937708046c9a": "6747b8d6b8b522e15a7aa392",
|
||||||
|
"6748d12dcca99377080514ae": "6747b8d6b8b522e15a7aa392",
|
||||||
|
"6748cbdecca993770803d809": "6747b920719aa1658981f7d1",
|
||||||
|
"674b804572ec3529d0055b3f": "6747b920719aa1658981f7d1",
|
||||||
|
"674d07cfedad50761003752c": "6747b920719aa1658981f7d1",
|
||||||
|
"674b43d827ccf8a55fdb7b78": "6747b920719aa1658981f7d1",
|
||||||
|
"66eff8f9aa92f5358edef8ce": "6747b920719aa1658981f7d1",
|
||||||
|
"674b9b946374da96c900dd7b": "6747b9634c79e7f73963b99f",
|
||||||
|
"66efeae88a451b627345f611": "6747b9634c79e7f73963b99f",
|
||||||
|
"674d07e6edad50761003753b": "6747b9634c79e7f73963b99f",
|
||||||
|
"66eff44164a423ed06070fcd": "6747bb32e757b032df3aadda",
|
||||||
|
"66eff445f4a40d392b86a408": "6747bb32e757b032df3aadda",
|
||||||
|
"66eff468f0184c490e451b49": "6747bb32e757b032df3aadda",
|
||||||
|
"66eff43ba1979f6a6c082f0c": "6747bb9ec325240ca382f8a9",
|
||||||
|
"66eff465637b8caff0b04e00": "6747bb9ec325240ca382f8a9",
|
||||||
|
"66eff4588ace4c6e8d09fe54": "6747bb9ec325240ca382f8a9",
|
||||||
|
"66efeffbcd91857e2d0c27b2": "6747bcf89415880273ff7fa9",
|
||||||
|
"674b97803040176beaef13cb": "6747bcf89415880273ff7fa9",
|
||||||
|
"66efe6be544bcc1efb9f1307": "6747bd8c191f49b33d3cd12f",
|
||||||
|
"66eff736458e1f85db46a620": "6747bd8c191f49b33d3cd12f",
|
||||||
|
"66eff45baeca48128ceb8dcb": "6747be063123032a27c0ff90",
|
||||||
|
"66efeabd7d369823354c0656": "6747be063123032a27c0ff90",
|
||||||
|
"66efeab6885ecbbbdfb70366": "6747be063123032a27c0ff90",
|
||||||
|
"66efefeb5dc213085e3a74a1": "6747be6cac417a049759b0a8",
|
||||||
|
"66efeff39fa8767a59e98aad": "6747be6cac417a049759b0a8",
|
||||||
|
"66efefca76f5d41e5d399a8d": "66c021dc9289486ef682c2e4",
|
||||||
|
"66efefdce7510271b1dfb64e": "66c021dc9289486ef682c2e4",
|
||||||
|
"66eff0072841362759020233": "66c155ada8d7150863c89499",
|
||||||
|
"66efedd5e4a6e0b60faed1f4": "66c155ada8d7150863c89499",
|
||||||
|
"66eff031babb5ddeb370a1de": "66c156226ac87e4431cb0feb",
|
||||||
|
"66eff028992b0b993a5878e0": "66c156226ac87e4431cb0feb",
|
||||||
|
"66efea7ed924a5c68ce8a74a": "66c1565e796a61e8a711e6d9",
|
||||||
|
"66efea7582903e9186f963b3": "66c1565e796a61e8a711e6d9",
|
||||||
|
"66eff7891109641f80b60510": "6747beb0723e16cc522b30a9",
|
||||||
|
"66eff5ae4347d0d98cea52db": "6747beb0723e16cc522b30a9",
|
||||||
|
"66eff5b4b77ce34d34429d7b": "6747beb0723e16cc522b30a9",
|
||||||
|
"66eff7945e33745b74a538a3": "66c244489cd554035b1ba245",
|
||||||
|
"66eff7ae8f244bf0d4b12c2f": "66c244489cd554035b1ba245",
|
||||||
|
"66efe97edc20102396733d3e": "66c244489cd554035b1ba245",
|
||||||
|
"674b7f2d72ec3529d00512eb": "66c246975c91c78198d4077c",
|
||||||
|
"67488c9fec5e127816b90254": "66c246975c91c78198d4077c",
|
||||||
|
"67488ca36f3a1ce81c672e09": "66c246975c91c78198d4077c",
|
||||||
|
"6748d2a2cca9937708058a13": "66c24845a671c1a1aa170372",
|
||||||
|
"66eff4e1ce172261c8fece0d": "66c24845a671c1a1aa170372",
|
||||||
|
"66eff1ba415a349b3a9d29f1": "66c24845a671c1a1aa170372",
|
||||||
|
"66eff7c7d91d9a4d5bcfd8e8": "66c249657e6d87ebf458f0bf",
|
||||||
|
"66efe7321f3a2142e1969fe7": "66c249657e6d87ebf458f0bf",
|
||||||
|
"66eff0cd892acb7e4635b230": "66c249657e6d87ebf458f0bf",
|
||||||
|
"66eff548c54d0aecd9f2d09f": "6747beeab265397e48b7562c",
|
||||||
|
"66eff5abb9bbc84cca72a8ac": "6747beeab265397e48b7562c",
|
||||||
|
"66eff53511d100a2631faed7": "66c2cc6417dbf45d9955c794",
|
||||||
|
"66eff80268faf7948344579d": "66c2cc6417dbf45d9955c794",
|
||||||
|
"6754ceafd1d8f788c7e2fff0": "66c3c609fbd11916a455405a",
|
||||||
|
"674b9eb4842a5f9a570e188a": "66c3c609fbd11916a455405a",
|
||||||
|
"6754ce8b759c48d4933c0674": "66c3ccf91d8e4df0710ee395",
|
||||||
|
"6754ceba288b64ade0623de7": "66c3ccf91d8e4df0710ee395",
|
||||||
|
"66eff2a6af58b4630bd433bb": "66c3ccf91d8e4df0710ee395",
|
||||||
|
"6754ce92747be364c657e792": "66c3d0b3aca099bef346ecc6",
|
||||||
|
"674b934085ab00103807623f": "66c3d0b3aca099bef346ecc6",
|
||||||
|
"6754cea39190e62b5f344d78": "66c3d0b3aca099bef346ecc6",
|
||||||
|
"6754ce7986359561cd213a97": "6747bf2633dcfc282d417efe",
|
||||||
|
"6748d369cca993770805c9f0": "6747bf2633dcfc282d417efe",
|
||||||
|
"66eff7bf57969c7d86ba1362": "66c3f214cb3b751f05e418d4",
|
||||||
|
"674cb6c28f3ea92bd0044d2f": "66c3f214cb3b751f05e418d4",
|
||||||
|
"6748d466cca9937708062210": "66c3fa32b966223ebb542e27",
|
||||||
|
"66efe8c3f54efae899db6fa4": "66c3fa32b966223ebb542e27",
|
||||||
|
"6748c9d0cca9937708037c5e": "66c404ba2bd9c56b380a89d7",
|
||||||
|
"674b7a0e72ec3529d003deb5": "66c404ba2bd9c56b380a89d7",
|
||||||
|
"66efe85702a543e7c40a02ad": "66c404ba2bd9c56b380a89d7",
|
||||||
|
"66efe8a1a89c7dc584675f62": "66c40852e32a65ddf98e38f8",
|
||||||
|
"66eff18b427194b92bab8cd4": "66c40852e32a65ddf98e38f8",
|
||||||
|
"66eff40a815d554b1b95b3cf": "66c40852e32a65ddf98e38f8",
|
||||||
|
"66efec4c86a317b3d39aa7fa": "6747bf604962f99c343a7927",
|
||||||
|
"66efec6842ea720cc2db102b": "6747bf604962f99c343a7927",
|
||||||
|
"66eff473cebbc22bc5aa9cb6": "66c51c87a7c00a9e9e891706",
|
||||||
|
"66eff492c090c3c24d219dde": "66c51c87a7c00a9e9e891706",
|
||||||
|
"66eff4a6894079a45bf9c38c": "66c51c8c2efa5cee3b8326a3",
|
||||||
|
"66eff9a1778a9fc928888495": "66c51c8c2efa5cee3b8326a3",
|
||||||
|
"66eff9dd3ac50e845a252a11": "66c51c8c2efa5cee3b8326a3",
|
||||||
|
"66eff4997dbc4aed9c45de98": "66c51c9298f84f4a15184520",
|
||||||
|
"66eff9b6f7c2f8210134f525": "66c51c9298f84f4a15184520",
|
||||||
|
"66eff9ce46854d81bf8f6533": "66c51c9298f84f4a15184520",
|
||||||
|
"66eff47b658790ba1603b041": "66c51c97bf84ff530148f164",
|
||||||
|
"66eff48cd8d0cfafa140f719": "66c51c97bf84ff530148f164",
|
||||||
|
"66eff2d663a03134d498839d": "66c51c97bf84ff530148f164",
|
||||||
|
"66eff046b0e7b13a963cda40": "6747bfd667581ad41fc4a9de",
|
||||||
|
"66eff3234430b70eed37276e": "6747bfd667581ad41fc4a9de",
|
||||||
|
"66efe4b3fb6307403b891f53": "6747c0991fa4b29ab5692551",
|
||||||
|
"66efe392d76e09d3b3d685ad": "6747c0991fa4b29ab5692551",
|
||||||
|
"66efe4e9d15285fdea38208a": "6747c0991fa4b29ab5692551",
|
||||||
|
"66efe79e6ad968f5acd028c5": "6747c0991fa4b29ab5692551",
|
||||||
|
"674b7f8372ec3529d00520e6": "6747c136681e886c4f32ec2d",
|
||||||
|
"66efe79598c5d9c2401e67aa": "6747c136681e886c4f32ec2d",
|
||||||
|
"66efe7c9639ab45aa89a323a": "6747c136681e886c4f32ec2d",
|
||||||
|
"66efe788c9d71421105cfe01": "6747c182942fe0faa5478a5e",
|
||||||
|
"66efe7b5a3ab2cafaf04cf6d": "6747c182942fe0faa5478a5e",
|
||||||
|
"674de234dfa6c982c4079b4e": "6747c182942fe0faa5478a5e",
|
||||||
|
"6748d0bacca993770804f652": "6747c1e4c6f655f7863b727f",
|
||||||
|
"674cbc488f3ea92bd005dac2": "6747c1e4c6f655f7863b727f",
|
||||||
|
"66eff7566b99a7118c035179": "6747c1e4c6f655f7863b727f",
|
||||||
|
"6748d5bfcca99377080699e3": "6747c236e7360000d2cdffb9",
|
||||||
|
"674ca7151b2588688403c00b": "6747c236e7360000d2cdffb9",
|
||||||
|
"66eff14595998d5aade52e7b": "6747c236e7360000d2cdffb9",
|
||||||
|
"66efe77553094ffb2c0607bd": "6747c298d1c2a3d2091dbe7d",
|
||||||
|
"6754da004367aba535fec9a5": "6747c298d1c2a3d2091dbe7d",
|
||||||
|
"66effa1d588c840eef8f5ddd": "6747c298d1c2a3d2091dbe7d",
|
||||||
|
"675c5238b3957fbfd051702c": "6747c312165746c2dd1e19f2",
|
||||||
|
"66efe64fa1059195f0d3ebcd": "6747c312165746c2dd1e19f2",
|
||||||
|
"674b7f8672ec3529d00520ed": "6747c312165746c2dd1e19f2",
|
||||||
|
"66eff900e1ab3a4555a4f1e6": "6747c36d4e805e1b7f6387b5",
|
||||||
|
"66efea486ace201abbc62565": "6747c36d4e805e1b7f6387b5",
|
||||||
|
"66efe53c9e07342709638991": "6747c36d4e805e1b7f6387b5",
|
||||||
|
"66eff80afc6d88b7d61e86eb": "67488057bb77d69317a82685",
|
||||||
|
"66efe724232dd4c3604faf77": "67488057bb77d69317a82685",
|
||||||
|
"66efea2f64abeefaed2c3745": "67488057bb77d69317a82685",
|
||||||
|
"675d9eecda4e1e55b00e8363": "674880a157d7033368abfe10",
|
||||||
|
"66effa17cf29484543f56dab": "674880a157d7033368abfe10",
|
||||||
|
"675d9eecb41c5ff799fa55a8": "674880a157d7033368abfe10",
|
||||||
|
"674b943585ab00103807a85e": "674881a4c92b70c1d05f7f84",
|
||||||
|
"66efef8656b2adc007b7f65a": "674881a4c92b70c1d05f7f84",
|
||||||
|
"675da3acb6772374420b9b57": "674881a4c92b70c1d05f7f84",
|
||||||
|
"66efefa0970e91665d52ce17": "674882212efab0d994eabacb",
|
||||||
|
"66efefb25a3c140e509466b0": "674882212efab0d994eabacb",
|
||||||
|
"66efefba68a8b87968e95fe3": "674882212efab0d994eabacb",
|
||||||
|
"674b943d85ab00103807a86a": "674882b91e3043f208409ba5",
|
||||||
|
"6754cebc15b028e60c06d763": "674882b91e3043f208409ba5",
|
||||||
|
"6754cebe58b95fcffbce080b": "674882b91e3043f208409ba5",
|
||||||
|
"675dab92d234773e7d2b5a30": "6748842621601ad21fb2bcb9",
|
||||||
|
"675daac2deb87a2d2406d4cf": "6748842621601ad21fb2bcb9",
|
||||||
|
"66eff7a198c0f2c2e8a86732": "674884a3ebf5b8cdbf739bd8",
|
||||||
|
"66eff8c90c059d770562983b": "674884a3ebf5b8cdbf739bd8",
|
||||||
|
"66effa392385dc1c756f4f9d": "674884a3ebf5b8cdbf739bd8",
|
||||||
|
"674b9b3b3212c5d7422f9091": "67488670a9bfa58a5cedbf78",
|
||||||
|
"66eff3203f2ca6a9d8acaf4f": "67488670a9bfa58a5cedbf78",
|
||||||
|
"66eff313f7a1cd3770c11204": "67488670a9bfa58a5cedbf78",
|
||||||
|
"66eff7fbd48653510dbce1da": "6748874a2aed4c92ecf06204",
|
||||||
|
"66efebff0d77ae3a5173435e": "6748874a2aed4c92ecf06204",
|
||||||
|
"674c94d478d2bd7da403eed4": "6769d53dfeabb78a91b433e6",
|
||||||
|
"674df52e6d89338fef30b69a": "6769d53dfeabb78a91b433e6",
|
||||||
|
"67623fe1d4b9f014da14a7d9": "6769d53dfeabb78a91b433e6",
|
||||||
|
"66efea3f757f5d8b53471fac": "67488804fda8c7682f4273a9",
|
||||||
|
"66efeb213efb5f0bdcab8e0a": "67488804fda8c7682f4273a9",
|
||||||
|
"674ca649b90f1e91259016a6": "67488804fda8c7682f4273a9",
|
||||||
|
"66efec0894bbdb5dc0cecbab": "674888b7cbd8479a005bda6e",
|
||||||
|
"66efec12907041acc07c9bc5": "674888b7cbd8479a005bda6e",
|
||||||
|
"674d03340a4afa326c03c80d": "674888b7cbd8479a005bda6e",
|
||||||
|
"66eff81c4df3aec59390e408": "67488968207f0a42349fcf8b",
|
||||||
|
"674cbd688f3ea92bd0063399": "67488968207f0a42349fcf8b",
|
||||||
|
"66eff401a93294457597ec3f": "67488968207f0a42349fcf8b",
|
||||||
|
"66efed1eb8f7662833440a7e": "67488a105a77b869ebd0a968",
|
||||||
|
"66efef98c1817083a781d217": "67488a105a77b869ebd0a968",
|
||||||
|
"675da3b06fc27ae07d30cfcf": "67488a105a77b869ebd0a968",
|
||||||
|
"66efec2c3a17fca305896666": "67488adc3a2ba4d17055213f",
|
||||||
|
"66efee1f73ad808e7cd92a8a": "67488adc3a2ba4d17055213f",
|
||||||
|
"66efecc01c72c791f6d7e361": "67488adc3a2ba4d17055213f",
|
||||||
|
"6754ce9def10e9b4baaab1ad": "67488b377f95f5b5e21b605c",
|
||||||
|
"66eff399f01f7e9bb94bd78f": "67488b377f95f5b5e21b605c",
|
||||||
|
"66efec23ace9c97872c692d5": "67488b377f95f5b5e21b605c",
|
||||||
|
"66efec1964c7351af2c280fc": "67488b377f95f5b5e21b605c",
|
||||||
|
"674bb7eeafae933d53f7a40d": "67516c77476efeef09be34a1",
|
||||||
|
"674d01be2872aaa4033186cf": "67516c77476efeef09be34a1",
|
||||||
|
"66eff7274ece5358fbd30182": "6751718a8b3f5b546858efb2",
|
||||||
|
"66eff719857550302ce00924": "6751718a8b3f5b546858efb2",
|
||||||
|
"66eff7e11bfc1887abe9ce1e": "6751751f0e38a97dbe6a3d91",
|
||||||
|
"66eff8582eb49af7c25412f9": "6751751f0e38a97dbe6a3d91",
|
||||||
|
"67605119d5e1f47960362d8d": "67517b14e12814c596f01bd0",
|
||||||
|
"66eff3f5a49e35a24bf17309": "67517b14e12814c596f01bd0",
|
||||||
|
"66eff7449ddf6537b8d6fd8f": "67517bceebe6088837aa2dab",
|
||||||
|
"66eff73f625040605d081ec1": "67517bceebe6088837aa2dab",
|
||||||
|
"6760511fc38988c4a6c85a3a": "67517c148266e90a41acd3a1",
|
||||||
|
"6760511c3d808c62444516dc": "67517c148266e90a41acd3a1",
|
||||||
|
"66eff747666368b9ecd37940": "67517c5238cc9253f1b7eb0b",
|
||||||
|
"66eff7425a973f4cd1109287": "67517c5238cc9253f1b7eb0b",
|
||||||
|
"674dfdbc630b8921a89188c1": "67517c8c5c2a6190c8dae8a4",
|
||||||
|
"674dfd8d76035c1cba89a956": "67517c8c5c2a6190c8dae8a4",
|
||||||
|
"67dc746dee2f931447235e25": "67517cf9b8bbd2f751142ef9",
|
||||||
|
"67dc747291892ebc9c4b7846": "67517cf9b8bbd2f751142ef9",
|
||||||
|
"66eff7e8006bf0f66914eb85": "675184a3baf92aa021b4e0ad",
|
||||||
|
"6760570ae956af11440d3245": "675184a3baf92aa021b4e0ad",
|
||||||
|
"6748d46ccca993770806221b": "67518cbcb6c904e276ea22cb",
|
||||||
|
"676057b8e956af11440d5f49": "67518cbcb6c904e276ea22cb",
|
||||||
|
"66eff83287e4c04f90b6a662": "67519005bdabf0213250f1dd",
|
||||||
|
"674b7e3972ec3529d004ca89": "67519005bdabf0213250f1dd",
|
||||||
|
"67605885e956af11440da8fc": "675192a9ccd06a5a07e78922",
|
||||||
|
"676058c7e956af11440db881": "675192a9ccd06a5a07e78922",
|
||||||
|
"6760596fe956af11440de5af": "67519b5f3de90180bd0768a4",
|
||||||
|
"676059efe956af11440e11cf": "67519b5f3de90180bd0768a4",
|
||||||
|
"66eff7b312c2deffd5792813": "675356e57d04aa9325c82e00",
|
||||||
|
"66efeaf87edfa52df6436f4d": "675356e57d04aa9325c82e00",
|
||||||
|
"674df74f108db2265ae2e7c0": "674dd931e687ffb6dba76b68",
|
||||||
|
"67608025ee6e478d21104893": "674dd931e687ffb6dba76b68",
|
||||||
|
"66eff8a6a46413192c6f714b": "674dd931e687ffb6dba76b68",
|
||||||
|
"6748cedfcca9937708047b0a": "67509c43d96ffa5a7187c025",
|
||||||
|
"66eff71fa201b141a43d01b6": "67509c43d96ffa5a7187c025",
|
||||||
|
"66efedf0a1a2c5dc2986de00": "67509cb7f4536e3f9382009b",
|
||||||
|
"674d01be4bd8e25249f0405d": "67509cb7f4536e3f9382009b",
|
||||||
|
"674d01bef32f4e80dda41751": "67509cb7f4536e3f9382009b",
|
||||||
|
"66eff470d374363ac212af32": "67509d5ecf08e0fbf1764f36",
|
||||||
|
"66eff44ac56cb57a31c4fefa": "67509d5ecf08e0fbf1764f36",
|
||||||
|
"66eff4387accd807be39aa11": "67509d5ecf08e0fbf1764f36",
|
||||||
|
"66efe6de0595b6df1b3ab8ed": "67509e7057be1b2849ca4f57",
|
||||||
|
"66efe6ecf887169c85a749c5": "67509e7057be1b2849ca4f57",
|
||||||
|
"6754ceb52e48004273959d74": "67509e7057be1b2849ca4f57",
|
||||||
|
"66efe8690703b00f671d0b9d": "6750a04d753056276248642d",
|
||||||
|
"66efe8357edf997135cc213a": "6750a04d753056276248642d",
|
||||||
|
"674b91d785ab0010380707f8": "6750a04d753056276248642d",
|
||||||
|
"674b921585ab00103807181d": "6750a04d753056276248642d",
|
||||||
|
"674df4f4a4ab2bb430d6fedf": "67548fb1d293a6e93d5184a4",
|
||||||
|
"66eff9202ca8360ccfab856d": "67548fb1d293a6e93d5184a4",
|
||||||
|
"66efe657ac1a15977ff8d411": "67548fb1d293a6e93d5184a4",
|
||||||
|
"66eff82911feccb89d1af768": "67575b3e2bb2bac9605b12b4",
|
||||||
|
"66eff615417b12039976fc20": "67575b3e2bb2bac9605b12b4",
|
||||||
|
"66eff71671f7318f1cfaeab1": "67575b3e2bb2bac9605b12b4",
|
||||||
|
"66eff2fe65cea4f73a7dbb84": "67575d41beda83bf97d14f1c",
|
||||||
|
"66efec6f62fe59ccb04e31ff": "67575d41beda83bf97d14f1c",
|
||||||
|
"66eff2df718c53f5b37839cb": "67575d41beda83bf97d14f1c",
|
||||||
|
"675da3b6349f7caaf060b0f4": "67575de81b1736276da6f0c3",
|
||||||
|
"66efe5ca355fe8b3ec9cd6dc": "67575de81b1736276da6f0c3",
|
||||||
|
"66efe614a9f9dd7fc3814693": "67575de81b1736276da6f0c3",
|
||||||
|
"674cbc278f3ea92bd005c9b7": "6757610a92876de49b91df94",
|
||||||
|
"66eff5bef2c85a7294c2bfca": "6757610a92876de49b91df94",
|
||||||
|
"66eff89c80303c9d1e248631": "6757610a92876de49b91df94",
|
||||||
|
"66eff923fcd7f5a0ab481a96": "6757627e2e0ce3039da399f0",
|
||||||
|
"66eff8fcc7c6187709110d6e": "6757627e2e0ce3039da399f0",
|
||||||
|
"67608e5dcc61e7239c0c7da2": "6757627e2e0ce3039da399f0",
|
||||||
|
"6748ccdecca99377080402f4": "6762474161ffeb3c022b9b69",
|
||||||
|
"67624000865820a48b2a4d09": "6762474161ffeb3c022b9b69",
|
||||||
|
"66efe7ae0584c810a31bdba1": "6762474161ffeb3c022b9b69",
|
||||||
|
"66efecaab25318b6e88eace7": "67624ce5ad9d2e9714bf6120",
|
||||||
|
"66efecb2e21c65f39c516b0d": "67624ce5ad9d2e9714bf6120",
|
||||||
|
"674b7fd472ec3529d0053da4": "67624ce5ad9d2e9714bf6120",
|
||||||
|
"675da3b35cb1099ec9ddab57": "67624ce5ad9d2e9714bf6120",
|
||||||
|
"674b9a4a3607546ede0f23c5": "6762516bfbdc2715070c1800",
|
||||||
|
"66eff284e8874a0b9197a3f2": "6762516bfbdc2715070c1800",
|
||||||
|
"66eff839298dade7583949f8": "6762516bfbdc2715070c1800",
|
||||||
|
"67624005bf27c52e2ffccab2": "6762543fbaa292049e4cea52",
|
||||||
|
"66eff75c584293c2a89fde72": "6762543fbaa292049e4cea52",
|
||||||
|
"67624002d3db8718ed7f7f21": "6762543fbaa292049e4cea52",
|
||||||
|
"67625421924c64d78674a081": "6762543fbaa292049e4cea52",
|
||||||
|
"66efece2c5d07bd954b5cbf4": "6762566a03b27f2d68c35ddf",
|
||||||
|
"66effa1182272ff8f156a106": "6762566a03b27f2d68c35ddf",
|
||||||
|
"66efed91f7fab86456117bbe": "6762566a03b27f2d68c35ddf",
|
||||||
|
"66efe88ba59d50af786ff822": "6762597817a433eeee2ef47a",
|
||||||
|
"67623ff5ace9c31768a47b35": "6762597817a433eeee2ef47a",
|
||||||
|
"66eff0565a840e479ee40ca7": "6762597817a433eeee2ef47a",
|
||||||
|
"66effa20e117bbbc64d9f64b": "67625a4c9ac37a06ed638698",
|
||||||
|
"66eff4070644e6fcf9306120": "67625a4c9ac37a06ed638698",
|
||||||
|
"66efeaf03fa9de9a601c366f": "67625a4c9ac37a06ed638698",
|
||||||
|
"6754cea887f2ea72b503ff76": "6769dddf9e215aa4c1874dd3",
|
||||||
|
"66efe72a4b6e475c9451dd30": "6769dddf9e215aa4c1874dd3",
|
||||||
|
"66eff14cc31c4df7f20c2c54": "6769e299431e125fdf3f6418",
|
||||||
|
"66eff8c2ee3e797aab913412": "6769e299431e125fdf3f6418",
|
||||||
|
"674c98b461cf9bdaa9c565a8": "6769e445b00ee084f16bbfbb",
|
||||||
|
"674cbc168f3ea92bd005b918": "6769e445b00ee084f16bbfbb",
|
||||||
|
"66efecfee265e6f892609629": "6769e445b00ee084f16bbfbb",
|
||||||
|
"66eff7f82658b11946ad44bb": "6769e676aaf099da20b7d467",
|
||||||
|
"674c976c5369dfdc946ff0ad": "6769e676aaf099da20b7d467",
|
||||||
|
"674b9ec033a5947c816ad6ab": "6769e676aaf099da20b7d467",
|
||||||
|
"66eff7cf00da4e80445af9c3": "6769ef9901adb8c734063eae",
|
||||||
|
"66efe9b6e8a66b11cdd492ee": "6769ef9901adb8c734063eae",
|
||||||
|
"66efe9bea584c3053e2aab6d": "6769ef9901adb8c734063eae",
|
||||||
|
"6766e7f9f6190497e4b8721d": "6769f0be9610d5eb0d23e7cc",
|
||||||
|
"66eff8dacc01feb757348643": "6769f0be9610d5eb0d23e7cc",
|
||||||
|
"66effa0ec4c859dac46c2f44": "6769f0be9610d5eb0d23e7cc",
|
||||||
|
"676ac038abb9426cda728645": "677b03604996670857682f5c",
|
||||||
|
"677d719e7932dddef7feecd6": "677b03604996670857682f5c",
|
||||||
|
"66eff5d7a21ea8a47b8f9c51": "677b04f244d35a69206ec4e4",
|
||||||
|
"66eff36625b48d3eccd8a045": "677b04f244d35a69206ec4e4",
|
||||||
|
"679c945fd8a95c30c65c3cda": "6798d6406ad52e1849131aee",
|
||||||
|
"679c9471139bb245167acc36": "6798d6406ad52e1849131aee",
|
||||||
|
"66eff90c0f33f0f609acb6e1": "6798d8529b81f1d84eac7c67",
|
||||||
|
"677d589ab88b111be404ee4e": "6798e18f1094b3f0d0978e8e",
|
||||||
|
"677d5f71b88b111be4075705": "6798e18f1094b3f0d0978e8e",
|
||||||
|
"67623fd145da84c20125c290": "67990658c4c1cec1f75c13ba",
|
||||||
|
"677d5f82b88b111be40767dc": "67990658c4c1cec1f75c13ba",
|
||||||
|
"66efeb19c8ff0f7a05156328": "6799286d2c0cbcd521bf44dd",
|
||||||
|
"676ac02db0b603a492858e1c": "679a16f9588df6cd38f9de8d",
|
||||||
|
"676ac02a07cf03934a6cbde2": "679a16f9588df6cd38f9de8d",
|
||||||
|
"66eff1c8e3556c3cf6440d82": "679a79773bd9f77047d4bd35",
|
||||||
|
"66eff4616fa5d685fa61ab73": "677b7c879a8cf3681ecf1673",
|
||||||
|
"66eff883bbe883f42d5b1b82": "677b7c879a8cf3681ecf1673",
|
||||||
|
"677d64e0b88b111be409168e": "679b8cd58db1457bba527516",
|
||||||
|
"66eff91d1b9f82b68c632f04": "679b8e71679cb913c9103bee",
|
||||||
|
"66eff245dcafdb4b5f28fb39": "679b97a57b4662b8eac3540a",
|
||||||
|
"679c9f0957f9dd8e6d15bd15": "679b97a57b4662b8eac3540a",
|
||||||
|
"679ca0c4201118199d6e78de": "67966e33a1a7e9077af54709",
|
||||||
|
"66efed7ee0b5c0ebc4dab794": "67966e33a1a7e9077af54709",
|
||||||
|
"679ca3f6d316032c80e458d0": "6796764b2cf9f076f16717d4",
|
||||||
|
"677d6e96b88b111be40c5ea8": "6796764b2cf9f076f16717d4",
|
||||||
|
"677d6e8cb88b111be40c5e9b": "67967b160fcf8aff0d6447d2",
|
||||||
|
"66eff932cd613a476b7b0b84": "67967b160fcf8aff0d6447d2",
|
||||||
|
"679ca3db226be9b608be83ba": "67975a790a4f9c2f44fe2911",
|
||||||
|
"679ca723f0c97c099527b5d6": "67975be9dd6554c393ad5183",
|
||||||
|
"679ca7342a6923147ae037a3": "67975be9dd6554c393ad5183"
|
||||||
|
},
|
||||||
|
"fail": {}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
{
|
||||||
|
"name": "Lotus",
|
||||||
|
"version": "1.5.3",
|
||||||
|
"main": "src/mod.js",
|
||||||
|
"license": "MIT",
|
||||||
|
"author": "Lunnayaluna",
|
||||||
|
"sptVersion": "~3.11",
|
||||||
|
"isBundleMod": true,
|
||||||
|
"loadBefore": [],
|
||||||
|
"loadAfter": [],
|
||||||
|
"incompatibilities": [],
|
||||||
|
"contributors": ["DJ"],
|
||||||
|
"scripts": {
|
||||||
|
"setup": "npm i",
|
||||||
|
"build": "node ./build.mjs",
|
||||||
|
"buildinfo": "node ./build.mjs --verbose",
|
||||||
|
"format": "npx @biomejs/biome check --write ./"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@biomejs/biome": "^1.8.3",
|
||||||
|
"@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",
|
||||||
|
"os": "^0.1",
|
||||||
|
"tsyringe": "4.8.0",
|
||||||
|
"typescript": "5.4",
|
||||||
|
"winston": "3.12"
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 31 KiB |
|
@ -0,0 +1,602 @@
|
||||||
|
import { ILocation } from "@spt/models/eft/common/ILocation";
|
||||||
|
import { HandbookItem } from "@spt/models/eft/common/tables/IHandbookBase";
|
||||||
|
import { Item } from "@spt/models/eft/common/tables/IItem";
|
||||||
|
import { Props } from "@spt/models/eft/common/tables/ITemplateItem";
|
||||||
|
import { IBarterScheme } from "@spt/models/eft/common/tables/ITrader";
|
||||||
|
import { ConfigTypes } from "@spt/models/enums/ConfigTypes";
|
||||||
|
import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig";
|
||||||
|
import { NewItemFromCloneDetails } from "@spt/models/spt/mod/NewItemDetails";
|
||||||
|
import { References } from "../Refs/References";
|
||||||
|
import { AllItemList, HandbookIDs, SlotsIDs } from "./GenEnums";
|
||||||
|
|
||||||
|
import * as fs from "node:fs";
|
||||||
|
import * as path from "node:path";
|
||||||
|
|
||||||
|
export class ItemGenerator {
|
||||||
|
protected itemsToSell: Item[] = [];
|
||||||
|
protected barterScheme: Record<string, IBarterScheme[][]> = {};
|
||||||
|
protected loyaltyLevel: Record<string, number> = {};
|
||||||
|
private itemConfig: CustomItemFormat;
|
||||||
|
|
||||||
|
constructor(private ref: References) {}
|
||||||
|
|
||||||
|
//#region Item Gen
|
||||||
|
public createCustomItems(itemDirectory: string): void {
|
||||||
|
this.itemConfig = this.combineItems(itemDirectory);
|
||||||
|
const tables = this.ref.tables;
|
||||||
|
|
||||||
|
for (const newId in this.itemConfig) {
|
||||||
|
const itemConfig = this.itemConfig[newId];
|
||||||
|
const tempClone = AllItemList[itemConfig["ItemToClone"]] || itemConfig["ItemToClone"];
|
||||||
|
const itemToClone = tempClone;
|
||||||
|
|
||||||
|
const newItem: NewItemFromCloneDetails = {
|
||||||
|
itemTplToClone: itemToClone,
|
||||||
|
overrideProperties: itemConfig.OverrideProperties,
|
||||||
|
parentId: tables.templates.items[itemToClone]._parent,
|
||||||
|
newId: newId,
|
||||||
|
handbookParentId: this.createHandbook(itemConfig, newId).ParentId,
|
||||||
|
handbookPriceRoubles: this.createHandbook(itemConfig, newId).Price,
|
||||||
|
fleaPriceRoubles: this.createHandbook(itemConfig, newId).Price,
|
||||||
|
locales: {
|
||||||
|
en: {
|
||||||
|
name: itemConfig.LocalePush.en.name,
|
||||||
|
shortName: itemConfig.LocalePush.en.shortName,
|
||||||
|
description: itemConfig.LocalePush.en.description,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
this.ref.customItem.createItemFromClone(newItem);
|
||||||
|
|
||||||
|
if (itemConfig.CloneToFilters) {
|
||||||
|
this.cloneToFilters(itemConfig, newId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemConfig.PushMastery) {
|
||||||
|
this.pushMastery(itemConfig, newId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemConfig.BotPush?.AddToBots) {
|
||||||
|
this.addToBots(itemConfig, newId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemConfig.LootPush?.LootContainersToAdd !== undefined) {
|
||||||
|
this.addToStaticLoot(itemConfig, newId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemConfig.CasePush?.CaseFiltersToAdd !== undefined) {
|
||||||
|
this.addToCases(itemConfig, newId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemConfig.PushToFleaBlacklist) {
|
||||||
|
this.pushToBlacklist(newId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemConfig.SlotPush?.Slot !== undefined) {
|
||||||
|
this.pushToSlot(itemConfig, newId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemConfig.PresetPush !== undefined) {
|
||||||
|
this.addCustomPresets(itemConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemConfig.QuestPush !== undefined) {
|
||||||
|
this.addToQuests(
|
||||||
|
this.ref.tables.templates.quests,
|
||||||
|
itemConfig.QuestPush.QuestConditionType,
|
||||||
|
itemConfig.QuestPush.QuestTargetConditionToClone,
|
||||||
|
newId,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.buildCustomPresets(itemConfig, newId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private createHandbook(itemConfig: CustomItemFormat[string], itemID: string): HandbookItem {
|
||||||
|
const tables = this.ref.tables;
|
||||||
|
const tempClone = AllItemList[itemConfig["ItemToClone"]] || itemConfig["ItemToClone"];
|
||||||
|
const itemToClone = tempClone;
|
||||||
|
|
||||||
|
if (itemConfig.Handbook !== undefined) {
|
||||||
|
const tempHBParent =
|
||||||
|
HandbookIDs[itemConfig["Handbook"]["HandbookParent"]] || itemConfig["Handbook"]["HandbookParent"];
|
||||||
|
const hbParent = tempHBParent;
|
||||||
|
|
||||||
|
const handbookEntry: HandbookItem = {
|
||||||
|
Id: itemID,
|
||||||
|
ParentId: hbParent,
|
||||||
|
Price: itemConfig["Handbook"]["HandbookPrice"],
|
||||||
|
};
|
||||||
|
|
||||||
|
return handbookEntry;
|
||||||
|
} else {
|
||||||
|
const hbBase = tables.templates.handbook.Items.find((i) => i.Id === itemToClone);
|
||||||
|
|
||||||
|
const handbookEntry = {
|
||||||
|
Id: itemID,
|
||||||
|
ParentId: hbBase.ParentId,
|
||||||
|
Price: hbBase.Price,
|
||||||
|
};
|
||||||
|
|
||||||
|
return handbookEntry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private cloneToFilters(itemConfig: CustomItemFormat[string], itemID: string): void {
|
||||||
|
const tables = this.ref.tables;
|
||||||
|
const tempClone = AllItemList[itemConfig.ItemToClone] || itemConfig.ItemToClone;
|
||||||
|
const itemToClone = tempClone;
|
||||||
|
|
||||||
|
for (const item in tables.templates.items) {
|
||||||
|
const itemConflictId = tables.templates.items[item]._props.ConflictingItems;
|
||||||
|
|
||||||
|
for (const itemInConflicts in itemConflictId) {
|
||||||
|
const itemInConflictsFiltersId = itemConflictId[itemInConflicts];
|
||||||
|
|
||||||
|
if (itemInConflictsFiltersId === itemToClone) {
|
||||||
|
itemConflictId.push(itemID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const slots in tables.templates.items[item]._props.Slots) {
|
||||||
|
const slotsId = tables.templates.items[item]._props.Slots[slots]._props.filters[0].Filter;
|
||||||
|
|
||||||
|
for (const itemInFilters in slotsId) {
|
||||||
|
const itemInFiltersId = slotsId[itemInFilters];
|
||||||
|
|
||||||
|
if (itemInFiltersId === itemToClone) {
|
||||||
|
slotsId.push(itemID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const cartridge in tables.templates.items[item]._props.Cartridges) {
|
||||||
|
const cartridgeId = tables.templates.items[item]._props.Cartridges[cartridge]._props.filters[0].Filter;
|
||||||
|
|
||||||
|
for (const itemInFilters in cartridgeId) {
|
||||||
|
const itemInFiltersId = cartridgeId[itemInFilters];
|
||||||
|
|
||||||
|
if (itemInFiltersId === itemToClone) {
|
||||||
|
cartridgeId.push(itemID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const chamber in tables.templates.items[item]._props.Chambers) {
|
||||||
|
const chamberId = tables.templates.items[item]._props.Chambers[chamber]._props.filters[0].Filter;
|
||||||
|
|
||||||
|
for (const itemInFilters in chamberId) {
|
||||||
|
const itemInFiltersId = chamberId[itemInFilters];
|
||||||
|
|
||||||
|
if (itemInFiltersId === itemToClone) {
|
||||||
|
chamberId.push(itemID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private pushMastery(itemConfig: CustomItemFormat[string], itemID: string): void {
|
||||||
|
const tables = this.ref.tables;
|
||||||
|
const new_mastery_DJCore = {
|
||||||
|
Name: itemConfig.LocalePush.en.name,
|
||||||
|
Templates: [itemID],
|
||||||
|
Level2: 450,
|
||||||
|
Level3: 900,
|
||||||
|
};
|
||||||
|
tables.globals.config.Mastering.push(new_mastery_DJCore);
|
||||||
|
}
|
||||||
|
|
||||||
|
private addToBots(itemConfig: CustomItemFormat[string], itemID: string): void {
|
||||||
|
const tables = this.ref.tables;
|
||||||
|
const tempClone = AllItemList[itemConfig.ItemToClone] || itemConfig.ItemToClone;
|
||||||
|
const itemToClone = tempClone;
|
||||||
|
|
||||||
|
for (const botId in tables.bots.types) {
|
||||||
|
for (const lootSlot in tables.bots.types[botId].inventory.items) {
|
||||||
|
const items = tables.bots.types[botId].inventory.items;
|
||||||
|
|
||||||
|
if (items[lootSlot][itemToClone]) {
|
||||||
|
const weight = items[lootSlot][itemToClone];
|
||||||
|
items[lootSlot][itemID] = weight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const equipSlot in tables.bots.types[botId].inventory.equipment) {
|
||||||
|
const equip = tables.bots.types[botId].inventory.equipment;
|
||||||
|
|
||||||
|
if (equip[equipSlot][itemToClone]) {
|
||||||
|
const weight = equip[equipSlot][itemToClone];
|
||||||
|
equip[equipSlot][itemID] = weight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const modItem in tables.bots.types[botId].inventory.mods) {
|
||||||
|
for (const modSlot in tables.bots.types[botId].inventory.mods[modItem]) {
|
||||||
|
if (tables.bots.types[botId]?.inventory?.mods[modItem][modSlot][itemToClone]) {
|
||||||
|
tables.bots.types[botId].inventory.mods[modItem][modSlot].push(itemID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tables.bots.types[botId]?.inventory?.mods[itemToClone]) {
|
||||||
|
tables.bots.types[botId].inventory.mods[itemID] = structuredClone(
|
||||||
|
tables.bots.types[botId].inventory.mods[itemToClone],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private addToStaticLoot(itemConfig: CustomItemFormat[string], itemID: string): void {
|
||||||
|
const tables = this.ref.tables;
|
||||||
|
const locations = tables.locations;
|
||||||
|
|
||||||
|
if (Array.isArray(itemConfig.LootPush?.LootContainersToAdd)) {
|
||||||
|
itemConfig.LootPush?.LootContainersToAdd.forEach((lootContainer) => {
|
||||||
|
const tempLC = AllItemList[lootContainer] || lootContainer;
|
||||||
|
const staticLC = tempLC;
|
||||||
|
|
||||||
|
const lootToPush = {
|
||||||
|
tpl: itemID,
|
||||||
|
relativeProbability: itemConfig.LootPush?.StaticLootProbability,
|
||||||
|
};
|
||||||
|
|
||||||
|
for (const map in locations) {
|
||||||
|
if (locations.hasOwnProperty(map)) {
|
||||||
|
const location: ILocation = locations[map];
|
||||||
|
if (location.staticLoot) {
|
||||||
|
const staticLoot = location.staticLoot;
|
||||||
|
if (staticLoot.hasOwnProperty(staticLC)) {
|
||||||
|
const staticContainer = staticLoot[staticLC];
|
||||||
|
if (staticContainer) {
|
||||||
|
staticContainer.itemDistribution.push(lootToPush);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private addToCases(itemConfig: CustomItemFormat[string], itemID: string): void {
|
||||||
|
const tables = this.ref.tables;
|
||||||
|
const items = tables.templates.items;
|
||||||
|
|
||||||
|
if (Array.isArray(itemConfig.CasePush?.CaseFiltersToAdd)) {
|
||||||
|
itemConfig.CasePush?.CaseFiltersToAdd.forEach((caseToAdd) => {
|
||||||
|
const tempCases = AllItemList[caseToAdd] || caseToAdd;
|
||||||
|
const cases = tempCases;
|
||||||
|
|
||||||
|
for (const item in items) {
|
||||||
|
if (items[item]._id === cases) {
|
||||||
|
if (items[item]._props?.Grids[0]._props.filters[0].Filter === undefined) {
|
||||||
|
const unbreakFilters = [
|
||||||
|
{
|
||||||
|
Filter: ["54009119af1c881c07000029"],
|
||||||
|
ExcludedFilter: [""],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
tables.templates.items[cases]._props.Grids[0]._props.filters = unbreakFilters;
|
||||||
|
} else if (items[item]._props?.Grids[0]._props.filters[0].Filter !== undefined) {
|
||||||
|
items[item]._props?.Grids[0]._props.filters[0].Filter.push(itemID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
for (const item in items) {
|
||||||
|
if (items[item]._id === itemConfig.CasePush?.CaseFiltersToAdd) {
|
||||||
|
if (items[item]._props?.Grids[0]._props.filters[0].Filter === undefined) {
|
||||||
|
const unbreakFilters = [
|
||||||
|
{
|
||||||
|
Filter: ["54009119af1c881c07000029"],
|
||||||
|
ExcludedFilter: [""],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
tables.templates.items[itemConfig.CasePush?.CaseFiltersToAdd]._props.Grids[0]._props.filters =
|
||||||
|
unbreakFilters;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (items[item]._props?.Grids[0]._props.filters[0].Filter !== undefined) {
|
||||||
|
items[item]._props?.Grids[0]._props.filters[0].Filter.push(itemID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private pushToSlot(itemConfig: CustomItemFormat[string], itemID: string): void {
|
||||||
|
const tables = this.ref.tables;
|
||||||
|
const DefaultInventory = tables.templates.items["55d7217a4bdc2d86028b456d"]._props.Slots;
|
||||||
|
const tempSlot = SlotsIDs[itemConfig.SlotPush?.Slot] || itemConfig.SlotPush?.Slot;
|
||||||
|
const slotToPush = tempSlot;
|
||||||
|
|
||||||
|
DefaultInventory[slotToPush]._props.filters[0].Filter.push(itemID);
|
||||||
|
}
|
||||||
|
|
||||||
|
private pushToBlacklist(itemID: string): void {
|
||||||
|
const ragfair = this.ref.configServer.getConfig<IRagfairConfig>(ConfigTypes.RAGFAIR);
|
||||||
|
ragfair.dynamic.blacklist.custom.push(...[itemID]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private combineItems(itemDirectory: string) {
|
||||||
|
const modules = fs.readdirSync(path.join(__dirname, itemDirectory));
|
||||||
|
|
||||||
|
const combinedModules: any = {};
|
||||||
|
|
||||||
|
modules.forEach((modFile) => {
|
||||||
|
const filesPath = path.join(__dirname, itemDirectory, modFile);
|
||||||
|
const fileContents = fs.readFileSync(filesPath, "utf-8");
|
||||||
|
const module = JSON.parse(fileContents) as CustomItemFormat;
|
||||||
|
|
||||||
|
Object.assign(combinedModules, module);
|
||||||
|
});
|
||||||
|
|
||||||
|
return combinedModules;
|
||||||
|
}
|
||||||
|
|
||||||
|
private addCustomPresets(itemConfig: CustomItemFormat[string]): void {
|
||||||
|
const tables = this.ref.tables;
|
||||||
|
const customPresets = itemConfig.PresetPush.PresetToAdd;
|
||||||
|
const presets = tables.globals.ItemPresets;
|
||||||
|
|
||||||
|
if (itemConfig.PresetPush !== undefined) {
|
||||||
|
customPresets.forEach((preset) => {
|
||||||
|
const finalPreset: PresetFormat = {
|
||||||
|
_changeWeaponName: preset._changeWeaponName,
|
||||||
|
_encyclopedia: preset._encyclopedia || undefined,
|
||||||
|
_id: preset._id,
|
||||||
|
_items: preset._items.map((itemData: any) => {
|
||||||
|
const item: Item = {
|
||||||
|
_id: itemData._id,
|
||||||
|
_tpl: itemData._tpl,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (itemData.parentId) {
|
||||||
|
item.parentId = itemData.parentId;
|
||||||
|
}
|
||||||
|
if (itemData.slotId) {
|
||||||
|
item.slotId = itemData.slotId;
|
||||||
|
}
|
||||||
|
|
||||||
|
return item;
|
||||||
|
}),
|
||||||
|
_name: preset._name,
|
||||||
|
_parent: preset._parent,
|
||||||
|
_type: "Preset",
|
||||||
|
};
|
||||||
|
|
||||||
|
presets[finalPreset._id] = finalPreset;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private buildCustomPresets(itemConfig: CustomItemFormat[string], itemID: string): void {
|
||||||
|
const tables = this.ref.tables;
|
||||||
|
const presets = tables.globals.ItemPresets;
|
||||||
|
const basePresetID = this.ref.hashUtil.generate();
|
||||||
|
|
||||||
|
if (
|
||||||
|
tables.templates.items[itemID]._parent === "5a341c4086f77401f2541505" ||
|
||||||
|
tables.templates.items[itemID]._parent === "5448e5284bdc2dcb718b4567" ||
|
||||||
|
tables.templates.items[itemID]._parent === "5448e54d4bdc2dcc718b4568"
|
||||||
|
) {
|
||||||
|
const finalPreset = {
|
||||||
|
_changeWeaponName: false,
|
||||||
|
_encyclopedia: itemID,
|
||||||
|
_id: this.ref.hashUtil.generate(),
|
||||||
|
_items: [],
|
||||||
|
_name: `${itemConfig.LocalePush.en.name} Preset`,
|
||||||
|
_parent: basePresetID,
|
||||||
|
_type: "Preset",
|
||||||
|
};
|
||||||
|
|
||||||
|
finalPreset._items.push({ _id: basePresetID, _tpl: itemID });
|
||||||
|
|
||||||
|
tables.templates.items[itemID]._props.Slots.forEach((slot) => {
|
||||||
|
if (slot._name !== "mod_nvg") {
|
||||||
|
finalPreset._items.push({
|
||||||
|
_id: this.ref.hashUtil.generate(),
|
||||||
|
_tpl: this.ref.randomUtil
|
||||||
|
.drawRandomFromList(slot._props.filters[0].Filter, 1, false)
|
||||||
|
.toString(),
|
||||||
|
parentId: basePresetID,
|
||||||
|
slotId: slot._name,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
presets[finalPreset._id] = finalPreset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private addToQuests(quests: any, condition: string, target: string, newTarget: string): void {
|
||||||
|
for (const quest of Object.keys(quests)) {
|
||||||
|
const questConditions = quests[quest];
|
||||||
|
for (const nextCondition of questConditions.conditions.AvailableForFinish) {
|
||||||
|
const nextConditionData = nextCondition;
|
||||||
|
if (nextConditionData.conditionType == condition && nextConditionData.target.includes(target)) {
|
||||||
|
nextConditionData.target.push(newTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//#region Clothing Gen
|
||||||
|
public createClothingTop(newTopConfig: any): void {
|
||||||
|
const tables = this.ref.tables;
|
||||||
|
const newTop = structuredClone(tables.templates.customization["5d28adcb86f77429242fc893"]);
|
||||||
|
const newHands = structuredClone(tables.templates.customization[newTopConfig.HandsToClone]);
|
||||||
|
const newSet = structuredClone(tables.templates.customization["5d1f623e86f7744bce0ef705"]);
|
||||||
|
|
||||||
|
newTop._id = newTopConfig.NewOutfitID;
|
||||||
|
newTop._name = newTopConfig.LocaleName;
|
||||||
|
newTop._props.Prefab.path = newTopConfig.BundlePath;
|
||||||
|
tables.templates.customization[newTopConfig.NewOutfitID] = newTop;
|
||||||
|
|
||||||
|
newHands._id = `${newTopConfig.NewOutfitID}Hands`;
|
||||||
|
newHands._name = `${newTopConfig.LocaleName}Hands`;
|
||||||
|
newHands._props.Prefab.path = newTopConfig.HandsBundlePath;
|
||||||
|
tables.templates.customization[`${newTopConfig.NewOutfitID}Hands`] = newHands;
|
||||||
|
|
||||||
|
newSet._id = `${newTopConfig.NewOutfitID}Set`;
|
||||||
|
newSet._name = `${newTopConfig.LocaleName}Set`;
|
||||||
|
newSet._props.Body = newTopConfig.NewOutfitID;
|
||||||
|
newSet._props.Hands = `${newTopConfig.NewOutfitID}Hands`;
|
||||||
|
newSet._props.Side = ["Usec", "Bear", "Savage"];
|
||||||
|
tables.templates.customization[`${newTopConfig.NewOutfitID}Set`] = newSet;
|
||||||
|
|
||||||
|
for (const locale in tables.locales.global) {
|
||||||
|
tables.locales.global[locale][`${newTopConfig.NewOutfitID}Set Name`] = newTopConfig.LocaleName;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newTopConfig.TraderScheme !== undefined) {
|
||||||
|
if (!tables.traders[newTopConfig.TraderScheme?.TraderToUse].base.customization_seller) {
|
||||||
|
tables.traders[newTopConfig.TraderScheme?.TraderToUse].base.customization_seller = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!tables.traders[newTopConfig.TraderScheme?.TraderToUse].suits) {
|
||||||
|
tables.traders[newTopConfig.TraderScheme?.TraderToUse].suits = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
tables.traders[newTopConfig.TraderScheme?.TraderToUse].suits.push({
|
||||||
|
_id: newTopConfig.NewOutfitID,
|
||||||
|
tid: newTopConfig.TraderScheme?.TraderToUse,
|
||||||
|
suiteId: `${newTopConfig.NewOutfitID}Set`,
|
||||||
|
isActive: true,
|
||||||
|
requirements: {
|
||||||
|
loyaltyLevel: newTopConfig.TraderScheme?.LoyaltyLevel,
|
||||||
|
profileLevel: newTopConfig.TraderScheme?.ProfileLevelRequirement,
|
||||||
|
standing: newTopConfig.TraderScheme?.TraderStandingRequirement,
|
||||||
|
skillRequirements: [],
|
||||||
|
questRequirements: [],
|
||||||
|
itemRequirements: [
|
||||||
|
{
|
||||||
|
count: newTopConfig.TraderScheme?.Cost,
|
||||||
|
_tpl: newTopConfig.TraderScheme?.CurrencyToUse,
|
||||||
|
onlyFunctional: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public createClothingBottom(newBottomConfig: any): void {
|
||||||
|
const tables = this.ref.tables;
|
||||||
|
const newBottom = structuredClone(tables.templates.customization["5d5e7f4986f7746956659f8a"]);
|
||||||
|
const newSet = structuredClone(tables.templates.customization["5cd946231388ce000d572fe3"]);
|
||||||
|
|
||||||
|
newBottom._id = newBottomConfig.NewBottomsID;
|
||||||
|
newBottom._name = newBottomConfig.LocaleName;
|
||||||
|
newBottom._props.Prefab.path = newBottomConfig.BundlePath;
|
||||||
|
tables.templates.customization[newBottomConfig.NewBottomsID] = newBottom;
|
||||||
|
|
||||||
|
newSet._id = `${newBottomConfig.NewBottomsID}Set`;
|
||||||
|
newSet._name = `${newBottomConfig.NewBottomsID}Set`;
|
||||||
|
newSet._props.Feet = newBottomConfig.NewBottomsID;
|
||||||
|
newSet._props.Side = ["Usec", "Bear", "Savage"];
|
||||||
|
tables.templates.customization[`${newBottomConfig.NewBottomsID}Set`] = newSet;
|
||||||
|
|
||||||
|
for (const locale in tables.locales.global) {
|
||||||
|
tables.locales.global[locale][`${newBottomConfig.NewBottomsID}Set Name`] = newBottomConfig.LocaleName;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newBottomConfig.TraderScheme !== undefined) {
|
||||||
|
if (!tables.traders[newBottomConfig.TraderScheme?.TraderToUse].base.customization_seller) {
|
||||||
|
tables.traders[newBottomConfig.TraderScheme?.TraderToUse].base.customization_seller = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!tables.traders[newBottomConfig.TraderScheme?.TraderToUse].suits) {
|
||||||
|
tables.traders[newBottomConfig.TraderScheme?.TraderToUse].suits = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
tables.traders[newBottomConfig.TraderScheme?.TraderToUse].suits.push({
|
||||||
|
_id: newBottomConfig.NewBottomsID,
|
||||||
|
tid: newBottomConfig.TraderScheme?.TraderToUse,
|
||||||
|
suiteId: `${newBottomConfig.NewBottomsID}Set`,
|
||||||
|
isActive: true,
|
||||||
|
requirements: {
|
||||||
|
loyaltyLevel: newBottomConfig.TraderScheme?.LoyaltyLevel,
|
||||||
|
profileLevel: newBottomConfig.TraderScheme?.ProfileLevelRequirement,
|
||||||
|
standing: newBottomConfig.TraderScheme?.TraderStandingRequirement,
|
||||||
|
skillRequirements: [],
|
||||||
|
questRequirements: [],
|
||||||
|
itemRequirements: [
|
||||||
|
{
|
||||||
|
count: newBottomConfig.TraderScheme?.Cost,
|
||||||
|
_tpl: newBottomConfig.TraderScheme?.CurrencyToUse,
|
||||||
|
onlyFunctional: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CustomItemFormat {
|
||||||
|
[newID: string]: {
|
||||||
|
ItemToClone: string;
|
||||||
|
OverrideProperties: Props;
|
||||||
|
LocalePush: {
|
||||||
|
en: {
|
||||||
|
name: string;
|
||||||
|
shortName: string;
|
||||||
|
description: string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
Handbook?: {
|
||||||
|
HandbookParent: string;
|
||||||
|
HandbookPrice: number;
|
||||||
|
};
|
||||||
|
SlotPush?: {
|
||||||
|
Slot: number;
|
||||||
|
};
|
||||||
|
BotPush?: {
|
||||||
|
AddToBots: boolean;
|
||||||
|
};
|
||||||
|
CasePush?: {
|
||||||
|
CaseFiltersToAdd: string[];
|
||||||
|
};
|
||||||
|
LootPush?: {
|
||||||
|
LootContainersToAdd: string[];
|
||||||
|
StaticLootProbability: number;
|
||||||
|
};
|
||||||
|
PresetPush?: {
|
||||||
|
PresetToAdd: PresetFormat[];
|
||||||
|
};
|
||||||
|
QuestPush?: {
|
||||||
|
QuestConditionType: string;
|
||||||
|
QuestTargetConditionToClone: string;
|
||||||
|
};
|
||||||
|
PushToFleaBlacklist?: boolean;
|
||||||
|
CloneToFilters?: boolean;
|
||||||
|
PushMastery?: boolean;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PresetFormat {
|
||||||
|
_changeWeaponName: boolean;
|
||||||
|
_encyclopedia?: string;
|
||||||
|
_id: string;
|
||||||
|
_items: ItemFormat[];
|
||||||
|
_name: string;
|
||||||
|
_parent: string;
|
||||||
|
_type: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ItemFormat {
|
||||||
|
_id: string;
|
||||||
|
_tpl: string;
|
||||||
|
parentId?: string;
|
||||||
|
slotId?: string;
|
||||||
|
}
|
|
@ -0,0 +1,100 @@
|
||||||
|
import { DependencyContainer } from "tsyringe";
|
||||||
|
|
||||||
|
import { BotController } from "@spt/controllers/BotController";
|
||||||
|
import { BotHelper } from "@spt/helpers/BotHelper";
|
||||||
|
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||||
|
import { ProbabilityHelper } from "@spt/helpers/ProbabilityHelper";
|
||||||
|
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
|
||||||
|
import { TraderHelper } from "@spt/helpers/TraderHelper";
|
||||||
|
import { PreSptModLoader } from "@spt/loaders/PreSptModLoader";
|
||||||
|
import { IDatabaseTables } from "@spt/models/spt/server/IDatabaseTables";
|
||||||
|
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||||
|
import { ImageRouter } from "@spt/routers/ImageRouter";
|
||||||
|
import { ConfigServer } from "@spt/servers/ConfigServer";
|
||||||
|
import { DatabaseServer } from "@spt/servers/DatabaseServer";
|
||||||
|
import { SaveServer } from "@spt/servers/SaveServer";
|
||||||
|
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||||
|
import { RagfairPriceService } from "@spt/services/RagfairPriceService";
|
||||||
|
import { CustomItemService } from "@spt/services/mod/CustomItemService";
|
||||||
|
import { OnUpdateModService } from "@spt/services/mod/onUpdate/OnUpdateModService";
|
||||||
|
import { StaticRouterModService } from "@spt/services/mod/staticRouter/StaticRouterModService";
|
||||||
|
import { HashUtil } from "@spt/utils/HashUtil";
|
||||||
|
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
|
||||||
|
import { ImporterUtil } from "@spt/utils/ImporterUtil";
|
||||||
|
import { JsonUtil } from "@spt/utils/JsonUtil";
|
||||||
|
import { RandomUtil } from "@spt/utils/RandomUtil";
|
||||||
|
|
||||||
|
export class References {
|
||||||
|
public container: DependencyContainer;
|
||||||
|
public preSptModLoader: PreSptModLoader;
|
||||||
|
public configServer: ConfigServer;
|
||||||
|
public saveServer: SaveServer;
|
||||||
|
public itemHelper: ItemHelper;
|
||||||
|
public logger: ILogger;
|
||||||
|
public staticRouter: StaticRouterModService;
|
||||||
|
public onUpdateModService: OnUpdateModService;
|
||||||
|
|
||||||
|
public database: DatabaseServer;
|
||||||
|
public databaseService: DatabaseService;
|
||||||
|
public customItem: CustomItemService;
|
||||||
|
public imageRouter: ImageRouter;
|
||||||
|
public jsonUtil: JsonUtil;
|
||||||
|
public profileHelper: ProfileHelper;
|
||||||
|
public ragfairPriceService: RagfairPriceService;
|
||||||
|
public importerUtil: ImporterUtil;
|
||||||
|
public tables: IDatabaseTables;
|
||||||
|
public botHelper: BotHelper;
|
||||||
|
public randomUtil: RandomUtil;
|
||||||
|
public hashUtil: HashUtil;
|
||||||
|
public probHelper: ProbabilityHelper;
|
||||||
|
public traderHelper: TraderHelper;
|
||||||
|
public botController: BotController;
|
||||||
|
public httpResponse: HttpResponseUtil;
|
||||||
|
|
||||||
|
public preSptLoad(container: DependencyContainer): void {
|
||||||
|
this.container = container;
|
||||||
|
this.preSptModLoader = container.resolve<PreSptModLoader>("PreSptModLoader");
|
||||||
|
this.imageRouter = container.resolve<ImageRouter>("ImageRouter");
|
||||||
|
this.configServer = container.resolve<ConfigServer>("ConfigServer");
|
||||||
|
this.saveServer = container.resolve<SaveServer>("SaveServer");
|
||||||
|
this.itemHelper = container.resolve<ItemHelper>("ItemHelper");
|
||||||
|
this.logger = container.resolve<ILogger>("WinstonLogger");
|
||||||
|
this.staticRouter = container.resolve<StaticRouterModService>("StaticRouterModService");
|
||||||
|
this.onUpdateModService = container.resolve<OnUpdateModService>("OnUpdateModService");
|
||||||
|
this.randomUtil = container.resolve<RandomUtil>("RandomUtil");
|
||||||
|
this.database = container.resolve<DatabaseServer>("DatabaseServer");
|
||||||
|
this.databaseService = container.resolve<DatabaseService>("DatabaseService");
|
||||||
|
this.tables = this.databaseService.getTables();
|
||||||
|
this.customItem = container.resolve<CustomItemService>("CustomItemService");
|
||||||
|
this.jsonUtil = container.resolve<JsonUtil>("JsonUtil");
|
||||||
|
this.profileHelper = container.resolve<ProfileHelper>("ProfileHelper");
|
||||||
|
this.ragfairPriceService = container.resolve<RagfairPriceService>("RagfairPriceService");
|
||||||
|
this.importerUtil = container.resolve<ImporterUtil>("ImporterUtil");
|
||||||
|
this.botHelper = container.resolve<BotHelper>("BotHelper");
|
||||||
|
this.hashUtil = container.resolve<HashUtil>("HashUtil");
|
||||||
|
this.probHelper = container.resolve<ProbabilityHelper>("ProbabilityHelper");
|
||||||
|
this.traderHelper = container.resolve<TraderHelper>("TraderHelper");
|
||||||
|
this.botController = container.resolve<BotController>("BotController");
|
||||||
|
this.httpResponse = container.resolve<HttpResponseUtil>("HttpResponseUtil");
|
||||||
|
}
|
||||||
|
|
||||||
|
public postDBLoad(container: DependencyContainer): void {
|
||||||
|
this.container = container;
|
||||||
|
this.database = container.resolve<DatabaseServer>("DatabaseServer");
|
||||||
|
this.imageRouter = container.resolve<ImageRouter>("ImageRouter");
|
||||||
|
this.logger = container.resolve<ILogger>("WinstonLogger");
|
||||||
|
this.tables = container.resolve<DatabaseServer>("DatabaseServer").getTables();
|
||||||
|
this.customItem = container.resolve<CustomItemService>("CustomItemService");
|
||||||
|
this.jsonUtil = container.resolve<JsonUtil>("JsonUtil");
|
||||||
|
this.profileHelper = container.resolve<ProfileHelper>("ProfileHelper");
|
||||||
|
this.ragfairPriceService = container.resolve<RagfairPriceService>("RagfairPriceService");
|
||||||
|
this.importerUtil = container.resolve<ImporterUtil>("ImporterUtil");
|
||||||
|
this.botHelper = container.resolve<BotHelper>("BotHelper");
|
||||||
|
this.randomUtil = container.resolve<RandomUtil>("RandomUtil");
|
||||||
|
this.itemHelper = container.resolve<ItemHelper>("ItemHelper");
|
||||||
|
this.hashUtil = container.resolve<HashUtil>("HashUtil");
|
||||||
|
this.probHelper = container.resolve<ProbabilityHelper>("ProbabilityHelper");
|
||||||
|
this.botController = container.resolve<BotController>("BotController");
|
||||||
|
this.httpResponse = container.resolve<HttpResponseUtil>("HttpResponseUtil");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,122 @@
|
||||||
|
import { ITraderAssort, ITraderBase } from "@spt/models/eft/common/tables/ITrader";
|
||||||
|
import { ITraderConfig, UpdateTime } from "@spt/models/spt/config/ITraderConfig";
|
||||||
|
import { References } from "../Refs/References";
|
||||||
|
|
||||||
|
export class TraderUtils {
|
||||||
|
constructor(public ref: References) {}
|
||||||
|
/**
|
||||||
|
* Add profile picture to our trader
|
||||||
|
* @param baseJson json file for trader (db/base.json)
|
||||||
|
* @param preAkiModLoader mod loader class - used to get the mods file path
|
||||||
|
* @param imageRouter image router class - used to register the trader image path so we see their image on trader page
|
||||||
|
* @param traderImageName Filename of the trader icon to use
|
||||||
|
*/
|
||||||
|
|
||||||
|
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
||||||
|
public registerProfileImage(baseJson: any, modName: string, traderImageName: string): void {
|
||||||
|
// Reference the mod "res" folder
|
||||||
|
const imageFilepath = `./${this.ref.preSptModLoader.getModPath(modName)}res`;
|
||||||
|
|
||||||
|
// Register a route to point to the profile picture - remember to remove the .jpg from it
|
||||||
|
this.ref.imageRouter.addRoute(baseJson.avatar.replace(".png", ""), `${imageFilepath}/${traderImageName}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add record to trader config to set the refresh time of trader in seconds (default is 60 minutes)
|
||||||
|
* @param traderConfig trader config to add our trader to
|
||||||
|
* @param baseJson json file for trader (db/base.json)
|
||||||
|
* @param refreshTimeSeconds How many sections between trader stock refresh
|
||||||
|
*/
|
||||||
|
public setTraderUpdateTime(
|
||||||
|
traderConfig: ITraderConfig,
|
||||||
|
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
||||||
|
baseJson: any,
|
||||||
|
minSeconds: number,
|
||||||
|
maxSeconds: number,
|
||||||
|
): void {
|
||||||
|
// Add refresh time in seconds to config
|
||||||
|
const traderRefreshRecord: UpdateTime = {
|
||||||
|
traderId: baseJson._id,
|
||||||
|
seconds: {
|
||||||
|
min: minSeconds,
|
||||||
|
max: maxSeconds,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
traderConfig.updateTime.push(traderRefreshRecord);
|
||||||
|
}
|
||||||
|
|
||||||
|
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
||||||
|
public addTraderToDb(traderDetailsToAdd: any, assort): void {
|
||||||
|
this.ref.tables.traders[traderDetailsToAdd._id] = {
|
||||||
|
assort: this.ref.jsonUtil.deserialize(this.ref.jsonUtil.serialize(assort)) as ITraderAssort,
|
||||||
|
base: this.ref.jsonUtil.deserialize(this.ref.jsonUtil.serialize(traderDetailsToAdd)) as ITraderBase,
|
||||||
|
questassort: {
|
||||||
|
started: {},
|
||||||
|
success: {},
|
||||||
|
fail: {},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// biome-ignore lint/suspicious/noExplicitAny: traderDetailsToAdd comes from base.json, so no type
|
||||||
|
public addTraderToDbCustomAssort(traderDetailsToAdd: any): void {
|
||||||
|
// Add trader to trader table, key is the traders id
|
||||||
|
this.ref.tables.traders[traderDetailsToAdd._id] = {
|
||||||
|
assort: this.createAssortTable(), // assorts are the 'offers' trader sells, can be a single item (e.g. carton of milk) or multiple items as a collection (e.g. a gun)
|
||||||
|
base: this.ref.jsonUtil.deserialize(this.ref.jsonUtil.serialize(traderDetailsToAdd)) as ITraderBase, // Deserialise/serialise creates a copy of the json and allows us to cast it as an ITraderBase
|
||||||
|
questassort: {
|
||||||
|
started: {},
|
||||||
|
success: {},
|
||||||
|
fail: {},
|
||||||
|
}, // questassort is empty as trader has no assorts unlocked by quests
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create basic data for trader + add empty assorts table for trader
|
||||||
|
* @param tables SPT db
|
||||||
|
* @param jsonUtil SPT JSON utility class
|
||||||
|
* @returns ITraderAssort
|
||||||
|
*/
|
||||||
|
private createAssortTable(): ITraderAssort {
|
||||||
|
// Create a blank assort object, ready to have items added
|
||||||
|
const assortTable: ITraderAssort = {
|
||||||
|
nextResupply: 0,
|
||||||
|
items: [],
|
||||||
|
barter_scheme: {},
|
||||||
|
loyal_level_items: {},
|
||||||
|
};
|
||||||
|
|
||||||
|
return assortTable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add traders name/location/description to the locale table
|
||||||
|
* @param baseJson json file for trader (db/base.json)
|
||||||
|
* @param tables database tables
|
||||||
|
* @param fullName Complete name of trader
|
||||||
|
* @param firstName First name of trader
|
||||||
|
* @param nickName Nickname of trader
|
||||||
|
* @param location Location of trader (e.g. "Here in the cat shop")
|
||||||
|
* @param description Description of trader
|
||||||
|
*/
|
||||||
|
public addTraderToLocales(
|
||||||
|
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
||||||
|
baseJson: any,
|
||||||
|
fullName: string,
|
||||||
|
firstName: string,
|
||||||
|
nickName: string,
|
||||||
|
location: string,
|
||||||
|
description: string,
|
||||||
|
) {
|
||||||
|
// For each language, add locale for the new trader
|
||||||
|
const locales = Object.values(this.ref.tables.locales.global) as Record<string, string>[];
|
||||||
|
for (const locale of locales) {
|
||||||
|
locale[`${baseJson._id} FullName`] = fullName;
|
||||||
|
locale[`${baseJson._id} FirstName`] = firstName;
|
||||||
|
locale[`${baseJson._id} Nickname`] = nickName;
|
||||||
|
locale[`${baseJson._id} Location`] = location;
|
||||||
|
locale[`${baseJson._id} Description`] = description;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
import { ITraderConfig } from "@spt/models/spt/config/ITraderConfig";
|
||||||
|
import { References } from "../Refs/References";
|
||||||
|
import { TraderUtils } from "../Refs/Utils";
|
||||||
|
|
||||||
|
import * as assortJson from "../../db/assort.json";
|
||||||
|
import * as baseJson from "../../db/base.json";
|
||||||
|
|
||||||
|
const modName = "Lunnayaluna Lotus";
|
||||||
|
|
||||||
|
export class TraderData {
|
||||||
|
constructor(
|
||||||
|
private traderConfig: ITraderConfig,
|
||||||
|
private ref: References,
|
||||||
|
private traderHelper: TraderUtils,
|
||||||
|
) {}
|
||||||
|
|
||||||
|
public registerProfileImage() {
|
||||||
|
this.traderHelper.registerProfileImage(baseJson, modName, "lotus.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
public setupTraderUpdateTime() {
|
||||||
|
this.traderHelper.setTraderUpdateTime(this.traderConfig, baseJson, 1800, 7200);
|
||||||
|
}
|
||||||
|
|
||||||
|
public pushTrader() {
|
||||||
|
this.traderHelper = new TraderUtils(this.ref);
|
||||||
|
this.traderHelper.addTraderToDb(baseJson, assortJson);
|
||||||
|
}
|
||||||
|
|
||||||
|
public addTraderToLocales(
|
||||||
|
fullName: string,
|
||||||
|
firstName: string,
|
||||||
|
nickName: string,
|
||||||
|
location: string,
|
||||||
|
description: string,
|
||||||
|
) {
|
||||||
|
const locales = Object.values(this.ref.tables.locales.global) as Record<string, string>[];
|
||||||
|
for (const locale of locales) {
|
||||||
|
locale[`${baseJson._id} FullName`] = fullName;
|
||||||
|
locale[`${baseJson._id} FirstName`] = firstName;
|
||||||
|
locale[`${baseJson._id} Nickname`] = nickName;
|
||||||
|
locale[`${baseJson._id} Location`] = location;
|
||||||
|
locale[`${baseJson._id} Description`] = description;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
import { DependencyContainer } from "tsyringe";
|
||||||
|
|
||||||
|
import { ConfigTypes } from "@spt/models/enums/ConfigTypes";
|
||||||
|
import { Traders } from "@spt/models/enums/Traders";
|
||||||
|
import { IPostDBLoadMod } from "@spt/models/external/IPostDBLoadMod";
|
||||||
|
import { IPreSptLoadMod } from "@spt/models/external/IPreSptLoadMod";
|
||||||
|
import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig";
|
||||||
|
import { ITraderConfig } from "@spt/models/spt/config/ITraderConfig";
|
||||||
|
import { LogTextColor } from "@spt/models/spt/logging/LogTextColor";
|
||||||
|
import { ItemGenerator } from "./CustomItems/ItemGenerator";
|
||||||
|
import { References } from "./Refs/References";
|
||||||
|
import { TraderUtils } from "./Refs/Utils";
|
||||||
|
import { TraderData } from "./Trader/Lotus";
|
||||||
|
|
||||||
|
import * as baseJson from "../db/base.json";
|
||||||
|
import * as questAssort from "../db/questassort.json";
|
||||||
|
|
||||||
|
class Lotus implements IPreSptLoadMod, IPostDBLoadMod {
|
||||||
|
private ref: References = new References();
|
||||||
|
|
||||||
|
public preSptLoad(container: DependencyContainer): void {
|
||||||
|
this.ref.preSptLoad(container);
|
||||||
|
|
||||||
|
const ragfair: IRagfairConfig = this.ref.configServer.getConfig<IRagfairConfig>(ConfigTypes.RAGFAIR);
|
||||||
|
const traderConfig: ITraderConfig = this.ref.configServer.getConfig<ITraderConfig>(ConfigTypes.TRADER);
|
||||||
|
const traderUtils = new TraderUtils(this.ref);
|
||||||
|
const traderData = new TraderData(traderConfig, this.ref, traderUtils);
|
||||||
|
|
||||||
|
traderData.registerProfileImage();
|
||||||
|
traderData.setupTraderUpdateTime();
|
||||||
|
|
||||||
|
Traders[baseJson._id] = baseJson._id;
|
||||||
|
ragfair.traders[baseJson._id] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public postDBLoad(container: DependencyContainer): void {
|
||||||
|
this.ref.postDBLoad(container);
|
||||||
|
|
||||||
|
const traderConfig: ITraderConfig = this.ref.configServer.getConfig<ITraderConfig>(ConfigTypes.TRADER);
|
||||||
|
const locations = this.ref.tables.locations;
|
||||||
|
const itemGenerator = new ItemGenerator(this.ref);
|
||||||
|
const traderUtils = new TraderUtils(this.ref);
|
||||||
|
const traderData = new TraderData(traderConfig, this.ref, traderUtils);
|
||||||
|
|
||||||
|
traderData.pushTrader();
|
||||||
|
this.ref.tables.traders[baseJson._id].questassort = questAssort;
|
||||||
|
traderData.addTraderToLocales(
|
||||||
|
baseJson.name,
|
||||||
|
"Lotus",
|
||||||
|
baseJson.nickname,
|
||||||
|
baseJson.location,
|
||||||
|
"A businesswoman who travels around conflict zones around the world.",
|
||||||
|
);
|
||||||
|
|
||||||
|
itemGenerator.createCustomItems("../../db/ItemGen/Keys");
|
||||||
|
locations.laboratory.base.AccessKeys.push(...["6747b519aa6cb78b189e6081"]);
|
||||||
|
|
||||||
|
this.ref.logger.log("Lotus arrived in Tarkov", LogTextColor.CYAN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { mod: new Lotus() };
|
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 115 KiB |
After Width: | Height: | Size: 99 KiB |
After Width: | Height: | Size: 83 KiB |
After Width: | Height: | Size: 103 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 90 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 109 KiB |
After Width: | Height: | Size: 110 KiB |
After Width: | Height: | Size: 107 KiB |
After Width: | Height: | Size: 100 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 104 KiB |
After Width: | Height: | Size: 76 KiB |
After Width: | Height: | Size: 101 KiB |
After Width: | Height: | Size: 101 KiB |
After Width: | Height: | Size: 99 KiB |
After Width: | Height: | Size: 90 KiB |
After Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 69 KiB |
After Width: | Height: | Size: 67 KiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 73 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 91 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 104 KiB |
After Width: | Height: | Size: 76 KiB |
After Width: | Height: | Size: 104 KiB |
After Width: | Height: | Size: 75 KiB |
After Width: | Height: | Size: 101 KiB |
After Width: | Height: | Size: 72 KiB |
After Width: | Height: | Size: 67 KiB |
After Width: | Height: | Size: 116 KiB |
After Width: | Height: | Size: 95 KiB |
After Width: | Height: | Size: 100 KiB |
After Width: | Height: | Size: 77 KiB |
After Width: | Height: | Size: 97 KiB |
After Width: | Height: | Size: 85 KiB |
After Width: | Height: | Size: 95 KiB |
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 96 KiB |
After Width: | Height: | Size: 93 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 105 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 105 KiB |
After Width: | Height: | Size: 113 KiB |
After Width: | Height: | Size: 110 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 111 KiB |
After Width: | Height: | Size: 91 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 77 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 100 KiB |
After Width: | Height: | Size: 58 KiB |