Core/Items: Fixed crash when saving azerite items with REMOVED state

Port From (https://github.com/TrinityCore/TrinityCore/commit/16321877f6dfaec1d919ecd4c5bf49a1b5f6788d)
This commit is contained in:
hondacrx
2019-12-05 23:01:40 -05:00
parent 5b9ad41953
commit 8c30f80048
2 changed files with 57 additions and 44 deletions
@@ -52,18 +52,24 @@ namespace Game.Entities
public override void SaveToDB(SQLTransaction trans) public override void SaveToDB(SQLTransaction trans)
{ {
base.SaveToDB(trans);
PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_ITEM_INSTANCE_AZERITE_EMPOWERED); PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_ITEM_INSTANCE_AZERITE_EMPOWERED);
stmt.AddValue(0, GetGUID().GetCounter()); stmt.AddValue(0, GetGUID().GetCounter());
trans.Append(stmt); trans.Append(stmt);
switch (GetState())
{
case ItemUpdateState.New:
case ItemUpdateState.Changed:
stmt = DB.Characters.GetPreparedStatement(CharStatements.INS_ITEM_INSTANCE_AZERITE_EMPOWERED); stmt = DB.Characters.GetPreparedStatement(CharStatements.INS_ITEM_INSTANCE_AZERITE_EMPOWERED);
stmt.AddValue(0, GetGUID().GetCounter()); stmt.AddValue(0, GetGUID().GetCounter());
for (int i = 0; i < SharedConst.MaxAzeriteEmpoweredTier; ++i) for (int i = 0; i < SharedConst.MaxAzeriteEmpoweredTier; ++i)
stmt.AddValue(1 + i, m_azeriteEmpoweredItemData.Selections[i]); stmt.AddValue(1 + i, m_azeriteEmpoweredItemData.Selections[i]);
trans.Append(stmt); trans.Append(stmt);
break;
}
base.SaveToDB(trans);
} }
public void LoadAzeriteEmpoweredItemData(Player owner, AzeriteEmpoweredData azeriteEmpoweredItem) public void LoadAzeriteEmpoweredItemData(Player owner, AzeriteEmpoweredData azeriteEmpoweredItem)
+19 -12
View File
@@ -53,12 +53,22 @@ namespace Game.Entities
public override void SaveToDB(SQLTransaction trans) public override void SaveToDB(SQLTransaction trans)
{ {
base.SaveToDB(trans);
PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_ITEM_INSTANCE_AZERITE); PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_ITEM_INSTANCE_AZERITE);
stmt.AddValue(0, GetGUID().GetCounter()); stmt.AddValue(0, GetGUID().GetCounter());
trans.Append(stmt); trans.Append(stmt);
stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_ITEM_INSTANCE_AZERITE_MILESTONE_POWER);
stmt.AddValue(0, GetGUID().GetCounter());
trans.Append(stmt);
stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE);
stmt.AddValue(0, GetGUID().GetCounter());
trans.Append(stmt);
switch (GetState())
{
case ItemUpdateState.New:
case ItemUpdateState.Changed:
stmt = DB.Characters.GetPreparedStatement(CharStatements.INS_ITEM_INSTANCE_AZERITE); stmt = DB.Characters.GetPreparedStatement(CharStatements.INS_ITEM_INSTANCE_AZERITE);
stmt.AddValue(0, GetGUID().GetCounter()); stmt.AddValue(0, GetGUID().GetCounter());
stmt.AddValue(1, m_azeriteItemData.Xp); stmt.AddValue(1, m_azeriteItemData.Xp);
@@ -69,19 +79,16 @@ namespace Game.Entities
for (; specIndex < m_azeriteItemData.SelectedEssences.Size(); ++specIndex) for (; specIndex < m_azeriteItemData.SelectedEssences.Size(); ++specIndex)
{ {
stmt.AddValue(4 + specIndex * 4, m_azeriteItemData.SelectedEssences[specIndex].SpecializationID); stmt.AddValue(4 + specIndex * 4, m_azeriteItemData.SelectedEssences[specIndex].SpecializationID);
for (var j = 0; j < SharedConst.MaxAzeriteEssenceSlot; ++j) for (int j = 0; j < SharedConst.MaxAzeriteEssenceSlot; ++j)
stmt.AddValue(5 + specIndex * 4 + j, m_azeriteItemData.SelectedEssences[specIndex].AzeriteEssenceID[j]); stmt.AddValue(5 + specIndex * 4 + j, m_azeriteItemData.SelectedEssences[specIndex].AzeriteEssenceID[j]);
} }
for (; specIndex < PlayerConst.MaxSpecializations; ++specIndex) for (; specIndex < PlayerConst.MaxSpecializations; ++specIndex)
{ {
stmt.AddValue(4 + specIndex * 4, 0); stmt.AddValue(4 + specIndex * 4, 0);
for (var j = 0; j < SharedConst.MaxAzeriteEssenceSlot; ++j) for (int j = 0; j < SharedConst.MaxAzeriteEssenceSlot; ++j)
stmt.AddValue(5 + specIndex * 4 + j, 0); stmt.AddValue(5 + specIndex * 4 + j, 0);
} }
trans.Append(stmt);
stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_ITEM_INSTANCE_AZERITE_MILESTONE_POWER);
stmt.AddValue(0, GetGUID().GetCounter());
trans.Append(stmt); trans.Append(stmt);
foreach (uint azeriteItemMilestonePowerId in m_azeriteItemData.UnlockedEssenceMilestones) foreach (uint azeriteItemMilestonePowerId in m_azeriteItemData.UnlockedEssenceMilestones)
@@ -92,11 +99,7 @@ namespace Game.Entities
trans.Append(stmt); trans.Append(stmt);
} }
stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE); foreach (var azeriteEssence in m_azeriteItemData.UnlockedEssences)
stmt.AddValue(0, GetGUID().GetCounter());
trans.Append(stmt);
foreach (UnlockedAzeriteEssence azeriteEssence in m_azeriteItemData.UnlockedEssences)
{ {
stmt = DB.Characters.GetPreparedStatement(CharStatements.INS_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE); stmt = DB.Characters.GetPreparedStatement(CharStatements.INS_ITEM_INSTANCE_AZERITE_UNLOCKED_ESSENCE);
stmt.AddValue(0, GetGUID().GetCounter()); stmt.AddValue(0, GetGUID().GetCounter());
@@ -104,6 +107,10 @@ namespace Game.Entities
stmt.AddValue(2, azeriteEssence.Rank); stmt.AddValue(2, azeriteEssence.Rank);
trans.Append(stmt); trans.Append(stmt);
} }
break;
}
base.SaveToDB(trans);
} }
public void LoadAzeriteItemData(Player owner, AzeriteData azeriteData) public void LoadAzeriteItemData(Player owner, AzeriteData azeriteData)