Merge pull request #128 from PRO100KatYT/main

Pull Request #128
This commit is contained in:
Lawin
2024-12-03 22:20:01 +00:00
committed by GitHub
37 changed files with 44781 additions and 4431 deletions

View File

@@ -9,7 +9,7 @@ bIsAthenaGlobalChatEnabled=true # Battle royale global chat.
[/Script/FortniteGame.FortTextHotfixConfig] [/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!"))) +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!")))
+TextReplacements=(Category=Game, Namespace="", bIsMinimalPatch=True, Key="CD9D4C7A4486689DB9D16B8A7E290B08", NativeString="Not bad! So, what you'd call this place?", LocalizedStrings=(("ar","استمتع بتجربة لعب استثنائية!"),("en","Have a phenomenal gaming experience!"),("de","Wünsche allen ein wunderbares Spielerlebnis!"),("es","¡Que disfrutes de tu experiencia de videojuegos!"),("es-419","¡Ten una experiencia de juego espectacular!"),("fr","Un bon jeu à toutes et à tous !"),("it","Ti auguriamo un'esperienza di gioco fenomenale!"),("ja","驚きの体験をしよう!"),("ko","게임에서 환상적인 경험을 해보세요!"),("pl","Życzymy fenomenalnej gry!"),("pt-BR","Tenha uma experiência de jogo fenomenal!"),("ru","Желаю невероятно приятной игры!"),("tr","Muhteşem bir oyun deneyimi yaşamanı dileriz!"))) +TextReplacements=(Category=Game, Namespace="", bIsMinimalPatch=True, Key="CD9D4C7A4486689DB9D16B8A7E290B08", NativeString="Not bad! So, what you'd call this place?", LocalizedStrings=(("ar","استمتع بتجربة لعب رائعة!"),("en","Have a phenomenal gaming experience!"),("de","Genießt ein phänomenales Spielerlebnis!"),("es","¡Disfruta de una experiencia de juego fenomenal!"),("es-419","¡Ten una experiencia de juego espectacular!"),("fr","Profitez d'une expérience de jeu incroyable !"),("it","Goditi un'esperienza di gioco fenomenale!"),("ja","驚きの体験をしよう!"),("ko","환상적인 게임 경험을 즐기세요!"),("pl","Życzymy fenomenalnych wrażeń z gry!"),("pt-BR","Tenha uma experiência de jogo fenomenal!"),("ru","Наслаждайтесь невероятными игровыми впечатлениями!"),("tr","Muhteşem bir oyun deneyimi yaşamanı dileriz!")))
+TextReplacements=(Category=Game, Namespace="", bIsMinimalPatch=True, Key="8E762BB6481EE8FE630559BE5A982622", NativeString="Enter your Homebase name.", LocalizedStrings=(("ar","LawinServer"),("en","LawinServer"),("de","LawinServer"),("es","LawinServer"),("es-419","LawinServer"),("fr","LawinServer"),("it","LawinServer"),("ja","LawinServer"),("ko","LawinServer"),("pl","LawinServer"),("pt-BR","LawinServer"),("ru","LawinServer"),("tr","LawinServer"))) +TextReplacements=(Category=Game, Namespace="", bIsMinimalPatch=True, Key="8E762BB6481EE8FE630559BE5A982622", NativeString="Enter your Homebase name.", LocalizedStrings=(("ar","LawinServer"),("en","LawinServer"),("de","LawinServer"),("es","LawinServer"),("es-419","LawinServer"),("fr","LawinServer"),("it","LawinServer"),("ja","LawinServer"),("ko","LawinServer"),("pl","LawinServer"),("pt-BR","LawinServer"),("ru","LawinServer"),("tr","LawinServer")))
[/Script/FortniteGame.FortGameInstance] [/Script/FortniteGame.FortGameInstance]

View File

@@ -5,7 +5,7 @@ bUseConfigDisplayName=false
displayName=LawinServer displayName=LawinServer
[Profile] [Profile]
# 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 29 and for Save the World from Season 2 to Season X & Season 24. # 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 32 and for Save the World from Season 2 to Season X & Season 24.
bCompletedSeasonalQuests=false bCompletedSeasonalQuests=false
# If this is set to true, you will receive all founder's pack rewards upon logging into StW if the account didn't claim them yet. # If this is set to true, you will receive all founder's pack rewards upon logging into StW if the account didn't claim them yet.
bGrantFoundersPacks=false bGrantFoundersPacks=false

View File

