GuildController - jimdroberts/FishMMO GitHub Wiki

Description

Character guild controller. Manages guild membership, events, and synchronization for a character.


API Access

Fields

  • 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.

Properties

  • 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).

Methods

  • 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.


Basic Usage

Setup

  1. Attach GuildController to a character GameObject.
  2. The guild ID and rank will be managed and synchronized automatically.
  3. Use the provided events to handle guild invites, membership changes, and results.
  4. Network events will update the guild state and fire events as needed.

Example

// 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");
};

Best Practices

  • 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.
⚠️ **GitHub.com Fallback** ⚠️