TrinityCore
Loading...
Searching...
No Matches
zone_redridge_mountains.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18/* Script Data Start
19SDName: Redridge Mountains
20SD%Complete: 0
21SDComment:
22Script Data End */
23
24#include "ScriptMgr.h"
25#include "Containers.h"
26#include "G3DPosition.hpp"
27#include "MotionMaster.h"
28#include "MoveSplineInit.h"
29#include "ObjectAccessor.h"
30#include "Player.h"
31#include "ScriptedCreature.h"
32#include "SpellAuras.h"
33#include "SpellInfo.h"
34#include "SpellScript.h"
35#include "TemporarySummon.h"
36#include "WaypointDefines.h"
37#include "World.h"
38#include <algorithm>
39
41{
42 SPELL_APPLY_QUEST_INVIS_ZONE_3 = 80815, // Used by npc's in Lakeshire Inn
43 SPELL_APPLY_QUEST_INVIS_ZONE_4 = 80816, // Used by npc's in Lakeshire Inn
44
45 SPELL_APPLY_QUEST_INVIS_ZONE_19 = 82099, // Used by npc's in Lakeshire Townhall
46
57};
58
74
102
103/*######
104# npc_dumpy_and_keeshan "Used by entries 43249 and 43184"
105######*/
106
108{
109public:
110 npc_dumpy_and_keeshan() : CreatureScript("npc_dumpy_and_keeshan") { }
111
113 {
114 npc_dumpy_and_keeshanAI(Creature* creature) : ScriptedAI(creature) { }
115
116 void Reset() override
117 {
118 _scheduler.Schedule(Seconds(1), [this](TaskContext& targetSearch)
119 {
120 std::list<Creature*> bigEarlList;
121 me->GetCreatureListWithEntryInGrid(bigEarlList, NPC_BIGEARL, 5.0f);
122
123 for (Creature* bigEarl : bigEarlList)
126 AttackStart(bigEarl);
127
128 if (!me->IsInCombat())
129 targetSearch.Repeat();
130 });
131 }
132
133 void DamageTaken(Unit* who, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
134 {
135 if ((!who || who->GetTypeId() == TYPEID_UNIT) && me->HealthBelowPctDamaged(82, damage))
136 damage = 0;
137 }
138
139 void UpdateAI(uint32 diff) override
140 {
141 _scheduler.Update(diff);
142 }
143
144 private:
146 };
147
148 CreatureAI* GetAI(Creature* creature) const override
149 {
150 return new npc_dumpy_and_keeshanAI(creature);
151 }
152};
153
154/*######
155# npc_big_earl "Used by entry 43248"
156######*/
157
159{
160public:
161 npc_big_earl() : CreatureScript("npc_big_earl") { }
162
164 {
165 npc_big_earlAI(Creature* creature) : ScriptedAI(creature) { }
166
167 void DamageTaken(Unit* who, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
168 {
169 if ((!who || who->GetTypeId() == TYPEID_UNIT) && me->HealthBelowPctDamaged(82, damage))
170 damage = 0;
171 }
172 };
173
174 CreatureAI* GetAI(Creature* creature) const override
175 {
176 return new npc_big_earlAI(creature);
177 }
178};
179
210
211constexpr Position TrentRepositionPos = { -9281.44f, -2285.27f, 67.5123f, 6.0213f };
212constexpr Position DmitriRepositionPos = { -9282.8f, -2293.28f, 67.5089f, 6.2657f };
213constexpr Position JessRepositionPos = { -9282.27f, -2290.95f, 67.5319f, 6.0737f };
214constexpr Position DanielRepositionPos = { -9281.77f, -2287.55f, 67.5869f, 6.0911f };
215constexpr Position MatthewRepositionPos = { -9280.71f, -2283.21f, 67.5747f, 6.0737f };
216constexpr Position AlexRepositionPos = { -9279.86f, -2281.42f, 67.5854f, 5.7421f };
217
218// 43196 - Huge Boulder
220{
222
223 void Reset() override
224 {
225 _events.Reset();
234 }
235
236 void SpellHit(WorldObject* /*caster*/, SpellInfo const* spell) override
237 {
238 if (spell->Id != SPELL_LIFT_BOULDER_RIDE)
239 return;
240
241 _events.Reset();
243 }
244
245 void UpdateAI(uint32 diff) override
246 {
247 _events.Update(diff);
248
249 while (uint32 eventId = _events.ExecuteEvent())
250 {
251 switch (eventId)
252 {
254 {
255 if (Creature const* oslow = me->FindNearestCreature(NPC_FOREMAN_OSLOW, 10.0f, true))
256 _oslowGUID = oslow->GetGUID();
257 if (Creature const* alex = me->FindNearestCreature(NPC_BRIDGE_WORKER_ALEX, 10.0f, true))
258 _alexGUID = alex->GetGUID();
259 if (Creature const* trent = me->FindNearestCreature(NPC_BRIDGE_WORKER_TRENT, 10.0f, true))
260 _trentGUID = trent->GetGUID();
261 if (Creature const* dimitri = me->FindNearestCreature(NPC_BRIDGE_WORKER_DMITRI, 10.0f, true))
262 _dmitriGUID = dimitri->GetGUID();
263 if (Creature const* jess = me->FindNearestCreature(NPC_BRIDGE_WORKER_JESS, 10.0f, true))
264 _jessGUID = jess->GetGUID();
265 if (Creature const* daniel = me->FindNearestCreature(NPC_BRIDGE_WORKER_DANIEL, 10.0f, true))
266 _danielGUID = daniel->GetGUID();
267 if (Creature const* matthew = me->FindNearestCreature(NPC_BRIDGE_WORKER_MATTHEW, 10.0f, true))
268 _matthewGUID = matthew->GetGUID();
269
271 _events.Repeat(1s);
272 else
273 {
276 }
277 break;
278 }
280 {
282 oslow->AI()->Talk(TALK_OSLOW_IDLE);
283 _events.Repeat(45s, 60s);
284 break;
285 }
287 {
289 {
290 switch (uint32 text = urand(0, 3))
291 {
292 case TALK_ALEX_HEAVE:
293 alex->AI()->Talk(TALK_ALEX_HEAVE);
295 break;
296 case TALK_ALEX_DAMN:
297 alex->AI()->Talk(TALK_ALEX_DAMN);
299 break;
300 default:
301 alex->AI()->Talk(text);
302 _events.Repeat(10s);
303 break;
304 }
305 }
306 break;
307 }
309 {
311 {
313 trent->AI()->Talk(TALK_WORKERS_HO, alex);
314 if (Creature const* dmitri = ObjectAccessor::GetCreature(*me, _dmitriGUID))
315 dmitri->AI()->Talk(TALK_WORKERS_HO, alex);
317 jess->AI()->Talk(TALK_WORKERS_HO, alex);
318 if (Creature const* daniel = ObjectAccessor::GetCreature(*me, _danielGUID))
319 daniel->AI()->Talk(TALK_WORKERS_HO, alex);
320 if (Creature const* matthew = ObjectAccessor::GetCreature(*me, _matthewGUID))
321 matthew->AI()->Talk(TALK_WORKERS_HO, alex);
322 }
324 break;
325 }
327 {
329 alex->AI()->Talk(TALK_ALEX_PUSH);
331 break;
332 }
334 {
335 if (Creature const* matthew = ObjectAccessor::GetCreature(*me, _matthewGUID))
336 {
338 matthew->AI()->Talk(TALK_MATTHEW_IM_PUSHING, alex);
339 }
341 break;
342 }
343 case EVENT_REPOSITION:
344 {
346 {
347 trent->SetAIAnimKitId(0);
348 trent->GetMotionMaster()->MovePoint(0, TrentRepositionPos, true, TrentRepositionPos.GetOrientation());
349 }
350
352 {
353 dmitri->SetAIAnimKitId(0);
354 dmitri->GetMotionMaster()->MovePoint(0, DmitriRepositionPos, true, DmitriRepositionPos.GetOrientation());
355 }
356
358 {
359 jess->SetAIAnimKitId(0);
360 jess->GetMotionMaster()->MovePoint(0, JessRepositionPos, true, JessRepositionPos.GetOrientation());
361 }
362
364 {
365 daniel->SetAIAnimKitId(0);
366 daniel->GetMotionMaster()->MovePoint(0, DanielRepositionPos, true, DanielRepositionPos.GetOrientation());
367 }
368
370 {
371 matthew->SetAIAnimKitId(0);
372 matthew->GetMotionMaster()->MovePoint(0, MatthewRepositionPos, true, MatthewRepositionPos.GetOrientation());
373 }
374
376 {
377 alex->SetAIAnimKitId(0);
378 alex->GetMotionMaster()->MovePoint(0, AlexRepositionPos, true, AlexRepositionPos.GetOrientation());
379 }
380 break;
381 }
383 {
384 // all workers should cower
385 std::vector<ObjectGuid> allWorkers = { _alexGUID, _matthewGUID, _trentGUID, _dmitriGUID, _jessGUID, _danielGUID };
386 for (ObjectGuid const& workerGUID : allWorkers)
387 if (Creature* worker = ObjectAccessor::GetCreature(*me, workerGUID))
388 worker->SetEmoteState(EMOTE_STATE_COWER);
389
390 // pick two random workers to say random scared things
392
393 for (ObjectGuid const workerGUID : allWorkers)
394 {
395 Creature* worker = ObjectAccessor::GetCreature(*me, workerGUID);
396 if (!worker)
397 continue;
398
399 switch (worker->GetEntry())
400 {
402 worker->AI()->Talk(TALK_ALEX_SCARED, me);
403 break;
405 worker->AI()->Talk(TALK_MATTHEW_SCARED, me);
406 break;
408 worker->AI()->Talk(TALK_TRENT_SCARED, me);
409 break;
411 worker->AI()->Talk(TALK_DMITRI_SCARED, me);
412 break;
414 worker->AI()->Talk(TALK_JESS_SCARED, me);
415 break;
417 worker->AI()->Talk(TALK_DANIEL_SCARED, me);
418 break;
419 default:
420 break;
421 }
422 }
423 break;
424 }
426 {
428 oslow->SetStandState(UNIT_STAND_STATE_STAND);
429
431 break;
432 }
433 case EVENT_OSLOW_STUN:
434 {
436 oslow->SetEmoteState(EMOTE_STATE_STUN);
437 break;
438 }
439 case EVENT_DONE:
440 {
442 alex->DespawnOrUnsummon();
444 matthew->DespawnOrUnsummon();
446 trent->DespawnOrUnsummon();
448 dmitri->DespawnOrUnsummon();
450 jess->DespawnOrUnsummon();
452 daniel->DespawnOrUnsummon();
454 oslow->DespawnOrUnsummon();
455
456 _events.Reset();
458 break;
459 }
460 default:
461 break;
462 }
463 }
464 }
465
466 void DoAction(int32 const param) override
467 {
468 switch (param)
469 {
472
473 // in case player who started event disconnects
475 break;
476 case ACTION_COWER:
478 break;
479 case ACTION_DONE:
481 break;
482 default:
483 break;
484 }
485 }
486
487private:
496};
497
498constexpr Position EttinNearBoulderPosition = { -9272.053f, -2291.7463f, 68.54081f };
499
500// 43197 - Subdued Canyon Ettin
502{
504
505 void Reset() override
506 {
508 _events.Reset();
509 }
510
511 void OnDespawn() override
512 {
513 Unit* owner = me->GetOwner();
514 if (!owner)
515 return;
516
518 }
519
520 void SpellHit(WorldObject* caster, SpellInfo const* spell) override
521 {
522 if (!caster || !caster->IsPlayer())
523 return;
524
525 switch (spell->Id)
526 {
529 break;
531 if (Player* player = ObjectAccessor::GetPlayer(*me, caster->GetGUID()))
532 player->RewardPlayerAndGroupAtEvent(NPC_FOREMAN_OSLOW, player);
533 break;
534 default:
535 break;
536 }
537 }
538
539 void UpdateAI(uint32 diff) override
540 {
541 _events.Update(diff);
542
543 while (uint32 eventId = _events.ExecuteEvent())
544 {
545 switch (eventId)
546 {
550 break;
553
555 boulder->AI()->DoAction(ACTION_COWER);
556
558 break;
562 break;
566 break;
567 case EVENT_PATH_AWAY:
568 Talk(TALK_BYE);
569
571 boulder->AI()->DoAction(ACTION_DONE);
572
574 break;
575 default:
576 break;
577 }
578 }
579 }
580
581 void MovementInform(uint32 movementType, uint32 pointId) override
582 {
583 if (movementType != POINT_MOTION_TYPE)
584 return;
585
586 if (pointId == POINT_NEAR_BOULDER)
587 {
588 if (Creature const* boulder = me->FindNearestCreature(NPC_HUGE_BOULDER, 5.0f, true))
589 {
590 _boulderGUID = boulder->GetGUID();
591 me->CastSpell(nullptr, SPELL_LIFT_HUGE_BOULDER, false);
592
593 if (Creature const* daniel = me->FindNearestCreature(NPC_BRIDGE_WORKER_DANIEL, 20.0f, true))
594 me->SetFacingToObject(daniel);
595
597 boulder->AI()->DoAction(ACTION_OSLOW_GET_UP);
598 }
599 }
600 }
601
602 void WaypointPathEnded(uint32 /*nodeId*/, uint32 pathId) override
603 {
604 if (pathId == PATH_ETTIN_TO_WATER)
605 {
607 }
608 else if (pathId == PATH_ETTIN_UP_HILL)
609 {
612 }
613 }
614
615private:
618};
619
620// 80704 - Control Ettin
622{
624 {
625 // check for a spawn spell with a valid caster (subdued ettin)
626 Aura const* spawnAura = GetCaster()->GetAura(SPELL_CANYON_ETTIN_SPAWN_SPELL, [](Aura const* aura)
627 {
628 return aura->GetCaster() != nullptr;
629 });
630
631 if (spawnAura != nullptr)
632 {
633 // fail if the subdued ettin is no longer alive
634 if (!spawnAura->GetCaster()->IsAlive())
636 }
637 else
638 {
639 // no spawn spell, so require nearby canyon ettin
640 if (!GetCaster()->FindNearestCreature(NPC_CANYON_ETTIN, GetSpellInfo()->GetMaxRange(), true))
642 }
643
644 return SPELL_CAST_OK;
645 }
646
647 void HandleScriptEffect(SpellEffIndex /*effIndex*/) const
648 {
649 if (Unit const* target = GetHitUnit())
650 {
651 // conditions ensure this ettin is owned by player
652 if (target->GetEntry() == NPC_SUBDUED_CANYON_ETTIN)
653 {
654 GetCaster()->CastSpell(nullptr, SPELL_BOULDER_AURA, false);
656 }
657 else
658 GetCaster()->CastSpell(nullptr, SPELL_CONTROL_ETTIN_2, false);
659 }
660 }
661
667};
668
669// 80702 - Control Ettin
671{
672 void HandleScriptEffect(SpellEffIndex /*effIndex*/) const
673 {
674 if (Creature* target = GetHitCreature())
675 target->DespawnOrUnsummon();
676
677 // subdued ettin minion casts 82558 to player
678 std::list<TempSummon*> minionList;
680 if (TempSummon* ettin = minionList.front())
681 ettin->CastSpell(GetCaster(), SPELL_CANYON_ETTIN_SPAWN_SPELL, false);
682 }
683
688};
689
690/*######
691# npc_redridge_citizen "Used by entries 43222 and 43247"
692######*/
693
695{
696 EVENT_DETERMINE_EVENT = 7, // Determine where npc is located by aura
697 EVENT_PLAYEMOTE = 8, // Used by npc's in Lakeshire Inn
698 EVENT_SAY_TEXT = 9, // Used by npc's in Lakeshire Townhall
699 EVENT_LEAVE_TOWNHALL = 10, // Used by npc's in Lakeshire Townhall
700
701 SAY_IN_TOWNHALL = 0, // Used by npc's in Lakeshire Townhall
702 SAY_LEAVE_TOWNHALL = 1, // Used by npc's in Lakeshire Townhall
703};
704
714
716{
717 8,
718 {
719 { 0, -9221.39f, -2198.45f, 66.34846f },
720 { 1, -9221.39f, -2198.45f, 66.34846f },
721 { 2, -9226.39f, -2196.45f, 66.34846f },
722 { 3, -9231.64f, -2196.45f, 65.34846f },
723 { 4, -9231.39f, -2205.45f, 66.34846f },
724 { 5, -9231.64f, -2210.45f, 66.34846f },
725 { 6, -9244.14f, -2211.20f, 66.34846f },
726 { 7, -9255.31f, -2211.62f, 63.93340f }
727 },
729};
730
732{
733public:
734 npc_redridge_citizen() : CreatureScript("npc_redridge_citizen") { }
735
737 {
738 npc_redridge_citizenAI(Creature* creature) : ScriptedAI(creature) { }
739
740 void Reset() override
741 {
742 _events.Reset();
744 }
745
746 void UpdateAI(uint32 diff) override
747 {
748 _events.Update(diff);
749
750 if (!UpdateVictim())
751 {
752 while (uint32 eventId = _events.ExecuteEvent())
753 {
754 switch (eventId)
755 {
756 case EVENT_DETERMINE_EVENT: // Determine where npc is located
759 else if (me->HasAura(SPELL_APPLY_QUEST_INVIS_ZONE_19)) // Lakeshire Townhall
761 break;
762 case EVENT_PLAYEMOTE:
765 break;
766 case EVENT_SAY_TEXT:
767 if (roll_chance(3))
768 {
771 break;
772 }
773 if (roll_chance(30))
775 _events.Repeat(Seconds(30), Seconds(60));
776 break;
780 break;
781 default:
782 break;
783 }
784 }
785 }
786 }
787 private:
789 };
790
791 CreatureAI* GetAI(Creature* creature) const override
792 {
793 return new npc_redridge_citizenAI(creature);
794 }
795};
796
int32_t int32
Definition Define.h:150
uint32_t uint32
Definition Define.h:154
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition Duration.h:28
@ POINT_MOTION_TYPE
@ TYPEID_UNIT
Definition ObjectGuid.h:43
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:42
bool roll_chance(T chance)
Definition Random.h:55
#define RegisterCreatureAI(ai_name)
Definition ScriptMgr.h:1392
#define RegisterSpellScript(spell_script)
Definition ScriptMgr.h:1383
SpellEffIndex
@ EFFECT_1
@ EMOTE_ONESHOT_NO
@ EMOTE_ONESHOT_POINT
@ EMOTE_STATE_COWER
@ EMOTE_ONESHOT_BATTLE_ROAR
@ EMOTE_ONESHOT_CHEER
@ EMOTE_ONESHOT_ROAR
@ EMOTE_STATE_STUN
@ EMOTE_ONESHOT_SHOUT
@ SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_SCRIPT_EFFECT
SpellCastResult
@ SPELL_FAILED_BAD_IMPLICIT_TARGETS
@ SPELL_FAILED_OUT_OF_RANGE
@ SPELL_CAST_OK
#define SpellCheckCastFn(F)
#define SpellEffectFn(F, I, N)
@ REACT_PASSIVE
@ UNIT_STAND_STATE_STAND
Definition UnitDefines.h:42
DamageEffectType
Unit * GetCaster() const
ObjectGuid const & GetGUID() const
Definition BaseEntity.h:163
bool IsPlayer() const
Definition BaseEntity.h:173
TypeID GetTypeId() const
Definition BaseEntity.h:166
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
bool UpdateVictim()
Creature *const me
Definition CreatureAI.h:63
void SetReactState(ReactStates st)
Definition Creature.h:174
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
CreatureAI * AI() const
Definition Creature.h:228
uint32 ExecuteEvent()
Definition EventMap.cpp:77
void Update(uint32 time)
Definition EventMap.h:61
void Repeat(Milliseconds time)
Definition EventMap.cpp:67
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
Definition EventMap.cpp:40
void Reset()
Definition EventMap.cpp:25
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< float > closeEnoughDistance={}, Optional< MovementFadeObject > fadeObject={}, Scripting::v2::ActionResultSetter< MovementStopReason > &&scriptResult={})
void MovePath(uint32 pathId, bool repeatable, Optional< Milliseconds > duration={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< std::pair< Milliseconds, Milliseconds > > waitTimeRangeAtPathEnd={}, Optional< float > wanderDistanceAtPathEnds={}, Optional< bool > followPathBackwardsFromEndToStart={}, Optional< bool > exactSplinePath={}, bool generatePath=true, Optional< MovementFadeObject > fadeObject={}, Scripting::v2::ActionResultSetter< MovementStopReason > &&scriptResult={})
void Clear()
Definition ObjectGuid.h:329
uint32 GetEntry() const
Definition Object.h:89
uint32 const Id
Definition SpellInfo.h:328
HookList< CheckCastHandler > OnCheckCast
Creature * GetHitCreature() const
Unit * GetCaster() const
Unit * GetHitUnit() const
HookList< EffectHandler > OnEffectHitTarget
SpellInfo const * GetSpellInfo() const
TaskContext & Repeat(TaskScheduler::duration_t duration)
TaskScheduler & Schedule(duration_t time, task_handler_t task)
TaskScheduler & Update()
Update the scheduler to the current time.
Definition Unit.h:635
MotionMaster * GetMotionMaster()
Definition Unit.h:1723
void SetFacingToObject(WorldObject const *object, bool force=true)
Definition Unit.cpp:13307
bool IsAlive() const
Definition Unit.h:1185
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
Definition Unit.cpp:4700
bool HealthBelowPctDamaged(float pct, uint32 damage) const
Definition Unit.h:793
void GetAllMinionsByEntry(std::list< TempSummon * > &Minions, uint32 entry)
Definition Unit.cpp:6420
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
Definition Unit.cpp:4804
void HandleEmoteCommand(Emote emoteId, Player *target=nullptr, Trinity::IteratorPair< int32 const * > spellVisualKitIds={}, int32 sequenceVariation=0)
Definition Unit.cpp:1657
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3974
bool IsInCombat() const
Definition Unit.h:1058
void GetCreatureListWithEntryInGrid(Container &creatureContainer, uint32 entry, float maxSearchRange=250.0f) const
Definition Object.cpp:2658
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2217
Unit * GetOwner() const
Definition Object.cpp:1598
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition Object.cpp:1517
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
void HandleScriptEffect(SpellEffIndex) const
void HandleScriptEffect(SpellEffIndex) const
TC_GAME_API Player * GetPlayer(Map const *, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
void RandomResize(C &container, std::size_t requestedSize)
Definition Containers.h:67
constexpr float GetOrientation() const
Definition Position.h:90
void AttackStart(Unit *) override
== Triggered Actions Requested ==================
void DamageTaken(Unit *who, uint32 &damage, DamageEffectType, SpellInfo const *) override
void DamageTaken(Unit *who, uint32 &damage, DamageEffectType, SpellInfo const *) override
void UpdateAI(uint32 diff) override
void SpellHit(WorldObject *, SpellInfo const *spell) override
void DoAction(int32 const param) override
npc_redridge_huge_boulder(Creature *creature)
void MovementInform(uint32 movementType, uint32 pointId) override
void WaypointPathEnded(uint32, uint32 pathId) override
void SpellHit(WorldObject *caster, SpellInfo const *spell) override
const Emote EmoteID[6]
void AddSC_redridge_mountains()
constexpr Position DanielRepositionPos
@ NPC_BRIDGE_WORKER_ALEX
@ NPC_BRIDGE_WORKER_MATTHEW
@ NPC_BRIDGE_WORKER_JESS
@ NPC_BRIDGE_WORKER_TRENT
@ NPC_BRIDGE_WORKER_DMITRI
@ NPC_BRIDGE_WORKER_DANIEL
@ NPC_SUBDUED_CANYON_ETTIN
constexpr Position AlexRepositionPos
constexpr Position EttinNearBoulderPosition
constexpr Position TrentRepositionPos
@ TALK_MATTHEW_IM_PUSHING
WaypointPath const TownhallPath
@ EVENT_BRIDGE_WORKERS_COWER
@ EVENT_MATTHEW_PUSH_RESPONSE
constexpr Position JessRepositionPos
constexpr Position DmitriRepositionPos
@ SPELL_EJECT_PASSENGER_1
@ SPELL_CONTROL_ETTIN_2
@ SPELL_CANYON_ETTIN_SPAWN_SPELL
@ SPELL_LIFT_BOULDER_RIDE
@ SPELL_LIFT_HUGE_BOULDER
@ SPELL_DESPAWN_KILL_CREDIT
@ SPELL_APPLY_QUEST_INVIS_ZONE_3
@ SPELL_APPLY_QUEST_INVIS_ZONE_4
@ SPELL_CANYON_ETTIN_DESPAWN
@ SPELL_APPLY_QUEST_INVIS_ZONE_19
constexpr Position MatthewRepositionPos