I’m currently trying to implement Steam achievements into my game, which is a Blueprint project. I already managed to add the Steamworks functionalities (I have the Steam overlay, and I can join a registered dedicated server from a client), but when I use the “Cache achievements” node, I get this error:
This is the server console, since I want to trigger the achievement from a dedicated server.
My blueprint script looks simple, I just call some print functions and of course the “Cache achievements” node. I logged the PlayerControllers[0], to be sure that it’s not a NULL variable.
At first, I didn’t put the “Cache achievements” node, and I had the exact same error message when calling directly the “Write achievement progress” node (which resulted in the “Failure…” log).
I checked the “Online platform” section, in the plugin window of my editor, and I have only 3 activated plugins: “Online Subsystem”, “Online Subsystem Steam” and “Online Subsystem Utils”. I deactivated the others.
If it can help, this is a part of my DefaultEngine.ini:
I also noted that I have the same problem with the “Read/Write Leaderboard Integer” nodes, but with this message: “Leaderboard not supported by Online Subsystem”.
I really don’t know why I get this warning/error, maybe I missed something obvious I’ve done some research on the Internet, but I couldn’t find anything related to this.
Does anyone have an idea about this? Thanks a lot to everyone who will answer
A little update here:
I investigated in the c++ source code, and I wasn’t able to find any reference to “Achievements not supported”. However, I found “Leaderboards not supported by Online Subsystem”.
So, this log appears in the LeaderboardQueryCallbackProxy.cpp file, in the TriggerQuery function, when and only when Leaderboards.IsValid() returns false.
So, for an unknown reason, my “Leaderboards” variable isn’t valid, and that seems to be the problem. I assume that my “Achievements” variable isn’t valid either.
I’m really stuck on this, and I’d really appreciate some help
Thank you!
I forgot to mention that I’m using the AdvancedSessions plugin ([available here][1]).
Also, I’ve got some warnings server side, while initializing Steam. Here’s a screenshot:
So, the first one tells me the session flag is too long, and the second one that the game name is too long. Is this a real problem for me?
About the third warning, I have no clue about what is it…
Update here!
I managed to get rid of the GameName warning, and it doesn’t solve the problem. About the session flags warning, I tried solutions from this post, but it hasn’t been very productive, I’ll give an other try as soon as possible.
Anyway, even if the two warnings above were at least partially resolved, the “Invalid player state” one was still there, and achievements still didn’t work
Update again!
I got rid of the SessionFlags warning (by renaming hardcoded defines in the source code (see this post again)), but it doesn’t solve the problem
Sad update !
With the help of the Advanced Sessions plugin developper, I got rid of the “Invalid player state” warning, and now I know that wasn’t the problem.
So, here I am, lying on my chair, wondering why I struggle with this strange warning, and hoping that some generous soul consents to help me
Hi, thanks for answering!
My event is called serverside in the gamemode (I trigger it with a input from the only client connected to it), and you can see the logs with the first screenshot. So it logs “Set to 100”, then the player controller (which is not NULL), then the warning, then “Cached failed”.
But in the Steamworks interface, you can define the “Set by” property, and mine is set to “Game server”, so I assume it’s supposed to be triggered serverside, no? Anyway, this is what the documentation says.
Also, if I don’t have the choice, that’s not secure at all: that means any player can trigger any achievement by their own, without a server verification. I don’t want my players to cheat on my game
But hey, I’ll look it up, maybe that’s worth it, thanks mate!
Oh, calling it on the sever might be the issue. My guess is that you cant call it from serverside as it is not the server that unlocks an achievement, but the player. Havent worked with a dedicated server before so im not sure. My suggestion is unlocking the achievement on client side from the server (server triggers event on player when ihe should unlock an achievement). Not 100% sure this is the issue… but worth a try i guess
Well, I tried to unlock achievements client-side, and it works! Thank you so much
I’ll try tomorrow with the stats, but that makes me wonder: is this normal? I mean, maybe the Steamworks integration in UE4 doesn’t support serverside achievements, and maybe that’s a well-known fact? If this is, I never heard about it, despite the fact that I was looking for it.
Anyway, thanks!
I guess it exists within the steamworks interface but UE might not have an implementation for it (I could be wrong). No idea about how to make it cheaterproof. Good luck though!
So, I don’t know if this is a bug or not, but apparently you can’t unlock a Steam success server-side. You have to unlock it client-side, otherwise it doesn’t work. Of course, you have to set the “Set by” variable to “Client” in the Steamworks interface.
Maybe it’s a bug due to the Steamworks integration in UE4, or maybe I made a mistake that prevents me to do so, I don’t know.
I think it’s the same for stats, but I have to test it to be sure.
Thanks to IGorilla for this! (Sorry, I can’t make your comment as answer)
Hi, can you help me?
I am getting the same error as you and I followed the process by reading and tried but still same error for me. “Achievements not supported by Online Subsystem”
I’ve attached a screenshot of the code, I’ll be looking forward to hearing from you! Thanks.