Scripts/Duskwood: prevention to spawn multiple Twilight Corrupter and fixed some issues there

This commit is contained in:
MitchesD
2014-05-08 17:45:11 +02:00
parent 5e4083bc45
commit eabec73d98
2 changed files with 30 additions and 27 deletions

View File

@@ -0,0 +1 @@
UPDATE `creature_template` SET `faction`=14 WHERE `entry`=15625;

View File

@@ -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()