GuildController - jimdroberts/FishMMO GitHub Wiki
Character guild controller. Manages guild membership, events, and synchronization for a character.
-
public event Action OnReceiveGuildInvite
Event triggered when a guild invite is received. Parameter: inviter's character ID.
-
public event Action<long, long, GuildRank, string> OnAddGuildMember
Event triggered when a guild member is added. Parameters: character ID, guild ID, rank, location.
-
public event Action<HashSet> OnValidateGuildMembers
Event triggered to validate the set of guild members. Parameter: set of member IDs.
-
public event Action OnRemoveGuildMember
Event triggered when a guild member is removed. Parameter: member ID.
-
public event Action OnLeaveGuild
Event triggered when leaving a guild.
-
public event Action OnReceiveGuildResult
Event triggered when a guild result is received. Parameter: result type.
-
private readonly SyncVar GID
SyncVar for the guild ID, used for network synchronization. Configured for unreliable channel and server-only writes.
-
public long ID { get; set; }
The unique guild ID for this character. Synchronized over the network.
-
public GuildRank Rank { get; set; }
The rank of the character in the guild (e.g., Member, Leader).
-
public override void OnAwake()
Called when the object is awakened. Subscribes to guild ID changes.
-
public override void OnDestroying()
Called when the object is being destroyed. Unsubscribes from guild ID changes.
-
public override void OnStartCharacter()
Registers client-side event handlers for guild-related network events when the character starts (client only).
-
public override void OnStopCharacter()
Unregisters client-side event handlers for guild-related network events when the character stops (client only).
-
public void OnClientGuildInviteBroadcastReceived(GuildInviteBroadcast msg, Channel channel)
Handles receiving a guild invitation from a network broadcast. msg (GuildInviteBroadcast): The broadcast message. channel (Channel): The network channel.
-
public void OnClientGuildAddBroadcastReceived(GuildAddBroadcast msg, Channel channel)
Handles adding a new guild member from a network broadcast. msg (GuildAddBroadcast): The broadcast message. channel (Channel): The network channel.
-
public void OnClientGuildAddMultipleBroadcastReceived(GuildAddMultipleBroadcast msg, Channel channel)
Handles adding multiple guild members from a network broadcast. msg (GuildAddMultipleBroadcast): The broadcast message. channel (Channel): The network channel.
-
public void OnClientGuildLeaveBroadcastReceived(GuildLeaveBroadcast msg, Channel channel)
Handles leaving a guild from a network broadcast. msg (GuildLeaveBroadcast): The broadcast message. channel (Channel): The network channel.
-
public void OnClientGuildRemoveBroadcastReceived(GuildRemoveBroadcast msg, Channel channel)
Handles removing a guild member from a network broadcast. msg (GuildRemoveBroadcast): The broadcast message. channel (Channel): The network channel.
-
public void OnClientGuildResultBroadcastReceived(GuildResultBroadcast msg, Channel channel)
Handles receiving a guild result from a network broadcast. msg (GuildResultBroadcast): The broadcast message. channel (Channel): The network channel.
- Attach GuildController to a character GameObject.
- The guild ID and rank will be managed and synchronized automatically.
- Use the provided events to handle guild invites, membership changes, and results.
- Network events will update the guild state and fire events as needed.
// Example 1: Handling a guild invite
controller.OnReceiveGuildInvite += inviterId => {
Debug.Log($"Received guild invite from {inviterId}");
};
// Example 2: Handling guild member added
controller.OnAddGuildMember += (charId, guildId, rank, location) => {
Debug.Log($"Member {charId} joined guild {guildId} as {rank} at {location}");
};
// Example 3: Handling leaving a guild
controller.OnLeaveGuild += () => {
Debug.Log("Left the guild");
};
- Subscribe to all relevant events to keep UI and gameplay logic in sync with guild state.
- Use the ID and Rank properties to track the character's guild membership and status.
- Always unregister event handlers on character stop or destroy to avoid memory leaks.
- Use network broadcasts to keep the guild state synchronized across clients and server.