From 5d5d0ee5607347d7ec1d4dabb67fc0db4b624186 Mon Sep 17 00:00:00 2001 From: CrazyZhang Date: Sat, 21 Jun 2025 07:25:48 -0700 Subject: [PATCH 1/4] chore(webui): update Chinese translation (#2227) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2227 Co-authored-by: CrazyZhang Co-committed-by: CrazyZhang --- static/webui/translations/zh.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/static/webui/translations/zh.js b/static/webui/translations/zh.js index 1bd23d49..0d4df1ce 100644 --- a/static/webui/translations/zh.js +++ b/static/webui/translations/zh.js @@ -101,7 +101,7 @@ dict = { inventory_bulkRankUpSentinels: `所有守护升满级`, inventory_bulkRankUpSentinelWeapons: `所有守护武器升满级`, inventory_bulkRankUpEvolutionProgress: `所有灵化之源最大等级`, - inventory_maxPlexus: `[UNTRANSLATED] Max Rank Plexus`, + inventory_maxPlexus: `最大深控等级`, quests_list: `任务`, quests_completeAll: `完成所有任务`, @@ -136,10 +136,10 @@ dict = { cheats_infiniteRegalAya: `无限御品阿耶`, cheats_infiniteHelminthMaterials: `无限Helminth材料`, cheats_claimingBlueprintRefundsIngredients: `取消蓝图制造时返还材料`, - cheats_dontSubtractPurchaseCreditCost: `[UNTRANSLATED] Don't Subtract Purchase Credit Cost`, - cheats_dontSubtractPurchasePlatinumCost: `[UNTRANSLATED] Don't Subtract Purchase Platinum Cost`, - cheats_dontSubtractPurchaseItemCost: `[UNTRANSLATED] Don't Subtract Purchase Item Cost`, - cheats_dontSubtractPurchaseStandingCost: `[UNTRANSLATED] Don't Subtract Purchase Standing Cost`, + cheats_dontSubtractPurchaseCreditCost: `不减少现金花费`, + cheats_dontSubtractPurchasePlatinumCost: `不减少白金花费`, + cheats_dontSubtractPurchaseItemCost: `不减少物品花费`, + cheats_dontSubtractPurchaseStandingCost: `不减少声望花费`, cheats_dontSubtractVoidTraces: `虚空光体无消耗`, cheats_dontSubtractConsumables: `消耗物品使用时无损耗`, cheats_unlockAllShipFeatures: `解锁所有飞船功能`, @@ -160,7 +160,7 @@ dict = { cheats_noDeathMarks: `无死亡标记(不会被 Stalker/Grustrag 三霸/Zanuka 猎人等标记)`, cheats_noKimCooldowns: `无 KIM 冷却时间`, cheats_syndicateMissionsRepeatable: `集团任务可重复`, - cheats_unlockAllProfitTakerStages: `[UNTRANSLATED] Unlock All Profit Taker Stages`, + cheats_unlockAllProfitTakerStages: `解锁利润收割者圆蛛所有阶段`, cheats_instantFinishRivenChallenge: `立即完成裂罅挑战`, cheats_instantResourceExtractorDrones: `即时资源采集无人机`, cheats_noResourceExtractorDronesDamage: `资源提取器不会损毁`, @@ -171,10 +171,10 @@ dict = { cheats_noDojoResearchCosts: `无视道场研究消耗`, cheats_noDojoResearchTime: `无视道场研究时间`, cheats_fastClanAscension: `快速升级氏族`, - cheats_missionsCanGiveAllRelics: `[UNTRANSLATED] Missions Can Give All Relics`, + cheats_missionsCanGiveAllRelics: `任务可获取所有遗物`, cheats_spoofMasteryRank: `伪造精通段位(-1为禁用)`, cheats_nightwaveStandingMultiplier: `午夜电波声望倍率`, - cheats_save: `[UNTRANSLATED] Save`, + cheats_save: `保存`, cheats_account: `账户`, cheats_unlockAllFocusSchools: `解锁所有专精学派`, cheats_helminthUnlockAll: `完全升级Helminth`, @@ -192,7 +192,7 @@ dict = { upgrade_WarframeAbilityDuration: `+|VAL|% 技能持续时间`, upgrade_WarframeAbilityStrength: `+|VAL|% 技能强度`, upgrade_WarframeArmourMax: `+|VAL| 护甲`, - upgrade_WarframeBlastProc: `[UNTRANSLATED] +|VAL| Shields on kill with Blast Damage`, + upgrade_WarframeBlastProc: `+|VAL| 护盾在击杀时附带爆炸伤害`, upgrade_WarframeCastingSpeed: `+|VAL|% 施放速度`, upgrade_WarframeCorrosiveDamageBoost: `对受腐蚀状态影响的敌人 +|VAL|% 技能伤害`, upgrade_WarframeCorrosiveStack: `腐蚀状态最大堆叠数 +|VAL|`, From 93ef9a534847a8bb4553519cc95c32b9c08033bf Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sat, 21 Jun 2025 07:26:11 -0700 Subject: [PATCH 2/4] feat: autogenerate all vendors (#2225) I went through a few of the still-hardcoded vendors and they seemed to "just work" with autogeneration so I think it's time to say: Closes #1225 and disable the `noVendorPurchaseLimits` cheat by default. Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2225 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- config.json.example | 2 +- src/services/serversideVendorsService.ts | 42 --- ...EntratiFragmentVendorProductsManifest.json | 300 ---------------- ...sHivemindCommisionsManifestFishmonger.json | 241 ------------- ...osHivemindCommisionsManifestPetVendor.json | 287 ---------------- ...sHivemindCommisionsManifestProspector.json | 312 ----------------- ...HivemindCommisionsManifestTokenVendor.json | 223 ------------ ...HivemindCommisionsManifestWeaponsmith.json | 254 -------------- .../DeimosHivemindTokenVendorManifest.json | 286 ---------------- .../DeimosPetVendorManifest.json | 136 -------- .../DuviriAcrithisVendorManifest.json | 321 ------------------ .../EntratiLabsEntratiLabVendorManifest.json | 245 ------------- ...ratiLabsEntratiLabsCommisionsManifest.json | 97 ------ .../Nova1999ConquestShopManifest.json | 188 ---------- .../OstronPetVendorManifest.json | 94 ----- ...sDebtTokenVendorRepossessionsManifest.json | 126 ------- 16 files changed, 1 insertion(+), 3153 deletions(-) delete mode 100644 static/fixed_responses/getVendorInfo/DeimosEntratiFragmentVendorProductsManifest.json delete mode 100644 static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestFishmonger.json delete mode 100644 static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestPetVendor.json delete mode 100644 static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestProspector.json delete mode 100644 static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestTokenVendor.json delete mode 100644 static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestWeaponsmith.json delete mode 100644 static/fixed_responses/getVendorInfo/DeimosHivemindTokenVendorManifest.json delete mode 100644 static/fixed_responses/getVendorInfo/DeimosPetVendorManifest.json delete mode 100644 static/fixed_responses/getVendorInfo/DuviriAcrithisVendorManifest.json delete mode 100644 static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabVendorManifest.json delete mode 100644 static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabsCommisionsManifest.json delete mode 100644 static/fixed_responses/getVendorInfo/Nova1999ConquestShopManifest.json delete mode 100644 static/fixed_responses/getVendorInfo/OstronPetVendorManifest.json delete mode 100644 static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorRepossessionsManifest.json diff --git a/config.json.example b/config.json.example index a92e3f8d..9287091c 100644 --- a/config.json.example +++ b/config.json.example @@ -39,7 +39,7 @@ "noDailyFocusLimit": false, "noArgonCrystalDecay": false, "noMasteryRankUpCooldown": false, - "noVendorPurchaseLimits": true, + "noVendorPurchaseLimits": false, "noDeathMarks": false, "noKimCooldowns": false, "syndicateMissionsRepeatable": false, diff --git a/src/services/serversideVendorsService.ts b/src/services/serversideVendorsService.ts index 0e4b3856..c40c3cc6 100644 --- a/src/services/serversideVendorsService.ts +++ b/src/services/serversideVendorsService.ts @@ -7,38 +7,6 @@ import { IItemManifest, IVendorInfo, IVendorManifest } from "@/src/types/vendorT import { logger } from "@/src/utils/logger"; import { ExportVendors, IRange, IVendor, IVendorOffer } from "warframe-public-export-plus"; -import DeimosEntratiFragmentVendorProductsManifest from "@/static/fixed_responses/getVendorInfo/DeimosEntratiFragmentVendorProductsManifest.json"; -import DeimosHivemindCommisionsManifestFishmonger from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestFishmonger.json"; -import DeimosHivemindCommisionsManifestPetVendor from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestPetVendor.json"; -import DeimosHivemindCommisionsManifestProspector from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestProspector.json"; -import DeimosHivemindCommisionsManifestTokenVendor from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestTokenVendor.json"; -import DeimosHivemindCommisionsManifestWeaponsmith from "@/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestWeaponsmith.json"; -import DeimosHivemindTokenVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosHivemindTokenVendorManifest.json"; -import DeimosPetVendorManifest from "@/static/fixed_responses/getVendorInfo/DeimosPetVendorManifest.json"; -import DuviriAcrithisVendorManifest from "@/static/fixed_responses/getVendorInfo/DuviriAcrithisVendorManifest.json"; -import EntratiLabsEntratiLabsCommisionsManifest from "@/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabsCommisionsManifest.json"; -import EntratiLabsEntratiLabVendorManifest from "@/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabVendorManifest.json"; -import Nova1999ConquestShopManifest from "@/static/fixed_responses/getVendorInfo/Nova1999ConquestShopManifest.json"; -import OstronPetVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronPetVendorManifest.json"; -import SolarisDebtTokenVendorRepossessionsManifest from "@/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorRepossessionsManifest.json"; - -const rawVendorManifests: IVendorManifest[] = [ - DeimosEntratiFragmentVendorProductsManifest, - DeimosHivemindCommisionsManifestFishmonger, - DeimosHivemindCommisionsManifestPetVendor, - DeimosHivemindCommisionsManifestProspector, - DeimosHivemindCommisionsManifestTokenVendor, - DeimosHivemindCommisionsManifestWeaponsmith, - DeimosHivemindTokenVendorManifest, - DeimosPetVendorManifest, - DuviriAcrithisVendorManifest, - EntratiLabsEntratiLabsCommisionsManifest, - EntratiLabsEntratiLabVendorManifest, - Nova1999ConquestShopManifest, - OstronPetVendorManifest, - SolarisDebtTokenVendorRepossessionsManifest -]; - interface IGeneratableVendorInfo extends Omit { cycleOffset?: number; cycleDuration: number; @@ -92,11 +60,6 @@ const getCycleDuration = (manifest: IVendor): number => { }; export const getVendorManifestByTypeName = (typeName: string): IVendorManifest | undefined => { - for (const vendorManifest of rawVendorManifests) { - if (vendorManifest.VendorInfo.TypeName == typeName) { - return vendorManifest; - } - } for (const vendorInfo of generatableVendors) { if (vendorInfo.TypeName == typeName) { return generateVendorManifest(vendorInfo); @@ -115,11 +78,6 @@ export const getVendorManifestByTypeName = (typeName: string): IVendorManifest | }; export const getVendorManifestByOid = (oid: string): IVendorManifest | undefined => { - for (const vendorManifest of rawVendorManifests) { - if (vendorManifest.VendorInfo._id.$oid == oid) { - return vendorManifest; - } - } for (const vendorInfo of generatableVendors) { if (vendorInfo._id.$oid == oid) { return generateVendorManifest(vendorInfo); diff --git a/static/fixed_responses/getVendorInfo/DeimosEntratiFragmentVendorProductsManifest.json b/static/fixed_responses/getVendorInfo/DeimosEntratiFragmentVendorProductsManifest.json deleted file mode 100644 index 07f94813..00000000 --- a/static/fixed_responses/getVendorInfo/DeimosEntratiFragmentVendorProductsManifest.json +++ /dev/null @@ -1,300 +0,0 @@ -{ - "VendorInfo": { - "_id": { - "$oid": "5f456e01c96976e97d6b802e" - }, - "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/EntratiFragmentVendorProductsManifest", - "ItemManifest": [ - { - "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/SeriglassShard", - "ItemPrices": [ - { - "ItemCount": 20, - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e8390" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/PhotoboothTileDeimosBouncy", - "ItemPrices": [ - { - "ItemCount": 50, - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e8391" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/PhotoboothTileDeimosBreakthrough", - "ItemPrices": [ - { - "ItemCount": 50, - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e8392" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/PhotoboothTileDeimosCatacombs", - "ItemPrices": [ - { - "ItemCount": 50, - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e8393" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/PhotoboothTileDeimosDownfall", - "ItemPrices": [ - { - "ItemCount": 50, - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e8394" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/PhotoboothTileDeimosObsession", - "ItemPrices": [ - { - "ItemCount": 50, - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e8395" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/PhotoboothTileDeimosTunnels", - "ItemPrices": [ - { - "ItemCount": 50, - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e8396" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Deimos/FatherTokenShipDeco", - "ItemPrices": [ - { - "ItemCount": 10, - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonA", - "ProductCategory": "MiscItems" - }, - { - "ItemCount": 5, - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e83f1" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Deimos/LisetPropEntratiLamp", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonB", - "ItemCount": 12, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e83f2" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Deimos/LisetPropInfestedCrate", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonA", - "ItemCount": 11, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e83f3" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Deimos/LisetPropInfestedCystC", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", - "ItemCount": 10, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_2", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e83f4" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/StoreItems/AvatarImages/RequiemRisGlyph", - "ItemPrices": [ - { - "ItemCount": 15, - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "Id": { - "$oid": "66fd60b10ba592c4c95e83f5" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Deimos/MotherTokenShipDeco", - "ItemPrices": [ - { - "ItemCount": 10, - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonB", - "ProductCategory": "MiscItems" - }, - { - "ItemCount": 5, - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentRareA", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e83f6" - } - } - ], - "PropertyTextHash": "DB953EE163A65B3BCC0552902321D791", - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - } - } -} diff --git a/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestFishmonger.json b/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestFishmonger.json deleted file mode 100644 index fd6a561b..00000000 --- a/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestFishmonger.json +++ /dev/null @@ -1,241 +0,0 @@ -{ - "VendorInfo": { - "_id": { - "$oid": "5f456e01c96976e97d6b8009" - }, - "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestFishmonger", - "ItemManifest": [ - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Daughter/DaughterTaskC", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishFPartItem", - "ItemCount": 6, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", - "ItemCount": 16, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_2", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 63978959, - "Id": { - "$oid": "66fd60b10ba592c4c95e82cc" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Daughter/DaughterTaskB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishBPartItem", - "ItemCount": 5, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishDPartItem", - "ItemCount": 4, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 3808064409, - "Id": { - "$oid": "66fd60b10ba592c4c95e82cd" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Daughter/DaughterTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishEPartItem", - "ItemCount": 2, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", - "ItemCount": 2, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 3849710569, - "Id": { - "$oid": "66fd60b10ba592c4c95e82d0" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Daughter/DaughterTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosGenericInfestedFishPartItem", - "ItemCount": 5, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", - "ItemCount": 4, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 1687111317, - "Id": { - "$oid": "66fd60b10ba592c4c95e82d1" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Daughter/DaughterTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishAPartItem", - "ItemCount": 4, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishBPartItem", - "ItemCount": 4, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2267414276, - "Id": { - "$oid": "66fd60b10ba592c4c95e82d2" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Daughter/DaughterTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosGenericInfestedFishPartItem", - "ItemCount": 6, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosGenericSharedFishPartItem", - "ItemCount": 6, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 1497494256, - "Id": { - "$oid": "66fd60b10ba592c4c95e82d3" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Daughter/DaughterTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosGenericInfestedFishPartItem", - "ItemCount": 5, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", - "ItemCount": 2, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2883527039, - "Id": { - "$oid": "66fd60b10ba592c4c95e82d4" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Daughter/DaughterTaskC", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishGPartItem", - "ItemCount": 10, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", - "ItemCount": 12, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_2", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 4116691539, - "Id": { - "$oid": "66fd60b10ba592c4c95e82d5" - } - } - ], - "PropertyTextHash": "54B6992C6314367F8EEA74B7F1A1C352", - "RandomSeedType": "VRST_FLAVOUR_TEXT", - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - } - } -} diff --git a/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestPetVendor.json b/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestPetVendor.json deleted file mode 100644 index 44966e70..00000000 --- a/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestPetVendor.json +++ /dev/null @@ -1,287 +0,0 @@ -{ - "VendorInfo": { - "_id": { - "$oid": "5f456e03c96976e97d6b80a3" - }, - "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestPetVendor", - "ItemManifest": [ - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedMaggotRare", - "ItemCount": 2, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedMaggotCommon", - "ItemCount": 4, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2707699975, - "Id": { - "$oid": "66fd60b10ba592c4c95e8897" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedPredatorCommon", - "ItemCount": 2, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedMaggotCommon", - "ItemCount": 4, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 3610714639, - "Id": { - "$oid": "66fd60b10ba592c4c95e8898" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedPredatorCommon", - "ItemCount": 2, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedMaggotRare", - "ItemCount": 1, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 1782149988, - "Id": { - "$oid": "66fd60b10ba592c4c95e8899" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskC", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedMergooCommon", - "ItemCount": 3, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_2", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2149416825, - "Id": { - "$oid": "66fd60b10ba592c4c95e889a" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedCritterRare", - "ItemCount": 2, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedKdriveUncommon", - "ItemCount": 2, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 890863265, - "Id": { - "$oid": "66fd60b10ba592c4c95e889b" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedCritterCommon", - "ItemCount": 4, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedPredatorCommon", - "ItemCount": 4, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2507606934, - "Id": { - "$oid": "66fd60b10ba592c4c95e889c" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskC", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedPredatorRare", - "ItemCount": 5, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_2", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 1037784729, - "Id": { - "$oid": "66fd60b10ba592c4c95e889e" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedMaggotCommon", - "ItemCount": 4, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedCritterCommon", - "ItemCount": 4, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2048707501, - "Id": { - "$oid": "66fd60b10ba592c4c95e889f" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedKdriveRare", - "ItemCount": 2, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedPredatorCommon", - "ItemCount": 2, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 4038149313, - "Id": { - "$oid": "66fd60b10ba592c4c95e88a0" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Son/SonTaskD", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedMergooCommon", - "ItemCount": 3, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Deimos/AnimalTagInfestedPredatorRare", - "ItemCount": 3, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_3", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2155290001, - "Id": { - "$oid": "66fd60b10ba592c4c95e88a1" - } - } - ], - "PropertyTextHash": "61E66B4E9E5A121DD06A476AE2A81B24", - "RandomSeedType": "VRST_FLAVOUR_TEXT", - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - } - } -} diff --git a/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestProspector.json b/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestProspector.json deleted file mode 100644 index 7b1d1fad..00000000 --- a/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestProspector.json +++ /dev/null @@ -1,312 +0,0 @@ -{ - "VendorInfo": { - "_id": { - "$oid": "5f456e01c96976e97d6b7ff1" - }, - "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestProspector", - "ItemManifest": [ - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreAItem", - "ItemCount": 10, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemBItem", - "ItemCount": 8, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 1370972414, - "Id": { - "$oid": "66fd60b20ba592c4c95e8ef8" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskC", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreBItem", - "ItemCount": 20, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosUncommonGemAItem", - "ItemCount": 8, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosUncommonOreAItem", - "ItemCount": 20, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_2", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2361790143, - "Id": { - "$oid": "66fd60b20ba592c4c95e8ef9" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemAItem", - "ItemCount": 6, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreAItem", - "ItemCount": 10, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 472210739, - "Id": { - "$oid": "66fd60b20ba592c4c95e8efb" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreBItem", - "ItemCount": 12, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreAItem", - "ItemCount": 15, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 3072462886, - "Id": { - "$oid": "66fd60b20ba592c4c95e8efd" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemAItem", - "ItemCount": 8, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreAItem", - "ItemCount": 10, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 767765909, - "Id": { - "$oid": "66fd60b20ba592c4c95e8efe" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskD", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosEidolonGemAItem", - "ItemCount": 5, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosEidolonGemBItem", - "ItemCount": 2, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosRareOreAItem", - "ItemCount": 22, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_3", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 512512880, - "Id": { - "$oid": "66fd60b20ba592c4c95e8eff" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreAItem", - "ItemCount": 10, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemAItem", - "ItemCount": 6, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2037734419, - "Id": { - "$oid": "66fd60b20ba592c4c95e8f00" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosUncommonOreAItem", - "ItemCount": 13, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreAItem", - "ItemCount": 8, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 1433662587, - "Id": { - "$oid": "66fd60b20ba592c4c95e8f01" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonOreAItem", - "ItemCount": 12, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemAItem", - "ItemCount": 8, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 1618492734, - "Id": { - "$oid": "66fd60b20ba592c4c95e8f02" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Otak/OtakTaskD", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosUncommonGemAItem", - "ItemCount": 7, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemBItem", - "ItemCount": 10, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosRareOreAItem", - "ItemCount": 12, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_3", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 4032699594, - "Id": { - "$oid": "66fd60b20ba592c4c95e8f03" - } - } - ], - "PropertyTextHash": "0AC3C284471037011B36EC51238D13A9", - "RandomSeedType": "VRST_FLAVOUR_TEXT", - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - } - } -} diff --git a/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestTokenVendor.json b/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestTokenVendor.json deleted file mode 100644 index dcc45dc9..00000000 --- a/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestTokenVendor.json +++ /dev/null @@ -1,223 +0,0 @@ -{ - "VendorInfo": { - "_id": { - "$oid": "5f456e03c96976e97d6b80d2" - }, - "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestTokenVendor", - "ItemManifest": [ - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Grandmother/GrandmotherTaskD", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonC", - "ItemCount": 10, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonA", - "ItemCount": 10, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonB", - "ItemCount": 10, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonA", - "ItemCount": 10, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 1415858946, - "Id": { - "$oid": "670a47b1872b2325705e746c" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Grandmother/GrandmotherTaskD", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonB", - "ItemCount": 2, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonA", - "ItemCount": 10, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonA", - "ItemCount": 10, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonB", - "ItemCount": 10, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 3178511462, - "Id": { - "$oid": "670a47b1872b2325705e746e" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Grandmother/GrandmotherTaskB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonA", - "ItemCount": 10, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonC", - "ItemCount": 10, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 3313207881, - "Id": { - "$oid": "670a47b1872b2325705e7471" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Grandmother/GrandmotherTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonB", - "ItemCount": 2, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2241288767, - "Id": { - "$oid": "670a47b1872b2325705e7472" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Grandmother/GrandmotherTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonB", - "ItemCount": 10, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 3395082536, - "Id": { - "$oid": "670a47b1872b2325705e7473" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Grandmother/GrandmotherTaskB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonC", - "ItemCount": 10, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonB", - "ItemCount": 10, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 493457277, - "Id": { - "$oid": "670a47b1872b2325705e7474" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Grandmother/GrandmotherTaskB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentUncommonB", - "ItemCount": 10, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Deimos/EntratiFragmentCommonB", - "ItemCount": 2, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 4225814786, - "Id": { - "$oid": "670a47b1872b2325705e7475" - } - } - ], - "PropertyTextHash": "58884EC7ECE7D22AD4BD9E9B436C37A8", - "RandomSeedType": "VRST_FLAVOUR_TEXT", - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - } - } -} diff --git a/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestWeaponsmith.json b/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestWeaponsmith.json deleted file mode 100644 index 9a3c5805..00000000 --- a/static/fixed_responses/getVendorInfo/DeimosHivemindCommisionsManifestWeaponsmith.json +++ /dev/null @@ -1,254 +0,0 @@ -{ - "VendorInfo": { - "_id": { - "$oid": "5f456e02c96976e97d6b8049" - }, - "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/HivemindCommisionsManifestWeaponsmith", - "ItemManifest": [ - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfGorgaricusSeedItem", - "ItemCount": 16, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2438288725, - "Id": { - "$oid": "66fd60b00ba592c4c95e7caf" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskC", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Game/FishBait/Infested/OrokinFishBaitA", - "ItemCount": 6, - "ProductCategory": "Consumables" - }, - { - "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfMapricoFruitItem", - "ItemCount": 21, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Game/FishBait/Infested/InfestedFishBaitA", - "ItemCount": 6, - "ProductCategory": "Consumables" - } - ], - "Bin": "BIN_2", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2431016296, - "Id": { - "$oid": "66fd60b00ba592c4c95e7cb2" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfMapricoFruitItem", - "ItemCount": 16, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 18484856, - "Id": { - "$oid": "66fd60b00ba592c4c95e7cb3" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfMapricoFruitItem", - "ItemCount": 14, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2278976516, - "Id": { - "$oid": "66fd60b00ba592c4c95e7cb4" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskC", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Game/FishBait/Infested/OrokinFishBaitA", - "ItemCount": 7, - "ProductCategory": "Consumables" - }, - { - "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/OrbStoneItem", - "ItemCount": 25, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Game/FishBait/Infested/InfestedFishBaitA", - "ItemCount": 6, - "ProductCategory": "Consumables" - } - ], - "Bin": "BIN_2", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 3150323898, - "Id": { - "$oid": "66fd60b00ba592c4c95e7cb5" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfMapricoFruitItem", - "ItemCount": 8, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 3971758486, - "Id": { - "$oid": "66fd60b00ba592c4c95e7cb6" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfGorgaricusSeedItem", - "ItemCount": 17, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/OrbStoneItem", - "ItemCount": 18, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2512835718, - "Id": { - "$oid": "66fd60b00ba592c4c95e7cb7" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/OrbStoneItem", - "ItemCount": 8, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 825411410, - "Id": { - "$oid": "66fd60b00ba592c4c95e7cb8" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Father/FatherTaskB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfGorgaricusSeedItem", - "ItemCount": 22, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/OrbStoneItem", - "ItemCount": 12, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2383349671, - "Id": { - "$oid": "66fd60b00ba592c4c95e7cb9" - } - } - ], - "PropertyTextHash": "CE9413585756FA39B793A9814E74E49F", - "RandomSeedType": "VRST_FLAVOUR_TEXT", - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - } - } -} diff --git a/static/fixed_responses/getVendorInfo/DeimosHivemindTokenVendorManifest.json b/static/fixed_responses/getVendorInfo/DeimosHivemindTokenVendorManifest.json deleted file mode 100644 index 1d165fc7..00000000 --- a/static/fixed_responses/getVendorInfo/DeimosHivemindTokenVendorManifest.json +++ /dev/null @@ -1,286 +0,0 @@ -{ - "VendorInfo": { - "_id": { - "$oid": "5fb70313c96976e97d6be6fe" - }, - "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/HivemindTokenVendorManifest", - "ItemManifest": [ - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Remedies/RemedySonB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishBPartItem", - "ItemCount": 36, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", - "ItemCount": 20, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishEPartItem", - "ItemCount": 36, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_2", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 379215713, - "Id": { - "$oid": "66fd60b20ba592c4c95e9308" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Remedies/RemedyMotherB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosGenericInfestedFishPartItem", - "ItemCount": 80, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfGorgaricusSeedItem", - "ItemCount": 32, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", - "ItemCount": 28, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2534781881, - "Id": { - "$oid": "66fd60b20ba592c4c95e9309" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Remedies/RemedyDaughterB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosUncommonGemAItem", - "ItemCount": 28, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", - "ItemCount": 32, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishAPartItem", - "ItemCount": 32, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 1507786123, - "Id": { - "$oid": "66fd60b20ba592c4c95e930a" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Remedies/RemedySonA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosRareGemAItem", - "ItemCount": 15, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemAItem", - "ItemCount": 30, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfGorgaricusSeedItem", - "ItemCount": 21, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 616241643, - "Id": { - "$oid": "66fd60b20ba592c4c95e930b" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Remedies/RemedyOtakA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishBPartItem", - "ItemCount": 21, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishCPartItem", - "ItemCount": 27, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishEPartItem", - "ItemCount": 27, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2888479655, - "Id": { - "$oid": "66fd60b20ba592c4c95e930c" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Remedies/RemedyGrandmotherA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemBItem", - "ItemCount": 20, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishBPartItem", - "ItemCount": 28, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfGorgaricusSeedItem", - "ItemCount": 24, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosCommonGemAItem", - "ItemCount": 20, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2874726481, - "Id": { - "$oid": "66fd60b20ba592c4c95e930d" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Remedies/RemedyFatherA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosGenericSharedFishPartItem", - "ItemCount": 75, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Gems/Deimos/DeimosUncommonGemAItem", - "ItemCount": 27, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/OrbStoneItem", - "ItemCount": 30, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 274676857, - "Id": { - "$oid": "66fd60b20ba592c4c95e930e" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/Deimos/Remedies/RemedyDaughterA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/InfestedMicroplanet/Resources/InfGorgaricusSeedItem", - "ItemCount": 24, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosInfestedFishBPartItem", - "ItemCount": 30, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Deimos/FishParts/DeimosGenericSharedFishPartItem", - "ItemCount": 51, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "LocTagRandSeed": 2487943761, - "Id": { - "$oid": "66fd60b20ba592c4c95e930f" - } - } - ], - "PropertyTextHash": "C34BF0BEDEAF7CBB0EEBFFECDFD6646D", - "RandomSeedType": "VRST_FLAVOUR_TEXT", - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - } - } -} diff --git a/static/fixed_responses/getVendorInfo/DeimosPetVendorManifest.json b/static/fixed_responses/getVendorInfo/DeimosPetVendorManifest.json deleted file mode 100644 index 76d738ea..00000000 --- a/static/fixed_responses/getVendorInfo/DeimosPetVendorManifest.json +++ /dev/null @@ -1,136 +0,0 @@ -{ - "VendorInfo": { - "_id": { - "$oid": "5f456e02c96976e97d6b8080" - }, - "TypeName": "/Lotus/Types/Game/VendorManifests/Deimos/PetVendorManifest", - "ItemManifest": [ - { - "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/AnimalTagInfestedNexiferaRare", - "PremiumPrice": [35, 35], - "Bin": "BIN_0", - "QuantityMultiplier": 5, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e89f6" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/AnimalTagInfestedNexiferaUncommon", - "PremiumPrice": [22, 22], - "Bin": "BIN_0", - "QuantityMultiplier": 5, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e89f7" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/AnimalTagInfestedMergooUncommon", - "PremiumPrice": [28, 28], - "Bin": "BIN_0", - "QuantityMultiplier": 5, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e89f8" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/AnimalTagInfestedKdriveUncommon", - "PremiumPrice": [25, 25], - "Bin": "BIN_0", - "QuantityMultiplier": 5, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e89f9" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/AnimalTagInfestedZongroCommon", - "PremiumPrice": [14, 14], - "Bin": "BIN_0", - "QuantityMultiplier": 5, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e89fa" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/AnimalTagInfestedPredatorCommon", - "PremiumPrice": [12, 12], - "Bin": "BIN_0", - "QuantityMultiplier": 5, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e89fb" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/AnimalTagInfestedMergooCommon", - "PremiumPrice": [13, 13], - "Bin": "BIN_0", - "QuantityMultiplier": 5, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e89fc" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/Deimos/AnimalTagInfestedKdriveCommon", - "PremiumPrice": [14, 14], - "Bin": "BIN_0", - "QuantityMultiplier": 5, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b10ba592c4c95e89fd" - } - } - ], - "PropertyTextHash": "F14C6B6A61D7585A10537995661F5220", - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - } - } -} diff --git a/static/fixed_responses/getVendorInfo/DuviriAcrithisVendorManifest.json b/static/fixed_responses/getVendorInfo/DuviriAcrithisVendorManifest.json deleted file mode 100644 index 031db476..00000000 --- a/static/fixed_responses/getVendorInfo/DuviriAcrithisVendorManifest.json +++ /dev/null @@ -1,321 +0,0 @@ -{ - "VendorInfo": { - "_id": { - "$oid": "64493ca759e9b164c86a2e14" - }, - "TypeName": "/Lotus/Types/Game/VendorManifests/Duviri/AcrithisVendorManifest", - "ItemManifest": [ - { - "StoreItem": "/Lotus/StoreItems/Types/Items/DangerRoom/DangerRoomTileDuviriDragonArena", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriDragonDropItem", - "ItemCount": 20, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_5", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b00ba592c4c95e7d88" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Recipes/Components/FormaBlueprint", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriDragonDropItem", - "ItemCount": 10, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_2", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "Id": { - "$oid": "66fd60b00ba592c4c95e7deb" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/UtilityUnlocker", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriDragonDropItem", - "ItemCount": 20, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_2", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "Id": { - "$oid": "66fd60b00ba592c4c95e7dec" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/Kuva", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriDragonDropItem", - "ItemCount": 10, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_2", - "QuantityMultiplier": 5000, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "Id": { - "$oid": "66fd60b00ba592c4c95e7ded" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/WeaponUtilityUnlocker", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriDragonDropItem", - "ItemCount": 20, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_2", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "Id": { - "$oid": "66fd60b00ba592c4c95e7dee" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/Kuva", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriDragonDropItem", - "ItemCount": 10, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_2", - "QuantityMultiplier": 5000, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "Id": { - "$oid": "670c5e12576f461f1e5e739c" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/Plastids", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriPlantItemD", - "ItemCount": 40, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": true, - "Id": { - "$oid": "6710c312fa0b2c5cd85e73c3" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Duviri/DUVxPlanterHangingPot", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriPlantItemE", - "ItemCount": 51, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "6710c312fa0b2c5cd85e73c6" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Duviri/DUVxPlanterPotB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriRockItem", - "ItemCount": 44, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "6710c312fa0b2c5cd85e73c7" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/NeuralSensor", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriPlantItemA", - "ItemCount": 52, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 3, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": true, - "Id": { - "$oid": "6710c312fa0b2c5cd85e73c8" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/ControlModule", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriPlantItemF", - "ItemCount": 42, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 3, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": true, - "Id": { - "$oid": "6710c312fa0b2c5cd85e73c9" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/MiscItems/PhotoboothTileDuviriArenaOpera", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriProcessedItem", - "ItemCount": 240, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "Id": { - "$oid": "66fd60b00ba592c4c95e7ddd" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Upgrades/CosmeticEnhancers/Utility/HealthWhileUsingChanneledAbilities", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriDragonDropItem", - "ItemCount": 10, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_3", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "Id": { - "$oid": "66fd60b00ba592c4c95e7e01" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Upgrades/Boons/DuviriVendorBoonItem", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/Duviri/Resource/DuviriPlantItemG", - "ItemCount": 50, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_4", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": true, - "Id": { - "$oid": "6711a412ba1ba01e405e739c" - } - } - ], - "PropertyTextHash": "9EE40048EB685549ACA3D01AB1F65BF2", - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - } - } -} diff --git a/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabVendorManifest.json b/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabVendorManifest.json deleted file mode 100644 index 624e2d33..00000000 --- a/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabVendorManifest.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "VendorInfo": { - "_id": { - "$oid": "6579d82b553a20c6fc0067ca" - }, - "TypeName": "/Lotus/Types/Game/VendorManifests/EntratiLabs/EntratiLabVendorManifest", - "ItemManifest": [ - { - "StoreItem": "/Lotus/StoreItems/Types/Gameplay/NarmerSorties/ArchonCrystalAmar", - "Bin": "BIN_3", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "RotatedWeekly": true, - "Affiliation": "EntratiLabSyndicate", - "MinAffiliationRank": 5, - "ReductionPerPositiveRank": 0, - "IncreasePerNegativeRank": 0, - "StandingCost": 30000, - "AllowMultipurchase": false, - "Id": { - "$oid": "66fd60b20ba592c4c95e920d" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Gameplay/NarmerSorties/ArchonCrystalBoreal", - "Bin": "BIN_3", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "RotatedWeekly": true, - "Affiliation": "EntratiLabSyndicate", - "MinAffiliationRank": 5, - "ReductionPerPositiveRank": 0, - "IncreasePerNegativeRank": 0, - "StandingCost": 30000, - "AllowMultipurchase": false, - "Id": { - "$oid": "66fd60b20ba592c4c95e920e" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Gameplay/NarmerSorties/ArchonCrystalNira", - "Bin": "BIN_3", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "RotatedWeekly": true, - "Affiliation": "EntratiLabSyndicate", - "MinAffiliationRank": 5, - "ReductionPerPositiveRank": 0, - "IncreasePerNegativeRank": 0, - "StandingCost": 30000, - "AllowMultipurchase": false, - "Id": { - "$oid": "66fd60b20ba592c4c95e920f" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/EntratiLabs/ORKxLabStool", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabDogTagUncommon", - "ItemCount": 2, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabMiscItemA", - "ItemCount": 22, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/MurmurItem", - "ItemCount": 18, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b20ba592c4c95e9270" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/EntratiLabs/ORKxLabChairA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/MurmurItem", - "ItemCount": 15, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabMiscItemA", - "ItemCount": 19, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabMiscItemB", - "ItemCount": 19, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b20ba592c4c95e9271" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/EntratiLabs/ORKxLabLightWallCandleA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/MurmurItem", - "ItemCount": 12, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabDogTagCommon", - "ItemCount": 3, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b20ba592c4c95e9272" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/EntratiLabs/ORKxLabLightChandelierD", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabMiscItemB", - "ItemCount": 8, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabDogTagCommon", - "ItemCount": 3, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b20ba592c4c95e9273" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/EntratiLabs/ORKxLabLightChandelierB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabMiscItemA", - "ItemCount": 12, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabDogTagCommon", - "ItemCount": 2, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b20ba592c4c95e9274" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/EntratiLabs/ORKxLabLightChandelierA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/MurmurItem", - "ItemCount": 15, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabMiscItemA", - "ItemCount": 13, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b20ba592c4c95e9275" - } - } - ], - "PropertyTextHash": "44DA3839E6F7BDB32ACED53F2B0BE14E", - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - } - } -} diff --git a/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabsCommisionsManifest.json b/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabsCommisionsManifest.json deleted file mode 100644 index 41a9454e..00000000 --- a/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabsCommisionsManifest.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "VendorInfo": { - "_id": { - "$oid": "6579d82b553a20c6fc0067ae" - }, - "TypeName": "/Lotus/Types/Game/VendorManifests/EntratiLabs/EntratiLabsCommisionsManifest", - "ItemManifest": [ - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/EntratiLabs/LoidTaskC", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabMiscItemB", - "ItemCount": 17, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/MurmurItem", - "ItemCount": 30, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_2", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "Id": { - "$oid": "670a2b928ac7854ac55e73d3" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/EntratiLabs/LoidTaskB", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/MurmurItem", - "ItemCount": 20, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/EntratiLabMiscItemA", - "ItemCount": 228, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "Id": { - "$oid": "670a2b928ac7854ac55e73d4" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/Tasks/EntratiLabs/LoidTaskA", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Gameplay/EntratiLab/Resources/MurmurItem", - "ItemCount": 15, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Gameplay/Zariman/Resources/ZarimanMiscItemB", - "ItemCount": 1, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "Id": { - "$oid": "670a2b928ac7854ac55e73d5" - } - } - ], - "PropertyTextHash": "60C4D85A8DE5E6538AD23CDDFEEF0422", - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - } - } -} diff --git a/static/fixed_responses/getVendorInfo/Nova1999ConquestShopManifest.json b/static/fixed_responses/getVendorInfo/Nova1999ConquestShopManifest.json deleted file mode 100644 index 59afcd65..00000000 --- a/static/fixed_responses/getVendorInfo/Nova1999ConquestShopManifest.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "VendorInfo": { - "_id": { - "$oid": "67dadc30e4b6e0e5979c8d6a" - }, - "TypeName": "/Lotus/Types/Game/VendorManifests/TheHex/Nova1999ConquestShopManifest", - "ItemManifest": [ - { - "StoreItem": "/Lotus/StoreItems/Types/BoosterPacks/1999StickersPackEchoesArchimedea", - "ItemPrices": [ - { - "ItemCount": 10, - "ItemType": "/Lotus/Types/Items/MiscItems/1999ConquestBucks", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "2051240400000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "67db32b983b2ad79a9c1c18c" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/BoosterPacks/1999StickersPackEchoesArchimedeaFree", - "ItemPrices": [ - { - "ItemCount": 1, - "ItemType": "/Lotus/Types/Items/MiscItems/1999FreeStickersPack", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "2051240400000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "67db32b983b2ad79a9c1c18d" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/BoosterPacks/1999StickersPackEchoesArchimedeaFixed", - "ItemPrices": [ - { - "ItemCount": 1, - "ItemType": "/Lotus/Types/Items/MiscItems/1999FixedStickersPack", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "2051240400000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "67db32b983b2ad79a9c1c18e" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/SyndicateVosforPack", - "ItemPrices": [ - { - "ItemCount": 6, - "ItemType": "/Lotus/Types/Items/MiscItems/1999ConquestBucks", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "2051240400000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "67db32b983b2ad79a9c1c18f" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/StickerPictureFrame", - "ItemPrices": [ - { - "ItemCount": 10, - "ItemType": "/Lotus/Types/Items/MiscItems/1999ConquestBucks", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "2051240400000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "67db32b983b2ad79a9c1c190" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Upgrades/CosmeticEnhancers/Utility/AbilityRadiationProcsCreateUniversalOrbsOnKill", - "ItemPrices": [ - { - "ItemCount": 5, - "ItemType": "/Lotus/Types/Items/MiscItems/1999ConquestBucks", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "2051240400000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "Id": { - "$oid": "67db32b983b2ad79a9c1c191" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Upgrades/CosmeticEnhancers/Offensive/AbilityHeatProcsGiveCritChance", - "ItemPrices": [ - { - "ItemCount": 5, - "ItemType": "/Lotus/Types/Items/MiscItems/1999ConquestBucks", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "2051240400000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "Id": { - "$oid": "67db32b983b2ad79a9c1c192" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Upgrades/CosmeticEnhancers/Defensive/InvulnerabilityOnDeathOnMercyKill", - "ItemPrices": [ - { - "ItemCount": 5, - "ItemType": "/Lotus/Types/Items/MiscItems/1999ConquestBucks", - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "2051240400000" - } - }, - "PurchaseQuantityLimit": 1, - "AllowMultipurchase": false, - "Id": { - "$oid": "67db32b983b2ad79a9c1c193" - } - } - ], - "PropertyTextHash": "CB7D0E807FD5E2BCD059195201D963B9", - "RequiredGoalTag": "", - "Expiry": { - "$date": { - "$numberLong": "2051240400000" - } - } - } -} diff --git a/static/fixed_responses/getVendorInfo/OstronPetVendorManifest.json b/static/fixed_responses/getVendorInfo/OstronPetVendorManifest.json deleted file mode 100644 index 521260cf..00000000 --- a/static/fixed_responses/getVendorInfo/OstronPetVendorManifest.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "VendorInfo": { - "_id": { - "$oid": "5991d5e6bcc718474ee90c15" - }, - "TypeName": "/Lotus/Types/Game/VendorManifests/Ostron/PetVendorManifest", - "ItemManifest": [ - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/LisetPropOstBirdCage", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Gems/Eidolon/UncommonOreAAlloyAItem", - "ItemCount": 10, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Eidolon/FishParts/DayUncommonFishBPartItem", - "ItemCount": 8, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b20ba592c4c95e9a8e" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/KubrowColorPackDrahk", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Fish/Eidolon/FishParts/DayCommonFishBPartItem", - "ItemCount": 14, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Fish/Eidolon/FishParts/BothCommonFishBPartItem", - "ItemCount": 13, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b20ba592c4c95e9a8f" - } - }, - { - "StoreItem": "/Lotus/Types/StoreItems/Packages/KubrowColorPackFeral", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Fish/Eidolon/FishParts/BothCommonFishAPartItem", - "ItemCount": 19, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Gems/Eidolon/CommonOreBAlloyBItem", - "ItemCount": 34, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "66fd60b20ba592c4c95e9a90" - } - } - ], - "PropertyTextHash": "3D85F1A0A2B62734AE90370DEC214C26", - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - } - } -} diff --git a/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorRepossessionsManifest.json b/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorRepossessionsManifest.json deleted file mode 100644 index 67b234a2..00000000 --- a/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorRepossessionsManifest.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "VendorInfo": { - "_id": { - "$oid": "5be4a159b144f3cdf1c22edf" - }, - "TypeName": "/Lotus/Types/Game/VendorManifests/Solaris/DebtTokenVendorRepossessionsManifest", - "ItemManifest": [ - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Venus/SUToolBox", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Solaris/DebtTokenB", - "ItemCount": 6, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "6711a412ba1ba01e405e739d" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Venus/SUBookAOpen", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Solaris/DebtTokenC", - "ItemCount": 6, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "6711a412ba1ba01e405e739e" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Venus/SUFoodCans", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Solaris/DebtTokenC", - "ItemCount": 7, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "6711a412ba1ba01e405e739f" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Venus/SUTechToolD", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Solaris/DebtTokenD", - "ItemCount": 5, - "ProductCategory": "MiscItems" - }, - { - "ItemType": "/Lotus/Types/Items/Solaris/DebtTokenA", - "ItemCount": 15, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_1", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "6711a412ba1ba01e405e73a0" - } - }, - { - "StoreItem": "/Lotus/StoreItems/Types/Items/ShipDecos/Venus/SUContainerCrate", - "ItemPrices": [ - { - "ItemType": "/Lotus/Types/Items/Solaris/DebtTokenA", - "ItemCount": 9, - "ProductCategory": "MiscItems" - } - ], - "Bin": "BIN_0", - "QuantityMultiplier": 1, - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - }, - "AllowMultipurchase": true, - "Id": { - "$oid": "6711a412ba1ba01e405e73a1" - } - } - ], - "PropertyTextHash": "E0E83157D73468DC578403CB9EBA9DA6", - "Expiry": { - "$date": { - "$numberLong": "9999999000000" - } - } - } -} From 2fa6dcc7edb34c9382c31739d8b61a84803d69c2 Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Sat, 21 Jun 2025 07:26:43 -0700 Subject: [PATCH 3/4] feat(webui): handle auth via websocket (#2226) Now when logging in and out of the game, the webui is notified so it can refresh the nonce, removing the need for constant login requests to revalidate it. Closes #2223 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2226 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- src/controllers/api/loginController.ts | 59 +++------- src/controllers/api/logoutController.ts | 7 +- src/models/loginModel.ts | 8 +- src/services/loginService.ts | 17 +++ src/services/webService.ts | 114 +++++++++++++++++- src/types/loginTypes.ts | 2 +- static/webui/index.html | 2 +- static/webui/script.js | 147 +++++++++++++----------- 8 files changed, 236 insertions(+), 120 deletions(-) diff --git a/src/controllers/api/loginController.ts b/src/controllers/api/loginController.ts index 3d510f26..c7b5c16d 100644 --- a/src/controllers/api/loginController.ts +++ b/src/controllers/api/loginController.ts @@ -4,16 +4,16 @@ import { config } from "@/src/services/configService"; import { buildConfig } from "@/src/services/buildConfigService"; import { Account } from "@/src/models/loginModel"; -import { createAccount, isCorrectPassword, isNameTaken } from "@/src/services/loginService"; +import { createAccount, createNonce, getUsernameFromEmail, isCorrectPassword } from "@/src/services/loginService"; import { IDatabaseAccountJson, ILoginRequest, ILoginResponse } from "@/src/types/loginTypes"; import { logger } from "@/src/utils/logger"; import { version_compare } from "@/src/helpers/inventoryHelpers"; +import { sendWsBroadcastTo } from "@/src/services/webService"; export const loginController: RequestHandler = async (request, response) => { const loginRequest = JSON.parse(String(request.body)) as ILoginRequest; // parse octet stream of json data to json object const account = await Account.findOne({ email: loginRequest.email }); - const nonce = Math.round(Math.random() * Number.MAX_SAFE_INTEGER); const buildLabel: string = typeof request.query.buildLabel == "string" @@ -42,26 +42,14 @@ export const loginController: RequestHandler = async (request, response) => { loginRequest.ClientType == "webui-register") ) { try { - const nameFromEmail = loginRequest.email.substring(0, loginRequest.email.indexOf("@")); - let name = nameFromEmail || loginRequest.email.substring(1) || "SpaceNinja"; - if (await isNameTaken(name)) { - let suffix = 0; - do { - ++suffix; - name = nameFromEmail + suffix; - } while (await isNameTaken(name)); - } + const name = await getUsernameFromEmail(loginRequest.email); const newAccount = await createAccount({ email: loginRequest.email, password: loginRequest.password, DisplayName: name, CountryCode: loginRequest.lang?.toUpperCase() ?? "EN", - ClientType: loginRequest.ClientType == "webui-register" ? "webui" : loginRequest.ClientType, - CrossPlatformAllowed: true, - ForceLogoutVersion: 0, - ConsentNeeded: false, - TrackedSettings: [], - Nonce: nonce, + ClientType: loginRequest.ClientType, + Nonce: createNonce(), BuildLabel: buildLabel, LastLogin: new Date() }); @@ -80,38 +68,29 @@ export const loginController: RequestHandler = async (request, response) => { return; } - if (loginRequest.ClientType == "webui-register") { - response.status(400).json({ error: "account already exists" }); - return; - } - if (!isCorrectPassword(loginRequest.password, account.password)) { response.status(400).json({ error: "incorrect login data" }); return; } - if (loginRequest.ClientType == "webui") { - if (!account.Nonce) { - account.ClientType = "webui"; - account.Nonce = nonce; + if (account.Nonce && account.ClientType != "webui" && !account.Dropped && !loginRequest.kick) { + // U17 seems to handle "nonce still set" like a login failure. + if (version_compare(buildLabel, "2015.12.05.18.07") >= 0) { + response.status(400).send({ error: "nonce still set" }); + return; } - } else { - if (account.Nonce && account.ClientType != "webui" && !account.Dropped && !loginRequest.kick) { - // U17 seems to handle "nonce still set" like a login failure. - if (version_compare(buildLabel, "2015.12.05.18.07") >= 0) { - response.status(400).send({ error: "nonce still set" }); - return; - } - } - - account.ClientType = loginRequest.ClientType; - account.Nonce = nonce; - account.CountryCode = loginRequest.lang?.toUpperCase() ?? "EN"; - account.BuildLabel = buildLabel; - account.LastLogin = new Date(); } + + account.ClientType = loginRequest.ClientType; + account.Nonce = createNonce(); + account.CountryCode = loginRequest.lang?.toUpperCase() ?? "EN"; + account.BuildLabel = buildLabel; + account.LastLogin = new Date(); await account.save(); + // Tell WebUI its nonce has been invalidated + sendWsBroadcastTo(account._id.toString(), { logged_out: true }); + response.json(createLoginResponse(myAddress, myUrlBase, account.toJSON(), buildLabel)); }; diff --git a/src/controllers/api/logoutController.ts b/src/controllers/api/logoutController.ts index 889e7d78..e2074f76 100644 --- a/src/controllers/api/logoutController.ts +++ b/src/controllers/api/logoutController.ts @@ -1,5 +1,6 @@ import { RequestHandler } from "express"; import { Account } from "@/src/models/loginModel"; +import { sendWsBroadcastTo } from "@/src/services/webService"; export const logoutController: RequestHandler = async (req, res) => { if (!req.query.accountId) { @@ -10,7 +11,7 @@ export const logoutController: RequestHandler = async (req, res) => { throw new Error("Request is missing nonce parameter"); } - await Account.updateOne( + const stat = await Account.updateOne( { _id: req.query.accountId, Nonce: nonce @@ -19,6 +20,10 @@ export const logoutController: RequestHandler = async (req, res) => { Nonce: 0 } ); + if (stat.modifiedCount) { + // Tell WebUI its nonce has been invalidated + sendWsBroadcastTo(req.query.accountId as string, { logged_out: true }); + } res.writeHead(200, { "Content-Type": "text/html", diff --git a/src/models/loginModel.ts b/src/models/loginModel.ts index 0f83c0cb..44dab113 100644 --- a/src/models/loginModel.ts +++ b/src/models/loginModel.ts @@ -11,13 +11,13 @@ const databaseAccountSchema = new Schema( email: { type: String, required: true, unique: true }, password: { type: String, required: true }, DisplayName: { type: String, required: true, unique: true }, - CountryCode: { type: String, required: true }, + CountryCode: { type: String, default: "" }, ClientType: { type: String }, - CrossPlatformAllowed: { type: Boolean, required: true }, - ForceLogoutVersion: { type: Number, required: true }, + CrossPlatformAllowed: { type: Boolean, default: true }, + ForceLogoutVersion: { type: Number, default: 0 }, AmazonAuthToken: { type: String }, AmazonRefreshToken: { type: String }, - ConsentNeeded: { type: Boolean, required: true }, + ConsentNeeded: { type: Boolean, default: false }, TrackedSettings: { type: [String], default: [] }, Nonce: { type: Number, default: 0 }, BuildLabel: String, diff --git a/src/services/loginService.ts b/src/services/loginService.ts index ccf5b958..44366f5c 100644 --- a/src/services/loginService.ts +++ b/src/services/loginService.ts @@ -18,6 +18,23 @@ export const isNameTaken = async (name: string): Promise => { return !!(await Account.findOne({ DisplayName: name })); }; +export const createNonce = (): number => { + return Math.round(Math.random() * Number.MAX_SAFE_INTEGER); +}; + +export const getUsernameFromEmail = async (email: string): Promise => { + const nameFromEmail = email.substring(0, email.indexOf("@")); + let name = nameFromEmail || email.substring(1) || "SpaceNinja"; + if (await isNameTaken(name)) { + let suffix = 0; + do { + ++suffix; + name = nameFromEmail + suffix; + } while (await isNameTaken(name)); + } + return nameFromEmail; +}; + export const createAccount = async (accountData: IDatabaseAccountRequiredFields): Promise => { const account = new Account(accountData); try { diff --git a/src/services/webService.ts b/src/services/webService.ts index d4d1227c..8beda45c 100644 --- a/src/services/webService.ts +++ b/src/services/webService.ts @@ -6,6 +6,10 @@ import { logger } from "../utils/logger"; import { app } from "../app"; import { AddressInfo } from "node:net"; import ws from "ws"; +import { Account } from "../models/loginModel"; +import { createAccount, createNonce, getUsernameFromEmail, isCorrectPassword } from "./loginService"; +import { IDatabaseAccountJson } from "../types/loginTypes"; +import { HydratedDocument } from "mongoose"; let httpServer: http.Server | undefined; let httpsServer: https.Server | undefined; @@ -25,7 +29,7 @@ export const startWebServer = (): void => { httpServer = http.createServer(app); httpServer.listen(httpPort, () => { wsServer = new ws.Server({ server: httpServer }); - //wsServer.on("connection", wsOnConnect); + wsServer.on("connection", wsOnConnect); logger.info("HTTP server started on port " + httpPort); @@ -33,7 +37,7 @@ export const startWebServer = (): void => { httpsServer = https.createServer(tlsOptions, app); httpsServer.listen(httpsPort, () => { wssServer = new ws.Server({ server: httpsServer }); - //wssServer.on("connection", wsOnConnect); + wssServer.on("connection", wsOnConnect); logger.info("HTTPS server started on port " + httpsPort); @@ -92,11 +96,91 @@ export const stopWebServer = async (): Promise => { await Promise.all(promises); }; -/*const wsOnConnect = (ws: ws, _req: http.IncomingMessage): void => { - ws.on("message", console.log); -};*/ +interface IWsCustomData extends ws { + accountId?: string; +} -export const sendWsBroadcast = (data: T): void => { +interface IWsMsgFromClient { + auth?: { + email: string; + password: string; + isRegister: boolean; + }; + logout?: boolean; +} + +interface IWsMsgToClient { + ports?: { + http: number | undefined; + https: number | undefined; + }; + config_reloaded?: boolean; + auth_succ?: { + id: string; + DisplayName: string; + Nonce: number; + }; + auth_fail?: { + isRegister: boolean; + }; + logged_out?: boolean; +} + +const wsOnConnect = (ws: ws, _req: http.IncomingMessage): void => { + // eslint-disable-next-line @typescript-eslint/no-misused-promises + ws.on("message", async msg => { + const data = JSON.parse(String(msg)) as IWsMsgFromClient; + if (data.auth) { + let account: IDatabaseAccountJson | null = await Account.findOne({ email: data.auth.email }); + if (account) { + if (isCorrectPassword(data.auth.password, account.password)) { + if (!account.Nonce) { + account.ClientType = "webui"; + account.Nonce = createNonce(); + await (account as HydratedDocument).save(); + } + } else { + account = null; + } + } else if (data.auth.isRegister) { + const name = await getUsernameFromEmail(data.auth.email); + account = await createAccount({ + email: data.auth.email, + password: data.auth.password, + ClientType: "webui", + LastLogin: new Date(), + DisplayName: name, + Nonce: createNonce() + }); + } + if (account) { + (ws as IWsCustomData).accountId = account.id; + ws.send( + JSON.stringify({ + auth_succ: { + id: account.id, + DisplayName: account.DisplayName, + Nonce: account.Nonce + } + } satisfies IWsMsgToClient) + ); + } else { + ws.send( + JSON.stringify({ + auth_fail: { + isRegister: data.auth.isRegister + } + } satisfies IWsMsgToClient) + ); + } + } + if (data.logout) { + (ws as IWsCustomData).accountId = undefined; + } + }); +}; + +export const sendWsBroadcast = (data: IWsMsgToClient): void => { const msg = JSON.stringify(data); if (wsServer) { for (const client of wsServer.clients) { @@ -109,3 +193,21 @@ export const sendWsBroadcast = (data: T): void => { } } }; + +export const sendWsBroadcastTo = (accountId: string, data: IWsMsgToClient): void => { + const msg = JSON.stringify(data); + if (wsServer) { + for (const client of wsServer.clients) { + if ((client as IWsCustomData).accountId == accountId) { + client.send(msg); + } + } + } + if (wssServer) { + for (const client of wssServer.clients) { + if ((client as IWsCustomData).accountId == accountId) { + client.send(msg); + } + } + } +}; diff --git a/src/types/loginTypes.ts b/src/types/loginTypes.ts index 159d39e9..ef280188 100644 --- a/src/types/loginTypes.ts +++ b/src/types/loginTypes.ts @@ -2,7 +2,7 @@ import { Types } from "mongoose"; export interface IAccountAndLoginResponseCommons { DisplayName: string; - CountryCode: string; + CountryCode?: string; ClientType?: string; CrossPlatformAllowed?: boolean; ForceLogoutVersion?: number; diff --git a/static/webui/index.html b/static/webui/index.html index 5b92f727..1a748968 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -37,7 +37,7 @@