EOS Achievements

Functions

Complete reference for every Blueprint node and utility function provided by EOS Achievements.
EOS Achievements handles everything for you. No need to call EOS_Initialize, Initialize EOS,EOS_Platform_Create or manage the ticker manually.the plugin takes care of the rest automatically.

Overview

All nodes are async Blueprint actions — they return immediately and fire their output pins when the operation completes (via EOS server callbacks). You connect your logic to OnSuccess and OnFailure pins exactly like other async Unreal nodes.


Core Subsystem

UEOSCoreSubsystem is a GameInstanceSubsystem — you access it via Get EOS Core Subsystem or from C++ with GameInstance->GetSubsystem<UEOSCoreSubsystem>().

Initialize EOS

Initialize EOS → bool

Initializes the EOS platform. Must be called once before any other EOS node.

  • If OnlineSubsystemEOS is active and has a valid handle → borrows it (no double init).
  • Otherwise → reads credentials from DefaultEngine.ini [EOSCore] and creates its own handle.
OutputTypeDescription
Return Valuebooltrue if the platform handle is valid and ready
Call this in your GameInstance Init or the very first BeginPlay, before any login node.

Shutdown EOS

Shutdown EOS → void

Shuts down EOS cleanly. If the plugin owns the handle, it calls EOS_Platform_Release. If the handle was borrowed from the OSS, it only clears the internal pointer.

You rarely need to call this manually — the subsystem calls it automatically on Deinitialize.


Is Initialized

Is Initialized → bool

Returns true if InitializeEOS has succeeded and the platform handle is still valid.


Is Player Logged In

Is Player Logged In → bool

Returns true if a player has successfully completed both Auth Login and Connect Login.


Get Local Epic Account Id

Get Local Epic Account Id → FString

Returns the Epic Account ID of the logged-in player as a string, or empty if not logged in.


Get Local Product User Id

Get Local Product User Id → FString

Returns the Product User ID (used for all game services) as a string, or empty if Connect Login has not completed.


Get User Info

Get User Info → FEOSCorePlayerInfo

Returns cached player info populated after Auth Login:

FieldTypeDescription
DisplayNameFStringPlayer's Epic display name
NicknameFStringPlayer's nickname if set
CountryFStringPlayer's country code
PreferredLanguageFStringPlayer's preferred language code

Authentication

EOS Auth Login (Epic Account)

EOS Auth Login (Epic Account)
  ├─ WorldContext
  ├─ PrimaryLoginType    [AccountPortal / ExchangeCode / PersistentAuth]
  ├─ Policy              [PersistentThenPortal / PersistentThenExchangeCode / NeverFallback]
  ├─ bDeletePersistentAuthBeforeFallback  [bool]
  ├─► OnSuccess  →  FEOSAuthResult
  └─► OnFailure  →  FEOSAuthResult

Logs the player in with their Epic Games account.

Parameters:

ParameterTypeDescription
PrimaryLoginTypeEEOSLoginCredentialTypeLogin method to use (see table below)
PolicyEEOSAuthLoginPolicyFallback behavior if primary fails
bDeletePersistentAuthBeforeFallbackboolIf true, deletes the cached persistent token before attempting fallback — recommended to avoid stale token issues

Login Types:

ValueUse case
AccountPortalOpens the Epic browser portal. Best for testing without the launcher.
ExchangeCodeGame launched from Epic Games Launcher (production). Requires ?AUTH_TYPE=exchangecode argument.
PersistentAuthReuses a locally saved token (silent re-login). Always try this first in production.

Policies:

ValueBehavior
PersistentThenPortalTry PersistentAuth first, fall back to AccountPortal on failure. Recommended for dev/testing.
PersistentThenExchangeCodeTry PersistentAuth first, fall back to ExchangeCode on failure. Recommended for production.
NeverFallbackOnly tries the PrimaryLoginType. No automatic retry.

Output — FEOSAuthResult:

FieldTypeDescription
EpicAccountIdFStringEpic Account ID on success
ErrorMessageFStringEOS error code on failure
Recommended default for production:
  • PrimaryLoginType = AccountPortal
  • Policy = PersistentThenPortal
  • bDeletePersistentAuthBeforeFallback = true

EOS Connect Login (ProductUserId)

EOS Connect Login (ProductUserId)
  ├─ WorldContext
  ├─► OnSuccess  →  FEOSConnectResult
  └─► OnFailure  →  FEOSConnectResult

Exchanges the Epic Account token for a Product User ID — the player identity used by all game services (Achievements, Stats, Leaderboards).

  • If the player is new (first launch), creates their account automatically and fires OnSuccess.
  • The Blueprint never needs to handle the "new player" case separately.

Must be called after a successful Auth Login.

Output — FEOSConnectResult:

FieldTypeDescription
ProductUserIdFStringProduct User ID on success
ErrorMessageFStringEOS error code on failure

Why two logins? Auth Login = Epic identity (cross-game). Connect Login = your game identity (per-deployment). This separation allows EOS to support Steam, PlayStation, and Xbox accounts alongside Epic accounts in the future.


Achievements

EOS Query Achievements

EOS Query Achievements
  ├─ WorldContext
  ├─► OnSuccess  →  FEOSAchievementsQueryResult
  └─► OnFailure  →  FEOSAchievementsQueryResult

Fetches all game achievements and the local player's progress in a single node.

