Enter ICC , go to The Crimson Hall.
Using http://www.wowhead.com/object=201741/empowering-blood-orb has no effect.
Spell = http://www.wowhead.com/spell=70711
Object = http://www.wowhead.com/object=201741/empowering-blood-orb
NPC = http://wotlk.openwow.com/npc=38463
Branch(es): 3.3.5 / 6.x
TC hash/commit: https://github.com/TrinityCore/TrinityCore/commit/6c351c5160ec28bab439d51670f552f452ec5489
TDB version: TDB 335.61
Operating system: Win 10, Ubuntu 14.04
Closed issue; https://github.com/TrinityCore/TrinityCore/issues/4380
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
index a9ea390e83..b5737e28d2 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
@@ -59,7 +59,10 @@ enum ICSharedSpells
// Shadowmourne questline
SPELL_UNSATED_CRAVING = 71168,
- SPELL_SHADOWS_FATE = 71169
+ SPELL_SHADOWS_FATE = 71169,
+
+ // Empowering Blood Orb
+ SPELL_EMPOWERED_BLOOD = 70227
};
enum ICTeleporterSpells
@@ -394,6 +397,7 @@ enum ICGameObjectsIds
GO_CRIMSON_HALL_DOOR = 201376,
GO_BLOOD_ELF_COUNCIL_DOOR = 201378,
GO_BLOOD_ELF_COUNCIL_DOOR_RIGHT = 201377,
+ GO_EMPOWERING_BLOOD_ORB = 201741,
// Blood-Queen Lana'thel
GO_DOODAD_ICECROWN_BLOODPRINCE_DOOR_01 = 201746,
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index d59bce76df..75a5698ad4 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -17,6 +17,8 @@
#include "ScriptMgr.h"
#include "CellImpl.h"
+#include "GameObject.h"
+#include "GameObjectAI.h"
#include "GridNotifiersImpl.h"
#include "icecrown_citadel.h"
#include "InstanceScript.h"
@@ -164,6 +166,12 @@ enum ICCSpells
// Invisible Stalker (Float, Uninteractible, LargeAOI)
SPELL_SOUL_MISSILE = 72585,
+
+ // Empowering Blood Orb
+ SPELL_EMPOWERED_BLOOD_2 = 70232,
+ SPELL_EMPOWERED_BLOOD_3 = 70304,
+ SPELL_EMPOWERED_BLOOD_4 = 70320,
+ SPELL_ORB_CONTROLLER_ACTIVE = 70293,
};
// Helper defines
@@ -1774,6 +1782,323 @@ class npc_arthas_teleport_visual : public CreatureScript
}
};
+enum temp
+{
+ DATA_GUID,
+ NPC_DARKFALLEN_BLOOD_KNIGHT = 37595,
+ NPC_DARKFALLEN_NOBLE = 37663,
+ NPC_DARKFALLEN_ARCHMAGE = 37664,
+ NPC_DARKFALLEN_ADVISOR = 37571,
+ SPELL_BLOOD_ORB_VISUAL = 72099,
+ ACTION_SIPHON_INTERRUPTED = 1,
+ ACTION_EVADE = 2,
+ ACTION_COMBAT,
+
+ // Darkfallen Blood Knight
+ SPELL_VAMPIRIC_AURA = 71736,
+ SPELL_BLOOD_MIRROR = 70451,
+ SPELL_BLOOD_MIRROW_2 = 70450,
+ SPELL_UNHOLY_STRIKE = 70437,
+};
+
+class MinionSearch
+{
+public:
+ MinionSearch() { }
+
+ bool operator()(Unit* unit) const
+ {
+ if (!unit->IsAlive())
+ return false;
+
+ switch (unit->GetEntry())
+ {
+ case NPC_DARKFALLEN_BLOOD_KNIGHT:
+ case NPC_DARKFALLEN_NOBLE:
+ case NPC_DARKFALLEN_ARCHMAGE:
+ case NPC_DARKFALLEN_ADVISOR:
+ return true;
+ default:
+ return false;
+ }
+ }
+};
+
+std::vector<uint32> DarkFallensEmotes =
+{
+ EMOTE_ONESHOT_TALK,
+ EMOTE_ONESHOT_EXCLAMATION,
+ EMOTE_ONESHOT_QUESTION,
+ EMOTE_ONESHOT_LAUGH,
+ EMOTE_ONESHOT_YES,
+ EMOTE_ONESHOT_NO
+};
+
+struct npc_icc_orb_controller : public ScriptedAI
+{
+ npc_icc_orb_controller(Creature* creature) : ScriptedAI(creature), _isInCombat(false) { }
+
+ void Reset() override
+ {
+ std::vector<Creature*> creatures;
+ Trinity::CreatureListSearcher<MinionSearch> searcher(me, creatures, MinionSearch());
+ Cell::VisitGridObjects(me, searcher, 20.0f);
+
+ for (Creature* creature : creatures)
+ {
+ creature->AI()->SetGUID(me->GetGUID(), DATA_GUID);
+ _minionsGuids.push_back(creature->GetGUID());
+ }
+
+ bool secoundTime = false;
+ _scheduler.Schedule(1s, [this, &secoundTime](TaskContext visual)
+ {
+ ObjectGuid guid = Trinity::Containers::SelectRandomContainerElement(_minionsGuids);
+ if (Unit* minion = ObjectAccessor::GetUnit(*me, guid))
+ minion->CastSpell(nullptr, SPELL_BLOOD_ORB_VISUAL);
+ visual.Repeat(secoundTime ? 21s : 3s);
+ secoundTime = !secoundTime;
+ });
+ }
+
+ void SpellHit(Unit* caster, SpellInfo const* spell) override
+ {
+ if (spell->Id == SPELL_ORB_CONTROLLER_ACTIVE)
+ {
+ if (GameObject* orb = me->FindNearestGameObject(GO_EMPOWERING_BLOOD_ORB, 5.0f))
+ orb->AI()->SetGUID(caster->GetGUID(), DATA_GUID);
+ me->DespawnOrUnsummon(2s);
+ }
+ }
+
+ void DoAction(int32 action) override
+ {
+ if (action == ACTION_COMBAT && !_isInCombat)
+ {
+ _isInCombat = true;
+ _scheduler.CancelAll();
+ }
+ else if (action == ACTION_EVADE && _isInCombat)
+ {
+ _isInCombat = false;
+ // To update with alive Darkfallens
+ Reset();
+ }
+ }
+
+private:
+ TaskScheduler _scheduler;
+ GuidVector _minionsGuids;
+ bool _isInCombat;
+};
+
+struct DarkFallenAI : public ScriptedAI
+{
+ DarkFallenAI(Creature* creature) : ScriptedAI(creature) { }
+
+ virtual void ScheduleSpells() = 0;
+
+ void Reset() override
+ {
+ scheduler.CancelAll();
+ scheduler.SetValidator([this]
+ {
+ return !me->HasUnitState(UNIT_STATE_CASTING);
+ })
+ .Schedule(1s, 10s, [this](TaskContext emote)
+ {
+ me->HandleEmoteCommand(DarkFallensEmotes[urand(0, 5)]);
+ emote.Repeat(1s, 15s);
+ });
+ }
+
+ void EnterCombat(Unit* who) override
+ {
+ ScriptedAI::EnterCombat(who);
+ scheduler.CancelAll();
+ ScheduleSpells();
+ if (Unit* trigger = ObjectAccessor::GetUnit(*me, triggerGuid))
+ trigger->GetAI()->DoAction(ACTION_COMBAT);
+ }
+
+ void DoAction(int32 action) override
+ {
+ if (action == ACTION_SIPHON_INTERRUPTED)
+ if (GameObject* orb = me->FindNearestGameObject(GO_EMPOWERING_BLOOD_ORB, 5.0f))
+ orb->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ }
+
+ void SetGUID(ObjectGuid const& guid, int32 id) override
+ {
+ if (id == DATA_GUID)
+ triggerGuid = guid;
+ }
+
+ void JustReachedHome() override
+ {
+ ScriptedAI::JustReachedHome();
+ if (Unit* trigger = ObjectAccessor::GetUnit(*me, triggerGuid))
+ trigger->GetAI()->DoAction(ACTION_EVADE);
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim() && me->IsInCombat())
+ return;
+
+ scheduler.Update(diff);
+
+ DoMeleeAttackIfReady();
+ }
+
+protected:
+ TaskScheduler scheduler;
+ ObjectGuid triggerGuid;
+};
+
+struct npc_darkfallen_blood_knight : public DarkFallenAI
+{
+ npc_darkfallen_blood_knight(Creature* creature) : DarkFallenAI(creature) { }
+
+ void ScheduleSpells() override
+ {
+ scheduler.Schedule(1s, [this](TaskContext /*context*/)
+ {
+ DoCastSelf(SPELL_VAMPIRIC_AURA);
+ })
+ .Schedule(6s, [this](TaskContext unholyStrike)
+ {
+ DoCastVictim(SPELL_UNHOLY_STRIKE);
+ unholyStrike.Repeat(8s, 12s);
+ })
+ .Schedule(6s + 500ms, [this](TaskContext bloodMirror)
+ {
+ DoCastSelf(SPELL_BLOOD_MIRROR);
+ // Ainda falta scriptar e ver CD
+ }
+ );
+ }
+};
+
+struct go_empowering_blood_orb : public GameObjectAI
+{
+ go_empowering_blood_orb(GameObject* go) : GameObjectAI(go) { }
+
+ bool GossipHello(Player* player) override
+ {
+ me->CastSpell(player, SPELL_EMPOWERED_BLOOD, true);
+ HandleObjectUse();
+ return true;
+ }
+
+ void HandleObjectUse()
+ {
+ me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
+ me->SetGoAnimProgress(255);
+ me->SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
+ _scheduler.Schedule(3s, [this](TaskContext /*context*/)
+ {
+ me->Delete();
+ });
+ }
+
+ void SetGUID(ObjectGuid const& guid, int32 id) override
+ {
+ if (id == DATA_GUID)
+ {
+ if (Unit* target = ObjectAccessor::GetUnit(*me, guid))
+ me->CastSpell(target, SPELL_EMPOWERED_BLOOD_3, true);
+ HandleObjectUse();
+ }
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ _scheduler.Update(diff);
+ }
+
+private:
+ TaskScheduler _scheduler;
+};
+
+// 70227 - Empowered Blood
+class spell_icc_empowered_blood : public AuraScript
+{
+ PrepareAuraScript(spell_icc_empowered_blood);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ return ValidateSpellInfo({ SPELL_EMPOWERED_BLOOD_2 });
+ }
+
+ void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->CastSpell(GetTarget(), SPELL_EMPOWERED_BLOOD_2, true);
+ }
+
+ void HandleDespawn(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (Creature* controller = GetTarget()->ToCreature())
+ controller->DespawnOrUnsummon(2s);
+ }
+
+ void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->RemoveAurasDueToSpell(SPELL_EMPOWERED_BLOOD_2);
+ }
+
+ void Register() override
+ {
+ OnEffectApply += AuraEffectApplyFn(spell_icc_empowered_blood::OnApply, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL);
+ OnEffectApply += AuraEffectApplyFn(spell_icc_empowered_blood::HandleDespawn, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_icc_empowered_blood::OnRemove, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL);
+ }
+};
+
+// 70304 - Empowered Blood
+class spell_icc_empowered_blood_3 : public AuraScript
+{
+ PrepareAuraScript(spell_icc_empowered_blood_3);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ return ValidateSpellInfo({ SPELL_EMPOWERED_BLOOD_4 });
+ }
+
+ void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->CastSpell(GetTarget(), SPELL_EMPOWERED_BLOOD_4, true);
+ }
+
+ void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ GetTarget()->RemoveAurasDueToSpell(SPELL_EMPOWERED_BLOOD_4);
+ }
+
+ void Register() override
+ {
+ OnEffectApply += AuraEffectApplyFn(spell_icc_empowered_blood_3::OnApply, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL);
+ AfterEffectRemove += AuraEffectRemoveFn(spell_icc_empowered_blood_3::OnRemove, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL);
+ }
+};
+
+// 70299 - Siphon Essence
+class spell_icc_siphon_essence : public AuraScript
+{
+ PrepareAuraScript(spell_icc_siphon_essence);
+
+ void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
+ {
+ if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
+ GetTarget()->GetAI()->DoAction(ACTION_SIPHON_INTERRUPTED);
+ }
+
+ void Register() override
+ {
+ AfterEffectRemove += AuraEffectRemoveFn(spell_icc_siphon_essence::OnRemove, EFFECT_1, SPELL_AURA_MOD_ROOT, AURA_EFFECT_HANDLE_REAL);
+ }
+};
+
class spell_icc_stoneform : public SpellScriptLoader
{
public:
@@ -2245,6 +2570,10 @@ void AddSC_icecrown_citadel()
new npc_frostwing_vrykul();
new npc_impaling_spear();
new npc_arthas_teleport_visual();
+ RegisterGameObjectAI(go_empowering_blood_orb);
+ RegisterAuraScript(spell_icc_empowered_blood);
+ RegisterAuraScript(spell_icc_empowered_blood_3);
+ RegisterAuraScript(spell_icc_siphon_essence);
new spell_icc_stoneform();
new spell_icc_sprit_alarm();
new spell_frost_giant_death_plague();
UPDATE `gameobject_template` SET `ScriptName`='go_empowering_blood_orb' WHERE (`entry`='201741');
why you despawn stalker, if you dont check for it?
idk... but you dont need check if stalker is "alive" before aplly spell on player?
it's sniffered?
http://www.wowhead.com/npc=38463/empowering-orb-visual-stalker
http://wotlk.openwow.com/npc=38463
yes... but why you despawn NPC_ORB_VISUAL_STALKER?
You dont need check if he is alive/spawned before apply buff on player?
you checked this object on retail or checked in sniffs?
This code looks wrong... despawn an npc for "nothing" because he are not used...
You realy sure that player should cast this spell?
Still is wrong
Check with sniffs how this object realy works...
i will try make this gob script ^^ (i never did gob script before, but i will try haha)
Ok man, i have a hack for it. (is working) https://gist.github.com/Keader/61a93f91e8af10cdd72b2f724258c1c4
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index fb8fdde..67eb672 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -162,6 +162,9 @@ enum Spells
// Invisible Stalker (Float, Uninteractible, LargeAOI)
SPELL_SOUL_MISSILE = 72585,
+
+ //Empowering Blood Orb
+ SPELL_EMPOWERED_BLOOD = 70227,
};
// Helper defines
@@ -2170,6 +2173,45 @@ class at_icc_start_frostwing_gauntlet : public AreaTriggerScript
}
};
+class go_empowering_blood_orb : public GameObjectScript
+{
+public:
+ go_empowering_blood_orb() : GameObjectScript("go_empowering_blood_orb"), active(false) { }
+
+ struct go_empowering_blood_orbAI : public GameObjectAI
+ {
+ go_empowering_blood_orbAI(GameObject* go) : GameObjectAI(go)
+ {
+ go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ }
+ };
+
+ bool OnGossipHello(Player* player, GameObject* go) override
+ {
+ if (active)
+ return false;
+
+ active = true;
+ go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ go->SetGoState(GO_STATE_ACTIVE);
+
+ player->CastSpell(player, SPELL_EMPOWERED_BLOOD, true);
+
+ if (Creature* visual = go->FindNearestCreature(NPC_EMPOWERING_ORB_VISUAL_STALKER, 7.0f))
+ visual->DespawnOrUnsummon();
+
+ return true;
+ }
+
+private:
+ bool active;
+
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return GetInstanceAI<go_empowering_blood_orbAI>(go);
+ }
+};
+
void AddSC_icecrown_citadel()
{
new npc_highlord_tirion_fordring_lh();
@@ -2197,4 +2239,5 @@ void AddSC_icecrown_citadel()
new at_icc_shutdown_traps();
new at_icc_start_blood_quickening();
new at_icc_start_frostwing_gauntlet();
+ new go_empowering_blood_orb();
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
index 5a5b7ae..409889a 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
@@ -249,6 +249,7 @@ enum CreaturesIds
NPC_KINETIC_BOMB = 38454,
NPC_SHOCK_VORTEX = 38422,
NPC_BLOOD_QUEEN_LANA_THEL_COUNCIL = 38004,
+ NPC_EMPOWERING_ORB_VISUAL_STALKER = 38463,
// Blood-Queen Lana'thel
NPC_BLOOD_QUEEN_LANA_THEL = 37955,
and sql:
UPDATE `gameobject_template` SET `ScriptName`='go_empowering_blood_orb' WHERE `entry`=201741;
This spell only work in Crimson Hall Quarter.
I'm have no expertise with gob scripts... so i cant send you one version without hacks, because:
Idk how reproduce this behavior : https://gist.github.com/Keader/06d3abba8a47d7b4a04f481767eaa696#file-sniff-txt-L78-L79 this change flag without "force" with script.
Idk how remove GO_FLAG_NOT_SELECTABLE without force in gob script (maybe some field em DB?)
Without override GossipHello, Spell are casted, but "broken" animation dont work (he did broken animation, but restores orb). On retail, he should broken the orb and despawn/destroy after 3 sec... idk how despawn a gob after x time...
Btw, if someone with more expertise try fix it, maybe it helps: https://gist.github.com/Keader/06d3abba8a47d7b4a04f481767eaa696
PS: active (boolean variable) is for avoid multiple players clicking at same time or clicking multiple times
Gossip Hello? I remember - object has spell or visual stalker has spellclick, but not gossip hello.
Darkfallen also can get buff from blood orb. If npc get buff - go removed. If player get buff - go removed. But buff has various id.
GossipHello is called for gameobject on Use (I agree it could have a less confusing name, like OnUse)
ID - 70299 袙褘褌褟谐懈胁邪薪懈械 褋褍褖薪芯褋褌懈
=================================================
Category = 0, SpellIconID = 153, activeIconID = 0, SpellVisual = (15237,0)
Family SPELLFAMILY_GENERIC, flag [0] 0x00000000 [1] 0x00000000 [2] 0x00000000 [3] 0x00000000
SpellSchoolMask = 1 (SPELL_SCHOOL_MASK_NORMAL)
DamageClass = 0 (SPELL_DAMAGE_CLASS_NONE)
PreventionType = 0 (SPELL_PREVENTION_TYPE_NONE)
=================================================
AttributesEx1: 0x10004004 (SPELL_ATTR1_CHANNELED_1, SPELL_ATTR1_CHANNEL_TRACK_TARGET, SPELL_ATTR1_DONT_DISPLAY_IN_AURA_BAR)
AttributesEx2: 0x00000004 (SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS)
AttributesEx5: 0x00000008 (SPELL_ATTR5_USABLE_WHILE_STUNNED)
=================================================
Spell Level = 0, base 0, max 0
Category = 0
DispelType = 0 (DISPEL_NONE)
Mechanic = 0 (MECHANIC_NONE)
SpellRange: (Id 36) "Longer Range":
MinRangeNegative = 0, MinRangePositive = 0
MaxRangeNegative = 45, MaxRangePositive = 45
Cast time (Id 1) = 0,00
Duration: ID (8) 15000, 0, 15000
Interrupt Flags: 0x00000029, AuraIF 0x00000000, ChannelIF 0x00000000
Chance = 0, charges - 0
=================================================
Effect 0: Id 6 (SPELL_EFFECT_APPLY_AURA) DIFFICULTY_NONE
BasePoints = 0
Targets (38, 0) (TARGET_UNIT_NEARBY_ENTRY, NO_TARGET)
Aura Id 23 (SPELL_AURA_PERIODIC_TRIGGER_SPELL), value = 0, misc = 0 (0), miscB = 0, periodic = 15000
Trigger spell (70293) Orb Controller - Activate. Chance = 0
Effect 1: Id 6 (SPELL_EFFECT_APPLY_AURA) DIFFICULTY_NONE
BasePoints = 0
Targets (1, 0) (TARGET_UNIT_CASTER, NO_TARGET)
Aura Id 26 (SPELL_AURA_MOD_ROOT), value = 0, misc = 0 (0), miscB = 0, periodic = 0
Effect 2: Id 6 (SPELL_EFFECT_APPLY_AURA) DIFFICULTY_NONE
BasePoints = 0
Targets (1, 0) (TARGET_UNIT_CASTER, NO_TARGET)
Aura Id 147 (SPELL_AURA_MECHANIC_IMMUNITY_MASK), value = 0, misc = 1632 (1632), miscB = 0, periodic = 0
Npc in pack (who aggro first) - cast this spell. If cast complete - orb removed and npc get buff.
Else if npc - die - cast complete and player can use this orb. Only one npc from pack with nearest orb can cast spell.
Also Siphon Essence has out of combat version - visual effect. OOC version NOT ACTIVATED ORB - Only VISUAL EFFECT.
OOC version - visual effect:
ID - 72099 Blood Orb Cast Visual
=================================================
Category = 0, SpellIconID = 1, activeIconID = 0, SpellVisual = (15237,0)
Family SPELLFAMILY_GENERIC, flag [0] 0x00000000 [1] 0x00000000 [2] 0x00000000 [3] 0x00000000
SpellSchoolMask = 1 (SPELL_SCHOOL_MASK_NORMAL)
DamageClass = 0 (SPELL_DAMAGE_CLASS_NONE)
PreventionType = 0 (SPELL_PREVENTION_TYPE_NONE)
=================================================
Attributes: 0x00000100 (SPELL_ATTR0_HIDE_IN_COMBAT_LOG)
AttributesEx1: 0x10000004 (SPELL_ATTR1_CHANNELED_1, SPELL_ATTR1_DONT_DISPLAY_IN_AURA_BAR)
AttributesEx2: 0x00000004 (SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS)
AttributesEx3: 0x00002000 (SPELL_ATTR3_DONT_DISPLAY_CHANNEL_BAR)
=================================================
Spell Level = 0, base 0, max 0
Category = 0
DispelType = 0 (DISPEL_NONE)
Mechanic = 0 (MECHANIC_NONE)
SpellRange: (Id 3) "Twenty yards":
MinRangeNegative = 0, MinRangePositive = 0
MaxRangeNegative = 20, MaxRangePositive = 20
Speed 15,00
Cast time (Id 1) = 0,00
Duration: ID (27) 3000, 0, 3000
Interrupt Flags: 0x00000001, AuraIF 0x00000000, ChannelIF 0x00000003
Chance = 0, charges - 0
=================================================
Effect 0: Id 6 (SPELL_EFFECT_APPLY_AURA) DIFFICULTY_NONE
BasePoints = 0
Targets (38, 0) (TARGET_UNIT_NEARBY_ENTRY, NO_TARGET)
Aura Id 4 (SPELL_AURA_DUMMY), value = 0, misc = 0 (0), miscB = 0, periodic = 0
Visual orb stalker visual aura effect:
ID - 72100 Blood Orb State Visual
=================================================
Category = 0, SpellIconID = 1, activeIconID = 0, SpellVisual = (15238,0)
Family SPELLFAMILY_GENERIC, flag [0] 0x00000000 [1] 0x00000000 [2] 0x00000000 [3] 0x00000000
SpellSchoolMask = 1 (SPELL_SCHOOL_MASK_NORMAL)
DamageClass = 0 (SPELL_DAMAGE_CLASS_NONE)
PreventionType = 0 (SPELL_PREVENTION_TYPE_NONE)
=================================================
Attributes: 0x00000100 (SPELL_ATTR0_HIDE_IN_COMBAT_LOG)
=================================================
Spell Level = 0, base 0, max 0
Category = 0
DispelType = 0 (DISPEL_NONE)
Mechanic = 0 (MECHANIC_NONE)
SpellRange: (Id 3) "Twenty yards":
MinRangeNegative = 0, MinRangePositive = 0
MaxRangeNegative = 20, MaxRangePositive = 20
Cast time (Id 1) = 0,00
Duration: ID (21) -1, 0, -1
Interrupt Flags: 0x00000000, AuraIF 0x00000000, ChannelIF 0x00000000
Chance = 0, charges - 0
=================================================
Effect 0: Id 6 (SPELL_EFFECT_APPLY_AURA) DIFFICULTY_NONE
BasePoints = 0
Targets (1, 0) (TARGET_UNIT_CASTER, NO_TARGET)
Aura Id 4 (SPELL_AURA_DUMMY), value = 0, misc = 0 (0), miscB = 0, periodic = 0
@Ulduar you know what trigger start cast of Siphon Essence?
@Keader Darkfallen npc from thrash pack (around orb) - warning: WHO PULLED FIRST. Cast 70299.
On out of combat random npc from thrash pack around orb cast 72099 - simple visual spell.
ok, now i need free time to try do this behavior and understand how gob scripts realy work haha :)
Why are you so desperate to do in C ++? Do you think it's easier? And then the crash fix it fun?
i realy dont know how objects works in database... when i mean gob scripts == search how DB handle with it, if only db dont works, add c++ part...
Idk how reproduce this behavior : https://gist.github.com/Keader/06d3abba8a47d7b4a04f481767eaa696#file-sniff-txt-L78-L79 this change flag without "force" with script.
Idk how remove GO_FLAG_NOT_SELECTABLE without force in gob script (maybe some field em DB?)
Without override GossipHello, Spell are casted, but "broken" animation dont work (he did broken animation, but restores orb). On retail, he should broken the orb and despawn/destroy after 3 sec... idk how despawn a gob after x time...Btw, if someone with more expertise try fix it, maybe it helps: https://gist.github.com/Keader/06d3abba8a47d7b4a04f481767eaa696
Ref: https://github.com/TrinityCore/TrinityCore/issues/18005#issuecomment-249751235
if you have expertise how gobs works... please, share a fix with us ^^
@Keader
-- Empowering Blood Orb.
SET @ENTRY := 201741;
UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=@ENTRY;
DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=1;
INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
(@ENTRY,1,0,0,70,0,100,0,2,0,0,0,11,0,2,0,0,0,0,7,0,0,0,0,0,0,0,"Empowering Blood Orb - On Go State Changed - Cast Spell Empowered Blood on Infover."),
(@ENTRY,1,1,0,70,0,100,0,2,0,0,0,41,1000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Empowering Blood Orb - On Go State Changed - Force Despawn."),
(@ENTRY,1,2,0,70,0,100,0,2,0,0,0,104,19,0,0,0,0,0,1,0,0,0,0,0,0,0,"Empowering Blood Orb - On Go State Changed - Set Go Flag Not Selectable | Locked | In Use."),
(@ENTRY,1,3,0,70,0,100,0,2,0,0,0,41,1000,0,0,0,0,0,19,38463,7,0,0,0,0,0,"Empowering Blood Orb - On Go State Changed - Force Despawn Closest Creature in 7 yards Empowering Blood Orb Visual Stalker.");
For example.
https://trinitycore.atlassian.net/wiki/display/tc/smart_scripts
SMART_EVENT_GO_STATE_CHANGED
70
State (0 - Active, 1 - Ready, 2 - Active alternative)
You can use condition with number 31.
https://trinitycore.atlassian.net/wiki/display/tc/conditions
CONDITION_OBJECT_ENTRY_GUID
TypeID. Available object types:
3 : TYPEID_UNIT
4 : TYPEID_PLAYER
5 : TYPEID_GAMEOBJECT
7 : TYPEID_CORPSE (player corpse, after spirit release)
0 = Any object of given TypeID
if TypeID = TYPEID_UNIT => Creature entry from creature_template.entry
if TypeID = TYPEID_GAMEOBJECT => Gameobject entry from gameobject_template.entry
0 = Any object of given type
1 - 500k : creature / gameobject GUID
Change Go state on you needed. And try. But remember: this is not full script, because has different condition (CONDITION_SMART_EVENT can help you). If npc activated - npc get one buff, if player activated - get other buff.
Well there is more to this too players cant even click the orbs but when one of the npcs starts channeling stand next to the npc which is channeling when channeling is completed both npc and player standing next to it will get damage increase buff from orb.
@dr-j SAI allow on npc aggro (if npc start channeling) - set go flag not_selectable. Or handle on spellscript.
And only one npc from thrash pack can cast channeling spell (in combat and out of combat).
Around the orb there are 4 NPC (6 NPC in 25 mode). When aggro - the battle takes all the trash pack by creature_formation it can be done. But only the one who struck the first - will start casting channel spell.
On the timer out of combat - random one of these NPC starts to cast visual effect channel spell. Without script handle. 72099 - out of combat spell visual - no required script handle.
I still want to understand - CONDITION_SMART_EVENT works for source_type = 9? And is it possible for one smart_script id add more conditions (logical AND)?
With all the gob recent changes should possible.
working on it :)
Object scripted, spells related scripted
Missing script on minions around him, generic script done... now i need add spells 馃拑
Sad, i cant continue right now... without sniffs about creatures :/
Our sniff, people kill they too fast, i cant get all spells
trying get sniff about it to continue.
-- Edit
I got some sniffs yay \o/
Well, still dont have sniffs about trash mobs around orbs.
If someone want finish it: https://gist.github.com/Keader/9809633fdd6813300207dd77aff2ffa0
issue title suggestion:
Scripts/Icecrown Citadel: gameobject Empowering Blood Orb
Ok, sometime ago i sniffed it using modox sniff and now finally i can parse it.
So i'm backing to finish it :)
394b119664bc16dc5376f1404925b6d0b5a26876
Most helpful comment
Object scripted, spells related scripted
Missing script on minions around him, generic script done... now i need add spells 馃拑