fix(DB/Script): Eastvale Logging Camp, Elywnn Forest (#10036)

* fix(DB/Script): Eastvale Logging Camp, Elywnn Forest

* Update rev_1641426458023302944.sql

* Update zone_elwynn_forest.cpp
This commit is contained in:
Malcrom
2022-01-06 13:58:28 -04:00
committed by GitHub
parent ea8404f981
commit 73d5772cf6
2 changed files with 378 additions and 0 deletions

View File

@@ -0,0 +1,121 @@
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1641426458023302944');
-- Add scriptnames
UPDATE `creature_template` SET `ScriptName` = "npc_eastvale_peasent" WHERE `entry` IN (11328);
UPDATE `creature_template` SET `ScriptName` = "npc_supervisor_raelen" WHERE `entry` IN (10616);
-- Update Eastvale Peasants
UPDATE `creature` SET `wander_distance`=0,`MovementType`=0 WHERE `id`=11328;
UPDATE `creature_template_addon` SET `emote`=234 WHERE `entry`= 11328;
UPDATE `creature` SET `position_x`=-9523.21,`position_y`=-1290.2489,`position_z`=44.11742, `orientation`=5.238773 WHERE `guid`=81249;
UPDATE `creature` SET `position_x`=-9536.207,`position_y`=-1273.0508,`position_z`=43.418743, `orientation`=2.936915 WHERE `guid`=81250;
UPDATE `creature` SET `position_x`=-9535.653,`position_y`=-1329.8119,`position_z`=47.341866, `orientation`=1.939004 WHERE `guid`=81349;
-- Update Eastvale Lumberjacks
UPDATE `creature` SET `wander_distance`=2 WHERE `guid` IN (81259,81345);
-- Update James Clark
UPDATE `creature` SET `wander_distance`=1,`MovementType`=1,`position_x`=-9493.731,`position_y`=-1193.5862,`position_z`=49.64713, `orientation`=3.89947509765625 WHERE `guid`=81247;
-- Pathing for Eastvale Lumberjack Entry: 1975
SET @NPC := 81257;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC;
DELETE FROM `creature_addon` WHERE `guid`=@NPC;
INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, '');
DELETE FROM `waypoint_data` WHERE `id`=@PATH;
INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
(@PATH,1,-9400.745,-1336.9156,50.027412,0,15000,0,0,100,0),
(@PATH,2,-9404.866,-1339.135,50.027412,0,0,0,0,100,0),
(@PATH,3,-9409.12,-1338.372,50.027412,0,0,0,0,100,0),
(@PATH,4,-9411.633,-1336.6923,50.74399,0,0,0,0,100,0),
(@PATH,5,-9416.485,-1331.1586,51.441143,0,0,0,0,100,0),
(@PATH,6,-9421.154,-1326.5717,51.46511,0,0,0,0,100,0),
(@PATH,7,-9426.076,-1323.9713,51.4651,0,15000,0,0,100,0),
(@PATH,8,-9417.531,-1330.5028,51.441174,0,0,0,0,100,0),
(@PATH,9,-9412.813,-1334.5887,51.52948,0,0,0,0,100,0),
(@PATH,10,-9408.221,-1337.9055,50.027412,0,0,0,0,100,0);
-- Pathing for Eastvale Peasant Entry: 11328
SET @NPC := 81348;
SET @PATH := @NPC * 10;
DELETE FROM `creature_addon` WHERE `guid`=@NPC;
INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,0,0,0,1,234,0, '');
DELETE FROM `waypoint_data` WHERE `id` IN (@PATH,@PATH+1,@PATH+2);
INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
(@PATH,1,-9517.114,-1333.8582,45.9155,0,0,0,0,100,0),
(@PATH,2,-9494.799,-1322.8846,41.20464,0,0,0,0,100,0),
(@PATH,3,-9466.731,-1296.875,41.543285,0,0,0,0,100,0),
(@PATH+1,1,-9471.852,-1292.7347,41.054028,0,0,0,0,100,0),
(@PATH+1,2,-9471.444,-1289.9312,41.134594,0,0,0,0,100,0),
(@PATH+2,1,-9496.343,-1322.3462,41.325,0,0,0,0,100,0),
(@PATH+2,2,-9516.777,-1333.658,45.834446,0,0,0,0,100,0),
(@PATH+2,3,-9526.894,-1324.7913,45.84667,0,0,0,0,100,0),
(@PATH+2,4,-9529.32,-1323.672,45.950916,0,0,0,0,100,0);
-- Pathing for Eastvale Peasant Entry: 11328
SET @NPC := 81252;
SET @PATH := @NPC * 10;
DELETE FROM `creature_addon` WHERE `guid`=@NPC;
INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,0,0,0,1,234,0, '');
DELETE FROM `waypoint_data` WHERE `id` IN (@PATH,@PATH+1,@PATH+2);
INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
(@PATH,1,-9524.052,-1283.8728,43.82079,0,0,0,0,100,0),
(@PATH,2,-9500.586,-1283.8563,43.402332,0,0,0,0,100,0),
(@PATH,3,-9469.168,-1298.1064,41.57429,0,0,0,0,100,0),
(@PATH,4,-9466.686,-1296.875,41.549145,0,0,0,0,100,0),
(@PATH+1,1,-9472.049,-1293.2257,41.030346,0,0,0,0,100,0),
(@PATH+1,2,-9471.718,-1289.9913,41.12727,0,0,0,0,100,0),
(@PATH+2,1,-9500.046,-1283.9575,43.255604,0,0,0,0,100,0),
(@PATH+2,2,-9525.792,-1284.0898,43.640614,0,0,0,0,100,0),
(@PATH+2,3,-9536.142,-1303.3818,44.576973,0,0,0,0,100,0),
(@PATH+2,4,-9535.299,-1304.701,44.701973,0,0,0,0,100,0);
-- Pathing for Eastvale Peasant Entry: 11328
SET @NPC := 81349;
SET @PATH := @NPC * 10;
DELETE FROM `creature_addon` WHERE `guid`=@NPC;
INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,0,0,0,1,234,0, '');
DELETE FROM `waypoint_data` WHERE `id` IN (@PATH,@PATH+1,@PATH+2);
INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
(@PATH,1,-9506.966,-1333.8741,44.104954,0,0,0,0,100,0),
(@PATH,2,-9475.493,-1304.2109,42.403614,0,0,0,0,100,0),
(@PATH,3,-9466.71,-1296.875,41.546215,0,0,0,0,100,0),
(@PATH+1,1,-9471.955,-1292.7456,40.988842,0,0,0,0,100,0),
(@PATH+1,2,-9471.373,-1289.8252,41.14729,0,0,0,0,100,0),
(@PATH+2,1,-9498.48,-1327.6045,42.092823,0,0,0,0,100,0),
(@PATH+2,2,-9524.156,-1335.9268,47.01755,0,0,0,0,100,0),
(@PATH+2,3,-9534.49,-1332.8064,47.652657,0,0,0,0,100,0),
(@PATH+2,4,-9535.653,-1329.8119,47.341866,0,0,0,0,100,0);
-- Pathing for Eastvale Peasant Entry: 11328
SET @NPC := 81250;
SET @PATH := @NPC * 10;
DELETE FROM `creature_addon` WHERE `guid`=@NPC;
INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,0,0,0,1,234,0, '');
DELETE FROM `waypoint_data` WHERE `id` IN (@PATH,@PATH+1,@PATH+2);
INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
(@PATH,1,-9501.6,-1282.86,43.637928,0,0,0,0,100,0),
(@PATH,2,-9469.226,-1297.9215,41.552074,0,0,0,0,100,0),
(@PATH,3,-9466.679,-1296.875,41.549877,0,0,0,0,100,0),
(@PATH+1,1,-9471.516,-1293.1033,41.09431,0,0,0,0,100,0),
(@PATH+1,2,-9471.361,-1289.7982,41.150463,0,0,0,0,100,0),
(@PATH+2,1,-9505.872,-1279.3485,44.435535,0,0,0,0,100,0),
(@PATH+2,2,-9536.207,-1273.0508,43.418743,0,0,0,0,100,0);
-- Pathing for Eastvale Peasant Entry: 11328
SET @NPC := 81249;
SET @PATH := @NPC * 10;
DELETE FROM `creature_addon` WHERE `guid`=@NPC;
INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,0,0,0,1,234,0, '');
DELETE FROM `waypoint_data` WHERE `id` IN (@PATH,@PATH+1,@PATH+2);
INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES
(@PATH,1,-9520.802,-1284.2855,44.085926,0,0,0,0,100,0),
(@PATH,2,-9501.877,-1282.7637,43.644764,0,0,0,0,100,0),
(@PATH,3,-9468.622,-1298.6906,41.752514,0,0,0,0,100,0),
(@PATH,4,-9466.68,-1296.875,41.549633,0,0,0,0,100,0),
(@PATH+1,1,-9471.81,-1293.9409,41.05891,0,0,0,0,100,0),
(@PATH+1,2,-9471.407,-1290.0531,41.119946,0,0,0,0,100,0),
(@PATH+2,1,-9517.359,-1283.467,44.269764,0,0,0,0,100,0),
(@PATH+2,2,-9524.299,-1288.3755,43.83373,0,0,0,0,100,0),
(@PATH+2,3,-9523.21,-1290.2489,44.11742,0,0,0,0,100,0);

