diff --git a/MHFZ_Overlay/Models/Collections/QuestsGamePatches.cs b/MHFZ_Overlay/Models/Collections/QuestsGamePatches.cs
new file mode 100644
index 00000000..8dd142c0
--- /dev/null
+++ b/MHFZ_Overlay/Models/Collections/QuestsGamePatches.cs
@@ -0,0 +1,126 @@
+// © 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 patches list.
+///
+public static class QuestsGamePatches
+{
+ public static ReadOnlyDictionary> datHashInfo { get; } = new (new Dictionary>
+ {
+ { "593C418FA1408B76F655F0BB8D7DF8AA307CD89613A7734EB057A175825A4DA5", new Dictionary()
+ {
+ { GamePatch.Vanilla, GamePatchLanguage.JA }
+ }
+ },
+ { "3E6FD419AD668AA973454B9AE9F1C49C739A0CA41FCE15CBF1DB1D2068E8C29D", new Dictionary()
+ {
+ { GamePatch.Seph, GamePatchLanguage.EN }
+ }
+ },
+ { "F65080754B99BED5BE91BF1B4B0EC8EE61D7DED06831E3E7824F62B63F60E624", new Dictionary()
+ {
+ { GamePatch.Ezemania, GamePatchLanguage.FR }
+ }
+ },
+ { "E1B0C47FE8BFA222BE1284CC232DAB63459574F40F8DA90FAE7FF20638480F96", new Dictionary()
+ {
+ { GamePatch.Otyav1_1, GamePatchLanguage.JA }
+ }
+ },
+ { "735EFD86140E835E8DA2670CEA15A19154AE37ED046CBBB5A8918C39FC88B9E8", new Dictionary()
+ {
+ { GamePatch.Otyav1_1, GamePatchLanguage.EN }
+ }
+ },
+ { "2B328D91626DB1DC8DD3FB9520D1AE52CF0C6F412B595D5795298DDC550FD06D", new Dictionary()
+ {
+ { GamePatch.Otyav1_1, GamePatchLanguage.FR }
+ }
+ },
+ { "EE39C4776A1CF1271D0728D450F723B035144503298DB4C771C0376BF43AD4B8", new Dictionary()
+ {
+ { GamePatch.Mezelounge, GamePatchLanguage.EN }
+ }
+ },
+ });
+
+ public static ReadOnlyDictionary> emdHashInfo { get; } = new(new Dictionary>
+ {
+ { "E68E03F1274D9D055CC8E42B0427BB99B0CEBFE9C905F951900B991F4CC8AFD1", new Dictionary()
+ {
+ { GamePatch.Vanilla, GamePatchLanguage.JA }
+ }
+ },
+ { "5B70CE51EC6F95337B615C76C8BE8A0C42B16B14ED698739ADC097C4C507503E", new Dictionary()
+ {
+ { GamePatch.Vanilla, GamePatchLanguage.JA }
+ }
+ },
+ { "1755B8C5DA0D488901BF4FC7179E0B036AC6F9C936C7CA5911C693119173F8E5", new Dictionary()
+ {
+ { GamePatch.Vanilla, GamePatchLanguage.JA }
+ }
+ },
+ { "A90B90E6A66F1983C1807DB1298EF2BF94BFD05681021307C8F4213BBE31B890", new Dictionary()
+ {
+ { GamePatch.FiveMusous, GamePatchLanguage.ZH }
+ }
+ },
+ });
+
+ public static ReadOnlyDictionary> mhfodllHashInfo { get; } = new(new Dictionary>
+ {
+ { "69B65205B1F23A6989395CD811C414D410FE43D7ACD3C33A565E2C564AD184F4", new Dictionary()
+ {
+ { GamePatch.Standard, GamePatchLanguage.JA }
+ }
+ },
+ { "A21322CA5864D6A4C8599FD4522FDBCC8997225C05D82D958D9AEBA2678ADFC7", new Dictionary()
+ {
+ { GamePatch.Standard, GamePatchLanguage.EN }
+ }
+ },
+ { "23177AECAEB8222392461F5B6F714D810953329E4622E948F387B9B318D97589", new Dictionary()
+ {
+ { GamePatch.Mezelounge, GamePatchLanguage.EN }
+ }
+ },
+ { "514DC802AABE3C7709EC1AABEB25B586839EE86E15CC9C569C87CC459E9206A0", new Dictionary()
+ {
+ { GamePatch.Tenrou, GamePatchLanguage.EN }
+ }
+ },
+ });
+
+ public static ReadOnlyDictionary> mhfohddllHashInfo { get; } = new(new Dictionary>
+ {
+ { "95C580195F4080D2E9582C8C9DF36ABEB280476E088B6366583C5F138DA8F301", new Dictionary()
+ {
+ { GamePatch.Standard, GamePatchLanguage.JA }
+ }
+ },
+ { "01F980A4B892CA0DBEBAD8EB54B224D080B32253BB8E793E23CD060089003D25", new Dictionary()
+ {
+ { GamePatch.Standard, GamePatchLanguage.EN }
+ }
+ },
+ { "6FD7A31663D7AF23D9A8D903E4FFB84F45390D5AEE7BC6C70347D2F17988FA02", new Dictionary()
+ {
+ { GamePatch.Mezelounge, GamePatchLanguage.EN }
+ }
+ },
+ { "5A65673537E97522E4767A32EAA8622312AC118AF3ED64F02D56751A27FE0B90", new Dictionary()
+ {
+ { GamePatch.Tenrou, GamePatchLanguage.EN }
+ }
+ },
+ });
+}
diff --git a/MHFZ_Overlay/Models/QuestsGamePatch.cs b/MHFZ_Overlay/Models/QuestsGamePatch.cs
new file mode 100644
index 00000000..52f80815
--- /dev/null
+++ b/MHFZ_Overlay/Models/QuestsGamePatch.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 QuestsGamePatch
+{
+ public long? QuestsGamePatchID { get; set; }
+
+ public long? RunID { get; set; }
+
+ public string? mhfdatInfo { get; set; }
+
+ public string? mhfemdInfo { get; set; }
+
+ public string? mhfodllInfo { get; set; }
+
+ public string? mhfohddllInfo { get; set; }
+}
diff --git a/MHFZ_Overlay/Models/Structures/Enums.cs b/MHFZ_Overlay/Models/Structures/Enums.cs
index 2e2d7bff..fd7b0c2a 100644
--- a/MHFZ_Overlay/Models/Structures/Enums.cs
+++ b/MHFZ_Overlay/Models/Structures/Enums.cs
@@ -843,6 +843,9 @@ public enum DivaPrayerGemColor
Blue,
}
+///
+/// Creator, origin or purpose.
+///
public enum GamePatch
{
Vanilla,
@@ -855,13 +858,23 @@ public enum GamePatch
/// TODO
///
Standard,
+ FiveMusous,
}
+///
+/// https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes. Could also describe the origin rather than language.
+///
public enum GamePatchLanguage
{
- JP,
+ JA,
EN,
FR,
+ ZH,
+ ES,
+ PT,
+ RU,
+ EL,
+ DE,
}
public enum GamePatchFile
diff --git a/MHFZ_Overlay/Services/DatabaseService.cs b/MHFZ_Overlay/Services/DatabaseService.cs
index af02c9d9..ec76d698 100644
--- a/MHFZ_Overlay/Services/DatabaseService.cs
+++ b/MHFZ_Overlay/Services/DatabaseService.cs
@@ -8107,6 +8107,56 @@ public QuestsOverlayHash GetOverlayHash(long runID)
return data;
}
+ public QuestsGamePatch GetQuestsGamePatch(long runID)
+ {
+ QuestsGamePatch data = new();
+ if (string.IsNullOrEmpty(this.dataSource))
+ {
+ Logger.Warn(CultureInfo.InvariantCulture, "Cannot get game patch. 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 * FROM QuestsGamePatch WHERE RunID = @runID", conn))
+ {
+ cmd.Parameters.AddWithValue("@runID", runID);
+
+ using (var reader = cmd.ExecuteReader())
+ {
+ if (reader.Read())
+ {
+ data = new QuestsGamePatch
+ {
+ QuestsGamePatchID = long.Parse(reader["QuestsGamePatchID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ mhfdatInfo = reader["mhfdatInfo"]?.ToString() ?? "Unknown",
+ mhfemdInfo = reader["mhfemdInfo"]?.ToString() ?? "Unknown",
+ mhfodllInfo = reader["mhfodllInfo"]?.ToString() ?? "Unknown",
+ mhfohddllInfo = reader["mhfohddllInfo"]?.ToString() ?? "Unknown",
+ RunID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture),
+ };
+ }
+ }
+ }
+
+ transaction.Commit();
+ }
+ catch (Exception ex)
+ {
+ HandleError(transaction, ex);
+ }
+ }
+ }
+
+ return data;
+ }
+
private Quest GetLastQuest(SQLiteConnection conn)
{
Quest quest = new();
@@ -18045,7 +18095,7 @@ private void UpdateQuestsMonsterDictionaries(SQLiteConnection conn, DataLoader d
{
var questID = long.Parse(reader["QuestID"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
- if (questID != Numbers.QuestIDFirstDistrictDuremudira || questID != Numbers.QuestIDSecondDistrictDuremudira)
+ if (questID != Numbers.QuestIDFirstDistrictDuremudira && questID != Numbers.QuestIDSecondDistrictDuremudira && questID != Numbers.QuestIDArrogantDuremudira && questID != Numbers.QuestIDArrogantDuremudiraRepel)
{
continue;
}
@@ -18058,7 +18108,7 @@ private void UpdateQuestsMonsterDictionaries(SQLiteConnection conn, DataLoader d
}
string monster1AttackMultiplierString = reader["Monster1AttackMultiplierDictionary"].ToString() ?? "{}";
- string monster1DefenseRateString = reader["Monster1DefenseRateictionary"].ToString() ?? "{}";
+ string monster1DefenseRateString = reader["Monster1DefenseRateDictionary"].ToString() ?? "{}";
string monster1SizeMultiplierString = reader["Monster1SizeMultiplierDictionary"].ToString() ?? "{}";
string monster1StunThresholdString = reader["Monster1StunThresholdDictionary"].ToString() ?? "{}";
string monster1PartThresholdString = reader["Monster1PartThresholdDictionary"].ToString() ?? "{}";
@@ -18066,9 +18116,9 @@ private void UpdateQuestsMonsterDictionaries(SQLiteConnection conn, DataLoader d
var runID = long.Parse(reader["RunID"]?.ToString() ?? "0", CultureInfo.InvariantCulture);
var monster1HPDictionary = JsonConvert.DeserializeObject>>(monster1HPString);
- var monster1AttackMultiplierDictionary = JsonConvert.DeserializeObject>>(monster1AttackMultiplierString);
- var monster1DefenseRateDictionary = JsonConvert.DeserializeObject>>(monster1DefenseRateString);
- var monster1SizeMultiplierDictionary = JsonConvert.DeserializeObject>>(monster1SizeMultiplierString);
+ var monster1AttackMultiplierDictionary = JsonConvert.DeserializeObject>>(monster1AttackMultiplierString);
+ var monster1DefenseRateDictionary = JsonConvert.DeserializeObject>>(monster1DefenseRateString);
+ var monster1SizeMultiplierDictionary = JsonConvert.DeserializeObject>>(monster1SizeMultiplierString);
var monster1StunThresholdDictionary = JsonConvert.DeserializeObject>>(monster1StunThresholdString);
var monster1PartThresholdDictionary = JsonConvert.DeserializeObject>>>(monster1PartThresholdString);
@@ -18078,9 +18128,9 @@ private void UpdateQuestsMonsterDictionaries(SQLiteConnection conn, DataLoader d
}
Dictionary> newMonster1HPDictionary = new();
- Dictionary> newMonster1AttackMultiplierDictionary = new();
- Dictionary> newMonster1DefenseRateDictionary = new();
- Dictionary> newMonster1SizeMultiplierDictionary = new();
+ Dictionary> newMonster1AttackMultiplierDictionary = new();
+ Dictionary> newMonster1DefenseRateDictionary = new();
+ Dictionary> newMonster1SizeMultiplierDictionary = new();
Dictionary> newMonster1StunThresholdDictionary = new();
Dictionary>> newMonster1PartThresholdDictionary = new();
@@ -18135,7 +18185,7 @@ private void UpdateQuestsMonsterDictionaries(SQLiteConnection conn, DataLoader d
}
}
- Dictionary monsterEntry = new Dictionary()
+ Dictionary monsterEntry = new Dictionary()
{
{monsterID, entry.Value.FirstOrDefault().Value},
};
@@ -18165,7 +18215,7 @@ private void UpdateQuestsMonsterDictionaries(SQLiteConnection conn, DataLoader d
}
}
- Dictionary monsterEntry = new Dictionary()
+ Dictionary monsterEntry = new Dictionary()
{
{monsterID, entry.Value.FirstOrDefault().Value},
};
@@ -18195,7 +18245,7 @@ private void UpdateQuestsMonsterDictionaries(SQLiteConnection conn, DataLoader d
}
}
- Dictionary monsterEntry = new Dictionary()
+ Dictionary monsterEntry = new Dictionary()
{
{monsterID, entry.Value.FirstOrDefault().Value},
};
@@ -18271,18 +18321,18 @@ private void UpdateQuestsMonsterDictionaries(SQLiteConnection conn, DataLoader d
SET
Monster1HPDictionary = @Monster1HPDictionary,
Monster1AttackMultiplierDictionary = @Monster1AttackMultiplierDictionary,
- Monster1DefenseRateictionary = @Monster1DefenseRateictionary,
+ Monster1DefenseRateDictionary = @Monster1DefenseRateDictionary,
Monster1SizeMultiplierDictionary = @Monster1SizeMultiplierDictionary,
Monster1StunThresholdDictionary = @Monster1StunThresholdDictionary,
Monster1PartThresholdDictionary = @Monster1PartThresholdDictionary WHERE
RunID = @RunID";
cmd2.Parameters.AddWithValue("@RunID", runID);
- cmd2.Parameters.AddWithValue("@Monster1HPDictionary", newMonster1HPDictionary);
- cmd2.Parameters.AddWithValue("@Monster1AttackMultiplierDictionary", newMonster1AttackMultiplierDictionary);
- cmd2.Parameters.AddWithValue("@Monster1DefenseRateictionary", newMonster1DefenseRateDictionary);
- cmd2.Parameters.AddWithValue("@Monster1SizeMultiplierDictionary", newMonster1SizeMultiplierDictionary);
- cmd2.Parameters.AddWithValue("@Monster1StunThresholdDictionary", newMonster1StunThresholdDictionary);
- cmd2.Parameters.AddWithValue("@Monster1PartThresholdDictionary", newMonster1PartThresholdDictionary);
+ cmd2.Parameters.AddWithValue("@Monster1HPDictionary", JsonConvert.SerializeObject(newMonster1HPDictionary));
+ cmd2.Parameters.AddWithValue("@Monster1AttackMultiplierDictionary", JsonConvert.SerializeObject(newMonster1AttackMultiplierDictionary));
+ cmd2.Parameters.AddWithValue("@Monster1DefenseRateDictionary", JsonConvert.SerializeObject(newMonster1DefenseRateDictionary));
+ cmd2.Parameters.AddWithValue("@Monster1SizeMultiplierDictionary", JsonConvert.SerializeObject(newMonster1SizeMultiplierDictionary));
+ cmd2.Parameters.AddWithValue("@Monster1StunThresholdDictionary", JsonConvert.SerializeObject(newMonster1StunThresholdDictionary));
+ cmd2.Parameters.AddWithValue("@Monster1PartThresholdDictionary", JsonConvert.SerializeObject(newMonster1PartThresholdDictionary));
cmd2.ExecuteNonQuery();
}
diff --git a/MHFZ_Overlay/ViewModels/Windows/AddressModel.cs b/MHFZ_Overlay/ViewModels/Windows/AddressModel.cs
index c185e5a3..c319f36d 100644
--- a/MHFZ_Overlay/ViewModels/Windows/AddressModel.cs
+++ b/MHFZ_Overlay/ViewModels/Windows/AddressModel.cs
@@ -14,6 +14,7 @@ namespace MHFZ_Overlay.ViewModels.Windows;
using System.Globalization;
using System.IO;
using System.Linq;
+using System.Security.Policy;
using System.Security.RightsManagement;
using System.Text;
using System.Windows;
@@ -1966,28 +1967,28 @@ public string GetGamePatchInfo(GamePatchFile file, string hash)
QuestsGamePatches.datHashInfo.TryGetValue(hash, out var datInfo);
if (datInfo != null)
{
- var a = datInfo.Keys.FirstOrDefault();
- var b = datInfo.Keys.FirstOrDefault().ToString();
+ //var a = datInfo.Keys.FirstOrDefault();
+ //var b = datInfo.Keys.FirstOrDefault().ToString();
return $"{datInfo.Keys.FirstOrDefault().ToString()}-{datInfo.Values.FirstOrDefault().ToString()}";
}
break;
case GamePatchFile.emd:
- QuestsGamePatches.datHashInfo.TryGetValue(hash, out var emdInfo);
+ QuestsGamePatches.emdHashInfo.TryGetValue(hash, out var emdInfo);
if (emdInfo != null)
{
return $"{emdInfo.Keys.FirstOrDefault().ToString()}-{emdInfo.Values.FirstOrDefault().ToString()}";
}
break;
case GamePatchFile.dll:
- QuestsGamePatches.datHashInfo.TryGetValue(hash, out var dllInfo);
+ QuestsGamePatches.mhfodllHashInfo.TryGetValue(hash, out var dllInfo);
if (dllInfo != null)
{
return $"{dllInfo.Keys.FirstOrDefault().ToString()}-{dllInfo.Values.FirstOrDefault().ToString()}";
}
break;
case GamePatchFile.hddll:
- QuestsGamePatches.datHashInfo.TryGetValue(hash, out var hddllInfo);
+ QuestsGamePatches.mhfohddllHashInfo.TryGetValue(hash, out var hddllInfo);
if (hddllInfo != null)
{
return $"{hddllInfo.Keys.FirstOrDefault().ToString()}-{hddllInfo.Values.FirstOrDefault().ToString()}";
@@ -8219,6 +8220,14 @@ public string GenerateGearStats(long? runID = null)
showGouBoost = " (After Gou/Muscle Boost)";
}
+ var s = (Settings)Application.Current.TryFindResource("Settings");
+
+ var gameFolderPathStatus = s.GameFolderPath == @"C:\Program Files (x86)\CAPCOM\Monster Hunter Frontier Online" ? "Standard" : "Custom";
+ var mhfdatHash = DatabaseService.CalculateFileHash(s.GameFolderPath, @"\dat\mhfdat.bin");
+ var mhfemdHash = DatabaseService.CalculateFileHash(s.GameFolderPath, @"\dat\mhfemd.bin");
+ var mhfodllHash = DatabaseService.CalculateFileHash(s.GameFolderPath, @"\mhfo.dll");
+ var mhfohddllHash = DatabaseService.CalculateFileHash(s.GameFolderPath, @"\mhfo-hd.dll");
+
// zp in bold for markdown
// fruits and speedrunner items also in bold
var stats = string.Format(
@@ -8291,9 +8300,15 @@ public string GenerateGearStats(long? runID = null)
Attack {HalkAttack()}
Defense {HalkDefense()}
Intellect {HalkIntellect()}
-{HalkSkill1()} | {HalkSkill2()} | {HalkSkill3()}
+{(HalkSkill1() == 0 ? "None" : EZlion.Mapper.SkillHalk.IDName[HalkSkill1()])} | {(HalkSkill2() == 0 ? "None" : EZlion.Mapper.SkillHalk.IDName[HalkSkill2()])} | {(HalkSkill3() == 0 ? "None" : EZlion.Mapper.SkillHalk.IDName[HalkSkill3()])}
Overlay Hash: {DatabaseManagerInstance.GetOverlayHash()}
+
+Game Patch Information:
+dat: {GetGamePatchInfo(GamePatchFile.dat, mhfdatHash)}
+emd: {GetGamePatchInfo(GamePatchFile.emd, mhfemdHash)}
+dll: {GetGamePatchInfo(GamePatchFile.dll, mhfodllHash)}
+hddll: {GetGamePatchInfo(GamePatchFile.hddll, mhfohddllHash)}
");
this.SavedGearStats = stats;
var formattedStats = string.Format(
@@ -8366,9 +8381,15 @@ public string GenerateGearStats(long? runID = null)
Attack {HalkAttack()}
Defense {HalkDefense()}
Intellect {HalkIntellect()}
-{HalkSkill1()} | {HalkSkill2()} | {HalkSkill3()}
+{(HalkSkill1() == 0 ? "None" : EZlion.Mapper.SkillHalk.IDName[HalkSkill1()])} | {(HalkSkill2() == 0 ? "None" : EZlion.Mapper.SkillHalk.IDName[HalkSkill2()])} | {(HalkSkill3() == 0 ? "None" : EZlion.Mapper.SkillHalk.IDName[HalkSkill3()])}
**Overlay Hash:** {DatabaseManagerInstance.GetOverlayHash()}
+
+**Game Patch Information:**
+dat: {GetGamePatchInfo(GamePatchFile.dat, mhfdatHash)}
+emd: {GetGamePatchInfo(GamePatchFile.emd, mhfemdHash)}
+dll: {GetGamePatchInfo(GamePatchFile.dll, mhfodllHash)}
+hddll: {GetGamePatchInfo(GamePatchFile.hddll, mhfohddllHash)}
");
this.MarkdownSavedGearStats = formattedStats;
return stats;
@@ -8445,142 +8466,96 @@ public string GenerateGearStats(long? runID = null)
var halkSkill2 = halk.HalkSkill2 == null ? "None" : EZlion.Mapper.SkillHalk.IDName[(int)halk.HalkSkill2];
var halkSkill3 = halk.HalkSkill3 == null ? "None" : EZlion.Mapper.SkillHalk.IDName[(int)halk.HalkSkill3];
+ var courseInfo = $"Main: {GetMainCourses(courses.Rights)}\nAdditional: {GetAdditionalCourses(courses.Rights)}";
+ var patchInfo = DatabaseManagerInstance.GetQuestsGamePatch((long)runID);
+
// TODO: fix
+ // TODO partnyaBagItems
// var partnyaBagItems = GetItemsForRunID(new int[] { (int)partnyaBag.Item1ID, (int)partnyaBag.Item2ID, (int)partnyaBag.Item3ID, (int)partnyaBag.Item4ID, (int)partnyaBag.Item5ID, (int)partnyaBag.Item6ID, (int)partnyaBag.Item7ID, (int)partnyaBag.Item8ID, (int)partnyaBag.Item9ID, (int)partnyaBag.Item10ID });
return string.Format(
CultureInfo.InvariantCulture,
- @"{0} {1}({2}){3}
+ $@"{createdBy} {weaponClass}({gender}){metadata}
-Set Name: {4}
-{5}: {6}
-Head: {7}
-Chest: {8}
-Arms: {9}
-Waist: {10}
-Legs: {11}
-Cuffs: {12}
+Set Name: {gearName}
+{weaponName}: {realweaponName}
+Head: {head}
+Chest: {chest}
+Arms: {arms}
+Waist: {waist}
+Legs: {legs}
+Cuffs: {cuffs}
-Run Date: {13} | Run Hash: {14}
+Run Date: {date} | Run Hash: {hash}
Zenith Skills:
-{15}
+{zenithSkillsList}
Automatic Skills:
-{16}
+{automaticSkillsList}
-Active Skills{17}:
-{18}
+Active Skills{gouBoost}:
+{armorSkills}
Caravan Skills:
-{19}
+{caravanSkillsList}
Diva:
-{20}
-Song {21}
+{(divaSkill == "None" ? "No Skill" : divaSkill)}
+Song {(diva.DivaSongBuffOn > 0 ? "ON" : "OFF")}
Diva Prayer Gems:
-{22}
+{GetDivaPrayerGems(diva)}
Guild:
-{23}
-{24}
+{guildFood}
+{GetGuildPoogieEffect(guildPoogie)}
Style Rank:
-{25}
+{styleRankSkillsList}
Items:
-{26}
+{inventory}
Ammo:
-{27}
+{ammo}
Poogie Item:
-{28}
+{poogieItem}
Road/Duremudira Skills:
-{29}
+{roadDureSkillsList}
-Quest: {30}
-{31} {32} {33}
-Category: {34}
-Party Size: {35}
-Mode: {36}
-Active Feature {37}
+Quest: {questName}
+{questObjectiveType} {questObjectiveQuantity} {questObjectiveName}
+Category: {questCategory}
+Party Size: {partySize}
+Mode: {toggleModeName}
+Active Feature {(activeFeatureState == true ? "ON" : "OFF")}
Courses:
-{38}
+{courseInfo}
Halk:
-{39}
-Halk Pot {40}
-LV{41}
-Element Type {42}
-Status Type {43}
-Intimacy {44}
-Health {45}
-Attack {46}
-Defense {47}
-Intellect {48}
-{49} | {50} | {51}
-
-Overlay Hash: {52}
-",
- createdBy,
- weaponClass,
- gender,
- metadata,
- gearName,
- weaponName,
- realweaponName,
- head,
- chest,
- arms,
- waist,
- legs,
- cuffs,
- date,
- hash,
- zenithSkillsList,
- automaticSkillsList,
- gouBoost,
- armorSkills,
- caravanSkillsList,
- divaSkill == "None" ? "No Skill" : divaSkill,
- diva.DivaSongBuffOn > 0 ? "ON" : "OFF",
- GetDivaPrayerGems(diva),
- guildFood,
- GetGuildPoogieEffect(guildPoogie),
- styleRankSkillsList,
- inventory,
- ammo,
- poogieItem,
- roadDureSkillsList,
-
- // TODO partnyaBagItems
- questName,
- questObjectiveType,
- questObjectiveQuantity,
- questObjectiveName,
- questCategory,
- partySize,
- toggleModeName,
- activeFeatureState == true ? "ON" : "OFF",
- $"Main: {GetMainCourses(courses.Rights)}\nAdditional: {GetAdditionalCourses(courses.Rights)}",
- halk.HalkOn > 0 ? "Active" : "Inactive",
- halk.HalkPotEffectOn > 0 ? "ON" : "OFF",
- halk.HalkLevel,
- GetHalkElement(halk),
- GetHalkStatus(halk),
- halk.HalkIntimacy,
- halk.HalkHealth,
- halk.HalkAttack,
- halk.HalkDefense,
- halk.HalkIntellect,
- halkSkill1,
- halkSkill2,
- halkSkill3,
- overlayHash.OverlayHash
- );
+{(halk.HalkOn > 0 ? "Active" : "Inactive")}
+Halk Pot {(halk.HalkPotEffectOn > 0 ? "ON" : "OFF")}
+LV{halk.HalkLevel}
+Element Type {GetHalkElement(halk)}
+Status Type {GetHalkStatus(halk)}
+Intimacy {halk.HalkIntimacy}
+Health {halk.HalkHealth}
+Attack {halk.HalkAttack}
+Defense {halk.HalkDefense}
+Intellect {halk.HalkIntellect}
+{halkSkill1} | {halkSkill2} | {halkSkill3}
+
+Overlay Hash: {overlayHash.OverlayHash}
+
+Game Patch Information:
+dat: {patchInfo.mhfdatInfo}
+emd: {patchInfo.mhfemdInfo}
+dll: {patchInfo.mhfodllInfo}
+hddll: {patchInfo.mhfohddllInfo}
+");
}
}