Fixed too much stuff

Co-Authored-By: Lawin <[email protected]>
Co-Authored-By: PRO100KatYT <[email protected]>
This commit is contained in:
Burlone
2024-11-28 21:01:46 +01:00
co-authored by Lawin PRO100KatYT
parent a2490e7952
commit 7084034270
25 changed files with 9317 additions and 4 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+302
View File
@@ -1179,6 +1179,14 @@
"lastModified": "2019-10-29T14:05:17.030Z",
"_locale": "en-US"
},
"sparkTracks": {
"_title": "spark-tracks",
"_noIndex": false,
"_activeDate": "2023-10-06T04:15:09.015Z",
"lastModified": "2023-10-06T04:15:55.135Z",
"_locale": "en-US",
"_templateName": "blank"
},
"tournamentinformation": {
"tournament_info": {
"tournaments": [
@@ -5810,6 +5818,300 @@
"lastModified": "2019-06-20T22:06:24.590Z",
"_locale": "en-US"
},
"radioStations": {
"_title": "Radio Stations",
"radioStationList": {
"_type": "RadioStationList",
"stations": [
{
"resourceID": "eaIPyhOJafbnZUIYnZ",
"gameplayTagDenylist": [
"*UGC*",
"*Creative*"
],
"stationImage": "https://cdn2.unrealengine.com/s15-radio-rl-rockroyale-256x256-256x256-c2b19d746f09.png",
"_type": "RadioStationItem",
"title": "Rock & Royale"
},
{
"resourceID": "AxraiOXbAdcOPnthxV",
"gameplayTagDenylist": [
"*UGC*",
"*Creative*"
],
"stationImage": "https://cdn2.unrealengine.com/s13-radio-underground-radio-256x256-256x256-12ec3d7367c5.png",
"_type": "RadioStationItem",
"title": "Radio Underground"
},
{
"resourceID": "QWGQAynCdixzoLIdJl",
"stationImage": "https://cdn2.unrealengine.com/s13-radio-party-royale-256x256-256x256-41b6d427e012.png",
"_type": "RadioStationItem",
"title": "Party Royale"
},
{
"resourceID": "liZWCXyJDbxNMHWlyk",
"gameplayTagDenylist": [
"*UGC*",
"*Creative*"
],
"stationImage": "https://cdn2.unrealengine.com/s13-radio-radio-yonder-256x256-256x256-f9a05292b87c.png",
"_type": "RadioStationItem",
"title": "Radio Yonder"
},
{
"resourceID": "SesARghrQNsflAozoD",
"gameplayTagDenylist": [
"*UGC*",
"*Creative*"
],
"stationImage": "https://cdn2.unrealengine.com/s13-radio-beat-box-256x256-256x256-19277d48c502.png",
"_type": "RadioStationItem",
"title": "Beat Box"
},
{
"resourceID": "dWkLynOluUUuCAPJHA",
"gameplayTagDenylist": [
"*UGC*",
"*Creative*"
],
"stationImage": "https://cdn2.unrealengine.com/s13-radio-power-play-256x256-256x256-2f3bacc8ecbf.png",
"_type": "RadioStationItem",
"title": "Power Play"
}
]
}
},
"scoringrulesinformation": {
"scoring_rules_info": {
"_type": "Scoring Rules Info",
"scoring_rules": [
{
"poster_description": "Loot Island Captured",
"rule_name": "MMO_LootIsland",
"_type": "Scoring Rules Display Info",
"icon": "/Game/UI/Foundation/Textures/Icons/Quest/T-Icon-Trophy-32.T-Icon-Trophy-32",
"description": "Loot Island Captured",
"hide_score_toast_notifications": false,
"poster_interval_description": "Loot Island Captured"
},
{
"poster_description": "{0}|plural(one=Each Forcast Tower Captured,other=Every {0} Forcast Tower Captures)",
"rule_name": "EACH_MMO_RadioTower",
"_type": "Scoring Rules Display Info",
"icon": "/Game/UI/Foundation/Textures/Icons/Quest/T-Icon-Trophy-32.T-Icon-Trophy-32",
"description": "{0}|plural(one=Each Forcast Tower Captured,other=Every {0} Forcast Tower Captures)",
"hide_score_toast_notifications": false,
"poster_interval_description": "{0} - {1} Forcast Towers Captured"
},
{
"poster_description": "{0}|plural(one=Each Vault Captured,other=Every {0} Vault Captures)",
"rule_name": "EACH_MMO_Vault",
"_type": "Scoring Rules Display Info",
"icon": "/Game/UI/Foundation/Textures/Icons/Quest/T-Icon-Trophy-32.T-Icon-Trophy-32",
"description": "{0}|plural(one=Each Vault Captured,other=Every {0} Vault Captures)",
"hide_score_toast_notifications": false,
"poster_interval_description": "{0} - {1} Vault Captured"
},
{
"poster_description": "{0}|plural(one=Each Cache Captured, other=Every {0} Cache Captures)",
"rule_name": "EACH_MMO_Cache",
"_type": "Scoring Rules Display Info",
"icon": "/Game/UI/Foundation/Textures/Icons/Quest/T-Icon-Trophy-32.T-Icon-Trophy-32",
"description": "{0}|plural(one=Each Cache Captured, other=Every {0} Cache Captures)",
"hide_score_toast_notifications": false,
"poster_interval_description": "{0} - {1} Cache Captured"
},
{
"poster_description": "Victory Royale",
"rule_name": "VICTORY_ROYALE_STAT",
"_type": "Scoring Rules Display Info",
"icon": "/Game/UI/Foundation/Textures/Icons/Quest/T-Icon-Trophy-32.T-Icon-Trophy-32",
"description": "Victory Royale",
"hide_score_toast_notifications": false,
"poster_interval_description": "Victory Royale"
},
{
"poster_description": "{0} {0}|plural(one=Elimination,other=Eliminations)",
"rule_name": "Eliminations",
"_type": "Scoring Rules Display Info",
"icon": "/Game/Athena/HUD/Art/killsico_alt.KillsIco_Alt",
"description": "{0} {0}|plural(one=Elimination,other=Eliminations)",
"hide_score_toast_notifications": false,
"poster_interval_description": "{0} - {1} Eliminations"
},
{
"poster_description": "{0} {0}|plural(one=Elimination,other=Eliminations)",
"rule_name": "TEAM_ELIMS_STAT_INDEX",
"_type": "Scoring Rules Display Info",
"icon": "/Game/Athena/HUD/Art/killsico_alt.KillsIco_Alt",
"description": "{0} {0}|plural(one=Elimination,other=Eliminations)",
"hide_score_toast_notifications": false,
"poster_interval_description": "{0} - {1} Eliminations"
},
{
"poster_description": "{0}{0}|ordinal(one=st,two=nd,few=rd,other=th) Place",
"rule_name": "Placement",
"_type": "Scoring Rules Display Info",
"icon": "/Game/UI/Foundation/Textures/Icons/Quest/T-Icon-Trophy-32.T-Icon-Trophy-32",
"description": "Reach Top {0}",
"hide_score_toast_notifications": false,
"poster_interval_description": "{0}{0}|ordinal(one=st,two=nd,few=rd,other=th) - {1}{1}|ordinal(one=st,two=nd,few=rd,other=th) Place"
},
{
"poster_description": "{0}|plural(one=Each Elimination,other=Every {0} Eliminations)",
"rule_name": "EachElimination",
"_type": "Scoring Rules Display Info",
"icon": "/Game/Athena/HUD/Art/killsico_alt.KillsIco_Alt",
"description": "{0}|plural(one=Each Elimination,other=Every {0} Eliminations)",
"hide_score_toast_notifications": false,
"poster_interval_description": ""
},
{
"poster_description": "{0}|plural(one=Each Elimination,other=Every {0} Eliminations)",
"rule_name": "EACH_CREATIVE_ELIMINATIONS_STAT",
"_type": "Scoring Rules Display Info",
"icon": "/Game/Athena/HUD/Art/killsico_alt.KillsIco_Alt",
"description": "{0}|plural(one=Each Elimination,other=Every {0} Eliminations)",
"hide_score_toast_notifications": false,
"poster_interval_description": "{0} - {1} Eliminations"
},
{
"poster_description": "Bus Fare",
"rule_name": "MatchEntryFee",
"_type": "Scoring Rules Display Info",
"icon": "/Game/UI/Events/Icons/T-Icon-Bus-Fare-Flat.T-Icon-Bus-Fare-Flat",
"description": "Bus Fare",
"hide_score_toast_notifications": false
},
{
"poster_description": "{0} {0}|plural(one=Bow Elimination,other=Bow Eliminations)",
"rule_name": "BowKills",
"_type": "Scoring Rules Display Info",
"icon": "/Game/Athena/HUD/Art/killsico_alt.KillsIco_Alt",
"description": "{0} {0}|plural(one=Bow Elimination,other=Bow Eliminations)",
"hide_score_toast_notifications": false,
"poster_interval_description": "{0} - {1} Bow Eliminations"
},
{
"poster_description": "Each score of {0}",
"rule_name": "EACH_CREATIVE_SCORE_STAT",
"_type": "Scoring Rules Display Info",
"icon": "/Game/UI/Foundation/Textures/Icons/Quest/T-Icon-Trophy-32.T-Icon-Trophy-32",
"description": "Each score of {0}",
"hide_score_toast_notifications": true,
"poster_interval_description": ""
},
{
"poster_description": "Score of {0}",
"rule_name": "Scores",
"_type": "Scoring Rules Display Info",
"icon": "/Game/UI/Foundation/Textures/Icons/Quest/T-Icon-Trophy-32.T-Icon-Trophy-32",
"description": "Score of {0}",
"hide_score_toast_notifications": false,
"poster_interval_description": "Score of {0} - {1}"
},
{
"poster_description": "{0} {0}|plural(one=Time Eliminated,other=Times Eliminated)",
"rule_name": "EACH_CREATIVE_ELIMINATED_STAT",
"_type": "Scoring Rules Display Info",
"icon": "/Game/Athena/HUD/Art/killsico_alt.KillsIco_Alt",
"description": "{0} {0}|plural(one=Time Eliminated,other=Times Eliminated)",
"hide_score_toast_notifications": false,
"poster_interval_description": "{0} - {1} Times Eliminated"
},
{
"poster_description": "{0}|plural(one=Each Damage Dealt,other=Every {0} Damage Dealt)",
"rule_name": "CREATIVE_DAMAGE_DEALT_STAT",
"_type": "Scoring Rules Display Info",
"icon": "/Game/Athena/HUD/Art/icon_health.icon_health",
"description": "{0}|plural(one=Each Damage Dealt,other=Every {0} Damage Dealt)",
"hide_score_toast_notifications": true
},
{
"poster_description": "{0}|plural(one=Each Damage Taken,other=Every {0} Damage Taken)",
"rule_name": "CREATIVE_DAMAGE_TAKEN_STAT",
"_type": "Scoring Rules Display Info",
"icon": "/Game/Athena/HUD/Art/icon_health.icon_health",
"description": "{0}|plural(one=Each Damage Taken,other=Every {0} Damage Taken)",
"hide_score_toast_notifications": false
},
{
"poster_description": "{0}|plural(one=Each Item Collected,other=Every {0} Items Collected)",
"rule_name": "EACH_CREATIVE_COLLECT_ITEMS_STAT",
"_type": "Scoring Rules Display Info",
"icon": "/Game/UI/Foundation/Textures/Icons/Quest/T-Icon-Trophy-32.T-Icon-Trophy-32",
"description": "{0}|plural(one=Each Item Collected,other=Every {0} Items Collected)",
"hide_score_toast_notifications": false,
"poster_interval_description": "{0} - {1} Items Collected"
},
{
"poster_description": "Every {0} Remaining Spawn",
"rule_name": "CREATIVE_SPAWNS_LEFT_STAT",
"_type": "Scoring Rules Display Info",
"icon": "/Game/UI/Foundation/Textures/Icons/Quest/T-Icon-Trophy-32.T-Icon-Trophy-32",
"description": "Every {0} Remaining Spawn",
"hide_score_toast_notifications": false
},
{
"poster_description": "Every {0} Health Remaining",
"rule_name": "CREATIVE_REMAINING_HEALTH_STAT",
"_type": "Scoring Rules Display Info",
"icon": "/Game/Athena/HUD/Art/icon_health.icon_health",
"description": "Every {0} Health Remaining",
"hide_score_toast_notifications": false
},
{
"poster_description": "{0}|plural(one=Each Objective Completed,other=Every {0} Objectives Completed)",
"rule_name": "EACH_CREATIVE_OBJECTIVES_STAT",
"_type": "Scoring Rules Display Info",
"icon": "/Game/UI/Foundation/Textures/Icons/Quest/T-Icon-Trophy-32.T-Icon-Trophy-32",
"description": "{0}|plural(one=Each Each Objective Completed,other=Every {0} Objectives Completed)",
"hide_score_toast_notifications": false
},
{
"poster_description": "{0}|plural(one=AI Elimination,other=Every {0} AI Eliminations)",
"rule_name": "EACH_CREATIVE_AI_ELIMINATIONS_STAT",
"_type": "Scoring Rules Display Info",
"icon": "/Game/Athena/HUD/Art/killsico_alt.KillsIco_Alt",
"description": "{0}|plural(one=AI Elimination,other=Every {0} AI Eliminations)",
"hide_score_toast_notifications": false,
"poster_interval_description": "{0} - {1} AI Eliminated"
},
{
"poster_description": "{0}|plural(one=Each Assist,other=Assists)",
"rule_name": "EACH_CREATIVE_ASSISTS_STAT",
"_type": "Scoring Rules Display Info",
"icon": "/Game/Athena/HUD/Art/killsico_alt.KillsIco_Alt",
"description": "{0}|plural(one=Each Assist,other=Assists)",
"hide_score_toast_notifications": false,
"poster_interval_description": "{0} - {1} Assists"
},
{
"poster_description": "{0}|plural(one=Each millisecond Alive ,other=Every {0} Milliseconds Alive)",
"rule_name": "EACH_CREATIVE_TIME_ALIVE_STAT",
"_type": "Scoring Rules Display Info",
"icon": "/Game/Athena/HUD/Art/icon_health.icon_health",
"description": "{0}|plural(one=Each millisecond Alive ,other=Every {0} Milliseconds Alive)",
"hide_score_toast_notifications": true
},
{
"poster_description": "For every lap under {0} milliseconds ",
"rule_name": "CREATIVE_RACE_TIME_STAT",
"_type": "Scoring Rules Display Info",
"icon": "ns/Quest/T-Icon-Trophy-32.T-Icon-Trophy-32",
"description": "For every lap under {0} milliseconds ",
"hide_score_toast_notifications": false
}
]
},
"_title": "scoringrulesinformation",
"_noIndex": false,
"_activeDate": "2021-10-12T19:24:18.962Z",
"lastModified": "2023-11-16T19:22:34.542Z",
"_locale": "en-US",
"_templateName": "FortniteGameScoringRulesInfo"
},
"specialoffervideo": {
"_activeDate": "2021-08-14T23:58:00.000Z",
"_locale": "pl",
File diff suppressed because it is too large Load Diff
+6
View File
@@ -2,6 +2,12 @@ const express = require("express");
const app = express.Router();
const functions = require("../structs/functions.js");
app.get("/content/api/pages/fortnite-game/spark-tracks", async (req, res) => {
const sparkTracks = require("./../responses/sparkTracks.json");
res.json(sparkTracks)
})
app.get("/content/api/pages/*", async (req, res) => {
const contentpages = functions.getContentPages(req);
+12
View File
@@ -2,10 +2,22 @@ const Express = require("express");
const app = Express.Router();
const discovery = require("./../responses/Discovery/discovery_frontend.json");
app.post("*/api/v2/discovery/surface/*", async (req, res) => {
res.json(discovery);
});
app.post("*/discovery/surface/*", async (req, res) => {
res.json(discovery);
})
app.get("/fortnite/api/discovery/accessToken/:branch", async (req, res) => {
res.json({
"branchName": req.params.branch,
"appId": "Fortnite",
"token": "reloadbackendogfncenteruwuwu"
});
});
app.post("/links/api/fn/mnemonic", async (req, res) => {
var MnemonicArray = [];
+21
View File
@@ -143,6 +143,22 @@ app.get("/fortnite/api/stats/accountId/:accountId/bulk/window/alltime", (req, re
});
});
app.get("/d98eeaac-2bfa-4bf4-8a59-bdc95469c693", async (req, res) => {
res.json({
"playlist": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPE1QRCB4bWxucz0idXJuOm1wZWc6ZGFzaDpzY2hlbWE6bXBkOjIwMTEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4c2k6c2NoZW1hTG9jYXRpb249InVybjptcGVnOkRBU0g6c2NoZW1hOk1QRDoyMDExIGh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pdHRmL1B1YmxpY2x5QXZhaWxhYmxlU3RhbmRhcmRzL01QRUctREFTSF9zY2hlbWFfZmlsZXMvREFTSC1NUEQueHNkIiBwcm9maWxlcz0idXJuOm1wZWc6ZGFzaDpwcm9maWxlOmlzb2ZmLWxpdmU6MjAxMSIgdHlwZT0ic3RhdGljIiBtZWRpYVByZXNlbnRhdGlvbkR1cmF0aW9uPSJQVDMwLjIxM1MiIG1heFNlZ21lbnREdXJhdGlvbj0iUFQyLjAwMFMiIG1pbkJ1ZmZlclRpbWU9IlBUNC4xMDZTIj4KICA8QmFzZVVSTD5odHRwczovL2ZvcnRuaXRlLXB1YmxpYy1zZXJ2aWNlLXByb2QxMS5vbC5lcGljZ2FtZXMuY29tL2F1ZGlvL0phbVRyYWNrcy9PR1JlbWl4LzwvQmFzZVVSTD4KICA8UHJvZ3JhbUluZm9ybWF0aW9uPjwvUHJvZ3JhbUluZm9ybWF0aW9uPgogIDxQZXJpb2QgaWQ9IjAiIHN0YXJ0PSJQVDBTIj4KICAgIDxBZGFwdGF0aW9uU2V0IGlkPSIwIiBjb250ZW50VHlwZT0iYXVkaW8iIHN0YXJ0V2l0aFNBUD0iMSIgc2VnbWVudEFsaWdubWVudD0idHJ1ZSIgYml0c3RyZWFtU3dpdGNoaW5nPSJ0cnVlIj4KICAgICAgPFJlcHJlc2VudGF0aW9uIGlkPSIwIiBhdWRpb1NhbXBsaW5nUmF0ZT0iNDgwMDAiIGJhbmR3aWR0aD0iMTI4MDAwIiBtaW1lVHlwZT0iYXVkaW8vbXA0IiBjb2RlY3M9Im1wNGEuNDAuMiI+CiAgICAgICAgPFNlZ21lbnRUZW1wbGF0ZSBkdXJhdGlvbj0iMjAwMDAwMCIgdGltZXNjYWxlPSIxMDAwMDAwIiBpbml0aWFsaXphdGlvbj0iaW5pdF8kUmVwcmVzZW50YXRpb25JRCQubXA0IiBtZWRpYT0ic2VnbWVudF8kUmVwcmVzZW50YXRpb25JRCRfJE51bWJlciQubTRzIiBzdGFydE51bWJlcj0iMSI+PC9TZWdtZW50VGVtcGxhdGU+CiAgICAgICAgPEF1ZGlvQ2hhbm5lbENvbmZpZ3VyYXRpb24gc2NoZW1lSWRVcmk9InVybjptcGVnOmRhc2g6MjMwMDM6MzphdWRpb19jaGFubmVsX2NvbmZpZ3VyYXRpb246MjAxMSIgdmFsdWU9IjIiPjwvQXVkaW9DaGFubmVsQ29uZmlndXJhdGlvbj4KICAgICAgPC9SZXByZXNlbnRhdGlvbj4KICAgIDwvQWRhcHRhdGlvblNldD4KICA8L1BlcmlvZD4KPC9NUEQ+",
"playlistType": "application/dash+xml",
"metadata": {
"assetId": "",
"baseUrls": [
"https://fortnite-public-service-prod11.ol.epicgames.com/audio/JamTracks/OGRemix/"
],
"supportsCaching": true,
"ucp": "a",
"version": "f2528fa1-5f30-42ff-8ae5-a03e3b023a0a"
}
})
})
app.post("/fortnite/api/feedback/*", (req, res) => {
log.debug("POST /fortnite/api/feedback/* called");
res.status(200);
@@ -290,6 +306,11 @@ app.get("/region", async (req, res) => {
})
})
app.all("/v1/epic-settings/public/users/*/values", async (req, res) => {
const epicsettings = require("./../responses/epic-settings.json");
res.json(epicsettings)
})
app.get("/fortnite/api/game/v2/br-inventory/account/*", async (req, res) => {
log.debug(`GET /fortnite/api/game/v2/br-inventory/account/${req.params.accountId} called`);
res.json({
+194 -1
View File
@@ -962,6 +962,55 @@ app.post("/fortnite/api/game/v2/profile/*/client/GiftCatalogEntry", verifyToken,
log.debug(`GiftCatalogEntry: Response sent with profile revision ${profile.rvn}`);
});
app.post("/fortnite/api/game/v2/profile/*/client/SetActiveArchetype", async (req, res) => {
const profiles = await Profile.findOne({ accountId: req.user.accountId });
let profile = profiles.profiles[req.query.profileId];
var ApplyProfileChanges = [];
var BaseRevision = profile.rvn || 0;
var QueryRevision = req.query.rvn || -1;
var StatChanged = false;
if (req.body.archetypeGroup && req.body.archetype) {
if (!profile.stats.attributes.hasOwnProperty("loadout_archetype_values")) {
profile.stats.attributes.loadout_archetype_values = {}
}
profile.stats.attributes.loadout_archetype_values[req.body.archetypeGroup] = req.body.archetype;
StatChanged = true;
}
if (StatChanged == true) {
profile.rvn += 1;
profile.commandRevision += 1;
ApplyProfileChanges.push({
"changeType": "statModified",
"name": "loadout_archetype_values",
"value": profile.stats.attributes.loadout_archetype_values
})
await profiles.updateOne({ $set: { [`profiles.${req.query.profileId}`]: profile } });
}
if (QueryRevision != BaseRevision) {
ApplyProfileChanges = [{
"changeType": "fullProfileUpdate",
"profile": profile
}];
}
res.json({
profileRevision: profile.rvn || 0,
profileId: req.query.profileId,
profileChangesBaseRevision: BaseRevision,
profileChanges: ApplyProfileChanges,
profileCommandRevision: profile.commandRevision || 0,
serverTime: new Date().toISOString(),
responseVersion: 1
})
});
app.post("/fortnite/api/game/v2/profile/*/client/UnlockRewardNode", verifyToken, async (req, res) => {
const profiles = await Profile.findOne({ accountId: req.user.accountId });
let profile = profiles.profiles[req.query.profileId];
@@ -1137,7 +1186,7 @@ app.post("/fortnite/api/game/v2/profile/*/client/UnlockRewardNode", verifyToken,
await profiles.updateOne({ $set: { [`profiles.${req.query.profileId}`]: profile } });
}
if (QueryRevision != ProfileRevisionCheck) {
if (QueryRevision != ProfileRevisionCheck) {
ApplyProfileChanges = [{
"changeType": "fullProfileUpdate",
"profile": profile
@@ -1531,6 +1580,57 @@ app.post("/fortnite/api/game/v2/profile/*/client/RefundMtxPurchase", verifyToken
})
});
app.post("/fortnite/api/game/v2/profile/*/client/IncrementNamedCounterStat", async (req, res) => {
const profiles = await Profile.findOne({ accountId: req.params[0] });
let profile = profiles.profiles[req.query.profileId];
// do not change any of these or you will end up breaking it
var ApplyProfileChanges = [];
var BaseRevision = profile.rvn || 0;
var QueryRevision = req.query.rvn || -1;
var StatChanged = false;
if (req.body.counterName && profile.stats.attributes.hasOwnProperty("named_counters")) {
if (profile.stats.attributes.named_counters.hasOwnProperty(req.body.counterName)) {
profile.stats.attributes.named_counters[req.body.counterName].current_count += 1;
profile.stats.attributes.named_counters[req.body.counterName].last_incremented_time = new Date().toISOString();
StatChanged = true;
}
}
if (StatChanged == true) {
profile.rvn += 1;
profile.commandRevision += 1;
ApplyProfileChanges.push({
"changeType": "statModified",
"name": "named_counters",
"value": profile.stats.attributes.named_counters
})
await profiles.updateOne({ $set: { [`profiles.${req.query.profileId}`]: profile} });
}
// this doesn't work properly on version v12.20 and above but whatever
if (QueryRevision != BaseRevision) {
ApplyProfileChanges = [{
"changeType": "fullProfileUpdate",
"profile": profile
}];
}
res.json({
profileRevision: profile.rvn || 0,
profileId: req.query.profileId,
profileChangesBaseRevision: BaseRevision,
profileChanges: ApplyProfileChanges,
profileCommandRevision: profile.commandRevision || 0,
serverTime: new Date().toISOString(),
responseVersion: 1
})
});
app.post("/fortnite/api/game/v2/profile/*/client/PurchaseCatalogEntry", verifyToken, async (req, res) => {
log.debug(`PurchaseCatalogEntry: Request received with body: ${JSON.stringify(req.body)}`);
@@ -3405,6 +3505,99 @@ app.post("/fortnite/api/game/v2/profile/*/client/SetCosmeticLockerSlot", verifyT
});
});
app.post("/fortnite/api/game/v2/profile/*/client/PutModularCosmeticLoadout", async (req, res) => {
const profiles = await Profile.findOne({ accountId: req.user.accountId });
let profile = profiles.profiles[req.query.profileId];
// do not change any of these or you will end up breaking it
var ApplyProfileChanges = [];
var BaseRevision = profile.rvn || 0;
var QueryRevision = req.query.rvn || -1;
var StatChanged = false;
if (!profile.stats.attributes.hasOwnProperty("loadout_presets")) {
profile.stats.attributes.loadout_presets = {};
ApplyProfileChanges.push({
"changeType": "statModified",
"name": "loadout_presets",
"value": {}
})
StatChanged = true;
}
if (!profile.stats.attributes.loadout_presets.hasOwnProperty(req.body.loadoutType)) {
const NewLoadoutID = functions.MakeID();
profile.items[NewLoadoutID] = {
"templateId": req.body.loadoutType,
"attributes": {},
"quantity": 1
}
ApplyProfileChanges.push({
"changeType": "itemAdded",
"itemId": NewLoadoutID,
"item": profile.items[NewLoadoutID]
})
profile.stats.attributes.loadout_presets[req.body.loadoutType] = {
[req.body.presetId]: NewLoadoutID
};
ApplyProfileChanges.push({
"changeType": "statModified",
"name": "loadout_presets",
"value": profile.stats.attributes.loadout_presets
})
StatChanged = true;
}
var LoadoutGUID = [];
try {
LoadoutGUID = profile.stats.attributes.loadout_presets[req.body.loadoutType][req.body.presetId];
profile.items[LoadoutGUID].attributes = JSON.parse(req.body.loadoutData);
ApplyProfileChanges.push({
"changeType": "itemAttrChanged",
"itemId": LoadoutGUID,
"attributeName": "slots",
"attributeValue": profile.items[LoadoutGUID].attributes.slots
})
StatChanged = true;
} catch (err) {}
if (StatChanged == true) {
profile.rvn += 1;
profile.commandRevision += 1;
await profiles.updateOne({ $set: { [`profiles.${req.query.profileId}`]: profile } });
}
// this doesn't work properly on version v12.20 and above but whatever
if (QueryRevision != BaseRevision) {
ApplyProfileChanges = [{
"changeType": "fullProfileUpdate",
"profile": profile
}];
}
res.json({
profileRevision: profile.rvn || 0,
profileId: req.query.profileId,
profileChangesBaseRevision: BaseRevision,
profileChanges: ApplyProfileChanges,
profileCommandRevision: profile.commandRevision || 0,
serverTime: new Date().toISOString(),
responseVersion: 1
})
});
app.post("/fortnite/api/game/v2/profile/*/client/:operation", verifyToken, async (req, res) => {
const profiles = await Profile.findOne({ accountId: req.user.accountId });
+3 -3
View File
@@ -1,12 +1,12 @@
const express = require("express");
const app = express();
const profile = require("./../model/profiles.js")
const Profile = require("./../model/profiles.js")
const { verifyToken } = require("../tokenManager/tokenVerify.js");
app.get("/fortnite/api/game/v2/privacy/account/:accountId", verifyToken , async (req, res) => {
const profiles = await profile.findOne({ accountId: req.user.accountId });
const profiles = await Profile.findOne({ accountId: req.user.accountId });
if(!profiles) return res.status(400).end();
@@ -17,7 +17,7 @@ app.get("/fortnite/api/game/v2/privacy/account/:accountId", verifyToken , async
})
app.post("/fortnite/api/game/v2/privacy/account/:accountId", verifyToken , async (req, res) => {
const profiles = await profile.findOne({ accountId: req.user.accountId });
const profiles = await Profile.findOne({ accountId: req.user.accountId });
if(!profiles) return res.status(400).end();
+7
View File
@@ -184,6 +184,13 @@ function getContentPages(req) {
contentpages.dynamicbackgrounds.backgrounds.backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/t-s25-14dos-lobby-4096x2048-2be24969eee3.jpg"
}
}
if (memory.season == 27) {
contentpages.dynamicbackgrounds.backgrounds.backgrounds[0].stage = "rufus";
} else {
contentpages.dynamicbackgrounds.backgrounds.backgrounds[0].stage = "defaultnotris";
contentpages.dynamicbackgrounds.backgrounds.backgrounds[0].backgroundimage = "https://fortnite-public-service-prod11.ol.epicgames.com/images/lightlobbybg.png";
}
} catch {}
return contentpages;