mirror of
https://github.com/Lawin0129/LawinServer.git
synced 2026-01-13 02:42:22 +01:00
@@ -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]
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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/)
|
||||||
|
|||||||
30720
profiles/athena.json
30720
profiles/athena.json
File diff suppressed because it is too large
Load Diff
@@ -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
BIN
public/images/lawinpfp.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 98 KiB |
@@ -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": {
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -8,24 +8,69 @@ 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)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -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,19 +236,11 @@ function getContentPages(req) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const modes = ["saveTheWorldUnowned", "battleRoyale", "creative", "saveTheWorld"];
|
chooseTranslationsInJSON(contentpages, Language)
|
||||||
const news = ["savetheworldnews", "battleroyalenews"]
|
|
||||||
const motdnews = ["battleroyalenews", "battleroyalenewsv2"]
|
|
||||||
|
|
||||||
|
const news = ["savetheworldnews", "battleroyalenews"];
|
||||||
try {
|
try {
|
||||||
modes.forEach(mode => {
|
if (memory.build < 5.30) {
|
||||||
contentpages.subgameselectdata[mode].message.title = contentpages.subgameselectdata[mode].message.title[Language]
|
|
||||||
contentpages.subgameselectdata[mode].message.body = contentpages.subgameselectdata[mode].message.body[Language]
|
|
||||||
})
|
|
||||||
} catch (err) {}
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (memory.build < 5.30) {
|
|
||||||
news.forEach(mode => {
|
news.forEach(mode => {
|
||||||
contentpages[mode].news.messages[0].image = "https://fortnite-public-service-prod11.ol.epicgames.com/images/discord-s.png";
|
contentpages[mode].news.messages[0].image = "https://fortnite-public-service-prod11.ol.epicgames.com/images/discord-s.png";
|
||||||
contentpages[mode].news.messages[1].image = "https://fortnite-public-service-prod11.ol.epicgames.com/images/lawin-s.png";
|
contentpages[mode].news.messages[1].image = "https://fortnite-public-service-prod11.ol.epicgames.com/images/lawin-s.png";
|
||||||
@@ -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,
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
689
structure/mcp.js
689
structure/mcp.js
@@ -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) {
|
||||||
for (var i in profile.items[req.body.itemToSlot].attributes.variants) {
|
if (req.body.variantUpdates[variantUpdate].channel == profile.items[req.body.itemToSlot].attributes.variants[variant].channel) {
|
||||||
try {
|
profile.items[req.body.itemToSlot].attributes.variants[variant].active = req.body.variantUpdates[variantUpdate].active;
|
||||||
if (profile.items[req.body.itemToSlot].attributes.variants[i].channel.toLowerCase() == req.body.variantUpdates[i].channel.toLowerCase()) {
|
|
||||||
profile.items[req.body.itemToSlot].attributes.variants[i].active = req.body.variantUpdates[i].active || "";
|
bFound = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
} catch (err) {}
|
}
|
||||||
|
if (bFound == false) {
|
||||||
|
profile.items[req.body.itemToSlot].attributes.variants.push(req.body.variantUpdates[variantUpdate])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ApplyProfileChanges.push({
|
||||||
|
"changeType": "itemAttrChanged",
|
||||||
|
"itemId": req.body.itemToSlot,
|
||||||
|
"attributeName": "variants",
|
||||||
|
"attributeValue": profile.items[req.body.itemToSlot].attributes.variants
|
||||||
|
})
|
||||||
|
|
||||||
|
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`);
|
||||||
|
|||||||
@@ -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);
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
@@ -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"
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user