[{"data":1,"prerenderedAt":732},["ShallowReactive",2],{"navigation":3,"/plugins/eos-stats/example-project":170,"/plugins/eos-stats/example-project-surround":727},[4,23,144],{"title":5,"path":6,"stem":7,"children":8,"icon":22},"Getting Started","/getting-started","1.getting-started/1.index",[9,12,17],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Why Use Mecanes Products?","/getting-started/usage","1.getting-started/3.usage","i-lucide-sliders",false,{"title":24,"path":25,"stem":26,"children":27,"icon":22},"Plugins","/plugins","2.Plugins/1.index",[28,30,33,55,71,86,105,118,131],{"title":10,"path":25,"stem":26,"icon":29},"i-lucide-puzzle",{"title":13,"path":31,"stem":32,"icon":16},"/plugins/installation","2.Plugins/2.installation",{"title":34,"path":35,"stem":36,"children":37,"icon":22},"EOS Stats","/plugins/eos-stats","2.Plugins/3.eos-stats/1.index",[38,40,45,50],{"title":10,"path":35,"stem":36,"icon":39},"i-lucide-bar-chart-3",{"title":41,"path":42,"stem":43,"icon":44},"Setup","/plugins/eos-stats/setup","2.Plugins/3.eos-stats/2.setup","i-lucide-settings",{"title":46,"path":47,"stem":48,"icon":49},"Functions","/plugins/eos-stats/functions","2.Plugins/3.eos-stats/3.functions","i-lucide-code-2",{"title":51,"path":52,"stem":53,"icon":54},"Example Project","/plugins/eos-stats/example-project","2.Plugins/3.eos-stats/4.example-project","i-lucide-play-circle",{"title":56,"path":57,"stem":58,"children":59,"icon":22},"EOS Leaderboard","/plugins/eos-leaderboard","2.Plugins/4.eos-leaderboard/1.index",[60,62,65,68],{"title":10,"path":57,"stem":58,"icon":61},"i-lucide-trophy",{"title":41,"path":63,"stem":64,"icon":44},"/plugins/eos-leaderboard/setup","2.Plugins/4.eos-leaderboard/2.setup",{"title":46,"path":66,"stem":67,"icon":49},"/plugins/eos-leaderboard/functions","2.Plugins/4.eos-leaderboard/3.functions",{"title":51,"path":69,"stem":70,"icon":54},"/plugins/eos-leaderboard/example-project","2.Plugins/4.eos-leaderboard/4.example-project",{"title":72,"path":73,"stem":74,"children":75,"icon":22},"EOS Achievements","/plugins/eos-achievements","2.Plugins/5.eos-achievements/1.index",[76,77,80,83],{"title":10,"path":73,"stem":74,"icon":61},{"title":41,"path":78,"stem":79,"icon":44},"/plugins/eos-achievements/setup","2.Plugins/5.eos-achievements/2.setup",{"title":46,"path":81,"stem":82,"icon":49},"/plugins/eos-achievements/functions","2.Plugins/5.eos-achievements/3.functions",{"title":51,"path":84,"stem":85,"icon":54},"/plugins/eos-achievements/example-project","2.Plugins/5.eos-achievements/4.example-project",{"title":87,"path":88,"stem":89,"children":90,"icon":22},"EOS Advanced Session","/plugins/eos-advanced-session","2.Plugins/6.eos-advanced-session/1.index",[91,93,97,101],{"title":10,"path":88,"stem":89,"icon":92},"i-lucide-gamepad",{"title":94,"path":95,"stem":96,"icon":44},"Setup & Configuration","/plugins/eos-advanced-session/setup","2.Plugins/6.eos-advanced-session/2.setup",{"title":46,"path":98,"stem":99,"icon":100},"/plugins/eos-advanced-session/functions","2.Plugins/6.eos-advanced-session/3.functions","i-lucide-code",{"title":51,"path":102,"stem":103,"icon":104},"/plugins/eos-advanced-session/example-project","2.Plugins/6.eos-advanced-session/4.example-project","i-lucide-folder-open",{"title":106,"path":107,"stem":108,"children":109,"icon":22},"Pro Inventory System","/plugins/pro-inventory-system","2.Plugins/7.pro-inventory-system/1.index",[110,112,115],{"title":10,"path":107,"stem":108,"icon":111},"i-lucide-box",{"title":46,"path":113,"stem":114,"icon":100},"/plugins/pro-inventory-system/functions","2.Plugins/7.pro-inventory-system/2.functions",{"title":51,"path":116,"stem":117,"icon":104},"/plugins/pro-inventory-system/example-project","2.Plugins/7.pro-inventory-system/4.example-project",{"title":119,"path":120,"stem":121,"children":122,"icon":22},"Hardware Infos","/plugins/hardware-infos","2.Plugins/8.hardware-infos/1.index",[123,125,128],{"title":10,"path":120,"stem":121,"icon":124},"i-lucide-cpu",{"title":46,"path":126,"stem":127,"icon":100},"/plugins/hardware-infos/functions","2.Plugins/8.hardware-infos/2.functions",{"title":51,"path":129,"stem":130,"icon":104},"/plugins/hardware-infos/example-project","2.Plugins/8.hardware-infos/3.example-project",{"title":132,"path":133,"stem":134,"children":135,"icon":22},"EasyInteraction System","/plugins/easyinteractionsystem","2.Plugins/9.EasyInteractionSystem/1.index",[136,138,141],{"title":10,"path":133,"stem":134,"icon":137},"i-lucide-zap",{"title":46,"path":139,"stem":140,"icon":100},"/plugins/easyinteractionsystem/functions","2.Plugins/9.EasyInteractionSystem/2.functions",{"title":51,"path":142,"stem":143,"icon":104},"/plugins/easyinteractionsystem/example-project","2.Plugins/9.EasyInteractionSystem/3.example-project",{"title":145,"path":146,"stem":147,"children":148,"icon":22},"Complete projects","/complete-projects","3.Complete-projects/1.index",[149,151],{"title":10,"path":146,"stem":147,"icon":150},"i-lucide-rocket",{"title":152,"path":153,"stem":154,"children":155,"icon":22},"Simple Steam Session","/complete-projects/simple-steam-session","3.Complete-projects/4.simple-steam-session/1.index",[156,158,161,166],{"title":10,"path":153,"stem":154,"icon":157},"i-lucide-gamepad-2",{"title":94,"path":159,"stem":160,"icon":44},"/complete-projects/simple-steam-session/setup","3.Complete-projects/4.simple-steam-session/2.setup",{"title":162,"path":163,"stem":164,"icon":165},"Features & Example Project","/complete-projects/simple-steam-session/features","3.Complete-projects/4.simple-steam-session/3.features","i-lucide-layout-dashboard",{"title":51,"path":167,"stem":168,"icon":169},"/complete-projects/simple-steam-session/example-project","3.Complete-projects/4.simple-steam-session/4.example-project","i-lucide-book-open",{"id":171,"title":51,"body":172,"description":720,"extension":721,"links":722,"meta":723,"navigation":724,"path":52,"seo":725,"stem":53,"__hash__":726},"docs/2.Plugins/3.eos-stats/4.example-project.md",{"type":173,"value":174,"toc":707},"minimark",[175,184,190,193,198,201,235,237,241,249,256,266,283,285,289,295,309,316,322,336,348,350,354,360,423,441,443,447,450,456,483,489,506,508,512,515,521,533,535,539,545,547,551,564,573,593,603,605,609],[176,177,180],"tip",{"target":178,"to":179},"_blank","https://drive.google.com/file/d/REPLACE_WITH_FILE_ID/view?usp=sharing",[181,182,183],"p",{},"EOS STATS (EXAMPLE PROJECT)",[185,186,187],"blockquote",{},[181,188,189],{},"The example project includes a Markdown file that shows the steps required to use it. Follow along with the instructions below to build a simple EOS Stats integration in your Unreal Engine game.",[191,192],"hr",{},[194,195,197],"h2",{"id":196},"what-well-build","What We'll Build",[181,199,200],{},"A minimal but complete EOS Stats integration that:",[202,203,204,208,211,226,229,232],"ol",{},[205,206,207],"li",{},"Initializes EOS on game start",[205,209,210],{},"Logs the player in silently (persistent token) or via browser (fallback)",[205,212,213,214,218,219,218,222,225],{},"Declares a stat schema (",[215,216,217],"code",{},"kills",", ",[215,220,221],{},"deaths",[215,223,224],{},"revives",") with default values",[205,227,228],{},"Displays a live stat sheet in the UI, including stats never ingested yet",[205,230,231],{},"Ingests a stat when a game event fires",[205,233,234],{},"Refreshes the stat sheet after ingest",[191,236],{},[194,238,240],{"id":239},"step-1-initialize-eos-in-gameinstance","Step 1 — Initialize EOS in GameInstance",[181,242,243,244,248],{},"Create (or open) your ",[245,246,247],"strong",{},"GameInstance"," Blueprint.",[181,250,251,252,255],{},"In ",[245,253,254],{},"Event Init",":",[257,258,263],"pre",{"className":259,"code":261,"language":262},[260],"language-text","Event Init\n  └─► Initialize EOS\n        ├─► [true]  ──► Print \"EOS Ready\"\n        └─► [false] ──► Print \"EOS Init Failed — check DefaultEngine.ini\"\n","text",[215,264,261],{"__ignoreMap":265},"",[181,267,268,271,274,275,278,279,282],{},[245,269,270],{},"Why GameInstance?",[215,272,273],{},"UEOSCoreStatsSubsystem"," and ",[215,276,277],{},"UEOSStatsSubsystem"," are both ",[215,280,281],{},"GameInstanceSubsystem","s — they live as long as the GameInstance. Initializing here ensures EOS is ready before any level loads.",[191,284],{},[194,286,288],{"id":287},"step-2-log-in-the-player","Step 2 — Log In the Player",[181,290,291,292,255],{},"After EOS is initialized, you need ",[245,293,294],{},"two login steps",[202,296,297,303],{},[205,298,299,302],{},[245,300,301],{},"Auth Login"," → Epic Account identity",[205,304,305,308],{},[245,306,307],{},"Connect Login"," → Game identity (ProductUserId)",[181,310,311,312,315],{},"Create a function ",[215,313,314],{},"BP_LoginPlayer"," in your GameInstance:",[257,317,320],{"className":318,"code":319,"language":262},[260],"BP_LoginPlayer\n  │\n  └─► EOS Auth Login (Epic Account)\n        PrimaryLoginType = AccountPortal\n        Policy           = PersistentThenPortal\n        bDeletePersistentAuthBeforeFallback = true\n        │\n        ├─► OnSuccess\n        │     └─► EOS Connect Login (ProductUserId)\n        │           │\n        │           ├─► OnSuccess\n        │           │     └─► Print \"Logged in as: \" + Result.ProductUserId\n        │           │         [Continue to Step 3]\n        │           │\n        │           └─► OnFailure\n        │                 └─► Print \"Connect Login failed: \" + Result.ErrorMessage\n        │\n        └─► OnFailure\n              └─► Print \"Auth Login failed: \" + Result.ErrorMessage\n",[215,321,319],{"__ignoreMap":265},[181,323,324,325,327,328,331,332,335],{},"Call ",[215,326,314],{}," right after ",[215,329,330],{},"Initialize EOS"," returns ",[215,333,334],{},"true",".",[176,337,338],{},[181,339,340,341,343,344,347],{},"On first launch, ",[245,342,301],{}," will open the Epic browser portal. On subsequent launches, the persistent token is reused silently — the player won't see the browser again unless the token expires. For in-editor testing without the browser, use ",[245,345,346],{},"EOS Login With Dev Auth Async"," instead.",[191,349],{},[194,351,353],{"id":352},"step-3-declare-your-stat-schema","Step 3 — Declare Your Stat Schema",[181,355,356,357,255],{},"Before writing any Blueprint logic, declare your stats in ",[245,358,359],{},"Edit → Project Settings → Plugins → EOS Stats",[361,362,363,379],"table",{},[364,365,366],"thead",{},[367,368,369,373,376],"tr",{},[370,371,372],"th",{},"StatName",[370,374,375],{},"DisplayName",[370,377,378],{},"DefaultValue",[380,381,382,397,410],"tbody",{},[367,383,384,389,392],{},[385,386,387],"td",{},[215,388,217],{},[385,390,391],{},"Kills",[385,393,394],{},[215,395,396],{},"0",[367,398,399,403,406],{},[385,400,401],{},[215,402,221],{},[385,404,405],{},"Deaths",[385,407,408],{},[215,409,396],{},[367,411,412,416,419],{},[385,413,414],{},[215,415,224],{},[385,417,418],{},"Revives",[385,420,421],{},[215,422,396],{},[181,424,425,426,428,429,432,433,436,437,440],{},"Make sure each ",[215,427,372],{}," also exists in ",[215,430,431],{},"Dev Portal → [Your Sandbox] → Stats"," with the appropriate ",[245,434,435],{},"Aggregation Type"," (",[215,438,439],{},"Sum"," for all three, in this example).",[191,442],{},[194,444,446],{"id":445},"step-4-load-and-display-the-stat-sheet","Step 4 — Load and Display the Stat Sheet",[181,448,449],{},"Once Connect Login succeeds, load the schema and query real values:",[257,451,454],{"className":452,"code":453,"language":262},[260],"BP_LoadStatSheet\n  │\n  └─► EOS Query Stat Definitions\n        └─► EOS Query Stats (StatNames = empty → query everything the player already has)\n              │\n              ├─► OnSuccess\n              │     └─► EOS Get All Stats (With Defaults) ──► [Store in variable: StatSheet]\n              │         ──► Call BP_PopulateStatSheet (see below)\n              │\n              └─► OnFailure\n                    └─► Print \"Query failed: \" + Result.ErrorMessage\n",[215,455,453],{"__ignoreMap":265},[181,457,458,459,462,463,466,467,470,471,474,475,478,479,482],{},"Create a ",[245,460,461],{},"Widget Blueprint"," ",[215,464,465],{},"WBP_StatSheet"," with a ",[215,468,469],{},"VerticalBox"," named ",[215,472,473],{},"StatsContainer",", and a child widget ",[215,476,477],{},"WBP_StatEntry"," with two ",[215,480,481],{},"TextBlock","s (label + value).",[257,484,487],{"className":485,"code":486,"language":262},[260],"BP_PopulateStatSheet(StatSheet: TArray\u003CFEOSStatInfo>)\n  └─► Clear Children (StatsContainer)\n      └─► For Each Stat in StatSheet\n            └─► Find matching FEOSStatDefinition (by StatName) for the DisplayName\n                └─► Create Widget WBP_StatEntry\n                      Set Label = Definition.DisplayName\n                      Set Value = Stat.Value\n                      Add to StatsContainer\n",[215,488,486],{"__ignoreMap":265},[181,490,491,492,218,495,497,498,497,500,502,503,505],{},"Because you used ",[245,493,494],{},"Get All Stats (With Defaults)",[215,496,217],{},"/",[215,499,221],{},[215,501,224],{}," all show up immediately with ",[215,504,396],{},", even for a brand-new player who has never had a value ingested.",[191,507],{},[194,509,511],{"id":510},"step-5-ingest-a-stat-on-a-game-event","Step 5 — Ingest a Stat on a Game Event",[181,513,514],{},"Ingest a stat when your game logic demands it — for example, on a player kill.",[257,516,519],{"className":517,"code":518,"language":262},[260],"[Game Event: Player Killed Enemy]\n  │\n  └─► EOS Ingest Stat\n        StatName      = \"kills\"\n        IngestAmount  = 1\n        │\n        ├─► OnSuccess\n        │     └─► Print \"Kill ingested\"\n        │         ──► Call BP_LoadStatSheet (Step 4) to refresh the UI\n        │\n        └─► OnFailure\n              └─► Print \"Ingest failed: \" + Result.ErrorMessage\n",[215,520,518],{"__ignoreMap":265},[176,522,523],{},[181,524,525,528,529,532],{},[215,526,527],{},"EOS Ingest Stat"," does not auto-refresh the cache. Re-run ",[245,530,531],{},"Query Stats"," (Step 4) afterward if you want the UI to reflect the new value immediately.",[191,534],{},[194,536,538],{"id":537},"complete-flow-summary","Complete Flow Summary",[257,540,543],{"className":541,"code":542,"language":262},[260],"GameInstance::Init\n  └─► Initialize EOS ──► BP_LoginPlayer\n                              │\n                   Auth Login (PersistentThenPortal)\n                              │ OnSuccess\n                   Connect Login\n                              │ OnSuccess\n                   BP_LoadStatSheet\n                              │\n              Query Stat Definitions → Query Stats → Get All Stats (With Defaults)\n                              │\n                   WBP_StatSheet::PopulateStatSheet\n\n[Later — game event]\n  └─► EOS Ingest Stat ──► OnSuccess ──► BP_LoadStatSheet (refresh)\n",[215,544,542],{"__ignoreMap":265},[191,546],{},[194,548,550],{"id":549},"tips","Tips",[181,552,553,556,557,559,560,563],{},[245,554,555],{},"Show defaults, not blanks","\nAlways use ",[245,558,494],{}," for the initial display of a stat sheet — ",[215,561,562],{},"Get All Cached Stats"," alone will simply omit any stat the player hasn't triggered yet, which usually looks like a bug to players.",[181,565,566,569,570,572],{},[245,567,568],{},"Batch UI refreshes","\nIf several stats change in quick succession (e.g. a match-end summary), ingest them all first, then call ",[245,571,531],{}," once at the end rather than after every single ingest.",[181,574,575,578,579,581,582,497,585,588,589,592],{},[245,576,577],{},"Aggregation matters","\nPick the right Aggregation Type per stat in the Dev Portal. ",[215,580,439],{}," for counters, ",[215,583,584],{},"Max",[215,586,587],{},"Min"," for personal bests, ",[215,590,591],{},"Latest"," for values like currency where only the newest number matters.",[181,594,595,598,599,602],{},[245,596,597],{},"Offline / no connection","\nIf EOS returns ",[215,600,601],{},"EOS_NoConnection"," on any node, show a friendly message and let gameplay continue — stats can sync later. Don't block core gameplay on a stat ingest succeeding.",[191,604],{},[194,606,608],{"id":607},"troubleshooting","Troubleshooting",[361,610,611,621],{},[364,612,613],{},[367,614,615,618],{},[370,616,617],{},"Symptom",[370,619,620],{},"Likely cause",[380,622,623,638,655,669,684,694],{},[367,624,625,632],{},[385,626,627,331,629],{},[215,628,330],{},[215,630,631],{},"false",[385,633,634,635],{},"Invalid credentials in ",[215,636,637],{},"DefaultEngine.ini",[367,639,640,643],{},[385,641,642],{},"Auth Login browser does not open",[385,644,645,648,649,274,652],{},[215,646,647],{},"AccountPortal"," requires a valid ",[215,650,651],{},"ClientId",[215,653,654],{},"ClientSecret",[367,656,657,663],{},[385,658,659,660],{},"Connect Login fails with ",[215,661,662],{},"EOS_InvalidUser",[385,664,665,666],{},"This is handled automatically — should not reach ",[215,667,668],{},"OnFailure",[367,670,671,678],{},[385,672,673,674,677],{},"Query Stats returns an empty ",[215,675,676],{},"Stats"," array",[385,679,680,681,683],{},"Normal for a new player — none of their stats have a value yet. Use ",[245,682,494],{}," instead",[367,685,686,689],{},[385,687,688],{},"A stat never appears even after ingest",[385,690,691,693],{},[215,692,372],{}," doesn't match the Dev Portal exactly (case-sensitive), or the stat isn't declared in Project Settings",[367,695,696,702],{},[385,697,698,699],{},"Ingest returns ",[215,700,701],{},"EOS_NotFound",[385,703,704,706],{},[215,705,372],{}," does not exist in the Dev Portal for this Sandbox/Deployment",{"title":265,"searchDepth":708,"depth":709,"links":710},1,2,[711,712,713,714,715,716,717,718,719],{"id":196,"depth":709,"text":197},{"id":239,"depth":709,"text":240},{"id":287,"depth":709,"text":288},{"id":352,"depth":709,"text":353},{"id":445,"depth":709,"text":446},{"id":510,"depth":709,"text":511},{"id":537,"depth":709,"text":538},{"id":549,"depth":709,"text":550},{"id":607,"depth":709,"text":608},"A complete step-by-step walkthrough — from EOS initialization to displaying a live stat sheet and ingesting stats in your game.","md",null,{},{"icon":54},{"title":51,"description":720},"oSmqPMibeo-yTrQW6v877n3n6B0OCNX93FRYSwkzoic",[728,730],{"title":46,"path":47,"stem":48,"description":729,"icon":49,"children":-1},"Complete reference for every Blueprint node and utility function provided by EOS Stats.",{"title":10,"path":57,"stem":58,"description":731,"icon":61,"children":-1},"EOS Leaderboard is a Blueprint-first plugin for Unreal Engine 5.4+ that integrates Epic Online Services Leaderboards into your game — stat ingestion, rank queries, range filtering, and automatic player identity management included.",1788004529853]