View File

@@ -256,8 +256,265 @@ private:
GuidVector _childrenGUIDs;
};
/*######
## npc_supervisor_raelen
######*/
enum SupervisorRaelen
{
EVENT_FIND_PEASENTS = 8,
EVENT_NEXT_PEASENT = 9,
NPC_EASTVALE_PEASENT = 11328
};
struct npc_supervisor_raelen : public ScriptedAI
{
npc_supervisor_raelen(Creature* creature) : ScriptedAI(creature) {}
void Reset() override
{
_PeasentId = 0;
peasentGUIDs.clear();
_events.ScheduleEvent(EVENT_FIND_PEASENTS, 4000);
}
void SetData(uint32 /*type*/, uint32 data) override
{
if (data == 1)
{
++_PeasentId;
if (_PeasentId == 5) _PeasentId = 0;
_events.ScheduleEvent(EVENT_NEXT_PEASENT, urand(2000, 6000));
}
}
void CallPeasent()
{
if (Creature* peasent = ObjectAccessor::GetCreature(*me, peasentGUIDs[_PeasentId]))
peasent->AI()->SetData(1, 1);
}
void UpdateAI(uint32 diff) override
{
_events.Update(diff);
if (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_FIND_PEASENTS:
{
GuidVector tempGUIDs;
std::list<Creature*> peasents;
GetCreatureListWithEntryInGrid(peasents, me, NPC_EASTVALE_PEASENT, 100.f);
for (Creature* peasent : peasents)
{
tempGUIDs.push_back(peasent->GetGUID());
}
peasentGUIDs.push_back(tempGUIDs[2]);
peasentGUIDs.push_back(tempGUIDs[3]);
peasentGUIDs.push_back(tempGUIDs[0]);
peasentGUIDs.push_back(tempGUIDs[1]);
peasentGUIDs.push_back(tempGUIDs[4]);
_events.ScheduleEvent(EVENT_NEXT_PEASENT, 1000);
break;
}
case EVENT_NEXT_PEASENT:
CallPeasent();
break;
}
}
if (!UpdateVictim())
return;
DoMeleeAttackIfReady();
}
private:
EventMap _events;
uint8 _PeasentId;
GuidVector peasentGUIDs;
};
/*######
## npc_eastvale_peasent
######*/
enum EastvalePeasent
{
EVENT_MOVETORAELEN = 10,
EVENT_TALKTORAELEN1 = 11,
EVENT_TALKTORAELEN2 = 12,
EVENT_RAELENTALK = 13,
EVENT_TALKTORAELEN3 = 14,
EVENT_TALKTORAELEN4 = 15,
EVENT_PATHBACK = 16,
NPC_SUPERVISOR_RAELEN = 10616,
PATH_PEASENT_0 = 813490,
PATH_PEASENT_1 = 813480,
PATH_PEASENT_2 = 812520,
PATH_PEASENT_3 = 812490,
PATH_PEASENT_4 = 812500,
SAY_RAELEN = 0,
SOUND_PEASENT_GREETING_1 = 6289,
SOUND_PEASENT_GREETING_2 = 6288,
SOUND_PEASENT_GREETING_3 = 6290,
SOUND_PEASENT_LEAVING_1 = 6242,
SOUND_PEASENT_LEAVING_2 = 6282,
SOUND_PEASENT_LEAVING_3 = 6284,
SOUND_PEASENT_LEAVING_4 = 6285,
SOUND_PEASENT_LEAVING_5 = 6286,
SPELL_TRANSFORM_PEASENT_WITH_WOOD = 9127
};
struct npc_eastvale_peasent : public ScriptedAI
{
npc_eastvale_peasent(Creature* creature) : ScriptedAI(creature)
{
Initialize();
}
void Initialize()
{
_path = me->GetSpawnId() * 10;
}
void Reset() override {}
void SetData(uint32 /*type*/, uint32 data) override
{
if (data == 1)
{
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
me->CastSpell(me, SPELL_TRANSFORM_PEASENT_WITH_WOOD);
me->SetSpeed(MOVE_WALK, 1.0f);
me->GetMotionMaster()->MovePath(_path, false);
}
}
void PathEndReached(uint32 pathId) override
{
if (pathId == _path)
{
CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(me->GetEntry());
me->SetSpeed(MOVE_WALK, cinfo->speed_walk);
me->RemoveAura(SPELL_TRANSFORM_PEASENT_WITH_WOOD);
_events.ScheduleEvent(EVENT_MOVETORAELEN, 3000);
}
else if (pathId == _path + 1)
{
_events.ScheduleEvent(EVENT_TALKTORAELEN1, 1000);
}
else if (pathId == _path + 2)
{
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_WORK_CHOPWOOD);
}
}
void UpdateAI(uint32 diff) override
{
_events.Update(diff);
if (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_MOVETORAELEN:
me->GetMotionMaster()->MovePath(_path + 1, false);
break;
case EVENT_TALKTORAELEN1:
if (Creature* realen = me->FindNearestCreature(NPC_SUPERVISOR_RAELEN, 2.0f, true))
{
_realenGUID = realen->GetGUID();
me->SetFacingToObject(realen);
switch (_path)
{
case PATH_PEASENT_0:
me->PlayDirectSound(SOUND_PEASENT_GREETING_1);
_events.ScheduleEvent(EVENT_TALKTORAELEN2, 2000);
break;
case PATH_PEASENT_1:
case PATH_PEASENT_3:
me->PlayDirectSound(SOUND_PEASENT_GREETING_3);
_events.ScheduleEvent(EVENT_RAELENTALK, 2000);
break;
case PATH_PEASENT_2:
case PATH_PEASENT_4:
me->PlayDirectSound(SOUND_PEASENT_GREETING_2);
_events.ScheduleEvent(EVENT_RAELENTALK, 2000);
break;
}
}
else
{
// Path back if realen cannot be found alive
_events.ScheduleEvent(EVENT_PATHBACK, 2000);
}
break;
case EVENT_TALKTORAELEN2:
me->PlayDirectSound(SOUND_PEASENT_GREETING_2);
_events.ScheduleEvent(EVENT_RAELENTALK, 2000);
break;
case EVENT_RAELENTALK:
if (Creature* realen = ObjectAccessor::GetCreature(*me, _realenGUID))
{
realen->AI()->Talk(SAY_RAELEN);
_events.ScheduleEvent(EVENT_TALKTORAELEN3, 5000);
}
break;
case EVENT_TALKTORAELEN3:
{
switch (_path)
{
case PATH_PEASENT_0:
me->PlayDirectSound(SOUND_PEASENT_LEAVING_1);
_events.ScheduleEvent(EVENT_PATHBACK, 2000);
break;
case PATH_PEASENT_1:
case PATH_PEASENT_3:
me->PlayDirectSound(SOUND_PEASENT_LEAVING_4);
_events.ScheduleEvent(EVENT_TALKTORAELEN4, 2000);
break;
case PATH_PEASENT_2:
me->PlayDirectSound(SOUND_PEASENT_LEAVING_3);
_events.ScheduleEvent(EVENT_PATHBACK, 2000);
break;
case PATH_PEASENT_4:
me->PlayDirectSound(SOUND_PEASENT_LEAVING_2);
_events.ScheduleEvent(EVENT_PATHBACK, 2000);
break;
}
}
break;
case EVENT_TALKTORAELEN4:
me->PlayDirectSound(SOUND_PEASENT_LEAVING_5);
_events.ScheduleEvent(EVENT_PATHBACK, 2000);
break;
case EVENT_PATHBACK:
if (Creature* realen = ObjectAccessor::GetCreature(*me, _realenGUID))
realen->AI()->SetData(1, 1);
me->GetMotionMaster()->MovePath(_path + 2, false);
break;
}
}
if (!UpdateVictim())
return;
DoMeleeAttackIfReady();
}
private:
EventMap _events;
ObjectGuid _realenGUID;
uint32 _path;
};
void AddSC_elwynn_forest()
{
RegisterCreatureAI(npc_cameron);
RegisterCreatureAI(npc_supervisor_raelen);
RegisterCreatureAI(npc_eastvale_peasent);
}