Add party logic
This article walks you though how to add party functionalities to your game.
Add basic party functionalities
In the PartyHandler.cs
, you can add these party functionalities for your players to use.
Create a party
This function will return a result from the class type PartyInfo
which contains Party data such as partyID
, the leader's leaderID
, a list of the party members' userIDs
, a list of the invitees' userIDs
, and the party invitation's invitationToken
.
```csharp
public void CreateParty()
{
ResultCallback<PartyInfo> createPartyCallback = result =>
{
// If there is an error, display the error information
if (result.IsError)
{
Debug.Log($"Failed to create party: error code: {result.Error.Code} message: {result.Error.Message}");
}
else
{
Debug.Log("Successfully create a party");
}
};
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().CreateParty(createPartyCallback);
}
```
If you want to save the `PartyInfo` of the created party, you can set the value based on `result.Value`.
```csharp
if (result.IsError)
...
else
{
...
partyInfo = result.Value;
}
```
Invite friend to party
This function requires the UserID
of the player you want to invite in order to send an invitation, so add inviteeUserId
as the function's parameter.
public void InviteToParty(string inviteeUserId)
{
ResultCallback inviteToPartyCallback = result =>
{
// If there is an error, display the error information
if (result.IsError)
{
Debug.Log($"Failed to invite user to party: error code: {result.Error.Code} message: {result.Error.Message}");
}
else
{
Debug.Log("Successfully invite an invitee");
}
};
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().InviteToParty(inviteeUserId, inviteToPartyCallback);
}
Kick friend from party
This function requires the UserID
of the party member you want to kick from the party, so add memberUserId
as the function's parameter.
```csharp
public void KickParty(string memberUserId)
{
ResultCallback kickPartyMemberCallback = result =>
{
// If there is an error, display the error information
if (result.IsError)
{
Debug.Log($"Failed to kick user from party: error code: {result.Error.Code} message: {result.Error.Message}");
}
else
{
Debug.Log($"Successfully kick member {memberUserId} from party");
}
};
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().KickPartyMember(memberUserId, kickPartyMemberCallback);
}
```
Leave party
Use this function to leave a party.
```csharp
public void LeaveParty()
{
ResultCallback leavePartyCallback = result =>
{
// If there is an error, display the error information
if (result.IsError)
{
Debug.Log($"Failed to leave party: error code: {result.Error.Code} message: {result.Error.Message}");
}
else
{
Debug.Log("Successfully leave from party");
}
};
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().LeaveParty(leavePartyCallback);
}
```
Promote friend to party leader
This function requires the UserID
of the party member you want to promote to party leader, so add memberUserId
as the function's parameter.
```csharp
public void PromotePartyLeader(string memberUserId)
{
ResultCallback<PartyPromoteLeaderResponse> promotePartyLeaderCallback = result =>
{
// If there is an error, display the error information
if (result.IsError)
{
Debug.Log($"Failed to promote member to be a party leader: error code: {result.Error.Code} message: {result.Error.Message}");
}
else
{
Debug.Log("Successfully promote member to be a party leader");
}
};
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().PromotePartyLeader(memberUserId, promotePartyLeaderCallback);
}
```
Manage party invitation events
Most of the party invitation's UI will be a spawnable prefab. Create a new script called PartyInvitationPanel.cs
and add the following to the top:
```csharp
using UnityEngine;
using AccelByte.Core;
using AccelByte.Models;
```
This script will hold functions that handle the Party Invitation's related events. You can attach this in your **Party Invitation** prefab later on.
Add some functions to handle party invitations in PartyInvitationPanel.cs
:
Accept party invitation (Join party)
This function requires the UserID
of the player you want to invite in order to send an invitation to that player, so add inviteeUserId
as the function's parameter.
public void JoinParty(PartyInvitation partyInvitation)
{
ResultCallback<PartyInfo> joinPartyCallback = result =>
{
// If there is an error, display the error information
if (result.IsError)
{
Debug.Log($"Failed to join party: error code: {result.Error.Code} message: {result.Error.Message}");
}
else
{
Debug.Log("Successfully join the party");
}
};
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().JoinParty(partyInvitation.partyID, partyInvitation.invitationToken, joinPartyCallback);
}
Reject party invitation
This function requires the UserID
of the party member you want to kick from the party, so add memberUserId
as the function's parameter.
```csharp
public void RejectPartyInvitation(PartyInvitation partyInvitation)
{
ResultCallback<PartyRejectResponse> rejectPartyCallback = result =>
{
// If there is an error, display the error information
if (result.IsError)
{
Debug.Log($"Failed to reject party invitation: error code: {result.Error.Code} message: {result.Error.Message}");
}
else
{
Debug.Log("Successfully reject the party invitation");
}
};
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().RejectPartyInvitation(partyInvitation.partyID, partyInvitation.invitationToken, rejectPartyCallback);
}
```
You can use the result value from the `AccelByteSDK.GetClientRegistry().GetApi().GetLobby().InvitedToParty` event for this **PartyInvitation** value.
Handle party notifications
To send a notification to a player on any activity related to the current party, find LobbyHandler.cs
and add this under the ConnectToLobby()
function. For now, we will just add a Debug.Log
for each event.
```csharp
lobby.InvitedToParty += result => { Debug.Log($"Invited by: {result.Value.from}"); };
lobby.JoinedParty += result => { Debug.Log("Invitee join a party"); };
lobby.KickedFromParty += result => { Debug.Log("You're kicked from party"); };
lobby.LeaveFromParty += result => { Debug.Log($"{result.Value.userID} leave the party"); };
lobby.RejectedPartyInvitation += result => { Debug.Log("Invitee rejected a party invitation"); };
```
Retrieve party data
You can retrieve party data in the following methods:
Retrieve party data every time the data is updated, use this event:
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().PartyDataUpdateNotif += result => {}
This event will return a result with the class type
PartyDataUpdateNotif
which contains Party data such asPartyInfo
.PartyDataUpdateNotif
does not have aninvitationToken
, but does haveupdatedAt
which indicates when the Party data is updated, andcustom_attribute
which is a Dictionary that you can use with any custom info.As with the last step, you can find this event in
LobbyHandler.cs
under theConnectToLobby()
function. In this case, since we only need to display Party data, just add aDebug.Log
to notify the party member'sUserID
via the Console output.lobby.PartyDataUpdateNotif += result =>{ Debug.Log($"Current Party Members: {result.Value.members}");}
Retrieve Party data using the
GetPartyInfo()
function. ThePartyInfo
class contains Party data such as thepartyID
,leaderID
, members (UserID
), invitees (UserID
), and aninvitationToken
. To get thisPartyInfo
, use the following function:ResultCallback<PartyInfo> getPartyInfoCallback = result =>
{
// If there is an error, display the error information
if (result.IsError)
{
Debug.Log($"Failed to leave party: error code: {result.Error.Code} message: {result.Error.Message}");
}
else
{
Debug.Log("Successfully left party");
}
};
AccelByteSDK.GetClientRegistry().GetApi().GetLobby().GetPartyInfo(getPartyInfoCallback);This function returns a result with the class type
PartyInfo
, and you can access its values withresult.Value.<the object you need>
. For example, if you want to retrieve thepartyID
, useresult.Value.partyId
.:::tip You can only retrieve UserID from
PartyDataUpdateNotif
andPartyInfo
, so you will need to use theGetUser()
function to retrieve user data. :::AccelByteSDK.GetClientRegistry().GetApi().GetUser().BulkGetUserInfo(usersIdList, result => {
// Loop the result's Users Data, return in BaseUserInfo
foreach (BaseUserInfo user in result.Value.data)
{
Debug.Log($"User data: {user.displayName}");
}
});
AccelByteSDK.GetClientRegistry().GetApi().GetUser().GetUserByUserId(userId, result => {
Debug.Log($"User data: {result.Value}");
});Depending on the situation, when displaying Party data, you may want to use
BulkGetUserInfo()
which also containsavatarUrl
.
After adding the party logic into your game, you can proceed to implementing the party UI. Follow the steps in the Implement the party UI article.