[{"data":1,"prerenderedAt":793},["ShallowReactive",2],{"navigation":3,"/plugins/eos-leaderboard/example-project":154,"/plugins/eos-leaderboard/example-project-surround":788},[4,23,128],{"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,70,89,102,115],{"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 Leaderboard","/plugins/eos-leaderboard","2.Plugins/3.eos-leaderboard/1.index",[38,40,45,50],{"title":10,"path":35,"stem":36,"icon":39},"i-lucide-trophy",{"title":41,"path":42,"stem":43,"icon":44},"Setup","/plugins/eos-leaderboard/setup","2.Plugins/3.eos-leaderboard/2.setup","i-lucide-settings",{"title":46,"path":47,"stem":48,"icon":49},"Functions","/plugins/eos-leaderboard/functions","2.Plugins/3.eos-leaderboard/3.functions","i-lucide-code-2",{"title":51,"path":52,"stem":53,"icon":54},"Example Project","/plugins/eos-leaderboard/example-project","2.Plugins/3.eos-leaderboard/4.example-project","i-lucide-play-circle",{"title":56,"path":57,"stem":58,"children":59,"icon":22},"EOS Achievements","/plugins/eos-achievements","2.Plugins/4.eos-achievements/1.index",[60,61,64,67],{"title":10,"path":57,"stem":58,"icon":39},{"title":41,"path":62,"stem":63,"icon":44},"/plugins/eos-achievements/setup","2.Plugins/4.eos-achievements/2.setup",{"title":46,"path":65,"stem":66,"icon":49},"/plugins/eos-achievements/functions","2.Plugins/4.eos-achievements/3.functions",{"title":51,"path":68,"stem":69,"icon":54},"/plugins/eos-achievements/example-project","2.Plugins/4.eos-achievements/4.example-project",{"title":71,"path":72,"stem":73,"children":74,"icon":22},"EOS Advanced Session","/plugins/eos-advanced-session","2.Plugins/5.eos-advanced-session/1.index",[75,77,81,85],{"title":10,"path":72,"stem":73,"icon":76},"i-lucide-gamepad",{"title":78,"path":79,"stem":80,"icon":44},"Setup & Configuration","/plugins/eos-advanced-session/setup","2.Plugins/5.eos-advanced-session/2.setup",{"title":46,"path":82,"stem":83,"icon":84},"/plugins/eos-advanced-session/functions","2.Plugins/5.eos-advanced-session/3.functions","i-lucide-code",{"title":51,"path":86,"stem":87,"icon":88},"/plugins/eos-advanced-session/example-project","2.Plugins/5.eos-advanced-session/4.example-project","i-lucide-folder-open",{"title":90,"path":91,"stem":92,"children":93,"icon":22},"Pro Inventory System","/plugins/pro-inventory-system","2.Plugins/6.pro-inventory-system/1.index",[94,96,99],{"title":10,"path":91,"stem":92,"icon":95},"i-lucide-box",{"title":46,"path":97,"stem":98,"icon":84},"/plugins/pro-inventory-system/functions","2.Plugins/6.pro-inventory-system/2.functions",{"title":51,"path":100,"stem":101,"icon":88},"/plugins/pro-inventory-system/example-project","2.Plugins/6.pro-inventory-system/4.example-project",{"title":103,"path":104,"stem":105,"children":106,"icon":22},"Hardware Infos","/plugins/hardware-infos","2.Plugins/7.hardware-infos/1.index",[107,109,112],{"title":10,"path":104,"stem":105,"icon":108},"i-lucide-cpu",{"title":46,"path":110,"stem":111,"icon":84},"/plugins/hardware-infos/functions","2.Plugins/7.hardware-infos/2.functions",{"title":51,"path":113,"stem":114,"icon":88},"/plugins/hardware-infos/example-project","2.Plugins/7.hardware-infos/3.example-project",{"title":116,"path":117,"stem":118,"children":119,"icon":22},"EasyInteraction System","/plugins/easyinteractionsystem","2.Plugins/8.EasyInteractionSystem/1.index",[120,122,125],{"title":10,"path":117,"stem":118,"icon":121},"i-lucide-zap",{"title":46,"path":123,"stem":124,"icon":84},"/plugins/easyinteractionsystem/functions","2.Plugins/8.EasyInteractionSystem/2.functions",{"title":51,"path":126,"stem":127,"icon":88},"/plugins/easyinteractionsystem/example-project","2.Plugins/8.EasyInteractionSystem/3.example-project",{"title":129,"path":130,"stem":131,"children":132,"icon":22},"Complete projects","/complete-projects","3.Complete-projects/1.index",[133,135],{"title":10,"path":130,"stem":131,"icon":134},"i-lucide-rocket",{"title":136,"path":137,"stem":138,"children":139,"icon":22},"Simple Steam Session","/complete-projects/simple-steam-session","3.Complete-projects/4.simple-steam-session/1.index",[140,142,145,150],{"title":10,"path":137,"stem":138,"icon":141},"i-lucide-gamepad-2",{"title":78,"path":143,"stem":144,"icon":44},"/complete-projects/simple-steam-session/setup","3.Complete-projects/4.simple-steam-session/2.setup",{"title":146,"path":147,"stem":148,"icon":149},"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":151,"stem":152,"icon":153},"/complete-projects/simple-steam-session/example-project","3.Complete-projects/4.simple-steam-session/4.example-project","i-lucide-book-open",{"id":155,"title":51,"body":156,"description":781,"extension":782,"links":783,"meta":784,"navigation":785,"path":52,"seo":786,"stem":53,"__hash__":787},"docs/2.Plugins/3.eos-leaderboard/4.example-project.md",{"type":157,"value":158,"toc":767},"minimark",[159,168,174,177,182,185,207,209,213,221,228,239,252,254,258,264,278,285,291,303,305,309,316,321,327,336,338,342,348,353,359,379,381,385,395,405,412,435,443,449,454,465,471,473,477,484,490,503,521,523,527,533,535,539,552,568,585,591,611,627,637,639,643],[160,161,164],"tip",{"target":162,"to":163},"_blank","https://drive.google.com/file/d/1ZcU45TTzB75mRxoKIL1A2MGpaDaJxQjb/view?usp=sharing",[165,166,167],"p",{},"EOS LEADERBOARD (EXAMPLE PROJECT)",[169,170,171],"blockquote",{},[165,172,173],{},"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 Leaderboard integration in your Unreal Engine game.",[175,176],"hr",{},[178,179,181],"h2",{"id":180},"what-well-build","What We'll Build",[165,183,184],{},"A minimal but complete EOS Leaderboard integration that:",[186,187,188,192,195,198,201,204],"ol",{},[189,190,191],"li",{},"Initializes EOS on game start",[189,193,194],{},"Logs the player in silently (persistent token) or via browser (fallback)",[189,196,197],{},"Fetches the list of available leaderboards from the Dev Portal",[189,199,200],{},"Queries the Top 10 entries and displays them in a UI widget",[189,202,203],{},"Submits the player's score at the end of a match",[189,205,206],{},"Re-queries the leaderboard to reflect the updated rank",[175,208],{},[178,210,212],{"id":211},"step-1-initialize-eos-in-gameinstance","Step 1 — Initialize EOS in GameInstance",[165,214,215,216,220],{},"Create (or open) your ",[217,218,219],"strong",{},"GameInstance"," Blueprint.",[165,222,223,224,227],{},"In ",[217,225,226],{},"Event Init",":",[229,230,235],"pre",{"className":231,"code":233,"language":234},[232],"language-text","Event Init\n  └─► Initialize EOS\n        ├─► [true]  ──► Print \"EOS Ready\"\n        └─► [false] ──► Print \"EOS Init Failed — check DefaultEngine.ini\"\n","text",[236,237,233],"code",{"__ignoreMap":238},"",[165,240,241,244,247,248,251],{},[217,242,243],{},"Why GameInstance?",[236,245,246],{},"UEOSCoreLeaderboardSubsystem"," is a ",[236,249,250],{},"GameInstanceSubsystem"," — it lives as long as the GameInstance. Initializing here ensures EOS is ready before any level loads.",[175,253],{},[178,255,257],{"id":256},"step-2-log-in-the-player","Step 2 — Log In the Player",[165,259,260,261,227],{},"After EOS is initialized, you need ",[217,262,263],{},"two login steps",[186,265,266,272],{},[189,267,268,271],{},[217,269,270],{},"Auth Login"," → Epic Account identity",[189,273,274,277],{},[217,275,276],{},"Connect Login"," → Game identity (ProductUserId) — auto-triggered by leaderboard nodes if skipped",[165,279,280,281,284],{},"Create a function ",[236,282,283],{},"BP_LoginPlayer"," in your GameInstance:",[229,286,289],{"className":287,"code":288,"language":234},[232],"BP_LoginPlayer\n  │\n  └─► EOS Auth Login (Epic Account)\n        PrimaryLoginType = AccountPortal\n        Policy           = PersistentThenPortal\n        bDeletePersistentBeforeFallback = true\n        │\n        ├─► OnSuccess\n        │     └─► EOS Connect Login (ProductUserId)\n        │           │\n        │           ├─► OnSuccess\n        │           │     └─► Print \"Logged in as: \" + Result.ProductUserId\n        │           │         ──► Call BP_LoadLeaderboards\n        │           │\n        │           └─► OnFailure\n        │                 └─► Print \"Connect Login failed: \" + Result.ErrorMessage\n        │\n        └─► OnFailure\n              └─► Print \"Auth Login failed: \" + Result.ErrorMessage\n",[236,290,288],{"__ignoreMap":238},[160,292,293],{},[165,294,295,296,298,299,302],{},"On first launch, ",[217,297,270],{}," opens the Epic browser portal. On subsequent launches, the ",[217,300,301],{},"PersistentAuth"," token is reused silently — no browser appears unless the token expires.",[175,304],{},[178,306,308],{"id":307},"step-3-discover-available-leaderboards","Step 3 — Discover Available Leaderboards",[165,310,311,312,315],{},"Use ",[217,313,314],{},"EOS Get Leaderboard List"," to fetch all leaderboards configured in your Dev Portal. This is useful when you want to display multiple boards or build a dynamic leaderboard selector.",[165,317,280,318,227],{},[236,319,320],{},"BP_LoadLeaderboards",[229,322,325],{"className":323,"code":324,"language":234},[232],"BP_LoadLeaderboards\n  │\n  └─► EOS Get Leaderboard List\n        │\n        ├─► OnSuccess\n        │     └─► Result  ──► [Store in variable: AvailableLeaderboards]\n        │         For Each Entry:\n        │           Print Entry.LeaderboardId + \" → \" + Entry.StatName\n        │         ──► Call BP_QueryTopLeaderboard with first entry\n        │\n        └─► OnFailure\n              └─► Print \"Get Leaderboard List failed: \" + ErrorMessage\n",[236,326,324],{"__ignoreMap":238},[169,328,329],{},[165,330,331,332,335],{},"If you only have one known leaderboard, you can skip this step and hardcode the ",[236,333,334],{},"LeaderboardId"," string directly in the next step.",[175,337],{},[178,339,341],{"id":340},"step-4-query-the-top-10","Step 4 — Query the Top 10",[165,343,311,344,347],{},[217,345,346],{},"EOS Query Leaderboard Range"," to fetch only the entries you need.",[165,349,280,350,227],{},[236,351,352],{},"BP_QueryTopLeaderboard(LeaderboardId: FString)",[229,354,357],{"className":355,"code":356,"language":234},[232],"BP_QueryTopLeaderboard\n  │\n  └─► EOS Query Leaderboard Range\n        LeaderboardId = [LeaderboardId input]\n        RankFrom      = 1\n        RankTo        = 10\n        │\n        ├─► OnSuccess\n        │     └─► Result  ──► [Store in variable: TopEntries]\n        │         ──► Call BP_PopulateLeaderboardUI\n        │\n        └─► OnFailure\n              └─► Print \"Query failed: \" + ErrorMessage\n",[236,358,356],{"__ignoreMap":238},[160,360,361],{},[165,362,363,366,367,370,371,374,375,378],{},[217,364,365],{},"RankTo = 0"," means no upper limit — use it to fetch every player from ",[236,368,369],{},"RankFrom"," to the end of the board. For displaying a \"near me\" section, query with ",[236,372,373],{},"RankFrom = PlayerRank - 2",", ",[236,376,377],{},"RankTo = PlayerRank + 2",".",[175,380],{},[178,382,384],{"id":383},"step-5-display-the-leaderboard-in-a-widget","Step 5 — Display the Leaderboard in a Widget",[165,386,387,388,391,392,378],{},"Create a ",[217,389,390],{},"Widget Blueprint"," ",[236,393,394],{},"WBP_Leaderboard",[165,396,397,398,401,402,378],{},"Add a ",[236,399,400],{},"VerticalBox"," named ",[236,403,404],{},"EntriesContainer",[165,406,407,408,411],{},"Create a child widget ",[236,409,410],{},"WBP_LeaderboardEntry"," with:",[413,414,415,425,430],"ul",{},[189,416,417,420,421,424],{},[236,418,419],{},"TextBlock"," for rank (e.g. ",[236,422,423],{},"#1",")",[189,426,427,429],{},[236,428,419],{}," for display name",[189,431,432,434],{},[236,433,419],{}," for score",[165,436,223,437,439,440,227],{},[236,438,394],{},", create a function ",[236,441,442],{},"PopulateList(Entries: TArray\u003CFEOSLeaderboardEntry>)",[229,444,447],{"className":445,"code":446,"language":234},[232],"PopulateList\n  └─► Clear Children (EntriesContainer)\n      └─► For Each Entry in Entries\n            └─► Create Widget WBP_LeaderboardEntry\n                  Set RankText  = \"#\" + Entry.Rank\n                  Set NameText  = (Entry.UserDisplayName.IsEmpty)\n                                    ? \"Unknown\"\n                                    : Entry.UserDisplayName\n                  Set ScoreText = Entry.Score\n                  Add to EntriesContainer\n",[236,448,446],{"__ignoreMap":238},[165,450,451],{},[217,452,453],{},"Highlight the local player's row:",[165,455,456,457,460,461,464],{},"Compare ",[236,458,459],{},"Entry.UserId"," with ",[236,462,463],{},"Get Local Product User Id"," from the subsystem to identify which row belongs to the local player, then apply a different background or text color.",[229,466,469],{"className":467,"code":468,"language":234},[232],"For Each Entry:\n  └─► Is Entry.UserId == GetEOSSubsystem.GetLocalProductUserId?\n        ├─► true  ──► Set row background to highlight color\n        └─► false ──► Set row background to default color\n",[236,470,468],{"__ignoreMap":238},[175,472],{},[178,474,476],{"id":475},"step-6-submit-a-score","Step 6 — Submit a Score",[165,478,479,480,483],{},"Call ",[217,481,482],{},"EOS Ingest Stat"," at the end of a match (or on any score event) to update the player's leaderboard position.",[229,485,488],{"className":486,"code":487,"language":234},[232],"[Game Event: Match ended — final score = 1500]\n  │\n  └─► EOS Ingest Stat (Leaderboard)\n        StatName = \"score\"\n        Amount   = 1500\n        │\n        ├─► OnSuccess\n        │     └─► Print \"Score submitted!\"\n        │         ──► Call BP_QueryTopLeaderboard  [refresh the UI]\n        │\n        └─► OnFailure\n              └─► Print \"Ingest failed: \" + ErrorMessage\n",[236,489,487],{"__ignoreMap":238},[169,491,492],{},[165,493,494,495,498,499,502],{},"EOS processes the stat asynchronously on its servers. The new rank appears after a short delay. Calling ",[236,496,497],{},"BP_QueryTopLeaderboard"," right after ",[236,500,501],{},"OnSuccess"," will show the updated leaderboard once EOS has applied it.",[160,504,505],{},[165,506,507,510,511,514,515,518,519,378],{},[217,508,509],{},"Aggregation reminder:"," if your stat uses ",[236,512,513],{},"MAX"," aggregation, only the call with ",[236,516,517],{},"Amount > current best"," will change the rank. Calls with lower values are silently ignored by EOS — they still fire ",[236,520,501],{},[175,522],{},[178,524,526],{"id":525},"complete-flow-summary","Complete Flow Summary",[229,528,531],{"className":529,"code":530,"language":234},[232],"GameInstance::Init\n  └─► Initialize EOS ──► BP_LoginPlayer\n                              │\n                   Auth Login (PersistentThenPortal)\n                              │ OnSuccess\n                   Connect Login\n                              │ OnSuccess\n                   BP_LoadLeaderboards\n                              │\n                   EOS Get Leaderboard List\n                              │ OnSuccess\n                   BP_QueryTopLeaderboard (Top 10)\n                              │ OnSuccess\n                   WBP_Leaderboard::PopulateList\n                              │\n                   [Match ends]\n                              │\n                   EOS Ingest Stat (\"score\", finalScore)\n                              │ OnSuccess\n                   BP_QueryTopLeaderboard  ──► Refresh UI\n",[236,532,530],{"__ignoreMap":238},[175,534],{},[178,536,538],{"id":537},"tips","Tips",[165,540,541,544,545,547,548,551],{},[217,542,543],{},"Re-query after ingest","\nAlways call ",[236,546,497],{}," after ",[236,549,550],{},"EOS Ingest Stat OnSuccess"," to keep the UI in sync. EOS may need a moment to process the new rank — a 1–2 second delay before querying can help on slow connections.",[165,553,554,557,560,561,564,565,378],{},[217,555,556],{},"Display name missing",[236,558,559],{},"UserDisplayName"," can be empty if EOS does not return it for a given player. Always fall back to a placeholder like ",[236,562,563],{},"\"Player\""," or the truncated ",[236,566,567],{},"UserId",[165,569,570,573,576,577,580,581,584],{},[217,571,572],{},"Score formatting",[236,574,575],{},"Score"," is an ",[236,578,579],{},"int64",". Use ",[236,582,583],{},"ToString"," in Blueprint and add any visual formatting (commas, units) in your widget logic.",[165,586,587,590],{},[217,588,589],{},"Leaderboard not updating","\nIf a submitted score does not appear, check:",[413,592,593,596,605],{},[189,594,595],{},"The stat name matches exactly (case-sensitive) what is configured in the Dev Portal",[189,597,598,599,374,601,604],{},"The aggregation method (",[236,600,513],{},[236,602,603],{},"SUM",", etc.) is consistent with your expectations",[189,606,607,608,424],{},"The player's Product User ID is valid (check ",[236,609,610],{},"Is Player Logged In",[165,612,613,616,617,620,621,623,624,626],{},[217,614,615],{},"Multiple leaderboards","\nStore the full ",[236,618,619],{},"AvailableLeaderboards"," array in your GameInstance. Display a tab or dropdown to let players switch between boards, and call ",[236,622,497],{}," with the selected ",[236,625,334],{}," each time.",[165,628,629,632,633,636],{},[217,630,631],{},"Offline / no connection","\nIf EOS returns ",[236,634,635],{},"EOS_NoConnection"," on any node, show a friendly message and allow the player to retry. Do not block gameplay — scores can be submitted when the connection is restored.",[175,638],{},[178,640,642],{"id":641},"troubleshooting","Troubleshooting",[644,645,646,659],"table",{},[647,648,649],"thead",{},[650,651,652,656],"tr",{},[653,654,655],"th",{},"Symptom",[653,657,658],{},"Likely cause",[660,661,662,680,698,708,722,738,749,759],"tbody",{},[650,663,664,674],{},[665,666,667,670,671],"td",{},[236,668,669],{},"InitializeEOS"," returns ",[236,672,673],{},"false",[665,675,676,677],{},"Invalid credentials in ",[236,678,679],{},"DefaultEngine.ini",[650,681,682,685],{},[665,683,684],{},"Auth Login browser does not open",[665,686,687,690,691,694,695],{},[236,688,689],{},"AccountPortal"," requires a valid ",[236,692,693],{},"ClientId"," and ",[236,696,697],{},"ClientSecret",[650,699,700,705],{},[665,701,702,704],{},[236,703,314],{}," returns empty array",[665,706,707],{},"No leaderboards configured in Dev Portal for this Sandbox/Deployment",[650,709,710,719],{},[665,711,712,715,716],{},[236,713,714],{},"EOS Query Leaderboard"," returns empty ",[236,717,718],{},"Result",[665,720,721],{},"No entries yet — submit at least one stat ingest first",[650,723,724,732],{},[665,725,726,728,729],{},[236,727,482],{}," fails with ",[236,730,731],{},"EOS_NotFound",[665,733,734,737],{},[236,735,736],{},"StatName"," does not match the Dev Portal exactly (case-sensitive)",[650,739,740,743],{},[665,741,742],{},"Score submitted but rank unchanged",[665,744,745,746,748],{},"Aggregation is ",[236,747,513],{}," and the new score is lower than the current best",[650,750,751,756],{},[665,752,753,755],{},[236,754,559],{}," is always empty",[665,757,758],{},"Normal — EOS does not always return display names in leaderboard records",[650,760,761,764],{},[665,762,763],{},"Connect Login fires automatically in nodes",[665,765,766],{},"Expected behavior — the nodes handle it for you",{"title":238,"searchDepth":768,"depth":769,"links":770},1,2,[771,772,773,774,775,776,777,778,779,780],{"id":180,"depth":769,"text":181},{"id":211,"depth":769,"text":212},{"id":256,"depth":769,"text":257},{"id":307,"depth":769,"text":308},{"id":340,"depth":769,"text":341},{"id":383,"depth":769,"text":384},{"id":475,"depth":769,"text":476},{"id":525,"depth":769,"text":526},{"id":537,"depth":769,"text":538},{"id":641,"depth":769,"text":642},"A complete step-by-step walkthrough — from EOS initialization to displaying a leaderboard and updating scores in your game.","md",null,{},{"icon":54},{"title":51,"description":781},"wrGkZFnzGCoVg_VUxx3JXhECHs5DbW857sbyV83Kt2g",[789,791],{"title":46,"path":47,"stem":48,"description":790,"icon":49,"children":-1},"Complete reference for every Blueprint node and utility function provided by EOS Leaderboard.",{"title":10,"path":57,"stem":58,"description":792,"icon":39,"children":-1},"EOS Achievements is a Blueprint-first plugin for Unreal Engine 5.4+ that integrates Epic Online Services Achievements into your game — authentication, progress tracking, unlock, and real-time listeners included.",1775717045106]