Scripts/Ahn'kahet/Prince Taldaram:

Fix movement after shield drops.(no more LoS issues)
Update boss texts and move them to creature_text.
Add proper sounds to text.
Add condition for a visual spell.
Add usage of different Embrace of the Vampyr spell based on difficulty.
This commit is contained in:
w1sht0l1v3
2012-03-24 13:24:24 +02:00
parent ee305cbb26
commit dae82111b7
2 changed files with 46 additions and 21 deletions
@@ -0,0 +1,22 @@
-- Beam Visual
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=60342;
INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
(13,1,60342,0,0,31,0,3,29308,0,0,0,'','Beam Visual target Prince Taldaram');
-- script texts for Prince Taldaram
DELETE FROM `creature_text` WHERE `entry`=29308;
INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
(29308,0,0,'The hum of magic energy in the air diminishes...',16,0,100,0,0,0,'prince taldaram SAY_1'),
(29308,1,0,'Intruders! Who trespasses in the Old Kingdom?',14,0,100,0,0,0,'prince taldaram SAY_WARNING'),
(29308,2,0,'I will feast on your remains.',14,0,100,0,0,14360,'prince taldaram SAY_AGGRO'),
(29308,3,0,'',14,10,100,0,0,14365,'prince taldaram SAY_SLAY_0'),
(29308,3,1,'I will drink no blood before it''s time.',14,0,100,0,0,14366,'prince taldaram SAY_SLAY_1'),
(29308,3,2,'One final embrace.',14,0,100,0,0,14367,'prince taldaram SAY_SLAY_2'),
(29308,4,0,'Still I hunger. Still... I... thirst.',14,0,100,0,0,14368,'prince taldaram SAY_DEATH'),
(29308,5,0,'So... appetizing.',14,0,100,0,0,14363,'prince taldaram SAY_FEED1'),
(29308,5,1,'Fresh, warm blood. It has been too long.',14,0,100,0,0,14364,'prince taldaram SAY_FEED2'),
(29308,6,0,'Your heartbeat is... music to my ears.',14,0,100,0,0,14361,'prince taldaram SAY_VANISH1'),
(29308,6,1,'I am nowhere... I am everywhere. I am the watcher, unseen.',14,0,100,0,0,14362,'prince taldaram SAY_VANISH2');
-- cleanup
DELETE FROM `script_texts` WHERE `npc_entry`=29308;
@@ -36,7 +36,8 @@ enum Spells
SPELL_VANISH = 55964,
CREATURE_FLAME_SPHERE = 30106,
H_CREATURE_FLAME_SPHERE_1 = 31686,
H_CREATURE_FLAME_SPHERE_2 = 31687
H_CREATURE_FLAME_SPHERE_2 = 31687,
SPELL_HOVER_FALL = 60425
};
enum Misc
{
@@ -45,18 +46,17 @@ enum Misc
DATA_SPHERE_DISTANCE = 15
};
#define DATA_SPHERE_ANGLE_OFFSET 0.7f
#define DATA_GROUND_POSITION_Z 11.4f
#define DATA_GROUND_POSITION_Z 11.30809f
enum Yells
{
SAY_AGGRO = -1619021,
SAY_SLAY_1 = -1619022,
SAY_SLAY_2 = -1619023,
SAY_DEATH = -1619024,
SAY_FEED_1 = -1619025,
SAY_FEED_2 = -1619026,
SAY_VANISH_1 = -1619027,
SAY_VANISH_2 = -1619028
SAY_1 = 0,
SAY_WARNING = 1,
SAY_AGGRO = 2,
SAY_SLAY = 3,
SAY_DEATH = 4,
SAY_FEED = 5,
SAY_VANISH = 6,
};
enum CombatPhase
{
@@ -82,8 +82,7 @@ public:
boss_taldaramAI(Creature* creature) : ScriptedAI(creature)
{
instance = creature->GetInstanceScript();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->SetDisableGravity(true);
}
uint32 uiBloodthirstTimer;
@@ -118,7 +117,7 @@ public:
{
if (instance)
instance->SetData(DATA_PRINCE_TALDARAM_EVENT, IN_PROGRESS);
DoScriptText(SAY_AGGRO, me);
Talk(SAY_AGGRO);
}
void UpdateAI(const uint32 diff)
@@ -180,7 +179,8 @@ public:
break;
case VANISHED:
if (Unit* pEmbraceTarget = GetEmbraceTarget())
DoCast(pEmbraceTarget, SPELL_EMBRACE_OF_THE_VAMPYR);
DoCast(pEmbraceTarget, DUNGEON_MODE(SPELL_EMBRACE_OF_THE_VAMPYR, H_SPELL_EMBRACE_OF_THE_VAMPYR));
Talk(SAY_FEED);
me->GetMotionMaster()->Clear();
me->SetSpeed(MOVE_WALK, 1.0f, true);
me->GetMotionMaster()->MoveChase(me->getVictim());
@@ -202,7 +202,7 @@ public:
if (uiFlamesphereTimer <= diff)
{
// because TARGET_UNIT_TARGET_ENEMY we need a target selected to cast
DoCast(me->getVictim(), SPELL_CONJURE_FLAME_SPHERE);
DoCastVictim(SPELL_CONJURE_FLAME_SPHERE);
Phase = CASTING_FLAME_SPHERES;
uiPhaseTimer = 3*IN_MILLISECONDS + diff;
uiFlamesphereTimer = 15*IN_MILLISECONDS;
@@ -225,7 +225,7 @@ public:
//He only vanishes if there are 3 or more alive players
if (target_list.size() > 2)
{
DoScriptText(RAND(SAY_VANISH_1, SAY_VANISH_2), me);
Talk(SAY_VANISH);
DoCast(me, SPELL_VANISH);
Phase = JUST_VANISHED;
uiPhaseTimer = 500;
@@ -261,7 +261,7 @@ public:
void JustDied(Unit* /*killer*/)
{
DoScriptText(SAY_DEATH, me);
Talk(SAY_DEATH);
if (instance)
instance->SetData(DATA_PRINCE_TALDARAM_EVENT, DONE);
@@ -279,7 +279,7 @@ public:
uiPhaseTimer = 0;
uiEmbraceTarget = 0;
}
DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2), me);
Talk(SAY_SLAY);
}
bool CheckSpheres()
@@ -315,12 +315,13 @@ public:
{
if (!instance)
return;
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->RemoveAurasDueToSpell(SPELL_BEAM_VISUAL);
me->SetUnitMovementFlags(MOVEMENTFLAG_WALKING);
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), DATA_GROUND_POSITION_Z, me->GetOrientation());
DoCast(SPELL_HOVER_FALL);
me->SetDisableGravity(false);
me->GetMotionMaster()->MovePoint(0, me->GetHomePosition());
Talk(SAY_WARNING);
uint64 prison_GUID = instance->GetData64(DATA_PRINCE_TALDARAM_PLATFORM);
instance->HandleGameObject(prison_GUID, true);
}
@@ -405,10 +406,12 @@ public:
{
case GO_SPHERE1:
instance->SetData(DATA_SPHERE1_EVENT, IN_PROGRESS);
pPrinceTaldaram->AI()->Talk(SAY_1);
break;
case GO_SPHERE2:
instance->SetData(DATA_SPHERE2_EVENT, IN_PROGRESS);
pPrinceTaldaram->AI()->Talk(SAY_1);
break;
}