Skip to content
Open
100 changes: 100 additions & 0 deletions sql/updates/world/master/XXXX_XX_XX_XX.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
SET @CGUID := 11000391;
SET @PATH := 100000000;

DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+2;
INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnDifficulties`, `PhaseId`, `PhaseGroup`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `MovementType`, `npcflag`, `unit_flags`, `unit_flags2`, `unit_flags3`, `VerifiedBuild`) VALUES
(@CGUID+0, 245248, 2369, 10424, 13377, '0', 0, 0, 0, 1, -3.81319260597229003, 2.652411937713623046, 9.070906639099121093, 2.632274627685546875, 120, 0, 0, 0, NULL, NULL, NULL, NULL, 66562), -- Breka Grimaxe (Area: Северное море - Difficulty: 0) CreateObject1
(@CGUID+1, 248563, 2369, 10424, 13377, '0', 15286, 0, 0, 0, -16.2924175262451171, -36.7197608947753906, 8.992197036743164062, 3.240731477737426757, 120, 0, 0, 0, NULL, NULL, NULL, NULL, 66562), -- Гневион (Area: Северное море - Difficulty: 0) CreateObject1
(@CGUID+2, 248565, 2369, 10424, 13377, '0', 15286, 0, 0, 0, -10.0732851028442382, 78.40439605712890625, 15.1006622314453125, 3.030475854873657226, 120, 0, 0, 0, NULL, NULL, NULL, NULL, 66562); -- Калесгос (Area: Северное море - Difficulty: 0) CreateObject1

UPDATE `creature` SET `PhaseId`=15286 WHERE `guid`=1050189; -- Trall

DELETE FROM `creature_addon` WHERE `guid` BETWEEN @CGUID+1 AND @CGUID+2;
INSERT INTO `creature_addon` (`guid`, `PathId`, `mount`, `StandState`, `AnimTier`, `VisFlags`, `SheathState`, `PvpFlags`, `emote`, `aiAnimKit`, `movementAnimKit`, `meleeAnimKit`, `visibilityDistanceType`, `auras`) VALUES
(@CGUID+1, 0, 0, 0, 3, 0, 1, 0, 0, 18508, 0, 0, 0, ''), -- Гневион
(@CGUID+2, 0, 0, 0, 3, 0, 1, 0, 0, 18518, 0, 0, 0, ''); -- Калесгос

DELETE FROM `creature_equip_template` WHERE (`ID`=1 AND `CreatureID` IN (166827,166814,166824,166573,245248));
INSERT INTO `creature_equip_template` (`CreatureID`, `ID`, `ItemID1`, `AppearanceModID1`, `ItemVisual1`, `ItemID2`, `AppearanceModID2`, `ItemVisual2`, `ItemID3`, `AppearanceModID3`, `ItemVisual3`, `VerifiedBuild`) VALUES
(166827, 1, 204482, 0, 0, 0, 0, 0, 0, 0, 0, 66562), -- 166827
(166814, 1, 175161, 0, 0, 0, 0, 0, 0, 0, 0, 66562), -- 166814
(166824, 1, 204482, 0, 0, 0, 0, 0, 0, 0, 0, 66562), -- 166824
(166573, 1, 204482, 0, 0, 0, 0, 0, 0, 0, 0, 66562), -- 166573
(245248, 1, 165616, 0, 0, 0, 0, 0, 0, 0, 0, 66562); -- 245248

UPDATE `creature_template_difficulty` SET `ContentTuningID`=1421, `StaticFlags1`=0x10000000, `VerifiedBuild`=66562 WHERE (`Entry`=245248 AND `DifficultyID`=0); -- 245248 (Breka Grimaxe) - CanSwim
UPDATE `creature_template` SET `faction`=2361, `npcflag`=2, `BaseAttackTime`=2000, `unit_flags2`=0x800 WHERE `entry`=245248; -- Breka Grimaxe

DELETE FROM `gameobject_template_locale` WHERE (`entry` IN (349879, 400622, 333479) AND `locale`='ruRU');
INSERT INTO `gameobject_template_locale` (`entry`, `locale`, `name`, `castBarCaption`, `unk1`, `VerifiedBuild`) VALUES
(349879, 'ruRU', 'Транспорт Орды', '', '', 66562),
(400622, 'ruRU', 'Штабель бочек', '', '', 66562),
(333479, 'ruRU', 'Корабль Альянса', '', '', 66562);

DELETE FROM `quest_offer_reward_locale` WHERE (`locale`='ruRU' AND `ID` IN (59928,59927,59926,56775));
INSERT INTO `quest_offer_reward_locale` (`ID`, `locale`, `RewardText`, `VerifiedBuild`) VALUES
(59928, 'ruRU', 'Этим штормом управляет какая-то неведомая сила!\n\nДержись меня в момент крушения. Я буду оберегать тебя.', 66562),
(59927, 'ruRU', 'У тебя большой потенциал, |3-6($c). Ты тоже можешь найти славу на этом острове!', 66562),
(59926, 'ruRU', 'Хорошо. Ты тренируешься с тех пор, как мы отчалили.\n\nМне нужно исследовать этот шторм. За ним стоит какая-то противоестественная сила.\n\nСразись с Трогом. Он оценит твои навыки и решит, чем ты будешь заниматься, когда мы окажемся на суше.', 66562),
(56775, 'ruRU', 'Отлично, |3-6($c). Вижу, ты в пути времени зря не $gтерял:теряла;.\n\nЧто-то погода внезапно поменялась, не нравится мне это. Попроси рядового Коула с тобой потренироваться, пока я поразмыслю над текущей ситуацией.', 66562);

DELETE FROM `conversation_actors` WHERE (`ConversationId` IN (30361, 30343) AND `Idx` IN (1,0));
INSERT INTO `conversation_actors` (`ConversationId`, `ConversationActorId`, `Idx`, `CreatureId`, `CreatureDisplayInfoId`, `NoActorObject`, `ActivePlayerObject`, `VerifiedBuild`) VALUES
(30361, 64220, 1, 248565, 105921, 0, 0, 66562),
(30361, 109403, 0, 166824, 115495, 0, 0, 66562), -- Full: 0x203AE50FE0A2EA000117FF000044EB9B Creature/0 R3769/S71679 Map: 2175 (9.0 NPE (New Player Experience) - Exile's Reach) Entry: 166824 (Thrall) Low: 4516763
(30343, 64220, 1, 248565, 105921, 0, 0, 66562),
(30343, 109370, 0, 156280, 88316, 0, 0, 66562); -- Full: 0x2042490FE0989E0001580A0000455ABF Creature/0 R4242/S88074 Map: 2175 (9.0 NPE (New Player Experience) - Exile's Reach) Entry: 156280 (Леди Джайна Праудмур) Low: 4545215

DELETE FROM `conversation_line_template` WHERE `Id` IN (83722, 83721, 83684, 83683);
INSERT INTO `conversation_line_template` (`Id`, `UiCameraID`, `ActorIdx`, `Flags`, `ChatType`, `VerifiedBuild`) VALUES
(83722, 150, 1, 0, 0, 66562),
(83721, 0, 0, 0, 0, 66562),
(83684, 150, 1, 0, 0, 66562),
(83683, 0, 0, 0, 0, 66562);

DELETE FROM `conversation_template` WHERE `Id` IN (30361, 30343);
INSERT INTO `conversation_template` (`Id`, `FirstLineID`, `TextureKitId`, `ScriptName`, `VerifiedBuild`) VALUES
(30361, 83721, 0, 'conversation_spar_ship', 66562),
(30343, 83683, 0, 'conversation_spar_ship', 66562);

DELETE FROM `phase_name` WHERE `ID`=15286;
INSERT INTO `phase_name` (`ID`, `Name`) VALUES (15286, 'Cosmetic - See Trall - Wrathion and Kalecgos on lower deck');

DELETE FROM `phase_area` WHERE `AreaId`=13377 AND `PhaseId`=15286;
INSERT INTO `phase_area` (`AreaId`, `PhaseId`, `Comment`) VALUES (13377, 15286, 'Cosmetic - See Trall - Wrathion and Kalecgos on lower deck');

-- GUID: Full: 0x203AE50FE0F2BD400117FF000044EB9B Creature/0 R3769/S71679 Map: 2175 (9.0 NPE (New Player Experience) - Exile's Reach) Entry: 248565 (Калесгос) Low: 4516763
DELETE FROM `waypoint_path` WHERE `PathId`=@PATH+0;
INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
(@PATH+0, 1, 0, NULL, '248565 (Kalecgos fly forward - Horde)');
DELETE FROM `waypoint_path_node` WHERE `PathId`=@PATH+0;
INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`) VALUES
(@PATH+0, 1, -410.0703, 78.40503, 15.183995, NULL); -- PathType: ExactPathFlying

