Core/Items: Fixed crash in selecting azerite essences
Port From (https://github.com/TrinityCore/TrinityCore/commit/bec4ed0f16d100f74c76e4aca06ed9ea42e21ec4)
This commit is contained in:
@@ -167,14 +167,14 @@ namespace Game.Entities
|
|||||||
selectedEssences.ModifyValue(selectedEssences.AzeriteEssenceID, i) = selectedEssenceData.AzeriteEssenceId[i];
|
selectedEssences.ModifyValue(selectedEssences.AzeriteEssenceID, i) = selectedEssenceData.AzeriteEssenceId[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (owner.GetPrimarySpecialization() == selectedEssenceData.SpecializationId)
|
if (owner != null && owner.GetPrimarySpecialization() == selectedEssenceData.SpecializationId)
|
||||||
selectedEssences.ModifyValue(selectedEssences.Enabled).SetValue(1);
|
selectedEssences.ModifyValue(selectedEssences.Enabled).SetValue(1);
|
||||||
|
|
||||||
AddDynamicUpdateFieldValue(m_values.ModifyValue(m_azeriteItemData).ModifyValue(m_azeriteItemData.SelectedEssences), selectedEssences);
|
AddDynamicUpdateFieldValue(m_values.ModifyValue(m_azeriteItemData).ModifyValue(m_azeriteItemData.SelectedEssences), selectedEssences);
|
||||||
}
|
}
|
||||||
|
|
||||||
// add selected essences for current spec
|
// add selected essences for current spec
|
||||||
if (GetSelectedAzeriteEssences() == null)
|
if (owner != null && GetSelectedAzeriteEssences() == null)
|
||||||
CreateSelectedAzeriteEssences(owner.GetPrimarySpecialization());
|
CreateSelectedAzeriteEssences(owner.GetPrimarySpecialization());
|
||||||
|
|
||||||
if (needSave)
|
if (needSave)
|
||||||
@@ -372,6 +372,14 @@ namespace Game.Entities
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void CreateSelectedAzeriteEssences(uint specializationId)
|
||||||
|
{
|
||||||
|
SelectedAzeriteEssences selectedEssences = new SelectedAzeriteEssences();
|
||||||
|
selectedEssences.ModifyValue(selectedEssences.SpecializationID).SetValue(specializationId);
|
||||||
|
selectedEssences.ModifyValue(selectedEssences.Enabled).SetValue(1);
|
||||||
|
AddDynamicUpdateFieldValue(m_values.ModifyValue(m_azeriteItemData).ModifyValue(m_azeriteItemData.SelectedEssences), selectedEssences);
|
||||||
|
}
|
||||||
|
|
||||||
public void SetSelectedAzeriteEssences(uint specializationId)
|
public void SetSelectedAzeriteEssences(uint specializationId)
|
||||||
{
|
{
|
||||||
int index = m_azeriteItemData.SelectedEssences.FindIndexIf(essences => { return essences.Enabled == 1; });
|
int index = m_azeriteItemData.SelectedEssences.FindIndexIf(essences => { return essences.Enabled == 1; });
|
||||||
@@ -487,14 +495,6 @@ namespace Game.Entities
|
|||||||
hasPreviousMilestone = false;
|
hasPreviousMilestone = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreateSelectedAzeriteEssences(uint specializationId)
|
|
||||||
{
|
|
||||||
var selectedEssences = new SelectedAzeriteEssences();
|
|
||||||
selectedEssences.ModifyValue(selectedEssences.SpecializationID).SetValue(specializationId);
|
|
||||||
selectedEssences.ModifyValue(selectedEssences.Enabled).SetValue(1);
|
|
||||||
AddDynamicUpdateFieldValue(m_values.ModifyValue(m_azeriteItemData).ModifyValue(m_azeriteItemData.SelectedEssences), selectedEssences);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class AzeriteItemSelectedEssencesData
|
public class AzeriteItemSelectedEssencesData
|
||||||
|
|||||||
@@ -570,7 +570,7 @@ namespace Game.Entities
|
|||||||
if (artifactPowerPicker != null)
|
if (artifactPowerPicker != null)
|
||||||
{
|
{
|
||||||
PlayerConditionRecord playerCondition = CliDB.PlayerConditionStorage.LookupByKey(artifactPowerPicker.PlayerConditionID);
|
PlayerConditionRecord playerCondition = CliDB.PlayerConditionStorage.LookupByKey(artifactPowerPicker.PlayerConditionID);
|
||||||
if (playerCondition == null || ConditionManager.IsPlayerMeetingCondition(owner, playerCondition))
|
if (playerCondition == null || (owner != null && ConditionManager.IsPlayerMeetingCondition(owner, playerCondition)))
|
||||||
if (artifactPower.Label == _bonusData.GemRelicType[e - EnchantmentSlot.Sock1])
|
if (artifactPower.Label == _bonusData.GemRelicType[e - EnchantmentSlot.Sock1])
|
||||||
power.CurrentRankWithBonus += (byte)enchant.EffectPointsMin[i];
|
power.CurrentRankWithBonus += (byte)enchant.EffectPointsMin[i];
|
||||||
}
|
}
|
||||||
@@ -595,7 +595,7 @@ namespace Game.Entities
|
|||||||
SetArtifactPower((ushort)power.ArtifactPowerId, power.PurchasedRank, (byte)(totalPurchasedRanks + 1));
|
SetArtifactPower((ushort)power.ArtifactPowerId, power.PurchasedRank, (byte)(totalPurchasedRanks + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
CheckArtifactRelicSlotUnlock(owner != null ? owner : GetOwner());
|
CheckArtifactRelicSlotUnlock(owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CheckArtifactRelicSlotUnlock(Player owner)
|
public void CheckArtifactRelicSlotUnlock(Player owner)
|
||||||
|
|||||||
@@ -1234,20 +1234,29 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public virtual SpellInfo GetCastSpellInfo(SpellInfo spellInfo)
|
public virtual SpellInfo GetCastSpellInfo(SpellInfo spellInfo)
|
||||||
{
|
{
|
||||||
var swaps = GetAuraEffectsByType(AuraType.OverrideActionbarSpells);
|
SpellInfo findMatchingAuraEffectIn(AuraType type)
|
||||||
var swaps2 = GetAuraEffectsByType(AuraType.OverrideActionbarSpellsTriggered);
|
{
|
||||||
if (!swaps2.Empty())
|
foreach (AuraEffect auraEffect in GetAuraEffectsByType(type))
|
||||||
swaps.AddRange(swaps2);
|
{
|
||||||
|
bool matches = auraEffect.GetMiscValue() != 0 ? auraEffect.GetMiscValue() == spellInfo.Id : auraEffect.IsAffectingSpell(spellInfo);
|
||||||
|
if (matches)
|
||||||
|
{
|
||||||
|
SpellInfo info = Global.SpellMgr.GetSpellInfo((uint)auraEffect.GetAmount());
|
||||||
|
if (info != null)
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
foreach (AuraEffect auraEffect in swaps)
|
return null;
|
||||||
{
|
}
|
||||||
if (auraEffect.GetMiscValue() == spellInfo.Id || auraEffect.IsAffectingSpell(spellInfo))
|
|
||||||
{
|
SpellInfo newInfo = findMatchingAuraEffectIn(AuraType.OverrideActionbarSpells);
|
||||||
SpellInfo newInfo = Global.SpellMgr.GetSpellInfo((uint)auraEffect.GetAmount());
|
if (newInfo != null)
|
||||||
|
return newInfo;
|
||||||
|
|
||||||
|
newInfo = findMatchingAuraEffectIn(AuraType.OverrideActionbarSpellsTriggered);
|
||||||
if (newInfo != null)
|
if (newInfo != null)
|
||||||
return newInfo;
|
return newInfo;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return spellInfo;
|
return spellInfo;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ namespace Game
|
|||||||
|
|
||||||
SelectedAzeriteEssences selectedEssences = azeriteItem.GetSelectedAzeriteEssences();
|
SelectedAzeriteEssences selectedEssences = azeriteItem.GetSelectedAzeriteEssences();
|
||||||
// essence is already in that slot, nothing to do
|
// essence is already in that slot, nothing to do
|
||||||
if (selectedEssences.AzeriteEssenceID[azeriteEssenceActivateEssence.Slot] == azeriteEssenceActivateEssence.AzeriteEssenceID)
|
if (selectedEssences != null && selectedEssences.AzeriteEssenceID[azeriteEssenceActivateEssence.Slot] == azeriteEssenceActivateEssence.AzeriteEssenceID)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
uint rank = azeriteItem.GetEssenceRank(azeriteEssenceActivateEssence.AzeriteEssenceID);
|
uint rank = azeriteItem.GetEssenceRank(azeriteEssenceActivateEssence.AzeriteEssenceID);
|
||||||
@@ -127,6 +127,8 @@ namespace Game
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (selectedEssences != null)
|
||||||
|
{
|
||||||
// need to remove selected essence from another slot if selected
|
// need to remove selected essence from another slot if selected
|
||||||
int removeEssenceFromSlot = -1;
|
int removeEssenceFromSlot = -1;
|
||||||
for (int slot = 0; slot < SharedConst.MaxAzeriteEssenceSlot; ++slot)
|
for (int slot = 0; slot < SharedConst.MaxAzeriteEssenceSlot; ++slot)
|
||||||
@@ -150,6 +152,7 @@ namespace Game
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (removeEssenceFromSlot != -1)
|
if (removeEssenceFromSlot != -1)
|
||||||
{
|
{
|
||||||
_player.ApplyAzeriteEssence(azeriteItem, selectedEssences.AzeriteEssenceID[removeEssenceFromSlot], SharedConst.MaxAzeriteEssenceRank,
|
_player.ApplyAzeriteEssence(azeriteItem, selectedEssences.AzeriteEssenceID[removeEssenceFromSlot], SharedConst.MaxAzeriteEssenceRank,
|
||||||
@@ -162,11 +165,15 @@ namespace Game
|
|||||||
_player.ApplyAzeriteEssence(azeriteItem, selectedEssences.AzeriteEssenceID[azeriteEssenceActivateEssence.Slot], SharedConst.MaxAzeriteEssenceRank,
|
_player.ApplyAzeriteEssence(azeriteItem, selectedEssences.AzeriteEssenceID[azeriteEssenceActivateEssence.Slot], SharedConst.MaxAzeriteEssenceRank,
|
||||||
(AzeriteItemMilestoneType)Global.DB2Mgr.GetAzeriteItemMilestonePower(azeriteEssenceActivateEssence.Slot).Type == AzeriteItemMilestoneType.MajorEssence, false);
|
(AzeriteItemMilestoneType)Global.DB2Mgr.GetAzeriteItemMilestonePower(azeriteEssenceActivateEssence.Slot).Type == AzeriteItemMilestoneType.MajorEssence, false);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
azeriteItem.CreateSelectedAzeriteEssences(_player.GetPrimarySpecialization());
|
||||||
|
|
||||||
|
azeriteItem.SetSelectedAzeriteEssence(azeriteEssenceActivateEssence.Slot, azeriteEssenceActivateEssence.AzeriteEssenceID);
|
||||||
|
|
||||||
_player.ApplyAzeriteEssence(azeriteItem, azeriteEssenceActivateEssence.AzeriteEssenceID, rank,
|
_player.ApplyAzeriteEssence(azeriteItem, azeriteEssenceActivateEssence.AzeriteEssenceID, rank,
|
||||||
(AzeriteItemMilestoneType)Global.DB2Mgr.GetAzeriteItemMilestonePower(azeriteEssenceActivateEssence.Slot).Type == AzeriteItemMilestoneType.MajorEssence, true);
|
(AzeriteItemMilestoneType)Global.DB2Mgr.GetAzeriteItemMilestonePower(azeriteEssenceActivateEssence.Slot).Type == AzeriteItemMilestoneType.MajorEssence, true);
|
||||||
|
|
||||||
azeriteItem.SetSelectedAzeriteEssence(azeriteEssenceActivateEssence.Slot, azeriteEssenceActivateEssence.AzeriteEssenceID);
|
|
||||||
azeriteItem.SetState(ItemUpdateState.Changed, _player);
|
azeriteItem.SetState(ItemUpdateState.Changed, _player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user