Fixes trigger spells not working.

This commit is contained in:
hondacrx
2022-08-08 18:01:54 -04:00
parent 3102a12bfe
commit ac3a068ec0
6 changed files with 42 additions and 22 deletions
+3 -3
View File
@@ -335,12 +335,12 @@ namespace Game.Entities
if (owner.IsPlayer() && IsControlled() && !IsTemporarySummoned() && (GetPetType() == PetType.Summon || GetPetType() == PetType.Hunter)) if (owner.IsPlayer() && IsControlled() && !IsTemporarySummoned() && (GetPetType() == PetType.Summon || GetPetType() == PetType.Hunter))
owner.ToPlayer().SetLastPetNumber(petInfo.PetNumber); owner.ToPlayer().SetLastPetNumber(petInfo.PetNumber);
var session = owner.GetSession();
var lastSaveTime = petInfo.LastSaveTime;
var specializationId = petInfo.SpecializationId;
owner.GetSession().AddQueryHolderCallback(DB.Characters.DelayQueryHolder(new PetLoadQueryHolder(ownerid, petInfo.PetNumber))) owner.GetSession().AddQueryHolderCallback(DB.Characters.DelayQueryHolder(new PetLoadQueryHolder(ownerid, petInfo.PetNumber)))
.AfterComplete(holder => .AfterComplete(holder =>
{ {
var session = owner.GetSession();
var lastSaveTime = petInfo.LastSaveTime;
var specializationId = petInfo.SpecializationId;
if (session.GetPlayer() != owner || owner.GetPet() != this) if (session.GetPlayer() != owner || owner.GetPet() != this)
return; return;
+8 -4
View File
@@ -131,9 +131,10 @@ namespace Game
SQLTransaction trans = new(); SQLTransaction trans = new();
if (auctionHouse.BuyCommodity(trans, _player, (uint)confirmCommoditiesPurchase.ItemID, confirmCommoditiesPurchase.Quantity, throttle.DelayUntilNext)) if (auctionHouse.BuyCommodity(trans, _player, (uint)confirmCommoditiesPurchase.ItemID, confirmCommoditiesPurchase.Quantity, throttle.DelayUntilNext))
{ {
var buyerGuid = _player.GetGUID();
AddTransactionCallback(DB.Characters.AsyncCommitTransaction(trans)).AfterComplete(success => AddTransactionCallback(DB.Characters.AsyncCommitTransaction(trans)).AfterComplete(success =>
{ {
if (GetPlayer() && GetPlayer().GetGUID() == _player.GetGUID()) if (GetPlayer() && GetPlayer().GetGUID() == buyerGuid)
{ {
if (success) if (success)
{ {
@@ -766,9 +767,10 @@ namespace Game
auctionHouse.AddAuction(trans, auction); auctionHouse.AddAuction(trans, auction);
_player.SaveInventoryAndGoldToDB(trans); _player.SaveInventoryAndGoldToDB(trans);
var auctionPlayerGuid = _player.GetGUID();
AddTransactionCallback(DB.Characters.AsyncCommitTransaction(trans)).AfterComplete(success => AddTransactionCallback(DB.Characters.AsyncCommitTransaction(trans)).AfterComplete(success =>
{ {
if (GetPlayer() && GetPlayer().GetGUID() == _player.GetGUID()) if (GetPlayer() && GetPlayer().GetGUID() == auctionPlayerGuid)
{ {
if (success) if (success)
{ {
@@ -912,9 +914,11 @@ namespace Game
auctionHouse.AddAuction(trans, auction); auctionHouse.AddAuction(trans, auction);
_player.SaveInventoryAndGoldToDB(trans); _player.SaveInventoryAndGoldToDB(trans);
var auctionPlayerGuid = _player.GetGUID();
AddTransactionCallback(DB.Characters.AsyncCommitTransaction(trans)).AfterComplete(success => AddTransactionCallback(DB.Characters.AsyncCommitTransaction(trans)).AfterComplete(success =>
{ {
if (GetPlayer() && GetPlayer().GetGUID() == _player.GetGUID()) if (GetPlayer() && GetPlayer().GetGUID() == auctionPlayerGuid)
{ {
if (success) if (success)
{ {
+2 -1
View File
@@ -1186,9 +1186,10 @@ namespace Game
PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CHECK_NAME); PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CHECK_NAME);
stmt.AddValue(0, checkCharacterNameAvailability.Name); stmt.AddValue(0, checkCharacterNameAvailability.Name);
var sequenceIndex = checkCharacterNameAvailability.SequenceIndex;
_queryProcessor.AddCallback(DB.Characters.AsyncQuery(stmt).WithCallback(result => _queryProcessor.AddCallback(DB.Characters.AsyncQuery(stmt).WithCallback(result =>
{ {
SendPacket(new CheckCharacterNameAvailabilityResult(checkCharacterNameAvailability.SequenceIndex, !result.IsEmpty() ? ResponseCodes.CharCreateNameInUse : ResponseCodes.Success)); SendPacket(new CheckCharacterNameAvailabilityResult(sequenceIndex, !result.IsEmpty() ? ResponseCodes.CharCreateNameInUse : ResponseCodes.Success));
})); }));
} }
+5 -3
View File
@@ -1485,17 +1485,19 @@ namespace Game.Spells
if (player.IsImmunedToSpellEffect(m_spellInfo, spellEffectInfo, null)) if (player.IsImmunedToSpellEffect(m_spellInfo, spellEffectInfo, null))
return; return;
var spell = this;
var targetGuid = rafTarget.GetGUID();
rafTarget.GetMap().AddFarSpellCallback(map => rafTarget.GetMap().AddFarSpellCallback(map =>
{ {
Player player = Global.ObjAccessor.GetPlayer(map, rafTarget.GetGUID()); Player player = Global.ObjAccessor.GetPlayer(map, targetGuid);
if (player == null) if (player == null)
return; return;
// check immunity again in case it changed during update // check immunity again in case it changed during update
if (player.IsImmunedToSpellEffect(GetSpellInfo(), spellEffectInfo, null)) if (player.IsImmunedToSpellEffect(spell.GetSpellInfo(), spellEffectInfo, null))
return; return;
HandleEffects(player, null, null, null, spellEffectInfo, SpellEffectHandleMode.HitTarget); spell.HandleEffects(player, null, null, null, spellEffectInfo, SpellEffectHandleMode.HitTarget);
}); });
} }
} }
+18 -9
View File
@@ -305,26 +305,35 @@ namespace Game.Spells
if (effectInfo.Effect == SpellEffectName.TriggerSpell) if (effectInfo.Effect == SpellEffectName.TriggerSpell)
delay = TimeSpan.FromMilliseconds(effectInfo.MiscValue); delay = TimeSpan.FromMilliseconds(effectInfo.MiscValue);
var caster = m_caster;
var originalCaster = m_originalCasterGUID;
var castItemGuid = m_castItemGUID;
var originalCastId = m_castId;
var triggerSpell = effectInfo.TriggerSpell;
var effect = effectInfo.Effect;
var value = damage;
var itemLevel = m_castItemLevel;
m_caster.m_Events.AddEventAtOffset(() => m_caster.m_Events.AddEventAtOffset(() =>
{ {
// original caster guid only for GO cast // original caster guid only for GO cast
CastSpellExtraArgs args = new(TriggerCastFlags.FullMask); CastSpellExtraArgs args = new(TriggerCastFlags.FullMask);
args.SetOriginalCaster(m_originalCasterGUID); args.SetOriginalCaster(originalCaster);
args.OriginalCastId = m_castId; args.OriginalCastId = originalCastId;
args.OriginalCastItemLevel = m_castItemLevel; args.OriginalCastItemLevel = itemLevel;
if (!m_castItemGUID.IsEmpty() && Global.SpellMgr.GetSpellInfo(effectInfo.TriggerSpell, m_caster.GetMap().GetDifficultyID()).HasAttribute(SpellAttr2.RetainItemCast)) if (!castItemGuid.IsEmpty() && Global.SpellMgr.GetSpellInfo(triggerSpell, caster.GetMap().GetDifficultyID()).HasAttribute(SpellAttr2.RetainItemCast))
{ {
Player triggeringAuraCaster = m_caster?.ToPlayer(); Player triggeringAuraCaster = caster?.ToPlayer();
if (triggeringAuraCaster != null) if (triggeringAuraCaster != null)
args.CastItem = triggeringAuraCaster.GetItemByGuid(m_castItemGUID); args.CastItem = triggeringAuraCaster.GetItemByGuid(castItemGuid);
} }
// set basepoints for trigger with value effect // set basepoints for trigger with value effect
if (effectInfo.Effect == SpellEffectName.TriggerSpellWithValue) if (effect == SpellEffectName.TriggerSpellWithValue)
for (int i = 0; i < SpellConst.MaxEffects; ++i) for (int i = 0; i < SpellConst.MaxEffects; ++i)
args.AddSpellMod(SpellValueMod.BasePoint0 + i, damage); args.AddSpellMod(SpellValueMod.BasePoint0 + i, value);
m_caster.CastSpell(targets, effectInfo.TriggerSpell, args); caster.CastSpell(targets, triggerSpell, args);
}, delay); }, delay);
} }
+6 -2
View File
@@ -1179,11 +1179,15 @@ namespace Scripts.Spells.Shaman
Unit caster = procInfo.GetActor(); Unit caster = procInfo.GetActor();
var targets = new CastSpellTargetArg(procInfo.GetProcTarget());
var overloadSpellId = GetTriggeredSpellId(procInfo.GetSpellInfo().Id);
var originalCastId = procInfo.GetProcSpell().m_castId;
caster.m_Events.AddEventAtOffset(() => caster.m_Events.AddEventAtOffset(() =>
{ {
CastSpellExtraArgs args = new(); CastSpellExtraArgs args = new();
args.OriginalCastId = procInfo.GetProcSpell().m_castId; args.OriginalCastId = originalCastId;
caster.CastSpell(new CastSpellTargetArg(procInfo.GetProcTarget()), GetTriggeredSpellId(procInfo.GetSpellInfo().Id), args); caster.CastSpell(targets, overloadSpellId, args);
}, TimeSpan.FromMilliseconds(400)); }, TimeSpan.FromMilliseconds(400));
} }