Changeset 9 for trunk/src/game/Group.cpp

Show
Ignore:
Timestamp:
11/19/08 13:22:41 (17 years ago)
Author:
yumileroy
Message:

[svn] -enabled instantiated battlegrounds
-enabled arena matches
-rewritten battleground queuing to support joining as group
-removed queue announcements

Original author: w12x
Date: 2008-10-05 08:48:32-05:00

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/game/Group.cpp

    r2 r9  
    12451245} 
    12461246 
     1247uint32 Group::CanJoinBattleGroundQueue(uint32 bgTypeId, uint32 bgQueueType, uint32 MinPlayerCount, uint32 MaxPlayerCount, bool isRated, uint32 arenaSlot) 
     1248{ 
     1249    // check for min / max count 
     1250    uint32 memberscount = GetMembersCount(); 
     1251    if(memberscount < MinPlayerCount) 
     1252        return BG_JOIN_ERR_GROUP_NOT_ENOUGH; 
     1253    if(memberscount > MaxPlayerCount) 
     1254        return BG_JOIN_ERR_GROUP_TOO_MANY; 
     1255 
     1256    // get a player as reference, to compare other players' stats to (arena team id, queue id based on level, etc.) 
     1257    Player * reference = GetFirstMember()->getSource(); 
     1258    // no reference found, can't join this way 
     1259    if(!reference) 
     1260        return BG_JOIN_ERR_OFFLINE_MEMBER; 
     1261 
     1262    uint32 bgQueueId = reference->GetBattleGroundQueueIdFromLevel(); 
     1263    uint32 arenaTeamId = reference->GetArenaTeamId(arenaSlot); 
     1264    uint32 team = reference->GetTeam(); 
     1265 
     1266    // check every member of the group to be able to join 
     1267    for(GroupReference *itr = GetFirstMember(); itr != NULL; itr = itr->next()) 
     1268    { 
     1269        Player *member = itr->getSource(); 
     1270        // offline member? don't let join 
     1271        if(!member) 
     1272            return BG_JOIN_ERR_OFFLINE_MEMBER; 
     1273        // don't allow cross-faction join as group 
     1274        if(member->GetTeam() != team) 
     1275            return BG_JOIN_ERR_MIXED_FACTION; 
     1276        // not in the same battleground level braket, don't let join 
     1277        if(member->GetBattleGroundQueueIdFromLevel() != bgQueueId) 
     1278            return BG_JOIN_ERR_MIXED_LEVELS; 
     1279        // don't let join rated matches if the arena team id doesn't match 
     1280        if(isRated && member->GetArenaTeamId(arenaSlot) != arenaTeamId) 
     1281            return BG_JOIN_ERR_MIXED_ARENATEAM; 
     1282        // don't let join if someone from the group is already in that bg queue 
     1283        if(member->InBattleGroundQueueForBattleGroundQueueType(bgQueueType)) 
     1284            return BG_JOIN_ERR_GROUP_MEMBER_ALREADY_IN_QUEUE; 
     1285        // check for deserter debuff in case not arena queue 
     1286        if(bgTypeId != BATTLEGROUND_AA && !member->CanJoinToBattleground()) 
     1287            return BG_JOIN_ERR_GROUP_DESERTER; 
     1288        // check if member can join any more battleground queues 
     1289        if(!member->HasFreeBattleGroundQueueId()) 
     1290            return BG_JOIN_ERR_ALL_QUEUES_USED; 
     1291    } 
     1292    return BG_JOIN_ERR_OK; 
     1293} 
     1294 
    12471295//=================================================== 
    12481296//============== Roll ===============================