aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2014_05_09_02_world_creature_template.sql1
-rw-r--r--src/server/scripts/EasternKingdoms/zone_duskwood.cpp56
2 files changed, 30 insertions, 27 deletions
diff --git a/sql/updates/world/2014_05_09_02_world_creature_template.sql b/sql/updates/world/2014_05_09_02_world_creature_template.sql
new file mode 100644
index 00000000000..5520ca5d6f8
--- /dev/null
+++ b/sql/updates/world/2014_05_09_02_world_creature_template.sql
@@ -0,0 +1 @@
+UPDATE `creature_template` SET `faction`=14 WHERE `entry`=15625;
diff --git a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp
index 236455137dc..4eaf98d0a0e 100644
--- a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp
@@ -29,18 +29,19 @@ EndScriptData */
enum TwilightCorrupter
{
- ITEM_FRAGMENT = 21149,
NPC_TWILIGHT_CORRUPTER = 15625,
- YELL_TWILIGHTCORRUPTOR_RESPAWN = 0,
- YELL_TWILIGHTCORRUPTOR_AGGRO = 1,
- YELL_TWILIGHTCORRUPTOR_KILL = 2,
+ YELL_TWILIGHT_CORRUPTOR_RESPAWN = 0,
+ YELL_TWILIGHT_CORRUPTOR_AGGRO = 1,
+ YELL_TWILIGHT_CORRUPTOR_KILL = 2,
+
SPELL_SOUL_CORRUPTION = 25805,
SPELL_CREATURE_OF_NIGHTMARE = 25806,
SPELL_LEVEL_UP = 24312,
EVENT_SOUL_CORRUPTION = 1,
EVENT_CREATURE_OF_NIGHTMARE = 2,
- FACTION_HOSTILE = 14
+
+ QUEST_NIGHTMARES_CORRUPTION = 8735
};
/*######
@@ -58,12 +59,13 @@ public:
void Reset() override
{
- KillCount = 0;
+ _events.Reset();
+ KillCount = 0;
}
void EnterCombat(Unit* /*who*/) override
{
- Talk(YELL_TWILIGHTCORRUPTOR_AGGRO);
+ Talk(YELL_TWILIGHT_CORRUPTOR_AGGRO);
_events.ScheduleEvent(EVENT_SOUL_CORRUPTION, 15000);
_events.ScheduleEvent(EVENT_CREATURE_OF_NIGHTMARE, 30000);
}
@@ -73,7 +75,7 @@ public:
if (victim->GetTypeId() == TYPEID_PLAYER)
{
++KillCount;
- Talk(YELL_TWILIGHTCORRUPTOR_KILL, victim);
+ Talk(YELL_TWILIGHT_CORRUPTOR_KILL, victim);
if (KillCount == 3)
{
@@ -90,22 +92,27 @@ public:
_events.Update(diff);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_SOUL_CORRUPTION:
- DoCastVictim(SPELL_SOUL_CORRUPTION);
- _events.ScheduleEvent(EVENT_SOUL_CORRUPTION, rand()%4000+15000);
+ DoCastAOE(SPELL_SOUL_CORRUPTION);
+ _events.ScheduleEvent(EVENT_SOUL_CORRUPTION, urand(15000, 19000));
break;
case EVENT_CREATURE_OF_NIGHTMARE:
- DoCastVictim(SPELL_CREATURE_OF_NIGHTMARE);
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
+ DoCast(target, SPELL_CREATURE_OF_NIGHTMARE);
_events.ScheduleEvent(EVENT_CREATURE_OF_NIGHTMARE, 45000);
break;
default:
break;
}
}
+
DoMeleeAttackIfReady();
}
@@ -124,27 +131,22 @@ public:
# at_twilight_grove
######*/
+Position const TwillightCorrupter = { -10328.16f, -489.57f, 49.95f, 0.0f };
+
class at_twilight_grove : public AreaTriggerScript
{
-public:
- at_twilight_grove() : AreaTriggerScript("at_twilight_grove") { }
+ public:
+ at_twilight_grove() : AreaTriggerScript("at_twilight_grove") { }
- bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override
- {
- if (player->HasQuestForItem(ITEM_FRAGMENT))
+ bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) override
{
- if (Unit* corrupter = player->SummonCreature(NPC_TWILIGHT_CORRUPTER, -10328.16f, -489.57f, 49.95f, 0, TEMPSUMMON_MANUAL_DESPAWN, 60000))
- corrupter->setFaction(FACTION_HOSTILE);
+ if (player->GetQuestStatus(QUEST_NIGHTMARES_CORRUPTION) == QUEST_STATUS_INCOMPLETE)
+ if (!player->FindNearestCreature(NPC_TWILIGHT_CORRUPTER, 500.0f, true))
+ if (Creature* corrupter = player->SummonCreature(NPC_TWILIGHT_CORRUPTER, TwillightCorrupter, TEMPSUMMON_MANUAL_DESPAWN, 60000))
+ corrupter->AI()->Talk(YELL_TWILIGHT_CORRUPTOR_RESPAWN, player);
- if (Creature* CorrupterSpeaker = player->SummonCreature(1, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()-1, 0, TEMPSUMMON_TIMED_DESPAWN, 15000))
- {
- CorrupterSpeaker->SetName("Twilight Corrupter");
- CorrupterSpeaker->SetVisible(true);
- CorrupterSpeaker->AI()->Talk(YELL_TWILIGHTCORRUPTOR_RESPAWN, player);
- }
- }
- return false;
- };
+ return false;
+ };
};
void AddSC_duskwood()