Rewrite script for quest 12680

Add support for spells 52267 and 52264
Thanks to Drethek for patch

--HG--
branch : trunk
This commit is contained in:
Kudlaty
2009-07-11 02:03:20 +02:00
parent 6af0b55dd7
commit a15748df60
5 changed files with 121 additions and 6 deletions
+1
View File
@@ -109,6 +109,7 @@ UPDATE `creature_template` SET `ScriptName`='npc_kingdom_of_dalaran_quests' WHER
UPDATE `creature_template` SET `ScriptName`='npc_taxi' WHERE `entry` IN (17435, 23413, 18725, 19401, 19409, 20235, 25059, 25236, 20903, 20162, 29154, 23415, 27575, 26443, 26949, 23816); UPDATE `creature_template` SET `ScriptName`='npc_taxi' WHERE `entry` IN (17435, 23413, 18725, 19401, 19409, 20235, 25059, 25236, 20903, 20162, 29154, 23415, 27575, 26443, 26949, 23816);
UPDATE `creature_template` SET `ScriptName`='npc_death_knight_initiate' WHERE `entry`=28406; UPDATE `creature_template` SET `ScriptName`='npc_death_knight_initiate' WHERE `entry`=28406;
UPDATE `creature_template` SET `ScriptName`='npc_salanar_the_horseman' WHERE `entry` IN (28653, 28788); UPDATE `creature_template` SET `ScriptName`='npc_salanar_the_horseman' WHERE `entry` IN (28653, 28788);
UPDATE `creature_template` SET `ScriptName`='npc_dark_rider_of_acherus' WHERE `entry` =28654;
UPDATE `creature_template` SET `ScriptName`='npc_ros_dark_rider' WHERE `entry`=28768; UPDATE `creature_template` SET `ScriptName`='npc_ros_dark_rider' WHERE `entry`=28768;
UPDATE `creature_template` SET `ScriptName`='npc_dkc1_gothik' WHERE `entry`=28658; UPDATE `creature_template` SET `ScriptName`='npc_dkc1_gothik' WHERE `entry`=28658;
+1
View File
@@ -0,0 +1 @@
UPDATE `creature_template` SET `ScriptName`='npc_dark_rider_of_acherus' WHERE `entry` =28654;
@@ -502,19 +502,118 @@ bool GossipSelect_npc_death_knight_initiate(Player *player, Creature *_Creature,
return true; return true;
} }
/*######
## npc_dark_rider_of_acherus
######*/
#define DESPAWN_HORSE 52267
struct TRINITY_DLL_DECL npc_dark_rider_of_acherusAI : public ScriptedAI
{
npc_dark_rider_of_acherusAI(Creature *c) : ScriptedAI(c) {}
uint32 PhaseTimer;
uint32 Phase;
bool Intro;
Unit *Target;
void Reset()
{
PhaseTimer = 4000;
Phase = 0;
Intro = false;
Target = NULL;
}
void UpdateAI(const uint32 diff)
{
if (!Intro)
return;
if (PhaseTimer < diff)
{
switch(Phase)
{
case 0:
DoSay("The realm of shadows awaits...", LANG_UNIVERSAL, NULL);
PhaseTimer = 5000;
Phase = 1;
break;
case 1:
DoCast(Target, DESPAWN_HORSE, true);
PhaseTimer = 3000;
Phase = 2;
break;
case 2:
m_creature->SetVisibility(VISIBILITY_OFF);
PhaseTimer = 2000;
Phase = 3;
break;
case 3:
m_creature->ForcedDespawn();
break;
default:
break;
}
}else PhaseTimer -= diff;
}
void InitDespawnHorse(Unit *who)
{
if (!who)
return;
Target = who;
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
m_creature->SetSpeed(MOVE_RUN, 0.4f);
m_creature->GetMotionMaster()->MoveChase(Target);
m_creature->SetUInt64Value(UNIT_FIELD_TARGET, Target->GetGUID());
Intro = true;
}
};
CreatureAI* GetAI_npc_dark_rider_of_acherus(Creature *_Creature)
{
return new npc_dark_rider_of_acherusAI(_Creature);
}
/*###### /*######
## npc_salanar_the_horseman ## npc_salanar_the_horseman
######*/ ######*/
enum enum
{ {
REALM_OF_SHADOWS = 52693 REALM_OF_SHADOWS = 52693,
DELIVER_STOLEN_HORSE = 52264,
CALL_DARK_RIDER = 52266
}; };
struct TRINITY_DLL_DECL npc_salanar_the_horsemanAI : public ScriptedAI struct TRINITY_DLL_DECL npc_salanar_the_horsemanAI : public ScriptedAI
{ {
npc_salanar_the_horsemanAI(Creature *c) : ScriptedAI(c) {} npc_salanar_the_horsemanAI(Creature *c) : ScriptedAI(c) {}
void SpellHit(Unit *caster, const SpellEntry *spell)
{
if (spell->Id == DELIVER_STOLEN_HORSE)
{
if(caster->GetTypeId() == TYPEID_UNIT && CAST_CRE(caster)->isVehicle())
{
if( Unit *charmer = caster->GetCharmer() )
{
CAST_PLR(charmer)->ExitVehicle();
caster->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
caster->setFaction(35);
DoCast(caster, CALL_DARK_RIDER, true);
Creature* Dark_Rider = m_creature->FindNearestCreature(28654, 15);
if (Dark_Rider)
CAST_AI(npc_dark_rider_of_acherusAI, Dark_Rider->AI())->InitDespawnHorse(caster);
}
}
}
}
void MoveInLineOfSight(Unit *who) void MoveInLineOfSight(Unit *who)
{ {
ScriptedAI::MoveInLineOfSight(who); ScriptedAI::MoveInLineOfSight(who);
@@ -527,11 +626,6 @@ struct TRINITY_DLL_DECL npc_salanar_the_horsemanAI : public ScriptedAI
{ {
switch(me->GetEntry()) switch(me->GetEntry())
{ {
// for quest Grand Theft Palomino(12680)
case 28653:
if( CAST_PLR(charmer)->GetQuestStatus(12680) == QUEST_STATUS_INCOMPLETE )
CAST_PLR(charmer)->KilledMonster(28767, me->GetGUID());
break;
// for quest Into the Realm of Shadows(12687) // for quest Into the Realm of Shadows(12687)
case 28788: case 28788:
if( CAST_PLR(charmer)->GetQuestStatus(12687) == QUEST_STATUS_INCOMPLETE ) if( CAST_PLR(charmer)->GetQuestStatus(12687) == QUEST_STATUS_INCOMPLETE )
@@ -658,6 +752,11 @@ void AddSC_the_scarlet_enclave()
newscript->GetAI = &GetAI_npc_death_knight_initiate; newscript->GetAI = &GetAI_npc_death_knight_initiate;
newscript->RegisterSelf(); newscript->RegisterSelf();
newscript = new Script;
newscript->Name="npc_dark_rider_of_acherus";
newscript->GetAI = &GetAI_npc_dark_rider_of_acherus;
newscript->RegisterSelf();
newscript = new Script; newscript = new Script;
newscript->Name="npc_salanar_the_horseman"; newscript->Name="npc_salanar_the_horseman";
newscript->GetAI = &GetAI_npc_salanar_the_horseman; newscript->GetAI = &GetAI_npc_salanar_the_horseman;
+5
View File
@@ -4669,6 +4669,11 @@ SpellCastResult Spell::CheckCast(bool strict)
if(!unit || !unit->HasAura(17743, 0)) if(!unit || !unit->HasAura(17743, 0))
return SPELL_FAILED_BAD_TARGETS; return SPELL_FAILED_BAD_TARGETS;
} }
else if (m_spellInfo->Id == 52264) // Deliver Stolen Horse
{
if(!m_caster->FindNearestCreature(28653,5))
return SPELL_FAILED_OUT_OF_RANGE;
}
break; break;
} }
case SPELL_EFFECT_LEARN_SPELL: case SPELL_EFFECT_LEARN_SPELL:
+9
View File
@@ -4673,6 +4673,15 @@ void Spell::EffectScriptEffect(uint32 effIndex)
{ {
switch(m_spellInfo->Id) switch(m_spellInfo->Id)
{ {
// Despawn Horse
case 52267:
{
if(!unitTarget || unitTarget->GetTypeId() != TYPEID_UNIT)
return;
unitTarget->ForcedDespawn();
return;
}
// PX-238 Winter Wondervolt TRAP // PX-238 Winter Wondervolt TRAP
case 26275: case 26275:
{ {