Core/DB: Utgarde Keep

- Script areatrigger near Ingvar to activate the proto drake
- Assign heroic spells
- Mount proto drake rider to proto drake
This commit is contained in:
Gacko
2012-11-10 17:33:07 +01:00
parent 6bd90626ea
commit cc0842f46b
2 changed files with 139 additions and 11 deletions

View File

@@ -143,14 +143,7 @@ public:
}
}
}
switch (near_f)
{
case 1: return 1;
case 2: return 2;
case 3: return 3;
default: return 0;
}
return near_f > 0 && near_f < 4 ? near_f : 0;
}
void UpdateAI(const uint32 /*diff*/)
@@ -239,9 +232,103 @@ class spell_fixate : public SpellScriptLoader
return new spell_fixate_SpellScript();
}
};
enum EnslavedProtoDrake
{
TYPE_PROTODRAKE_AT = 28,
DATA_PROTODRAKE_MOVE = 6,
PATH_PROTODRAKE = 125946,
EVENT_REND = 1,
EVENT_FLAME_BREATH = 2,
EVENT_KNOCKAWAY = 3,
SPELL_REND = 43931,
SPELL_FLAME_BREATH = 50653,
SPELL_KNOCK_AWAY = 49722,
};
const Position protodrakeCheckPos = { 206.24f, -190.28f, 200.11f };
class npc_enslaved_proto_drake : public CreatureScript
{
public:
npc_enslaved_proto_drake() : CreatureScript("npc_enslaved_proto_drake") { }
struct npc_enslaved_proto_drakeAI : public ScriptedAI
{
npc_enslaved_proto_drakeAI(Creature* creature) : ScriptedAI(creature)
{
setData = false;
}
void Reset()
{
events.Reset();
events.ScheduleEvent(EVENT_REND, urand(2000, 3000));
events.ScheduleEvent(EVENT_FLAME_BREATH, urand(5500, 7000));
events.ScheduleEvent(EVENT_KNOCKAWAY, urand(3500, 6000));
}
void SetData(uint32 type, uint32 data)
{
if (type == TYPE_PROTODRAKE_AT && data == DATA_PROTODRAKE_MOVE && !setData && me->GetDistance(protodrakeCheckPos) < 5.0f)
{
setData = true;
me->GetMotionMaster()->MovePath(PATH_PROTODRAKE, false);
}
}
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventid = events.ExecuteEvent())
{
switch (eventid)
{
case EVENT_REND:
DoCast(SPELL_REND);
events.ScheduleEvent(EVENT_REND, urand(15000, 20000));
break;
case EVENT_FLAME_BREATH:
DoCast(SPELL_FLAME_BREATH);
events.ScheduleEvent(EVENT_FLAME_BREATH, urand(11000, 12000));
break;
case EVENT_KNOCKAWAY:
DoCast(SPELL_KNOCK_AWAY);
events.ScheduleEvent(EVENT_KNOCKAWAY, urand(7000, 8500));
break;
default:
break;
}
}
DoMeleeAttackIfReady();
}
private:
bool setData;
EventMap events;
};
CreatureAI* GetAI(Creature* creature) const
{
return new npc_enslaved_proto_drakeAI(creature);
}
};
void AddSC_utgarde_keep()
{
new npc_dragonflayer_forge_master();
new npc_enslaved_proto_drake();
new spell_ticking_time_bomb();
new spell_fixate();
}