aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoschiwald <joschiwald@online.de>2013-08-28 17:11:14 +0200
committerjoschiwald <joschiwald@online.de>2013-08-28 17:11:14 +0200
commitf5f0e6439c20d9d4a6e49cf4e470e798c0933c5a (patch)
treea0693b53480b23def0dac3365b65ef65440a150c
parent83e5168a5bed68ce00118fbeefe7979754838b48 (diff)
Scripts/UtgardeKeep/Ingvar: remove hacks and fix warning
-rw-r--r--sql/updates/world/2013_08_28_00_world_misc.sql17
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp35
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp120
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h8
4 files changed, 94 insertions, 86 deletions
diff --git a/sql/updates/world/2013_08_28_00_world_misc.sql b/sql/updates/world/2013_08_28_00_world_misc.sql
new file mode 100644
index 00000000000..bd414f4d623
--- /dev/null
+++ b/sql/updates/world/2013_08_28_00_world_misc.sql
@@ -0,0 +1,17 @@
+DELETE FROM `creature_text` WHERE `entry` IN (24068, 23954, 23980);
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `comment`) VALUES
+(24068, 0, 0, 'Ingvar! Your pathetic failure will serve as a warning to all... you are damned! Arise and carry out the master''s will!', 14, 0, 100, 0, 0, 13754, 'Annhylde the Caller to Ingvar the Plunderer'),
+
+(23954, 0, 0, 'I''ll paint my face with your blood!', 14, 0, 100, 0, 0, 13207, 'Ingvar the Plunderer - SAY_AGGRO_1'),
+(23954, 1, 0, 'Mjul orm agn gjor!', 14, 0, 100, 0, 0, 13212, 'Ingvar the Plunderer - SAY_SLAY_1'),
+(23954, 2, 0, 'My life for the... death god!', 14, 0, 100, 0, 0, 13213, 'Ingvar the Plunderer - SAY_DEATH_1'),
+
+(23954, 3, 0, 'I return! A second chance to carve your skull!', 14, 0, 100, 0, 0, 13209, 'Ingvar the Plunderer - SAY_AGGRO_2'),
+(23954, 4, 0, 'I am a warrior born!', 14, 0, 100, 0, 0, 13214, 'Ingvar the Plunderer - SAY_SLAY_2'),
+(23954, 5, 0, 'No! I can do... better! I can...', 14, 0, 100, 0, 0, 13211, 'Ingvar the Plunderer - SAY_DEATH_2');
+
+UPDATE `creature_template` SET `lootid`=`entry` WHERE entry IN (23954, 31673);
+UPDATE `creature_template` SET `lootid`=0 WHERE entry IN (23980, 31674);
+
+UPDATE `creature_loot_template` SET `entry`=23954 WHERE `entry`=23980;
+UPDATE `creature_loot_template` SET `entry`=31673 WHERE `entry`=31674;
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index cd227c7d8b7..08e66124e4a 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -2109,15 +2109,12 @@ void AuraEffect::HandleFeignDeath(AuraApplication const* aurApp, uint8 mode, boo
Unit* target = aurApp->GetTarget();
- if (target->GetTypeId() != TYPEID_PLAYER)
- return;
-
if (apply)
{
/*
WorldPacket data(SMSG_FEIGN_DEATH_RESISTED, 9);
- data<<target->GetGUID();
- data<<uint8(0);
+ data << target->GetGUID();
+ data << uint8(0);
target->SendMessageToSet(&data, true);
*/
@@ -2151,31 +2148,31 @@ void AuraEffect::HandleFeignDeath(AuraApplication const* aurApp, uint8 mode, boo
// stop handling the effect if it was removed by linked event
if (aurApp->GetRemoveMode())
return;
- // blizz like 2.0.x
- target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29);
- // blizz like 2.0.x
- target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
- // blizz like 2.0.x
- target->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
+ target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29); // blizz like 2.0.x
+ target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH); // blizz like 2.0.x
+ target->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD); // blizz like 2.0.x
target->AddUnitState(UNIT_STATE_DIED);
+
+ if (Creature* creature = target->ToCreature())
+ creature->SetReactState(REACT_PASSIVE);
}
else
{
/*
WorldPacket data(SMSG_FEIGN_DEATH_RESISTED, 9);
- data<<target->GetGUID();
- data<<uint8(1);
+ data << target->GetGUID();
+ data << uint8(1);
target->SendMessageToSet(&data, true);
*/
- // blizz like 2.0.x
- target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29);
- // blizz like 2.0.x
- target->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
- // blizz like 2.0.x
- target->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
+ target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29); // blizz like 2.0.x
+ target->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH); // blizz like 2.0.x
+ target->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD); // blizz like 2.0.x
target->ClearUnitState(UNIT_STATE_DIED);
+
+ if (Creature* creature = target->ToCreature())
+ creature->InitializeReactState();
}
}
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
index 1ec33fcb301..e6e9fffd5ac 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp
@@ -28,21 +28,18 @@ EndScriptData */
enum Yells
{
- YELL_AGGRO_1 = 0,
- YELL_KILL_1 = 1,
- YELL_DEAD_1 = 2,
-
- YELL_AGGRO_2 = 0,
- YELL_KILL_2 = 1,
- YELL_DEAD_2 = 2
-};
-
-enum Creatures
-{
- NPC_INGVAR_HUMAN = 23954,
- NPC_ANNHYLDE_THE_CALLER = 24068,
- NPC_INGVAR_UNDEAD = 23980,
- NPC_THROW_TARGET = 23996,
+ // Ingvar (Human)
+ SAY_AGGRO_1 = 0,
+ SAY_SLAY_1 = 1,
+ SAY_DEATH_1 = 2,
+
+ // Ingvar (Undead)
+ SAY_AGGRO_2 = 3,
+ SAY_SLAY_2 = 4,
+ SAY_DEATH_2 = 5,
+
+ // Annhylde The Caller
+ YELL_RESURRECT = 0
};
enum Events
@@ -96,6 +93,11 @@ enum Spells
SPELL_INGVAR_TRANSFORM = 42796
};
+enum Misc
+{
+ ACTION_START_PHASE_2
+};
+
class boss_ingvar_the_plunderer : public CreatureScript
{
public:
@@ -110,13 +112,9 @@ class boss_ingvar_the_plunderer : public CreatureScript
void Reset() OVERRIDE
{
- if (_isUndead)
- me->UpdateEntry(NPC_INGVAR_HUMAN);
-
_isUndead = false;
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- me->SetStandState(UNIT_STAND_STATE_STAND);
_Reset();
events.SetPhase(PHASE_HUMAN);
@@ -129,36 +127,37 @@ class boss_ingvar_the_plunderer : public CreatureScript
void DamageTaken(Unit* /*doneBy*/, uint32& damage) OVERRIDE
{
- if (damage >= me->GetHealth() && !_isUndead)
+ if (damage >= me->GetHealth() && events.IsInPhase(PHASE_HUMAN))
{
- //DoCast(me, SPELL_INGVAR_FEIGN_DEATH, true); // Dont work ???
- // visuel hack
- me->SetHealth(0);
- me->InterruptNonMeleeSpells(true);
me->RemoveAllAuras();
+ DoCast(me, SPELL_INGVAR_FEIGN_DEATH, true);
+
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->GetMotionMaster()->MovementExpired(false);
- me->GetMotionMaster()->MoveIdle();
- me->SetStandState(UNIT_STAND_STATE_DEAD);
- // visuel hack end
events.SetPhase(PHASE_EVENT);
events.ScheduleEvent(EVENT_SUMMON_BANSHEE, 3 * IN_MILLISECONDS, 0, PHASE_EVENT);
- Talk(YELL_DEAD_1);
+ Talk(SAY_DEATH_1);
}
if (events.IsInPhase(PHASE_EVENT))
damage = 0;
}
+ void DoAction(int32 actionId)
+ {
+ if (actionId == ACTION_START_PHASE_2)
+ StartZombiePhase();
+ }
+
void StartZombiePhase()
{
_isUndead = true;
- me->UpdateEntry(NPC_INGVAR_UNDEAD);
+ me->RemoveAura(SPELL_INGVAR_FEIGN_DEATH);
+ DoCast(me, SPELL_INGVAR_TRANSFORM, true); /// @todo: should be death persistent
events.ScheduleEvent(EVENT_JUST_TRANSFORMED, 2 * IN_MILLISECONDS, 0, PHASE_EVENT);
- Talk(YELL_AGGRO_2);
+ Talk(SAY_AGGRO_2);
}
void EnterCombat(Unit* /*who*/) OVERRIDE
@@ -166,16 +165,13 @@ class boss_ingvar_the_plunderer : public CreatureScript
_EnterCombat();
if (!_isUndead)
- Talk(YELL_AGGRO_1);
+ Talk(SAY_AGGRO_1);
}
void JustDied(Unit* /*killer*/) OVERRIDE
{
_JustDied();
- Talk(YELL_DEAD_2);
-
- // Ingvar has NPC_INGVAR_UNDEAD id in this moment, so we have to update encounter state for his original id
- instance->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, NPC_INGVAR_HUMAN, me);
+ Talk(SAY_DEATH_2);
}
void ScheduleSecondPhase()
@@ -189,7 +185,7 @@ class boss_ingvar_the_plunderer : public CreatureScript
void KilledUnit(Unit* /*victim*/) OVERRIDE
{
- Talk(_isUndead ? YELL_KILL_1 : YELL_KILL_2);
+ Talk(_isUndead ? SAY_SLAY_1 : SAY_SLAY_2);
}
void UpdateAI(uint32 diff) OVERRIDE
@@ -225,8 +221,7 @@ class boss_ingvar_the_plunderer : public CreatureScript
break;
case EVENT_JUST_TRANSFORMED:
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->SetInCombatWithZone();
- me->GetMotionMaster()->MoveChase(me->GetVictim());
+ DoZoneInCombat();
ScheduleSecondPhase();
return;
case EVENT_SUMMON_BANSHEE:
@@ -254,7 +249,8 @@ class boss_ingvar_the_plunderer : public CreatureScript
}
}
- DoMeleeAttackIfReady();
+ if (!events.IsInPhase(PHASE_EVENT))
+ DoMeleeAttackIfReady();
}
private:
@@ -288,13 +284,7 @@ class npc_annhylde_the_caller : public CreatureScript
me->GetPosition(x, y, z);
DoTeleportTo(x+1, y, z+30);
-
- if (Creature* ingvar = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_INGVAR)))
- {
- me->GetMotionMaster()->MovePoint(1, x, y, z+15);
-
- // Talk(YELL_RESSURECT);
- }
+ me->GetMotionMaster()->MovePoint(1, x, y, z+15);
}
void MovementInform(uint32 type, uint32 id) OVERRIDE
@@ -302,22 +292,23 @@ class npc_annhylde_the_caller : public CreatureScript
if (type != POINT_MOTION_TYPE)
return;
- if (Creature* ingvar = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_INGVAR)))
+ switch (id)
{
- switch (id)
- {
- case 1:
+ case 1:
+ Talk(YELL_RESURRECT);
+ if (Creature* ingvar = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_INGVAR)))
+ {
ingvar->RemoveAura(SPELL_SUMMON_BANSHEE);
ingvar->CastSpell(ingvar, SPELL_SCOURG_RESURRECTION_DUMMY, true);
DoCast(ingvar, SPELL_SCOURG_RESURRECTION_BEAM);
- _events.ScheduleEvent(EVENT_RESURRECT_1, 8000);
- break;
- case 2:
- me->DespawnOrUnsummon();
- break;
- default:
- break;
- }
+ }
+ _events.ScheduleEvent(EVENT_RESURRECT_1, 8000);
+ break;
+ case 2:
+ me->DespawnOrUnsummon();
+ break;
+ default:
+ break;
}
}
@@ -336,7 +327,7 @@ class npc_annhylde_the_caller : public CreatureScript
case EVENT_RESURRECT_1:
if (Creature* ingvar = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_INGVAR)))
{
- ingvar->SetStandState(UNIT_STAND_STATE_STAND);
+ ingvar->RemoveAura(SPELL_INGVAR_FEIGN_DEATH);
ingvar->CastSpell(ingvar, SPELL_SCOURG_RESURRECTION_HEAL, false);
}
_events.ScheduleEvent(EVENT_RESURRECT_2, 3000);
@@ -345,13 +336,10 @@ class npc_annhylde_the_caller : public CreatureScript
if (Creature* ingvar = ObjectAccessor::GetCreature(*me, _instance->GetData64(DATA_INGVAR)))
{
ingvar->RemoveAurasDueToSpell(SPELL_SCOURG_RESURRECTION_DUMMY);
-
- if (ingvar->GetVictim())
- if (boss_ingvar_the_plunderer::boss_ingvar_the_plundererAI* ai = CAST_AI(boss_ingvar_the_plunderer::boss_ingvar_the_plundererAI, ingvar->AI()))
- ai->StartZombiePhase();
-
- me->GetMotionMaster()->MovePoint(2, x+1, y, z+30);
+ ingvar->AI()->DoAction(ACTION_START_PHASE_2);
}
+
+ me->GetMotionMaster()->MovePoint(2, x+1, y, z+30);
break;
default:
break;
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h
index ee422400e72..873c5d634fa 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.h
@@ -45,8 +45,14 @@ enum CreatureIds
NPC_DALRONN = 24201,
NPC_INGVAR = 23954,
+ // Skarvald - Dalronn
NPC_DALRONN_GHOST = 27389,
- NPC_SKARVALD_GHOST = 27390
+ NPC_SKARVALD_GHOST = 27390,
+
+ // Ingvar the Plunderer
+ NPC_INGVAR_UNDEAD = 23980,
+ NPC_THROW_TARGET = 23996,
+ NPC_ANNHYLDE_THE_CALLER = 24068
};
enum GameObjectIds