aboutsummaryrefslogtreecommitdiff
path: root/src/game/Group.cpp
diff options
context:
space:
mode:
authorShauren <krzysiek.7.5.4@gmail.com>2010-05-21 22:45:47 +0200
committerShauren <krzysiek.7.5.4@gmail.com>2010-05-21 22:45:47 +0200
commit7c1a189bd39ea11bbb42c412b57fa7421286cf98 (patch)
tree1a624bdb7f4f558c7e71959501ba1d1fb8217b8f /src/game/Group.cpp
parent1b5d171d0bf617fe00a41314d6b264fc679e7d56 (diff)
Fixed disenchanting rolls being allowed for all items, now works as intended
Renamed Faction to Flags2 in ItemPrototype and added use for some of them yay, my first commit :D --HG-- branch : trunk
Diffstat (limited to 'src/game/Group.cpp')
-rw-r--r--src/game/Group.cpp29
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);
+ }
+}