<feat: New release>
48
gui/.gitignore
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
# Miscellaneous
|
||||
*.class
|
||||
*.log
|
||||
*.pyc
|
||||
*.swp
|
||||
.DS_Store
|
||||
.atom/
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
migrate_working_dir/
|
||||
|
||||
# IntelliJ related
|
||||
*.iml
|
||||
*.ipr
|
||||
*.iws
|
||||
.idea/
|
||||
|
||||
# The .vscode folder contains launch configuration and tasks you configure in
|
||||
# VS Code which you may wish to be included in version control, so this line
|
||||
# is commented out by default.
|
||||
#.vscode/
|
||||
|
||||
# Flutter/Dart/Pub related
|
||||
**/doc/api/
|
||||
**/ios/Flutter/.last_build_id
|
||||
.dart_tool/
|
||||
.flutter-plugins
|
||||
.flutter-plugins-dependencies
|
||||
.packages
|
||||
.pub-cache/
|
||||
.pub/
|
||||
/build/
|
||||
|
||||
# Web related
|
||||
lib/generated_plugin_registrant.dart
|
||||
|
||||
# Symbolication related
|
||||
app.*.symbols
|
||||
|
||||
# Obfuscation related
|
||||
app.*.map.json
|
||||
|
||||
# Android Studio will place build artifacts here
|
||||
/android/app/debug
|
||||
/android/app/profile
|
||||
/android/app/release
|
||||
/windows/cmake-build-debug/
|
||||
@@ -10,6 +10,7 @@ bIsAthenaGlobalChatEnabled=true # Battle royale global chat.
|
||||
[/Script/FortniteGame.FortTextHotfixConfig]
|
||||
+TextReplacements=(Category=Game, Namespace="", bIsMinimalPatch=True, Key="D5ECE3CD484655CBAE1DB6922C1D87C7", NativeString="Getting Started", LocalizedStrings=(("ar","مرحبًا بك في LawinServer!"),("en","Welcome to LawinServer!"),("de","Willkommen bei LawinServer!"),("es","¡Bienvenidos a LawinServer!"),("es-419","¡Bienvenidos a LawinServer!"),("fr","Bienvenue sur LawinServer !"),("it","Benvenuto in LawinServer!"),("ja","LawinServerへようこそ!"),("ko","LawinServer에 오신 것을 환영합니다!"),("pl","Witaj w LawinServerze!"),("pt-BR","Bem-vindo ao LawinServer!"),("ru","Добро пожаловать в LawinServer!"),("tr","LavinServer'a Hoş Geldiniz!")))
|
||||
+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="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]
|
||||
!FrontEndPlaylistData=ClearArray
|
||||
@@ -19,3 +20,6 @@ bIsAthenaGlobalChatEnabled=true # Battle royale global chat.
|
||||
+FrontEndPlaylistData=(PlaylistName=Playlist_DefaultSquad, PlaylistAccess=(bEnabled=true, bIsDefaultPlaylist=true, bVisibleWhenDisabled=false, bDisplayAsNew=false, CategoryIndex=0, bDisplayAsLimitedTime=false, DisplayPriority=6))
|
||||
+FrontEndPlaylistData=(PlaylistName=Playlist_PlaygroundV2, PlaylistAccess=(bEnabled=true, bIsDefaultPlaylist=false, bVisibleWhenDisabled=false, bDisplayAsNew=false, CategoryIndex=2, bDisplayAsLimitedTime=false, DisplayPriority=16))
|
||||
+FrontEndPlaylistData=(PlaylistName=Playlist_Campaign, PlaylistAccess=(bEnabled=true, bInvisibleWhenEnabled=true))
|
||||
|
||||
[/Script/FortniteGame.FortOnlineAccount]
|
||||
bEnableEulaCheck=false
|
||||
72
gui/assets/authenticator/Config/config.ini
Normal file
@@ -0,0 +1,72 @@
|
||||
[Config]
|
||||
# If this is set to false, it will use the email to display name method.
|
||||
bUseConfigDisplayName=false
|
||||
# Your fortnite display name (will only be used if the property above is set to true).
|
||||
displayName=LawinServer
|
||||
|
||||
[Profile]
|
||||
# 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 21 and for Save the World from Season 2 to Season X & Season 24.
|
||||
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.
|
||||
bGrantFoundersPacks=false
|
||||
# If this is set to true, all Save the World events will be displayed in lobby.
|
||||
bAllSTWEventsActivated=false
|
||||
|
||||
[GameServer]
|
||||
# Matchmaker gameserver config, you can use this to connect to gameservers like rift (titanium), fortmp, etc... (they have to be hosting though).
|
||||
|
||||
# IP the matchmaker will use upon join.
|
||||
ip=127.0.0.1
|
||||
# PORT the matchmaker will use upon join.
|
||||
port=7777
|
||||
|
||||
[Events]
|
||||
# All dates must be specified using ISO date format only (UTC).
|
||||
# *Requires a Gameserver connected to this LawinServer backend. Clients can use other backends.
|
||||
|
||||
## The Rocket Start event. (v4.5 Only)*
|
||||
|
||||
# If this is set to true, the event countdown will appear next to
|
||||
# the Rocket and the event will start at the date below.
|
||||
bEnableGeodeEvent=false
|
||||
geodeEventStartDate=2020-01-01T00:00:00.000Z
|
||||
# If this is set to true, the Crack will stay in the sky AFTER the event.
|
||||
# The crack will fully expand after ~13.6 real days after the Rocket event start date.
|
||||
bEnableCrackInTheSky=false
|
||||
|
||||
## Eight mini-events which took the following objects from the map: (v4.5 Only)*
|
||||
## 1. Lonely Lodge Sign, 2. Motel Sign, 3. Tomatohead Mascot, 4. NOMS Sign, 5. Durr Burger Mascot
|
||||
## and brought the following objects to the map:
|
||||
## 6. Ship Anchor, 7. Horse Carriage, 8. Dinosaur Skeleton.
|
||||
## To see the exact locations, you can check out this video: https://youtu.be/NXL7rkiJVqM
|
||||
|
||||
# If this is set to true, the blue rift effects will appear at places mentioned above.
|
||||
bEnableS4OddityPrecursor=false
|
||||
# If this is set to true, the mini-events will begin to start. (Adjust the options below)
|
||||
bEnableS4OddityExecution=false
|
||||
# Start date for the Season 4 mini-events. If you have the Rocket event enabled as
|
||||
# well, then set this date to at least 4 minutes after your Rocket start date.
|
||||
S4OddityEventStartDate=2020-01-01T00:00:00.000Z
|
||||
# Time (in minutes) after which another mini-event (1-8) will occur.
|
||||
# If set to 0, all mini-events will happen at once.
|
||||
S4OddityEventsInterval=0
|
||||
|
||||
## Tomatohead Comeback mini-event. (v5.21 Only)*
|
||||
|
||||
# When set to true, the blue rift effects will start appearing on
|
||||
# top of the Tomato Town restaurant at the date specified below.
|
||||
bEnableS5OddityPrecursor=false
|
||||
S5OddityPrecursorDate=2020-01-01T00:00:00.000Z
|
||||
# When set to true, Tomatohead will be rifted back to Tomato Town at the date specified below.
|
||||
bEnableS5OddityExecution=false
|
||||
S5OddityExecutionDate=2020-01-01T00:00:00.000Z
|
||||
|
||||
## Lightning from the sky Crack and Cube Spawning Event. (v5.30 Only)*
|
||||
|
||||
# When set to true, the crack will start shooting lightning bolts destroying
|
||||
# cacti and eventually spawn the cube on the date specified below.
|
||||
bEnableCubeLightning=false
|
||||
cubeSpawnDate=2020-01-01T00:00:00.000Z
|
||||
|
||||
## Blockbuster Contest winner video at Risky Reels event. (v5.30 Only)*
|
||||
bEnableBlockbusterRiskyEvent=false
|
||||
1
gui/assets/authenticator/kill.bat
Normal file
@@ -0,0 +1 @@
|
||||
for /f "tokens=5" %%a in ('netstat -aon ^| find ":3551"') do taskkill /f /pid %%a
|
||||
@@ -2,7 +2,7 @@
|
||||
"_id": "LawinServer",
|
||||
"created": "0001-01-01T00:00:00.000Z",
|
||||
"updated": "0001-01-01T00:00:00.000Z",
|
||||
"rvn": 0,
|
||||
"rvn": 1,
|
||||
"wipeNumber": 1,
|
||||
"accountId": "LawinServer",
|
||||
"profileId": "collection_book_people0",
|
||||
@@ -2,7 +2,7 @@
|
||||
"_id": "LawinServer",
|
||||
"created": "0001-01-01T00:00:00.000Z",
|
||||
"updated": "0001-01-01T00:00:00.000Z",
|
||||
"rvn": 0,
|
||||
"rvn": 1,
|
||||
"wipeNumber": 1,
|
||||
"accountId": "LawinServer",
|
||||
"profileId": "collection_book_schematics0",
|
||||
@@ -2,7 +2,7 @@
|
||||
"_id": "LawinServer",
|
||||
"created": "0001-01-01T00:00:00.000Z",
|
||||
"updated": "0001-01-01T00:00:00.000Z",
|
||||
"rvn": 0,
|
||||
"rvn": 1,
|
||||
"wipeNumber": 1,
|
||||
"accountId": "LawinServer",
|
||||
"profileId": "collections",
|
||||
@@ -1,7 +1,8 @@
|
||||
{
|
||||
"_id": "LawinServer",
|
||||
"created": "0001-01-01T00:00:00.000Z",
|
||||
"updated": "0001-01-01T00:00:00.000Z",
|
||||
"rvn": 0,
|
||||
"rvn": 1,
|
||||
"wipeNumber": 1,
|
||||
"accountId": "LawinServer",
|
||||
"profileId": "common_core",
|
||||
@@ -1,7 +1,8 @@
|
||||
{
|
||||
"_id": "LawinServer",
|
||||
"created": "0001-01-01T00:00:00.000Z",
|
||||
"updated": "0001-01-01T00:00:00.000Z",
|
||||
"rvn": 0,
|
||||
"rvn": 1,
|
||||
"wipeNumber": 1,
|
||||
"accountId": "LawinServer",
|
||||
"profileId": "common_public",
|
||||
@@ -2,7 +2,7 @@
|
||||
"_id": "LawinServer",
|
||||
"created": "0001-01-01T00:00:00.000Z",
|
||||
"updated": "0001-01-01T00:00:00.000Z",
|
||||
"rvn": 0,
|
||||
"rvn": 1,
|
||||
"wipeNumber": 1,
|
||||
"accountId": "LawinServer",
|
||||
"profileId": "creative",
|
||||
@@ -2,7 +2,7 @@
|
||||
"_id": "LawinServer",
|
||||
"created": "0001-01-01T00:00:00.000Z",
|
||||
"updated": "0001-01-01T00:00:00.000Z",
|
||||
"rvn": 0,
|
||||
"rvn": 1,
|
||||
"wipeNumber": 1,
|
||||
"accountId": "LawinServer",
|
||||
"profileId": "metadata",
|
||||
@@ -2,7 +2,7 @@
|
||||
"_id": "LawinServer",
|
||||
"created": "0001-01-01T00:00:00.000Z",
|
||||
"updated": "0001-01-01T00:00:00.000Z",
|
||||
"rvn": 0,
|
||||
"rvn": 1,
|
||||
"wipeNumber": 1,
|
||||
"accountId": "LawinServer",
|
||||
"profileId": "outpost0",
|
||||
@@ -2,7 +2,7 @@
|
||||
"_id": "LawinServer",
|
||||
"created": "0001-01-01T00:00:00.000Z",
|
||||
"updated": "0001-01-01T00:00:00.000Z",
|
||||
"rvn": 0,
|
||||
"rvn": 1,
|
||||
"wipeNumber": 1,
|
||||
"accountId": "LawinServer",
|
||||
"profileId": "profile0",
|
||||
@@ -145,20 +145,6 @@
|
||||
},
|
||||
"quantity": 1
|
||||
},
|
||||
"agresdarti48ut387t8bgbgfuckaa": {
|
||||
"templateId": "Quest:FoundersQuest_GetRewards_0_1",
|
||||
"attributes": {
|
||||
"quest_state": "Claimed",
|
||||
"last_state_change_time": "2017-08-29T21:05:57.087Z",
|
||||
"max_level_bonus": 0,
|
||||
"level": -1,
|
||||
"item_seen": false,
|
||||
"xp": 0,
|
||||
"sent_new_notification": true,
|
||||
"favorite": false
|
||||
},
|
||||
"quantity": 1
|
||||
},
|
||||
"1fakfgrughfaitcudghudhgdughdughudhgug": {
|
||||
"templateId": "gadget:g_commando_goincommando",
|
||||
"attributes": {
|
||||
@@ -655,21 +641,6 @@
|
||||
},
|
||||
"quantity": 1
|
||||
},
|
||||
"2d4ea84f-b6d7-42dc-b193-98bb9a31b3aa": {
|
||||
"templateId": "Quest:foundersquest_getrewards_0_1",
|
||||
"attributes": {
|
||||
"quest_state": "Claimed",
|
||||
"last_state_change_time": "2017-08-29T21:19:45.200Z",
|
||||
"max_level_bonus": 0,
|
||||
"completion_questcomplete_homebaseonboardingafteroutpost": 1,
|
||||
"level": -1,
|
||||
"item_seen": false,
|
||||
"xp": 0,
|
||||
"sent_new_notification": true,
|
||||
"favorite": false
|
||||
},
|
||||
"quantity": 1
|
||||
},
|
||||
"d3fa9aa6-df5f-406d-ac40-e884e6b832f3": {
|
||||
"templateId": "Worker:managertrainer_uc_t01",
|
||||
"attributes": {
|
||||
@@ -2,7 +2,7 @@
|
||||
"_id": "LawinServer",
|
||||
"created": "0001-01-01T00:00:00.000Z",
|
||||
"updated": "0001-01-01T00:00:00.000Z",
|
||||
"rvn": 0,
|
||||
"rvn": 1,
|
||||
"wipeNumber": 1,
|
||||
"accountId": "LawinServer",
|
||||
"profileId": "theater0",
|
||||
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 117 KiB |
|
Before Width: | Height: | Size: 398 KiB After Width: | Height: | Size: 398 KiB |
|
Before Width: | Height: | Size: 291 KiB After Width: | Height: | Size: 291 KiB |
@@ -0,0 +1,526 @@
|
||||
[
|
||||
"Defender:did_defenderassault_basic_c_t01",
|
||||
"Defender:did_defenderassault_basic_r_t01",
|
||||
"Defender:did_defenderassault_basic_sr_t01",
|
||||
"Defender:did_defenderassault_basic_uc_t01",
|
||||
"Defender:did_defenderassault_basic_vr_t01",
|
||||
"Defender:did_defenderassault_founders_vr_t01",
|
||||
"Defender:did_defendermelee_basic_c_t01",
|
||||
"Defender:did_defendermelee_basic_r_t01",
|
||||
"Defender:did_defendermelee_basic_sr_t01",
|
||||
"Defender:did_defendermelee_basic_uc_t01",
|
||||
"Defender:did_defendermelee_basic_vr_t01",
|
||||
"Defender:did_defenderpistol_basic_c_t01",
|
||||
"Defender:did_defenderpistol_basic_r_t01",
|
||||
"Defender:did_defenderpistol_basic_sr_t01",
|
||||
"Defender:did_defenderpistol_basic_uc_t01",
|
||||
"Defender:did_defenderpistol_basic_vr_t01",
|
||||
"Defender:did_defenderpistol_founders_vr_t01",
|
||||
"Defender:did_defendershotgun_basic_c_t01",
|
||||
"Defender:did_defendershotgun_basic_r_t01",
|
||||
"Defender:did_defendershotgun_basic_sr_t01",
|
||||
"Defender:did_defendershotgun_basic_uc_t01",
|
||||
"Defender:did_defendershotgun_basic_vr_t01",
|
||||
"Defender:did_defendersniper_basic_c_t01",
|
||||
"Defender:did_defendersniper_basic_r_t01",
|
||||
"Defender:did_defendersniper_basic_sr_t01",
|
||||
"Defender:did_defendersniper_basic_uc_t01",
|
||||
"Defender:did_defendersniper_basic_vr_t01",
|
||||
"Hero:hid_commando_007_r_t01",
|
||||
"Hero:hid_commando_007_sr_t01",
|
||||
"Hero:hid_commando_007_uc_t01",
|
||||
"Hero:hid_commando_007_vr_t01",
|
||||
"Hero:hid_commando_008_foundersf_sr_t01",
|
||||
"Hero:hid_commando_008_foundersm_sr_t01",
|
||||
"Hero:hid_commando_008_r_t01",
|
||||
"Hero:hid_commando_008_sr_t01",
|
||||
"Hero:hid_commando_008_vr_t01",
|
||||
"Hero:hid_commando_009_r_t01",
|
||||
"Hero:hid_commando_009_sr_t01",
|
||||
"Hero:hid_commando_009_vr_t01",
|
||||
"Hero:hid_commando_010_sr_t01",
|
||||
"Hero:hid_commando_010_vr_t01",
|
||||
"Hero:hid_commando_gcgrenade_r_t01",
|
||||
"Hero:hid_commando_gcgrenade_sr_t01",
|
||||
"Hero:hid_commando_gcgrenade_vr_t01",
|
||||
"Hero:hid_commando_grenadegun_r_t01",
|
||||
"Hero:hid_commando_grenadegun_sr_t01",
|
||||
"Hero:hid_commando_grenadegun_uc_t01",
|
||||
"Hero:hid_commando_grenadegun_vr_t01",
|
||||
"Hero:hid_commando_grenademaster_sr_t01",
|
||||
"Hero:hid_commando_gunheadshot_sr_t01",
|
||||
"Hero:hid_commando_gunheadshot_vr_t01",
|
||||
"Hero:hid_commando_gunheadshothw_sr_t01",
|
||||
"Hero:hid_commando_guntough_r_t01",
|
||||
"Hero:hid_commando_guntough_sr_t01",
|
||||
"Hero:hid_commando_guntough_uc_t01",
|
||||
"Hero:hid_commando_guntough_vr_t01",
|
||||
"Hero:hid_commando_shockdamage_r_t01",
|
||||
"Hero:hid_commando_shockdamage_sr_t01",
|
||||
"Hero:hid_commando_shockdamage_vr_t01",
|
||||
"Hero:hid_commando_sony_r_t01",
|
||||
"Hero:hid_constructor_007_r_t01",
|
||||
"Hero:hid_constructor_007_sr_t01",
|
||||
"Hero:hid_constructor_007_uc_t01",
|
||||
"Hero:hid_constructor_007_vr_t01",
|
||||
"Hero:hid_constructor_008_foundersf_sr_t01",
|
||||
"Hero:hid_constructor_008_foundersm_sr_t01",
|
||||
"Hero:hid_constructor_008_r_t01",
|
||||
"Hero:hid_constructor_008_sr_t01",
|
||||
"Hero:hid_constructor_008_vr_t01",
|
||||
"Hero:hid_constructor_009_r_t01",
|
||||
"Hero:hid_constructor_009_sr_t01",
|
||||
"Hero:hid_constructor_009_vr_t01",
|
||||
"Hero:hid_constructor_010_sr_t01",
|
||||
"Hero:hid_constructor_010_vr_t01",
|
||||
"Hero:hid_constructor_basebig_sr_t01",
|
||||
"Hero:hid_constructor_basehyper_r_t01",
|
||||
"Hero:hid_constructor_basehyper_sr_t01",
|
||||
"Hero:hid_constructor_basehyper_vr_t01",
|
||||
"Hero:hid_constructor_basehyperhw_sr_t01",
|
||||
"Hero:hid_constructor_hammerplasma_sr_t01",
|
||||
"Hero:hid_constructor_hammerplasma_vr_t01",
|
||||
"Hero:hid_constructor_hammertank_r_t01",
|
||||
"Hero:hid_constructor_hammertank_sr_t01",
|
||||
"Hero:hid_constructor_hammertank_uc_t01",
|
||||
"Hero:hid_constructor_hammertank_vr_t01",
|
||||
"Hero:hid_constructor_plasmadamage_r_t01",
|
||||
"Hero:hid_constructor_plasmadamage_sr_t01",
|
||||
"Hero:hid_constructor_plasmadamage_vr_t01",
|
||||
"Hero:hid_constructor_rushbase_r_t01",
|
||||
"Hero:hid_constructor_rushbase_sr_t01",
|
||||
"Hero:hid_constructor_rushbase_uc_t01",
|
||||
"Hero:hid_constructor_rushbase_vr_t01",
|
||||
"Hero:hid_constructor_sony_r_t01",
|
||||
"Hero:hid_ninja_007_r_t01",
|
||||
"Hero:hid_ninja_007_sr_t01",
|
||||
"Hero:hid_ninja_007_uc_t01",
|
||||
"Hero:hid_ninja_007_vr_t01",
|
||||
"Hero:hid_ninja_008_r_t01",
|
||||
"Hero:hid_ninja_008_sr_t01",
|
||||
"Hero:hid_ninja_008_vr_t01",
|
||||
"Hero:hid_ninja_009_r_t01",
|
||||
"Hero:hid_ninja_009_sr_t01",
|
||||
"Hero:hid_ninja_009_vr_t01",
|
||||
"Hero:hid_ninja_010_sr_t01",
|
||||
"Hero:hid_ninja_010_vr_t01",
|
||||
"Hero:hid_ninja_slashbreath_r_t01",
|
||||
"Hero:hid_ninja_slashbreath_sr_t01",
|
||||
"Hero:hid_ninja_slashbreath_vr_t01",
|
||||
"Hero:hid_ninja_slashtail_r_t01",
|
||||
"Hero:hid_ninja_slashtail_sr_t01",
|
||||
"Hero:hid_ninja_slashtail_uc_t01",
|
||||
"Hero:hid_ninja_slashtail_vr_t01",
|
||||
"Hero:hid_ninja_smokedimmak_r_t01",
|
||||
"Hero:hid_ninja_smokedimmak_sr_t01",
|
||||
"Hero:hid_ninja_smokedimmak_vr_t01",
|
||||
"Hero:hid_ninja_sony_r_t01",
|
||||
"Hero:hid_ninja_starsassassin_foundersf_sr_t01",
|
||||
"Hero:hid_ninja_starsassassin_foundersm_sr_t01",
|
||||
"Hero:hid_ninja_starsassassin_r_t01",
|
||||
"Hero:hid_ninja_starsassassin_sr_t01",
|
||||
"Hero:hid_ninja_starsassassin_uc_t01",
|
||||
"Hero:hid_ninja_starsassassin_vr_t01",
|
||||
"Hero:hid_ninja_starsrain_sr_t01",
|
||||
"Hero:hid_ninja_starsrain_vr_t01",
|
||||
"Hero:hid_ninja_starsrainhw_sr_t01",
|
||||
"Hero:hid_ninja_swordmaster_sr_t01",
|
||||
"Hero:hid_outlander_007_r_t01",
|
||||
"Hero:hid_outlander_007_sr_t01",
|
||||
"Hero:hid_outlander_007_uc_t01",
|
||||
"Hero:hid_outlander_007_vr_t01",
|
||||
"Hero:hid_outlander_008_foundersf_sr_t01",
|
||||
"Hero:hid_outlander_008_foundersm_sr_t01",
|
||||
"Hero:hid_outlander_008_r_t01",
|
||||
"Hero:hid_outlander_008_sr_t01",
|
||||
"Hero:hid_outlander_008_vr_t01",
|
||||
"Hero:hid_outlander_009_r_t01",
|
||||
"Hero:hid_outlander_009_sr_t01",
|
||||
"Hero:hid_outlander_009_vr_t01",
|
||||
"Hero:hid_outlander_010_sr_t01",
|
||||
"Hero:hid_outlander_010_vr_t01",
|
||||
"Hero:hid_outlander_punchdamage_sr_t01",
|
||||
"Hero:hid_outlander_punchdamage_vr_t01",
|
||||
"Hero:hid_outlander_punchphase_r_t01",
|
||||
"Hero:hid_outlander_punchphase_sr_t01",
|
||||
"Hero:hid_outlander_punchphase_uc_t01",
|
||||
"Hero:hid_outlander_punchphase_vr_t01",
|
||||
"Hero:hid_outlander_sony_r_t01",
|
||||
"Hero:hid_outlander_spherefragment_r_t01",
|
||||
"Hero:hid_outlander_spherefragment_sr_t01",
|
||||
"Hero:hid_outlander_spherefragment_vr_t01",
|
||||
"Hero:hid_outlander_zonefragment_sr_t01",
|
||||
"Hero:hid_outlander_zoneharvest_r_t01",
|
||||
"Hero:hid_outlander_zoneharvest_sr_t01",
|
||||
"Hero:hid_outlander_zoneharvest_uc_t01",
|
||||
"Hero:hid_outlander_zoneharvest_vr_t01",
|
||||
"Hero:hid_outlander_zonepistol_r_t01",
|
||||
"Hero:hid_outlander_zonepistol_sr_t01",
|
||||
"Hero:hid_outlander_zonepistol_vr_t01",
|
||||
"Hero:hid_outlander_zonepistolhw_sr_t01",
|
||||
"Schematic:sid_assault_auto_c_ore_t01",
|
||||
"Schematic:sid_assault_auto_founders_sr_ore_t01",
|
||||
"Schematic:sid_assault_auto_halloween_sr_ore_t01",
|
||||
"Schematic:sid_assault_auto_r_ore_t01",
|
||||
"Schematic:sid_assault_auto_sr_ore_t01",
|
||||
"Schematic:sid_assault_auto_uc_ore_t01",
|
||||
"Schematic:sid_assault_auto_vr_ore_t01",
|
||||
"Schematic:sid_assault_burst_c_ore_t01",
|
||||
"Schematic:sid_assault_burst_r_ore_t01",
|
||||
"Schematic:sid_assault_burst_sr_ore_t01",
|
||||
"Schematic:sid_assault_burst_uc_ore_t01",
|
||||
"Schematic:sid_assault_burst_vr_ore_t01",
|
||||
"Schematic:sid_assault_doubleshot_sr_ore_t01",
|
||||
"Schematic:sid_assault_doubleshot_vr_ore_t01",
|
||||
"Schematic:sid_assault_hydra_sr_ore_t01",
|
||||
"Schematic:sid_assault_lmg_drum_founders_sr_ore_t01",
|
||||
"Schematic:sid_assault_lmg_drum_founders_vr_ore_t01",
|
||||
"Schematic:sid_assault_lmg_r_ore_t01",
|
||||
"Schematic:sid_assault_lmg_sr_ore_t01",
|
||||
"Schematic:sid_assault_lmg_vr_ore_t01",
|
||||
"Schematic:sid_assault_raygun_sr_ore_t01",
|
||||
"Schematic:sid_assault_raygun_vr_ore_t01",
|
||||
"Schematic:sid_assault_semiauto_c_ore_t01",
|
||||
"Schematic:sid_assault_semiauto_founders_vr_ore_t01",
|
||||
"Schematic:sid_assault_semiauto_r_ore_t01",
|
||||
"Schematic:sid_assault_semiauto_sr_ore_t01",
|
||||
"Schematic:sid_assault_semiauto_uc_ore_t01",
|
||||
"Schematic:sid_assault_semiauto_vr_ore_t01",
|
||||
"Schematic:sid_assault_singleshot_r_ore_t01",
|
||||
"Schematic:sid_assault_singleshot_sr_ore_t01",
|
||||
"Schematic:sid_assault_singleshot_vr_ore_t01",
|
||||
"Schematic:sid_assault_surgical_drum_founders_r_ore_t01",
|
||||
"Schematic:sid_assault_surgical_sr_ore_t01",
|
||||
"Schematic:sid_assault_surgical_vr_ore_t01",
|
||||
"Schematic:sid_blunt_club_light_sr_ore_t01",
|
||||
"Schematic:sid_blunt_club_light_vr_ore_t01",
|
||||
"Schematic:sid_blunt_hammer_heavy_c_ore_t01",
|
||||
"Schematic:sid_blunt_hammer_heavy_founders_vr_ore_t01",
|
||||
"Schematic:sid_blunt_hammer_heavy_r_ore_t01",
|
||||
"Schematic:sid_blunt_hammer_heavy_sr_ore_t01",
|
||||
"Schematic:sid_blunt_hammer_heavy_uc_ore_t01",
|
||||
"Schematic:sid_blunt_hammer_heavy_vr_ore_t01",
|
||||
"Schematic:sid_blunt_hammer_rocket_sr_ore_t01",
|
||||
"Schematic:sid_blunt_hammer_rocket_vr_ore_t01",
|
||||
"Schematic:sid_blunt_heavy_paddle_c_ore_t01",
|
||||
"Schematic:sid_blunt_heavy_paddle_r_ore_t01",
|
||||
"Schematic:sid_blunt_heavy_paddle_uc_ore_t01",
|
||||
"Schematic:sid_blunt_light_bat_r_ore_t01",
|
||||
"Schematic:sid_blunt_light_bat_uc_ore_t01",
|
||||
"Schematic:sid_blunt_light_c_ore_t01",
|
||||
"Schematic:sid_blunt_light_r_ore_t01",
|
||||
"Schematic:sid_blunt_light_rocketbat_sr_ore_t01",
|
||||
"Schematic:sid_blunt_light_rocketbat_vr_ore_t01",
|
||||
"Schematic:sid_blunt_light_sr_ore_t01",
|
||||
"Schematic:sid_blunt_light_uc_ore_t01",
|
||||
"Schematic:sid_blunt_light_vr_ore_t01",
|
||||
"Schematic:sid_blunt_medium_c_ore_t01",
|
||||
"Schematic:sid_blunt_medium_r_ore_t01",
|
||||
"Schematic:sid_blunt_medium_sr_ore_t01",
|
||||
"Schematic:sid_blunt_medium_uc_ore_t01",
|
||||
"Schematic:sid_blunt_medium_vr_ore_t01",
|
||||
"Schematic:sid_blunt_tool_light_r_ore_t01",
|
||||
"Schematic:sid_blunt_tool_light_uc_ore_t01",
|
||||
"Schematic:sid_ceiling_electric_aoe_r_t01",
|
||||
"Schematic:sid_ceiling_electric_aoe_sr_t01",
|
||||
"Schematic:sid_ceiling_electric_aoe_vr_t01",
|
||||
"Schematic:sid_ceiling_electric_single_c_t01",
|
||||
"Schematic:sid_ceiling_electric_single_r_t01",
|
||||
"Schematic:sid_ceiling_electric_single_sr_t01",
|
||||
"Schematic:sid_ceiling_electric_single_uc_t01",
|
||||
"Schematic:sid_ceiling_electric_single_vr_t01",
|
||||
"Schematic:sid_ceiling_gas_r_t01",
|
||||
"Schematic:sid_ceiling_gas_sr_t01",
|
||||
"Schematic:sid_ceiling_gas_uc_t01",
|
||||
"Schematic:sid_ceiling_gas_vr_t01",
|
||||
"Schematic:sid_edged_axe_heavy_c_ore_t01",
|
||||
"Schematic:sid_edged_axe_heavy_r_ore_t01",
|
||||
"Schematic:sid_edged_axe_heavy_sr_ore_t01",
|
||||
"Schematic:sid_edged_axe_heavy_uc_ore_t01",
|
||||
"Schematic:sid_edged_axe_heavy_vr_ore_t01",
|
||||
"Schematic:sid_edged_axe_light_c_ore_t01",
|
||||
"Schematic:sid_edged_axe_light_r_ore_t01",
|
||||
"Schematic:sid_edged_axe_light_sr_ore_t01",
|
||||
"Schematic:sid_edged_axe_light_uc_ore_t01",
|
||||
"Schematic:sid_edged_axe_light_vr_ore_t01",
|
||||
"Schematic:sid_edged_axe_medium_c_ore_t01",
|
||||
"Schematic:sid_edged_axe_medium_founders_vr_ore_t01",
|
||||
"Schematic:sid_edged_axe_medium_laser_sr_ore_t01",
|
||||
"Schematic:sid_edged_axe_medium_laser_vr_ore_t01",
|
||||
"Schematic:sid_edged_axe_medium_r_ore_t01",
|
||||
"Schematic:sid_edged_axe_medium_sr_ore_t01",
|
||||
"Schematic:sid_edged_axe_medium_uc_ore_t01",
|
||||
"Schematic:sid_edged_axe_medium_vr_ore_t01",
|
||||
"Schematic:sid_edged_scythe_c_ore_t01",
|
||||
"Schematic:sid_edged_scythe_laser_sr_ore_t01",
|
||||
"Schematic:sid_edged_scythe_laser_vr_ore_t01",
|
||||
"Schematic:sid_edged_scythe_r_ore_t01",
|
||||
"Schematic:sid_edged_scythe_sr_ore_t01",
|
||||
"Schematic:sid_edged_scythe_uc_ore_t01",
|
||||
"Schematic:sid_edged_scythe_vr_ore_t01",
|
||||
"Schematic:sid_edged_sword_heavy_c_ore_t01",
|
||||
"Schematic:sid_edged_sword_heavy_founders_vr_ore_t01",
|
||||
"Schematic:sid_edged_sword_heavy_r_ore_t01",
|
||||
"Schematic:sid_edged_sword_heavy_sr_ore_t01",
|
||||
"Schematic:sid_edged_sword_heavy_uc_ore_t01",
|
||||
"Schematic:sid_edged_sword_heavy_vr_ore_t01",
|
||||
"Schematic:sid_edged_sword_hydraulic_sr_ore_t01",
|
||||
"Schematic:sid_edged_sword_hydraulic_vr_ore_t01",
|
||||
"Schematic:sid_edged_sword_light_c_ore_t01",
|
||||
"Schematic:sid_edged_sword_light_founders_vr_ore_t01",
|
||||
"Schematic:sid_edged_sword_light_r_ore_t01",
|
||||
"Schematic:sid_edged_sword_light_sr_ore_t01",
|
||||
"Schematic:sid_edged_sword_light_uc_ore_t01",
|
||||
"Schematic:sid_edged_sword_light_vr_ore_t01",
|
||||
"Schematic:sid_edged_sword_medium_c_ore_t01",
|
||||
"Schematic:sid_edged_sword_medium_laser_founders_r_ore_t01",
|
||||
"Schematic:sid_edged_sword_medium_laser_founders_sr_ore_t01",
|
||||
"Schematic:sid_edged_sword_medium_laser_founders_vr_ore_t01",
|
||||
"Schematic:sid_edged_sword_medium_laser_sr_ore_t01",
|
||||
"Schematic:sid_edged_sword_medium_laser_vr_ore_t01",
|
||||
"Schematic:sid_edged_sword_medium_r_ore_t01",
|
||||
"Schematic:sid_edged_sword_medium_sr_ore_t01",
|
||||
"Schematic:sid_edged_sword_medium_uc_ore_t01",
|
||||
"Schematic:sid_edged_sword_medium_vr_ore_t01",
|
||||
"Schematic:sid_floor_health_r_t01",
|
||||
"Schematic:sid_floor_health_sr_t01",
|
||||
"Schematic:sid_floor_health_uc_t01",
|
||||
"Schematic:sid_floor_health_vr_t01",
|
||||
"Schematic:sid_floor_launcher_r_t01",
|
||||
"Schematic:sid_floor_launcher_sr_t01",
|
||||
"Schematic:sid_floor_launcher_uc_t01",
|
||||
"Schematic:sid_floor_launcher_vr_t01",
|
||||
"Schematic:sid_floor_spikes_r_t01",
|
||||
"Schematic:sid_floor_spikes_sr_t01",
|
||||
"Schematic:sid_floor_spikes_uc_t01",
|
||||
"Schematic:sid_floor_spikes_vr_t01",
|
||||
"Schematic:sid_floor_spikes_wood_c_t01",
|
||||
"Schematic:sid_floor_spikes_wood_r_t01",
|
||||
"Schematic:sid_floor_spikes_wood_sr_t01",
|
||||
"Schematic:sid_floor_spikes_wood_uc_t01",
|
||||
"Schematic:sid_floor_spikes_wood_vr_t01",
|
||||
"Schematic:sid_floor_ward_r_t01",
|
||||
"Schematic:sid_floor_ward_sr_t01",
|
||||
"Schematic:sid_floor_ward_uc_t01",
|
||||
"Schematic:sid_floor_ward_vr_t01",
|
||||
"Schematic:sid_launcher_grenade_r_ore_t01",
|
||||
"Schematic:sid_launcher_grenade_sr_ore_t01",
|
||||
"Schematic:sid_launcher_grenade_vr_ore_t01",
|
||||
"Schematic:sid_launcher_hydraulic_sr_ore_t01",
|
||||
"Schematic:sid_launcher_hydraulic_vr_ore_t01",
|
||||
"Schematic:sid_launcher_pumpkin_rpg_sr_ore_t01",
|
||||
"Schematic:sid_launcher_rocket_r_ore_t01",
|
||||
"Schematic:sid_launcher_rocket_sr_ore_t01",
|
||||
"Schematic:sid_launcher_rocket_vr_ore_t01",
|
||||
"Schematic:sid_piercing_spear_c_ore_t01",
|
||||
"Schematic:sid_piercing_spear_laser_sr_ore_t01",
|
||||
"Schematic:sid_piercing_spear_laser_vr_ore_t01",
|
||||
"Schematic:sid_piercing_spear_military_r_ore_t01",
|
||||
"Schematic:sid_piercing_spear_military_sr_ore_t01",
|
||||
"Schematic:sid_piercing_spear_military_vr_ore_t01",
|
||||
"Schematic:sid_piercing_spear_r_ore_t01",
|
||||
"Schematic:sid_piercing_spear_sr_ore_t01",
|
||||
"Schematic:sid_piercing_spear_uc_ore_t01",
|
||||
"Schematic:sid_piercing_spear_vr_ore_t01",
|
||||
"Schematic:sid_pistol_auto_c_ore_t01",
|
||||
"Schematic:sid_pistol_auto_r_ore_t01",
|
||||
"Schematic:sid_pistol_auto_sr_ore_t01",
|
||||
"Schematic:sid_pistol_auto_uc_ore_t01",
|
||||
"Schematic:sid_pistol_auto_vr_ore_t01",
|
||||
"Schematic:sid_pistol_autoheavy_founders_r_ore_t01",
|
||||
"Schematic:sid_pistol_autoheavy_founders_sr_ore_t01",
|
||||
"Schematic:sid_pistol_autoheavy_founders_vr_ore_t01",
|
||||
"Schematic:sid_pistol_autoheavy_r_ore_t01",
|
||||
"Schematic:sid_pistol_autoheavy_sr_ore_t01",
|
||||
"Schematic:sid_pistol_autoheavy_vr_ore_t01",
|
||||
"Schematic:sid_pistol_bolt_sr_ore_t01",
|
||||
"Schematic:sid_pistol_bolt_vr_ore_t01",
|
||||
"Schematic:sid_pistol_boltrevolver_c_ore_t01",
|
||||
"Schematic:sid_pistol_boltrevolver_r_ore_t01",
|
||||
"Schematic:sid_pistol_boltrevolver_uc_ore_t01",
|
||||
"Schematic:sid_pistol_dragon_sr_ore_t01",
|
||||
"Schematic:sid_pistol_dragon_vr_ore_t01",
|
||||
"Schematic:sid_pistol_firecracker_r_ore_t01",
|
||||
"Schematic:sid_pistol_firecracker_sr_ore_t01",
|
||||
"Schematic:sid_pistol_firecracker_vr_ore_t01",
|
||||
"Schematic:sid_pistol_gatling_sr_ore_t01",
|
||||
"Schematic:sid_pistol_gatling_vr_ore_t01",
|
||||
"Schematic:sid_pistol_handcannon_founders_vr_ore_t01",
|
||||
"Schematic:sid_pistol_handcannon_r_ore_t01",
|
||||
"Schematic:sid_pistol_handcannon_semi_r_ore_t01",
|
||||
"Schematic:sid_pistol_handcannon_semi_sr_ore_t01",
|
||||
"Schematic:sid_pistol_handcannon_semi_vr_ore_t01",
|
||||
"Schematic:sid_pistol_handcannon_sr_ore_t01",
|
||||
"Schematic:sid_pistol_handcannon_vr_ore_t01",
|
||||
"Schematic:sid_pistol_hydraulic_sr_ore_t01",
|
||||
"Schematic:sid_pistol_hydraulic_vr_ore_t01",
|
||||
"Schematic:sid_pistol_rapid_founders_vr_ore_t01",
|
||||
"Schematic:sid_pistol_rapid_r_ore_t01",
|
||||
"Schematic:sid_pistol_rapid_sr_ore_t01",
|
||||
"Schematic:sid_pistol_rapid_vr_ore_t01",
|
||||
"Schematic:sid_pistol_rocket_sr_ore_t01",
|
||||
"Schematic:sid_pistol_semiauto_c_ore_t01",
|
||||
"Schematic:sid_pistol_semiauto_founders_vr_ore_t01",
|
||||
"Schematic:sid_pistol_semiauto_r_ore_t01",
|
||||
"Schematic:sid_pistol_semiauto_sr_ore_t01",
|
||||
"Schematic:sid_pistol_semiauto_uc_ore_t01",
|
||||
"Schematic:sid_pistol_semiauto_vr_ore_t01",
|
||||
"Schematic:sid_pistol_sixshooter_c_ore_t01",
|
||||
"Schematic:sid_pistol_sixshooter_r_ore_t01",
|
||||
"Schematic:sid_pistol_sixshooter_uc_ore_t01",
|
||||
"Schematic:sid_pistol_space_sr_ore_t01",
|
||||
"Schematic:sid_pistol_space_vr_ore_t01",
|
||||
"Schematic:sid_pistol_zapper_sr_ore_t01",
|
||||
"Schematic:sid_pistol_zapper_vr_ore_t01",
|
||||
"Schematic:sid_shotgun_auto_founders_vr_ore_t01",
|
||||
"Schematic:sid_shotgun_auto_r_ore_t01",
|
||||
"Schematic:sid_shotgun_auto_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_auto_uc_ore_t01",
|
||||
"Schematic:sid_shotgun_auto_vr_ore_t01",
|
||||
"Schematic:sid_shotgun_break_c_ore_t01",
|
||||
"Schematic:sid_shotgun_break_ou_r_ore_t01",
|
||||
"Schematic:sid_shotgun_break_ou_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_break_ou_uc_ore_t01",
|
||||
"Schematic:sid_shotgun_break_ou_vr_ore_t01",
|
||||
"Schematic:sid_shotgun_break_r_ore_t01",
|
||||
"Schematic:sid_shotgun_break_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_break_uc_ore_t01",
|
||||
"Schematic:sid_shotgun_break_vr_ore_t01",
|
||||
"Schematic:sid_shotgun_heavy_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_longarm_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_longarm_vr_ore_t01",
|
||||
"Schematic:sid_shotgun_minigun_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_semiauto_r_ore_t01",
|
||||
"Schematic:sid_shotgun_semiauto_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_semiauto_uc_ore_t01",
|
||||
"Schematic:sid_shotgun_semiauto_vr_ore_t01",
|
||||
"Schematic:sid_shotgun_standard_c_ore_t01",
|
||||
"Schematic:sid_shotgun_standard_r_ore_t01",
|
||||
"Schematic:sid_shotgun_standard_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_standard_uc_ore_t01",
|
||||
"Schematic:sid_shotgun_standard_vr_ore_t01",
|
||||
"Schematic:sid_shotgun_tactical_c_ore_t01",
|
||||
"Schematic:sid_shotgun_tactical_founders_r_ore_t01",
|
||||
"Schematic:sid_shotgun_tactical_founders_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_tactical_founders_vr_ore_t01",
|
||||
"Schematic:sid_shotgun_tactical_precision_r_ore_t01",
|
||||
"Schematic:sid_shotgun_tactical_precision_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_tactical_precision_vr_ore_t01",
|
||||
"Schematic:sid_shotgun_tactical_r_ore_t01",
|
||||
"Schematic:sid_shotgun_tactical_uc_ore_t01",
|
||||
"Schematic:sid_sniper_amr_r_ore_t01",
|
||||
"Schematic:sid_sniper_amr_sr_ore_t01",
|
||||
"Schematic:sid_sniper_amr_vr_ore_t01",
|
||||
"Schematic:sid_sniper_auto_founders_vr_ore_t01",
|
||||
"Schematic:sid_sniper_auto_r_ore_t01",
|
||||
"Schematic:sid_sniper_auto_sr_ore_t01",
|
||||
"Schematic:sid_sniper_auto_uc_ore_t01",
|
||||
"Schematic:sid_sniper_auto_vr_ore_t01",
|
||||
"Schematic:sid_sniper_boltaction_c_ore_t01",
|
||||
"Schematic:sid_sniper_boltaction_r_ore_t01",
|
||||
"Schematic:sid_sniper_boltaction_scope_r_ore_t01",
|
||||
"Schematic:sid_sniper_boltaction_scope_sr_ore_t01",
|
||||
"Schematic:sid_sniper_boltaction_scope_vr_ore_t01",
|
||||
"Schematic:sid_sniper_boltaction_uc_ore_t01",
|
||||
"Schematic:sid_sniper_hydraulic_sr_ore_t01",
|
||||
"Schematic:sid_sniper_hydraulic_vr_ore_t01",
|
||||
"Schematic:sid_sniper_shredder_sr_ore_t01",
|
||||
"Schematic:sid_sniper_shredder_vr_ore_t01",
|
||||
"Schematic:sid_sniper_standard_c_ore_t01",
|
||||
"Schematic:sid_sniper_standard_founders_vr_ore_t01",
|
||||
"Schematic:sid_sniper_standard_r_ore_t01",
|
||||
"Schematic:sid_sniper_standard_scope_sr_ore_t01",
|
||||
"Schematic:sid_sniper_standard_scope_vr_ore_t01",
|
||||
"Schematic:sid_sniper_standard_sr_ore_t01",
|
||||
"Schematic:sid_sniper_standard_uc_ore_t01",
|
||||
"Schematic:sid_sniper_standard_vr_ore_t01",
|
||||
"Schematic:sid_sniper_tripleshot_sr_ore_t01",
|
||||
"Schematic:sid_sniper_tripleshot_vr_ore_t01",
|
||||
"Schematic:sid_wall_darts_r_t01",
|
||||
"Schematic:sid_wall_darts_sr_t01",
|
||||
"Schematic:sid_wall_darts_uc_t01",
|
||||
"Schematic:sid_wall_darts_vr_t01",
|
||||
"Schematic:sid_wall_electric_r_t01",
|
||||
"Schematic:sid_wall_electric_sr_t01",
|
||||
"Schematic:sid_wall_electric_uc_t01",
|
||||
"Schematic:sid_wall_electric_vr_t01",
|
||||
"Schematic:sid_wall_launcher_r_t01",
|
||||
"Schematic:sid_wall_launcher_sr_t01",
|
||||
"Schematic:sid_wall_launcher_uc_t01",
|
||||
"Schematic:sid_wall_launcher_vr_t01",
|
||||
"Schematic:sid_wall_light_r_t01",
|
||||
"Schematic:sid_wall_light_sr_t01",
|
||||
"Schematic:sid_wall_light_vr_t01",
|
||||
"Schematic:sid_wall_wood_spikes_c_t01",
|
||||
"Schematic:sid_wall_wood_spikes_r_t01",
|
||||
"Schematic:sid_wall_wood_spikes_sr_t01",
|
||||
"Schematic:sid_wall_wood_spikes_uc_t01",
|
||||
"Schematic:sid_wall_wood_spikes_vr_t01",
|
||||
"Worker:managerdoctor_c_t01",
|
||||
"Worker:managerdoctor_r_t01",
|
||||
"Worker:managerdoctor_sr_kingsly_t01",
|
||||
"Worker:managerdoctor_sr_noctor_t01",
|
||||
"Worker:managerdoctor_sr_treky_t01",
|
||||
"Worker:managerdoctor_uc_t01",
|
||||
"Worker:managerdoctor_vr_t01",
|
||||
"Worker:managerengineer_c_t01",
|
||||
"Worker:managerengineer_r_t01",
|
||||
"Worker:managerengineer_sr_countess_t01",
|
||||
"Worker:managerengineer_sr_maths_t01",
|
||||
"Worker:managerengineer_sr_sobs_t01",
|
||||
"Worker:managerengineer_uc_t01",
|
||||
"Worker:managerengineer_vr_t01",
|
||||
"Worker:managerexplorer_c_t01",
|
||||
"Worker:managerexplorer_r_t01",
|
||||
"Worker:managerexplorer_sr_birdie_t01",
|
||||
"Worker:managerexplorer_sr_eagle_t01",
|
||||
"Worker:managerexplorer_sr_spacebound_t01",
|
||||
"Worker:managerexplorer_uc_t01",
|
||||
"Worker:managerexplorer_vr_t01",
|
||||
"Worker:managergadgeteer_c_t01",
|
||||
"Worker:managergadgeteer_r_t01",
|
||||
"Worker:managergadgeteer_sr_fixer_t01",
|
||||
"Worker:managergadgeteer_sr_flak_t01",
|
||||
"Worker:managergadgeteer_sr_zapps_t01",
|
||||
"Worker:managergadgeteer_uc_t01",
|
||||
"Worker:managergadgeteer_vr_t01",
|
||||
"Worker:managerinventor_c_t01",
|
||||
"Worker:managerinventor_r_t01",
|
||||
"Worker:managerinventor_sr_frequency_t01",
|
||||
"Worker:managerinventor_sr_rad_t01",
|
||||
"Worker:managerinventor_sr_square_t01",
|
||||
"Worker:managerinventor_uc_t01",
|
||||
"Worker:managerinventor_vr_t01",
|
||||
"Worker:managermartialartist_c_t01",
|
||||
"Worker:managermartialartist_r_t01",
|
||||
"Worker:managermartialartist_sr_dragon_t01",
|
||||
"Worker:managermartialartist_sr_samurai_t01",
|
||||
"Worker:managermartialartist_sr_tiger_t01",
|
||||
"Worker:managermartialartist_uc_t01",
|
||||
"Worker:managermartialartist_vr_t01",
|
||||
"Worker:managersoldier_c_t01",
|
||||
"Worker:managersoldier_r_t01",
|
||||
"Worker:managersoldier_sr_malcolm_t01",
|
||||
"Worker:managersoldier_sr_princess_t01",
|
||||
"Worker:managersoldier_sr_ramsie_t01",
|
||||
"Worker:managersoldier_uc_t01",
|
||||
"Worker:managersoldier_vr_t01",
|
||||
"Worker:managertrainer_c_t01",
|
||||
"Worker:managertrainer_r_t01",
|
||||
"Worker:managertrainer_sr_jumpy_t01",
|
||||
"Worker:managertrainer_sr_raider_t01",
|
||||
"Worker:managertrainer_sr_yoglattes_t01",
|
||||
"Worker:managertrainer_uc_t01",
|
||||
"Worker:managertrainer_vr_t01",
|
||||
"Worker:workerbasic_c_t01",
|
||||
"Worker:workerbasic_r_t01",
|
||||
"Worker:workerbasic_sr_t01",
|
||||
"Worker:workerbasic_uc_t01",
|
||||
"Worker:workerbasic_vr_t01",
|
||||
"Worker:workerhalloween_alt_sr_t01",
|
||||
"Worker:workerhalloween_c_t01",
|
||||
"Worker:workerhalloween_r_t01",
|
||||
"Worker:workerhalloween_sr_t01",
|
||||
"Worker:workerhalloween_uc_t01",
|
||||
"Worker:workerhalloween_vr_t01"
|
||||
]
|
||||
1604
gui/assets/authenticator/responses/Campaign/expeditionData.json
Normal file
1160
gui/assets/authenticator/responses/Campaign/rewards.json
Normal file
454
gui/assets/authenticator/responses/Campaign/survivorData.json
Normal file
@@ -0,0 +1,454 @@
|
||||
{
|
||||
"author": "This list was created by PRO100KatYT",
|
||||
"fixedAttributes": {
|
||||
"Worker:managerdoctor_c_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsDoctor"
|
||||
},
|
||||
"Worker:managerdoctor_r_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsDoctor"
|
||||
},
|
||||
"Worker:managerdoctor_sr_kingsly_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Doctor-kingsly.IconDef-ManagerPortrait-SR-Doctor-kingsly",
|
||||
"personality": "Homebase.Worker.Personality.IsCompetitive",
|
||||
"managerSynergy": "Homebase.Manager.IsDoctor",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:managerdoctor_sr_noctor_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Doctor-Noctor.IconDef-ManagerPortrait-SR-Doctor-noctor",
|
||||
"personality": "Homebase.Worker.Personality.IsAnalytical",
|
||||
"managerSynergy": "Homebase.Manager.IsDoctor",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:managerdoctor_sr_treky_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Doctor-treky.IconDef-ManagerPortrait-SR-Doctor-treky",
|
||||
"personality": "Homebase.Worker.Personality.IsPragmatic",
|
||||
"managerSynergy": "Homebase.Manager.IsDoctor",
|
||||
"gender": "2"
|
||||
},
|
||||
"Worker:managerdoctor_uc_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsDoctor"
|
||||
},
|
||||
"Worker:managerdoctor_vr_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsDoctor"
|
||||
},
|
||||
"Worker:managerengineer_c_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsEngineer"
|
||||
},
|
||||
"Worker:managerengineer_r_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsEngineer"
|
||||
},
|
||||
"Worker:managerengineer_sr_countess_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Engineer-countess.IconDef-ManagerPortrait-SR-Engineer-countess",
|
||||
"personality": "Homebase.Worker.Personality.IsPragmatic",
|
||||
"managerSynergy": "Homebase.Manager.IsEngineer",
|
||||
"gender": "2"
|
||||
},
|
||||
"Worker:managerengineer_sr_maths_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Engineer-maths.IconDef-ManagerPortrait-SR-Engineer-maths",
|
||||
"personality": "Homebase.Worker.Personality.IsAnalytical",
|
||||
"managerSynergy": "Homebase.Manager.IsEngineer",
|
||||
"gender": "2"
|
||||
},
|
||||
"Worker:managerengineer_sr_sobs_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Engineer-sobs.IconDef-ManagerPortrait-SR-Engineer-sobs",
|
||||
"personality": "Homebase.Worker.Personality.IsDreamer",
|
||||
"managerSynergy": "Homebase.Manager.IsEngineer",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:managerengineer_uc_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsEngineer"
|
||||
},
|
||||
"Worker:managerengineer_vr_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsEngineer"
|
||||
},
|
||||
"Worker:managerexplorer_c_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsExplorer"
|
||||
},
|
||||
"Worker:managerexplorer_r_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsExplorer"
|
||||
},
|
||||
"Worker:managerexplorer_sr_birdie_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Explorer-birdie.IconDef-ManagerPortrait-SR-Explorer-birdie",
|
||||
"personality": "Homebase.Worker.Personality.IsCurious",
|
||||
"managerSynergy": "Homebase.Manager.IsExplorer",
|
||||
"gender": "2"
|
||||
},
|
||||
"Worker:managerexplorer_sr_eagle_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Explorer-eagle.IconDef-ManagerPortrait-SR-Explorer-eagle",
|
||||
"personality": "Homebase.Worker.Personality.IsAdventurous",
|
||||
"managerSynergy": "Homebase.Manager.IsExplorer",
|
||||
"gender": "2"
|
||||
},
|
||||
"Worker:managerexplorer_sr_spacebound_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Explorer-spacebound.IconDef-ManagerPortrait-SR-Explorer-spacebound",
|
||||
"personality": "Homebase.Worker.Personality.IsDreamer",
|
||||
"managerSynergy": "Homebase.Manager.IsExplorer",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:managerexplorer_uc_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsExplorer"
|
||||
},
|
||||
"Worker:managerexplorer_vr_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsExplorer"
|
||||
},
|
||||
"Worker:managergadgeteer_c_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsGadgeteer"
|
||||
},
|
||||
"Worker:managergadgeteer_r_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsGadgeteer"
|
||||
},
|
||||
"Worker:managergadgeteer_sr_fixer_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Gadgeteer-fixer.IconDef-ManagerPortrait-SR-Gadgeteer-fixer",
|
||||
"personality": "Homebase.Worker.Personality.IsAnalytical",
|
||||
"managerSynergy": "Homebase.Manager.IsGadgeteer",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:managergadgeteer_sr_flak_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Gadgeteer-flak.IconDef-ManagerPortrait-SR-Gadgeteer-flak",
|
||||
"personality": "Homebase.Worker.Personality.IsDependable",
|
||||
"managerSynergy": "Homebase.Manager.IsGadgeteer",
|
||||
"gender": "2"
|
||||
},
|
||||
"Worker:managergadgeteer_sr_zapps_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Gadgeteer-zapps.IconDef-ManagerPortrait-SR-Gadgeteer-zapps",
|
||||
"personality": "Homebase.Worker.Personality.IsCurious",
|
||||
"managerSynergy": "Homebase.Manager.IsGadgeteer",
|
||||
"gender": "2"
|
||||
},
|
||||
"Worker:managergadgeteer_uc_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsGadgeteer"
|
||||
},
|
||||
"Worker:managergadgeteer_vr_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsGadgeteer"
|
||||
},
|
||||
"Worker:managerinventor_c_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsInventor"
|
||||
},
|
||||
"Worker:managerinventor_r_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsInventor"
|
||||
},
|
||||
"Worker:managerinventor_sr_frequency_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Inventor-frequency.IconDef-ManagerPortrait-SR-Inventor-frequency",
|
||||
"personality": "Homebase.Worker.Personality.IsDreamer",
|
||||
"managerSynergy": "Homebase.Manager.IsInventor",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:managerinventor_sr_rad_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Inventor-rad.IconDef-ManagerPortrait-SR-Inventor-rad",
|
||||
"personality": "Homebase.Worker.Personality.IsCooperative",
|
||||
"managerSynergy": "Homebase.Manager.IsInventor",
|
||||
"gender": "2"
|
||||
},
|
||||
"Worker:managerinventor_sr_square_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Inventor-square.IconDef-ManagerPortrait-SR-Inventor-square",
|
||||
"personality": "Homebase.Worker.Personality.IsPragmatic",
|
||||
"managerSynergy": "Homebase.Manager.IsInventor",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:managerinventor_uc_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsInventor"
|
||||
},
|
||||
"Worker:managerinventor_vr_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsInventor"
|
||||
},
|
||||
"Worker:managermartialartist_c_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsMartialArtist"
|
||||
},
|
||||
"Worker:managermartialartist_r_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsMartialArtist"
|
||||
},
|
||||
"Worker:managermartialartist_sr_dragon_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-MartialArtist-dragon.IconDef-ManagerPortrait-SR-MartialArtist-dragon",
|
||||
"personality": "Homebase.Worker.Personality.IsAdventurous",
|
||||
"managerSynergy": "Homebase.Manager.IsMartialArtist",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:managermartialartist_sr_samurai_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-MartialArtist-samurai.IconDef-ManagerPortrait-SR-MartialArtist-samurai",
|
||||
"personality": "Homebase.Worker.Personality.IsCompetitive",
|
||||
"managerSynergy": "Homebase.Manager.IsMartialArtist",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:managermartialartist_sr_tiger_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-MartialArtist-tiger.IconDef-ManagerPortrait-SR-MartialArtist-tiger",
|
||||
"personality": "Homebase.Worker.Personality.IsDependable",
|
||||
"managerSynergy": "Homebase.Manager.IsMartialArtist",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:managermartialartist_uc_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsMartialArtist"
|
||||
},
|
||||
"Worker:managermartialartist_vr_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsMartialArtist"
|
||||
},
|
||||
"Worker:managerquestdoctor_r_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsDoctor"
|
||||
},
|
||||
"Worker:managersoldier_c_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsSoldier"
|
||||
},
|
||||
"Worker:managersoldier_r_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsSoldier"
|
||||
},
|
||||
"Worker:managersoldier_sr_malcolm_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Soldier-malcolm.IconDef-ManagerPortrait-SR-Soldier-malcolm",
|
||||
"personality": "Homebase.Worker.Personality.IsCooperative",
|
||||
"managerSynergy": "Homebase.Manager.IsSoldier",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:managersoldier_sr_princess_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Soldier-princess.IconDef-ManagerPortrait-SR-Soldier-princess",
|
||||
"personality": "Homebase.Worker.Personality.IsDependable",
|
||||
"managerSynergy": "Homebase.Manager.IsSoldier",
|
||||
"gender": "2"
|
||||
},
|
||||
"Worker:managersoldier_sr_ramsie_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-Soldier-ramsie.IconDef-ManagerPortrait-SR-Soldier-ramsie",
|
||||
"personality": "Homebase.Worker.Personality.IsAdventurous",
|
||||
"managerSynergy": "Homebase.Manager.IsSoldier",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:managersoldier_uc_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsSoldier"
|
||||
},
|
||||
"Worker:managersoldier_vr_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsSoldier"
|
||||
},
|
||||
"Worker:managertrainer_c_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsTrainer"
|
||||
},
|
||||
"Worker:managertrainer_r_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsTrainer"
|
||||
},
|
||||
"Worker:managertrainer_sr_jumpy_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-PersonalTrainer-jumpy.IconDef-ManagerPortrait-SR-PersonalTrainer-jumpy",
|
||||
"personality": "Homebase.Worker.Personality.IsCooperative",
|
||||
"managerSynergy": "Homebase.Manager.IsTrainer",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:managertrainer_sr_raider_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-PersonalTrainer-raider.IconDef-ManagerPortrait-SR-PersonalTrainer-raider",
|
||||
"personality": "Homebase.Worker.Personality.IsCurious",
|
||||
"managerSynergy": "Homebase.Manager.IsTrainer",
|
||||
"gender": "2"
|
||||
},
|
||||
"Worker:managertrainer_sr_yoglattes_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-SR-PersonalTrainer-yoglattes.IconDef-ManagerPortrait-SR-PersonalTrainer-yoglattes",
|
||||
"personality": "Homebase.Worker.Personality.IsCompetitive",
|
||||
"managerSynergy": "Homebase.Manager.IsTrainer",
|
||||
"gender": "2"
|
||||
},
|
||||
"Worker:managertrainer_uc_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsTrainer"
|
||||
},
|
||||
"Worker:managertrainer_vr_t01": {
|
||||
"managerSynergy": "Homebase.Manager.IsTrainer"
|
||||
},
|
||||
"Worker:workerhalloween_alt_sr_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Troll.IconDef-WorkerPortrait-Troll",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:workerhalloween_c_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Husk.IconDef-WorkerPortrait-Husk",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:workerhalloween_r_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Pitcher.IconDef-WorkerPortrait-Pitcher",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:workerhalloween_sr_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Smasher.IconDef-WorkerPortrait-Smasher",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:workerhalloween_uc_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Husky.IconDef-WorkerPortrait-Husky",
|
||||
"gender": "1"
|
||||
},
|
||||
"Worker:workerhalloween_vr_t01": {
|
||||
"portrait": "/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Lobber.IconDef-WorkerPortrait-Lobber",
|
||||
"gender": "2"
|
||||
}
|
||||
},
|
||||
"bonuses": [
|
||||
"Homebase.Worker.SetBonus.IsResistanceLow",
|
||||
"Homebase.Worker.SetBonus.IsMeleeDamageLow",
|
||||
"Homebase.Worker.SetBonus.IsTrapDamageLow",
|
||||
"Homebase.Worker.SetBonus.IsShieldRegenLow",
|
||||
"Homebase.Worker.SetBonus.IsFortitudeLow",
|
||||
"Homebase.Worker.SetBonus.IsRangedDamageLow",
|
||||
"Homebase.Worker.SetBonus.IsAbilityDamageLow",
|
||||
"Homebase.Worker.SetBonus.IsTrapDurabilityHigh"
|
||||
],
|
||||
"personalities": [
|
||||
"Homebase.Worker.Personality.IsAdventurous",
|
||||
"Homebase.Worker.Personality.IsAnalytical",
|
||||
"Homebase.Worker.Personality.IsCompetitive",
|
||||
"Homebase.Worker.Personality.IsCooperative",
|
||||
"Homebase.Worker.Personality.IsCurious",
|
||||
"Homebase.Worker.Personality.IsDependable",
|
||||
"Homebase.Worker.Personality.IsDreamer",
|
||||
"Homebase.Worker.Personality.IsPragmatic"
|
||||
],
|
||||
"portraits": {
|
||||
"Homebase.Manager.IsDoctor": {
|
||||
"1": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-Doctor-M01.IconDef-ManagerPortrait-Doctor-M01"
|
||||
],
|
||||
"2": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-Doctor-F01.IconDef-ManagerPortrait-Doctor-F01"
|
||||
]
|
||||
},
|
||||
"Homebase.Manager.IsEngineer": {
|
||||
"1": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-Engineer-M01.IconDef-ManagerPortrait-Engineer-M01"
|
||||
],
|
||||
"2": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-Engineer-F01.IconDef-ManagerPortrait-Engineer-F01"
|
||||
]
|
||||
},
|
||||
"Homebase.Manager.IsExplorer": {
|
||||
"1": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-Explorer-M01.IconDef-ManagerPortrait-Explorer-M01"
|
||||
],
|
||||
"2": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-Explorer-F01.IconDef-ManagerPortrait-Explorer-F01"
|
||||
]
|
||||
},
|
||||
"Homebase.Manager.IsGadgeteer": {
|
||||
"1": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-Gadgeteer-M01.IconDef-ManagerPortrait-Gadgeteer-M01"
|
||||
],
|
||||
"2": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-Gadgeteer-F01.IconDef-ManagerPortrait-Gadgeteer-F01"
|
||||
]
|
||||
},
|
||||
"Homebase.Manager.IsInventor": {
|
||||
"1": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-Inventor-M01.IconDef-ManagerPortrait-Inventor-M01"
|
||||
],
|
||||
"2": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-Inventor-F01.IconDef-ManagerPortrait-Inventor-F01"
|
||||
]
|
||||
},
|
||||
"Homebase.Manager.IsSoldier": {
|
||||
"1": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-Marksman-M01.IconDef-ManagerPortrait-Marksman-M01"
|
||||
],
|
||||
"2": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-Marksman-F01.IconDef-ManagerPortrait-Marksman-F01"
|
||||
]
|
||||
},
|
||||
"Homebase.Manager.IsMartialArtist": {
|
||||
"1": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-MartialArtist-M01.IconDef-ManagerPortrait-MartialArtist-M01"
|
||||
],
|
||||
"2": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-MartialArtist-F01.IconDef-ManagerPortrait-MartialArtist-F01"
|
||||
]
|
||||
},
|
||||
"Homebase.Manager.IsTrainer": {
|
||||
"1": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-PersonalTrainer-M01.IconDef-ManagerPortrait-PersonalTrainer-M01"
|
||||
],
|
||||
"2": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-ManagerPortrait-PersonalTrainer-F01.IconDef-ManagerPortrait-PersonalTrainer-F01"
|
||||
]
|
||||
},
|
||||
"Homebase.Worker.Personality.IsAdventurous": {
|
||||
"1": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Adventurous-M01.IconDef-WorkerPortrait-Adventurous-M01",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Adventurous-M02.IconDef-WorkerPortrait-Adventurous-M02",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Adventurous-M03.IconDef-WorkerPortrait-Adventurous-M03"
|
||||
],
|
||||
"2": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Adventurous-F01.IconDef-WorkerPortrait-Adventurous-F01",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Adventurous-F02.IconDef-WorkerPortrait-Adventurous-F02",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Adventurous-F03.IconDef-WorkerPortrait-Adventurous-F03"
|
||||
]
|
||||
},
|
||||
"Homebase.Worker.Personality.IsAnalytical": {
|
||||
"1": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Analytical-M01.IconDef-WorkerPortrait-Analytical-M01",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Analytical-M02.IconDef-WorkerPortrait-Analytical-M02",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Analytical-M03.IconDef-WorkerPortrait-Analytical-M03"
|
||||
],
|
||||
"2": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Analytical-F01.IconDef-WorkerPortrait-Analytical-F01",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Analytical-F02.IconDef-WorkerPortrait-Analytical-F02",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Analytical-F03.IconDef-WorkerPortrait-Analytical-F03"
|
||||
]
|
||||
},
|
||||
"Homebase.Worker.Personality.IsCompetitive": {
|
||||
"1": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Competitive-M01.IconDef-WorkerPortrait-Competitive-M01",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Competitive-M02.IconDef-WorkerPortrait-Competitive-M02",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Competitive-M03.IconDef-WorkerPortrait-Competitive-M03"
|
||||
],
|
||||
"2": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Competitive-F01.IconDef-WorkerPortrait-Competitive-F01",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Competitive-F02.IconDef-WorkerPortrait-Competitive-F02",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Competitive-F03.IconDef-WorkerPortrait-Competitive-F03"
|
||||
]
|
||||
},
|
||||
"Homebase.Worker.Personality.IsCooperative": {
|
||||
"1": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Cooperative-M01.IconDef-WorkerPortrait-Cooperative-M01",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Cooperative-M02.IconDef-WorkerPortrait-Cooperative-M02",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Cooperative-M03.IconDef-WorkerPortrait-Cooperative-M03"
|
||||
],
|
||||
"2": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Cooperative-F01.IconDef-WorkerPortrait-Cooperative-F01",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Cooperative-F02.IconDef-WorkerPortrait-Cooperative-F02",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Cooperative-F03.IconDef-WorkerPortrait-Cooperative-F03"
|
||||
]
|
||||
},
|
||||
"Homebase.Worker.Personality.IsCurious": {
|
||||
"1": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Curious-M01.IconDef-WorkerPortrait-Curious-M01",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Curious-M02.IconDef-WorkerPortrait-Curious-M02",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Curious-M03.IconDef-WorkerPortrait-Curious-M03"
|
||||
],
|
||||
"2": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Curious-F01.IconDef-WorkerPortrait-Curious-F01",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Curious-F02.IconDef-WorkerPortrait-Curious-F02",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Curious-F03.IconDef-WorkerPortrait-Curious-F03"
|
||||
]
|
||||
},
|
||||
"Homebase.Worker.Personality.IsDependable": {
|
||||
"1": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Dependable-M01.IconDef-WorkerPortrait-Dependable-M01",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Dependable-M02.IconDef-WorkerPortrait-Dependable-M02",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Dependable-M03.IconDef-WorkerPortrait-Dependable-M03"
|
||||
],
|
||||
"2": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Dependable-F01.IconDef-WorkerPortrait-Dependable-F01",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Dependable-F02.IconDef-WorkerPortrait-Dependable-F02",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Dependable-F03.IconDef-WorkerPortrait-Dependable-F03"
|
||||
]
|
||||
},
|
||||
"Homebase.Worker.Personality.IsDreamer": {
|
||||
"1": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Dreamer-M01.IconDef-WorkerPortrait-Dreamer-M01",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Dreamer-M02.IconDef-WorkerPortrait-Dreamer-M02",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Dreamer-M03.IconDef-WorkerPortrait-Dreamer-M03"
|
||||
],
|
||||
"2": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Dreamer-F01.IconDef-WorkerPortrait-Dreamer-F01",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Dreamer-F02.IconDef-WorkerPortrait-Dreamer-F02",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Dreamer-F03.IconDef-WorkerPortrait-Dreamer-F03"
|
||||
]
|
||||
},
|
||||
"Homebase.Worker.Personality.IsPragmatic": {
|
||||
"1": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Pragmatic-M01.IconDef-WorkerPortrait-Pragmatic-M01",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Pragmatic-M02.IconDef-WorkerPortrait-Pragmatic-M02",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Pragmatic-M03.IconDef-WorkerPortrait-Pragmatic-M03"
|
||||
],
|
||||
"2": [
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Pragmatic-F01.IconDef-WorkerPortrait-Pragmatic-F01",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Pragmatic-F02.IconDef-WorkerPortrait-Pragmatic-F02",
|
||||
"/Game/UI/Icons/Icon-Worker/IconDefinitions/IconDef-WorkerPortrait-Pragmatic-F03.IconDef-WorkerPortrait-Pragmatic-F03"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -74,76 +74,14 @@
|
||||
"Schematic:sid_launcher_grenade_r_ore_t01"
|
||||
],
|
||||
"ConversionControl:cck_weapon_scavenger_consumable_sr": [
|
||||
"Schematic:sid_piercing_spear_military_sr_ore_t01",
|
||||
"Schematic:sid_piercing_spear_laser_sr_ore_t01",
|
||||
"Schematic:sid_piercing_spear_sr_ore_t01",
|
||||
"Schematic:sid_edged_sword_medium_laser_sr_ore_t01",
|
||||
"Schematic:sid_edged_sword_medium_laser_founders_sr_ore_t01",
|
||||
"Schematic:sid_edged_sword_medium_sr_ore_t01",
|
||||
"Schematic:sid_edged_sword_light_sr_ore_t01",
|
||||
"Schematic:sid_edged_sword_hydraulic_sr_ore_t01",
|
||||
"Schematic:sid_edged_sword_heavy_sr_ore_t01",
|
||||
"Schematic:sid_edged_scythe_laser_sr_ore_t01",
|
||||
"Schematic:sid_edged_scythe_sr_ore_t01",
|
||||
"Schematic:sid_edged_axe_medium_laser_sr_ore_t01",
|
||||
"Schematic:sid_edged_axe_medium_sr_ore_t01",
|
||||
"Schematic:sid_edged_axe_light_sr_ore_t01",
|
||||
"Schematic:sid_edged_axe_heavy_sr_ore_t01",
|
||||
"Schematic:sid_blunt_medium_sr_ore_t01",
|
||||
"Schematic:sid_blunt_light_sr_ore_t01",
|
||||
"Schematic:sid_blunt_hammer_rocket_sr_ore_t01",
|
||||
"Schematic:sid_blunt_hammer_heavy_sr_ore_t01",
|
||||
"Schematic:sid_blunt_light_rocketbat_sr_ore_t01",
|
||||
"Schematic:sid_blunt_club_light_sr_ore_t01",
|
||||
"Schematic:sid_assault_auto_sr_ore_t01",
|
||||
"Schematic:sid_assault_auto_halloween_sr_ore_t01",
|
||||
"Schematic:sid_assault_auto_founders_sr_ore_t01",
|
||||
"Schematic:sid_assault_surgical_sr_ore_t01",
|
||||
"Schematic:sid_assault_singleshot_sr_ore_t01",
|
||||
"Schematic:sid_assault_semiauto_sr_ore_t01",
|
||||
"Schematic:sid_assault_raygun_sr_ore_t01",
|
||||
"Schematic:sid_assault_lmg_sr_ore_t01",
|
||||
"Schematic:sid_assault_lmg_drum_founders_sr_ore_t01",
|
||||
"Schematic:sid_assault_hydra_sr_ore_t01",
|
||||
"Schematic:sid_assault_doubleshot_sr_ore_t01",
|
||||
"Schematic:sid_assault_burst_sr_ore_t01",
|
||||
"Schematic:sid_sniper_tripleshot_sr_ore_t01",
|
||||
"Schematic:sid_sniper_standard_scope_sr_ore_t01",
|
||||
"Schematic:sid_sniper_standard_sr_ore_t01",
|
||||
"Schematic:sid_sniper_shredder_sr_ore_t01",
|
||||
"Schematic:sid_sniper_hydraulic_sr_ore_t01",
|
||||
"Schematic:sid_sniper_boltaction_scope_sr_ore_t01",
|
||||
"Schematic:sid_sniper_auto_sr_ore_t01",
|
||||
"Schematic:sid_sniper_amr_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_tactical_precision_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_tactical_founders_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_standard_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_semiauto_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_minigun_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_longarm_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_heavy_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_break_ou_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_break_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_auto_sr_ore_t01",
|
||||
"Schematic:sid_pistol_zapper_sr_ore_t01",
|
||||
"Schematic:sid_pistol_space_sr_ore_t01",
|
||||
"Schematic:sid_pistol_semiauto_sr_ore_t01",
|
||||
"Schematic:sid_pistol_rocket_sr_ore_t01",
|
||||
"Schematic:sid_pistol_rapid_sr_ore_t01",
|
||||
"Schematic:sid_pistol_hydraulic_sr_ore_t01",
|
||||
"Schematic:sid_pistol_handcannon_semi_sr_ore_t01",
|
||||
"Schematic:sid_pistol_handcannon_sr_ore_t01",
|
||||
"Schematic:sid_pistol_gatling_sr_ore_t01",
|
||||
"Schematic:sid_pistol_firecracker_sr_ore_t01",
|
||||
"Schematic:sid_pistol_dragon_sr_ore_t01",
|
||||
"Schematic:sid_pistol_bolt_sr_ore_t01",
|
||||
"Schematic:sid_pistol_autoheavy_sr_ore_t01",
|
||||
"Schematic:sid_pistol_autoheavy_founders_sr_ore_t01",
|
||||
"Schematic:sid_pistol_auto_sr_ore_t01",
|
||||
"Schematic:sid_launcher_rocket_sr_ore_t01",
|
||||
"Schematic:sid_launcher_pumpkin_rpg_sr_ore_t01",
|
||||
"Schematic:sid_launcher_hydraulic_sr_ore_t01",
|
||||
"Schematic:sid_launcher_grenade_sr_ore_t01"
|
||||
"Schematic:sid_assault_scavenger_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_semiauto_scavenger_sr_ore_t01",
|
||||
"Schematic:sid_sniper_scavenger_sr_ore_t01",
|
||||
"Schematic:sid_edged_axe_scavenger_sr_ore_t01",
|
||||
"Schematic:sid_blunt_scavenger_sr_ore_t01",
|
||||
"Schematic:sid_shotgun_break_scavenger_sr_ore_t01",
|
||||
"Schematic:sid_pistol_scavenger_sr_ore_t01",
|
||||
"Schematic:sid_piercing_spear_scavenger_sr_ore_t01"
|
||||
],
|
||||
"ConversionControl:cck_weapon_core_consumable": [
|
||||
"Schematic:sid_piercing_spear_military_sr_ore_t01",
|
||||
@@ -6284,7 +6284,8 @@
|
||||
"_noIndex": false,
|
||||
"_activeDate": "2019-08-21T15:59:59.342Z",
|
||||
"lastModified": "2019-10-29T13:07:27.936Z",
|
||||
"_locale": "en-US"
|
||||
"_locale": "en-US",
|
||||
"_templateName": "FortniteGameDynamicBackgrounds"
|
||||
},
|
||||
"creativenews": {
|
||||
"news": {
|
||||
@@ -17,13 +17,17 @@
|
||||
"4C3B1FC20956AE8C3C29A85446D013F4:dVksVi55yMPvgmuA2rjvlyDlySrQOK8wmH3aa69wtZo=:BID_A_003_Ultralight",
|
||||
"D85DFC0115FC3C75A6AD9C5D15B0DBF4:KFp5kuqdJIex+SS95mCy4nETnpzlaY8UHe8X7BSjGxY=:Wrap_080_Blackout1",
|
||||
"7A59383C41DD998408A74BC37C7D6887:nSrruhpHV3ZEPPECeqWkMh/6mBFzQD8yEFKZS6oJeu8=:EID_BasketballDribble_E6OJV",
|
||||
"DB982042FC23E63A912CF079BB11B4D7:XxSdF8FvU6TPmMg2ZFLcxPXFyom3s5IcDpSFz8rcdfQ=:EID_Devotion",
|
||||
"010E6ACF85E4A58BF6F551EFE7B85F61:DwCIH5Dw/1wdiS6gFGmWe4HUgD9kMOEzjbzM/1QshM4=:Pickaxe_ID_178_SpeedyMidnight",
|
||||
"95C6C2B37E1D15D60BB5C20D9D47BA31:exdH0xe2v+2t1wyoXpZGLX+iGDIdRxcQ6BG9iqi07Lo=:EID_Noble",
|
||||
"A92DE306E5174C82739D774151D7B661:RF9sTh7l2tp+ypCb/Lp3WeMfBExvk2LSUbim04xsCJo=",
|
||||
"471CA05DCEE84890F9287E4E0DB31C08:cclx9Dp+FcphJfVZLUAdo21nLGn8pQ7GutQgY4LCOts=:Pickaxe_WinterHunterFNCS",
|
||||
"8335E3DF8B0DFBCB0C05EFB5FF1B8A81:shx/UPd2PJpGZtpddRmoS7RosbEO0MlsaNb+9aaQR9g=:Pickaxe_ID_204_Miner",
|
||||
"DC487286E8C1CD5FE18AC3FE76034EF2:3h9IwK2qQP8PHVuO1aZI1C34JrJxKBnXJOFcSDSj99M=:CID_478_Athena_Commando_F_WorldCup",
|
||||
"CB2F74DD1C6D7FB4560BF4AA6B7460EE:1MXyB7YDAZC+p/2Fl+tefE6s3cCdKs+5tXDHEg1JLfg=:MusicPack_178_S24FNCSDrops",
|
||||
"8A6DABC9AF8B5FE521D365DB605D0AE0:T721SqBTncYsd8Gej01RnLX6sEaCgJoILnRauHaJz+g=:BID_284_NeonLines",
|
||||
"B9E8BA33F3FF6F9DB4CA35F51437B433:6gLG1UQHcMeCErfTl6ZNA78CzF2boBxzxfF1GPqnPSE=:EID_Iconic",
|
||||
"73997D156EB0408D62DFD6C98F37F153:sCkek0K/q2DJt8RTMG09RpU0wnr+JWtslnn8Zds4qEM=",
|
||||
"DE4CBA7A27B818D6B299767036C671A9:o7axeOYDdjXZ4MTWM4Io4XRNfQG2WH9qwPvBSJk8vJM=:Wrap_508_ApexWild",
|
||||
"5E15C5486CE8E539552D4D3E7682F9E2:+L/tTz+woDFZJEvtxfq8m8tNI1R72sYK7rnYr7sHTis=:EID_TeamRobot",
|
||||
"E47EFA3166A5D7B35CEC27B19AC66AE5:JURSqAHhHK6YqLP5rKhCO+SQ2oql4NqJaoaeNGtsrM8=:LSID_325_RiftTourMKTG1_18M49",
|
||||
@@ -41,6 +45,7 @@
|
||||
"F60CFFFA32CF6A877B50DA7F0A88326E:OWIopbB4fxaobofPI9lF9hn6BPG9NVLp4Od61uQppfo=:CID_392_Athena_Commando_F_BountyBunny",
|
||||
"6CED8B5F648ED1ACCC8F1194901775AF:qjfCT39FVniEjPj+CvZu5Qz8XHHtdnH8kCsV3P1OaJw=:BID_252_EvilBunny",
|
||||
"6CFF02B6F01FBC306D428E8EE2CA6232:1BaXCMF6dJeORZditLbWRLFKVlvYZerZdvifZuvNTfk=",
|
||||
"20366C09DB19030DD8169A4D7560FCC1:Bt750bLY8a84ai95EQ3JWESQj5jz5Bf5LItpADksD5o=",
|
||||
"958DC719715C145004E1E028E72464D0:ZTCrQKaSpw5dAyqyW/jGz+KF2DlvSX8wCW5/4dhdFT0=:Character_RedOasisGooseberry",
|
||||
"E8585F83E40CD4CF0272EA6012055A97:4LrXtLEBhL5JquAu4/kq1Dghb4/355YROt3ciXg+ysE=:BID_988_Rumble",
|
||||
"80B01346D82C75E9165D30C8D4670D67:vUSIr4/Ld2SstnhJMcWOWEbtPeQ0EOY5g1XV9OWFBW0=",
|
||||
@@ -62,17 +67,20 @@
|
||||
"FD0C3696948675DC3C2CBF5098D57D0D:rBWyTh/AVyZxi2oiQxM/OeD/HYZOSdVidEQeKoowV6U=:Pickaxe_ID_589_CavernMale_9U0A8",
|
||||
"001B8CDAE8386ACB5DFE26FA59C10B40:XA9kqeHyWLK/xsRzYLCkooN/dBRNTyjy5sw9Jv+8nRs=",
|
||||
"8AE56A5795250C959CD4357AF32DA563:GL9+gTLkh5vnyzImLDdxGYFksrHsmmJSUfZB9mP9fdM=",
|
||||
"376B77890B5057EBBE1C3D0CD97BF4C5:UYA853Oz4bzCHoXU73CELJzefJ4EE1VjwEUiXti8xns=:Wrap_Pencil",
|
||||
"4C3B1FC20956AE8C3C29A85446D013F4:dVksVi55yMPvgmuA2rjvlyDlySrQOK8wmH3aa69wtZo=:Pickaxe_ID_800_UltralightFemale",
|
||||
"C624A3D18A8A2494288EE915D11518B7:/q+bDo9akBx2JId6QvLQW1YoN4jBEEn+QdzBXjB3OpQ=",
|
||||
"35C2B057E5168DCA74B6F1DDAC745E60:73haJlY3S0TVmH0ELxyw6p5FzFRrITWqOmobH9F2Mq8=:BID_937_KeenMale_YT098",
|
||||
"E4D8D083C49828F6BF310ECA74A84F98:NxjtZXHe49xC1zUVs+XKjHbeic3prkFOWmwkaQ1vOFw=:Wrap_395_TextileBlack_DBVU2",
|
||||
"1B1978CC0EC6D4D937800A9E1CA87CA0:OjIDp8UXlfFZCaVJ6GLnMM+98VabjD7EB3J7ahiRNk0=:BID_953_Gimmick_1I059",
|
||||
"1937F4ADBC2C38EF4F189DC2B1AE58AB:tWzxKwKEDzI0RsQGl2GvOVqZwxOSOiZaCQkyK1hE+lA=:EID_InspireSpell",
|
||||
"4C8D53A32D85124D08A3DCE6D3474A30:gam5sVciLPzKr+wmWOoctLo5HFqBvBLKKcxh6ZV1kn0=:Pickaxe_ID_532_WombatFemale_CWE2D",
|
||||
"FC4E841A2B346A848784A3190B5D05B2:a4+ZHXPUacxXOJmJxoJlp4vzzEApO6fWJXvvUYW43yU=",
|
||||
"AC22C5B2B654FE15BDCC8B664D033140:zE2ddgoXrJ7X0UEkphUtys0CeoTzIDpAZ58beqOkx4M=:CID_A_232_Athena_Commando_F_CritterStreak_YILHR",
|
||||
"30A1FD89B2D3C155DAF14852A39BA97F:C0IwuJFw9v06OF8XthOhzUd3nHOTCII1gmx/7eepmDo=:Pickaxe_ID_747_ZestMale_3KAEG",
|
||||
"010E6ACF85E4A58BF6F551EFE7B85F61:DwCIH5Dw/1wdiS6gFGmWe4HUgD9kMOEzjbzM/1QshM4=:Glider_ID_131_SpeedyMidnight",
|
||||
"BDB9B53603F92D55B57E8DB38FCEB570:gPrhs5YAEFh9OzYY0tSw8MPRFr/aS0cdRLp41tjsU3Y=:EID_Goodbye",
|
||||
"471CA05DCEE84890F9287E4E0DB31C08:cclx9Dp+FcphJfVZLUAdo21nLGn8pQ7GutQgY4LCOts=",
|
||||
"7FA066BD68EDBE54C44CEAF5FDE591AA:MqrhrL7xbe11CZPwz1pJTx8M8yUHGe/VHL29VKlKVKg=",
|
||||
"A0926AD8C6EDE29250AC4A0A93156E7B:keN/yZ7qnvcPZeIflsked9TAT867gbPgmnG1QdlSn3E=:Pickaxe_ID_382_Donut1H",
|
||||
"C2216794035D5FC95DCC07FA72E1EC86:4CS9WyhB+tpbl/w4bd+9cnjWZTf0NCO8zl1/6TmIQeM=:EID_HNYGoodRiddance",
|
||||
@@ -128,7 +136,9 @@
|
||||
"828B24CF7786DF74D8511CA89DEED8CF:nCahv7mQhidmYXSmKif6z7d6bQ60mdPQ7SrdZ7a3GaE=:CID_911_Athena_Commando_F_York_B",
|
||||
"1655272875DB718493BB6B09032657D7:xQLpNTDeYJCcQOUQS2ICyfByvhPU3nC5cfJRbPSugdY=:EID_Survivorsault_NJ7WC",
|
||||
"E4D8D083C49828F6BF310ECA74A84F98:NxjtZXHe49xC1zUVs+XKjHbeic3prkFOWmwkaQ1vOFw=:Pickaxe_ID_675_TextilePupMale_96JZF",
|
||||
"376B77890B5057EBBE1C3D0CD97BF4C5:UYA853Oz4bzCHoXU73CELJzefJ4EE1VjwEUiXti8xns=:Character_Pencil_Pear",
|
||||
"545B9777127F4BE242F802C627356B7E:RNI/KvLEXcGoGnk3/AKaYbyJmXMtQl9Zmvl8ErePB4g=:Pickaxe_ID_691_RelishMale_FVCA7",
|
||||
"4EFDA950DA6AA1E6422D2FBF6B89DE85:HDEI+ufmAF1VN2+mYiOFFFDjPVAfkEcmrnyTQh85dmo=:LoadingScreen_Sunburst_KeyArt",
|
||||
"C7623A35411F3D5FBDE2688C7E4A69EB:qAi49mUKsB2dbfbtJWDf3yO2DfRStA+Ed9XgDjC8Zaw=:Glider_ID_109_StreetGoth",
|
||||
"4755D9C0E2D1DE1C09B77DEA8B830471:9tUO5yVhvp+/sp7icZaEDw05nMAdS6bYAWYyfQNsxBc=:Pickaxe_ID_387_DonutCup",
|
||||
"D938886074C83017118B4484AECE11AB:wjHAHm00Vg6n2x5LU91ap0+SFX5ZXXBmax1LyX8Aips=:LSID_294_Alchemy_09U3R",
|
||||
@@ -145,8 +155,10 @@
|
||||
"738C0E8B5DAB633906DC77FE4C4E48F9:qr1ZfbWRp+uqwBMvEhY1XBj7Sr7SxRsWHN7jqYPaZfU=",
|
||||
"A92DE306E5174C82739D774151D7B661:RF9sTh7l2tp+ypCb/Lp3WeMfBExvk2LSUbim04xsCJo=:LSID_374_GuavaKey_IY0H9",
|
||||
"FC4E841A2B346A848784A3190B5D05B2:a4+ZHXPUacxXOJmJxoJlp4vzzEApO6fWJXvvUYW43yU=:Backpack_EmeraldGlassStandAlone",
|
||||
"1BEED2926C38652D7287878CB2724D6D:njsOPcs6lEFCruh/YjfHTdcoUJRtIh2hnzHwdkAYQFA=:EID_Viral",
|
||||
"7C469274E430B5E3005EF1799DE618CC:5j5CNw8BI2+kBShT+u7kgw9HyCZ3dOvCMGBO9WScNPQ=:EID_Wayfare",
|
||||
"3E89561331A72D226FBF962DA29DBB82:qzWv2zubDSSrpTt3tKc4ZsReqR3QBKjhU1cGzVe7KH4=:CID_387_Athena_Commando_F_Golf",
|
||||
"B3D2793477E5D467475BE403774360E5:HNj5inGk1/2h9f0r4+SGPPY9t69eOwS6w0XGxpTVOTM=",
|
||||
"01079D19DDDEC8BD51AF536A7106906F:QQQwnB63pdEdKEqLYP9QzAaJXakZ3w1Iuai7YU3A+Xs=:CID_A_300_Athena_Commando_M_Slither_C_IJ94B",
|
||||
"78FA1DF9C04F25EC129AA57492626563:AZT1/Asa4CuxdTtvLrw9nlEcxfOuoTnLbSLztfs7QQ4=",
|
||||
"F78569F2AD7950F870965BC647904647:e3+Nhzk8SBfmZWoQThFsZmnyJs2AoJ+LQDgMz45YAUE=:BID_653_Football20_1BS75",
|
||||
@@ -154,6 +166,7 @@
|
||||
"21D9E3FA446D32EE85025841557C1E4C:KBL9ZqzocmLvcq5k3mwTCeoeeVfJdw9wjuQacUrg50w=:CID_A_242_Athena_Commando_F_Grasshopper_D_EIQ7X",
|
||||
"96FD474CBA52137DC5ABF658BE17C792:ZLWvbUR7Xow1GUNjC9Mxg7DHVoJAnBr4b9gSzmyFcxU=:BID_862_BigBucksBattleship_1JA5G",
|
||||
"BB26302A83A2B42228EF6A731E598360:q6GH+OJutjEXL5wKuJnbLKAan9V/AXRxIkqg6WgSzUU=:Wrap_084_4thofJuly",
|
||||
"376B77890B5057EBBE1C3D0CD97BF4C5:UYA853Oz4bzCHoXU73CELJzefJ4EE1VjwEUiXti8xns=:Character_Pencil_Mango",
|
||||
"1B1978CC0EC6D4D937800A9E1CA87CA0:OjIDp8UXlfFZCaVJ6GLnMM+98VabjD7EB3J7ahiRNk0=:Glider_ID_349_GimmickMale_MC92O",
|
||||
"21D9E3FA446D32EE85025841557C1E4C:KBL9ZqzocmLvcq5k3mwTCeoeeVfJdw9wjuQacUrg50w=:CID_A_239_Athena_Commando_F_Grasshopper_H6LB7",
|
||||
"204D49F063979C3AF87EF896D074D1CF:SaYFk+GEE7mL4dsgs0v0VGR5ER4TwH8uTNX5XqSglu8=",
|
||||
@@ -174,6 +187,7 @@
|
||||
"514364A06F8C12C3398C5F63D909EF7D:D8/bj3etFg8eJOVZ26L+pMrsdlTusbgvR2CL4WqKl3E=",
|
||||
"8E1887D55A60F69B33B234242FF49653:YofZaW+CRl0jhVhkp9z2CQWhTPwyjQ6dbHtISkLDfVU=:Glider_ID_367_AlfredoMale",
|
||||
"DE4CBA7A27B818D6B299767036C671A9:o7axeOYDdjXZ4MTWM4Io4XRNfQG2WH9qwPvBSJk8vJM=:BID_A_064_ApexWild_RedMale",
|
||||
"E28AF2E3BB7EBBB69D962A15879E696E:hJE3fnZPwRmG8XIw+RJvVsCh9dOHDD82VAhvMbi+nvs=:Character_DualParadox",
|
||||
"34DD24ED0CE62244E7FFD27EF4C29EB5:jTgMUc1ciLKwXF/PqyFJl6s9Iw5SXYHKiSThOQhG5TE=:Pickaxe_ID_735_FoeMale_2T3KB",
|
||||
"8E1887D55A60F69B33B234242FF49653:YofZaW+CRl0jhVhkp9z2CQWhTPwyjQ6dbHtISkLDfVU=:EID_Alfredo",
|
||||
"01079D19DDDEC8BD51AF536A7106906F:QQQwnB63pdEdKEqLYP9QzAaJXakZ3w1Iuai7YU3A+Xs=:CID_A_306_Athena_Commando_F_Slither_D_I6D2O",
|
||||
@@ -184,6 +198,7 @@
|
||||
"919FDAB2FDB531820404333B27DC7B06:W9Csp0y6agsgcQXlRGvYUpPGPImNdFfBsZ8yQoUEdGg=:BID_296_Sarong",
|
||||
"A7D34E80FA70CDD2F367DBEF93B98467:KVErbMXsQqx7dxrZp5Ara4OVlA17pc29E2SZlFNipPU=:BID_283_StormSoldier",
|
||||
"6D85E82539341B90944E84FFAAD872FB:mAiBk7KbE2Dnr+yVFyJK1yAwv2eWb+yANFH0z2krQkw=:BID_299_BriteBomberSummer",
|
||||
"8D44654E9EA2AAC35E489476B1948E58:Dwb/irSIIGd3tLLPEP5OqJY1D4KfjdP4+uP4+Ht4YOo=:Wrap_ShinyStar",
|
||||
"2FF619685EC983B800018ECBFF377ABB:Dn5ZlXEhBAhXP0RbkDskEQwOK4RUKTwAIls6cvVOr0g=:EID_SpeedRun",
|
||||
"01079D19DDDEC8BD51AF536A7106906F:QQQwnB63pdEdKEqLYP9QzAaJXakZ3w1Iuai7YU3A+Xs=:CID_A_303_Athena_Commando_F_Slither_D0YX9",
|
||||
"4C3B1FC20956AE8C3C29A85446D013F4:dVksVi55yMPvgmuA2rjvlyDlySrQOK8wmH3aa69wtZo=:LSID_432_SCRN_Ultralight",
|
||||
@@ -194,8 +209,8 @@
|
||||
"E1B1A5908EF6377D7FB29F776486A6A0:qaZB3Q+6kKTtlO4aGWBsnjSxCwX3kmr8oOF/2QDZ2qc=:EID_BasilStrong",
|
||||
"3E89561331A72D226FBF962DA29DBB82:qzWv2zubDSSrpTt3tKc4ZsReqR3QBKjhU1cGzVe7KH4=:Pickaxe_ID_190_GolfClub",
|
||||
"726DD9BDA97CE92DFF162668027518BE:/QdzaWcoVhInSz0Oa0qk+NV3XxRt9WlXwcAu766Y6aY=",
|
||||
"AF3080C00CB8CB301C167B00E9671CD4:wLmQDoGeYBN8Og/IMDoGxuuQNy7M+RQkKtajSZiOebE=:Pickaxe_ID_558_SmallFryMale_YBD34",
|
||||
"AF3080C00CB8CB301C167B00E9671CD4:wLmQDoGeYBN8Og/IMDoGxuuQNy7M+RQkKtajSZiOebE=:BID_710_SmallFry_GDE1J",
|
||||
"AF3080C00CB8CB301C167B00E9671CD4:wLmQDoGeYBN8Og/IMDoGxuuQNy7M+RQkKtajSZiOebE=:Pickaxe_ID_558_SmallFryMale_YBD34",
|
||||
"59AF6C46ABB214024067564F69D6EA37:NtUgzeFVvkbyZQGRVdteWV61HjED9MXquqlVKHo3c/M=:Glider_ID_238_Soy_RWO5D",
|
||||
"4009CB877085F3B3B0D76A686465A140:gMLJXUbFcIrqqUlAuoMI1b27KdWHBVJJeJWdYV1Iiro=:Glider_ID_276_Kepler_BEUUP",
|
||||
"C811FB0357FAC2A923E8DE46507A2D92:IjM7BWHvhr+4YcndrbmbTh96802H/CWrs364yB1Mg7w=",
|
||||
@@ -203,11 +218,15 @@
|
||||
"0242DBD83576CC7E4A6F228D02216147:Yfycn3jciR/FCYQx42W2GMzMp3pA3rgbL6WnVmJStxQ=:EID_Tonal_51QI9",
|
||||
"B0894F58B3D7DEA37D3432AB32B78EB4:gKD8R847p9z0mbZ/euClocy1Z9Gg1daZjk/gDqc34a4=:BID_950_Solstice_APTB0",
|
||||
"01FC97F8787B82E027EC64661E0D36AB:Mh1l2LJ3YrgaZtg7sRTd8XeBkVcyA3i089gZKkTr1gM=:Wrap_466_CactusDancer_A",
|
||||
"376B77890B5057EBBE1C3D0CD97BF4C5:UYA853Oz4bzCHoXU73CELJzefJ4EE1VjwEUiXti8xns=:Character_Pencil_Apple",
|
||||
"DFE6C0504C061EEF0E77A43EE3B613E6:ympNAeN/2VbM7CJbFyVv2stK9oBU4htW//P5CMAMIu8=",
|
||||
"EDF724493161095DB54E9613C243A355:Yp7dsOYO778G7uRZNYhGag2diT70vhu2hAWvkzvtHjg=:BID_A_002_IndigoMale",
|
||||
"C97E930BC95DC795F4416A7B93E3B9CC:KxRPbXqD3ytwLLbZMbZmn+G+gjwOUljg/7HPjj8xP0o=",
|
||||
"713D64294CD1C40F60DEEB805E3A2D87:CJOOHtEX7q4CELcZ96oZjrmSZd7pyJ2fMaFX912GDl8=:BID_193_TeriyakiFishMale",
|
||||
"7A59383C41DD998408A74BC37C7D6887:nSrruhpHV3ZEPPECeqWkMh/6mBFzQD8yEFKZS6oJeu8=:CID_A_085_Athena_Commando_F_Hardwood_K7ZZ1",
|
||||
"599668A98461E4D89196E0189C32C4D2:8MqQjC52vWK/VwX4SfYC1wu9eiUTXdqq/xWODcW9dQ4=:CID_468_Athena_Commando_F_TennisWhite",
|
||||
"7A59383C41DD998408A74BC37C7D6887:nSrruhpHV3ZEPPECeqWkMh/6mBFzQD8yEFKZS6oJeu8=:CID_A_088_Athena_Commando_F_Hardwood_D_WPHX2",
|
||||
"4EFDA950DA6AA1E6422D2FBF6B89DE85:HDEI+ufmAF1VN2+mYiOFFFDjPVAfkEcmrnyTQh85dmo=:Wrap_SunBurst",
|
||||
"44DB36B2D2B3854669780458D2FE48C4:gtl0smAMRKg8d9TdDH47lUOYCygKzbAPA6/HaXLWy94=:Season17_Magesty_Backbling_Schedule",
|
||||
"F533FEDB46B06F324383349BDBC825D1:Z7b6780R78xFbYRbQehW/VZVDftI02RqvKe7XIYiOBc=:BID_184_SnowFairyFemale",
|
||||
"B66EED5CA4F4ED75170872E30B9B0E23:rHT8/uzcZZ0ENxU9dxKpr+cdAajZ5L5U0geHt6NoZhI=:Pickaxe_ID_420_CandyAppleSour_JXBZA",
|
||||
@@ -243,9 +262,11 @@
|
||||
"44DB36B2D2B3854669780458D2FE48C4:gtl0smAMRKg8d9TdDH47lUOYCygKzbAPA6/HaXLWy94=:EID_Majesty_49JWY",
|
||||
"17F31F416B1B0A73F14F0A7973DDBD76:+hUk8/wD736u5sylQPXcKKREoo5vSPaWPG+3xxT5nFM=:Pickaxe_ID_157_Dumpling",
|
||||
"59AF6C46ABB214024067564F69D6EA37:NtUgzeFVvkbyZQGRVdteWV61HjED9MXquqlVKHo3c/M=:Pickaxe_ID_462_Soy_4CW52",
|
||||
"36351B933FFCFF1746737649E9806CF9:2ZtfFqHREh2sKsMYN23yW+2Sd0OSNN5CHGd/qlXVd7k=:LoadingScreen_TigerRoot",
|
||||
"F3A99CD0D4F58EECEEB0D112506AD846:ZZtCRPcKk6itVryDavp7uZFIXiZF5CW0O9b+8Zt2Oag=:LSID_328_Quarrel_K4C12",
|
||||
"E4D8D083C49828F6BF310ECA74A84F98:NxjtZXHe49xC1zUVs+XKjHbeic3prkFOWmwkaQ1vOFw=:Glider_ID_316_TextileMale_3S90R",
|
||||
"02421097082555483CA9524F79EF7687:e9wZT5/2KHmpbw6KjR8u4uo3iG00O92+PAZMbk09a3w=:BID_545_RenegadeRaiderFire",
|
||||
"2981826DE79FF29E18E71842E259C429:8ZvDzw8wgo2ogkeqTm4pYe6fh7ghrOxdZXEwkpaPGOU=",
|
||||
"D49757E2D55451A0D5B341906FE2ABE4:PWMwnjgi/wUDV+yxg02QsU33jA529fxVTRHyqnkv21c=:EID_AshtonSaltLake",
|
||||
"02743CF33556232CE2CDE4BAAE108E2B:fEeB1cPrmwILnnMkELOaIMVfGJXixlOZSzby0xhKPHk=",
|
||||
"B1B800E199A6D4649287C11AE89F67CA:3udFXffIw3c7eM5hljF5mJQA36FbW2PeF8Gx1TcD1vc=:Pickaxe_ID_201_Swashbuckler",
|
||||
@@ -264,10 +285,12 @@
|
||||
"772E01C212E9A77A501AF954ADA90B09:nQ4i6bbmbGMzcq8iyjoM/BGUbX2DSIJRAZ96/qaOf/Y=:Pickaxe_ID_744_SleekGlassesMale_ID69U",
|
||||
"7EE5B905919FC30BA533A9B72266C37D:kAD28wIO613FRtg5cfGz+jb0Ofed2l3NonVGSmeqCAU=",
|
||||
"F33B69585B65C333655C545A038BCEE5:0+gUoAUkiBbY5uqO9rIehUDkvrr/PY3vBY16AMHQASw=:Glider_StallionSmoke",
|
||||
"476EE53C2EAA24FD1950A9875FB4CF59:LQMwgWwsoSqGyYbBouYaMaN8NZ38Vy5r3Tqa7KA71oQ=:Backpack_FallValleyBlink",
|
||||
"566C4D92AF66F45DF5E2D7EB43CC27AE:EuAYwU5tQBXzGoSj5BMc7S5yFfe9wZ2qrzx/hIHpnqw=:Pickaxe_ID_479_LunchBox1H",
|
||||
"EBFE6788D367D741AF0A4FD098CDFD39:FAeJTGyT49P+dQOmKx+lMYVAxu7qtIPlqSaLAR85zqI=:EID_AssassinVest",
|
||||
"57EC154062C75464BD8A087D89732317:5AEwoCp79njYci8QYF+sLMkGpjDnFCYLSCtz4LD9D78=:BID_428_GalileoFerry_28UZ3",
|
||||
"907E8D93213A838738E26D30AE3A5DCB:Is1Z/2TjgM6jWr9R/zd1E4bjKhDnWmae7rjW+UIU5Yc=",
|
||||
"376B77890B5057EBBE1C3D0CD97BF4C5:UYA853Oz4bzCHoXU73CELJzefJ4EE1VjwEUiXti8xns=:Character_Pencil_Lime",
|
||||
"FA393ED7DFD20657B9C8659CB0295F64:G5wmtVhL0E8/+gpxHPK3HGJJ5RvfoWyeYrLJ3Awm9f4=",
|
||||
"3DFEA395156D835B86EB22801411ED08:cG8Q2VOqa9d+9J4QEvdBWe5hjbIayC4HtRp7svIWZ9g=",
|
||||
"4F365EB12B55EB9A6BDD99DFC3D02E61:JFApzAook6DV1rLMngEwoo0pprP17X6gjpNc79NQ43A=",
|
||||
@@ -286,6 +309,7 @@
|
||||
"F3A99CD0D4F58EECEEB0D112506AD846:ZZtCRPcKk6itVryDavp7uZFIXiZF5CW0O9b+8Zt2Oag=:Glider_ID_305_QuarrelMale_ZTHTQ",
|
||||
"3A122019FCD271A539EB71E952B32D60:CCYj89kHr2atYI9ZfLcisGTTnGy8GtGBKZ/arLp/tlY=:BID_955_Trey_18FU6",
|
||||
"828B24CF7786DF74D8511CA89DEED8CF:nCahv7mQhidmYXSmKif6z7d6bQ60mdPQ7SrdZ7a3GaE=:CID_909_Athena_Commando_M_York_E",
|
||||
"14AADCCB14231F83A0FF5E13EEF676AD:E3AdIm3VavVg7FwK7HBEFr6e3sE52IUL6rZjGFm9QCo=:EID_Nimble",
|
||||
"510BE1093533EDED92752C0B90A80895:vaI8rYMUPwx+M61tvfJ0pf+dMK/96pnzKOQluAPmjU0=:CID_424_Athena_Commando_M_Vigilante",
|
||||
"4C3B1FC20956AE8C3C29A85446D013F4:dVksVi55yMPvgmuA2rjvlyDlySrQOK8wmH3aa69wtZo=:EID_Ultralight",
|
||||
"45261C72DCA170BBF0BDB129B9FC0BAF:5db2NWibvzXoFGVIbg//HklLwxuGUFWO7tKGPStOM2U=:EID_SecretSlash_UJT33",
|
||||
@@ -306,6 +330,7 @@
|
||||
"C8EDBD039269967B5BE92CCDD8A9D62F:8gR7wuE22djecHDkUAKfbBCtvwwWeVjZxSOBag9drI4=:Wrap_CoyoteTrail",
|
||||
"1D02A6E14FDF53655E818CEF9E57B1BF:ekG/6DFEYOaCYi5hruGoY/o1KzC/O5+9hJbdMyti8Gk=",
|
||||
"3FCDA1185C56B6A5FDC57AF760566A51:9I7HsUJTcd0EMjpuwQmyno0jbrJon+nZePI6IuQBmtk=:BID_983_ScrawlDino_AD541",
|
||||
"376B77890B5057EBBE1C3D0CD97BF4C5:UYA853Oz4bzCHoXU73CELJzefJ4EE1VjwEUiXti8xns=:Character_Pencil_Raspberry",
|
||||
"E0FB7B394449CE6450EA90C93D710EB8:NrXwNX6lKuu/kyQuvE74+6Uo04FODoV4ZqxToj/jS6I=:Glider_ID_157_Drift",
|
||||
"1234642F4676A00CE54CA7B32D78AF0C:Nd8vhYp296C+C0TqSIGxu0nBYOFGQ5xBNK5MFjHS8IA=:Glider_ID_115_SnowNinja",
|
||||
"E48EFA857D8E6914B2505B05AADFB193:4AUdytefPzWNT8c11iGtU4xcGNWEgzpMJbxTjUq3NS0=:Pickaxe_ID_465_BackspinMale1H_R40E7",
|
||||
@@ -341,6 +366,7 @@
|
||||
"488F01C34A9A24115776EA801A6E7E1B:WB1TFXsB2Cywzb16hZ2HdBc8X1FsTVqzlDwhyJO8Pcc=",
|
||||
"B66A53100DFB8F33CD5D55E2F66FE10E:wz7DApgadJnBQyHgJCqTiXYQARH8NWpaIT8zSJiIJUg=",
|
||||
"D01F7B7A687A459D3F28B8A3BD96E31D:siHFCRzefGjIJSV1g3Iw6At3HdCRf6ZbtgZyNVQXPq8=",
|
||||
"1937F4ADBC2C38EF4F189DC2B1AE58AB:tWzxKwKEDzI0RsQGl2GvOVqZwxOSOiZaCQkyK1hE+lA=:Pickaxe_InspireSpell",
|
||||
"E7D27A42770632B7A50BED813D9B1696:bxADNk9dmPNeKEuSvJl44teif6sHvs36yBZ55E9fhwQ=:Glider_ID_363_SnowfallFemale",
|
||||
"DC060EA83FE6F9729B19150E40C7987E:zW3d3QhtvhE+q3x/P7/BA9JvyoruVmeACdKt6RPxyLY=",
|
||||
"B1EB196DD39D0736E7E08F99B07D8B9A:1fDhBY8uhi++l6QQPL2YtxZgUv04OZoMGBrH+yN8yKM=:EID_JanuaryBop",
|
||||
@@ -352,6 +378,8 @@
|
||||
"8E1887D55A60F69B33B234242FF49653:YofZaW+CRl0jhVhkp9z2CQWhTPwyjQ6dbHtISkLDfVU=:AlfredoSet",
|
||||
"B4585A36D49CF15E1E236775B8C659C1:Ced0+UTeTBbDhnHM9mLTk5qxlz3YZK6dEn1U+NTxOko=",
|
||||
"98BCB8B7136162178BF364D6105BB9B7:c1dhB+vWHWRw3YvWpsHRj9Ayj8JjdqYOLnyr0YImxVo=:CID_997_Athena_Commando_M_GlobalFB_C_N6I4H",
|
||||
"3AA9D1B5DCC39A932C9D6FC201C5F327:kCoO2Hxq4V1uHM9pIfqlMOFRTyGqSeW8MYEiFEen6mc=",
|
||||
"8C4383893F90632D5516AD37E0CD5173:JUTInt9XDGH6gUbZ040d4ptJRsuhNppIKKIw+IiYo8k=:Glider_Headset",
|
||||
"7A59383C41DD998408A74BC37C7D6887:nSrruhpHV3ZEPPECeqWkMh/6mBFzQD8yEFKZS6oJeu8=:CID_A_087_Athena_Commando_F_Hardwood_C_AOU16",
|
||||
"280F643808DE5EAB39E77B23E2193CE9:lYbsbCLMwjFvdalNxsBUj+PZiJmtoa/wclz2sAOQxuM=",
|
||||
"49034BA1606B1672C8B634D2C6186807:5ujMnF4IKuvumpfNcUA1yi1mXjy5zBGPg00TJkHlG04=",
|
||||
@@ -404,6 +432,7 @@
|
||||
"335BDA9AA7DA27137CB7F1DA56FA2E6B:GJEyHEl3Q+8h2k2Cbe5sfG1lNLmXHSts3n+0QYH4Kjg=",
|
||||
"BC3890EAABBF03778EE82AD7DD4F9C12:RvtEdiKkxLJDnXKUaUK933vzLK04veYzbdp8yN8wmxY=:Wrap_496_Chisel",
|
||||
"7A59383C41DD998408A74BC37C7D6887:nSrruhpHV3ZEPPECeqWkMh/6mBFzQD8yEFKZS6oJeu8=:CID_A_089_Athena_Commando_F_Hardwood_E_4TDWH",
|
||||
"4EFDA950DA6AA1E6422D2FBF6B89DE85:HDEI+ufmAF1VN2+mYiOFFFDjPVAfkEcmrnyTQh85dmo=:EID_SunBurstHeart",
|
||||
"7A8E25F664219ED6CCF3AB1658D0E557:TV+yyWpI3iHJoaK3o1t6+/uhN/sFZ1OixoAx0n7MtjM=:Wrap_118_AstronautEvil",
|
||||
"A6855B699FE10FE50301AFE1A4FA74CB:fKXFbKW6dUWHLSC8M4KLAg1elVXH+wYouFbpvvtiIcY=",
|
||||
"E4143E437DE7481237AFAB40C59D96E6:a35NCp3zTY2AhSsZWy09BJaXJDU0LMJbiiP1u0dOl0Q=",
|
||||
@@ -429,6 +458,7 @@
|
||||
"D47524F6F863DCCBB2455472F0FEFE2C:cRoiHZin2Lnv6yQ4Zt2WoIpQc1ZjLbfl1Ogid24ydZM=:CID_A_417_Athena_Commando_F_Armadillo",
|
||||
"7FE6E196D4EF15F90CF5FCD812543E7C:hAr9lKRtiDVeJSn5j/kXuFTGiKYTIEHwhe6VzS5FnYs=",
|
||||
"457F39EA51FB4C723B442810750CDA4A:V3d05mcuS4uXMBRpy63TIZDLt5hg9njVD0SGhZDsmBw=",
|
||||
"1937F4ADBC2C38EF4F189DC2B1AE58AB:tWzxKwKEDzI0RsQGl2GvOVqZwxOSOiZaCQkyK1hE+lA=",
|
||||
"D938886074C83017118B4484AECE11AB:wjHAHm00Vg6n2x5LU91ap0+SFX5ZXXBmax1LyX8Aips=:Pickaxe_ID_581_Alchemy_HKAS0",
|
||||
"0882DAEC4F7823551C4955BA25B8AAC4:kGljCDpbMnCIfeo0YBLpBKDhX6nLlCaZRe62mSYSPTs=:Pickaxe_ID_719_RustyBoltFemale_0VJ7J",
|
||||
"27D6556F776B2BDA97B480C1141DDDCA:uvUqb5LuwRFWQnA4oCRW3LNdorYcGtOmJ8PvBeCwBKg=:CID_467_Athena_Commando_M_WeirdObjectsPolice",
|
||||
@@ -463,11 +493,13 @@
|
||||
"CB3D84444FF0E551D18939AA7226B17F:U4GIAd4fGYWy9tySw3iVb92+6ZX3rQ3FsiBCXMT4TSo=:Glider_ID_108_Krampus",
|
||||
"2DCD2E2A9A816AA9035999F8E6F85F6E:6xM4ZYt0UAylyuIgFrmOgq4fYVH2ChEzQNcl8KGQF0o=:Pickaxe_ID_406_HardcoreSportzFemale",
|
||||
"6EA156BE3D18E1D649D7D4B3F8C0FACA:qAKD9oM8u4IvUcKbReHTMaLg7GtHLBcnmz8++vwwB6o=:LSID_372_Grandeur_UOK4E",
|
||||
"A0C6985E7B2D24E0A3F68456F221258F:CI8iRftaQe7Ncch+18hxD3hcd0CFGOA9QvEszAAsFMs=",
|
||||
"975414A2AAC78A3710C3A47A8E3B7A57:LQWa9K05LB13Fn7Brzi8R3vsMRmFcNyJaoAcmBFZNjg=",
|
||||
"57EC154062C75464BD8A087D89732317:5AEwoCp79njYci8QYF+sLMkGpjDnFCYLSCtz4LD9D78=:Pickaxe_ID_328_GalileoRocket_SNC0L",
|
||||
"4C838738CDC4946786DD7BE341AB05DD:eyjCm9OcFQSvVRVBZizNVyF+8kb9OlNFrvDy8d1QDfo=:Pickaxe_ID_197_HoppityHeist",
|
||||
"98BCB8B7136162178BF364D6105BB9B7:c1dhB+vWHWRw3YvWpsHRj9Ayj8JjdqYOLnyr0YImxVo=:CID_995_Athena_Commando_M_GlobalFB_H5OIJ",
|
||||
"B66EED5CA4F4ED75170872E30B9B0E23:rHT8/uzcZZ0ENxU9dxKpr+cdAajZ5L5U0geHt6NoZhI=:EID_Fireworks_WKX2W",
|
||||
"36351B933FFCFF1746737649E9806CF9:2ZtfFqHREh2sKsMYN23yW+2Sd0OSNN5CHGd/qlXVd7k=:Pickaxe_TigerRootFame",
|
||||
"6A3F6093DECACCD1F78CF802DE7AFF84:Skd0CfmqkmJAUqDFE6Qy/adL2MSN4IuAndXZ0SepEXw=",
|
||||
"7E9FAC0F2BFC4AE3A2ED4C87D1A57DBF:xaR/8qp7kFAbILx9i6ANnoam0rZ/tP8Xy3yysuqt8BA=:CID_464_Athena_Commando_M_Flamingo",
|
||||
"4E7938F1FAC98BDF378823116712AC7A:jbZVgprILTQomUdGeJF0PsAFAJxsSCs5cKcXweZMAg0=:Pickaxe_ID_548_TarMale_8X3BY",
|
||||
@@ -481,6 +513,7 @@
|
||||
"7A59383C41DD998408A74BC37C7D6887:nSrruhpHV3ZEPPECeqWkMh/6mBFzQD8yEFKZS6oJeu8=:CID_A_086_Athena_Commando_F_Hardwood_B_B7ZQA",
|
||||
"6AD4E900C2E9E785B0442E0A60E74C66:FbrGkaMoqjq/CaamdJrQUBz/PjBqtA0wFlGj1VOxH6A=:Pickaxe_ID_821_EnsembleFemale",
|
||||
"2CB7CC414F921DD774957AAF4AD5F8FE:vi2xluuUw+pFj/tqqfvh7cS9Qnr8gQPEGX0IHyjZVp4=:BID_185_GnomeMale",
|
||||
"476EE53C2EAA24FD1950A9875FB4CF59:LQMwgWwsoSqGyYbBouYaMaN8NZ38Vy5r3Tqa7KA71oQ=:Pickaxe_FallValleyCharge",
|
||||
"B229884F839295B4B9EDC380B045C64B:SVmPvZenzQ5Si17i8daUFyKoOGDtaH4YZtsF1s2XkxE=:MusicPack_084_BuffCatComic_5JC9Y",
|
||||
"5950552B5A52A97A433715A1FF107BC4:p9RBdPmk5295pRSg0+Ybfwy/kqY6HBYiJEAkvy650O4=:BID_171_Rhino",
|
||||
"7AEE99564551FF8EE98E6887410AE8E2:Cumd3/0knsdwt4bl7zNQw8MKmmIuC/4wYVfVtQq5d2o=",
|
||||
@@ -502,14 +535,17 @@
|
||||
"C6F7AEC922E28FB25AFBC50442F57877:qJNZNWzxSxvlrklYDsNkZek9OD8kGV6lI+Hfmm+k0gE=:EID_BluePhoto_JSG4D",
|
||||
"552DB214510DE1E24F08920F80B0AEC5:GP2CYv9xYYDf6bOnpgm0fnOXa3iI0acXH02ZIaHAElg=:Glider_ID_306_StereoFemale_0ZZCF",
|
||||
"F0257C3CA050371B68517D5B0476A24D:EPU6cULjz63viMmdjtRwy6TagWogzeVnVX5nsa/leLw=:EID_Punctual",
|
||||
"36351B933FFCFF1746737649E9806CF9:2ZtfFqHREh2sKsMYN23yW+2Sd0OSNN5CHGd/qlXVd7k=:Wrap_TigerRootHue",
|
||||
"57EC154062C75464BD8A087D89732317:5AEwoCp79njYci8QYF+sLMkGpjDnFCYLSCtz4LD9D78=:Pickaxe_ID_326_GalileoFerry1H_F5IUA",
|
||||
"16FC688AE41A3E3C518F4DD9F9612EE7:Jd7nRLx/FoonA2dUjtbvJVk3nJoNq9LTedk3u4EdFS8=:Wrap_044_BattlePlane",
|
||||
"D517F2A448CCB9B47E5004894BC62ACF:qOdQUR91sysqDRELOgz/YVZ7Piae8hqcrnYW90fXtvU=:Pickaxe_ID_680_TomcatMale_LOSMX",
|
||||
"7B1151E3094646DFFD37B6492B117FDB:4WxNHdTgHDEpGjzIV2XIjGO41kyiwggFQpdq8y+o1jY=:Pickaxe_ID_577_TheGoldenSkeletonFemale1H_Y6VJG",
|
||||
"57199980522FCA9E80C75A826BEA92ED:aR3U2OO9uGBqAYnJeTrUBFk6Q+OkpdmBavBU26DP0m0=",
|
||||
"6686344942A2886FC4FD4D3763A4890D:CphngqSvpV+b2+WsrC6THVlHtrbln/Gmei4th7IO6VU=",
|
||||
"E1B1A5908EF6377D7FB29F776486A6A0:qaZB3Q+6kKTtlO4aGWBsnjSxCwX3kmr8oOF/2QDZ2qc=:Backpack_Basil",
|
||||
"F78569F2AD7950F870965BC647904647:e3+Nhzk8SBfmZWoQThFsZmnyJs2AoJ+LQDgMz45YAUE=:CID_950_Athena_Commando_M_Football20Referee_D_MIHME",
|
||||
"F78569F2AD7950F870965BC647904647:e3+Nhzk8SBfmZWoQThFsZmnyJs2AoJ+LQDgMz45YAUE=:CID_944_Athena_Commando_F_Football20_C_FO6IY",
|
||||
"98BA4AE4D7202053DB73B55D8DE72248:6UYqlPIbGSNPZBQWhHR4xZ/l3mJCnJ2O/7SEqRRInLY=",
|
||||
"5738A14C7E45E1B405CEF920829CB255:xZHlPTz/dxNahrp9IqTZ+tjOZSYMxQb9KZFXlg9N638=:Pickaxe_ID_330_HolidayTimeMale",
|
||||
"4C546A04EB0E91B7EB4449B672B63900:RhtdrUqq3N21E77X7YatI4oX3wLYyvFH5Wm+eaUX8+w=",
|
||||
"A0926AD8C6EDE29250AC4A0A93156E7B:keN/yZ7qnvcPZeIflsked9TAT867gbPgmnG1QdlSn3E=:EID_Donut1",
|
||||
@@ -518,6 +554,7 @@
|
||||
"F4729DF9DB149229267F9389E3C95851:DCXGOUUTWG8jFuEryO+32mXKJsQgQe+Fp82u7mHiYFU=",
|
||||
"36126C339CEBD31F23562CDCC5DFDD4D:cuLUN7oD/p5BSxuk6pKGY6KtlhGInVti36sV6zSv1n4=",
|
||||
"EDF724493161095DB54E9613C243A355:Yp7dsOYO778G7uRZNYhGag2diT70vhu2hAWvkzvtHjg=:Pickaxe_ID_796_IndigoMale",
|
||||
"8C4383893F90632D5516AD37E0CD5173:JUTInt9XDGH6gUbZ040d4ptJRsuhNppIKKIw+IiYo8k=",
|
||||
"0882DAEC4F7823551C4955BA25B8AAC4:kGljCDpbMnCIfeo0YBLpBKDhX6nLlCaZRe62mSYSPTs=",
|
||||
"566C4D92AF66F45DF5E2D7EB43CC27AE:EuAYwU5tQBXzGoSj5BMc7S5yFfe9wZ2qrzx/hIHpnqw=:BID_629_LunchBox",
|
||||
"57EC154062C75464BD8A087D89732317:5AEwoCp79njYci8QYF+sLMkGpjDnFCYLSCtz4LD9D78=:BID_427_GalileoSled_ZDWOV",
|
||||
@@ -537,19 +574,24 @@
|
||||
"BAEF248980269F569C6E1FFF2B885DF6:2b6DQGIcab1r7zsw5j3MR84iDmt0g1XBquxJVR/8GxM=:Pickaxe_ID_302_TourBus1H",
|
||||
"D47DF51158673BE6CD4D32E84C91DF7F:+EzQK4ojNk1DqxceQeArAGZhQPQyuQBKX4gVuGEqSxM=:CID_632_Athena_Commando_F_GalileoZeppelin_SJKPW",
|
||||
"6537263AA4E53B6A7B7D4AE3DE12826C:6WOQR0kXJWBJ4miykyUSj/hcH4u5JTSFpBTwaIeIFxQ=",
|
||||
"376B77890B5057EBBE1C3D0CD97BF4C5:UYA853Oz4bzCHoXU73CELJzefJ4EE1VjwEUiXti8xns=:Character_Pencil_Cherry",
|
||||
"F78569F2AD7950F870965BC647904647:e3+Nhzk8SBfmZWoQThFsZmnyJs2AoJ+LQDgMz45YAUE=:CID_955_Athena_Commando_F_Football20Referee_D_OFZIL",
|
||||
"172B237342C2165A212FEEAC80584DD5:7bGmK+J89yojl49SMoQKA+Zf7ZZ0W3OatE6KZYlGPnU=:CID_254_Athena_Commando_M_Zombie",
|
||||
"504BC0A80EE72DFEEF9CB7EE3FFCE163:eToIGihi0lTVTcHietksl1e6cHBf5h30aYO5YXpWXY4=",
|
||||
"E003ABE22717994943D06FA3F41D1CB1:Z0MoyJ24D89oC5rAOJK09jo5/TLV30z2f+IwDeJ/4GQ=",
|
||||
"1B1978CC0EC6D4D937800A9E1CA87CA0:OjIDp8UXlfFZCaVJ6GLnMM+98VabjD7EB3J7ahiRNk0=:LSID_404_Gimmick_GXP4P",
|
||||
"CBFF239A1792F25920D863F223368B54:J3N3cUH3M0R3uyzkE0qVK/SouxC/X6VEswcoWb6ViL8=:Wrap_071_Pug",
|
||||
"ED088B11311A599D6225CE85545F019A:1NMRh4JMXRL9XW8Kb6zo4/F10dwLJC1+kPm6D6DudCE=:BID_832_Lavish_TV630",
|
||||
"8ED082067AC31EE587FE16E5507E95D3:/uvcdfyt+d1foHxwO3zz+Y0PUr5Jzz/yES0FyaLelc4=",
|
||||
"7A59383C41DD998408A74BC37C7D6887:nSrruhpHV3ZEPPECeqWkMh/6mBFzQD8yEFKZS6oJeu8=",
|
||||
"36351B933FFCFF1746737649E9806CF9:2ZtfFqHREh2sKsMYN23yW+2Sd0OSNN5CHGd/qlXVd7k=:Backpack_TigerRootFame",
|
||||
"D47DF51158673BE6CD4D32E84C91DF7F:+EzQK4ojNk1DqxceQeArAGZhQPQyuQBKX4gVuGEqSxM=:Glider_ID_189_GalileoZeppelinFemale_353IC",
|
||||
"FC4E841A2B346A848784A3190B5D05B2:a4+ZHXPUacxXOJmJxoJlp4vzzEApO6fWJXvvUYW43yU=:Backpack_EmeraldGlassGreen",
|
||||
"5D6562F1EAD89513C82C2F37A24E7F82:I2c+SQCdDvJpC6z1xniRT+k41KAp0pla+o/H68oXFLQ=:CID_649_Athena_Commando_F_HolidayPJ",
|
||||
"BC3890EAABBF03778EE82AD7DD4F9C12:RvtEdiKkxLJDnXKUaUK933vzLK04veYzbdp8yN8wmxY=:Glider_ID_376_ChiselMale",
|
||||
"5950552B5A52A97A433715A1FF107BC4:p9RBdPmk5295pRSg0+Ybfwy/kqY6HBYiJEAkvy650O4=:Glider_ID_102_Rhino",
|
||||
"E7D27A42770632B7A50BED813D9B1696:bxADNk9dmPNeKEuSvJl44teif6sHvs36yBZ55E9fhwQ=:Pickaxe_ID_775_SnowfallFemale",
|
||||
"B3D2793477E5D467475BE403774360E5:HNj5inGk1/2h9f0r4+SGPPY9t69eOwS6w0XGxpTVOTM=:EID_FearlessFlight",
|
||||
"F395571A36D2BD888861E61EEBD45AF8:D/35GPTIOKbdfmpxRJmHTkjNXcWv+XdSmTxQt6z1hvI=:BID_702_SkirmishFemale_P9FE3",
|
||||
"DC060EA83FE6F9729B19150E40C7987E:zW3d3QhtvhE+q3x/P7/BA9JvyoruVmeACdKt6RPxyLY=:Pickaxe_ID_769_JourneyMentorFemale",
|
||||
"7F5ACEFE3F67BC0CCEB59A4E8EB82BAF:iDG2HB2LypEtzw5/EjKVpJmQ1o30BE3nVv01rOTyq64=",
|
||||
@@ -568,6 +610,7 @@
|
||||
"464F39FB64FAF4AB6843449EDD0BE3BE:0yYMEXLHteghUwUW+SThzKXltdNzvA42CssFpAXgxFA=",
|
||||
"ECC9E1F04B18E523B2681C2037A17B56:AoeVhWzK5zFpeJ2yqYKkTaRw4vo9162/EuipYvC+jxA=:CID_602_Athena_Commando_M_NanaSplit",
|
||||
"32E8846645441197B80CF8B1C86B01A1:cwJgOQhsrscdiFfLHzS9WudnE9mBMH/C/SAyX81B2fM=:CID_311_Athena_Commando_M_Reindeer",
|
||||
"376B77890B5057EBBE1C3D0CD97BF4C5:UYA853Oz4bzCHoXU73CELJzefJ4EE1VjwEUiXti8xns=:Character_Pencil_Kiwi",
|
||||
"B9E5ABB4D4F783F13E7A32B971597F03:HGWfy8LBJu12s5HZeYTZDqP2EI3dJqPXupxd2AzYdUI=",
|
||||
"C7623A35411F3D5FBDE2688C7E4A69EB:qAi49mUKsB2dbfbtJWDf3yO2DfRStA+Ed9XgDjC8Zaw=:BID_190_StreetGothFemale",
|
||||
"234D1D3D37EFF3322E44B31200C1ACEA:T3lGoZ3JIVg7vasMQCr3hjyRo8x+HS1Arh43XvdUKss=",
|
||||
@@ -578,12 +621,15 @@
|
||||
"D14FDB2BB2FB7746797F25470913BFF1:CQDgIxcNnAoUboQnjafZAYvV7UqX+NefGTXFd3m+oFc=:BID_907_Nucleus_J147F",
|
||||
"DE4CBA7A27B818D6B299767036C671A9:o7axeOYDdjXZ4MTWM4Io4XRNfQG2WH9qwPvBSJk8vJM=:EID_ApexWild",
|
||||
"98BCB8B7136162178BF364D6105BB9B7:c1dhB+vWHWRw3YvWpsHRj9Ayj8JjdqYOLnyr0YImxVo=:CID_A_004_Athena_Commando_F_GlobalFB_D_62OZ5",
|
||||
"36351B933FFCFF1746737649E9806CF9:2ZtfFqHREh2sKsMYN23yW+2Sd0OSNN5CHGd/qlXVd7k=:Pickaxe_TigerRootHype",
|
||||
"D82BF0194AE18598B8B08491E2256E16:3ENJiAAhBVgbroE9WbkjWK5YqL8vzJ0sFKhadRKcQjk=:CID_255_Athena_Commando_F_HalloweenBunny",
|
||||
"E46E6578D28965DB74B642E1CB239A5D:Dg3Oqkcno7QuLDGdi4N4VWSMSAd8bILyJT8Gh0PYjj8=:BID_758_Broccoli_TK4HH",
|
||||
"F3A99CD0D4F58EECEEB0D112506AD846:ZZtCRPcKk6itVryDavp7uZFIXiZF5CW0O9b+8Zt2Oag=:BID_820_QuarrelFemale_7CW31",
|
||||
"772E01C212E9A77A501AF954ADA90B09:nQ4i6bbmbGMzcq8iyjoM/BGUbX2DSIJRAZ96/qaOf/Y=",
|
||||
"01079D19DDDEC8BD51AF536A7106906F:QQQwnB63pdEdKEqLYP9QzAaJXakZ3w1Iuai7YU3A+Xs=:Pickaxe_ID_733_SlitherFemale_M1YCL",
|
||||
"0CAB99F6E84D4E4C616B895E243F3B67:DWU31IKjnLsEt8sBBDfWQ3DPbZzpJ2JmfbxYdQ8QPZI=",
|
||||
"61D055FFB6523C2E6B09EEEF500F82EC:mD5hivRGMT21lNyWjRs7eYriBFTVlzoINDBB9DSFPAA=:EID_Clamor",
|
||||
"8DF1F1277DF980247E3117412EEBC87D:zkBSgRftUEdB3dqaelLwaFIxyVv3AwDbdcwc5hsg++k=:EID_DoubleTake",
|
||||
"3A122019FCD271A539EB71E952B32D60:CCYj89kHr2atYI9ZfLcisGTTnGy8GtGBKZ/arLp/tlY=:CID_A_350_Athena_Commando_F_TreyCozy_B_8TH8C",
|
||||
"FC4FC301558D3E9321A55180263EB17B:OXujupiNRNT6+b1g1dg2IXPtdQyfoNPUuvtgqfXnlEY=",
|
||||
"22AB4BDC10065AA49B38DE88522DF836:1L8L+oKtSOtIxbm1x0HbDtzquIH6CH8vu1PF4i8jU+w=:CID_445_Athena_Commando_F_BannerD",
|
||||
@@ -609,13 +655,16 @@
|
||||
"01FC97F8787B82E027EC64661E0D36AB:Mh1l2LJ3YrgaZtg7sRTd8XeBkVcyA3i089gZKkTr1gM=:Pickaxe_ID_783_CactusDancerMale",
|
||||
"5332028CC33C98BF747EEF82B0384D8C:QxdEIZba2DLRx0jYKm8UpIk/K6eKuclfvDSTllMLLrk=",
|
||||
"57EC154062C75464BD8A087D89732317:5AEwoCp79njYci8QYF+sLMkGpjDnFCYLSCtz4LD9D78=:EID_Galileo1_B3EX6",
|
||||
"A758D2324A07ED9DE9E0818F6856693A:ZpzBR4QHXooKIZ6RXd8kp7WBPvsY8PQfKPE4bRfkGks=",
|
||||
"BA6DF4F82C5CAB3CE1C51156BFCACE71:SDOlhnlP1SENGT+SrYUqeGIz0TkgoM7dQjfmfxegb1o=:EID_BlackMondayMale_E0VSB",
|
||||
"57EC154062C75464BD8A087D89732317:5AEwoCp79njYci8QYF+sLMkGpjDnFCYLSCtz4LD9D78=:BannerToken_015_GalileoA_0W6VH",
|
||||
"72FCE9EE6B90885970CBD74AA2992B68:UvFcOwG78Bx6kVWWHd3NsSarAeWZAht32WLeqs0Opoo=:BannerToken_003_2019WorldCup",
|
||||
"BC3890EAABBF03778EE82AD7DD4F9C12:RvtEdiKkxLJDnXKUaUK933vzLK04veYzbdp8yN8wmxY=",
|
||||
"476EE53C2EAA24FD1950A9875FB4CF59:LQMwgWwsoSqGyYbBouYaMaN8NZ38Vy5r3Tqa7KA71oQ=:Pickaxe_FallValleyBlink",
|
||||
"82669F5A2F9B703D1A6BEA3BCB922D7D:Leu9rrDPaqZd3izIU+IKpFcP/NNcqSncLkV2lapQL6k=:Pickaxe_ID_221_SkullBriteEclipse",
|
||||
"A6E8A0C1D732A1D028B92BE981E0B8E5:3u9E2vAzuE3Vl8sOG4jzX2RiiA+GFyukOLeOakVOf3I=",
|
||||
"08788A9DA34F4164ADA4F09FBF698CC3:DlhRrdBGDNADUAMRj4oAUwwR2j33Nr2ZNg2CU3i1/Pg=:EID_Quantity_39X5D",
|
||||
"36351B933FFCFF1746737649E9806CF9:2ZtfFqHREh2sKsMYN23yW+2Sd0OSNN5CHGd/qlXVd7k=",
|
||||
"3A122019FCD271A539EB71E952B32D60:CCYj89kHr2atYI9ZfLcisGTTnGy8GtGBKZ/arLp/tlY=:CID_A_349_Athena_Commando_F_TreyCozy_Y4D2W",
|
||||
"3A122019FCD271A539EB71E952B32D60:CCYj89kHr2atYI9ZfLcisGTTnGy8GtGBKZ/arLp/tlY=:CID_A_347_Athena_Commando_M_TreyCozy_D_OKJU9",
|
||||
"BE2C3EF59AB81D812AF5B8153325998F:W7NoICLZt9L2d7XZ5dT9gtI80MyOizk7uA9LtwA/Edw=:BID_872_Giggle_LN5LR",
|
||||
@@ -645,6 +694,8 @@
|
||||
"768A95DE7B657B7B23D5A0DE283EB49F:JLLAz46a7wo2rADQvCkbp4IbKexr7J5bBr6d6toSn50=:Wrap_049_PajamaPartyGreen",
|
||||
"F07BE27DCEFDF52818EE7BA2CD9CA504:lc47A/VahaBWJLQY4V1YyjzJPI5xVErInDaqdwPjv2g=:BID_255_MoonlightAssassin",
|
||||
"2CEE3C1783B9E41EB66238BAD32EFF23:udlTL9abg8LIGytWpERMGVEpPrj9io23R2HbINHtF3o=",
|
||||
"794E59D9FCF36814F264C9A5938124E5:uHr4c9XJ/zNCUImzwZpzrUfQRcZ2j19dLN3CTnKy1Vk=",
|
||||
"E28AF2E3BB7EBBB69D962A15879E696E:hJE3fnZPwRmG8XIw+RJvVsCh9dOHDD82VAhvMbi+nvs=:Pickaxe_DualParadoxGold",
|
||||
"86588ED13DD870C5FDBF91B3C739D156:HFqg2udb5qqasLf+D2jzfRahu3HgBZWZN2AvnSUIIzs=:BannerToken_002_Doggus",
|
||||
"CBFF239A1792F25920D863F223368B54:J3N3cUH3M0R3uyzkE0qVK/SouxC/X6VEswcoWb6ViL8=:BID_276_Pug",
|
||||
"E46E6578D28965DB74B642E1CB239A5D:Dg3Oqkcno7QuLDGdi4N4VWSMSAd8bILyJT8Gh0PYjj8=:Pickaxe_ID_597_BroccoliMale_GMZ6W",
|
||||
@@ -657,6 +708,8 @@
|
||||
"5AD068EB1D56D87706E44EEB3198CF1B:o9Gp08KD/vgq3RTrUbfGJk7rlfUqZMxoRKPiwvdVkXY=:Wrap_431_Logarithm_F8CWD",
|
||||
"E0AEF4894E1283946745F7902F7E105A:7MXKJEs903nNbT1oFzykxoHbQNDnOBm6yfadj+mtBDA=:CID_A_342_Athena_Commando_M_Rover_WKA61",
|
||||
"604C6242EB2BF301BB5D4BC6E3AC5A8C:Y7c2+dviThEDuVsG9kIOjMfnLdJUnPMbdaY5gKiVki0=:BID_772_Lasso_Polo_BL4WE",
|
||||
"266410C2B17584B4A472878EB88D6892:jLd9anMumGE0jIIBSf8XuqTu729JfnYTesywpeOgksw=",
|
||||
"376B77890B5057EBBE1C3D0CD97BF4C5:UYA853Oz4bzCHoXU73CELJzefJ4EE1VjwEUiXti8xns=:Backpack_PencilCherry",
|
||||
"22AB4BDC10065AA49B38DE88522DF836:1L8L+oKtSOtIxbm1x0HbDtzquIH6CH8vu1PF4i8jU+w=:CID_444_Athena_Commando_F_BannerC",
|
||||
"C1C31115267D6802AD699472D2621F25:zAyelFy6RcyGIW/9z9IvgEbmRW9pdAytvgBIPb1/kdk=",
|
||||
"D7EDE7B4CE393235BF4EB8779C55D5AE:tvYJfExMmwMpbWXSe8bxfGkpl1wcJv4B/RBjd8qWcZ4=:Pickaxe_ID_728_OrbitTealMale_3NIST",
|
||||
@@ -685,6 +738,7 @@
|
||||
"EFF73F810AF0A5536912C24E91399CBC:vlBHa/jN2WecgWXwAEROAGpwbobQfMtBU24wD7+gM7k=",
|
||||
"30A1FD89B2D3C155DAF14852A39BA97F:C0IwuJFw9v06OF8XthOhzUd3nHOTCII1gmx/7eepmDo=",
|
||||
"CD6B95C728B11810F8EE4C396D02EFCA:Fulo/BAgbJwmOju1xu/05XnxLDbenI4bDEb2rUyf5hw=:EID_Psychic_7SO2Z",
|
||||
"376B77890B5057EBBE1C3D0CD97BF4C5:UYA853Oz4bzCHoXU73CELJzefJ4EE1VjwEUiXti8xns=",
|
||||
"8A6DABC9AF8B5FE521D365DB605D0AE0:T721SqBTncYsd8Gej01RnLX6sEaCgJoILnRauHaJz+g=:CID_429_Athena_Commando_F_NeonLines",
|
||||
"1A9B01B59F609C0D7E9EF7887DA23087:EkQdXhPD9Je6Bp7dlwZdlkX2S0har6vqUOjMIF9ndfc=:BID_A_043_OhanaMale",
|
||||
"1DF43E667862B117F72B5F39E750853A:Bhjx3mmVxhvadK5bkT+W9RJ0XAaMHawCnf8MfXIpABw=:Glider_ID_150_TechOpsBlue",
|
||||
@@ -705,8 +759,10 @@
|
||||
"21D9E3FA446D32EE85025841557C1E4C:KBL9ZqzocmLvcq5k3mwTCeoeeVfJdw9wjuQacUrg50w=:CID_A_241_Athena_Commando_F_Grasshopper_C_QGV1I",
|
||||
"958DC719715C145004E1E028E72464D0:ZTCrQKaSpw5dAyqyW/jGz+KF2DlvSX8wCW5/4dhdFT0=",
|
||||
"F00E08CB606091AEFAB37D9B0A01B833:uEmoAK5xdbd8KefVf9o7uJiGcGTYk2r9QevsGe4vBII=",
|
||||
"E28AF2E3BB7EBBB69D962A15879E696E:hJE3fnZPwRmG8XIw+RJvVsCh9dOHDD82VAhvMbi+nvs=:Pickaxe_DualParadox",
|
||||
"00EEB0CEB7585E8C69F90EF8534CA428:gSddavzl1D9mSi3KgCoXjX3eb5Dg9Rqh2C1pt6rD5rk=:EID_MyEffort_BT5Z0",
|
||||
"3A122019FCD271A539EB71E952B32D60:CCYj89kHr2atYI9ZfLcisGTTnGy8GtGBKZ/arLp/tlY=:CID_A_346_Athena_Commando_M_TreyCozy_C_7P9HU",
|
||||
"C97E930BC95DC795F4416A7B93E3B9CC:KxRPbXqD3ytwLLbZMbZmn+G+gjwOUljg/7HPjj8xP0o=:Pickaxe_OceanBreeze",
|
||||
"98BCB8B7136162178BF364D6105BB9B7:c1dhB+vWHWRw3YvWpsHRj9Ayj8JjdqYOLnyr0YImxVo=:CID_A_005_Athena_Commando_F_GlobalFB_E_GTH5I",
|
||||
"0882DAEC4F7823551C4955BA25B8AAC4:kGljCDpbMnCIfeo0YBLpBKDhX6nLlCaZRe62mSYSPTs=:SPID_333_RustyBoltCreature_ZGF9S",
|
||||
"77B485EBF8E72CC8CD19F8646A6D0491:SXUHJQDuxBGv0PzDtuVsDxNyubG/pgH9s9FMvimS0YQ=:EID_Noodles_X6R9E",
|
||||
@@ -743,7 +799,9 @@
|
||||
"E47EFA3166A5D7B35CEC27B19AC66AE5:JURSqAHhHK6YqLP5rKhCO+SQ2oql4NqJaoaeNGtsrM8=:Wrap_383_Buffet_KGN3R",
|
||||
"8566FD040AC2B245597E11D1F85DB4E5:SEoqoweofxmXfxu848wKn1UJhwU7oQ2w2F0lBst+FnU=:BID_658_Historian_4RCG3",
|
||||
"C8EDBD039269967B5BE92CCDD8A9D62F:8gR7wuE22djecHDkUAKfbBCtvwwWeVjZxSOBag9drI4=:Spray_CoyoteTrail",
|
||||
"A398C07C0A77D834038E7192FAB52B4B:/+4taU8TYRe14OhUt2cevoUqUOh6ado2hWu45FJ+7yA=:Backpack_FearlessFlightHero",
|
||||
"A34195EF9068F0DD323EA0B07305EA47:eYcw2YEjssIAsJMgaWYPQQCBFcRvvkj9WoRVV+P3cBo=:EID_DontSneeze",
|
||||
"29B68199D0CD6E019BA8175561F4F076:aA+14qhwCm5cu/+LEzB+tLlZtccgX7H3N25Ky41Me3s=:EID_Chew",
|
||||
"BA6DF4F82C5CAB3CE1C51156BFCACE71:SDOlhnlP1SENGT+SrYUqeGIz0TkgoM7dQjfmfxegb1o=:Pickaxe_ID_276_BlackMondayFemale1H_1V4HE",
|
||||
"46FC5EBAD39CE53EFB215A2E05A915FC:H3gtdkEzT3Dk8vkwTTZE9oUDoJEy6vmfQj1jDo453gY=:Wrap_051_ShatterFly",
|
||||
"4969808C5315EFB4839F94626ECD600C:rdEEmKdvnm0+EXCNE8AaL3XOvVWfLdMVOfZYKj4Kzwg=:MusicPack_131_MC",
|
||||
@@ -775,6 +833,7 @@
|
||||
"FD0C3696948675DC3C2CBF5098D57D0D:rBWyTh/AVyZxi2oiQxM/OeD/HYZOSdVidEQeKoowV6U=:LSID_296_Cavern_60EXF",
|
||||
"134343D31031634B122471F73F611CBC:zqtMGKxH4+Ydcx+1mHOb5DIMYxctpm2nKqXp8c5hH/0=:Wrap_076_CyberRunner",
|
||||
"8DCAE39C7D9690E19F52655F02C613B2:ZZHbiVsbXquLlrtNVHtryLS3Vd1Ego8/8tlDpeUCgfc=:Pickaxe_ID_251_MascotMilitiaBurger",
|
||||
"3B908C605D83AEC6E8E0F9BF6ABA828C:IyB7RIUMz4fcBekrFspRvR3QIuCPJIY2vrDmsIm6Sf4=:EID_BlueApparel",
|
||||
"F3A99CD0D4F58EECEEB0D112506AD846:ZZtCRPcKk6itVryDavp7uZFIXiZF5CW0O9b+8Zt2Oag=",
|
||||
"CE9D023C0D7DBF7634F2AEF6200BDB36:JyhTmjJnosQmLeGMQXhCtkl/auX+mde5P11MsWEwIqw=:Backpack_DarkAzalea",
|
||||
"E04FBD38CB934DB1363EF57C85E48F9F:E+/j7zhGIdHODfCdH2vh4rgGRYSssFpT/s6dlus9Csc=",
|
||||
@@ -791,6 +850,7 @@
|
||||
"21D9E3FA446D32EE85025841557C1E4C:KBL9ZqzocmLvcq5k3mwTCeoeeVfJdw9wjuQacUrg50w=",
|
||||
"F62A404ADA885AF5A67C30DE1F03BBD6:zAm4CsxXpE6vMhsqKwj2Cce+asNmSAv0IOo/pWVySmE=",
|
||||
"2E1C06DB5781755F3F06D95B6612BB3E:aTN33nTPI+qQ+osYxcMa4FjlyajAzhIxRzEcoAr8iAI=:Pickaxe_ID_546_MainframeMale_XW9S6",
|
||||
"8D44654E9EA2AAC35E489476B1948E58:Dwb/irSIIGd3tLLPEP5OqJY1D4KfjdP4+uP4+Ht4YOo=:Glider_Elevate",
|
||||
"B0030ECDA329A8B589D249F794EA90B3:BfF0FYJQJ71DMUBmClT0DppsOy+1Syn8fGu6qNtTgXE=",
|
||||
"F51F080981F8DC32B09FC3C62A977363:NqX2i8P3ayVe/mUk8aAqzUg5tvMEDWt1URv6xc4fUkY=",
|
||||
"28CBBF705C9DB5A88BEC70DAA005E02E:FvtzBBvDkyj8PRLW76169bMFvg65VojYrSmkjUAi4Bc=:BID_352_CupidFemale",
|
||||
@@ -802,6 +862,7 @@
|
||||
"54FD9ABD65879452DCB8CE11C1D7F1AF:nV0Vm4NCBl+MkGX8wiqfFrg0viDriL3I2xc4KS7n7fg=:Wrap_070_MaskedWarrior",
|
||||
"7A8E25F664219ED6CCF3AB1658D0E557:TV+yyWpI3iHJoaK3o1t6+/uhN/sFZ1OixoAx0n7MtjM=:BID_330_AstronautEvilUpgrade",
|
||||
"F60CFFFA32CF6A877B50DA7F0A88326E:OWIopbB4fxaobofPI9lF9hn6BPG9NVLp4Od61uQppfo=:Wrap_047_Bunny",
|
||||
"376B77890B5057EBBE1C3D0CD97BF4C5:UYA853Oz4bzCHoXU73CELJzefJ4EE1VjwEUiXti8xns=:Character_Pencil_Guava",
|
||||
"71BEC74046C6920A467E57B69FA3835A:q6m1xB4+mCmXL3g7eRGykDO6ZKrXS8M7m8SqbqIKzkI=:BID_202_WavyManFemale",
|
||||
"3AC281E7A5EAA2765CFE02AC98B04FC8:R/hWNn8BcRRovJE/L7h15VDrJ0H4VqBBVt6XVvq2Ebw=",
|
||||
"C8EDBD039269967B5BE92CCDD8A9D62F:8gR7wuE22djecHDkUAKfbBCtvwwWeVjZxSOBag9drI4=:Glider_CoyoteTrail",
|
||||
@@ -876,15 +937,18 @@
|
||||
"0CD312F730BA9C3FD6CD67420EDDACF7:nXBDxcWYx2VtjMeRCDfSak9+f9aSOgrcxp8GKeUiId4=",
|
||||
"BE20AAF89FE897368E52AAA193DEEB53:jHRZho9v4IKzFzk51RD0nAVFCZ27vIwcstPkdQeSupc=",
|
||||
"FC4E841A2B346A848784A3190B5D05B2:a4+ZHXPUacxXOJmJxoJlp4vzzEApO6fWJXvvUYW43yU=:Pickaxe_EmeraldGlassRebel",
|
||||
"9CDB7E60150C8A93BF60EF4983D2A9FC:ZMGOYjalLZw3m4wFDi959WW6vlbIAQDqcnRVgylEej4=",
|
||||
"ED61A5415E40BB0A188CDB1DA91F22D2:wGuFJQg1ldthApzow1drpoq6i40AzOsoODCI5I/6JSA=",
|
||||
"359567C8D8F146C8D08FEF2B24AFC9D0:yMWg8m0Eh+0UGV6CgIWrXsJMPT/Ww8/Qa3RlYPo/bGQ=:EID_BeHere_8070H",
|
||||
"91C415954BF27B6E43970FB8A75FE8BB:YhHyxIA+Ru33r3pThiWqKNYdvDbL05yXSxKarRuMSxw=:Glider_ID_103_Nautilus",
|
||||
"C015FB76A9E7912825A5F9CA69671961:4zfC1uF8ll4CkTBctitVmwjHsazAiz2LXPHIPj4ef98=",
|
||||
"819F658DBDBB5D333430800891F28361:u/+kuv6DsiUouUOusRRfC8Ti5rCKhsgIyxyOnLH3Mh0=:CID_719_Athena_Commando_F_Blonde",
|
||||
"A3618360BF2BE3C452DD4E212CED6D0F:hnD3/2LtfP4Hso8Ym2ZW4Y4G0y1EDvQvYvuTCozikoM=",
|
||||
"3DB93E023E700ACD0C78072ED4787D37:aePdzcjsQvnpefA3P/cKfnZrVspZ5QVSsAc+Rui20pM=",
|
||||
"E50209164841E1829F672AB1B33D069F:1EMTmCTA4cO1QMoLu+RWAGd8Rw4FQdAONKvDwfQeNV8=:Glider_ID_118_Squishy",
|
||||
"360CD59F6F7B68A441DDED9DB5FD13D7:G6pVAf/ul1HPYh6s2M1l8G4hn62jdwkcbegeLoxL7Y0=:LSID_364_Ashes_0XBPK",
|
||||
"2DCD2E2A9A816AA9035999F8E6F85F6E:6xM4ZYt0UAylyuIgFrmOgq4fYVH2ChEzQNcl8KGQF0o=:BID_531_HardcoreSportzFemale",
|
||||
"376B77890B5057EBBE1C3D0CD97BF4C5:UYA853Oz4bzCHoXU73CELJzefJ4EE1VjwEUiXti8xns=:LoadingScreen_PencilSet",
|
||||
"06E3CB03E94C4D850CE185166706E868:jDuRIbxnZBnAH/hUrfRX3qnGyIogSWUHrK6nq7Et3pk=",
|
||||
"2E1C06DB5781755F3F06D95B6612BB3E:aTN33nTPI+qQ+osYxcMa4FjlyajAzhIxRzEcoAr8iAI=:Glider_ID_273_MainframeMale_P06W7",
|
||||
"89D641BBEFFD9A227200861A01807ECF:rXDTm9JS6HhLBHIDXPRRF/eERp1DkUhV46QPxevqMWA=:EID_Comrade_6O5AK",
|
||||
@@ -915,6 +979,7 @@
|
||||
"793D221E5331282DD7F3681100944880:B5R64E9EZQD1lHmmyUV+9a1XUEOcYfdopJ3avEIcVxE=:EID_TwistFire_I2VTA",
|
||||
"73FDB8F2BDCCF4518225CB3E28DD9C0A:MBo/DO8mLebMquZPCgeE/FgUdJOXASKVjIJ1H+IEPac=",
|
||||
"00BD73648F7CD05EDE0B2D4C33B499BD:0D3XSX1KGIR/UWBELcxKxJp06xbU96TetFY2Rz9R614=",
|
||||
"BDB776E27E5002716EFCCF94F23D1B19:UkCfjAV4SKCBjTvgHIbHc8U/uAWI63ysU1ST/sy64+4=",
|
||||
"B9C9B09F29DF6BC9DA94C36184CECFFF:1/E0M5TV90UjL3PR+sqOzaRiMRpF8ByTmfVayVEL/Ig=",
|
||||
"1CFA91F4317CA2724E2AD9A098B2888B:op+720ix4L4JmxKqwXbOt+T5Xwqhcva7c6lETmEVCbY=:EID_Shindig_8W1AW",
|
||||
"4D896B93DC5B2D18AA2949EA7B67B4EA:0V70x6p0zRRV9bV6P+sq62lM0CdW4rvUgip6/65GWzc=",
|
||||
@@ -926,6 +991,7 @@
|
||||
"3D8D56FDB72DACCA7E656FBC0F125916:gMX76nmLV2caz28Ro/i3FatCU4tdi1jHgJSPbdnLTUc=",
|
||||
"F78569F2AD7950F870965BC647904647:e3+Nhzk8SBfmZWoQThFsZmnyJs2AoJ+LQDgMz45YAUE=:CID_937_Athena_Commando_M_Football20_UIC2Q",
|
||||
"1B1978CC0EC6D4D937800A9E1CA87CA0:OjIDp8UXlfFZCaVJ6GLnMM+98VabjD7EB3J7ahiRNk0=:Pickaxe_ID_748_GimmickFemale_2W2M2",
|
||||
"A398C07C0A77D834038E7192FAB52B4B:/+4taU8TYRe14OhUt2cevoUqUOh6ado2hWu45FJ+7yA=:LoadingScreen_FearlessFlight",
|
||||
"2D24182706636A7BD3E96AD37605BAD6:jEZJE+EAU7VDo6p6Y84e4+p3AHxYBWin144H4MhzaSQ=:BID_553_Seaweed_NIS9V",
|
||||
"1B1978CC0EC6D4D937800A9E1CA87CA0:OjIDp8UXlfFZCaVJ6GLnMM+98VabjD7EB3J7ahiRNk0=:Glider_ID_348_GimmickFemale_D76Z0",
|
||||
"162FACA3B0E34C1BAF897ECD28D86C84:rKWv3Qcmp+oMK1Zbw7bhPrNSiFNoNZyIlXUW73ZrUnk=:Glider_ID_364_LyricalFemale",
|
||||
@@ -935,7 +1001,9 @@
|
||||
"5A03216B7495CB52261D6E0D74DC62CB:tYFoxNFq/lu5imPTcSk5vAX7ZfPNBwi8INXf2hU+YyU=:CID_A_159_Athena_Commando_M_Cashier_7K3F0",
|
||||
"B8C17AF9BC0DF3113AC6C498DF3325C2:iElxozD4UvK0+tPt0pPLg0gBoSkwLwByJiE4ucKHU7U=:Wrap_085_Beach",
|
||||
"7A59383C41DD998408A74BC37C7D6887:nSrruhpHV3ZEPPECeqWkMh/6mBFzQD8yEFKZS6oJeu8=:CID_A_080_Athena_Commando_M_Hardwood_I15AL",
|
||||
"4EFDA950DA6AA1E6422D2FBF6B89DE85:HDEI+ufmAF1VN2+mYiOFFFDjPVAfkEcmrnyTQh85dmo=:Pickaxe_SunBurstAlt",
|
||||
"F78569F2AD7950F870965BC647904647:e3+Nhzk8SBfmZWoQThFsZmnyJs2AoJ+LQDgMz45YAUE=:CID_956_Athena_Commando_F_Football20Referee_E_DQTP6",
|
||||
"471CA05DCEE84890F9287E4E0DB31C08:cclx9Dp+FcphJfVZLUAdo21nLGn8pQ7GutQgY4LCOts=:Backpack_WinterHunterFNCS",
|
||||
"D83FAFF508200C47DF03BDFF2F801FEC:s9P7AOkoCuPm/506hyAKzuRaIh0xzV9YZON4oDs7GoY=:Glider_ID_258_JupiterMale_LB0TE",
|
||||
"457F39EA51FB4C723B442810750CDA4A:V3d05mcuS4uXMBRpy63TIZDLt5hg9njVD0SGhZDsmBw=:Pickaxe_SaharaMale",
|
||||
"2DCD2E2A9A816AA9035999F8E6F85F6E:6xM4ZYt0UAylyuIgFrmOgq4fYVH2ChEzQNcl8KGQF0o=:Glider_ID_216_HardcoreSportz",
|
||||
@@ -981,6 +1049,8 @@
|
||||
"987329E3B70FEAD522EBF7435E5CA6DD:j4zyQQh25LYcjUO0HYDsBzmqLSXR5r98UKdC0xeTyHI=:EID_Boomer_N2RQT",
|
||||
"30A11EE8EB62BEFD4E9B09611DB13857:YVeVPXcP7UoJTp71ZXpGNdPVzmjnRyymcUpsNWYXfRs=:BID_507_DonutPlate",
|
||||
"F78569F2AD7950F870965BC647904647:e3+Nhzk8SBfmZWoQThFsZmnyJs2AoJ+LQDgMz45YAUE=:EID_Football20Flag_C3QEE",
|
||||
"A398C07C0A77D834038E7192FAB52B4B:/+4taU8TYRe14OhUt2cevoUqUOh6ado2hWu45FJ+7yA=:Pickaxe_FearlessFlightMenaceUniversal",
|
||||
"36351B933FFCFF1746737649E9806CF9:2ZtfFqHREh2sKsMYN23yW+2Sd0OSNN5CHGd/qlXVd7k=:Backpack_TigerRootHype",
|
||||
"3A122019FCD271A539EB71E952B32D60:CCYj89kHr2atYI9ZfLcisGTTnGy8GtGBKZ/arLp/tlY=:CID_A_344_Athena_Commando_M_TreyCozy_6ZK7H",
|
||||
"22B8405FC3BE153C8148422C3F2D3A8A:d/ATMDztVZxwHLUCwOcJWP1/7oPKKGqbBWUBRNZ6dnM=:Wrap_391_Dragonfruit_YVN1M",
|
||||
"5BAB7539D98938E909D3541E69214830:IgABlZz2+aRehC7vxw4p63pXUZOZFwdATQWkTfTYP30=",
|
||||
@@ -988,6 +1058,7 @@
|
||||
"35C2B057E5168DCA74B6F1DDAC745E60:73haJlY3S0TVmH0ELxyw6p5FzFRrITWqOmobH9F2Mq8=:Pickaxe_ID_736_KeenFemale_3LR4C",
|
||||
"162FACA3B0E34C1BAF897ECD28D86C84:rKWv3Qcmp+oMK1Zbw7bhPrNSiFNoNZyIlXUW73ZrUnk=:Wrap_465_Lyrical",
|
||||
"E47EFA3166A5D7B35CEC27B19AC66AE5:JURSqAHhHK6YqLP5rKhCO+SQ2oql4NqJaoaeNGtsrM8=",
|
||||
"376B77890B5057EBBE1C3D0CD97BF4C5:UYA853Oz4bzCHoXU73CELJzefJ4EE1VjwEUiXti8xns=:Pickaxe_PencilCherry",
|
||||
"C23FA9BDE9342B508B8AABBEEA6699A2:3mRtSSu9PTBlC3NpGAQcFent660Ptni4HbGX+Zj1KIA=:BID_867_CritterFrenzy_3VYKQ",
|
||||
"578DA5D582A996DA819F409BE37C39DB:8KdrpLeI7JWcPozcUme7kvSVhgqxwmR0/ah4h+nCWLs=",
|
||||
"4009CB877085F3B3B0D76A686465A140:gMLJXUbFcIrqqUlAuoMI1b27KdWHBVJJeJWdYV1Iiro=:Pickaxe_ID_551_KeplerFemale_AOYI5",
|
||||
@@ -1006,11 +1077,13 @@
|
||||
"01079D19DDDEC8BD51AF536A7106906F:QQQwnB63pdEdKEqLYP9QzAaJXakZ3w1Iuai7YU3A+Xs=:BID_921_Slither_85LFG",
|
||||
"D1EBFA5EEFFAFC07E39EE2D9986CF8FB:jdM2xx6liOm1miOSVC7txNj6HvWF7/zCq4zxMYFYxug=",
|
||||
"5D6562F1EAD89513C82C2F37A24E7F82:I2c+SQCdDvJpC6z1xniRT+k41KAp0pla+o/H68oXFLQ=:CID_651_Athena_Commando_F_HolidayPJ_C",
|
||||
"471CA05DCEE84890F9287E4E0DB31C08:cclx9Dp+FcphJfVZLUAdo21nLGn8pQ7GutQgY4LCOts=:Character_TreasureHunterFashionsFNCS",
|
||||
"E098A699B1A5E20B03B5CBBCDB85D4E3:oKYx1AqjUax4YhKirSQDeyBSQNkSmEKDS7q+U/4KszU=",
|
||||
"BA4D882E7B09657A5E05773F702103CF:PjieN4lF3tRBNjQmWWUAyvZUaV0OrPGPYwrqNT8ZSus=:Wrap_045_Angel",
|
||||
"8E1887D55A60F69B33B234242FF49653:YofZaW+CRl0jhVhkp9z2CQWhTPwyjQ6dbHtISkLDfVU=:Wrap_476_Alfredo",
|
||||
"EBFE6788D367D741AF0A4FD098CDFD39:FAeJTGyT49P+dQOmKx+lMYVAxu7qtIPlqSaLAR85zqI=:Wrap_066_AssassinSuit02",
|
||||
"1398A4C2E6C3954EDDC49F85C5AB251B:qF0+04jSaU0kgws/RigbWpwnyPQMDnK+4Vf4G0tmTns=",
|
||||
"59A2ED9719A429D54A0527BD9EFDD2CB:uiAzgzDicrjHVlY+8a4i0p2f+7GkJ1kwmpT84nH6nsg=",
|
||||
"E0FB7B394449CE6450EA90C93D710EB8:NrXwNX6lKuu/kyQuvE74+6Uo04FODoV4ZqxToj/jS6I=:Wrap_088_DriftSummer",
|
||||
"01FC97F8787B82E027EC64661E0D36AB:Mh1l2LJ3YrgaZtg7sRTd8XeBkVcyA3i089gZKkTr1gM=:BID_985_CactusDancerMale",
|
||||
"7FA4F2374FFE075000BC209360056A5A:nywIiZlIL8AIMkwCZfrYoAkpHM3zCwddhfszh++6ejI=:CID_223_Athena_Commando_M_Dieselpunk",
|
||||
@@ -1019,12 +1092,16 @@
|
||||
"C23FA9BDE9342B508B8AABBEEA6699A2:3mRtSSu9PTBlC3NpGAQcFent660Ptni4HbGX+Zj1KIA=:Pickaxe_ID_676_CritterFrenzyMale_B21OE",
|
||||
"F3A99CD0D4F58EECEEB0D112506AD846:ZZtCRPcKk6itVryDavp7uZFIXiZF5CW0O9b+8Zt2Oag=:Pickaxe_ID_646_QuarrelMale_PTOBI",
|
||||
"01079D19DDDEC8BD51AF536A7106906F:QQQwnB63pdEdKEqLYP9QzAaJXakZ3w1Iuai7YU3A+Xs=:CID_A_305_Athena_Commando_F_Slither_C_UE2Q9",
|
||||
"A398C07C0A77D834038E7192FAB52B4B:/+4taU8TYRe14OhUt2cevoUqUOh6ado2hWu45FJ+7yA=:Backpack_FearlessFlightMenace",
|
||||
"BAEF248980269F569C6E1FFF2B885DF6:2b6DQGIcab1r7zsw5j3MR84iDmt0g1XBquxJVR/8GxM=:BID_402_TourBus",
|
||||
"E2A2B587160A4C443BF5455EDEC37D7E:+nH3Fe4U8akaQyEoy+g3b6IT6593VPY1PZjwP+d/ydk=",
|
||||
"BFE1F518C16A9F061B140D829ADDB0ED:bHkPYjXd71vacoJ4IisL//zEyVLFh+Di8MUqV9KkpFU=:BID_806_Foray_WG30D",
|
||||
"BF953D81273D8772F12F57646A49430E:JP2vQQulX3OGMjglMYW7PT3KMCMbia3rtHnuEsuEVxA=",
|
||||
"18E7A14F3D3A6501FCDCA85855F808CB:iYqOu2+M8QDG31cRJ8ZHQ7Z5eXpTOSTEvXcgfDSqVTg=:EID_Dreadful",
|
||||
"566C4D92AF66F45DF5E2D7EB43CC27AE:EuAYwU5tQBXzGoSj5BMc7S5yFfe9wZ2qrzx/hIHpnqw=:EID_LunchBox",
|
||||
"476EE53C2EAA24FD1950A9875FB4CF59:LQMwgWwsoSqGyYbBouYaMaN8NZ38Vy5r3Tqa7KA71oQ=:Backpack_FallValleyCharge",
|
||||
"9B730D57F59135CF774023F0DC1A99E7:l2Jy2Q3X1MPar8qMDGSHWWhdsVsYQ7hsqEYFMA6D8fI=",
|
||||
"CB2F74DD1C6D7FB4560BF4AA6B7460EE:1MXyB7YDAZC+p/2Fl+tefE6s3cCdKs+5tXDHEg1JLfg=",
|
||||
"44DB36B2D2B3854669780458D2FE48C4:gtl0smAMRKg8d9TdDH47lUOYCygKzbAPA6/HaXLWy94=:Season17_Magesty_Pickaxe_Schedule",
|
||||
"828B24CF7786DF74D8511CA89DEED8CF:nCahv7mQhidmYXSmKif6z7d6bQ60mdPQ7SrdZ7a3GaE=:CID_910_Athena_Commando_F_York",
|
||||
"A13ABC32168BF8FE80F667ACB4BD5AAF:WsXMYjk1W2VJ8o9Dj7FXsaKvHNeHydr2kJEiwPRIMwU=:EID_Triumphant",
|
||||
@@ -1032,18 +1109,22 @@
|
||||
"EB16EA013B751792698E05435797C1ED:y9JgD812Io4mbaJ5i533Ts5SSfyXaGM4JyoimjP+i4M=:BID_245_BaseballKitbashFemale",
|
||||
"22AB4BDC10065AA49B38DE88522DF836:1L8L+oKtSOtIxbm1x0HbDtzquIH6CH8vu1PF4i8jU+w=:CID_449_Athena_Commando_M_BannerD",
|
||||
"7C04002177805455CCA13E61F418D117:cacqp05gISCHgiULNDksrFNlUbhz6NxeW7pEr+xp2FQ=:LoadingScreen_Genius",
|
||||
"ABBCFB5A5EEF4E14C2FB2A379152E402:ZRrlkrmu0l1tGZe5IyUOVa2mEJLbjuQCnoiGaDbmFXg=",
|
||||
"AE9F7B3419C7FBD2414D72E2E1C8A7BA:kpIotniLp60tWfbBitDUrjw6gmJ2Swl+YT3QAkecpRA=:CID_547_Athena_Commando_F_Meteorwoman",
|
||||
"4BA767BD2DC06D215B435AC09A033437:QOfpKnEogmj0tTa5wf49SZH55Sy48QEGP02DbkSg218=:BID_A_009_Grapefruit",
|
||||
"929B82B3454DF80CC45B11A55400B6E7:jl/KsmshfBxKKnPDHyHNTHOzTE3buCIrBpSUpXJQdL4=:Glider_ID_107_IceMaiden",
|
||||
"5A1170F589134C4D68AAA2B5AA6EDA69:bfro7s6Qtde/H7C4zc6MJdpua1mhem8HywLluxBLDrg=:Glider_ID_250_EmbersMale",
|
||||
"98CAB76B2CB8406085C8CDF566FFF5DD:cucOYeadgsZAhkdKC7Klc4/BhUe0SnQtF2cwEScRBxw=",
|
||||
"F044853E82632E827ED91FB4AFBD28DF:LH1pXQ13KEoYfxxylALn8jaS0t/7IrVRVmO8UXieaVU=",
|
||||
"5C25DC4FE406CC6DAAB47D5EBF222355:LH76FBWg3hkWPDgOmXcRY/YD33N/6E4qQxqKUvIp0oA=:EID_Ignite",
|
||||
"BB09F8C7991800CA61A7144E3A6219FA:o+Hvu5rCygQz66xIyk0SANceWaptKHLEls3vZaMW9oc=",
|
||||
"88FA70760D757D80F661FA53B4762EC2:7OtV76cpyOq9dNeM5PVD8TOdRcPx1K3weEPXzlCugu0=:Pickaxe_ID_682_BistroAstronautFemale_A3MD2",
|
||||
"7E5BFF3AFC483F87B5891536C0AF3DFD:dEBFRFQPYg4NndewaW9/rEDpW0N8VFh7srTZDn0aejE=",
|
||||
"312398E80AB6209B22CAA2EBAB2DB35B:QZ5uhBnQSeK4b+u9E6PTfw7j2scPMTPX4fFTOJWIwEM=:EID_Shorts",
|
||||
"8D44654E9EA2AAC35E489476B1948E58:Dwb/irSIIGd3tLLPEP5OqJY1D4KfjdP4+uP4+Ht4YOo=:LoadingScreen_Elevate",
|
||||
"63722D44ECCA0F4178B85F5A6BC4C31B:j42UL0bmfBkli6Aj92wWABwFby5rAplP/Ac6nh9kRvA=",
|
||||
"79F7D9C856E8CF354109D3298F076C06:Ak3TOM0i0Mq/KYxd7SDlSuS7o55USaf+urL6WqnmalY=",
|
||||
"376B77890B5057EBBE1C3D0CD97BF4C5:UYA853Oz4bzCHoXU73CELJzefJ4EE1VjwEUiXti8xns=:Character_Pencil_Fig",
|
||||
"4E7938F1FAC98BDF378823116712AC7A:jbZVgprILTQomUdGeJF0PsAFAJxsSCs5cKcXweZMAg0=:BID_586_Tar_DIJGH",
|
||||
"25A2BE0115631B392E3C3217C645540B:GyQ18n64dldycxr5SPLRfWRNnxFB3eQFK07BbTgleUk=",
|
||||
"308F587F46CB50450DCA9B9CFD50E120:2nvyeGrxnqL5SJjMPag1d9YiiXfdGYVkL/WJqWYnC2A=:Glider_ID_099_Moth",
|
||||
@@ -1051,6 +1132,7 @@
|
||||
"F78569F2AD7950F870965BC647904647:e3+Nhzk8SBfmZWoQThFsZmnyJs2AoJ+LQDgMz45YAUE=:CID_939_Athena_Commando_M_Football20_C_9OP0F",
|
||||
"89CD763ACF4C3672A0F74AC0F45C291F:vtcPbnTh2aDOt7LfYpJL+7aF1TaB8LDaLsMoQ47NZec=",
|
||||
"E4D8D083C49828F6BF310ECA74A84F98:NxjtZXHe49xC1zUVs+XKjHbeic3prkFOWmwkaQ1vOFw=",
|
||||
"8D44654E9EA2AAC35E489476B1948E58:Dwb/irSIIGd3tLLPEP5OqJY1D4KfjdP4+uP4+Ht4YOo=:Pickaxe_ShinyStar",
|
||||
"D2FAE1D098B2B4695EB59FAAD504798D:ZUDIqDvGVcpCVuA3h67vdkVbZwLuC0Z1zX33JLyi5xE=:BID_924_LateralMale_Y2INS",
|
||||
"010E6ACF85E4A58BF6F551EFE7B85F61:DwCIH5Dw/1wdiS6gFGmWe4HUgD9kMOEzjbzM/1QshM4=:BID_234_SpeedyMidnight",
|
||||
"54FD9ABD65879452DCB8CE11C1D7F1AF:nV0Vm4NCBl+MkGX8wiqfFrg0viDriL3I2xc4KS7n7fg=:CID_422_Athena_Commando_F_MaskedWarrior",
|
||||
@@ -1062,6 +1144,7 @@
|
||||
"9FD68EDC1A5A456225A1C14E1488C573:vfIZFBmmSWgvzSDG/l7N0EGIrANZpUKA7Ofqo+n4fBg=",
|
||||
"C8EDBD039269967B5BE92CCDD8A9D62F:8gR7wuE22djecHDkUAKfbBCtvwwWeVjZxSOBag9drI4=:EID_CoyoteTrail",
|
||||
"8DCAE39C7D9690E19F52655F02C613B2:ZZHbiVsbXquLlrtNVHtryLS3Vd1Ego8/8tlDpeUCgfc=:EID_ScoreCardBurger",
|
||||
"4EFDA950DA6AA1E6422D2FBF6B89DE85:HDEI+ufmAF1VN2+mYiOFFFDjPVAfkEcmrnyTQh85dmo=",
|
||||
"5098C0AED639B6C90A785C727F0DED4B:/YNq7WVNgAmtcY8eS20XBvoz00E1Z/1/Q0BZ8EluHf8=",
|
||||
"E8585F83E40CD4CF0272EA6012055A97:4LrXtLEBhL5JquAu4/kq1Dghb4/355YROt3ciXg+ysE=",
|
||||
"1B1978CC0EC6D4D937800A9E1CA87CA0:OjIDp8UXlfFZCaVJ6GLnMM+98VabjD7EB3J7ahiRNk0=:EID_Gimmick_Female_6CMF4",
|
||||
@@ -1069,6 +1152,7 @@
|
||||
"06E3CB03E94C4D850CE185166706E868:jDuRIbxnZBnAH/hUrfRX3qnGyIogSWUHrK6nq7Et3pk=:BID_771_Lasso_ZN4VA",
|
||||
"19CAB803EB00118FB3E6B3E5ABA7B234:tRM77TfQWWJ38hNsFLjt7jMNoSOozxqi9PF9/9H3rmU=:Wrap_154_Haunt",
|
||||
"F78569F2AD7950F870965BC647904647:e3+Nhzk8SBfmZWoQThFsZmnyJs2AoJ+LQDgMz45YAUE=",
|
||||
"A398C07C0A77D834038E7192FAB52B4B:/+4taU8TYRe14OhUt2cevoUqUOh6ado2hWu45FJ+7yA=",
|
||||
"C5C1E0742C0BFE4264242F3774C13B41:BO5aZnDZhvHsUFLsJD2vtYCQ6iYpX7Lhl565nDsBhaE=",
|
||||
"6AD4E900C2E9E785B0442E0A60E74C66:FbrGkaMoqjq/CaamdJrQUBz/PjBqtA0wFlGj1VOxH6A=:Glider_ID_378_EnsembleSnakeMale",
|
||||
"B3BE1C036099F140800BB7D5FF1D9C49:bLt9+35t2O26OTgiEMuUCvH1kn+lGjTjhaEEoiz4CtE=:Pickaxe_ID_535_ConvoyTarantulaMale_GQ82N",
|
||||
@@ -1078,6 +1162,7 @@
|
||||
"98BCB8B7136162178BF364D6105BB9B7:c1dhB+vWHWRw3YvWpsHRj9Ayj8JjdqYOLnyr0YImxVo=:CID_999_Athena_Commando_M_GlobalFB_E_OISU6",
|
||||
"AEC9FD29ACF48B274A1A573C9ECF4B06:7OT+zOUDq1RjYJKp8gQhbUnYz/qJ19It2X4HduP5y/g=:Pickaxe_ID_249_Squishy1H",
|
||||
"110D116208C62834812C2EDF2F305E49:MwuF5zX7GpQCGL2w+CwkPmGzH3q05YUoLo5udhVMNPg=:CID_718_Athena_Commando_F_LuckyHero",
|
||||
"4EFDA950DA6AA1E6422D2FBF6B89DE85:HDEI+ufmAF1VN2+mYiOFFFDjPVAfkEcmrnyTQh85dmo=:Backpack_SunBurst",
|
||||
"EF7C5225BD60644B313ABEE69182A302:ITNJPJyUEyMw8YrBk89HfKwHTFV6jGJJHt4D8UmpaxI=",
|
||||
"8C623F6A49CFF9ADC7895A466CA1C896:kLmYdLi+jOBs2k+B/UxrCcPSdvuNYTha0xl9+SvUzJU=",
|
||||
"56812D9CB607F72A9BDBADEE44ECCD21:pj9dMhJSaj6V2HsA0VWABE7Cs4+eEBz1Kex340gafK8=:BID_254_ShinyMale",
|
||||
@@ -1089,10 +1174,12 @@
|
||||
"4755D9C0E2D1DE1C09B77DEA8B830471:9tUO5yVhvp+/sp7icZaEDw05nMAdS6bYAWYyfQNsxBc=:Glider_ID_209_DonutPlate",
|
||||
"DC487286E8C1CD5FE18AC3FE76034EF2:3h9IwK2qQP8PHVuO1aZI1C34JrJxKBnXJOFcSDSj99M=:Wrap_102_WorldCup2019",
|
||||
"C5C1E0742C0BFE4264242F3774C13B41:BO5aZnDZhvHsUFLsJD2vtYCQ6iYpX7Lhl565nDsBhaE=:EID_Martian_SK4J6",
|
||||
"376B77890B5057EBBE1C3D0CD97BF4C5:UYA853Oz4bzCHoXU73CELJzefJ4EE1VjwEUiXti8xns=:Character_Pencil_Grape",
|
||||
"E0AEF4894E1283946745F7902F7E105A:7MXKJEs903nNbT1oFzykxoHbQNDnOBm6yfadj+mtBDA=:Pickaxe_ID_752_RoverMale_I98VZ",
|
||||
"FE0FA56F4B280D2F0CB2AB899C645F3E:hYi0DrAf6wtw7Zi+PlUi7/vIlIB3psBzEb5piGLEW6s=:CID_220_Athena_Commando_F_Clown",
|
||||
"8DCAE39C7D9690E19F52655F02C613B2:ZZHbiVsbXquLlrtNVHtryLS3Vd1Ego8/8tlDpeUCgfc=:BID_337_MascotMilitiaTomato",
|
||||
"7C469274E430B5E3005EF1799DE618CC:5j5CNw8BI2+kBShT+u7kgw9HyCZ3dOvCMGBO9WScNPQ=:Pickaxe_ID_850_WayfareMaskFemale",
|
||||
"471CA05DCEE84890F9287E4E0DB31C08:cclx9Dp+FcphJfVZLUAdo21nLGn8pQ7GutQgY4LCOts=:Wrap_Comp24",
|
||||
"5738A14C7E45E1B405CEF920829CB255:xZHlPTz/dxNahrp9IqTZ+tjOZSYMxQb9KZFXlg9N638=:Wrap_180_HolidayTime",
|
||||
"7B1151E3094646DFFD37B6492B117FDB:4WxNHdTgHDEpGjzIV2XIjGO41kyiwggFQpdq8y+o1jY=:BID_733_TheGoldenSkeletonFemale_SG4HF",
|
||||
"B1EB196DD39D0736E7E08F99B07D8B9A:1fDhBY8uhi++l6QQPL2YtxZgUv04OZoMGBrH+yN8yKM=:EID_SandwichBop",
|
||||
@@ -1101,6 +1188,7 @@
|
||||
"01079D19DDDEC8BD51AF536A7106906F:QQQwnB63pdEdKEqLYP9QzAaJXakZ3w1Iuai7YU3A+Xs=:CID_A_304_Athena_Commando_F_Slither_B_MO4VZ",
|
||||
"F78569F2AD7950F870965BC647904647:e3+Nhzk8SBfmZWoQThFsZmnyJs2AoJ+LQDgMz45YAUE=:CID_952_Athena_Commando_F_Football20Referee_ZX4IC",
|
||||
"360CD59F6F7B68A441DDED9DB5FD13D7:G6pVAf/ul1HPYh6s2M1l8G4hn62jdwkcbegeLoxL7Y0=:EID_Ashes_MYQ8O",
|
||||
"1937F4ADBC2C38EF4F189DC2B1AE58AB:tWzxKwKEDzI0RsQGl2GvOVqZwxOSOiZaCQkyK1hE+lA=:Backpack_Inspire",
|
||||
"2F1A5AFD22512A8B16494629CCA065B2:Un44BCuGtirrKab0E9TeOyDRnWC/Jh1h48+FOn4UrtA=",
|
||||
"457F39EA51FB4C723B442810750CDA4A:V3d05mcuS4uXMBRpy63TIZDLt5hg9njVD0SGhZDsmBw=:LoadingScreen_Sahara",
|
||||
"195439D6DD0FE44ADAE6BF7A44436519:kRCw7VFSPCYqhu7lJlA4kO4YmsqZUzxM6ARm7Ti8ntQ=",
|
||||
@@ -5126,6 +5126,140 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"Season24": {
|
||||
"Quests": [
|
||||
{
|
||||
"itemGuid": "S24-Quest:HordeV3_Quest_Daily_A01",
|
||||
"templateId": "Quest:HordeV3_Quest_Daily_A01",
|
||||
"objectives": [
|
||||
{
|
||||
"name": "hordev3_quest_daily_a01",
|
||||
"count": 5
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"itemGuid": "S24-Quest:HordeV3_Quest_Daily_A02",
|
||||
"templateId": "Quest:HordeV3_Quest_Daily_A02",
|
||||
"objectives": [
|
||||
{
|
||||
"name": "hordev3_quest_daily_a02",
|
||||
"count": 10
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"itemGuid": "S24-Quest:HordeV3_Quest_Daily_A03",
|
||||
"templateId": "Quest:HordeV3_Quest_Daily_A03",
|
||||
"objectives": [
|
||||
{
|
||||
"name": "hordev3_quest_daily_a03",
|
||||
"count": 15
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"itemGuid": "S24-Quest:HordeV3_Quest_Event_A01",
|
||||
"templateId": "Quest:HordeV3_Quest_Event_A01",
|
||||
"objectives": [
|
||||
{
|
||||
"name": "hordev3_quest_event_a01",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"itemGuid": "S24-Quest:HordeV3_Quest_Event_A02",
|
||||
"templateId": "Quest:HordeV3_Quest_Event_A02",
|
||||
"objectives": [
|
||||
{
|
||||
"name": "hordev3_quest_event_a02",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"itemGuid": "S24-Quest:HordeV3_Quest_Event_A03",
|
||||
"templateId": "Quest:HordeV3_Quest_Event_A03",
|
||||
"objectives": [
|
||||
{
|
||||
"name": "hordev3_quest_event_a03",
|
||||
"count": 5
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"itemGuid": "S24-Quest:HordeV3_Quest_Event_A04",
|
||||
"templateId": "Quest:HordeV3_Quest_Event_A04",
|
||||
"objectives": [
|
||||
{
|
||||
"name": "hordev3_quest_event_a04",
|
||||
"count": 1000
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"itemGuid": "S24-Quest:HordeV3_Quest_Event_A05",
|
||||
"templateId": "Quest:HordeV3_Quest_Event_A05",
|
||||
"objectives": [
|
||||
{
|
||||
"name": "hordev3_quest_event_a05",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"itemGuid": "S24-Quest:HordeV3_Quest_Event_A06",
|
||||
"templateId": "Quest:HordeV3_Quest_Event_A06",
|
||||
"objectives": [
|
||||
{
|
||||
"name": "hordev3_quest_event_a06",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"itemGuid": "S24-Quest:HordeV3_Quest_Event_A07",
|
||||
"templateId": "Quest:HordeV3_Quest_Event_A07",
|
||||
"objectives": [
|
||||
{
|
||||
"name": "hordev3_quest_event_a07",
|
||||
"count": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"itemGuid": "S24-Quest:HordeV3_Quest_Event_A08",
|
||||
"templateId": "Quest:HordeV3_Quest_Event_A08",
|
||||
"objectives": [
|
||||
{
|
||||
"name": "hordev3_quest_event_a08",
|
||||
"count": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"itemGuid": "S24-Quest:HordeV3_Quest_Weekly_W02",
|
||||
"templateId": "Quest:HordeV3_Quest_Weekly_W02",
|
||||
"objectives": [
|
||||
{
|
||||
"name": "hordev3_quest_weekly_w02",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"itemGuid": "S24-Quest:HordeV3_Quest_Weekly_W03",
|
||||
"templateId": "Quest:HordeV3_Quest_Weekly_W03",
|
||||
"objectives": [
|
||||
{
|
||||
"name": "hordev3_quest_weekly_w03",
|
||||
"count": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"BattleRoyale": {
|
||||
@@ -1,19 +0,0 @@
|
||||
[Config]
|
||||
# If this is set to false, it will use the email to display name method.
|
||||
bUseConfigDisplayName=false
|
||||
# Your fortnite display name (will only be used if the property above is set to true).
|
||||
displayName=LawinServer
|
||||
|
||||
[Profile]
|
||||
# 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 21 and for Save the World from Season 2 to Season X.
|
||||
bCompletedSeasonalQuests=false
|
||||
# If this is set to true, all Save the World events will be displayed in lobby.
|
||||
bAllSTWEventsActivated=false
|
||||
|
||||
[GameServer]
|
||||
# Matchmaker gameserver config, you can use this to connect to gameservers like rift (titanium), fortmp, etc... (they have to be hosting though).
|
||||
|
||||
# IP the matchmaker will use upon join.
|
||||
ip=127.0.0.1
|
||||
# PORT the matchmaker will use upon join.
|
||||
port=7777
|
||||
@@ -1 +0,0 @@
|
||||
taskkill /f /im lawinserver-win.exe
|
||||
@@ -1,459 +0,0 @@
|
||||
[
|
||||
"Schematic:SID_Wall_Wood_Spikes_vR_T01",
|
||||
"Hero:HID_Commando_Sony_R_T01",
|
||||
"Schematic:SID_Wall_Wood_Spikes_UC_T01",
|
||||
"Hero:HID_Commando_ShockDamage_VR_T01",
|
||||
"Schematic:SID_Wall_Wood_Spikes_SR_T01",
|
||||
"Hero:HID_Commando_ShockDamage_SR_T01",
|
||||
"Schematic:SID_Wall_Wood_Spikes_R_T01",
|
||||
"Hero:HID_Commando_ShockDamage_R_T01",
|
||||
"Schematic:SID_Wall_Wood_Spikes_C_T01",
|
||||
"Hero:HID_Commando_GunTough_VR_T01",
|
||||
"Schematic:SID_Wall_Light_VR_T01",
|
||||
"Hero:HID_Commando_GunTough_UC_T01",
|
||||
"Schematic:SID_Wall_Light_SR_T01",
|
||||
"Hero:HID_Commando_GunTough_SR_T01",
|
||||
"Schematic:SID_Wall_Light_R_T01",
|
||||
"Hero:HID_Commando_GunTough_R_T01",
|
||||
"Schematic:SID_Wall_Launcher_VR_T01",
|
||||
"Hero:HID_Commando_GunHeadshotHW_SR_T01",
|
||||
"Schematic:SID_Wall_Launcher_UC_T01",
|
||||
"Hero:HID_Commando_GunHeadshot_VR_T01",
|
||||
"Schematic:SID_Wall_Launcher_SR_T01",
|
||||
"Hero:HID_Commando_GunHeadshot_SR_T01",
|
||||
"Schematic:SID_Wall_Launcher_R_T01",
|
||||
"Hero:HID_Commando_GrenadeMaster_SR_T01",
|
||||
"Schematic:SID_Wall_Electric_VR_T01",
|
||||
"Hero:HID_Commando_GrenadeGun_VR_T01",
|
||||
"Schematic:SID_Wall_Electric_UC_T01",
|
||||
"Hero:HID_Commando_GrenadeGun_SR_T01",
|
||||
"Schematic:SID_Wall_Electric_SR_T01",
|
||||
"Hero:HID_Commando_GrenadeGun_R_T01",
|
||||
"Schematic:SID_Wall_Electric_R_T01",
|
||||
"Hero:HID_Commando_GCGrenade_VR_T01",
|
||||
"Schematic:SID_Wall_Darts_VR_T01",
|
||||
"Hero:HID_Commando_GCGrenade_SR_T01",
|
||||
"Schematic:SID_Wall_Darts_UC_T01",
|
||||
"Hero:HID_Commando_GCGrenade_R_T01",
|
||||
"Schematic:SID_Wall_Darts_SR_T01",
|
||||
"Hero:HID_Commando_010_VR_T01",
|
||||
"Schematic:SID_Wall_Darts_R_T01",
|
||||
"Hero:HID_Commando_010_SR_T01",
|
||||
"Schematic:SID_Floor_Ward_VR_T01",
|
||||
"Hero:HID_Commando_009_VR_T01",
|
||||
"Schematic:SID_Floor_Ward_UC_T01",
|
||||
"Hero:HID_Commando_009_SR_T01",
|
||||
"Schematic:SID_Floor_Ward_SR_T01",
|
||||
"Hero:HID_Commando_009_R_T01",
|
||||
"Schematic:SID_Floor_Ward_R_T01",
|
||||
"Hero:HID_Commando_008_VR_T01",
|
||||
"Schematic:SID_Floor_Spikes_Wood_VR_T01",
|
||||
"Hero:HID_Commando_008_SR_T01",
|
||||
"Schematic:SID_Floor_Spikes_Wood_UC_T01",
|
||||
"Hero:HID_Commando_008_R_T01",
|
||||
"Schematic:SID_Floor_Spikes_Wood_SR_T01",
|
||||
"Hero:HID_Commando_008_FoundersM_SR_T01",
|
||||
"Schematic:SID_Floor_Spikes_Wood_R_T01",
|
||||
"Hero:HID_Commando_008_FoundersF_SR_T01",
|
||||
"Schematic:SID_Floor_Spikes_Wood_C_T01",
|
||||
"Hero:HID_Commando_007_VR_T01",
|
||||
"Schematic:SID_Floor_Spikes_VR_T01",
|
||||
"Hero:HID_Commando_007_UC_T01",
|
||||
"Schematic:SID_Floor_Spikes_UC_T01",
|
||||
"Hero:HID_Commando_007_SR_T01",
|
||||
"Schematic:SID_Floor_Spikes_SR_T01",
|
||||
"Hero:HID_Commando_007_R_T01",
|
||||
"Schematic:SID_Floor_Spikes_R_T01",
|
||||
"Hero:HID_Commando_GrenadeGun_UC_T01",
|
||||
"Schematic:SID_Floor_Launcher_VR_T01",
|
||||
"Hero:HID_Constructor_Sony_R_T01",
|
||||
"Schematic:SID_Floor_Launcher_UC_T01",
|
||||
"Hero:HID_Constructor_RushBASE_VR_T01",
|
||||
"Schematic:SID_Floor_Launcher_SR_T01",
|
||||
"Hero:HID_Constructor_RushBASE_UC_T01",
|
||||
"Schematic:SID_Floor_Launcher_R_T01",
|
||||
"Hero:HID_Constructor_RushBASE_SR_T01",
|
||||
"Schematic:SID_Floor_Health_VR_T01",
|
||||
"Hero:HID_Constructor_RushBASE_R_T01",
|
||||
"Schematic:SID_Floor_Health_UC_T01",
|
||||
"Hero:HID_Constructor_PlasmaDamage_VR_T01",
|
||||
"Schematic:SID_Floor_Health_SR_T01",
|
||||
"Hero:HID_Constructor_PlasmaDamage_SR_T01",
|
||||
"Schematic:SID_Floor_Health_R_T01",
|
||||
"Hero:HID_Constructor_PlasmaDamage_R_T01",
|
||||
"Schematic:SID_Ceiling_Gas_VR_T01",
|
||||
"Hero:HID_Constructor_HammerTank_VR_T01",
|
||||
"Schematic:SID_Ceiling_Gas_UC_T01",
|
||||
"Hero:HID_Constructor_HammerTank_UC_T01",
|
||||
"Schematic:SID_Ceiling_Gas_SR_T01",
|
||||
"Hero:HID_Constructor_HammerTank_SR_T01",
|
||||
"Schematic:SID_Ceiling_Gas_R_T01",
|
||||
"Hero:HID_Constructor_HammerTank_R_T01",
|
||||
"Schematic:SID_Ceiling_Electric_Single_VR_T01",
|
||||
"Hero:HID_Constructor_HammerPlasma_VR_T01",
|
||||
"Schematic:SID_Ceiling_Electric_Single_UC_T01",
|
||||
"Hero:HID_Constructor_HammerPlasma_SR_T01",
|
||||
"Schematic:SID_Ceiling_Electric_Single_SR_T01",
|
||||
"Hero:HID_Constructor_BaseHyperHW_SR_T01",
|
||||
"Schematic:SID_Ceiling_Electric_Single_R_T01",
|
||||
"Hero:HID_Constructor_BaseHyper_VR_T01",
|
||||
"Schematic:SID_Ceiling_Electric_Single_C_T01",
|
||||
"Hero:HID_Constructor_BaseHyper_SR_T01",
|
||||
"Schematic:SID_Ceiling_Electric_AOE_VR_T01",
|
||||
"Hero:HID_Constructor_BaseHyper_R_T01",
|
||||
"Schematic:SID_Ceiling_Electric_AOE_SR_T01",
|
||||
"Hero:HID_Constructor_BASEBig_SR_T01",
|
||||
"Schematic:SID_Ceiling_Electric_AOE_R_T01",
|
||||
"Hero:HID_Constructor_010_VR_T01",
|
||||
"Schematic:SID_Sniper_TripleShot_VR_Ore_T01",
|
||||
"Hero:HID_Constructor_010_SR_T01",
|
||||
"Schematic:SID_Sniper_TripleShot_SR_Ore_T01",
|
||||
"Hero:HID_Constructor_009_VR_T01",
|
||||
"Schematic:SID_Sniper_Standard_Scope_VR_Ore_T01",
|
||||
"Hero:HID_Constructor_009_SR_T01",
|
||||
"Schematic:SID_Sniper_Standard_Scope_SR_Ore_T01",
|
||||
"Hero:HID_Constructor_009_R_T01",
|
||||
"Schematic:SID_Sniper_Standard_VR_Ore_T01",
|
||||
"Hero:HID_Constructor_008_VR_T01",
|
||||
"Schematic:SID_Sniper_Standard_SR_Ore_T01",
|
||||
"Hero:HID_Constructor_008_SR_T01",
|
||||
"Schematic:SID_Sniper_Standard_Founders_VR_Ore_T01",
|
||||
"Hero:HID_Constructor_008_R_T01",
|
||||
"Schematic:SID_Sniper_Standard_UC_Ore_T01",
|
||||
"Hero:HID_Constructor_008_FoundersM_SR_T01",
|
||||
"Schematic:SID_Sniper_Standard_R_Ore_T01",
|
||||
"Hero:HID_Constructor_008_FoundersF_SR_T01",
|
||||
"Schematic:SID_Sniper_Standard_C_Ore_T01",
|
||||
"Hero:HID_Constructor_007_VR_T01",
|
||||
"Schematic:SID_Sniper_Shredder_VR_Ore_T01",
|
||||
"Hero:HID_Constructor_007_UC_T01",
|
||||
"Schematic:SID_Sniper_Shredder_SR_Ore_T01",
|
||||
"Hero:HID_Constructor_007_SR_T01",
|
||||
"Schematic:SID_Sniper_Hydraulic_VR_Ore_T01",
|
||||
"Hero:HID_Constructor_007_R_T01",
|
||||
"Schematic:SID_Sniper_Hydraulic_SR_Ore_T01",
|
||||
"Hero:HID_Ninja_Swordmaster_SR_T01",
|
||||
"Schematic:SID_Sniper_BoltAction_Scope_VR_Ore_T01",
|
||||
"Hero:HID_Ninja_StarsRainHW_SR_T01",
|
||||
"Schematic:SID_Sniper_BoltAction_Scope_SR_Ore_T01",
|
||||
"Hero:HID_Ninja_StarsRain_VR_T01",
|
||||
"Schematic:SID_Sniper_BoltAction_Scope_R_Ore_T01",
|
||||
"Hero:HID_Ninja_StarsRain_SR_T01",
|
||||
"Schematic:SID_Sniper_BoltAction_UC_Ore_T01",
|
||||
"Hero:HID_Ninja_StarsAssassin_VR_T01",
|
||||
"Schematic:SID_Sniper_BoltAction_R_Ore_T01",
|
||||
"Hero:HID_Ninja_StarsAssassin_UC_T01",
|
||||
"Schematic:SID_Sniper_BoltAction_C_Ore_T01",
|
||||
"Hero:HID_Ninja_StarsAssassin_SR_T01",
|
||||
"Schematic:SID_Sniper_Auto_VR_Ore_T01",
|
||||
"Hero:HID_Ninja_StarsAssassin_R_T01",
|
||||
"Schematic:SID_Sniper_Auto_SR_Ore_T01",
|
||||
"Hero:HID_Ninja_StarsAssassin_FoundersM_SR_T01",
|
||||
"Schematic:SID_Sniper_Auto_Founders_VR_Ore_T01",
|
||||
"Hero:HID_Ninja_StarsAssassin_FoundersF_SR_T01",
|
||||
"Schematic:SID_Sniper_Auto_UC_Ore_T01",
|
||||
"Hero:HID_Ninja_Sony_R_T01",
|
||||
"Schematic:SID_Sniper_Auto_R_Ore_T01",
|
||||
"Hero:HID_Ninja_SmokeDimMak_VR_T01",
|
||||
"Schematic:SID_Sniper_AMR_VR_Ore_T01",
|
||||
"Hero:HID_Ninja_SmokeDimMak_SR_T01",
|
||||
"Schematic:SID_Sniper_AMR_SR_Ore_T01",
|
||||
"Hero:HID_Ninja_SmokeDimMak_R_T01",
|
||||
"Schematic:SID_Sniper_AMR_R_Ore_T01",
|
||||
"Hero:HID_Ninja_SlashTail_VR_T01",
|
||||
"Schematic:SID_Shotgun_Tactical_Precision_VR_Ore_T01",
|
||||
"Hero:HID_Ninja_SlashTail_UC_T01",
|
||||
"Schematic:SID_Shotgun_Tactical_Precision_SR_Ore_T01",
|
||||
"Hero:HID_Ninja_SlashTail_SR_T01",
|
||||
"Schematic:SID_Shotgun_Tactical_Precision_R_Ore_T01",
|
||||
"Hero:HID_Ninja_SlashTail_R_T01",
|
||||
"Schematic:SID_Shotgun_Tactical_UC_Ore_T01",
|
||||
"Hero:HID_Ninja_SlashBreath_VR_T01",
|
||||
"Schematic:SID_Shotgun_Tactical_R_Ore_T01",
|
||||
"Hero:HID_Ninja_SlashBreath_SR_T01",
|
||||
"Schematic:SID_Shotgun_Tactical_Founders_VR_Ore_T01",
|
||||
"Hero:HID_Ninja_SlashBreath_R_T01",
|
||||
"Schematic:SID_Shotgun_Tactical_Founders_SR_Ore_T01",
|
||||
"Hero:HID_Ninja_010_VR_T01",
|
||||
"Schematic:SID_Shotgun_Tactical_Founders_R_Ore_T01",
|
||||
"Hero:HID_Ninja_010_SR_T01",
|
||||
"Schematic:SID_Shotgun_Tactical_C_Ore_T01",
|
||||
"Hero:HID_Ninja_009_VR_T01",
|
||||
"Schematic:SID_Shotgun_Standard_VR_Ore_T01",
|
||||
"Hero:HID_Ninja_009_SR_T01",
|
||||
"Schematic:SID_Shotgun_Standard_SR_Ore_T01",
|
||||
"Hero:HID_Ninja_009_R_T01",
|
||||
"Schematic:SID_Shotgun_Standard_UC_Ore_T01",
|
||||
"Hero:HID_Ninja_008_VR_T01",
|
||||
"Schematic:SID_Shotgun_Standard_R_Ore_T01",
|
||||
"Hero:HID_Ninja_008_SR_T01",
|
||||
"Schematic:SID_Shotgun_Standard_C_Ore_T01",
|
||||
"Hero:HID_Ninja_008_R_T01",
|
||||
"Schematic:SID_Shotgun_SemiAuto_VR_Ore_T01",
|
||||
"Hero:HID_Ninja_007_VR_T01",
|
||||
"Schematic:SID_Shotgun_SemiAuto_UC_Ore_T01",
|
||||
"Hero:HID_Ninja_007_UC_T01",
|
||||
"Schematic:SID_Shotgun_SemiAuto_SR_Ore_T01",
|
||||
"Hero:HID_Ninja_007_SR_T01",
|
||||
"Schematic:SID_Shotgun_SemiAuto_R_Ore_T01",
|
||||
"Hero:HID_Ninja_007_R_T01",
|
||||
"Schematic:SID_Shotgun_Minigun_SR_Ore_T01",
|
||||
"Hero:HID_Outlander_ZonePistolHW_SR_T01",
|
||||
"Schematic:SID_Shotgun_Longarm_VR_Ore_T01",
|
||||
"Hero:HID_Outlander_ZonePistol_VR_T01",
|
||||
"Schematic:SID_Shotgun_Longarm_SR_Ore_T01",
|
||||
"Hero:HID_Outlander_ZonePistol_SR_T01",
|
||||
"Schematic:SID_Shotgun_Heavy_SR_Ore_T01",
|
||||
"Hero:HID_Outlander_ZonePistol_R_T01",
|
||||
"Schematic:SID_Shotgun_Break_OU_VR_Ore_T01",
|
||||
"Hero:HID_Outlander_ZoneHarvest_VR_T01",
|
||||
"Schematic:SID_Shotgun_Break_OU_SR_Ore_T01",
|
||||
"Hero:HID_Outlander_ZoneHarvest_UC_T01",
|
||||
"Schematic:SID_Shotgun_Break_OU_UC_Ore_T01",
|
||||
"Hero:HID_Outlander_ZoneHarvest_SR_T01",
|
||||
"Schematic:SID_Shotgun_Break_OU_R_Ore_T01",
|
||||
"Hero:HID_Outlander_ZoneHarvest_R_T01",
|
||||
"Schematic:SID_Shotgun_Break_VR_Ore_T01",
|
||||
"Hero:HID_Outlander_ZoneFragment_SR_T01",
|
||||
"Schematic:SID_Shotgun_Break_SR_Ore_T01",
|
||||
"Hero:HID_Outlander_SphereFragment_VR_T01",
|
||||
"Schematic:SID_Shotgun_Break_UC_Ore_T01",
|
||||
"Hero:HID_Outlander_SphereFragment_SR_T01",
|
||||
"Schematic:SID_Shotgun_Break_R_Ore_T01",
|
||||
"Hero:HID_Outlander_SphereFragment_R_T01",
|
||||
"Schematic:SID_Shotgun_Break_C_Ore_T01",
|
||||
"Hero:HID_Outlander_Sony_R_T01",
|
||||
"Schematic:SID_Shotgun_Auto_VR_Ore_T01",
|
||||
"Hero:HID_Outlander_PunchPhase_VR_T01",
|
||||
"Schematic:SID_Shotgun_Auto_SR_Ore_T01",
|
||||
"Hero:HID_Outlander_PunchPhase_UC_T01",
|
||||
"Schematic:SID_Shotgun_Auto_Founders_VR_Ore_T01",
|
||||
"Hero:HID_Outlander_PunchPhase_SR_T01",
|
||||
"Schematic:SID_Shotgun_Auto_UC_Ore_T01",
|
||||
"Hero:HID_Outlander_PunchPhase_R_T01",
|
||||
"Schematic:SID_Shotgun_Auto_R_Ore_T01",
|
||||
"Hero:HID_Outlander_PunchDamage_VR_T01",
|
||||
"Schematic:SID_Pistol_Zapper_VR_Ore_T01",
|
||||
"Hero:HID_Outlander_PunchDamage_SR_T01",
|
||||
"Schematic:SID_Pistol_Zapper_SR_Ore_T01",
|
||||
"Hero:HID_Outlander_010_VR_T01",
|
||||
"Schematic:SID_Pistol_Space_VR_Ore_T01",
|
||||
"Hero:HID_Outlander_010_SR_T01",
|
||||
"Schematic:SID_Pistol_Space_SR_Ore_T01",
|
||||
"Hero:HID_Outlander_009_VR_T01",
|
||||
"Schematic:SID_Pistol_SixShooter_UC_Ore_T01",
|
||||
"Hero:HID_Outlander_009_SR_T01",
|
||||
"Schematic:SID_Pistol_SixShooter_R_Ore_T01",
|
||||
"Hero:HID_Outlander_009_R_T01",
|
||||
"Schematic:SID_Pistol_SixShooter_C_Ore_T01",
|
||||
"Hero:HID_Outlander_008_VR_T01",
|
||||
"Schematic:SID_Pistol_SemiAuto_VR_Ore_T01",
|
||||
"Hero:HID_Outlander_008_SR_T01",
|
||||
"Schematic:SID_Pistol_SemiAuto_SR_Ore_T01",
|
||||
"Hero:HID_Outlander_008_R_T01",
|
||||
"Schematic:SID_Pistol_SemiAuto_Founders_VR_Ore_T01",
|
||||
"Hero:HID_Outlander_008_FoundersM_SR_T01",
|
||||
"Schematic:SID_Pistol_SemiAuto_UC_Ore_T01",
|
||||
"Hero:HID_Outlander_008_FoundersF_SR_T01",
|
||||
"Schematic:SID_Pistol_SemiAuto_R_Ore_T01",
|
||||
"Hero:HID_Outlander_007_VR_T01",
|
||||
"Schematic:SID_Pistol_SemiAuto_C_Ore_T01",
|
||||
"Hero:HID_Outlander_007_UC_T01",
|
||||
"Schematic:SID_Pistol_Rocket_SR_Ore_T01",
|
||||
"Hero:HID_Outlander_007_SR_T01",
|
||||
"Schematic:SID_Pistol_Rapid_VR_Ore_T01",
|
||||
"Hero:HID_Outlander_007_R_T01",
|
||||
"Schematic:SID_Pistol_Rapid_SR_Ore_T01",
|
||||
"Defender:DID_DefenderSniper_Basic_VR_T01",
|
||||
"Schematic:SID_Pistol_Rapid_R_Ore_T01",
|
||||
"Defender:DID_DefenderSniper_Basic_UC_T01",
|
||||
"Schematic:SID_Pistol_Rapid_Founders_VR_Ore_T01",
|
||||
"Defender:DID_DefenderSniper_Basic_SR_T01",
|
||||
"Schematic:SID_Pistol_Hydraulic_VR_Ore_T01",
|
||||
"Defender:DID_DefenderSniper_Basic_R_T01",
|
||||
"Schematic:SID_Pistol_Hydraulic_SR_Ore_T01",
|
||||
"Defender:DID_DefenderSniper_Basic_C_T01",
|
||||
"Schematic:SID_Pistol_Handcannon_Semi_VR_Ore_T01",
|
||||
"Defender:DID_DefenderShotgun_Basic_VR_T01",
|
||||
"Schematic:SID_Pistol_Handcannon_Semi_SR_Ore_T01",
|
||||
"Defender:DID_DefenderShotgun_Basic_UC_T01",
|
||||
"Schematic:SID_Pistol_Handcannon_Semi_R_Ore_T01",
|
||||
"Defender:DID_DefenderShotgun_Basic_SR_T01",
|
||||
"Schematic:SID_Pistol_Handcannon_VR_Ore_T01",
|
||||
"Defender:DID_DefenderShotgun_Basic_R_T01",
|
||||
"Schematic:SID_Pistol_Handcannon_SR_Ore_T01",
|
||||
"Defender:DID_DefenderShotgun_Basic_C_T01",
|
||||
"Schematic:SID_Pistol_Handcannon_R_Ore_T01",
|
||||
"Defender:DID_DefenderPistol_Founders_VR_T01",
|
||||
"Schematic:SID_Pistol_Handcannon_Founders_VR_Ore_T01",
|
||||
"Defender:DID_DefenderPistol_Basic_VR_T01",
|
||||
"Schematic:SID_Pistol_Gatling_VR_Ore_T01",
|
||||
"Defender:DID_DefenderPistol_Basic_UC_T01",
|
||||
"Schematic:SID_Pistol_Gatling_SR_Ore_T01",
|
||||
"Defender:DID_DefenderPistol_Basic_SR_T01",
|
||||
"Schematic:SID_Pistol_FireCracker_VR_Ore_T01",
|
||||
"Defender:DID_DefenderPistol_Basic_R_T01",
|
||||
"Schematic:SID_Pistol_FireCracker_SR_Ore_T01",
|
||||
"Defender:DID_DefenderPistol_Basic_C_T01",
|
||||
"Schematic:SID_Pistol_FireCracker_R_Ore_T01",
|
||||
"Defender:DID_DefenderMelee_Basic_VR_T01",
|
||||
"Schematic:SID_Pistol_Dragon_VR_Ore_T01",
|
||||
"Defender:DID_DefenderMelee_Basic_UC_T01",
|
||||
"Schematic:SID_Pistol_Dragon_SR_Ore_T01",
|
||||
"Defender:DID_DefenderMelee_Basic_SR_T01",
|
||||
"Schematic:SID_Pistol_BoltRevolver_UC_Ore_T01",
|
||||
"Defender:DID_DefenderMelee_Basic_R_T01",
|
||||
"Schematic:SID_Pistol_BoltRevolver_R_Ore_T01",
|
||||
"Defender:DID_DefenderMelee_Basic_C_T01",
|
||||
"Schematic:SID_Pistol_BoltRevolver_C_Ore_T01",
|
||||
"Defender:DID_DefenderAssault_Founders_VR_T01",
|
||||
"Schematic:SID_Pistol_Bolt_VR_Ore_T01",
|
||||
"Defender:DID_DefenderAssault_Basic_VR_T01",
|
||||
"Schematic:SID_Pistol_Bolt_SR_Ore_T01",
|
||||
"Defender:DID_DefenderAssault_Basic_UC_T01",
|
||||
"Schematic:SID_Pistol_AutoHeavy_VR_Ore_T01",
|
||||
"Defender:DID_DefenderAssault_Basic_SR_T01",
|
||||
"Schematic:SID_Pistol_AutoHeavy_SR_Ore_T01",
|
||||
"Defender:DID_DefenderAssault_Basic_R_T01",
|
||||
"Schematic:SID_Pistol_AutoHeavy_Founders_VR_Ore_T01",
|
||||
"Defender:DID_DefenderAssault_Basic_C_T01",
|
||||
"Schematic:SID_Pistol_AutoHeavy_Founders_SR_Ore_T01",
|
||||
"Schematic:SID_Pistol_AutoHeavy_R_Ore_T01",
|
||||
"Schematic:SID_Pistol_AutoHeavy_Founders_R_Ore_T01",
|
||||
"Schematic:SID_Pistol_Auto_VR_Ore_T01",
|
||||
"Schematic:SID_Pistol_Auto_SR_Ore_T01",
|
||||
"Schematic:SID_Pistol_Auto_UC_Ore_T01",
|
||||
"Schematic:SID_Pistol_Auto_R_Ore_T01",
|
||||
"Schematic:SID_Pistol_Auto_C_Ore_T01",
|
||||
"Schematic:SID_Launcher_Rocket_VR_Ore_T01",
|
||||
"Schematic:SID_Launcher_Rocket_SR_Ore_T01",
|
||||
"Schematic:SID_Launcher_Rocket_R_Ore_T01",
|
||||
"Schematic:SID_Launcher_Pumpkin_RPG_SR_Ore_T01",
|
||||
"Schematic:SID_Launcher_Hydraulic_VR_Ore_T01",
|
||||
"Schematic:SID_Launcher_Hydraulic_SR_Ore_T01",
|
||||
"Schematic:SID_Launcher_Grenade_VR_Ore_T01",
|
||||
"Schematic:SID_Launcher_Grenade_SR_Ore_T01",
|
||||
"Schematic:SID_Launcher_Grenade_R_Ore_T01",
|
||||
"Schematic:SID_Assault_Surgical_VR_Ore_T01",
|
||||
"Schematic:SID_Assault_Surgical_SR_Ore_T01",
|
||||
"Schematic:SID_Assault_SingleShot_VR_Ore_T01",
|
||||
"Schematic:SID_Assault_SingleShot_SR_Ore_T01",
|
||||
"Schematic:SID_Assault_SingleShot_R_Ore_T01",
|
||||
"Schematic:SID_Assault_SemiAuto_VR_Ore_T01",
|
||||
"Schematic:SID_Assault_SemiAuto_SR_Ore_T01",
|
||||
"Schematic:SID_Assault_SemiAuto_Founders_VR_Ore_T01",
|
||||
"Schematic:SID_Assault_SemiAuto_UC_Ore_T01",
|
||||
"Schematic:SID_Assault_SemiAuto_R_Ore_T01",
|
||||
"Schematic:SID_Assault_SemiAuto_C_Ore_T01",
|
||||
"Schematic:SID_Assault_Raygun_VR_Ore_T01",
|
||||
"Schematic:SID_Assault_Raygun_SR_Ore_T01",
|
||||
"Schematic:SID_Assault_Surgical_Drum_Founders_R_Ore_T01",
|
||||
"Schematic:SID_Assault_LMG_VR_Ore_T01",
|
||||
"Schematic:SID_Assault_LMG_SR_Ore_T01",
|
||||
"Schematic:SID_Assault_LMG_R_Ore_T01",
|
||||
"Schematic:SID_Assault_LMG_Drum_Founders_VR_Ore_T01",
|
||||
"Schematic:SID_Assault_LMG_Drum_Founders_SR_Ore_T01",
|
||||
"Schematic:SID_Assault_Hydra_SR_Ore_T01",
|
||||
"Schematic:SID_Assault_Doubleshot_VR_Ore_T01",
|
||||
"Schematic:SID_Assault_Doubleshot_SR_Ore_T01",
|
||||
"Schematic:SID_Assault_Burst_VR_Ore_T01",
|
||||
"Schematic:SID_Assault_Burst_SR_Ore_T01",
|
||||
"Schematic:SID_Assault_Burst_UC_Ore_T01",
|
||||
"Schematic:SID_Assault_Burst_R_Ore_T01",
|
||||
"Schematic:SID_Assault_Burst_C_Ore_T01",
|
||||
"Schematic:SID_Assault_Auto_VR_Ore_T01",
|
||||
"Schematic:SID_Assault_Auto_SR_Ore_T01",
|
||||
"Schematic:SID_Assault_Auto_Halloween_SR_Ore_T01",
|
||||
"Schematic:SID_Assault_Auto_Founders_SR_Ore_T01",
|
||||
"Schematic:SID_Assault_Auto_UC_Ore_T01",
|
||||
"Schematic:SID_Assault_Auto_R_Ore_T01",
|
||||
"Schematic:SID_Assault_Auto_C_Ore_T01",
|
||||
"Schematic:SID_Piercing_Spear_Military_VR_Ore_T01",
|
||||
"Schematic:SID_Piercing_Spear_Military_SR_Ore_T01",
|
||||
"Schematic:SID_Piercing_Spear_Military_R_Ore_T01",
|
||||
"Schematic:SID_Piercing_Spear_C_Ore_T01",
|
||||
"Schematic:SID_Piercing_Spear_Laser_VR_Ore_T01",
|
||||
"Schematic:SID_Piercing_Spear_Laser_SR_Ore_T01",
|
||||
"Schematic:SID_Piercing_Spear_VR_Ore_T01",
|
||||
"Schematic:SID_Piercing_Spear_SR_Ore_T01",
|
||||
"Schematic:SID_Piercing_Spear_UC_Ore_T01",
|
||||
"Schematic:SID_Piercing_Spear_R_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Medium_C_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Medium_Laser_VR_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Medium_Laser_SR_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Medium_Laser_Founders_VR_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Medium_Laser_Founders_SR_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Medium_Laser_Founders_R_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Medium_VR_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Medium_SR_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Medium_UC_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Medium_R_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Light_VR_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Light_UC_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Light_SR_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Light_R_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Light_Founders_VR_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Light_C_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Hydraulic_VR_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Hydraulic_SR_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Heavy_VR_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Heavy_SR_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Heavy_R_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Heavy_Founders_VR_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Heavy_UC_Ore_T01",
|
||||
"Schematic:SID_Edged_Sword_Heavy_C_Ore_T01",
|
||||
"Schematic:SID_Edged_Scythe_C_Ore_T01",
|
||||
"Schematic:SID_Edged_Scythe_Laser_VR_Ore_T01",
|
||||
"Schematic:SID_Edged_Scythe_Laser_SR_Ore_T01",
|
||||
"Schematic:SID_Edged_Scythe_VR_Ore_T01",
|
||||
"Schematic:SID_Edged_Scythe_SR_Ore_T01",
|
||||
"Schematic:SID_Edged_Scythe_UC_Ore_T01",
|
||||
"Schematic:SID_Edged_Scythe_R_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Medium_C_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Medium_Laser_VR_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Medium_Laser_SR_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Medium_VR_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Medium_SR_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Medium_Founders_VR_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Medium_UC_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Medium_R_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Light_VR_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Light_SR_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Light_UC_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Light_R_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Light_C_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Heavy_C_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Heavy_VR_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Heavy_SR_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Heavy_UC_Ore_T01",
|
||||
"Schematic:SID_Edged_Axe_Heavy_R_Ore_T01",
|
||||
"Schematic:SID_Blunt_Medium_C_Ore_T01",
|
||||
"Schematic:SID_Blunt_Medium_VR_Ore_T01",
|
||||
"Schematic:SID_Blunt_Medium_SR_Ore_T01",
|
||||
"Schematic:SID_Blunt_Medium_UC_Ore_T01",
|
||||
"Schematic:SID_Blunt_Medium_R_Ore_T01",
|
||||
"Schematic:SID_Blunt_Light_VR_Ore_T01",
|
||||
"Schematic:SID_Blunt_Light_SR_Ore_T01",
|
||||
"Schematic:SID_Blunt_Tool_Light_UC_Ore_T01",
|
||||
"Schematic:SID_Blunt_Tool_Light_R_Ore_T01",
|
||||
"Schematic:SID_Blunt_Hammer_Rocket_VR_Ore_T01",
|
||||
"Schematic:SID_Blunt_Hammer_Rocket_SR_Ore_T01",
|
||||
"Schematic:SID_Blunt_Hammer_Heavy_C_Ore_T01",
|
||||
"Schematic:SID_Blunt_Hammer_Heavy_VR_Ore_T01",
|
||||
"Schematic:SID_Blunt_Hammer_Heavy_SR_Ore_T01",
|
||||
"Schematic:SID_Blunt_Hammer_Heavy_Founders_VR_Ore_T01",
|
||||
"Schematic:SID_Blunt_Hammer_Heavy_UC_Ore_T01",
|
||||
"Schematic:SID_Blunt_Hammer_Heavy_R_Ore_T01",
|
||||
"Schematic:SID_Blunt_Light_Rocketbat_VR_Ore_T01",
|
||||
"Schematic:SID_Blunt_Light_Rocketbat_SR_Ore_T01",
|
||||
"Schematic:SID_Blunt_Light_C_Ore_T01",
|
||||
"Schematic:SID_Blunt_Light_Bat_UC_Ore_T01",
|
||||
"Schematic:SID_Blunt_Light_Bat_R_Ore_T01",
|
||||
"Schematic:SID_Blunt_Club_Light_VR_Ore_T01",
|
||||
"Schematic:SID_Blunt_Club_Light_SR_Ore_T01",
|
||||
"Schematic:SID_Blunt_Light_UC_Ore_T01",
|
||||
"Schematic:SID_Blunt_Light_R_Ore_T01",
|
||||
"Schematic:SID_Blunt_Heavy_Paddle_UC_Ore_T01",
|
||||
"Schematic:SID_Blunt_Heavy_Paddle_R_Ore_T01",
|
||||
"Schematic:SID_Blunt_Heavy_Paddle_C_Ore_T01"
|
||||
]
|
||||
@@ -1,2 +0,0 @@
|
||||
lawinserver-win.exe
|
||||
pause
|
||||
BIN
gui/assets/matchmaker/fortmatchmaker.exe
Normal file
40
gui/assets/misc/udp.ps1
Normal file
@@ -0,0 +1,40 @@
|
||||
[cmdletbinding(
|
||||
DefaultParameterSetName = '',
|
||||
ConfirmImpact = 'low'
|
||||
)]
|
||||
Param(
|
||||
[Parameter(
|
||||
Mandatory = $True,
|
||||
Position = 0,
|
||||
ParameterSetName = '',
|
||||
ValueFromPipeline = $True)]
|
||||
[String]$computer,
|
||||
[Parameter(
|
||||
Position = 1,
|
||||
Mandatory = $True,
|
||||
ParameterSetName = '')]
|
||||
[Int16]$port
|
||||
)
|
||||
Process {
|
||||
$udpobject = new-Object system.Net.Sockets.Udpclient
|
||||
$udpobject.client.ReceiveTimeout = 2000
|
||||
$udpobject.Connect("$computer", $port)
|
||||
$a = new-object system.text.asciiencoding
|
||||
$byte = $a.GetBytes("$( Get-Date )")
|
||||
[void]$udpobject.Send($byte, $byte.length)
|
||||
$remoteendpoint = New-Object system.net.ipendpoint([system.net.ipaddress]::Any, 0)
|
||||
Try
|
||||
{
|
||||
$receivebytes = $udpobject.Receive([ref]$remoteendpoint)
|
||||
[string]$returndata = $a.GetString($receivebytes)
|
||||
If ($returndata)
|
||||
{
|
||||
exit 0
|
||||
}
|
||||
}
|
||||
Catch
|
||||
{
|
||||
$udpobject.close()
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
@@ -1,26 +1,28 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:app_links/app_links.dart';
|
||||
import 'package:bitsdojo_window/bitsdojo_window.dart';
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:flutter_acrylic/flutter_acrylic.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get_storage/get_storage.dart';
|
||||
import 'package:reboot_common/common.dart';
|
||||
import 'package:reboot_launcher/src/controller/matchmaker_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/update_controller.dart';
|
||||
import 'package:reboot_launcher/src/dialog/message.dart';
|
||||
import 'package:reboot_launcher/src/interactive/error.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/info_bar.dart';
|
||||
import 'package:reboot_launcher/src/dialog/implementation/error.dart';
|
||||
import 'package:reboot_launcher/src/controller/build_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/game_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/hosting_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/authenticator_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/settings_controller.dart';
|
||||
import 'package:reboot_launcher/src/interactive/server.dart';
|
||||
import 'package:reboot_launcher/src/dialog/implementation/server.dart';
|
||||
import 'package:reboot_launcher/src/page/home_page.dart';
|
||||
import 'package:reboot_launcher/src/util/watch.dart';
|
||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
import 'package:system_theme/system_theme.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
import 'package:url_protocol/url_protocol.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
|
||||
const double kDefaultWindowWidth = 1536;
|
||||
const double kDefaultWindowHeight = 1024;
|
||||
@@ -56,44 +58,57 @@ Future<Object?> _initUrlHandler() async {
|
||||
var appLinks = AppLinks();
|
||||
var initialUrl = await appLinks.getInitialAppLink();
|
||||
if(initialUrl != null) {
|
||||
|
||||
_joinServer(initialUrl);
|
||||
}
|
||||
|
||||
var gameController = Get.find<GameController>();
|
||||
var matchmakerController = Get.find<MatchmakerController>();
|
||||
appLinks.uriLinkStream.listen((uri) {
|
||||
var uuid = _parseCustomUrl(uri);
|
||||
var server = gameController.findServerById(uuid);
|
||||
if(server != null) {
|
||||
matchmakerController.joinServer(server);
|
||||
return;
|
||||
}
|
||||
|
||||
showMessage(
|
||||
"No server found: invalid or expired link",
|
||||
duration: snackbarLongDuration,
|
||||
severity: InfoBarSeverity.error
|
||||
);
|
||||
});
|
||||
appLinks.uriLinkStream.listen(_joinServer);
|
||||
return null;
|
||||
}catch(error) {
|
||||
return error;
|
||||
}
|
||||
}
|
||||
|
||||
void _joinServer(Uri uri) {
|
||||
var gameController = Get.find<GameController>();
|
||||
var matchmakerController = Get.find<MatchmakerController>();
|
||||
var uuid = _parseCustomUrl(uri);
|
||||
var server = gameController.findServerById(uuid);
|
||||
if(server != null) {
|
||||
matchmakerController.joinServer(server);
|
||||
}else {
|
||||
showInfoBar(
|
||||
"No server found: invalid or expired link",
|
||||
duration: snackbarLongDuration,
|
||||
severity: InfoBarSeverity.error
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
String _parseCustomUrl(Uri uri) => uri.host;
|
||||
|
||||
Future<Object?> _initWindow() async {
|
||||
try {
|
||||
await windowManager.ensureInitialized();
|
||||
await Window.initialize();
|
||||
var settingsController = Get.find<SettingsController>();
|
||||
var size = Size(settingsController.width, settingsController.height);
|
||||
await windowManager.setSize(size);
|
||||
if(settingsController.offsetX != null && settingsController.offsetY != null){
|
||||
await windowManager.setPosition(Offset(settingsController.offsetX!, settingsController.offsetY!));
|
||||
appWindow.size = size;
|
||||
var offsetX = settingsController.offsetX;
|
||||
var offsetY = settingsController.offsetY;
|
||||
if(offsetX != null && offsetY != null){
|
||||
appWindow.position = Offset(
|
||||
offsetX,
|
||||
offsetY
|
||||
);
|
||||
}else {
|
||||
await windowManager.setAlignment(Alignment.center);
|
||||
appWindow.alignment = Alignment.center;
|
||||
}
|
||||
|
||||
await Window.setEffect(
|
||||
effect: WindowEffect.acrylic,
|
||||
color: Colors.transparent,
|
||||
dark: true
|
||||
);
|
||||
return null;
|
||||
}catch(error) {
|
||||
return error;
|
||||
@@ -105,9 +120,11 @@ Object? _initObservers() {
|
||||
var gameController = Get.find<GameController>();
|
||||
var gameInstance = gameController.instance.value;
|
||||
gameInstance?.startObserver();
|
||||
gameController.saveInstance();
|
||||
var hostingController = Get.find<HostingController>();
|
||||
var hostingInstance = hostingController.instance.value;
|
||||
hostingInstance?.startObserver();
|
||||
hostingController.saveInstance();
|
||||
return null;
|
||||
}catch(error) {
|
||||
return error;
|
||||
@@ -133,7 +150,6 @@ Future<Object?> _initStorage() async {
|
||||
updateController.update();
|
||||
return null;
|
||||
}catch(error) {
|
||||
print(error);
|
||||
return error;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:reboot_common/common.dart';
|
||||
import 'package:reboot_launcher/src/controller/server_controller.dart';
|
||||
|
||||
@@ -21,4 +23,10 @@ class AuthenticatorController extends ServerController {
|
||||
|
||||
@override
|
||||
Future<bool> freePort() => freeAuthenticatorPort();
|
||||
|
||||
@override
|
||||
Future<int> startEmbeddedInternal() => startEmbeddedAuthenticator(detached.value);
|
||||
|
||||
@override
|
||||
Future<Uri?> pingServer(String host, String port) => pingAuthenticator(host, port);
|
||||
}
|
||||
@@ -1,10 +1,12 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get_storage/get_storage.dart';
|
||||
import 'package:reboot_common/common.dart';
|
||||
import 'package:supabase/src/supabase_stream_builder.dart';
|
||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
@@ -47,7 +49,7 @@ class GameController extends GetxController {
|
||||
servers = Rxn();
|
||||
supabase.from('hosts')
|
||||
.stream(primaryKey: ['id'])
|
||||
.map((event) => event.where((element) => element["ip"] != null).toSet())
|
||||
.map((event) => _parseValidServers(event))
|
||||
.listen((event) {
|
||||
if(servers.value == null) {
|
||||
servers.value = event;
|
||||
@@ -57,9 +59,17 @@ class GameController extends GetxController {
|
||||
});
|
||||
var serializedInstance = _storage.read("instance");
|
||||
instance = Rxn(serializedInstance != null ? GameInstance.fromJson(jsonDecode(serializedInstance)) : null);
|
||||
instance.listen((value) => _storage.write("instance", jsonEncode(value?.toJson())));
|
||||
instance.listen((_) => saveInstance());
|
||||
}
|
||||
|
||||
Set<Map<String, dynamic>> _parseValidServers(SupabaseStreamEvent event) => event.where((element) => _isValidServer(element)).toSet();
|
||||
|
||||
bool _isValidServer(Map<String, dynamic> element) =>
|
||||
(kDebugMode || element["id"] != uuid) && element["ip"] != null;
|
||||
|
||||
Future<void> saveInstance() =>
|
||||
_storage.write("instance", jsonEncode(instance.value?.toJson()));
|
||||
|
||||
void reset() {
|
||||
username.text = kDefaultPlayerName;
|
||||
password.text = "";
|
||||
@@ -116,7 +126,6 @@ class GameController extends GetxController {
|
||||
|
||||
Map<String, dynamic>? findServerById(String uuid) {
|
||||
try {
|
||||
print(uuid);
|
||||
return servers.value?.firstWhere((element) => element["id"] == uuid);
|
||||
} on StateError catch(_) {
|
||||
return null;
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get_storage/get_storage.dart';
|
||||
import 'package:reboot_common/common.dart';
|
||||
import 'package:reboot_launcher/src/util/watch.dart';
|
||||
|
||||
const String kDefaultServerName = "Reboot Game Server";
|
||||
const String kDefaultDescription = "Just another server";
|
||||
@@ -32,9 +33,11 @@ class HostingController extends GetxController {
|
||||
showPassword = RxBool(false);
|
||||
var serializedInstance = _storage.read("instance");
|
||||
instance = Rxn(serializedInstance != null ? GameInstance.fromJson(jsonDecode(serializedInstance)) : null);
|
||||
instance.listen((value) => _storage.write("instance", jsonEncode(value?.toJson())));
|
||||
instance.listen((_) => saveInstance());
|
||||
}
|
||||
|
||||
Future<void> saveInstance() => _storage.write("instance", jsonEncode(instance.value?.toJson()));
|
||||
|
||||
void reset() {
|
||||
name.text = kDefaultServerName;
|
||||
description.text = kDefaultDescription;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:reboot_common/common.dart';
|
||||
import 'package:reboot_launcher/src/controller/server_controller.dart';
|
||||
|
||||
@@ -7,7 +7,11 @@ class MatchmakerController extends ServerController {
|
||||
|
||||
MatchmakerController() : super() {
|
||||
gameServerAddress = TextEditingController(text: storage.read("game_server_address") ?? kDefaultMatchmakerHost);
|
||||
gameServerAddress.addListener(() => storage.write("game_server_address", gameServerAddress.text));
|
||||
writeMatchmakingIp(gameServerAddress.text);
|
||||
gameServerAddress.addListener(() {
|
||||
storage.write("game_server_address", gameServerAddress.text);
|
||||
writeMatchmakingIp(gameServerAddress.text);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -27,4 +31,10 @@ class MatchmakerController extends ServerController {
|
||||
|
||||
@override
|
||||
Future<bool> freePort() => freeMatchmakerPort();
|
||||
|
||||
@override
|
||||
Future<int> startEmbeddedInternal() => startEmbeddedMatchmaker(detached.value);
|
||||
|
||||
@override
|
||||
Future<Uri?> pingServer(String host, String port) => pingMatchmaker(host, port);
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get_storage/get_storage.dart';
|
||||
import 'package:reboot_common/common.dart';
|
||||
@@ -15,7 +15,7 @@ abstract class ServerController extends GetxController {
|
||||
late final Semaphore semaphore;
|
||||
late RxBool started;
|
||||
late RxBool detached;
|
||||
Process? embeddedServer;
|
||||
int? embeddedServerPid;
|
||||
HttpServer? localServer;
|
||||
HttpServer? remoteServer;
|
||||
|
||||
@@ -52,12 +52,17 @@ abstract class ServerController extends GetxController {
|
||||
|
||||
String get defaultPort;
|
||||
|
||||
Future<Uri?> pingServer(String host, String port);
|
||||
|
||||
Future<bool> get isPortFree;
|
||||
|
||||
Future<bool> get isPortTaken async => !(await isPortFree);
|
||||
|
||||
Future<bool> freePort();
|
||||
|
||||
@protected
|
||||
Future<int> startEmbeddedInternal();
|
||||
|
||||
void reset() async {
|
||||
type.value = ServerType.values.elementAt(0);
|
||||
for (var type in ServerType.values) {
|
||||
@@ -80,22 +85,31 @@ abstract class ServerController extends GetxController {
|
||||
storage.read("${type.value.name}_port") ?? defaultPort;
|
||||
|
||||
Stream<ServerResult> start() async* {
|
||||
if(started.value) {
|
||||
return;
|
||||
}
|
||||
|
||||
yield ServerResult(ServerResultType.starting);
|
||||
started.value = true;
|
||||
try {
|
||||
var host = this.host.text.trim();
|
||||
if (host.isEmpty) {
|
||||
yield ServerResult(ServerResultType.missingHostError);
|
||||
started.value = false;
|
||||
return;
|
||||
}
|
||||
|
||||
var port = this.port.text.trim();
|
||||
if (port.isEmpty) {
|
||||
yield ServerResult(ServerResultType.missingPortError);
|
||||
started.value = false;
|
||||
return;
|
||||
}
|
||||
|
||||
var portNumber = int.tryParse(port);
|
||||
if (portNumber == null) {
|
||||
yield ServerResult(ServerResultType.illegalPortError);
|
||||
started.value = false;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -104,18 +118,20 @@ abstract class ServerController extends GetxController {
|
||||
var result = await freePort();
|
||||
yield ServerResult(result ? ServerResultType.freePortSuccess : ServerResultType.freePortError);
|
||||
if(!result) {
|
||||
started.value = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
switch(type()){
|
||||
case ServerType.embedded:
|
||||
embeddedServer = await startEmbeddedAuthenticator(detached());
|
||||
embeddedServerPid = await startEmbeddedInternal();
|
||||
break;
|
||||
case ServerType.remote:
|
||||
yield ServerResult(ServerResultType.pingingRemote);
|
||||
var uriResult = await ping(host, port);
|
||||
var uriResult = await pingServer(host, port);
|
||||
if(uriResult == null) {
|
||||
yield ServerResult(ServerResultType.pingError);
|
||||
started.value = false;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -130,29 +146,35 @@ abstract class ServerController extends GetxController {
|
||||
}
|
||||
|
||||
yield ServerResult(ServerResultType.pingingLocal);
|
||||
var uriResult = await pingSelf(defaultPort);
|
||||
var uriResult = await pingServer(defaultHost, defaultPort);
|
||||
if(uriResult == null) {
|
||||
yield ServerResult(ServerResultType.pingError);
|
||||
started.value = false;
|
||||
return;
|
||||
}
|
||||
|
||||
yield ServerResult(ServerResultType.startSuccess);
|
||||
started.value = true;
|
||||
}catch(error, stackTrace) {
|
||||
yield ServerResult(
|
||||
ServerResultType.startError,
|
||||
error: error,
|
||||
stackTrace: stackTrace
|
||||
);
|
||||
started.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> stop() async {
|
||||
Stream<ServerResult> stop() async* {
|
||||
if(!started.value) {
|
||||
return;
|
||||
}
|
||||
|
||||
yield ServerResult(ServerResultType.stopping);
|
||||
started.value = false;
|
||||
try{
|
||||
switch(type()){
|
||||
case ServerType.embedded:
|
||||
freePort();
|
||||
Process.killPid(embeddedServerPid!, ProcessSignal.sigabrt);
|
||||
break;
|
||||
case ServerType.remote:
|
||||
await remoteServer?.close(force: true);
|
||||
@@ -163,17 +185,21 @@ abstract class ServerController extends GetxController {
|
||||
localServer = null;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}catch(_){
|
||||
yield ServerResult(ServerResultType.stopSuccess);
|
||||
}catch(error, stackTrace){
|
||||
yield ServerResult(
|
||||
ServerResultType.stopError,
|
||||
error: error,
|
||||
stackTrace: stackTrace
|
||||
);
|
||||
started.value = true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Stream<ServerResult> restart() async* {
|
||||
await resetWinNat();
|
||||
if(started()) {
|
||||
await stop();
|
||||
yield* stop();
|
||||
}
|
||||
|
||||
yield* start();
|
||||
@@ -181,7 +207,7 @@ abstract class ServerController extends GetxController {
|
||||
|
||||
Stream<ServerResult> toggle() async* {
|
||||
if(started()) {
|
||||
await stop();
|
||||
yield* stop();
|
||||
}else {
|
||||
yield* start();
|
||||
}
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get_storage/get_storage.dart';
|
||||
import 'package:reboot_launcher/main.dart';
|
||||
import 'package:reboot_common/common.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
|
||||
class SettingsController extends GetxController {
|
||||
static const String _kDefaultIp = "127.0.0.1";
|
||||
|
||||
late final GetStorage _storage;
|
||||
late final String originalDll;
|
||||
late final TextEditingController rebootDll;
|
||||
late final TextEditingController consoleDll;
|
||||
late final TextEditingController authDll;
|
||||
late final TextEditingController gameServerDll;
|
||||
late final TextEditingController unrealEngineConsoleDll;
|
||||
late final TextEditingController authenticatorDll;
|
||||
late final TextEditingController gameServerPort;
|
||||
late final RxBool firstRun;
|
||||
late double width;
|
||||
late double height;
|
||||
@@ -22,9 +20,11 @@ class SettingsController extends GetxController {
|
||||
|
||||
SettingsController() {
|
||||
_storage = GetStorage("reboot_settings");
|
||||
rebootDll = _createController("reboot", "reboot.dll");
|
||||
consoleDll = _createController("console", "console.dll");
|
||||
authDll = _createController("cobalt", "cobalt.dll");
|
||||
gameServerDll = _createController("game_server", "reboot.dll");
|
||||
unrealEngineConsoleDll = _createController("unreal_engine_console", "console.dll");
|
||||
authenticatorDll = _createController("authenticator", "cobalt.dll");
|
||||
gameServerPort = TextEditingController(text: _storage.read("game_server_port") ?? kDefaultGameServerPort);
|
||||
gameServerPort.addListener(() => _storage.write("game_server_port", gameServerPort.text));
|
||||
width = _storage.read("width") ?? kDefaultWindowWidth;
|
||||
height = _storage.read("height") ?? kDefaultWindowHeight;
|
||||
offsetX = _storage.read("offset_x");
|
||||
@@ -40,8 +40,7 @@ class SettingsController extends GetxController {
|
||||
return controller;
|
||||
}
|
||||
|
||||
void saveWindowSize() async {
|
||||
var size = await windowManager.getSize();
|
||||
void saveWindowSize(Size size) {
|
||||
_storage.write("width", size.width);
|
||||
_storage.write("height", size.height);
|
||||
}
|
||||
@@ -52,11 +51,10 @@ class SettingsController extends GetxController {
|
||||
}
|
||||
|
||||
void reset(){
|
||||
rebootDll.text = _controllerDefaultPath("reboot.dll");
|
||||
consoleDll.text = _controllerDefaultPath("console.dll");
|
||||
authDll.text = _controllerDefaultPath("cobalt.dll");
|
||||
gameServerDll.text = _controllerDefaultPath("reboot.dll");
|
||||
unrealEngineConsoleDll.text = _controllerDefaultPath("console.dll");
|
||||
authenticatorDll.text = _controllerDefaultPath("cobalt.dll");
|
||||
firstRun.value = true;
|
||||
writeMatchmakingIp(_kDefaultIp);
|
||||
}
|
||||
|
||||
String _controllerDefaultPath(String name) => "${assetsDirectory.path}\\dlls\\$name";
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get_storage/get_storage.dart';
|
||||
import 'package:reboot_common/common.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/info_bar.dart';
|
||||
|
||||
class UpdateController {
|
||||
late final GetStorage _storage;
|
||||
@@ -22,18 +23,44 @@ class UpdateController {
|
||||
status = Rx(UpdateStatus.waiting);
|
||||
}
|
||||
|
||||
Future<void> update() async {
|
||||
Future<void> update([bool force = false]) async {
|
||||
if(timer.value == UpdateTimer.never) {
|
||||
status.value = UpdateStatus.success;
|
||||
return;
|
||||
}
|
||||
|
||||
showInfoBar(
|
||||
"Downloading reboot dll...",
|
||||
loading: true,
|
||||
duration: null
|
||||
);
|
||||
try {
|
||||
timestamp.value = await downloadRebootDll(url.text, timestamp.value);
|
||||
timestamp.value = await downloadRebootDll(
|
||||
url.text,
|
||||
timestamp.value,
|
||||
hours: timer.value.hours,
|
||||
force: force
|
||||
);
|
||||
status.value = UpdateStatus.success;
|
||||
}catch(_) {
|
||||
showInfoBar(
|
||||
"The reboot dll was downloaded successfully",
|
||||
severity: InfoBarSeverity.success,
|
||||
duration: snackbarShortDuration
|
||||
);
|
||||
}catch(message) {
|
||||
var error = message.toString();
|
||||
error = error.contains(": ") ? error.substring(error.indexOf(": ") + 2) : error;
|
||||
error = error.toLowerCase();
|
||||
status.value = UpdateStatus.error;
|
||||
rethrow;
|
||||
showInfoBar(
|
||||
"An error occurred while downloading the reboot dll: $error",
|
||||
duration: snackbarLongDuration,
|
||||
severity: InfoBarSeverity.error,
|
||||
action: Button(
|
||||
onPressed: () => update(true),
|
||||
child: const Text("Retry"),
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,4 +71,19 @@ class UpdateController {
|
||||
status.value = UpdateStatus.waiting;
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
extension _UpdateTimerExtension on UpdateTimer {
|
||||
int get hours {
|
||||
switch(this) {
|
||||
case UpdateTimer.never:
|
||||
return -1;
|
||||
case UpdateTimer.hour:
|
||||
return 1;
|
||||
case UpdateTimer.day:
|
||||
return 24;
|
||||
case UpdateTimer.week:
|
||||
return 24 * 7;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,13 @@
|
||||
import 'package:clipboard/clipboard.dart';
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:fluent_ui/fluent_ui.dart' as fluent show showDialog;
|
||||
import 'package:reboot_launcher/src/dialog/message.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/info_bar.dart';
|
||||
import 'package:reboot_launcher/src/page/home_page.dart';
|
||||
|
||||
import 'dialog_button.dart';
|
||||
|
||||
Future<T?> showDialog<T extends Object?>({required WidgetBuilder builder}) => fluent.showDialog(
|
||||
context: pageKey.currentContext!,
|
||||
Future<T?> showAppDialog<T extends Object?>({required WidgetBuilder builder}) => fluent.showDialog(
|
||||
context: appKey.currentContext!,
|
||||
useRootNavigator: false,
|
||||
builder: builder
|
||||
);
|
||||
@@ -24,7 +24,7 @@ class GenericDialog extends AbstractDialog {
|
||||
final List<DialogButton> buttons;
|
||||
final EdgeInsets? padding;
|
||||
|
||||
const GenericDialog({super.key, required this.header, required this.buttons, this.padding});
|
||||
const GenericDialog({Key? key, required this.header, required this.buttons, this.padding}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => ContentDialog(
|
||||
@@ -40,7 +40,7 @@ class FormDialog extends AbstractDialog {
|
||||
final Widget content;
|
||||
final List<DialogButton> buttons;
|
||||
|
||||
const FormDialog({super.key, required this.content, required this.buttons});
|
||||
const FormDialog({Key? key, required this.content, required this.buttons}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -80,10 +80,10 @@ class InfoDialog extends AbstractDialog {
|
||||
final String text;
|
||||
final List<DialogButton>? buttons;
|
||||
|
||||
const InfoDialog({required this.text, this.buttons, super.key});
|
||||
const InfoDialog({required this.text, this.buttons, Key? key}) : super(key: key);
|
||||
|
||||
InfoDialog.ofOnly({required this.text, required DialogButton button, super.key})
|
||||
: buttons = [button];
|
||||
InfoDialog.ofOnly({required this.text, required DialogButton button, Key? key})
|
||||
: buttons = [button], super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -109,7 +109,7 @@ class ProgressDialog extends AbstractDialog {
|
||||
final String text;
|
||||
final Function()? onStop;
|
||||
|
||||
const ProgressDialog({required this.text, this.onStop, super.key});
|
||||
const ProgressDialog({required this.text, this.onStop, Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -143,14 +143,14 @@ class FutureBuilderDialog extends AbstractDialog {
|
||||
final bool closeAutomatically;
|
||||
|
||||
const FutureBuilderDialog(
|
||||
{super.key,
|
||||
{Key? key,
|
||||
required this.future,
|
||||
required this.loadingMessage,
|
||||
required this.successfulBody,
|
||||
required this.unsuccessfulBody,
|
||||
required this.errorMessageBuilder,
|
||||
this.onError,
|
||||
this.closeAutomatically = false});
|
||||
this.closeAutomatically = false}) : super(key: key);
|
||||
|
||||
static Container ofMessage(String message) {
|
||||
return Container(
|
||||
@@ -223,14 +223,14 @@ class ErrorDialog extends AbstractDialog {
|
||||
final StackTrace? stackTrace;
|
||||
final Function(Object) errorMessageBuilder;
|
||||
|
||||
const ErrorDialog({super.key, required this.exception, required this.errorMessageBuilder, this.stackTrace});
|
||||
const ErrorDialog({Key? key, required this.exception, required this.errorMessageBuilder, this.stackTrace}) : super(key: key);
|
||||
|
||||
static DialogButton createCopyErrorButton({required Object error, required StackTrace? stackTrace, required Function() onClick, ButtonType type = ButtonType.primary}) => DialogButton(
|
||||
text: "Copy error",
|
||||
type: type,
|
||||
onTap: () async {
|
||||
FlutterClipboard.controlC("An error occurred: $error\nStacktrace:\n $stackTrace");
|
||||
showMessage("Copied error to clipboard");
|
||||
showInfoBar("Copied error to clipboard");
|
||||
onClick();
|
||||
},
|
||||
);
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
|
||||
class DialogButton extends StatefulWidget {
|
||||
final String? text;
|
||||
80
gui/lib/src/dialog/abstract/info_bar.dart
Normal file
@@ -0,0 +1,80 @@
|
||||
import 'dart:collection';
|
||||
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
|
||||
import 'package:reboot_launcher/src/page/home_page.dart';
|
||||
import 'package:sync/semaphore.dart';
|
||||
|
||||
Semaphore _semaphore = Semaphore();
|
||||
HashMap<int, OverlayEntry?> _overlays = HashMap();
|
||||
|
||||
void restoreMessage(int lastIndex) {
|
||||
removeMessage(lastIndex);
|
||||
var overlay = _overlays[pageIndex.value];
|
||||
if(overlay == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Overlay.of(pageKey.currentContext!).insert(overlay);
|
||||
}
|
||||
|
||||
void showInfoBar(String text, {InfoBarSeverity severity = InfoBarSeverity.info, bool loading = false, Duration? duration = snackbarShortDuration, Widget? action}) {
|
||||
try {
|
||||
_semaphore.acquire();
|
||||
var index = pageIndex.value;
|
||||
removeMessage(index);
|
||||
var overlay = showSnackbar(
|
||||
pageKey.currentContext!,
|
||||
SizedBox(
|
||||
width: double.infinity,
|
||||
child: Mica(
|
||||
child: InfoBar(
|
||||
title: Text(text),
|
||||
isLong: action == null,
|
||||
isIconVisible: true,
|
||||
content: action ?? SizedBox(
|
||||
width: double.infinity,
|
||||
child: loading ? const ProgressBar() : const SizedBox()
|
||||
),
|
||||
severity: severity
|
||||
),
|
||||
),
|
||||
),
|
||||
margin: EdgeInsets.only(
|
||||
right: 12.0,
|
||||
left: 12.0,
|
||||
bottom: index == 0 || index == 1 || index == 3 || index == 4 ? 72.0 : 16.0
|
||||
),
|
||||
duration: duration
|
||||
);
|
||||
_overlays[index] = overlay;
|
||||
if(duration != null) {
|
||||
Future.delayed(duration).then((_) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
|
||||
if(_overlays[index] == overlay) {
|
||||
if(overlay.mounted) {
|
||||
overlay.remove();
|
||||
}
|
||||
|
||||
_overlays[index] = null;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}finally {
|
||||
_semaphore.release();
|
||||
}
|
||||
}
|
||||
|
||||
void removeMessage(int index) {
|
||||
try {
|
||||
var lastOverlay = _overlays[index];
|
||||
if(lastOverlay != null) {
|
||||
lastOverlay.remove();
|
||||
_overlays[index] = null;
|
||||
}
|
||||
}catch(_) {
|
||||
// Do not use .isMounted
|
||||
// This is intended behaviour
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
|
||||
import 'package:reboot_launcher/src/page/home_page.dart';
|
||||
import 'package:reboot_launcher/src/dialog/dialog.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/dialog.dart';
|
||||
|
||||
|
||||
String? lastError;
|
||||
@@ -25,7 +25,7 @@ void onError(Object? exception, StackTrace? stackTrace, bool framework) {
|
||||
Navigator.of(pageKey.currentContext!).pop(false);
|
||||
}
|
||||
|
||||
WidgetsBinding.instance.addPostFrameCallback((timeStamp) => showDialog(
|
||||
WidgetsBinding.instance.addPostFrameCallback((timeStamp) => showAppDialog(
|
||||
builder: (context) =>
|
||||
ErrorDialog(
|
||||
exception: exception,
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:reboot_common/common.dart';
|
||||
|
||||
import '../dialog/dialog.dart';
|
||||
import '../abstract/dialog.dart';
|
||||
|
||||
const String _unsupportedServerError = "The build you are currently using is not supported by Reboot. "
|
||||
"If you are unsure which version works best, use build 7.40. "
|
||||
@@ -11,16 +11,8 @@ const String _corruptedBuildError = "An unknown occurred while launching Fortnit
|
||||
"Download the build again from the launcher, not locally, or from a different source. "
|
||||
"Alternatively, something could have gone wrong in the launcher. ";
|
||||
|
||||
Future<void> showBrokenError() async {
|
||||
showDialog(
|
||||
builder: (context) => const InfoDialog(
|
||||
text: "The backend server is not working correctly"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> showMissingDllError(String name) async {
|
||||
showDialog(
|
||||
showAppDialog(
|
||||
builder: (context) => InfoDialog(
|
||||
text: "$name dll is not a valid dll, fix it in the settings tab"
|
||||
)
|
||||
@@ -28,7 +20,7 @@ Future<void> showMissingDllError(String name) async {
|
||||
}
|
||||
|
||||
Future<void> showTokenErrorFixable() async {
|
||||
showDialog(
|
||||
showAppDialog(
|
||||
builder: (context) => const InfoDialog(
|
||||
text: "A token error occurred. "
|
||||
"The backend server has been automatically restarted to fix the issue. "
|
||||
@@ -37,17 +29,8 @@ Future<void> showTokenErrorFixable() async {
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> showTokenErrorCouldNotFix() async {
|
||||
showDialog(
|
||||
builder: (context) => const InfoDialog(
|
||||
text: "A token error occurred. "
|
||||
"The game couldn't be recovered, open an issue on Discord."
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> showTokenErrorUnfixable() async {
|
||||
showDialog(
|
||||
showAppDialog(
|
||||
builder: (context) => const InfoDialog(
|
||||
text: "A token error occurred. "
|
||||
"This issue cannot be resolved automatically as the server isn't embedded."
|
||||
@@ -59,7 +42,7 @@ Future<void> showTokenErrorUnfixable() async {
|
||||
|
||||
Future<void> showCorruptedBuildError(bool server, [Object? error, StackTrace? stackTrace]) async {
|
||||
if(error == null) {
|
||||
showDialog(
|
||||
showAppDialog(
|
||||
builder: (context) => InfoDialog(
|
||||
text: server ? _unsupportedServerError : _corruptedBuildError
|
||||
)
|
||||
@@ -67,7 +50,7 @@ Future<void> showCorruptedBuildError(bool server, [Object? error, StackTrace? st
|
||||
return;
|
||||
}
|
||||
|
||||
showDialog(
|
||||
showAppDialog(
|
||||
builder: (context) => ErrorDialog(
|
||||
exception: error,
|
||||
stackTrace: stackTrace,
|
||||
@@ -77,7 +60,7 @@ Future<void> showCorruptedBuildError(bool server, [Object? error, StackTrace? st
|
||||
}
|
||||
|
||||
Future<void> showMissingBuildError(FortniteVersion version) async {
|
||||
showDialog(
|
||||
showAppDialog(
|
||||
builder: (context) => InfoDialog(
|
||||
text: "${version.location.path} no longer contains a Fortnite executable. "
|
||||
"This probably means that you deleted it or move it somewhere else."
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:flutter/material.dart' show Icons;
|
||||
import 'package:get/get.dart';
|
||||
import 'package:reboot_launcher/src/controller/game_controller.dart';
|
||||
import 'package:reboot_launcher/src/dialog/dialog.dart';
|
||||
import 'package:reboot_launcher/src/dialog/dialog_button.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/dialog.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/dialog_button.dart';
|
||||
|
||||
final GameController _gameController = Get.find<GameController>();
|
||||
|
||||
@@ -12,7 +12,7 @@ Future<bool> showProfileForm(BuildContext context) async{
|
||||
var oldUsername = _gameController.username.text;
|
||||
var showPasswordTrailing = RxBool(oldUsername.isNotEmpty);
|
||||
var oldPassword = _gameController.password.text;
|
||||
var result = await showDialog<bool?>(
|
||||
var result = await showAppDialog<bool?>(
|
||||
builder: (context) => Obx(() => FormDialog(
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
@@ -1,19 +1,20 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:clipboard/clipboard.dart';
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:flutter/material.dart' show Icons;
|
||||
import 'package:get/get_rx/src/rx_types/rx_types.dart';
|
||||
import 'package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart';
|
||||
import 'package:reboot_launcher/src/controller/matchmaker_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/server_controller.dart';
|
||||
import 'package:reboot_launcher/src/dialog/dialog.dart';
|
||||
import 'package:reboot_launcher/src/dialog/dialog_button.dart';
|
||||
import 'package:reboot_launcher/src/dialog/message.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/dialog.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/dialog_button.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/info_bar.dart';
|
||||
|
||||
import 'package:reboot_common/common.dart';
|
||||
import 'package:reboot_launcher/src/page/home_page.dart';
|
||||
import 'package:reboot_launcher/src/util/cryptography.dart';
|
||||
import 'package:reboot_launcher/src/util/matchmaker.dart';
|
||||
|
||||
extension ServerControllerDialog on ServerController {
|
||||
Future<bool> restartInteractive() async {
|
||||
@@ -26,63 +27,21 @@ extension ServerControllerDialog on ServerController {
|
||||
return await _handleStream(stream, showSuccessMessage);
|
||||
}
|
||||
|
||||
|
||||
Future<bool> _handleStream(Stream<ServerResult> stream, bool showSuccessMessage) async {
|
||||
var completer = Completer<bool>();
|
||||
stream.listen((event) {
|
||||
switch (event.type) {
|
||||
case ServerResultType.missingHostError:
|
||||
showMessage(
|
||||
"Cannot launch game: missing hostname in $controllerName configuration",
|
||||
severity: InfoBarSeverity.error
|
||||
);
|
||||
break;
|
||||
case ServerResultType.missingPortError:
|
||||
showMessage(
|
||||
"Cannot launch game: missing port in $controllerName configuration",
|
||||
severity: InfoBarSeverity.error
|
||||
);
|
||||
break;
|
||||
case ServerResultType.illegalPortError:
|
||||
showMessage(
|
||||
"Cannot launch game: invalid port in $controllerName configuration",
|
||||
severity: InfoBarSeverity.error
|
||||
);
|
||||
break;
|
||||
case ServerResultType.freeingPort:
|
||||
case ServerResultType.freePortSuccess:
|
||||
case ServerResultType.freePortError:
|
||||
showMessage(
|
||||
"Message",
|
||||
loading: event.type == ServerResultType.freeingPort,
|
||||
severity: event.type == ServerResultType.freeingPort ? InfoBarSeverity.info : event.type == ServerResultType.freePortSuccess ? InfoBarSeverity.success : InfoBarSeverity.error
|
||||
);
|
||||
break;
|
||||
case ServerResultType.pingingRemote:
|
||||
showMessage(
|
||||
"Pinging remote server...",
|
||||
case ServerResultType.starting:
|
||||
showInfoBar(
|
||||
"Starting the $controllerName...",
|
||||
severity: InfoBarSeverity.info,
|
||||
loading: true,
|
||||
duration: const Duration(seconds: 10)
|
||||
);
|
||||
break;
|
||||
case ServerResultType.pingingLocal:
|
||||
showMessage(
|
||||
"Pinging ${type().name} server...",
|
||||
severity: InfoBarSeverity.info,
|
||||
loading: true,
|
||||
duration: const Duration(seconds: 10)
|
||||
);
|
||||
break;
|
||||
case ServerResultType.pingError:
|
||||
showMessage(
|
||||
"Cannot ping ${type().name} server",
|
||||
severity: InfoBarSeverity.error
|
||||
duration: null
|
||||
);
|
||||
break;
|
||||
case ServerResultType.startSuccess:
|
||||
if(showSuccessMessage) {
|
||||
showMessage(
|
||||
showInfoBar(
|
||||
"The $controllerName was started successfully",
|
||||
severity: InfoBarSeverity.success
|
||||
);
|
||||
@@ -90,8 +49,98 @@ extension ServerControllerDialog on ServerController {
|
||||
completer.complete(true);
|
||||
break;
|
||||
case ServerResultType.startError:
|
||||
showMessage(
|
||||
showInfoBar(
|
||||
"An error occurred while starting the $controllerName: ${event.error ?? "unknown error"}",
|
||||
severity: InfoBarSeverity.error,
|
||||
duration: snackbarLongDuration
|
||||
);
|
||||
break;
|
||||
case ServerResultType.stopping:
|
||||
showInfoBar(
|
||||
"Stopping the $controllerName...",
|
||||
severity: InfoBarSeverity.info,
|
||||
loading: true,
|
||||
duration: null
|
||||
);
|
||||
break;
|
||||
case ServerResultType.stopSuccess:
|
||||
if(showSuccessMessage) {
|
||||
showInfoBar(
|
||||
"The $controllerName was stopped successfully",
|
||||
severity: InfoBarSeverity.success
|
||||
);
|
||||
}
|
||||
completer.complete(true);
|
||||
break;
|
||||
case ServerResultType.stopError:
|
||||
showInfoBar(
|
||||
"An error occurred while stopping the $controllerName: ${event.error ?? "unknown error"}",
|
||||
severity: InfoBarSeverity.error,
|
||||
duration: snackbarLongDuration
|
||||
);
|
||||
break;
|
||||
case ServerResultType.missingHostError:
|
||||
showInfoBar(
|
||||
"Missing hostname in $controllerName configuration",
|
||||
severity: InfoBarSeverity.error
|
||||
);
|
||||
break;
|
||||
case ServerResultType.missingPortError:
|
||||
showInfoBar(
|
||||
"Missing port in $controllerName configuration",
|
||||
severity: InfoBarSeverity.error
|
||||
);
|
||||
break;
|
||||
case ServerResultType.illegalPortError:
|
||||
showInfoBar(
|
||||
"Invalid port in $controllerName configuration",
|
||||
severity: InfoBarSeverity.error
|
||||
);
|
||||
break;
|
||||
case ServerResultType.freeingPort:
|
||||
showInfoBar(
|
||||
"Freeing port $defaultPort...",
|
||||
loading: true,
|
||||
duration: null
|
||||
);
|
||||
break;
|
||||
case ServerResultType.freePortSuccess:
|
||||
showInfoBar(
|
||||
"Port $defaultPort was freed successfully",
|
||||
severity: InfoBarSeverity.success,
|
||||
duration: snackbarShortDuration
|
||||
);
|
||||
break;
|
||||
case ServerResultType.freePortError:
|
||||
showInfoBar(
|
||||
"An error occurred while freeing port $defaultPort: ${event.error ?? "unknown error"}",
|
||||
severity: InfoBarSeverity.error,
|
||||
duration: snackbarLongDuration
|
||||
);
|
||||
break;
|
||||
case ServerResultType.pingingRemote:
|
||||
if(started.value) {
|
||||
showInfoBar(
|
||||
"Pinging the remote $controllerName...",
|
||||
severity: InfoBarSeverity.info,
|
||||
loading: true,
|
||||
duration: null
|
||||
);
|
||||
}
|
||||
break;
|
||||
case ServerResultType.pingingLocal:
|
||||
if(started.value) {
|
||||
showInfoBar(
|
||||
"Pinging the ${type().name} $controllerName...",
|
||||
severity: InfoBarSeverity.info,
|
||||
loading: true,
|
||||
duration: null
|
||||
);
|
||||
}
|
||||
break;
|
||||
case ServerResultType.pingError:
|
||||
showInfoBar(
|
||||
"Cannot ping ${type().name} $controllerName",
|
||||
severity: InfoBarSeverity.error
|
||||
);
|
||||
break;
|
||||
@@ -104,15 +153,9 @@ extension ServerControllerDialog on ServerController {
|
||||
|
||||
var result = await completer.future;
|
||||
if(result && type() == ServerType.embedded) {
|
||||
watchProcess(embeddedServer!.pid).then((value) {
|
||||
watchProcess(embeddedServerPid!).then((value) {
|
||||
if(started()) {
|
||||
pageIndex.value = 3;
|
||||
started.value = false;
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) => showMessage(
|
||||
"The $controllerName was terminated unexpectedly: if this wasn't intentional, file a bug report",
|
||||
severity: InfoBarSeverity.warning,
|
||||
duration: snackbarLongDuration
|
||||
));
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -129,6 +172,11 @@ extension MatchmakerControllerExtension on MatchmakerController {
|
||||
var author = entry["author"];
|
||||
var encryptedIp = entry["ip"];
|
||||
if(!hasPassword) {
|
||||
var valid = await _isServerValid(encryptedIp);
|
||||
if(!valid) {
|
||||
return;
|
||||
}
|
||||
|
||||
_onSuccess(embedded, encryptedIp, author);
|
||||
return;
|
||||
}
|
||||
@@ -139,7 +187,7 @@ extension MatchmakerControllerExtension on MatchmakerController {
|
||||
}
|
||||
|
||||
if(!checkPassword(confirmPassword, hashedPassword)) {
|
||||
showMessage(
|
||||
showInfoBar(
|
||||
"Wrong password: please try again",
|
||||
duration: snackbarLongDuration,
|
||||
severity: InfoBarSeverity.error
|
||||
@@ -148,15 +196,33 @@ extension MatchmakerControllerExtension on MatchmakerController {
|
||||
}
|
||||
|
||||
var decryptedIp = aes256Decrypt(encryptedIp, confirmPassword);
|
||||
var valid = await _isServerValid(decryptedIp);
|
||||
if(!valid) {
|
||||
return;
|
||||
}
|
||||
|
||||
_onSuccess(embedded, decryptedIp, author);
|
||||
}
|
||||
|
||||
Future<bool> _isServerValid(String address) async {
|
||||
var result = await pingGameServer(address);
|
||||
if(result) {
|
||||
return true;
|
||||
}
|
||||
|
||||
showInfoBar(
|
||||
"This server isn't online right now: please try again later",
|
||||
duration: snackbarLongDuration,
|
||||
severity: InfoBarSeverity.error
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
Future<String?> _askForPassword() async {
|
||||
var confirmPasswordController = TextEditingController();
|
||||
var showPassword = RxBool(false);
|
||||
var showPasswordTrailing = RxBool(false);
|
||||
return await showDialog<String?>(
|
||||
return await showAppDialog<String?>(
|
||||
builder: (context) => FormDialog(
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
@@ -213,7 +279,7 @@ extension MatchmakerControllerExtension on MatchmakerController {
|
||||
}else {
|
||||
FlutterClipboard.controlC(decryptedIp);
|
||||
}
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) => showMessage(
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) => showInfoBar(
|
||||
embedded ? "You joined $author's server successfully!" : "Copied IP to the clipboard",
|
||||
duration: snackbarLongDuration,
|
||||
severity: InfoBarSeverity.success
|
||||
@@ -1,38 +0,0 @@
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
|
||||
import 'package:reboot_launcher/src/page/home_page.dart';
|
||||
import 'package:sync/semaphore.dart';
|
||||
|
||||
Semaphore _semaphore = Semaphore();
|
||||
OverlayEntry? _lastOverlay;
|
||||
|
||||
void showMessage(String text, {InfoBarSeverity severity = InfoBarSeverity.info, bool loading = false, Duration? duration = snackbarShortDuration}) {
|
||||
try {
|
||||
_semaphore.acquire();
|
||||
if(_lastOverlay?.mounted == true) {
|
||||
_lastOverlay?.remove();
|
||||
}
|
||||
var pageIndexValue = pageIndex.value;
|
||||
_lastOverlay = showSnackbar(
|
||||
pageKey.currentContext!,
|
||||
InfoBar(
|
||||
title: Text(text),
|
||||
isLong: true,
|
||||
isIconVisible: true,
|
||||
content: SizedBox(
|
||||
width: double.infinity,
|
||||
child: loading ? const ProgressBar() : const SizedBox()
|
||||
),
|
||||
severity: severity
|
||||
),
|
||||
margin: EdgeInsets.only(
|
||||
left: 330.0,
|
||||
right: 16.0,
|
||||
bottom: pageIndexValue == 0 || pageIndexValue == 1 || pageIndexValue == 3 || pageIndexValue == 4 ? 72 : 16
|
||||
),
|
||||
duration: duration
|
||||
);
|
||||
}finally {
|
||||
_semaphore.release();
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:reboot_common/common.dart';
|
||||
import 'package:reboot_launcher/src/controller/authenticator_controller.dart';
|
||||
@@ -8,8 +9,8 @@ import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
import 'package:reboot_launcher/src/widget/common/setting_tile.dart';
|
||||
|
||||
import 'package:reboot_launcher/src/dialog/dialog.dart';
|
||||
import 'package:reboot_launcher/src/dialog/dialog_button.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/dialog.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/dialog_button.dart';
|
||||
|
||||
class AuthenticatorPage extends StatefulWidget {
|
||||
const AuthenticatorPage({Key? key}) : super(key: key);
|
||||
@@ -46,8 +47,7 @@ class _AuthenticatorPageState extends State<AuthenticatorPage> with AutomaticKee
|
||||
isChild: true,
|
||||
content: TextFormBox(
|
||||
placeholder: "Host",
|
||||
controller: _authenticatorController.host,
|
||||
readOnly: !_isRemote
|
||||
controller: _authenticatorController.host
|
||||
)
|
||||
),
|
||||
if(_authenticatorController.type.value != ServerType.embedded)
|
||||
@@ -58,7 +58,10 @@ class _AuthenticatorPageState extends State<AuthenticatorPage> with AutomaticKee
|
||||
content: TextFormBox(
|
||||
placeholder: "Port",
|
||||
controller: _authenticatorController.port,
|
||||
readOnly: !_isRemote
|
||||
keyboardType: TextInputType.number,
|
||||
inputFormatters: [
|
||||
FilteringTextInputFormatter.digitsOnly
|
||||
]
|
||||
)
|
||||
),
|
||||
if(_authenticatorController.type.value == ServerType.embedded)
|
||||
@@ -92,7 +95,7 @@ class _AuthenticatorPageState extends State<AuthenticatorPage> with AutomaticKee
|
||||
title: "Reset authenticator",
|
||||
subtitle: "Resets the authenticator's settings to their default values",
|
||||
content: Button(
|
||||
onPressed: () => showDialog(
|
||||
onPressed: () => showAppDialog(
|
||||
builder: (context) => InfoDialog(
|
||||
text: "Do you want to reset all the setting in this tab to their default values? This action is irreversible",
|
||||
buttons: [
|
||||
|
||||
@@ -7,7 +7,7 @@ import 'package:reboot_common/common.dart';
|
||||
|
||||
import 'package:reboot_launcher/src/controller/game_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/matchmaker_controller.dart';
|
||||
import 'package:reboot_launcher/src/interactive/server.dart';
|
||||
import 'package:reboot_launcher/src/dialog/implementation/server.dart';
|
||||
import 'package:reboot_launcher/src/widget/common/setting_tile.dart';
|
||||
import 'package:skeletons/skeletons.dart';
|
||||
|
||||
|
||||
@@ -1,23 +1,24 @@
|
||||
import 'dart:collection';
|
||||
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:bitsdojo_window/bitsdojo_window.dart';
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:flutter/material.dart' show MaterialPage;
|
||||
import 'package:get/get.dart';
|
||||
import 'package:reboot_launcher/src/page/browse_page.dart';
|
||||
import 'package:reboot_launcher/src/page/authenticator_page.dart';
|
||||
import 'package:reboot_launcher/src/page/matchmaker_page.dart';
|
||||
import 'package:reboot_launcher/src/page/play_page.dart';
|
||||
import 'package:reboot_launcher/src/page/settings_page.dart';
|
||||
import 'package:reboot_launcher/src/util/os.dart';
|
||||
import 'package:reboot_launcher/src/widget/home/pane.dart';
|
||||
import 'package:reboot_launcher/src/widget/home/profile.dart';
|
||||
|
||||
import 'package:reboot_launcher/src/controller/settings_controller.dart';
|
||||
import 'package:reboot_launcher/src/widget/os/border.dart';
|
||||
import 'package:reboot_launcher/src/widget/os/title_bar.dart';
|
||||
import 'package:reboot_launcher/src/page/hosting_page.dart';
|
||||
import 'package:reboot_launcher/src/page/info_page.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
import 'hosting_page.dart';
|
||||
import 'info_page.dart';
|
||||
|
||||
GlobalKey appKey = GlobalKey();
|
||||
const int pagesLength = 7;
|
||||
final RxInt pageIndex = RxInt(0);
|
||||
final Queue<int> _pagesStack = Queue();
|
||||
@@ -39,14 +40,12 @@ class _HomePageState extends State<HomePage> with WindowListener, AutomaticKeepA
|
||||
final FocusNode _searchFocusNode = FocusNode();
|
||||
final TextEditingController _searchController = TextEditingController();
|
||||
final RxBool _focused = RxBool(true);
|
||||
final RxBool _fullScreen = RxBool(false);
|
||||
|
||||
@override
|
||||
bool get wantKeepAlive => true;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
windowManager.show();
|
||||
windowManager.addListener(this);
|
||||
_searchController.addListener(_onSearch);
|
||||
super.initState();
|
||||
@@ -58,22 +57,12 @@ class _HomePageState extends State<HomePage> with WindowListener, AutomaticKeepA
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
windowManager.removeListener(this);
|
||||
_searchFocusNode.dispose();
|
||||
_searchController.dispose();
|
||||
windowManager.removeListener(this);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
void onWindowEnterFullScreen() {
|
||||
_fullScreen.value = true;
|
||||
}
|
||||
|
||||
@override
|
||||
void onWindowLeaveFullScreen() {
|
||||
_fullScreen.value = false;
|
||||
}
|
||||
|
||||
@override
|
||||
void onWindowFocus() {
|
||||
_focused.value = true;
|
||||
@@ -86,63 +75,63 @@ class _HomePageState extends State<HomePage> with WindowListener, AutomaticKeepA
|
||||
|
||||
@override
|
||||
void onWindowResized() {
|
||||
_settingsController.saveWindowSize();
|
||||
super.onWindowResized();
|
||||
_settingsController.saveWindowSize(appWindow.size);
|
||||
}
|
||||
|
||||
@override
|
||||
void onWindowMoved() {
|
||||
windowManager.getPosition()
|
||||
.then((value) => _settingsController.saveWindowOffset(value));
|
||||
super.onWindowMoved();
|
||||
_settingsController.saveWindowOffset(appWindow.position);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
super.build(context);
|
||||
return Stack(
|
||||
children: [
|
||||
Obx(() => NavigationPaneTheme(
|
||||
data: NavigationPaneThemeData(
|
||||
backgroundColor: FluentTheme.of(context).micaBackgroundColor.withOpacity(0.9),
|
||||
),
|
||||
child: NavigationView(
|
||||
paneBodyBuilder: (pane, body) => Padding(
|
||||
padding: const EdgeInsets.all(_kDefaultPadding),
|
||||
child: SizedBox(
|
||||
key: pageKey,
|
||||
child: body
|
||||
)
|
||||
),
|
||||
appBar: NavigationAppBar(
|
||||
height: 32,
|
||||
title: _draggableArea,
|
||||
actions: WindowTitleBar(focused: _focused()),
|
||||
leading: _backButton,
|
||||
automaticallyImplyLeading: false,
|
||||
),
|
||||
pane: NavigationPane(
|
||||
selected: pageIndex.value,
|
||||
onChanged: (index) {
|
||||
_pagesStack.add(pageIndex.value);
|
||||
pageIndex.value = index;
|
||||
},
|
||||
menuButton: const SizedBox(),
|
||||
displayMode: PaneDisplayMode.open,
|
||||
items: _items,
|
||||
header: const ProfileWidget(),
|
||||
autoSuggestBox: _autoSuggestBox,
|
||||
autoSuggestBoxReplacement: const Icon(FluentIcons.search),
|
||||
),
|
||||
contentShape: const RoundedRectangleBorder(),
|
||||
onOpenSearch: () => _searchFocusNode.requestFocus(),
|
||||
transitionBuilder: (child, animation) => child
|
||||
)
|
||||
)),
|
||||
if (isWin11)
|
||||
Obx(() => !_fullScreen.value && _focused.value ? const WindowBorder() : const SizedBox())
|
||||
]
|
||||
);
|
||||
windowManager.show();
|
||||
return Obx(() => NavigationPaneTheme(
|
||||
data: NavigationPaneThemeData(
|
||||
backgroundColor: FluentTheme.of(context).micaBackgroundColor.withOpacity(0.93),
|
||||
),
|
||||
child: NavigationView(
|
||||
paneBodyBuilder: (pane, body) => Navigator(
|
||||
onPopPage: (page, data) => false,
|
||||
pages: [
|
||||
MaterialPage(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(_kDefaultPadding),
|
||||
child: SizedBox(
|
||||
key: pageKey,
|
||||
child: body
|
||||
)
|
||||
)
|
||||
)
|
||||
],
|
||||
),
|
||||
appBar: NavigationAppBar(
|
||||
height: 32,
|
||||
title: _draggableArea,
|
||||
actions: WindowTitleBar(focused: _focused()),
|
||||
leading: _backButton,
|
||||
automaticallyImplyLeading: false,
|
||||
),
|
||||
pane: NavigationPane(
|
||||
key: appKey,
|
||||
selected: pageIndex.value,
|
||||
onChanged: (index) {
|
||||
_pagesStack.add(pageIndex.value);
|
||||
pageIndex.value = index;
|
||||
},
|
||||
menuButton: const SizedBox(),
|
||||
displayMode: PaneDisplayMode.open,
|
||||
items: _items,
|
||||
header: const ProfileWidget(),
|
||||
autoSuggestBox: _autoSuggestBox,
|
||||
autoSuggestBoxReplacement: const Icon(FluentIcons.search),
|
||||
),
|
||||
contentShape: const RoundedRectangleBorder(),
|
||||
onOpenSearch: () => _searchFocusNode.requestFocus(),
|
||||
transitionBuilder: (child, animation) => child
|
||||
)
|
||||
));
|
||||
}
|
||||
|
||||
Widget get _backButton => Obx(() {
|
||||
@@ -159,9 +148,9 @@ class _HomePageState extends State<HomePage> with WindowListener, AutomaticKeepA
|
||||
});
|
||||
|
||||
GestureDetector get _draggableArea => GestureDetector(
|
||||
onDoubleTap: () async => await windowManager.isMaximized() ? await windowManager.restore() : await windowManager.maximize(),
|
||||
onHorizontalDragStart: (event) => windowManager.startDragging(),
|
||||
onVerticalDragStart: (event) => windowManager.startDragging()
|
||||
onDoubleTap: appWindow.maximizeOrRestore,
|
||||
onHorizontalDragStart: (_) => appWindow.startDragging(),
|
||||
onVerticalDragStart: (_) => appWindow.startDragging()
|
||||
);
|
||||
|
||||
Widget get _autoSuggestBox => Padding(
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import 'package:clipboard/clipboard.dart';
|
||||
import 'package:dart_ipify/dart_ipify.dart';
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:reboot_launcher/main.dart';
|
||||
import 'package:reboot_launcher/src/controller/game_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/hosting_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/update_controller.dart';
|
||||
import 'package:reboot_launcher/src/dialog/message.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/info_bar.dart';
|
||||
import 'package:reboot_launcher/src/widget/common/setting_tile.dart';
|
||||
import 'package:flutter/material.dart' show Icons;
|
||||
|
||||
@@ -38,17 +38,6 @@ class _HostingPageState extends State<HostingPage> with AutomaticKeepAliveClient
|
||||
Expanded(
|
||||
child: ListView(
|
||||
children: [
|
||||
Obx(() => Column(
|
||||
children: _updateController.status.value != UpdateStatus.error ? [] : [
|
||||
SizedBox(
|
||||
width: double.infinity,
|
||||
child: _updateError
|
||||
),
|
||||
const SizedBox(
|
||||
height: 8.0
|
||||
),
|
||||
],
|
||||
)),
|
||||
SettingTile(
|
||||
title: "Game Server",
|
||||
subtitle: "Provide basic information about your server",
|
||||
@@ -150,7 +139,7 @@ class _HostingPageState extends State<HostingPage> with AutomaticKeepAliveClient
|
||||
content: Button(
|
||||
onPressed: () async {
|
||||
FlutterClipboard.controlC("$kCustomUrlSchema://${_gameController.uuid}");
|
||||
showMessage(
|
||||
showInfoBar(
|
||||
"Copied your link to the clipboard",
|
||||
severity: InfoBarSeverity.success
|
||||
);
|
||||
@@ -165,19 +154,19 @@ class _HostingPageState extends State<HostingPage> with AutomaticKeepAliveClient
|
||||
content: Button(
|
||||
onPressed: () async {
|
||||
try {
|
||||
showMessage(
|
||||
showInfoBar(
|
||||
"Obtaining your public IP...",
|
||||
loading: true,
|
||||
duration: null
|
||||
);
|
||||
var ip = await Ipify.ipv4();
|
||||
FlutterClipboard.controlC(ip);
|
||||
showMessage(
|
||||
showInfoBar(
|
||||
"Copied your IP to the clipboard",
|
||||
severity: InfoBarSeverity.success
|
||||
);
|
||||
}catch(error) {
|
||||
showMessage(
|
||||
showInfoBar(
|
||||
"An error occurred while obtaining your public IP: $error",
|
||||
severity: InfoBarSeverity.error,
|
||||
duration: snackbarLongDuration
|
||||
@@ -201,15 +190,4 @@ class _HostingPageState extends State<HostingPage> with AutomaticKeepAliveClient
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Widget get _updateError => MouseRegion(
|
||||
cursor: SystemMouseCursors.click,
|
||||
child: GestureDetector(
|
||||
onTap: _updateController.update,
|
||||
child: const InfoBar(
|
||||
title: Text("The reboot dll couldn't be downloaded: click here to try again"),
|
||||
severity: InfoBarSeverity.info
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:reboot_launcher/src/widget/common/setting_tile.dart';
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:reboot_common/common.dart';
|
||||
import 'package:reboot_launcher/src/controller/matchmaker_controller.dart';
|
||||
@@ -7,8 +8,8 @@ import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
import 'package:reboot_launcher/src/widget/common/setting_tile.dart';
|
||||
|
||||
import 'package:reboot_launcher/src/dialog/dialog.dart';
|
||||
import 'package:reboot_launcher/src/dialog/dialog_button.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/dialog.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/dialog_button.dart';
|
||||
import 'package:reboot_launcher/src/widget/server/start_button.dart';
|
||||
|
||||
class MatchmakerPage extends StatefulWidget {
|
||||
@@ -46,8 +47,7 @@ class _MatchmakerPageState extends State<MatchmakerPage> with AutomaticKeepAlive
|
||||
isChild: true,
|
||||
content: TextFormBox(
|
||||
placeholder: "Host",
|
||||
controller: _matchmakerController.host,
|
||||
readOnly: _matchmakerController.type.value != ServerType.remote
|
||||
controller: _matchmakerController.host
|
||||
)
|
||||
),
|
||||
if(_matchmakerController.type.value != ServerType.embedded)
|
||||
@@ -58,7 +58,10 @@ class _MatchmakerPageState extends State<MatchmakerPage> with AutomaticKeepAlive
|
||||
content: TextFormBox(
|
||||
placeholder: "Port",
|
||||
controller: _matchmakerController.port,
|
||||
readOnly: _matchmakerController.type.value != ServerType.remote
|
||||
keyboardType: TextInputType.number,
|
||||
inputFormatters: [
|
||||
FilteringTextInputFormatter.digitsOnly
|
||||
]
|
||||
)
|
||||
),
|
||||
if(_matchmakerController.type.value == ServerType.embedded)
|
||||
@@ -91,7 +94,7 @@ class _MatchmakerPageState extends State<MatchmakerPage> with AutomaticKeepAlive
|
||||
title: "Installation directory",
|
||||
subtitle: "Opens the folder where the embedded matchmaker is located",
|
||||
content: Button(
|
||||
onPressed: () => launchUrl(authenticatorDirectory.uri),
|
||||
onPressed: () => launchUrl(matchmakerDirectory.uri),
|
||||
child: const Text("Show Files")
|
||||
)
|
||||
),
|
||||
@@ -102,7 +105,7 @@ class _MatchmakerPageState extends State<MatchmakerPage> with AutomaticKeepAlive
|
||||
title: "Reset matchmaker",
|
||||
subtitle: "Resets the authenticator's settings to their default values",
|
||||
content: Button(
|
||||
onPressed: () => showDialog(
|
||||
onPressed: () => showAppDialog(
|
||||
builder: (context) => InfoDialog(
|
||||
text: "Do you want to reset all the setting in this tab to their default values? This action is irreversible",
|
||||
buttons: [
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:reboot_common/common.dart';
|
||||
import 'package:reboot_launcher/src/controller/hosting_controller.dart';
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:reboot_common/common.dart';
|
||||
import 'package:reboot_launcher/src/controller/build_controller.dart';
|
||||
@@ -7,12 +8,12 @@ import 'package:reboot_launcher/src/controller/hosting_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/authenticator_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/settings_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/update_controller.dart';
|
||||
import 'package:reboot_launcher/src/dialog/dialog_button.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/dialog_button.dart';
|
||||
import 'package:reboot_launcher/src/widget/common/file_selector.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
import 'package:reboot_launcher/src/util/checks.dart';
|
||||
import 'package:reboot_launcher/src/dialog/dialog.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/dialog.dart';
|
||||
import 'package:reboot_launcher/src/widget/common/setting_tile.dart';
|
||||
|
||||
class SettingsPage extends StatefulWidget {
|
||||
@@ -45,12 +46,12 @@ class _SettingsPageState extends State<SettingsPage> with AutomaticKeepAliveClie
|
||||
_createFileSetting(
|
||||
title: "Unreal engine console",
|
||||
description: "This file is injected to unlock the Unreal Engine Console",
|
||||
controller: _settingsController.consoleDll
|
||||
controller: _settingsController.unrealEngineConsoleDll
|
||||
),
|
||||
_createFileSetting(
|
||||
title: "Authentication patcher",
|
||||
description: "This file is injected to redirect all HTTP requests to the launcher's authenticator",
|
||||
controller: _settingsController.authDll
|
||||
controller: _settingsController.authenticatorDll
|
||||
),
|
||||
SettingTile(
|
||||
title: "Custom launch arguments",
|
||||
@@ -67,13 +68,26 @@ class _SettingsPageState extends State<SettingsPage> with AutomaticKeepAliveClie
|
||||
height: 8.0,
|
||||
),
|
||||
SettingTile(
|
||||
title: "Server settings",
|
||||
title: "Game server settings",
|
||||
subtitle: "This section contains settings related to the game server implementation",
|
||||
expandedContent: [
|
||||
_createFileSetting(
|
||||
title: "Game server",
|
||||
title: "Implementation",
|
||||
description: "This file is injected to create a game server & host matches",
|
||||
controller: _settingsController.rebootDll
|
||||
controller: _settingsController.gameServerDll
|
||||
),
|
||||
SettingTile(
|
||||
title: "Port",
|
||||
subtitle: "The port used by the game server dll",
|
||||
content: TextFormBox(
|
||||
placeholder: "Port",
|
||||
controller: _settingsController.gameServerPort,
|
||||
keyboardType: TextInputType.number,
|
||||
inputFormatters: [
|
||||
FilteringTextInputFormatter.digitsOnly
|
||||
]
|
||||
),
|
||||
isChild: true
|
||||
),
|
||||
SettingTile(
|
||||
title: "Update mirror",
|
||||
@@ -92,7 +106,10 @@ class _SettingsPageState extends State<SettingsPage> with AutomaticKeepAliveClie
|
||||
leading: Text(_updateController.timer.value.text),
|
||||
items: UpdateTimer.values.map((entry) => MenuFlyoutItem(
|
||||
text: Text(entry.text),
|
||||
onPressed: () => _updateController.timer.value = entry
|
||||
onPressed: () {
|
||||
_updateController.timer.value = entry;
|
||||
_updateController.update(true);
|
||||
}
|
||||
)).toList()
|
||||
)),
|
||||
isChild: true
|
||||
@@ -129,7 +146,7 @@ class _SettingsPageState extends State<SettingsPage> with AutomaticKeepAliveClie
|
||||
subtitle: "Resets the launcher's settings to their default values",
|
||||
isChild: true,
|
||||
content: Button(
|
||||
onPressed: () => showDialog(
|
||||
onPressed: () => showAppDialog(
|
||||
builder: (context) => InfoDialog(
|
||||
text: "Do you want to reset all the launcher's settings to their default values? This action is irreversible",
|
||||
buttons: [
|
||||
|
||||
34
gui/lib/src/util/matchmaker.dart
Normal file
@@ -0,0 +1,34 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:reboot_common/common.dart';
|
||||
|
||||
final File _script = File("${assetsDirectory.path}\\misc\\udp.ps1");
|
||||
|
||||
Future<bool> pingGameServer(String address, {Duration? timeout}) async {
|
||||
var start = DateTime.now();
|
||||
var firstTime = true;
|
||||
while (firstTime || (timeout != null && DateTime.now().millisecondsSinceEpoch - start.millisecondsSinceEpoch < timeout.inMilliseconds)) {
|
||||
var split = address.split(":");
|
||||
var hostname = split[0];
|
||||
var port = split.length > 1 ? split[1] : kDefaultGameServerPort;
|
||||
var result = await Process.run(
|
||||
"powershell",
|
||||
[
|
||||
_script.path,
|
||||
hostname,
|
||||
port
|
||||
]
|
||||
);
|
||||
if (result.exitCode == 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(firstTime) {
|
||||
firstTime = false;
|
||||
}else {
|
||||
await Future.delayed(const Duration(seconds: 2));
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -9,11 +9,12 @@ import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
final SupabaseClient _supabase = Supabase.instance.client;
|
||||
final GameController _gameController = Get.find<GameController>();
|
||||
final HostingController _hostingController = Get.find<HostingController>();
|
||||
final File _executable = File("${assetsDirectory.path}\\misc\\watch.exe");
|
||||
|
||||
extension GameInstanceWatcher on GameInstance {
|
||||
Future<void> startObserver() async {
|
||||
if(watchPid != null) {
|
||||
Process.killPid(watchPid!, ProcessSignal.sigabrt);
|
||||
if(observerPid != null) {
|
||||
Process.killPid(observerPid!, ProcessSignal.sigabrt);
|
||||
}
|
||||
|
||||
watchProcess(gamePid).then((value) async {
|
||||
@@ -24,9 +25,15 @@ extension GameInstanceWatcher on GameInstance {
|
||||
_onGameStopped();
|
||||
});
|
||||
|
||||
watchPid = startBackgroundProcess(
|
||||
'${assetsDirectory.path}\\misc\\watch.exe',
|
||||
[_gameController.uuid, gamePid.toString(), launcherPid?.toString() ?? "-1", eacPid?.toString() ?? "-1", hosting.toString()]
|
||||
observerPid = await startBackgroundProcess(
|
||||
executable: _executable,
|
||||
args: [
|
||||
_gameController.uuid,
|
||||
gamePid.toString(),
|
||||
launcherPid?.toString() ?? "-1",
|
||||
eacPid?.toString() ?? "-1",
|
||||
hosting.toString()
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:reboot_launcher/src/dialog/message.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/info_bar.dart';
|
||||
import 'package:reboot_launcher/src/util/picker.dart';
|
||||
|
||||
class FileSelector extends StatefulWidget {
|
||||
@@ -56,7 +56,7 @@ class _FileSelectorState extends State<FileSelector> {
|
||||
|
||||
void _onPressed() {
|
||||
if(_selecting){
|
||||
showMessage("Folder selector is already opened");
|
||||
showInfoBar("Folder selector is already opened");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import 'package:auto_animated_list/auto_animated_list.dart';
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:skeletons/skeletons.dart';
|
||||
|
||||
class SettingTile extends StatefulWidget {
|
||||
static const double kDefaultContentWidth = 200.0;
|
||||
static const double kDefaultSpacing = 8.0;
|
||||
static const double kDefaultHeaderHeight = 72;
|
||||
|
||||
final String? title;
|
||||
@@ -15,7 +14,6 @@ class SettingTile extends StatefulWidget {
|
||||
final double? contentWidth;
|
||||
final List<Widget>? expandedContent;
|
||||
final double expandedContentHeaderHeight;
|
||||
final double expandedContentSpacing;
|
||||
final bool isChild;
|
||||
|
||||
const SettingTile(
|
||||
@@ -27,7 +25,6 @@ class SettingTile extends StatefulWidget {
|
||||
this.content,
|
||||
this.contentWidth = kDefaultContentWidth,
|
||||
this.expandedContentHeaderHeight = kDefaultHeaderHeight,
|
||||
this.expandedContentSpacing = kDefaultSpacing,
|
||||
this.expandedContent,
|
||||
this.isChild = false})
|
||||
: assert(
|
||||
@@ -63,7 +60,7 @@ class _SettingTileState extends State<SettingTile> {
|
||||
|
||||
Widget get _expandedContent {
|
||||
var expandedContents = widget.expandedContent!;
|
||||
var separatedContents = List.generate(expandedContents.length * 2, (index) => index % 2 == 0 ? expandedContents[index ~/ 2] : SizedBox(height: widget.expandedContentSpacing));
|
||||
var separatedContents = List.generate(expandedContents.length, (index) => expandedContents[index]);
|
||||
return AutoAnimatedList<Widget>(
|
||||
scrollDirection: Axis.vertical,
|
||||
shrinkWrap: true,
|
||||
@@ -103,7 +100,7 @@ class _SettingTileState extends State<SettingTile> {
|
||||
Widget get _title => Text(
|
||||
widget.title!,
|
||||
style:
|
||||
widget.titleStyle ?? FluentTheme.of(context).typography.subtitle,
|
||||
widget.titleStyle ?? FluentTheme.of(context).typography.subtitle
|
||||
);
|
||||
|
||||
Widget get _skeletonTitle => const SkeletonLine(
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:dart_ipify/dart_ipify.dart';
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
import 'package:process_run/shell.dart';
|
||||
@@ -10,35 +10,37 @@ import 'package:reboot_common/common.dart';
|
||||
import 'package:reboot_launcher/src/controller/game_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/hosting_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/authenticator_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/matchmaker_controller.dart';
|
||||
import 'package:reboot_launcher/src/controller/settings_controller.dart';
|
||||
import 'package:reboot_launcher/src/interactive/game.dart';
|
||||
import 'package:reboot_launcher/src/interactive/server.dart';
|
||||
import 'package:reboot_launcher/src/dialog/message.dart';
|
||||
import 'package:reboot_launcher/src/dialog/implementation/game.dart';
|
||||
import 'package:reboot_launcher/src/dialog/implementation/server.dart';
|
||||
import 'package:reboot_launcher/src/dialog/abstract/info_bar.dart';
|
||||
import 'package:reboot_launcher/src/util/cryptography.dart';
|
||||
import 'package:reboot_launcher/src/util/matchmaker.dart';
|
||||
import 'package:reboot_launcher/src/util/watch.dart';
|
||||
import 'package:supabase_flutter/supabase_flutter.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
class LaunchButton extends StatefulWidget {
|
||||
final bool host;
|
||||
final String? startLabel;
|
||||
final String? stopLabel;
|
||||
final bool Function()? onTap;
|
||||
|
||||
const LaunchButton({Key? key, required this.host, this.startLabel, this.stopLabel, this.onTap}) : super(key: key);
|
||||
const LaunchButton({Key? key, required this.host, this.startLabel, this.stopLabel}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<LaunchButton> createState() => _LaunchButtonState();
|
||||
}
|
||||
|
||||
class _LaunchButtonState extends State<LaunchButton> {
|
||||
final SupabaseClient _supabase = Supabase.instance.client;
|
||||
final GameController _gameController = Get.find<GameController>();
|
||||
final HostingController _hostingController = Get.find<HostingController>();
|
||||
final AuthenticatorController _authenticatorController = Get.find<AuthenticatorController>();
|
||||
final MatchmakerController _matchmakerController = Get.find<MatchmakerController>();
|
||||
final SettingsController _settingsController = Get.find<SettingsController>();
|
||||
final File _logFile = File("${logsDirectory.path}\\game.log");
|
||||
Completer<bool> _completer = Completer();
|
||||
bool _fail = false;
|
||||
Future? _executor;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => Align(
|
||||
@@ -48,11 +50,11 @@ class _LaunchButtonState extends State<LaunchButton> {
|
||||
child: Obx(() => SizedBox(
|
||||
height: 48,
|
||||
child: Button(
|
||||
onPressed: _start,
|
||||
child: Align(
|
||||
alignment: Alignment.center,
|
||||
child: Text(_hasStarted ? _stopMessage : _startMessage)
|
||||
),
|
||||
onPressed: () => _executor = _start()
|
||||
)
|
||||
),
|
||||
)),
|
||||
),
|
||||
@@ -67,18 +69,16 @@ class _LaunchButtonState extends State<LaunchButton> {
|
||||
String get _stopMessage => widget.stopLabel ?? (widget.host ? "Stop hosting" : "Close fortnite");
|
||||
|
||||
Future<void> _start() async {
|
||||
if(widget.onTap != null && !widget.onTap!()){
|
||||
return;
|
||||
}
|
||||
|
||||
if (_hasStarted) {
|
||||
_onStop(widget.host);
|
||||
_onStop(widget.host, false);
|
||||
removeMessage(widget.host ? 1 : 0);
|
||||
return;
|
||||
}
|
||||
|
||||
_fail = false;
|
||||
if(_gameController.selectedVersion == null){
|
||||
showMessage("Select a Fortnite version before continuing");
|
||||
_onStop(widget.host);
|
||||
showInfoBar("Select a Fortnite version before continuing");
|
||||
_onStop(widget.host, false);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -94,24 +94,33 @@ class _LaunchButtonState extends State<LaunchButton> {
|
||||
var executable = await version.executable;
|
||||
if(executable == null){
|
||||
showMissingBuildError(version);
|
||||
_onStop(widget.host);
|
||||
_onStop(widget.host, false);
|
||||
return;
|
||||
}
|
||||
|
||||
var result = _authenticatorController.started() || await _authenticatorController.toggleInteractive(false);
|
||||
if(!result){
|
||||
_onStop(widget.host);
|
||||
var authenticatorResult = _authenticatorController.started() || await _authenticatorController.toggleInteractive(false);
|
||||
if(!authenticatorResult){
|
||||
_onStop(widget.host, false);
|
||||
return;
|
||||
}
|
||||
|
||||
var matchmakerResult = _matchmakerController.started() || await _matchmakerController.toggleInteractive(false);
|
||||
if(!matchmakerResult){
|
||||
_onStop(widget.host, false);
|
||||
return;
|
||||
}
|
||||
|
||||
var automaticallyStartedServer = await _startMatchMakingServer();
|
||||
await _startGameProcesses(version, widget.host, automaticallyStartedServer);
|
||||
if(widget.host){
|
||||
await _showServerLaunchingWarning();
|
||||
showInfoBar(
|
||||
"Launching the headless server...",
|
||||
loading: true,
|
||||
duration: null
|
||||
);
|
||||
}
|
||||
} catch (exception, stacktrace) {
|
||||
_closeLaunchingWidget(false);
|
||||
_onStop(widget.host);
|
||||
_onStop(widget.host, false);
|
||||
showCorruptedBuildError(widget.host, exception, stacktrace);
|
||||
}
|
||||
}
|
||||
@@ -121,19 +130,16 @@ class _LaunchButtonState extends State<LaunchButton> {
|
||||
var launcherProcess = await _createLauncherProcess(version);
|
||||
var eacProcess = await _createEacProcess(version);
|
||||
var executable = await version.executable;
|
||||
if(executable == null){
|
||||
showMissingBuildError(version);
|
||||
_onStop(widget.host);
|
||||
return;
|
||||
}
|
||||
|
||||
var gameProcess = await _createGameProcess(executable.path, host);
|
||||
var gameProcess = await _createGameProcess(executable!.path, host);
|
||||
var instance = GameInstance(gameProcess, launcherProcess, eacProcess, host, linkedHosting);
|
||||
instance.startObserver();
|
||||
if(host){
|
||||
_removeHostEntry();
|
||||
_hostingController.instance.value = instance;
|
||||
_hostingController.saveInstance();
|
||||
}else{
|
||||
_gameController.instance.value = instance;
|
||||
_gameController.saveInstance();
|
||||
}
|
||||
_injectOrShowError(Injectable.sslBypass, host);
|
||||
}
|
||||
@@ -219,62 +225,89 @@ class _LaunchButtonState extends State<LaunchButton> {
|
||||
return;
|
||||
}
|
||||
|
||||
_closeLaunchingWidget(false);
|
||||
_onStop(widget.host);
|
||||
_onStop(widget.host, false);
|
||||
}
|
||||
|
||||
void _closeLaunchingWidget(bool success) {
|
||||
showMessage(
|
||||
success ? "The headless server was started successfully" : "An error occurred while starting the headless server",
|
||||
severity: success ? InfoBarSeverity.success : InfoBarSeverity.error
|
||||
);
|
||||
if(!_completer.isCompleted) {
|
||||
_completer.complete(success);
|
||||
void _closeLaunchingWidget(bool host, bool message) async {
|
||||
if(!message) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _showServerLaunchingWarning() async {
|
||||
showMessage(
|
||||
"Launching headless server...",
|
||||
if(_fail) {
|
||||
showInfoBar(
|
||||
"An error occurred while starting the headless server",
|
||||
severity: InfoBarSeverity.error
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
showInfoBar(
|
||||
"Waiting for the game server to become available...",
|
||||
loading: true,
|
||||
duration: null
|
||||
);
|
||||
var result = await _completer.future;
|
||||
if(!result){
|
||||
_onStop(true);
|
||||
var gameServerPort = _settingsController.gameServerPort.text;
|
||||
var localPingResult = await pingGameServer(
|
||||
"localhost:$gameServerPort",
|
||||
timeout: const Duration(minutes: 1)
|
||||
);
|
||||
if(!localPingResult) {
|
||||
showInfoBar(
|
||||
"The headless server was started successfully, but the game server isn't available",
|
||||
severity: InfoBarSeverity.error,
|
||||
duration: snackbarLongDuration
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if(!_hostingController.discoverable.value){
|
||||
showInfoBar(
|
||||
"Checking if the game server is accessible...",
|
||||
loading: true,
|
||||
duration: null
|
||||
);
|
||||
var publicIp = await Ipify.ipv4();
|
||||
var result = await pingGameServer("$publicIp:$gameServerPort");
|
||||
if(!result) {
|
||||
showInfoBar(
|
||||
"The game server was started successfully, but nobody outside your network can join",
|
||||
severity: InfoBarSeverity.warning,
|
||||
duration: null,
|
||||
action: Button(
|
||||
onPressed: () => launchUrl(Uri.parse("https://github.com/Auties00/reboot_launcher/documentation/PortForwarding.md")),
|
||||
child: Text("Open port $gameServerPort")
|
||||
)
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
var password = _hostingController.password.text;
|
||||
var hasPassword = password.isNotEmpty;
|
||||
var ip = await Ipify.ipv4();
|
||||
if(hasPassword) {
|
||||
ip = aes256Encrypt(ip, password);
|
||||
}
|
||||
if(_hostingController.discoverable.value){
|
||||
var password = _hostingController.password.text;
|
||||
var hasPassword = password.isNotEmpty;
|
||||
var ip = await Ipify.ipv4();
|
||||
if(hasPassword) {
|
||||
ip = aes256Encrypt(ip, password);
|
||||
}
|
||||
|
||||
var supabase = Supabase.instance.client;
|
||||
await supabase.from('hosts').insert({
|
||||
'id': _gameController.uuid,
|
||||
'name': _hostingController.name.text,
|
||||
'description': _hostingController.description.text,
|
||||
'author': _gameController.username.text,
|
||||
'ip': ip,
|
||||
'version': _gameController.selectedVersion?.name,
|
||||
'password': hasPassword ? hashPassword(password) : null,
|
||||
'timestamp': DateTime.now().toIso8601String(),
|
||||
'discoverable': _hostingController.discoverable.value
|
||||
});
|
||||
var supabase = Supabase.instance.client;
|
||||
await supabase.from('hosts').insert({
|
||||
'id': _gameController.uuid,
|
||||
'name': _hostingController.name.text,
|
||||
'description': _hostingController.description.text,
|
||||
'author': _gameController.username.text,
|
||||
'ip': ip,
|
||||
'version': _gameController.selectedVersion?.name,
|
||||
'password': hasPassword ? hashPassword(password) : null,
|
||||
'timestamp': DateTime.now().toIso8601String(),
|
||||
'discoverable': _hostingController.discoverable.value
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void _onGameOutput(String line, bool host) {
|
||||
_logFile.createSync(recursive: true);
|
||||
_logFile.writeAsString("$line\n", mode: FileMode.append);
|
||||
if (line.contains(shutdownLine)) {
|
||||
_onStop(host);
|
||||
_onStop(host, false);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -285,7 +318,7 @@ class _LaunchButtonState extends State<LaunchButton> {
|
||||
|
||||
_fail = true;
|
||||
showCorruptedBuildError(host);
|
||||
_onStop(host);
|
||||
_onStop(host, false);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -294,8 +327,6 @@ class _LaunchButtonState extends State<LaunchButton> {
|
||||
return;
|
||||
}
|
||||
|
||||
_fail = true;
|
||||
_closeLaunchingWidget(false);
|
||||
_showTokenError(host);
|
||||
return;
|
||||
}
|
||||
@@ -305,7 +336,7 @@ class _LaunchButtonState extends State<LaunchButton> {
|
||||
_injectOrShowError(Injectable.console, host);
|
||||
}else {
|
||||
_injectOrShowError(Injectable.reboot, host)
|
||||
.then((value) => _closeLaunchingWidget(true));
|
||||
.then((value) => _closeLaunchingWidget(host, true));
|
||||
}
|
||||
|
||||
_injectOrShowError(Injectable.memoryFix, host);
|
||||
@@ -315,6 +346,7 @@ class _LaunchButtonState extends State<LaunchButton> {
|
||||
}
|
||||
|
||||
Future<void> _showTokenError(bool host) async {
|
||||
_fail = true;
|
||||
var instance = host ? _hostingController.instance.value : _gameController.instance.value;
|
||||
if(_authenticatorController.type() != ServerType.embedded) {
|
||||
showTokenErrorUnfixable();
|
||||
@@ -324,19 +356,15 @@ class _LaunchButtonState extends State<LaunchButton> {
|
||||
|
||||
await _authenticatorController.restartInteractive();
|
||||
showTokenErrorFixable();
|
||||
_onStop(host);
|
||||
_onStop(host, false);
|
||||
_start();
|
||||
}
|
||||
|
||||
void _onStop(bool host) async {
|
||||
if(_executor != null){
|
||||
await _executor;
|
||||
}
|
||||
|
||||
void _onStop(bool host, bool showMessage) async {
|
||||
var instance = host ? _hostingController.instance.value : _gameController.instance.value;
|
||||
if(instance != null){
|
||||
if(instance.linkedHosting){
|
||||
_onStop(true);
|
||||
_onStop(true, showMessage);
|
||||
}
|
||||
|
||||
instance.kill();
|
||||
@@ -350,13 +378,16 @@ class _LaunchButtonState extends State<LaunchButton> {
|
||||
_setStarted(host, false);
|
||||
|
||||
if(host){
|
||||
var supabase = Supabase.instance.client;
|
||||
await supabase.from('hosts')
|
||||
.delete()
|
||||
.match({'id': _gameController.uuid});
|
||||
await _removeHostEntry();
|
||||
}
|
||||
|
||||
_completer = Completer();
|
||||
_closeLaunchingWidget(host, showMessage);
|
||||
}
|
||||
|
||||
Future<void> _removeHostEntry() async {
|
||||
await _supabase.from('hosts')
|
||||
.delete()
|
||||
.match({'id': _gameController.uuid});
|
||||
}
|
||||
|
||||
Future<void> _injectOrShowError(Injectable injectable, bool hosting) async {
|
||||
@@ -374,8 +405,8 @@ class _LaunchButtonState extends State<LaunchButton> {
|
||||
|
||||
await injectDll(gameProcess, dllPath.path);
|
||||
} catch (exception) {
|
||||
showMessage("Cannot inject $injectable.dll: $exception");
|
||||
_onStop(hosting);
|
||||
showInfoBar("Cannot inject $injectable.dll: $exception");
|
||||
_onStop(hosting, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -383,11 +414,11 @@ class _LaunchButtonState extends State<LaunchButton> {
|
||||
Future<File> getPath(Injectable injectable) async {
|
||||
switch(injectable){
|
||||
case Injectable.reboot:
|
||||
return File(_settingsController.rebootDll.text);
|
||||
return File(_settingsController.gameServerDll.text);
|
||||
case Injectable.console:
|
||||
return File(_settingsController.consoleDll.text);
|
||||
return File(_settingsController.unrealEngineConsoleDll.text);
|
||||
case Injectable.sslBypass:
|
||||
return File(_settingsController.authDll.text);
|
||||
return File(_settingsController.authenticatorDll.text);
|
||||
case Injectable.memoryFix:
|
||||
return File("${assetsDirectory.path}\\dlls\\memoryleak.dll");
|
||||
}
|
||||
@@ -405,9 +436,8 @@ class _LaunchButtonState extends State<LaunchButton> {
|
||||
void _onDllFail(File dllPath, bool hosting) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
_fail = true;
|
||||
_closeLaunchingWidget(false);
|
||||
showMissingDllError(path.basename(dllPath.path));
|
||||
_onStop(hosting);
|
||||
_onStop(hosting, false);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import 'package:fluent_ui/fluent_ui.dart' hide showDialog;
|
||||
import 'package:fluent_ui/fluent_ui.dart';
|
||||
|
||||
class RebootPaneItem extends PaneItem {
|
||||
RebootPaneItem({required super.title, required super.icon, required super.body});
|
||||
|
||||