Merge branch 'develop' into feat/configurable-btr-delivery-time
This commit is contained in:
@@ -148,6 +148,12 @@
|
||||
"craftTimeSeconds": 3960,
|
||||
"repeatable": false
|
||||
},
|
||||
{
|
||||
"reward": ["5e2af47786f7746d404f3aaa"],
|
||||
"requiredItems": ["5448fee04bdc2dbc018b4567"],
|
||||
"craftTimeSeconds": 3960,
|
||||
"repeatable": false
|
||||
},
|
||||
{
|
||||
"reward": ["590c346786f77423e50ed342"],
|
||||
"requiredItems": ["679b9d55708cfcb2060b9ae3"],
|
||||
@@ -178,6 +184,18 @@
|
||||
"craftTimeSeconds": 3960,
|
||||
"repeatable": false
|
||||
},
|
||||
{
|
||||
"reward": ["67ea616a74f765cefd009fb7"],
|
||||
"requiredItems": [
|
||||
"679b9d4b3374fb14f40efe6d",
|
||||
"679b9d6390622daf9708da76",
|
||||
"679b9cce4e4ed4b3b40ae5c5",
|
||||
"679b9d43597ba2ed120c3d44",
|
||||
"679b9d55708cfcb2060b9ae3"
|
||||
],
|
||||
"craftTimeSeconds": 3960,
|
||||
"repeatable": false
|
||||
},
|
||||
{
|
||||
"reward": ["5d1b376e86f774252519444e"],
|
||||
"requiredItems": ["6582dbf0b8d7830efc45016f"],
|
||||
|
||||
+462
@@ -385,6 +385,54 @@
|
||||
"parentId": "6808b1a4c25caf3a4305d44c",
|
||||
"slotId": "Right_side_plate"
|
||||
},
|
||||
{
|
||||
"_id": "68443f58e819155390903319",
|
||||
"_tpl": "6575ce3716c2762fba0057fd",
|
||||
"parentId": "6808b1a4c25caf3a4305d44c",
|
||||
"slotId": "Soft_armor_front"
|
||||
},
|
||||
{
|
||||
"_id": "68443f58e9af9f254a78868e",
|
||||
"_tpl": "6575ce45dc9932aed601c616",
|
||||
"parentId": "6808b1a4c25caf3a4305d44c",
|
||||
"slotId": "Soft_armor_back"
|
||||
},
|
||||
{
|
||||
"_id": "68443f58daf66c22f3a67da8",
|
||||
"_tpl": "6575ce5016c2762fba005802",
|
||||
"parentId": "6808b1a4c25caf3a4305d44c",
|
||||
"slotId": "Soft_armor_left"
|
||||
},
|
||||
{
|
||||
"_id": "68443f58bf0113fb0354d5a5",
|
||||
"_tpl": "6575ce5befc786cd9101a671",
|
||||
"parentId": "6808b1a4c25caf3a4305d44c",
|
||||
"slotId": "soft_armor_right"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5869582b58ba3681be",
|
||||
"_tpl": "6575ce6f16c2762fba005806",
|
||||
"parentId": "6808b1a4c25caf3a4305d44c",
|
||||
"slotId": "Collar"
|
||||
},
|
||||
{
|
||||
"_id": "68443f58f96fc647bc6d586b",
|
||||
"_tpl": "6575ce9db15fef3dd4051628",
|
||||
"parentId": "6808b1a4c25caf3a4305d44c",
|
||||
"slotId": "Shoulder_l"
|
||||
},
|
||||
{
|
||||
"_id": "68443f588802579fd65d37be",
|
||||
"_tpl": "6575cea8b15fef3dd405162c",
|
||||
"parentId": "6808b1a4c25caf3a4305d44c",
|
||||
"slotId": "Shoulder_r"
|
||||
},
|
||||
{
|
||||
"_id": "68443f58ac75d4d6d5f55675",
|
||||
"_tpl": "6575ce8bdc9932aed601c61e",
|
||||
"parentId": "6808b1a4c25caf3a4305d44c",
|
||||
"slotId": "Groin"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a7c25caf3a4305d61f",
|
||||
"_tpl": "558022b54bdc2dac148b458d",
|
||||
@@ -1445,6 +1493,24 @@
|
||||
"parentId": "6808b1a6c25caf3a4305d57c",
|
||||
"slotId": "mod_equipment"
|
||||
},
|
||||
{
|
||||
"_id": "68443f58ef6803b75880da93",
|
||||
"_tpl": "657bc06daab96fccee08be9b",
|
||||
"parentId": "6808b1a6c25caf3a4305d57c",
|
||||
"slotId": "Helmet_top"
|
||||
},
|
||||
{
|
||||
"_id": "68443f58cd8d1ea8c7472a53",
|
||||
"_tpl": "657bc0d8a1c61ee0c303632f",
|
||||
"parentId": "6808b1a6c25caf3a4305d57c",
|
||||
"slotId": "Helmet_back"
|
||||
},
|
||||
{
|
||||
"_id": "68443f58c72bd8fcd1f0ce2c",
|
||||
"_tpl": "657bc107aab96fccee08be9f",
|
||||
"parentId": "6808b1a6c25caf3a4305d57c",
|
||||
"slotId": "Helmet_ears"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a5c25caf3a4305d53e",
|
||||
"_tpl": "5aafbcd986f7745e590fff23",
|
||||
@@ -1492,6 +1558,30 @@
|
||||
"parentId": "6808b1a4c25caf3a4305d3ee",
|
||||
"slotId": "Back_plate"
|
||||
},
|
||||
{
|
||||
"_id": "68443f58888080c634a51d73",
|
||||
"_tpl": "6570f6e774d84423df065f21",
|
||||
"parentId": "6808b1a4c25caf3a4305d3ee",
|
||||
"slotId": "Soft_armor_front"
|
||||
},
|
||||
{
|
||||
"_id": "68443f58fa7c08483b87c9be",
|
||||
"_tpl": "6570f71dd67d0309980a7af8",
|
||||
"parentId": "6808b1a4c25caf3a4305d3ee",
|
||||
"slotId": "Soft_armor_back"
|
||||
},
|
||||
{
|
||||
"_id": "68443f589d15b0a064267a74",
|
||||
"_tpl": "6570f74774d84423df065f25",
|
||||
"parentId": "6808b1a4c25caf3a4305d3ee",
|
||||
"slotId": "Soft_armor_left"
|
||||
},
|
||||
{
|
||||
"_id": "68443f58e9abc3e55f614390",
|
||||
"_tpl": "6570f79c4c65ab77a6015121",
|
||||
"parentId": "6808b1a4c25caf3a4305d3ee",
|
||||
"slotId": "soft_armor_right"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a3c25caf3a4305d3cf",
|
||||
"_tpl": "5ac66d725acfc43b321d4b60",
|
||||
@@ -1802,6 +1892,24 @@
|
||||
"BuyRestrictionCurrent": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a25c169bf7456207f",
|
||||
"_tpl": "657112234269e9a568089eac",
|
||||
"parentId": "6808b1a3c25caf3a4305d35c",
|
||||
"slotId": "Helmet_top"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a7e90980375bc4528",
|
||||
"_tpl": "657112a4818110db4600aa66",
|
||||
"parentId": "6808b1a3c25caf3a4305d35c",
|
||||
"slotId": "Helmet_back"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a4f5126cb14a660f7",
|
||||
"_tpl": "657112ce22996eaf110881fb",
|
||||
"parentId": "6808b1a3c25caf3a4305d35c",
|
||||
"slotId": "Helmet_ears"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a2c25caf3a4305d2d5",
|
||||
"_tpl": "5b44d0de86f774503d30cba8",
|
||||
@@ -1825,6 +1933,48 @@
|
||||
"parentId": "6808b1a2c25caf3a4305d2d5",
|
||||
"slotId": "Back_plate"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a7e729f77a4e3fc09",
|
||||
"_tpl": "6575c342efc786cd9101a5e5",
|
||||
"parentId": "6808b1a2c25caf3a4305d2d5",
|
||||
"slotId": "Soft_armor_front"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5ae102c7d1b540eb24",
|
||||
"_tpl": "6575c34bc6700bd6b40e8a84",
|
||||
"parentId": "6808b1a2c25caf3a4305d2d5",
|
||||
"slotId": "Soft_armor_back"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5af577ef03c301fe5c",
|
||||
"_tpl": "6575c35bc6700bd6b40e8a88",
|
||||
"parentId": "6808b1a2c25caf3a4305d2d5",
|
||||
"slotId": "Soft_armor_left"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a5f04bc0a19ca5a77",
|
||||
"_tpl": "6575c366c6700bd6b40e8a8c",
|
||||
"parentId": "6808b1a2c25caf3a4305d2d5",
|
||||
"slotId": "soft_armor_right"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a5486768017aa7520",
|
||||
"_tpl": "6575c373dc9932aed601c5ec",
|
||||
"parentId": "6808b1a2c25caf3a4305d2d5",
|
||||
"slotId": "Collar"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a26452590fee3914f",
|
||||
"_tpl": "6575c385dc9932aed601c5f0",
|
||||
"parentId": "6808b1a2c25caf3a4305d2d5",
|
||||
"slotId": "Groin"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a3dc4960abc60048f",
|
||||
"_tpl": "6575c390efc786cd9101a5e9",
|
||||
"parentId": "6808b1a2c25caf3a4305d2d5",
|
||||
"slotId": "Groin_back"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a2c25caf3a4305d2a9",
|
||||
"_tpl": "5b6d9ce188a4501afc1b2b25",
|
||||
@@ -1977,6 +2127,36 @@
|
||||
"parentId": "6808b1a5c25caf3a4305d51b",
|
||||
"slotId": "Back_plate"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5aac477472aa728d30",
|
||||
"_tpl": "6571dbd388ead79fcf091d71",
|
||||
"parentId": "6808b1a5c25caf3a4305d51b",
|
||||
"slotId": "Soft_armor_front"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a6a49b0c7e7f2998c",
|
||||
"_tpl": "6571dbda88ead79fcf091d75",
|
||||
"parentId": "6808b1a5c25caf3a4305d51b",
|
||||
"slotId": "Soft_armor_back"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5af36a8ebc575c5db8",
|
||||
"_tpl": "6571dbe07c02ae206002502e",
|
||||
"parentId": "6808b1a5c25caf3a4305d51b",
|
||||
"slotId": "Soft_armor_left"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a5c8b5e0766211846",
|
||||
"_tpl": "6571dbeaee8ec43d520cf89e",
|
||||
"parentId": "6808b1a5c25caf3a4305d51b",
|
||||
"slotId": "soft_armor_right"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a8469a02867d69249",
|
||||
"_tpl": "6571dbef88ead79fcf091d79",
|
||||
"parentId": "6808b1a5c25caf3a4305d51b",
|
||||
"slotId": "Collar"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a5c25caf3a4305d4e7",
|
||||
"_tpl": "5c0e625a86f7742d77340f62",
|
||||
@@ -1988,6 +2168,36 @@
|
||||
"BuyRestrictionCurrent": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a597b642e830c2285",
|
||||
"_tpl": "65764275d8537eb26a0355e9",
|
||||
"parentId": "6808b1a5c25caf3a4305d4e7",
|
||||
"slotId": "Soft_armor_front"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a436bd1709a688e8e",
|
||||
"_tpl": "657642b0e6d5dd75f40688a5",
|
||||
"parentId": "6808b1a5c25caf3a4305d4e7",
|
||||
"slotId": "Soft_armor_back"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a6443172b19106d5e",
|
||||
"_tpl": "6576434820cc24d17102b148",
|
||||
"parentId": "6808b1a5c25caf3a4305d4e7",
|
||||
"slotId": "Soft_armor_left"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a009817c6db22f632",
|
||||
"_tpl": "657643732bc38ef78e076477",
|
||||
"parentId": "6808b1a5c25caf3a4305d4e7",
|
||||
"slotId": "soft_armor_right"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a655908e29af980ce",
|
||||
"_tpl": "657643a220cc24d17102b14c",
|
||||
"parentId": "6808b1a5c25caf3a4305d4e7",
|
||||
"slotId": "Collar"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a2c25caf3a4305d24e",
|
||||
"_tpl": "5c0e655586f774045612eeb2",
|
||||
@@ -2011,6 +2221,18 @@
|
||||
"parentId": "6808b1a2c25caf3a4305d24e",
|
||||
"slotId": "Back_plate"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5af76e65abf505a492",
|
||||
"_tpl": "6570e025615f54368b04fcb0",
|
||||
"parentId": "6808b1a2c25caf3a4305d24e",
|
||||
"slotId": "Soft_armor_front"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5ad1f1e6ebadf3a742",
|
||||
"_tpl": "6570e0610b57c03ec90b96ef",
|
||||
"parentId": "6808b1a2c25caf3a4305d24e",
|
||||
"slotId": "Soft_armor_back"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a7c25caf3a4305d657",
|
||||
"_tpl": "5c127c4486f7745625356c13",
|
||||
@@ -2546,6 +2768,30 @@
|
||||
"parentId": "6808b1a4c25caf3a4305d40d",
|
||||
"slotId": "right_side_plate"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a804f50deefe8f657",
|
||||
"_tpl": "6575ef599c7cad336508e453",
|
||||
"parentId": "6808b1a4c25caf3a4305d40d",
|
||||
"slotId": "soft_armor_front"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a4a78aad797b75f65",
|
||||
"_tpl": "6575ef6bf6a13a7b7100b093",
|
||||
"parentId": "6808b1a4c25caf3a4305d40d",
|
||||
"slotId": "soft_armor_back"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a26ea2758b18bd173",
|
||||
"_tpl": "6575ef78da698a4e980677eb",
|
||||
"parentId": "6808b1a4c25caf3a4305d40d",
|
||||
"slotId": "soft_armor_left"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a41618b96846132fe",
|
||||
"_tpl": "6575ef7f9c7cad336508e457",
|
||||
"parentId": "6808b1a4c25caf3a4305d40d",
|
||||
"slotId": "soft_armor_right"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a4c25caf3a4305d400",
|
||||
"_tpl": "5e4bfc1586f774264f7582d3",
|
||||
@@ -2557,6 +2803,18 @@
|
||||
"BuyRestrictionCurrent": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id": "68443f5aa1c30086f6915672",
|
||||
"_tpl": "657f9c78ada5fadd1f07a58d",
|
||||
"parentId": "6808b1a4c25caf3a4305d400",
|
||||
"slotId": "Helmet_top"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5ae1477179289ff74f",
|
||||
"_tpl": "657f9cb587e11c61f70bfaca",
|
||||
"parentId": "6808b1a4c25caf3a4305d400",
|
||||
"slotId": "Helmet_back"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a5c25caf3a4305d518",
|
||||
"_tpl": "5e81ebcd8e146c7080625e15",
|
||||
@@ -3008,6 +3266,48 @@
|
||||
"parentId": "6808b1a4c25caf3a4305d425",
|
||||
"slotId": "Back_plate"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a25dac4e3eeefb147",
|
||||
"_tpl": "6570fae34c65ab77a6015146",
|
||||
"parentId": "6808b1a4c25caf3a4305d425",
|
||||
"slotId": "Soft_armor_front"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5ac1ce9ca11d874d69",
|
||||
"_tpl": "6570fa1f4c65ab77a601512f",
|
||||
"parentId": "6808b1a4c25caf3a4305d425",
|
||||
"slotId": "Soft_armor_back"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a65ba0cfdbecba92f",
|
||||
"_tpl": "6570fb22584a51c23e03251f",
|
||||
"parentId": "6808b1a4c25caf3a4305d425",
|
||||
"slotId": "Soft_armor_left"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5ae1e85b37029ca381",
|
||||
"_tpl": "6570fb6ad3eefd23430f8c7c",
|
||||
"parentId": "6808b1a4c25caf3a4305d425",
|
||||
"slotId": "soft_armor_right"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a31197f3f23b09fb1",
|
||||
"_tpl": "6570fb8f4c65ab77a601514d",
|
||||
"parentId": "6808b1a4c25caf3a4305d425",
|
||||
"slotId": "Collar"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5ae83c301dd5a6c2b4",
|
||||
"_tpl": "6570fbdd74d84423df065f60",
|
||||
"parentId": "6808b1a4c25caf3a4305d425",
|
||||
"slotId": "Shoulder_l"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a2b2a2ad5354c0538",
|
||||
"_tpl": "6570fc41d3eefd23430f8c83",
|
||||
"parentId": "6808b1a4c25caf3a4305d425",
|
||||
"slotId": "Shoulder_r"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a4c25caf3a4305d494",
|
||||
"_tpl": "615d8f8567085e45ef1409ca",
|
||||
@@ -3291,6 +3591,18 @@
|
||||
"BuyRestrictionCurrent": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a82beb801d9af1bd4",
|
||||
"_tpl": "657bbcc9a1c61ee0c3036327",
|
||||
"parentId": "6808b1a2c25caf3a4305d2fc",
|
||||
"slotId": "Helmet_top"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a5a6669182e8774a5",
|
||||
"_tpl": "657bbcffbbd440df880b2dd5",
|
||||
"parentId": "6808b1a2c25caf3a4305d2fc",
|
||||
"slotId": "Helmet_back"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a2c25caf3a4305d2ea",
|
||||
"_tpl": "620109578d82e67e7911abf2",
|
||||
@@ -3630,6 +3942,30 @@
|
||||
"parentId": "6808b1a3c25caf3a4305d34e",
|
||||
"slotId": "Back_plate"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a5cd7b7a9adab7adc",
|
||||
"_tpl": "6570f30b0921c914bf07964c",
|
||||
"parentId": "6808b1a3c25caf3a4305d34e",
|
||||
"slotId": "Soft_armor_front"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a5830849109209a5e",
|
||||
"_tpl": "6570f35cd67d0309980a7acb",
|
||||
"parentId": "6808b1a3c25caf3a4305d34e",
|
||||
"slotId": "Soft_armor_back"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a98c6e07164b69dce",
|
||||
"_tpl": "6570f3890b4ae5847f060dad",
|
||||
"parentId": "6808b1a3c25caf3a4305d34e",
|
||||
"slotId": "Soft_armor_left"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5ac56ffeec0e8d9164",
|
||||
"_tpl": "6570f3bb0b4ae5847f060db2",
|
||||
"parentId": "6808b1a3c25caf3a4305d34e",
|
||||
"slotId": "soft_armor_right"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a4c25caf3a4305d480",
|
||||
"_tpl": "64acea16c4eda9354b0226b0",
|
||||
@@ -3663,6 +3999,18 @@
|
||||
"BuyRestrictionCurrent": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a0b5853d147be365d",
|
||||
"_tpl": "6570495b45d573133d0d6adb",
|
||||
"parentId": "6808b1a6c25caf3a4305d59c",
|
||||
"slotId": "Soft_armor_front"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a6b460b99c4e82804",
|
||||
"_tpl": "657049d23425b19bbc0502f0",
|
||||
"parentId": "6808b1a6c25caf3a4305d59c",
|
||||
"slotId": "Soft_armor_back"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a7c25caf3a4305d5fb",
|
||||
"_tpl": "6516e91f609aaf354b34b3e2",
|
||||
@@ -4744,6 +5092,36 @@
|
||||
"parentId": "6808b1a4c25caf3a4305d43c",
|
||||
"slotId": "Back_plate"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a3c97a85aa6a3b088",
|
||||
"_tpl": "65704de13e7bba58ea0285c8",
|
||||
"parentId": "6808b1a4c25caf3a4305d43c",
|
||||
"slotId": "Soft_armor_front"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a460b5f42e2e1134c",
|
||||
"_tpl": "65705c3c14f2ed6d7d0b7738",
|
||||
"parentId": "6808b1a4c25caf3a4305d43c",
|
||||
"slotId": "Soft_armor_back"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a33c73db4e5c355f5",
|
||||
"_tpl": "65705c777260e1139e091408",
|
||||
"parentId": "6808b1a4c25caf3a4305d43c",
|
||||
"slotId": "Soft_armor_left"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a75abca920288b0fa",
|
||||
"_tpl": "65705cb314f2ed6d7d0b773c",
|
||||
"parentId": "6808b1a4c25caf3a4305d43c",
|
||||
"slotId": "soft_armor_right"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a5b1b43ab7f6f265f",
|
||||
"_tpl": "65705cea4916448ae1050897",
|
||||
"parentId": "6808b1a4c25caf3a4305d43c",
|
||||
"slotId": "Collar"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a2c25caf3a4305d2b8",
|
||||
"_tpl": "67ab2f5adafe3b22670c911f",
|
||||
@@ -4767,6 +5145,48 @@
|
||||
"parentId": "6808b1a2c25caf3a4305d2b8",
|
||||
"slotId": "Back_plate"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5ae1877f5ca4edd3b0",
|
||||
"_tpl": "6575dd3e9e27f4a85e081142",
|
||||
"parentId": "6808b1a2c25caf3a4305d2b8",
|
||||
"slotId": "Soft_armor_front"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a23422b5e71856440",
|
||||
"_tpl": "6575dd519e27f4a85e081146",
|
||||
"parentId": "6808b1a2c25caf3a4305d2b8",
|
||||
"slotId": "Soft_armor_back"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5ab6ed311310425dab",
|
||||
"_tpl": "6575dd64945bf78edd04c438",
|
||||
"parentId": "6808b1a2c25caf3a4305d2b8",
|
||||
"slotId": "Soft_armor_left"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a77c1ee0ffd5811d2",
|
||||
"_tpl": "6575dd6e9d3a0ddf660b9047",
|
||||
"parentId": "6808b1a2c25caf3a4305d2b8",
|
||||
"slotId": "soft_armor_right"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5aa4b6963a64ac603a",
|
||||
"_tpl": "6575dd769d3a0ddf660b904b",
|
||||
"parentId": "6808b1a2c25caf3a4305d2b8",
|
||||
"slotId": "Collar"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a95c9a2b6073ebdec",
|
||||
"_tpl": "6575dd800546f8b1de093df6",
|
||||
"parentId": "6808b1a2c25caf3a4305d2b8",
|
||||
"slotId": "Groin"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5accc5cfbdb8da89f9",
|
||||
"_tpl": "6575dd94945bf78edd04c43c",
|
||||
"parentId": "6808b1a2c25caf3a4305d2b8",
|
||||
"slotId": "Groin_back"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a5c25caf3a4305d532",
|
||||
"_tpl": "67ab2f94dafe3b22670c912c",
|
||||
@@ -4790,6 +5210,18 @@
|
||||
"parentId": "6808b1a5c25caf3a4305d532",
|
||||
"slotId": "Back_plate"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a105b07028342318e",
|
||||
"_tpl": "6570e025615f54368b04fcb0",
|
||||
"parentId": "6808b1a5c25caf3a4305d532",
|
||||
"slotId": "Soft_armor_front"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a43a3bce0ac18efa8",
|
||||
"_tpl": "6570e0610b57c03ec90b96ef",
|
||||
"parentId": "6808b1a5c25caf3a4305d532",
|
||||
"slotId": "Soft_armor_back"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a3c25caf3a4305d3c8",
|
||||
"_tpl": "67ab3ea96d7ece17bf0096f6",
|
||||
@@ -4837,6 +5269,24 @@
|
||||
"parentId": "6808b1a6c25caf3a4305d58c",
|
||||
"slotId": "Back_plate"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a002c9d8d5bdc97f9",
|
||||
"_tpl": "6570e83223c1f638ef0b0ede",
|
||||
"parentId": "6808b1a6c25caf3a4305d58c",
|
||||
"slotId": "Soft_armor_front"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5ac430343763e1ff97",
|
||||
"_tpl": "6570e87c23c1f638ef0b0ee2",
|
||||
"parentId": "6808b1a6c25caf3a4305d58c",
|
||||
"slotId": "Soft_armor_back"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a8a2e2874f4cca6ac",
|
||||
"_tpl": "6570e90b3a5689d85f08db97",
|
||||
"parentId": "6808b1a6c25caf3a4305d58c",
|
||||
"slotId": "Groin"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a3c25caf3a4305d326",
|
||||
"_tpl": "67ab4b2d6f7ae4aa550bbcf6",
|
||||
@@ -4860,6 +5310,18 @@
|
||||
"parentId": "6808b1a3c25caf3a4305d326",
|
||||
"slotId": "Back_plate"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a614bfd290f63dcbe",
|
||||
"_tpl": "6575bc88c6700bd6b40e8a57",
|
||||
"parentId": "6808b1a3c25caf3a4305d326",
|
||||
"slotId": "Soft_armor_front"
|
||||
},
|
||||
{
|
||||
"_id": "68443f5a43515340e25e5e75",
|
||||
"_tpl": "6575bca0dc9932aed601c5d7",
|
||||
"parentId": "6808b1a3c25caf3a4305d326",
|
||||
"slotId": "Soft_armor_back"
|
||||
},
|
||||
{
|
||||
"_id": "6808b1a4c25caf3a4305d4aa",
|
||||
"_tpl": "67af41dd1eb308667602db4a",
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
using SPTarkov.Common.Extensions;
|
||||
using SPTarkov.DI.Annotations;
|
||||
using SPTarkov.Server.Core.Helpers;
|
||||
using SPTarkov.Server.Core.Models.Eft.Common.Tables;
|
||||
@@ -38,43 +37,30 @@ public class LauncherController(
|
||||
public ConnectResponse Connect()
|
||||
{
|
||||
// Get all possible profile types + filter out any that are blacklisted
|
||||
|
||||
var profiles = typeof(ProfileTemplates).GetProperties()
|
||||
.Where(p => p.CanWrite)
|
||||
.Select(p => p.GetJsonName())
|
||||
.Where(profileName => !_coreConfig.Features.CreateNewProfileTypesBlacklist.Contains(profileName))
|
||||
.ToList();
|
||||
var profileTemplates = _databaseService.GetProfileTemplates()
|
||||
.Where(profile => !_coreConfig.Features.CreateNewProfileTypesBlacklist.Contains(profile.Key))
|
||||
.ToDictionary();
|
||||
|
||||
return new ConnectResponse
|
||||
{
|
||||
BackendUrl = _httpServerHelper.GetBackendUrl(),
|
||||
Name = _coreConfig.ServerName,
|
||||
Editions = profiles,
|
||||
ProfileDescriptions = GetProfileDescriptions()
|
||||
Editions = profileTemplates.Select(x => x.Key).ToList(),
|
||||
ProfileDescriptions = GetProfileDescriptions(profileTemplates)
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get descriptive text for each of the profile editions a player can choose, keyed by profile.json profile type e.g. "Edge Of Darkness"
|
||||
/// </summary>
|
||||
/// <param name="profileTemplates">Profiles to get descriptions of</param>
|
||||
/// <returns>Dictionary of profile types with related descriptive text</returns>
|
||||
protected Dictionary<string, string> GetProfileDescriptions()
|
||||
protected Dictionary<string, string> GetProfileDescriptions(Dictionary<string, ProfileSides> profileTemplates)
|
||||
{
|
||||
var result = new Dictionary<string, string>();
|
||||
var dbProfiles = _databaseService.GetProfiles();
|
||||
foreach (var templatesProperty in typeof(ProfileTemplates).GetProperties()
|
||||
.Where(p => p.CanWrite
|
||||
&& !string.Equals(p.Name, "extensiondata", StringComparison.InvariantCultureIgnoreCase)))
|
||||
foreach (var (profileKey, profile) in profileTemplates)
|
||||
{
|
||||
var propertyValue = templatesProperty.GetValue(dbProfiles);
|
||||
if (propertyValue == null)
|
||||
{
|
||||
_logger.Warning(_localisationService.GetText("launcher-missing_property", templatesProperty.Name));
|
||||
continue;
|
||||
}
|
||||
|
||||
var casterPropertyValue = propertyValue as ProfileSides;
|
||||
result[templatesProperty.GetJsonName()] = _localisationService.GetText(casterPropertyValue?.DescriptionLocaleKey!);
|
||||
result.TryAdd(profileKey, _localisationService.GetText(profile.DescriptionLocaleKey));
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
using SPTarkov.Common.Extensions;
|
||||
using SPTarkov.DI.Annotations;
|
||||
using SPTarkov.Server.Core.Models.Eft.Common.Tables;
|
||||
using SPTarkov.Server.Core.Models.Eft.Launcher;
|
||||
using SPTarkov.Server.Core.Models.Eft.Profile;
|
||||
using SPTarkov.Server.Core.Models.Spt.Config;
|
||||
@@ -46,21 +44,11 @@ public class LauncherV2Controller(
|
||||
public Dictionary<string, string> Types()
|
||||
{
|
||||
var result = new Dictionary<string, string>();
|
||||
var dbProfiles = _databaseService.GetProfiles();
|
||||
var dbProfiles = _databaseService.GetProfileTemplates();
|
||||
|
||||
foreach (var templatesProperty in typeof(ProfileTemplates).GetProperties()
|
||||
.Where(p => p.CanWrite
|
||||
&& !string.Equals(p.Name, "extensiondata", StringComparison.InvariantCultureIgnoreCase)))
|
||||
foreach (var profileKvP in dbProfiles)
|
||||
{
|
||||
var propertyValue = templatesProperty.GetValue(dbProfiles);
|
||||
if (propertyValue == null)
|
||||
{
|
||||
_logger.Warning(_localisationService.GetText("launcher-missing_property", templatesProperty.Name));
|
||||
continue;
|
||||
}
|
||||
|
||||
var casterPropertyValue = propertyValue as ProfileSides;
|
||||
result[templatesProperty.GetJsonName()] = _localisationService.GetText(casterPropertyValue?.DescriptionLocaleKey!);
|
||||
result.TryAdd(profileKvP.Key, _localisationService.GetText(profileKvP.Value.DescriptionLocaleKey));
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
@@ -125,14 +125,14 @@ public class RagfairController
|
||||
|
||||
/// <summary>
|
||||
/// Handles client/ragfair/find
|
||||
/// Returns an object containing an array of flea offers to show to player
|
||||
/// </summary>
|
||||
/// <param name="sessionID">Session/Player id</param>
|
||||
/// <param name="searchRequest">Search request data</param>
|
||||
/// <param name="searchRequest">Search request data from client</param>
|
||||
/// <returns>Flea offers that match required search parameters</returns>
|
||||
public GetOffersResult GetOffers(string sessionID, SearchRequestData searchRequest)
|
||||
{
|
||||
var profile = _profileHelper.GetFullProfile(sessionID);
|
||||
|
||||
var itemsToAdd = _ragfairHelper.FilterCategories(sessionID, searchRequest);
|
||||
var traderAssorts = _ragfairHelper.GetDisplayableAssorts(sessionID);
|
||||
var result = new GetOffersResult
|
||||
@@ -142,6 +142,7 @@ public class RagfairController
|
||||
SelectedCategory = searchRequest.HandbookId
|
||||
};
|
||||
|
||||
// Get all offers ready for sorting/filtering below
|
||||
result.Offers = GetOffersForSearchType(searchRequest, itemsToAdd, traderAssorts, profile.CharacterData.PmcData);
|
||||
|
||||
// Client requested a category refresh
|
||||
@@ -150,16 +151,26 @@ public class RagfairController
|
||||
result.Categories = GetSpecificCategories(profile.CharacterData.PmcData, searchRequest, result.Offers);
|
||||
}
|
||||
|
||||
// Adjust index value of offers found to start at 0
|
||||
AddIndexValueToOffers(result.Offers);
|
||||
|
||||
// Sort offers
|
||||
result.Offers = _ragfairSortHelper.SortOffers(
|
||||
result.Offers,
|
||||
searchRequest.SortType.Value,
|
||||
searchRequest.SortDirection.Value
|
||||
searchRequest.SortType.GetValueOrDefault(RagfairSort.ID),
|
||||
searchRequest.SortDirection.GetValueOrDefault(0)
|
||||
);
|
||||
|
||||
// Match offers with quests and lock unfinished quests - get offers from traders
|
||||
// Must occur prior to pagination
|
||||
result.OffersCount = result.Offers.Count;
|
||||
|
||||
// Handle paging before returning results if searching for general items, not preset items
|
||||
if (searchRequest.BuildCount == 0)
|
||||
{
|
||||
PaginateOffers(searchRequest, result);
|
||||
}
|
||||
|
||||
// Update trader offers' values, Lock quest-linked offers + adjust offer buy limits
|
||||
foreach (var traderOffer in result.Offers.Where(offer => _ragfairOfferHelper.OfferIsFromTrader(offer)))
|
||||
{
|
||||
// For the items, check the barter schemes. The method getDisplayableAssorts sets a flag sptQuestLocked
|
||||
@@ -174,17 +185,43 @@ public class RagfairController
|
||||
SetTraderOfferStackSize(traderOffer);
|
||||
}
|
||||
|
||||
result.OffersCount = result.Offers.Count;
|
||||
return result;
|
||||
}
|
||||
|
||||
// Handle paging before returning results only if searching for general items, not preset items
|
||||
if (searchRequest.BuildCount == 0)
|
||||
/// <summary>
|
||||
/// Paginate offers based on search request properties
|
||||
/// </summary>
|
||||
/// <param name="searchRequest">Client request</param>
|
||||
/// <param name="result">Object to return to client</param>
|
||||
protected void PaginateOffers(SearchRequestData searchRequest, GetOffersResult result)
|
||||
{
|
||||
// Number of items to show per page
|
||||
var perPageLimit = searchRequest.Limit.GetValueOrDefault(15); // Client defaults to 15 items per page
|
||||
|
||||
// Total pages to show player
|
||||
var totalPages = result.Offers.Count / perPageLimit;
|
||||
|
||||
// Page player was just on before clicking new page
|
||||
var previousPage = searchRequest.Page.GetValueOrDefault(0);
|
||||
|
||||
// Assumed page player is moving to
|
||||
var nextPage = searchRequest.Page.GetValueOrDefault(0) + 1;
|
||||
|
||||
// Get start/end item indexes
|
||||
var startIndex = previousPage * perPageLimit;
|
||||
var endIndex = Math.Min(nextPage * perPageLimit, result.Offers.Count);
|
||||
|
||||
// Edge case
|
||||
if (previousPage > totalPages)
|
||||
{
|
||||
var start = searchRequest.Page * searchRequest.Limit;
|
||||
var end = Math.Min((searchRequest.Page.Value + 1) * searchRequest.Limit.Value, result.Offers.Count);
|
||||
result.Offers = result.Offers.Slice(start.Value, end - start.Value);
|
||||
// Occurs when player edits "item count shown per page" value when on page near end of offer list
|
||||
// The page no longer exists due to the larger number of items on each page, show them the very end of the offer list instead
|
||||
_logger.Warning("Ragfair page no longer exists, showing end of offers list");
|
||||
startIndex = result.Offers.Count - perPageLimit;
|
||||
endIndex = result.Offers.Count;
|
||||
}
|
||||
|
||||
return result;
|
||||
result.Offers = result.Offers.Skip(startIndex).Take(endIndex - startIndex).ToList();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
using SPTarkov.Common.Extensions;
|
||||
using SPTarkov.DI.Annotations;
|
||||
using SPTarkov.Server.Core.Models.Eft.Common;
|
||||
using SPTarkov.Server.Core.Models.Eft.Common.Tables;
|
||||
using SPTarkov.Server.Core.Models.Eft.Profile;
|
||||
using SPTarkov.Server.Core.Models.Spt.Config;
|
||||
using SPTarkov.Server.Core.Servers;
|
||||
using SPTarkov.Server.Core.Services;
|
||||
using SPTarkov.Server.Core.Utils;
|
||||
using BodyPartHealth = SPTarkov.Server.Core.Models.Eft.Common.Tables.BodyPartHealth;
|
||||
using Vitality = SPTarkov.Server.Core.Models.Eft.Profile.Vitality;
|
||||
@@ -16,7 +14,7 @@ namespace SPTarkov.Server.Core.Helpers;
|
||||
public class HealthHelper(
|
||||
TimeUtil _timeUtil,
|
||||
SaveServer _saveServer,
|
||||
DatabaseService _databaseService,
|
||||
ProfileHelper _profileHelper,
|
||||
ConfigServer _configServer
|
||||
)
|
||||
{
|
||||
@@ -128,8 +126,6 @@ public class HealthHelper(
|
||||
/// <param name="postRaidHealth">Post raid data</param>
|
||||
/// <param name="sessionID">Session id</param>
|
||||
/// <param name="isDead">Is player dead</param>
|
||||
/// <param name="addEffects">Should effects be added to profile (default - true)</param>
|
||||
/// <param name="deleteExistingEffects">Should all prior effects be removed before apply new ones (default - true)</param>
|
||||
public void UpdateProfileHealthPostRaid(
|
||||
PmcData pmcData,
|
||||
BotBaseHealth postRaidHealth,
|
||||
@@ -139,16 +135,14 @@ public class HealthHelper(
|
||||
var fullProfile = _saveServer.GetProfile(sessionID);
|
||||
var profileEdition = fullProfile.ProfileInfo.Edition;
|
||||
var profileSide = fullProfile.CharacterData.PmcData.Info.Side;
|
||||
|
||||
// Get matching 'side e.g. USEC
|
||||
var matchingSide = _profileHelper.GetProfileTemplateForSide(profileEdition, profileSide);
|
||||
|
||||
var defaultTemperature =
|
||||
_databaseService.GetProfiles()
|
||||
.GetByJsonProp<ProfileSides>(profileEdition)
|
||||
.GetByJsonProp<TemplateSide>(profileSide.ToLower())
|
||||
?.Character?.Health?.Temperature ??
|
||||
new CurrentMinMax
|
||||
{
|
||||
Current = 36.6
|
||||
};
|
||||
var defaultTemperature = matchingSide?.Character?.Health?.Temperature ?? new CurrentMinMax
|
||||
{
|
||||
Current = 36.6
|
||||
};
|
||||
|
||||
StoreHydrationEnergyTempInProfile(
|
||||
fullProfile,
|
||||
|
||||
@@ -754,4 +754,23 @@ public class ProfileHelper(
|
||||
fullProfile.SptData.ExtraRepeatableQuests[repeatableId] += rewardValue;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a profile template by the account and side
|
||||
/// </summary>
|
||||
/// <param name="accountEdition">Edition of profile desired, e.g. "Standard"</param>
|
||||
/// <param name="side">Side of profile desired, e.g. "Bear"</param>
|
||||
/// <returns></returns>
|
||||
public TemplateSide GetProfileTemplateForSide(string accountEdition, string side)
|
||||
{
|
||||
var profileTemplates = _databaseService.GetProfileTemplates();
|
||||
|
||||
// Get matching profile 'type' e.g. 'standard'
|
||||
profileTemplates.TryGetValue(accountEdition, out var matchingProfileTemplate);
|
||||
|
||||
// Get matching profile by 'side' e.g. USEC
|
||||
return string.Equals(side, "bear", StringComparison.OrdinalIgnoreCase)
|
||||
? matchingProfileTemplate.Bear
|
||||
: matchingProfileTemplate.Usec;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using SPTarkov.Common.Extensions;
|
||||
using System.Security.Principal;
|
||||
using SPTarkov.DI.Annotations;
|
||||
using SPTarkov.Server.Core.Models.Common;
|
||||
using SPTarkov.Server.Core.Models.Eft.Common;
|
||||
@@ -136,7 +136,7 @@ public class TraderHelper(
|
||||
/// <param name="traderID">trader id to reset</param>
|
||||
public void ResetTrader(string sessionID, string traderID)
|
||||
{
|
||||
var profiles = _databaseService.GetProfiles();
|
||||
var profiles = _databaseService.GetProfileTemplates();
|
||||
var trader = _databaseService.GetTrader(traderID);
|
||||
|
||||
var fullProfile = _profileHelper.GetFullProfile(sessionID);
|
||||
@@ -145,34 +145,34 @@ public class TraderHelper(
|
||||
throw new Exception(_localisationService.GetText("trader-unable_to_find_profile_by_id", sessionID));
|
||||
}
|
||||
|
||||
// Get matching profile 'type' e.g. 'standard'
|
||||
profiles.TryGetValue(fullProfile.ProfileInfo.Edition, out var matchingProfileTemplate);
|
||||
var pmcData = fullProfile.CharacterData.PmcData;
|
||||
var rawProfileTemplate = profiles.GetByJsonProp<ProfileSides>(fullProfile.ProfileInfo.Edition)
|
||||
.GetByJsonProp<TemplateSide>(pmcData.Info.Side.ToLower())
|
||||
.Trader;
|
||||
var matchingSide = _profileHelper.GetProfileTemplateForSide(fullProfile.ProfileInfo.Edition, pmcData.Info.Side);
|
||||
|
||||
// Profiles trader settings
|
||||
var profileTemplateTraderData = matchingSide.Trader;
|
||||
|
||||
var newTraderData = new TraderInfo
|
||||
{
|
||||
Disabled = false,
|
||||
LoyaltyLevel = rawProfileTemplate.InitialLoyaltyLevel.GetValueOrDefault(traderID, 1),
|
||||
SalesSum = rawProfileTemplate.InitialSalesSum,
|
||||
Standing = GetStartingStanding(traderID, rawProfileTemplate),
|
||||
LoyaltyLevel = profileTemplateTraderData.InitialLoyaltyLevel.GetValueOrDefault(traderID, 1),
|
||||
SalesSum = profileTemplateTraderData.InitialSalesSum,
|
||||
Standing = GetStartingStanding(traderID, profileTemplateTraderData),
|
||||
NextResupply = trader.Base.NextResupply,
|
||||
Unlocked = trader.Base.UnlockedByDefault
|
||||
};
|
||||
|
||||
if (!pmcData.TradersInfo.TryAdd(traderID, newTraderData))
|
||||
{
|
||||
pmcData.TradersInfo[traderID] = newTraderData;
|
||||
}
|
||||
|
||||
// Add trader to profile if it doesn't already
|
||||
pmcData.TradersInfo.TryAdd(traderID, newTraderData);
|
||||
|
||||
// Check if trader should be locked by default
|
||||
if (rawProfileTemplate.LockedByDefaultOverride?.Contains(traderID) ?? false)
|
||||
if (profileTemplateTraderData.LockedByDefaultOverride?.Contains(traderID) ?? false)
|
||||
{
|
||||
pmcData.TradersInfo[traderID].Unlocked = true;
|
||||
}
|
||||
|
||||
if (rawProfileTemplate.PurchaseAllClothingByDefaultForTrader?.Contains(traderID) ?? false)
|
||||
if (profileTemplateTraderData.PurchaseAllClothingByDefaultForTrader?.Contains(traderID) ?? false)
|
||||
{
|
||||
// Get traders clothing
|
||||
var clothing = _databaseService.GetTrader(traderID).Suits;
|
||||
@@ -186,16 +186,18 @@ public class TraderHelper(
|
||||
}
|
||||
}
|
||||
|
||||
if ((rawProfileTemplate.FleaBlockedDays ?? 0) > 0)
|
||||
// Template has flea block
|
||||
if ((profileTemplateTraderData.FleaBlockedDays ?? 0) > 0)
|
||||
{
|
||||
var newBanDateTime = _timeUtil.GetTimeStampFromNowDays(rawProfileTemplate.FleaBlockedDays ?? 0);
|
||||
var existingBan = pmcData.Info.Bans.FirstOrDefault(ban => ban.BanType == BanType.RagFair);
|
||||
var newBanDateTime = _timeUtil.GetTimeStampFromNowDays(profileTemplateTraderData.FleaBlockedDays ?? 0);
|
||||
var existingBan = pmcData.Info.Bans?.FirstOrDefault(ban => ban.BanType == BanType.RagFair);
|
||||
if (existingBan is not null)
|
||||
{
|
||||
existingBan.DateTime = newBanDateTime;
|
||||
}
|
||||
else
|
||||
{
|
||||
pmcData.Info.Bans ??= [];
|
||||
pmcData.Info.Bans.Add(
|
||||
new Ban
|
||||
{
|
||||
@@ -208,7 +210,7 @@ public class TraderHelper(
|
||||
|
||||
if (traderID == Traders.JAEGER)
|
||||
{
|
||||
pmcData.TradersInfo[traderID].Unlocked = rawProfileTemplate.JaegerUnlocked;
|
||||
pmcData.TradersInfo[traderID].Unlocked = profileTemplateTraderData.JaegerUnlocked;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,75 +3,6 @@ using SPTarkov.Server.Core.Models.Eft.Profile;
|
||||
|
||||
namespace SPTarkov.Server.Core.Models.Eft.Common.Tables;
|
||||
|
||||
public record ProfileTemplates
|
||||
{
|
||||
[JsonExtensionData]
|
||||
public Dictionary<string, object> ExtensionData { get; set; }
|
||||
|
||||
[JsonPropertyName("Standard")]
|
||||
public ProfileSides? Standard
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
[JsonPropertyName("Left Behind")]
|
||||
public ProfileSides? LeftBehind
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
[JsonPropertyName("Prepare To Escape")]
|
||||
public ProfileSides? PrepareToEscape
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
[JsonPropertyName("Edge Of Darkness")]
|
||||
public ProfileSides? EdgeOfDarkness
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
[JsonPropertyName("Unheard")]
|
||||
public ProfileSides? Unheard
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
[JsonPropertyName("Tournament")]
|
||||
public ProfileSides? Tournament
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
[JsonPropertyName("SPT Developer")]
|
||||
public ProfileSides? SPTDeveloper
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
[JsonPropertyName("SPT Easy start")]
|
||||
public ProfileSides? SPTEasyStart
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
[JsonPropertyName("SPT Zero to hero")]
|
||||
public ProfileSides? SPTZeroToHero
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
}
|
||||
|
||||
public record ProfileSides
|
||||
{
|
||||
[JsonExtensionData]
|
||||
|
||||
@@ -69,7 +69,7 @@ public record Templates
|
||||
/// The profile templates listed in the launcher on profile creation, split by account type (e.g. Standard) then side (e.g. bear/usec)
|
||||
/// </summary>
|
||||
[JsonPropertyName("profiles")]
|
||||
public ProfileTemplates? Profiles
|
||||
public Dictionary<string, ProfileSides>? Profiles
|
||||
{
|
||||
get;
|
||||
set;
|
||||
|
||||
@@ -43,9 +43,8 @@ public class CreateProfileService(
|
||||
public string CreateProfile(string sessionId, ProfileCreateRequestData request)
|
||||
{
|
||||
var account = _cloner.Clone(_saveServer.GetProfile(sessionId));
|
||||
var profileTemplateClone = _cloner.Clone(
|
||||
_databaseService.GetProfiles()?.GetByJsonProp<ProfileSides>(account.ProfileInfo.Edition)?.GetByJsonProp<TemplateSide>(request.Side.ToLower())
|
||||
);
|
||||
var profileTemplateClone = _cloner.Clone(_profileHelper.GetProfileTemplateForSide(account.ProfileInfo.Edition, request.Side));
|
||||
|
||||
var pmcData = profileTemplateClone.Character;
|
||||
|
||||
// Delete existing profile
|
||||
|
||||
@@ -257,7 +257,7 @@ public class DatabaseService(
|
||||
}
|
||||
|
||||
/// <returns> assets/database/templates/profiles.json </returns>
|
||||
public ProfileTemplates GetProfiles()
|
||||
public Dictionary<string, ProfileSides> GetProfileTemplates()
|
||||
{
|
||||
if (_databaseServer.GetTables().Templates?.Profiles == null)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user