38#include <unordered_map>
107 uint32 talkerEntry = UINT_MAX, line = 0;
151 if (talkerEntry != UINT_MAX)
175 belfast->StopMoving();
176 belfast->SetFacingToObject(invoker);
219 return GetCullingOfStratholmeAI<npc_hearthsinger_forresten_cotAI>(creature);
322 bool shouldAddSkipGossip =
true;
326 if (
Player* player = it->GetSource())
332 shouldAddSkipGossip =
false;
337 if (shouldAddSkipGossip)
431 return GetCullingOfStratholmeAI<npc_chromie_startAI>(creature);
499 time_t& whisperedTime =
Whispered[player->GetGUID()];
501 if (!whisperedTime || (now - whisperedTime) > 15)
562 return GetCullingOfStratholmeAI<npc_chromie_middleAI>(creature);
711 return GetCullingOfStratholmeAI<npc_martha_goslinAI>(creature);
747 martha->AI()->DoAction(0);
748 martha->SetFacingToObject(
me,
true);
771 martha->AI()->DoAction(0);
772 martha->SetFacingToObject(
me,
true);
841 return GetCullingOfStratholmeAI<npc_jena_andersonAI>(creature);
951 return GetCullingOfStratholmeAI<npc_bartleby_battsonAI>(creature);
1009 scruffy->GetMotionMaster()->MoveAlongSplineChain(0,
CHAIN_SCRUFFY1,
true);
1107 return GetCullingOfStratholmeAI<npc_malcolm_mooreAI>(creature);
1192 perelli->AI()->Talk(line,
me);
1194 perelli->SetFacingTo(ori);
1263 return GetCullingOfStratholmeAI<npc_sergeant_moriganAI>(creature);
1389 return GetCullingOfStratholmeAI<npc_roger_owensAI>(creature);
1416 if (newDist >= currentDist)
1418 currentDist = newDist;
1419 current = candidate;
1435 crate->SummonGameObject(
GO_PLAGUED_CRATE, *crate, crate->GetWorldRotation(), 1_days);
1439 highlight->Delete();
1443 float closestDist = INFINITY;
1469 return GetCullingOfStratholmeAI<npc_crate_helperAI>(creature);
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::chrono::minutes Minutes
Minutes shorthand typedef.
@ SPLINE_CHAIN_MOTION_TYPE
uint32 urand(uint32 min, uint32 max)
#define RegisterSpellScript(spell_script)
uint32 GetGossipActionFor(Player *player, uint32 gossipListId)
void AddGossipItemFor(Player *player, GossipOptionNpc optionNpc, std::string text, uint32 sender, uint32 action)
void SendGossipMenuFor(Player *player, uint32 npcTextID, ObjectGuid const &guid)
void ClearGossipMenuFor(Player *player)
void InitGossipMenuFor(Player *player, uint32 menuId)
void CloseGossipMenuFor(Player *player)
@ SPELL_EFFECT_SCRIPT_EFFECT
@ EMOTE_ONESHOT_EXCLAMATION
@ EMOTE_ONESHOT_CREATURE_SPECIAL
@ EMOTE_STATE_USE_STANDING
#define SpellEffectFn(F, I, N)
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
ObjectGuid const & GetGUID() const
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
TempSummon * SummonCreature(uint32 entry, Position const &pos, SummonPropertiesEntry const *properties=nullptr, Milliseconds duration=0ms, WorldObject *summoner=nullptr, uint32 spellId=0, uint32 vehId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty, SmoothPhasingInfo const *smoothPhasingInfo=nullptr)
void MoveAlongSplineChain(uint32 pointId, uint16 dbChainId, bool walk)
void ResumeSplineChain(SplineChainResumeInfo const &info)
bool HasItemCount(uint32 item, uint32 count=1, bool inBankAlso=false) const
bool HasAchieved(uint32 achievementId) const
bool CanBeGameMaster() const
bool IsGameMaster() const
void PrepareQuestMenu(ObjectGuid guid)
uint32 GetQuestId() const
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
Unit * GetHitUnit() const
HookList< EffectHandler > OnEffectHitTarget
static void GetResumeInfo(SplineChainResumeInfo &info, Unit const *owner, Optional< uint32 > id={})
virtual void DoAction(int32 param)
void SetStandState(UnitStandStateType state, uint32 animKitID=0)
MotionMaster * GetMotionMaster()
bool IsQuestGiver() const
void SetFacingToObject(WorldObject const *object, bool force=true, uint32 movementId=EVENT_FACE)
void SetEmoteState(Emote emote)
void SetFacingTo(float ori, bool force=true, uint32 movementId=EVENT_FACE)
void HandleEmoteCommand(Emote emoteId, Player *target=nullptr, Trinity::IteratorPair< int32 const * > spellVisualKitIds={}, int32 sequenceVariation=0)
GameObject * FindNearestGameObject(uint32 entry, float range, bool spawnedOnly=true) const
InstanceScript * GetInstanceScript() const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
TempSummon * SummonCreature(uint32 entry, Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
float GetDistance2d(WorldObject const *obj) const
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
virtual uint32 GetData(uint32) const
virtual void SetData(uint32, uint32)
virtual void SetGuidData(uint32, ObjectGuid)
bool OnTrigger(Player *player, AreaTriggerEntry const *) override
at_stratholme_inn_stairs_cot()
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
npc_hearthsinger_forresten_cot()
CreatureAI * GetAI(Creature *creature) const override
bool Validate(SpellInfo const *) override
void HandleScript(SpellEffIndex)
static constexpr float marthaIdleOrientation1
@ GOSSIP_OPTION_EXPLAIN_2
@ GOSSIP_OFFSET_EXPLAIN_1
@ GOSSIP_OFFSET_OPEN_GM_MENU
@ GOSSIP_OFFSET_EXPLAIN_2
@ GOSSIP_OFFSET_GM_INITIAL
@ GOSSIP_OPTION_EXPLAIN_1
static constexpr float scruffyFacing4
static constexpr float marthaIdleOrientation2
@ SPELL_ARCANE_DISRUPTION
static constexpr float malcolmFacing3
@ QUEST_DISPELLING_ILLUSIONS
@ SPELL_SUMMON_ARCANE_DISRUPTOR
static constexpr float scruffyFacing2
static constexpr Position scruffySpawn
@ DATA_INVOKING_PLAYER_GUID
@ SPELL_TELEPORT_TO_COT_STRATHOLME
static constexpr Position malcolmSpawn
void AddSC_culling_of_stratholme()
COSProgressStates GetStableStateFor(COSProgressStates const state)
TC_GAME_API Player * GetPlayer(Map const *, ObjectGuid const &guid)
std::string StringFormat(FormatString< Args... > fmt, Args &&... args) noexcept
Default TC string format function.
constexpr float GetExactDist2dSq(const float x, const float y) const
void UpdateAI(uint32 diff) override
void MovementInform(uint32 type, uint32 id) override
void DoAction(int32 action) override
void InitializeAI() override
npc_bartleby_battsonAI(Creature *creature)
static Creature * Find(Creature *helper)
CreatureAI * GetAI(Creature *creature) const override
void MoveInLineOfSight(Unit *unit) override
bool OnGossipHello(Player *player) override
npc_chromie_middleAI(Creature *creature)
InstanceScript *const Instance
std::unordered_map< ObjectGuid, time_t > Whispered
void JustAppeared() override
void AdvanceDungeon(Player const *player)
void UpdateAI(uint32 diff) override
bool OnGossipSelect(Player *player, uint32, uint32 listId) override
InstanceScript *const _instance
npc_chromie_startAI(Creature *creature)
bool OnGossipHello(Player *player) override
void OnQuestAccept(Player *, Quest const *quest) override
bool OnGossipSelect(Player *player, uint32, uint32 listId) override
void SpellHit(WorldObject *, SpellInfo const *spellInfo) override
uint32 GetData(uint32 data) const override
npc_crate_helperAI(Creature *creature)
void ReplaceIfCloser(Creature *candidate, Creature *¤t, float ¤tDist) const
void SetGUID(ObjectGuid const &guid, int32 id) override
InstanceScript const *const _instance
npc_hearthsinger_forresten_cotAI(Creature *creature)
ObjectGuid _triggeringPlayer
void SetData(uint32, uint32) override
void MoveInLineOfSight(Unit *unit) override
void UpdateAI(uint32 diff) override
void InitializeAI() override
void MovementInform(uint32 type, uint32 id) override
npc_jena_andersonAI(Creature *creature)
void DoAction(int32 action) override
void UpdateAI(uint32 diff) override
static Creature * Find(Creature *helper)
CreatureAI * GetAI(Creature *creature) const override
void MovementInform(uint32 type, uint32 id) override
void InitializeAI() override
void UpdateAI(uint32 diff) override
npc_malcolm_mooreAI(Creature *creature)
static void Spawn(Map *map)
CreatureAI * GetAI(Creature *creature) const override
void UpdateAI(uint32 diff) override
void JustAppeared() override
void DoAction(int32) override
npc_martha_goslinAI(Creature *creature)
void MovementInform(uint32 type, uint32 id) override
SplineChainResumeInfo ResumeInfo
CreatureAI * GetAI(Creature *creature) const override
void DoAction(int32 action) override
void UpdateAI(uint32 diff) override
npc_roger_owensAI(Creature *creature)
void MovementInform(uint32 type, uint32 id) override
static Creature * Find(Creature *helper)
CreatureAI * GetAI(Creature *creature) const override
void InitializeAI() override
void DoAction(int32 id) override
void MovementInform(uint32 type, uint32 id) override
void UpdateAI(uint32 diff) override
npc_sergeant_moriganAI(Creature *creature)
void Perelli(uint32 line, float ori=0.0f)
static Creature * Find(Creature *helper)
CreatureAI * GetAI(Creature *creature) const override