Changeset 132 for trunk/src/game/Group.cpp
- Timestamp:
- 11/19/08 13:39:06 (17 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/game/Group.cpp
r111 r132 45 45 m_looterGuid = 0; 46 46 m_lootThreshold = ITEM_QUALITY_UNCOMMON; 47 m_subGroupsCounts = NULL; 47 48 48 49 for(int i=0; i<TARGETICONCOUNT; i++) … … 74 75 for(BoundInstancesMap::iterator itr = m_boundInstances[i].begin(); itr != m_boundInstances[i].end(); ++itr) 75 76 itr->second.save->RemoveGroup(this); 77 if (m_subGroupsCounts) 78 delete[] m_subGroupsCounts; 76 79 } 77 80 … … 82 85 83 86 m_groupType = isBGGroup() ? GROUPTYPE_RAID : GROUPTYPE_NORMAL; 87 88 if (m_groupType == GROUPTYPE_RAID) 89 _initRaidSubGroupsCounter(); 90 84 91 m_lootMethod = GROUP_LOOT; 85 92 m_lootThreshold = ITEM_QUALITY_UNCOMMON; … … 137 144 138 145 m_groupType = (*result)[13].GetBool() ? GROUPTYPE_RAID : GROUPTYPE_NORMAL; 146 147 if (m_groupType == GROUPTYPE_RAID) 148 _initRaidSubGroupsCounter(); 149 139 150 m_difficulty = (*result)[14].GetUInt8(); 140 151 m_mainTank = (*result)[0].GetUInt64(); … … 179 190 member.assistant = assistant; 180 191 m_memberSlots.push_back(member); 192 193 SubGroupCounterIncrease(subgroup); 194 181 195 return true; 196 } 197 198 void Group::ConvertToRaid() 199 { 200 m_groupType = GROUPTYPE_RAID; 201 202 _initRaidSubGroupsCounter(); 203 204 if(!isBGGroup()) CharacterDatabase.PExecute("UPDATE groups SET isRaid = 1 WHERE leaderGuid='%u'", GUID_LOPART(m_leaderGuid)); 205 SendUpdate(); 182 206 } 183 207 … … 387 411 } 388 412 389 void Group::SendLootRoll( uint64 SourceGuid, uint64TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r)413 void Group::SendLootRoll(const uint64& SourceGuid, const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) 390 414 { 391 415 WorldPacket data(SMSG_LOOT_ROLL, (8+4+8+4+4+4+1+1)); … … 411 435 } 412 436 413 void Group::SendLootRollWon( uint64 SourceGuid, uint64TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r)437 void Group::SendLootRollWon(const uint64& SourceGuid, const uint64& TargetGuid, uint8 RollNumber, uint8 RollType, const Roll &r) 414 438 { 415 439 WorldPacket data(SMSG_LOOT_ROLL_WON, (8+4+4+4+4+8+1+1)); … … 454 478 } 455 479 456 void Group::GroupLoot( uint64playerGUID, Loot *loot, Creature *creature)480 void Group::GroupLoot(const uint64& playerGUID, Loot *loot, Creature *creature) 457 481 { 458 482 std::vector<LootItem>::iterator i; … … 510 534 } 511 535 512 void Group::NeedBeforeGreed( uint64playerGUID, Loot *loot, Creature *creature)536 void Group::NeedBeforeGreed(const uint64& playerGUID, Loot *loot, Creature *creature) 513 537 { 514 538 ItemPrototype const *item; … … 564 588 } 565 589 566 void Group::MasterLoot( uint64playerGUID, Loot* /*loot*/, Creature *creature)590 void Group::MasterLoot(const uint64& playerGUID, Loot* /*loot*/, Creature *creature) 567 591 { 568 592 Player *player = objmgr.GetPlayer(playerGUID); … … 600 624 } 601 625 602 void Group::CountRollVote( uint64 playerGUID, uint64Guid, uint32 NumberOfPlayers, uint8 Choise)626 void Group::CountRollVote(const uint64& playerGUID, const uint64& Guid, uint32 NumberOfPlayers, uint8 Choise) 603 627 { 604 628 Rolls::iterator rollI = GetRoll(Guid); … … 936 960 // get first not-full group 937 961 uint8 groupid = 0; 938 std::vector<uint8> temp(MAXRAIDSIZE/MAXGROUPSIZE); 939 for(member_citerator itr = m_memberSlots.begin(); itr != m_memberSlots.end(); ++itr) 940 { 941 if (itr->group >= temp.size()) continue; 942 ++temp[itr->group]; 943 if(temp[groupid] >= MAXGROUPSIZE) 944 ++groupid; 962 if (m_subGroupsCounts) 963 { 964 bool groupFound = false; 965 for (; groupid < MAXRAIDSIZE/MAXGROUPSIZE; ++groupid) 966 { 967 if (m_subGroupsCounts[groupid] < MAXGROUPSIZE) 968 { 969 groupFound = true; 970 break; 971 } 972 } 973 // We are raid group and no one slot is free 974 if (!groupFound) 975 return false; 945 976 } 946 977 … … 964 995 member.assistant = isAssistant; 965 996 m_memberSlots.push_back(member); 997 998 SubGroupCounterIncrease(group); 966 999 967 1000 if(player) … … 1002 1035 member_witerator slot = _getMemberWSlot(guid); 1003 1036 if (slot != m_memberSlots.end()) 1037 { 1038 SubGroupCounterDecrease(slot->group); 1004 1039 m_memberSlots.erase(slot); 1040 } 1005 1041 1006 1042 if(!isBGGroup()) … … 1095 1131 } 1096 1132 1097 void Group::_convertToRaid()1098 {1099 m_groupType = GROUPTYPE_RAID;1100 1101 if(!isBGGroup()) CharacterDatabase.PExecute("UPDATE groups SET isRaid = 1 WHERE leaderGuid='%u'", GUID_LOPART(m_leaderGuid));1102 }1103 1104 1133 bool Group::_setMembersGroup(const uint64 &guid, const uint8 &group) 1105 1134 { … … 1109 1138 1110 1139 slot->group = group; 1140 1141 SubGroupCounterIncrease(group); 1142 1111 1143 if(!isBGGroup()) CharacterDatabase.PExecute("UPDATE group_member SET subgroup='%u' WHERE memberGuid='%u'", group, GUID_LOPART(guid)); 1144 1112 1145 return true; 1113 1146 } … … 1165 1198 if (!player) 1166 1199 { 1200 uint8 prevSubGroup; 1201 prevSubGroup = GetMemberGroup(guid); 1202 1203 SubGroupCounterDecrease(prevSubGroup); 1204 1167 1205 if(_setMembersGroup(guid, group)) 1168 1206 SendUpdate(); 1169 1207 } 1170 else ChangeMembersGroup(player, group); 1208 else 1209 ChangeMembersGroup(player, group); 1171 1210 } 1172 1211 … … 1178 1217 if(_setMembersGroup(player->GetGUID(), group)) 1179 1218 { 1219 uint8 prevSubGroup; 1220 prevSubGroup = player->GetSubGroup(); 1221 1222 SubGroupCounterDecrease(prevSubGroup); 1223 1180 1224 player->GetGroupRef().setSubGroup(group); 1181 1225 SendUpdate();