diff options
| author | Shauren <shauren.trinity@gmail.com> | 2013-05-30 20:57:07 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2013-05-30 20:57:07 +0200 |
| commit | adb78862da66b13984c6494befdffbf5da0cdbe6 (patch) | |
| tree | 1514857a0131189194c251b7045d234a2bf45d86 /src/server/game/Entities/Item | |
| parent | cf23793b4b04cfe12f6fc1441a7d9f8192f7dfa6 (diff) | |
| parent | 3a697d4c9f5e9f2fa9c3b08c8e103d90472a871a (diff) | |
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Conflicts:
src/server/game/Achievements/AchievementMgr.cpp
src/server/game/Entities/Unit/Unit.cpp
src/server/game/Entities/Vehicle/Vehicle.cpp
src/server/game/Handlers/ItemHandler.cpp
src/server/game/Handlers/MailHandler.cpp
src/server/game/Server/Protocol/Opcodes.cpp
src/server/game/Server/Protocol/Opcodes.h
src/server/scripts/Commands/cs_misc.cpp
Diffstat (limited to 'src/server/game/Entities/Item')
| -rw-r--r-- | src/server/game/Entities/Item/Item.cpp | 24 | ||||
| -rw-r--r-- | src/server/game/Entities/Item/Item.h | 4 |
2 files changed, 25 insertions, 3 deletions
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index a25bd463a55..86d02132eca 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -858,16 +858,26 @@ bool Item::IsFitToSpellRequirements(SpellInfo const* spellInfo) const return true; } -void Item::SetEnchantment(EnchantmentSlot slot, uint32 id, uint32 duration, uint32 charges) +void Item::SetEnchantment(EnchantmentSlot slot, uint32 id, uint32 duration, uint32 charges, uint64 caster /*= 0*/) { // Better lost small time at check in comparison lost time at item save to DB. if ((GetEnchantmentId(slot) == id) && (GetEnchantmentDuration(slot) == duration) && (GetEnchantmentCharges(slot) == charges)) return; + Player* owner = GetOwner(); + if (slot < MAX_INSPECTED_ENCHANTMENT_SLOT) + { + if (uint32 oldEnchant = GetEnchantmentId(slot)) + owner->GetSession()->SendEnchantmentLog(GetOwnerGUID(), 0, GetEntry(), oldEnchant); + + if (id) + owner->GetSession()->SendEnchantmentLog(GetOwnerGUID(), caster, GetEntry(), id); + } + SetUInt32Value(ITEM_FIELD_ENCHANTMENT_1_1 + slot*MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_ID_OFFSET, id); SetUInt32Value(ITEM_FIELD_ENCHANTMENT_1_1 + slot*MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_DURATION_OFFSET, duration); SetUInt32Value(ITEM_FIELD_ENCHANTMENT_1_1 + slot*MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_CHARGES_OFFSET, charges); - SetState(ITEM_CHANGED, GetOwner()); + SetState(ITEM_CHANGED, owner); } void Item::SetEnchantmentDuration(EnchantmentSlot slot, uint32 duration, Player* owner) @@ -984,6 +994,16 @@ bool Item::IsLimitedToAnotherMapOrZone(uint32 cur_mapId, uint32 cur_zoneId) cons return proto && ((proto->Map && proto->Map != cur_mapId) || (proto->Area && proto->Area != cur_zoneId)); } +void Item::SendUpdateSockets() +{ + WorldPacket data(SMSG_SOCKET_GEMS_RESULT, 8+4+4+4+4); + data << uint64(GetGUID()); + for (uint32 i = SOCK_ENCHANTMENT_SLOT; i <= BONUS_ENCHANTMENT_SLOT; ++i) + data << uint32(GetEnchantmentId(EnchantmentSlot(i))); + + GetOwner()->GetSession()->SendPacket(&data); +} + // Though the client has the information in the item's data field, // we have to send SMSG_ITEM_TIME_UPDATE to display the remaining // time. diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index f69ac0f8965..cdc79d96d67 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -295,7 +295,7 @@ class Item : public Object void SetItemRandomProperties(int32 randomPropId); void UpdateItemSuffixFactor(); static int32 GenerateItemRandomPropertyId(uint32 item_id); - void SetEnchantment(EnchantmentSlot slot, uint32 id, uint32 duration, uint32 charges); + void SetEnchantment(EnchantmentSlot slot, uint32 id, uint32 duration, uint32 charges, uint64 caster = 0); void SetEnchantmentDuration(EnchantmentSlot slot, uint32 duration, Player* owner); void SetEnchantmentCharges(EnchantmentSlot slot, uint32 charges); void ClearEnchantment(EnchantmentSlot slot); @@ -306,6 +306,8 @@ class Item : public Object std::string const& GetText() const { return m_text; } void SetText(std::string const& text) { m_text = text; } + void SendUpdateSockets(); + void SendTimeUpdate(Player* owner); void UpdateDuration(Player* owner, uint32 diff); |
