diff options
author | Yehonal <yehonal.azeroth@gmail.com> | 2016-11-17 10:28:08 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-17 10:28:08 +0100 |
commit | d53b5522f92398ed5dc785c3c84a325593d20747 (patch) | |
tree | 62973a6979657a60124a866ce7b19f34760d7335 /src | |
parent | 1ec1d165548d4fd4554ea469a70196c331bf3442 (diff) |
Updated ScriptMgr with new function to favorite transmog module
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Entities/Item/Item.cpp | 1 | ||||
-rw-r--r-- | src/game/Entities/Player/Player.cpp | 4 | ||||
-rw-r--r-- | src/game/Handlers/SpellHandler.cpp | 10 | ||||
-rw-r--r-- | src/game/Scripting/ScriptMgr.cpp | 25 | ||||
-rw-r--r-- | src/game/Scripting/ScriptMgr.h | 30 |
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()) { |