Internally runs two EOS requests in sequence:

  1. QueryDefinitions — fetches achievement metadata (names, descriptions, icons, hidden status)
  2. QueryPlayerAchievements — fetches the player's progress and unlock dates

Both results are merged into a TArray<FEOSAchievementInfo>.

Output — FEOSAchievementsQueryResult:

FieldTypeDescription
AchievementsTArray<FEOSAchievementInfo>All achievements with player progress
ErrorMessageFStringEOS error code on failure

FEOSAchievementInfo fields:

FieldTypeDescription
AchievementIdFStringUnique ID from Dev Portal
DisplayNameFStringName shown when unlocked
DescriptionFStringDescription shown when unlocked
LockedDisplayNameFStringName shown when locked
LockedDescriptionFStringDescription shown when locked
UnlockedDisplayNameFStringSame as DisplayName (alias)
UnlockedDescriptionFStringSame as Description (alias)
FlavorTextFStringOptional flavor text from Dev Portal
ProgressfloatPlayer's progress from 0.0 to 1.0
bUnlockedbooltrue if confirmed unlocked by Epic's servers
bIsHiddenbooltrue if the achievement is hidden until unlocked
bRequiresStatbooltrue if the achievement is linked to a stat
LinkedStatNameFStringName of the linked stat (if bRequiresStat)
StatThresholdint32Stat value needed to unlock (if bRequiresStat)
UnlockTimeFDateTimeDate/time of unlock (valid only if bUnlocked)
AchievementLockedIconUTexture2D*Icon texture when locked (async-loaded)
AchievementUnlockedIconUTexture2D*Icon texture when unlocked (async-loaded)
AchievementIconUTexture2D*Dynamic icon texture (async-loaded)
AchievementIconUrlFEOSAchievementIconUrlRaw icon URLs from Dev Portal
Icon textures are downloaded asynchronously from Epic's CDN. They may be null for a brief moment after OnSuccess fires. The plugin caches all downloaded textures — repeated queries will use the cache instantly.

EOS Unlock Achievement

EOS Unlock Achievement
  ├─ WorldContext
  ├─ Achievement        [FEOSAchievementInfo]
  ├─ IngestAmount       [int32, default: 1]
  ├─► OnSuccess  →  FEOSUnlockResult
  └─► OnFailure  →  FEOSUnlockResult

Unlocks the achievement for the local player.

The unlock method is chosen automatically from the FEOSAchievementInfo you pass:

bRequiresStatMethod used
falseDirect unlock via EOS_Achievements_UnlockAchievements
trueStat ingest via EOS_Stats_IngestStat — EOS unlocks automatically when the threshold is reached

Parameters:

ParameterTypeDescription
AchievementFEOSAchievementInfoAchievement to unlock — obtained from Query Achievements
IngestAmountint32Amount to add to the linked stat (only used when bRequiresStat = true)

Output — FEOSUnlockResult:

FieldTypeDescription
AchievementIdFStringID of the achievement that was attempted
ErrorMessageFStringEOS error code on failure

Notes:

  • If the achievement is already unlocked, EOS still returns EOS_Success. You do not need to check before calling.
  • If the AchievementId does not exist in the Dev Portal, EOS returns EOS_NotFound.
  • After a successful unlock, the node automatically refreshes the local EOS cache (QueryPlayerAchievements) so subsequent queries reflect the new state.

EOS Start Achievements Unlocked Listener

EOS Start Achievements Unlocked Listener
  ├─ WorldContext
  ├─► OnStarted   →  FEOSAchievementInfo, bool bSuccess
  └─► OnUnlocked  →  FEOSAchievementInfo, bool bSuccess

Registers a persistent real-time listener that fires OnUnlocked every time an achievement is unlocked for the local player — including unlocks triggered by stat thresholds on the server side.

  • OnStarted fires once when the listener is successfully registered.
  • OnUnlocked fires each time an achievement is unlocked, with the full FEOSAchievementInfo populated.

Stopping the listener:

Call EOS Stop Achievements Unlocked Listener on the node reference to unregister and clean up.

EOS Stop Achievements Unlocked Listener
  ├─ Target  [reference to the listener node]
Keep a reference to the listener node in a variable so you can stop it later (e.g., on logout or game end).

The listener is also automatically stopped if the node is garbage collected.


Utility Functions (EOSHelpers)

These are C++-only inline helpers available in the EOSHelpers namespace. They are used internally but can also be used in C++ code.

FunctionReturnsDescription
EOSHelpers::GetEOS(WorldContext)UEOSCoreSubsystem*Gets the subsystem from any UObject
EOSHelpers::IsEOSReady(WorldContext)boolTrue if initialized
EOSHelpers::IsEpicLoggedIn(WorldContext)boolTrue if player is logged in
EOSHelpers::GetProductUserId(WorldContext)FStringReturns PUID as string
EOSHelpers::PuidToStr(EOS_ProductUserId)FStringConverts EOS PUID to string

Error Codes

Common EOS error codes you may see in ErrorMessage fields:

CodeMeaning
EOS_NotFoundAchievementId does not exist in the Dev Portal
EOS_InvalidUserProductUserId is invalid or missing
EOS_NoConnectionNo internet connection
EOS_TimedOutEOS servers not reachable
EOS_Auth_InvalidTokenPersistent token expired — retry with Account Portal
EOS_InvalidCredentialsWrong ClientId / ClientSecret in .ini

For a full list, see the EOS SDK Result Codes reference.