diff --git a/data/sql/updates/pending_db_world/rev_1641426458023302944.sql b/data/sql/updates/pending_db_world/rev_1641426458023302944.sql new file mode 100644 index 000000000..07a86dea4 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1641426458023302944.sql @@ -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); diff --git a/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp b/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp index 2c4df6597..b56b07057 100644 --- a/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp +++ b/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp @@ -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 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); }