TeamManager Plugin

The TeamManager plugin handles team assignment and balancing in multiplayer games. It synchronizes team membership across all connected systems and enforces team size limits and balancing rules.

Basic Usage

Setting up teams:

#include "mafianet/TeamManager.h"

MafiaNet::TeamManager teamManager;
peer->AttachPlugin(&teamManager);

// Define teams
MafiaNet::TM_Team blueTeam, redTeam, spectators;

teamManager.AddTeam(&blueTeam);
teamManager.AddTeam(&redTeam);
teamManager.AddTeam(&spectators);

// Set team limits
blueTeam.SetMemberLimit(8);
redTeam.SetMemberLimit(8);
spectators.SetMemberLimit(0);  // No limit

// Enable auto-balancing
teamManager.SetAutoBalanceTeams(true);

Managing team membership:

// Create team member for local player
MafiaNet::TM_TeamMember* myMember = teamManager.CreateTeamMember();
myMember->SetGuid(peer->GetMyGUID());

// Request to join a team
teamManager.RequestTeamSwitch(myMember, &blueTeam);

// Or assign directly (host only)
if (teamManager.GetHost() == peer->GetMyGUID()) {
    teamManager.SetTeam(player, &redTeam);
}

Handling team events:

MafiaNet::Packet* packet;
while ((packet = peer->Receive()) != nullptr) {
    switch (packet->data[0]) {
        case ID_TEAM_BALANCER_TEAM_ASSIGNED:
            printf("Assigned to team\n");
            break;

        case ID_TEAM_BALANCER_REQUESTED_TEAM_FULL:
            printf("Requested team is full\n");
            break;

        case ID_TEAM_BALANCER_INTERNAL:
            teamManager.DecodeTeamAssigned(packet);
            break;
    }
    peer->DeallocatePacket(packet);
}

Key Features

  • Synchronized team state across all peers

  • Configurable team size limits

  • Automatic team balancing

  • Host-based authority model

  • Team switch requests and approval

  • Support for multiple teams per player

  • Spectator team support

Configuration Options

  • AddTeam() - Register a new team

  • RemoveTeam() - Remove a team

  • CreateTeamMember() - Create player representation

  • RequestTeamSwitch() - Request team change

  • SetAutoBalanceTeams() - Enable/disable balancing

  • SetHost() - Set authoritative host

See Also