Skip to content

Guild Types Reference

Header: FWGuildTypes.h

All type definitions used by the FWGuildSystem plugin. Every struct is marked BlueprintType for full Blueprint compatibility.


Enums

EFWGuildPermission

Bitmask enum defining granular permissions assignable to guild ranks. Multiple permissions are combined using bitwise OR.

UENUM(BlueprintType, Meta = (Bitflags, UseEnumValuesAsBitmaskValues = "true"))
enum class EFWGuildPermission : uint8
{
    None           = 0       UMETA(Hidden),
    Invite         = 1 << 0, // 1   - Invite new members
    Kick           = 1 << 1, // 2   - Remove members
    Promote        = 1 << 2, // 4   - Promote members to higher rank
    Demote         = 1 << 3, // 8   - Demote members to lower rank
    EditInfo       = 1 << 4, // 16  - Edit guild name and description
    EditRanks      = 1 << 5, // 32  - Modify rank hierarchy and permissions
    Disband        = 1 << 6, // 64  - Disband the guild permanently
    ViewAuditLog   = 1 << 7  // 128 - View the guild audit log
};
ENUM_CLASS_FLAGS(EFWGuildPermission);

Permission Bitmask Examples:

Role Bitmask Value Permissions
Guild Leader 0xFF 255 All permissions
Officer Invite | Kick | ViewAuditLog 131 Invite, kick, view audit log
Veteran Invite 1 Invite only
Member None 0 No special permissions

Bitmask Operations

// Combine permissions
uint8 OfficerPerms = static_cast<uint8>(EFWGuildPermission::Invite)
                   | static_cast<uint8>(EFWGuildPermission::Kick)
                   | static_cast<uint8>(EFWGuildPermission::ViewAuditLog);

// Check permission
bool bCanKick = (RankPermissions & static_cast<uint8>(EFWGuildPermission::Kick)) != 0;

EFWGuildUpdateType

Describes the type of guild state change in update events.

UENUM(BlueprintType)
enum class EFWGuildUpdateType : uint8
{
    MemberJoined,
    MemberLeft,
    MemberKicked,
    MemberPromoted,
    MemberDemoted,
    GuildInfoEdited,
    RanksEdited,
    GuildDisbanded,
    InvitationSent,
    InvitationAccepted,
    InvitationDeclined,
    InvitationExpired
};

EFWGuildOperationResult

Result codes returned by guild operations via delegates.

UENUM(BlueprintType)
enum class EFWGuildOperationResult : uint8
{
    Success,
    AlreadyInGuild,
    NotInGuild,
    InsufficientPermission,
    GuildNotFound,
    PlayerNotFound,
    PlayerAlreadyInGuild,
    PlayerAlreadyInvited,
    GuildFull,
    InvalidGuildName,
    GuildNameTaken,
    RankNotFound,
    CannotModifyHigherRank,
    CannotModifySelf,
    NetworkError,
    ServerError,
    Unknown
};

Structs

FFWGuildRank

Defines a single rank in the guild hierarchy.

USTRUCT(BlueprintType)
struct FFWGuildRank
{
    GENERATED_BODY()

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Guild")
    FString RankId;

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Guild")
    FString Name;

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Guild")
    int32 Priority;  // 0 = highest (leader)

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Guild",
        Meta = (Bitmask, BitmaskEnum = "/Script/FWGuildSystem.EFWGuildPermission"))
    uint8 Permissions;
};
Field Type Description
RankId FString Unique identifier for the rank.
Name FString Display name (e.g., "Guild Leader", "Officer", "Member").
Priority int32 Rank ordering. 0 is the highest rank (guild leader). Higher values are lower ranks.
Permissions uint8 Bitmask of EFWGuildPermission flags.

FFWGuildMember

Represents a single guild member.

USTRUCT(BlueprintType)
struct FFWGuildMember
{
    GENERATED_BODY()

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString PlayerId;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString DisplayName;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FFWGuildRank Rank;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    bool bIsOnline;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FDateTime JoinDate;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FDateTime LastSeen;
};
Field Type Description
PlayerId FString Unique player identifier.
DisplayName FString Player's display name.
Rank FFWGuildRank The member's current rank.
bIsOnline bool Whether the player is currently online.
JoinDate FDateTime When the player joined the guild.
LastSeen FDateTime Last time the player was seen online.

FFWGuildInvitation

