We have been trying to implement the Steam Stats API into our game (without the use of Leaderboards), and have run into various build roadblocks with every attempt. We would like to know what you might recommend for best accomplishing this in line with the design philosophy of the Unreal Engine. Specifically, we would like to expose the RequestCurrentStats() and StoreStats() functions directly, or at least add support for them in the OnlineSubsystemSteam, to look something like the following:
void FOnlineLeaderboardsSteam::ReadCurrentStats(FOnlineStats& ReadObject); // calls SteamUserStats()->RequestCurrentStats(); void FOnlineLeaderboardsSteam::WriteCurrentStats(const FOnlineStats& WriteObject); // calls SteamUserStats()->StoreStats();
In describing our attempts, I should mention that we have chosen to attempt this in UE 4.13, since we will soon be upgrading our project to it, and since it includes the significant change of converting the UE Online Libraries to Plugins.
First, we tried to extend the Engine Plugins from the Engine’s “Plugins” folder by modifying the Source code of the Plugins directly; adding the above functions to the Leaderboard interface of the Online Susbsystem, then of course propagating them down to the concrete implementations for the various platforms (Giving blank function bodies to non-Steam implementations). We were sure the code contained no compile errors (because of the second attempt tried below), and deleted the binaries of the engine to trigger a recompile of the plugins, but the UBS would recompile only the our project, and not the engine plugins.
The second attempt was to copy the OnlineSubsystem, OnlineSubsystemUtils, OnlineSubsystemNull, and OnlineSubsystemSteam plugins to our Project’s “Plugins” directory and to rename all the important filenames and identifiers, so as to avoid conflicts. We were actually able to get our project to compile this way, but we were unable to launch our project in the editor, because the editor/engine was not able to load the DLLs for the Plugins. Apparently, it was blocked by the OS; our guess is that since we weren’t able to rename every single individual object type and function name, runtime conflicts still emerged, unfortunately.
Our next attempt would be to recompile the entire engine from scratch, but since we only need to recompile the engine plugins for our changes, it would be preferable to recompile only those. However, your website contains no documentation on how to do this, and forum searches have also come up empty. If you could offer your advice on this matter, it would be greatly appreciated. Thank you.