@@ -60,16 +60,19 @@
- Changing items in Locker - Changing items in Locker
- Changing banner icon and banner color - Changing banner icon and banner color
- Changing items edit styles - Changing items edit styles
- Jam Track playback in lobby (currently all tracks will play the OG Remix audio) - Jam Track playback in lobby (28.00-30.00) (Currently all tracks will play the OG Future Remix audio)
- Radio Station in cars support*
- Support a Creator with specific codes - Support a Creator with specific codes
- Fully working daily challenges system (New daily challenge every day, replacing daily challenges, etc...) - Fully working daily challenges system (New daily challenge every day, replacing daily challenges, etc...)
- Completed Location & Discovery quests (discovered map in game & in lobby) for Chapter 2, 3 & 4 (Can change) - Completed Location & Discovery quests (discovered map in game & in lobby) for Chapter 2 - 5 (Can change)
- Seasonal Quests from Season 3 up to Season 29 (Can change) - Seasonal Quests from Season 3 up to Season 32 (Can change)
- Purchasable battle pass from Season 2 to Season 10 (Can change) - Purchasable battle pass from Season 2 to Season 10 (Can change)
- Events Tab (Tournaments)
- Discovery Tab - Discovery Tab
- Leaderboards (v1) - Leaderboards (v1)
- Configurable backend sided in-game events - check out the Events seciton in config.ini for more details - Configurable backend sided in-game events - check out the Events seciton in config.ini for more details
- Joining gameservers using the matchmaker - check out the GameServer seciton in config.ini for more details - Joining gameservers using the matchmaker - check out the GameServer seciton in config.ini for more details
##### * Included in the [LawinServer Addon](https://github.com/PRO100KatYT/LawinServerAddon). To install it, merge its `public` folder with the one in your LawinServer folder. [(Direct download link)](https://github.com/PRO100KatYT/LawinServerAddon/archive/refs/heads/main.zip)
## How to host/use LawinServer ## How to host/use LawinServer
1) Install [NodeJS](https://nodejs.org/en/) 1) Install [NodeJS](https://nodejs.org/en/)

File diff suppressed because it is too large Load Diff

View File

@@ -13131,6 +13131,34 @@
}, },
"quantity": 1 "quantity": 1
}, },
"Hero:HID_Ninja_EternalWanderer_SR_T05": {
"templateId": "Hero:HID_Ninja_EternalWanderer_SR_T05",
"attributes": {
"outfitvariants": [
{
"channel": "Parts",
"active": "CampaignHero.Tier2.Legendary",
"owned": []
}
],
"backblingvariants": [],
"gender": 0,
"level": 50,
"item_seen": true,
"squad_slot_idx": -1,
"portrait": "",
"hero_name": "DefaultHeroName",
"max_level_bonus": 0,
"squad_id": "",
"mode_loadouts": [],
"xp": 0,
"slotted_building_id": "",
"refundable": false,
"building_slot_used": -1,
"favorite": false
},
"quantity": 1
},
"Hero:HID_Commando_045_Chaos_Agent_SR_T05": { "Hero:HID_Commando_045_Chaos_Agent_SR_T05": {
"templateId": "Hero:HID_Commando_045_Chaos_Agent_SR_T05", "templateId": "Hero:HID_Commando_045_Chaos_Agent_SR_T05",
"attributes": { "attributes": {
@@ -52298,6 +52326,98 @@
}, },
"quantity": 1 "quantity": 1
}, },
"Schematic:SID_Sniper_Primal_FlameBow_SR_Ore_T05": {
"templateId": "Schematic:SID_Sniper_Primal_FlameBow_SR_Ore_T05",
"attributes": {
"legacy_alterations": [],
"max_level_bonus": 0,
"level": 50,
"refund_legacy_item": false,
"item_seen": true,
"alterations": [
"",
"",
"",
"",
"",
""
],
"xp": 0,
"refundable": false,
"alteration_base_rarities": [],
"favorite": false
},
"quantity": 1
},
"Schematic:SID_Sniper_Primal_FlameBow_SR_Crystal_T05": {
"templateId": "Schematic:SID_Sniper_Primal_FlameBow_SR_Crystal_T05",
"attributes": {
"legacy_alterations": [],
"max_level_bonus": 0,
"level": 50,
"refund_legacy_item": false,
"item_seen": true,
"alterations": [
"",
"",
"",
"",
"",
""
],
"xp": 0,
"refundable": false,
"alteration_base_rarities": [],
"favorite": false
},
"quantity": 1
},
"Schematic:SID_Sniper_Primal_StinkBow_SR_Ore_T05": {
"templateId": "Schematic:SID_Sniper_Primal_StinkBow_SR_Ore_T05",
"attributes": {
"legacy_alterations": [],
"max_level_bonus": 0,
"level": 50,
"refund_legacy_item": false,
"item_seen": true,
"alterations": [
"",
"",
"",
"",
"",
""
],
"xp": 0,
"refundable": false,
"alteration_base_rarities": [],
"favorite": false
},
"quantity": 1
},
"Schematic:SID_Sniper_Primal_StinkBow_SR_Crystal_T05": {
"templateId": "Schematic:SID_Sniper_Primal_StinkBow_SR_Crystal_T05",
"attributes": {
"legacy_alterations": [],
"max_level_bonus": 0,
"level": 50,
"refund_legacy_item": false,
"item_seen": true,
"alterations": [
"",
"",
"",
"",
"",
""
],
"xp": 0,
"refundable": false,
"alteration_base_rarities": [],
"favorite": false
},
"quantity": 1
},
"Schematic:Gadget_Generic_Turret": { "Schematic:Gadget_Generic_Turret": {
"templateId": "Schematic:Gadget_Generic_Turret", "templateId": "Schematic:Gadget_Generic_Turret",
"attributes": { "attributes": {
@@ -61462,6 +61582,84 @@
}, },
"quantity": 1 "quantity": 1
}, },
"Hero:HID_Outlander_043_MadCommander_SR_T05": {
"templateId": "Hero:HID_Outlander_043_MadCommander_SR_T05",
"attributes": {
"outfitvariants": [
{
"channel": "Parts",
"active": "CampaignHero.Tier2.Legendary",
"owned": []
}
],
"backblingvariants": [],
"gender": 0,
"level": 50,
"item_seen": true,
"squad_slot_idx": -1,
"portrait": "",
"hero_name": "DefaultHeroName",
"max_level_bonus": 0,
"squad_id": "",
"mode_loadouts": [],
"xp": 0,
"slotted_building_id": "",
"refundable": false,
"building_slot_used": -1,
"favorite": false
},
"quantity": 1
},
"Hero:HID_Outlander_043_MadCommander_VR_T05": {
"templateId": "Hero:HID_Outlander_043_MadCommander_VR_T05",
"attributes": {
"outfitvariants": [],
"backblingvariants": [],
"gender": 0,
"level": 50,
"item_seen": true,
"squad_slot_idx": -1,
"portrait": "",
"hero_name": "DefaultHeroName",
"max_level_bonus": 0,
"squad_id": "",
"mode_loadouts": [],
"xp": 0,
"slotted_building_id": "",
"refundable": false,
"building_slot_used": -1,
"favorite": false
},
"quantity": 1
},
"Hero:HID_Outlander_042_Madcap_SR_T05": {
"templateId": "Hero:HID_Outlander_042_Madcap_SR_T05",
"attributes": {
"outfitvariants": [
{
"channel": "Parts",
"active": "CampaignHero.Tier2.Legendary",
"owned": []
}
],
"backblingvariants": [],
"gender": 0,
"level": 50,
"item_seen": true,
"squad_slot_idx": -1,
"portrait": "",
"hero_name": "DefaultHeroName",
"max_level_bonus": 0,
"squad_id": "",
"mode_loadouts": [],
"xp": 0,
"slotted_building_id": "",
"refundable": false,
"building_slot_used": -1,
"favorite": false
},
"quantity": 1
},
"Hero:hid_outlander_041_dinocollector_sr_t05": { "Hero:hid_outlander_041_dinocollector_sr_t05": {
"templateId": "Hero:hid_outlander_041_dinocollector_sr_t05", "templateId": "Hero:hid_outlander_041_dinocollector_sr_t05",
"attributes": { "attributes": {
@@ -61512,6 +61710,28 @@
}, },
"quantity": 1 "quantity": 1
}, },
"Hero:HID_Ninja_045_Snowstrike_SR_T05": {
"templateId": "Hero:HID_Ninja_045_Snowstrike_SR_T05",
"attributes": {
"outfitvariants": [],
"backblingvariants": [],
"gender": 0,
"level": 50,
"item_seen": true,
"squad_slot_idx": -1,
"portrait": "",
"hero_name": "DefaultHeroName",
"max_level_bonus": 0,
"squad_id": "",
"mode_loadouts": [],
"xp": 0,
"slotted_building_id": "",
"refundable": false,
"building_slot_used": -1,
"favorite": false
},
"quantity": 1
},
"Token:hordepointstier2": { "Token:hordepointstier2": {
"templateId": "Token:hordepointstier2", "templateId": "Token:hordepointstier2",
"attributes": { "attributes": {

BIN
public/images/lawinpfp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

View File

@@ -340,7 +340,9 @@
"accountId": "epic", "accountId": "epic",
"creatorName": "Epic", "creatorName": "Epic",
"descriptionTags": [], "descriptionTags": [],
"discoveryIntent": "PUBLIC",
"metadata": { "metadata": {
"product_tag": "Product.LawinServer",
"image_url": "https://cdn2.unrealengine.com/solo-1920x1080-1920x1080-bc0a5455ce20.jpg", "image_url": "https://cdn2.unrealengine.com/solo-1920x1080-1920x1080-bc0a5455ce20.jpg",
"alt_introduction": { "alt_introduction": {
"ar": "انطلق وحدك في معركة لتصبح آخر لاعب صامد.", "ar": "انطلق وحدك في معركة لتصبح آخر لاعب صامد.",
@@ -418,7 +420,9 @@
"accountId": "epic", "accountId": "epic",
"creatorName": "Epic", "creatorName": "Epic",
"descriptionTags": [], "descriptionTags": [],
"discoveryIntent": "PUBLIC",
"metadata": { "metadata": {
"product_tag": "Product.LawinServer",
"image_url": "https://cdn2.unrealengine.com/duos-1920x1080-1920x1080-5a411fe07b21.jpg", "image_url": "https://cdn2.unrealengine.com/duos-1920x1080-1920x1080-5a411fe07b21.jpg",
"alt_introduction": { "alt_introduction": {
"ar": "تعاون مع أحد الأصدقاء واقض على الجميع.", "ar": "تعاون مع أحد الأصدقاء واقض على الجميع.",
@@ -496,7 +500,9 @@
"accountId": "epic", "accountId": "epic",
"creatorName": "Epic", "creatorName": "Epic",
"descriptionTags": [], "descriptionTags": [],
"discoveryIntent": "PUBLIC",
"metadata": { "metadata": {
"product_tag": "Product.LawinServer",
"image_url": "https://cdn2.unrealengine.com/trios-1920x1080-1920x1080-d5054bb9691a.jpg", "image_url": "https://cdn2.unrealengine.com/trios-1920x1080-1920x1080-d5054bb9691a.jpg",
"alt_introduction": { "alt_introduction": {
"ar": "باتل رويال الكلاسيكية بفرق مكونة من ثلاثة أشخاص.", "ar": "باتل رويال الكلاسيكية بفرق مكونة من ثلاثة أشخاص.",
@@ -574,7 +580,9 @@
"accountId": "epic", "accountId": "epic",
"creatorName": "Epic", "creatorName": "Epic",
"descriptionTags": [], "descriptionTags": [],
"discoveryIntent": "PUBLIC",
"metadata": { "metadata": {
"product_tag": "Product.LawinServer",
"image_url": "https://cdn2.unrealengine.com/squads-1920x1080-1920x1080-095c0732502e.jpg", "image_url": "https://cdn2.unrealengine.com/squads-1920x1080-1920x1080-095c0732502e.jpg",
"alt_introduction": { "alt_introduction": {
"ar": "انضم لمجموعة وتفوق على جميع الفرق الأخرى التي تقاتل للوصول للنصر.", "ar": "انضم لمجموعة وتفوق على جميع الفرق الأخرى التي تقاتل للوصول للنصر.",
@@ -654,7 +662,9 @@
"descriptionTags": [ "descriptionTags": [
"pve" "pve"
], ],
"discoveryIntent": "PUBLIC",
"metadata": { "metadata": {
"product_tag": "Product.LawinServer",
"ownership_token": "Token:campaignaccess", "ownership_token": "Token:campaignaccess",
"image_url": "https://cdn2.unrealengine.com/stw-1920-1920x1080-5a049ecca449.jpg", "image_url": "https://cdn2.unrealengine.com/stw-1920-1920x1080-5a049ecca449.jpg",
"alt_introduction": { "alt_introduction": {

View File

@@ -10,33 +10,33 @@
"tcId": "61fb3dd8-f23d-45cc-9058-058ab223ba5c", "tcId": "61fb3dd8-f23d-45cc-9058-058ab223ba5c",
"contentFields": { "contentFields": {
"body": { "body": {
"ar": "استمتع بتجربة لعب استثنائية!", "ar": "استمتع بتجربة لعب رائعة!",
"de": "Genießt ein phänomenales Spielerlebnis!",
"en": "Have a phenomenal gaming experience!", "en": "Have a phenomenal gaming experience!",
"de": "Wünsche allen ein wunderbares Spielerlebnis!", "es": "¡Disfruta de una experiencia de juego fenomenal!",
"es": "¡Que disfrutes de tu experiencia de videojuegos!",
"es-419": "¡Ten una experiencia de juego espectacular!", "es-419": "¡Ten una experiencia de juego espectacular!",
"fr": "Un bon jeu à toutes et à tous !", "fr": "Profitez d'une expérience de jeu incroyable !",
"it": "Ti auguriamo un'esperienza di gioco fenomenale!", "it": "Goditi un'esperienza di gioco fenomenale!",
"ja": "驚きの体験をしよう!", "ja": "驚きの体験をしよう!",
"ko": "게임에서 환상적인 경험을 해보세요!", "ko": "환상적인 게임 경험을 즐기세요!",
"pl": "Życzymy fenomenalnej gry!", "pl": "Życzymy fenomenalnych wrażeń z gry!",
"pt-BR": "Tenha uma experiência de jogo fenomenal!", "pt-BR": "Tenha uma experiência de jogo fenomenal!",
"ru": "Желаю невероятно приятной игры!", "ru": "Наслаждайтесь невероятными игровыми впечатлениями!",
"tr": "Muhteşem bir oyun deneyimi yaşamanı dileriz!" "tr": "Muhteşem bir oyun deneyimi yaşamanı dileriz!"
}, },
"FullScreenBody": { "FullScreenBody": {
"ar": "استمتع بتجربة لعب استثنائية!\nDiscord: https://discord.gg/KJ8UaHZ", "ar": "استمتع بتجربة لعب رائعة!\nDiscord: https://discord.gg/KJ8UaHZ",
"en": "Have a phenomenal gaming experience\nDiscord: https://discord.gg/KJ8UaHZ!", "en": "Have a phenomenal gaming experience!\nDiscord: https://discord.gg/KJ8UaHZ",
"de": "Wünsche allen ein wunderbares Spielerlebnis!\nDiscord: https://discord.gg/KJ8UaHZ", "de": "Genießt ein phänomenales Spielerlebnis!\nDiscord: https://discord.gg/KJ8UaHZ",
"es": Que disfrutes de tu experiencia de videojuegos!\nDiscord: https://discord.gg/KJ8UaHZ", "es": Disfruta de una experiencia de juego fenomenal!\nDiscord: https://discord.gg/KJ8UaHZ",
"es-419": "¡Ten una experiencia de juego espectacular!\nDiscord: https://discord.gg/KJ8UaHZ", "es-419": "¡Ten una experiencia de juego espectacular!\nDiscord: https://discord.gg/KJ8UaHZ",
"fr": "Un bon jeu à toutes et à tous !\nDiscord: https://discord.gg/KJ8UaHZ", "fr": "Profitez d'une expérience de jeu incroyable !\nDiscord: https://discord.gg/KJ8UaHZ",
"it": "Ti auguriamo un'esperienza di gioco fenomenale!\nDiscord: https://discord.gg/KJ8UaHZ", "it": "Goditi un'esperienza di gioco fenomenale!\nDiscord: https://discord.gg/KJ8UaHZ",
"ja": "驚きの体験をしよう!\nDiscord: https://discord.gg/KJ8UaHZ", "ja": "驚きの体験をしよう!\nDiscord: https://discord.gg/KJ8UaHZ",
"ko": "게임에서 환상적인 경험을 해보세요!\nDiscord: https://discord.gg/KJ8UaHZ", "ko": "환상적인 게임 경험을 즐기세요!\nDiscord: https://discord.gg/KJ8UaHZ",
"pl": "Życzymy fenomenalnej gry!\nDiscord: https://discord.gg/KJ8UaHZ", "pl": "Życzymy fenomenalnych wrażeń z gry!\nDiscord: https://discord.gg/KJ8UaHZ",
"pt-BR": "Tenha uma experiência de jogo fenomenal!\nDiscord: https://discord.gg/KJ8UaHZ", "pt-BR": "Tenha uma experiência de jogo fenomenal!\nDiscord: https://discord.gg/KJ8UaHZ",
"ru": "Желаю невероятно приятной игры!\nDiscord: https://discord.gg/KJ8UaHZ", "ru": "Наслаждайтесь невероятными игровыми впечатлениями!\nDiscord: https://discord.gg/KJ8UaHZ",
"tr": "Muhteşem bir oyun deneyimi yaşamanı dileriz!\nDiscord: https://discord.gg/KJ8UaHZ" "tr": "Muhteşem bir oyun deneyimi yaşamanı dileriz!\nDiscord: https://discord.gg/KJ8UaHZ"
}, },
"entryType": "Website", "entryType": "Website",

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,23 @@
"message": { "message": {
"_type": "CommonUI Simple Message Base", "_type": "CommonUI Simple Message Base",
"title": "LawinServer", "title": "LawinServer",
"body": "Join our discord: https://discord.gg/KJ8UaHZ\nYouTube: Lawin\nTwitter: @lawin_010" "body": {
"ar": "انضم إلى خادم الديسكورد الخاص بنا: https://discord.gg/KJ8UaHZ\nيوتيوب: Lawin\nتويتر: @lawin_010",
"de": "Tritt unserem Discord bei: https://discord.gg/KJ8UaHZ\nYouTube: Lawin\nTwitter: @lawin_010",
"en": "Join our Discord: https://discord.gg/KJ8UaHZ\nYouTube: Lawin\nTwitter: @lawin_010",
"es": "Únete a nuestro Discord: https://discord.gg/KJ8UaHZ\nYouTube: Lawin\nTwitter: @lawin_010",
"es-419": "Únete a nuestro Discord: https://discord.gg/KJ8UaHZ\nYouTube: Lawin\nTwitter: @lawin_010",
"fr": "Rejoignez notre Discord : https://discord.gg/KJ8UaHZ\nYouTube : Lawin\nTwitter : @lawin_010",
"it": "Unisciti al nostro Discord: https://discord.gg/KJ8UaHZ\nYouTube: Lawin\nTwitter: @lawin_010",
"ja": "私たちのDiscordに参加してください: https://discord.gg/KJ8UaHZ\nYouTube: Lawin\nTwitter: @lawin_010",
"ko": "우리의 Discord에 참여하세요: https://discord.gg/KJ8UaHZ\nYouTube: Lawin\nTwitter: @lawin_010",
"pl": "Dołącz do naszego Discorda: https://discord.gg/KJ8UaHZ\nYouTube: Lawin\nTwitter: @lawin_010",
"pt-BR": "Junte-se ao nosso Discord: https://discord.gg/KJ8UaHZ\nYouTube: Lawin\nTwitter: @lawin_010",
"ru": "Присоединяйтесь к нашему Discord: https://discord.gg/KJ8UaHZ\nYouTube: Lawin\nTwitter: @lawin_010",
"tr": "Discord sunucumuza katıl: https://discord.gg/KJ8UaHZ\nYouTube: Lawin\nTwitter: @lawin_010",
"zh-CN": "加入我们的Discord: https://discord.gg/KJ8UaHZ\nYouTube: Lawin\nTwitter: @lawin_010",
"zh-Hant": "加入我們的Discord: https://discord.gg/KJ8UaHZ\nYouTube: Lawin\nTwitter: @lawin_010"
}
} }
}, },
"_activeDate": "2017-07-19T13:14:04.490Z", "_activeDate": "2017-07-19T13:14:04.490Z",
@@ -213,7 +229,23 @@
"hidden": false, "hidden": false,
"_type": "CommonUI Simple Message Base", "_type": "CommonUI Simple Message Base",
"adspace": "DISCORD!", "adspace": "DISCORD!",
"title": "Join our discord server!", "title": {
"ar": "انضم إلى خادم Discord الخاص بنا!",
"de": "Tritt unserem Discord-Server bei!",
"en": "Join our Discord server!",
"es": "Únete a nuestro servidor de Discord!",
"es-419": "¡Únete a nuestro servidor de Discord!",
"fr": "Rejoins notre serveur Discord!",
"it": "Unisciti al nostro server Discord!",
"ja": "私たちのDiscordサーバーに参加してください",
"ko": "우리의 Discord 서버에 가입하세요!",
"pl": "Dołącz do naszego serwera Discord!",
"pt-BR": "Junte-se ao nosso servidor Discord!",
"ru": "Присоединяйтесь к нашему серверу Discord!",
"tr": "Discord sunucumuza katıl!",
"zh-CN": "加入我们的Discord服务器",
"zh-Hant": "加入我們的Discord伺服器"
},
"body": "https://discord.gg/KJ8UaHZ", "body": "https://discord.gg/KJ8UaHZ",
"spotlight": false "spotlight": false
}, },
@@ -223,7 +255,21 @@
"_type": "CommonUI Simple Message Base", "_type": "CommonUI Simple Message Base",
"adspace": "ENJOY!", "adspace": "ENJOY!",
"title": "LawinServer", "title": "LawinServer",
"body": "Enjoy LawinServer!", "body": {
"ar": "استمتع بتجربة لعب رائعة!",
"de": "Genießt ein phänomenales Spielerlebnis!",
"en": "Have a phenomenal gaming experience!",
"es": "¡Disfruta de una experiencia de juego fenomenal!",
"es-419": "¡Ten una experiencia de juego espectacular!",
"fr": "Profitez d'une expérience de jeu incroyable !",
"it": "Goditi un'esperienza di gioco fenomenale!",
"ja": "驚きの体験をしよう!",
"ko": "환상적인 게임 경험을 즐기세요!",
"pl": "Życzymy fenomenalnych wrażeń z gry!",
"pt-BR": "Tenha uma experiência de jogo fenomenal!",
"ru": "Наслаждайтесь невероятными игровыми впечатлениями!",
"tr": "Muhteşem bir oyun deneyimi yaşamanı dileriz!"
},
"spotlight": false "spotlight": false
} }
] ]
@@ -1366,18 +1412,112 @@
"poster_back_image": "https://fortnite-public-service-prod11.ol.epicgames.com/images/poster_back.png", "poster_back_image": "https://fortnite-public-service-prod11.ol.epicgames.com/images/poster_back.png",
"_type": "Tournament Display Info", "_type": "Tournament Display Info",
"pin_score_requirement": 420, "pin_score_requirement": 420,
"pin_earned_text": "Lawin is the winner!", "pin_earned_text": {
"ar": "لاوين هو الفائز!",
"de": "Lawin ist der Gewinner!",
"en": "Lawin is the winner!",
"es": "¡Lawin es el ganador!",
"es-419": "¡Lawin es el ganador!",
"fr": "Lawin est le gagnant!",
"it": "Lawin è il vincitore!",
"ja": "ラウィンが勝者です!",
"ko": "라윈이 우승자입니다!",
"pl": "Lawin jest zwycięzcą!",
"pt-BR": "Lawin é o vencedor!",
"ru": "Лавин победитель!",
"tr": "Kazanan Lawin!",
"zh-CN": "Lawin 是赢家!",
"zh-Hant": "Lawin 是贏家!"
},
"tournament_display_id": "lawinserver_cup", "tournament_display_id": "lawinserver_cup",
"highlight_color": "F7FF00", "highlight_color": "F7FF00",
"schedule_info": "Oct 16th 2018", "schedule_info": {
"ar": "١٦ أكتوبر ٢٠١٨",
"de": "16. Okt. 2018",
"en": "Oct 16, 2018",
"es": "16 oct. 2018",
"es-419": "16 oct. 2018",
"fr": "16 oct. 2018",
"it": "16 ott 2018",
"ja": "2018年10月16日",
"ko": "2018년 10월 16일",
"pl": "16 paź 2018",
"pt-BR": "16 de out. de 2018",
"ru": "16 окт. 2018 г.",
"tr": "16 Eki 2018",
"zh-CN": "2018年10月16日",
"zh-Hant": "2018年10月16日"
},
"primary_color": "FFFFFF", "primary_color": "FFFFFF",
"flavor_description": "Have a phenomenal gaming experience!", "flavor_description": {
"ar": "استمتع بتجربة لعب رائعة!",
"de": "Genießt ein phänomenales Spielerlebnis!",
"en": "Have a phenomenal gaming experience!",
"es": "¡Disfruta de una experiencia de juego fenomenal!",
"es-419": "¡Ten una experiencia de juego espectacular!",
"fr": "Profitez d'une expérience de jeu incroyable !",
"it": "Goditi un'esperienza di gioco fenomenale!",
"ja": "驚きの体験をしよう!",
"ko": "환상적인 게임 경험을 즐기세요!",
"pl": "Życzymy fenomenalnych wrażeń z gry!",
"pt-BR": "Tenha uma experiência de jogo fenomenal!",
"ru": "Наслаждайтесь невероятными игровыми впечатлениями!",
"tr": "Muhteşem bir oyun deneyimi yaşamanı dileriz!"
},
"poster_front_image": "https://fortnite-public-service-prod11.ol.epicgames.com/images/poster_front.png", "poster_front_image": "https://fortnite-public-service-prod11.ol.epicgames.com/images/poster_front.png",
"short_format_title": "", "short_format_title": "",
"title_line_2": "Solo", "title_line_2": {
"title_line_1": "LawinServer Cup", "ar": "فردي",
"de": "Solo",
"en": "Solo",
"es": "En solitario",
"es-419": "En solitario",
"fr": "Solo",
"it": "Singolo",
"ja": "ソロ",
"ko": "솔로",
"pl": "Solo",
"pt-BR": "Solo",
"ru": "Одиночки",
"tr": "Tekli",
"zh-CN": "Solo",
"zh-Hant": "Solo"
},
"title_line_1": {
"ar": "كأس LawinServer",
"de": "LawinServer-Pokal",
"en": "LawinServer Cup",
"es": "Copa de LawinServer",
"es-419": "Copa de LawinServer",
"fr": "Coupe de LawinServer",
"it": "Coppa di LawinServer",
"ja": "LawinServerカップ",
"ko": "LawinServer컵",
"pl": "Puchar LawinServera",
"pt-BR": "Copa do LawinServer",
"ru": "Кубок LawinServera",
"tr": "LawinServer Kupası",
"zh-CN": "LawinServer杯",
"zh-Hant": "LawinServer盃"
},
"shadow_color": "000F4A", "shadow_color": "000F4A",
"details_description": "LAWINSERVER CUP", "details_description": {
"ar": "كأس LAWINSERVER",
"de": "LAWINSERVER-POKAL",
"en": "LAWINSERVER CUP",
"es": "COPA DE LAWINSERVER",
"es-419": "COPA DE LAWINSERVER",
"fr": "COUPE DE LAWINSERVER",
"it": "COPPA DI LAWINSERVER",
"ja": "LAWINSERVERカップ",
"ko": "LAWINSERVER컵",
"pl": "PUCHAR LAWINSERVERA",
"pt-BR": "COPA DO LAWINSERVER",
"ru": "КУБОК LAWINSERVERA",
"tr": "LAWINSERVER KUPASI",
"zh-CN": "LAWINSERVER杯",
"zh-Hant": "LAWINSERVER盃"
},
"background_left_color": "0076C3", "background_left_color": "0076C3",
"long_format_title": "", "long_format_title": "",
"poster_fade_color": "0076C3", "poster_fade_color": "0076C3",
@@ -1402,7 +1542,23 @@
"hidden": false, "hidden": false,
"_type": "CommonUI Simple Message Base", "_type": "CommonUI Simple Message Base",
"title": "LawinServer", "title": "LawinServer",
"body": "Server created by Lawin (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ", "body": {
"ar": "الخادم تم إنشاؤه بواسطة Lawin (تويتر: @lawin_010)\nديسكورد: https://discord.gg/KJ8UaHZ",
"de": "Server erstellt von Lawin (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"en": "Server created by Lawin (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"es": "Servidor creado por Lawin (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"es-419": "Servidor creado por Lawin (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"fr": "Serveur créé par Lawin (Twitter : @lawin_010)\nDiscord : https://discord.gg/KJ8UaHZ",
"it": "Server creato da Lawin (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"ja": "Lawin によって作成されたサーバー (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"ko": "Lawin이 만든 서버 (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"pl": "Serwer stworzony przez Lawina (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"pt-BR": "Servidor criado por Lawin (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"ru": "Сервер создан Lawin'ом (Твиттер: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"tr": "Lawin tarafından oluşturulan sunucu (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"zh-CN": "由 Lawin 创建的服务器 (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"zh-Hant": "由 Lawin 創建的伺服器 (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ"
},
"spotlight": true "spotlight": true
} }
] ]
@@ -1427,7 +1583,23 @@
"hidden": false, "hidden": false,
"_type": "CommonUI Emergency Notice Base", "_type": "CommonUI Emergency Notice Base",
"title": "LawinServer", "title": "LawinServer",
"body": "Server created by Lawin (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ" "body": {
"ar": "الخادم تم إنشاؤه بواسطة Lawin (تويتر: @lawin_010)\nديسكورد: https://discord.gg/KJ8UaHZ",
"de": "Server erstellt von Lawin (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"en": "Server created by Lawin (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"es": "Servidor creado por Lawin (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"es-419": "Servidor creado por Lawin (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"fr": "Serveur créé par Lawin (Twitter : @lawin_010)\nDiscord : https://discord.gg/KJ8UaHZ",
"it": "Server creato da Lawin (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"ja": "Lawin によって作成されたサーバー (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"ko": "Lawin이 만든 서버 (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"pl": "Serwer stworzony przez Lawina (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"pt-BR": "Servidor criado por Lawin (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"ru": "Сервер создан Lawin'ом (Твиттер: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"tr": "Lawin tarafından oluşturulan sunucu (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"zh-CN": "由 Lawin 创建的服务器 (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ",
"zh-Hant": "由 Lawin 創建的伺服器 (Twitter: @lawin_010)\nDiscord: https://discord.gg/KJ8UaHZ"
}
} }
] ]
}, },
@@ -1478,68 +1650,40 @@
"_locale": "en-US" "_locale": "en-US"
}, },
"radioStations": { "radioStations": {
"jcr:isCheckedOut": true,
"_title": "Radio Stations", "_title": "Radio Stations",
"radioStationList": { "radioStationList": {
"_type": "RadioStationList", "_type": "RadioStationList",
"stations": [ "stations": [
{ {
"resourceID": "eaIPyhOJafbnZUIYnZ", "resourceID": "DGeVaWdcXtfpbAaP",
"gameplayTagDenylist": [ "stationImage": "https://fortnite-public-service-prod11.ol.epicgames.com/images/lawinpfp.png",
"*UGC*",
"*Creative*"
],
"stationImage": "https://cdn2.unrealengine.com/s15-radio-rl-rockroyale-256x256-256x256-c2b19d746f09.png",
"_type": "RadioStationItem", "_type": "RadioStationItem",
"title": "Rock & Royale" "title": {
}, "ar": "الحفل الملكي",
{ "de": "Party Royale",
"resourceID": "AxraiOXbAdcOPnthxV", "en": "Party Royale",
"gameplayTagDenylist": [ "es": "Fiesta magistral",
"*UGC*", "es-419": "Fiesta campal",
"*Creative*" "fr": "Fête royale",
], "it": "Party Reale",
"stationImage": "https://cdn2.unrealengine.com/s13-radio-underground-radio-256x256-256x256-12ec3d7367c5.png", "ja": "パーティーロイヤル",
"_type": "RadioStationItem", "ko": "파티로얄",
"title": "Radio Underground" "pl": "Królewska Impreza",
}, "pt-BR": "Festa Royale",
{ "ru": "Королевская вечеринка",
"resourceID": "QWGQAynCdixzoLIdJl", "tr": ılgın Parti",
"stationImage": "https://cdn2.unrealengine.com/s13-radio-party-royale-256x256-256x256-41b6d427e012.png", "zh-CN": "空降派对",
"_type": "RadioStationItem", "zh-Hant": "空降派對"
"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"
} }
] ]
} },
"_noIndex": false,
"jcr:baseVersion": "a7ca237317f1e748304396-dfe2-49cf-afce-a4c7033b31d0",
"_activeDate": "2020-10-27T18:56:00.437Z",
"lastModified": "2021-03-29T02:37:30.879Z",
"_locale": "en-US"
}, },
"scoringrulesinformation": { "scoringrulesinformation": {
"scoring_rules_info": { "scoring_rules_info": {
@@ -1937,18 +2081,18 @@
"tr": "LavinServer'a Hoş Geldiniz!" "tr": "LavinServer'a Hoş Geldiniz!"
}, },
"body": { "body": {
"ar": "استمتع بتجربة لعب استثنائية!", "ar": "استمتع بتجربة لعب رائعة!",
"de": "Genießt ein phänomenales Spielerlebnis!",
"en": "Have a phenomenal gaming experience!", "en": "Have a phenomenal gaming experience!",
"de": "Wünsche allen ein wunderbares Spielerlebnis!", "es": "¡Disfruta de una experiencia de juego fenomenal!",
"es": "¡Que disfrutes de tu experiencia de videojuegos!",
"es-419": "¡Ten una experiencia de juego espectacular!", "es-419": "¡Ten una experiencia de juego espectacular!",
"fr": "Un bon jeu à toutes et à tous !", "fr": "Profitez d'une expérience de jeu incroyable !",
"it": "Ti auguriamo un'esperienza di gioco fenomenale!", "it": "Goditi un'esperienza di gioco fenomenale!",
"ja": "驚きの体験をしよう!", "ja": "驚きの体験をしよう!",
"ko": "게임에서 환상적인 경험을 해보세요!", "ko": "환상적인 게임 경험을 즐기세요!",
"pl": "Życzymy fenomenalnej gry!", "pl": "Życzymy fenomenalnych wrażeń z gry!",
"pt-BR": "Tenha uma experiência de jogo fenomenal!", "pt-BR": "Tenha uma experiência de jogo fenomenal!",
"ru": "Желаю невероятно приятной игры!", "ru": "Наслаждайтесь невероятными игровыми впечатлениями!",
"tr": "Muhteşem bir oyun deneyimi yaşamanı dileriz!" "tr": "Muhteşem bir oyun deneyimi yaşamanı dileriz!"
}, },
"offerAction": "ShowOfferDetails", "offerAction": "ShowOfferDetails",
@@ -1969,7 +2113,23 @@
"hidden": false, "hidden": false,
"_type": "CommonUI Simple Message Base", "_type": "CommonUI Simple Message Base",
"adspace": "DISCORD!", "adspace": "DISCORD!",
"title": "Join our discord server!", "title": {
"ar": "انضم إلى خادم Discord الخاص بنا!",
"de": "Tritt unserem Discord-Server bei!",
"en": "Join our Discord server!",
"es": "Únete a nuestro servidor de Discord!",
"es-419": "¡Únete a nuestro servidor de Discord!",
"fr": "Rejoins notre serveur Discord!",
"it": "Unisciti al nostro server Discord!",
"ja": "私たちのDiscordサーバーに参加してください",
"ko": "우리의 Discord 서버에 가입하세요!",
"pl": "Dołącz do naszego serwera Discord!",
"pt-BR": "Junte-se ao nosso servidor Discord!",
"ru": "Присоединяйтесь к нашему серверу Discord!",
"tr": "Discord sunucumuza katıl!",
"zh-CN": "加入我们的Discord服务器",
"zh-Hant": "加入我們的Discord伺服器"
},
"body": "https://discord.gg/KJ8UaHZ", "body": "https://discord.gg/KJ8UaHZ",
"spotlight": false "spotlight": false
}, },
@@ -1979,7 +2139,21 @@
"_type": "CommonUI Simple Message Base", "_type": "CommonUI Simple Message Base",
"adspace": "ENJOY!", "adspace": "ENJOY!",
"title": "LawinServer", "title": "LawinServer",
"body": "Enjoy LawinServer!", "body": {
"ar": "استمتع بتجربة لعب رائعة!",
"de": "Genießt ein phänomenales Spielerlebnis!",
"en": "Have a phenomenal gaming experience!",
"es": "¡Disfruta de una experiencia de juego fenomenal!",
"es-419": "¡Ten una experiencia de juego espectacular!",
"fr": "Profitez d'une expérience de jeu incroyable !",
"it": "Goditi un'esperienza di gioco fenomenale!",
"ja": "驚きの体験をしよう!",
"ko": "환상적인 게임 경험을 즐기세요!",
"pl": "Życzymy fenomenalnych wrażeń z gry!",
"pt-BR": "Tenha uma experiência de jogo fenomenal!",
"ru": "Наслаждайтесь невероятными игровыми впечатлениями!",
"tr": "Muhteşem bir oyun deneyimi yaşamanı dileriz!"
},
"spotlight": false "spotlight": false
} }
] ]
@@ -2020,18 +2194,18 @@
"tr": "LavinServer'a Hoş Geldiniz!" "tr": "LavinServer'a Hoş Geldiniz!"
}, },
"body": { "body": {
"ar": "استمتع بتجربة لعب استثنائية!", "ar": "استمتع بتجربة لعب رائعة!",
"de": "Genießt ein phänomenales Spielerlebnis!",
"en": "Have a phenomenal gaming experience!", "en": "Have a phenomenal gaming experience!",
"de": "Wünsche allen ein wunderbares Spielerlebnis!", "es": "¡Disfruta de una experiencia de juego fenomenal!",
"es": "¡Que disfrutes de tu experiencia de videojuegos!",
"es-419": "¡Ten una experiencia de juego espectacular!", "es-419": "¡Ten una experiencia de juego espectacular!",
"fr": "Un bon jeu à toutes et à tous !", "fr": "Profitez d'une expérience de jeu incroyable !",
"it": "Ti auguriamo un'esperienza di gioco fenomenale!", "it": "Goditi un'esperienza di gioco fenomenale!",
"ja": "驚きの体験をしよう!", "ja": "驚きの体験をしよう!",
"ko": "게임에서 환상적인 경험을 해보세요!", "ko": "환상적인 게임 경험을 즐기세요!",
"pl": "Życzymy fenomenalnej gry!", "pl": "Życzymy fenomenalnych wrażeń z gry!",
"pt-BR": "Tenha uma experiência de jogo fenomenal!", "pt-BR": "Tenha uma experiência de jogo fenomenal!",
"ru": "Желаю невероятно приятной игры!", "ru": "Наслаждайтесь невероятными игровыми впечатлениями!",
"tr": "Muhteşem bir oyun deneyimi yaşamanı dileriz!" "tr": "Muhteşem bir oyun deneyimi yaşamanı dileriz!"
}, },
"offerAction": "ShowOfferDetails", "offerAction": "ShowOfferDetails",
@@ -2089,7 +2263,23 @@
"hidden": false, "hidden": false,
"_type": "CommonUI Simple Message Base", "_type": "CommonUI Simple Message Base",
"adspace": "DISCORD!", "adspace": "DISCORD!",
"title": "Join our discord server!", "title": {
"ar": "انضم إلى خادم Discord الخاص بنا!",
"de": "Tritt unserem Discord-Server bei!",
"en": "Join our Discord server!",
"es": "Únete a nuestro servidor de Discord!",
"es-419": "¡Únete a nuestro servidor de Discord!",
"fr": "Rejoins notre serveur Discord!",
"it": "Unisciti al nostro server Discord!",
"ja": "私たちのDiscordサーバーに参加してください",
"ko": "우리의 Discord 서버에 가입하세요!",
"pl": "Dołącz do naszego serwera Discord!",
"pt-BR": "Junte-se ao nosso servidor Discord!",
"ru": "Присоединяйтесь к нашему серверу Discord!",
"tr": "Discord sunucumuza katıl!",
"zh-CN": "加入我们的Discord服务器",
"zh-Hant": "加入我們的Discord伺服器"
},
"body": "https://discord.gg/KJ8UaHZ", "body": "https://discord.gg/KJ8UaHZ",
"spotlight": false "spotlight": false
}, },
@@ -2099,7 +2289,21 @@
"_type": "CommonUI Simple Message Base", "_type": "CommonUI Simple Message Base",
"adspace": "ENJOY!", "adspace": "ENJOY!",
"title": "LawinServer", "title": "LawinServer",
"body": "Enjoy LawinServer!", "body": {
"ar": "استمتع بتجربة لعب رائعة!",
"de": "Genießt ein phänomenales Spielerlebnis!",
"en": "Have a phenomenal gaming experience!",
"es": "¡Disfruta de una experiencia de juego fenomenal!",
"es-419": "¡Ten una experiencia de juego espectacular!",
"fr": "Profitez d'une expérience de jeu incroyable !",
"it": "Goditi un'esperienza di gioco fenomenale!",
"ja": "驚きの体験をしよう!",
"ko": "환상적인 게임 경험을 즐기세요!",
"pl": "Życzymy fenomenalnych wrażeń z gry!",
"pt-BR": "Tenha uma experiência de jogo fenomenal!",
"ru": "Наслаждайтесь невероятными игровыми впечатлениями!",
"tr": "Muhteşem bir oyun deneyimi yaşamanı dileriz!"
},
"spotlight": false "spotlight": false
} }
] ]

File diff suppressed because it is too large Load Diff

View File

@@ -8,23 +8,68 @@ express.get("/content/api/pages/fortnite-game/spark-tracks", async (req, res) =>
res.json(sparkTracks) res.json(sparkTracks)
}) })
express.get("/content/api/pages/fortnite-game/radio-stations", async (req, res) => {
res.json({
"_title": "Radio Stations",
"radioStationList": {
"_type": "RadioStationList",
"stations": [
{
"resourceID": "QWGQAynCdixzoLIdJl",
"stationImage": "https://fortnite-public-service-prod11.ol.epicgames.com/images/lawinpfp.png",
"_type": "RadioStationItem",
"title": {
"ar": "الحفل الملكي",
"de": "Party Royale",
"en": "Party Royale",
"es": "Fiesta magistral",
"es-419": "Fiesta campal",
"fr": "Fête royale",
"it": "Party Reale",
"ja": "パーティーロイヤル",
"ko": "파티로얄",
"pl": "Królewska Impreza",
"pt-BR": "Festa Royale",
"ru": "Королевская вечеринка",
"tr": ılgın Parti",
"zh-CN": "空降派对",
"zh-Hant": "空降派對"
}
}
]
},
"_noIndex": false,
"_activeDate": "2024-06-13T10:00:00.000Z",
"lastModified": "2024-06-12T20:12:56.271Z",
"_locale": "en-US",
"_templateName": "FortniteGameRadioStations",
"_suggestedPrefetch": []
})
})
express.get("/content/api/pages/*", async (req, res) => { express.get("/content/api/pages/*", async (req, res) => {
const contentpages = functions.getContentPages(req); const contentpages = functions.getContentPages(req);
res.json(contentpages) res.json(contentpages)
}) })
express.post("/api/v1/fortnite-br/surfaces/*/target", async (req, res) => { express.post("/api/v1/fortnite-br/*/target", async (req, res) => {
const motd = JSON.parse(JSON.stringify(require("./../responses/Athena/motd.json"))); const motd = JSON.parse(JSON.stringify(require("./../responses/Athena/motd.json")));
const fields = ["title", "body", "TeaserTitle", "FullScreenTitle", "FullScreenBody"]; var language = req.body.language || req.body.parameters.language;
functions.chooseTranslationsInJSON(motd, language)
try { if (req.body.hasOwnProperty("tags")) {
motd.contentItems.forEach(item => { motd.contentItems.forEach(item => {
fields.forEach(field => { item.placements = [];
item.contentFields[field] = item.contentFields[field][req.body.language]; req.body.tags.forEach(tag => {
item.placements.push({
"trackingId": "lawinstrackingidlol",
"tag": tag,
"position": 0
})
}) })
}) })
} catch (err) {} }
res.json(motd) res.json(motd)
}) })

