Skip to content

Commit

Permalink
Feature: Add hardcoded hotfix parsing, to make whole hotfix update pr…
Browse files Browse the repository at this point in the history
…ocess easier and faster

- TODO: find way to remove old data without deleting valid data
  • Loading branch information
funjoker committed Jan 5, 2023
1 parent eeb181b commit f2742a2
Show file tree
Hide file tree
Showing 328 changed files with 26,963 additions and 40 deletions.
1 change: 1 addition & 0 deletions WowPacketParser/App.config
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@
<add key="hotfix_data" value="false"/>
<add key="hotfix_blob" value="false"/>
<add key="hotfix_optional_data" value="false"/>
<add key="hotfixes" value="false"/>


<!--
Expand Down
3 changes: 2 additions & 1 deletion WowPacketParser/Enums/SQLOutput.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@ public enum SQLOutput

hotfix_data,
hotfix_blob,
hotfix_optional_data
hotfix_optional_data,
hotfixes
// ReSharper restore InconsistentNaming
}
}
3,410 changes: 3,371 additions & 39 deletions WowPacketParser/SQL/Builders/HotfixBuilder.cs

Large diffs are not rendered by default.

11 changes: 11 additions & 0 deletions WowPacketParser/SQL/HotfixAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System;

namespace WowPacketParser.SQL
{
/// <summary>
/// Marks if class belongs to hotfix table
/// Only usuable with structs or classes
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = true)]
public sealed class HotfixAttribute : Attribute { }
}
12 changes: 12 additions & 0 deletions WowPacketParser/SQL/QueryBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ namespace WowPacketParser.SQL

private static readonly List<Tuple<string, FieldInfo, List<DBFieldNameAttribute>>> _databaseFields = SQLUtil.GetFields<T>();
private static readonly FieldInfo _primaryKeyReflectionField = SQLUtil.GetFirstPrimaryKey<T>();
private static readonly bool _isHotfixTable = SQLUtil.IsHotfixTable<T>();

