17 #if _RAKNET_SUPPORT_TeamManager==1 
   24 using namespace SLNet;
 
   27 enum TeamManagerOperations
 
   29     ID_RUN_UpdateListsToNoTeam,
 
   30     ID_RUN_UpdateTeamsRequestedToAny,
 
   32     ID_RUN_JoinRequestedTeam,
 
   33     ID_RUN_UpdateTeamsRequestedToNoneAndAddTeam,
 
   34     ID_RUN_RemoveFromTeamsRequestedAndAddTeam,
 
   35     ID_RUN_AddToRequestedTeams,
 
   37     ID_RUN_SetMemberLimit,
 
   38     ID_RUN_SetJoinPermissions,
 
   39     ID_RUN_SetBalanceTeams,
 
   40     ID_RUN_SetBalanceTeamsInitial,
 
   41     ID_RUN_SerializeWorld,
 
  271     if (i==(
unsigned int)-1)
 
  286     return (
unsigned int) -1;
 
  308     if (specificTeamToCancel)
 
  458             constructionBitstream->
Write(
true);
 
  463             constructionBitstream->
Write(
false);
 
  467             constructionBitstream->
Write(
true);
 
  472             constructionBitstream->
Write(
false);
 
  488     constructionBitstream->
Read(worldId);
 
  494     success=constructionBitstream->
Read(teamsRequestedSize);
 
  495     for (
unsigned int i=0; i < teamsRequestedSize; i++)
 
  498         rt.isTeamSwitch=
false;
 
  501         constructionBitstream->
Read(rt.isTeamSwitch);
 
  502         bool hasTeamToLeave=
false;
 
  503         constructionBitstream->
Read(hasTeamToLeave);
 
  507             constructionBitstream->
Read(teamToLeaveId);
 
  513         bool hasTeamRequested=
false;
 
  514         success=constructionBitstream->
Read(hasTeamRequested);
 
  516         if (hasTeamRequested)
 
  518             success=constructionBitstream->
Read(teamRequestedId);
 
  525             (hasTeamToLeave==
false || (hasTeamToLeave==
true && rt.teamToLeave!=0)) &&
 
  526             (hasTeamRequested==
false || (hasTeamRequested==
true && rt.requested!=0))
 
  571     return g & 0xFFFFFFFF;
 
  579     for (
unsigned int i=0; i < 
teams.
Size(); i++)
 
  581         teams[i]->RemoveFromTeamMemberList(
this);
 
  641     if (teamToLeave!=0 && 
IsOnTeam(teamToLeave)==
false)
 
  644     if (teamToJoin==teamToLeave)
 
  704     rt.isTeamSwitch=
false;
 
  705     rt.requested=teamToJoin;
 
  719     rt.isTeamSwitch=
true;
 
  720     rt.requested=teamToJoin;
 
  721     rt.teamToLeave=teamToLeave;
 
  859     bsOut.
Write(noTeamId);
 
  877             return limitWithBalancing;
 
  904     bsOut.
Write(_joinPermissions);
 
  923     teamMember->
LeaveTeam(
this, noTeamSubcategory);
 
  974     constructionBitstream->
Write(
ID);
 
  986     constructionBitstream->
Read(worldId);
 
  989     constructionBitstream->
Read(
ID);
 
 1006     return g & 0xFFFFFFFF;
 
 1049             unsigned int j = 
