mirror of
https://github.com/liyunfan1223/azerothcore-wotlk.git
synced 2026-08-04 13:57:52 +00:00
fix(Scripts/Pet): Fix Ethereal Soul-Trader Companion Pet (#26249)
Co-authored-by: lightinjay <lightinjay@gmail.com> Co-authored-by: Ludwig <sudlud@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: DanVS <33371360+DanVS@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
DELETE FROM `spell_script_names` WHERE (`spell_id` = 50051);
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(50051, 'spell_gen_ethereal_pet_aura');
|
||||
@@ -63,9 +63,10 @@ struct npc_pet_gen_soul_trader_beacon : public ScriptedAI
|
||||
|
||||
Player* GetOwner() const { return ObjectAccessor::GetPlayer(*me, ownerGUID); }
|
||||
|
||||
void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override
|
||||
void SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) override
|
||||
{
|
||||
if (spellInfo->Id == SPELL_STEAL_ESSENCE_VISUAL && target == me)
|
||||
// Handle the kill notification from the owner's kill aura (spell 50051)
|
||||
if (spellInfo->Id == SPELL_OWNER_KILLED_INFORM)
|
||||
{
|
||||
Talk(1);
|
||||
events.ScheduleEvent(EVENT_ADD_TOKEN, 3s);
|
||||
@@ -83,7 +84,10 @@ struct npc_pet_gen_soul_trader_beacon : public ScriptedAI
|
||||
break;
|
||||
case EVENT_ADD_TOKEN:
|
||||
me->RemoveAurasDueToSpell(SPELL_EMOTE_STATE_SWIM_RUN);
|
||||
me->CastSpell(me, SPELL_CREATE_TOKEN, true);
|
||||
// Cast the token creation spell on the player owner, not on the pet
|
||||
if (Player* owner = GetOwner())
|
||||
me->CastSpell(owner, SPELL_CREATE_TOKEN, true);
|
||||
|
||||
Talk(2);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -4543,6 +4543,58 @@ class spell_gen_eject_passenger : public SpellScript
|
||||
}
|
||||
};
|
||||
|
||||
// 50051 - Ethereal Pet Aura (Soultrader Beacon)
|
||||
// Triggers when the owner kills an opponent, applying spell 50050 (SPELL_OWNER_KILLED_INFORM) to notify the pet
|
||||
class spell_gen_ethereal_pet_aura : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_gen_ethereal_pet_aura);
|
||||
|
||||
enum EtherealSoulTrader
|
||||
{
|
||||
NPC_ETHEREAL_SOUL_TRADER = 27914,
|
||||
SPELL_OWNER_KILLED_INFORM = 50050,
|
||||
SPELL_STEAL_ESSENCE_VISUAL = 50101,
|
||||
};
|
||||
|
||||
bool CheckProc(ProcEventInfo& eventInfo)
|
||||
{
|
||||
Unit* procTarget = eventInfo.GetProcTarget();
|
||||
if (!procTarget)
|
||||
return false;
|
||||
|
||||
// Only trigger on players killing creatures that are not grey mobs
|
||||
int32 levelDiff = int32(GetTarget()->GetLevel()) - int32(procTarget->GetLevel());
|
||||
return levelDiff <= 9;
|
||||
}
|
||||
|
||||
void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
Unit* procTarget = eventInfo.GetProcTarget();
|
||||
if (!procTarget)
|
||||
return;
|
||||
|
||||
// Get all Ethereal Soul-Trader minions owned by this player
|
||||
std::list<Creature*> minionList;
|
||||
GetUnitOwner()->GetAllMinionsByEntry(minionList, NPC_ETHEREAL_SOUL_TRADER);
|
||||
|
||||
for (Creature* minion : minionList)
|
||||
{
|
||||
// Cast the laser beam visual from the pet to the killed mob
|
||||
minion->CastSpell(procTarget, SPELL_STEAL_ESSENCE_VISUAL);
|
||||
// Notify the pet AI that a valid kill occurred (triggers the pet's SpellHit handler)
|
||||
minion->CastSpell(minion, SPELL_OWNER_KILLED_INFORM, true);
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
DoCheckProc += AuraCheckProcFn(spell_gen_ethereal_pet_aura::CheckProc);
|
||||
OnEffectProc += AuraEffectProcFn(spell_gen_ethereal_pet_aura::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
|
||||
/* 37727 - Touch of Darkness
|
||||
37851 - Tag Greater Felfire Diemetradon
|
||||
37917 - Arcano-Cloak
|
||||
@@ -6263,6 +6315,7 @@ void AddSC_generic_spell_scripts()
|
||||
RegisterSpellScript(spell_gen_whisper_gulch_yogg_saron_whisper);
|
||||
RegisterSpellScript(spell_gen_eject_all_passengers);
|
||||
RegisterSpellScript(spell_gen_eject_passenger);
|
||||
RegisterSpellScript(spell_gen_ethereal_pet_aura);
|
||||
RegisterSpellScript(spell_gen_charmed_unit_spell_cooldown);
|
||||
RegisterSpellScript(spell_contagion_of_rot);
|
||||
RegisterSpellScript(spell_gen_holiday_buff_food);
|
||||
|
||||
Reference in New Issue
Block a user