View File

@@ -54,4 +54,25 @@ express.get("/links/api/fn/mnemonic/*", async (req, res) => {
} }
}) })
express.post("/api/v1/links/lock-status/:accountId/check", async (req, res) => {
var response = {
"results": [],
"hasMore": false
};
if (req.body.linkCodes) {
for (var linkCode in req.body.linkCodes) {
response.results.push({
"playerId": req.params.accountId,
"linkCode": req.body.linkCodes[linkCode],
"lockStatus": "UNLOCKED",
"lockStatusReason": "NONE",
"isVisible": true
})
}
}
res.json(response);
})
module.exports = express; module.exports = express;

View File

@@ -155,15 +155,20 @@ function getTheater(req) {
var Season = "Season" + memory.season; var Season = "Season" + memory.season;
try { try {
if (memory.build >= 30.20) { // Those changes have to be made before the 15.30+ ones
theater = theater.replace(/\/Game\/World\/ZoneThemes/ig, "/STW_Zones/World/ZoneThemes");
theater = theater.replace(/\"DataTable\'\/Game\//ig, "\"/Script/Engine.DataTable\'\/Game\/");
}
if (memory.build >= 15.30) { if (memory.build >= 15.30) {
theater = theater.replace(/\/Game\//ig, "\/SaveTheWorld\/"); theater = theater.replace(/\/Game\//ig, "\/SaveTheWorld\/");
theater = theater.replace(/\"DataTable\'\/SaveTheWorld\//ig, "\"DataTable\'\/Game\/"); theater = theater.replace(/\"DataTable\'\/SaveTheWorld\//ig, "\"DataTable\'\/Game\/"); // For those versions keep /Game/ for DataTables
} }
var date = new Date(); var date = new Date();
var hour = date.getHours(); var hour = date.getHours();
// Set the 24-hour StW mission refresh date for version season 9 and above // Set the 24-hour StW mission refresh date for season 9 and above
if (memory.season >= 9) { if (memory.season >= 9) {
date.setHours(23, 59, 59, 999); date.setHours(23, 59, 59, 999);
} else { } else {
@@ -198,6 +203,24 @@ function getTheater(req) {
return theater; return theater;
} }
function chooseTranslationsInJSON(obj, targetLanguage = "en") {
if (Array.isArray(obj)) {
for (var i = 0; i < obj.length; i++) {
chooseTranslationsInJSON(obj[i], targetLanguage);
}
} else if (typeof obj === "object" && obj !== null) {
for (const key in obj) {
if (typeof obj[key] === "object" && obj[key] !== null) {
if (obj[key][targetLanguage] || obj[key]["en"]) {
obj[key] = obj[key][targetLanguage] || obj[key]["en"];
} else {
chooseTranslationsInJSON(obj[key], targetLanguage);
}
}
}
}
}
function getContentPages(req) { function getContentPages(req) {
const memory = GetVersionInfo(req); const memory = GetVersionInfo(req);
@@ -213,17 +236,9 @@ function getContentPages(req) {
} }
} }
const modes = ["saveTheWorldUnowned", "battleRoyale", "creative", "saveTheWorld"]; chooseTranslationsInJSON(contentpages, Language)
const news = ["savetheworldnews", "battleroyalenews"]
const motdnews = ["battleroyalenews", "battleroyalenewsv2"]
try {
modes.forEach(mode => {
contentpages.subgameselectdata[mode].message.title = contentpages.subgameselectdata[mode].message.title[Language]
contentpages.subgameselectdata[mode].message.body = contentpages.subgameselectdata[mode].message.body[Language]
})
} catch (err) {}
const news = ["savetheworldnews", "battleroyalenews"];
try { try {
if (memory.build < 5.30) { if (memory.build < 5.30) {
news.forEach(mode => { news.forEach(mode => {
@@ -233,67 +248,90 @@ function getContentPages(req) {
} }
} catch (err) {} } catch (err) {}
try {
motdnews.forEach(news => {
contentpages[news].news.motds.forEach(motd => {
motd.title = motd.title[Language];
motd.body = motd.body[Language];
})
})
} catch (err) {}
try { try {
const backgrounds = contentpages.dynamicbackgrounds.backgrounds.backgrounds; const backgrounds = contentpages.dynamicbackgrounds.backgrounds.backgrounds;
const season = `season${memory.season}${memory.season >= 21 ? "00" : ""}`; const season = `season${memory.season}${memory.season >= 21 ? "00" : ""}`;
backgrounds[0].stage = season; backgrounds[0].stage = season;
backgrounds[1].stage = season; backgrounds[1].stage = season;
if (memory.season == 10) { switch (memory.season) {
backgrounds[0].stage = "seasonx";
backgrounds[1].stage = "seasonx"; case 10:
} else if (memory.build == 11.31 || memory.build == 11.40) { backgrounds[0].stage = "seasonx";
backgrounds[0].stage = "Winter19"; backgrounds[1].stage = "seasonx";
backgrounds[1].stage = "Winter19"; break;
} else if (memory.build == 19.01) {
backgrounds[0].stage = "winter2021"; case 20:
backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/t-bp19-lobby-xmas-2048x1024-f85d2684b4af.png"; backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/t-bp20-lobby-2048x1024-d89eb522746c.png";
contentpages.subgameinfo.battleroyale.image = "https://cdn2.unrealengine.com/19br-wf-subgame-select-512x1024-16d8bb0f218f.jpg"; break;
contentpages.specialoffervideo.bSpecialOfferEnabled = "true";
} else if (memory.season == 20) { case 21:
backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/t-bp20-lobby-2048x1024-d89eb522746c.png"; backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/s21-lobby-background-2048x1024-2e7112b25dc3.jpg";
if (memory.build == 20.40) { break;
case 22:
backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/t-bp22-lobby-square-2048x2048-2048x2048-e4e90c6e8018.jpg";
break;
case 23:
backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/t-bp23-lobby-2048x1024-2048x1024-26f2c1b27f63.png";
break;
case 24:
backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/t-ch4s2-bp-lobby-4096x2048-edde08d15f7e.jpg";
break;
case 25:
backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/s25-lobby-4k-4096x2048-4a832928e11f.jpg";
backgrounds[1].backgroundimage = "https://cdn2.unrealengine.com/fn-shop-ch4s3-04-1920x1080-785ce1d90213.png";
break;
case 27:
backgrounds[0].stage = "rufus";
break;
default:
backgrounds[0].stage = "defaultnotris";
backgrounds[0].backgroundimage = "https://fortnite-public-service-prod11.ol.epicgames.com/images/lightlobbybg.png";
}
switch (memory.build) {
case 11.31:
case 11.40:
backgrounds[0].stage = "Winter19";
backgrounds[1].stage = "Winter19";
break;
case 19.01:
backgrounds[0].stage = "winter2021";
backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/t-bp19-lobby-xmas-2048x1024-f85d2684b4af.png";
contentpages.subgameinfo.battleroyale.image = "https://cdn2.unrealengine.com/19br-wf-subgame-select-512x1024-16d8bb0f218f.jpg";
contentpages.specialoffervideo.bSpecialOfferEnabled = "true";
break;
case 20.40:
backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/t-bp20-40-armadillo-glowup-lobby-2048x2048-2048x2048-3b83b887cc7f.jpg"; backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/t-bp20-40-armadillo-glowup-lobby-2048x2048-2048x2048-3b83b887cc7f.jpg";
} break;
} else if (memory.season == 21) {
backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/s21-lobby-background-2048x1024-2e7112b25dc3.jpg"; case 21.10:
if (memory.build == 21.10) {
backgrounds[0].stage = "season2100"; backgrounds[0].stage = "season2100";
} break;
if (memory.build == 21.30) {
case 21.30:
backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/nss-lobbybackground-2048x1024-f74a14565061.jpg"; backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/nss-lobbybackground-2048x1024-f74a14565061.jpg";
backgrounds[0].stage = "season2130"; backgrounds[0].stage = "season2130";
} break;
} else if (memory.season == 22) {
backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/t-bp22-lobby-square-2048x2048-2048x2048-e4e90c6e8018.jpg"; case 23.10:
} else if (memory.season == 23) {
backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/t-bp23-lobby-2048x1024-2048x1024-26f2c1b27f63.png";
if (memory.build == 23.10) {
backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/t-bp23-winterfest-lobby-square-2048x2048-2048x2048-277a476e5ca6.png"; backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/t-bp23-winterfest-lobby-square-2048x2048-2048x2048-277a476e5ca6.png";
contentpages.specialoffervideo.bSpecialOfferEnabled = "true"; contentpages.specialoffervideo.bSpecialOfferEnabled = "true";
} break;
} else if (memory.season == 24) {
backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/t-ch4s2-bp-lobby-4096x2048-edde08d15f7e.jpg"; case 25.11:
} else if (memory.season == 25) {
backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/s25-lobby-4k-4096x2048-4a832928e11f.jpg";
backgrounds[1].backgroundimage = "https://cdn2.unrealengine.com/fn-shop-ch4s3-04-1920x1080-785ce1d90213.png";
if (memory.build == 25.11) {
backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/t-s25-14dos-lobby-4096x2048-2be24969eee3.jpg"; backgrounds[0].backgroundimage = "https://cdn2.unrealengine.com/t-s25-14dos-lobby-4096x2048-2be24969eee3.jpg";
}
} else if (memory.season == 27) {
backgrounds[0].stage = "rufus";
} else {
backgrounds[0].stage = "defaultnotris";
backgrounds[0].backgroundimage = "https://fortnite-public-service-prod11.ol.epicgames.com/images/lightlobbybg.png";
} }
} catch (err) {} } catch (err) {}
@@ -334,7 +372,7 @@ function MakeSurvivorAttributes(templateId) {
portraitFactor = SurvivorAttributes.managerSynergy; portraitFactor = SurvivorAttributes.managerSynergy;
} }
var gender = SurvivorAttributes.gender var gender = SurvivorAttributes.gender;
var randomNumber = Math.floor(Math.random() * SurvivorData.portraits[portraitFactor][gender].length); var randomNumber = Math.floor(Math.random() * SurvivorData.portraits[portraitFactor][gender].length);
SurvivorAttributes.portrait = SurvivorData.portraits[portraitFactor][gender][randomNumber]; SurvivorAttributes.portrait = SurvivorData.portraits[portraitFactor][gender][randomNumber];
} }
@@ -369,6 +407,7 @@ module.exports = {
GetVersionInfo, GetVersionInfo,
getItemShop, getItemShop,
getTheater, getTheater,
chooseTranslationsInJSON,
getContentPages, getContentPages,
MakeSurvivorAttributes, MakeSurvivorAttributes,
MakeID, MakeID,

View File

@@ -47,20 +47,20 @@ express.get("/eulatracking/api/shared/agreements/fn*", async (req, res) => {
express.get("/fortnite/api/game/v2/friendcodes/*/epic", async (req, res) => { express.get("/fortnite/api/game/v2/friendcodes/*/epic", async (req, res) => {
res.json([{ res.json([{
"codeId": "L4WINS3RV3R", "codeId": "L4WINS3RV3R",
"codeType": "CodeToken:FounderFriendInvite", "codeType": "CodeToken:FounderFriendInvite",
"dateCreated": "2024-04-02T21:37:00.420Z" "dateCreated": "2024-04-02T21:37:00.420Z"
}, },
{ {
"codeId": "playeereq", "codeId": "playeereq",
"codeType": "CodeToken:FounderFriendInvite_XBOX", "codeType": "CodeToken:FounderFriendInvite_XBOX",
"dateCreated": "2024-04-02T21:37:00.420Z" "dateCreated": "2024-04-02T21:37:00.420Z"
}, },
{ {
"codeId": "lawinscodelol", "codeId": "lawinscodelol",
"codeType": "CodeToken:MobileInvite", "codeType": "CodeToken:MobileInvite",
"dateCreated": "2024-04-02T21:37:00.420Z" "dateCreated": "2024-04-02T21:37:00.420Z"
}]) }])
}) })
express.get("/launcher/api/public/distributionpoints/", async (req, res) => { express.get("/launcher/api/public/distributionpoints/", async (req, res) => {
@@ -180,12 +180,12 @@ express.get("/fortnite/api/stats/accountId/:accountId/bulk/window/alltime", asyn
express.get("/d98eeaac-2bfa-4bf4-8a59-bdc95469c693", async (req, res) => { express.get("/d98eeaac-2bfa-4bf4-8a59-bdc95469c693", async (req, res) => {
res.json({ res.json({
"playlist": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPE1QRCB4bWxucz0idXJuOm1wZWc6ZGFzaDpzY2hlbWE6bXBkOjIwMTEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4c2k6c2NoZW1hTG9jYXRpb249InVybjptcGVnOkRBU0g6c2NoZW1hOk1QRDoyMDExIGh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pdHRmL1B1YmxpY2x5QXZhaWxhYmxlU3RhbmRhcmRzL01QRUctREFTSF9zY2hlbWFfZmlsZXMvREFTSC1NUEQueHNkIiBwcm9maWxlcz0idXJuOm1wZWc6ZGFzaDpwcm9maWxlOmlzb2ZmLWxpdmU6MjAxMSIgdHlwZT0ic3RhdGljIiBtZWRpYVByZXNlbnRhdGlvbkR1cmF0aW9uPSJQVDMwLjIxM1MiIG1heFNlZ21lbnREdXJhdGlvbj0iUFQyLjAwMFMiIG1pbkJ1ZmZlclRpbWU9IlBUNC4xMDZTIj4KICA8QmFzZVVSTD5odHRwczovL2ZvcnRuaXRlLXB1YmxpYy1zZXJ2aWNlLXByb2QxMS5vbC5lcGljZ2FtZXMuY29tL2F1ZGlvL0phbVRyYWNrcy9PR1JlbWl4LzwvQmFzZVVSTD4KICA8UHJvZ3JhbUluZm9ybWF0aW9uPjwvUHJvZ3JhbUluZm9ybWF0aW9uPgogIDxQZXJpb2QgaWQ9IjAiIHN0YXJ0PSJQVDBTIj4KICAgIDxBZGFwdGF0aW9uU2V0IGlkPSIwIiBjb250ZW50VHlwZT0iYXVkaW8iIHN0YXJ0V2l0aFNBUD0iMSIgc2VnbWVudEFsaWdubWVudD0idHJ1ZSIgYml0c3RyZWFtU3dpdGNoaW5nPSJ0cnVlIj4KICAgICAgPFJlcHJlc2VudGF0aW9uIGlkPSIwIiBhdWRpb1NhbXBsaW5nUmF0ZT0iNDgwMDAiIGJhbmR3aWR0aD0iMTI4MDAwIiBtaW1lVHlwZT0iYXVkaW8vbXA0IiBjb2RlY3M9Im1wNGEuNDAuMiI+CiAgICAgICAgPFNlZ21lbnRUZW1wbGF0ZSBkdXJhdGlvbj0iMjAwMDAwMCIgdGltZXNjYWxlPSIxMDAwMDAwIiBpbml0aWFsaXphdGlvbj0iaW5pdF8kUmVwcmVzZW50YXRpb25JRCQubXA0IiBtZWRpYT0ic2VnbWVudF8kUmVwcmVzZW50YXRpb25JRCRfJE51bWJlciQubTRzIiBzdGFydE51bWJlcj0iMSI+PC9TZWdtZW50VGVtcGxhdGU+CiAgICAgICAgPEF1ZGlvQ2hhbm5lbENvbmZpZ3VyYXRpb24gc2NoZW1lSWRVcmk9InVybjptcGVnOmRhc2g6MjMwMDM6MzphdWRpb19jaGFubmVsX2NvbmZpZ3VyYXRpb246MjAxMSIgdmFsdWU9IjIiPjwvQXVkaW9DaGFubmVsQ29uZmlndXJhdGlvbj4KICAgICAgPC9SZXByZXNlbnRhdGlvbj4KICAgIDwvQWRhcHRhdGlvblNldD4KICA8L1BlcmlvZD4KPC9NUEQ+", "playlist": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPE1QRCB4bWxucz0idXJuOm1wZWc6ZGFzaDpzY2hlbWE6bXBkOjIwMTEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4c2k6c2NoZW1hTG9jYXRpb249InVybjptcGVnOkRBU0g6c2NoZW1hOk1QRDoyMDExIGh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pdHRmL1B1YmxpY2x5QXZhaWxhYmxlU3RhbmRhcmRzL01QRUctREFTSF9zY2hlbWFfZmlsZXMvREFTSC1NUEQueHNkIiBwcm9maWxlcz0idXJuOm1wZWc6ZGFzaDpwcm9maWxlOmlzb2ZmLWxpdmU6MjAxMSIgdHlwZT0ic3RhdGljIiBtZWRpYVByZXNlbnRhdGlvbkR1cmF0aW9uPSJQVDMwLjIxM1MiIG1heFNlZ21lbnREdXJhdGlvbj0iUFQyLjAwMFMiIG1pbkJ1ZmZlclRpbWU9IlBUNC4xMDZTIj4KICA8QmFzZVVSTD5odHRwczovL3BpbGdyaW0ucXN0di5vbi5lcGljZ2FtZXMuY29tL3VtbXFVcUNTRlVXZVFmelR2cy9mMjUyOGZhMS01ZjMwLTQyZmYtOGFlNS1hMDNlM2IwMjNhMGEvPC9CYXNlVVJMPgogIDxQcm9ncmFtSW5mb3JtYXRpb24+PC9Qcm9ncmFtSW5mb3JtYXRpb24+CiAgPFBlcmlvZCBpZD0iMCIgc3RhcnQ9IlBUMFMiPgogICAgPEFkYXB0YXRpb25TZXQgaWQ9IjAiIGNvbnRlbnRUeXBlPSJhdWRpbyIgc3RhcnRXaXRoU0FQPSIxIiBzZWdtZW50QWxpZ25tZW50PSJ0cnVlIiBiaXRzdHJlYW1Td2l0Y2hpbmc9InRydWUiPgogICAgICA8UmVwcmVzZW50YXRpb24gaWQ9IjAiIGF1ZGlvU2FtcGxpbmdSYXRlPSI0ODAwMCIgYmFuZHdpZHRoPSIxMjgwMDAiIG1pbWVUeXBlPSJhdWRpby9tcDQiIGNvZGVjcz0ibXA0YS40MC4yIj4KICAgICAgICA8U2VnbWVudFRlbXBsYXRlIGR1cmF0aW9uPSIyMDAwMDAwIiB0aW1lc2NhbGU9IjEwMDAwMDAiIGluaXRpYWxpemF0aW9uPSJpbml0XyRSZXByZXNlbnRhdGlvbklEJC5tcDQiIG1lZGlhPSJzZWdtZW50XyRSZXByZXNlbnRhdGlvbklEJF8kTnVtYmVyJC5tNHMiIHN0YXJ0TnVtYmVyPSIxIj48L1NlZ21lbnRUZW1wbGF0ZT4KICAgICAgICA8QXVkaW9DaGFubmVsQ29uZmlndXJhdGlvbiBzY2hlbWVJZFVyaT0idXJuOm1wZWc6ZGFzaDoyMzAwMzozOmF1ZGlvX2NoYW5uZWxfY29uZmlndXJhdGlvbjoyMDExIiB2YWx1ZT0iMiI+PC9BdWRpb0NoYW5uZWxDb25maWd1cmF0aW9uPgogICAgICA8L1JlcHJlc2VudGF0aW9uPgogICAgPC9BZGFwdGF0aW9uU2V0PgogIDwvUGVyaW9kPgo8L01QRD4=",
"playlistType": "application/dash+xml", "playlistType": "application/dash+xml",
"metadata": { "metadata": {
"assetId": "", "assetId": "",
"baseUrls": [ "baseUrls": [
"https://fortnite-public-service-prod11.ol.epicgames.com/audio/JamTracks/OGRemix/" "https://fortnite-public-service-prod11.ol.epicgames.com/ummqUqCSFUWeQfzTvs/f2528fa1-5f30-42ff-8ae5-a03e3b023a0a/"
], ],
"supportsCaching": true, "supportsCaching": true,
"ucp": "a", "ucp": "a",

View File

@@ -1123,6 +1123,10 @@ express.post("/fortnite/api/game/v2/profile/*/client/ClientQuestLogin", async (r
if (config.Profile.bCompletedSeasonalQuests == true) { if (config.Profile.bCompletedSeasonalQuests == true) {
profile.items[ChallengeBundleID].attributes.num_quests_completed = ChallengeBundle.grantedquestinstanceids.length; profile.items[ChallengeBundleID].attributes.num_quests_completed = ChallengeBundle.grantedquestinstanceids.length;
profile.items[ChallengeBundleID].attributes.num_progress_quests_completed = ChallengeBundle.grantedquestinstanceids.length; profile.items[ChallengeBundleID].attributes.num_progress_quests_completed = ChallengeBundle.grantedquestinstanceids.length;
if ((memory.season == 10 || memory.season == 11) && (ChallengeBundle.templateId.toLowerCase().includes("missionbundle_s10_0") || ChallengeBundle.templateId.toLowerCase() == "challengebundle:missionbundle_s11_stretchgoals2")) {
profile.items[ChallengeBundleID].attributes.level += 1;
}
} }
ApplyProfileChanges.push({ ApplyProfileChanges.push({
@@ -4874,7 +4878,7 @@ express.post("/fortnite/api/game/v2/profile/*/client/AbandonExpedition", async (
} }
} }
// Set the expedition back as availale // Set the expedition back as available
delete profile.items[req.body.expeditionId].attributes.expedition_squad_id delete profile.items[req.body.expeditionId].attributes.expedition_squad_id
delete profile.items[req.body.expeditionId].attributes.expedition_start_time delete profile.items[req.body.expeditionId].attributes.expedition_start_time
delete profile.items[req.body.expeditionId].attributes.expedition_end_time delete profile.items[req.body.expeditionId].attributes.expedition_end_time
@@ -6201,7 +6205,7 @@ express.post("/fortnite/api/game/v2/profile/*/client/PurchaseCatalogEntry", asyn
catalog.storefronts[a].catalogEntries.forEach(function(value, b) { catalog.storefronts[a].catalogEntries.forEach(function(value, b) {
if (value.offerId == req.body.offerId) { if (value.offerId == req.body.offerId) {
catalog.storefronts[a].catalogEntries[b].itemGrants.forEach(function(value, c) { catalog.storefronts[a].catalogEntries[b].itemGrants.forEach(function(value, c) {
const ID = value.templateId; const ID = functions.MakeID();
for (var key in athena.items) { for (var key in athena.items) {
if (value.templateId.toLowerCase() == athena.items[key].templateId.toLowerCase()) { if (value.templateId.toLowerCase() == athena.items[key].templateId.toLowerCase()) {
@@ -6287,6 +6291,66 @@ express.post("/fortnite/api/game/v2/profile/*/client/PurchaseCatalogEntry", asyn
} }
}) })
} }
if (value.name.startsWith("STW")) {
catalog.storefronts[a].catalogEntries.forEach(function(value, b) {
if (value.offerId == req.body.offerId) {
catalog.storefronts[a].catalogEntries[b].itemGrants.forEach(function(value, c) {
const ID = functions.MakeID();
if (Notifications.length == 0) {
Notifications.push({
"type": "CatalogPurchase",
"primary": true,
"lootResult": {
"items": []
}
})
}
var Item = {"templateId": value.templateId, "attributes": {"legacy_alterations": [], "max_level_bonus": 0, "level": 1, "refund_legacy_item": false, "item_seen": false, "alterations": ["", "", "", "", "", ""], "xp": 0, "refundable": false, "alteration_base_rarities": [], "favorite": false}, "quantity": req.body.purchaseQuantity * value.quantity || 1};
if (Item.templateId.toLowerCase().startsWith("worker:")) {
Item.attributes = functions.MakeSurvivorAttributes(Item.templateId);
}
profile.items[ID] = Item;
ApplyProfileChanges.push({
"changeType": "itemAdded",
"itemId": ID,
"item": Item
})
Notifications[0].lootResult.items.push({
"itemType": value.templateId,
"itemGuid": ID,
"itemProfile": "profile0",
"quantity": req.body.purchaseQuantity * value.quantity || 1
})
})
// STW currency spending
if (catalog.storefronts[a].catalogEntries[b].prices[0].currencyType.toLowerCase() == "gameitem") {
for (var key in profile.items) {
if (profile.items[key].templateId.toLowerCase() == catalog.storefronts[a].catalogEntries[b].prices[0].currencySubType.toLowerCase()) {
profile.items[key].quantity -= (catalog.storefronts[a].catalogEntries[b].prices[0].finalPrice) * req.body.purchaseQuantity || 1;
ApplyProfileChanges.push({
"changeType": "itemQuantityChanged",
"itemId": key,
"quantity": profile.items[key].quantity
})
break;
}
}
}
profile.rvn += 1;
profile.commandRevision += 1;
}
})
}
}) })
PurchasedLlama = true; PurchasedLlama = true;
@@ -7092,7 +7156,7 @@ express.post("/fortnite/api/game/v2/profile/*/client/PurchaseCatalogEntry", asyn
catalog.storefronts[a].catalogEntries.forEach(function(value, b) { catalog.storefronts[a].catalogEntries.forEach(function(value, b) {
if (value.offerId == req.body.offerId) { if (value.offerId == req.body.offerId) {
catalog.storefronts[a].catalogEntries[b].itemGrants.forEach(function(value, c) { catalog.storefronts[a].catalogEntries[b].itemGrants.forEach(function(value, c) {
const ID = value.templateId; const ID = functions.MakeID();
for (var key in athena.items) { for (var key in athena.items) {
if (value.templateId.toLowerCase() == athena.items[key].templateId.toLowerCase()) { if (value.templateId.toLowerCase() == athena.items[key].templateId.toLowerCase()) {
@@ -7190,6 +7254,76 @@ express.post("/fortnite/api/game/v2/profile/*/client/PurchaseCatalogEntry", asyn
} }
}) })
} }
if (value.name.startsWith("STW")) {
catalog.storefronts[a].catalogEntries.forEach(function(value, b) {
if (value.offerId == req.body.offerId) {
catalog.storefronts[a].catalogEntries[b].itemGrants.forEach(function(value, c) {
const ID = functions.MakeID();
if (MultiUpdate.length == 0) {
MultiUpdate.push({
"profileRevision": campaign.rvn || 0,
"profileId": "campaign",
"profileChangesBaseRevision": campaign.rvn || 0,
"profileChanges": [],
"profileCommandRevision": campaign.commandRevision || 0,
})
}
if (Notifications.length == 0) {
Notifications.push({
"type": "CatalogPurchase",
"primary": true,
"lootResult": {
"items": []
}
})
}
var Item = {"templateId": value.templateId, "attributes": {"legacy_alterations": [], "max_level_bonus": 0, "level": 1, "refund_legacy_item": false, "item_seen": false, "alterations": ["", "", "", "", "", ""], "xp": 0, "refundable": false, "alteration_base_rarities": [], "favorite": false}, "quantity": req.body.purchaseQuantity * value.quantity || 1};
if (Item.templateId.toLowerCase().startsWith("worker:")) {
Item.attributes = functions.MakeSurvivorAttributes(Item.templateId);
}
campaign.items[ID] = Item;
MultiUpdate[0].profileChanges.push({
"changeType": "itemAdded",
"itemId": ID,
"item": Item
})
Notifications[0].lootResult.items.push({
"itemType": value.templateId,
"itemGuid": ID,
"itemProfile": "campaign",
"quantity": req.body.purchaseQuantity * value.quantity || 1
})
})
// STW currency spending
if (catalog.storefronts[a].catalogEntries[b].prices[0].currencyType.toLowerCase() == "gameitem") {
for (var key in campaign.items) {
if (campaign.items[key].templateId.toLowerCase() == catalog.storefronts[a].catalogEntries[b].prices[0].currencySubType.toLowerCase()) {
campaign.items[key].quantity -= (catalog.storefronts[a].catalogEntries[b].prices[0].finalPrice) * req.body.purchaseQuantity || 1;
MultiUpdate[0].profileChanges.push({
"changeType": "itemQuantityChanged",
"itemId": key,
"quantity": campaign.items[key].quantity
})
break;
}
}
}
profile.rvn += 1;
profile.commandRevision += 1;
}
})
}
}) })
if (AthenaModified == true) { if (AthenaModified == true) {
@@ -7486,39 +7620,14 @@ express.post("/fortnite/api/game/v2/profile/*/client/EquipBattleRoyaleCustomizat
if (req.body.slotName) { if (req.body.slotName) {
switch (req.body.slotName) { switch (req.body.slotName) {
case "Character": case "Character":
profile.stats.attributes.favorite_character = req.body.itemToSlot || "";
StatChanged = true;
break;
case "Backpack": case "Backpack":
profile.stats.attributes.favorite_backpack = req.body.itemToSlot || "";
StatChanged = true;
break;
case "Pickaxe": case "Pickaxe":
profile.stats.attributes.favorite_pickaxe = req.body.itemToSlot || "";
StatChanged = true;
break;
case "Glider": case "Glider":
profile.stats.attributes.favorite_glider = req.body.itemToSlot || "";
StatChanged = true;
break;
case "SkyDiveContrail": case "SkyDiveContrail":
profile.stats.attributes.favorite_skydivecontrail = req.body.itemToSlot || "";
StatChanged = true;
break;
case "MusicPack": case "MusicPack":
profile.stats.attributes.favorite_musicpack = req.body.itemToSlot || "";
StatChanged = true;
break;
case "LoadingScreen": case "LoadingScreen":
profile.stats.attributes.favorite_loadingscreen = req.body.itemToSlot || ""; profile.stats.attributes[`favorite_${req.body.slotName.toLowerCase()}`] = req.body.itemToSlot || "";
StatChanged = true; StatChanged = true;
break; break;
@@ -7538,9 +7647,6 @@ express.post("/fortnite/api/game/v2/profile/*/client/EquipBattleRoyaleCustomizat
switch (Math.sign(indexwithinslot)) { switch (Math.sign(indexwithinslot)) {
case 0: case 0:
profile.stats.attributes.favorite_itemwraps[indexwithinslot] = req.body.itemToSlot || "";
break;
case 1: case 1:
profile.stats.attributes.favorite_itemwraps[indexwithinslot] = req.body.itemToSlot || ""; profile.stats.attributes.favorite_itemwraps[indexwithinslot] = req.body.itemToSlot || "";
break; break;
@@ -7740,17 +7846,30 @@ express.post("/fortnite/api/game/v2/profile/*/client/SetCosmeticLockerSlot", asy
]; ];
if (profile.profileId == "athena") { if (profile.profileId == "athena") {
if (profile.items[req.body.itemToSlot].attributes.variants.length == 0) {
profile.items[req.body.itemToSlot].attributes.variants = req.body.variantUpdates || []; for (var variantUpdate in req.body.variantUpdates) {
var bFound = false;
for (var variant in profile.items[req.body.itemToSlot].attributes.variants) {
if (req.body.variantUpdates[variantUpdate].channel == profile.items[req.body.itemToSlot].attributes.variants[variant].channel) {
profile.items[req.body.itemToSlot].attributes.variants[variant].active = req.body.variantUpdates[variantUpdate].active;
bFound = true;
break;
}
}
if (bFound == false) {
profile.items[req.body.itemToSlot].attributes.variants.push(req.body.variantUpdates[variantUpdate])
}
} }
for (var i in profile.items[req.body.itemToSlot].attributes.variants) { ApplyProfileChanges.push({
try { "changeType": "itemAttrChanged",
if (profile.items[req.body.itemToSlot].attributes.variants[i].channel.toLowerCase() == req.body.variantUpdates[i].channel.toLowerCase()) { "itemId": req.body.itemToSlot,
profile.items[req.body.itemToSlot].attributes.variants[i].active = req.body.variantUpdates[i].active || ""; "attributeName": "variants",
} "attributeValue": profile.items[req.body.itemToSlot].attributes.variants
} catch (err) {} })
}
StatChanged = true;
} }
for (var i in req.body.variantUpdates) { for (var i in req.body.variantUpdates) {
@@ -7767,39 +7886,14 @@ express.post("/fortnite/api/game/v2/profile/*/client/SetCosmeticLockerSlot", asy
if (req.body.category && req.body.lockerItem) { if (req.body.category && req.body.lockerItem) {
switch (req.body.category) { switch (req.body.category) {
case "Character": case "Character":
profile.items[req.body.lockerItem].attributes.locker_slots_data.slots.Character.items = [req.body.itemToSlot || ""];
StatChanged = true;
break;
case "Backpack": case "Backpack":
profile.items[req.body.lockerItem].attributes.locker_slots_data.slots.Backpack.items = [req.body.itemToSlot || ""];
StatChanged = true;
break;
case "Pickaxe": case "Pickaxe":
profile.items[req.body.lockerItem].attributes.locker_slots_data.slots.Pickaxe.items = [req.body.itemToSlot || ""];
StatChanged = true;
break;
case "Glider": case "Glider":
profile.items[req.body.lockerItem].attributes.locker_slots_data.slots.Glider.items = [req.body.itemToSlot || ""];
StatChanged = true;
break;
case "SkyDiveContrail": case "SkyDiveContrail":
profile.items[req.body.lockerItem].attributes.locker_slots_data.slots.SkyDiveContrail.items = [req.body.itemToSlot || ""];
StatChanged = true;
break;
case "MusicPack": case "MusicPack":
profile.items[req.body.lockerItem].attributes.locker_slots_data.slots.MusicPack.items = [req.body.itemToSlot || ""];
StatChanged = true;
break;
case "LoadingScreen": case "LoadingScreen":
profile.items[req.body.lockerItem].attributes.locker_slots_data.slots.LoadingScreen.items = [req.body.itemToSlot || ""]; profile.items[req.body.lockerItem].attributes.locker_slots_data.slots[req.body.category].items = [req.body.itemToSlot || ""];
StatChanged = true; StatChanged = true;
break; break;
@@ -7885,6 +7979,8 @@ express.post("/fortnite/api/game/v2/profile/*/client/PutModularCosmeticLoadout",
var QueryRevision = req.query.rvn || -1; var QueryRevision = req.query.rvn || -1;
var StatChanged = false; var StatChanged = false;
var loadoutData = JSON.parse(req.body.loadoutData);
if (!profile.stats.attributes.hasOwnProperty("loadout_presets")) { if (!profile.stats.attributes.hasOwnProperty("loadout_presets")) {
profile.stats.attributes.loadout_presets = {}; profile.stats.attributes.loadout_presets = {};
@@ -7929,7 +8025,7 @@ express.post("/fortnite/api/game/v2/profile/*/client/PutModularCosmeticLoadout",
try { try {
LoadoutGUID = profile.stats.attributes.loadout_presets[req.body.loadoutType][req.body.presetId]; LoadoutGUID = profile.stats.attributes.loadout_presets[req.body.loadoutType][req.body.presetId];
profile.items[LoadoutGUID].attributes = JSON.parse(req.body.loadoutData); profile.items[LoadoutGUID].attributes = loadoutData;
ApplyProfileChanges.push({ ApplyProfileChanges.push({
"changeType": "itemAttrChanged", "changeType": "itemAttrChanged",
@@ -7942,6 +8038,43 @@ express.post("/fortnite/api/game/v2/profile/*/client/PutModularCosmeticLoadout",
} catch (err) {} } catch (err) {}
// Apply the edit style changes to the item attributes too
for (var slot in loadoutData.slots) {
if (loadoutData.slots[slot].hasOwnProperty("customization_info")) {
for (var item in profile.items) {
if (profile.items[item].templateId.toLowerCase() == loadoutData.slots[slot].equipped_item.toLowerCase()) {
for (var customization in loadoutData.slots[slot].customization_info) {
var bFound = false;
for (var profileCustomization in profile.items[item].attributes.variants) {
if (loadoutData.slots[slot].customization_info[customization].channel_tag == profile.items[item].attributes.variants[profileCustomization].channel) {
profile.items[item].attributes.variants[profileCustomization].active = `${loadoutData.slots[slot].customization_info[customization].variant_tag}.${loadoutData.slots[slot].customization_info[customization].additional_data}`;
bFound = true;
break;
}
}
if (bFound == false) {
profile.items[item].attributes.variants.push({
"channel": loadoutData.slots[slot].customization_info[customization].channel_tag,
"active": `${loadoutData.slots[slot].customization_info[customization].variant_tag}.${loadoutData.slots[slot].customization_info[customization].additional_data}`,
"owned": []
})
}
}
ApplyProfileChanges.push({
"changeType": "itemAttrChanged",
"itemId": item,
"attributeName": "variants",
"attributeValue": profile.items[item].attributes.variants
})
StatChanged = true;
}
}
}
}
if (StatChanged == true) { if (StatChanged == true) {
profile.rvn += 1; profile.rvn += 1;
profile.commandRevision += 1; profile.commandRevision += 1;
@@ -7969,6 +8102,393 @@ express.post("/fortnite/api/game/v2/profile/*/client/PutModularCosmeticLoadout",
res.end(); res.end();
}); });
// Get BR Locker 4
express.get("/api/locker/v3/:deploymentId/account/:accountId/items", async (req, res) => {
const profile = require("./../profiles/athena.json");
var StatChanged = false;
if (!profile.stats.attributes.hasOwnProperty("loadout_presets")) {
profile.stats.attributes.loadout_presets = {};
StatChanged = true;
}
var response = {
"activeLoadouts": [],
"loadoutPresets": []
};
for (var CosmeticLoadout in profile.stats.attributes.loadout_presets) {
for (var Loadout in profile.stats.attributes.loadout_presets[CosmeticLoadout]) {
var LoadoutID = profile.stats.attributes.loadout_presets[CosmeticLoadout][Loadout];
var LoadoutItem = profile.items[LoadoutID];
var date = new Date().toISOString();
var loadoutToAdd = {
"deploymentId": req.params.deploymentId,
"accountId": req.params.accountId,
"loadoutType": LoadoutItem.templateId,
"loadoutShuffleType": "DISABLED",
"athenaItemId": LoadoutID,
"creationTime": date,
"updatedTime": date,
"loadoutSlots": []
}
var slots = LoadoutItem.attributes.slots;
for (var slot in slots) {
var slotToAdd = {
"slotTemplate": slots[slot].slot_template,
"equippedItemId": slots[slot].equipped_item,
"itemCustomizations": []
}
for (var customization in slots[slot].customization_info) {
customization = slots[slot].customization_info[customization];
var customizationToAdd = {
"channelTag": customization.channel_tag,
"variantTag": customization.variant_tag,
"additionalData": customization.additional_data
}
slotToAdd.itemCustomizations.push(customizationToAdd)
}
loadoutToAdd.loadoutSlots.push(slotToAdd)
}
response.activeLoadouts.push(loadoutToAdd)
}
}
if (StatChanged == true) {
profile.rvn += 1;
profile.commandRevision += 1;
fs.writeFileSync("./../profiles/athena.json", JSON.stringify(profile, null, 2));
}
res.json(response)
res.end();
});
// Set BR Locker 4
express.put("/api/locker/v3/:deploymentId/loadout/:loadoutType/account/:accountId/active-loadout", async (req, res) => {
const profile = require("./../profiles/athena.json");
var StatChanged = false;
var date = new Date().toISOString();
var response = {
"deploymentId": req.params.deploymentId,
"accountId": req.params.accountId,
"loadoutType": req.body.loadoutType,
"loadoutShuffleType": "DISABLED",
"athenaItemId": req.body.athenaItemId,
"creationTime": date,
"updatedTime": date,
"loadoutSlots": req.body.loadoutSlots
}
// Format the body data to Locker V3
var loadoutData = {
"slots": []
}
for (var slot in req.body.loadoutSlots) {
slot = req.body.loadoutSlots[slot];
var slotToAdd = {}
if (slot.slotTemplate)
slotToAdd.slot_template = slot.slotTemplate;
if (slot.equippedItemId)
slotToAdd.equipped_item = slot.equippedItemId;
for (var customization in slot.itemCustomizations) {
customization = slot.itemCustomizations[customization];
var customizationToAdd = {}
if (customization.channelTag)
customizationToAdd.channel_tag = customization.channelTag;
if (customization.variantTag)
customizationToAdd.variant_tag = customization.variantTag;
if (customization.additionalData)
customizationToAdd.additional_data = customization.additionalData;
if (!slotToAdd.hasOwnProperty("customization_info"))
slotToAdd.customization_info = [];
slotToAdd.customization_info.push(customizationToAdd)
}
loadoutData.slots.push(slotToAdd)
}
if (!profile.stats.attributes.hasOwnProperty("loadout_presets")) {
profile.stats.attributes.loadout_presets = {};
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
}
profile.stats.attributes.loadout_presets[req.body.loadoutType] = {
[req.body.presetIndex]: NewLoadoutID
};
StatChanged = true;
}
var LoadoutGUID = [];
try {
LoadoutGUID = profile.stats.attributes.loadout_presets[req.body.loadoutType][req.body.presetIndex];
profile.items[LoadoutGUID].attributes = loadoutData;
StatChanged = true;
} catch (err) {}
// Apply the edit style changes to the item attributes too
for (var slot in loadoutData.slots) {
if (loadoutData.slots[slot].hasOwnProperty("customization_info")) {
for (var item in profile.items) {
if (profile.items[item].templateId.toLowerCase() == loadoutData.slots[slot].equipped_item.toLowerCase()) {
for (var customization in loadoutData.slots[slot].customization_info) {
var bFound = false;
for (var profileCustomization in profile.items[item].attributes.variants) {
if (loadoutData.slots[slot].customization_info[customization].channel_tag == profile.items[item].attributes.variants[profileCustomization].channel) {
profile.items[item].attributes.variants[profileCustomization].active = `${loadoutData.slots[slot].customization_info[customization].variant_tag}.${loadoutData.slots[slot].customization_info[customization].additional_data}`;
bFound = true;
break;
}
}
if (bFound == false) {
profile.items[item].attributes.variants.push({
"channel": loadoutData.slots[slot].customization_info[customization].channel_tag,
"active": `${loadoutData.slots[slot].customization_info[customization].variant_tag}.${loadoutData.slots[slot].customization_info[customization].additional_data}`,
"owned": []
})
}
}
StatChanged = true;
}
}
}
}
if (StatChanged == true) {
profile.rvn += 1;
profile.commandRevision += 1;
fs.writeFileSync("./../profiles/athena.json", JSON.stringify(profile, null, 2));
}
res.json(response)
res.end();
});
// Get BR Locker 5
express.get("/api/locker/v4/:deploymentId/account/:accountId/items", async (req, res) => {
const profile = require("./../profiles/athena.json");
var StatChanged = false;
if (!profile.stats.attributes.hasOwnProperty("loadout_presets")) {
profile.stats.attributes.loadout_presets = {};
StatChanged = true;
}
var response = {
"activeLoadoutGroup": {
"accountId": req.params.accountId,
"athenaItemId": "lawinsathenaitemidlol",
"creationTime": new Date().toISOString(),
"deploymentId": req.params.deploymentId,
"loadouts": {}
},
"loadoutGroupPresets": [],
"loadoutPresets": []
};
for (var CosmeticLoadout in profile.stats.attributes.loadout_presets) {
for (var Loadout in profile.stats.attributes.loadout_presets[CosmeticLoadout]) {
var LoadoutID = profile.stats.attributes.loadout_presets[CosmeticLoadout][Loadout];
var LoadoutItem = profile.items[LoadoutID];
var date = new Date().toISOString();
var activeCosmeticLoadout = {
"loadoutSlots": [],
"shuffleType": "DISABLED"
}
var loadoutToAdd = {
"deploymentId": req.params.deploymentId,
"accountId": req.params.accountId,
"loadoutType": LoadoutItem.templateId,
"loadoutShuffleType": "DISABLED",
"athenaItemId": LoadoutID,
"creationTime": date,
"updatedTime": date,
"loadoutSlots": []
}
var slots = LoadoutItem.attributes.slots;
for (var slot in slots) {
var slotToAdd = {
"slotTemplate": slots[slot].slot_template,
"equippedItemId": slots[slot].equipped_item,
"itemCustomizations": []
}
for (var customization in slots[slot].customization_info) {
customization = slots[slot].customization_info[customization];
var customizationToAdd = {
"channelTag": customization.channel_tag,
"variantTag": customization.variant_tag,
"additionalData": customization.additional_data
}
slotToAdd.itemCustomizations.push(customizationToAdd)
}
loadoutToAdd.loadoutSlots.push(slotToAdd)
activeCosmeticLoadout.loadoutSlots.push(slotToAdd)
}
response.loadoutPresets.push(loadoutToAdd)
response.activeLoadoutGroup.loadouts[LoadoutItem.templateId] = activeCosmeticLoadout;
}
}
if (StatChanged == true) {
profile.rvn += 1;
profile.commandRevision += 1;
fs.writeFileSync("./../profiles/athena.json", JSON.stringify(profile, null, 2));
}
res.json(response)
res.end();
});
// Set BR Locker 5
express.put("/api/locker/v4/:deploymentId/account/:accountId/active-loadout-group", async (req, res) => {
const profile = require("./../profiles/athena.json");
var StatChanged = false;
var date = new Date().toISOString();
var response = {
"deploymentId": req.params.deploymentId,
"accountId": req.params.accountId,
"athenaItemId": "lawinsathenaitemidlol",
"creationTime": date,
"updatedTime": date,
"loadouts": req.body.loadouts,
"shuffleType": "DISABLED"
}
if (!profile.stats.attributes.hasOwnProperty("loadout_presets")) {
profile.stats.attributes.loadout_presets = {};
StatChanged = true;
}
for (var loadoutType in req.body.loadouts) {
// Format the body data to Locker V3
var loadoutData = {
"slots": []
}
for (var slot in req.body.loadouts[loadoutType].loadoutSlots) {
slot = req.body.loadouts[loadoutType].loadoutSlots[slot];
var slotToAdd = {}
if (slot.slotTemplate)
slotToAdd.slot_template = slot.slotTemplate;
if (slot.equippedItemId)
slotToAdd.equipped_item = slot.equippedItemId;
for (var customization in slot.itemCustomizations) {
customization = slot.itemCustomizations[customization];
var customizationToAdd = {}
if (customization.channelTag)
customizationToAdd.channel_tag = customization.channelTag;
if (customization.variantTag)
customizationToAdd.variant_tag = customization.variantTag;
if (customization.additionalData)
customizationToAdd.additional_data = customization.additionalData;
if (!slotToAdd.hasOwnProperty("customization_info"))
slotToAdd.customization_info = [];
slotToAdd.customization_info.push(customizationToAdd)
}
loadoutData.slots.push(slotToAdd)
}
if (!profile.stats.attributes.loadout_presets.hasOwnProperty(loadoutType)) {
const NewLoadoutID = functions.MakeID();
profile.items[NewLoadoutID] = {
"templateId": loadoutType,
"attributes": {},
"quantity": 1
}
profile.stats.attributes.loadout_presets[loadoutType] = {
"0": NewLoadoutID
};
StatChanged = true;
}
var LoadoutGUID = [];
try {
LoadoutGUID = profile.stats.attributes.loadout_presets[loadoutType]["0"];
profile.items[LoadoutGUID].attributes = loadoutData;
StatChanged = true;
} catch (err) {}
// Apply the edit style changes to the item attributes too
for (var slot in loadoutData.slots) {
if (loadoutData.slots[slot].hasOwnProperty("customization_info")) {
for (var item in profile.items) {
if (profile.items[item].templateId.toLowerCase() == loadoutData.slots[slot].equipped_item.toLowerCase()) {
for (var customization in loadoutData.slots[slot].customization_info) {
var bFound = false;
for (var profileCustomization in profile.items[item].attributes.variants) {
if (loadoutData.slots[slot].customization_info[customization].channel_tag == profile.items[item].attributes.variants[profileCustomization].channel) {
profile.items[item].attributes.variants[profileCustomization].active = `${loadoutData.slots[slot].customization_info[customization].variant_tag}.${loadoutData.slots[slot].customization_info[customization].additional_data}`;
bFound = true;
break;
}
}
if (bFound == false) {
profile.items[item].attributes.variants.push({
"channel": loadoutData.slots[slot].customization_info[customization].channel_tag,
"active": `${loadoutData.slots[slot].customization_info[customization].variant_tag}.${loadoutData.slots[slot].customization_info[customization].additional_data}`,
"owned": []
})
}
}
StatChanged = true;
}
}
}
}
}
if (StatChanged == true) {
profile.rvn += 1;
profile.commandRevision += 1;
fs.writeFileSync("./../profiles/athena.json", JSON.stringify(profile, null, 2));
}
res.json(response)
res.end();
});
// Set Active Archetype (e.g. main vehicle in v30.00+) // Set Active Archetype (e.g. main vehicle in v30.00+)
express.post("/fortnite/api/game/v2/profile/*/client/SetActiveArchetype", async (req, res) => { express.post("/fortnite/api/game/v2/profile/*/client/SetActiveArchetype", async (req, res) => {
const profile = require(`./../profiles/${req.query.profileId || "athena"}.json`); const profile = require(`./../profiles/${req.query.profileId || "athena"}.json`);
@@ -7979,12 +8499,12 @@ express.post("/fortnite/api/game/v2/profile/*/client/SetActiveArchetype", async
var QueryRevision = req.query.rvn || -1; var QueryRevision = req.query.rvn || -1;
var StatChanged = false; var StatChanged = false;
if (req.body.archetypeGroup && req.body.archetype) { if (req.body.archetypeGroup) {
if (!profile.stats.attributes.hasOwnProperty("loadout_archetype_values")) { if (!profile.stats.attributes.hasOwnProperty("loadout_archetype_values")) {
profile.stats.attributes.loadout_archetype_values = {} profile.stats.attributes.loadout_archetype_values = {}
} }
profile.stats.attributes.loadout_archetype_values[req.body.archetypeGroup] = req.body.archetype; profile.stats.attributes.loadout_archetype_values[req.body.archetypeGroup] = req.body.archetype || "";
StatChanged = true; StatChanged = true;
} }
@@ -8079,6 +8599,35 @@ express.post("/fortnite/api/game/v2/profile/*/client/SetHeroCosmeticVariants", a
res.end(); res.end();
}); });
// any dedicated_server request
express.post("/fortnite/api/game/v2/profile/*/dedicated_server/*", async (req, res) => {
const profile = require(`./../profiles/${req.query.profileId || "athena"}.json`);
// 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;
// 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 || "athena",
"profileChangesBaseRevision": BaseRevision,
"profileChanges": ApplyProfileChanges,
"profileCommandRevision": profile.commandRevision || 0,
"serverTime": new Date().toISOString(),
"responseVersion": 1
})
res.end();
});
// any mcp request that doesn't have something assigned to it // any mcp request that doesn't have something assigned to it
express.post("/fortnite/api/game/v2/profile/*/client/*", async (req, res) => { express.post("/fortnite/api/game/v2/profile/*/client/*", async (req, res) => {
const profile = require(`./../profiles/${req.query.profileId || "athena"}.json`); const profile = require(`./../profiles/${req.query.profileId || "athena"}.json`);

View File

@@ -1,7 +1,6 @@
const Express = require("express"); const Express = require("express");
const express = Express.Router(); const express = Express.Router();
const functions = require("./functions.js"); const functions = require("./functions.js");
const catalog = functions.getItemShop();
const keychain = require("./../responses/keychain.json"); const keychain = require("./../responses/keychain.json");
express.get("/fortnite/api/storefront/v2/catalog", async (req, res) => { express.get("/fortnite/api/storefront/v2/catalog", async (req, res) => {
@@ -9,6 +8,16 @@ express.get("/fortnite/api/storefront/v2/catalog", async (req, res) => {
return res.status(404).end(); return res.status(404).end();
} }
var catalog = functions.getItemShop();
const memory = functions.GetVersionInfo(req);
if (memory.build >= 30.10) {
catalog = JSON.parse(JSON.stringify(catalog).replace(/"Normal"/g, '"Size_1_x_2"'));
}
if (memory.build >= 30.20) {
catalog = JSON.parse(JSON.stringify(catalog).replace(/Game\/Items\/CardPacks\//g, 'SaveTheWorld/Items/CardPacks/'));
}
res.json(catalog); res.json(catalog);
}) })

View File

@@ -1507,6 +1507,121 @@ express.get("/fortnite/api/calendar/v1/timeline", async (req, res) => {
"activeSince": "2020-01-01T00:00:00.000Z" "activeSince": "2020-01-01T00:00:00.000Z"
}) })
break; break;
case 30:
activeEvents.push(
{
"eventType": "EventFlag.Event_S30_FlatWare",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "Event_GreenhousePrelude",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "EventFlag.Event_S30_LevelUpPass",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "EventFlag.Event_S30_RebootRally",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "EventFlag.Event_S30_StoryQuests",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "EventFlag.Event_S30_StoryQuests_P6",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "EventFlag.Event_S30_AllSweat",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
})
break;
case 31:
activeEvents.push(
{
"eventType": "EventFlag.Event_S31_Birthday",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "EventFlag.Event_S31_QuestDeckBed",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "Event_S31_FoundQuests_GreenTown",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "Event_S31_FoundQuests_PB_P01",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "Event_S31_FoundQuests_PB_P02",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "EventFlag.Event_S31_FoundQuests_TroutWrist",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "EventFlag.Event_S31_LevelUpPass",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "EventFlag.Event_S31_Mash",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "EventFlag.Event_S31_MobileQuests",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "EventFlag.Event_S31_RebootRally",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "EventFlag.Event_S31_Sweatember",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "EventFlag.Event_S31_ToadJam",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
})
break;
case 32:
activeEvents.push(
{
"eventType": "EventFlag.Event_S32_RebootRally",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
},
{
"eventType": "EventFlag.Event_S32_ScytheGold",
"activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z"
})
} }
if (24.3 <= memory.build && memory.build <= 25) { if (24.3 <= memory.build && memory.build <= 25) {
@@ -1604,20 +1719,22 @@ express.get("/fortnite/api/calendar/v1/timeline", async (req, res) => {
"EventFlag.Spring2019.Phase2", "EventFlag.Spring2019.Phase2",
"EventFlag.Starlight", "EventFlag.Starlight",
"EventFlag.StormKing.Landmark", "EventFlag.StormKing.Landmark",
"EventFlag.STWHuntMonster",
"EventFlag.STWOutlandish",
"EventFlag.YarrrTwo" "EventFlag.YarrrTwo"
] ]
var activeEventsSet = new Set(activeEvents.map(e => e.eventType)); const activeEventsSet = new Set(activeEvents.map(e => e.eventType));
for (var i = 0; i < Events.length; i++) { Events.forEach(Event => {
var Event = Events[i];
if (!activeEventsSet.has(Event)) { if (!activeEventsSet.has(Event)) {
activeEvents.push({ activeEvents.push({
"eventType": Event, "eventType": Event,
"activeUntil": "9999-01-01T00:00:00.000Z", "activeUntil": "9999-01-01T00:00:00.000Z",
"activeSince": "2020-01-01T00:00:00.000Z" "activeSince": "2020-01-01T00:00:00.000Z"
}); });
activeEventsSet.add(Event);
} }
} });
} }
const stateTemplate = { const stateTemplate = {

View File

@@ -78,9 +78,15 @@ express.post("/auth/v1/oauth/token", async (req, res) => {
"token_type": "bearer", "token_type": "bearer",
"expires_in": 28800, "expires_in": 28800,
"expires_at": "9999-12-31T23:59:59.999Z", "expires_at": "9999-12-31T23:59:59.999Z",
"nonce": "lawinserver",
"features": ["AntiCheat", "Connect", "Ecom", "Inventories", "LockerService"],
"deployment_id": "lawinsdeploymentidlol", "deployment_id": "lawinsdeploymentidlol",
"organization_id": "lawinsorganizationidlol", "organization_id": "lawinsorganizationidlol",
"organization_user_id": "lawinsorganisationuseridlol",
"product_id": "prod-fn", "product_id": "prod-fn",
"product_user_id": "lawinsproductuseridlol",
"product_user_id_created": false,
"id_token": "lawinsidtokenlol",
"sandbox_id": "fn" "sandbox_id": "fn"
}) })
}) })