diff options
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/AI/CoreAI/GameObjectAI.h | 30 | ||||
| -rw-r--r-- | src/server/game/AI/CoreAI/UnitAI.h | 28 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.cpp | 43 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.h | 23 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 12 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 8 | ||||
| -rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 17 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 11 | ||||
| -rw-r--r-- | src/server/game/Events/GameEventMgr.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 12 | ||||
| -rw-r--r-- | src/server/game/Handlers/NPCHandler.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 13 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 181 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 78 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 4 |
17 files changed, 121 insertions, 349 deletions
diff --git a/src/server/game/AI/CoreAI/GameObjectAI.h b/src/server/game/AI/CoreAI/GameObjectAI.h index 7e149a89962..64b790c0d68 100644 --- a/src/server/game/AI/CoreAI/GameObjectAI.h +++ b/src/server/game/AI/CoreAI/GameObjectAI.h @@ -29,9 +29,9 @@ class TC_GAME_API GameObjectAI { protected: - GameObject* const go; + GameObject* const me; public: - explicit GameObjectAI(GameObject* g) : go(g) { } + explicit GameObjectAI(GameObject* g) : me(g) { } virtual ~GameObjectAI() { } virtual void UpdateAI(uint32 /*diff*/) { } @@ -47,19 +47,35 @@ class TC_GAME_API GameObjectAI static int Permissible(GameObject const* go); + // Called when a player opens a gossip dialog with the gameobject. virtual bool GossipHello(Player* /*player*/, bool /*reportUse*/) { return false; } - virtual bool GossipSelect(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/) { return false; } - virtual bool GossipSelectCode(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/, char const* /*code*/) { return false; } - virtual bool QuestAccept(Player* /*player*/, Quest const* /*quest*/) { return false; } - virtual bool QuestReward(Player* /*player*/, Quest const* /*quest*/, uint32 /*opt*/) { return false; } + + // Called when a player selects a gossip item in the gameobject's gossip menu. + virtual bool GossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) { return false; } + + // Called when a player selects a gossip with a code in the gameobject's gossip menu. + virtual bool GossipSelectCode(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/, char const* /*code*/) { return false; } + + // Called when a player accepts a quest from the gameobject. + virtual void QuestAccept(Player* /*player*/, Quest const* /*quest*/) { } + + // Called when a player completes a quest and is rewarded, opt is the selected item's index or 0 + virtual void QuestReward(Player* /*player*/, Quest const* /*quest*/, uint32 /*opt*/) { } + + // Called when the dialog status between a player and the gameobject is requested. virtual uint32 GetDialogStatus(Player* /*player*/) { return DIALOG_STATUS_SCRIPTED_NO_STATUS; } + virtual void Destroyed(Player* /*player*/, uint32 /*eventId*/) { } + virtual void Damaged(Player* /*player*/, uint32 /*eventId*/) { } + virtual uint32 GetData(uint32 /*id*/) const { return 0; } virtual void SetData64(uint32 /*id*/, uint64 /*value*/) { } virtual uint64 GetData64(uint32 /*id*/) const { return 0; } virtual void SetData(uint32 /*id*/, uint32 /*value*/) { } + virtual void OnGameEvent(bool /*start*/, uint16 /*eventId*/) { } - virtual void OnStateChanged(uint32 /*state*/, Unit* /*unit*/) { } + virtual void OnLootStateChanged(uint32 /*state*/, Unit* /*unit*/) { } + virtual void OnStateChanged(uint32 /*state*/) { } virtual void EventInform(uint32 /*eventId*/) { } virtual void SpellHit(Unit* /*unit*/, const SpellInfo* /*spellInfo*/) { } }; diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index f940eca3799..b70a1613a25 100644 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -298,13 +298,27 @@ class TC_GAME_API UnitAI static AISpellInfoType* AISpellInfo; static void FillAISpellInfo(); - virtual void sGossipHello(Player* /*player*/) { } - virtual void sGossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) { } - virtual void sGossipSelectCode(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/, char const* /*code*/) { } - virtual void sQuestAccept(Player* /*player*/, Quest const* /*quest*/) { } - virtual void sQuestSelect(Player* /*player*/, Quest const* /*quest*/) { } - virtual void sQuestReward(Player* /*player*/, Quest const* /*quest*/, uint32 /*opt*/) { } - virtual void sOnGameEvent(bool /*start*/, uint16 /*eventId*/) { } + // Called when a player opens a gossip dialog with the creature. + virtual bool GossipHello(Player* /*player*/) { return false; } + + // Called when a player selects a gossip item in the creature's gossip menu. + virtual bool GossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) { return false; } + + // Called when a player selects a gossip with a code in the creature's gossip menu. + virtual bool GossipSelectCode(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/, const char* /*code*/) { return false; } + + // Called when a player accepts a quest from the creature. + virtual void QuestAccept(Player* /*player*/, Quest const* /*quest*/) { } + + // Called when a player completes a quest and is rewarded, opt is the selected item's index or 0 + virtual void QuestReward(Player* /*player*/, Quest const* /*quest*/, uint32 /*opt*/) { } + + // Called when a game event starts or ends + virtual void OnGameEvent(bool /*start*/, uint16 /*eventId*/) { } + + // Called when the dialog status between a player and the creature is requested. + virtual uint32 GetDialogStatus(Player* /*player*/) { return DIALOG_STATUS_SCRIPTED_NO_STATUS; } + private: UnitAI(UnitAI const& right) = delete; diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 6b6cfe58254..62678e10eef 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -807,24 +807,29 @@ void SmartAI::SetEvadeDisabled(bool disable) mEvadeDisabled = disable; } -void SmartAI::sGossipHello(Player* player) +bool SmartAI::GossipHello(Player* player) { GetScript()->ProcessEventsFor(SMART_EVENT_GOSSIP_HELLO, player); + return false; } -void SmartAI::sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) +bool SmartAI::GossipSelect(Player* player, uint32 menuId, uint32 gossipListId) { GetScript()->ProcessEventsFor(SMART_EVENT_GOSSIP_SELECT, player, menuId, gossipListId); + return false; } -void SmartAI::sGossipSelectCode(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/, const char* /*code*/) { } +bool SmartAI::GossipSelectCode(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/, const char* /*code*/) +{ + return false; +} -void SmartAI::sQuestAccept(Player* player, Quest const* quest) +void SmartAI::QuestAccept(Player* player, Quest const* quest) { GetScript()->ProcessEventsFor(SMART_EVENT_ACCEPTED_QUEST, player, quest->GetQuestId()); } -void SmartAI::sQuestReward(Player* player, Quest const* quest, uint32 opt) +void SmartAI::QuestReward(Player* player, Quest const* quest, uint32 opt) { GetScript()->ProcessEventsFor(SMART_EVENT_REWARD_QUEST, player, quest->GetQuestId(), opt); } @@ -914,7 +919,7 @@ void SmartAI::SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker) GetScript()->SetScript9(e, entry); } -void SmartAI::sOnGameEvent(bool start, uint16 eventId) +void SmartAI::OnGameEvent(bool start, uint16 eventId) { GetScript()->ProcessEventsFor(start ? SMART_EVENT_GAME_EVENT_START : SMART_EVENT_GAME_EVENT_END, nullptr, eventId); } @@ -970,10 +975,10 @@ void SmartGameObjectAI::UpdateAI(uint32 diff) void SmartGameObjectAI::InitializeAI() { - GetScript()->OnInitialize(go); + GetScript()->OnInitialize(me); // do not call respawn event if go is not spawned - if (go->isSpawned()) + if (me->isSpawned()) GetScript()->ProcessEventsFor(SMART_EVENT_RESPAWN); //Reset(); } @@ -990,41 +995,39 @@ void SmartGameObjectAI::Reset() bool SmartGameObjectAI::GossipHello(Player* player, bool reportUse) { TC_LOG_DEBUG("scripts.ai", "SmartGameObjectAI::GossipHello"); - GetScript()->ProcessEventsFor(SMART_EVENT_GOSSIP_HELLO, player, uint32(reportUse), 0, false, nullptr, go); + GetScript()->ProcessEventsFor(SMART_EVENT_GOSSIP_HELLO, player, uint32(reportUse), 0, false, nullptr, me); return false; } // Called when a player selects a gossip item in the gameobject's gossip menu. bool SmartGameObjectAI::GossipSelect(Player* player, uint32 sender, uint32 action) { - GetScript()->ProcessEventsFor(SMART_EVENT_GOSSIP_SELECT, player, sender, action, false, nullptr, go); + GetScript()->ProcessEventsFor(SMART_EVENT_GOSSIP_SELECT, player, sender, action, false, nullptr, me); return false; } // Called when a player selects a gossip with a code in the gameobject's gossip menu. -bool SmartGameObjectAI::GossipSelectCode(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/, const char* /*code*/) +bool SmartGameObjectAI::GossipSelectCode(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/, const char* /*code*/) { return false; } // Called when a player accepts a quest from the gameobject. -bool SmartGameObjectAI::QuestAccept(Player* player, Quest const* quest) +void SmartGameObjectAI::QuestAccept(Player* player, Quest const* quest) { - GetScript()->ProcessEventsFor(SMART_EVENT_ACCEPTED_QUEST, player, quest->GetQuestId(), 0, false, nullptr, go); - return false; + GetScript()->ProcessEventsFor(SMART_EVENT_ACCEPTED_QUEST, player, quest->GetQuestId(), 0, false, nullptr, me); } // Called when a player selects a quest reward. -bool SmartGameObjectAI::QuestReward(Player* player, Quest const* quest, uint32 opt) +void SmartGameObjectAI::QuestReward(Player* player, Quest const* quest, uint32 opt) { - GetScript()->ProcessEventsFor(SMART_EVENT_REWARD_QUEST, player, quest->GetQuestId(), opt, false, nullptr, go); - return false; + GetScript()->ProcessEventsFor(SMART_EVENT_REWARD_QUEST, player, quest->GetQuestId(), opt, false, nullptr, me); } // Called when the gameobject is destroyed (destructible buildings only). void SmartGameObjectAI::Destroyed(Player* player, uint32 eventId) { - GetScript()->ProcessEventsFor(SMART_EVENT_DEATH, player, eventId, 0, false, nullptr, go); + GetScript()->ProcessEventsFor(SMART_EVENT_DEATH, player, eventId, 0, false, nullptr, me); } void SmartGameObjectAI::SetData(uint32 id, uint32 value) @@ -1044,9 +1047,9 @@ void SmartGameObjectAI::OnGameEvent(bool start, uint16 eventId) GetScript()->ProcessEventsFor(start ? SMART_EVENT_GAME_EVENT_START : SMART_EVENT_GAME_EVENT_END, nullptr, eventId); } -void SmartGameObjectAI::OnStateChanged(uint32 state, Unit* unit) +void SmartGameObjectAI::OnLootStateChanged(uint32 state, Unit* unit) { - GetScript()->ProcessEventsFor(SMART_EVENT_GO_STATE_CHANGED, unit, state); + GetScript()->ProcessEventsFor(SMART_EVENT_GO_LOOT_STATE_CHANGED, unit, state); } void SmartGameObjectAI::EventInform(uint32 eventId) diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index 978711a7f98..faeb7e2e8d3 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -178,13 +178,12 @@ class TC_GAME_API SmartAI : public CreatureAI void SetInvincibilityHpLevel(uint32 level) { mInvincibilityHpLevel = level; } - void sGossipHello(Player* player) override; - void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override; - void sGossipSelectCode(Player* player, uint32 menuId, uint32 gossipListId, const char* code) override; - void sQuestAccept(Player* player, Quest const* quest) override; - //void sQuestSelect(Player* player, Quest const* quest) override; - void sQuestReward(Player* player, Quest const* quest, uint32 opt) override; - void sOnGameEvent(bool start, uint16 eventId) override; + bool GossipHello(Player* player) override; + bool GossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override; + bool GossipSelectCode(Player* player, uint32 menuId, uint32 gossipListId, const char* code) override; + void QuestAccept(Player* player, Quest const* quest) override; + void QuestReward(Player* player, Quest const* quest, uint32 opt) override; + void OnGameEvent(bool start, uint16 eventId) override; uint32 mEscortQuestID; @@ -256,15 +255,15 @@ class TC_GAME_API SmartGameObjectAI : public GameObjectAI static int Permissible(const GameObject* g); bool GossipHello(Player* player, bool reportUse) override; - bool GossipSelect(Player* player, uint32 sender, uint32 action) override; - bool GossipSelectCode(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/, const char* /*code*/) override; - bool QuestAccept(Player* player, Quest const* quest) override; - bool QuestReward(Player* player, Quest const* quest, uint32 opt) override; + bool GossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override; + bool GossipSelectCode(Player* player, uint32 menuId, uint32 gossipListId, const char* code) override; + void QuestAccept(Player* player, Quest const* quest) override; + void QuestReward(Player* player, Quest const* quest, uint32 opt) override; void Destroyed(Player* player, uint32 eventId) override; void SetData(uint32 id, uint32 value) override; void SetScript9(SmartScriptHolder& e, uint32 entry, Unit* invoker); void OnGameEvent(bool start, uint16 eventId) override; - void OnStateChanged(uint32 state, Unit* unit) override; + void OnLootStateChanged(uint32 state, Unit* unit) override; void EventInform(uint32 eventId) override; void SpellHit(Unit* unit, const SpellInfo* spellInfo) override; diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 4aa768b4b20..a10766162e4 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2685,16 +2685,16 @@ void SmartScript::InstallTemplate(SmartScriptHolder const& e) if (!go) return; //store hostage as id1 - AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, SMART_ACTION_STORE_TARGET_LIST, 1, 0, 0, 0, 0, 0, SMART_TARGET_CLOSEST_CREATURE, e.action.installTtemplate.param1, 10, 0, 0); + AddEvent(SMART_EVENT_GO_LOOT_STATE_CHANGED, 0, GO_ACTIVATED, 0, 0, 0, SMART_ACTION_STORE_TARGET_LIST, 1, 0, 0, 0, 0, 0, SMART_TARGET_CLOSEST_CREATURE, e.action.installTtemplate.param1, 10, 0, 0); //store invoker as id2 - AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, SMART_ACTION_STORE_TARGET_LIST, 2, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0); + AddEvent(SMART_EVENT_GO_LOOT_STATE_CHANGED, 0, GO_ACTIVATED, 0, 0, 0, SMART_ACTION_STORE_TARGET_LIST, 2, 0, 0, 0, 0, 0, SMART_TARGET_NONE, 0, 0, 0, 0); //signal hostage - AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, SMART_ACTION_SET_DATA, 0, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 1, 0, 0, 0); + AddEvent(SMART_EVENT_GO_LOOT_STATE_CHANGED, 0, GO_ACTIVATED, 0, 0, 0, SMART_ACTION_SET_DATA, 0, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 1, 0, 0, 0); //when hostage raeched end point, give credit to invoker if (e.action.installTtemplate.param2) AddEvent(SMART_EVENT_DATA_SET, 0, 0, 0, 0, 0, SMART_ACTION_CALL_KILLEDMONSTER, e.action.installTtemplate.param1, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 2, 0, 0, 0); else - AddEvent(SMART_EVENT_GO_STATE_CHANGED, 0, 2, 0, 0, 0, SMART_ACTION_CALL_KILLEDMONSTER, e.action.installTtemplate.param1, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 2, 0, 0, 0); + AddEvent(SMART_EVENT_GO_LOOT_STATE_CHANGED, 0, GO_ACTIVATED, 0, 0, 0, SMART_ACTION_CALL_KILLEDMONSTER, e.action.installTtemplate.param1, 0, 0, 0, 0, 0, SMART_TARGET_STORED, 2, 0, 0, 0); break; } case SMARTAI_TEMPLATE_BASIC: @@ -3533,9 +3533,9 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui ProcessAction(e, nullptr, var0); break; } - case SMART_EVENT_GO_STATE_CHANGED: + case SMART_EVENT_GO_LOOT_STATE_CHANGED: { - if (e.event.goStateChanged.state != var0) + if (e.event.goLootStateChanged.lootState != var0) return; ProcessAction(e, unit, var0, var1); break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 04a07490680..068ec95b6c9 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -791,7 +791,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) } break; case SMART_EVENT_LINK: - case SMART_EVENT_GO_STATE_CHANGED: + case SMART_EVENT_GO_LOOT_STATE_CHANGED: case SMART_EVENT_GO_EVENT_INFORM: case SMART_EVENT_TIMED_EVENT_TRIGGERED: case SMART_EVENT_INSTANCE_PLAYER_ENTER: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 617820086eb..61f006aea86 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -181,7 +181,7 @@ enum SMART_EVENT SMART_EVENT_IS_BEHIND_TARGET = 67, // cooldownMin, CooldownMax SMART_EVENT_GAME_EVENT_START = 68, // game_event.Entry SMART_EVENT_GAME_EVENT_END = 69, // game_event.Entry - SMART_EVENT_GO_STATE_CHANGED = 70, // go state + SMART_EVENT_GO_LOOT_STATE_CHANGED = 70, // go LootState SMART_EVENT_GO_EVENT_INFORM = 71, // eventId SMART_EVENT_ACTION_DONE = 72, // eventId (SharedDefines.EventId) SMART_EVENT_ON_SPELLCLICK = 73, // clicker (unit) @@ -399,8 +399,8 @@ struct SmartEvent struct { - uint32 state; - } goStateChanged; + uint32 lootState; + } goLootStateChanged; struct { @@ -1443,7 +1443,7 @@ const uint32 SmartAIEventMask[SMART_EVENT_END][2] = {SMART_EVENT_IS_BEHIND_TARGET, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_GAME_EVENT_START, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT }, {SMART_EVENT_GAME_EVENT_END, SMART_SCRIPT_TYPE_MASK_CREATURE + SMART_SCRIPT_TYPE_MASK_GAMEOBJECT }, - {SMART_EVENT_GO_STATE_CHANGED, SMART_SCRIPT_TYPE_MASK_GAMEOBJECT }, + {SMART_EVENT_GO_LOOT_STATE_CHANGED, SMART_SCRIPT_TYPE_MASK_GAMEOBJECT }, {SMART_EVENT_GO_EVENT_INFORM, SMART_SCRIPT_TYPE_MASK_GAMEOBJECT }, {SMART_EVENT_ACTION_DONE, SMART_SCRIPT_TYPE_MASK_CREATURE }, {SMART_EVENT_ON_SPELLCLICK, SMART_SCRIPT_TYPE_MASK_CREATURE }, diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 360fe1151c9..b6c0d27f0ad 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -774,8 +774,6 @@ void Creature::Update(uint32 diff) default: break; } - - sScriptMgr->OnCreatureUpdate(this, diff); } void Creature::Regenerate(Powers power) diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index b5621918295..ea9dfcde47c 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -33,6 +33,7 @@ #include "UpdateFieldFlags.h" #include "World.h" #include "Transport.h" +#include "GossipDef.h" #include "Packets/QueryPackets.h" @@ -750,7 +751,6 @@ void GameObject::Update(uint32 diff) break; } } - sScriptMgr->OnGameObjectUpdate(this, diff); } void GameObject::Refresh() @@ -1252,9 +1252,7 @@ void GameObject::Use(Unit* user) if (Player* playerUser = user->ToPlayer()) { - if (sScriptMgr->OnGossipHello(playerUser, this)) - return; - + playerUser->PlayerTalkClass->ClearMenus(); if (AI()->GossipHello(playerUser, false)) return; } @@ -2081,7 +2079,7 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player* case GO_DESTRUCTIBLE_DAMAGED: { EventInform(m_goInfo->building.damagedEvent, eventInvoker); - sScriptMgr->OnGameObjectDamaged(this, eventInvoker); + AI()->Damaged(eventInvoker, m_goInfo->building.damagedEvent); RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED); SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); @@ -2105,8 +2103,9 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player* } case GO_DESTRUCTIBLE_DESTROYED: { - sScriptMgr->OnGameObjectDestroyed(this, eventInvoker); EventInform(m_goInfo->building.destroyedEvent, eventInvoker); + AI()->Destroyed(eventInvoker, m_goInfo->building.destroyedEvent); + if (eventInvoker) if (Battleground* bg = eventInvoker->GetBattleground()) bg->DestroyGate(eventInvoker, this); @@ -2159,8 +2158,7 @@ void GameObject::SetLootState(LootState state, Unit* unit) else m_lootStateUnitGUID.Clear(); - AI()->OnStateChanged(state, unit); - sScriptMgr->OnGameObjectLootStateChanged(this, state, unit); + AI()->OnLootStateChanged(state, unit); if (GetGoType() == GAMEOBJECT_TYPE_DOOR) // only set collision for doors on SetGoState return; @@ -2179,7 +2177,8 @@ void GameObject::SetLootState(LootState state, Unit* unit) void GameObject::SetGoState(GOState state) { SetByteValue(GAMEOBJECT_BYTES_1, 0, state); - sScriptMgr->OnGameObjectStateChanged(this, state); + if (AI()) + AI()->OnStateChanged(state); if (m_model && !IsTransport()) { if (!IsInWorld()) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 42f9d055323..eca6f44681f 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -14942,8 +14942,8 @@ void Player::AddQuestAndCheckCompletion(Quest const* quest, Object* questGiver) switch (questGiver->GetTypeId()) { case TYPEID_UNIT: - sScriptMgr->OnQuestAccept(this, questGiver->ToCreature(), quest); - questGiver->ToCreature()->AI()->sQuestAccept(this, quest); + PlayerTalkClass->ClearMenus(); + questGiver->ToCreature()->AI()->QuestAccept(this, quest); break; case TYPEID_ITEM: case TYPEID_CONTAINER: @@ -14968,7 +14968,7 @@ void Player::AddQuestAndCheckCompletion(Quest const* quest, Object* questGiver) break; } case TYPEID_GAMEOBJECT: - sScriptMgr->OnQuestAccept(this, questGiver->ToGameObject(), quest); + PlayerTalkClass->ClearMenus(); questGiver->ToGameObject()->AI()->QuestAccept(this, quest); break; default: @@ -16022,11 +16022,12 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object* questgiver) QuestRelationBounds qr; QuestRelationBounds qir; + PlayerTalkClass->ClearMenus(); switch (questgiver->GetTypeId()) { case TYPEID_GAMEOBJECT: { - QuestGiverStatus questStatus = QuestGiverStatus(sScriptMgr->GetDialogStatus(this, questgiver->ToGameObject())); + QuestGiverStatus questStatus = QuestGiverStatus(questgiver->ToGameObject()->AI()->GetDialogStatus(this)); if (questStatus != DIALOG_STATUS_SCRIPTED_NO_STATUS) return questStatus; qr = sObjectMgr->GetGOQuestRelationBounds(questgiver->GetEntry()); @@ -16035,7 +16036,7 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object* questgiver) } case TYPEID_UNIT: { - QuestGiverStatus questStatus = QuestGiverStatus(sScriptMgr->GetDialogStatus(this, questgiver->ToCreature())); + QuestGiverStatus questStatus = QuestGiverStatus(questgiver->ToCreature()->AI()->GetDialogStatus(this)); if (questStatus != DIALOG_STATUS_SCRIPTED_NO_STATUS) return questStatus; qr = sObjectMgr->GetCreatureQuestRelationBounds(questgiver->GetEntry()); diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index 0d59f6731af..b126eb9c644 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -1635,7 +1635,7 @@ public: { for (auto const& p : creatureMap) if (p.second->IsInWorld() && p.second->IsAIEnabled) - p.second->AI()->sOnGameEvent(_activate, _eventId); + p.second->AI()->OnGameEvent(_activate, _eventId); } void Visit(std::unordered_map<ObjectGuid, GameObject*>& gameObjectMap) diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index e360493cd89..2e18f843a8d 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -146,14 +146,12 @@ void WorldSession::HandleGossipSelectOptionOpcode(WorldPacket& recvData) { if (unit) { - unit->AI()->sGossipSelectCode(_player, menuId, gossipListId, code.c_str()); - if (!sScriptMgr->OnGossipSelectCode(_player, unit, _player->PlayerTalkClass->GetGossipOptionSender(gossipListId), _player->PlayerTalkClass->GetGossipOptionAction(gossipListId), code.c_str())) + if (!unit->AI()->GossipSelectCode(_player, menuId, gossipListId, code.c_str())) _player->OnGossipSelect(unit, gossipListId, menuId); } else { - go->AI()->GossipSelectCode(_player, menuId, gossipListId, code.c_str()); - if (!sScriptMgr->OnGossipSelectCode(_player, go, _player->PlayerTalkClass->GetGossipOptionSender(gossipListId), _player->PlayerTalkClass->GetGossipOptionAction(gossipListId), code.c_str())) + if (!go->AI()->GossipSelectCode(_player, menuId, gossipListId, code.c_str())) _player->OnGossipSelect(go, gossipListId, menuId); } } @@ -161,14 +159,12 @@ void WorldSession::HandleGossipSelectOptionOpcode(WorldPacket& recvData) { if (unit) { - unit->AI()->sGossipSelect(_player, menuId, gossipListId); - if (!sScriptMgr->OnGossipSelect(_player, unit, _player->PlayerTalkClass->GetGossipOptionSender(gossipListId), _player->PlayerTalkClass->GetGossipOptionAction(gossipListId))) + if (!unit->AI()->GossipSelect(_player, menuId, gossipListId)) _player->OnGossipSelect(unit, gossipListId, menuId); } else { - go->AI()->GossipSelect(_player, menuId, gossipListId); - if (!sScriptMgr->OnGossipSelect(_player, go, _player->PlayerTalkClass->GetGossipOptionSender(gossipListId), _player->PlayerTalkClass->GetGossipOptionAction(gossipListId))) + if (!go->AI()->GossipSelect(_player, menuId, gossipListId)) _player->OnGossipSelect(go, gossipListId, menuId); } } diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp index d5e8f8c1e7c..beca093a6a9 100644 --- a/src/server/game/Handlers/NPCHandler.cpp +++ b/src/server/game/Handlers/NPCHandler.cpp @@ -337,13 +337,13 @@ void WorldSession::HandleGossipHelloOpcode(WorldPacket& recvData) } } - if (!sScriptMgr->OnGossipHello(_player, unit)) + _player->PlayerTalkClass->ClearMenus(); + if (!unit->AI()->GossipHello(_player)) { // _player->TalkedToCreature(unit->GetEntry(), unit->GetGUID()); _player->PrepareGossipMenu(unit, unit->GetCreatureTemplate()->GossipMenuId, true); _player->SendPreparedGossip(unit); } - unit->AI()->sGossipHello(_player); } void WorldSession::HandleSpiritHealerActivateOpcode(WorldPacket& recvData) diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 85254d068b7..24f2a442998 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -91,13 +91,12 @@ void WorldSession::HandleQuestgiverHelloOpcode(WorldPacket& recvData) // Stop the npc if moving creature->StopMoving(); - if (sScriptMgr->OnGossipHello(_player, creature)) + _player->PlayerTalkClass->ClearMenus(); + if (creature->AI()->GossipHello(_player)) return; _player->PrepareGossipMenu(creature, creature->GetCreatureTemplate()->GossipMenuId, true); _player->SendPreparedGossip(creature); - - creature->AI()->sGossipHello(_player); } void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) @@ -316,8 +315,8 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPacket& recvData) } } - if (!sScriptMgr->OnQuestReward(_player, questgiver, quest, reward)) - questgiver->AI()->sQuestReward(_player, quest, reward); + _player->PlayerTalkClass->ClearMenus(); + questgiver->AI()->QuestReward(_player, quest, reward); break; } case TYPEID_GAMEOBJECT: @@ -336,8 +335,8 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode(WorldPacket& recvData) } } - if (!sScriptMgr->OnQuestReward(_player, questGiver, quest, reward)) - questGiver->AI()->QuestReward(_player, quest, reward); + _player->PlayerTalkClass->ClearMenus(); + questGiver->AI()->QuestReward(_player, quest, reward); break; } default: diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 1ed163745d3..276054b1567 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -1561,78 +1561,6 @@ bool ScriptMgr::OnCastItemCombatSpell(Player* player, Unit* victim, SpellInfo co return tmpscript->OnCastItemCombatSpell(player, victim, spellInfo, item); } -bool ScriptMgr::OnGossipHello(Player* player, Creature* creature) -{ - ASSERT(player); - ASSERT(creature); - - GET_SCRIPT_RET(CreatureScript, creature->GetScriptId(), tmpscript, false); - player->PlayerTalkClass->ClearMenus(); - return tmpscript->OnGossipHello(player, creature); -} - -bool ScriptMgr::OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) -{ - ASSERT(player); - ASSERT(creature); - - GET_SCRIPT_RET(CreatureScript, creature->GetScriptId(), tmpscript, false); - return tmpscript->OnGossipSelect(player, creature, sender, action); -} - -bool ScriptMgr::OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 action, const char* code) -{ - ASSERT(player); - ASSERT(creature); - ASSERT(code); - - GET_SCRIPT_RET(CreatureScript, creature->GetScriptId(), tmpscript, false); - return tmpscript->OnGossipSelectCode(player, creature, sender, action, code); -} - -bool ScriptMgr::OnQuestAccept(Player* player, Creature* creature, Quest const* quest) -{ - ASSERT(player); - ASSERT(creature); - ASSERT(quest); - - GET_SCRIPT_RET(CreatureScript, creature->GetScriptId(), tmpscript, false); - player->PlayerTalkClass->ClearMenus(); - return tmpscript->OnQuestAccept(player, creature, quest); -} - -bool ScriptMgr::OnQuestSelect(Player* player, Creature* creature, Quest const* quest) -{ - ASSERT(player); - ASSERT(creature); - ASSERT(quest); - - GET_SCRIPT_RET(CreatureScript, creature->GetScriptId(), tmpscript, false); - player->PlayerTalkClass->ClearMenus(); - return tmpscript->OnQuestSelect(player, creature, quest); -} - -bool ScriptMgr::OnQuestReward(Player* player, Creature* creature, Quest const* quest, uint32 opt) -{ - ASSERT(player); - ASSERT(creature); - ASSERT(quest); - - GET_SCRIPT_RET(CreatureScript, creature->GetScriptId(), tmpscript, false); - player->PlayerTalkClass->ClearMenus(); - return tmpscript->OnQuestReward(player, creature, quest, opt); -} - -uint32 ScriptMgr::GetDialogStatus(Player* player, Creature* creature) -{ - ASSERT(player); - ASSERT(creature); - - GET_SCRIPT_RET(CreatureScript, creature->GetScriptId(), tmpscript, DIALOG_STATUS_SCRIPTED_NO_STATUS); - player->PlayerTalkClass->ClearMenus(); - return tmpscript->GetDialogStatus(player, creature); -} - bool ScriptMgr::CanSpawn(ObjectGuid::LowType spawnId, uint32 entry, CreatureTemplate const* actTemplate, CreatureData const* cData, Map const* map) { ASSERT(actTemplate); @@ -1660,115 +1588,6 @@ GameObjectAI* ScriptMgr::GetGameObjectAI(GameObject* gameobject) return tmpscript->GetAI(gameobject); } -void ScriptMgr::OnCreatureUpdate(Creature* creature, uint32 diff) -{ - ASSERT(creature); - - GET_SCRIPT(CreatureScript, creature->GetScriptId(), tmpscript); - tmpscript->OnUpdate(creature, diff); -} - -bool ScriptMgr::OnGossipHello(Player* player, GameObject* go) -{ - ASSERT(player); - ASSERT(go); - - GET_SCRIPT_RET(GameObjectScript, go->GetScriptId(), tmpscript, false); - player->PlayerTalkClass->ClearMenus(); - return tmpscript->OnGossipHello(player, go); -} - -bool ScriptMgr::OnGossipSelect(Player* player, GameObject* go, uint32 sender, uint32 action) -{ - ASSERT(player); - ASSERT(go); - - GET_SCRIPT_RET(GameObjectScript, go->GetScriptId(), tmpscript, false); - return tmpscript->OnGossipSelect(player, go, sender, action); -} - -bool ScriptMgr::OnGossipSelectCode(Player* player, GameObject* go, uint32 sender, uint32 action, const char* code) -{ - ASSERT(player); - ASSERT(go); - ASSERT(code); - - GET_SCRIPT_RET(GameObjectScript, go->GetScriptId(), tmpscript, false); - return tmpscript->OnGossipSelectCode(player, go, sender, action, code); -} - -bool ScriptMgr::OnQuestAccept(Player* player, GameObject* go, Quest const* quest) -{ - ASSERT(player); - ASSERT(go); - ASSERT(quest); - - GET_SCRIPT_RET(GameObjectScript, go->GetScriptId(), tmpscript, false); - player->PlayerTalkClass->ClearMenus(); - return tmpscript->OnQuestAccept(player, go, quest); -} - -bool ScriptMgr::OnQuestReward(Player* player, GameObject* go, Quest const* quest, uint32 opt) -{ - ASSERT(player); - ASSERT(go); - ASSERT(quest); - - GET_SCRIPT_RET(GameObjectScript, go->GetScriptId(), tmpscript, false); - player->PlayerTalkClass->ClearMenus(); - return tmpscript->OnQuestReward(player, go, quest, opt); -} - -uint32 ScriptMgr::GetDialogStatus(Player* player, GameObject* go) -{ - ASSERT(player); - ASSERT(go); - - GET_SCRIPT_RET(GameObjectScript, go->GetScriptId(), tmpscript, DIALOG_STATUS_SCRIPTED_NO_STATUS); - player->PlayerTalkClass->ClearMenus(); - return tmpscript->GetDialogStatus(player, go); -} - -void ScriptMgr::OnGameObjectDestroyed(GameObject* go, Player* player) -{ - ASSERT(go); - - GET_SCRIPT(GameObjectScript, go->GetScriptId(), tmpscript); - tmpscript->OnDestroyed(go, player); -} - -void ScriptMgr::OnGameObjectDamaged(GameObject* go, Player* player) -{ - ASSERT(go); - - GET_SCRIPT(GameObjectScript, go->GetScriptId(), tmpscript); - tmpscript->OnDamaged(go, player); -} - -void ScriptMgr::OnGameObjectLootStateChanged(GameObject* go, uint32 state, Unit* unit) -{ - ASSERT(go); - - GET_SCRIPT(GameObjectScript, go->GetScriptId(), tmpscript); - tmpscript->OnLootStateChanged(go, state, unit); -} - -void ScriptMgr::OnGameObjectStateChanged(GameObject* go, uint32 state) -{ - ASSERT(go); - - GET_SCRIPT(GameObjectScript, go->GetScriptId(), tmpscript); - tmpscript->OnGameObjectStateChanged(go, state); -} - -void ScriptMgr::OnGameObjectUpdate(GameObject* go, uint32 diff) -{ - ASSERT(go); - - GET_SCRIPT(GameObjectScript, go->GetScriptId(), tmpscript); - tmpscript->OnUpdate(go, diff); -} - bool ScriptMgr::OnAreaTrigger(Player* player, AreaTriggerEntry const* trigger) { ASSERT(player); diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index e053a8b4c63..1f553989253 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -404,7 +404,7 @@ class TC_GAME_API UnitScript : public ScriptObject virtual void ModifySpellDamageTaken(Unit* /*target*/, Unit* /*attacker*/, int32& /*damage*/) { } }; -class TC_GAME_API CreatureScript : public UnitScript, public UpdatableScript<Creature> +class TC_GAME_API CreatureScript : public UnitScript { protected: @@ -412,35 +412,14 @@ class TC_GAME_API CreatureScript : public UnitScript, public UpdatableScript<Cre public: - // Called when a player opens a gossip dialog with the creature. - virtual bool OnGossipHello(Player* /*player*/, Creature* /*creature*/) { return false; } - - // Called when a player selects a gossip item in the creature's gossip menu. - virtual bool OnGossipSelect(Player* /*player*/, Creature* /*creature*/, uint32 /*sender*/, uint32 /*action*/) { return false; } - - // Called when a player selects a gossip with a code in the creature's gossip menu. - virtual bool OnGossipSelectCode(Player* /*player*/, Creature* /*creature*/, uint32 /*sender*/, uint32 /*action*/, const char* /*code*/) { return false; } - - // Called when a player accepts a quest from the creature. - virtual bool OnQuestAccept(Player* /*player*/, Creature* /*creature*/, Quest const* /*quest*/) { return false; } - - // Called when a player selects a quest in the creature's quest menu. - virtual bool OnQuestSelect(Player* /*player*/, Creature* /*creature*/, Quest const* /*quest*/) { return false; } - - // Called when a player completes a quest and is rewarded, opt is the selected item's index or 0 - virtual bool OnQuestReward(Player* /*player*/, Creature* /*creature*/, Quest const* /*quest*/, uint32 /*opt*/) { return false; } - - // Called when the dialog status between a player and the creature is requested. - virtual uint32 GetDialogStatus(Player* /*player*/, Creature* /*creature*/) { return DIALOG_STATUS_SCRIPTED_NO_STATUS; } - // Called when the creature tries to spawn. Return false to block spawn and re-evaluate on next tick. virtual bool CanSpawn(ObjectGuid::LowType /*spawnId*/, uint32 /*entry*/, CreatureTemplate const* /*baseTemplate*/, CreatureTemplate const* /*actTemplate*/, CreatureData const* /*cData*/, Map const* /*map*/) const { return true; } // Called when a CreatureAI object is needed for the creature. - virtual CreatureAI* GetAI(Creature* /*creature*/) const { return NULL; } + virtual CreatureAI* GetAI(Creature* /*creature*/) const = 0; }; -class TC_GAME_API GameObjectScript : public ScriptObject, public UpdatableScript<GameObject> +class TC_GAME_API GameObjectScript : public ScriptObject { protected: @@ -448,38 +427,8 @@ class TC_GAME_API GameObjectScript : public ScriptObject, public UpdatableScript public: - // Called when a player opens a gossip dialog with the gameobject. - virtual bool OnGossipHello(Player* /*player*/, GameObject* /*go*/) { return false; } - - // Called when a player selects a gossip item in the gameobject's gossip menu. - virtual bool OnGossipSelect(Player* /*player*/, GameObject* /*go*/, uint32 /*sender*/, uint32 /*action*/) { return false; } - - // Called when a player selects a gossip with a code in the gameobject's gossip menu. - virtual bool OnGossipSelectCode(Player* /*player*/, GameObject* /*go*/, uint32 /*sender*/, uint32 /*action*/, const char* /*code*/) { return false; } - - // Called when a player accepts a quest from the gameobject. - virtual bool OnQuestAccept(Player* /*player*/, GameObject* /*go*/, Quest const* /*quest*/) { return false; } - - // Called when a player completes a quest and is rewarded, opt is the selected item's index or 0 - virtual bool OnQuestReward(Player* /*player*/, GameObject* /*go*/, Quest const* /*quest*/, uint32 /*opt*/) { return false; } - - // Called when the dialog status between a player and the gameobject is requested. - virtual uint32 GetDialogStatus(Player* /*player*/, GameObject* /*go*/) { return DIALOG_STATUS_SCRIPTED_NO_STATUS; } - - // Called when the game object is destroyed (destructible buildings only). - virtual void OnDestroyed(GameObject* /*go*/, Player* /*player*/) { } - - // Called when the game object is damaged (destructible buildings only). - virtual void OnDamaged(GameObject* /*go*/, Player* /*player*/) { } - - // Called when the game object loot state is changed. - virtual void OnLootStateChanged(GameObject* /*go*/, uint32 /*state*/, Unit* /*unit*/) { } - - // Called when the game object state is changed. - virtual void OnGameObjectStateChanged(GameObject* /*go*/, uint32 /*state*/) { } - // Called when a GameObjectAI object is needed for the gameobject. - virtual GameObjectAI* GetAI(GameObject* /*go*/) const { return NULL; } + virtual GameObjectAI* GetAI(GameObject* /*go*/) const = 0; }; class TC_GAME_API AreaTriggerScript : public ScriptObject @@ -953,30 +902,11 @@ class TC_GAME_API ScriptMgr public: /* CreatureScript */ - bool OnGossipHello(Player* player, Creature* creature); - bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action); - bool OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 action, const char* code); - bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest); - bool OnQuestSelect(Player* player, Creature* creature, Quest const* quest); - bool OnQuestReward(Player* player, Creature* creature, Quest const* quest, uint32 opt); - uint32 GetDialogStatus(Player* player, Creature* creature); bool CanSpawn(ObjectGuid::LowType spawnId, uint32 entry, CreatureTemplate const* actTemplate, CreatureData const* cData, Map const* map); CreatureAI* GetCreatureAI(Creature* creature); - void OnCreatureUpdate(Creature* creature, uint32 diff); public: /* GameObjectScript */ - bool OnGossipHello(Player* player, GameObject* go); - bool OnGossipSelect(Player* player, GameObject* go, uint32 sender, uint32 action); - bool OnGossipSelectCode(Player* player, GameObject* go, uint32 sender, uint32 action, const char* code); - bool OnQuestAccept(Player* player, GameObject* go, Quest const* quest); - bool OnQuestReward(Player* player, GameObject* go, Quest const* quest, uint32 opt); - uint32 GetDialogStatus(Player* player, GameObject* go); - void OnGameObjectDestroyed(GameObject* go, Player* player); - void OnGameObjectDamaged(GameObject* go, Player* player); - void OnGameObjectLootStateChanged(GameObject* go, uint32 state, Unit* unit); - void OnGameObjectStateChanged(GameObject* go, uint32 state); - void OnGameObjectUpdate(GameObject* go, uint32 diff); GameObjectAI* GetGameObjectAI(GameObject* go); public: /* AreaTriggerScript */ diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 7a831edac08..00dfce66db2 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1859,9 +1859,7 @@ void Spell::SendLoot(ObjectGuid guid, LootType loottype) return; } - if (sScriptMgr->OnGossipHello(player, gameObjTarget)) - return; - + player->PlayerTalkClass->ClearMenus(); if (gameObjTarget->AI()->GossipHello(player, false)) return; |
