Announcement

Collapse
No announcement yet.

UWorks (Steamworks C++/BP)

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

    UWorks is now live on the Epic Marketplace! https://www.unrealengine.com/marketplace/uworks

    Here's the Discord announcement:

    I will build a list with those who want access on the Epic Marketplace so please send me a private message in the following format:
    Code:
    Gumroad e-mail: xxx
    Gumroad license: yyy
    Epic e-mail: zzz
    Please note that how soon you will be granted access is not in my control. I will send an e-mail to Epic on Monday and I'll keep you updated.

    Also note that the current version on the Epic Marketplace features a change in the terminogy of the callbacks: instead of being declared in the format FExternal[CALLBACK_NAME] and implemented in variables (BP events) in the format OnExternal[CALLBACK_NAME], they use the format: F[CALLBACK_NAME] / On[CALLBACK_NAME]. I made this terminology change so new buyers will be able to connect the UWorks delegates to the Steam docs in a more intuitive way. Gumroad users will have both formats and a few weeks to update to the new ones.

    EDIT: I'd appreciate it if you could leave honest and blunt reviews. Nothing beautified, just the cold hard truth about this product, as you see it. Thanks!

    Comment


      Hi, I am seriously considering buying this plugin, but I have a question about VOIP. How is VOIP handled in UWorks, in other words is it possible to output the voice chat to any Audio Component? What I wan't to do is have VOIP spatialized inside the game eg. have the voice come from a speaker somewhere in the level.

      Comment


        Originally posted by Number47 View Post
        Hi, I am seriously considering buying this plugin, but I have a question about VOIP. How is VOIP handled in UWorks, in other words is it possible to output the voice chat to any Audio Component? What I wan't to do is have VOIP spatialized inside the game eg. have the voice come from a speaker somewhere in the level.
        Steam has a rather messy implementation for recording voice, but nevertheless, it's supported by UWorks.

        A while ago, I have added voice "channels" represented by UAudioComponents, which you can use to play (and localize) up to 10 simultaneous sound sources represented by TArray<uint8>. There's a voice recording example in the plugin's content folder. The screenshot below represents that example and I had also posted it in my Discord server some time ago. Steam has deprecated a few of those parameters and I'll simplify the entire mechanism soon. A few users have already implemented voice in their game, as far as I know.

        Click image for larger version

Name:	VoicePresent.png
Views:	12
Size:	449.4 KB
ID:	1351726

        Comment


          Originally posted by vlad.serbanescu11 View Post

          Steam has a rather messy implementation for recording voice, but nevertheless, it's supported by UWorks.

          A while ago, I have added voice "channels" represented by UAudioComponents, which you can use to play (and localize) up to 10 simultaneous sound sources represented by TArray<uint8>. There's a voice recording example in the plugin's content folder. The screenshot below represents that example and I had also posted it in my Discord server some time ago. Steam has deprecated a few of those parameters and I'll simplify the entire mechanism soon. A few users have already implemented voice in their game, as far as I know.

          Click image for larger version

