Fixes trigger spells not working.
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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));
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user