mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-13 09:17:18 +00:00
fix(Scripts/Quest): improved Overwhelmed! (#10387)
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1643290179356130100');
|
||||
|
||||
-- npc kneel
|
||||
DELETE FROM `creature_addon` WHERE (`guid` IN (102453, 102454, 102455, 102457, 102458, 102459, 102462, 102463, 102464, 102466));
|
||||
INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES
|
||||
(102453, 0, 0, 8, 257, 0, 0, NULL),
|
||||
(102454, 0, 0, 8, 257, 0, 0, NULL),
|
||||
(102455, 0, 0, 8, 257, 0, 0, NULL),
|
||||
(102457, 0, 0, 8, 257, 0, 0, NULL),
|
||||
(102458, 0, 0, 8, 257, 0, 0, NULL),
|
||||
(102459, 0, 0, 8, 257, 0, 0, NULL),
|
||||
(102462, 0, 0, 8, 257, 0, 0, NULL),
|
||||
(102463, 0, 0, 8, 257, 0, 0, NULL),
|
||||
(102464, 0, 0, 8, 257, 0, 0, NULL),
|
||||
(102466, 0, 0, 8, 257, 0, 0, NULL);
|
||||
|
||||
-- npc Wounded Skirmisher
|
||||
DELETE FROM `creature` WHERE (`guid` IN (102453, 102454, 102455, 102456, 102457, 102458, 102459, 102460, 102461, 102462, 102463, 102464, 102466, 102467, 102469));
|
||||
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`) VALUES
|
||||
(102453, 27463, 0, 0, 571, 0, 0, 1, 1, 1, 4229.39, -2981.89, 283.151, 1.61792, 300, 0, 0, 9940, 0, 0, 0, 0, 0, '', 0),
|
||||
(102454, 27463, 0, 0, 571, 0, 0, 1, 1, 1, 4134.07, -2897.23, 279.272, 5.12241, 300, 0, 0, 9940, 0, 0, 0, 0, 0, '', 0),
|
||||
(102455, 27463, 0, 0, 571, 0, 0, 1, 1, 1, 4123.8, -2835.11, 284.196, 0.610865, 300, 0, 0, 9940, 0, 0, 0, 0, 0, '', 0),
|
||||
(102456, 27463, 0, 0, 571, 0, 0, 1, 1, 1, 4000.98, -2847.93, 273.325, 6.03884, 300, 0, 0, 9940, 0, 0, 0, 0, 0, '', 0),
|
||||
(102457, 27463, 0, 0, 571, 0, 0, 1, 1, 1, 4185.56, -2961.08, 283.319, 0.903392, 300, 0, 0, 9940, 0, 0, 0, 0, 0, '', 0),
|
||||
(102458, 27463, 0, 0, 571, 0, 0, 1, 1, 1, 4017.75, -2835.31, 279.277, 1.47867, 300, 0, 0, 9940, 0, 0, 0, 0, 0, '', 0),
|
||||
(102459, 27463, 0, 0, 571, 0, 0, 1, 1, 1, 4073.33, -2906.89, 278.332, 6.10865, 300, 0, 0, 9940, 0, 0, 0, 0, 0, '', 0),
|
||||
(102460, 27463, 0, 0, 571, 0, 0, 1, 1, 1, 4085.95, -2846.31, 286.589, 2.94961, 300, 0, 0, 9940, 0, 0, 0, 0, 0, '', 0),
|
||||
(102461, 27463, 0, 0, 571, 0, 0, 1, 1, 1, 4071.18, -2886.01, 281.6, 5.8294, 300, 0, 0, 9940, 0, 0, 0, 0, 0, '', 0),
|
||||
(102462, 27463, 0, 0, 571, 0, 0, 1, 1, 1, 4074.98, -2940.5, 276.138, 4.22481, 300, 0, 0, 9940, 0, 0, 0, 0, 0, '', 0),
|
||||
(102463, 27463, 0, 0, 571, 0, 0, 1, 1, 1, 4139.99, -3020.99, 285.459, 5.82814, 300, 0, 0, 9940, 0, 0, 0, 0, 0, '', 0),
|
||||
(102464, 27463, 0, 0, 571, 0, 0, 1, 1, 1, 4166.57, -2964.73, 283.2, 2.63745, 300, 0, 0, 9940, 0, 0, 0, 0, 0, '', 0),
|
||||
(102466, 27463, 0, 0, 571, 0, 0, 1, 1, 1, 4204.05, -3048.94, 280.839, 4.65053, 300, 0, 0, 9940, 0, 0, 0, 0, 0, '', 0),
|
||||
(102467, 27463, 0, 0, 571, 0, 0, 1, 1, 1, 4057.32, -2822.2, 288.962, 3.4383, 300, 0, 0, 9940, 0, 0, 0, 0, 0, '', 0),
|
||||
(102469, 27463, 0, 0, 571, 0, 0, 1, 1, 1, 4183.3, -2934.44, 283.114, 5.63741, 300, 0, 0, 9940, 0, 0, 0, 0, 0, '', 0);
|
||||
|
||||
-- npc Skirmisher Corpse
|
||||
DELETE FROM `creature` WHERE `guid`=91749;
|
||||
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`) VALUES
|
||||
(91749, 27457, 0, 0, 571, 0, 0, 1, 1, 1, 4137.9, -3008.35, 285.667, 5.54491, 300, 0, 0, 4399, 0, 0, 0, 0, 0, '', 0);
|
||||
|
||||
DELETE FROM `waypoint_data` WHERE `id`=274630;
|
||||
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
|
||||
(274630, 1, 4153.06, -2928.47, 282.58, 0, 0, 1, 0, 100, 0),
|
||||
(274630, 2, 4184.53, -2909.76, 280.17, 0, 0, 1, 0, 100, 0);
|
||||
|
||||
DELETE FROM `waypoint_data` WHERE `id`=274631;
|
||||
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
|
||||
(274631, 1, 4138.41, -2950.63, 282.92, 0, 0, 1, 0, 100, 0),
|
||||
(274631, 2, 4153.06, -2928.47, 282.58, 0, 0, 1, 0, 100, 0),
|
||||
(274631, 3, 4184.53, -2909.76, 280.17, 0, 0, 1, 0, 100, 0);
|
||||
|
||||
DELETE FROM `waypoint_data` WHERE `id`=274632;
|
||||
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
|
||||
(274632, 1, 4184.53, -2909.76, 280.17, 0, 0, 1, 0, 100, 0);
|
||||
|
||||
/* implementing both conditions */
|
||||
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=48812 AND `ScriptName`='spell_renew_skirmisher';
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(48812, 'spell_renew_skirmisher');
|
||||
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=17 AND `SourceGroup`=0 AND `SourceEntry`=48812;
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
|
||||
(17,0,48812,0,0,31,1,3,27463,0,0,0,0,"","Heals a wounded skirmisher at Blue Sky Logging Ground.");
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "Common.h"
|
||||
#include "Creature.h"
|
||||
#include "UnitAI.h"
|
||||
#include "EventMap.h"
|
||||
|
||||
class WorldObject;
|
||||
class Unit;
|
||||
@@ -67,6 +68,8 @@ class CreatureAI : public UnitAI
|
||||
protected:
|
||||
Creature* const me;
|
||||
|
||||
EventMap events;
|
||||
|
||||
bool UpdateVictim();
|
||||
bool UpdateVictimWithGaze();
|
||||
|
||||
|
||||
@@ -25,37 +25,37 @@
|
||||
#include "SpellInfo.h"
|
||||
#include "SpellScript.h"
|
||||
|
||||
// Theirs
|
||||
// Theirs
|
||||
|
||||
/*######
|
||||
## Quest 12027: Mr. Floppy's Perilous Adventure
|
||||
######*/
|
||||
/*######
|
||||
## Quest 12027: Mr. Floppy's Perilous Adventure
|
||||
######*/
|
||||
|
||||
enum Floppy
|
||||
{
|
||||
// Creature
|
||||
NPC_MRFLOPPY = 26589,
|
||||
NPC_HUNGRY_WORG = 26586,
|
||||
NPC_RAVENOUS_WORG = 26590, // RWORG
|
||||
NPC_EMILY = 26588,
|
||||
NPC_MRFLOPPY = 26589,
|
||||
NPC_HUNGRY_WORG = 26586,
|
||||
NPC_RAVENOUS_WORG = 26590, // RWORG
|
||||
NPC_EMILY = 26588,
|
||||
// Quest
|
||||
QUEST_PERILOUS_ADVENTURE = 12027,
|
||||
QUEST_PERILOUS_ADVENTURE = 12027,
|
||||
// Spell
|
||||
SPELL_MRFLOPPY = 47184, // vehicle aura
|
||||
SPELL_MRFLOPPY = 47184, // vehicle aura
|
||||
// Text
|
||||
SAY_WORGHAGGRO1 = 0, // Um... I think one of those wolves is back...
|
||||
SAY_WORGHAGGRO2 = 1, // He's going for Mr. Floppy!
|
||||
SAY_WORGRAGGRO3 = 2, // Oh, no! Look, it's another wolf, and it's a biiiiiig one!
|
||||
SAY_WORGRAGGRO4 = 3, // He's gonna eat Mr. Floppy! You gotta help Mr. Floppy! You just gotta!
|
||||
SAY_RANDOMAGGRO = 4, // There's a big meanie attacking Mr. Floppy! Help!
|
||||
SAY_VICTORY1 = 5, // Let's get out of here before more wolves find us!
|
||||
SAY_VICTORY2 = 6, // Don't go toward the light, Mr. Floppy!
|
||||
SAY_VICTORY3 = 7, // Mr. Floppy, you're ok! Thank you so much for saving Mr. Floppy!
|
||||
SAY_VICTORY4 = 8, // I think I see the camp! We're almost home, Mr. Floppy! Let's go!
|
||||
TEXT_EMOTE_WP1 = 9, // Mr. Floppy revives
|
||||
TEXT_EMOTE_AGGRO = 10, // The Ravenous Worg chomps down on Mr. Floppy
|
||||
SAY_QUEST_ACCEPT = 11, // Are you ready, Mr. Floppy? Stay close to me and watch out for those wolves!
|
||||
SAY_QUEST_COMPLETE = 12 // Thank you for helping me get back to the camp. Go tell Walter that I'm safe now!
|
||||
SAY_WORGHAGGRO1 = 0, // Um... I think one of those wolves is back...
|
||||
SAY_WORGHAGGRO2 = 1, // He's going for Mr. Floppy!
|
||||
SAY_WORGRAGGRO3 = 2, // Oh, no! Look, it's another wolf, and it's a biiiiiig one!
|
||||
SAY_WORGRAGGRO4 = 3, // He's gonna eat Mr. Floppy! You gotta help Mr. Floppy! You just gotta!
|
||||
SAY_RANDOMAGGRO = 4, // There's a big meanie attacking Mr. Floppy! Help!
|
||||
SAY_VICTORY1 = 5, // Let's get out of here before more wolves find us!
|
||||
SAY_VICTORY2 = 6, // Don't go toward the light, Mr. Floppy!
|
||||
SAY_VICTORY3 = 7, // Mr. Floppy, you're ok! Thank you so much for saving Mr. Floppy!
|
||||
SAY_VICTORY4 = 8, // I think I see the camp! We're almost home, Mr. Floppy! Let's go!
|
||||
TEXT_EMOTE_WP1 = 9, // Mr. Floppy revives
|
||||
TEXT_EMOTE_AGGRO = 10, // The Ravenous Worg chomps down on Mr. Floppy
|
||||
SAY_QUEST_ACCEPT = 11, // Are you ready, Mr. Floppy? Stay close to me and watch out for those wolves!
|
||||
SAY_QUEST_COMPLETE = 12 // Thank you for helping me get back to the camp. Go tell Walter that I'm safe now!
|
||||
};
|
||||
|
||||
// emily
|
||||
@@ -84,102 +84,102 @@ public:
|
||||
|
||||
switch (waypointId)
|
||||
{
|
||||
case 9:
|
||||
if (Creature* Mrfloppy = GetClosestCreatureWithEntry(me, NPC_MRFLOPPY, 100.0f))
|
||||
_mrfloppyGUID = Mrfloppy->GetGUID();
|
||||
break;
|
||||
case 10:
|
||||
if (ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
{
|
||||
Talk(SAY_WORGHAGGRO1);
|
||||
if (Creature* worg = me->SummonCreature(NPC_HUNGRY_WORG, me->GetPositionX() + 5, me->GetPositionY() + 2, me->GetPositionZ() + 1, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000))
|
||||
if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
{
|
||||
worg->SetReactState(REACT_AGGRESSIVE);
|
||||
worg->GetAI()->AttackStart(Mrfloppy);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 11:
|
||||
if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
|
||||
break;
|
||||
case 17:
|
||||
if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
Mrfloppy->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
|
||||
Talk(SAY_WORGRAGGRO3);
|
||||
if (Creature* RWORG = me->SummonCreature(NPC_RAVENOUS_WORG, me->GetPositionX() + 10, me->GetPositionY() + 8, me->GetPositionZ() + 2, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000))
|
||||
{
|
||||
RWORG->SetReactState(REACT_PASSIVE);
|
||||
RWORG->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
RWORG->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED);
|
||||
_RavenousworgGUID = RWORG->GetGUID();
|
||||
}
|
||||
break;
|
||||
case 18:
|
||||
if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
{
|
||||
if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
|
||||
RWORG->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ());
|
||||
me->AddAura(SPELL_MRFLOPPY, Mrfloppy);
|
||||
}
|
||||
break;
|
||||
case 19:
|
||||
if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
{
|
||||
if (Mrfloppy->HasAura(SPELL_MRFLOPPY))
|
||||
case 9:
|
||||
if (Creature* Mrfloppy = GetClosestCreatureWithEntry(me, NPC_MRFLOPPY, 100.0f))
|
||||
_mrfloppyGUID = Mrfloppy->GetGUID();
|
||||
break;
|
||||
case 10:
|
||||
if (ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
{
|
||||
Talk(SAY_WORGHAGGRO1);
|
||||
if (Creature* worg = me->SummonCreature(NPC_HUNGRY_WORG, me->GetPositionX() + 5, me->GetPositionY() + 2, me->GetPositionZ() + 1, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000))
|
||||
if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
{
|
||||
if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
|
||||
Mrfloppy->EnterVehicle(RWORG);
|
||||
worg->SetReactState(REACT_AGGRESSIVE);
|
||||
worg->GetAI()->AttackStart(Mrfloppy);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 20:
|
||||
}
|
||||
break;
|
||||
case 11:
|
||||
if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
|
||||
break;
|
||||
case 17:
|
||||
if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
Mrfloppy->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
|
||||
Talk(SAY_WORGRAGGRO3);
|
||||
if (Creature* RWORG = me->SummonCreature(NPC_RAVENOUS_WORG, me->GetPositionX() + 10, me->GetPositionY() + 8, me->GetPositionZ() + 2, 3.229f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000))
|
||||
{
|
||||
RWORG->SetReactState(REACT_PASSIVE);
|
||||
RWORG->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
RWORG->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED);
|
||||
_RavenousworgGUID = RWORG->GetGUID();
|
||||
}
|
||||
break;
|
||||
case 18:
|
||||
if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
{
|
||||
if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
|
||||
RWORG->HandleEmoteCommand(34);
|
||||
break;
|
||||
case 21:
|
||||
if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
RWORG->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ());
|
||||
me->AddAura(SPELL_MRFLOPPY, Mrfloppy);
|
||||
}
|
||||
break;
|
||||
case 19:
|
||||
if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
{
|
||||
if (Mrfloppy->HasAura(SPELL_MRFLOPPY))
|
||||
{
|
||||
if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
|
||||
{
|
||||
Unit::Kill(RWORG, Mrfloppy);
|
||||
Mrfloppy->ExitVehicle();
|
||||
RWORG->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
RWORG->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED);
|
||||
RWORG->AI()->AttackStart(player);
|
||||
Talk(SAY_VICTORY2);
|
||||
}
|
||||
Mrfloppy->EnterVehicle(RWORG);
|
||||
}
|
||||
break;
|
||||
case 22:
|
||||
if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
}
|
||||
break;
|
||||
case 20:
|
||||
if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
|
||||
RWORG->HandleEmoteCommand(34);
|
||||
break;
|
||||
case 21:
|
||||
if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
{
|
||||
if (Creature* RWORG = ObjectAccessor::GetCreature(*me, _RavenousworgGUID))
|
||||
{
|
||||
if (Mrfloppy->isDead())
|
||||
{
|
||||
me->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ());
|
||||
Mrfloppy->setDeathState(ALIVE);
|
||||
Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
|
||||
Talk(SAY_VICTORY3);
|
||||
}
|
||||
Unit::Kill(RWORG, Mrfloppy);
|
||||
Mrfloppy->ExitVehicle();
|
||||
RWORG->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
RWORG->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED);
|
||||
RWORG->AI()->AttackStart(player);
|
||||
Talk(SAY_VICTORY2);
|
||||
}
|
||||
break;
|
||||
case 24:
|
||||
if (player)
|
||||
}
|
||||
break;
|
||||
case 22:
|
||||
if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
{
|
||||
if (Mrfloppy->isDead())
|
||||
{
|
||||
player->GroupEventHappens(QUEST_PERILOUS_ADVENTURE, me);
|
||||
Talk(SAY_QUEST_COMPLETE, player);
|
||||
me->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ());
|
||||
Mrfloppy->setDeathState(ALIVE);
|
||||
Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
|
||||
Talk(SAY_VICTORY3);
|
||||
}
|
||||
me->SetWalk(false);
|
||||
break;
|
||||
case 25:
|
||||
Talk(SAY_VICTORY4);
|
||||
break;
|
||||
case 27:
|
||||
me->DisappearAndDie();
|
||||
if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
Mrfloppy->DisappearAndDie();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 24:
|
||||
if (player)
|
||||
{
|
||||
player->GroupEventHappens(QUEST_PERILOUS_ADVENTURE, me);
|
||||
Talk(SAY_QUEST_COMPLETE, player);
|
||||
}
|
||||
me->SetWalk(false);
|
||||
break;
|
||||
case 25:
|
||||
Talk(SAY_VICTORY4);
|
||||
break;
|
||||
case 27:
|
||||
me->DisappearAndDie();
|
||||
if (Creature* Mrfloppy = ObjectAccessor::GetCreature(*me, _mrfloppyGUID))
|
||||
Mrfloppy->DisappearAndDie();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -506,66 +506,204 @@ enum Skirmisher
|
||||
{
|
||||
// Quest
|
||||
QUEST_OVERWHELMED = 12288,
|
||||
|
||||
// Spell
|
||||
SPELL_RENEW_SKIRMISHER = 48812,
|
||||
SPELL_KILL_CREDIT = 48813,
|
||||
SPELL_CLEAVE = 15496,
|
||||
SPELL_HAMSTRING = 9080,
|
||||
SPELL_MORTAL_STRIKE = 32736,
|
||||
|
||||
// Text
|
||||
SAY_RANDOM = 0
|
||||
SAY_RANDOM = 0,
|
||||
|
||||
// EVENT
|
||||
EVENT_WOUNDED_MOVE = 1,
|
||||
EVENT_CLEAVE = 2,
|
||||
EVENT_HAMSTRING = 3,
|
||||
EVENT_MORTAL_STRIKE = 4,
|
||||
|
||||
// Waypoints
|
||||
WOUNDED_MOVE_1 = 274630,
|
||||
WOUNDED_MOVE_2 = 274631,
|
||||
WOUNDED_MOVE_3 = 274632
|
||||
};
|
||||
|
||||
class npc_wounded_skirmisher : public CreatureScript
|
||||
struct npc_wounded_skirmisher : public CreatureAI
|
||||
{
|
||||
public:
|
||||
npc_wounded_skirmisher() : CreatureScript("npc_wounded_skirmisher") { }
|
||||
|
||||
struct npc_wounded_skirmisherAI : public ScriptedAI
|
||||
npc_wounded_skirmisher(Creature* creature) : CreatureAI(creature)
|
||||
{
|
||||
npc_wounded_skirmisherAI(Creature* creature) : ScriptedAI(creature) { }
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_despawnTimer = 5000;
|
||||
_playerGUID.Clear();
|
||||
}
|
||||
void Initialize()
|
||||
{
|
||||
me->SetReactState(REACT_DEFENSIVE);
|
||||
}
|
||||
|
||||
void MovementInform(uint32, uint32 id) override
|
||||
{
|
||||
if (id == 1)
|
||||
me->DespawnOrUnsummon(_despawnTimer);
|
||||
}
|
||||
void Reset() override
|
||||
{
|
||||
Initialize();
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
}
|
||||
|
||||
void SpellHit(Unit* caster, SpellInfo const* spell) override
|
||||
void EnterCombat(Unit* /*who*/) override
|
||||
{
|
||||
events.ScheduleEvent(EVENT_CLEAVE, urand(1000, 7000));
|
||||
events.ScheduleEvent(EVENT_HAMSTRING, urand(5000, 12000));
|
||||
events.ScheduleEvent(EVENT_MORTAL_STRIKE, urand(5000, 10000));
|
||||
}
|
||||
|
||||
void SpellHit(Unit* caster, SpellInfo const* spell) override
|
||||
{
|
||||
Player* playerCaster = caster->ToPlayer();
|
||||
if (!playerCaster)
|
||||
return;
|
||||
|
||||
if (spell->Id == SPELL_RENEW_SKIRMISHER && playerCaster->GetQuestStatus(QUEST_OVERWHELMED) == QUEST_STATUS_INCOMPLETE)
|
||||
{
|
||||
if (spell->Id == SPELL_RENEW_SKIRMISHER && caster->GetTypeId() == TYPEID_PLAYER
|
||||
&& caster->ToPlayer()->GetQuestStatus(QUEST_OVERWHELMED) == QUEST_STATUS_INCOMPLETE)
|
||||
me->SetFacingToObject(caster);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
Talk(SAY_RANDOM, caster);
|
||||
DoCast(caster, SPELL_KILL_CREDIT);
|
||||
|
||||
if (!me->IsStandState())
|
||||
{
|
||||
DoCast(caster, SPELL_KILL_CREDIT);
|
||||
Talk(SAY_RANDOM, caster);
|
||||
if (me->IsStandState())
|
||||
me->GetMotionMaster()->MovePoint(1, me->GetPositionX() + 7, me->GetPositionY() + 7, me->GetPositionZ());
|
||||
else
|
||||
{
|
||||
me->SetStandState(UNIT_STAND_STATE_STAND);
|
||||
me->DespawnOrUnsummon(_despawnTimer);
|
||||
}
|
||||
me->SetStandState(UNIT_STAND_STATE_STAND);
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_CHEER);
|
||||
events.ScheduleEvent(EVENT_WOUNDED_MOVE, 3000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 /*diff*/) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
private:
|
||||
ObjectGuid _playerGUID;
|
||||
uint32 _despawnTimer;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
return new npc_wounded_skirmisherAI(creature);
|
||||
events.Update(diff);
|
||||
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case EVENT_WOUNDED_MOVE:
|
||||
if (me->GetPositionY() == -2835.11f)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
|
||||
me->DespawnOrUnsummon(20000);
|
||||
}
|
||||
if (me->GetPositionY() == -2981.89f)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
|
||||
me->DespawnOrUnsummon(18000);
|
||||
}
|
||||
if (me->GetPositionY() == -2934.44f)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
|
||||
me->DespawnOrUnsummon(9000);
|
||||
}
|
||||
if (me->GetPositionY() == -3020.99f)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
|
||||
me->DespawnOrUnsummon(22000);
|
||||
}
|
||||
if (me->GetPositionY() == -2964.73f)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_2, false);
|
||||
me->DespawnOrUnsummon(15000);
|
||||
}
|
||||
if (me->GetPositionY() == -2940.50f)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
|
||||
me->DespawnOrUnsummon(20000);
|
||||
}
|
||||
if (me->GetPositionY() == -2847.93f)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
|
||||
me->DespawnOrUnsummon(30000);
|
||||
}
|
||||
if (me->GetPositionY() == -2835.31f)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
|
||||
me->DespawnOrUnsummon(27000);
|
||||
}
|
||||
if (me->GetPositionY() == -2822.20f)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
|
||||
me->DespawnOrUnsummon(25000);
|
||||
}
|
||||
if (me->GetPositionY() == -2846.31f)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false);
|
||||
me->DespawnOrUnsummon(21000);
|
||||
}
|
||||
if (me->GetPositionY() == -2897.23f)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
|
||||
me->DespawnOrUnsummon(15000);
|
||||
}
|
||||
if (me->GetPositionY() == -2886.01f)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
|
||||
me->DespawnOrUnsummon(25000);
|
||||
}
|
||||
if (me->GetPositionY() == -2906.89f)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false);
|
||||
me->DespawnOrUnsummon(25000);
|
||||
}
|
||||
if (me->GetPositionY() == -3048.94f)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_2, false);
|
||||
me->DespawnOrUnsummon(30000);
|
||||
}
|
||||
if (me->GetPositionY() == -2961.08f)
|
||||
{
|
||||
me->GetMotionMaster()->MovePath(WOUNDED_MOVE_2, false);
|
||||
me->DespawnOrUnsummon(25000);
|
||||
}
|
||||
break;
|
||||
case EVENT_CLEAVE:
|
||||
me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false);
|
||||
events.RepeatEvent(urand(7000, 15000));
|
||||
break;
|
||||
case EVENT_HAMSTRING:
|
||||
me->CastSpell(me->GetVictim(), SPELL_HAMSTRING, false);
|
||||
events.RepeatEvent(urand(9000, 15000));
|
||||
break;
|
||||
case EVENT_MORTAL_STRIKE:
|
||||
me->CastSpell(me->GetVictim(), SPELL_MORTAL_STRIKE, false);
|
||||
events.RepeatEvent(urand(10000, 15000));
|
||||
break;
|
||||
}
|
||||
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
enum renewskirmisher
|
||||
{
|
||||
NPC_WOUNDED_SKIRMISHER = 27463
|
||||
};
|
||||
|
||||
class spell_renew_skirmisher : public SpellScript
|
||||
{
|
||||
public:
|
||||
PrepareSpellScript(spell_renew_skirmisher);
|
||||
|
||||
SpellCastResult CheckRequirement()
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
if (Creature* wounded = caster->FindNearestCreature(NPC_WOUNDED_SKIRMISHER, 5.0f))
|
||||
if (!wounded->IsInCombat())
|
||||
return SPELL_CAST_OK;
|
||||
|
||||
return SPELL_FAILED_CASTER_AURASTATE;
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnCheckCast += SpellCheckCastFn(spell_renew_skirmisher::CheckRequirement);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1163,7 +1301,8 @@ void AddSC_grizzly_hills()
|
||||
new npc_outhouse_bunny();
|
||||
new npc_tallhorn_stag();
|
||||
new npc_amberpine_woodsman();
|
||||
new npc_wounded_skirmisher();
|
||||
RegisterCreatureAI(npc_wounded_skirmisher);
|
||||
RegisterSpellScript(spell_renew_skirmisher);
|
||||
new npc_venture_co_straggler();
|
||||
new npc_lake_frog();
|
||||
new spell_shredder_delivery();
|
||||
|
||||
Reference in New Issue
Block a user