• Updated Load Order

• Added Lotus Trader Mod
• Added Stash Search
• Created SVM Preset
This commit is contained in:
Kyle 2025-05-16 20:21:39 -04:00
parent f593da858c
commit e9823bed28
217 changed files with 154559 additions and 3 deletions

View File

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

BIN
mods/Load Order Editor/User/Mods/Load Order Editor.exe (Stored with Git LFS) Normal file

Binary file not shown.

View File

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

28
mods/Lotus/meta.ini Normal file
View File

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

View File

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

View 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"
]
}
}
}

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Some files were not shown because too many files have changed in this diff Show More