mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-16 02:20:27 +00:00
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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user