Name:	VoicePresent.png
Views:	12
Size:	449.4 KB
ID:	1351726
          Awesome, that is exactly what I needed, will buy on the marketplace asap.

          Comment


            I won't slow you down but do feel free to hop on Discord before buying.

            Comment


              Announcements from Discord:



              | --- A1 --- | Versions 17-04 and 16-04 are now live on Gumroad and submitted to Epic! This is another massive update (about 21000 added lines in around 170 files) and the most important change brough by it is an early preview of the UWorksWeb module (see announcements and screenshot below). You can find the notes here: https://www.dropbox.com/s/zbsrn1fvs0...es-04.txt?dl=0

              | --- A2 --- | The Unreal Marketplace version of the plugin will not contain the OnlineSubsystemUWorks and UWorksWeb modules until they are close to 100% finished. The list below represents the current completion state of the plugin:
              Code:
              Core: 100%
              Web: 70%
              Subsystem: 30%
              Example: 30%
              The next update will focus on drastically increasing the percentages of the subsystem module and/or example project.

              | --- A3 --- | I've sent the new batch of e-mails to Epic, requesting access for current UWorks customers on the Unreal Marketplace. If you do not see your name/nickname in the list below or simply didn't ask for access so far, send me a private message with the following details:
              Code:
              Gumroad e-mail: xxx
              Gumroad license: yyy
              Epic e-mail: zzz
              This e-mail included:
              Code:
              michalss
              apoisonedgift
              Bdoom
              | --- A4 --- | The following lines represent a brief introduction on Web API, in general, and on the UWorksWeb module which integrates Steam's particular Web API into UE4.

              The terms "Web API" refer to functions that do not exist locally, on the developer's machine. They exist on remote (web) server and are essentially URLs that are called with a string (input) which is built from particular parameters (i.e. integers, structs, classes etc. converted to strings). The web server accessed by such a function will return a different string (output) which the developer will have to parse to extract the needed information.

              The following is an example of a Web API call/function: https://api.steampowered.com/ISteamN...id=440&count=3
              - Host: "https://api.steampowered.com"
              - Interface name: "ISteamNews"
              - Function name: "GetNewsForApp"
              - Function version: "v2"
              - Input string: "appid=440&count=3"
              - Output string: the text displayed when following the link.

              The main purpose of the UWorksWeb module is to simplify the usage of Steam's Web API through multiple methods:
              - Hard-code the URL's host, the interface's name, the function's name and the function's version inside a UUWorksWebRequest UObject.
              - Provide the same 3 workflows available for the UWorksCore module, for its asynchronous/latent functionality.
              - Build the input string using known parameters.
              - Parse the output string using known parameters.

              You can read more about Steam's Web API at these links:
              - https://partner.steamgames.com/doc/webapi_overview
              - https://partner.steamgames.com/doc/webapi

              | --- A5 --- | The following lines describe the current state of the UWorksWeb module:

              - It provides easy access in both C++ and BP, to 137 web API calls. These calls can be used with any of the 3 workflows introduced a few weeks ago in the UWorksCore module.
              - At this moment, it does not contain known input/output parameters (they are available as FString's). Users will need to build their input string and parse their output string.
              - An important number of calls either receive and/or return strings in JSON format, for which the LowEntry JSON plugin could prove handy: https://www.unrealengine.com/marketplace/low-entry-json (note that I am not affiliated with LowEntry and I do not gain anything from promoting his work; this is nothing more than a personal preference that I'm sharing publicly).
              - The MicroTxn interface (used for microtransactions) is hard-coded to use the sandbox provided by Valve rather than interfere with the developer's economy. The sandbox is enabled/disabled by a macro and is intended to be used this way until the developer is satisfied with their work and recompiles the plugin (contrary to the popular belief this can be done even using a binary/launcher engine and it's a 5-minute process that I'll write a guide for, soon or when asked).
              - The file structure and declarations are final, with the exception described above above, regarding inputs/outputs.
              Last edited by vlad.serbanescu11; 10-04-2017, 01:10 PM.

              Comment


                Announcements from Discord:



                | --- A1 --- | Versions 17-05 and 16-05 are now live on Gumroad and submitted to Epic! This version brings heavy changes in the "under the hood" networking part of the plugin. Its intention is to completely remove the need for port forwarding, to pave the way for the OnlineSubsystemUWorks module and to allow multiple servers to be hosted on the same machine. You can find the notes here: https://www.dropbox.com/s/p8zuftbz4s...es-05.txt?dl=0

                | --- A2 --- | UWorks is now the only product available throughout the UE community which makes listen servers possible (to my knowledge). It uses Google's public STUN servers to hole-punch cone NATs and therefore opens incoming connections on UE's ports of choice (typically 7777+). Using the same principle, it also makes dedicated servers possible without the need for port forwarding (once again, the only product to do this, to my knowledge).

                | --- A3 --- | Various notes about this version:

                - Servers hosted on the same machine as the Steam user who queries them will only be visible in the LAN tab for that user. Remote users will see them in Internet/LAN as appropriate (seems to be a Steam limitation).
                - LAN will only display a maximum of 6 servers (Steam limitation; cannot be bypassed).
                - The plugin supports up to 36 servers to be hosted on the same machine. Theoretically, this limit can be increased, if needed (seriously, though...).
                - Please add the following sequence in your DefaulEngine.ini file:
                Code:
                [UWorksCore]
                AppID=480
                
                [/Script/Engine.Engine]
                !NetDriverDefinitions=ClearArray
                +NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="/Script/UWorksCore.IpNetDriverUWorks",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")
                | --- A4 --- | If anyone's got a question that remained unanswered please mention me again (as many times as needed) and I'll answer it either later tonight or tomorrow. I have also sent a new e-mail asking for MP access for the following:
                Code:
                OpticalShadows
                Bioblaze
                Tom
                TheJamsh
                Let me know if there's anything to add here!
                Last edited by vlad.serbanescu11; 10-04-2017, 01:10 PM.

                Comment


                  FYI - After adding C++ code to a BP project. and rebuilding of the project. it will not run if uworks is enabled. it doesnt crash nor give error. the runing if unrealengine.exe gets stuck on 22.6 mb of ram loading and nothing happens.
                  recreated this issue several times. game rebuilds and works in editor fine with uworks turned off. turning it on break the game again in the same way.

                  Comment


                    Announcements from Discord:



                    @everyone My apologies for such a short delay between mentions, but heads-up:

                    - A few customers have informed me that the V05 hot-fix needed another hot-fix. Please redownload from Gumroad! The Epic update is still pending approval, to my knowledge.
                    - I have decided to provide back and forth access between Epic and Gumroad customers (Gumroad will always contain the latest code, as it is independent of Epic's review). If you're an Epic customer, send me a screenshot of the receipt in private. If you're a Gumroad customer, either send a screenshot of the receipt or use the template below and wait for my confirmation that I've added you to the next list of e-mails (spam me if I don't reply in a day or so).
                    Code:
                    Gumroad e-mail: xxx
                    Gumroad license: yyy
                    Epic e-mail: zzz
                    - This back and forth access will last until the plugin is complete and price increases (currently Gumroad's base price is 10 USD cheaper).

                    Comment


                      Hello,

                      Is the APlayerState::UniqueID taken care of in the context of this plugin ?

                      I guess not because UniqueID.IsValid() always returns false.

                      When opening a session in the online sub system, the UniqueID was automatically set to the SteamID so i never had to worry about that and this question is new to me.

                      I could set it myself with something like AplayerState::SetUniqueId(UWorksClientUserInstance->GetSteamID()), but GetSteamID() has to be called on the client (to get the right steam id), and SetUniqueID should be called on the server (for replication purposes), so i would have to create a server function.
                      Not complicated but my code is full of server functions, with basically 3 functions for one + obligation to go through the PC (the only owner that has the right to call server functions). I really hate server functions :-)

                      All i need is a one to one relation between the player state and the steam id. Is there a simpler way to handle that in the plugin ? Or anyone has a more elegant solution than having to setup a server function ?

                      Thanks !
                      Cedric

                      Comment


                        Announcements from Discord:

                        | --- A1 --- | Versions 17-06 and 16-06 are now live on Gumroad and submitted to Epic! This version fixed a few important issues (i.e. listen server crash) and provides a slightly reworked content folder. You can find the notes here: https://www.dropbox.com/s/4hpo1lizlg...es-06.txt?dl=0

                        | --- A2 --- | Here's a sample for a DefaultEngine.ini file:
                        ```[UWorks]
                        AppID=480

                        [/Script/Engine.Engine]
                        !NetDriverDefinitions=ClearArray
                        +NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="/Script/UWorksCore.IpNetDriverUWorks",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")```

                        | --- A3 --- | I have sent a new e-mail asking for MP access for the following:
                        ```
                        Razer313
                        Morano
                        Krushin
                        BlackfootStudios```
                        If there's any question that remained unanswered mention me again!

                        P.S. It's very likely that my schedule will be unpredictable and my availability will remain reduced for the very near future. This is temporary.

                        Comment


                          Originally posted by uced View Post
                          Hello,

                          Is the APlayerState::UniqueID taken care of in the context of this plugin ?

                          I guess not because UniqueID.IsValid() always returns false.

                          When opening a session in the online sub system, the UniqueID was automatically set to the SteamID so i never had to worry about that and this question is new to me.

                          I could set it myself with something like AplayerState::SetUniqueId(UWorksClientUserInstance->GetSteamID()), but GetSteamID() has to be called on the client (to get the right steam id), and SetUniqueID should be called on the server (for replication purposes), so i would have to create a server function.
                          Not complicated but my code is full of server functions, with basically 3 functions for one + obligation to go through the PC (the only owner that has the right to call server functions). I really hate server functions :-)

                          All i need is a one to one relation between the player state and the steam id. Is there a simpler way to handle that in the plugin ? Or anyone has a more elegant solution than having to setup a server function ?

                          Thanks !
                          Cedric
                          Sorry for the late reply! (I don't remember if I answered this in your e-mail, but I'll answer here anyway)

                          UWorks doesn't automatically match FUniqueNetIds with SteamIDs. As far as I can remember, the OSS just makes their clients send their own SteamIDs to the server so when I'll do it in the subsystem module, I'll probably do it the same way (I don't think there's another way anyway).

                          Comment


                            Steam Leaderboards are integrated? I only want this, Unreal Leaderboard are broken.
                            Viar Warfare - My first VR Game
                            I'm Spanish, sorry about my english, i working on it every day.

                            Comment


                              Any news on when this will be ready for 4.18?

                              Comment


                                hi, i love the possibilities your asset has, are there any tutorials on creating and joining listen servers?

                                Comment

                                Working...
                                X