aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/World
diff options
context:
space:
mode:
authorMeji <alvaro.megias@outlook.com>2022-10-09 22:03:04 +0200
committerGitHub <noreply@github.com>2022-10-09 22:03:04 +0200
commitba49dbfdcbbbee4d6be39284c6924bf56d7f6586 (patch)
tree4831ee1c6bf8d98c75e8b0682e5e957dfb5be8c6 /src/server/scripts/World
parentd39923e4f916ae635693ae8c4872802570defd87 (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.cpp53
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