aboutsummaryrefslogtreecommitdiff
path: root/src/game/Group.cpp
diff options
context:
space:
mode:
authorw12x <none@none>2008-10-05 08:48:32 -0500
committerw12x <none@none>2008-10-05 08:48:32 -0500
commit6f0c3469a63c97eef57f36f1a39fed0b281b7cc9 (patch)
tree7089d31e4493160bed067ac9da519841704b230a /src/game/Group.cpp
parent8b3fcc37c624c3ee4808d63160f563c070950cb4 (diff)
[svn] -enabled instantiated battlegrounds
-enabled arena matches -rewritten battleground queuing to support joining as group -removed queue announcements --HG-- branch : trunk
Diffstat (limited to 'src/game/Group.cpp')
-rw-r--r--src/game/Group.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/game/Group.cpp b/src/game/Group.cpp
index e74a3778e87..1d4850ca82d 100644
--- a/src/game/Group.cpp
+++ b/src/game/Group.cpp
@@ -1244,6 +1244,54 @@ void Group::UpdateLooterGuid( Creature* creature, bool ifneed )
SendUpdate();
}
+uint32 Group::CanJoinBattleGroundQueue(uint32 bgTypeId, uint32 bgQueueType, uint32 MinPlayerCount, uint32 MaxPlayerCount, bool isRated, uint32 arenaSlot)
+{
+ // check for min / max count
+ uint32 memberscount = GetMembersCount();
+ if(memberscount < MinPlayerCount)
+ return BG_JOIN_ERR_GROUP_NOT_ENOUGH;
+ if(memberscount > MaxPlayerCount)
+ return BG_JOIN_ERR_GROUP_TOO_MANY;
+
+ // get a player as reference, to compare other players' stats to (arena team id, queue id based on level, etc.)
+ Player * reference = GetFirstMember()->getSource();
+ // no reference found, can't join this way
+ if(!reference)
+ return BG_JOIN_ERR_OFFLINE_MEMBER;
+
+ uint32 bgQueueId = reference->GetBattleGroundQueueIdFromLevel();
+ uint32 arenaTeamId = reference->GetArenaTeamId(arenaSlot);
+ uint32 team = reference->GetTeam();
+
+ // check every member of the group to be able to join
+ for(GroupReference *itr = GetFirstMember(); itr != NULL; itr = itr->next())
+ {
+ Player *member = itr->getSource();
+ // offline member? don't let join
+ if(!member)
+ return BG_JOIN_ERR_OFFLINE_MEMBER;
+ // don't allow cross-faction join as group
+ if(member->GetTeam() != team)
+ return BG_JOIN_ERR_MIXED_FACTION;
+ // not in the same battleground level braket, don't let join
+ if(member->GetBattleGroundQueueIdFromLevel() != bgQueueId)
+ return BG_JOIN_ERR_MIXED_LEVELS;
+ // don't let join rated matches if the arena team id doesn't match
+ if(isRated && member->GetArenaTeamId(arenaSlot) != arenaTeamId)
+ return BG_JOIN_ERR_MIXED_ARENATEAM;
+ // don't let join if someone from the group is already in that bg queue
+ if(member->InBattleGroundQueueForBattleGroundQueueType(bgQueueType))
+ return BG_JOIN_ERR_GROUP_MEMBER_ALREADY_IN_QUEUE;
+ // check for deserter debuff in case not arena queue
+ if(bgTypeId != BATTLEGROUND_AA && !member->CanJoinToBattleground())
+ return BG_JOIN_ERR_GROUP_DESERTER;
+ // check if member can join any more battleground queues
+ if(!member->HasFreeBattleGroundQueueId())
+ return BG_JOIN_ERR_ALL_QUEUES_USED;
+ }
+ return BG_JOIN_ERR_OK;
+}
+
//===================================================
//============== Roll ===============================
//===================================================