-- GUID: Full: 0x203AE50FE0F2BCC00117FF000044EB9B Creature/0 R3769/S71679 Map: 2175 (9.0 NPE (New Player Experience) - Exile's Reach) Entry: 248563 (Гневион) Low: 4516763
DELETE FROM `waypoint_path` WHERE `PathId`=@PATH+1;
INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
(@PATH+1, 1, 0, NULL, '248563 (Wrathion fly forward - Horde)');
DELETE FROM `waypoint_path_node` WHERE `PathId`=@PATH+1;
INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`) VALUES
(@PATH+1, 1, -416.29395, -36.71997, 9.07553, NULL); -- PathType: ExactPathFlying

-- GUID: Full: 0x2042490FE0F2BD4001580A0000455ABF Creature/0 R4242/S88074 Map: 2175 (9.0 NPE (New Player Experience) - Exile's Reach) Entry: 248565 (Калесгос) Low: 4545215
DELETE FROM `waypoint_path` WHERE `PathId`=@PATH+2;
INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
(@PATH+2, 1, 0, NULL, '248565 (Kalecgos fly forward - Alliance)');
DELETE FROM `waypoint_path_node` WHERE `PathId`=@PATH+2;
INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`) VALUES
(@PATH+2, 1, -487.6328, 50.77539, 28.236526, NULL); -- PathType: ExactPathFlying

