Scripts/UtgardeKeep/Ingvar: remove hacks and fix warning

This commit is contained in:
joschiwald committed 2013-08-28 17:11:14 +02:00
1 parent 83e5168a5b
commit f5f0e6439c
4 files changed
+92 -84

No files matched your search

@@ -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;
@@ -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();
}
}
@@ -28,21 +28,18 @@ EndScriptData */
enum Yells
{
YELL_AGGRO_1 = 0,
YELL_KILL_1 = 1,
YELL_DEAD_1 = 2,
// Ingvar (Human)
SAY_AGGRO_1 = 0,
SAY_SLAY_1 = 1,
SAY_DEATH_1 = 2,
YELL_AGGRO_2 = 0,
YELL_KILL_2 = 1,
YELL_DEAD_2 = 2
};
// Ingvar (Undead)
SAY_AGGRO_2 = 3,
SAY_SLAY_2 = 4,
SAY_DEATH_2 = 5,
enum Creatures
{
NPC_INGVAR_HUMAN = 23954,
NPC_ANNHYLDE_THE_CALLER = 24068,
NPC_INGVAR_UNDEAD = 23980,
NPC_THROW_TARGET = 23996,
// 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;
@@ -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