diff options
author | joschiwald <joschiwald@online.de> | 2013-08-28 17:11:14 +0200 |
---|---|---|
committer | joschiwald <joschiwald@online.de> | 2013-08-28 17:11:14 +0200 |
commit | f5f0e6439c20d9d4a6e49cf4e470e798c0933c5a (patch) | |
tree | a0693b53480b23def0dac3365b65ef65440a150c | |
parent | 83e5168a5bed68ce00118fbeefe7979754838b48 (diff) |
Scripts/UtgardeKeep/Ingvar: remove hacks and fix warning
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 |