-- GUID: Full: 0x2042490FE0F2BCC001580A0000455ABF Creature/0 R4242/S88074 Map: 2175 (9.0 NPE (New Player Experience) - Exile's Reach) Entry: 248563 (Гневион) Low: 4545215
DELETE FROM `waypoint_path` WHERE `PathId`=@PATH+3;
INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
(@PATH+3, 1, 0, NULL, '248563 (Wrathion fly forward - Alliance)');
DELETE FROM `waypoint_path_node` WHERE `PathId`=@PATH+3;
INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`) VALUES
(@PATH+3, 1, -446.479, -32.87451, 6.100418, NULL); -- PathType: ExactPathFlying

DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=26 AND `SourceGroup`=15286 AND `SourceEntry`=13377;
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ConditionStringValue1`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(26, 15286, 13377, 0, 0, 47, 0, 59926, 64, 0, '', 1, 0, 0, '', 'Apply Phase 15286 if Quest 59926 is not rewarded');
150 changes: 134 additions & 16 deletions src/server/scripts/ExilesReach/zone_exiles_reach.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "CombatAI.h"
#include "Containers.h"
#include "Conversation.h"
#include "ConversationAI.h"
#include "GridNotifiers.h"
#include "GridNotifiersImpl.h"
#include "MapUtils.h"
Expand Down Expand Up @@ -150,27 +151,42 @@ class q59926_warming_up : public BaseQuestWarmingUp

enum WarmingUpCaptainData
{
NPC_WARLORD_BREKA_GRIMAXE2 = 166824,
NPC_WARLORD_BREKA_GRIMAXE3 = 166827,
NPC_CAPTAIN_GARRICK = 156280,

PATH_GARRICK_TO_COLE = 10501450,
PATH_GARRICK_TO_UPPER_DECK = 10501451,
PATH_GRIMAXE_TO_THROG = 10501900,
PATH_GRIMAXE_TO_UPPER_DECK = 10501901,

EVENT_SHIP_CAPTAIN1_SCRIPT1 = 1,
NPC_WARLORD_BREKA_GRIMAXE2 = 166824,
NPC_WARLORD_BREKA_GRIMAXE3 = 166827,
NPC_CAPTAIN_GARRICK = 156280,
NPC_KALECGOS = 248565,
NPC_WRATHION = 248563,

PATH_GARRICK_TO_COLE = 10501450,
PATH_GARRICK_TO_UPPER_DECK = 10501451,
PATH_GRIMAXE_TO_THROG = 10501900,
PATH_GRIMAXE_TO_UPPER_DECK = 10501901,
PATH_KALECGOS_FLY_FORWARD_HORDE = 100000000,
PATH_WRATHION_FLY_FORWARD_HORDE = 100000001,
PATH_KALECGOS_FLY_FORWARD_ALLIANCE = 100000002,
PATH_WRATHION_FLY_FORWARD_ALLIANCE = 100000003,

EVENT_SHIP_CAPTAIN1_SCRIPT1 = 1,
EVENT_SHIP_CAPTAIN1_SCRIPT2,
EVENT_SHIP_CAPTAIN1_SCRIPT3,
EVENT_MOVE_FORWARD,

SAY_SPAR = 0,
CONVERSATION_SPAR_HORDE = 30361,
ACTOR_0_HORDE = 109403,
ACTOR_1_HORDE = 64220,
TRALL_LINE = 83721,

CONVERSATION_SPAR_ALLIANCE = 30343,
ACTOR_0_ALLIANCE = 109370,
ACTOR_1_ALLIANCE = 64220,
JAINA_LINE = 83683,
};

// 156280 - Captain Garrick
// 166824 - Warlord Breka Grimaxe
// 156280 - Lady Jaina Proudmoore
// 166824 - Thrall
struct npc_ship_captain_warming_up_private : public ScriptedAI
{
npc_ship_captain_warming_up_private(Creature* creature) : ScriptedAI(creature), _pathToSparringPartner(0), _pathToUpperDeck(0) { }
npc_ship_captain_warming_up_private(Creature* creature) : ScriptedAI(creature), _pathToSparringPartner(0), _pathToUpperDeck(0), _conversation(0), _actor0(0), _actor1(0){ }

void InitializeAI() override
{
Expand All @@ -183,13 +199,18 @@ struct npc_ship_captain_warming_up_private : public ScriptedAI
{
_pathToSparringPartner = PATH_GARRICK_TO_COLE;
_pathToUpperDeck = PATH_GARRICK_TO_UPPER_DECK;
_conversation = CONVERSATION_SPAR_ALLIANCE;
_actor0 = ACTOR_0_ALLIANCE;
_actor1 = ACTOR_1_ALLIANCE;
}
else if (me->GetEntry() == NPC_WARLORD_BREKA_GRIMAXE2)
{
_pathToSparringPartner = PATH_GRIMAXE_TO_THROG;
_pathToUpperDeck = PATH_GRIMAXE_TO_UPPER_DECK;
_conversation = CONVERSATION_SPAR_HORDE;
_actor0 = ACTOR_0_HORDE;
_actor1 = ACTOR_1_HORDE;
}

_events.ScheduleEvent(EVENT_SHIP_CAPTAIN1_SCRIPT1, 1s);
}

Expand All @@ -210,7 +231,12 @@ struct npc_ship_captain_warming_up_private : public ScriptedAI
switch (eventId)
{
case EVENT_SHIP_CAPTAIN1_SCRIPT1:
Talk(SAY_SPAR);
if (Unit* owner = me->GetDemonCreator())
{
Conversation* conversation = Conversation::CreateConversation(_conversation, owner, *owner, owner->GetGUID(), nullptr, false);
conversation->AddActor(_actor0, 0, me->GetGUID());
conversation->Start();
}
me->GetMotionMaster()->MovePath(_pathToSparringPartner, false);
break;
case EVENT_SHIP_CAPTAIN1_SCRIPT2:
Expand All @@ -229,6 +255,97 @@ struct npc_ship_captain_warming_up_private : public ScriptedAI
EventMap _events;
uint32 _pathToSparringPartner;
uint32 _pathToUpperDeck;
uint32 _conversation;
uint32 _actor0;
uint32 _actor1;
};

// 30361, 30343 - Conversation
class conversation_spar_ship : public ConversationAI
{
public:
conversation_spar_ship(Conversation* conversation) : ConversationAI(conversation) {}

void OnCreate(Unit* creator) override
{
Creature* kalecgos = creator->FindNearestCreatureWithOptions(100.0f, { .CreatureId = NPC_KALECGOS, .IgnorePhases = true });
Creature* wrathion = creator->FindNearestCreatureWithOptions(100.0f, { .CreatureId = NPC_WRATHION, .IgnorePhases = true });

if (!kalecgos || !wrathion)
return;

TempSummon* kalecgosClone = kalecgos->SummonPersonalClone(kalecgos->GetPosition(), TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, creator->ToPlayer());
TempSummon* wrathionClone = wrathion->SummonPersonalClone(wrathion->GetPosition(), TEMPSUMMON_MANUAL_DESPAWN, 0s, 0, 0, creator->ToPlayer());

if (!kalecgosClone || !wrathionClone)
return;

kalecgosClone->SetAIAnimKitId(kalecgos->GetAIAnimKitId());
wrathionClone->SetAIAnimKitId(wrathion->GetAIAnimKitId());

_kalecgosCloneGUID = kalecgosClone->GetGUID();
_wrathionCloneGUID = wrathionClone->GetGUID();
};

void OnStart() override
{
LocaleConstant privateOwnerLocale = conversation->GetPrivateObjectOwnerLocale();

Player* privateObjectOwner = ObjectAccessor::GetPlayer(*conversation, conversation->GetPrivateObjectOwner());
if (!privateObjectOwner)
return;

if (privateObjectOwner->GetTeamId() == TEAM_ALLIANCE)
{
_events.ScheduleEvent(EVENT_MOVE_FORWARD, conversation->GetLineEndTime(privateOwnerLocale, JAINA_LINE));
}
else if (privateObjectOwner->GetTeamId() == TEAM_HORDE)
{
_events.ScheduleEvent(EVENT_MOVE_FORWARD, conversation->GetLineEndTime(privateOwnerLocale, TRALL_LINE));
}
}

void OnUpdate(uint32 diff) override
{
_events.Update(diff);

switch (_events.ExecuteEvent())
{
case EVENT_MOVE_FORWARD:
{
Player* player = ObjectAccessor::GetPlayer(*conversation, conversation->GetPrivateObjectOwner());
if (!player)
return;

Creature* kalecgosClone = ObjectAccessor::GetCreature(*player, _kalecgosCloneGUID);
Creature* wrathionClone = ObjectAccessor::GetCreature(*player, _wrathionCloneGUID);

kalecgosClone->SetSpeed(MOVE_RUN, 30.0f);
wrathionClone->SetSpeed(MOVE_RUN, 30.0f);

if (player->GetTeamId() == TEAM_ALLIANCE)
{
kalecgosClone->GetMotionMaster()->MovePath(PATH_KALECGOS_FLY_FORWARD_ALLIANCE, false);
wrathionClone->GetMotionMaster()->MovePath(PATH_WRATHION_FLY_FORWARD_ALLIANCE, false);
}
else if (player->GetTeamId() == TEAM_HORDE)
{
kalecgosClone->GetMotionMaster()->MovePath(PATH_KALECGOS_FLY_FORWARD_HORDE, false);
wrathionClone->GetMotionMaster()->MovePath(PATH_WRATHION_FLY_FORWARD_HORDE, false);
}

kalecgosClone->DespawnOrUnsummon(14s);
wrathionClone->DespawnOrUnsummon(14s);
break;
}
default:
break;
}
}
private:
ObjectGuid _kalecgosCloneGUID;
ObjectGuid _wrathionCloneGUID;
EventMap _events;
};

enum StandYourGroundData
Expand Down Expand Up @@ -6929,6 +7046,7 @@ void AddSC_zone_exiles_reach()
new FactoryCreatureScript<CreatureAI, &CaptainGarrickAISelector>("npc_captain_garrick");
RegisterPrivatePublicCreatureAIPair("npc_warlord_grimaxe_lower_ship", npc_ship_captain_warming_up_private, NullCreatureAI);
RegisterPrivatePublicCreatureAIPair("npc_warlord_grimaxe_upper_ship", npc_ship_captain_brace_for_impact_private, NullCreatureAI);
RegisterConversationAI(conversation_spar_ship);
RegisterPrivatePublicCreatureAIPair("npc_cole_ship", npc_first_mate_brace_for_impact_private, npc_first_mate_stand_your_ground);
RegisterPrivatePublicCreatureAIPair("npc_throg_ship", npc_first_mate_brace_for_impact_private, npc_first_mate_stand_your_ground);
RegisterPrivatePublicCreatureAIPair("npc_crew_ship", npc_crew_ship_private, NullCreatureAI);
Expand Down
Loading