Announcement

Collapse
No announcement yet.

Server Browsing & Steamworks

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    #16
    To be honest I am very new to this area, is there any sort of direction you could point me in to get some sort of working onlinesubsystem through steam implementation.

    What key aspects am I looking for when starting it within an online interface? I understand that Wraiyth has been "monkeying" around. It just would have been nice to know what is possible at this time and a small point in the direction in how to do it.

    Or is it best to go through the Steam partner website, register and be given information from them?

    Comment


      #17
      Originally posted by rvc View Post
      What config file? My search can't find bDisableSteam in any config or unrealscript file
      May be called bEnableSteam. I believe its in DefaultEngine.ini off the top of my head under the [OnlineSubsystemSteamworks.OnlineSubsystemSteamwork s] section.

      Keeping progress I believe is a separate thing completely. For UT3 we stored all our progress as values in the ProfileSettings and unlocked as appropriate. Our UI read this data and displayed it appropriately. From the looks of it, the Steam stats could handle this progress for you, but I'm not familiar with how their stats map to achievement progress directly, if at all.
      As far as I recall (and a few things have changed since I implemented stats/achievements last time around in a game), Achievements are simply locked/unlocked and its up to the developer to store stats and unlock an Achievement when a threshold is reached, I guess similar to how you describe.

      Or is it best to go through the Steam partner website, register and be given information from them?
      Well, you do need an AppID from Valve before you can make use of any of the Steamworks features. After that, you're pretty much running blind because their documentation discusses the C++ SDK calls and we have no details on these with UDK.
      The SDK has even changed since I last used it so theres probably a few other things to learn and figure out, but things like the naming conventions (Achievement_<ID>) meant that it was impossible for anyone to start anything with UDK

      Comment


        #18
        Originally posted by Wraiyth View Post
        How are the names of stats and achievements set? Is there a naming convention we have to follow?
        Achievements must have an "API Name" of Achievement_X, where X is a number from zero to the total number of achievements ("Achievement_0", "Achievement_1", etc). You have to start with zero and can't skip a number, as Unreal uses this convention to figure out what achievements are available at runtime (Steamworks doesn't currently give you a way to enumerate the achievements, so this method is required for the time being).

        Please note that this string is never seen by end users...they will see the actual name and description of the achievement. This string is just for machines to talk to each other. Unreal will show the correct localization of the name/description to the user (based on the language they chose in Steam), if you've provided translations on the Valve Partner site. I believe it defaults to English if there's no translation available.

        Originally posted by Wraiyth View Post
        How are the stats linked in to the Achievements in terms of progress? I know that the Steamworks partner page linked these in but as far as I know, this was purely for progress displays on their Steam stats pages.
        I believe you have to track them separately, triggering the achievement when the stat reaches the goal, but I'll follow up. It's safe to trigger an achievement multiple times in any case; we'll only show them the achievement toast once.

        Stats named X_Y (X is the ViewID, Y is the ColumnID). Same deal as achievements: this is just an internal string so we can map between Unreal and Steamworks. End users don't see it.

        Originally posted by Wraiyth View Post
        Are leaderboards fully supports? I could only see a method to write leaderboard data, not pull down say... top 10.
        They should be, but I'll take a look at this and reply again.

        Originally posted by Wraiyth View Post
        What do our stats need to be set to, GameServer set, or Client set?
        For the time being, GameServer, but we're looking at this in lieu of newer Steamworks SDK functionality.

        --ryan.

        Comment


          #19
          Originally posted by Blade[UG] View Post
          Glad to hear someone has managed to get it to do something. How about with the UDK app id though, since most UDK devs will probably be using that, at least to start with?
          You need to get your own appid from Valve for most of the Steamworks stuff to work. My understanding is you can disable Steamworks support if you aren't far enough to have your own game or network support for it (namely, just don't run Steam.exe, and the UDK will fall back to OnlineSubsystemPC) when it can't talk to Steam.

          Achievements, stats, leaderboards, publishing to and querying the server browser: these all need a unique AppID different from the default UDK. It's how Steam knows what game is being talked about.

          You have to talk to Valve, they assign AppIDs manually, when you set up a deal to publish on Steam.

          --ryan.

          Comment


            #20
            icculus,

            Good information. =-) thank you!

            Comment


              #21
              Originally posted by Blade[UG] View Post
              icculus,

              Good information. =-) thank you!
              Agreed! Knowing the stats naming now as well should make figuring the overall system out much easier.
              Having a UDN page for these detail would definitely make sense as well, saves people digging up this thread later on.

              Comment


                #22
                Originally posted by icculus View Post
                Achievements must have an "API Name" of Achievement_X, where X is a number from zero to the total number of achievements ("Achievement_0", "Achievement_1", etc). You have to start with zero and can't skip a number, as Unreal uses this convention to figure out what achievements are available at runtime (Steamworks doesn't currently give you a way to enumerate the achievements, so this method is required for the time being).

                Please note that this string is never seen by end users...they will see the actual name and description of the achievement. This string is just for machines to talk to each other. Unreal will show the correct localization of the name/description to the user (based on the language they chose in Steam), if you've provided translations on the Valve Partner site. I believe it defaults to English if there's no translation available.



                I believe you have to track them separately, triggering the achievement when the stat reaches the goal, but I'll follow up. It's safe to trigger an achievement multiple times in any case; we'll only show them the achievement toast once.

                Stats named X_Y (X is the ViewID, Y is the ColumnID). Same deal as achievements: this is just an internal string so we can map between Unreal and Steamworks. End users don't see it.



                They should be, but I'll take a look at this and reply again.



                For the time being, GameServer, but we're looking at this in lieu of newer Steamworks SDK functionality.

                --ryan.
                Bump time. Any more information on the Leaderboard implementation?

                I also get a crash in ReadOnlineStats() whenever I try to call it.

                Code:
                	local LCLevelStatsRead Stats;
                	local OnlineSubsystemSteamworks Sub;
                		local UniqueNetId PlayerId;
                	local array<UniqueNetId> Players;
                
                	Sub = OnlineSubsystemSteamworks(class'GameEngine'.static.GetOnlineSubsystem());
                
                	Stats = new(Outer) class'LCLevelStatsRead';
                
                	if (Sub != None)
                	{
                		Sub.GetUniquePlayerId(0,PlayerId);
                		Players[0] = PlayerId;
                		Sub.ReadOnlineStats(Players,Stats);
                	}
                Code:
                class LCLevelStatsRead extends OnlineStatsRead;
                
                DefaultProperties
                {
                	ViewId=1
                	ViewName="LevelStats"
                	ColumnIds.Add( 1 )
                	ColumnMappings.Add((Id=1,Name="TEST"))
                }

                Comment


                  #23
                  Wraiyth: Hello, how's it going? Have you managed to implement leaderboards?

                  Originally posted by Crzyhomer View Post
                  Leaderboards should be supported via the OnlineStatsRead object. You define your stats there and call ReadOnlineStats(ForFriends) with that object passed in. The ranked stats versions seem unsupported. These functions are in the OnlineSubsystemSteamworks class. It looks like there is a naming convention here as well to properly talk to Steam, I'll look into it for you.

                  It looks like our post match stats report is using the GameServer set, but there are some details there I'm unsure of, so I'll get back to you on that.
                  Hey Homer, do you have an answer yet? Will there be better Steam support in the upcoming versions? Or should I just do some DLL-bindings?


                  Originally posted by icculus View Post
                  Originally posted by Wraiyth View Post
                  Are leaderboards fully supports? I could only see a method to write leaderboard data, not pull down say... top 10.
                  They should be, but I'll take a look at this and reply again.
                  Hi Ryan, do you have a reply yet?

                  Comment


                    #24
                    Unsupressing DevOnline gives me the following log message: "Not setting achievement: user content is loaded!" when calling the UnlockAchievement function, which returns false.

                    So, I can read just one of my achievements but not all. I can't unlock any. Trying to do this in C++ through the Steam API works just as intended. I can read and unlock all my achievements.

                    Epic....help plz?

                    Comment


                      #25
                      In order to read your achievements they need to have an image assigned to them trough the Steam partner site. But you still can't unlock them.

                      I'm pretty sure Epic isn't finished with the Steam integration into the UDK. The error I get when trying to unlock Achievements; "user content loaded" will always make the function return false. I guess user content will always be loaded when running the UDK. So I guess we'll just have to hang tight until Epic is done with integration.

                      Comment


                        #26
                        I was able to get March UDK to show me a server list, using a completely stock packaged DM-Deck, opening port 27015 on the server, starting a server from the host menu, then starting up a second copy of the game and hitting Join Server. I was not able to get a connection to the server, however, it didn't even try.
                        (this may be because both were using the same Steam account on the same computer)



                        Edit: when I run it as a dedicated server, I'm able to get in from the client! yay.

                        The Scaleform interface is really buggy, though. But it works!

                        Edit: None of the fields in the thing change except for Max Players, ever, at any point. Map, server name, all the other fields that it shows, once it's brought up, it never changes, even if you shut down and restart the server with a totally different game. I may be missing some additional things that need to be specified on the command line or something, possibly. Further edit: It turned out that I had an extra copy of the udk server running, so the second server wasn't overriding the first server. Not a bad thing.

                        Looks like server browser can work, now! yay.

                        Comment


                          #27
                          Originally posted by Blade[UG] View Post
                          opening port 27015 on the server
                          Badass Blade. Thank you!

                          I'm not able to connect from the client even with the dedicated. It says "Unable to get search result for index 0." Hmm.

                          I'm thinking it could be a NAT issue.

                          Comment


                            #28
                            nah, the scaleform interface is -really- buggy in that area. I did see that problem a couple times while I was testing it out, but spamming the "Join" button did eventually get me in.

                            Comment


                              #29
                              I enabled DMZ on the router on and that fixed that problem. We were able to connect a few people, so this is working

                              Right on!

                              Comment

                              Working...
                              X