aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2017-05-01 18:19:36 -0300
committerariel- <ariel-@users.noreply.github.com>2017-05-01 18:19:36 -0300
commitf913f3bb8977c127d200d5d4a608ab434b21bbcd (patch)
treebb2d18ad5c0c23667271ca98bd6754cc745256a8 /src/server/game
parente4481c016a86fe7db0b83a434ea08eb7ba50174f (diff)
Core/Scripts: unified scripted gossip/quest api
- Changed self-accessor on GameObjectAI to "me", like UnitAI - Moved all related functions to AI, now Unit and GameObject have the same function names with identical behaviour - Remove "OnUpdate" from CreatureScript/GameObjectScript, was never used and we already have AI Update method - Quest methods no longer return a bool, the return value was used to call the AI version if the ScriptMgr one returned false - Implemented GameObjectAI::Destroyed hook (was never called), implemented Damaged method - Rename OnStateChanged to OnLootStateChanged to reflect when it's really called, and created a new hook OnStateChanged that only gets called on GOState change - Since the functions are now only getting called from AI, made GetAI methods full virtual. (CanSpawn method is anyways going to be used on creatures with AI)
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;