teamMembers[i]->GetRequestedTeamIndex(team);
 
 1050             if (j!=(
unsigned int)-1)
 
 1052                 if (
teamMembers[i]->teamsRequested[j].isTeamSwitch && 
 
 1053                     (
teamMembers[i]->teamsRequested[j].teamToLeave==0 ||
 
 1060     return (
unsigned int) -1;
 
 1118     if (i!=(
unsigned int)-1)
 
 1197     return teams[index];
 
 1220     return (
unsigned int) -1;
 
 1234     teamMember->
world=
this;
 
 1300     return (
unsigned int) -1;
 
 1317     bsOut.
Write(balanceTeams);
 
 1318     bsOut.
Write(noTeamId);
 
 1364     for (
unsigned int i=0; i < 
teams.
Size(); i++)
 
 1381     (void) lostConnectionReason;
 
 1382     (void) systemAddress;
 
 1392     (void) systemAddress;
 
 1426     unsigned int i, teamIndex;
 
 1436             if (teamIndex == (
unsigned int)-1)
 
 1444                 teamToJoin = 
teams[teamIndex];
 
 1479     unsigned int teamIndex, indexIntoTeamsRequested = (
unsigned int)-1;
 
 1484     unsigned int joinRequestIndex;
 
 1486     for (joinRequestIndex=0; joinRequestIndex < joinRequests.
Size(); joinRequestIndex++)
 
 1488         teamMember = 
teamMembers[joinRequests[joinRequestIndex].teamMemberIndex];
 
 1494                 teamIndex=(
unsigned int)-1;
 
 1498             indexIntoTeamsRequested = joinRequests[joinRequestIndex].indexIntoTeamsRequested;
 
 1500             team = teamMember->
teamsRequested[indexIntoTeamsRequested].requested;
 
 1509                 teamIndex=(
unsigned int)-1;
 
 1513         if (teamIndex != (
unsigned int)-1)
 
 1515             team = 
teams[teamIndex];
 
 1540                 bool isSwitch = teamMember->
teamsRequested[indexIntoTeamsRequested].isTeamSwitch;
 
 1544                     teamToLeave=teamMember->
teamsRequested[indexIntoTeamsRequested].teamToLeave;
 
 1547                         if (teamMember->
IsOnTeam(teamToLeave))
 
 1559                         teamsWeAreLeaving=teamMember->
teams;
 
 1565                 int teamJoined = 
JoinSpecificTeam(teamMember, team, isSwitch, teamToLeave, teamsWeAreLeaving);
 
 1575                     bsOut.
Write(isSwitch);
 
 1594     unsigned int teamIndex;
 
 1596     unsigned int lowestTeamMembers = (
unsigned int) -1;
 
 1597     unsigned int lowestIndex = (
unsigned int) -1;
 
 1599     for (teamIndex=0; teamIndex < 
teams.
Size(); teamIndex++)
 
 1601         if (
teams[teamIndex]->GetTeamMembersCount() < secondaryLimit && 
 
 1602             teams[teamIndex]->GetTeamMembersCount() < 
teams[teamIndex]->GetMemberLimitSetting() &&
 
 1603             teams[teamIndex]->GetTeamMembersCount() < lowestTeamMembers &&
 
 1604             (joinPermissions & 
teams[teamIndex]->GetJoinPermissions())!=0)
 
 1606             lowestTeamMembers = 
teams[teamIndex]->GetTeamMembersCount();
 
 1607             lowestIndex = teamIndex;
 
 1681     if (idx == (
unsigned int ) -1)
 
 1686             if ((
teams[idx]->GetTeamMembersCount() >= balancedLimit ||
 
 1687                 teams[idx]->GetTeamMembersCount()  >= 
teams[idx]->GetMemberLimitSetting()) &&
 
 1688                 teams[idx]->GetMemberLimitSetting() != 0 &&
 
 1710     return lowestMemberTeam;
 
 1740             if (teamsWeAreLeaving.
Size()==1)
 
 1743                 if (j!=(
unsigned int)-1)
 
 1784     bool additionalTeamsExcluded;
 
 1792         additionalTeamsExcluded=
false;
 
 1793         balancedLimit = (
TeamMemberLimit) ((membersCount+(teamsCount-1))/(teamsCount));
 
 1795         while (i < consideredTeams.
Size())
 
 1797             if (consideredTeams[i]->GetMemberLimitSetting() < balancedLimit)
 
 1799                 additionalTeamsExcluded=
true;
 
 1800                 membersCount-=consideredTeams[i]->GetMemberLimitSetting();
 
 1810     } 
while (additionalTeamsExcluded==
true && teamsCount>0);
 
 1812     return balancedLimit;
 
 1822     for (
unsigned int i=0; i < 255; i++)
 
 1896         worldsList[i]->SetAutoManageConnections(autoAdd);
 
 1923     DecomposeTeamFullOrLocked(&bsIn, world, teamMember, team, currentMembers, memberLimitIncludingBalancing, balancingIsActive, joinPermissions);
 
 1960     bsIn->
Read(worldId);
 
 1961     bsIn->
Read(teamMemberId);
 
 1963     bsIn->
Read(currentMembers);
 
 1964     bsIn->
Read(memberLimitIncludingBalancing);
 
 1965     bsIn->
Read(balancingIsActive);
 
 1966     bsIn->
Read(joinPermissions);
 
 1971         *teamMember = (*world)->GetTeamMemberByNetworkID(teamMemberId);
 
 1972         *team = (*world)->GetTeamByNetworkID(teamId);
 
 1984     DecomposeTeamFullOrLocked(&bsIn, world, teamMember, team, currentMembers, memberLimitIncludingBalancing, balancingIsActive, joinPermissions);
 
 1994     for (
unsigned int i=0; i < teamMember->
teams.
Size(); i++)
 
 1996         bitStream->
Write(teamMember->
teams[i]->GetNetworkID());
 
 2013     DecodeTeamAssigned(bsIn, &world, &teamMember, noTeamId, joinTeamType, newTeam, teamsLeft, teamsJoined);
 
 2017         for (
unsigned int i=0; i < teamsLeft.
Size(); i++)
 
 2021         for (
unsigned int i=0; i < teamsJoined.
Size(); i++)
 
 2023             if (teamMember->
IsOnTeam(teamsJoined[i])==
false)
 
 2044     bsIn.
Read(teamMemberId);
 
 2048         *teamMember = (*world)->GetTeamMemberByNetworkID(teamMemberId);
 
 2066     bsIn.
Read(teamMemberId);
 
 2071         *teamMember = (*world)->GetTeamMemberByNetworkID(teamMemberId);
 
 2083         *teamCancelled = (*world)->GetTeamByNetworkID(nid);
 
 2106     bsIn->
Read(worldId);
 
 2107     bsIn->
Read(teamMemberId);
 
 2111         *teamMember = (*world)->GetTeamMemberByNetworkID(teamMemberId);
 
 2113         bsIn->
Read(teamsCount);
 
 2115         for (
unsigned int i=0; i < teamsCount; i++)
 
 2118             TM_Team * team = (*world)->GetTeamByNetworkID(teamId);
 
 2127             for (
unsigned int i=0; i < (*teamMember)->teams.Size(); i++)
 
 2129                 TM_Team *team = (*teamMember)->teams[i];
 
 2130                 if (newTeam.
GetIndexOf(team)==(
unsigned int)-1)
 
 2135         for (
unsigned int i=0; i < newTeam.
Size(); i++)
 
 2138             if ((*teamMember)->teams.GetIndexOf(team)==(
unsigned int)-1)
 
 2142         bsIn->
Read(noTeamId);
 
 2143         bsIn->
Read(joinTeamType);
 
 2158         worldsList[i]->
Clear();
 
 2174     switch (packet->
data[0])
 
 2179             for (i=0; i < worldsList.Size(); i++)
 
 2180                 worldsList[i]->SetHost(packet->
guid);
 
 2201             if (validPacket==
false)
 
 2217                 switch (packet->
data[1])
 
 2219                 case ID_RUN_UpdateListsToNoTeam:
 
 2222                 case ID_RUN_UpdateTeamsRequestedToAny:
 
 2225                 case ID_RUN_JoinAnyTeam:
 
 2228                 case ID_RUN_JoinRequestedTeam:
 
 2231                 case ID_RUN_UpdateTeamsRequestedToNoneAndAddTeam:
 
 2234                 case ID_RUN_RemoveFromTeamsRequestedAndAddTeam:
 
 2237                 case ID_RUN_AddToRequestedTeams:
 
 2240                 case ID_RUN_LeaveTeam:
 
 2243                 case ID_RUN_SetMemberLimit:
 
 2246                 case ID_RUN_SetJoinPermissions:
 
 2249                 case ID_RUN_SetBalanceTeams:
 
 2252                 case ID_RUN_SetBalanceTeamsInitial:
 
 2268     for (
unsigned int i=0; i < worldsList.Size(); i++)
 
 2270         worldsList[i]->OnClosedConnection(systemAddress, rakNetGUID, lostConnectionReason);
 
 2278     for (
unsigned int i=0; i < worldsList.Size(); i++)
 
 2280         worldsList[i]->OnNewConnection(systemAddress, rakNetGUID, isIncoming);
 
 2345     bsIn.
Read(networkId);
 
 2348     bsIn.
Read(noTeamId);
 
 2376     bsIn.
Read(networkId);
 
 2391     bsIn.
Read(networkId);
 
 2411             bsOut.
Write(networkId);
 
 2431             bsOut.
Write(networkId);
 
 2439             else if (resultCode==-1)
 
 2458     bsIn.
Read(networkId);
 
 2461     bsIn.
Read(teamToJoinNetworkId);
 
 2463     bool isTeamSwitch=
false;
 
 2464     bool switchSpecificTeam=
false;
 
 2467     bsIn.
Read(isTeamSwitch);
 
 2470         bsIn.
Read(switchSpecificTeam);
 
 2471         if (switchSpecificTeam)
 
 2473             bsIn.
Read(teamToLeaveNetworkId);
 
 2479     if (teamToJoin && teamMember)
 
 2501                 teamsWeAreLeaving=teamMember->
teams;
 
 2505                 if (teamMember->
IsOnTeam(teamToLeave))
 
 2509             if (teamsWeAreLeaving.
Size()==0)
 
 2513         int resultCode = world->
JoinSpecificTeam(teamMember, teamToJoin, isTeamSwitch, teamToLeave, teamsWeAreLeaving);
 
 2523             bsOut.
Write(networkId);
 
 2525             bsOut.
Write(isTeamSwitch);
 
 2528                 bsOut.
Write(switchSpecificTeam);
 
 2529                 if (switchSpecificTeam)
 
 2530                     bsOut.
Write(teamToLeaveNetworkId);
 
 2550             bsOut.
Write(networkId);
 
 2552             bsOut.
Write(isTeamSwitch);
 
 2555                 bsOut.
Write(switchSpecificTeam);
 
 2556                 if (switchSpecificTeam)
 
 2557                     bsOut.
Write(teamToLeaveNetworkId);
 
 2566             else if (resultCode==-1)
 
 2586     bsIn.
Read(networkId);
 
 2589     bsIn.
Read(teamNetworkId);
 
 2592     if (team && teamMember)
 
 2608     bsIn.
Read(networkId);
 
 2611     bsIn.
Read(teamNetworkId);
 
 2612     bool isTeamSwitch=
false, switchSpecificTeam=
false;
 
 2615     bsIn.
Read(isTeamSwitch);
 
 2618         bsIn.
Read(switchSpecificTeam);
 
 2619         if (switchSpecificTeam)
 
 2621             bsIn.
Read(teamToLeaveNetworkId);
 
 2627     if (team && teamMember)
 
 2632         else if (isTeamSwitch==
true && switchSpecificTeam==
false)
 
 2645     bsIn.
Read(networkId);
 
 2648     bsIn.
Read(teamNetworkId);
 
 2651     bool isTeamSwitch=
false;
 
 2652     bool switchSpecificTeam=
false;
 
 2655     bsIn.
Read(isTeamSwitch);
 
 2658         bsIn.
Read(switchSpecificTeam);
 
 2659         if (switchSpecificTeam)
 
 2661             bsIn.
Read(teamToLeaveNetworkId);
 
 2668     if (team && teamMember)
 
 2684     bsIn.
Read(networkId);
 
 2686     bool hasSpecificTeam=
false;
 
 2689     bsIn.
Read(hasSpecificTeam);
 
 2690     if (hasSpecificTeam)
 
 2692         bsIn.
Read(teamNetworkId);
 
 2726     bsIn.
Read(networkId);
 
 2729     bsIn.
Read(teamNetworkId);
 
 2732     bsIn.
Read(noTeamId);
 
 2734     if (team && teamMember)
 
 2768     bsIn.
Read(teamNetworkId);
 
 2771     bsIn.
Read(teamMemberLimit);
 
 2772     bsIn.
Read(noTeamId);
 
 2798     bsIn.
Read(teamNetworkId);
 
 2800     bsIn.
Read(joinPermissions);
 
 2824     bool balanceTeams=
false;
 
 2825     bsIn.
Read(balanceTeams);
 
 2827     bsIn.
Read(noTeamId);
 
 2850     bool balanceTeams=
false;
 
 2851     bsIn.
Read(balanceTeams);
 
 2857 #endif // _RAKNET_SUPPORT_TeamManager==1