diff options
Diffstat (limited to 'src/game/Group.cpp')
-rw-r--r-- | src/game/Group.cpp | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/src/game/Group.cpp b/src/game/Group.cpp index 02708bae0bb..87e02cb8148 100644 --- a/src/game/Group.cpp +++ b/src/game/Group.cpp @@ -46,6 +46,7 @@ Group::Group() m_subGroupsCounts = NULL; m_guid = 0; m_counter = 0; + m_maxEnchantingLevel= 0; for (uint8 i = 0; i < TARGETICONCOUNT; ++i) m_targetIcons[i] = 0; @@ -332,6 +333,9 @@ bool Group::AddMember(const uint64 &guid, const char* name) // quest related GO state dependent from raid memebership if (isRaidGroup()) player->UpdateForQuestWorldObjects(); + + if (m_maxEnchantingLevel < player->GetSkillValue(SKILL_ENCHANTING)) + m_maxEnchantingLevel = player->GetSkillValue(SKILL_ENCHANTING); } return true; @@ -384,6 +388,7 @@ uint32 Group::RemoveMember(const uint64 &guid, const uint8 &method) } SendUpdate(); + ResetMaxEnchantingLevel(); } // if group before remove <= 2 disband it else @@ -504,7 +509,7 @@ void Group::SendLootStartRoll(uint32 CountDown, uint32 mapid, const Roll &r) data << uint32(r.itemRandomPropId); // item random property ID data << uint32(r.itemCount); // items in stack data << uint32(CountDown); // the countdown time to choose "need" or "greed" - data << uint8(ALL_ROLL_TYPE_MASK); // roll type mask + data << uint8(r.rollVoteMask); // roll type mask for (Roll::PlayerVote::const_iterator itr=r.playerVote.begin(); itr != r.playerVote.end(); ++itr) { @@ -655,6 +660,11 @@ void Group::GroupLoot(Loot *loot, WorldObject* pLootedObject) { r->setLoot(loot); r->itemSlot = itemSlot; + if (item->DisenchantID && m_maxEnchantingLevel >= item->RequiredDisenchantSkill) + r->rollVoteMask |= ROLL_FLAG_TYPE_DISENCHANT; + + if (item->Flags2 & ITEM_FLAGS_EXTRA_NEED_ROLL_DISABLED) + r->rollVoteMask &= ~ROLL_FLAG_TYPE_NEED; loot->items[itemSlot].is_blocked = true; @@ -744,6 +754,11 @@ void Group::NeedBeforeGreed(Loot *loot, WorldObject* pLootedObject) { r->setLoot(loot); r->itemSlot = itemSlot; + if (item->DisenchantID && m_maxEnchantingLevel >= item->RequiredDisenchantSkill) + r->rollVoteMask |= ROLL_FLAG_TYPE_DISENCHANT; + + if (item->Flags2 & ITEM_FLAGS_EXTRA_NEED_ROLL_DISABLED) + r->rollVoteMask &= ~ROLL_FLAG_TYPE_NEED; loot->items[itemSlot].is_blocked = true; @@ -1827,3 +1842,15 @@ void Group::BroadcastGroupUpdate(void) } } } + +void Group::ResetMaxEnchantingLevel() +{ + m_maxEnchantingLevel = 0; + Player *pMember = NULL; + for (member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr) + { + if (pMember = objmgr.GetPlayer(citr->guid)) + if (m_maxEnchantingLevel < pMember->GetSkillValue(SKILL_ENCHANTING)) + m_maxEnchantingLevel = pMember->GetSkillValue(SKILL_ENCHANTING); + } +} |