Skip to content

Commit

Permalink
Scripts/UtgardeKeep/Ingvar: remove hacks and fix warning
Browse files Browse the repository at this point in the history
  • Loading branch information
joschiwald committed Aug 28, 2013
1 parent 83e5168 commit f5f0e64
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 86 deletions.
17 changes: 17 additions & 0 deletions 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;
35 changes: 16 additions & 19 deletions src/server/game/Spells/Auras/SpellAuraEffects.cpp
Expand Up @@ -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);
*/

Expand Down Expand Up @@ -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();
}
}

Expand Down
Expand Up @@ -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
Expand Down Expand Up @@ -96,6 +93,11 @@ enum Spells
SPELL_INGVAR_TRANSFORM = 42796
};

enum Misc
{
ACTION_START_PHASE_2
};

class boss_ingvar_the_plunderer : public CreatureScript
{
public:
Expand All @@ -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);
Expand All @@ -129,53 +127,51 @@ 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
{
_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()
Expand All @@ -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
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -254,7 +249,8 @@ class boss_ingvar_the_plunderer : public CreatureScript
}
}

DoMeleeAttackIfReady();
if (!events.IsInPhase(PHASE_EVENT))
DoMeleeAttackIfReady();
}

private:
Expand Down Expand Up @@ -288,36 +284,31 @@ 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
{
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;
}
}

Expand All @@ -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);
Expand All @@ -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;
Expand Down
Expand Up @@ -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
Expand Down

0 comments on commit f5f0e64

Please sign in to comment.