aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/AI/CoreAI/GameObjectAI.h30
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.h28
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp43
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h23
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp12
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp2
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h8
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp2
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp17
-rw-r--r--src/server/game/Entities/Player/Player.cpp11
-rw-r--r--src/server/game/Events/GameEventMgr.cpp2
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp12
-rw-r--r--src/server/game/Handlers/NPCHandler.cpp4
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp13
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp181
-rw-r--r--src/server/game/Scripting/ScriptMgr.h78
-rw-r--r--src/server/game/Spells/SpellEffects.cpp4
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;