Represents a pending guild invitation.

USTRUCT(BlueprintType)
struct FFWGuildInvitation
{
    GENERATED_BODY()

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString InvitationId;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString GuildId;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString GuildName;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString InvitedByPlayerId;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString InvitedByDisplayName;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FDateTime SentAt;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FDateTime ExpiresAt;
};
Field Type Description
InvitationId FString Unique invitation identifier.
GuildId FString ID of the guild that sent the invitation.
GuildName FString Display name of the inviting guild.
InvitedByPlayerId FString Player ID of the member who sent the invitation.
InvitedByDisplayName FString Display name of the inviting member.
SentAt FDateTime When the invitation was sent.
ExpiresAt FDateTime When the invitation expires.

FFWGuildInfo

Summary information about a guild, used in search results and lightweight displays.

USTRUCT(BlueprintType)
struct FFWGuildInfo
{
    GENERATED_BODY()

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString GuildId;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString Name;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString Description;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    int32 MemberCount;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    int32 MaxMembers;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString LeaderDisplayName;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FDateTime CreatedAt;
};

FFWGuildDetails

Complete guild data including rank hierarchy and full member list. Extends the information in FFWGuildInfo.

USTRUCT(BlueprintType)
struct FFWGuildDetails
{
    GENERATED_BODY()

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FFWGuildInfo Info;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    TArray<FFWGuildRank> Ranks;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    TArray<FFWGuildMember> Members;
};
Field Type Description
Info FFWGuildInfo Basic guild information.
Ranks TArray<FFWGuildRank> Ordered rank hierarchy (index 0 = leader).
Members TArray<FFWGuildMember> Complete member list.

FFWGuildUpdateEvent

Payload for guild state change notifications pushed from the server.

USTRUCT(BlueprintType)
struct FFWGuildUpdateEvent
{
    GENERATED_BODY()

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    EFWGuildUpdateType UpdateType;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString ActorPlayerId;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString TargetPlayerId;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString GuildId;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FDateTime Timestamp;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString AdditionalData;  // JSON string for type-specific payload
};

FFWGuildSearchResult

Paginated search results returned by SearchGuilds.

USTRUCT(BlueprintType)
struct FFWGuildSearchResult
{
    GENERATED_BODY()

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    TArray<FFWGuildInfo> Guilds;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    int32 TotalResults;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    int32 CurrentPage;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    int32 TotalPages;
};

FFWGuildAuditLogEntry

A single audit log entry recording a guild operation.

USTRUCT(BlueprintType)
struct FFWGuildAuditLogEntry
{
    GENERATED_BODY()

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString EntryId;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    EFWGuildUpdateType ActionType;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString ActorPlayerId;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString ActorDisplayName;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString TargetPlayerId;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString TargetDisplayName;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FDateTime Timestamp;

    UPROPERTY(BlueprintReadOnly, Category = "Guild")
    FString Description;
};

Utility Class

FFWGuildTypeUtils

Static helper functions for working with guild types.

struct FWGUILDSYSTEM_API FFWGuildTypeUtils
{
    /** Converts a permission bitmask to a human-readable string list. */
    static FString PermissionsToString(uint8 Permissions);

    /** Parses a JSON string into an FFWGuildDetails struct. */
    static bool ParseGuildDetails(const FString& JsonString, FFWGuildDetails& OutDetails);

    /** Serializes an FFWGuildDetails struct to JSON. */
    static FString SerializeGuildDetails(const FFWGuildDetails& Details);

    /** Returns the default rank hierarchy for a newly created guild. */
    static TArray<FFWGuildRank> GetDefaultRanks();

    /** Checks if SourceRank can perform an action on TargetRank based on priority. */
    static bool CanActOnRank(const FFWGuildRank& SourceRank, const FFWGuildRank& TargetRank);

    /** Converts EFWGuildOperationResult to a user-facing error message. */
    static FText GetResultMessage(EFWGuildOperationResult Result);

    /** Converts EFWGuildUpdateType to a display string. */
    static FString UpdateTypeToString(EFWGuildUpdateType UpdateType);
};

Default Rank Hierarchy

GetDefaultRanks() returns the following four ranks:

Priority Name Permissions
0 Guild Leader All (255)
1 Officer Invite, Kick, Promote, Demote, ViewAuditLog (143)
2 Veteran Invite (1)
3 Member None (0)