From 993a562c9f78ede4ae24d63a8d4ee9e0eebea76a Mon Sep 17 00:00:00 2001 From: Lawin0129 Date: Sat, 11 Jun 2022 20:10:08 +0100 Subject: [PATCH] code improvements and clientsettings fallback --- CloudStorage/DefaultGame.ini | 6 +- Config/config.ini | 16 +- index.js | 26 +- package-lock.json | 22 + package.json | 1 + profiles/athena.json | 4035 +++++++++++++--------------------- structure/cloudstorage.js | 56 +- structure/friends.js | 3 +- structure/functions.js | 48 +- structure/matchmaking.js | 7 +- structure/mcp.js | 21 +- structure/timeline.js | 3 +- structure/xmpp.js | 15 +- 13 files changed, 1725 insertions(+), 2534 deletions(-) diff --git a/CloudStorage/DefaultGame.ini b/CloudStorage/DefaultGame.ini index ec5a454..75d311d 100644 --- a/CloudStorage/DefaultGame.ini +++ b/CloudStorage/DefaultGame.ini @@ -1,11 +1,11 @@ [/Script/FortniteGame.FortGlobals] -bAllowLogout=true +bAllowLogout=true # Enables log out button. [/Script/FortniteGame.FortChatManager] -bShouldRequestGeneralChatRooms=true +bShouldRequestGeneralChatRooms=true # Request for chat rooms (global chat and founders chat). bShouldJoinGlobalChat=true bShouldJoinFounderChat=true -bIsAthenaGlobalChatEnabled=true +bIsAthenaGlobalChatEnabled=true # Battle royale global chat. [/Script/FortniteGame.FortTextHotfixConfig] +TextReplacements=(Category=Game, Namespace="", bIsMinimalPatch=True, Key="D5ECE3CD484655CBAE1DB6922C1D87C7", NativeString="Getting Started", LocalizedStrings=(("ar","مرحبًا بك في LawinServer!"),("en","Welcome to LawinServer!"),("de","Willkommen bei LawinServer!"),("es","¡Bienvenidos a LawinServer!"),("es-419","¡Bienvenidos a LawinServer!"),("fr","Bienvenue sur LawinServer !"),("it","Benvenuto in LawinServer!"),("ja","LawinServerへようこそ!"),("ko","LawinServer에 오신 것을 환영합니다!"),("pl","Witaj w LawinServerze!"),("pt-BR","Bem-vindo ao LawinServer!"),("ru","Добро пожаловать в LawinServer!"),("tr","LavinServer'a Hoş Geldiniz!"))) diff --git a/Config/config.ini b/Config/config.ini index 954e598..641ed1b 100644 --- a/Config/config.ini +++ b/Config/config.ini @@ -1,11 +1,17 @@ [Config] -bUseConfigDisplayName=false # If this is set to false, it will use the email to display name method. -displayName=LawinServer # Your fortnite display name. +# If this is set to false, it will use the email to display name method. +bUseConfigDisplayName=false +# Your fortnite display name (will only be used if the property above is set to true). +displayName=LawinServer [Profile] -bCompletedSeasonalQuests=false # If this is set to true, every BR and StW seasonal quest will be on complete. Works for Battle Royale from Season 3 to Season 20 and for Save the World from Season 2 to Season X. +# If this is set to true, every BR and StW seasonal quest will be on complete. Works for Battle Royale from Season 3 to Season 20 and for Save the World from Season 2 to Season X. +bCompletedSeasonalQuests=false [GameServer] # Matchmaker gameserver config, you can use this to connect to gameservers like rift (titanium), fortmp, etc... (they have to be hosting though). -ip=127.0.0.1 # IP the matchmaker will use upon join. -port=7777 # PORT the matchmaker will use upon join. + +# IP the matchmaker will use upon join. +ip=127.0.0.1 +# PORT the matchmaker will use upon join. +port=7777 \ No newline at end of file diff --git a/index.js b/index.js index 70baf5d..b0a0963 100644 --- a/index.js +++ b/index.js @@ -2,10 +2,12 @@ const Express = require("express"); const express = Express(); const fs = require("fs"); const path = require("path"); +const cookieParser = require("cookie-parser"); express.use(Express.json()); express.use(Express.urlencoded({ extended: true })); express.use(Express.static('public')); +express.use(cookieParser()); express.use(require("./structure/party.js")); express.use(require("./structure/discovery.js")) @@ -24,13 +26,26 @@ express.use(require("./structure/cloudstorage.js")); express.use(require("./structure/mcp.js")); const port = process.env.PORT || 3551; -express.listen(port, console.log("LawinServer started listening on port", port)); -require("./structure/xmpp.js"); +express.listen(port, () => { + console.log("LawinServer started listening on port", port); -if (!fs.existsSync(path.join(process.env.LOCALAPPDATA, "LawinServer"))) fs.mkdirSync(path.join(process.env.LOCALAPPDATA, "LawinServer")); + require("./structure/xmpp.js"); +}).on("error", (err) => { + if (err.code == "EADDRINUSE") console.log(`\x1b[31mERROR\x1b[0m: Port ${port} is already in use!`); + else throw err; -// keep this at the end of the code thanks -express.all("*", async (req, res) => { + process.exit(0); +}); + +try { + if (!fs.existsSync(path.join(process.env.LOCALAPPDATA, "LawinServer"))) fs.mkdirSync(path.join(process.env.LOCALAPPDATA, "LawinServer")); +} catch (err) { + // fallback + if (!fs.existsSync(path.join(__dirname, "ClientSettings"))) fs.mkdirSync(path.join(__dirname, "ClientSettings")); +} + +// if endpoint not found, return this error +express.use((req, res, next) => { var XEpicErrorName = "errors.com.lawinserver.common.not_found"; var XEpicErrorCode = 1004; @@ -47,5 +62,4 @@ express.all("*", async (req, res) => { "originatingService": "any", "intent": "prod" }); - res.end(); }); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f8f2856..cf24d73 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "GPL-3.0", "dependencies": { + "cookie-parser": "^1.4.6", "crypto": "^1.0.1", "express": "^4.17.2", "fs": "^0.0.1-security", @@ -92,6 +93,18 @@ "node": ">= 0.6" } }, + "node_modules/cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "dependencies": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", @@ -661,6 +674,15 @@ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, + "cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "requires": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + } + }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", diff --git a/package.json b/package.json index cd0ada9..bf3a7ed 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "description": "A fortnite backend which supports both BR and STW for every single fortnite build.", "main": "index.js", "dependencies": { + "cookie-parser": "^1.4.6", "crypto": "^1.0.1", "express": "^4.17.2", "fs": "^0.0.1-security", diff --git a/profiles/athena.json b/profiles/athena.json index f4f689e..08ed410 100644 --- a/profiles/athena.json +++ b/profiles/athena.json @@ -7215,7 +7215,16 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [], + "variants": [ + { + "channel": "Material", + "active": "Mat1", + "owned": [ + "Mat1", + "Mat2" + ] + } + ], "favorite": false }, "quantity": 1 @@ -11915,34 +11924,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "ClothingColor", - "active": "000", - "owned": [ - "000", - "006", - "005", - "001", - "003", - "002", - "004" - ] - }, - { - "channel": "JerseyColor", - "active": "000", - "owned": [ - "000", - "003", - "006", - "002", - "004", - "005", - "001" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -12910,44 +12892,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "Progressive", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage2" - ] - }, - { - "channel": "JerseyColor", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -14382,6 +14327,35 @@ }, "quantity": 1 }, + "AthenaBackpack:BID_942_LimaBean": { + "templateId": "AthenaBackpack:BID_942_LimaBean", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [ + { + "channel": "Material", + "active": "Mat1", + "owned": [ + "Mat1", + "Mat2", + "Mat3", + "Mat4", + "Mat5", + "Mat7", + "Mat8", + "Mat6", + "Mat9", + "Mat10" + ] + } + ], + "favorite": false + }, + "quantity": 1 + }, "AthenaBackpack:BID_943_LlamaLeague": { "templateId": "AthenaBackpack:BID_943_LlamaLeague", "attributes": { @@ -15412,6 +15386,139 @@ }, "quantity": 1 }, + "AthenaBackpack:BID_A_020_CanaryMale": { + "templateId": "AthenaBackpack:BID_A_020_CanaryMale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaBackpack:BID_A_021_LancelotMale": { + "templateId": "AthenaBackpack:BID_A_021_LancelotMale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [ + { + "channel": "Progressive", + "active": "Stage1", + "owned": [ + "Stage1", + "Stage2", + "Stage3" + ] + } + ], + "favorite": false + }, + "quantity": 1 + }, + "AthenaBackpack:BID_A_022_BlueJayFemale": { + "templateId": "AthenaBackpack:BID_A_022_BlueJayFemale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [ + { + "channel": "Progressive", + "active": "Stage1", + "owned": [ + "Stage1", + "Stage2" + ] + } + ], + "favorite": false + }, + "quantity": 1 + }, + "AthenaBackpack:BID_A_024_FuchsiaFemale": { + "templateId": "AthenaBackpack:BID_A_024_FuchsiaFemale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [ + { + "channel": "Progressive", + "active": "Stage1", + "owned": [ + "Stage1", + "Stage2" + ] + } + ], + "favorite": false + }, + "quantity": 1 + }, + "AthenaBackpack:BID_A_025_PinkWidowFemale": { + "templateId": "AthenaBackpack:BID_A_025_PinkWidowFemale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [ + { + "channel": "Progressive", + "active": "Stage1", + "owned": [ + "Stage1", + "Stage2" + ] + } + ], + "favorite": false + }, + "quantity": 1 + }, + "AthenaBackpack:BID_A_026_CollectableMale": { + "templateId": "AthenaBackpack:BID_A_026_CollectableMale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaBackpack:BID_A_027_SpectacleWebMale": { + "templateId": "AthenaBackpack:BID_A_027_SpectacleWebMale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaBackpack:BID_A_029_RealmMale": { + "templateId": "AthenaBackpack:BID_A_029_RealmMale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaBackpack:BID_NPC_CloakedAssassin": { "templateId": "AthenaBackpack:BID_NPC_CloakedAssassin", "attributes": { @@ -17553,46 +17660,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "Fortnite", - "owned": [ - "Fortnite", - "Argentina", - "Australia", - "Belgium", - "Brazil", - "Canada", - "Colombia", - "Denmark", - "Egypt", - "England", - "France", - "Germany", - "Iceland", - "Italy", - "Ireland", - "Japan", - "Korea", - "Mexico", - "Netherlands", - "NewZealand", - "Nigeria", - "Norway", - "Poland", - "Portugal", - "Russia", - "Saudi", - "Spain", - "Sweden", - "Switzerland", - "Terkey", - "Uruguay", - "USA" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -17604,46 +17672,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "Fortnite", - "owned": [ - "Fortnite", - "Argentina", - "Australia", - "Belgium", - "Brazil", - "Canada", - "Colombia", - "Denmark", - "Egypt", - "England", - "France", - "Germany", - "Iceland", - "Italy", - "Ireland", - "Japan", - "Korea", - "Mexico", - "Netherlands", - "NewZealand", - "Nigeria", - "Norway", - "Poland", - "Portugal", - "Russia", - "Saudi", - "Spain", - "Sweden", - "Switzerland", - "Terkey", - "Uruguay", - "USA" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -17655,46 +17684,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "Fortnite", - "owned": [ - "Fortnite", - "Argentina", - "Australia", - "Belgium", - "Brazil", - "Canada", - "Colombia", - "Denmark", - "Egypt", - "England", - "France", - "Germany", - "Iceland", - "Italy", - "Ireland", - "Japan", - "Korea", - "Mexico", - "Netherlands", - "NewZealand", - "Nigeria", - "Norway", - "Poland", - "Portugal", - "Russia", - "Saudi", - "Spain", - "Sweden", - "Switzerland", - "Terkey", - "Uruguay", - "USA" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -17706,46 +17696,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "Fortnite", - "owned": [ - "Fortnite", - "Argentina", - "Australia", - "Belgium", - "Brazil", - "Canada", - "Colombia", - "Denmark", - "Egypt", - "England", - "France", - "Germany", - "Iceland", - "Italy", - "Ireland", - "Japan", - "Korea", - "Mexico", - "Netherlands", - "NewZealand", - "Nigeria", - "Norway", - "Poland", - "Portugal", - "Russia", - "Saudi", - "Spain", - "Sweden", - "Switzerland", - "Terkey", - "Uruguay", - "USA" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -17757,46 +17708,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "Fortnite", - "owned": [ - "Fortnite", - "Argentina", - "Australia", - "Belgium", - "Brazil", - "Canada", - "Colombia", - "Denmark", - "Egypt", - "England", - "France", - "Germany", - "Iceland", - "Italy", - "Ireland", - "Japan", - "Korea", - "Mexico", - "Netherlands", - "NewZealand", - "Nigeria", - "Norway", - "Poland", - "Portugal", - "Russia", - "Saudi", - "Spain", - "Sweden", - "Switzerland", - "Terkey", - "Uruguay", - "USA" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -17808,46 +17720,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "Fortnite", - "owned": [ - "Fortnite", - "Argentina", - "Australia", - "Belgium", - "Brazil", - "Canada", - "Colombia", - "Denmark", - "Egypt", - "England", - "France", - "Germany", - "Iceland", - "Italy", - "Ireland", - "Japan", - "Korea", - "Mexico", - "Netherlands", - "NewZealand", - "Nigeria", - "Norway", - "Poland", - "Portugal", - "Russia", - "Saudi", - "Spain", - "Sweden", - "Switzerland", - "Terkey", - "Uruguay", - "USA" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -17859,46 +17732,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "Fortnite", - "owned": [ - "Fortnite", - "Argentina", - "Australia", - "Belgium", - "Brazil", - "Canada", - "Colombia", - "Denmark", - "Egypt", - "England", - "France", - "Germany", - "Iceland", - "Italy", - "Ireland", - "Japan", - "Korea", - "Mexico", - "Netherlands", - "NewZealand", - "Nigeria", - "Norway", - "Poland", - "Portugal", - "Russia", - "Saudi", - "Spain", - "Sweden", - "Switzerland", - "Terkey", - "Uruguay", - "USA" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -17910,46 +17744,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "Fortnite", - "owned": [ - "Fortnite", - "Argentina", - "Australia", - "Belgium", - "Brazil", - "Canada", - "Colombia", - "Denmark", - "Egypt", - "England", - "France", - "Germany", - "Iceland", - "Italy", - "Ireland", - "Japan", - "Korea", - "Mexico", - "Netherlands", - "NewZealand", - "Nigeria", - "Norway", - "Poland", - "Portugal", - "Russia", - "Saudi", - "Spain", - "Sweden", - "Switzerland", - "Terkey", - "Uruguay", - "USA" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -18742,51 +18537,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "000", - "owned": [ - "000", - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026", - "027", - "028", - "029", - "030", - "031", - "036", - "032", - "033", - "034", - "035" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -18798,51 +18549,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "000", - "owned": [ - "000", - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026", - "027", - "028", - "029", - "030", - "031", - "036", - "032", - "033", - "034", - "035" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -18854,51 +18561,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "000", - "owned": [ - "000", - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026", - "027", - "028", - "029", - "030", - "031", - "036", - "032", - "033", - "034", - "035" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -18910,51 +18573,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "000", - "owned": [ - "000", - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026", - "027", - "028", - "029", - "030", - "031", - "036", - "032", - "033", - "034", - "035" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -18966,51 +18585,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "000", - "owned": [ - "000", - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026", - "027", - "028", - "029", - "030", - "031", - "036", - "032", - "033", - "034", - "035" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -19022,51 +18597,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "000", - "owned": [ - "000", - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026", - "027", - "028", - "029", - "030", - "031", - "036", - "032", - "033", - "034", - "035" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -19459,51 +18990,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "000", - "owned": [ - "000", - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026", - "027", - "028", - "029", - "030", - "031", - "036", - "032", - "033", - "034", - "035" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -19515,51 +19002,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "000", - "owned": [ - "000", - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022", - "023", - "024", - "025", - "026", - "027", - "028", - "029", - "030", - "031", - "036", - "032", - "033", - "034", - "035" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -26095,7 +25538,16 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [], + "variants": [ + { + "channel": "Material", + "active": "Mat1", + "owned": [ + "Mat1", + "Mat2" + ] + } + ], "favorite": false }, "quantity": 1 @@ -26668,126 +26120,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "Particle", - "active": "Particle1", - "owned": [ - "Particle1", - "Particle2", - "Particle3", - "Particle4" - ] - }, - { - "channel": "Progressive", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage2", - "Stage3", - "Stage4", - "Stage5" - ] - }, - { - "channel": "ClothingColor", - "active": "003", - "owned": [ - "003", - "004", - "005" - ] - }, - { - "channel": "Parts", - "active": "Stage6", - "owned": [ - "Stage6", - "Stage7", - "Stage8", - "Stage9", - "Stage10", - "Stage11" - ] - }, - { - "channel": "Hair", - "active": "014", - "owned": [ - "014", - "015", - "016", - "017" - ] - }, - { - "channel": "Material", - "active": "Mat1", - "owned": [ - "Mat1", - "Mat2", - "Mat3", - "Mat4", - "Mat5", - "Mat6", - "Mat7", - "Mat8", - "Mat17", - "Mat18", - "Mat19", - "Mat20", - "Mat21", - "Mat22", - "Mat23", - "Mat24" - ] - }, - { - "channel": "JerseyColor", - "active": "Mat9", - "owned": [ - "Mat9", - "Mat10", - "Mat11", - "Mat12", - "Mat13", - "Mat14", - "Mat15", - "Mat16" - ] - }, - { - "channel": "Emissive", - "active": "Emissive1", - "owned": [ - "Emissive1", - "Emissive2", - "Emissive3", - "Emissive4", - "Emissive5" - ] - }, - { - "channel": "Pattern", - "active": "001", - "owned": [ - "001", - "002" - ] - }, - { - "channel": "Mesh", - "active": "009", - "owned": [ - "009", - "010", - "011", - "012", - "013" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -29578,76 +28911,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "Hair", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage2", - "Stage3", - "Stage4", - "Stage5" - ] - }, - { - "channel": "Emissive", - "active": "001", - "owned": [ - "001", - "002" - ] - }, - { - "channel": "Pattern", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007" - ] - }, - { - "channel": "Material", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "JerseyColor", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "Mesh", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage0" - ] - }, - { - "channel": "Particle", - "active": "001", - "owned": [ - "001", - "002" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -29659,76 +28923,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "Hair", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage2", - "Stage3", - "Stage4", - "Stage5" - ] - }, - { - "channel": "Emissive", - "active": "001", - "owned": [ - "001", - "003" - ] - }, - { - "channel": "Pattern", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007" - ] - }, - { - "channel": "Mesh", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage0" - ] - }, - { - "channel": "Material", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "JerseyColor", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "Particle", - "active": "001", - "owned": [ - "001", - "002" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -29740,76 +28935,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "Hair", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage2", - "Stage3", - "Stage4", - "Stage5" - ] - }, - { - "channel": "Emissive", - "active": "001", - "owned": [ - "001", - "003" - ] - }, - { - "channel": "Pattern", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007" - ] - }, - { - "channel": "Mesh", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage0" - ] - }, - { - "channel": "Material", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "JerseyColor", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "Particle", - "active": "001", - "owned": [ - "001", - "002" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -29821,76 +28947,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "Hair", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage2", - "Stage3", - "Stage4", - "Stage5" - ] - }, - { - "channel": "Emissive", - "active": "001", - "owned": [ - "001", - "003" - ] - }, - { - "channel": "Pattern", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007" - ] - }, - { - "channel": "Mesh", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage0" - ] - }, - { - "channel": "Material", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "JerseyColor", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "Particle", - "active": "001", - "owned": [ - "001", - "002" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -29902,76 +28959,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "Hair", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage2", - "Stage3", - "Stage4", - "Stage5" - ] - }, - { - "channel": "Emissive", - "active": "001", - "owned": [ - "001", - "003" - ] - }, - { - "channel": "Material", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "Pattern", - "active": "Color", - "owned": [ - "Color", - "002", - "003", - "004", - "005", - "006", - "007" - ] - }, - { - "channel": "Mesh", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage0" - ] - }, - { - "channel": "JerseyColor", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "Particle", - "active": "001", - "owned": [ - "001", - "002" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -29983,104 +28971,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "Hair", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage2", - "Stage3", - "Stage4", - "Stage5" - ] - }, - { - "channel": "JerseyColor", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "PetTemperament", - "active": "Mat1", - "owned": [ - "Mat1", - "Mat2", - "Mat3", - "Mat4", - "Mat5", - "Mat6", - "Mat7", - "Mat8", - "Mat9", - "Mat10", - "Mat11", - "Mat12", - "Mat13", - "Mat14", - "Mat15", - "Mat16", - "Mat17", - "Mat18", - "Mat19", - "Mat20", - "Mat21", - "Mat22" - ] - }, - { - "channel": "Material", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "Mesh", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage0" - ] - }, - { - "channel": "Pattern", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007" - ] - }, - { - "channel": "Emissive", - "active": "001", - "owned": [ - "001", - "003" - ] - }, - { - "channel": "Particle", - "active": "001", - "owned": [ - "001", - "002" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -30092,104 +28983,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "Hair", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage2", - "Stage3", - "Stage4", - "Stage5" - ] - }, - { - "channel": "JerseyColor", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "PetTemperament", - "active": "Mat1", - "owned": [ - "Mat1", - "Mat2", - "Mat3", - "Mat4", - "Mat5", - "Mat6", - "Mat7", - "Mat8", - "Mat9", - "Mat10", - "Mat11", - "Mat12", - "Mat13", - "Mat14", - "Mat15", - "Mat16", - "Mat17", - "Mat18", - "Mat19", - "Mat20", - "Mat21", - "Mat22" - ] - }, - { - "channel": "Material", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "Mesh", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage0" - ] - }, - { - "channel": "Pattern", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007" - ] - }, - { - "channel": "Particle", - "active": "001", - "owned": [ - "001", - "002" - ] - }, - { - "channel": "Emissive", - "active": "001", - "owned": [ - "001", - "003" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -30201,104 +28995,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "Hair", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage2", - "Stage3", - "Stage4", - "Stage5" - ] - }, - { - "channel": "PetTemperament", - "active": "Mat1", - "owned": [ - "Mat1", - "Mat2", - "Mat3", - "Mat4", - "Mat5", - "Mat6", - "Mat7", - "Mat8", - "Mat9", - "Mat10", - "Mat11", - "Mat12", - "Mat13", - "Mat14", - "Mat15", - "Mat16", - "Mat17", - "Mat18", - "Mat19", - "Mat20", - "Mat21", - "Mat22" - ] - }, - { - "channel": "Pattern", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007" - ] - }, - { - "channel": "Material", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "JerseyColor", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "Mesh", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage0" - ] - }, - { - "channel": "Emissive", - "active": "001", - "owned": [ - "001", - "003" - ] - }, - { - "channel": "Particle", - "active": "001", - "owned": [ - "001", - "002" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -30310,104 +29007,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "Hair", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage2", - "Stage3", - "Stage4", - "Stage5" - ] - }, - { - "channel": "JerseyColor", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "Pattern", - "active": "000", - "owned": [ - "000", - "002", - "003", - "004", - "005", - "006", - "007" - ] - }, - { - "channel": "Material", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "PetTemperament", - "active": "Mat1", - "owned": [ - "Mat1", - "Mat2", - "Mat3", - "Mat4", - "Mat5", - "Mat6", - "Mat7", - "Mat8", - "Mat9", - "Mat10", - "Mat11", - "Mat12", - "Mat13", - "Mat14", - "Mat15", - "Mat16", - "Mat17", - "Mat18", - "Mat19", - "Mat20", - "Mat21", - "Mat22" - ] - }, - { - "channel": "Mesh", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage0" - ] - }, - { - "channel": "Emissive", - "active": "001", - "owned": [ - "001", - "003" - ] - }, - { - "channel": "Particle", - "active": "001", - "owned": [ - "001", - "002" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -30419,104 +29019,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "Hair", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage2", - "Stage3", - "Stage4", - "Stage5" - ] - }, - { - "channel": "PetTemperament", - "active": "Mat1", - "owned": [ - "Mat1", - "Mat2", - "Mat3", - "Mat4", - "Mat5", - "Mat6", - "Mat7", - "Mat8", - "Mat9", - "Mat10", - "Mat11", - "Mat12", - "Mat13", - "Mat14", - "Mat15", - "Mat16", - "Mat17", - "Mat18", - "Mat19", - "Mat20", - "Mat21", - "Mat22" - ] - }, - { - "channel": "Pattern", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007" - ] - }, - { - "channel": "Material", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "JerseyColor", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat1", - "Mat2", - "Mat3" - ] - }, - { - "channel": "Mesh", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage0" - ] - }, - { - "channel": "Emissive", - "active": "001", - "owned": [ - "001", - "003" - ] - }, - { - "channel": "Particle", - "active": "001", - "owned": [ - "001", - "002" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -32883,80 +31386,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "Progressive", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage2" - ] - }, - { - "channel": "Material", - "active": "Mat1", - "owned": [ - "Mat1", - "Mat2" - ] - }, - { - "channel": "Particle", - "active": "Particle1", - "owned": [ - "Particle1", - "Particle2" - ] - }, - { - "channel": "Emissive", - "active": "Emissive1", - "owned": [ - "Emissive1", - "Emissive2" - ] - }, - { - "channel": "Parts", - "active": "Stage3", - "owned": [ - "Stage3", - "Stage4" - ] - }, - { - "channel": "JerseyColor", - "active": "Stage5", - "owned": [ - "Stage5", - "Stage6" - ] - }, - { - "channel": "Pattern", - "active": "Stage7", - "owned": [ - "Stage7", - "Stage8" - ] - }, - { - "channel": "Numeric", - "active": "Stage9", - "owned": [ - "Stage9", - "Stage10" - ] - }, - { - "channel": "ClothingColor", - "active": "Stage11", - "owned": [ - "Stage11", - "Stage12" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -36109,112 +34539,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "Progressive", - "active": "003", - "owned": [ - "003", - "005", - "002", - "004", - "006", - "000", - "001" - ] - }, - { - "channel": "Parts", - "active": "Stage4", - "owned": [ - "Stage4", - "Stage2", - "Stage7", - "Stage1", - "Stage3", - "Stage5", - "Stage6" - ] - }, - { - "channel": "Material", - "active": "Mat0", - "owned": [ - "Mat0", - "Mat4", - "Mat1", - "Mat5", - "Mat6", - "Mat2", - "Mat3" - ] - }, - { - "channel": "Pattern", - "active": "Mat6", - "owned": [ - "Mat6", - "Mat5", - "Mat2", - "Mat0", - "Mat4", - "Mat1", - "Mat3" - ] - }, - { - "channel": "Hair", - "active": "000", - "owned": [ - "000", - "001", - "002", - "003", - "004", - "005", - "006" - ] - }, - { - "channel": "Numeric", - "active": "000", - "owned": [ - "000", - "005", - "001", - "002", - "003", - "004", - "006" - ] - }, - { - "channel": "ClothingColor", - "active": "000", - "owned": [ - "000", - "003", - "002", - "005", - "004", - "006", - "001" - ] - }, - { - "channel": "JerseyColor", - "active": "000", - "owned": [ - "000", - "003", - "006", - "002", - "004", - "005", - "001" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -37517,67 +35842,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "Parts", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage2", - "Stage3", - "Stage4" - ] - }, - { - "channel": "Material", - "active": "Mat1", - "owned": [ - "Mat1", - "Mat2", - "Mat3", - "Mat4" - ] - }, - { - "channel": "ClothingColor", - "active": "Mat5", - "owned": [ - "Mat5", - "Mat7", - "Mat8", - "Mat9" - ] - }, - { - "channel": "JerseyColor", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010" - ] - }, - { - "channel": "Particle", - "active": "011", - "owned": [ - "011", - "012", - "013", - "014", - "015", - "017", - "016" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -38081,317 +36346,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "Material", - "active": "000", - "owned": [ - "000", - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "039", - "041", - "042", - "044", - "031", - "046", - "047", - "022", - "034", - "035", - "032", - "023", - "027", - "024", - "036", - "025", - "026", - "033", - "040", - "037", - "029" - ] - }, - { - "channel": "JerseyColor", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "000" - ] - }, - { - "channel": "PetTemperament", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "000" - ] - }, - { - "channel": "Hair", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "000" - ] - }, - { - "channel": "Pattern", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "000" - ] - }, - { - "channel": "ClothingColor", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "000" - ] - }, - { - "channel": "Emissive", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "000" - ] - }, - { - "channel": "Numeric", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "000" - ] - }, - { - "channel": "Particle", - "active": "Mat1", - "owned": [ - "Mat1", - "Mat2" - ] - }, - { - "channel": "Progressive", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "000" - ] - }, - { - "channel": "ProfileBanner", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "000" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -42436,12 +40391,20 @@ "xp": 0, "variants": [ { - "channel": "Parts", + "channel": "Progressive", "active": "Stage1", "owned": [ "Stage1", "Stage2" ] + }, + { + "channel": "Material", + "active": "Mat1", + "owned": [ + "Mat1", + "Mat2" + ] } ], "favorite": false @@ -42895,6 +40858,195 @@ }, "quantity": 1 }, + "AthenaCharacter:CID_A_422_Athena_Commando_M_Realm": { + "templateId": "AthenaCharacter:CID_A_422_Athena_Commando_M_Realm", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaCharacter:CID_A_423_Athena_Commando_M_Canary": { + "templateId": "AthenaCharacter:CID_A_423_Athena_Commando_M_Canary", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaCharacter:CID_A_424_Athena_Commando_M_Lancelot": { + "templateId": "AthenaCharacter:CID_A_424_Athena_Commando_M_Lancelot", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [ + { + "channel": "Material", + "active": "Mat1", + "owned": [ + "Mat1", + "Mat2" + ] + }, + { + "channel": "Progressive", + "active": "Stage1", + "owned": [ + "Stage1", + "Stage2", + "Stage3", + "Stage4" + ] + }, + { + "channel": "Particle", + "active": "Particle1", + "owned": [ + "Particle1", + "Particle2", + "Particle3" + ] + } + ], + "favorite": false + }, + "quantity": 1 + }, + "AthenaCharacter:CID_A_425_Athena_Commando_F_BlueJay": { + "templateId": "AthenaCharacter:CID_A_425_Athena_Commando_F_BlueJay", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [ + { + "channel": "Progressive", + "active": "Stage1", + "owned": [ + "Stage1", + "Stage2", + "Stage3" + ] + }, + { + "channel": "Material", + "active": "Mat1", + "owned": [ + "Mat1", + "Mat2", + "Mat3" + ] + } + ], + "favorite": false + }, + "quantity": 1 + }, + "AthenaCharacter:CID_A_427_Athena_Commando_F_Fuchsia": { + "templateId": "AthenaCharacter:CID_A_427_Athena_Commando_F_Fuchsia", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [ + { + "channel": "Progressive", + "active": "Stage1", + "owned": [ + "Stage1", + "Stage2" + ] + }, + { + "channel": "Material", + "active": "Mat1", + "owned": [ + "Mat1", + "Mat2" + ] + } + ], + "favorite": false + }, + "quantity": 1 + }, + "AthenaCharacter:CID_A_428_Athena_Commando_F_PinkWidow": { + "templateId": "AthenaCharacter:CID_A_428_Athena_Commando_F_PinkWidow", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [ + { + "channel": "Progressive", + "active": "Stage1", + "owned": [ + "Stage1", + "Stage2" + ] + }, + { + "channel": "Material", + "active": "Mat1", + "owned": [ + "Mat1", + "Mat2" + ] + } + ], + "favorite": false + }, + "quantity": 1 + }, + "AthenaCharacter:CID_A_429_Athena_Commando_M_Collectable": { + "templateId": "AthenaCharacter:CID_A_429_Athena_Commando_M_Collectable", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaCharacter:CID_A_430_Athena_Commando_M_SpectacleWeb": { + "templateId": "AthenaCharacter:CID_A_430_Athena_Commando_M_SpectacleWeb", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaCharacter:CID_A_431_Athena_Commando_M_JonesyOrange": { + "templateId": "AthenaCharacter:CID_A_431_Athena_Commando_M_JonesyOrange", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaCharacter:CID_Creative_Mannequin_M_Default": { "templateId": "AthenaCharacter:CID_Creative_Mannequin_M_Default", "attributes": { @@ -43384,18 +41536,6 @@ }, "quantity": 1 }, - "AthenaCharacter:CID_TBD_Athena_Commando_F_Meteorwomen_Alt": { - "templateId": "AthenaCharacter:CID_TBD_Athena_Commando_F_Meteorwomen_Alt", - "attributes": { - "max_level_bonus": 0, - "level": 1, - "item_seen": true, - "xp": 0, - "variants": [], - "favorite": false - }, - "quantity": 1 - }, "AthenaCharacter:CID_TBD_Athena_Commando_M_Banana_CINE": { "templateId": "AthenaCharacter:CID_TBD_Athena_Commando_M_Banana_CINE", "attributes": { @@ -43408,18 +41548,6 @@ }, "quantity": 1 }, - "AthenaCharacter:CID_TBD_Athena_Commando_M_JonesyOrange": { - "templateId": "AthenaCharacter:CID_TBD_Athena_Commando_M_JonesyOrange", - "attributes": { - "max_level_bonus": 0, - "level": 1, - "item_seen": true, - "xp": 0, - "variants": [], - "favorite": false - }, - "quantity": 1 - }, "AthenaCharacter:CID_TBD_Athena_Commando_M_Nutcracker_CINE": { "templateId": "AthenaCharacter:CID_TBD_Athena_Commando_M_Nutcracker_CINE", "attributes": { @@ -43756,6 +41884,18 @@ }, "quantity": 1 }, + "AthenaDance:EID_ArmadilloRobot": { + "templateId": "AthenaDance:EID_ArmadilloRobot", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaDance:EID_ArmUpDance": { "templateId": "AthenaDance:EID_ArmUpDance", "attributes": { @@ -44260,6 +42400,18 @@ }, "quantity": 1 }, + "AthenaDance:EID_BlueJay": { + "templateId": "AthenaDance:EID_BlueJay", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaDance:EID_BluePhoto_JSG4D": { "templateId": "AthenaDance:EID_BluePhoto_JSG4D", "attributes": { @@ -44680,6 +42832,18 @@ }, "quantity": 1 }, + "AthenaDance:EID_Canary": { + "templateId": "AthenaDance:EID_Canary", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaDance:EID_CandyDance": { "templateId": "AthenaDance:EID_CandyDance", "attributes": { @@ -45076,6 +43240,18 @@ }, "quantity": 1 }, + "AthenaDance:EID_Collectable": { + "templateId": "AthenaDance:EID_Collectable", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaDance:EID_Comrade_6O5AK": { "templateId": "AthenaDance:EID_Comrade_6O5AK", "attributes": { @@ -45328,6 +43504,150 @@ }, "quantity": 1 }, + "AthenaDance:EID_CT_CapturePose_04": { + "templateId": "AthenaDance:EID_CT_CapturePose_04", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:EID_CT_CapturePose_05": { + "templateId": "AthenaDance:EID_CT_CapturePose_05", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:EID_CT_CapturePose_06": { + "templateId": "AthenaDance:EID_CT_CapturePose_06", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:EID_CT_CapturePose_07": { + "templateId": "AthenaDance:EID_CT_CapturePose_07", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:EID_CT_CapturePose_08": { + "templateId": "AthenaDance:EID_CT_CapturePose_08", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:EID_CT_CapturePose_09": { + "templateId": "AthenaDance:EID_CT_CapturePose_09", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:EID_CT_CapturePose_10": { + "templateId": "AthenaDance:EID_CT_CapturePose_10", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:EID_CT_CapturePose_11": { + "templateId": "AthenaDance:EID_CT_CapturePose_11", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:EID_CT_CapturePose_12": { + "templateId": "AthenaDance:EID_CT_CapturePose_12", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:EID_CT_CapturePose_13": { + "templateId": "AthenaDance:EID_CT_CapturePose_13", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:EID_CT_CapturePose_14": { + "templateId": "AthenaDance:EID_CT_CapturePose_14", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:EID_CT_CapturePose_15": { + "templateId": "AthenaDance:EID_CT_CapturePose_15", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaDance:EID_Custodial": { "templateId": "AthenaDance:EID_Custodial", "attributes": { @@ -46168,6 +44488,18 @@ }, "quantity": 1 }, + "AthenaDance:EID_Fuchsia": { + "templateId": "AthenaDance:EID_Fuchsia", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaDance:EID_FutureSamurai": { "templateId": "AthenaDance:EID_FutureSamurai", "attributes": { @@ -46492,6 +44824,18 @@ }, "quantity": 1 }, + "AthenaDance:EID_GroovingSparkle": { + "templateId": "AthenaDance:EID_GroovingSparkle", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaDance:EID_GuitarWalk": { "templateId": "AthenaDance:EID_GuitarWalk", "attributes": { @@ -47968,6 +46312,18 @@ }, "quantity": 1 }, + "AthenaDance:EID_LimaBean": { + "templateId": "AthenaDance:EID_LimaBean", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaDance:EID_LineDance": { "templateId": "AthenaDance:EID_LineDance", "attributes": { @@ -48914,6 +47270,18 @@ }, "quantity": 1 }, + "AthenaDance:EID_PinkWidow": { + "templateId": "AthenaDance:EID_PinkWidow", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaDance:EID_PirateGold": { "templateId": "AthenaDance:EID_PirateGold", "attributes": { @@ -49238,6 +47606,18 @@ }, "quantity": 1 }, + "AthenaDance:EID_Realm": { + "templateId": "AthenaDance:EID_Realm", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaDance:EID_RedCard": { "templateId": "AthenaDance:EID_RedCard", "attributes": { @@ -49322,6 +47702,18 @@ }, "quantity": 1 }, + "AthenaDance:EID_Reverence": { + "templateId": "AthenaDance:EID_Reverence", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaDance:EID_RhymeLock_5B2Y3": { "templateId": "AthenaDance:EID_RhymeLock_5B2Y3", "attributes": { @@ -49658,6 +48050,18 @@ }, "quantity": 1 }, + "AthenaDance:EID_Sashimi": { + "templateId": "AthenaDance:EID_Sashimi", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaDance:EID_Saucer": { "templateId": "AthenaDance:EID_Saucer", "attributes": { @@ -50810,6 +49214,18 @@ }, "quantity": 1 }, + "AthenaDance:EID_Tally": { + "templateId": "AthenaDance:EID_Tally", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaDance:EID_TapShuffle": { "templateId": "AthenaDance:EID_TapShuffle", "attributes": { @@ -55730,6 +54146,18 @@ }, "quantity": 1 }, + "AthenaDance:Emoji_S21_BlueJay": { + "templateId": "AthenaDance:Emoji_S21_BlueJay", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaDance:Emoji_S21_CatDrop": { "templateId": "AthenaDance:Emoji_S21_CatDrop", "attributes": { @@ -55742,6 +54170,18 @@ }, "quantity": 1 }, + "AthenaDance:Emoji_S21_Collectable": { + "templateId": "AthenaDance:Emoji_S21_Collectable", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaDance:Emoji_S21_CritterDrop": { "templateId": "AthenaDance:Emoji_S21_CritterDrop", "attributes": { @@ -55754,6 +54194,66 @@ }, "quantity": 1 }, + "AthenaDance:Emoji_S21_DarkStorm": { + "templateId": "AthenaDance:Emoji_S21_DarkStorm", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:Emoji_S21_Fuchsia": { + "templateId": "AthenaDance:Emoji_S21_Fuchsia", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:Emoji_S21_Lancelot": { + "templateId": "AthenaDance:Emoji_S21_Lancelot", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:Emoji_S21_PinkWidow": { + "templateId": "AthenaDance:Emoji_S21_PinkWidow", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:Emoji_S21_Realm": { + "templateId": "AthenaDance:Emoji_S21_Realm", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaDance:Emoji_S6Lvl100": { "templateId": "AthenaDance:Emoji_S6Lvl100", "attributes": { @@ -56282,6 +54782,18 @@ }, "quantity": 1 }, + "AthenaBackpack:Gadget_RealityBloom": { + "templateId": "AthenaBackpack:Gadget_RealityBloom", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaBackpack:Gadget_SpiritVessel": { "templateId": "AthenaBackpack:Gadget_SpiritVessel", "attributes": { @@ -60556,36 +59068,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -61334,6 +59817,18 @@ }, "quantity": 1 }, + "AthenaGlider:Glider_ID_369_CollectableMale": { + "templateId": "AthenaGlider:Glider_ID_369_CollectableMale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaGlider:Glider_ID_369_RebirthSoldierFreshMale": { "templateId": "AthenaGlider:Glider_ID_369_RebirthSoldierFreshMale", "attributes": { @@ -61346,6 +59841,94 @@ }, "quantity": 1 }, + "AthenaGlider:Glider_ID_370_FuchsiaFemale": { + "templateId": "AthenaGlider:Glider_ID_370_FuchsiaFemale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [ + { + "channel": "Particle", + "active": "Particle1", + "owned": [ + "Particle1", + "Particle2" + ] + } + ], + "favorite": false + }, + "quantity": 1 + }, + "AthenaGlider:Glider_ID_371_LancelotMale": { + "templateId": "AthenaGlider:Glider_ID_371_LancelotMale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [ + { + "channel": "Particle", + "active": "Particle1", + "owned": [ + "Particle1", + "Particle2", + "Particle3" + ] + } + ], + "favorite": false + }, + "quantity": 1 + }, + "AthenaGlider:Glider_ID_373_PinkWidowFemale": { + "templateId": "AthenaGlider:Glider_ID_373_PinkWidowFemale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [ + { + "channel": "Particle", + "active": "Particle1", + "owned": [ + "Particle1", + "Particle2" + ] + } + ], + "favorite": false + }, + "quantity": 1 + }, + "AthenaGlider:Glider_ID_374_RealmMale": { + "templateId": "AthenaGlider:Glider_ID_374_RealmMale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaGlider:Glider_ID_375_DarkStormYellow": { + "templateId": "AthenaGlider:Glider_ID_375_DarkStormYellow", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaGlider:Glider_MiG": { "templateId": "AthenaGlider:Glider_MiG", "attributes": { @@ -66542,6 +65125,126 @@ }, "quantity": 1 }, + "AthenaLoadingScreen:LSID_442_Armadillo_Heartache": { + "templateId": "AthenaLoadingScreen:LSID_442_Armadillo_Heartache", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaLoadingScreen:LSID_443_C3S3_KeyArt": { + "templateId": "AthenaLoadingScreen:LSID_443_C3S3_KeyArt", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaLoadingScreen:LSID_444_BlueJay": { + "templateId": "AthenaLoadingScreen:LSID_444_BlueJay", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaLoadingScreen:LSID_445_Collectable": { + "templateId": "AthenaLoadingScreen:LSID_445_Collectable", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaLoadingScreen:LSID_446_Fuchsia": { + "templateId": "AthenaLoadingScreen:LSID_446_Fuchsia", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaLoadingScreen:LSID_447_Lancelot": { + "templateId": "AthenaLoadingScreen:LSID_447_Lancelot", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaLoadingScreen:LSID_449_PinkWidow": { + "templateId": "AthenaLoadingScreen:LSID_449_PinkWidow", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaLoadingScreen:LSID_450_Realm": { + "templateId": "AthenaLoadingScreen:LSID_450_Realm", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaLoadingScreen:LSID_452_RealityTree": { + "templateId": "AthenaLoadingScreen:LSID_452_RealityTree", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaLoadingScreen:LSID_455_Lofi": { + "templateId": "AthenaLoadingScreen:LSID_455_Lofi", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaLoadingScreen:LSID_DefaultBG": { "templateId": "AthenaLoadingScreen:LSID_DefaultBG", "attributes": { @@ -68186,6 +66889,42 @@ }, "quantity": 1 }, + "AthenaMusicPack:MusicPack_136_BlueJay": { + "templateId": "AthenaMusicPack:MusicPack_136_BlueJay", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaMusicPack:MusicPack_137_NightNight": { + "templateId": "AthenaMusicPack:MusicPack_137_NightNight", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaMusicPack:MusicPack_138_Collectable": { + "templateId": "AthenaMusicPack:MusicPack_138_Collectable", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaMusicPack:MusicPack_STW001_CannyValley": { "templateId": "AthenaMusicPack:MusicPack_STW001_CannyValley", "attributes": { @@ -77782,36 +76521,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "JerseyColor", - "active": "001", - "owned": [ - "001", - "002", - "003", - "004", - "005", - "006", - "007", - "008", - "009", - "010", - "011", - "012", - "013", - "014", - "015", - "016", - "017", - "018", - "019", - "020", - "021", - "022" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -79165,117 +77875,7 @@ "level": 1, "item_seen": true, "xp": 0, - "variants": [ - { - "channel": "Material", - "active": "Mat1", - "owned": [ - "Mat1", - "Mat2" - ] - }, - { - "channel": "Pattern", - "active": "Mat8", - "owned": [ - "Mat8", - "Mat1", - "Mat2", - "Mat3", - "Mat4", - "Mat5", - "Mat6", - "Mat7" - ] - }, - { - "channel": "Parts", - "active": "Stage1", - "owned": [ - "Stage1", - "Stage2" - ] - }, - { - "channel": "Numeric", - "active": "Stage10", - "owned": [ - "Stage10", - "Stage11", - "Stage2", - "Stage3", - "Stage4", - "Stage12", - "Stage13", - "Stage5", - "Stage8", - "Stage6", - "Stage15", - "Stage7", - "Stage14", - "Stage16", - "Stage9", - "Stage1" - ] - }, - { - "channel": "Mesh", - "active": "Stage2", - "owned": [ - "Stage2", - "Stage3", - "Stage10", - "Stage11", - "Stage12", - "Stage4", - "Stage5", - "Stage13", - "Stage16", - "Stage14", - "Stage7", - "Stage15", - "Stage6", - "Stage8", - "Stage1", - "Stage9" - ] - }, - { - "channel": "JerseyColor", - "active": "Stage3", - "owned": [ - "Stage3", - "Stage4", - "Stage5", - "Stage6", - "Stage7", - "Stage15", - "Stage14", - "Stage8", - "Stage9", - "Stage11", - "Stage10", - "Stage2", - "Stage13", - "Stage12", - "Stage1" - ] - }, - { - "channel": "Particle", - "active": "Stage2", - "owned": [ - "Stage2", - "Stage3", - "Stage4", - "Stage5", - "Stage7", - "Stage8", - "Stage6", - "Stage1" - ] - } - ], + "variants": [], "favorite": false }, "quantity": 1 @@ -79815,6 +78415,147 @@ }, "quantity": 1 }, + "AthenaPickaxe:Pickaxe_ID_811_ArmadilloMale": { + "templateId": "AthenaPickaxe:Pickaxe_ID_811_ArmadilloMale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaPickaxe:Pickaxe_ID_812_BlueJayFemale": { + "templateId": "AthenaPickaxe:Pickaxe_ID_812_BlueJayFemale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [ + { + "channel": "Particle", + "active": "Particle1", + "owned": [ + "Particle1", + "Particle2" + ] + } + ], + "favorite": false + }, + "quantity": 1 + }, + "AthenaPickaxe:Pickaxe_ID_813_CanaryMale": { + "templateId": "AthenaPickaxe:Pickaxe_ID_813_CanaryMale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaPickaxe:Pickaxe_ID_814_CollectableMale": { + "templateId": "AthenaPickaxe:Pickaxe_ID_814_CollectableMale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaPickaxe:Pickaxe_ID_815_FuchsiaFemale": { + "templateId": "AthenaPickaxe:Pickaxe_ID_815_FuchsiaFemale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [ + { + "channel": "Particle", + "active": "Particle1", + "owned": [ + "Particle1", + "Particle2" + ] + } + ], + "favorite": false + }, + "quantity": 1 + }, + "AthenaPickaxe:Pickaxe_ID_816_LancelotMale": { + "templateId": "AthenaPickaxe:Pickaxe_ID_816_LancelotMale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [ + { + "channel": "Mesh", + "active": "Stage1", + "owned": [ + "Stage1", + "Stage2" + ] + }, + { + "channel": "Particle", + "active": "Particle1", + "owned": [ + "Particle1", + "Particle2", + "Particle3" + ] + } + ], + "favorite": false + }, + "quantity": 1 + }, + "AthenaPickaxe:Pickaxe_ID_818_PinkWidowFemale": { + "templateId": "AthenaPickaxe:Pickaxe_ID_818_PinkWidowFemale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [ + { + "channel": "Particle", + "active": "Particle1", + "owned": [ + "Particle1", + "Particle2" + ] + } + ], + "favorite": false + }, + "quantity": 1 + }, + "AthenaPickaxe:Pickaxe_ID_819_RealmMale": { + "templateId": "AthenaPickaxe:Pickaxe_ID_819_RealmMale", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaPickaxe:Pickaxe_ID_STW001_Tier_1": { "templateId": "AthenaPickaxe:Pickaxe_ID_STW001_Tier_1", "attributes": { @@ -84603,6 +83344,18 @@ }, "quantity": 1 }, + "AthenaDance:SPID_405_SoundwaveSeriesGH": { + "templateId": "AthenaDance:SPID_405_SoundwaveSeriesGH", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaDance:SPID_406_Alfredo_Quest": { "templateId": "AthenaDance:SPID_406_Alfredo_Quest", "attributes": { @@ -84615,6 +83368,198 @@ }, "quantity": 1 }, + "AthenaDance:SPID_407_BlueJay": { + "templateId": "AthenaDance:SPID_407_BlueJay", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:SPID_408_Collectable": { + "templateId": "AthenaDance:SPID_408_Collectable", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:SPID_409_Fuchsia": { + "templateId": "AthenaDance:SPID_409_Fuchsia", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:SPID_410_Lancelot": { + "templateId": "AthenaDance:SPID_410_Lancelot", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:SPID_411_DarkStorm": { + "templateId": "AthenaDance:SPID_411_DarkStorm", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:SPID_412_PinkWidow": { + "templateId": "AthenaDance:SPID_412_PinkWidow", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:SPID_413_Realm": { + "templateId": "AthenaDance:SPID_413_Realm", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:SPID_414_Canary": { + "templateId": "AthenaDance:SPID_414_Canary", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:SPID_415_CollectableSmall": { + "templateId": "AthenaDance:SPID_415_CollectableSmall", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:SPID_416_BlueJayX": { + "templateId": "AthenaDance:SPID_416_BlueJayX", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:SPID_419_PeaceSignQuest": { + "templateId": "AthenaDance:SPID_419_PeaceSignQuest", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:SPID_420_ALT_Chaos": { + "templateId": "AthenaDance:SPID_420_ALT_Chaos", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:SPID_421_ALT_Barium": { + "templateId": "AthenaDance:SPID_421_ALT_Barium", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:SPID_423_Lancelot_NeonSword": { + "templateId": "AthenaDance:SPID_423_Lancelot_NeonSword", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:SPID_424_Lancelot_Profile": { + "templateId": "AthenaDance:SPID_424_Lancelot_Profile", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaDance:SPID_425_Fuchsia_Duotone": { + "templateId": "AthenaDance:SPID_425_Fuchsia_Duotone", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaPickaxe:SpikyPickaxe": { "templateId": "AthenaPickaxe:SpikyPickaxe", "attributes": { @@ -86301,6 +85246,76 @@ }, "quantity": 1 }, + "AthenaSkyDiveContrail:Trails_ID_144_PinkWidow": { + "templateId": "AthenaSkyDiveContrail:Trails_ID_144_PinkWidow", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaSkyDiveContrail:Trails_ID_145_Fuchisa": { + "templateId": "AthenaSkyDiveContrail:Trails_ID_145_Fuchisa", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaSkyDiveContrail:Trails_ID_146_Realm": { + "templateId": "AthenaSkyDiveContrail:Trails_ID_146_Realm", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaSkyDiveContrail:Trails_ID_147_Lancelot": { + "templateId": "AthenaSkyDiveContrail:Trails_ID_147_Lancelot", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [ + { + "channel": "Particle", + "active": "Particle1", + "owned": [ + "Particle1", + "Particle2", + "Particle3" + ] + } + ], + "favorite": false + }, + "quantity": 1 + }, + "AthenaSkyDiveContrail:Trails_ID_148_80sRibbon": { + "templateId": "AthenaSkyDiveContrail:Trails_ID_148_80sRibbon", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaSkyDiveContrail:Trails_ID_31_GreenFlame": { "templateId": "AthenaSkyDiveContrail:Trails_ID_31_GreenFlame", "attributes": { @@ -86637,6 +85652,18 @@ }, "quantity": 1 }, + "AthenaGlider:Umbrella_Season_21": { + "templateId": "AthenaGlider:Umbrella_Season_21", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaGlider:Umbrella_Silver": { "templateId": "AthenaGlider:Umbrella_Silver", "attributes": { @@ -92217,6 +91244,78 @@ }, "quantity": 1 }, + "AthenaItemWrap:Wrap_481_Realm": { + "templateId": "AthenaItemWrap:Wrap_481_Realm", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaItemWrap:Wrap_482_Canary": { + "templateId": "AthenaItemWrap:Wrap_482_Canary", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaItemWrap:Wrap_483_Lancelot": { + "templateId": "AthenaItemWrap:Wrap_483_Lancelot", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaItemWrap:Wrap_484_BlueJay": { + "templateId": "AthenaItemWrap:Wrap_484_BlueJay", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaItemWrap:Wrap_486_Fuchsia": { + "templateId": "AthenaItemWrap:Wrap_486_Fuchsia", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaItemWrap:Wrap_487_PinkWidow": { + "templateId": "AthenaItemWrap:Wrap_487_PinkWidow", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaItemWrap:Wrap_488_Comp20B": { "templateId": "AthenaItemWrap:Wrap_488_Comp20B", "attributes": { @@ -92277,6 +91376,30 @@ }, "quantity": 1 }, + "AthenaItemWrap:Wrap_493_PinkDaisies": { + "templateId": "AthenaItemWrap:Wrap_493_PinkDaisies", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, + "AthenaItemWrap:Wrap_494_RockVein": { + "templateId": "AthenaItemWrap:Wrap_494_RockVein", + "attributes": { + "max_level_bonus": 0, + "level": 1, + "item_seen": true, + "xp": 0, + "variants": [], + "favorite": false + }, + "quantity": 1 + }, "AthenaItemWrap:Wrap_CatBurglarGameplay": { "templateId": "AthenaItemWrap:Wrap_CatBurglarGameplay", "attributes": { diff --git a/structure/cloudstorage.js b/structure/cloudstorage.js index 18d1796..c8766f5 100644 --- a/structure/cloudstorage.js +++ b/structure/cloudstorage.js @@ -4,11 +4,10 @@ const crypto = require("crypto"); const fs = require("fs"); const path = require("path"); const functions = require("./functions.js"); -const memory = require("./../memory.json"); express.use((req, res, next) => { // Get raw body in encoding latin1 for ClientSettings - if (req.originalUrl.includes('/fortnite/api/cloudstorage/user/') && req.method == "PUT") { + if (req.originalUrl.toLowerCase().startsWith("/fortnite/api/cloudstorage/user/") && req.method == "PUT") { req.rawBody = ""; req.setEncoding("latin1"); @@ -19,7 +18,7 @@ express.use((req, res, next) => { }) express.get("/fortnite/api/cloudstorage/system", async (req, res) => { - functions.GetVersionInfo(req, memory); + const memory = functions.GetVersionInfo(req); if (memory.build >= 9.40 && memory.build <= 10.40) { return res.status(404).end(); @@ -65,9 +64,11 @@ express.get("/fortnite/api/cloudstorage/system/:file", async (req, res) => { }) express.get("/fortnite/api/cloudstorage/user/*/:file", async (req, res) => { - if (!fs.existsSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings"))) { - fs.mkdirSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings")); - } + try { + if (!fs.existsSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings"))) { + fs.mkdirSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings")); + } + } catch (err) {} res.set("Content-Type", "application/octet-stream") @@ -77,10 +78,13 @@ express.get("/fortnite/api/cloudstorage/user/*/:file", async (req, res) => { }); } - functions.GetVersionInfo(req, memory); + const memory = functions.GetVersionInfo(req); var currentBuildID = memory.CL; - const file = path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings", `ClientSettings-${currentBuildID}.Sav`); + + let file; + if (process.env.LOCALAPPDATA) file = path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings", `ClientSettings-${currentBuildID}.Sav`); + else file = path.join(__dirname, "..", "ClientSettings", `ClientSettings-${currentBuildID}.Sav`); if (fs.existsSync(file)) { const ParsedFile = fs.readFileSync(file); @@ -93,16 +97,21 @@ express.get("/fortnite/api/cloudstorage/user/*/:file", async (req, res) => { }) express.get("/fortnite/api/cloudstorage/user/:accountId", async (req, res) => { - if (!fs.existsSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings"))) { - fs.mkdirSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings")); - } + try { + if (!fs.existsSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings"))) { + fs.mkdirSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings")); + } + } catch (err) {} res.set("Content-Type", "application/json") - functions.GetVersionInfo(req, memory); + const memory = functions.GetVersionInfo(req); var currentBuildID = memory.CL; - const file = path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings", `ClientSettings-${currentBuildID}.Sav`); + + let file; + if (process.env.LOCALAPPDATA) file = path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings", `ClientSettings-${currentBuildID}.Sav`); + else file = path.join(__dirname, "..", "ClientSettings", `ClientSettings-${currentBuildID}.Sav`); if (fs.existsSync(file)) { const ParsedFile = fs.readFileSync(file, 'latin1'); @@ -126,15 +135,26 @@ express.get("/fortnite/api/cloudstorage/user/:accountId", async (req, res) => { } }) -express.put("/fortnite/api/cloudstorage/user/*/*", async (req, res) => { - if (!fs.existsSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings"))) { - fs.mkdirSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings")); +express.put("/fortnite/api/cloudstorage/user/*/:file", async (req, res) => { + try { + if (!fs.existsSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings"))) { + fs.mkdirSync(path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings")); + } + } catch (err) {} + + if (req.params.file.toLowerCase() != "clientsettings.sav") { + return res.status(404).json({ + "error": "file not found" + }); } - functions.GetVersionInfo(req, memory); + const memory = functions.GetVersionInfo(req); var currentBuildID = memory.CL; - const file = path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings", `ClientSettings-${currentBuildID}.Sav`); + + let file; + if (process.env.LOCALAPPDATA) file = path.join(process.env.LOCALAPPDATA, "LawinServer", "ClientSettings", `ClientSettings-${currentBuildID}.Sav`); + else file = path.join(__dirname, "..", "ClientSettings", `ClientSettings-${currentBuildID}.Sav`); fs.writeFileSync(file, req.rawBody, 'latin1'); res.status(204).end(); diff --git a/structure/friends.js b/structure/friends.js index 8eb2c0b..e1bc795 100644 --- a/structure/friends.js +++ b/structure/friends.js @@ -4,7 +4,6 @@ const fs = require("fs"); const friendslist = require("./../responses/friendslist.json"); const friendslist2 = require("./../responses/friendslist2.json"); const functions = require("./functions.js"); -const memory = require("./../memory.json"); express.get("/friends/api/v1/*/settings", async (req, res) => { res.json({}) @@ -15,7 +14,7 @@ express.get("/friends/api/v1/*/blocklist", async (req, res) => { }) express.get("/friends/api/public/friends/:accountId", async (req, res) => { - functions.GetVersionInfo(req, memory); + const memory = functions.GetVersionInfo(req); if (!friendslist.find(i => i.accountId == req.params.accountId)) { var FriendObject = { diff --git a/structure/functions.js b/structure/functions.js index 2b3d9e6..a05084c 100644 --- a/structure/functions.js +++ b/structure/functions.js @@ -1,33 +1,37 @@ -const memory = require("./../memory.json"); const XMLBuilder = require("xmlbuilder"); const uuid = require("uuid"); -function GetVersionInfo(req, memory) { +function GetVersionInfo(req) { + var memory = { + season: 0, + build: 0.0, + CL: "", + lobby: "" + } + if (req.headers["user-agent"]) { var CL = ""; - if (req.headers["user-agent"]) { - try { - var BuildID = req.headers["user-agent"].split("-")[3].split(",")[0] + try { + var BuildID = req.headers["user-agent"].split("-")[3].split(",")[0] + if (!Number.isNaN(Number(BuildID))) { + CL = BuildID; + } + + if (Number.isNaN(Number(BuildID))) { + var BuildID = req.headers["user-agent"].split("-")[3].split(" ")[0] if (!Number.isNaN(Number(BuildID))) { CL = BuildID; } - - if (Number.isNaN(Number(BuildID))) { - var BuildID = req.headers["user-agent"].split("-")[3].split(" ")[0] - if (!Number.isNaN(Number(BuildID))) { - CL = BuildID; - } - } - } catch (err) { - try { - var BuildID = req.headers["user-agent"].split("-")[1].split("+")[0] - if (!Number.isNaN(Number(BuildID))) { - CL = BuildID; - } - } catch (err) {} } + } catch (err) { + try { + var BuildID = req.headers["user-agent"].split("-")[1].split("+")[0] + if (!Number.isNaN(Number(BuildID))) { + CL = BuildID; + } + } catch (err) {} } try { @@ -53,6 +57,8 @@ function GetVersionInfo(req, memory) { memory.lobby = "LobbyWinterDecor"; } } + + return memory; } function getItemShop() { @@ -131,7 +137,7 @@ function getItemShop() { } function getTheater(req) { - GetVersionInfo(req, memory); + const memory = GetVersionInfo(req); var theater = JSON.stringify(require("./../responses/worldstw.json")); var Season = "Season" + memory.season; @@ -178,7 +184,7 @@ function getTheater(req) { } function getContentPages(req) { - GetVersionInfo(req, memory); + const memory = GetVersionInfo(req); const contentpages = JSON.parse(JSON.stringify(require("./../responses/contentpages.json"))); diff --git a/structure/matchmaking.js b/structure/matchmaking.js index 93beaac..f5c9c76 100644 --- a/structure/matchmaking.js +++ b/structure/matchmaking.js @@ -5,7 +5,6 @@ const path = require("path"); const iniparser = require("ini"); const config = iniparser.parse(fs.readFileSync(path.join(__dirname, "..", "Config", "config.ini")).toString()); const functions = require("./functions.js"); -const memory = require("./../memory.json"); express.get("/fortnite/api/matchmaking/session/findPlayer/*", async (req, res) => { res.status(200); @@ -13,9 +12,7 @@ express.get("/fortnite/api/matchmaking/session/findPlayer/*", async (req, res) = }) express.get("/fortnite/api/game/v2/matchmakingservice/ticket/player/*", async (req, res) => { - memory.currentbuildUniqueId = req.query.bucketId.split(":")[0]; - - fs.writeFileSync("./memory.json", JSON.stringify(memory, null, 2)); + res.cookie("currentbuildUniqueId", req.query.bucketId.split(":")[0]); res.json({ "serviceUrl": "ws://lawinservermatchmaker.herokuapp.com", @@ -72,7 +69,7 @@ express.get("/fortnite/api/matchmaking/session/:session_id", async (req, res) => "usesPresence": false, "allowJoinViaPresence": true, "allowJoinViaPresenceFriendsOnly": false, - "buildUniqueId": memory.currentbuildUniqueId, // buildUniqueId is different for every build, this uses the netver of the version you're currently using + "buildUniqueId": req.cookies.currentbuildUniqueId || "0", // buildUniqueId is different for every build, this uses the netver of the version you're currently using "lastUpdated": new Date().toISOString(), "started": false }) diff --git a/structure/mcp.js b/structure/mcp.js index 136c576..c9f8157 100644 --- a/structure/mcp.js +++ b/structure/mcp.js @@ -6,10 +6,9 @@ const iniparser = require("ini"); const config = iniparser.parse(fs.readFileSync(path.join(__dirname, "..", "Config", "config.ini")).toString()); const functions = require("./functions.js"); const catalog = functions.getItemShop(); -const memory = require("./../memory.json"); -express.use(function (req, res, next) { - if (!req.query.profileId) { +express.use((req, res, next) => { + if (!req.query.profileId && req.originalUrl.toLowerCase().startsWith("/fortnite/api/game/v2/profile/")) { return res.status(404).json({ error: "Profile not defined." }); @@ -17,7 +16,8 @@ express.use(function (req, res, next) { fs.readdirSync("./profiles").forEach((file) => { if (file.endsWith(".json")) { - functions.GetVersionInfo(req, memory); + const memory = functions.GetVersionInfo(req); + const profile = require(`./../profiles/${file}`); if (!profile.rvn) profile.rvn = 0; if (!profile.items) profile.items = {} @@ -61,6 +61,7 @@ express.post("/fortnite/api/game/v2/profile/*/client/SetAffiliateName", async (r if (req.body.affiliateName.toLowerCase() == code.toLowerCase() || req.body.affiliateName == "") { profile.stats.attributes.mtx_affiliate_set_time = new Date().toISOString(); profile.stats.attributes.mtx_affiliate = req.body.affiliateName; + StatChanged = true; } }) @@ -312,7 +313,7 @@ express.post("/fortnite/api/game/v2/profile/*/client/UnlockRewardNode", async (r const profile = require(`./../profiles/${req.query.profileId || "athena"}.json`); const common_core = require("./../profiles/common_core.json"); const WinterFestIDS = require("./../responses/winterfestrewards.json"); - functions.GetVersionInfo(req, memory); + const memory = functions.GetVersionInfo(req); // do not change any of these or you will end up breaking it var ApplyProfileChanges = []; @@ -865,7 +866,7 @@ express.post("/fortnite/api/game/v2/profile/*/client/MarkNewQuestNotificationSen express.post("/fortnite/api/game/v2/profile/*/client/ClientQuestLogin", async (req, res) => { const profile = require(`./../profiles/${req.query.profileId || "athena"}.json`); var QuestIDS = JSON.parse(JSON.stringify(require("./../responses/quests.json"))); - functions.GetVersionInfo(req, memory); + const memory = functions.GetVersionInfo(req); // do not change any of these or you will end up breaking it var ApplyProfileChanges = []; @@ -1387,7 +1388,7 @@ express.post("/fortnite/api/game/v2/profile/*/client/IncrementNamedCounterStat", express.post("/fortnite/api/game/v2/profile/*/client/ClaimLoginReward", async (req, res) => { const profile = require(`./../profiles/${req.query.profileId || "campaign"}.json`); const DailyRewards = require("./../responses/dailyrewards.json"); - functions.GetVersionInfo(req, memory); + const memory = functions.GetVersionInfo(req); // do not change any of these or you will end up breaking it var ApplyProfileChanges = []; @@ -2461,7 +2462,7 @@ express.post("/fortnite/api/game/v2/profile/*/client/TransmogItem", async (req, // Craft item STW (Guns, melees and traps only) express.post("/fortnite/api/game/v2/profile/*/client/CraftWorldItem", async (req, res) => { - functions.GetVersionInfo(req, memory); + const memory = functions.GetVersionInfo(req); const profile = require(`./../profiles/${req.query.profileId || "theater0"}.json`); var schematic_profile; @@ -3512,7 +3513,7 @@ express.post("/fortnite/api/game/v2/profile/*/client/ClearHeroLoadout", async (r // Recycle items STW express.post("/fortnite/api/game/v2/profile/*/client/RecycleItemBatch", async (req, res) => { - functions.GetVersionInfo(req, memory); + const memory = functions.GetVersionInfo(req); const profile = require(`./../profiles/${req.query.profileId || "campaign"}.json`); @@ -5381,7 +5382,7 @@ express.post("/fortnite/api/game/v2/profile/*/client/PurchaseCatalogEntry", asyn if (value.offerId == req.body.offerId) { var Quantity = 0; catalog.storefronts[a].catalogEntries[b].itemGrants.forEach(function(value, c) { - functions.GetVersionInfo(req, memory); + const memory = functions.GetVersionInfo(req); if (4 >= memory.season && PurchasedLlama == false) { if (MultiUpdate.length == 0) { diff --git a/structure/timeline.js b/structure/timeline.js index 479a349..2b5b969 100644 --- a/structure/timeline.js +++ b/structure/timeline.js @@ -1,10 +1,9 @@ const Express = require("express"); const express = Express.Router(); const functions = require("./functions.js"); -const memory = require("./../memory.json"); express.get("/fortnite/api/calendar/v1/timeline", async (req, res) => { - functions.GetVersionInfo(req, memory); + const memory = functions.GetVersionInfo(req); var activeEvents = [ { diff --git a/structure/xmpp.js b/structure/xmpp.js index 4608497..ca71540 100644 --- a/structure/xmpp.js +++ b/structure/xmpp.js @@ -5,7 +5,12 @@ const XMLParser = require("xml-parser"); const functions = require("./../structure/functions.js"); const port = 80; -const wss = new WebSocket({ port: port }, console.log("XMPP started listening on port", port)); + +const wss = new WebSocket({ port: port }, () => console.log("XMPP started listening on port", port)); +wss.on("error", (err) => { + if (err.code == "EADDRINUSE") console.log("XMPP \x1b[31mFAILED\x1b[0m to start hosting on port", port); + else throw err; +}) global.Clients = []; @@ -62,8 +67,10 @@ wss.on('connection', async (ws) => { if (decodedBase64 && accountId && decodedBase64.length == 3) { Authenticated = true; + console.log(`An xmpp client with the account id ${accountId} has logged in.`); - Success(ws); + + ws.send(XMLBuilder.create("success").attribute("xmlns", "urn:ietf:params:xml:ns:xmpp-sasl").toString()); } else { return Error(ws); } @@ -207,10 +214,6 @@ function Error(ws) { ws.close(); } -function Success(ws) { - ws.send(XMLBuilder.create("success").attribute("xmlns", "urn:ietf:params:xml:ns:xmpp-sasl").toString()); -} - function updatePresenceForAll(ws, body, away, offline) { if (global.Clients.find(i => i.client == ws)) { var SenderData = global.Clients.find(i => i.client == ws);