API Reference

Public types grouped by area. Everything, including the contract interface (ICrimsonTeamAgentInterface), UCrimsonGameFeatureAction_AddTeams, UCrimsonGameFeatureAction_AddParty, and the party types, is in the CrimsonTeams runtime module.

Membership

TypeDescription
ICrimsonTeamAgentInterfaceExtends IGenericTeamAgentInterface; GetTeamTags, GetHostileToTags, GetOnTeamTagsChangedDelegate, static BroadcastTeamChange
UCrimsonTeamAgentComponentMutators (authority-only): JoinTeam / LeaveTeam, AddTeamTags / RemoveTeamTags / SetTeamTags, AddHostileTags / RemoveHostileTags / SetHostileTags. Overrides GetTeamAttitudeTowards (tag-based). Delegates OnTeamTagsChanged / OnHostileTagsChanged. Replicated TeamTags / HostileToTags
FOnCrimsonTeamTagsChangedDelegate(UObject* ChangedActor, const FGameplayTagContainer& Old, const FGameplayTagContainer& New)
ListPartiesread
GetPartyForPlayerread
InviteToPartyact
AcceptPartyInviteact
LeavePartyact
KickFromPartyact

Subsystem

MemberDescription
CanCauseDamage(Inst, Target, bAllowSelf)Tag-based friendly-fire gate
IsActorFriendly(Source, Other)True only when the two are Friendly; null/self count as friendly. Use instead of negating CanCauseDamage
FindTeamAgentComponent(Object)Resolves actor / pawn / controller / player state to its team component
FindPlayerStateFromActor(Actor)Resolves a pawn/controller/player-state actor to its APlayerState
GetTeamTags(Out) / DoesTeamExist(tag)Registry queries
GetDisplayAssetForTeam(tag) / GetDisplayAssetForAgent(obj)Display-asset lookup; GetTeamDisplayAssetChangedDelegate(tag) to subscribe
AddTeamTagStack / RemoveTeamTagStack / GetTeamTagStackCount / TeamHasTagFaction-wide tag stacks
RegisterTeamAgent / UnregisterTeamAgentCalled automatically by the component (BeginPlay/EndPlay) to drive the dynamic-attitude refresh
OnTeamAttitudeChanged (BlueprintAssignable)(AActor* ChangedActor) - fires after a change has refreshed perception

Statics & filtering

FunctionDescription
GetTeamAttitudeBetween(Source, Target)The source of truth: Hostile / Friendly / Neutral
ShouldCauseDamageToTarget(Source, Target)True unless the two are Friendly
MakeFilteredTargetDataFromActors(Owner, Actors, Filter)Attitude-filtered GAS target data (self/null excluded)
GetTeamTagsFromObject / GetHostileTagsFromObjectDecompose an agent to tags + display asset
GetTeamDisplayAssetForAgent + GetTeam{Scalar,Color,Texture}WithFallbackDisplay-asset read helpers
ECrimsonTargetFilterHostileAndNeutral / HostileOnly / FriendlyAndNeutral / FriendlyOnly / All
UCrimsonPartyStaticsFindPartyMemberComponent(obj), AreInSameParty(A, B), IsPartyMember(agent, PS), IsInParty, GetPartyId, GetPartyInfo, FindPartyInfoById(ctx, id), GetPartyMembers(agent, out) / GetOtherPartyMembers, GetPartyMemberEntries (online + offline), GetPartyMemberPawns (net-relevant only), GetPartyMemberLocation(agent, PS, out) / GetPartyMemberLocationById / GetPartyMemberLocations (last known, any distance), GetPartyMaxRange(agent), GetDistanceToPartyMember(agent, PS, out), IsPartyMemberInRange(agent, PS), GetPartyMembersInRange(agent, out) (reach from ICrimsonPartyRangeProvider), GetPartyMemberCount, GetPartyMaxSize, GetPartyLeader, IsPartyLeader, IsPartyMemberOnline, GetPartyDisplayName(PS). GetTeamAttitudeBetween checks AreInSameParty first and returns Friendly

Declared teams & cosmetics

