diff --git a/CHANGELOG.md b/CHANGELOG.md
index f77f5d8e..ac6e9ca6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,43 @@
+## [0.34.0](https://github.com/DorielRivalet/MHFZ_Overlay/compare/v0.33.0...v0.34.0) (2024-02-02)
+
+
+### Features
+
+* add buff timers ([b76b8ce](https://github.com/DorielRivalet/MHFZ_Overlay/commit/b76b8cec3a7219a71ef42c44e76f1a0244d1ece0)), closes [DorielRivalet/mhfz-overlay#260](https://github.com/DorielRivalet/mhfz-overlay/issues/260) [DorielRivalet/mhfz-overlay#268](https://github.com/DorielRivalet/mhfz-overlay/issues/268) [DorielRivalet/mhfz-overlay#267](https://github.com/DorielRivalet/mhfz-overlay/issues/267)
+* add course address ([48e8856](https://github.com/DorielRivalet/MHFZ_Overlay/commit/48e88561e515bcc542f04d1658200d95eea3d1e0)), closes [DorielRivalet/mhfz-overlay#251](https://github.com/DorielRivalet/mhfz-overlay/issues/251)
+* add course rights enum ([1217abe](https://github.com/DorielRivalet/MHFZ_Overlay/commit/1217abe8a67984c3e34e4a25a771ff17bc9ec6fe))
+* add missing run buffs ([d7f2527](https://github.com/DorielRivalet/MHFZ_Overlay/commit/d7f25276cc8804ff97eb484ecbb42546956c1d58)), closes [DorielRivalet/mhfz-overlay#259](https://github.com/DorielRivalet/mhfz-overlay/issues/259) [DorielRivalet/mhfz-overlay#265](https://github.com/DorielRivalet/mhfz-overlay/issues/265) [DorielRivalet/mhfz-overlay#250](https://github.com/DorielRivalet/mhfz-overlay/issues/250) [DorielRivalet/mhfz-overlay#264](https://github.com/DorielRivalet/mhfz-overlay/issues/264)
+* add more achievements ([8345092](https://github.com/DorielRivalet/MHFZ_Overlay/commit/83450920034dbee12aabf3d0a8d9325d1ca688aa))
+* add player position addresses ([e8077ac](https://github.com/DorielRivalet/MHFZ_Overlay/commit/e8077ac3aa6da7a2ded3f5601f0908d2488384b6)), closes [DorielRivalet/mhfz-overlay#252](https://github.com/DorielRivalet/mhfz-overlay/issues/252)
+* improve quest logs youtube section ([4745ef2](https://github.com/DorielRivalet/MHFZ_Overlay/commit/4745ef2e42ef5f6ca10683188e825dbd4cfdc6ac)), closes [DorielRivalet/mhfz-overlay#256](https://github.com/DorielRivalet/mhfz-overlay/issues/256)
+* **sqlite:** add active feature table ([3410975](https://github.com/DorielRivalet/MHFZ_Overlay/commit/3410975440c0eeb1358dae0c2c10b7b508c275e9)), closes [DorielRivalet/mhfz-overlay#249](https://github.com/DorielRivalet/mhfz-overlay/issues/249)
+* **sqlite:** add missing triggers ([3e42389](https://github.com/DorielRivalet/MHFZ_Overlay/commit/3e42389de8c9c791dc5616d6c09b257b17350918))
+* **sqlite:** link run id with overlay hash ([852cbf7](https://github.com/DorielRivalet/MHFZ_Overlay/commit/852cbf7a1dfc0c2ae9238e49a756a30c5b2b52a7)), closes [DorielRivalet/mhfz-overlay#248](https://github.com/DorielRivalet/mhfz-overlay/issues/248)
+* **struct:** add diva prayer gem information ([498aa50](https://github.com/DorielRivalet/MHFZ_Overlay/commit/498aa50754169051319f660ac228e79f38c29643))
+* **struct:** add enums ([6934803](https://github.com/DorielRivalet/MHFZ_Overlay/commit/6934803d147ea38b9b3a61f0c4e3e1055980fd6a))
+* update gear section ([2559133](https://github.com/DorielRivalet/MHFZ_Overlay/commit/2559133d33a250bf9dffdb3c7d6af4798bf41891))
+
+
+### Bug Fixes
+
+* **address:** fix guild food address ([b58bde1](https://github.com/DorielRivalet/MHFZ_Overlay/commit/b58bde117ccf8454a14d0c50a4b16d7a62a612b7)), closes [DorielRivalet/mhfz-overlay#270](https://github.com/DorielRivalet/mhfz-overlay/issues/270)
+* filter by solo quests in quest pace section ([08ac525](https://github.com/DorielRivalet/MHFZ_Overlay/commit/08ac52536a7aa91ec92b7f2a0b8c054916b63a85)), closes [DorielRivalet/mhfz-overlay#247](https://github.com/DorielRivalet/mhfz-overlay/issues/247)
+* guild food timer visibility ([8c2d8aa](https://github.com/DorielRivalet/MHFZ_Overlay/commit/8c2d8aa52adcddb39e959bb4d1a316827d1d29e0))
+* personal bests by attempts graph ([ea6a0fd](https://github.com/DorielRivalet/MHFZ_Overlay/commit/ea6a0fdb7052f451a0b091bd21bddccb08d332bd)), closes [DorielRivalet/mhfz-overlay#245](https://github.com/DorielRivalet/mhfz-overlay/issues/245)
+* quest attempts ([884e4f6](https://github.com/DorielRivalet/MHFZ_Overlay/commit/884e4f69936a8b0b3169248954ca158787f48027)), closes [DorielRivalet/mhfz-overlay#253](https://github.com/DorielRivalet/mhfz-overlay/issues/253)
+* quest pace calculation ([f0a5fdf](https://github.com/DorielRivalet/MHFZ_Overlay/commit/f0a5fdf0552639d49f98ff376ff0101e6dc60ecb))
+* rights flag check ([d701a3a](https://github.com/DorielRivalet/MHFZ_Overlay/commit/d701a3a2abd7e29515f38c6962bffa30fd3affee))
+* **sqlite:** quest attempts and personal best attempts in multiplayer ([8c3bff1](https://github.com/DorielRivalet/MHFZ_Overlay/commit/8c3bff1a0c53b94cde499fe8a49b11f7286f3fa4)), closes [DorielRivalet/mhfz-overlay#269](https://github.com/DorielRivalet/mhfz-overlay/issues/269)
+* weapon slots decorations with sigils ([ab1101e](https://github.com/DorielRivalet/MHFZ_Overlay/commit/ab1101e9dd770af94a7980ca3908ad16c3490072)), closes [DorielRivalet/mhfz-overlay#254](https://github.com/DorielRivalet/mhfz-overlay/issues/254)
+
+
+### For Developers
+
+* add v0.34.0 information ([8433a0b](https://github.com/DorielRivalet/MHFZ_Overlay/commit/8433a0b761768f77cfc0b27cc1671a23b897e7a8))
+* bump version ([efbdc6d](https://github.com/DorielRivalet/MHFZ_Overlay/commit/efbdc6dd1ebb7c177b02c39a45fdb89e5fe87899))
+
## [0.33.0](https://github.com/DorielRivalet/MHFZ_Overlay/compare/v0.32.0...v0.33.0) (2024-01-16)
diff --git a/FAQ.md b/FAQ.md
index 9f5a47f8..0b80429a 100644
--- a/FAQ.md
+++ b/FAQ.md
@@ -54,8 +54,8 @@ Use the preset option found in the General tab. Keep reading if you want to know
- Speedrun Mode Categories: Enable the required settings in the Quest Logs section, disable **everything** else, including Quest Pace Color (Monster Icon, Quest Timer + Percentage, KBM Layout, Personal Best and Discord Rich Presence optional)
-- Time Attack: Do not use diva skills.
-- Freestyle: Use diva skills with/without Secret Technique Style Rank Skill.
+- Time Attack: Do not use halk, guild poogie, active feature, guild food, diva skill and diva prayer gem.
+- Freestyle: Use any of the above or everything else with/without Secret Technique Style Rank Skill.
**Important**: It is recommended to make a backup of the `MHFZ_Overlay.sqlite` file periodically. The file is located inside the database folder, which is inside your game folder. Don't lose your speedrun records!
@@ -65,7 +65,7 @@ Use the preset option found in the General tab. Keep reading if you want to know
![Discord Rich Presence](./demo/discord11.png)
-~~Congrats, now you won't be accused of cheating~~
+The current speedrun categories are pending an overhaul. Zen mode is not counted as a speedrun mode.
## How to Record Videos with the Overlay?
@@ -241,6 +241,8 @@ If DS4Windows does not work for you, you can search for alternatives, but it is
|Personal Best Attempts|✔️|❌|❌|
|Completions Counter|✔️|❌|❌|
|Run Pace|✔️ Color|❌|❌|
+|Quest Pace Graph|✔️|❌|❌|
+|Player Coordinates|✔️|❌|❌|
|Settings Save on Update|✔️|❌|❌|
|Save Stats to File|✔️|❌|❌|
|Copy Stats to Clipboard|✔️|❌|❌|
@@ -249,9 +251,9 @@ If DS4Windows does not work for you, you can search for alternatives, but it is
|Database Backups|✔️ Local|❌|❌|
|Past Quests Info|✔️|❌|❌|
|Achievements|✔️|❌|❌|
-|Show Quest Change|✔️|❌|❌
+|Show Quest Change|✔️|❌|❌|
|Show Area Change|✔️|❌|❌|
-|KBM Layout|✔️|❌|❌
+|KBM Layout|✔️|❌|❌|
|Gamepad Layout|✔️|❌|❌|
|Input Logs|✔️|❌|❌|
|Quest ID|✔️|❌|❌|
@@ -270,7 +272,7 @@ If DS4Windows does not work for you, you can search for alternatives, but it is
|Logging|✔️|❌|❌|
|Logging Options|✔️|❌|❌|
|Color Options|✔️|✔️|✔️|
-|Buff Icons |❌|❌|❌
+|Buff Icons |✔️|❌|❌|
|Debuff Icons |❌|❌|❌|
|Hub Activities|❌|❌|❌|
|Settings Search|❌|❌|❌|
@@ -301,7 +303,7 @@ If DS4Windows does not work for you, you can search for alternatives, but it is
As an added bonus:
-| | mhf-z overlay v0.25.0 (DorielRivalet) | HunterPie v2.8.0 (HunterPie) |
+| | mhf-z overlay v0.34.0 (DorielRivalet) | HunterPie v2.8.0 (HunterPie) |
|:----------|:---------:|:---------:|
|Discord Rich Presence|✔️|✔️|
|Rich Presence Quest Name|✔️|❌|
@@ -333,6 +335,8 @@ As an added bonus:
|Personal Best Attempts|✔️|❌|
|Completions Counter|✔️|❌|
|Run Pace|✔️ Color|❌|
+|Quest Pace Graph|✔️|❌|
+|Player Coordinates|✔️|❌|
|Settings Save on Update|✔️|✔️|
|Save Stats to File|✔️|❌|
|Copy Stats to Clipboard|✔️|❌|
@@ -362,7 +366,7 @@ As an added bonus:
|Logging|✔️ File|✔️ Console|
|Logging Options|✔️|❌|
|Color Options|✔️|❌|
-|Buff Icons |❌|✔️|
+|Buff Icons |✔️|✔️|
|Debuff Icons |❌|✔️|
|Hub Activities|❌|✔️|
|Settings Search|❌|✔️ by Section|
diff --git a/MHFZ_Overlay/App.config b/MHFZ_Overlay/App.config
index c6a8b0b6..442d32ca 100644
--- a/MHFZ_Overlay/App.config
+++ b/MHFZ_Overlay/App.config
@@ -993,6 +993,36 @@
False
+
+ False
+
+
+ 5
+
+
+ 140
+
+
+ Automatic
+
+
+ True
+
+
+ 5
+
+
+ 100
+
+
+ True
+
+
+ 5
+
+
+ 60
+
diff --git a/MHFZ_Overlay/Assets/Icons/png/blacksmith.png b/MHFZ_Overlay/Assets/Icons/png/blacksmith.png
new file mode 100644
index 00000000..4d2ed92d
Binary files /dev/null and b/MHFZ_Overlay/Assets/Icons/png/blacksmith.png differ
diff --git a/MHFZ_Overlay/Assets/Icons/png/diva_fountain.png b/MHFZ_Overlay/Assets/Icons/png/diva_fountain.png
new file mode 100644
index 00000000..d7fd9ec1
Binary files /dev/null and b/MHFZ_Overlay/Assets/Icons/png/diva_fountain.png differ
diff --git a/MHFZ_Overlay/Assets/Icons/png/guild_hall.png b/MHFZ_Overlay/Assets/Icons/png/guild_hall.png
new file mode 100644
index 00000000..d0fca085
Binary files /dev/null and b/MHFZ_Overlay/Assets/Icons/png/guild_hall.png differ
diff --git a/MHFZ_Overlay/Assets/Icons/png/my_gallery.png b/MHFZ_Overlay/Assets/Icons/png/my_gallery.png
new file mode 100644
index 00000000..2076b7d6
Binary files /dev/null and b/MHFZ_Overlay/Assets/Icons/png/my_gallery.png differ
diff --git a/MHFZ_Overlay/Assets/Icons/png/my_garden.png b/MHFZ_Overlay/Assets/Icons/png/my_garden.png
new file mode 100644
index 00000000..f377bce3
Binary files /dev/null and b/MHFZ_Overlay/Assets/Icons/png/my_garden.png differ
diff --git a/MHFZ_Overlay/Assets/Icons/png/my_house.png b/MHFZ_Overlay/Assets/Icons/png/my_house.png
new file mode 100644
index 00000000..0e5eaec0
Binary files /dev/null and b/MHFZ_Overlay/Assets/Icons/png/my_house.png differ
diff --git a/MHFZ_Overlay/Assets/Icons/png/my_missions.png b/MHFZ_Overlay/Assets/Icons/png/my_missions.png
new file mode 100644
index 00000000..6a1ea402
Binary files /dev/null and b/MHFZ_Overlay/Assets/Icons/png/my_missions.png differ
diff --git a/MHFZ_Overlay/Assets/Icons/png/my_support.png b/MHFZ_Overlay/Assets/Icons/png/my_support.png
new file mode 100644
index 00000000..e686d5b0
Binary files /dev/null and b/MHFZ_Overlay/Assets/Icons/png/my_support.png differ
diff --git a/MHFZ_Overlay/Assets/Icons/png/my_tore.png b/MHFZ_Overlay/Assets/Icons/png/my_tore.png
new file mode 100644
index 00000000..6b688a39
Binary files /dev/null and b/MHFZ_Overlay/Assets/Icons/png/my_tore.png differ
diff --git a/MHFZ_Overlay/Assets/Icons/png/pallone_caravan.png b/MHFZ_Overlay/Assets/Icons/png/pallone_caravan.png
new file mode 100644
index 00000000..c5c19e9a
Binary files /dev/null and b/MHFZ_Overlay/Assets/Icons/png/pallone_caravan.png differ
diff --git a/MHFZ_Overlay/Assets/Icons/png/pvp.png b/MHFZ_Overlay/Assets/Icons/png/pvp.png
new file mode 100644
index 00000000..0e0cb8cd
Binary files /dev/null and b/MHFZ_Overlay/Assets/Icons/png/pvp.png differ
diff --git a/MHFZ_Overlay/Assets/Icons/png/rasta_bar.png b/MHFZ_Overlay/Assets/Icons/png/rasta_bar.png
new file mode 100644
index 00000000..7c88f742
Binary files /dev/null and b/MHFZ_Overlay/Assets/Icons/png/rasta_bar.png differ
diff --git a/MHFZ_Overlay/Assets/Icons/png/tenrou.png b/MHFZ_Overlay/Assets/Icons/png/tenrou.png
new file mode 100644
index 00000000..ad1a24b3
Binary files /dev/null and b/MHFZ_Overlay/Assets/Icons/png/tenrou.png differ
diff --git a/MHFZ_Overlay/Assets/Icons/png/tent.png b/MHFZ_Overlay/Assets/Icons/png/tent.png
new file mode 100644
index 00000000..124d92d4
Binary files /dev/null and b/MHFZ_Overlay/Assets/Icons/png/tent.png differ
diff --git a/MHFZ_Overlay/MHFZ_Overlay.csproj b/MHFZ_Overlay/MHFZ_Overlay.csproj
index d3fbd0c9..2cdd2777 100644
--- a/MHFZ_Overlay/MHFZ_Overlay.csproj
+++ b/MHFZ_Overlay/MHFZ_Overlay.csproj
@@ -20,7 +20,7 @@
mhfz-overlay
Doriel Rivalet
Doriel Rivalet
- 0.33.0
+ 0.34.0
https://github.com/DorielRivalet/mhfz-overlay
https://github.com/DorielRivalet/mhfz-overlay.git
git
@@ -168,6 +168,7 @@
+
@@ -185,6 +186,7 @@
+
@@ -257,6 +259,7 @@
+
@@ -691,7 +694,14 @@
+
+
+
+
+
+
+
@@ -699,11 +709,13 @@
+
+
@@ -727,6 +739,8 @@
+
+
@@ -1178,6 +1192,7 @@
+
@@ -1195,6 +1210,7 @@
+
@@ -1267,6 +1283,7 @@
+
@@ -1701,7 +1718,14 @@
+
+
+
+
+
+
+
@@ -1709,11 +1733,13 @@
+
+
@@ -1737,6 +1763,8 @@
+
+
@@ -1831,7 +1859,7 @@
-
+
diff --git a/MHFZ_Overlay/Models/Addresses/AddressModelHGE.cs b/MHFZ_Overlay/Models/Addresses/AddressModelHGE.cs
index 05e32818..61f2b532 100644
--- a/MHFZ_Overlay/Models/Addresses/AddressModelHGE.cs
+++ b/MHFZ_Overlay/Models/Addresses/AddressModelHGE.cs
@@ -456,7 +456,10 @@ public AddressModelHGE(Mem m)
public override int GZenny() => this.M.ReadInt("mhfo-hd.dll+ED3ACB4");
///
- public override int GuildFoodSkill() => this.M.Read2Byte("mhfo-hd.dll+E7FED00");
+ /// public override int GuildFoodSkill() => this.M.Read2Byte("mhfo-hd.dll+E7FED00");
+ ///
+ ///
+ public override int GuildFoodSkill() => this.M.Read2Byte("mhfo-hd.dll+E6CCD9E");
///
public override int GalleryEvaluationScore() => this.M.ReadInt("mhfo-hd.dll+ED3D9F0");
@@ -527,6 +530,60 @@ public AddressModelHGE(Mem m)
///
public override int HalkFullness() => this.M.ReadByte("mhfo-hd.dll+ED3C123");
+ ///
+ public override int HalkLevel() => this.M.ReadByte("mhfo-hd.dll+ED3C124");
+
+ ///
+ public override int HalkIntimacy() => this.M.ReadByte("mhfo-hd.dll+ED3C125");
+
+ ///
+ public override int HalkHealth() => this.M.ReadByte("mhfo-hd.dll+ED3C126");
+
+ ///
+ public override int HalkAttack() => this.M.ReadByte("mhfo-hd.dll+ED3C127");
+
+ ///
+ public override int HalkDefense() => this.M.ReadByte("mhfo-hd.dll+ED3C128");
+
+ ///
+ public override int HalkIntellect() => this.M.ReadByte("mhfo-hd.dll+ED3C129");
+
+ ///
+ public override int HalkSkill1() => this.M.ReadByte("mhfo-hd.dll+ED3C12A");
+
+ ///
+ public override int HalkSkill2() => this.M.ReadByte("mhfo-hd.dll+ED3C12B");
+
+ ///
+ public override int HalkSkill3() => this.M.ReadByte("mhfo-hd.dll+ED3C12C");
+
+ ///
+ public override int HalkElementNone() => this.M.ReadByte("mhfo-hd.dll+ED3C12E");
+
+ ///
+ public override int HalkFire() => this.M.ReadByte("mhfo-hd.dll+ED3C12F");
+
+ ///
+ public override int HalkThunder() => this.M.ReadByte("mhfo-hd.dll+ED3C130");
+
+ ///
+ public override int HalkWater() => this.M.ReadByte("mhfo-hd.dll+ED3C131");
+
+ ///
+ public override int HalkIce() => this.M.ReadByte("mhfo-hd.dll+ED3C132");
+
+ ///
+ public override int HalkDragon() => this.M.ReadByte("mhfo-hd.dll+ED3C133");
+
+ ///
+ public override int HalkSleep() => this.M.ReadByte("mhfo-hd.dll+ED3C134");
+
+ ///
+ public override int HalkParalysis() => this.M.ReadByte("mhfo-hd.dll+ED3C135");
+
+ ///
+ public override int HalkPoison() => this.M.ReadByte("mhfo-hd.dll+ED3C136");
+
///
public override int RankBand() => this.M.ReadByte("mhfo-hd.dll+2AFA788");
@@ -1748,4 +1805,86 @@ public AddressModelHGE(Mem m)
///
public override int QuestToggleMonsterMode() => this.M.ReadByte("mhfo-hd.dll+E73D7B6");
+
+ ///
+ public override int Rights() => this.M.Read2Byte("mhfo-hd.dll+EABD3C4");
+
+ ///
+ public override decimal PlayerPositionX() => (decimal)this.M.ReadFloat("mhfo-hd.dll+E8E6640", string.Empty, false);
+
+ ///
+ public override decimal PlayerPositionY() => (decimal)this.M.ReadFloat("mhfo-hd.dll+E8E6644", string.Empty, false);
+
+ ///
+ public override decimal PlayerPositionZ() => (decimal)this.M.ReadFloat("mhfo-hd.dll+E8E6648", string.Empty, false);
+
+ ///
+ public override decimal PlayerPositionInQuestX() => (decimal)this.M.ReadFloat("mhfo-hd.dll+21B3530", string.Empty, false);
+
+ ///
+ public override decimal PlayerPositionInQuestY() => (decimal)this.M.ReadFloat("mhfo-hd.dll+21B3534", string.Empty, false);
+
+ ///
+ public override decimal PlayerPositionInQuestZ() => (decimal)this.M.ReadFloat("mhfo-hd.dll+21B3538", string.Empty, false);
+
+ ///
+ public override int ActiveFeature1() => this.M.Read2Byte("mhfo-hd.dll+1C2AB0C");
+
+ ///
+ public override int ActiveFeature2() => this.M.Read2Byte("mhfo-hd.dll+1C2AB14");
+
+ ///
+ public override int ActiveFeature3() => this.M.Read2Byte("mhfo-hd.dll+E41A2A8");
+
+ ///
+ public override int ServerHeartbeat() => this.M.ReadInt("mhfo-hd.dll+EABD4F0");
+
+ ///
+ public override int GuildFoodStart() => this.M.ReadInt("mhfo-hd.dll+E7FED08");
+
+ ///
+ public override int DivaSongStart() => this.M.ReadInt("mhfo-hd.dll+ED3DB50");
+
+ ///
+ //public override int DivaPrayerGemStart() => this.M.ReadInt("mhfo-hd.dll+E820DF8");
+
+ ///
+ public override int GuildPoogie1Skill() => this.M.ReadByte("mhfo-hd.dll+E76BBDB");
+
+ ///
+ public override int GuildPoogie2Skill() => this.M.ReadByte("mhfo-hd.dll+E76BBEB");
+
+ ///
+ public override int GuildPoogie3Skill() => this.M.ReadByte("mhfo-hd.dll+E76BBFB");
+
+ ///
+ public override int DivaPrayerGemRedSkill() => this.M.Read2Byte("mhfo-hd.dll+E6CCF14");
+
+ ///
+ public override int DivaPrayerGemRedLevel() => this.M.Read2Byte("mhfo-hd.dll+E6CCF16");
+
+ ///
+ public override int DivaPrayerGemYellowSkill() => this.M.Read2Byte("mhfo-hd.dll+E6CCF18");
+
+ ///
+ public override int DivaPrayerGemYellowLevel() => this.M.Read2Byte("mhfo-hd.dll+E6CCF1A");
+
+ ///
+ public override int DivaPrayerGemGreenSkill() => this.M.Read2Byte("mhfo-hd.dll+E6CCF1C");
+
+ ///
+ public override int DivaPrayerGemGreenLevel() => this.M.Read2Byte("mhfo-hd.dll+E6CCF1E");
+
+ ///
+ public override int DivaPrayerGemBlueSkill() => this.M.Read2Byte("mhfo-hd.dll+E6CCF20");
+
+ ///
+ public override int DivaPrayerGemBlueLevel() => this.M.Read2Byte("mhfo-hd.dll+E6CCF22");
+
+ ///
+ public override bool HalkOn() => this.M.ReadByte("mhfo-hd.dll+E7FE233") > 0 ? true : false;
+
+ ///
+ public override bool HalkPotEffectOn() => this.M.ReadByte("mhfo-hd.dll+DC6C524") > 0 ? true : false;
+
}
diff --git a/MHFZ_Overlay/Models/Addresses/AddressModelNotHGE.cs b/MHFZ_Overlay/Models/Addresses/AddressModelNotHGE.cs
index e158b472..9b0b6708 100644
--- a/MHFZ_Overlay/Models/Addresses/AddressModelNotHGE.cs
+++ b/MHFZ_Overlay/Models/Addresses/AddressModelNotHGE.cs
@@ -370,8 +370,11 @@ public AddressModelNotHGE(Mem m)
///
public override int GZenny() => this.M.ReadInt("mhfo.dll+6100514");
+ /////
+ //public override int GuildFoodSkill() => this.M.Read2Byte("mhfo.dll+5BC70D8");
+
///
- public override int GuildFoodSkill() => this.M.Read2Byte("mhfo.dll+5BC70D8");
+ public override int GuildFoodSkill() => this.M.Read2Byte("mhfo.dll+5A951DE");
///
public override int GalleryEvaluationScore() => this.M.ReadInt("mhfo.dll+6103250");
@@ -442,6 +445,60 @@ public AddressModelNotHGE(Mem m)
///
public override int HalkFullness() => this.M.ReadByte("mhfo.dll+6101983");
+ ///
+ public override int HalkLevel() => this.M.ReadByte("mhfo.dll+6101984");
+
+ ///
+ public override int HalkIntimacy() => this.M.ReadByte("mhfo.dll+6101985");
+
+ ///
+ public override int HalkHealth() => this.M.ReadByte("mhfo.dll+6101986");
+
+ ///
+ public override int HalkAttack() => this.M.ReadByte("mhfo.dll+6101987");
+
+ ///
+ public override int HalkDefense() => this.M.ReadByte("mhfo.dll+6101988");
+
+ ///
+ public override int HalkIntellect() => this.M.ReadByte("mhfo.dll+6101989");
+
+ ///
+ public override int HalkSkill1() => this.M.ReadByte("mhfo.dll+610198A");
+
+ ///
+ public override int HalkSkill2() => this.M.ReadByte("mhfo.dll+610198B");
+
+ ///
+ public override int HalkSkill3() => this.M.ReadByte("mhfo.dll+610198C");
+
+ ///
+ public override int HalkElementNone() => this.M.ReadByte("mhfo.dll+610198E");
+
+ ///
+ public override int HalkFire() => this.M.ReadByte("mhfo.dll+610198F");
+
+ ///
+ public override int HalkThunder() => this.M.ReadByte("mhfo.dll+6101990");
+
+ ///
+ public override int HalkWater() => this.M.ReadByte("mhfo.dll+6101991");
+
+ ///
+ public override int HalkIce() => this.M.ReadByte("mhfo.dll+6101992");
+
+ ///
+ public override int HalkDragon() => this.M.ReadByte("mhfo.dll+6101993");
+
+ ///
+ public override int HalkSleep() => this.M.ReadByte("mhfo.dll+6101994");
+
+ ///
+ public override int HalkParalysis() => this.M.ReadByte("mhfo.dll+6101995");
+
+ ///
+ public override int HalkPoison() => this.M.ReadByte("mhfo.dll+6101996");
+
///
public override int RankBand() => this.M.ReadByte("mhfo.dll+28C2BD8");
@@ -1665,5 +1722,87 @@ public AddressModelNotHGE(Mem m)
///
public override int PartnyaBagItem10Qty() => this.M.Read2Byte("mhfo.dll+57457AE");
+ ///
public override int QuestToggleMonsterMode() => this.M.ReadByte("mhfo.dll+5B05B8E");
+
+ ///
+ public override int Rights() => this.M.Read2Byte("mhfo.dll+5D98294");
+
+ ///
+ public override decimal PlayerPositionX() => (decimal)this.M.ReadFloat("mhfo.dll+5CACB50", string.Empty, false);
+
+ ///
+ public override decimal PlayerPositionY() => (decimal)this.M.ReadFloat("mhfo.dll+5CACB54", string.Empty, false);
+
+ ///
+ public override decimal PlayerPositionZ() => (decimal)this.M.ReadFloat("mhfo.dll+5CACB58", string.Empty, false);
+
+ ///
+ public override decimal PlayerPositionInQuestX() => (decimal)this.M.ReadFloat("mhfo.dll+20BB540", string.Empty, false);
+
+ ///
+ public override decimal PlayerPositionInQuestY() => (decimal)this.M.ReadFloat("mhfo.dll+20BB544", string.Empty, false);
+
+ ///
+ public override decimal PlayerPositionInQuestZ() => (decimal)this.M.ReadFloat("mhfo.dll+20BB548", string.Empty, false);
+
+ ///
+ public override int ActiveFeature1() => this.M.Read2Byte("mhfo.dll+1BD2F50");
+
+ ///
+ public override int ActiveFeature2() => this.M.Read2Byte("mhfo.dll+1BD2F58");
+
+ ///
+ public override int ActiveFeature3() => this.M.Read2Byte("mhfo.dll+57E26E8");
+
+ ///
+ public override int ServerHeartbeat() => this.M.ReadInt("mhfo.dll+5E83A00");
+
+ ///
+ public override int GuildFoodStart() => this.M.ReadInt("mhfo.dll+5BC70E0");
+
+ ///
+ public override int DivaSongStart() => this.M.ReadInt("mhfo.dll+61033B0");
+
+ ///
+ //public override int DivaPrayerGemStart() => this.M.ReadInt("mhfo.dll+5BE91C8");
+
+ ///
+ public override int GuildPoogie1Skill() => this.M.ReadByte("mhfo.dll+5B33FB3");
+
+ ///
+ public override int GuildPoogie2Skill() => this.M.ReadByte("mhfo.dll+5B33FC3");
+
+ ///
+ public override int GuildPoogie3Skill() => this.M.ReadByte("mhfo.dll+5B33FD3");
+
+ ///
+ public override int DivaPrayerGemRedSkill() => this.M.Read2Byte("mhfo.dll+5A95354");
+
+ ///
+ public override int DivaPrayerGemRedLevel() => this.M.Read2Byte("mhfo.dll+5A95356");
+
+ ///
+ public override int DivaPrayerGemYellowSkill() => this.M.Read2Byte("mhfo.dll+5A95358");
+
+ ///
+ public override int DivaPrayerGemYellowLevel() => this.M.Read2Byte("mhfo.dll+5A9535A");
+
+ ///
+ public override int DivaPrayerGemGreenSkill() => this.M.Read2Byte("mhfo.dll+5A9535C");
+
+ ///
+ public override int DivaPrayerGemGreenLevel() => this.M.Read2Byte("mhfo.dll+5A9535E");
+
+ ///
+ public override int DivaPrayerGemBlueSkill() => this.M.Read2Byte("mhfo.dll+5A95360");
+
+ ///
+ public override int DivaPrayerGemBlueLevel() => this.M.Read2Byte("mhfo.dll+5A95362");
+
+ ///
+ public override bool HalkOn() => this.M.ReadByte("mhfo.dll+5BC6603") > 0 ? true : false;
+
+ ///
+ public override bool HalkPotEffectOn() => this.M.ReadByte("mhfo.dll+5034964") > 0 ? true : false;
}
diff --git a/MHFZ_Overlay/Models/Collections/Achievements.cs b/MHFZ_Overlay/Models/Collections/Achievements.cs
index 96180deb..1ebeb2c1 100644
--- a/MHFZ_Overlay/Models/Collections/Achievements.cs
+++ b/MHFZ_Overlay/Models/Collections/Achievements.cs
@@ -5806,5 +5806,83 @@ [] [U] [] [] []
Hint = "POWER!",
}
},
+ {
+ 441, new Achievement()
+ {
+ CompletionDate = DateTime.UnixEpoch,
+ Title = "Muse",
+ Description = string.Empty,
+ Rank = AchievementRank.Gold,
+ Image = @"pack://application:,,,/MHFZ_Overlay;component/Assets/Icons/png/diva_fountain.png",
+ Objective = "Use Diva Song buff in 100 quests.",
+ IsSecret = false,
+ Hint = string.Empty,
+ }
+ },
+ {
+ 442, new Achievement()
+ {
+ CompletionDate = DateTime.UnixEpoch,
+ Title = "Blessed Hunter",
+ Description = string.Empty,
+ Rank = AchievementRank.Platinum,
+ Image = @"pack://application:,,,/MHFZ_Overlay;component/Assets/Icons/png/diva_prayer_gems.png",
+ Objective = "Use Diva prayer gems in 777 quests.",
+ IsSecret = false,
+ Hint = string.Empty,
+ }
+ },
+ {
+ 443, new Achievement()
+ {
+ CompletionDate = DateTime.UnixEpoch,
+ Title = "Oink oink!",
+ Description = string.Empty,
+ Rank = AchievementRank.Silver,
+ Image = @"pack://application:,,,/MHFZ_Overlay;component/Assets/Icons/png/my_tore.png",
+ Objective = "Use guild poogie skill in 100 quests.",
+ IsSecret = false,
+ Hint = string.Empty,
+ }
+ },
+ {
+ 444, new Achievement()
+ {
+ CompletionDate = DateTime.UnixEpoch,
+ Title = "Halk's Friend",
+ Description = string.Empty,
+ Rank = AchievementRank.Gold,
+ Image = @"pack://application:,,,/MHFZ_Overlay;component/Assets/Icons/png/my_support.png",
+ Objective = "Level up your halk to LV3.",
+ IsSecret = false,
+ Hint = string.Empty,
+ }
+ },
+ {
+ 445, new Achievement()
+ {
+ CompletionDate = DateTime.UnixEpoch,
+ Title = "Active Hunter",
+ Description = string.Empty,
+ Rank = AchievementRank.Silver,
+ Image = @"pack://application:,,,/MHFZ_Overlay;component/Assets/Icons/png/small_gs.png",
+ Objective = "Use the active features of all weapon types.",
+ IsSecret = false,
+ Hint = string.Empty,
+ }
+ },
+ {
+ 446, new Achievement()
+ {
+ CompletionDate = DateTime.UnixEpoch,
+ Title = "That's a Lotta Damage!",
+ Description = string.Empty,
+ Rank = AchievementRank.Silver,
+ Image = @"pack://application:,,,/MHFZ_Overlay;component/Assets/Icons/png/attack_up.png",
+ Objective = "Reach the maximum true raw in a quest.",
+ IsSecret = false,
+ Hint = string.Empty,
+ }
+ }
});
}
diff --git a/MHFZ_Overlay/Models/Collections/DivaPrayerGems.cs b/MHFZ_Overlay/Models/Collections/DivaPrayerGems.cs
new file mode 100644
index 00000000..4173b1c8
--- /dev/null
+++ b/MHFZ_Overlay/Models/Collections/DivaPrayerGems.cs
@@ -0,0 +1,46 @@
+// © 2023 The mhfz-overlay developers.
+// Use of this source code is governed by a MIT license that can be
+// found in the LICENSE file.
+
+namespace MHFZ_Overlay.Models.Collections;
+
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using MHFZ_Overlay.Models.Structures;
+
+///
+/// The diva prayer gems list.
+///
+public static class DivaPrayerGems
+{
+ public static ReadOnlyDictionary PrayerGems { get; } = new(new Dictionary
+ {
+ { DivaPrayerGemType.None, new DivaPrayerGem(){ Description= "None", Level=0, MaxLevel=0, Type = DivaPrayerGemType.None} },
+ { DivaPrayerGemType.WindStorm, new DivaPrayerGem(){ Description= "Sharpness does not decrease with blademaster weapons. Works for 5, 10 or 20 quests depending on level during the prayer active window.", Level=0, MaxLevel=3, Type = DivaPrayerGemType.WindStorm} },
+ { DivaPrayerGemType.Agility, new DivaPrayerGem(){ Description= "Reduces the recoil and reload speed of Gunner weapons.", Level=0, MaxLevel=7, Type = DivaPrayerGemType.Agility, PartyEffect=true, Unused=true} },
+ { DivaPrayerGemType.SeveringPower, new DivaPrayerGem(){ Description= "Tails can be cut with any damage type.", Level=0, MaxLevel=1, Type = DivaPrayerGemType.SeveringPower} },
+ { DivaPrayerGemType.Elegance, new DivaPrayerGem(){ Description= "Adds passive HP recovery to all quests.", Level=0, MaxLevel=2, Type = DivaPrayerGemType.Elegance} },
+ { DivaPrayerGemType.Earth, new DivaPrayerGem(){ Description= "Makes it easier to scare monsters by attacking with Earth Style.", Level=0, MaxLevel=4, Type = DivaPrayerGemType.Earth, Unused=true} },
+ { DivaPrayerGemType.Heaven, new DivaPrayerGem(){ Description= "Makes it easier to scare monsters by attacking with Heaven Style.", Level=0, MaxLevel=4, Type = DivaPrayerGemType.Heaven, Unused=true} },
+ { DivaPrayerGemType.Tempest, new DivaPrayerGem(){ Description= "Makes it easier to scare monsters by attacking with Storm Style.", Level=0, MaxLevel=4, Type = DivaPrayerGemType.Tempest, Unused=true} },
+ { DivaPrayerGemType.CuttingEdge, new DivaPrayerGem(){ Description= "Increases the amount of raw damage dealt by a cutting weapon by adjusting hitboxes to be weaker against the damage type.", Level=0, MaxLevel=3, Type = DivaPrayerGemType.CuttingEdge} },
+ { DivaPrayerGemType.Striking, new DivaPrayerGem(){ Description= "Increases the amount of raw damage dealt by an impact weapon by adjusting hitboxes to be weaker against the damage type.", Level=0, MaxLevel=3, Type = DivaPrayerGemType.Striking} },
+ { DivaPrayerGemType.RisingBullet, new DivaPrayerGem(){ Description= "Increases the amount of raw damage dealt by a ranged weapon by adjusting hitboxes to be weaker against the damage type.", Level=0, MaxLevel=3, Type = DivaPrayerGemType.RisingBullet} },
+ { DivaPrayerGemType.StatusLength, new DivaPrayerGem(){ Description= "Increases the duration of status effects on monsters.", Level=0, MaxLevel=3, Type = DivaPrayerGemType.StatusLength, PartyEffect=true} },
+ { DivaPrayerGemType.Abnormality, new DivaPrayerGem(){ Description= "Monsters are more susceptible to status ailments.", Level=0, MaxLevel=3, Type = DivaPrayerGemType.Abnormality, PartyEffect=true, Unused=true} },
+ { DivaPrayerGemType.Lethality, new DivaPrayerGem(){ Description= "Increases damage when striking body parts upon which your attacks are highly effective. However, element damage does not change.", Level=0, MaxLevel=3, Type = DivaPrayerGemType.Lethality, Unused=true} },
+ { DivaPrayerGemType.HeavyThunder, new DivaPrayerGem(){ Description= "Elemental damage increases based on level.", Level=0, MaxLevel=3, Type = DivaPrayerGemType.HeavyThunder} },
+ { DivaPrayerGemType.Unshakable, new DivaPrayerGem(){ Description= "Monsters cannot flee if in the same area as a hunter.", Level=0, MaxLevel=3, Type = DivaPrayerGemType.Unshakable, PartyEffect=true} },
+ { DivaPrayerGemType.Ringing, new DivaPrayerGem(){ Description= "Adds new items to the GCP store based on level.", Level=0, MaxLevel=1, Type = DivaPrayerGemType.Ringing} },
+ { DivaPrayerGemType.Mobilisation, new DivaPrayerGem(){ Description= "Attack will go up based on the number of human hunters in a quest.", Level=0, MaxLevel=3, Type = DivaPrayerGemType.Mobilisation, PartyEffect=true} },
+ { DivaPrayerGemType.Protection, new DivaPrayerGem(){ Description= "Gives Divine Protection, Goddess' Embrace or Soul Revival based on level.", Level=0, MaxLevel=3, Type = DivaPrayerGemType.Protection} },
+ { DivaPrayerGemType.PowerfulStrikes, new DivaPrayerGem(){ Description= "Increases affinity of all weapons based on the level of the song.", Level=0, MaxLevel=3, Type = DivaPrayerGemType.PowerfulStrikes} },
+ { DivaPrayerGemType.Fireproof, new DivaPrayerGem(){ Description= "Increases fire resistance.", Level=0, MaxLevel=0, Type = DivaPrayerGemType.Fireproof, Unused=true} },
+ { DivaPrayerGemType.Waterproof, new DivaPrayerGem(){ Description= "Increases water resistance.", Level=0, MaxLevel=3, Type = DivaPrayerGemType.Waterproof, Unused=true} },
+ { DivaPrayerGemType.Iceproof, new DivaPrayerGem(){ Description= "Increases ice resistance.", Level=0, MaxLevel=3, Type = DivaPrayerGemType.Iceproof, Unused=true} },
+ { DivaPrayerGemType.Dragonproof, new DivaPrayerGem(){ Description= "Increases dragon resistance.", Level=0, MaxLevel=3, Type = DivaPrayerGemType.Dragonproof, Unused=true} },
+ { DivaPrayerGemType.Thunderproof, new DivaPrayerGem(){ Description= "Increases thunder resistance.", Level=0, MaxLevel=3, Type = DivaPrayerGemType.Thunderproof, Unused=true} },
+ { DivaPrayerGemType.Immunity, new DivaPrayerGem(){ Description= "Increases resistance to all elements.", Level=0, MaxLevel=2, Type = DivaPrayerGemType.Immunity, Unused=true} },
+
+ });
+}
diff --git a/MHFZ_Overlay/Models/Collections/DivaPrayerGemsPoints.cs b/MHFZ_Overlay/Models/Collections/DivaPrayerGemsPoints.cs
new file mode 100644
index 00000000..4ac952d8
--- /dev/null
+++ b/MHFZ_Overlay/Models/Collections/DivaPrayerGemsPoints.cs
@@ -0,0 +1,47 @@
+// © 2023 The mhfz-overlay developers.
+// Use of this source code is governed by a MIT license that can be
+// found in the LICENSE file.
+
+namespace MHFZ_Overlay.Models.Collections;
+
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+
+///
+/// The diva prayer gems points target list.
+///
+public static class DivaPrayerGemsPoints
+{
+ public static ReadOnlyDictionary Targets { get; } = new (new Dictionary
+ {
+ { 0, new DivaPrayerGemPoint(){ Points = 0, MaxUses = 0, Level = 0,} },
+ { 500000, new DivaPrayerGemPoint(){ Points = 500_000, MaxUses = 1, Level = 0,} },
+ { 1000000, new DivaPrayerGemPoint(){ Points = 1_000000, MaxUses = 2, Level = 0,} },
+ { 2000000, new DivaPrayerGemPoint(){ Points = 2_000000, MaxUses = 3, Level = 0,} },
+ { 3000000, new DivaPrayerGemPoint(){ Points = 3_000000, MaxUses = 4, Level = 0,} },
+ { 4000000, new DivaPrayerGemPoint(){ Points = 4_000000, MaxUses = 5, Level = 0,} },
+ { 5000000, new DivaPrayerGemPoint(){ Points = 5_000000, MaxUses = 6, Level = 0,} },
+ { 6000000, new DivaPrayerGemPoint(){ Points = 6_000000, MaxUses = 7, Level = 0,} },
+ { 7000000, new DivaPrayerGemPoint(){ Points = 7_000000, MaxUses = 8, Level = 0,} },
+ { 8000000, new DivaPrayerGemPoint(){ Points = 8_000000, MaxUses = 9, Level = 0,} },
+ { 9000000, new DivaPrayerGemPoint(){ Points = 9_000_000, MaxUses = 10, Level = 1,} },
+
+ { 10000000, new DivaPrayerGemPoint(){ Points = 10_000000, MaxUses = 11, Level = 1,} },
+ { 15000000, new DivaPrayerGemPoint(){ Points = 15_000000, MaxUses = 12, Level = 1,} },
+ { 20000000, new DivaPrayerGemPoint(){ Points = 20_000000, MaxUses = 13, Level = 1,} },
+ { 25000000, new DivaPrayerGemPoint(){ Points = 25_000000, MaxUses = 14, Level = 1,} },
+ { 30000000, new DivaPrayerGemPoint(){ Points = 30_000000, MaxUses = 15, Level = 2,} },
+
+ { 35000000, new DivaPrayerGemPoint(){ Points = 35_000000, MaxUses = 16, Level = 2,} },
+ { 40000000, new DivaPrayerGemPoint(){ Points = 40_000000, MaxUses = 17, Level = 2,} },
+ { 45000000, new DivaPrayerGemPoint(){ Points = 45_000000, MaxUses = 18, Level = 2,} },
+ { 50000000, new DivaPrayerGemPoint(){ Points = 50_000000, MaxUses = 19, Level = 2,} },
+ { 55000000, new DivaPrayerGemPoint(){ Points = 55_000000, MaxUses = 20, Level = 3,} },
+
+ { 60000000, new DivaPrayerGemPoint(){ Points = 60_000_000, MaxUses = 21, Level = 3,} },
+ { 70000000, new DivaPrayerGemPoint(){ Points = 70_000_000, MaxUses = 22, Level = 3,} },
+ { 80000000, new DivaPrayerGemPoint(){ Points = 80_000_000, MaxUses = 23, Level = 3,} },
+ { 90000000, new DivaPrayerGemPoint(){ Points = 90_000_000, MaxUses = 24, Level = 3,} },
+ { 100000000, new DivaPrayerGemPoint(){ Points = 100_000_000, MaxUses = 25, Level = 3,} },
+ });
+}
diff --git a/MHFZ_Overlay/Models/Collections/Monsters.cs b/MHFZ_Overlay/Models/Collections/Monsters.cs
index ea0d4b54..0c69119d 100644
--- a/MHFZ_Overlay/Models/Collections/Monsters.cs
+++ b/MHFZ_Overlay/Models/Collections/Monsters.cs
@@ -47,7 +47,7 @@ public static class Monsters
{ 29, "Rocks" },
{ 30, "Ioprey" },
{ 31, "Iodrome" },
- { 32, "Pugis" },
+ { 32, "Poogies" },
{ 33, "Kirin" },
{ 34, "Cephalos" },
{ 35, "Giaprey / Giadrome" },
diff --git a/MHFZ_Overlay/Models/DivaPrayerGem.cs b/MHFZ_Overlay/Models/DivaPrayerGem.cs
new file mode 100644
index 00000000..f8f88f6c
--- /dev/null
+++ b/MHFZ_Overlay/Models/DivaPrayerGem.cs
@@ -0,0 +1,30 @@
+// © 2023 The mhfz-overlay developers.
+// Use of this source code is governed by a MIT license that can be
+// found in the LICENSE file.
+
+namespace MHFZ_Overlay.Models;
+
+using System;
+using MHFZ_Overlay.Models.Structures;
+
+// TODO: ORM
+public sealed class DivaPrayerGem
+{
+ public DivaPrayerGemType Type { get; set; }
+
+ public int Level { get; set; }
+
+ public int MaxLevel { get; set; }
+
+ public string Description { get; set; } = "None";
+
+ ///
+ /// Unused in official servers.
+ ///
+ public bool Unused { get; set; }
+
+ ///
+ /// Whether the gem affects the whole party or only the user.
+ ///
+ public bool PartyEffect { get; set; }
+}
diff --git a/MHFZ_Overlay/Models/DivaPrayerGemPoint.cs b/MHFZ_Overlay/Models/DivaPrayerGemPoint.cs
new file mode 100644
index 00000000..9b7b3ad5
--- /dev/null
+++ b/MHFZ_Overlay/Models/DivaPrayerGemPoint.cs
@@ -0,0 +1,20 @@
+// © 2023 The mhfz-overlay developers.
+// Use of this source code is governed by a MIT license that can be
+// found in the LICENSE file.
+
+namespace MHFZ_Overlay.Models;
+
+using System;
+using MHFZ_Overlay.Models.Structures;
+
+// TODO: ORM
+public sealed class DivaPrayerGemPoint
+{
+ public DivaPrayerGemColor Color { get; set; } = DivaPrayerGemColor.None;
+
+ public int Points { get; set; }
+
+ public int MaxUses { get; set; }
+
+ public int Level { get; set; }
+}
diff --git a/MHFZ_Overlay/Models/FastestRun.cs b/MHFZ_Overlay/Models/FastestRun.cs
index 27ff1f91..7bf7f3df 100644
--- a/MHFZ_Overlay/Models/FastestRun.cs
+++ b/MHFZ_Overlay/Models/FastestRun.cs
@@ -17,7 +17,7 @@ public sealed class FastestRun
public long QuestID { get; set; }
- public string YoutubeID { get; set; } = Messages.RickRollID;
+ public string YouTubeID { get; set; } = Messages.RickRollID;
public string FinalTimeDisplay { get; set; } = Messages.MaximumTimerPlaceholder;
diff --git a/MHFZ_Overlay/Models/QuestsActiveFeature.cs b/MHFZ_Overlay/Models/QuestsActiveFeature.cs
new file mode 100644
index 00000000..1a037d7c
--- /dev/null
+++ b/MHFZ_Overlay/Models/QuestsActiveFeature.cs
@@ -0,0 +1,17 @@
+// © 2023 The mhfz-overlay developers.
+// Use of this source code is governed by a MIT license that can be
+// found in the LICENSE file.
+
+namespace MHFZ_Overlay.Models;
+
+using System;
+
+// TODO: ORM
+public sealed class QuestsActiveFeature
+{
+ public long? QuestsActiveFeatureID { get; set; }
+
+ public long? ActiveFeature { get; set; }
+
+ public long? RunID { get; set; }
+}
diff --git a/MHFZ_Overlay/Models/QuestsCourse.cs b/MHFZ_Overlay/Models/QuestsCourse.cs
new file mode 100644
index 00000000..baca0c85
--- /dev/null
+++ b/MHFZ_Overlay/Models/QuestsCourse.cs
@@ -0,0 +1,17 @@
+// © 2023 The mhfz-overlay developers.
+// Use of this source code is governed by a MIT license that can be
+// found in the LICENSE file.
+
+namespace MHFZ_Overlay.Models;
+
+using System;
+
+// TODO: ORM
+public sealed class QuestsCourse
+{
+ public long? QuestsCourseID { get; set; }
+
+ public long? Rights { get; set; }
+
+ public long? RunID { get; set; }
+}
diff --git a/MHFZ_Overlay/Models/QuestsDiva.cs b/MHFZ_Overlay/Models/QuestsDiva.cs
new file mode 100644
index 00000000..0792c017
--- /dev/null
+++ b/MHFZ_Overlay/Models/QuestsDiva.cs
@@ -0,0 +1,23 @@
+// © 2023 The mhfz-overlay developers.
+// Use of this source code is governed by a MIT license that can be
+// found in the LICENSE file.
+
+namespace MHFZ_Overlay.Models;
+
+using System;
+
+// TODO: ORM
+public sealed class QuestsDiva
+{
+ public long? QuestsDivaID { get; set; }
+ public long? DivaSongBuffOn { get; set; }
+ public long? DivaPrayerGemRedSkill { get; set; }
+ public long? DivaPrayerGemRedLevel { get; set; }
+ public long? DivaPrayerGemYellowSkill { get; set; }
+ public long? DivaPrayerGemYellowLevel { get; set; }
+ public long? DivaPrayerGemGreenSkill { get; set; }
+ public long? DivaPrayerGemGreenLevel { get; set; }
+ public long? DivaPrayerGemBlueSkill { get; set; }
+ public long? DivaPrayerGemBlueLevel { get; set; }
+ public long? RunID { get; set; }
+}
diff --git a/MHFZ_Overlay/Models/QuestsGuildPoogie.cs b/MHFZ_Overlay/Models/QuestsGuildPoogie.cs
new file mode 100644
index 00000000..0cca5513
--- /dev/null
+++ b/MHFZ_Overlay/Models/QuestsGuildPoogie.cs
@@ -0,0 +1,21 @@
+// © 2023 The mhfz-overlay developers.
+// Use of this source code is governed by a MIT license that can be
+// found in the LICENSE file.
+
+namespace MHFZ_Overlay.Models;
+
+using System;
+
+// TODO: ORM
+public sealed class QuestsGuildPoogie
+{
+ public long? QuestsGuildPoogieID { get; set; }
+
+ public long? GuildPoogie1Skill { get; set; }
+
+ public long? GuildPoogie2Skill { get; set; }
+
+ public long? GuildPoogie3Skill { get; set; }
+
+ public long? RunID { get; set; }
+}
diff --git a/MHFZ_Overlay/Models/QuestsHalk.cs b/MHFZ_Overlay/Models/QuestsHalk.cs
new file mode 100644
index 00000000..1dc4f67d
--- /dev/null
+++ b/MHFZ_Overlay/Models/QuestsHalk.cs
@@ -0,0 +1,57 @@
+// © 2023 The mhfz-overlay developers.
+// Use of this source code is governed by a MIT license that can be
+// found in the LICENSE file.
+
+namespace MHFZ_Overlay.Models;
+
+using System;
+
+// TODO: ORM
+public sealed class QuestsHalk
+{
+ public long? QuestsHalkID { get; set; }
+
+ public long? HalkOn { get; set; }
+
+ public long? HalkPotEffectOn { get; set; }
+
+ public long? HalkFullness { get; set; }
+
+ public long? HalkLevel { get; set; }
+
+ public long? HalkIntimacy { get; set; }
+
+ public long? HalkHealth { get; set; }
+
+ public long? HalkAttack { get; set; }
+
+ public long? HalkDefense { get; set; }
+
+ public long? HalkIntellect { get; set; }
+
+ public long? HalkSkill1 { get; set; }
+
+ public long? HalkSkill2 { get; set; }
+
+ public long? HalkSkill3 { get; set; }
+
+ public long? HalkElementNone { get; set; }
+
+ public long? HalkFire { get; set; }
+
+ public long? HalkThunder { get; set; }
+
+ public long? HalkWater { get; set; }
+
+ public long? HalkIce { get; set; }
+
+ public long? HalkDragon { get; set; }
+
+ public long? HalkSleep { get; set; }
+
+ public long? HalkParalysis { get; set; }
+
+ public long? HalkPoison { get; set; }
+
+ public long? RunID { get; set; }
+}
diff --git a/MHFZ_Overlay/Models/QuestsOverlayHash.cs b/MHFZ_Overlay/Models/QuestsOverlayHash.cs
new file mode 100644
index 00000000..86788f7f
--- /dev/null
+++ b/MHFZ_Overlay/Models/QuestsOverlayHash.cs
@@ -0,0 +1,17 @@
+// © 2023 The mhfz-overlay developers.
+// Use of this source code is governed by a MIT license that can be
+// found in the LICENSE file.
+
+namespace MHFZ_Overlay.Models;
+
+using System;
+
+// TODO: ORM
+public sealed class QuestsOverlayHash
+{
+ public long? QuestsOverlayHashID { get; set; }
+
+ public string? OverlayHash { get; set; }
+
+ public long? RunID { get; set; }
+}
diff --git a/MHFZ_Overlay/Models/RecentRuns.cs b/MHFZ_Overlay/Models/RecentRuns.cs
index a8320aaf..3fa340b7 100644
--- a/MHFZ_Overlay/Models/RecentRuns.cs
+++ b/MHFZ_Overlay/Models/RecentRuns.cs
@@ -17,7 +17,7 @@ public sealed class RecentRuns
public long QuestID { get; set; }
- public string YoutubeID { get; set; } = Messages.RickRollID;
+ public string YouTubeID { get; set; } = Messages.RickRollID;
public string FinalTimeDisplay { get; set; } = Messages.MaximumTimerPlaceholder;
diff --git a/MHFZ_Overlay/Models/Structures/Bitfields.cs b/MHFZ_Overlay/Models/Structures/Bitfields.cs
index ee0fe56a..bc4dcc45 100644
--- a/MHFZ_Overlay/Models/Structures/Bitfields.cs
+++ b/MHFZ_Overlay/Models/Structures/Bitfields.cs
@@ -245,7 +245,7 @@ public enum QuestWeaponTypesDisabled : uint
Bow = 1024,
Tonfa = 2048,
SwitchAxeF = 4096,
- // MS Flag 64
+ // TODO MS Flag 64
}
///
@@ -391,3 +391,119 @@ public enum GauntletBoost : uint
Solstice = 2,
Musou = 4,
}
+
+///
+/// Course Rights first byte. Byte position 1.
+///
+[Flags]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum CourseRightsFirstByte : uint
+{
+ ///
+ /// or netcafe?
+ ///
+ [DefaultValue(None)]
+ None = 0,
+ Assist = 1,
+ N = 2,
+ Hiden = 4,
+ ///
+ /// or aid
+ ///
+ Support = 8,
+ NBoost = 16,
+ All = Assist | N | Hiden | Support | NBoost,
+}
+
+///
+/// Course Rights second byte. Byte position 0.
+///
+[Flags]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum CourseRightsSecondByte : uint
+{
+ [DefaultValue(None)]
+ None = 0,
+ UNK1 = 1,
+ Trial = 2,
+ HunterLife = 4,
+ Extra = 8,
+ UNK2 = 16,
+ UNK3 = 32,
+ Premium = 64,
+ All = UNK1 | Trial | HunterLife | Extra | UNK2 | UNK3 | Premium,
+}
+
+///
+/// TODO Run filters by buff.
+///
+[Flags]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum RunBuff : uint
+{
+ [DefaultValue(None)]
+ None = 0,
+ Halk = 1,
+ PoogieItem = 2,
+ DivaSong = 4,
+ HalkPotEffect = 8,
+ Bento = 16,
+ GuildPoogie = 32,
+ ActiveFeature = 64,
+ GuildFood = 128,
+ DivaSkill = 256,
+ SecretTechnique = 512,
+ DivaPrayerGem = 1024,
+ ///
+ /// Can come from hunter aid/support course.
+ ///
+ CourseAttackBoost = 2048,
+
+ // old categories
+ TimeAttack = PoogieItem | DivaSong | Bento,
+ FreestyleNoSecretTech = Halk | PoogieItem | DivaSong | Bento | GuildPoogie | ActiveFeature | GuildFood | DivaSkill | DivaPrayerGem,
+ FreestyleWithSecretTech = FreestyleNoSecretTech | SecretTechnique,
+}
+
+///
+/// Equipment type.
+///
+[Flags]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum EquipmentType : uint
+{
+ [DefaultValue(General)]
+ General = 0,
+ SP = 1,
+ Gou = 2,
+ Evolution = 4,
+ HC = 8,
+ UNK1 = 16,
+ Ravi = HC | UNK1,
+}
+
+///
+/// Active features enabled.
+///
+[Flags]
+[JsonConverter(typeof(JsonStringEnumConverter))]
+public enum ActiveFeature : uint
+{
+ [DefaultValue(None)]
+ None = 0,
+ GreatSword = 1,
+ HeavyBowgun = 2,
+ Hammer = 4,
+ Lance = 8,
+ SwordAndShield = 16,
+ LightBowgun = 32,
+ DualSwords = 64,
+ LongSword = 128,
+ HuntingHorn = 256,
+ Gunlance = 512,
+ Bow = 1024,
+ Tonfa = 2048,
+ SwitchAxeF = 4096,
+ MagnetSpike = 8192,
+ All = GreatSword | HeavyBowgun | Hammer | Lance | SwordAndShield | LightBowgun | DualSwords | LongSword | HuntingHorn | Gunlance | Bow | Tonfa | SwitchAxeF | MagnetSpike,
+}
diff --git a/MHFZ_Overlay/Models/Structures/Enums.cs b/MHFZ_Overlay/Models/Structures/Enums.cs
index dbe46e97..28417a4b 100644
--- a/MHFZ_Overlay/Models/Structures/Enums.cs
+++ b/MHFZ_Overlay/Models/Structures/Enums.cs
@@ -515,3 +515,332 @@ public enum FrontierMonsterType
Leviathan,
FangedWyvern,
}
+
+///
+/// Weapon and armor.
+///
+public enum EquipmentSlot
+{
+ None,
+ One,
+ Two,
+ Three
+}
+
+///
+///
+///
+public enum FrontierEquipmentType
+{
+ Legs,
+ Unk1,
+ Head,
+ Chest,
+ Arms,
+ Waist,
+ Melee,
+ Ranged,
+}
+
+///
+///
+///
+public enum FrontierItemIcon : uint
+{
+ SMOKE = 0x00, // Ex: Farcaster, Smoke Bomb
+ ORB = 0x01, // Ex: Paintball, Flash Bomb
+ BOMB = 0x02, // Ex: Small Barrel Bomb
+ MEAT = 0x03, // Ex: Raw Meat, Burnt Steak
+ FISH_BAIT = 0x04, // Ex: Cricket, Worm, Tuna Bait
+ FISH = 0x05, // Ex: Gormet Fish
+ BOX = 0x06, // Ex: Trap Kit
+ WHETSTONE = 0x07, // Ex: Whetstone
+ DUNG = 0x08, // Ex: Dung, Dung Bomb
+ MONSTER = 0x09, // Ex: Bullfango Head
+ BONES = 0x0A, // Ex: Sm Monster Bone
+ BINOCULARS = 0x0B, // Ex: Binoculars
+ MUSHROOM = 0x0C, // Ex: Blue Mushroom
+ BUGNET = 0x0D, // Ex: Bugnet
+ PELT = 0x0E, // Ex: Mosswine Hide, Bullfango Pelt
+ LEAF = 0x0F, // Ex: Herb
+ PICKAXE = 0x10, // Ex: Iron Pickaxe
+ BARREL = 0x11, // Ex: Small Barrel, Large Barrel
+ SEED = 0x12, // Ex: Paintberry, Power Seed, Scatternut
+ BBQ_SPIT = 0x13, // Ex: BBQ Spit
+ INSECT = 0x14, // Ex: Insect Husk, Thunderbug
+ TRAP = 0x15, // Ex: Pitfall Trap, Shock Trap
+ NET = 0x16, // Ex: Web, Net
+ SCALE = 0x17, // Ex: Broken Shell, Kut-Ku Scale
+ DRINK = 0x18, // Ex: Potion, Cold Drink, Demondrug
+ EGG = 0x19, // Ex: Monster Egg, Round Egg
+ AMMO = 0x1A, // Ex: Normal S LV1
+ STONE = 0x1B, // Ex: Stone, Iron Ore
+ HUSK = 0x1C, // Ex: Huskberry, Bone Husks
+ MAP = 0x1D, // Ex: Map
+ FLUTE = 0x1E, // Ex: Flute
+ FANG = 0x1F, // Ex: Wyvern Fang, Wyvern Claw
+ GRID = 0x20, // Ex: Honey
+ QUESTION_MARK = 0x21, // Ex: Garbage
+ COIN = 0x22, // Ex: N Medal, Hunting Medal
+ SAC = 0x23, // Ex: Catalyst, Screamer Sac, Might Pill
+ BOOK = 0x24, // Ex: Book of Combos
+ TICKET = 0x25, // Ex: Guild Ticket, Commendation, 30k Cheque
+ KNIFE = 0x26, // Ex: Throwing Knife
+ MUSIC_SHEET = 0x29, // Ex: HH Info
+ JEWEL = 0x2B, // Ex: Aquaglow Jewel, Attack 1 Deco
+ HOUSE = 0x2C, // Ex: House Expansion 1
+ PlANT = 0x2D, // Ex: Green Onion
+ MOCHA = 0x2F, // Ex: Mocha Green
+ POT = 0x30, // Ex: Mocha Pot
+ BOOMERANG = 0x31, // Ex: Boomerang
+ COATING = 0x32, // Ex: Power Coating, Poison Coating
+ EMPTY_BOTTLE = 0x33, // Ex: Empty Bottle
+ CARAPACE = 0x34, // Ex: Small LobsterShl, Hermitaur Shell
+ /* Probably wrong
+ COMPASS = 0x35, // Datamined
+ QUARTER_CIRCLE = 0x36, // Datamined
+ CROSS = 0x37, // Datamined
+ CROSSED_OUT = 0x3C, // Datamined
+ MYSTERY_WEAPON = 0x3D, // Datamined
+ GREATSWORD = 0x3E, // Datamined
+ HEAVY_BOWGUN = 0x3F, // Datamined
+ HAMMER = 0x40, // Datamined
+ LANCE = 0x41, // Datamined
+ SWORD_SHIELD = 0x42, // Datamined
+ LIGHT_BOWGUN = 0x43, // Datamined
+ DUAL_BLADES = 0x44, // Datamined
+ LONGSWORD = 0x45, // Datamined
+ HUNTING_HORN = 0x46, // Datamined
+ GUNLANCE = 0x47, // Datamined
+ BOW = 0x48, // Datamined
+ LEGWEAR = 0x49, // Datamined
+ EQUIPED_MARKER = 0x4A, // Datamined
+ HEADWEAR = 0x4B, // Datamined
+ BODYWEAR = 0x4C, // Datamined
+ ARMWEAR = 0x4D, // Datamined
+ WAISTWEAR = 0x4E, // Datamined
+ */
+ SWORD_CRYSTAL = 0x4F, // Ex: Bomb S.Crystal
+ POTION = 0x50, // Ex: Halk Pot
+ FRUIT = 0x52, // Ex: Shiriagari Fruit
+ /* Definitely wrong
+ SIGIL = 0x54, // Datamined
+ G_RANK_MARKER = 0x58, // Datamined
+ CAMERA = 0x5B, // Datamined
+ CORNER_ARROWS = 0x5C, // Datamined
+ TONFAS = 0x5D, // Datamined
+ TREASURE = 0x5E, // Datamined
+ PARTNYA_SWORD = 0x60, // Datamined
+ PARTNYA_CLUB = 0x61, // Datamined
+ PARTNYA_HELM = 0x62, // Datamined
+ PARTNYA_CHEST = 0x63, // Datamined
+ PARTNYA_HEAD = 0x64, // Datamined
+ PARTNYA_CROWN = 0x65, // Datamined
+ PARTNYA_MARKER = 0x66, // Datamined
+ TOWER_MARKER = 0x67, // Datamined
+ */
+ TOWER_W_SIGIL = 0x56, // Ex: (SnS) Beam Slash
+ TOWER_A_SIGIL = 0x5B, // Ex: Skill UP Sigil
+ MANTLE = 0x5C, // Ex: Narga Mantle
+ ARMOR_SPHERE = 0x5D, // Ex: Armor Sphere
+};
+
+///
+///
+///
+public enum FrontierElement
+{
+ None,
+ Fire,
+ Water,
+ Thunder,
+ Dragon,
+ Ice,
+ Flame,
+ Light,
+ ThunderPole,
+ Tenshou,
+ Okiko,
+ BlackFlame,
+ Kanade,
+ Darkness,
+ CrimsonDemon,
+ Wind,
+ Sound,
+ BurningZero,
+ EmperorsRoar,
+}
+
+///
+///
+///
+public enum FrontierStatusAilment
+{
+ None,
+ Poison,
+ Paralysis,
+ Sleep,
+ Blast,
+}
+
+///
+///
+///
+public enum FrontierMap : uint
+{
+ Siege_Fortress_Day = 1,
+ Forest_and_Hills_Day = 2,
+ Desert_Day = 3,
+ Swamp_Day = 4,
+ Volcano_Day = 5,
+ Jungle_Day = 6,
+ Castle_Schrade = 7,
+ Crimson_Battleground = 8,
+ Arena_with_Ledge_Day = 9,
+ Arena_with_Pillar_Day = 10,
+ Snowy_Mountains_Day = 11,
+ Town_Siege_Day = 12,
+ Tower_1 = 13,
+ Tower_2 = 14,
+ Tower_3 = 15,
+ Forest_and_Hills_Night = 16,
+ Desert_Night = 17,
+ Swamp_Night = 18,
+ Volcano_Night = 19,
+ Jungle_Night = 20,
+ Snowy_Mountains_Night = 21,
+ Town_Siege_night = 22,
+ Siege_Fortress_Night = 23,
+ Arena_with_Ledge_Night = 24,
+ Arena_with_Pillar_Night = 25,
+ Great_Forest_Day = 26,
+ Great_Forest_Night = 27,
+ Volcano_2_Day = 28,
+ Volcano_2_Night = 29,
+ Jungle_Dream = 30,
+ Gorge_Day = 31,
+ Gorge_Night = 32,
+ Battlefield_Day = 35,
+ Top_of_Great_Forest = 44,
+ Caravan_Balloon_Day = 45,
+ Caravan_Balloon_Night = 46,
+ Solitude_Isle_1 = 47,
+ Solitude_Isle_2 = 48,
+ Solitude_Isle_3 = 49,
+ Highlands_Day = 50,
+ Highlands_Night = 51,
+ Tower_with_Nesthole = 52,
+ Arena_with_Moat_Day = 53,
+ Arena_with_Moat_Night = 54,
+ Fortress_Day = 55,
+ Fortress_Night = 56,
+ Tidal_Island_Day = 57,
+ Tidal_Island_Night = 58,
+ Polar_Sea_Day = 60,
+ Polar_Sea_Night = 61,
+ Worlds_End = 62,
+ Large_Airship = 63,
+ Flower_Field_Day = 64,
+ Flower_Field_Night = 65,
+ Deep_Crater = 66,
+ Bamboo_Forest_Day = 67,
+ Bamboo_Forest_Night = 68,
+ Battlefield_2_Day = 69,
+ Unimplemented_map = 70,
+ Ist_Dist_Tower_1 = 71,
+ Ist_Dist_Tower_2 = 72,
+ Tnd_Dist_Tower_1 = 73,
+ Tnd_Dist_Tower_2 = 74,
+ Urgent_Tower = 75,
+ n3rd_Dist_Tower = 76,
+ n3rd_Dist_Tower_2 = 77,
+ n4th_Dist_Tower = 78,
+ White_Lake_Day = 79,
+ White_Lake_Night = 80,
+ Solitude_Depths_Slay_1 = 81,
+ Solitude_Depths_Slay_2 = 82,
+ Solitude_Depths_Slay_3 = 83,
+ Solitude_Depths_Slay_4 = 84,
+ Solitude_Depths_Slay_5 = 85,
+ Solitude_Depths_Support_1 = 86,
+ Solitude_Depths_Support_2 = 87,
+ Solitude_Depths_Support_3 = 88,
+ Solitude_Depths_Support_4 = 89,
+ Solitude_Depths_Support_5 = 90,
+ Cloud_Viewing_Fortress = 91,
+ Painted_Falls_Day = 92,
+ Painted_Falls_Night = 93,
+ Sanctuary = 94,
+ Hunters_Road = 95,
+ Sacred_Pinnacle = 96,
+ Historic_Site = 97
+};
+
+///
+///
+///
+public enum FrontierIconColor
+{
+ White = 0,
+ Red = 1,
+ Green = 2,
+ Blue = 3,
+ Yellow = 4,
+ Purple = 5,
+ LightBlue = 6,
+ Unk1 = 7,
+ Pink = 8,
+ Unk2 = 9,
+ Gray = 10,
+}
+
+///
+///
+///
+public enum FrontierMonsterRank
+{
+ Unk1 = -1,
+ LowRank = 0,
+ HighRank = 1,
+ Gou = 3,
+ GRank = 7,
+}
+
+public enum DivaPrayerGemType
+{
+ None = 0,
+ WindStorm = 1,
+ Agility = 2,
+ SeveringPower = 3,
+ Elegance = 4,
+ Earth = 5,
+ Heaven = 6,
+ Tempest = 7,
+ CuttingEdge = 8,
+ Striking = 9,
+ RisingBullet = 10,
+ StatusLength = 11,
+ Abnormality = 12,
+ Lethality = 13,
+ HeavyThunder = 14,
+ Unshakable = 15,
+ Ringing = 16,
+ Mobilisation = 17,
+ Protection = 18,
+ PowerfulStrikes = 19,
+ Fireproof = 20,
+ Waterproof = 21,
+ Iceproof = 22,
+ Dragonproof = 23,
+ Thunderproof = 24,
+ Immunity = 25,
+}
+
+public enum DivaPrayerGemColor
+{
+ None,
+ Red,
+ Yellow,
+ Green,
+ Blue,
+}
diff --git a/MHFZ_Overlay/Services/AchievementService.cs b/MHFZ_Overlay/Services/AchievementService.cs
index 9c929ecc..f22af6ec 100644
--- a/MHFZ_Overlay/Services/AchievementService.cs
+++ b/MHFZ_Overlay/Services/AchievementService.cs
@@ -12,12 +12,14 @@ namespace MHFZ_Overlay.Services;
using System.Linq;
using System.Windows;
using System.Windows.Media;
+using EZlion.Mapper;
using MHFZ_Overlay;
using MHFZ_Overlay.Models;
using MHFZ_Overlay.Models.Collections;
using MHFZ_Overlay.Models.Constant;
using MHFZ_Overlay.Models.Structures;
using MHFZ_Overlay.Services.Contracts;
+using MHFZ_Overlay.ViewModels.Windows;
using MHFZ_Overlay.Views.Windows;
using Newtonsoft.Json;
using NLog;
@@ -2247,7 +2249,7 @@ join playerGear in databaseManagerInstance.AllPlayerGear on quest.RunID equals p
}
case 342:
- if (dataLoader.Model.GetOverlayMode() is OverlayMode.Freestyle or OverlayMode.FreestyleSecretTech )
+ if (dataLoader.Model.GetOverlayMode() is OverlayMode.Freestyle or OverlayMode.FreestyleSecretTech or OverlayMode.TimeAttack)
{
return true;
}
@@ -2646,6 +2648,88 @@ join styleRankSkills in databaseManagerInstance.AllStyleRankSkills on quest.RunI
{
return false;
}
+ case 441:
+ if (databaseManagerInstance.AllQuestsDiva.Count(questsDiva => questsDiva.DivaSongBuffOn > 0) >= 100)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ case 442:
+ if (databaseManagerInstance.AllQuestsDiva.Count(questsDiva => (questsDiva.DivaPrayerGemRedLevel > 0 && questsDiva.DivaPrayerGemRedSkill > 0) || (questsDiva.DivaPrayerGemYellowLevel > 0 && questsDiva.DivaPrayerGemYellowSkill > 0) || (questsDiva.DivaPrayerGemGreenLevel > 0 && questsDiva.DivaPrayerGemGreenSkill > 0) || (questsDiva.DivaPrayerGemBlueLevel > 0 && questsDiva.DivaPrayerGemBlueSkill > 0)) >= 777)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ case 443:
+ if (databaseManagerInstance.AllQuestsGuildPoogie.Count(questsGuildPoogie => questsGuildPoogie.GuildPoogie1Skill > 0 || questsGuildPoogie.GuildPoogie2Skill > 0 || questsGuildPoogie.GuildPoogie3Skill > 0) >= 100)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ case 444:
+ return databaseManagerInstance.AllQuestsHalk.Any(quest => quest.HalkLevel == 3);
+ case 445:
+ // Initialize the array with zeros
+ int[] weaponUsageArray = new int[14];
+
+ foreach (var playerGear in databaseManagerInstance.AllPlayerGear)
+ {
+ // Find the corresponding active feature for the run
+ var activeFeature = databaseManagerInstance.AllQuestsActiveFeature.FirstOrDefault(af => af.RunID == playerGear.RunID);
+
+ // If an active feature is found, update the array based on the weapon type
+ if (activeFeature != null)
+ {
+ var weaponType = (FrontierWeaponType)playerGear.WeaponTypeID;
+
+ if (activeFeature.ActiveFeature == null)
+ {
+ activeFeature.ActiveFeature = 0;
+ }
+
+ //if (dataLoader.Model.HasBitfieldFlag((uint)activeFeature.ActiveFeature, (ActiveFeature)weaponType, (uint)ActiveFeature.All))
+ if (dataLoader.Model.IsActiveFeatureOn((long)activeFeature.ActiveFeature, playerGear.WeaponTypeID))
+ {
+ weaponUsageArray[(int)weaponType] = 1;
+ }
+ }
+ }
+
+ return weaponUsageArray.All(n => n == 1);
+ case 446: // TODO test
+ var maxTrueRaw = 8_000;
+
+ var foundQuestData = from quest in databaseManagerInstance.AllQuests
+ where (quest.AttackBuffDictionary != null &&
+ JsonConvert.DeserializeObject>(quest.AttackBuffDictionary) != null)
+ select quest;
+
+ if (foundQuestData == null)
+ {
+ return false;
+ }
+
+ var foundMaxTrueRaw = from quest in databaseManagerInstance.AllQuests
+ where (quest.AttackBuffDictionary != null && JsonConvert.DeserializeObject>(quest.AttackBuffDictionary)?.Values.Max() >= maxTrueRaw)
+ select quest;
+
+ if (foundMaxTrueRaw != null && foundMaxTrueRaw.Any())
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
}
}
diff --git a/MHFZ_Overlay/Services/DatabaseService.cs b/MHFZ_Overlay/Services/DatabaseService.cs
index 40d14d75..8d15a51f 100644
--- a/MHFZ_Overlay/Services/DatabaseService.cs
+++ b/MHFZ_Overlay/Services/DatabaseService.cs
@@ -32,11 +32,13 @@ namespace MHFZ_Overlay.Services;
using MHFZ_Overlay.Models.Constant;
using MHFZ_Overlay.Models.Messengers;
using MHFZ_Overlay.Models.Structures;
+using MHFZ_Overlay.ViewModels.Windows;
using MHFZ_Overlay.Views.Windows;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NLog;
using Octokit;
+using SharpCompress.Common;
using Wpf.Ui.Common;
using Wpf.Ui.Controls;
using Formatting = Newtonsoft.Json.Formatting;
@@ -86,6 +88,15 @@ public sealed class DatabaseService
public HashSet AllQuestsToggleMode { get; set; }
+ public HashSet AllQuestsActiveFeature { get; set; }
+
+ public HashSet AllQuestsHalk { get; set; }
+
+ public HashSet AllQuestsDiva { get; set; }
+
+ public HashSet AllQuestsGuildPoogie { get; set; }
+
+
public TimeSpan SnackbarTimeOut { get; set; } = TimeSpan.FromSeconds(5);
private string? connectionString { get; set; }
@@ -484,6 +495,7 @@ public void InsertPersonalBest(DataLoader dataLoader, long currentPersonalBest,
var createdAt = DateTime.UtcNow;
var createdBy = ViewModels.Windows.AddressModel.GetFullCurrentProgramVersion();
var playerID = 1;
+ var partySize = dataLoader.Model.PartySize();
using (var transaction = conn.BeginTransaction())
{
@@ -708,8 +720,6 @@ public void InsertPersonalBest(DataLoader dataLoader, long currentPersonalBest,
actualOverlayMode = GetActualOverlayMode(dataLoader);
- var partySize = dataLoader.Model.PartySize();
-
var monster1HPDictionary = dataLoader.Model.Monster1HPDictionary;
var monster2HPDictionary = dataLoader.Model.Monster2HPDictionary;
var monster3HPDictionary = dataLoader.Model.Monster3HPDictionary;
@@ -806,82 +816,85 @@ public void InsertPersonalBest(DataLoader dataLoader, long currentPersonalBest,
runID = Convert.ToInt32(cmd.ExecuteScalar(), CultureInfo.InvariantCulture);
}
- if (dataLoader.Model.PartySize() == 1)
+ long personalBest = 0;
+ var weaponType = dataLoader.Model.WeaponType();
+ var improvedPersonalBest = false;
+
+ using (var cmd = new SQLiteCommand(
+ @"SELECT
+ TimeLeft,
+ FinalTimeValue,
+ FinalTimeDisplay,
+ ActualOverlayMode,
+ PartySize,
+ pg.WeaponTypeID
+ FROM
+ Quests q
+ JOIN
+ PlayerGear pg ON q.RunID = pg.RunID
+ WHERE
+ q.QuestID = @questID
+ AND pg.WeaponTypeID = @weaponTypeID
+ AND q.ActualOverlayMode = @category
+ AND q.PartySize = @partySize
+ ORDER BY
+ FinalTimeValue ASC
+ LIMIT 1", conn))
{
- long personalBest = 0;
- var weaponType = dataLoader.Model.WeaponType();
- var improvedPersonalBest = false;
+ cmd.Parameters.AddWithValue("@questID", questID);
+ cmd.Parameters.AddWithValue("@weaponTypeID", weaponType);
+ cmd.Parameters.AddWithValue("@category", actualOverlayMode);
+ cmd.Parameters.AddWithValue("@partySize", partySize);
- using (var cmd = new SQLiteCommand(
- @"SELECT
- TimeLeft,
- FinalTimeValue,
- FinalTimeDisplay,
- ActualOverlayMode,
- pg.WeaponTypeID
- FROM
- Quests q
- JOIN
- PlayerGear pg ON q.RunID = pg.RunID
- WHERE
- QuestID = @questID
- AND pg.WeaponTypeID = @weaponTypeID
- AND ActualOverlayMode = @category
- AND PartySize = 1
- ORDER BY
- FinalTimeValue ASC
- LIMIT 1", conn))
+ var reader = cmd.ExecuteReader();
+ if (reader.Read())
{
- cmd.Parameters.AddWithValue("@questID", questID);
- cmd.Parameters.AddWithValue("@weaponTypeID", weaponType);
- cmd.Parameters.AddWithValue("@category", actualOverlayMode);
-
- var reader = cmd.ExecuteReader();
- if (reader.Read())
- {
- long time = 0;
- time = reader.GetInt64(reader.GetOrdinal("FinalTimeValue"));
- personalBest = time;
- }
+ long time = 0;
+ time = reader.GetInt64(reader.GetOrdinal("FinalTimeValue"));
+ personalBest = time;
}
+ }
- sql = @"INSERT INTO PersonalBests(
- RunID,
- Attempts
- ) VALUES (
- @RunID,
- @Attempts)";
- using (var cmd = new SQLiteCommand(sql, conn))
+ sql = @"INSERT INTO PersonalBests(
+ RunID,
+ Attempts,
+ PartySize
+ ) VALUES (
+ @RunID,
+ @Attempts,
+ @PartySize)";
+ using (var cmd = new SQLiteCommand(sql, conn))
+ {
+ if (finalTimeValue < personalBest || personalBest == 0)
{
- if (finalTimeValue < personalBest || personalBest == 0)
- {
- improvedPersonalBest = true;
- cmd.Parameters.AddWithValue("@RunID", runID);
- cmd.Parameters.AddWithValue("@Attempts", attempts);
+ improvedPersonalBest = true;
+ cmd.Parameters.AddWithValue("@RunID", runID);
+ cmd.Parameters.AddWithValue("@Attempts", attempts);
+ cmd.Parameters.AddWithValue("@PartySize", partySize);
- // Execute the stored procedure
- cmd.ExecuteNonQuery();
- Logger.Debug("Inserted into PersonalBests table");
- }
+ // Execute the stored procedure
+ cmd.ExecuteNonQuery();
+ Logger.Debug("Inserted into PersonalBests table");
}
+ }
- if (improvedPersonalBest)
+ if (improvedPersonalBest)
+ {
+ sql = @"UPDATE PersonalBestAttempts
+ SET
+ Attempts = 0
+ WHERE
+ (QuestID, WeaponTypeID, ActualOverlayMode, PartySize) = (@QuestID, @WeaponTypeID, @ActualOverlayMode, @PartySize)";
+ using (var cmd = new SQLiteCommand(sql, conn))
{
- sql = @"UPDATE PersonalBestAttempts
- SET
- Attempts = 0
- WHERE
- (QuestID, WeaponTypeID, ActualOverlayMode) = (@QuestID, @WeaponTypeID, @ActualOverlayMode)";
- using (var cmd = new SQLiteCommand(sql, conn))
- {
- cmd.Parameters.AddWithValue("@QuestID", questID);
- cmd.Parameters.AddWithValue("@WeaponTypeID", weaponType);
- cmd.Parameters.AddWithValue("@ActualOverlayMode", actualOverlayMode);
+ cmd.Parameters.AddWithValue("@QuestID", questID);
+ cmd.Parameters.AddWithValue("@WeaponTypeID", weaponType);
+ cmd.Parameters.AddWithValue("@ActualOverlayMode", actualOverlayMode);
+ cmd.Parameters.AddWithValue("@PartySize", partySize);
- // Execute the stored procedure
- cmd.ExecuteNonQuery();
- Logger.Debug("Updated PersonalBestAttempts table");
- }
+ // Execute the stored procedure
+ cmd.ExecuteNonQuery();
+ Logger.Debug("Updated PersonalBestAttempts table");
}
}
@@ -1811,6 +1824,217 @@ FinalTimeValue ASC
Logger.Debug("Inserted into QuestsToggleMode table");
+ sql = @"INSERT INTO QuestsCourse (
+ Rights,
+ RunID
+ ) VALUES (
+ @Rights,
+ @RunID
+ )";
+
+ using (var cmd = new SQLiteCommand(sql, conn))
+ {
+ var rights = model.Rights();
+
+ cmd.Parameters.AddWithValue("@Rights", rights);
+ cmd.Parameters.AddWithValue("@RunID", runID);
+ cmd.ExecuteNonQuery();
+ }
+
+ Logger.Debug("Inserted into QuestsCourse table");
+
+ sql = @"INSERT INTO QuestsOverlayHash (
+ OverlayHash,
+ RunID
+ ) VALUES (
+ @OverlayHash,
+ @RunID
+ )";
+
+ using (var cmd = new SQLiteCommand(sql, conn))
+ {
+ var hash = GetOverlayHash();
+
+ cmd.Parameters.AddWithValue("@OverlayHash", hash);
+ cmd.Parameters.AddWithValue("@RunID", runID);
+ cmd.ExecuteNonQuery();
+ }
+
+ Logger.Debug("Inserted into QuestsOverlayHash table");
+
+ sql = @"INSERT INTO QuestsActiveFeature (
+ ActiveFeature,
+ RunID
+ ) VALUES (
+ @ActiveFeature,
+ @RunID
+ )";
+
+ using (var cmd = new SQLiteCommand(sql, conn))
+ {
+ var activeFeature = dataLoader.Model.GetActiveFeature();
+
+ cmd.Parameters.AddWithValue("@ActiveFeature", activeFeature);
+ cmd.Parameters.AddWithValue("@RunID", runID);
+ cmd.ExecuteNonQuery();
+ }
+
+ Logger.Debug("Inserted into QuestsActiveFeature table");
+
+ sql = @"INSERT INTO QuestsGuildPoogie (
+ GuildPoogie1Skill,
+ GuildPoogie2Skill,
+ GuildPoogie3Skill,
+ RunID
+ ) VALUES (
+ @GuildPoogie1Skill,
+ @GuildPoogie2Skill,
+ @GuildPoogie3Skill,
+ @RunID
+ )";
+
+ using (var cmd = new SQLiteCommand(sql, conn))
+ {
+ cmd.Parameters.AddWithValue("@GuildPoogie1Skill", model.GuildPoogie1Skill());
+ cmd.Parameters.AddWithValue("@GuildPoogie2Skill", model.GuildPoogie2Skill());
+ cmd.Parameters.AddWithValue("@GuildPoogie3Skill", model.GuildPoogie3Skill());
+ cmd.Parameters.AddWithValue("@RunID", runID);
+ cmd.ExecuteNonQuery();
+ }
+
+ Logger.Debug("Inserted into QuestsGuildPoogie table");
+
+ sql = @"INSERT INTO QuestsHalk (
+ HalkOn,
+ HalkPotEffectOn,
+ HalkFullness,
+ HalkLevel,
+ HalkIntimacy,
+ HalkHealth,
+ HalkAttack,
+ HalkDefense,
+ HalkIntellect,
+ HalkSkill1,
+ HalkSkill2,
+ HalkSkill3,
+ HalkElementNone,
+ HalkFire,
+ HalkThunder,
+ HalkWater,
+ HalkIce,
+ HalkDragon,
+ HalkSleep,
+ HalkParalysis,
+ HalkPoison,
+ RunID
+ ) VALUES (
+ @HalkOn,
+ @HalkPotEffectOn,
+ @HalkFullness,
+ @HalkLevel,
+ @HalkIntimacy,
+ @HalkHealth,
+ @HalkAttack,
+ @HalkDefense,
+ @HalkIntellect,
+ @HalkSkill1,
+ @HalkSkill2,
+ @HalkSkill3,
+ @HalkElementNone,
+ @HalkFire,
+ @HalkThunder,
+ @HalkWater,
+ @HalkIce,
+ @HalkDragon,
+ @HalkSleep,
+ @HalkParalysis,
+ @HalkPoison,
+ @RunID
+ )";
+
+ using (var cmd = new SQLiteCommand(sql, conn))
+ {
+ cmd.Parameters.AddWithValue("@HalkOn", model.HalkOn());
+ cmd.Parameters.AddWithValue("@HalkPotEffectOn", model.HalkPotEffectOn());
+ cmd.Parameters.AddWithValue("@HalkFullness", model.HalkFullness());
+ cmd.Parameters.AddWithValue("@HalkLevel", model.HalkLevel());
+ cmd.Parameters.AddWithValue("@HalkIntimacy", model.HalkIntimacy());
+ cmd.Parameters.AddWithValue("@HalkHealth", model.HalkHealth());
+ cmd.Parameters.AddWithValue("@HalkAttack", model.HalkAttack());
+ cmd.Parameters.AddWithValue("@HalkDefense", model.HalkDefense());
+ cmd.Parameters.AddWithValue("@HalkIntellect", model.HalkIntellect());
+ cmd.Parameters.AddWithValue("@HalkSkill1", model.HalkSkill1());
+ cmd.Parameters.AddWithValue("@HalkSkill2", model.HalkSkill2());
+ cmd.Parameters.AddWithValue("@HalkSkill3", model.HalkSkill3());
+ cmd.Parameters.AddWithValue("@HalkElementNone", model.HalkElementNone());
+ cmd.Parameters.AddWithValue("@HalkFire", model.HalkFire());
+ cmd.Parameters.AddWithValue("@HalkThunder", model.HalkThunder());
+ cmd.Parameters.AddWithValue("@HalkWater", model.HalkWater());
+ cmd.Parameters.AddWithValue("@HalkIce", model.HalkIce());
+ cmd.Parameters.AddWithValue("@HalkDragon", model.HalkDragon());
+ cmd.Parameters.AddWithValue("@HalkSleep", model.HalkSleep());
+ cmd.Parameters.AddWithValue("@HalkParalysis", model.HalkParalysis());
+ cmd.Parameters.AddWithValue("@HalkPoison", model.HalkPoison());
+ cmd.Parameters.AddWithValue("@RunID", runID);
+
+ cmd.ExecuteNonQuery();
+ }
+
+ Logger.Debug("Inserted into QuestsHalk table");
+
+ sql = @"INSERT INTO QuestsDiva (
+ DivaSongBuffOn,
+ DivaPrayerGemRedSkill,
+ DivaPrayerGemRedLevel,
+ DivaPrayerGemYellowSkill,
+ DivaPrayerGemYellowLevel,
+ DivaPrayerGemGreenSkill,
+ DivaPrayerGemGreenLevel,
+ DivaPrayerGemBlueSkill,
+ DivaPrayerGemBlueLevel,
+ RunID
+ ) VALUES (
+ @DivaSongBuffOn,
+ @DivaPrayerGemRedSkill,
+ @DivaPrayerGemRedLevel,
+ @DivaPrayerGemYellowSkill,
+ @DivaPrayerGemYellowLevel,
+ @DivaPrayerGemGreenSkill,
+ @DivaPrayerGemGreenLevel,
+ @DivaPrayerGemBlueSkill,
+ @DivaPrayerGemBlueLevel,
+ @RunID
+ )";
+
+ using (var cmd = new SQLiteCommand(sql, conn))
+ {
+ // TODO test
+ cmd.Parameters.AddWithValue("@DivaSongBuffOn", model.DivaSongActive);
+ cmd.Parameters.AddWithValue("@DivaPrayerGemRedSkill", model.DivaPrayerGemRedSkill());
+ cmd.Parameters.AddWithValue("@DivaPrayerGemRedLevel", model.DivaPrayerGemRedLevel());
+ cmd.Parameters.AddWithValue("@DivaPrayerGemYellowSkill", model.DivaPrayerGemYellowSkill());
+ cmd.Parameters.AddWithValue("@DivaPrayerGemYellowLevel", model.DivaPrayerGemYellowLevel());
+ cmd.Parameters.AddWithValue("@DivaPrayerGemGreenSkill", model.DivaPrayerGemGreenSkill());
+ cmd.Parameters.AddWithValue("@DivaPrayerGemGreenLevel", model.DivaPrayerGemGreenLevel());
+ cmd.Parameters.AddWithValue("@DivaPrayerGemBlueSkill", model.DivaPrayerGemBlueSkill());
+ cmd.Parameters.AddWithValue("@DivaPrayerGemBlueLevel", model.DivaPrayerGemBlueLevel());
+ cmd.Parameters.AddWithValue("@RunID", runID);
+ cmd.ExecuteNonQuery();
+ }
+
+ Logger.Debug("Inserted into QuestsDiva table");
+
+
+
+
+
+
+
+
+ // TODO more tables
+
+
+
var gearName = s.GearDescriptionExport;
if (string.IsNullOrEmpty(gearName))
{
@@ -1819,9 +2043,9 @@ FinalTimeValue ASC
var weaponTypeID = model.WeaponType();
var weaponClassID = weaponTypeID;
- var weaponSlot1 = model.GetDecoName(model.WeaponDeco1ID(), 1); // no sigils in database ig
- var weaponSlot2 = model.GetDecoName(model.WeaponDeco2ID(), 2);
- var weaponSlot3 = model.GetDecoName(model.WeaponDeco3ID(), 3);
+ var weaponSlot1 = model.GetDecoName(model.WeaponDeco1ID(), EquipmentSlot.One); // no sigils in database ig
+ var weaponSlot2 = model.GetDecoName(model.WeaponDeco2ID(), EquipmentSlot.Two);
+ var weaponSlot3 = model.GetDecoName(model.WeaponDeco3ID(), EquipmentSlot.Three);
var headID = model.ArmorHeadID();
var headSlot1 = model.ArmorHeadDeco1ID();
var headSlot2 = model.ArmorHeadDeco2ID();
@@ -1846,7 +2070,7 @@ FinalTimeValue ASC
var cuffSlot2 = model.Cuff2ID();
var styleID = model.WeaponStyle();
var weaponIconID = weaponTypeID;
- var divaSkillID = model.DivaSkill();
+ var divaSkillID = model.DivaSkillUsesLeft() > 0 ? model.DivaSkill() : 0;
var guildFoodID = model.GuildFoodSkill();
var poogieItemID = model.PoogieItemUseID();
@@ -2251,6 +2475,10 @@ private void UpdateHashSets(SQLiteConnection conn)
var lastGachaCard = this.GetLastGachaCard(conn);
var lastPlayerInventory = this.GetLastPlayerInventory(conn);
var lastQuestsToggleMode = this.GetLastQuestsToggleMode(conn);
+ var lastQuestsActiveFeature = this.GetLastQuestsActiveFeature(conn);
+ var lastQuestsDiva = this.GetLastQuestsDiva(conn);
+ var lastQuestsHalk = this.GetLastQuestsHalk(conn);
+ var lastQuestsGuildPoogie = this.GetLastQuestsGuildPoogie(conn);
if (lastQuest.RunID != 0)
{
@@ -2386,6 +2614,42 @@ private void UpdateHashSets(SQLiteConnection conn)
Logger.Warn(CultureInfo.InvariantCulture, "Last quests toggle mode already found in hash set");
}
}
+
+ if (lastQuestsHalk.QuestsHalkID != 0)
+ {
+ var questsHalkAdded = this.AllQuestsHalk.Add(lastQuestsHalk);
+ if (!questsHalkAdded)
+ {
+ Logger.Warn(CultureInfo.InvariantCulture, "Last quests halk already found in hash set");
+ }
+ }
+
+ if (lastQuestsDiva.QuestsDivaID != 0)
+ {
+ var questsDivaAdded = this.AllQuestsDiva.Add(lastQuestsDiva);
+ if (!questsDivaAdded)
+ {
+ Logger.Warn(CultureInfo.InvariantCulture, "Last quests diva already found in hash set");
+ }
+ }
+
+ if (lastQuestsActiveFeature.QuestsActiveFeatureID != 0)
+ {
+ var questsActiveFeatureAdded = this.AllQuestsActiveFeature.Add(lastQuestsActiveFeature);
+ if (!questsActiveFeatureAdded)
+ {
+ Logger.Warn(CultureInfo.InvariantCulture, "Last quests active feature already found in hash set");
+ }
+ }
+
+ if (lastQuestsGuildPoogie.QuestsGuildPoogieID != 0)
+ {
+ var questsGuildPoogieAdded = this.AllQuestsGuildPoogie.Add(lastQuestsGuildPoogie);
+ if (!questsGuildPoogieAdded)
+ {
+ Logger.Warn(CultureInfo.InvariantCulture, "Last quests guild poogie already found in hash set");
+ }
+ }
}
private void CreateDatabaseTriggers(SQLiteConnection conn)
@@ -2409,6 +2673,7 @@ private void CreateDatabaseTriggers(SQLiteConnection conn)
// bingo
// mezfesminigames
// mezfes
+ // run buffs tables: prayer gem, guild poogie, halk, active feature, etc.
using (var cmd = new SQLiteCommand(conn))
{
cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_audit_deletion
@@ -2651,8 +2916,8 @@ AFTER DELETE ON Overlay
using (var cmd = new SQLiteCommand(conn))
{
- cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_bingo_updates
- AFTER UPDATE ON Bingo
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_quests_course_updates
+ AFTER UPDATE ON QuestsCourse
BEGIN
SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
END;";
@@ -2661,8 +2926,8 @@ AFTER UPDATE ON Bingo
using (var cmd = new SQLiteCommand(conn))
{
- cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_bingo_deletion
- AFTER DELETE ON Bingo
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_quests_course_deletion
+ AFTER DELETE ON QuestsCourse
BEGIN
SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
END;";
@@ -2671,8 +2936,8 @@ AFTER DELETE ON Bingo
using (var cmd = new SQLiteCommand(conn))
{
- cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_mezfesminigames_updates
- AFTER UPDATE ON MezFesMinigames
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_quests_toggle_mode_updates
+ AFTER UPDATE ON QuestsToggleMode
BEGIN
SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
END;";
@@ -2681,8 +2946,8 @@ AFTER UPDATE ON MezFesMinigames
using (var cmd = new SQLiteCommand(conn))
{
- cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_mezfesminigames_deletion
- AFTER DELETE ON MezFesMinigames
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_quests_toggle_mode_deletion
+ AFTER DELETE ON QuestsToggleMode
BEGIN
SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
END;";
@@ -2691,8 +2956,8 @@ AFTER DELETE ON MezFesMinigames
using (var cmd = new SQLiteCommand(conn))
{
- cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_mezfes_updates
- AFTER UPDATE ON MezFes
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_quests_overlay_hash_updates
+ AFTER UPDATE ON QuestsOverlayHash
BEGIN
SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
END;";
@@ -2701,8 +2966,8 @@ AFTER UPDATE ON MezFes
using (var cmd = new SQLiteCommand(conn))
{
- cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_mezfes_deletion
- AFTER DELETE ON MezFes
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_quests_overlay_hash_deletion
+ AFTER DELETE ON QuestsOverlayHash
BEGIN
SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
END;";
@@ -2711,8 +2976,8 @@ AFTER DELETE ON MezFes
using (var cmd = new SQLiteCommand(conn))
{
- cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_playerachievements_updates
- AFTER UPDATE ON PlayerAchievements
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_quests_diva_updates
+ AFTER UPDATE ON QuestsDiva
BEGIN
SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
END;";
@@ -2721,8 +2986,8 @@ AFTER UPDATE ON PlayerAchievements
using (var cmd = new SQLiteCommand(conn))
{
- cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_playerachievements_deletion
- AFTER DELETE ON PlayerAchievements
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_quests_diva_deletion
+ AFTER DELETE ON QuestsDiva
BEGIN
SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
END;";
@@ -2731,8 +2996,8 @@ AFTER DELETE ON PlayerAchievements
using (var cmd = new SQLiteCommand(conn))
{
- cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_zenithgauntlet_updates
- AFTER UPDATE ON ZenithGauntlets
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_quests_halk_updates
+ AFTER UPDATE ON QuestsHalk
BEGIN
SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
END;";
@@ -2741,8 +3006,8 @@ AFTER UPDATE ON ZenithGauntlets
using (var cmd = new SQLiteCommand(conn))
{
- cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_zenithgauntlet_deletion
- AFTER DELETE ON ZenithGauntlets
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_quests_halk_deletion
+ AFTER DELETE ON QuestsHalk
BEGIN
SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
END;";
@@ -2751,60 +3016,202 @@ AFTER DELETE ON ZenithGauntlets
using (var cmd = new SQLiteCommand(conn))
{
- // TODO: add playergear, datfolder, zenithskills, automaticskills, activeskills, playerinventory, roaddureskills, etc
-
- // Create the trigger
- cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS trigger_insert_quests_insert_audit
- AFTER INSERT ON Quests
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_quests_active_feature_updates
+ AFTER UPDATE ON QuestsActiveFeature
BEGIN
- INSERT INTO Audit (
- CreatedAt,
- CreatedBy,
- ChangeType,
- HashValue
- ) VALUES (
- new.CreatedAt,
- new.CreatedBy,
- 'INSERT',
- new.QuestHash
- );
+ SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
END;";
-
cmd.ExecuteNonQuery();
}
using (var cmd = new SQLiteCommand(conn))
{
- // Create the trigger
- cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS trigger_update_quests_insert_audit
- AFTER UPDATE ON Quests
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_quests_active_feature_deletion
+ AFTER DELETE ON QuestsActiveFeature
BEGIN
- INSERT INTO Audit (
- CreatedAt,
- CreatedBy,
- ChangeType,
- HashValue
- ) VALUES (
- new.CreatedAt,
- new.CreatedBy,
- 'UPDATE',
- new.QuestHash
- );
+ SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
END;";
+ cmd.ExecuteNonQuery();
+ }
+ using (var cmd = new SQLiteCommand(conn))
+ {
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_quests_guild_poogie_updates
+ AFTER UPDATE ON QuestsGuildPoogie
+ BEGIN
+ SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
+ END;";
cmd.ExecuteNonQuery();
}
using (var cmd = new SQLiteCommand(conn))
{
- // Create the trigger
- // TODO this doesnt work
- cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_quest_deletion
- BEFORE DELETE ON Quests
- FOR EACH ROW
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_quests_guild_poogie_deletion
+ AFTER DELETE ON QuestsGuildPoogie
BEGIN
- INSERT INTO Audit (
- CreatedAt,
+ SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
+ END;";
+ cmd.ExecuteNonQuery();
+ }
+
+ // TODO run buffs
+
+ using (var cmd = new SQLiteCommand(conn))
+ {
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_bingo_updates
+ AFTER UPDATE ON Bingo
+ BEGIN
+ SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
+ END;";
+ cmd.ExecuteNonQuery();
+ }
+
+ using (var cmd = new SQLiteCommand(conn))
+ {
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_bingo_deletion
+ AFTER DELETE ON Bingo
+ BEGIN
+ SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
+ END;";
+ cmd.ExecuteNonQuery();
+ }
+
+ using (var cmd = new SQLiteCommand(conn))
+ {
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_mezfesminigames_updates
+ AFTER UPDATE ON MezFesMinigames
+ BEGIN
+ SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
+ END;";
+ cmd.ExecuteNonQuery();
+ }
+
+ using (var cmd = new SQLiteCommand(conn))
+ {
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_mezfesminigames_deletion
+ AFTER DELETE ON MezFesMinigames
+ BEGIN
+ SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
+ END;";
+ cmd.ExecuteNonQuery();
+ }
+
+ using (var cmd = new SQLiteCommand(conn))
+ {
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_mezfes_updates
+ AFTER UPDATE ON MezFes
+ BEGIN
+ SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
+ END;";
+ cmd.ExecuteNonQuery();
+ }
+
+ using (var cmd = new SQLiteCommand(conn))
+ {
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_mezfes_deletion
+ AFTER DELETE ON MezFes
+ BEGIN
+ SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
+ END;";
+ cmd.ExecuteNonQuery();
+ }
+
+ using (var cmd = new SQLiteCommand(conn))
+ {
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_playerachievements_updates
+ AFTER UPDATE ON PlayerAchievements
+ BEGIN
+ SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
+ END;";
+ cmd.ExecuteNonQuery();
+ }
+
+ using (var cmd = new SQLiteCommand(conn))
+ {
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_playerachievements_deletion
+ AFTER DELETE ON PlayerAchievements
+ BEGIN
+ SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
+ END;";
+ cmd.ExecuteNonQuery();
+ }
+
+ using (var cmd = new SQLiteCommand(conn))
+ {
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_zenithgauntlet_updates
+ AFTER UPDATE ON ZenithGauntlets
+ BEGIN
+ SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
+ END;";
+ cmd.ExecuteNonQuery();
+ }
+
+ using (var cmd = new SQLiteCommand(conn))
+ {
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_zenithgauntlet_deletion
+ AFTER DELETE ON ZenithGauntlets
+ BEGIN
+ SELECT RAISE(ROLLBACK, 'Updating rows is not allowed. Keep in mind that all attempted modifications are logged into the central database.');
+ END;";
+ cmd.ExecuteNonQuery();
+ }
+
+ using (var cmd = new SQLiteCommand(conn))
+ {
+ // TODO: add playergear, datfolder, zenithskills, automaticskills, activeskills, playerinventory, roaddureskills, etc
+
+ // Create the trigger
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS trigger_insert_quests_insert_audit
+ AFTER INSERT ON Quests
+ BEGIN
+ INSERT INTO Audit (
+ CreatedAt,
+ CreatedBy,
+ ChangeType,
+ HashValue
+ ) VALUES (
+ new.CreatedAt,
+ new.CreatedBy,
+ 'INSERT',
+ new.QuestHash
+ );
+ END;";
+
+ cmd.ExecuteNonQuery();
+ }
+
+ using (var cmd = new SQLiteCommand(conn))
+ {
+ // Create the trigger
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS trigger_update_quests_insert_audit
+ AFTER UPDATE ON Quests
+ BEGIN
+ INSERT INTO Audit (
+ CreatedAt,
+ CreatedBy,
+ ChangeType,
+ HashValue
+ ) VALUES (
+ new.CreatedAt,
+ new.CreatedBy,
+ 'UPDATE',
+ new.QuestHash
+ );
+ END;";
+
+ cmd.ExecuteNonQuery();
+ }
+
+ using (var cmd = new SQLiteCommand(conn))
+ {
+ // Create the trigger
+ // TODO this doesnt work
+ cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_quest_deletion
+ BEFORE DELETE ON Quests
+ FOR EACH ROW
+ BEGIN
+ INSERT INTO Audit (
+ CreatedAt,
CreatedBy,
ChangeType,
HashValue
@@ -2841,7 +3248,7 @@ BEFORE UPDATE ON Quests
cmd.CommandText = @"CREATE TRIGGER IF NOT EXISTS prevent_quest_updates
AFTER UPDATE ON Quests
FOR EACH ROW
- WHEN NEW.YoutubeID = OLD.YoutubeID
+ WHEN NEW.YouTubeID = OLD.YouTubeID
BEGIN
SELECT RAISE(ABORT, 'Cannot update quest fields');
END;";
@@ -2939,6 +3346,49 @@ private static void HandleError(SQLiteTransaction? transaction, Exception ex)
LoggingService.WriteCrashLog(ex, $"SQLite error (version: {serverVersion})");
}
+ public string GetOverlayHash()
+ {
+ var overlayHash = string.Empty;
+
+ // Find the path of the first found process with the name "MHFZ_Overlay.exe"
+ var exeName = "MHFZ_Overlay.exe";
+ var processes = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(exeName));
+ var exePath = string.Empty;
+ if (processes.Length > 0)
+ {
+ var module = processes[0].MainModule;
+ if (module == null)
+ {
+ return string.Empty;
+ }
+ else
+ {
+ exePath = module.FileName;
+ }
+ }
+ else
+ {
+ exePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, exeName);
+ }
+
+ if (exePath == null)
+ {
+ return string.Empty;
+ }
+
+ // Calculate the SHA256 hash of the executable
+ using (var sha256 = SHA256.Create())
+ {
+ using (var stream = File.OpenRead(exePath))
+ {
+ var hash = sha256.ComputeHash(stream);
+ overlayHash = BitConverter.ToString(hash).Replace("-", string.Empty);
+ }
+ }
+
+ return overlayHash;
+ }
+
///
/// Stores the overlay hash.
///
@@ -4900,12 +5350,13 @@ FOREIGN KEY(RoadDureSkill16ID) REFERENCES AllRoadDureSkills(RoadDureSkillID)
sql = @"CREATE TABLE IF NOT EXISTS QuestAttempts(
QuestAttemptsID INTEGER PRIMARY KEY AUTOINCREMENT,
- QuestID INTEGER NOT NULL,
- WeaponTypeID INTEGER NOT NULL,
- ActualOverlayMode TEXT NOT NULL,
- Attempts INTEGER NOT NULL,
+ QuestID INTEGER NOT NULL CHECK (QuestID >= 0) DEFAULT 0,
+ WeaponTypeID INTEGER NOT NULL DEFAULT 0,
+ ActualOverlayMode TEXT NOT NULL DEFAULT 'Standard',
+ Attempts INTEGER NOT NULL DEFAULT 1,
+ PartySize INTEGER NOT NULL DEFAULT 1,
FOREIGN KEY(WeaponTypeID) REFERENCES WeaponType(WeaponTypeID),
- UNIQUE (QuestID, WeaponTypeID, ActualOverlayMode)
+ UNIQUE (QuestID, WeaponTypeID, ActualOverlayMode, PartySize)
)
";
using (var cmd = new SQLiteCommand(sql, conn))
@@ -4915,9 +5366,12 @@ FOREIGN KEY(WeaponTypeID) REFERENCES WeaponType(WeaponTypeID),
sql = @"CREATE TABLE IF NOT EXISTS PersonalBests(
PersonalBestsID INTEGER PRIMARY KEY AUTOINCREMENT,
- RunID INTEGER NOT NULL,
- Attempts INTEGER NOT NULL,
- FOREIGN KEY(RunID) REFERENCES Quests(RunID))";
+ RunID INTEGER NOT NULL DEFAULT 0,
+ Attempts INTEGER NOT NULL DEFAULT 1,
+ PartySize INTEGER NOT NULL DEFAULT 1,
+ FOREIGN KEY(RunID) REFERENCES Quests(RunID)
+ )
+ ";
using (var cmd = new SQLiteCommand(sql, conn))
{
cmd.ExecuteNonQuery();
@@ -4983,14 +5437,14 @@ FOREIGN KEY(MezFesMinigameID) REFERENCES MezFesMinigames(MezFesMinigameID)
sql = @"CREATE TABLE IF NOT EXISTS PersonalBestAttempts(
PersonalBestAttemptsID INTEGER PRIMARY KEY AUTOINCREMENT,
- QuestID INTEGER NOT NULL,
- WeaponTypeID INTEGER NOT NULL,
- ActualOverlayMode TEXT NOT NULL,
- Attempts INTEGER NOT NULL,
+ QuestID INTEGER NOT NULL CHECK (QuestID >= 0) DEFAULT 0,
+ WeaponTypeID INTEGER NOT NULL DEFAULT 0,
+ ActualOverlayMode TEXT NOT NULL DEFAULT 'Standard',
+ Attempts INTEGER NOT NULL DEFAULT 0,
+ PartySize INTEGER NOT NULL DEFAULT 1,
FOREIGN KEY(WeaponTypeID) REFERENCES WeaponType(WeaponTypeID),
- UNIQUE (QuestID, WeaponTypeID, ActualOverlayMode)
- )
- ";
+ UNIQUE (QuestID, WeaponTypeID, ActualOverlayMode, PartySize)
+ )";
using (var cmd = new SQLiteCommand(sql, conn))
{
cmd.ExecuteNonQuery();
@@ -5175,48 +5629,146 @@ FOREIGN KEY(RunID) REFERENCES Quests(RunID)
cmd.ExecuteNonQuery();
}
- // a mh game but like a MUD. hunt in-game to get many kinds of points for this game. hunt and tame monsters. challenge other CPU players/monsters.
- sql = @"CREATE TABLE IF NOT EXISTS GachaMaterial(
- GachaMaterialID INTEGER PRIMARY KEY,
- GachaMaterialName TEXT NOT NULL
- )";
+ sql = @"CREATE TABLE IF NOT EXISTS QuestsCourse(
+ QuestsCourseID INTEGER PRIMARY KEY AUTOINCREMENT,
+ Rights INTEGER NOT NULL DEFAULT 0,
+ RunID INTEGER NOT NULL,
+ FOREIGN KEY(RunID) REFERENCES Quests(RunID)
+ )";
using (var cmd = new SQLiteCommand(sql, conn))
{
cmd.ExecuteNonQuery();
}
- sql = @"CREATE TABLE IF NOT EXISTS GachaPlayerCurrency (
- GachaPlayerID INTEGER PRIMARY KEY,
- TrialGachaCoins INTEGER NOT NULL DEFAULT 0,
- PremiumGachaCoins INTEGER NOT NULL DEFAULT 0,
- PrismaticGachaCoins INTEGER NOT NULL DEFAULT 0,
- FrontierPoints INTEGER NOT NULL DEFAULT 0,
- LegendaryTickets INTEGER NOT NULL DEFAULT 0,
- NetCafePoints INTEGER NOT NULL DEFAULT 0,
- MonsterCoins INTEGER NOT NULL DEFAULT 0,
- GZenny INTEGER NOT NULL DEFAULT 0,
- Zenny INTEGER NOT NULL DEFAULT 0,
- GCP INTEGER NOT NULL DEFAULT 0,
- CP INTEGER NOT NULL DEFAULT 0,
- Gg INTEGER NOT NULL DEFAULT 0,
- g INTEGER NOT NULL DEFAULT 0,
- GreatSlayingPoints INTEGER NOT NULL DEFAULT 0,
- MezFesCoins INTEGER NOT NULL DEFAULT 0,
- RdP INTEGER NOT NULL DEFAULT 0, -- Road
- Gm INTEGER NOT NULL DEFAULT 0,
- TowerMedals INTEGER NOT NULL DEFAULT 0,
- TowerPoints INTEGER NOT NULL DEFAULT 0,
- Souls INTEGER NOT NULL DEFAULT 0,
- FestivalPoints INTEGER NOT NULL DEFAULT 0,
- FestivalTickets INTEGER NOT NULL DEFAULT 0,
- FestivalGems INTEGER NOT NULL DEFAULT 0,
- FestivalMarks INTEGER NOT NULL DEFAULT 0,
- GuildTickets INTEGER NOT NULL DEFAULT 0,
- GuildMedals INTEGER NOT NULL DEFAULT 0,
- HuntingMedals INTEGER NOT NULL DEFAULT 0,
- InterceptionPoints INTEGER NOT NULL DEFAULT 0,
- DivaNotes INTEGER NOT NULL DEFAULT 0,
- PoogiePoints INTEGER NOT NULL DEFAULT 0,
+ sql = @"CREATE TABLE IF NOT EXISTS QuestsOverlayHash(
+ QuestsOverlayHashID INTEGER PRIMARY KEY AUTOINCREMENT,
+ OverlayHash TEXT NOT NULL DEFAULT '',
+ RunID INTEGER NOT NULL,
+ FOREIGN KEY(RunID) REFERENCES Quests(RunID)
+ )";
+ using (var cmd = new SQLiteCommand(sql, conn))
+ {
+ cmd.ExecuteNonQuery();
+ }
+
+ sql = @"CREATE TABLE IF NOT EXISTS QuestsActiveFeature(
+ QuestsActiveFeatureID INTEGER PRIMARY KEY AUTOINCREMENT,
+ ActiveFeature INTEGER NOT NULL DEFAULT 0,
+ RunID INTEGER NOT NULL,
+ FOREIGN KEY(RunID) REFERENCES Quests(RunID)
+ )";
+ using (var cmd = new SQLiteCommand(sql, conn))
+ {
+ cmd.ExecuteNonQuery();
+ }
+
+ sql = @"CREATE TABLE IF NOT EXISTS QuestsGuildPoogie(
+ QuestsGuildPoogieID INTEGER PRIMARY KEY AUTOINCREMENT,
+ GuildPoogie1Skill INTEGER NOT NULL DEFAULT 0,
+ GuildPoogie2Skill INTEGER NOT NULL DEFAULT 0,
+ GuildPoogie3Skill INTEGER NOT NULL DEFAULT 0,
+ RunID INTEGER NOT NULL,
+ FOREIGN KEY(RunID) REFERENCES Quests(RunID)
+ )";
+ using (var cmd = new SQLiteCommand(sql, conn))
+ {
+ cmd.ExecuteNonQuery();
+ }
+
+ sql = @"CREATE TABLE IF NOT EXISTS QuestsHalk(
+ QuestsHalkID INTEGER PRIMARY KEY AUTOINCREMENT,
+ HalkOn INTEGER NOT NULL DEFAULT 0,
+ HalkPotEffectOn INTEGER NOT NULL DEFAULT 0,
+ HalkFullness INTEGER NOT NULL DEFAULT 0,
+ HalkLevel INTEGER NOT NULL DEFAULT 0,
+ HalkIntimacy INTEGER NOT NULL DEFAULT 0,
+ HalkHealth INTEGER NOT NULL DEFAULT 0,
+ HalkAttack INTEGER NOT NULL DEFAULT 0,
+ HalkDefense INTEGER NOT NULL DEFAULT 0,
+ HalkIntellect INTEGER NOT NULL DEFAULT 0,
+ HalkSkill1 INTEGER NOT NULL DEFAULT 0,
+ HalkSkill2 INTEGER NOT NULL DEFAULT 0,
+ HalkSkill3 INTEGER NOT NULL DEFAULT 0,
+ HalkElementNone INTEGER NOT NULL DEFAULT 0,
+ HalkFire INTEGER NOT NULL DEFAULT 0,
+ HalkThunder INTEGER NOT NULL DEFAULT 0,
+ HalkWater INTEGER NOT NULL DEFAULT 0,
+ HalkIce INTEGER NOT NULL DEFAULT 0,
+ HalkDragon INTEGER NOT NULL DEFAULT 0,
+ HalkSleep INTEGER NOT NULL DEFAULT 0,
+ HalkParalysis INTEGER NOT NULL DEFAULT 0,
+ HalkPoison INTEGER NOT NULL DEFAULT 0,
+ RunID INTEGER NOT NULL,
+ FOREIGN KEY(RunID) REFERENCES Quests(RunID)
+ )";
+ using (var cmd = new SQLiteCommand(sql, conn))
+ {
+ cmd.ExecuteNonQuery();
+ }
+
+ sql = @"CREATE TABLE IF NOT EXISTS QuestsDiva(
+ QuestsDivaID INTEGER PRIMARY KEY AUTOINCREMENT,
+ DivaSongBuffOn INTEGER NOT NULL DEFAULT 0,
+ DivaPrayerGemRedSkill INTEGER NOT NULL DEFAULT 0,
+ DivaPrayerGemRedLevel INTEGER NOT NULL DEFAULT 0,
+ DivaPrayerGemYellowSkill INTEGER NOT NULL DEFAULT 0,
+ DivaPrayerGemYellowLevel INTEGER NOT NULL DEFAULT 0,
+ DivaPrayerGemGreenSkill INTEGER NOT NULL DEFAULT 0,
+ DivaPrayerGemGreenLevel INTEGER NOT NULL DEFAULT 0,
+ DivaPrayerGemBlueSkill INTEGER NOT NULL DEFAULT 0,
+ DivaPrayerGemBlueLevel INTEGER NOT NULL DEFAULT 0,
+ RunID INTEGER NOT NULL,
+ FOREIGN KEY(RunID) REFERENCES Quests(RunID)
+ )";
+ using (var cmd = new SQLiteCommand(sql, conn))
+ {
+ cmd.ExecuteNonQuery();
+ }
+
+ // TODO extra tables
+
+ // a mh game but like a MUD. hunt in-game to get many kinds of points for this game. hunt and tame monsters. challenge other CPU players/monsters.
+ sql = @"CREATE TABLE IF NOT EXISTS GachaMaterial(
+ GachaMaterialID INTEGER PRIMARY KEY,
+ GachaMaterialName TEXT NOT NULL
+ )";
+ using (var cmd = new SQLiteCommand(sql, conn))
+ {
+ cmd.ExecuteNonQuery();
+ }
+
+ sql = @"CREATE TABLE IF NOT EXISTS GachaPlayerCurrency (
+ GachaPlayerID INTEGER PRIMARY KEY,
+ TrialGachaCoins INTEGER NOT NULL DEFAULT 0,
+ PremiumGachaCoins INTEGER NOT NULL DEFAULT 0,
+ PrismaticGachaCoins INTEGER NOT NULL DEFAULT 0,
+ FrontierPoints INTEGER NOT NULL DEFAULT 0,
+ LegendaryTickets INTEGER NOT NULL DEFAULT 0,
+ NetCafePoints INTEGER NOT NULL DEFAULT 0,
+ MonsterCoins INTEGER NOT NULL DEFAULT 0,
+ GZenny INTEGER NOT NULL DEFAULT 0,
+ Zenny INTEGER NOT NULL DEFAULT 0,
+ GCP INTEGER NOT NULL DEFAULT 0,
+ CP INTEGER NOT NULL DEFAULT 0,
+ Gg INTEGER NOT NULL DEFAULT 0,
+ g INTEGER NOT NULL DEFAULT 0,
+ GreatSlayingPoints INTEGER NOT NULL DEFAULT 0,
+ MezFesCoins INTEGER NOT NULL DEFAULT 0,
+ RdP INTEGER NOT NULL DEFAULT 0, -- Road
+ Gm INTEGER NOT NULL DEFAULT 0,
+ TowerMedals INTEGER NOT NULL DEFAULT 0,
+ TowerPoints INTEGER NOT NULL DEFAULT 0,
+ Souls INTEGER NOT NULL DEFAULT 0,
+ FestivalPoints INTEGER NOT NULL DEFAULT 0,
+ FestivalTickets INTEGER NOT NULL DEFAULT 0,
+ FestivalGems INTEGER NOT NULL DEFAULT 0,
+ FestivalMarks INTEGER NOT NULL DEFAULT 0,
+ GuildTickets INTEGER NOT NULL DEFAULT 0,
+ GuildMedals INTEGER NOT NULL DEFAULT 0,
+ HuntingMedals INTEGER NOT NULL DEFAULT 0,
+ InterceptionPoints INTEGER NOT NULL DEFAULT 0,
+ DivaNotes INTEGER NOT NULL DEFAULT 0,
+ PoogiePoints INTEGER NOT NULL DEFAULT 0,
PartnerPoints INTEGER NOT NULL DEFAULT 0,
PartnyaaPoints INTEGER NOT NULL DEFAULT 0,
GalleryPoints INTEGER NOT NULL DEFAULT 0,
@@ -5642,7 +6194,7 @@ public string GetYoutubeLinkForRunID(long runID)
{
try
{
- using (var cmd = new SQLiteCommand("SELECT YoutubeID FROM Quests WHERE RunID = @runID", conn))
+ using (var cmd = new SQLiteCommand("SELECT YouTubeID FROM Quests WHERE RunID = @runID", conn))
{
cmd.Parameters.AddWithValue("@runID", runID);
@@ -5650,7 +6202,7 @@ public string GetYoutubeLinkForRunID(long runID)
{
if (reader.Read())
{
- youtubeLink = (string)reader["YoutubeID"];
+ youtubeLink = (string)reader["YouTubeID"];
}
else
{
@@ -5696,7 +6248,7 @@ public bool UpdateYoutubeLink(object sender, RoutedEventArgs e, long runID, stri
var count = (long)cmd.ExecuteScalar();
if (count > 0)
{
- using (var cmd2 = new SQLiteCommand("UPDATE Quests SET YoutubeID = @youtubeLink WHERE RunID = @runID", conn))
+ using (var cmd2 = new SQLiteCommand("UPDATE Quests SET YouTubeID = @youtubeLink WHERE RunID = @runID", conn))
{
cmd2.Parameters.AddWithValue("@youtubeLink", youtubeLink);
cmd2.Parameters.AddWithValue("@runID", runID);
@@ -5786,7 +6338,7 @@ FinalTimeValue ASC
return personalBest;
}
- public string GetPersonalBest(long questID, int weaponTypeID, string category, string timerMode, DataLoader dataLoader)
+ public string GetPersonalBest(long questID, int weaponTypeID, string category, string timerMode, DataLoader dataLoader, long partySize)
{
var personalBest = Messages.TimerNotLoaded;
if (string.IsNullOrEmpty(this.dataSource))
@@ -5816,8 +6368,8 @@ Quests q
WHERE
QuestID = @questID
AND pg.WeaponTypeID = @weaponTypeID
- AND ActualOverlayMode = @category
- AND PartySize = 1
+ AND q.ActualOverlayMode = @category
+ AND q.PartySize = @partySize
ORDER BY
FinalTimeValue ASC
LIMIT 1", conn))
@@ -5825,6 +6377,7 @@ FinalTimeValue ASC
cmd.Parameters.AddWithValue("@questID", questID);
cmd.Parameters.AddWithValue("@weaponTypeID", weaponTypeID);
cmd.Parameters.AddWithValue("@category", category);
+ cmd.Parameters.AddWithValue("@partySize", partySize);
var reader = cmd.ExecuteReader();
if (reader.Read())
@@ -6138,7 +6691,7 @@ ORDER BY
return personalBests;
}
- public int UpsertQuestAttempts(long questID, int weaponTypeID, string category)
+ public int UpsertQuestAttempts(long questID, int weaponTypeID, string category, long partySize)
{
var attempts = 0;
if (string.IsNullOrEmpty(this.dataSource))
@@ -6162,11 +6715,11 @@ public int UpsertQuestAttempts(long questID, int weaponTypeID, string category)
{
command.CommandText =
@"INSERT INTO
- QuestAttempts (QuestID, WeaponTypeID, ActualOverlayMode, Attempts)
+ QuestAttempts (QuestID, WeaponTypeID, ActualOverlayMode, Attempts, PartySize)
VALUES
- (@QuestID, @WeaponTypeID, @ActualOverlayMode, 1)
+ (@QuestID, @WeaponTypeID, @ActualOverlayMode, 1, @PartySize)
ON CONFLICT
- (QuestID, WeaponTypeID, ActualOverlayMode)
+ (QuestID, WeaponTypeID, ActualOverlayMode, PartySize)
DO UPDATE
SET
Attempts = Attempts + 1
@@ -6176,6 +6729,7 @@ DO UPDATE
command.Parameters.AddWithValue("@QuestID", questID);
command.Parameters.AddWithValue("@WeaponTypeID", weaponTypeID);
command.Parameters.AddWithValue("@ActualOverlayMode", category);
+ command.Parameters.AddWithValue("@PartySize", partySize);
attempts = Convert.ToInt32(command.ExecuteScalar(), CultureInfo.InvariantCulture);
}
@@ -6206,7 +6760,7 @@ DO UPDATE
return attempts;
}
- public int UpsertPersonalBestAttempts(long questID, int weaponTypeID, string category)
+ public int UpsertPersonalBestAttempts(long questID, int weaponTypeID, string category, long partySize)
{
var attempts = 0;
if (string.IsNullOrEmpty(this.dataSource))
@@ -6230,11 +6784,11 @@ public int UpsertPersonalBestAttempts(long questID, int weaponTypeID, string cat
{
command.CommandText =
@"INSERT INTO
- PersonalBestAttempts (QuestID, WeaponTypeID, ActualOverlayMode, Attempts)
+ PersonalBestAttempts (QuestID, WeaponTypeID, ActualOverlayMode, Attempts, PartySize)
VALUES
- (@QuestID, @WeaponTypeID, @ActualOverlayMode, 1)
+ (@QuestID, @WeaponTypeID, @ActualOverlayMode, 1, @PartySize)
ON CONFLICT
- (QuestID, WeaponTypeID, ActualOverlayMode)
+ (QuestID, WeaponTypeID, ActualOverlayMode, PartySize)
DO UPDATE
SET
Attempts = Attempts + 1
@@ -6244,6 +6798,7 @@ DO UPDATE
command.Parameters.AddWithValue("@QuestID", questID);
command.Parameters.AddWithValue("@WeaponTypeID", weaponTypeID);
command.Parameters.AddWithValue("@ActualOverlayMode", category);
+ command.Parameters.AddWithValue("@PartySize", partySize);
attempts = Convert.ToInt32(command.ExecuteScalar(), CultureInfo.InvariantCulture);
}
@@ -6696,177 +7251,92 @@ public Quest GetQuest(long runID)
return quest;
}
- private Quest GetLastQuest(SQLiteConnection conn)
+ public QuestsDiva GetDiva(long runID)
{
- Quest quest = new ();
- using (var transaction = conn.BeginTransaction())
+ QuestsDiva questsDiva = new();
+ if (string.IsNullOrEmpty(this.dataSource))
{
- try
- {
- using (var cmd = new SQLiteCommand("SELECT * FROM Quests ORDER BY RunID DESC LIMIT 1", conn))
- {
- using (var reader = cmd.ExecuteReader())
- {
- if (reader.Read())
- {
- quest = new Quest
- {
- QuestHash = reader["QuestHash"].ToString(),
- CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
- CreatedBy = reader["CreatedBy"].ToString(),
- RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- QuestID = long.Parse(reader["QuestID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- TimeLeft = long.Parse(reader["TimeLeft"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- FinalTimeValue = long.Parse(reader["FinalTimeValue"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- FinalTimeDisplay = reader["FinalTimeDisplay"].ToString(),
- ObjectiveImage = reader["ObjectiveImage"].ToString(),
- ObjectiveTypeID = long.Parse(reader["ObjectiveTypeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ObjectiveQuantity = long.Parse(reader["ObjectiveQuantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- StarGrade = long.Parse(reader["StarGrade"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- RankName = reader["RankName"].ToString(),
- ObjectiveName = reader["ObjectiveName"].ToString(),
- Date = DateTime.Parse(reader["Date"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
- YouTubeID = reader["YouTubeID"].ToString(),
- AttackBuffDictionary = reader["AttackBuffDictionary"].ToString(),
- HitCountDictionary = reader["HitCountDictionary"].ToString(),
- HitsPerSecondDictionary = reader["HitsPerSecondDictionary"].ToString(),
- DamageDealtDictionary = reader["DamageDealtDictionary"].ToString(),
- DamagePerSecondDictionary = reader["DamagePerSecondDictionary"].ToString(),
- AreaChangesDictionary = reader["AreaChangesDictionary"].ToString(),
- CartsDictionary = reader["CartsDictionary"].ToString(),
- Monster1HPDictionary = reader["Monster1HPDictionary"].ToString(),
- Monster2HPDictionary = reader["Monster2HPDictionary"].ToString(),
- Monster3HPDictionary = reader["Monster3HPDictionary"].ToString(),
- Monster4HPDictionary = reader["Monster4HPDictionary"].ToString(),
- HitsTakenBlockedDictionary = reader["HitsTakenBlockedDictionary"].ToString(),
- HitsTakenBlockedPerSecondDictionary = reader["HitsTakenBlockedPerSecondDictionary"].ToString(),
- PlayerHPDictionary = reader["PlayerHPDictionary"].ToString(),
- PlayerStaminaDictionary = reader["PlayerStaminaDictionary"].ToString(),
- KeyStrokesDictionary = reader["KeyStrokesDictionary"].ToString(),
- MouseInputDictionary = reader["MouseInputDictionary"].ToString(),
- GamepadInputDictionary = reader["GamepadInputDictionary"].ToString(),
- ActionsPerMinuteDictionary = reader["ActionsPerMinuteDictionary"].ToString(),
- OverlayModeDictionary = reader["OverlayModeDictionary"].ToString(),
- ActualOverlayMode = reader["ActualOverlayMode"].ToString(),
- PartySize = long.Parse(reader["PartySize"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- };
- }
- }
- }
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
- }
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get diva. dataSource: {0}", this.dataSource);
+ return questsDiva;
}
- return quest;
- }
-
- private MezFes GetLastMezFes(SQLiteConnection conn)
- {
- MezFes last = new ();
- using (var transaction = conn.BeginTransaction())
+ // Use a SQL query to retrieve the Quest for the specific RunID from the database
+ using (var conn = new SQLiteConnection(this.dataSource))
{
- try
+ conn.Open();
+ using (var transaction = conn.BeginTransaction())
{
- using (var cmd = new SQLiteCommand("SELECT * FROM MezFes ORDER BY MezFesID DESC LIMIT 1", conn))
+ try
{
- using (var reader = cmd.ExecuteReader())
+ using (var cmd = new SQLiteCommand("SELECT * FROM QuestsDiva WHERE RunID = @runID", conn))
{
- if (reader.Read())
+ cmd.Parameters.AddWithValue("@runID", runID);
+
+ using (var reader = cmd.ExecuteReader())
{
- last = new MezFes
+ if (reader.Read())
{
- MezFesID = long.Parse(reader["MezFesID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
- CreatedBy = reader["CreatedBy"]?.ToString() ?? string.Empty,
- MezFesMinigameID = long.Parse(reader["MezFesMinigameID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Score = long.Parse(reader["Score"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- };
+ questsDiva = new QuestsDiva
+ {
+ QuestsDivaID = long.Parse(reader["QuestsDivaID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaSongBuffOn = long.Parse(reader["DivaSongBuffOn"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemRedSkill = long.Parse(reader["DivaPrayerGemRedSkill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemRedLevel = long.Parse(reader["DivaPrayerGemRedLevel"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemYellowSkill = long.Parse(reader["DivaPrayerGemYellowSkill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemYellowLevel = long.Parse(reader["DivaPrayerGemYellowLevel"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemGreenSkill = long.Parse(reader["DivaPrayerGemGreenSkill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemGreenLevel = long.Parse(reader["DivaPrayerGemGreenLevel"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemBlueSkill = long.Parse(reader["DivaPrayerGemBlueSkill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemBlueLevel = long.Parse(reader["DivaPrayerGemBlueLevel"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
+ }
}
}
- }
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
- }
- }
-
- return last;
- }
- private Bingo GetLastBingo(SQLiteConnection conn)
- {
- Bingo last = new ();
- using (var transaction = conn.BeginTransaction())
- {
- try
- {
- using (var cmd = new SQLiteCommand("SELECT * FROM Bingo ORDER BY BingoID DESC LIMIT 1", conn))
+ transaction.Commit();
+ }
+ catch (Exception ex)
{
- using (var reader = cmd.ExecuteReader())
- {
- if (reader.Read())
- {
- last = new Bingo
- {
- BingoID = long.Parse(reader["BingoID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
- CreatedBy = reader["CreatedBy"].ToString(),
- Difficulty = (Difficulty)long.Parse(reader["Difficulty"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Score = long.Parse(reader["Score"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- MonsterList = JsonConvert.DeserializeObject>(reader["MonsterList"]?.ToString() ?? "{}") ?? new List { },
- WeaponType = reader["WeaponType"]?.ToString() ?? string.Empty,
- Category = ChallengeService.ConvertToBingoGauntletCategory(reader.GetInt64(reader.GetOrdinal("Category"))),
- TotalFramesElapsed = long.Parse(reader["TotalFramesElapsed"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- TotalTimeElapsed = reader["TotalTimeElapsed"]?.ToString() ?? string.Empty,
- };
- }
- }
+ HandleError(transaction, ex);
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
}
- return last;
+ return questsDiva;
}
- public long GetPlayerBingoPoints()
+ public QuestsActiveFeature GetActiveFeature(long runID)
{
- long points = 0;
-
+ QuestsActiveFeature data = new();
if (string.IsNullOrEmpty(this.dataSource))
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get player bingo points. dataSource: {0}", this.dataSource);
- return points;
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get active feature. dataSource: {0}", this.dataSource);
+ return data;
}
+ // Use a SQL query to retrieve the Quest for the specific RunID from the database
using (var conn = new SQLiteConnection(this.dataSource))
{
conn.Open();
-
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand("SELECT Points FROM PlayerBingoPoints WHERE PlayerBingoPointsID = 1", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM QuestsActiveFeature WHERE RunID = @runID", conn))
{
+ cmd.Parameters.AddWithValue("@runID", runID);
+
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
- points = long.Parse(reader["Points"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
+ data = new QuestsActiveFeature
+ {
+ QuestsActiveFeatureID = long.Parse(reader["QuestsActiveFeatureID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveFeature = long.Parse(reader["ActiveFeature"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
}
}
}
@@ -6880,17 +7350,19 @@ public long GetPlayerBingoPoints()
}
}
- return points;
+ return data;
}
- public void SetPlayerBingoPoints(long points)
+ public QuestsCourse GetCourses(long runID)
{
+ QuestsCourse data = new();
if (string.IsNullOrEmpty(this.dataSource))
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot set player bingo points. dataSource: {0}", this.dataSource);
- return;
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get courses. dataSource: {0}", this.dataSource);
+ return data;
}
+ // Use a SQL query to retrieve the Quest for the specific RunID from the database
using (var conn = new SQLiteConnection(this.dataSource))
{
conn.Open();
@@ -6898,26 +7370,22 @@ public void SetPlayerBingoPoints(long points)
{
try
{
- // Create a command that will be used to insert multiple rows in a batch
- using (var cmd = new SQLiteCommand(conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM QuestsCourse WHERE RunID = @runID", conn))
{
- // Set the command text to insert a single row
- cmd.CommandText = @"INSERT OR REPLACE INTO PlayerBingoPoints (
- PlayerBingoPointsID,
- Points
- ) VALUES (
- @PlayerBingoPointsID,
- @Points)";
-
- // Add the parameter placeholders
- cmd.Parameters.Add("@PlayerBingoPointsID", DbType.Int64);
- cmd.Parameters.Add("@Points", DbType.Int64);
-
- // Set the parameter values
- cmd.Parameters["@PlayerBingoPointsID"].Value = 1;
- cmd.Parameters["@Points"].Value = points;
+ cmd.Parameters.AddWithValue("@runID", runID);
- cmd.ExecuteNonQuery();
+ using (var reader = cmd.ExecuteReader())
+ {
+ if (reader.Read())
+ {
+ data = new QuestsCourse
+ {
+ QuestsCourseID = long.Parse(reader["QuestsCourseID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Rights = long.Parse(reader["Rights"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
+ }
+ }
}
transaction.Commit();
@@ -6929,212 +7397,272 @@ public void SetPlayerBingoPoints(long points)
}
}
- Logger.Debug("Inserted into PlayerBingoPoints table value {0}", points);
+ return data;
}
- private ZenithGauntlet GetLastZenithGauntlet(SQLiteConnection conn)
+ public QuestsGuildPoogie GetGuildPoogie(long runID)
{
- ZenithGauntlet last = new ();
- using (var transaction = conn.BeginTransaction())
+ QuestsGuildPoogie data = new();
+ if (string.IsNullOrEmpty(this.dataSource))
{
- try
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get guild poogie. dataSource: {0}", this.dataSource);
+ return data;
+ }
+
+ // Use a SQL query to retrieve the Quest for the specific RunID from the database
+ using (var conn = new SQLiteConnection(this.dataSource))
+ {
+ conn.Open();
+ using (var transaction = conn.BeginTransaction())
{
- using (var cmd = new SQLiteCommand("SELECT * FROM ZenithGauntlets ORDER BY ZenithGauntletID DESC LIMIT 1", conn))
+ try
{
- using (var reader = cmd.ExecuteReader())
+ using (var cmd = new SQLiteCommand("SELECT * FROM QuestsGuildPoogie WHERE RunID = @runID", conn))
{
- if (reader.Read())
+ cmd.Parameters.AddWithValue("@runID", runID);
+
+ using (var reader = cmd.ExecuteReader())
{
- last = new ZenithGauntlet
+ if (reader.Read())
{
- ZenithGauntletID = long.Parse(reader["ZenithGauntletID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WeaponType = reader["WeaponType"]?.ToString() ?? "0",
- Category = reader["Category"]?.ToString() ?? "0",
- TotalFramesElapsed = long.Parse(reader["TotalFramesElapsed"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- TotalTimeElapsed = reader["TotalTimeElapsed"]?.ToString() ?? "0",
- Run1ID = long.Parse(reader["Run1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run2ID = long.Parse(reader["Run2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run3ID = long.Parse(reader["Run3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run4ID = long.Parse(reader["Run4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run5ID = long.Parse(reader["Run5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run6ID = long.Parse(reader["Run6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run7ID = long.Parse(reader["Run7ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run8ID = long.Parse(reader["Run8ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run9ID = long.Parse(reader["Run9ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run10ID = long.Parse(reader["Run10ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run11ID = long.Parse(reader["Run11ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run12ID = long.Parse(reader["Run12ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run13ID = long.Parse(reader["Run13ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run14ID = long.Parse(reader["Run14ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run15ID = long.Parse(reader["Run15ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run16ID = long.Parse(reader["Run16ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run17ID = long.Parse(reader["Run17ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run18ID = long.Parse(reader["Run18ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run19ID = long.Parse(reader["Run19ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run20ID = long.Parse(reader["Run20ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run21ID = long.Parse(reader["Run21ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run22ID = long.Parse(reader["Run22ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run23ID = long.Parse(reader["Run23ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- };
+ data = new QuestsGuildPoogie
+ {
+ QuestsGuildPoogieID = long.Parse(reader["QuestsGuildPoogieID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ GuildPoogie1Skill = long.Parse(reader["GuildPoogie1Skill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ GuildPoogie2Skill = long.Parse(reader["GuildPoogie2Skill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ GuildPoogie3Skill = long.Parse(reader["GuildPoogie3Skill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
+ }
}
}
- }
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
+ }
}
}
- return last;
+ return data;
}
- private SolsticeGauntlet GetLastSolsticeGauntlet(SQLiteConnection conn)
+ public QuestsHalk GetHalk(long runID)
{
- SolsticeGauntlet last = new ();
- using (var transaction = conn.BeginTransaction())
+ QuestsHalk data = new();
+ if (string.IsNullOrEmpty(this.dataSource))
{
- try
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get halk. dataSource: {0}", this.dataSource);
+ return data;
+ }
+
+ // Use a SQL query to retrieve the Quest for the specific RunID from the database
+ using (var conn = new SQLiteConnection(this.dataSource))
+ {
+ conn.Open();
+ using (var transaction = conn.BeginTransaction())
{
- using (var cmd = new SQLiteCommand("SELECT * FROM SolsticeGauntlets ORDER BY SolsticeGauntletID DESC LIMIT 1", conn))
+ try
{
- using (var reader = cmd.ExecuteReader())
+ using (var cmd = new SQLiteCommand("SELECT * FROM QuestsHalk WHERE RunID = @runID", conn))
{
- if (reader.Read())
+ cmd.Parameters.AddWithValue("@runID", runID);
+
+ using (var reader = cmd.ExecuteReader())
{
- last = new SolsticeGauntlet
+ if (reader.Read())
{
- SolsticeGauntletID = long.Parse(reader["SolsticeGauntletID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WeaponType = reader["WeaponType"]?.ToString() ?? "0",
- Category = reader["Category"]?.ToString() ?? "0",
- TotalFramesElapsed = long.Parse(reader["TotalFramesElapsed"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- TotalTimeElapsed = reader["TotalTimeElapsed"]?.ToString() ?? "0",
- Run1ID = long.Parse(reader["Run1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run2ID = long.Parse(reader["Run2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run3ID = long.Parse(reader["Run3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run4ID = long.Parse(reader["Run4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run5ID = long.Parse(reader["Run5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run6ID = long.Parse(reader["Run6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- };
+ data = new QuestsHalk
+ {
+ QuestsHalkID = long.Parse(reader["QuestsHalkID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkOn = long.Parse(reader["HalkOn"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkPotEffectOn = long.Parse(reader["HalkPotEffectOn"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkFullness = long.Parse(reader["HalkFullness"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkLevel = long.Parse(reader["HalkLevel"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkIntimacy = long.Parse(reader["HalkIntimacy"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkHealth = long.Parse(reader["HalkHealth"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkAttack = long.Parse(reader["HalkAttack"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkDefense = long.Parse(reader["HalkDefense"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkIntellect = long.Parse(reader["HalkIntellect"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkSkill1 = long.Parse(reader["HalkSkill1"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkSkill2 = long.Parse(reader["HalkSkill2"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkSkill3 = long.Parse(reader["HalkSkill3"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkElementNone = long.Parse(reader["HalkElementNone"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkFire = long.Parse(reader["HalkFire"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkThunder = long.Parse(reader["HalkThunder"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkWater = long.Parse(reader["HalkWater"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkIce = long.Parse(reader["HalkIce"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkDragon = long.Parse(reader["HalkDragon"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkSleep = long.Parse(reader["HalkSleep"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkParalysis = long.Parse(reader["HalkParalysis"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkPoison = long.Parse(reader["HalkPoison"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
+ }
}
}
- }
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
+ }
}
}
- return last;
+ return data;
}
- private MusouGauntlet GetLastMusouGauntlet(SQLiteConnection conn)
+ public QuestsToggleMode GetQuestToggleMode(long runID)
{
- MusouGauntlet last = new ();
- using (var transaction = conn.BeginTransaction())
+ QuestsToggleMode data = new();
+ if (string.IsNullOrEmpty(this.dataSource))
{
- try
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get quest toggle mode. dataSource: {0}", this.dataSource);
+ return data;
+ }
+
+ // Use a SQL query to retrieve the Quest for the specific RunID from the database
+ using (var conn = new SQLiteConnection(this.dataSource))
+ {
+ conn.Open();
+ using (var transaction = conn.BeginTransaction())
{
- using (var cmd = new SQLiteCommand("SELECT * FROM MusouGauntlets ORDER BY MusouGauntletID DESC LIMIT 1", conn))
+ try
{
- using (var reader = cmd.ExecuteReader())
+ using (var cmd = new SQLiteCommand("SELECT * FROM QuestsToggleMode WHERE RunID = @runID", conn))
{
- if (reader.Read())
+ cmd.Parameters.AddWithValue("@runID", runID);
+
+ using (var reader = cmd.ExecuteReader())
{
- last = new MusouGauntlet
+ if (reader.Read())
{
- MusouGauntletID = long.Parse(reader["MusouGauntletID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WeaponType = reader["WeaponType"]?.ToString() ?? "0",
- Category = reader["Category"]?.ToString() ?? "0",
- TotalFramesElapsed = long.Parse(reader["TotalFramesElapsed"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- TotalTimeElapsed = reader["TotalTimeElapsed"]?.ToString() ?? "0",
- Run1ID = long.Parse(reader["Run1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run2ID = long.Parse(reader["Run2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run3ID = long.Parse(reader["Run3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run4ID = long.Parse(reader["Run4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run5ID = long.Parse(reader["Run5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run6ID = long.Parse(reader["Run6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run7ID = long.Parse(reader["Run7ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run8ID = long.Parse(reader["Run8ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run9ID = long.Parse(reader["Run9ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run10ID = long.Parse(reader["Run10ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- };
+ data = new QuestsToggleMode
+ {
+ QuestsToggleModeID = long.Parse(reader["QuestsToggleModeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ QuestToggleMode = long.Parse(reader["QuestToggleMode"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
+ }
}
}
- }
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
+ }
}
}
- return last;
+ return data;
}
- private PersonalBestAttempts GetLastPersonalBestAttempt(SQLiteConnection conn)
+ public QuestsOverlayHash GetOverlayHash(long runID)
{
- PersonalBestAttempts last = new ();
- using (var transaction = conn.BeginTransaction())
+ QuestsOverlayHash data = new();
+ if (string.IsNullOrEmpty(this.dataSource))
{
- try
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get overlay hash. dataSource: {0}", this.dataSource);
+ return data;
+ }
+
+ // Use a SQL query to retrieve the Quest for the specific RunID from the database
+ using (var conn = new SQLiteConnection(this.dataSource))
+ {
+ conn.Open();
+ using (var transaction = conn.BeginTransaction())
{
- using (var cmd = new SQLiteCommand("SELECT * FROM PersonalBestAttempts ORDER BY PersonalBestAttemptsID DESC LIMIT 1", conn))
+ try
{
- using (var reader = cmd.ExecuteReader())
+ using (var cmd = new SQLiteCommand("SELECT * FROM QuestsOverlayHash WHERE RunID = @runID", conn))
{
- if (reader.Read())
+ cmd.Parameters.AddWithValue("@runID", runID);
+
+ using (var reader = cmd.ExecuteReader())
{
- last = new PersonalBestAttempts
+ if (reader.Read())
{
- PersonalBestAttemptsID = long.Parse(reader["PersonalBestAttemptsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- QuestID = long.Parse(reader["QuestID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WeaponTypeID = long.Parse(reader["WeaponTypeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActualOverlayMode = reader["ActualOverlayMode"]?.ToString() ?? "0",
- Attempts = long.Parse(reader["Attempts"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- };
+ data = new QuestsOverlayHash
+ {
+ QuestsOverlayHashID = long.Parse(reader["QuestsOverlayHashID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ OverlayHash = reader["OverlayHash"]?.ToString() ?? "0",
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
+ }
}
}
- }
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
+ }
}
}
- return last;
+ return data;
}
- private QuestAttempts GetLastQuestAttempt(SQLiteConnection conn)
+ private Quest GetLastQuest(SQLiteConnection conn)
{
- QuestAttempts last = new ();
+ Quest quest = new ();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand("SELECT * FROM QuestAttempts ORDER BY QuestAttemptsID DESC LIMIT 1", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM Quests ORDER BY RunID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
- last = new QuestAttempts
+ quest = new Quest
{
- QuestAttemptsID = long.Parse(reader["QuestAttemptsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ QuestHash = reader["QuestHash"].ToString(),
+ CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
+ CreatedBy = reader["CreatedBy"].ToString(),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
QuestID = long.Parse(reader["QuestID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WeaponTypeID = long.Parse(reader["WeaponTypeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActualOverlayMode = reader["ActualOverlayMode"]?.ToString() ?? "0",
- Attempts = long.Parse(reader["Attempts"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ TimeLeft = long.Parse(reader["TimeLeft"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ FinalTimeValue = long.Parse(reader["FinalTimeValue"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ FinalTimeDisplay = reader["FinalTimeDisplay"].ToString(),
+ ObjectiveImage = reader["ObjectiveImage"].ToString(),
+ ObjectiveTypeID = long.Parse(reader["ObjectiveTypeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ObjectiveQuantity = long.Parse(reader["ObjectiveQuantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ StarGrade = long.Parse(reader["StarGrade"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RankName = reader["RankName"].ToString(),
+ ObjectiveName = reader["ObjectiveName"].ToString(),
+ Date = DateTime.Parse(reader["Date"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
+ YouTubeID = reader["YouTubeID"].ToString(),
+ AttackBuffDictionary = reader["AttackBuffDictionary"].ToString(),
+ HitCountDictionary = reader["HitCountDictionary"].ToString(),
+ HitsPerSecondDictionary = reader["HitsPerSecondDictionary"].ToString(),
+ DamageDealtDictionary = reader["DamageDealtDictionary"].ToString(),
+ DamagePerSecondDictionary = reader["DamagePerSecondDictionary"].ToString(),
+ AreaChangesDictionary = reader["AreaChangesDictionary"].ToString(),
+ CartsDictionary = reader["CartsDictionary"].ToString(),
+ Monster1HPDictionary = reader["Monster1HPDictionary"].ToString(),
+ Monster2HPDictionary = reader["Monster2HPDictionary"].ToString(),
+ Monster3HPDictionary = reader["Monster3HPDictionary"].ToString(),
+ Monster4HPDictionary = reader["Monster4HPDictionary"].ToString(),
+ HitsTakenBlockedDictionary = reader["HitsTakenBlockedDictionary"].ToString(),
+ HitsTakenBlockedPerSecondDictionary = reader["HitsTakenBlockedPerSecondDictionary"].ToString(),
+ PlayerHPDictionary = reader["PlayerHPDictionary"].ToString(),
+ PlayerStaminaDictionary = reader["PlayerStaminaDictionary"].ToString(),
+ KeyStrokesDictionary = reader["KeyStrokesDictionary"].ToString(),
+ MouseInputDictionary = reader["MouseInputDictionary"].ToString(),
+ GamepadInputDictionary = reader["GamepadInputDictionary"].ToString(),
+ ActionsPerMinuteDictionary = reader["ActionsPerMinuteDictionary"].ToString(),
+ OverlayModeDictionary = reader["OverlayModeDictionary"].ToString(),
+ ActualOverlayMode = reader["ActualOverlayMode"].ToString(),
+ PartySize = long.Parse(reader["PartySize"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
};
}
}
@@ -7148,77 +7676,29 @@ private QuestAttempts GetLastQuestAttempt(SQLiteConnection conn)
}
}
- return last;
+ return quest;
}
- private PlayerGear GetLastPlayerGear(SQLiteConnection conn)
+ private MezFes GetLastMezFes(SQLiteConnection conn)
{
- PlayerGear last = new ();
+ MezFes last = new ();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand("SELECT * FROM PlayerGear ORDER BY PlayerGearID DESC LIMIT 1", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM MezFes ORDER BY MezFesID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
- last = new PlayerGear
+ last = new MezFes
{
- PlayerGearHash = reader["PlayerGearHash"]?.ToString() ?? "0",
+ MezFesID = long.Parse(reader["MezFesID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
CreatedBy = reader["CreatedBy"]?.ToString() ?? string.Empty,
- PlayerGearID = long.Parse(reader["PlayerGearID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- PlayerID = long.Parse(reader["PlayerID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- GearName = reader["GearName"]?.ToString() ?? "0",
- StyleID = long.Parse(reader["StyleID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WeaponIconID = long.Parse(reader["WeaponIconID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WeaponClassID = long.Parse(reader["WeaponClassID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WeaponTypeID = long.Parse(reader["WeaponTypeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- BlademasterWeaponID = reader["BlademasterWeaponID"] == DBNull.Value ? null : long.Parse(reader["BlademasterWeaponID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- GunnerWeaponID = reader["GunnerWeaponID"] == DBNull.Value ? null : long.Parse(reader["GunnerWeaponID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WeaponSlot1 = reader["WeaponSlot1"]?.ToString() ?? "0",
- WeaponSlot2 = reader["WeaponSlot2"]?.ToString() ?? "0",
- WeaponSlot3 = reader["WeaponSlot3"]?.ToString() ?? "0",
- HeadID = long.Parse(reader["HeadID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- HeadSlot1ID = long.Parse(reader["HeadSlot1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- HeadSlot2ID = long.Parse(reader["HeadSlot2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- HeadSlot3ID = long.Parse(reader["HeadSlot3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ChestID = long.Parse(reader["ChestID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ChestSlot1ID = long.Parse(reader["ChestSlot1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ChestSlot2ID = long.Parse(reader["ChestSlot2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ChestSlot3ID = long.Parse(reader["ChestSlot3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ArmsID = long.Parse(reader["ArmsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ArmsSlot1ID = long.Parse(reader["ArmsSlot1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ArmsSlot2ID = long.Parse(reader["ArmsSlot2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ArmsSlot3ID = long.Parse(reader["ArmsSlot3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WaistID = long.Parse(reader["WaistID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WaistSlot1ID = long.Parse(reader["WaistSlot1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WaistSlot2ID = long.Parse(reader["WaistSlot2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WaistSlot3ID = long.Parse(reader["WaistSlot3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- LegsID = long.Parse(reader["LegsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- LegsSlot1ID = long.Parse(reader["LegsSlot1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- LegsSlot2ID = long.Parse(reader["LegsSlot2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- LegsSlot3ID = long.Parse(reader["LegsSlot3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Cuff1ID = long.Parse(reader["Cuff1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Cuff2ID = long.Parse(reader["Cuff2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ZenithSkillsID = long.Parse(reader["ZenithSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- AutomaticSkillsID = long.Parse(reader["AutomaticSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkillsID = long.Parse(reader["ActiveSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- CaravanSkillsID = long.Parse(reader["CaravanSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- DivaSkillID = long.Parse(reader["DivaSkillID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- GuildFoodID = long.Parse(reader["GuildFoodID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- StyleRankSkillsID = long.Parse(reader["StyleRankSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- PlayerInventoryID = long.Parse(reader["PlayerInventoryID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- AmmoPouchID = long.Parse(reader["AmmoPouchID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- PartnyaBagID = long.Parse(reader["PartnyaBagID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- PoogieItemID = long.Parse(reader["PoogieItemID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- RoadDureSkillsID = long.Parse(reader["RoadDureSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- PlayerInventoryDictionary = reader["PlayerInventoryDictionary"].ToString(),
- PlayerAmmoPouchDictionary = reader["PlayerAmmoPouchDictionary"].ToString(),
- PartnyaBagDictionary = reader["PartnyaBagDictionary"].ToString(),
+ MezFesMinigameID = long.Parse(reader["MezFesMinigameID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Score = long.Parse(reader["Score"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
};
}
}
@@ -7235,44 +7715,31 @@ private PlayerGear GetLastPlayerGear(SQLiteConnection conn)
return last;
}
- private ActiveSkills GetLastActiveSkills(SQLiteConnection conn)
+ private Bingo GetLastBingo(SQLiteConnection conn)
{
- ActiveSkills last = new ();
+ Bingo last = new ();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand("SELECT * FROM ActiveSkills ORDER BY ActiveSkillsID DESC LIMIT 1", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM Bingo ORDER BY BingoID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
- last = new ActiveSkills
+ last = new Bingo
{
+ BingoID = long.Parse(reader["BingoID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
- CreatedBy = reader["CreatedBy"]?.ToString() ?? string.Empty,
- ActiveSkillsID = long.Parse(reader["ActiveSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill1ID = long.Parse(reader["ActiveSkill1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill2ID = long.Parse(reader["ActiveSkill2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill3ID = long.Parse(reader["ActiveSkill3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill4ID = long.Parse(reader["ActiveSkill4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill5ID = long.Parse(reader["ActiveSkill5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill6ID = long.Parse(reader["ActiveSkill6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill7ID = long.Parse(reader["ActiveSkill7ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill8ID = long.Parse(reader["ActiveSkill8ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill9ID = long.Parse(reader["ActiveSkill9ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill10ID = long.Parse(reader["ActiveSkill10ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill11ID = long.Parse(reader["ActiveSkill11ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill12ID = long.Parse(reader["ActiveSkill12ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill13ID = long.Parse(reader["ActiveSkill13ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill14ID = long.Parse(reader["ActiveSkill14ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill15ID = long.Parse(reader["ActiveSkill15ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill16ID = long.Parse(reader["ActiveSkill16ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill17ID = long.Parse(reader["ActiveSkill17ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill18ID = long.Parse(reader["ActiveSkill18ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActiveSkill19ID = long.Parse(reader["ActiveSkill19ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ CreatedBy = reader["CreatedBy"].ToString(),
+ Difficulty = (Difficulty)long.Parse(reader["Difficulty"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Score = long.Parse(reader["Score"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ MonsterList = JsonConvert.DeserializeObject>(reader["MonsterList"]?.ToString() ?? "{}") ?? new List { },
+ WeaponType = reader["WeaponType"]?.ToString() ?? string.Empty,
+ Category = ChallengeService.ConvertToBingoGauntletCategory(reader.GetInt64(reader.GetOrdinal("Category"))),
+ TotalFramesElapsed = long.Parse(reader["TotalFramesElapsed"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ TotalTimeElapsed = reader["TotalTimeElapsed"]?.ToString() ?? string.Empty,
};
}
}
@@ -7289,69 +7756,139 @@ private ActiveSkills GetLastActiveSkills(SQLiteConnection conn)
return last;
}
- private ZenithSkills GetLastZenithSkills(SQLiteConnection conn)
+ public long GetPlayerBingoPoints()
{
- ZenithSkills last = new();
- using (var transaction = conn.BeginTransaction())
+ long points = 0;
+
+ if (string.IsNullOrEmpty(this.dataSource))
{
- try
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get player bingo points. dataSource: {0}", this.dataSource);
+ return points;
+ }
+
+ using (var conn = new SQLiteConnection(this.dataSource))
+ {
+ conn.Open();
+
+ using (var transaction = conn.BeginTransaction())
{
- using (var cmd = new SQLiteCommand("SELECT * FROM ZenithSkills ORDER BY ZenithSkillsID DESC LIMIT 1", conn))
+ try
{
- using (var reader = cmd.ExecuteReader())
+ using (var cmd = new SQLiteCommand("SELECT Points FROM PlayerBingoPoints WHERE PlayerBingoPointsID = 1", conn))
{
- if (reader.Read())
+ using (var reader = cmd.ExecuteReader())
{
- last = new ZenithSkills
+ if (reader.Read())
{
- CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
- CreatedBy = reader["CreatedBy"]?.ToString() ?? string.Empty,
- ZenithSkillsID = long.Parse(reader["ZenithSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ZenithSkill1ID = long.Parse(reader["ZenithSkill1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ZenithSkill2ID = long.Parse(reader["ZenithSkill2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ZenithSkill3ID = long.Parse(reader["ZenithSkill3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ZenithSkill4ID = long.Parse(reader["ZenithSkill4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ZenithSkill5ID = long.Parse(reader["ZenithSkill5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ZenithSkill6ID = long.Parse(reader["ZenithSkill6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ZenithSkill7ID = long.Parse(reader["ZenithSkill7ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- };
+ points = long.Parse(reader["Points"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
+ }
}
}
- }
- transaction.Commit();
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
+ }
}
- catch (Exception ex)
+ }
+
+ return points;
+ }
+
+ public void SetPlayerBingoPoints(long points)
+ {
+ if (string.IsNullOrEmpty(this.dataSource))
+ {
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot set player bingo points. dataSource: {0}", this.dataSource);
+ return;
+ }
+
+ using (var conn = new SQLiteConnection(this.dataSource))
+ {
+ conn.Open();
+ using (var transaction = conn.BeginTransaction())
{
- HandleError(transaction, ex);
+ try
+ {
+ // Create a command that will be used to insert multiple rows in a batch
+ using (var cmd = new SQLiteCommand(conn))
+ {
+ // Set the command text to insert a single row
+ cmd.CommandText = @"INSERT OR REPLACE INTO PlayerBingoPoints (
+ PlayerBingoPointsID,
+ Points
+ ) VALUES (
+ @PlayerBingoPointsID,
+ @Points)";
+
+ // Add the parameter placeholders
+ cmd.Parameters.Add("@PlayerBingoPointsID", DbType.Int64);
+ cmd.Parameters.Add("@Points", DbType.Int64);
+
+ // Set the parameter values
+ cmd.Parameters["@PlayerBingoPointsID"].Value = 1;
+ cmd.Parameters["@Points"].Value = points;
+
+ cmd.ExecuteNonQuery();
+ }
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
+ }
}
}
- return last;
+ Logger.Debug("Inserted into PlayerBingoPoints table value {0}", points);
}
- private StyleRankSkills GetLastStyleRankSkills(SQLiteConnection conn)
+ private ZenithGauntlet GetLastZenithGauntlet(SQLiteConnection conn)
{
- StyleRankSkills last = new ();
+ ZenithGauntlet last = new ();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand("SELECT * FROM StyleRankSkills ORDER BY StyleRankSkillsID DESC LIMIT 1", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM ZenithGauntlets ORDER BY ZenithGauntletID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
- last = new StyleRankSkills
+ last = new ZenithGauntlet
{
- CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
- CreatedBy = reader["CreatedBy"]?.ToString() ?? string.Empty,
- StyleRankSkillsID = long.Parse(reader["StyleRankSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- StyleRankSkill1ID = long.Parse(reader["StyleRankSkill1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- StyleRankSkill2ID = long.Parse(reader["StyleRankSkill2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ZenithGauntletID = long.Parse(reader["ZenithGauntletID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ WeaponType = reader["WeaponType"]?.ToString() ?? "0",
+ Category = reader["Category"]?.ToString() ?? "0",
+ TotalFramesElapsed = long.Parse(reader["TotalFramesElapsed"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ TotalTimeElapsed = reader["TotalTimeElapsed"]?.ToString() ?? "0",
+ Run1ID = long.Parse(reader["Run1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run2ID = long.Parse(reader["Run2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run3ID = long.Parse(reader["Run3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run4ID = long.Parse(reader["Run4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run5ID = long.Parse(reader["Run5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run6ID = long.Parse(reader["Run6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run7ID = long.Parse(reader["Run7ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run8ID = long.Parse(reader["Run8ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run9ID = long.Parse(reader["Run9ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run10ID = long.Parse(reader["Run10ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run11ID = long.Parse(reader["Run11ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run12ID = long.Parse(reader["Run12ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run13ID = long.Parse(reader["Run13ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run14ID = long.Parse(reader["Run14ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run15ID = long.Parse(reader["Run15ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run16ID = long.Parse(reader["Run16ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run17ID = long.Parse(reader["Run17ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run18ID = long.Parse(reader["Run18ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run19ID = long.Parse(reader["Run19ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run20ID = long.Parse(reader["Run20ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run21ID = long.Parse(reader["Run21ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run22ID = long.Parse(reader["Run22ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run23ID = long.Parse(reader["Run23ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
};
}
}
@@ -7368,23 +7905,32 @@ private StyleRankSkills GetLastStyleRankSkills(SQLiteConnection conn)
return last;
}
- private GachaCardInventory GetLastGachaCard(SQLiteConnection conn)
+ private SolsticeGauntlet GetLastSolsticeGauntlet(SQLiteConnection conn)
{
- GachaCardInventory last = new ();
+ SolsticeGauntlet last = new ();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand("SELECT * FROM GachaCardInventory ORDER BY GachaCardInventoryID DESC LIMIT 1", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM SolsticeGauntlets ORDER BY SolsticeGauntletID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
- last = new GachaCardInventory
+ last = new SolsticeGauntlet
{
- GachaCardInventoryID = long.Parse(reader["GachaCardInventoryID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- GachaCardID = long.Parse(reader["GachaCardID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ SolsticeGauntletID = long.Parse(reader["SolsticeGauntletID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ WeaponType = reader["WeaponType"]?.ToString() ?? "0",
+ Category = reader["Category"]?.ToString() ?? "0",
+ TotalFramesElapsed = long.Parse(reader["TotalFramesElapsed"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ TotalTimeElapsed = reader["TotalTimeElapsed"]?.ToString() ?? "0",
+ Run1ID = long.Parse(reader["Run1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run2ID = long.Parse(reader["Run2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run3ID = long.Parse(reader["Run3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run4ID = long.Parse(reader["Run4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run5ID = long.Parse(reader["Run5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run6ID = long.Parse(reader["Run6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
};
}
}
@@ -7401,65 +7947,36 @@ private GachaCardInventory GetLastGachaCard(SQLiteConnection conn)
return last;
}
- private PlayerInventory GetLastPlayerInventory(SQLiteConnection conn)
+ private MusouGauntlet GetLastMusouGauntlet(SQLiteConnection conn)
{
- PlayerInventory last = new ();
+ MusouGauntlet last = new ();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand("SELECT * FROM PlayerInventory ORDER BY PlayerInventoryID DESC LIMIT 1", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM MusouGauntlets ORDER BY MusouGauntletID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
- last = new PlayerInventory
+ last = new MusouGauntlet
{
- CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
- CreatedBy = reader["CreatedBy"].ToString(),
- PlayerInventoryID = long.Parse(reader["PlayerInventoryID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item1ID = long.Parse(reader["Item1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item2ID = long.Parse(reader["Item2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item3ID = long.Parse(reader["Item3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item4ID = long.Parse(reader["Item4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item5ID = long.Parse(reader["Item5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item6ID = long.Parse(reader["Item6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item7ID = long.Parse(reader["Item7ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item8ID = long.Parse(reader["Item8ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item9ID = long.Parse(reader["Item9ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item10ID = long.Parse(reader["Item10ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item11ID = long.Parse(reader["Item11ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item12ID = long.Parse(reader["Item12ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item13ID = long.Parse(reader["Item13ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item14ID = long.Parse(reader["Item14ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item15ID = long.Parse(reader["Item15ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item16ID = long.Parse(reader["Item16ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item17ID = long.Parse(reader["Item17ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item18ID = long.Parse(reader["Item18ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item19ID = long.Parse(reader["Item19ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item20ID = long.Parse(reader["Item20ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item1Quantity = long.Parse(reader["Item1Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item2Quantity = long.Parse(reader["Item2Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item3Quantity = long.Parse(reader["Item3Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item4Quantity = long.Parse(reader["Item4Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item5Quantity = long.Parse(reader["Item5Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item6Quantity = long.Parse(reader["Item6Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item7Quantity = long.Parse(reader["Item7Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item8Quantity = long.Parse(reader["Item8Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item9Quantity = long.Parse(reader["Item9Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item10Quantity = long.Parse(reader["Item10Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item11Quantity = long.Parse(reader["Item11Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item12Quantity = long.Parse(reader["Item12Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item13Quantity = long.Parse(reader["Item13Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item14Quantity = long.Parse(reader["Item14Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item15Quantity = long.Parse(reader["Item15Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item16Quantity = long.Parse(reader["Item16Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item17Quantity = long.Parse(reader["Item17Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item18Quantity = long.Parse(reader["Item18Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item19Quantity = long.Parse(reader["Item19Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item20Quantity = long.Parse(reader["Item20Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ MusouGauntletID = long.Parse(reader["MusouGauntletID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ WeaponType = reader["WeaponType"]?.ToString() ?? "0",
+ Category = reader["Category"]?.ToString() ?? "0",
+ TotalFramesElapsed = long.Parse(reader["TotalFramesElapsed"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ TotalTimeElapsed = reader["TotalTimeElapsed"]?.ToString() ?? "0",
+ Run1ID = long.Parse(reader["Run1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run2ID = long.Parse(reader["Run2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run3ID = long.Parse(reader["Run3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run4ID = long.Parse(reader["Run4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run5ID = long.Parse(reader["Run5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run6ID = long.Parse(reader["Run6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run7ID = long.Parse(reader["Run7ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run8ID = long.Parse(reader["Run8ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run9ID = long.Parse(reader["Run9ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run10ID = long.Parse(reader["Run10ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
};
}
}
@@ -7476,24 +7993,26 @@ private PlayerInventory GetLastPlayerInventory(SQLiteConnection conn)
return last;
}
- private QuestsToggleMode GetLastQuestsToggleMode(SQLiteConnection conn)
+ private PersonalBestAttempts GetLastPersonalBestAttempt(SQLiteConnection conn)
{
- QuestsToggleMode last = new();
+ PersonalBestAttempts last = new ();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand("SELECT * FROM QuestsToggleMode ORDER BY QuestsToggleModeID DESC LIMIT 1", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM PersonalBestAttempts ORDER BY PersonalBestAttemptsID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
- last = new QuestsToggleMode
+ last = new PersonalBestAttempts
{
- QuestsToggleModeID = long.Parse(reader["QuestsToggleModeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- QuestToggleMode = long.Parse(reader["QuestToggleMode"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ PersonalBestAttemptsID = long.Parse(reader["PersonalBestAttemptsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ QuestID = long.Parse(reader["QuestID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ WeaponTypeID = long.Parse(reader["WeaponTypeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActualOverlayMode = reader["ActualOverlayMode"]?.ToString() ?? "0",
+ Attempts = long.Parse(reader["Attempts"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
};
}
}
@@ -7510,307 +8029,61 @@ private QuestsToggleMode GetLastQuestsToggleMode(SQLiteConnection conn)
return last;
}
- ///
- /// Loads the database data into hash sets. This is used to avoid querying the database when checking for achievement unlocks.
- /// When inserting into these hashsets, the database must also be updated, and viceversa.
- ///
- /// The save icon grid.
- public void LoadDatabaseDataIntoHashSets(Grid saveIconGrid, DataLoader dataLoader)
- {
- dataLoader.Model.ShowSaveIcon = true;
-
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Fatal(CultureInfo.InvariantCulture, "Cannot run LoadDatabaseDataIntoHashSets. dataSource: {0}", this.dataSource);
- LoggingService.WriteCrashLog(new Exception("Cannot run LoadDatabaseDataIntoHashSets."));
- }
-
- try
- {
- using (var conn = new SQLiteConnection(this.dataSource))
- {
- conn.Open();
- this.AllQuests = this.GetAllQuests(conn);
- this.AllMezFes = this.GetAllMezFes(conn);
- this.AllBingo = this.GetAllBingo(conn);
- this.AllZenithGauntlets = this.GetAllZenithGauntlets(conn);
- this.AllSolsticeGauntlets = this.GetAllSolsticeGauntlets(conn);
- this.AllMusouGauntlets = this.GetAllMusouGauntlets(conn);
- this.AllPersonalBestAttempts = this.GetAllPersonalBestAttempts(conn);
- this.AllPlayerGear = this.GetAllPlayerGear(conn);
- this.AllActiveSkills = this.GetAllActiveSkills(conn);
- this.AllZenithSkills = this.GetAllZenithSkills(conn);
- this.AllStyleRankSkills = this.GetAllStyleRankSkills(conn);
- this.AllQuestAttempts = this.GetAllQuestAttempts(conn);
- this.AllGachaCards = this.GetAllGachaCards(conn);
- this.AllPlayerInventories = this.GetAllPlayerInventories(conn);
- this.AllQuestsToggleMode = this.GetAllQuestsToggleMode(conn);
- }
- }
- catch (Exception ex)
- {
- LoggingService.WriteCrashLog(ex);
- }
-
- dataLoader.Model.ShowSaveIcon = false;
- }
-
- public RoadDureSkills GetRoadDureSkills(long runID)
+ private QuestAttempts GetLastQuestAttempt(SQLiteConnection conn)
{
- var roadDureSkills = new RoadDureSkills();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get road/dure skills. dataSource: {0}", this.dataSource);
- return roadDureSkills;
- }
-
- // Use a SQL query to retrieve the RoadDureSkills data for the specific RunID from the database
- using (var conn = new SQLiteConnection(this.dataSource))
+ QuestAttempts last = new ();
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand("SELECT * FROM QuestAttempts ORDER BY QuestAttemptsID DESC LIMIT 1", conn))
{
- using (var cmd = new SQLiteCommand("SELECT RoadDureSkillsID, RunID, RoadDureSkill1ID, RoadDureSkill1Level, RoadDureSkill2ID, RoadDureSkill2Level, RoadDureSkill3ID, RoadDureSkill3Level, RoadDureSkill4ID, RoadDureSkill4Level, RoadDureSkill5ID, RoadDureSkill5Level, RoadDureSkill6ID, RoadDureSkill6Level, RoadDureSkill7ID, RoadDureSkill7Level, RoadDureSkill8ID, RoadDureSkill8Level, RoadDureSkill9ID, RoadDureSkill9Level, RoadDureSkill10ID, RoadDureSkill10Level, RoadDureSkill11ID, RoadDureSkill11Level, RoadDureSkill12ID, RoadDureSkill12Level, RoadDureSkill13ID, RoadDureSkill13Level, RoadDureSkill14ID, RoadDureSkill14Level, RoadDureSkill15ID, RoadDureSkill15Level, RoadDureSkill16ID, RoadDureSkill16Level, CreatedAt, CreatedBy FROM RoadDureSkills WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- using (var reader = cmd.ExecuteReader())
+ if (reader.Read())
{
- if (reader.Read())
+ last = new QuestAttempts
{
- roadDureSkills.RoadDureSkillsID = long.Parse(reader["RoadDureSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
- roadDureSkills.RunID = runID;
- for (var i = 1; i <= 16; i++)
- {
- roadDureSkills.GetType().GetProperty("RoadDureSkill" + i + "ID").SetValue(roadDureSkills, long.Parse(reader["RoadDureSkill" + i + "ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture));
- roadDureSkills.GetType().GetProperty("RoadDureSkill" + i + "Level").SetValue(roadDureSkills, long.Parse(reader["RoadDureSkill" + i + "Level"]?.ToString() ?? "0", CultureInfo.InvariantCulture));
- }
-
- roadDureSkills.CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture);
- roadDureSkills.CreatedBy = reader["CreatedBy"]?.ToString() ?? "0";
- }
+ QuestAttemptsID = long.Parse(reader["QuestAttemptsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ QuestID = long.Parse(reader["QuestID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ WeaponTypeID = long.Parse(reader["WeaponTypeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActualOverlayMode = reader["ActualOverlayMode"]?.ToString() ?? "0",
+ Attempts = long.Parse(reader["Attempts"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return roadDureSkills;
+ return last;
}
- private HashSet GetAllPlayerInventories(SQLiteConnection conn)
+ private PlayerGear GetLastPlayerGear(SQLiteConnection conn)
{
- HashSet hashSet = new ();
+ PlayerGear last = new ();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand(@"SELECT * FROM PlayerInventory", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM PlayerGear ORDER BY PlayerGearID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
- while (reader.Read())
+ if (reader.Read())
{
- PlayerInventory data = new ()
+ last = new PlayerGear
{
- PlayerInventoryID = long.Parse(reader["PlayerInventoryID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ PlayerGearHash = reader["PlayerGearHash"]?.ToString() ?? "0",
CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
- CreatedBy = reader["CreatedBy"].ToString(),
- RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item1ID = long.Parse(reader["Item1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item1Quantity = long.Parse(reader["Item1Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item2ID = long.Parse(reader["Item2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item2Quantity = long.Parse(reader["Item2Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item3ID = long.Parse(reader["Item3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item3Quantity = long.Parse(reader["Item3Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item4ID = long.Parse(reader["Item4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item4Quantity = long.Parse(reader["Item4Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item5ID = long.Parse(reader["Item5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item5Quantity = long.Parse(reader["Item5Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item6ID = long.Parse(reader["Item6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item6Quantity = long.Parse(reader["Item6Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item7ID = long.Parse(reader["Item7ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item7Quantity = long.Parse(reader["Item7Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item8ID = long.Parse(reader["Item8ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item8Quantity = long.Parse(reader["Item8Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item9ID = long.Parse(reader["Item9ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item9Quantity = long.Parse(reader["Item9Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item10ID = long.Parse(reader["Item10ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item10Quantity = long.Parse(reader["Item10Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item11ID = long.Parse(reader["Item11ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item11Quantity = long.Parse(reader["Item11Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item12ID = long.Parse(reader["Item12ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item12Quantity = long.Parse(reader["Item12Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item13ID = long.Parse(reader["Item13ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item13Quantity = long.Parse(reader["Item13Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item14ID = long.Parse(reader["Item14ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item14Quantity = long.Parse(reader["Item14Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item15ID = long.Parse(reader["Item15ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item15Quantity = long.Parse(reader["Item15Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item16ID = long.Parse(reader["Item16ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item16Quantity = long.Parse(reader["Item16Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item17ID = long.Parse(reader["Item17ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item17Quantity = long.Parse(reader["Item17Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item18ID = long.Parse(reader["Item18ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item18Quantity = long.Parse(reader["Item18Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item19ID = long.Parse(reader["Item19ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item19Quantity = long.Parse(reader["Item19Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item20ID = long.Parse(reader["Item20ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Item20Quantity = long.Parse(reader["Item20Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- };
-
- hashSet.Add(data);
- }
- }
- }
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
- }
- }
-
- return hashSet;
- }
-
- private HashSet GetAllQuestsToggleMode(SQLiteConnection conn)
- {
- HashSet hashSet = new();
- using (var transaction = conn.BeginTransaction())
- {
- try
- {
- using (var cmd = new SQLiteCommand(@"SELECT * FROM QuestsToggleMode", conn))
- {
- using (var reader = cmd.ExecuteReader())
- {
- while (reader.Read())
- {
- QuestsToggleMode data = new()
- {
- QuestsToggleModeID = long.Parse(reader["QuestsToggleModeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- QuestToggleMode = long.Parse(reader["QuestToggleMode"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- };
-
- hashSet.Add(data);
- }
- }
- }
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
- }
- }
-
- return hashSet;
- }
-
- private HashSet GetAllGachaCards(SQLiteConnection conn)
- {
- HashSet hashSet = new ();
- using (var transaction = conn.BeginTransaction())
- {
- try
- {
- using (var cmd = new SQLiteCommand(@"SELECT * FROM GachaCardInventory", conn))
- {
- using (var reader = cmd.ExecuteReader())
- {
- while (reader.Read())
- {
- GachaCardInventory data = new ()
- {
- GachaCardInventoryID = long.Parse(reader["GachaCardInventoryID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- GachaCardID = long.Parse(reader["GachaCardID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- };
-
- hashSet.Add(data);
- }
- }
- }
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
- }
- }
-
- return hashSet;
- }
-
- private HashSet GetAllQuestAttempts(SQLiteConnection conn)
- {
- HashSet hashSet = new ();
- using (var transaction = conn.BeginTransaction())
- {
- try
- {
- using (var cmd = new SQLiteCommand(@"SELECT * FROM QuestAttempts", conn))
- {
- using (var reader = cmd.ExecuteReader())
- {
- while (reader.Read())
- {
- QuestAttempts data = new ()
- {
- QuestAttemptsID = long.Parse(reader["QuestAttemptsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- QuestID = long.Parse(reader["QuestID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WeaponTypeID = long.Parse(reader["WeaponTypeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActualOverlayMode = reader["ActualOverlayMode"]?.ToString() ?? "0",
- Attempts = long.Parse(reader["Attempts"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- };
-
- hashSet.Add(data);
- }
- }
- }
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
- }
- }
-
- return hashSet;
- }
-
- private HashSet GetAllPlayerGear(SQLiteConnection conn)
- {
- HashSet hashSet = new ();
- using (var transaction = conn.BeginTransaction())
- {
- try
- {
- using (var cmd = new SQLiteCommand(@"SELECT * FROM PlayerGear", conn))
- {
- using (var reader = cmd.ExecuteReader())
- {
- while (reader.Read())
- {
- PlayerGear data = new ()
- {
- PlayerGearHash = reader["PlayerGearHash"]?.ToString() ?? "0",
- CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
- CreatedBy = reader["CreatedBy"]?.ToString() ?? "0",
- PlayerGearID = long.Parse(reader["PlayerGearID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ CreatedBy = reader["CreatedBy"]?.ToString() ?? string.Empty,
+ PlayerGearID = long.Parse(reader["PlayerGearID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
PlayerID = long.Parse(reader["PlayerID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
GearName = reader["GearName"]?.ToString() ?? "0",
@@ -7823,32 +8096,26 @@ private HashSet GetAllPlayerGear(SQLiteConnection conn)
WeaponSlot1 = reader["WeaponSlot1"]?.ToString() ?? "0",
WeaponSlot2 = reader["WeaponSlot2"]?.ToString() ?? "0",
WeaponSlot3 = reader["WeaponSlot3"]?.ToString() ?? "0",
-
HeadID = long.Parse(reader["HeadID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
HeadSlot1ID = long.Parse(reader["HeadSlot1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
HeadSlot2ID = long.Parse(reader["HeadSlot2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
HeadSlot3ID = long.Parse(reader["HeadSlot3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
-
ChestID = long.Parse(reader["ChestID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
ChestSlot1ID = long.Parse(reader["ChestSlot1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
ChestSlot2ID = long.Parse(reader["ChestSlot2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
ChestSlot3ID = long.Parse(reader["ChestSlot3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
-
ArmsID = long.Parse(reader["ArmsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
ArmsSlot1ID = long.Parse(reader["ArmsSlot1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
ArmsSlot2ID = long.Parse(reader["ArmsSlot2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
ArmsSlot3ID = long.Parse(reader["ArmsSlot3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
-
WaistID = long.Parse(reader["WaistID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
WaistSlot1ID = long.Parse(reader["WaistSlot1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
WaistSlot2ID = long.Parse(reader["WaistSlot2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
WaistSlot3ID = long.Parse(reader["WaistSlot3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
-
LegsID = long.Parse(reader["LegsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
LegsSlot1ID = long.Parse(reader["LegsSlot1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
LegsSlot2ID = long.Parse(reader["LegsSlot2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
LegsSlot3ID = long.Parse(reader["LegsSlot3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
-
Cuff1ID = long.Parse(reader["Cuff1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
Cuff2ID = long.Parse(reader["Cuff2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
ZenithSkillsID = long.Parse(reader["ZenithSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
@@ -7867,8 +8134,6 @@ private HashSet GetAllPlayerGear(SQLiteConnection conn)
PlayerAmmoPouchDictionary = reader["PlayerAmmoPouchDictionary"].ToString(),
PartnyaBagDictionary = reader["PartnyaBagDictionary"].ToString(),
};
-
- hashSet.Add(data);
}
}
}
@@ -7881,27 +8146,27 @@ private HashSet GetAllPlayerGear(SQLiteConnection conn)
}
}
- return hashSet;
+ return last;
}
- private HashSet GetAllActiveSkills(SQLiteConnection conn)
+ private ActiveSkills GetLastActiveSkills(SQLiteConnection conn)
{
- HashSet hashSet = new ();
+ ActiveSkills last = new ();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand(@"SELECT * FROM ActiveSkills", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM ActiveSkills ORDER BY ActiveSkillsID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
- while (reader.Read())
+ if (reader.Read())
{
- ActiveSkills data = new ()
+ last = new ActiveSkills
{
- ActiveSkillsID = long.Parse(reader["ActiveSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
CreatedBy = reader["CreatedBy"]?.ToString() ?? string.Empty,
+ ActiveSkillsID = long.Parse(reader["ActiveSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
ActiveSkill1ID = long.Parse(reader["ActiveSkill1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
ActiveSkill2ID = long.Parse(reader["ActiveSkill2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
@@ -7923,8 +8188,6 @@ private HashSet GetAllActiveSkills(SQLiteConnection conn)
ActiveSkill18ID = long.Parse(reader["ActiveSkill18ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
ActiveSkill19ID = long.Parse(reader["ActiveSkill19ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
};
-
- hashSet.Add(data);
}
}
}
@@ -7937,27 +8200,27 @@ private HashSet GetAllActiveSkills(SQLiteConnection conn)
}
}
- return hashSet;
+ return last;
}
- private HashSet GetAllZenithSkills(SQLiteConnection conn)
+ private ZenithSkills GetLastZenithSkills(SQLiteConnection conn)
{
- HashSet hashSet = new();
+ ZenithSkills last = new();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand(@"SELECT * FROM ZenithSkills", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM ZenithSkills ORDER BY ZenithSkillsID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
- while (reader.Read())
+ if (reader.Read())
{
- ZenithSkills data = new()
+ last = new ZenithSkills
{
- ZenithSkillsID = long.Parse(reader["ZenithSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
CreatedBy = reader["CreatedBy"]?.ToString() ?? string.Empty,
+ ZenithSkillsID = long.Parse(reader["ZenithSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
ZenithSkill1ID = long.Parse(reader["ZenithSkill1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
ZenithSkill2ID = long.Parse(reader["ZenithSkill2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
@@ -7967,8 +8230,6 @@ private HashSet GetAllZenithSkills(SQLiteConnection conn)
ZenithSkill6ID = long.Parse(reader["ZenithSkill6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
ZenithSkill7ID = long.Parse(reader["ZenithSkill7ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
};
-
- hashSet.Add(data);
}
}
}
@@ -7981,33 +8242,31 @@ private HashSet GetAllZenithSkills(SQLiteConnection conn)
}
}
- return hashSet;
+ return last;
}
- private HashSet GetAllStyleRankSkills(SQLiteConnection conn)
+ private StyleRankSkills GetLastStyleRankSkills(SQLiteConnection conn)
{
- HashSet hashSet = new ();
+ StyleRankSkills last = new ();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand(@"SELECT * FROM StyleRankSkills", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM StyleRankSkills ORDER BY StyleRankSkillsID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
- while (reader.Read())
+ if (reader.Read())
{
- StyleRankSkills data = new ()
+ last = new StyleRankSkills
{
- StyleRankSkillsID = long.Parse(reader["StyleRankSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
- CreatedBy = reader["CreatedBy"]?.ToString() ?? "0",
+ CreatedBy = reader["CreatedBy"]?.ToString() ?? string.Empty,
+ StyleRankSkillsID = long.Parse(reader["StyleRankSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
StyleRankSkill1ID = long.Parse(reader["StyleRankSkill1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
StyleRankSkill2ID = long.Parse(reader["StyleRankSkill2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
};
-
- hashSet.Add(data);
}
}
}
@@ -8020,32 +8279,27 @@ private HashSet GetAllStyleRankSkills(SQLiteConnection conn)
}
}
- return hashSet;
+ return last;
}
- private HashSet GetAllPersonalBestAttempts(SQLiteConnection conn)
+ private GachaCardInventory GetLastGachaCard(SQLiteConnection conn)
{
- HashSet hashSet = new ();
+ GachaCardInventory last = new ();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand(@"SELECT * FROM PersonalBestAttempts", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM GachaCardInventory ORDER BY GachaCardInventoryID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
- while (reader.Read())
+ if (reader.Read())
{
- PersonalBestAttempts data = new ()
+ last = new GachaCardInventory
{
- PersonalBestAttemptsID = long.Parse(reader["PersonalBestAttemptsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- QuestID = long.Parse(reader["QuestID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WeaponTypeID = long.Parse(reader["WeaponTypeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ActualOverlayMode = reader["ActualOverlayMode"]?.ToString() ?? "0",
- Attempts = long.Parse(reader["Attempts"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ GachaCardInventoryID = long.Parse(reader["GachaCardInventoryID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ GachaCardID = long.Parse(reader["GachaCardID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
};
-
- hashSet.Add(data);
}
}
}
@@ -8058,42 +8312,69 @@ private HashSet GetAllPersonalBestAttempts(SQLiteConnectio
}
}
- return hashSet;
+ return last;
}
- private HashSet GetAllMusouGauntlets(SQLiteConnection conn)
+ private PlayerInventory GetLastPlayerInventory(SQLiteConnection conn)
{
- HashSet hashSet = new ();
+ PlayerInventory last = new ();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand(@"SELECT * FROM MusouGauntlets", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM PlayerInventory ORDER BY PlayerInventoryID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
- while (reader.Read())
+ if (reader.Read())
{
- MusouGauntlet data = new ()
+ last = new PlayerInventory
{
- MusouGauntletID = long.Parse(reader["MusouGauntletID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WeaponType = reader["WeaponType"]?.ToString() ?? "0",
- Category = reader["Category"]?.ToString() ?? "0",
- TotalFramesElapsed = long.Parse(reader["TotalFramesElapsed"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- TotalTimeElapsed = reader["TotalTimeElapsed"]?.ToString() ?? "0",
- Run1ID = long.Parse(reader["Run1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run2ID = long.Parse(reader["Run2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run3ID = long.Parse(reader["Run3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run4ID = long.Parse(reader["Run4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run5ID = long.Parse(reader["Run5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run6ID = long.Parse(reader["Run6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run7ID = long.Parse(reader["Run7ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run8ID = long.Parse(reader["Run8ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run9ID = long.Parse(reader["Run9ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run10ID = long.Parse(reader["Run10ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
+ CreatedBy = reader["CreatedBy"].ToString(),
+ PlayerInventoryID = long.Parse(reader["PlayerInventoryID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item1ID = long.Parse(reader["Item1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item2ID = long.Parse(reader["Item2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item3ID = long.Parse(reader["Item3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item4ID = long.Parse(reader["Item4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item5ID = long.Parse(reader["Item5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item6ID = long.Parse(reader["Item6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item7ID = long.Parse(reader["Item7ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item8ID = long.Parse(reader["Item8ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item9ID = long.Parse(reader["Item9ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item10ID = long.Parse(reader["Item10ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item11ID = long.Parse(reader["Item11ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item12ID = long.Parse(reader["Item12ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item13ID = long.Parse(reader["Item13ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item14ID = long.Parse(reader["Item14ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item15ID = long.Parse(reader["Item15ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item16ID = long.Parse(reader["Item16ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item17ID = long.Parse(reader["Item17ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item18ID = long.Parse(reader["Item18ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item19ID = long.Parse(reader["Item19ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item20ID = long.Parse(reader["Item20ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item1Quantity = long.Parse(reader["Item1Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item2Quantity = long.Parse(reader["Item2Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item3Quantity = long.Parse(reader["Item3Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item4Quantity = long.Parse(reader["Item4Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item5Quantity = long.Parse(reader["Item5Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item6Quantity = long.Parse(reader["Item6Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item7Quantity = long.Parse(reader["Item7Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item8Quantity = long.Parse(reader["Item8Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item9Quantity = long.Parse(reader["Item9Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item10Quantity = long.Parse(reader["Item10Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item11Quantity = long.Parse(reader["Item11Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item12Quantity = long.Parse(reader["Item12Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item13Quantity = long.Parse(reader["Item13Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item14Quantity = long.Parse(reader["Item14Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item15Quantity = long.Parse(reader["Item15Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item16Quantity = long.Parse(reader["Item16Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item17Quantity = long.Parse(reader["Item17Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item18Quantity = long.Parse(reader["Item18Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item19Quantity = long.Parse(reader["Item19Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item20Quantity = long.Parse(reader["Item20Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
};
-
- hashSet.Add(data);
}
}
}
@@ -8106,38 +8387,28 @@ private HashSet GetAllMusouGauntlets(SQLiteConnection conn)
}
}
- return hashSet;
+ return last;
}
- private HashSet GetAllSolsticeGauntlets(SQLiteConnection conn)
+ private QuestsToggleMode GetLastQuestsToggleMode(SQLiteConnection conn)
{
- HashSet hashSet = new ();
+ QuestsToggleMode last = new();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand(@"SELECT * FROM SolsticeGauntlets", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM QuestsToggleMode ORDER BY QuestsToggleModeID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
- while (reader.Read())
+ if (reader.Read())
{
- SolsticeGauntlet data = new ()
+ last = new QuestsToggleMode
{
- SolsticeGauntletID = long.Parse(reader["SolsticeGauntletID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WeaponType = reader["WeaponType"]?.ToString() ?? "0",
- Category = reader["Category"]?.ToString() ?? "0",
- TotalFramesElapsed = long.Parse(reader["TotalFramesElapsed"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- TotalTimeElapsed = reader["TotalTimeElapsed"]?.ToString() ?? "0",
- Run1ID = long.Parse(reader["Run1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run2ID = long.Parse(reader["Run2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run3ID = long.Parse(reader["Run3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run4ID = long.Parse(reader["Run4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run5ID = long.Parse(reader["Run5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run6ID = long.Parse(reader["Run6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ QuestsToggleModeID = long.Parse(reader["QuestsToggleModeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ QuestToggleMode = long.Parse(reader["QuestToggleMode"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
};
-
- hashSet.Add(data);
}
}
}
@@ -8150,55 +8421,28 @@ private HashSet GetAllSolsticeGauntlets(SQLiteConnection conn)
}
}
- return hashSet;
+ return last;
}
- private HashSet GetAllZenithGauntlets(SQLiteConnection conn)
+ private QuestsActiveFeature GetLastQuestsActiveFeature(SQLiteConnection conn)
{
- HashSet hashSet = new ();
+ QuestsActiveFeature last = new();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand(@"SELECT * FROM ZenithGauntlets", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM QuestsActiveFeature ORDER BY QuestsActiveFeatureID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
- while (reader.Read())
+ if (reader.Read())
{
- ZenithGauntlet data = new ()
+ last = new QuestsActiveFeature
{
- ZenithGauntletID = long.Parse(reader["ZenithGauntletID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- WeaponType = reader["WeaponType"]?.ToString() ?? "0",
- Category = reader["Category"]?.ToString() ?? "0",
- TotalFramesElapsed = long.Parse(reader["TotalFramesElapsed"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- TotalTimeElapsed = reader["TotalTimeElapsed"]?.ToString() ?? "0",
- Run1ID = long.Parse(reader["Run1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run2ID = long.Parse(reader["Run2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run3ID = long.Parse(reader["Run3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run4ID = long.Parse(reader["Run4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run5ID = long.Parse(reader["Run5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run6ID = long.Parse(reader["Run6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run7ID = long.Parse(reader["Run7ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run8ID = long.Parse(reader["Run8ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run9ID = long.Parse(reader["Run9ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run10ID = long.Parse(reader["Run10ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run11ID = long.Parse(reader["Run11ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run12ID = long.Parse(reader["Run12ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run13ID = long.Parse(reader["Run13ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run14ID = long.Parse(reader["Run14ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run15ID = long.Parse(reader["Run15ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run16ID = long.Parse(reader["Run16ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run17ID = long.Parse(reader["Run17ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run18ID = long.Parse(reader["Run18ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run19ID = long.Parse(reader["Run19ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run20ID = long.Parse(reader["Run20ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run21ID = long.Parse(reader["Run21ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run22ID = long.Parse(reader["Run22ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Run23ID = long.Parse(reader["Run23ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ QuestsActiveFeatureID = long.Parse(reader["QuestsActiveFeatureID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveFeature = long.Parse(reader["ActiveFeature"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
};
-
- hashSet.Add(data);
}
}
}
@@ -8211,37 +8455,30 @@ private HashSet GetAllZenithGauntlets(SQLiteConnection conn)
}
}
- return hashSet;
+ return last;
}
- private HashSet GetAllBingo(SQLiteConnection conn)
+ private QuestsGuildPoogie GetLastQuestsGuildPoogie(SQLiteConnection conn)
{
- HashSet hashSet = new ();
+ QuestsGuildPoogie last = new();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand("SELECT * FROM Bingo", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM QuestsGuildPoogie ORDER BY QuestsGuildPoogieID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
- while (reader.Read())
+ if (reader.Read())
{
- Bingo data = new ()
+ last = new QuestsGuildPoogie
{
- BingoID = long.Parse(reader["BingoID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
- CreatedBy = reader["CreatedBy"]?.ToString() ?? "0",
- Difficulty = (Difficulty)long.Parse(reader["Difficulty"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- MonsterList = JsonConvert.DeserializeObject>(reader["MonsterList"]?.ToString() ?? "{}") ?? new List { },
- WeaponType = reader["WeaponType"]?.ToString() ?? "0",
- Category = ChallengeService.ConvertToBingoGauntletCategory(reader.GetInt64(reader.GetOrdinal("Category"))),
- TotalFramesElapsed = long.Parse(reader["TotalFramesElapsed"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- TotalTimeElapsed = reader["TotalTimeElapsed"]?.ToString() ?? "0",
- Score = long.Parse(reader["Score"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ QuestsGuildPoogieID = long.Parse(reader["QuestsGuildPoogieID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ GuildPoogie1Skill = long.Parse(reader["GuildPoogie1Skill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ GuildPoogie2Skill = long.Parse(reader["GuildPoogie2Skill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ GuildPoogie3Skill = long.Parse(reader["GuildPoogie3Skill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
};
-
- hashSet.Add(data);
}
}
}
@@ -8254,32 +8491,36 @@ private HashSet GetAllBingo(SQLiteConnection conn)
}
}
- return hashSet;
+ return last;
}
- private HashSet GetAllMezFes(SQLiteConnection conn)
+ private QuestsDiva GetLastQuestsDiva(SQLiteConnection conn)
{
- HashSet hashSet = new ();
+ QuestsDiva last = new();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand("SELECT * FROM MezFes", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM QuestsDiva ORDER BY QuestsDivaID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
- while (reader.Read())
+ if (reader.Read())
{
- MezFes data = new ()
+ last = new QuestsDiva
{
- MezFesID = long.Parse(reader["MezFesID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
- CreatedBy = reader["CreatedBy"].ToString(),
- MezFesMinigameID = long.Parse(reader["MezFesMinigameID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- Score = long.Parse(reader["Score"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ QuestsDivaID = long.Parse(reader["QuestsDivaID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaSongBuffOn = long.Parse(reader["DivaSongBuffOn"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemRedSkill = long.Parse(reader["DivaPrayerGemRedSkill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemRedLevel = long.Parse(reader["DivaPrayerGemRedLevel"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemYellowSkill = long.Parse(reader["DivaPrayerGemYellowSkill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemYellowLevel = long.Parse(reader["DivaPrayerGemYellowLevel"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemGreenSkill = long.Parse(reader["DivaPrayerGemGreenSkill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemGreenLevel = long.Parse(reader["DivaPrayerGemGreenLevel"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemBlueSkill = long.Parse(reader["DivaPrayerGemBlueSkill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemBlueLevel = long.Parse(reader["DivaPrayerGemBlueLevel"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
};
-
- hashSet.Add(data);
}
}
}
@@ -8292,68 +8533,48 @@ private HashSet GetAllMezFes(SQLiteConnection conn)
}
}
- return hashSet;
+ return last;
}
- private HashSet GetAllQuests(SQLiteConnection conn)
+ private QuestsHalk GetLastQuestsHalk(SQLiteConnection conn)
{
- HashSet quests = new ();
+ QuestsHalk last = new();
using (var transaction = conn.BeginTransaction())
{
try
{
- using (var cmd = new SQLiteCommand("SELECT * FROM Quests", conn))
+ using (var cmd = new SQLiteCommand("SELECT * FROM QuestsHalk ORDER BY QuestsHalkID DESC LIMIT 1", conn))
{
using (var reader = cmd.ExecuteReader())
{
- while (reader.Read())
+ if (reader.Read())
{
- var quest = new Quest
+ last = new QuestsHalk
{
- QuestHash = reader["QuestHash"].ToString(),
- CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
- CreatedBy = reader["CreatedBy"].ToString(),
+ QuestsHalkID = long.Parse(reader["QuestsHalkID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkOn = long.Parse(reader["HalkOn"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkPotEffectOn = long.Parse(reader["HalkPotEffectOn"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkFullness = long.Parse(reader["HalkFullness"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkLevel = long.Parse(reader["HalkLevel"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkIntimacy = long.Parse(reader["HalkIntimacy"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkHealth = long.Parse(reader["HalkHealth"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkAttack = long.Parse(reader["HalkAttack"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkDefense = long.Parse(reader["HalkDefense"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkIntellect = long.Parse(reader["HalkIntellect"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkSkill1 = long.Parse(reader["HalkSkill1"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkSkill2 = long.Parse(reader["HalkSkill2"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkSkill3 = long.Parse(reader["HalkSkill3"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkElementNone = long.Parse(reader["HalkElementNone"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkFire = long.Parse(reader["HalkFire"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkThunder = long.Parse(reader["HalkThunder"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkWater = long.Parse(reader["HalkWater"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkIce = long.Parse(reader["HalkIce"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkDragon = long.Parse(reader["HalkDragon"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkSleep = long.Parse(reader["HalkSleep"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkParalysis = long.Parse(reader["HalkParalysis"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkPoison = long.Parse(reader["HalkPoison"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- QuestID = long.Parse(reader["QuestID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- TimeLeft = long.Parse(reader["TimeLeft"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- FinalTimeValue = long.Parse(reader["FinalTimeValue"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- FinalTimeDisplay = reader["FinalTimeDisplay"].ToString(),
- ObjectiveImage = reader["ObjectiveImage"].ToString(),
- ObjectiveTypeID = long.Parse(reader["ObjectiveTypeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- ObjectiveQuantity = long.Parse(reader["ObjectiveQuantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- StarGrade = long.Parse(reader["StarGrade"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
- RankName = reader["RankName"].ToString(),
- ObjectiveName = reader["ObjectiveName"].ToString(),
- Date = DateTime.Parse(reader["Date"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
- YouTubeID = reader["YouTubeID"].ToString(),
- AttackBuffDictionary = reader["AttackBuffDictionary"].ToString(),
- HitCountDictionary = reader["HitCountDictionary"].ToString(),
- HitsPerSecondDictionary = reader["HitsPerSecondDictionary"].ToString(),
- DamageDealtDictionary = reader["DamageDealtDictionary"].ToString(),
- DamagePerSecondDictionary = reader["DamagePerSecondDictionary"].ToString(),
- AreaChangesDictionary = reader["AreaChangesDictionary"].ToString(),
- CartsDictionary = reader["CartsDictionary"].ToString(),
-
- Monster1HPDictionary = reader["Monster1HPDictionary"].ToString(),
- Monster2HPDictionary = reader["Monster2HPDictionary"].ToString(),
- Monster3HPDictionary = reader["Monster3HPDictionary"].ToString(),
- Monster4HPDictionary = reader["Monster4HPDictionary"].ToString(),
-
- HitsTakenBlockedDictionary = reader["HitsTakenBlockedDictionary"].ToString(),
- HitsTakenBlockedPerSecondDictionary = reader["HitsTakenBlockedPerSecondDictionary"].ToString(),
- PlayerHPDictionary = reader["PlayerHPDictionary"].ToString(),
- PlayerStaminaDictionary = reader["PlayerStaminaDictionary"].ToString(),
- KeyStrokesDictionary = reader["KeyStrokesDictionary"].ToString(),
- MouseInputDictionary = reader["MouseInputDictionary"].ToString(),
- GamepadInputDictionary = reader["GamepadInputDictionary"].ToString(),
-
- ActionsPerMinuteDictionary = reader["ActionsPerMinuteDictionary"].ToString(),
- OverlayModeDictionary = reader["OverlayModeDictionary"].ToString(),
- ActualOverlayMode = reader["ActualOverlayMode"].ToString(),
- PartySize = long.Parse(reader["PartySize"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
};
-
- quests.Add(quest);
}
}
}
@@ -8366,66 +8587,71 @@ private HashSet GetAllQuests(SQLiteConnection conn)
}
}
- return quests;
+ return last;
}
- public StyleRankSkills GetStyleRankSkills(long runID)
+ ///
+ /// Loads the database data into hash sets. This is used to avoid querying the database when checking for achievement unlocks.
+ /// When inserting into these hashsets, the database must also be updated, and viceversa.
+ ///
+ /// The save icon grid.
+ public void LoadDatabaseDataIntoHashSets(Grid saveIconGrid, DataLoader dataLoader)
{
- var styleRankSkills = new StyleRankSkills();
+ dataLoader.Model.ShowSaveIcon = true;
+
if (string.IsNullOrEmpty(this.dataSource))
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get style rank skills. dataSource: {0}", this.dataSource);
- return styleRankSkills;
+ Logger.Fatal(CultureInfo.InvariantCulture, "Cannot run LoadDatabaseDataIntoHashSets. dataSource: {0}", this.dataSource);
+ LoggingService.WriteCrashLog(new Exception("Cannot run LoadDatabaseDataIntoHashSets."));
}
- // Use a SQL query to retrieve the StyleRankSkills data for the specific RunID from the database
- using (var conn = new SQLiteConnection(this.dataSource))
+ try
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ using (var conn = new SQLiteConnection(this.dataSource))
{
- try
- {
- using (var cmd = new SQLiteCommand("SELECT StyleRankSkillsID, RunID, StyleRankSkill1ID, StyleRankSkill2ID, CreatedAt, CreatedBy FROM StyleRankSkills WHERE RunID = @runID", conn))
- {
- cmd.Parameters.AddWithValue("@runID", runID);
-
- using (var reader = cmd.ExecuteReader())
- {
- if (reader.Read())
- {
- styleRankSkills.StyleRankSkillsID = long.Parse(reader["StyleRankSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
- styleRankSkills.RunID = runID;
- styleRankSkills.StyleRankSkill1ID = long.Parse(reader["StyleRankSkill1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
- styleRankSkills.StyleRankSkill2ID = long.Parse(reader["StyleRankSkill2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
- styleRankSkills.CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture);
- styleRankSkills.CreatedBy = reader["CreatedBy"]?.ToString() ?? "0";
- }
- }
- }
+ conn.Open();
+ this.AllQuests = this.GetAllQuests(conn);
+ this.AllMezFes = this.GetAllMezFes(conn);
+ this.AllBingo = this.GetAllBingo(conn);
+ this.AllZenithGauntlets = this.GetAllZenithGauntlets(conn);
+ this.AllSolsticeGauntlets = this.GetAllSolsticeGauntlets(conn);
+ this.AllMusouGauntlets = this.GetAllMusouGauntlets(conn);
+ this.AllPersonalBestAttempts = this.GetAllPersonalBestAttempts(conn);
+ this.AllPlayerGear = this.GetAllPlayerGear(conn);
+ this.AllActiveSkills = this.GetAllActiveSkills(conn);
+ this.AllZenithSkills = this.GetAllZenithSkills(conn);
+ this.AllStyleRankSkills = this.GetAllStyleRankSkills(conn);
+ this.AllQuestAttempts = this.GetAllQuestAttempts(conn);
+ this.AllGachaCards = this.GetAllGachaCards(conn);
+ this.AllPlayerInventories = this.GetAllPlayerInventories(conn);
+ this.AllQuestsToggleMode = this.GetAllQuestsToggleMode(conn);
+ this.AllQuestsActiveFeature = this.GetAllQuestsActiveFeature(conn);
+ this.AllQuestsGuildPoogie = this.GetAllQuestsGuildPoogie(conn);
+ this.AllQuestsDiva = this.GetAllQuestsDiva(conn);
+ this.AllQuestsHalk = this.GetAllQuestsHalk(conn);
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
- }
}
}
+ catch (Exception ex)
+ {
+ LoggingService.WriteCrashLog(ex);
+ }
- return styleRankSkills;
+ dataLoader.Model.ShowSaveIcon = false;
}
- public AutomaticSkills GetAutomaticSkills(long runID)
+
+
+ public RoadDureSkills GetRoadDureSkills(long runID)
{
- var automaticSkills = new AutomaticSkills();
+ var roadDureSkills = new RoadDureSkills();
if (string.IsNullOrEmpty(this.dataSource))
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get automatic skills. dataSource: {0}", this.dataSource);
- return automaticSkills;
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get road/dure skills. dataSource: {0}", this.dataSource);
+ return roadDureSkills;
}
- // Use a SQL query to retrieve the AutomaticSkills data for the specific RunID from the database
+ // Use a SQL query to retrieve the RoadDureSkills data for the specific RunID from the database
using (var conn = new SQLiteConnection(this.dataSource))
{
conn.Open();
@@ -8433,7 +8659,7 @@ public AutomaticSkills GetAutomaticSkills(long runID)
{
try
{
- using (var cmd = new SQLiteCommand("SELECT AutomaticSkillsID, RunID, AutomaticSkill1ID, AutomaticSkill2ID, AutomaticSkill3ID, AutomaticSkill4ID, AutomaticSkill5ID, AutomaticSkill6ID, CreatedAt, CreatedBy FROM AutomaticSkills WHERE RunID = @runID", conn))
+ using (var cmd = new SQLiteCommand("SELECT RoadDureSkillsID, RunID, RoadDureSkill1ID, RoadDureSkill1Level, RoadDureSkill2ID, RoadDureSkill2Level, RoadDureSkill3ID, RoadDureSkill3Level, RoadDureSkill4ID, RoadDureSkill4Level, RoadDureSkill5ID, RoadDureSkill5Level, RoadDureSkill6ID, RoadDureSkill6Level, RoadDureSkill7ID, RoadDureSkill7Level, RoadDureSkill8ID, RoadDureSkill8Level, RoadDureSkill9ID, RoadDureSkill9Level, RoadDureSkill10ID, RoadDureSkill10Level, RoadDureSkill11ID, RoadDureSkill11Level, RoadDureSkill12ID, RoadDureSkill12Level, RoadDureSkill13ID, RoadDureSkill13Level, RoadDureSkill14ID, RoadDureSkill14Level, RoadDureSkill15ID, RoadDureSkill15Level, RoadDureSkill16ID, RoadDureSkill16Level, CreatedAt, CreatedBy FROM RoadDureSkills WHERE RunID = @runID", conn))
{
cmd.Parameters.AddWithValue("@runID", runID);
@@ -8441,15 +8667,16 @@ public AutomaticSkills GetAutomaticSkills(long runID)
{
if (reader.Read())
{
- automaticSkills.AutomaticSkillsID = long.Parse(reader["AutomaticSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
- automaticSkills.RunID = runID;
- for (var i = 1; i <= 6; i++)
+ roadDureSkills.RoadDureSkillsID = long.Parse(reader["RoadDureSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
+ roadDureSkills.RunID = runID;
+ for (var i = 1; i <= 16; i++)
{
- automaticSkills.GetType().GetProperty("AutomaticSkill" + i + "ID").SetValue(automaticSkills, long.Parse(reader["AutomaticSkill" + i + "ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture));
+ roadDureSkills.GetType().GetProperty("RoadDureSkill" + i + "ID").SetValue(roadDureSkills, long.Parse(reader["RoadDureSkill" + i + "ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture));
+ roadDureSkills.GetType().GetProperty("RoadDureSkill" + i + "Level").SetValue(roadDureSkills, long.Parse(reader["RoadDureSkill" + i + "Level"]?.ToString() ?? "0", CultureInfo.InvariantCulture));
}
- automaticSkills.CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture);
- automaticSkills.CreatedBy = reader["CreatedBy"]?.ToString() ?? "0";
+ roadDureSkills.CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture);
+ roadDureSkills.CreatedBy = reader["CreatedBy"]?.ToString() ?? "0";
}
}
}
@@ -8463,854 +8690,961 @@ public AutomaticSkills GetAutomaticSkills(long runID)
}
}
- return automaticSkills;
+ return roadDureSkills;
}
- public ZenithSkills GetZenithSkills(long runID)
+ private HashSet GetAllPlayerInventories(SQLiteConnection conn)
{
- var zenithSkills = new ZenithSkills();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get zenith skills. dataSource: {0}", this.dataSource);
- return zenithSkills;
- }
-
- // Use a SQL query to retrieve the ZenithSkills data for the specific RunID from the database
- using (var conn = new SQLiteConnection(this.dataSource))
+ HashSet hashSet = new ();
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand(@"SELECT * FROM PlayerInventory", conn))
{
- using (var cmd = new SQLiteCommand("SELECT ZenithSkillsID, RunID, ZenithSkill1ID, ZenithSkill2ID, ZenithSkill3ID, ZenithSkill4ID, ZenithSkill5ID, ZenithSkill6ID, ZenithSkill7ID, CreatedAt, CreatedBy FROM ZenithSkills WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- using (var reader = cmd.ExecuteReader())
+ while (reader.Read())
{
- if (reader.Read())
+ PlayerInventory data = new ()
{
- zenithSkills.ZenithSkillsID = long.Parse(reader["ZenithSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
- zenithSkills.RunID = runID;
- for (var i = 1; i <= 7; i++)
- {
- zenithSkills.GetType().GetProperty("ZenithSkill" + i + "ID").SetValue(zenithSkills, long.Parse(reader["ZenithSkill" + i + "ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture));
- }
+ PlayerInventoryID = long.Parse(reader["PlayerInventoryID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
+ CreatedBy = reader["CreatedBy"].ToString(),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item1ID = long.Parse(reader["Item1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item1Quantity = long.Parse(reader["Item1Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item2ID = long.Parse(reader["Item2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item2Quantity = long.Parse(reader["Item2Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item3ID = long.Parse(reader["Item3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item3Quantity = long.Parse(reader["Item3Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item4ID = long.Parse(reader["Item4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item4Quantity = long.Parse(reader["Item4Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item5ID = long.Parse(reader["Item5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item5Quantity = long.Parse(reader["Item5Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item6ID = long.Parse(reader["Item6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item6Quantity = long.Parse(reader["Item6Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item7ID = long.Parse(reader["Item7ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item7Quantity = long.Parse(reader["Item7Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item8ID = long.Parse(reader["Item8ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item8Quantity = long.Parse(reader["Item8Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item9ID = long.Parse(reader["Item9ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item9Quantity = long.Parse(reader["Item9Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item10ID = long.Parse(reader["Item10ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item10Quantity = long.Parse(reader["Item10Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item11ID = long.Parse(reader["Item11ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item11Quantity = long.Parse(reader["Item11Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item12ID = long.Parse(reader["Item12ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item12Quantity = long.Parse(reader["Item12Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item13ID = long.Parse(reader["Item13ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item13Quantity = long.Parse(reader["Item13Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item14ID = long.Parse(reader["Item14ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item14Quantity = long.Parse(reader["Item14Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item15ID = long.Parse(reader["Item15ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item15Quantity = long.Parse(reader["Item15Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item16ID = long.Parse(reader["Item16ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item16Quantity = long.Parse(reader["Item16Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item17ID = long.Parse(reader["Item17ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item17Quantity = long.Parse(reader["Item17Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item18ID = long.Parse(reader["Item18ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item18Quantity = long.Parse(reader["Item18Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item19ID = long.Parse(reader["Item19ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item19Quantity = long.Parse(reader["Item19Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item20ID = long.Parse(reader["Item20ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Item20Quantity = long.Parse(reader["Item20Quantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
- zenithSkills.CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture);
- zenithSkills.CreatedBy = reader["CreatedBy"]?.ToString() ?? "0";
- }
+ hashSet.Add(data);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return zenithSkills;
+ return hashSet;
}
- public CaravanSkills GetCaravanSkills(long runID)
+ private HashSet GetAllQuestsToggleMode(SQLiteConnection conn)
{
- var caravanSkills = new CaravanSkills();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get caravan skills. dataSource: {0}", this.dataSource);
- return caravanSkills;
- }
-
- // Use a SQL query to retrieve the CaravanSkills data for the specific RunID from the database
- using (var conn = new SQLiteConnection(this.dataSource))
+ HashSet hashSet = new();
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand(@"SELECT * FROM QuestsToggleMode", conn))
{
- using (var cmd = new SQLiteCommand("SELECT CaravanSkillsID, RunID, CaravanSkill1ID, CaravanSkill2ID, CaravanSkill3ID, CreatedAt, CreatedBy FROM CaravanSkills WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- using (var reader = cmd.ExecuteReader())
+ while (reader.Read())
{
- if (reader.Read())
+ QuestsToggleMode data = new()
{
- caravanSkills.CaravanSkillsID = long.Parse(reader["CaravanSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
- caravanSkills.RunID = runID;
- for (var i = 1; i <= 3; i++)
- {
- caravanSkills.GetType().GetProperty("CaravanSkill" + i + "ID").SetValue(caravanSkills, long.Parse(reader["CaravanSkill" + i + "ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture));
- }
+ QuestsToggleModeID = long.Parse(reader["QuestsToggleModeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ QuestToggleMode = long.Parse(reader["QuestToggleMode"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
- caravanSkills.CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture);
- caravanSkills.CreatedBy = reader["CreatedBy"]?.ToString() ?? "0";
- }
+ hashSet.Add(data);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return caravanSkills;
+ return hashSet;
}
- public Dictionary GetAttackBuffDictionary(long runID)
+ private HashSet GetAllQuestsActiveFeature(SQLiteConnection conn)
{
- Dictionary attackBuffDictionary = new ();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get attack buff dictionary. dataSource: {0}", this.dataSource);
- return attackBuffDictionary;
- }
+ HashSet hashSet = new HashSet();
- using (var conn = new SQLiteConnection(this.dataSource))
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand(@"SELECT * FROM QuestsActiveFeature", conn))
{
- using (var cmd = new SQLiteCommand("SELECT AttackBuffDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ while (reader.Read())
{
- var obj = JsonConvert.DeserializeObject>((string)result);
- if (obj == null)
+ QuestsActiveFeature data = new QuestsActiveFeature
{
- return attackBuffDictionary;
- }
+ QuestsActiveFeatureID = long.Parse(reader["QuestsActiveFeatureID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveFeature = long.Parse(reader["ActiveFeature"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
- attackBuffDictionary = obj;
+ hashSet.Add(data);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return attackBuffDictionary;
+ return hashSet;
}
- public Dictionary GetHitCountDictionary(long runID)
+ private HashSet GetAllQuestsGuildPoogie(SQLiteConnection conn)
{
- Dictionary dictionary = new ();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get hit count dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
- }
+ HashSet hashSet = new HashSet();
- using (var conn = new SQLiteConnection(this.dataSource))
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand(@"SELECT * FROM QuestsGuildPoogie", conn))
{
- using (var cmd = new SQLiteCommand("SELECT HitCountDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ while (reader.Read())
{
- var obj = JsonConvert.DeserializeObject>((string)result);
- if (obj == null)
+ QuestsGuildPoogie data = new QuestsGuildPoogie
{
- return dictionary;
- }
+ QuestsGuildPoogieID = long.Parse(reader["QuestsGuildPoogieID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ GuildPoogie1Skill = long.Parse(reader["GuildPoogie1Skill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ GuildPoogie2Skill = long.Parse(reader["GuildPoogie2Skill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ GuildPoogie3Skill = long.Parse(reader["GuildPoogie3Skill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
- dictionary = obj;
+ hashSet.Add(data);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return dictionary;
+ return hashSet;
}
- public Dictionary GetHitsPerSecondDictionary(long runID)
+ private HashSet GetAllQuestsDiva(SQLiteConnection conn)
{
- Dictionary dictionary = new ();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get hits per second dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
- }
+ HashSet hashSet = new HashSet();
- using (var conn = new SQLiteConnection(this.dataSource))
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand(@"SELECT * FROM QuestsDiva", conn))
{
- using (var cmd = new SQLiteCommand("SELECT HitsPerSecondDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ while (reader.Read())
{
- var obj = JsonConvert.DeserializeObject>((string)result);
- if (obj == null)
+ QuestsDiva data = new QuestsDiva
{
- return dictionary;
- }
+ QuestsDivaID = long.Parse(reader["QuestsDivaID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaSongBuffOn = long.Parse(reader["DivaSongBuffOn"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemRedSkill = long.Parse(reader["DivaPrayerGemRedSkill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemRedLevel = long.Parse(reader["DivaPrayerGemRedLevel"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemYellowSkill = long.Parse(reader["DivaPrayerGemYellowSkill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemYellowLevel = long.Parse(reader["DivaPrayerGemYellowLevel"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemGreenSkill = long.Parse(reader["DivaPrayerGemGreenSkill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemGreenLevel = long.Parse(reader["DivaPrayerGemGreenLevel"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemBlueSkill = long.Parse(reader["DivaPrayerGemBlueSkill"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaPrayerGemBlueLevel = long.Parse(reader["DivaPrayerGemBlueLevel"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
- dictionary = obj;
+ hashSet.Add(data);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return dictionary;
+ return hashSet;
}
- public Dictionary GetDamageDealtDictionary(long runID)
+ private HashSet GetAllQuestsHalk(SQLiteConnection conn)
{
- Dictionary dictionary = new ();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get damage dealt dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
- }
+ HashSet hashSet = new HashSet();
- using (var conn = new SQLiteConnection(this.dataSource))
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand(@"SELECT * FROM QuestsHalk", conn))
{
- using (var cmd = new SQLiteCommand("SELECT DamageDealtDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ while (reader.Read())
{
- var obj = JsonConvert.DeserializeObject>((string)result);
- if (obj == null)
+ QuestsHalk data = new QuestsHalk
{
- return dictionary;
- }
+ QuestsHalkID = long.Parse(reader["QuestsHalkID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkOn = long.Parse(reader["HalkOn"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkPotEffectOn = long.Parse(reader["HalkPotEffectOn"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkFullness = long.Parse(reader["HalkFullness"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkLevel = long.Parse(reader["HalkLevel"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkIntimacy = long.Parse(reader["HalkIntimacy"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkHealth = long.Parse(reader["HalkHealth"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkAttack = long.Parse(reader["HalkAttack"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkDefense = long.Parse(reader["HalkDefense"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkIntellect = long.Parse(reader["HalkIntellect"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkSkill1 = long.Parse(reader["HalkSkill1"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkSkill2 = long.Parse(reader["HalkSkill2"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkSkill3 = long.Parse(reader["HalkSkill3"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkElementNone = long.Parse(reader["HalkElementNone"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkFire = long.Parse(reader["HalkFire"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkThunder = long.Parse(reader["HalkThunder"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkWater = long.Parse(reader["HalkWater"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkIce = long.Parse(reader["HalkIce"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkDragon = long.Parse(reader["HalkDragon"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkSleep = long.Parse(reader["HalkSleep"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkParalysis = long.Parse(reader["HalkParalysis"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HalkPoison = long.Parse(reader["HalkPoison"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
- dictionary = obj;
+ hashSet.Add(data);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return dictionary;
+ return hashSet;
}
- public Dictionary GetDamagePerSecondDictionary(long runID)
- {
- Dictionary dictionary = new ();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get damage per second dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
- }
- using (var conn = new SQLiteConnection(this.dataSource))
+ private HashSet GetAllGachaCards(SQLiteConnection conn)
+ {
+ HashSet hashSet = new ();
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand(@"SELECT * FROM GachaCardInventory", conn))
{
- using (var cmd = new SQLiteCommand("SELECT DamagePerSecondDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ while (reader.Read())
{
- var obj = JsonConvert.DeserializeObject>((string)result);
- if (obj == null)
+ GachaCardInventory data = new ()
{
- return dictionary;
- }
+ GachaCardInventoryID = long.Parse(reader["GachaCardInventoryID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ GachaCardID = long.Parse(reader["GachaCardID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
- dictionary = obj;
+ hashSet.Add(data);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return dictionary;
+ return hashSet;
}
- public Dictionary GetAreaChangesDictionary(long runID)
+ private HashSet GetAllQuestAttempts(SQLiteConnection conn)
{
- Dictionary dictionary = new ();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get area changes dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
- }
-
- using (var conn = new SQLiteConnection(this.dataSource))
+ HashSet hashSet = new ();
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand(@"SELECT * FROM QuestAttempts", conn))
{
- using (var cmd = new SQLiteCommand("SELECT AreaChangesDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ while (reader.Read())
{
- var obj = JsonConvert.DeserializeObject>((string)result);
- if (obj == null)
+ QuestAttempts data = new ()
{
- return dictionary;
- }
+ QuestAttemptsID = long.Parse(reader["QuestAttemptsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ QuestID = long.Parse(reader["QuestID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ WeaponTypeID = long.Parse(reader["WeaponTypeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActualOverlayMode = reader["ActualOverlayMode"]?.ToString() ?? "0",
+ Attempts = long.Parse(reader["Attempts"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
- dictionary = obj;
+ hashSet.Add(data);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return dictionary;
+ return hashSet;
}
- public Dictionary GetCartsDictionary(long runID)
+ private HashSet GetAllPlayerGear(SQLiteConnection conn)
{
- Dictionary dictionary = new ();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get carts dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
- }
-
- using (var conn = new SQLiteConnection(this.dataSource))
+ HashSet hashSet = new ();
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand(@"SELECT * FROM PlayerGear", conn))
{
- using (var cmd = new SQLiteCommand("SELECT CartsDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ while (reader.Read())
{
- var obj = JsonConvert.DeserializeObject>((string)result);
- if (obj == null)
+ PlayerGear data = new ()
{
- return dictionary;
- }
+ PlayerGearHash = reader["PlayerGearHash"]?.ToString() ?? "0",
+ CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
+ CreatedBy = reader["CreatedBy"]?.ToString() ?? "0",
+ PlayerGearID = long.Parse(reader["PlayerGearID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ PlayerID = long.Parse(reader["PlayerID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ GearName = reader["GearName"]?.ToString() ?? "0",
+ StyleID = long.Parse(reader["StyleID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ WeaponIconID = long.Parse(reader["WeaponIconID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ WeaponClassID = long.Parse(reader["WeaponClassID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ WeaponTypeID = long.Parse(reader["WeaponTypeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ BlademasterWeaponID = reader["BlademasterWeaponID"] == DBNull.Value ? null : long.Parse(reader["BlademasterWeaponID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ GunnerWeaponID = reader["GunnerWeaponID"] == DBNull.Value ? null : long.Parse(reader["GunnerWeaponID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ WeaponSlot1 = reader["WeaponSlot1"]?.ToString() ?? "0",
+ WeaponSlot2 = reader["WeaponSlot2"]?.ToString() ?? "0",
+ WeaponSlot3 = reader["WeaponSlot3"]?.ToString() ?? "0",
- dictionary = obj;
+ HeadID = long.Parse(reader["HeadID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HeadSlot1ID = long.Parse(reader["HeadSlot1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HeadSlot2ID = long.Parse(reader["HeadSlot2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ HeadSlot3ID = long.Parse(reader["HeadSlot3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+
+ ChestID = long.Parse(reader["ChestID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ChestSlot1ID = long.Parse(reader["ChestSlot1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ChestSlot2ID = long.Parse(reader["ChestSlot2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ChestSlot3ID = long.Parse(reader["ChestSlot3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+
+ ArmsID = long.Parse(reader["ArmsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ArmsSlot1ID = long.Parse(reader["ArmsSlot1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ArmsSlot2ID = long.Parse(reader["ArmsSlot2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ArmsSlot3ID = long.Parse(reader["ArmsSlot3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+
+ WaistID = long.Parse(reader["WaistID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ WaistSlot1ID = long.Parse(reader["WaistSlot1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ WaistSlot2ID = long.Parse(reader["WaistSlot2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ WaistSlot3ID = long.Parse(reader["WaistSlot3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+
+ LegsID = long.Parse(reader["LegsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ LegsSlot1ID = long.Parse(reader["LegsSlot1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ LegsSlot2ID = long.Parse(reader["LegsSlot2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ LegsSlot3ID = long.Parse(reader["LegsSlot3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+
+ Cuff1ID = long.Parse(reader["Cuff1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Cuff2ID = long.Parse(reader["Cuff2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ZenithSkillsID = long.Parse(reader["ZenithSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ AutomaticSkillsID = long.Parse(reader["AutomaticSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkillsID = long.Parse(reader["ActiveSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ CaravanSkillsID = long.Parse(reader["CaravanSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ DivaSkillID = long.Parse(reader["DivaSkillID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ GuildFoodID = long.Parse(reader["GuildFoodID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ StyleRankSkillsID = long.Parse(reader["StyleRankSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ PlayerInventoryID = long.Parse(reader["PlayerInventoryID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ AmmoPouchID = long.Parse(reader["AmmoPouchID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ PartnyaBagID = long.Parse(reader["PartnyaBagID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ PoogieItemID = long.Parse(reader["PoogieItemID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RoadDureSkillsID = long.Parse(reader["RoadDureSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ PlayerInventoryDictionary = reader["PlayerInventoryDictionary"].ToString(),
+ PlayerAmmoPouchDictionary = reader["PlayerAmmoPouchDictionary"].ToString(),
+ PartnyaBagDictionary = reader["PartnyaBagDictionary"].ToString(),
+ };
+
+ hashSet.Add(data);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return dictionary;
+ return hashSet;
}
- public Dictionary> GetMonster1HPDictionary(long runID)
+ private HashSet GetAllActiveSkills(SQLiteConnection conn)
{
- Dictionary> dictionary = new ();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get monster 1 HP dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
- }
-
- using (var conn = new SQLiteConnection(this.dataSource))
+ HashSet hashSet = new ();
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand(@"SELECT * FROM ActiveSkills", conn))
{
- using (var cmd = new SQLiteCommand("SELECT Monster1HPDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ while (reader.Read())
{
- var obj = JsonConvert.DeserializeObject>>((string)result);
- if (obj == null)
+ ActiveSkills data = new ()
{
- return dictionary;
- }
+ ActiveSkillsID = long.Parse(reader["ActiveSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
+ CreatedBy = reader["CreatedBy"]?.ToString() ?? string.Empty,
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill1ID = long.Parse(reader["ActiveSkill1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill2ID = long.Parse(reader["ActiveSkill2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill3ID = long.Parse(reader["ActiveSkill3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill4ID = long.Parse(reader["ActiveSkill4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill5ID = long.Parse(reader["ActiveSkill5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill6ID = long.Parse(reader["ActiveSkill6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill7ID = long.Parse(reader["ActiveSkill7ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill8ID = long.Parse(reader["ActiveSkill8ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill9ID = long.Parse(reader["ActiveSkill9ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill10ID = long.Parse(reader["ActiveSkill10ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill11ID = long.Parse(reader["ActiveSkill11ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill12ID = long.Parse(reader["ActiveSkill12ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill13ID = long.Parse(reader["ActiveSkill13ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill14ID = long.Parse(reader["ActiveSkill14ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill15ID = long.Parse(reader["ActiveSkill15ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill16ID = long.Parse(reader["ActiveSkill16ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill17ID = long.Parse(reader["ActiveSkill17ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill18ID = long.Parse(reader["ActiveSkill18ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActiveSkill19ID = long.Parse(reader["ActiveSkill19ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
- dictionary = obj;
+ hashSet.Add(data);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return dictionary;
+ return hashSet;
}
- public Dictionary> GetMonster2HPDictionary(long runID)
+ private HashSet GetAllZenithSkills(SQLiteConnection conn)
{
- Dictionary> dictionary = new ();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get monster 2 HP dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
- }
-
- using (var conn = new SQLiteConnection(this.dataSource))
+ HashSet hashSet = new();
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand(@"SELECT * FROM ZenithSkills", conn))
{
- using (var cmd = new SQLiteCommand("SELECT Monster2HPDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ while (reader.Read())
{
- var obj = JsonConvert.DeserializeObject>>((string)result);
- if (obj == null)
+ ZenithSkills data = new()
{
- return dictionary;
- }
+ ZenithSkillsID = long.Parse(reader["ZenithSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
+ CreatedBy = reader["CreatedBy"]?.ToString() ?? string.Empty,
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ZenithSkill1ID = long.Parse(reader["ZenithSkill1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ZenithSkill2ID = long.Parse(reader["ZenithSkill2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ZenithSkill3ID = long.Parse(reader["ZenithSkill3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ZenithSkill4ID = long.Parse(reader["ZenithSkill4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ZenithSkill5ID = long.Parse(reader["ZenithSkill5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ZenithSkill6ID = long.Parse(reader["ZenithSkill6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ZenithSkill7ID = long.Parse(reader["ZenithSkill7ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
- dictionary = obj;
+ hashSet.Add(data);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return dictionary;
+ return hashSet;
}
- public Dictionary> GetMonster3HPDictionary(long runID)
+ private HashSet GetAllStyleRankSkills(SQLiteConnection conn)
{
- Dictionary> dictionary = new ();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get monster 3 HP dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
- }
-
- using (var conn = new SQLiteConnection(this.dataSource))
+ HashSet hashSet = new ();
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand(@"SELECT * FROM StyleRankSkills", conn))
{
- using (var cmd = new SQLiteCommand("SELECT Monster3HPDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ while (reader.Read())
{
- var obj = JsonConvert.DeserializeObject>>((string)result);
- if (obj == null)
+ StyleRankSkills data = new ()
{
- return dictionary;
- }
+ StyleRankSkillsID = long.Parse(reader["StyleRankSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
+ CreatedBy = reader["CreatedBy"]?.ToString() ?? "0",
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ StyleRankSkill1ID = long.Parse(reader["StyleRankSkill1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ StyleRankSkill2ID = long.Parse(reader["StyleRankSkill2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
- dictionary = obj;
+ hashSet.Add(data);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return dictionary;
+ return hashSet;
}
- public Dictionary> GetMonster4HPDictionary(long runID)
+ private HashSet GetAllPersonalBestAttempts(SQLiteConnection conn)
{
- Dictionary> dictionary = new ();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get monster 4 HP dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
- }
-
- using (var conn = new SQLiteConnection(this.dataSource))
+ HashSet hashSet = new ();
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand(@"SELECT * FROM PersonalBestAttempts", conn))
{
- using (var cmd = new SQLiteCommand("SELECT Monster4HPDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ while (reader.Read())
{
- var obj = JsonConvert.DeserializeObject>>((string)result);
- if (obj == null)
+ PersonalBestAttempts data = new ()
{
- return dictionary;
- }
+ PersonalBestAttemptsID = long.Parse(reader["PersonalBestAttemptsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ QuestID = long.Parse(reader["QuestID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ WeaponTypeID = long.Parse(reader["WeaponTypeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ActualOverlayMode = reader["ActualOverlayMode"]?.ToString() ?? "0",
+ Attempts = long.Parse(reader["Attempts"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
- dictionary = obj;
+ hashSet.Add(data);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return dictionary;
+ return hashSet;
}
- public Dictionary> GetMonster1AttackMultiplierDictionary(long runID)
+ private HashSet GetAllMusouGauntlets(SQLiteConnection conn)
{
- Dictionary> dictionary = new ();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get monster 1 attack multiplier dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
- }
-
- using (var conn = new SQLiteConnection(this.dataSource))
+ HashSet hashSet = new ();
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand(@"SELECT * FROM MusouGauntlets", conn))
{
- using (var cmd = new SQLiteCommand("SELECT Monster1AttackMultiplierDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ while (reader.Read())
{
- var obj = JsonConvert.DeserializeObject>>((string)result);
- if (obj == null)
+ MusouGauntlet data = new ()
{
- return dictionary;
- }
+ MusouGauntletID = long.Parse(reader["MusouGauntletID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ WeaponType = reader["WeaponType"]?.ToString() ?? "0",
+ Category = reader["Category"]?.ToString() ?? "0",
+ TotalFramesElapsed = long.Parse(reader["TotalFramesElapsed"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ TotalTimeElapsed = reader["TotalTimeElapsed"]?.ToString() ?? "0",
+ Run1ID = long.Parse(reader["Run1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run2ID = long.Parse(reader["Run2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run3ID = long.Parse(reader["Run3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run4ID = long.Parse(reader["Run4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run5ID = long.Parse(reader["Run5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run6ID = long.Parse(reader["Run6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run7ID = long.Parse(reader["Run7ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run8ID = long.Parse(reader["Run8ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run9ID = long.Parse(reader["Run9ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run10ID = long.Parse(reader["Run10ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
- dictionary = obj;
+ hashSet.Add(data);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return dictionary;
+ return hashSet;
}
- public Dictionary> GetMonster1DefenseRateDictionary(long runID)
+ private HashSet GetAllSolsticeGauntlets(SQLiteConnection conn)
{
- Dictionary> dictionary = new ();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get monster 1 defense rate dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
- }
-
- using (var conn = new SQLiteConnection(this.dataSource))
+ HashSet hashSet = new ();
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand(@"SELECT * FROM SolsticeGauntlets", conn))
{
- using (var cmd = new SQLiteCommand("SELECT Monster1DefenseRateDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ while (reader.Read())
{
- var obj = JsonConvert.DeserializeObject>>((string)result);
- if (obj == null)
+ SolsticeGauntlet data = new ()
{
- return dictionary;
- }
+ SolsticeGauntletID = long.Parse(reader["SolsticeGauntletID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ WeaponType = reader["WeaponType"]?.ToString() ?? "0",
+ Category = reader["Category"]?.ToString() ?? "0",
+ TotalFramesElapsed = long.Parse(reader["TotalFramesElapsed"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ TotalTimeElapsed = reader["TotalTimeElapsed"]?.ToString() ?? "0",
+ Run1ID = long.Parse(reader["Run1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run2ID = long.Parse(reader["Run2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run3ID = long.Parse(reader["Run3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run4ID = long.Parse(reader["Run4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run5ID = long.Parse(reader["Run5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run6ID = long.Parse(reader["Run6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
- dictionary = obj;
+ hashSet.Add(data);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return dictionary;
+ return hashSet;
}
- public Dictionary> GetMonster1PoisonThresholdDictionary(long runID)
+ private HashSet GetAllZenithGauntlets(SQLiteConnection conn)
{
- var dictionary = new Dictionary>();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get monster 1 poison threshold dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
- }
-
- using (var conn = new SQLiteConnection(this.dataSource))
+ HashSet hashSet = new ();
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand(@"SELECT * FROM ZenithGauntlets", conn))
{
- using (var cmd = new SQLiteCommand("SELECT Monster1PoisonThresholdDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ while (reader.Read())
{
- var obj = JsonConvert.DeserializeObject>>((string)result);
- if (obj == null)
+ ZenithGauntlet data = new ()
{
- return dictionary;
- }
+ ZenithGauntletID = long.Parse(reader["ZenithGauntletID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ WeaponType = reader["WeaponType"]?.ToString() ?? "0",
+ Category = reader["Category"]?.ToString() ?? "0",
+ TotalFramesElapsed = long.Parse(reader["TotalFramesElapsed"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ TotalTimeElapsed = reader["TotalTimeElapsed"]?.ToString() ?? "0",
+ Run1ID = long.Parse(reader["Run1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run2ID = long.Parse(reader["Run2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run3ID = long.Parse(reader["Run3ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run4ID = long.Parse(reader["Run4ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run5ID = long.Parse(reader["Run5ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run6ID = long.Parse(reader["Run6ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run7ID = long.Parse(reader["Run7ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run8ID = long.Parse(reader["Run8ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run9ID = long.Parse(reader["Run9ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run10ID = long.Parse(reader["Run10ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run11ID = long.Parse(reader["Run11ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run12ID = long.Parse(reader["Run12ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run13ID = long.Parse(reader["Run13ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run14ID = long.Parse(reader["Run14ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run15ID = long.Parse(reader["Run15ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run16ID = long.Parse(reader["Run16ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run17ID = long.Parse(reader["Run17ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run18ID = long.Parse(reader["Run18ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run19ID = long.Parse(reader["Run19ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run20ID = long.Parse(reader["Run20ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run21ID = long.Parse(reader["Run21ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run22ID = long.Parse(reader["Run22ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Run23ID = long.Parse(reader["Run23ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
- dictionary = obj;
+ hashSet.Add(data);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
- }
- }
- return dictionary;
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
+ }
+ }
+
+ return hashSet;
}
- public Dictionary> GetMonster1SleepThresholdDictionary(long runID)
+ private HashSet GetAllBingo(SQLiteConnection conn)
{
- Dictionary> dictionary = new ();
- if (string.IsNullOrEmpty(this.dataSource))
- {
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get monster 1 sleep threshold dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
- }
-
- using (var conn = new SQLiteConnection(this.dataSource))
+ HashSet hashSet = new ();
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand("SELECT * FROM Bingo", conn))
{
- using (var cmd = new SQLiteCommand("SELECT Monster1SleepThresholdDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ while (reader.Read())
{
- var obj = JsonConvert.DeserializeObject>>((string)result);
- if (obj == null)
+ Bingo data = new ()
{
- return dictionary;
- }
+ BingoID = long.Parse(reader["BingoID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
+ CreatedBy = reader["CreatedBy"]?.ToString() ?? "0",
+ Difficulty = (Difficulty)long.Parse(reader["Difficulty"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ MonsterList = JsonConvert.DeserializeObject>(reader["MonsterList"]?.ToString() ?? "{}") ?? new List { },
+ WeaponType = reader["WeaponType"]?.ToString() ?? "0",
+ Category = ChallengeService.ConvertToBingoGauntletCategory(reader.GetInt64(reader.GetOrdinal("Category"))),
+ TotalFramesElapsed = long.Parse(reader["TotalFramesElapsed"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ TotalTimeElapsed = reader["TotalTimeElapsed"]?.ToString() ?? "0",
+ Score = long.Parse(reader["Score"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
- dictionary = obj;
+ hashSet.Add(data);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return dictionary;
+ return hashSet;
}
- public Dictionary> GetMonster1ParalysisThresholdDictionary(long runID)
+ private HashSet GetAllMezFes(SQLiteConnection conn)
{
- Dictionary> dictionary = new ();
- if (string.IsNullOrEmpty(this.dataSource))
+ HashSet hashSet = new ();
+ using (var transaction = conn.BeginTransaction())
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get monster 1 paralysis threshold dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
+ try
+ {
+ using (var cmd = new SQLiteCommand("SELECT * FROM MezFes", conn))
+ {
+ using (var reader = cmd.ExecuteReader())
+ {
+ while (reader.Read())
+ {
+ MezFes data = new ()
+ {
+ MezFesID = long.Parse(reader["MezFesID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
+ CreatedBy = reader["CreatedBy"].ToString(),
+ MezFesMinigameID = long.Parse(reader["MezFesMinigameID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ Score = long.Parse(reader["Score"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
+
+ hashSet.Add(data);
+ }
+ }
+ }
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
+ }
}
- using (var conn = new SQLiteConnection(this.dataSource))
+ return hashSet;
+ }
+
+ private HashSet GetAllQuests(SQLiteConnection conn)
+ {
+ HashSet quests = new ();
+ using (var transaction = conn.BeginTransaction())
{
- conn.Open();
- using (var transaction = conn.BeginTransaction())
+ try
{
- try
+ using (var cmd = new SQLiteCommand("SELECT * FROM Quests", conn))
{
- using (var cmd = new SQLiteCommand("SELECT Monster1ParalysisThresholdDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var reader = cmd.ExecuteReader())
{
- cmd.Parameters.AddWithValue("@runID", runID);
-
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ while (reader.Read())
{
- var obj = JsonConvert.DeserializeObject>>((string)result);
- if (obj == null)
+ var quest = new Quest
{
- return dictionary;
- }
+ QuestHash = reader["QuestHash"].ToString(),
+ CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
+ CreatedBy = reader["CreatedBy"].ToString(),
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ QuestID = long.Parse(reader["QuestID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ TimeLeft = long.Parse(reader["TimeLeft"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ FinalTimeValue = long.Parse(reader["FinalTimeValue"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ FinalTimeDisplay = reader["FinalTimeDisplay"].ToString(),
+ ObjectiveImage = reader["ObjectiveImage"].ToString(),
+ ObjectiveTypeID = long.Parse(reader["ObjectiveTypeID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ ObjectiveQuantity = long.Parse(reader["ObjectiveQuantity"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ StarGrade = long.Parse(reader["StarGrade"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ RankName = reader["RankName"].ToString(),
+ ObjectiveName = reader["ObjectiveName"].ToString(),
+ Date = DateTime.Parse(reader["Date"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture),
+ YouTubeID = reader["YouTubeID"].ToString(),
+ AttackBuffDictionary = reader["AttackBuffDictionary"].ToString(),
+ HitCountDictionary = reader["HitCountDictionary"].ToString(),
+ HitsPerSecondDictionary = reader["HitsPerSecondDictionary"].ToString(),
+ DamageDealtDictionary = reader["DamageDealtDictionary"].ToString(),
+ DamagePerSecondDictionary = reader["DamagePerSecondDictionary"].ToString(),
+ AreaChangesDictionary = reader["AreaChangesDictionary"].ToString(),
+ CartsDictionary = reader["CartsDictionary"].ToString(),
- dictionary = obj;
+ Monster1HPDictionary = reader["Monster1HPDictionary"].ToString(),
+ Monster2HPDictionary = reader["Monster2HPDictionary"].ToString(),
+ Monster3HPDictionary = reader["Monster3HPDictionary"].ToString(),
+ Monster4HPDictionary = reader["Monster4HPDictionary"].ToString(),
+
+ HitsTakenBlockedDictionary = reader["HitsTakenBlockedDictionary"].ToString(),
+ HitsTakenBlockedPerSecondDictionary = reader["HitsTakenBlockedPerSecondDictionary"].ToString(),
+ PlayerHPDictionary = reader["PlayerHPDictionary"].ToString(),
+ PlayerStaminaDictionary = reader["PlayerStaminaDictionary"].ToString(),
+ KeyStrokesDictionary = reader["KeyStrokesDictionary"].ToString(),
+ MouseInputDictionary = reader["MouseInputDictionary"].ToString(),
+ GamepadInputDictionary = reader["GamepadInputDictionary"].ToString(),
+
+ ActionsPerMinuteDictionary = reader["ActionsPerMinuteDictionary"].ToString(),
+ OverlayModeDictionary = reader["OverlayModeDictionary"].ToString(),
+ ActualOverlayMode = reader["ActualOverlayMode"].ToString(),
+ PartySize = long.Parse(reader["PartySize"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
+
+ quests.Add(quest);
}
}
-
- transaction.Commit();
- }
- catch (Exception ex)
- {
- HandleError(transaction, ex);
}
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
}
}
- return dictionary;
+ return quests;
}
- public Dictionary> GetMonster1BlastThresholdDictionary(long runID)
+ public StyleRankSkills GetStyleRankSkills(long runID)
{
- Dictionary> dictionary = new ();
+ var styleRankSkills = new StyleRankSkills();
if (string.IsNullOrEmpty(this.dataSource))
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get monster 1 blast threshold dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get style rank skills. dataSource: {0}", this.dataSource);
+ return styleRankSkills;
}
+ // Use a SQL query to retrieve the StyleRankSkills data for the specific RunID from the database
using (var conn = new SQLiteConnection(this.dataSource))
{
conn.Open();
@@ -9318,21 +9652,21 @@ public Dictionary> GetMonster1BlastThresholdDictionary
{
try
{
- using (var cmd = new SQLiteCommand("SELECT Monster1BlastThresholdDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var cmd = new SQLiteCommand("SELECT StyleRankSkillsID, RunID, StyleRankSkill1ID, StyleRankSkill2ID, CreatedAt, CreatedBy FROM StyleRankSkills WHERE RunID = @runID", conn))
{
cmd.Parameters.AddWithValue("@runID", runID);
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ using (var reader = cmd.ExecuteReader())
{
- var obj = JsonConvert.DeserializeObject>>((string)result);
- if (obj == null)
+ if (reader.Read())
{
- return dictionary;
+ styleRankSkills.StyleRankSkillsID = long.Parse(reader["StyleRankSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
+ styleRankSkills.RunID = runID;
+ styleRankSkills.StyleRankSkill1ID = long.Parse(reader["StyleRankSkill1ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
+ styleRankSkills.StyleRankSkill2ID = long.Parse(reader["StyleRankSkill2ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
+ styleRankSkills.CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture);
+ styleRankSkills.CreatedBy = reader["CreatedBy"]?.ToString() ?? "0";
}
-
- dictionary = obj;
}
}
@@ -9345,18 +9679,19 @@ public Dictionary> GetMonster1BlastThresholdDictionary
}
}
- return dictionary;
+ return styleRankSkills;
}
- public Dictionary> GetMonster1StunThresholdDictionary(long runID)
+ public AutomaticSkills GetAutomaticSkills(long runID)
{
- Dictionary> dictionary = new ();
+ var automaticSkills = new AutomaticSkills();
if (string.IsNullOrEmpty(this.dataSource))
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get monster 1 stun threshold dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get automatic skills. dataSource: {0}", this.dataSource);
+ return automaticSkills;
}
+ // Use a SQL query to retrieve the AutomaticSkills data for the specific RunID from the database
using (var conn = new SQLiteConnection(this.dataSource))
{
conn.Open();
@@ -9364,21 +9699,24 @@ public Dictionary> GetMonster1StunThresholdDictionary(
{
try
{
- using (var cmd = new SQLiteCommand("SELECT Monster1StunThresholdDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var cmd = new SQLiteCommand("SELECT AutomaticSkillsID, RunID, AutomaticSkill1ID, AutomaticSkill2ID, AutomaticSkill3ID, AutomaticSkill4ID, AutomaticSkill5ID, AutomaticSkill6ID, CreatedAt, CreatedBy FROM AutomaticSkills WHERE RunID = @runID", conn))
{
cmd.Parameters.AddWithValue("@runID", runID);
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ using (var reader = cmd.ExecuteReader())
{
- var obj = JsonConvert.DeserializeObject>>((string)result);
- if (obj == null)
+ if (reader.Read())
{
- return dictionary;
- }
+ automaticSkills.AutomaticSkillsID = long.Parse(reader["AutomaticSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
+ automaticSkills.RunID = runID;
+ for (var i = 1; i <= 6; i++)
+ {
+ automaticSkills.GetType().GetProperty("AutomaticSkill" + i + "ID").SetValue(automaticSkills, long.Parse(reader["AutomaticSkill" + i + "ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture));
+ }
- dictionary = obj;
+ automaticSkills.CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture);
+ automaticSkills.CreatedBy = reader["CreatedBy"]?.ToString() ?? "0";
+ }
}
}
@@ -9391,18 +9729,19 @@ public Dictionary> GetMonster1StunThresholdDictionary(
}
}
- return dictionary;
+ return automaticSkills;
}
- public Dictionary>> GetPlayerInventoryDictionary(long runID)
+ public ZenithSkills GetZenithSkills(long runID)
{
- Dictionary>> dictionary = new ();
+ var zenithSkills = new ZenithSkills();
if (string.IsNullOrEmpty(this.dataSource))
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get player inventory dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get zenith skills. dataSource: {0}", this.dataSource);
+ return zenithSkills;
}
+ // Use a SQL query to retrieve the ZenithSkills data for the specific RunID from the database
using (var conn = new SQLiteConnection(this.dataSource))
{
conn.Open();
@@ -9410,21 +9749,74 @@ public Dictionary>> GetPlayerInventoryDictionary(
{
try
{
- using (var cmd = new SQLiteCommand("SELECT PlayerInventoryDictionary FROM PlayerGear WHERE RunID = @runID", conn))
+ using (var cmd = new SQLiteCommand("SELECT ZenithSkillsID, RunID, ZenithSkill1ID, ZenithSkill2ID, ZenithSkill3ID, ZenithSkill4ID, ZenithSkill5ID, ZenithSkill6ID, ZenithSkill7ID, CreatedAt, CreatedBy FROM ZenithSkills WHERE RunID = @runID", conn))
{
cmd.Parameters.AddWithValue("@runID", runID);
- var result = cmd.ExecuteScalar();
-
- if (result != null)
+ using (var reader = cmd.ExecuteReader())
{
- var obj = JsonConvert.DeserializeObject>>>((string)result);
- if (obj == null)
+ if (reader.Read())
{
- return dictionary;
+ zenithSkills.ZenithSkillsID = long.Parse(reader["ZenithSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
+ zenithSkills.RunID = runID;
+ for (var i = 1; i <= 7; i++)
+ {
+ zenithSkills.GetType().GetProperty("ZenithSkill" + i + "ID").SetValue(zenithSkills, long.Parse(reader["ZenithSkill" + i + "ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture));
+ }
+
+ zenithSkills.CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture);
+ zenithSkills.CreatedBy = reader["CreatedBy"]?.ToString() ?? "0";
}
+ }
+ }
- dictionary = obj;
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
+ }
+ }
+ }
+
+ return zenithSkills;
+ }
+
+ public CaravanSkills GetCaravanSkills(long runID)
+ {
+ var caravanSkills = new CaravanSkills();
+ if (string.IsNullOrEmpty(this.dataSource))
+ {
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get caravan skills. dataSource: {0}", this.dataSource);
+ return caravanSkills;
+ }
+
+ // Use a SQL query to retrieve the CaravanSkills data for the specific RunID from the database
+ using (var conn = new SQLiteConnection(this.dataSource))
+ {
+ conn.Open();
+ using (var transaction = conn.BeginTransaction())
+ {
+ try
+ {
+ using (var cmd = new SQLiteCommand("SELECT CaravanSkillsID, RunID, CaravanSkill1ID, CaravanSkill2ID, CaravanSkill3ID, CreatedAt, CreatedBy FROM CaravanSkills WHERE RunID = @runID", conn))
+ {
+ cmd.Parameters.AddWithValue("@runID", runID);
+
+ using (var reader = cmd.ExecuteReader())
+ {
+ if (reader.Read())
+ {
+ caravanSkills.CaravanSkillsID = long.Parse(reader["CaravanSkillsID"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
+ caravanSkills.RunID = runID;
+ for (var i = 1; i <= 3; i++)
+ {
+ caravanSkills.GetType().GetProperty("CaravanSkill" + i + "ID").SetValue(caravanSkills, long.Parse(reader["CaravanSkill" + i + "ID"]?.ToString() ?? "0", CultureInfo.InvariantCulture));
+ }
+
+ caravanSkills.CreatedAt = DateTime.Parse(reader["CreatedAt"]?.ToString() ?? DateTime.UnixEpoch.ToString(CultureInfo.InvariantCulture), CultureInfo.InvariantCulture);
+ caravanSkills.CreatedBy = reader["CreatedBy"]?.ToString() ?? "0";
+ }
}
}
@@ -9437,16 +9829,16 @@ public Dictionary>> GetPlayerInventoryDictionary(
}
}
- return dictionary;
+ return caravanSkills;
}
- public Dictionary>> GetAmmoDictionary(long runID)
+ public Dictionary GetAttackBuffDictionary(long runID)
{
- Dictionary>> dictionary = new ();
+ Dictionary attackBuffDictionary = new ();
if (string.IsNullOrEmpty(this.dataSource))
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get ammo dictionary. dataSource: {0}", this.dataSource);
- return dictionary;
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get attack buff dictionary. dataSource: {0}", this.dataSource);
+ return attackBuffDictionary;
}
using (var conn = new SQLiteConnection(this.dataSource))
@@ -9456,7 +9848,7 @@ public Dictionary>> GetAmmoDictionary(long runID)
{
try
{
- using (var cmd = new SQLiteCommand("SELECT PlayerAmmoPouchDictionary FROM PlayerGear WHERE RunID = @runID", conn))
+ using (var cmd = new SQLiteCommand("SELECT AttackBuffDictionary FROM Quests WHERE RunID = @runID", conn))
{
cmd.Parameters.AddWithValue("@runID", runID);
@@ -9464,13 +9856,13 @@ public Dictionary>> GetAmmoDictionary(long runID)
if (result != null)
{
- var obj = JsonConvert.DeserializeObject>>>((string)result);
+ var obj = JsonConvert.DeserializeObject>((string)result);
if (obj == null)
{
- return dictionary;
+ return attackBuffDictionary;
}
- dictionary = obj;
+ attackBuffDictionary = obj;
}
}
@@ -9483,15 +9875,15 @@ public Dictionary>> GetAmmoDictionary(long runID)
}
}
- return dictionary;
+ return attackBuffDictionary;
}
- public Dictionary>> GetPartnyaBagDictionary(long runID)
+ public Dictionary GetHitCountDictionary(long runID)
{
- Dictionary>> dictionary = new ();
+ Dictionary dictionary = new ();
if (string.IsNullOrEmpty(this.dataSource))
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get partnya bag dictionary. dataSource: {0}", this.dataSource);
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get hit count dictionary. dataSource: {0}", this.dataSource);
return dictionary;
}
@@ -9502,7 +9894,7 @@ public Dictionary>> GetPartnyaBagDictionary(long
{
try
{
- using (var cmd = new SQLiteCommand("SELECT PartnyaBagDictionary FROM PlayerGear WHERE RunID = @runID", conn))
+ using (var cmd = new SQLiteCommand("SELECT HitCountDictionary FROM Quests WHERE RunID = @runID", conn))
{
cmd.Parameters.AddWithValue("@runID", runID);
@@ -9510,7 +9902,7 @@ public Dictionary>> GetPartnyaBagDictionary(long
if (result != null)
{
- var obj = JsonConvert.DeserializeObject>>>((string)result);
+ var obj = JsonConvert.DeserializeObject>((string)result);
if (obj == null)
{
return dictionary;
@@ -9532,12 +9924,12 @@ public Dictionary>> GetPartnyaBagDictionary(long
return dictionary;
}
- public Dictionary> GetHitsTakenBlockedDictionary(long runID)
+ public Dictionary GetHitsPerSecondDictionary(long runID)
{
- Dictionary> dictionary = new ();
+ Dictionary dictionary = new ();
if (string.IsNullOrEmpty(this.dataSource))
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get hits taken/blocked dictionary. dataSource: {0}", this.dataSource);
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get hits per second dictionary. dataSource: {0}", this.dataSource);
return dictionary;
}
@@ -9548,7 +9940,7 @@ public Dictionary> GetHitsTakenBlockedDictionary(long
{
try
{
- using (var cmd = new SQLiteCommand("SELECT HitsTakenBlockedDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var cmd = new SQLiteCommand("SELECT HitsPerSecondDictionary FROM Quests WHERE RunID = @runID", conn))
{
cmd.Parameters.AddWithValue("@runID", runID);
@@ -9556,7 +9948,7 @@ public Dictionary> GetHitsTakenBlockedDictionary(long
if (result != null)
{
- var obj = JsonConvert.DeserializeObject>>((string)result);
+ var obj = JsonConvert.DeserializeObject>((string)result);
if (obj == null)
{
return dictionary;
@@ -9578,12 +9970,12 @@ public Dictionary> GetHitsTakenBlockedDictionary(long
return dictionary;
}
- public Dictionary GetHitsTakenBlockedPerSecondDictionary(long runID)
+ public Dictionary GetDamageDealtDictionary(long runID)
{
- Dictionary dictionary = new ();
+ Dictionary dictionary = new ();
if (string.IsNullOrEmpty(this.dataSource))
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get hits taken/blocked per second dictionary. dataSource: {0}", this.dataSource);
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get damage dealt dictionary. dataSource: {0}", this.dataSource);
return dictionary;
}
@@ -9594,7 +9986,7 @@ public Dictionary GetHitsTakenBlockedPerSecondDictionary(long runID
{
try
{
- using (var cmd = new SQLiteCommand("SELECT HitsTakenBlockedPerSecondDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var cmd = new SQLiteCommand("SELECT DamageDealtDictionary FROM Quests WHERE RunID = @runID", conn))
{
cmd.Parameters.AddWithValue("@runID", runID);
@@ -9602,7 +9994,7 @@ public Dictionary GetHitsTakenBlockedPerSecondDictionary(long runID
if (result != null)
{
- var obj = JsonConvert.DeserializeObject>((string)result);
+ var obj = JsonConvert.DeserializeObject>((string)result);
if (obj == null)
{
return dictionary;
@@ -9624,12 +10016,12 @@ public Dictionary GetHitsTakenBlockedPerSecondDictionary(long runID
return dictionary;
}
- public Dictionary GetPlayerHPDictionary(long runID)
+ public Dictionary GetDamagePerSecondDictionary(long runID)
{
- Dictionary dictionary = new ();
+ Dictionary dictionary = new ();
if (string.IsNullOrEmpty(this.dataSource))
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get player HP dictionary. dataSource: {0}", this.dataSource);
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get damage per second dictionary. dataSource: {0}", this.dataSource);
return dictionary;
}
@@ -9640,7 +10032,7 @@ public Dictionary GetPlayerHPDictionary(long runID)
{
try
{
- using (var cmd = new SQLiteCommand("SELECT PlayerHPDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var cmd = new SQLiteCommand("SELECT DamagePerSecondDictionary FROM Quests WHERE RunID = @runID", conn))
{
cmd.Parameters.AddWithValue("@runID", runID);
@@ -9648,7 +10040,7 @@ public Dictionary GetPlayerHPDictionary(long runID)
if (result != null)
{
- var obj = JsonConvert.DeserializeObject>((string)result);
+ var obj = JsonConvert.DeserializeObject>((string)result);
if (obj == null)
{
return dictionary;
@@ -9670,12 +10062,12 @@ public Dictionary GetPlayerHPDictionary(long runID)
return dictionary;
}
- public Dictionary GetPlayerStaminaDictionary(long runID)
+ public Dictionary GetAreaChangesDictionary(long runID)
{
Dictionary dictionary = new ();
if (string.IsNullOrEmpty(this.dataSource))
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get player stamina dictionary. dataSource: {0}", this.dataSource);
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get area changes dictionary. dataSource: {0}", this.dataSource);
return dictionary;
}
@@ -9686,7 +10078,7 @@ public Dictionary GetPlayerStaminaDictionary(long runID)
{
try
{
- using (var cmd = new SQLiteCommand("SELECT PlayerStaminaDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var cmd = new SQLiteCommand("SELECT AreaChangesDictionary FROM Quests WHERE RunID = @runID", conn))
{
cmd.Parameters.AddWithValue("@runID", runID);
@@ -9716,12 +10108,12 @@ public Dictionary GetPlayerStaminaDictionary(long runID)
return dictionary;
}
- public Dictionary GetKeystrokesDictionary(long runID)
+ public Dictionary GetCartsDictionary(long runID)
{
- Dictionary dictionary = new ();
+ Dictionary dictionary = new ();
if (string.IsNullOrEmpty(this.dataSource))
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get keystrokes dictionary. dataSource: {0}", this.dataSource);
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get carts dictionary. dataSource: {0}", this.dataSource);
return dictionary;
}
@@ -9732,7 +10124,7 @@ public Dictionary GetKeystrokesDictionary(long runID)
{
try
{
- using (var cmd = new SQLiteCommand("SELECT KeystrokesDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var cmd = new SQLiteCommand("SELECT CartsDictionary FROM Quests WHERE RunID = @runID", conn))
{
cmd.Parameters.AddWithValue("@runID", runID);
@@ -9740,7 +10132,7 @@ public Dictionary GetKeystrokesDictionary(long runID)
if (result != null)
{
- var obj = JsonConvert.DeserializeObject>((string)result);
+ var obj = JsonConvert.DeserializeObject>((string)result);
if (obj == null)
{
return dictionary;
@@ -9762,12 +10154,12 @@ public Dictionary GetKeystrokesDictionary(long runID)
return dictionary;
}
- public Dictionary GetMouseInputDictionary(long runID)
+ public Dictionary> GetMonster1HPDictionary(long runID)
{
- Dictionary dictionary = new ();
+ Dictionary> dictionary = new ();
if (string.IsNullOrEmpty(this.dataSource))
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get mouse input dictionary. dataSource: {0}", this.dataSource);
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get monster 1 HP dictionary. dataSource: {0}", this.dataSource);
return dictionary;
}
@@ -9778,7 +10170,7 @@ public Dictionary GetMouseInputDictionary(long runID)
{
try
{
- using (var cmd = new SQLiteCommand("SELECT MouseInputDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var cmd = new SQLiteCommand("SELECT Monster1HPDictionary FROM Quests WHERE RunID = @runID", conn))
{
cmd.Parameters.AddWithValue("@runID", runID);
@@ -9786,7 +10178,7 @@ public Dictionary GetMouseInputDictionary(long runID)
if (result != null)
{
- var obj = JsonConvert.DeserializeObject>((string)result);
+ var obj = JsonConvert.DeserializeObject>>((string)result);
if (obj == null)
{
return dictionary;
@@ -9808,12 +10200,12 @@ public Dictionary GetMouseInputDictionary(long runID)
return dictionary;
}
- public Dictionary GetGamepadInputDictionary(long runID)
+ public Dictionary> GetMonster2HPDictionary(long runID)
{
- Dictionary dictionary = new ();
+ Dictionary> dictionary = new ();
if (string.IsNullOrEmpty(this.dataSource))
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get gamepad input dictionary. dataSource: {0}", this.dataSource);
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get monster 2 HP dictionary. dataSource: {0}", this.dataSource);
return dictionary;
}
@@ -9824,7 +10216,7 @@ public Dictionary GetGamepadInputDictionary(long runID)
{
try
{
- using (var cmd = new SQLiteCommand("SELECT GamepadInputDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var cmd = new SQLiteCommand("SELECT Monster2HPDictionary FROM Quests WHERE RunID = @runID", conn))
{
cmd.Parameters.AddWithValue("@runID", runID);
@@ -9832,7 +10224,7 @@ public Dictionary GetGamepadInputDictionary(long runID)
if (result != null)
{
- var obj = JsonConvert.DeserializeObject>((string)result);
+ var obj = JsonConvert.DeserializeObject>>((string)result);
if (obj == null)
{
return dictionary;
@@ -9854,12 +10246,12 @@ public Dictionary GetGamepadInputDictionary(long runID)
return dictionary;
}
- public Dictionary GetActionsPerMinuteDictionary(long runID)
+ public Dictionary> GetMonster3HPDictionary(long runID)
{
- Dictionary dictionary = new ();
+ Dictionary> dictionary = new ();
if (string.IsNullOrEmpty(this.dataSource))
{
- Logger.Warn(CultureInfo.InvariantCulture, "Cannot get actions per minute dictionary. dataSource: {0}", this.dataSource);
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get monster 3 HP dictionary. dataSource: {0}", this.dataSource);
return dictionary;
}
@@ -9870,7 +10262,7 @@ public Dictionary GetActionsPerMinuteDictionary(long runID)
{
try
{
- using (var cmd = new SQLiteCommand("SELECT ActionsPerMinuteDictionary FROM Quests WHERE RunID = @runID", conn))
+ using (var cmd = new SQLiteCommand("SELECT Monster3HPDictionary FROM Quests WHERE RunID = @runID", conn))
{
cmd.Parameters.AddWithValue("@runID", runID);
@@ -9878,7 +10270,7 @@ public Dictionary GetActionsPerMinuteDictionary(long runID)
if (result != null)
{
- var obj = JsonConvert.DeserializeObject