diff options
author | Meji <alvaro.megias@outlook.com> | 2022-10-09 22:03:04 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-09 22:03:04 +0200 |
commit | ba49dbfdcbbbee4d6be39284c6924bf56d7f6586 (patch) | |
tree | 4831ee1c6bf8d98c75e8b0682e5e957dfb5be8c6 /src/server/scripts/World | |
parent | d39923e4f916ae635693ae8c4872802570defd87 (diff) |
Core/Gossip: Drop OptionNpcFlag from gossip_menu_option (#28254)
Co-authored-by: Shauren <shauren.trinity@gmail.com>
Diffstat (limited to 'src/server/scripts/World')
-rw-r--r-- | src/server/scripts/World/npcs_special.cpp | 53 |
1 files changed, 24 insertions, 29 deletions
diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index 16103698dd9..ac11e69a6a8 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -2026,7 +2026,8 @@ enum ArgentPetGossipOptions enum Misc { - NPC_ARGENT_SQUIRE = 33238 + NPC_ARGENT_SQUIRE = 33238, + ACHIEVEMENT_PONY_UP = 3736 }; struct ArgentPonyBannerSpells @@ -2053,24 +2054,24 @@ public: { npc_argent_squire_gruntlingAI(Creature* creature) : ScriptedAI(creature) { - ScheduleTasks(); } - void ScheduleTasks() + void Reset() override { - _scheduler - .Schedule(Seconds(1), [this](TaskContext /*context*/) - { - if (Aura* ownerTired = me->GetOwner()->GetAura(SPELL_TIRED_PLAYER)) - if (Aura* squireTired = me->AddAura(IsArgentSquire() ? SPELL_AURA_TIRED_S : SPELL_AURA_TIRED_G, me)) - squireTired->SetDuration(ownerTired->GetDuration()); - }) - .Schedule(Seconds(1), [this](TaskContext context) + if (Player* owner = Object::ToPlayer(me->GetOwner())) + { + if (Aura* ownerTired = owner->GetAura(SPELL_TIRED_PLAYER)) + if (Aura* squireTired = me->AddAura(IsArgentSquire() ? SPELL_AURA_TIRED_S : SPELL_AURA_TIRED_G, me)) + squireTired->SetDuration(ownerTired->GetDuration()); + + if (owner->HasAchieved(ACHIEVEMENT_PONY_UP) && !me->HasAura(SPELL_AURA_TIRED_S) && !me->HasAura(SPELL_AURA_TIRED_G)) { - if ((me->HasAura(SPELL_AURA_TIRED_S) || me->HasAura(SPELL_AURA_TIRED_G)) && me->HasNpcFlag(UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_MAILBOX | UNIT_NPC_FLAG_VENDOR)) - me->RemoveNpcFlag(UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_MAILBOX | UNIT_NPC_FLAG_VENDOR); - context.Repeat(); - }); + me->SetNpcFlag(UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_MAILBOX | UNIT_NPC_FLAG_VENDOR); + return; + } + } + + me->RemoveNpcFlag(UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_MAILBOX | UNIT_NPC_FLAG_VENDOR); } bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override @@ -2079,7 +2080,7 @@ public: { case GOSSIP_OPTION_BANK: { - me->SetNpcFlag(UNIT_NPC_FLAG_BANKER); + me->RemoveNpcFlag(UNIT_NPC_FLAG_MAILBOX | UNIT_NPC_FLAG_VENDOR); uint32 _bankAura = IsArgentSquire() ? SPELL_AURA_BANK_S : SPELL_AURA_BANK_G; if (!me->HasAura(_bankAura)) DoCastSelf(_bankAura); @@ -2090,7 +2091,7 @@ public: } case GOSSIP_OPTION_SHOP: { - me->SetNpcFlag(UNIT_NPC_FLAG_VENDOR); + me->RemoveNpcFlag(UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_MAILBOX); uint32 _shopAura = IsArgentSquire() ? SPELL_AURA_SHOP_S : SPELL_AURA_SHOP_G; if (!me->HasAura(_shopAura)) DoCastSelf(_shopAura); @@ -2101,9 +2102,7 @@ public: } case GOSSIP_OPTION_MAIL: { - me->SetNpcFlag(UNIT_NPC_FLAG_MAILBOX); - player->GetSession()->SendShowMailBox(me->GetGUID()); - + me->RemoveNpcFlag(UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_VENDOR); uint32 _mailAura = IsArgentSquire() ? SPELL_AURA_POSTMAN_S : SPELL_AURA_POSTMAN_G; if (!me->HasAura(_mailAura)) DoCastSelf(_mailAura); @@ -2121,21 +2120,17 @@ public: DoCastSelf(bannerSpells[gossipListId - 3].spellSquire, true); else DoCastSelf(bannerSpells[gossipListId - 3].spellGruntling, true); + + player->PlayerTalkClass->SendCloseGossip(); + break; + default: break; } - player->PlayerTalkClass->SendCloseGossip(); - return false; - } - void UpdateAI(uint32 diff) override - { - _scheduler.Update(diff); + return false; } bool IsArgentSquire() const { return me->GetEntry() == NPC_ARGENT_SQUIRE; } - - private: - TaskScheduler _scheduler; }; CreatureAI* GetAI(Creature *creature) const override |