TypeDescription
UCrimsonTeamCreationComponentGame State component; TeamsToCreate, PublicTeamInfoClass / PrivateTeamInfoClass, ServerChooseTeamForPlayer (BlueprintNativeEvent), AddTeams / RemoveTeams
ACrimsonTeamInfoBase / ACrimsonTeamPublicInfo / ACrimsonTeamPrivateInfoGetTeamTag, faction TeamTags stack; public adds GetTeamDisplayAsset
UCrimsonTeamDisplayAssetScalarParameters / ColorParameters / TextureParameters / TeamShortName; ApplyToMaterial / ApplyToMeshComponent / ApplyToNiagaraComponent / ApplyToActor
UCrimsonGameFeatureAction_AddTeams"Add Teams" Game Feature Action: adds the agent component + tags to actor classes (find-or-configures pre-existing components). Listed classes must be ModularGameplay component receivers. Announces CrimsonTeams::SystemReadyFeatureName on each actor it configures

Parties

TypeDescription
UCrimsonPartySubsystemGameInstance subsystem. Server requests (all BlueprintAuthorityOnly, return ECrimsonPartyResult): CreateParty, InvitePlayer, SuggestInvite, AcceptInvite, DeclineInvite, CancelInvite, AcceptInviteSuggestion, DismissInviteSuggestion, LeaveParty, KickMember, PromoteLeader, SetPartyMaxSize, DisbandParty. Queries: CanInvitePlayer (both sides), FindPartyInfo (both sides), FindPartyIdForPlayer, GetAllPartyIds, GetPartyMemberPlayerStates(id, out), GetPartyMemberEntries(id, out), FindOnlineMember (server)
UCrimsonPartyMemberComponentUPlayerStateComponent. Requests (owning client or server): the same set as the subsystem minus DisbandParty. Queries: IsInParty, GetPartyId, GetPartyInfo, IsPartyLeader, GetPendingInvites, GetSentInvites, GetPendingInviteSuggestions, GetPartyDisplayName. Delegates: OnPartyMembershipChanged(Component, Old, New), OnPartyStateChanged(Component), OnInviteReceived(Invite), OnPendingInvitesChanged, OnSentInviteResolved(Invite, Resolution), OnInviteSuggested(Suggestion), OnPendingInviteSuggestionsChanged, OnOperationResult(Operation, Result)
ACrimsonPartyInfoReplicated per party, members only. GetPartyId, GetLeaderId, GetLeaderPlayerState, GetMembers, GetMaxSize, GetMemberCount, GetOnlineMemberCount, IsFull, IsMember, IsLeader, FindMember, GetOnlineMemberPlayerStates, GetMemberLocations, GetMemberLocation(id, out). Delegates OnRosterChanged, OnLeaderChanged, OnMaxSizeChanged, OnMemberLocationsChanged
FCrimsonPartyMemberEntryPlayerId (FUniqueNetIdRepl), DisplayName, bOnline, PlayerState (null while offline), JoinOrder. FCrimsonPartyMemberLocation: PlayerId, Location (FVector_NetQuantize), ServerTime; replicated apart from the roster at the settings cadence
FCrimsonPartyInvite / FCrimsonPartyInviteSuggestionIds, party id, inviter/invitee (or suggester/target) ids and display names; LifetimeSeconds on invites
FCrimsonPartyMessagePayload for Crimson.Party.Message.*: PartyId, SubjectId, SubjectName, SubjectPlayerState, LeaveReason, InviteResolution
ECrimsonPartyResultSuccess, NotAuthority, InvalidPlayer, NotInParty, AlreadyInParty, NotLeader, PartyFull, PartyNotFound, TargetInvalid, TargetIsSelf, TargetAlreadyInParty, TargetAlreadyInvited, AttitudeBlocked, InviteNotFound, SuggestionNotFound, MemberNotFound, InvalidSize
ECrimsonPartyOperation / ECrimsonPartyInviteResolution / ECrimsonPartyLeaveReason / ECrimsonPartyInviteGateOperation names for OnOperationResult; Accepted / Declined / Canceled / Expired / PartyDissolved; Left / Kicked / Expired / Dissolved; FriendlyOnly / FriendlyAndNeutral / Any
ICrimsonPartyDisplayNameProviderBlueprint-implementable interface for the PlayerState or controller: GetPartyDisplayName() -> FText; empty means use the PlayerState name
ICrimsonPartyRangeProviderBlueprint-implementable interface for the pawn (checked first), PlayerState, or controller: GetPartyMaxRange() -> float cm; 0 or less means use DefaultPartyMaxRange from settings (0 there = unlimited)
UCrimsonTeamsSettingsProject Settings -> Crimson -> Crimson Teams: DefaultMaxPartySize, AbsoluteMaxPartySize, InviteLifetimeSeconds, OfflineMemberGraceSeconds, bOnlyLeaderCanInvite, InviteAttitudeGate, MemberLocationUpdateInterval (0 disables), MemberLocationMinDelta, DefaultPartyMaxRange (0 = unlimited), PartyInfoClass
UCrimsonGameFeatureAction_AddParty"Add Party System" Game Feature action: adds the member component to each FCrimsonPartyAdditionRequest.PlayerStateClass on the server; optional PartyMemberComponentClass override
UAsyncAction_ObservePartyObserve Party node -> OnPartyChanged(bool bIsInParty, FGuid PartyId, ACrimsonPartyInfo* PartyInfo)
Message channelsCrimson.Party.Message.Created / .Dissolved / .MemberJoined / .MemberLeft / .MemberOnlineChanged / .LeaderChanged / .MaxSizeChanged / .InviteReceived / .InviteResolved / .InviteSuggested (defined in CrimsonTeams)

