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
| Type | Description |
|---|---|
ICrimsonTeamAgentInterface | Extends IGenericTeamAgentInterface; GetTeamTags, GetHostileToTags, GetOnTeamTagsChangedDelegate, static BroadcastTeamChange |
UCrimsonTeamAgentComponent | Mutators (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) |
ListParties | read |
GetPartyForPlayer | read |
InviteToParty | act |
AcceptPartyInvite | act |
LeaveParty | act |
KickFromParty | act |
Subsystem
| Member | Description |
|---|---|
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 / TeamHasTag | Faction-wide tag stacks |
RegisterTeamAgent / UnregisterTeamAgent | Called 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
| Function | Description |
|---|---|
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 / GetHostileTagsFromObject | Decompose an agent to tags + display asset |
GetTeamDisplayAssetForAgent + GetTeam{Scalar,Color,Texture}WithFallback | Display-asset read helpers |
ECrimsonTargetFilter | HostileAndNeutral / HostileOnly / FriendlyAndNeutral / FriendlyOnly / All |
UCrimsonPartyStatics | FindPartyMemberComponent(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
| Type | Description |
|---|---|
UCrimsonTeamCreationComponent | Game State component; TeamsToCreate, PublicTeamInfoClass / PrivateTeamInfoClass, ServerChooseTeamForPlayer (BlueprintNativeEvent), AddTeams / RemoveTeams |
ACrimsonTeamInfoBase / ACrimsonTeamPublicInfo / ACrimsonTeamPrivateInfo | GetTeamTag, faction TeamTags stack; public adds GetTeamDisplayAsset |
UCrimsonTeamDisplayAsset | ScalarParameters / 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
| Type | Description |
|---|---|
UCrimsonPartySubsystem | GameInstance 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) |
UCrimsonPartyMemberComponent | UPlayerStateComponent. 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) |
ACrimsonPartyInfo | Replicated 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 |
FCrimsonPartyMemberEntry | PlayerId (FUniqueNetIdRepl), DisplayName, bOnline, PlayerState (null while offline), JoinOrder. FCrimsonPartyMemberLocation: PlayerId, Location (FVector_NetQuantize), ServerTime; replicated apart from the roster at the settings cadence |
FCrimsonPartyInvite / FCrimsonPartyInviteSuggestion | Ids, party id, inviter/invitee (or suggester/target) ids and display names; LifetimeSeconds on invites |
FCrimsonPartyMessage | Payload for Crimson.Party.Message.*: PartyId, SubjectId, SubjectName, SubjectPlayerState, LeaveReason, InviteResolution |
ECrimsonPartyResult | Success, NotAuthority, InvalidPlayer, NotInParty, AlreadyInParty, NotLeader, PartyFull, PartyNotFound, TargetInvalid, TargetIsSelf, TargetAlreadyInParty, TargetAlreadyInvited, AttitudeBlocked, InviteNotFound, SuggestionNotFound, MemberNotFound, InvalidSize |
ECrimsonPartyOperation / ECrimsonPartyInviteResolution / ECrimsonPartyLeaveReason / ECrimsonPartyInviteGate | Operation names for OnOperationResult; Accepted / Declined / Canceled / Expired / PartyDissolved; Left / Kicked / Expired / Dissolved; FriendlyOnly / FriendlyAndNeutral / Any |
ICrimsonPartyDisplayNameProvider | Blueprint-implementable interface for the PlayerState or controller: GetPartyDisplayName() -> FText; empty means use the PlayerState name |
ICrimsonPartyRangeProvider | Blueprint-implementable interface for the pawn (checked first), PlayerState, or controller: GetPartyMaxRange() -> float cm; 0 or less means use DefaultPartyMaxRange from settings (0 there = unlimited) |
UCrimsonTeamsSettings | Project 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_ObserveParty | Observe Party node -> OnPartyChanged(bool bIsInParty, FGuid PartyId, ACrimsonPartyInfo* PartyInfo) |
| Message channels | Crimson.Party.Message.Created / .Dissolved / .MemberJoined / .MemberLeft / .MemberOnlineChanged / .LeaderChanged / .MaxSizeChanged / .InviteReceived / .InviteResolved / .InviteSuggested (defined in CrimsonTeams) |
Observers, cheats & tooling
| Type | Description |
|---|---|
UAsyncAction_ObserveTeam | ObserveTeam(agent) -> OnTeamChanged(bIsPartOfTeam, Tags) |
UAsyncAction_ObserveTeamColors | ObserveTeamColors(agent) -> OnTeamChanged(bIsPartOfTeam, Tags, DisplayAsset) |
UCrimsonTeamCheats | CycleTeam / SetTeam <index> (authority) / ListTeams. Parties: PartyInvite <name>, PartySuggest <name>, PartyAccept, PartyDecline, PartyLeave, PartyKick <name>, PartyPromote <name>, ListParties |
| Dev Tools window | Console 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.
#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 name | State tag | Announced when |
|---|---|---|
CrimsonTeams::SystemReadyFeatureName (Crimson.SystemReady.Teams) | CrimsonGameplayTags::SystemReady_Teams | By 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_Party | By UCrimsonGameFeatureAction_AddParty, on a PlayerState once its UCrimsonPartyMemberComponent exists. Implementer: the party member component. |