summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYehonal <yehonal.azeroth@gmail.com>2016-11-17 10:28:08 +0100
committerGitHub <noreply@github.com>2016-11-17 10:28:08 +0100
commitd53b5522f92398ed5dc785c3c84a325593d20747 (patch)
tree62973a6979657a60124a866ce7b19f34760d7335 /src
parent1ec1d165548d4fd4554ea469a70196c331bf3442 (diff)
Updated ScriptMgr with new function to favorite transmog module
Diffstat (limited to 'src')
-rw-r--r--src/game/Entities/Item/Item.cpp1
-rw-r--r--src/game/Entities/Player/Player.cpp4
-rw-r--r--src/game/Handlers/SpellHandler.cpp10
-rw-r--r--src/game/Scripting/ScriptMgr.cpp25
-rw-r--r--src/game/Scripting/ScriptMgr.h30
5 files changed, 63 insertions, 7 deletions
diff --git a/src/game/Entities/Item/Item.cpp b/src/game/Entities/Item/Item.cpp
index e4ebbc2ad1..8fa60a7ff7 100644
--- a/src/game/Entities/Item/Item.cpp
+++ b/src/game/Entities/Item/Item.cpp
@@ -465,6 +465,7 @@ bool Item::LoadFromDB(uint32 guid, uint64 owner_guid, Field* fields, uint32 entr
/*static*/
void Item::DeleteFromDB(SQLTransaction& trans, uint32 itemGuid)
{
+ sScriptMgr->OnGlobalItemDelFromDB(trans,itemGuid);
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE);
stmt->setUInt32(0, itemGuid);
trans->Append(stmt);
diff --git a/src/game/Entities/Player/Player.cpp b/src/game/Entities/Player/Player.cpp
index a49746f305..81efbb048d 100644
--- a/src/game/Entities/Player/Player.cpp
+++ b/src/game/Entities/Player/Player.cpp
@@ -12682,7 +12682,7 @@ void Player::QuickEquipItem(uint16 pos, Item* pItem)
}
void Player::SetVisibleItemSlot(uint8 slot, Item* pItem)
-{
+{
if (pItem)
{
SetUInt32Value(PLAYER_VISIBLE_ITEM_1_ENTRYID + (slot * 2), pItem->GetEntry());
@@ -12694,6 +12694,8 @@ void Player::SetVisibleItemSlot(uint8 slot, Item* pItem)
SetUInt32Value(PLAYER_VISIBLE_ITEM_1_ENTRYID + (slot * 2), 0);
SetUInt32Value(PLAYER_VISIBLE_ITEM_1_ENCHANTMENT + (slot * 2), 0);
}
+
+ sScriptMgr->OnAfterPlayerSetVisibleItemSlot(this, slot, pItem);
}
void Player::VisualizeItem(uint8 slot, Item* pItem)
diff --git a/src/game/Handlers/SpellHandler.cpp b/src/game/Handlers/SpellHandler.cpp
index 67a849cbe5..0f7650d4a5 100644
--- a/src/game/Handlers/SpellHandler.cpp
+++ b/src/game/Handlers/SpellHandler.cpp
@@ -251,7 +251,7 @@ void WorldSession::HandleOpenWrappedItemCallback(PreparedQueryResult result, uin
if (item->GetGUIDLow() != itemLowGUID || !item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAG_WRAPPED)) // during getting result, gift was swapped with another item
return;
-
+
if (!result)
{
sLog->outError("Wrapped item %u don't have record in character_gifts table and will deleted", item->GetGUIDLow());
@@ -655,7 +655,13 @@ void WorldSession::HandleMirrorImageDataRequest(WorldPacket & recvData)
else if (*itr == EQUIPMENT_SLOT_BACK && player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_CLOAK))
data << uint32(0);
else if (Item const* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, *itr))
- data << uint32(item->GetTemplate()->DisplayInfoID);
+ {
+ uint32 displayInfoId=item->GetTemplate()->DisplayInfoID;
+
+ sScriptMgr->OnGlobalMirrorImageDisplayItem(item,displayInfoId);
+
+ data << uint32(displayInfoId);
+ }
else
data << uint32(0);
}
diff --git a/src/game/Scripting/ScriptMgr.cpp b/src/game/Scripting/ScriptMgr.cpp
index ad2b2dc990..730ce93aa6 100644
--- a/src/game/Scripting/ScriptMgr.cpp
+++ b/src/game/Scripting/ScriptMgr.cpp
@@ -1323,6 +1323,11 @@ void ScriptMgr::OnPlayerBeingCharmed(Player* player, Unit* charmer, uint32 oldFa
FOREACH_SCRIPT(PlayerScript)->OnBeingCharmed(player, charmer, oldFactionId, newFactionId);
}
+void ScriptMgr::OnAfterPlayerSetVisibleItemSlot(Player* player, uint8 slot, Item *item)
+{
+ FOREACH_SCRIPT(PlayerScript)->OnAfterSetVisibleItemSlot(player, slot,item);
+}
+
// Guild
void ScriptMgr::OnGuildAddMember(Guild* guild, Player* player, uint8& plRank)
{
@@ -1411,6 +1416,19 @@ void ScriptMgr::OnGroupDisband(Group* group)
FOREACH_SCRIPT(GroupScript)->OnDisband(group);
}
+void ScriptMgr::OnGlobalItemDelFromDB(SQLTransaction& trans, uint32 itemGuid)
+{
+ ASSERT(trans);
+ ASSERT(itemGuid);
+
+ FOREACH_SCRIPT(GlobalScript)->OnItemDelFromDB(trans,itemGuid);
+}
+
+void ScriptMgr::OnGlobalMirrorImageDisplayItem(const Item *item, uint32 &display)
+{
+ FOREACH_SCRIPT(GlobalScript)->OnMirrorImageDisplayItem(item,display);
+}
+
SpellScriptLoader::SpellScriptLoader(const char* name)
: ScriptObject(name)
{
@@ -1555,6 +1573,12 @@ GroupScript::GroupScript(const char* name)
ScriptRegistry<GroupScript>::AddScript(this);
}
+GlobalScript::GlobalScript(const char* name)
+ : ScriptObject(name)
+{
+ ScriptRegistry<GlobalScript>::AddScript(this);
+}
+
// Instantiate static members of ScriptRegistry.
template<class TScript> std::map<uint32, TScript*> ScriptRegistry<TScript>::ScriptPointerList;
template<class TScript> std::vector<TScript*> ScriptRegistry<TScript>::ALScripts;
@@ -1585,6 +1609,7 @@ template class ScriptRegistry<AchievementCriteriaScript>;
template class ScriptRegistry<PlayerScript>;
template class ScriptRegistry<GuildScript>;
template class ScriptRegistry<GroupScript>;
+template class ScriptRegistry<GlobalScript>;
// Undefine utility macros.
#undef GET_SCRIPT_RET
diff --git a/src/game/Scripting/ScriptMgr.h b/src/game/Scripting/ScriptMgr.h
index 50d2d14911..98eb5e9fe7 100644
--- a/src/game/Scripting/ScriptMgr.h
+++ b/src/game/Scripting/ScriptMgr.h
@@ -235,7 +235,7 @@ class WorldScript : public ScriptObject
// Called after the world configuration is (re)loaded.
virtual void OnAfterConfigLoad(bool /*reload*/) { }
-
+
// Called before the world configuration is (re)loaded.
virtual void OnBeforeConfigLoad(bool /*reload*/) { }
@@ -303,7 +303,7 @@ template<class TMap> class MapScript : public UpdatableScript<TMap>
public:
void checkMap() {
_mapEntry = sMapStore.LookupEntry(_mapId);
-
+
if (!_mapEntry)
sLog->outError("Invalid MapScript for %u; no such map ID.", _mapId);
}
@@ -783,8 +783,11 @@ class PlayerScript : public ScriptObject
// Called when a player selects an option in a player gossip window
virtual void OnGossipSelectCode(Player* /*player*/, uint32 /*menu_id*/, uint32 /*sender*/, uint32 /*action*/, const char* /*code*/) { }
- // On player getting charmed
+ // On player getting charmed
virtual void OnBeingCharmed(Player* /*player*/, Unit* /*charmer*/, uint32 /*oldFactionId*/, uint32 /*newFactionId*/) { }
+
+ // To change behaviour of set visible item slot
+ virtual void OnAfterSetVisibleItemSlot(Player* /*player*/, uint8 /*slot*/, Item* /*item*/) { }
};
class GuildScript : public ScriptObject
@@ -856,6 +859,20 @@ class GroupScript : public ScriptObject
virtual void OnDisband(Group* /*group*/) { }
};
+// following hooks can be used anywhere and are not db bounded
+class GlobalScript : public ScriptObject
+{
+ protected:
+
+ GlobalScript(const char* name);
+
+ public:
+
+ // items
+ virtual void OnItemDelFromDB(SQLTransaction& /*trans*/, uint32 /*itemGuid*/) { }
+ virtual void OnMirrorImageDisplayItem(const Item* /*item*/, uint32& /*display*/) { }
+};
+
// Placed here due to ScriptRegistry::AddScript dependency.
#define sScriptMgr ACE_Singleton<ScriptMgr, ACE_Null_Mutex>::instance()
@@ -1067,6 +1084,7 @@ class ScriptMgr
void OnGossipSelect(Player* player, uint32 menu_id, uint32 sender, uint32 action);
void OnGossipSelectCode(Player* player, uint32 menu_id, uint32 sender, uint32 action, const char* code);
void OnPlayerBeingCharmed(Player* player, Unit* charmer, uint32 oldFactionId, uint32 newFactionId);
+ void OnAfterPlayerSetVisibleItemSlot(Player* player, uint8 /*slot*/, Item *item);
public: /* GuildScript */
@@ -1091,6 +1109,10 @@ class ScriptMgr
void OnGroupChangeLeader(Group* group, uint64 newLeaderGuid, uint64 oldLeaderGuid);
void OnGroupDisband(Group* group);
+ public: /* GlobalScript */
+ void OnGlobalItemDelFromDB(SQLTransaction& trans, uint32 itemGuid);
+ void OnGlobalMirrorImageDisplayItem(const Item *item, uint32 &display);
+
public: /* Scheduled scripts */
uint32 IncreaseScheduledScriptsCount() { return ++_scheduledScripts; }
@@ -1147,7 +1169,7 @@ class ScriptRegistry
static void AddALScripts() {
for(ScriptVectorIterator it = ALScripts.begin(); it != ALScripts.end(); ++it) {
TScript* const script = *it;
-
+
script->checkValidity();
if (script->IsDatabaseBound()) {