Observers, cheats & tooling

TypeDescription
UAsyncAction_ObserveTeamObserveTeam(agent) -> OnTeamChanged(bIsPartOfTeam, Tags)
UAsyncAction_ObserveTeamColorsObserveTeamColors(agent) -> OnTeamChanged(bIsPartOfTeam, Tags, DisplayAsset)
UCrimsonTeamCheatsCycleTeam / SetTeam <index> (authority) / ListTeams. Parties: PartyInvite <name>, PartySuggest <name>, PartyAccept, PartyDecline, PartyLeave, PartyKick <name>, PartyPromote <name>, ListParties
Dev Tools windowConsole Crimson.Teams.DevTools or Tools -> Crimson Teams -> Teams Dev Tools (editor-only, PIE)

System readiness

Readiness is announced as ModularGameplay feature states (UGameFrameworkComponentManager::ChangeFeatureInitState), server side, by the two Game Feature actions. Wait on these rather than polling for the component: RegisterAndCallForActorInitState(Actor, <FeatureName>, FGameplayTag(), Delegate, true) fires immediately when the state is already reached, and GetImplementerForFeature(Actor, <FeatureName>, FGameplayTag()) returns the component. The feature names are in CrimsonTeamsTags.h. This is a C++ API; in Blueprint, react to the component's own delegates (On Team Tags Changed, Observe Team, Observe Party) instead.

cpp
#include "CrimsonTeamsTags.h"
#include "Components/GameFrameworkComponentManager.h"
if (UGameFrameworkComponentManager* GFCM = UGameFrameworkComponentManager::GetForActor(Pawn))
{
GFCM->RegisterAndCallForActorInitState(Pawn, CrimsonTeams::SystemReadyFeatureName, FGameplayTag(),
FActorInitStateChangedDelegate::CreateUObject(this, &ThisClass::HandleTeamsReady), true);
}
Feature nameState tagAnnounced when
CrimsonTeams::SystemReadyFeatureName (Crimson.SystemReady.Teams)CrimsonGameplayTags::SystemReady_TeamsBy UCrimsonGameFeatureAction_AddTeams, once the team agent component exists and its team / hostility tags are applied. Implementer: the team agent component.
CrimsonTeams::PartySystemReadyFeatureName (Crimson.SystemReady.Party)CrimsonGameplayTags::SystemReady_PartyBy UCrimsonGameFeatureAction_AddParty, on a PlayerState once its UCrimsonPartyMemberComponent exists. Implementer: the party member component.