Scripts/Deadmines: more work on Vanessa VanCleef

* scripted Rope movement and Adds AI
* initial work on detonating the ship
This commit is contained in:
Ovahlord
2018-04-02 03:34:56 +02:00
parent 763a05515a
commit 20566cb142
6 changed files with 526 additions and 14 deletions

View File

@@ -1,15 +1,41 @@
/*
21:35:31.527 -- spawn boss
21:35:37.564 -- aggro
21:35:48.422 -- deflection 1
21:35:49.607 -- deadly blades 1
21:35:46.004 -- summon defias enforcer
21:35:46.222 -- talk reinforcmeent
21:35:50.013 -- summon fires
21:35:56.456 -- summon defias shadowguard
21:36:06.065 -- summon bloodmage
21:36:19.325 -- jump to
21:36:20.527
21:36:20.745 -- hahaha narren
21:36:24.349 -- announce sprengstoff
21:36:25.051 -- summon ropes + CLICK ME aura --> 95527
21:36:48.248 -- deadly blades 2
21:36:43.428 -- # 2
21:13:21.384 -- blood wizard aggro
21:13:21.384 -- blood bolt 90938
21:13:24.988 -- blood bolt
21:13:28.591 -- rage zone 90932
21:37:55.282 -- ride vehicle
21:37:56.093 -- move path
21:38:04.954 -- despawn
*/
@@ -44,6 +70,24 @@ UPDATE `creature_template` SET `DamageModifier`= 42.2, `mechanic_immune_mask`= 6
UPDATE `creature_template` SET `VehicleId`= 1403 WHERE `entry`= 49539;
-- Enraged Worgen
UPDATE `creature_template` SET `DamageModifier`= 35 WHERE `entry`= 49532;
-- Defias Enforcer
UPDATE `creature_template` SET `difficulty_entry_1`= 49851 WHERE `entry`= 49850;
UPDATE `creature_template` SET `minlevel`= 87, `maxlevel`= 87, `exp`= 3 WHERE `entry`= 49851;
-- Defias Shadowguard
UPDATE `creature_template` SET `difficulty_entry_1`= 49853, `unit_class`= 4 WHERE `entry`= 49852;
UPDATE `creature_template` SET `minlevel`= 87, `maxlevel`= 87, `exp`= 3, `unit_class`= 4 WHERE `entry`= 49853;
-- Defias Blood Wizard
UPDATE `creature_template` SET `difficulty_entry_1`= 49855 WHERE `entry`= 49854;
UPDATE `creature_template` SET `minlevel`= 87, `maxlevel`= 87, `exp`= 3 WHERE `entry`= 49855;
-- Vanessa's Rope Anchor
UPDATE `creature_template` SET `InhabitType`= 4, `flags_extra`= 128 WHERE `entry`= 49552;
-- Rope
UPDATE `creature_template` SET `ScriptName`= 'npc_vanessa_rope' WHERE `entry`= 49550;
DELETE FROM `npc_spellclick_spells` WHERE `npc_entry`= 49550;
INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `cast_flags`, `user_type`) VALUES
(49550, 89731, 1, 0);
-- Template Addons
@@ -141,12 +185,15 @@ INSERT INTO `vehicle_template_accessory` (`entry`, `accessory_entry`, `seat_id`,
DELETE FROM `spell_script_names` WHERE `ScriptName` IN
('spell_deadmines_ride_magma_vehicle',
'spell_deadmines_magma_trap_throw_to_location',
'spell_vanessa_backslash_targeting');
'spell_vanessa_backslash_targeting',
'spell_vanessa_backslash_targeting',
'spell_deadmines_bloodbath');
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(92378, 'spell_deadmines_ride_magma_vehicle'),
(92438, 'spell_deadmines_magma_trap_throw_to_location'),
(92620, 'spell_vanessa_backslash_targeting');
(92620, 'spell_vanessa_backslash_targeting'),
(90925, 'spell_deadmines_bloodbath');
-- Spellclick spells
DELETE FROM `npc_spellclick_spells` WHERE `npc_entry` IN (49457);
@@ -155,9 +202,15 @@ INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `cast_flags`, `use
(49457, 92399, 0, 0);
-- Conditions
DELETE FROM `conditions` WHERE `SourceEntry` IN (92379) AND `SourceTypeOrReferenceId`= 13;
DELETE FROM `conditions` WHERE `SourceEntry` IN (92379, 90962, 90963) AND `SourceTypeOrReferenceId`= 13;
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ScriptName`, `Comment`) VALUES
(13, 1, 92379, 0, 0, 31, 0, 3, 49454, 0, 0, 0, '', 'Ride Magma Vehicle - Vanessa''s Trap Bunny');
(13, 1, 92379, 0, 0, 31, 0, 3, 49454, 0, 0, 0, '', 'Ride Magma Vehicle - Target Vanessa''s Trap Bunny'),
(13, 1, 90962, 0, 0, 31, 0, 3, 49850, 0, 0, 0, '', 'Whirling Blades - Target Defias Enforcer'),
(13, 1, 90962, 0, 1, 31, 0, 3, 49852, 0, 0, 0, '', 'Whirling Blades - Target Defias Shadowguard'),
(13, 1, 90962, 0, 2, 31, 0, 3, 49854, 0, 0, 0, '', 'Whirling Blades - Target Defias Blood Wizard'),
(13, 1, 90963, 0, 0, 31, 0, 3, 49850, 0, 0, 0, '', 'Whirling Blades - Target Defias Enforcer'),
(13, 1, 90963, 0, 1, 31, 0, 3, 49852, 0, 0, 0, '', 'Whirling Blades - Target Defias Shadowguard'),
(13, 1, 90963, 0, 2, 31, 0, 3, 49854, 0, 0, 0, '', 'Whirling Blades - Target Defias Blood Wizard');
-- Creature Collapsing Icicle 49481 SAI
SET @ENTRY := 49481;
@@ -205,3 +258,37 @@ DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(@ENTRY, 0, 0, 0, 0, 0, 100, 0, 2600, 2600, 3600, 3600, 11, 59304, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "When in combat and timer at the begining between 2600 and 2600 ms (and later repeats every 3600 and 3600 ms) - Self: Cast spell Spirit Strike (59304) on Victim // ");
-- Creature Defias Enforcer 49850 SAI
SET @ENTRY := 49850;
UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`= @ENTRY;
DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(@ENTRY, 0, 0, 0, 0, 0, 100, 1, 1000, 1000, 0, 0, 11, 90931, 0, 0, 0, 0, 0, 21, 50, 0, 0, 0, 0, 0, 0, "When in combat and timer at the begining between 1000 and 1000 ms (and later repeats every 0 and 0 ms) - Self: Cast spell Charge (90931) on Closest player in 50 yards // "),
(@ENTRY, 0, 1, 0, 0, 0, 100, 0, 6500, 7000, 30000, 30000, 11, 90925, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "When in combat and timer at the begining between 6500 and 7000 ms (and later repeats every 30000 and 30000 ms) - Self: Cast spell Bloodbath (90925) on Victim // "),
(@ENTRY, 0, 2, 0, 2, 0, 100, 0, 0, 20, 29000, 30000, 11, 90929, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "When health between 0% and 20% (check every 29000 - 30000 ms) - Self: Cast spell Recklessness (90929) on Self // ");
-- Creature Defias Shadowguard 49852 SAI
SET @ENTRY := 49852;
UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`= @ENTRY;
DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(@ENTRY, 0, 0, 0, 0, 0, 100, 1, 1000, 1000, 0, 0, 11, 90954, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "When in combat and timer at the begining between 1000 and 1000 ms (and later repeats every 0 and 0 ms) - Self: Cast spell Camouflage (90954) on Self // "),
(@ENTRY, 0, 1, 0, 0, 0, 100, 0, 5500, 6000, 10000, 11000, 11, 90951, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "When in combat and timer at the begining between 5500 and 6000 ms (and later repeats every 10000 and 11000 ms) - Self: Cast spell Sinister Strike (90951) on Victim // "),
(@ENTRY, 0, 2, 0, 0, 0, 100, 0, 10000, 10000, 20000, 20000, 11, 90956, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "When in combat and timer at the begining between 10000 and 10000 ms (and later repeats every 20000 and 20000 ms) - Self: Cast spell Shadowstep (90956) on Victim // "),
(@ENTRY, 0, 3, 0, 0, 0, 100, 0, 13000, 13000, 16000, 16000, 11, 90960, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "When in combat and timer at the begining between 13000 and 13000 ms (and later repeats every 16000 and 16000 ms) - Self: Cast spell Whirling Blades (90960) on Victim // "),
(@ENTRY, 0, 4, 0, 2, 0, 100, 0, 0, 20, 29000, 30000, 11, 90958, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, "When health between 0% and 20% (check every 29000 - 30000 ms) - Self: Cast spell Evasion (90958) on Self // ");
-- Creature Defias Blood Wizard 49854 SAI
SET @ENTRY := 49854;
UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`= @ENTRY;
DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(@ENTRY, 0, 0, 0, 0, 0, 100, 0, 0, 0, 3000, 3000, 11, 90938, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "When in combat and timer at the begining between 0 and 0 ms (and later repeats every 3000 and 3000 ms) - Self: Cast spell Bloodbolt (90938) on Victim // "),
(@ENTRY, 0, 1, 0, 0, 0, 100, 0, 7000, 7000, 60000, 60000, 11, 90932, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, "When in combat and timer at the begining between 7000 and 7000 ms (and later repeats every 60000 and 60000 ms) - Self: Cast spell Ragezone (90932) on Random hostile // ");

View File

@@ -4193,7 +4193,7 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_100_YARDS);
});
// "Captain" Coikie
// "Captain" Cookie
// Rotten Aura
ApplySpellFix({
89735,
@@ -4215,6 +4215,18 @@ void SpellMgr::LoadSpellInfoCorrections()
{
spellInfo->Effects[EFFECT_0].MiscValue = 200;
});
// Summon Defias
ApplySpellFix({
92616,
92617,
92618
}, [](SpellInfo* spellInfo)
{
spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DEST);
spellInfo->AttributesEx2 |= SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS;
});
// END OF DEADMINES SPELLS
//
@@ -4349,6 +4361,21 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->AttributesEx8 |= SPELL_ATTR8_DONT_RESET_PERIODIC_TIMER;
});
// Destruction Protocoll
ApplySpellFix({ 77437 }, [](SpellInfo* spellInfo)
{
spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_INITIAL_AGGRO;
});
// Crumbling Ruin
ApplySpellFix({
75609,
91206
}, [](SpellInfo* spellInfo)
{
spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_50000_YARDS);
});
// Solar Fire
ApplySpellFix({ 89133, 89878 }, [](SpellInfo* spellInfo)
{

View File

@@ -18,6 +18,7 @@
#include "ScriptMgr.h"
#include "deadmines.h"
#include "InstanceScript.h"
#include "GridNotifiers.h"
#include "MotionMaster.h"
#include "MovementTypedefs.h"
#include "MoveSplineInit.h"
@@ -33,7 +34,9 @@ enum Texts
// Vanessa VanCleef
SAY_AGGRO = 0,
SAY_SLAY = 1,
SAY_SUMMON_DEFIAS_SUPPORT = 2,
SAY_SUMMON_DEFIAS_REINFORCEMENT = 2,
SAY_DETONATION_1 = 3,
SAY_ANNOUNCE_DETONATION_1 = 4,
// Vanessa VanCleef Intro
SAY_ANNOUNCE_NOISE_FROM_ABOVE = 0,
@@ -51,16 +54,23 @@ enum Texts
enum Spells
{
// Vanessa VanCleef
SPELL_VANESSA_ACHIEVEMENT_SPELL = 95654,
SPELL_CLEAR_ALL_DEBUFFS = 34098,
SPELL_DEFLECTION = 92614,
SPELL_DEADLY_BLADES = 92622,
SPELL_BACK_SLASH = 92619,
SPELL_BACKSLASH = 92619,
SPELL_SUMMON_ENFORCER = 92616,
SPELL_SUMMON_SHADOWGUARD = 92618,
SPELL_SUMMON_BLOOD_WIZARD = 92617,
// General Purpose Bunny JMF
SPELL_FIERY_BLAZE = 93484,
// Vanessa VanCleef Nightmare
SPELL_SITTING = 89279,
SPELL_NOXIOUS_CONCOCTION = 92100,
SPELL_NIGHTMARE_ELIXIR = 92113,
SPELL_VANESSAS_BLACKOUT_AURA = 92120,
SPELL_VANESSAS_BLACKOUT_AURA = 92120
};
enum Events
@@ -68,6 +78,13 @@ enum Events
// Vanessa VanCleef
EVENT_DEFLECTION = 1,
EVENT_DEADLY_BLADES,
EVENT_SUMMON_DEFIAS_REINFORCEMENT,
EVENT_TALK_SUMMON_REINFORCEMENT,
EVENT_SUMMON_ENTRANCE_FIRE,
EVENT_FACE_TO_DECK,
EVENT_TALK_DETONATION_1,
EVENT_ANNOUNCE_DETONATION_1,
EVENT_SUMMON_ROPES,
// Vanessa VanCleef Intro
EVENT_ANNOUNCE_NOISE_FROM_ABOVE,
@@ -88,10 +105,35 @@ enum Events
// A Note from Vanessa VanCleef
EVENT_TALK_NOTE_FALLS_TO_THE_GROUND,
// Rope
EVENT_START_SWING
};
enum DefiasReinforcements
{
REINFORCEMENT_ENFORCER = 0,
REINFORCEMENT_SHADOWGUARD = 1,
REINFORCEMENT_BLOOD_WIZARD = 2
};
uint32 defiasReinforcementSpells[] =
{
SPELL_SUMMON_ENFORCER,
SPELL_SUMMON_SHADOWGUARD,
SPELL_SUMMON_BLOOD_WIZARD
};
Position const defiasReinforcementPositions[] =
{
{ -79.9097f, -824.49f, 39.7954f },
{ -79.8455f, -815.483f, 39.7768f },
{ -87.2257f, -819.66f, 39.2205f }
};
Position const vanessaIntroJumpPos = { -64.5677f, -820.161f, 41.123f };
Position const vanessaIntroWalkPos = { -65.30209f, -838.0382f, 41.11562f };
Position const vanessaDetonationJumpPos = { -53.09028f, -819.5538f, 51.42455f };
class boss_vanessa_van_cleef : public CreatureScript
{
@@ -100,10 +142,21 @@ class boss_vanessa_van_cleef : public CreatureScript
struct boss_vanessa_van_cleefAI : public BossAI
{
boss_vanessa_van_cleefAI(Creature* creature) : BossAI(creature, DATA_VANESSA_VAN_CLEEF) { }
boss_vanessa_van_cleefAI(Creature* creature) : BossAI(creature, DATA_VANESSA_VAN_CLEEF)
{
Initialize();
}
void Initialize()
{
_currentReinforcement = REINFORCEMENT_ENFORCER;
_detonationCounter = 0;
_talkReinforcement = false;
}
void Reset() override
{
Initialize();
_Reset();
}
@@ -111,8 +164,13 @@ class boss_vanessa_van_cleef : public CreatureScript
{
Talk(SAY_AGGRO);
_JustEngagedWith();
DoCastAOE(SPELL_VANESSA_ACHIEVEMENT_SPELL, true);
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
events.ScheduleEvent(EVENT_DEFLECTION, Seconds(11));
events.ScheduleEvent(EVENT_DEADLY_BLADES, Seconds(12));
events.ScheduleEvent(EVENT_SUMMON_ENTRANCE_FIRE, Seconds(12) + Milliseconds(500));
events.ScheduleEvent(EVENT_SUMMON_DEFIAS_REINFORCEMENT, Seconds(14) + Milliseconds(500));
}
void JustDied(Unit* /*killer*/) override
@@ -126,7 +184,6 @@ class boss_vanessa_van_cleef : public CreatureScript
_EnterEvadeMode();
summons.DespawnAll();
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
instance->SetData(DATA_VANESSA_VAN_CLEEF_ENCOUNTER, FAIL);
_DespawnAtEvade();
}
@@ -136,6 +193,40 @@ class boss_vanessa_van_cleef : public CreatureScript
Talk(SAY_SLAY);
}
void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override
{
if (me->HealthBelowPct(50) && _detonationCounter == 0)
{
me->AttackStop();
me->SetReactState(REACT_PASSIVE);
me->RemoveAurasDueToSpell(SPELL_DEADLY_BLADES);
events.Reset();
DoCastSelf(SPELL_CLEAR_ALL_DEBUFFS, true);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
float distance = me->GetDistance(vanessaDetonationJumpPos);
me->GetMotionMaster()->MoveJump(vanessaDetonationJumpPos, distance, 27.96389f);
events.ScheduleEvent(EVENT_FACE_TO_DECK, Seconds(1) + Milliseconds(200));
_detonationCounter++;
}
}
void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() != NPC_ROPE && summon->GetEntry() != NPC_GENERAL_PURPOSE_DUMMY_JMF)
BossAI::JustSummoned(summon);
else
summons.Summon(summon);
switch (summon->GetEntry())
{
case NPC_GENERAL_PURPOSE_DUMMY_JMF:
summon->CastSpell(summon, SPELL_FIERY_BLAZE, true);
break;
default:
break;
}
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
@@ -154,12 +245,65 @@ class boss_vanessa_van_cleef : public CreatureScript
if (me->HealthAbovePct(25))
DoCastSelf(SPELL_DEFLECTION);
break;
case EVENT_DEADLY_BLADES:
DoCastSelf(SPELL_DEADLY_BLADES);
break;
case EVENT_SUMMON_DEFIAS_REINFORCEMENT:
{
if (me->HealthAbovePct(50))
{
if (!_talkReinforcement)
{
events.ScheduleEvent(EVENT_TALK_SUMMON_REINFORCEMENT, Milliseconds(200));
_talkReinforcement = true;
}
float x = defiasReinforcementPositions[_currentReinforcement].m_positionX;
float y = defiasReinforcementPositions[_currentReinforcement].m_positionY;
float z = defiasReinforcementPositions[_currentReinforcement].m_positionZ;
me->CastSpell(x, y, z, defiasReinforcementSpells[_currentReinforcement], true);
_currentReinforcement++;
if (_currentReinforcement > REINFORCEMENT_BLOOD_WIZARD)
_currentReinforcement = REINFORCEMENT_ENFORCER;
events.Repeat(Seconds(10));
}
break;
}
case EVENT_TALK_SUMMON_REINFORCEMENT:
Talk(SAY_SUMMON_DEFIAS_REINFORCEMENT);
break;
case EVENT_SUMMON_ENTRANCE_FIRE:
for (uint8 i = 0; i < 6; i++)
DoSummon(NPC_GENERAL_PURPOSE_DUMMY_JMF, VanessaEntranceFirePos[i], 0, TEMPSUMMON_MANUAL_DESPAWN);
break;
case EVENT_FACE_TO_DECK:
me->SetFacingTo(2.932153f);
events.ScheduleEvent(EVENT_TALK_DETONATION_1, Milliseconds(200));
break;
case EVENT_TALK_DETONATION_1:
Talk(SAY_DETONATION_1);
events.ScheduleEvent(EVENT_ANNOUNCE_DETONATION_1, Seconds(3) + Milliseconds(600));
break;
case EVENT_ANNOUNCE_DETONATION_1:
Talk(SAY_ANNOUNCE_DETONATION_1);
events.ScheduleEvent(EVENT_SUMMON_ROPES, Milliseconds(700));
break;
case EVENT_SUMMON_ROPES:
instance->SetData(DATA_SUMMON_ROPES, 0);
break;
default:
break;
}
}
DoMeleeAttackIfReady();
}
private:
uint8 _currentReinforcement;
uint8 _detonationCounter;
bool _talkReinforcement;
};
CreatureAI* GetAI(Creature *creature) const override
@@ -325,9 +469,126 @@ class npc_vanessa_note_from_vanessa : public CreatureScript
}
};
class spell_vanessa_backslash_targeting : public SpellScriptLoader
{
public:
spell_vanessa_backslash_targeting() : SpellScriptLoader("spell_vanessa_backslash_targeting") { }
class spell_vanessa_backslash_targeting_SpellScript : public SpellScript
{
PrepareSpellScript(spell_vanessa_backslash_targeting_SpellScript);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_BACKSLASH });
}
void HandleHit(SpellEffIndex effIndex)
{
GetCaster()->CastSpell(GetHitUnit(), GetSpellInfo()->Effects[effIndex].BasePoints, true);
}
void FilterTargets(std::list<WorldObject*>& targets)
{
targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_BACKSLASH));
if (!targets.empty())
Trinity::Containers::RandomResize(targets, 1);
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_vanessa_backslash_targeting_SpellScript::HandleHit, EFFECT_0, SPELL_EFFECT_DUMMY);
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_vanessa_backslash_targeting_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
SpellScript* GetSpellScript() const override
{
return new spell_vanessa_backslash_targeting_SpellScript();
}
};
class npc_vanessa_rope : public CreatureScript
{
public:
npc_vanessa_rope() : CreatureScript("npc_vanessa_rope") { }
struct npc_vanessa_ropeAI : public ScriptedAI
{
npc_vanessa_ropeAI(Creature* creature) : ScriptedAI(creature) { }
void PassengerBoarded(Unit* passenger, int8 /*seatId*/, bool apply) override
{
if (!passenger)
return;
if (apply && passenger->GetTypeId() == TYPEID_PLAYER)
{
me->RemoveAurasDueToSpell(SPELL_CLICK_ME);
_events.ScheduleEvent(EVENT_START_SWING, Milliseconds(800));
}
}
void UpdateAI(uint32 diff) override
{
_events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_START_SWING:
for (uint8 i = 0; i < 5; i++)
if (RopePos[i].GetExactDist(me->GetPosition()) <= 1.0f)
{
me->DespawnOrUnsummon(Seconds(8) + Milliseconds(900));
me->SetSpeed(MOVE_RUN, 22.0f); // Don't ask me why but this is the correct speed to be synch with sniff behaivior
switch (i)
{
case 0:
me->GetMotionMaster()->MoveSmoothPath(0, RopePath1, 5, false, true);
break;
case 1:
me->GetMotionMaster()->MoveSmoothPath(0, RopePath2, 5, false, true);
break;
case 2:
me->GetMotionMaster()->MoveSmoothPath(0, RopePath3, 5, false, true);
break;
case 3:
me->GetMotionMaster()->MoveSmoothPath(0, RopePath4, 5, false, true);
break;
case 4:
me->GetMotionMaster()->MoveSmoothPath(0, RopePath5, 5, false, true);
break;
}
break;
}
break;
default:
break;
}
}
}
private:
EventMap _events;
};
CreatureAI* GetAI(Creature* creature) const override
{
return GetDeadminesAI<npc_vanessa_ropeAI>(creature);
}
};
void AddSC_boss_vanessa_van_cleef()
{
new boss_vanessa_van_cleef();
new npc_vanessa_vanessa_van_cleef();
new npc_vanessa_note_from_vanessa();
new npc_vanessa_rope();
new spell_vanessa_backslash_targeting();
}

View File

@@ -664,6 +664,35 @@ class spell_deadmines_magma_trap_throw_to_location : public SpellScriptLoader
}
};
class spell_deadmines_bloodbath : public SpellScriptLoader
{
public:
spell_deadmines_bloodbath() : SpellScriptLoader("spell_deadmines_bloodbath") { }
class spell_deadmines_bloodbath_AuraScript : public AuraScript
{
PrepareAuraScript(spell_deadmines_bloodbath_AuraScript);
void HandleTick(AuraEffect const* /*aurEff*/)
{
PreventDefaultAction();
if (Unit* caster = GetCaster())
if (caster->GetVictim())
caster->CastSpell(GetCaster()->GetVictim(), GetSpellInfo()->Effects[EFFECT_1].TriggerSpell, true);
}
void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_deadmines_bloodbath_AuraScript::HandleTick, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
}
};
AuraScript* GetAuraScript() const
{
return new spell_deadmines_bloodbath_AuraScript();
}
};
void AddSC_deadmines()
{
new npc_deadmines_defias_watcher();
@@ -675,4 +704,5 @@ void AddSC_deadmines()
new spell_deadmines_on_fire();
new spell_deadmines_ride_magma_vehicle();
new spell_deadmines_magma_trap_throw_to_location();
new spell_deadmines_bloodbath();
}

View File

@@ -50,7 +50,8 @@ enum DMDataTypes
DATA_VANESSA_VAN_CLEEF_NIGHTMARE = 21,
DATA_EMME_HARRINGTON = 22,
DATA_ERIK_HARRINGTON = 23,
DATA_CALISSA_HARRINGTON = 24
DATA_CALISSA_HARRINGTON = 24,
DATA_SUMMON_ROPES = 25
};
enum DMCreatures
@@ -131,7 +132,9 @@ enum DMCreatures
NPC_ENRAGED_WORGEN = 49532,
NPC_JAMES_HARRINGTON = 49539,
NPC_CALISSA_HARRINGTON = 49536,
NPC_DEFIAS_SHADOWGUARD = 49852,
NPC_ROPE = 49550,
NPC_VANESSAS_ROPE_ANCHOR = 49552,
};
enum DMGameObjects
@@ -161,6 +164,7 @@ enum DMSpells
SPELL_MOLTEN_MAGMA = 92424,
SPELL_FORCE_MAGMA_TRAP_THROW = 92489,
SPELL_ROPE_BEAM = 43785,
SPELL_CLICK_ME = 95527,
SPELL_STEAM_VENT = 92399,
SPELL_ADRENALINE = 92604,
SPELL_NIGHTMARE_SLOW = 92559,
@@ -402,6 +406,79 @@ Position const LightningPlatterCenterPos[] =
{ -143.004f, -574.9209f, 19.1443f }
};
Position const VanessaEntranceFirePos[] =
{
{ -38.11458f, -795.2952f, 39.45137f, 3.926991f },
{ -64.02257f, -797.4323f, 39.12309f, 3.926991f },
{ -46.48438f, -791.8073f, 39.12098f, 3.926991f },
{ -75.50694f, -787.1597f, 39.16325f, 3.926991f },
{ -66.18229f, -789.2778f, 39.78834f, 3.926991f },
{ -70.9809f, -795.5f, 39.14447f, 3.926991f }
};
Position const RopePos[] =
{
{ -62.17014f, -839.8438f, 41.48514f, 5.044002f },
{ -64.97049f, -840.0087f, 41.22668f, 4.834562f },
{ -67.79166f, -840.1736f, 40.96664f, 4.712389f },
{ -70.62153f, -840.0104f, 40.71846f, 4.537856f },
{ -73.42361f, -839.8646f, 40.47259f, 4.34587f }
};
Position const RopeAnchorPos[] =
{
{ -63.6059f, -862.7864f, 202.7301f, 4.607669f },
{ -64.21702f, -866.1823f, 195.3946f, 4.607669f },
{ -69.15452f, -868.9636f, 195.2482f, 4.607669f },
{ -71.11459f, -868.4636f, 200.7708f, 4.607669f },
{ -74.29688f, -877.1007f, 195.0443f, 4.607669f }
};
Position const RopePath1[] =
{
{ -59.18403f, -877.3125f, 35.78355f },
{ -58.08333f, -923.9757f, 50.83706f },
{ -52.68403f, -922.8768f, 50.83706f },
{ -58.59201f, -877.1684f, 38.01407f },
{ -62.86285f, -836.3472f, 46.62854f }
};
Position const RopePath2[] =
{
{ -62.23438f, -877.2969f, 35.78355f },
{ -66.63021f, -924.0417f, 50.83706f },
{ -60.85938f, -924.0399f, 50.83706f },
{ -62.03472f, -877.4514f, 38.01407f },
{ -64.96875f, -836.7847f, 46.62854f }
};
Position const RopePath3[] =
{
{ -67.98264f, -877.3785f, 35.78355f },
{ -75.66493f, -924.3958f, 50.83706f },
{ -69.01215f, -923.9114f, 50.83706f },
{ -67.80903f, -877.0972f, 38.01407f },
{ -68.02778f, -836.6268f, 46.62854f }
};
Position const RopePath4[] =
{
{ -74.47049f, -878.3611f, 35.78355f },
{ -82.86111f, -922.4688f, 50.83706f },
{ -77.72396f, -924.1285f, 50.83706f },
{ -71.76563f, -877.132f, 38.01407f },
{ -70.55209f, -836.6754f, 46.62854f }
};
Position const RopePath5[] =
{
{ -77.625f, -877.75f, 35.78355f },
{ -85.46528f, -922.4965f, 50.83706f },
{ -91.52431f, -921.3768f, 50.83706f },
{ -78.06944f, -875.9445f, 38.01407f },
{ -73.34549f, -836.3733f, 46.62854f }
};
template<class AI>
AI* GetDeadminesAI(Creature* creature)
{

View File

@@ -129,6 +129,7 @@ class instance_deadmines : public InstanceMapScript
_deadEnragedWorgen = 0;
_firstCookieSpawn = true;
_noteSpawnChecked = false;
_ropesSpawned = false;
}
void OnPlayerEnter(Player* player) override
@@ -143,6 +144,13 @@ class instance_deadmines : public InstanceMapScript
events.ScheduleEvent(EVENT_SUMMON_NOTE_FROM_VANESSA, Milliseconds(1));
_noteSpawnChecked = true;
}
if (!_ropesSpawned)
{
for (uint8 i = 0; i < 5; i++)
if (Creature* anchor = instance->SummonCreature(NPC_VANESSAS_ROPE_ANCHOR, RopeAnchorPos[i]))
_ropeAnchorGuidSet.insert(anchor->GetGUID());
}
}
void OnCreatureCreate(Creature* creature) override
@@ -225,6 +233,7 @@ class instance_deadmines : public InstanceMapScript
break;
case NPC_VANESSAS_TRAP_BUNNY:
case NPC_VANESSA_ANCHOR_BUNNY_JMF:
case NPC_VANESSAS_ROPE_ANCHOR:
creature->setActive(true);
creature->SetFarVisible(true);
break;
@@ -257,6 +266,16 @@ class instance_deadmines : public InstanceMapScript
case NPC_ENRAGED_WORGEN:
_ripsnarlNightareGuidSet.insert(creature->GetGUID());
break;
case NPC_DEFIAS_SHADOWGUARD:
creature->setPowerType(POWER_ENERGY);
creature->SetMaxPower(POWER_ENERGY, 100);
creature->SetPower(POWER_ENERGY, 100);
break;
case NPC_ROPE:
creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
if (Creature* vanessa = GetCreature(DATA_VANESSA_VAN_CLEEF))
vanessa->AI()->JustSummoned(creature);
break;
default:
break;
}
@@ -522,6 +541,15 @@ class instance_deadmines : public InstanceMapScript
trapBunny->AI()->DoAction(ACTION_EJECT_PLAYERS);
}
break;
case DATA_SUMMON_ROPES:
{
uint8 i = 0;
for (auto itr = _ropeAnchorGuidSet.begin(); itr != _ropeAnchorGuidSet.end(); itr++, i++)
if (Creature* anchor = instance->GetCreature((*itr)))
if (Creature* rope = instance->SummonCreature(NPC_ROPE, RopePos[i]))
anchor->CastSpell(rope, SPELL_ROPE_BEAM);
break;
}
default:
break;
}
@@ -815,8 +843,10 @@ class instance_deadmines : public InstanceMapScript
GuidSet _helixNightmareGuidSet;
GuidSet _mechanicalNightmareGuidSet;
GuidSet _ripsnarlNightareGuidSet;
GuidSet _ropeAnchorGuidSet;
bool _firstCookieSpawn;
bool _noteSpawnChecked;
bool _ropesSpawned;
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override