public SQLWhere(RowList<T> conditionList, bool onlyPrimaryKeys = false)
{
Expand All @@ -33,6 +34,9 @@ public string Build()

if (_onlyPrimaryKeys && _conditions.GetPrimaryKeyCount() == 1)
{
if (_isHotfixTable)
whereClause.Append("`VerifiedBuild`>0 AND ");

var field = _databaseFields.Single(f => f.Item2 == _primaryKeyReflectionField);

whereClause.Append(field.Item1);
Expand Down Expand Up @@ -75,6 +79,10 @@ public string Build()
foreach (Row<T> condition in _conditions)
{
whereClause.Append("(");

if (_isHotfixTable)
whereClause.Append("`VerifiedBuild`>0 AND ");

foreach (var field in _databaseFields)
{
object value = field.Item2.GetValue(condition.Data);
Expand Down Expand Up @@ -160,6 +168,10 @@ group fieldValuePair by fieldValuePair.Key into byField
foreach(var pair in conditionsByFieldWithLowestDifferentValues)
{
whereClause.Append("(");

if (_isHotfixTable)
whereClause.Append("`VerifiedBuild`>0 AND ");

whereClause.Append(fieldWithLowestDifferentValues);
whereClause.Append("=");
whereClause.Append(pair.Key);
Expand Down
5 changes: 5 additions & 0 deletions WowPacketParser/SQL/SQLUtil.cs
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,11 @@ public static bool IsPrimaryKey(FieldInfo field)
return Utilities.GetAttributes<DBFieldNameAttribute>(field).Any(a => a.IsPrimaryKey);
}

public static bool IsHotfixTable<T>() where T : IDataModel
{
return Attribute.IsDefined(typeof(T), typeof(HotfixAttribute));
}

/// <param name="storeList"><see cref="DataBag{T}"/> with items form sniff.</param>
/// <param name="dbList"><see cref="DataBag{T}"/> with items from database.</param>
/// <param name="storeType">Are we dealing with Spells, Quests, Units, ...?</param>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
using WowPacketParser.Misc;
using WowPacketParser.SQL;

namespace WowPacketParser.Store.Objects
{
[Hotfix]
[DBTableName("achievement_category")]
public sealed record AchievementCategoryHotfix1000: IDataModel
{
[DBFieldName("Name")]
public string Name;

[DBFieldName("ID", true)]
public uint? ID;

[DBFieldName("Parent")]
public short? Parent;

[DBFieldName("UiOrder")]
public sbyte? UiOrder;

[DBFieldName("VerifiedBuild")]
public int? VerifiedBuild = ClientVersion.BuildInt;
}

[Hotfix]
[DBTableName("achievement_category_locale")]
public sealed record AchievementCategoryLocaleHotfix1000: IDataModel
{
[DBFieldName("ID", true)]
public uint? ID;

[DBFieldName("locale", true)]
public string Locale = ClientLocale.PacketLocaleString;

[DBFieldName("Name_lang")]
public string NameLang;

[DBFieldName("VerifiedBuild")]
public int? VerifiedBuild = ClientVersion.BuildInt;
}
}
87 changes: 87 additions & 0 deletions WowPacketParser/Store/Objects/Hotfixes/AchievementHotfix.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
using WowPacketParser.Misc;
using WowPacketParser.SQL;

namespace WowPacketParser.Store.Objects
{
[Hotfix]
[DBTableName("achievement")]
public sealed record AchievementHotfix1000: IDataModel
{
[DBFieldName("Description")]
public string Description;

[DBFieldName("Title")]
public string Title;

[DBFieldName("Reward")]
public string Reward;

[DBFieldName("ID", true)]
public uint? ID;

[DBFieldName("InstanceID")]
public short? InstanceID;

[DBFieldName("Faction")]
public sbyte? Faction;

[DBFieldName("Supercedes")]
public short? Supercedes;

[DBFieldName("Category")]
public short? Category;

[DBFieldName("MinimumCriteria")]
public sbyte? MinimumCriteria;

[DBFieldName("Points")]
public sbyte? Points;

[DBFieldName("Flags")]
public int? Flags;

[DBFieldName("UiOrder")]
public short? UiOrder;

[DBFieldName("IconFileID")]
public int? IconFileID;

[DBFieldName("RewardItemID")]
public int? RewardItemID;

[DBFieldName("CriteriaTree")]
public uint? CriteriaTree;

[DBFieldName("SharesCriteria")]
public short? SharesCriteria;

[DBFieldName("CovenantID")]
public int? CovenantID;

[DBFieldName("VerifiedBuild")]
public int? VerifiedBuild = ClientVersion.BuildInt;
}

[Hotfix]
[DBTableName("achievement_locale")]
public sealed record AchievementLocaleHotfix1000: IDataModel
{
[DBFieldName("ID", true)]
public uint? ID;

[DBFieldName("locale", true)]
public string Locale = ClientLocale.PacketLocaleString;

[DBFieldName("Description_lang")]
public string DescriptionLang;

[DBFieldName("Title_lang")]
public string TitleLang;

[DBFieldName("Reward_lang")]
public string RewardLang;

[DBFieldName("VerifiedBuild")]
public int? VerifiedBuild = ClientVersion.BuildInt;
}
}
111 changes: 111 additions & 0 deletions WowPacketParser/Store/Objects/Hotfixes/AdventureJournalHotfix.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
using WowPacketParser.Misc;
using WowPacketParser.SQL;

namespace WowPacketParser.Store.Objects
{
[Hotfix]
[DBTableName("adventure_journal")]
public sealed record AdventureJournalHotfix1000: IDataModel
{
[DBFieldName("ID", true)]
public uint? ID;

[DBFieldName("Name")]
public string Name;

[DBFieldName("Description")]
public string Description;

[DBFieldName("ButtonText")]
public string ButtonText;

[DBFieldName("RewardDescription")]
public string RewardDescription;

[DBFieldName("ContinueDescription")]
public string ContinueDescription;

[DBFieldName("Type")]
public byte? Type;

[DBFieldName("PlayerConditionID")]
public uint? PlayerConditionID;

[DBFieldName("Flags")]
public int? Flags;

[DBFieldName("ButtonActionType")]
public byte? ButtonActionType;

[DBFieldName("TextureFileDataID")]
public int? TextureFileDataID;

[DBFieldName("LfgDungeonID")]
public ushort? LfgDungeonID;

[DBFieldName("QuestID")]
public int? QuestID;

[DBFieldName("BattleMasterListID")]
public ushort? BattleMasterListID;

[DBFieldName("PriorityMin")]
public byte? PriorityMin;

[DBFieldName("PriorityMax")]
public byte? PriorityMax;

[DBFieldName("ItemID")]
public int? ItemID;

[DBFieldName("ItemQuantity")]
public uint? ItemQuantity;

[DBFieldName("CurrencyType")]
public ushort? CurrencyType;

[DBFieldName("CurrencyQuantity")]
public uint? CurrencyQuantity;

[DBFieldName("UIMapID")]
public ushort? UIMapID;

[DBFieldName("BonusPlayerConditionID", 2)]
public uint?[] BonusPlayerConditionID;

[DBFieldName("BonusValue", 2)]
public byte?[] BonusValue;

[DBFieldName("VerifiedBuild")]
public int? VerifiedBuild = ClientVersion.BuildInt;
}

[Hotfix]
[DBTableName("adventure_journal_locale")]
public sealed record AdventureJournalLocaleHotfix1000: IDataModel
{
[DBFieldName("ID", true)]
public uint? ID;

[DBFieldName("locale", true)]
public string Locale = ClientLocale.PacketLocaleString;

[DBFieldName("Name_lang")]
public string NameLang;

[DBFieldName("Description_lang")]
public string DescriptionLang;

[DBFieldName("ButtonText_lang")]
public string ButtonTextLang;

[DBFieldName("RewardDescription_lang")]
public string RewardDescriptionLang;

[DBFieldName("ContinueDescription_lang")]
public string ContinueDescriptionLang;

[DBFieldName("VerifiedBuild")]
public int? VerifiedBuild = ClientVersion.BuildInt;
}
}
Loading

0 comments on commit f2742a2

Please sign in to comment.