otavepto / gbe_fork

Fork of https://gitlab.com/Mr_Goldberg/goldberg_emulator
https://gitlab.com/Mr_Goldberg/goldberg_emulator
GNU Lesser General Public License v3.0
193 stars 56 forks source link

Game servers utilizing Steam browser protocol (default port 27015) are not working #52

Open otavepto opened 5 months ago

otavepto commented 5 months ago

An example would be Homefront Dedicated Server appid 55280. The game cannot find the server (on local network) via its in-game server browser.
Also connection to the server via direct IP doesn't work, the game accepts the IP, but then hangs at joining match.

LuKeSt0rm commented 5 months ago

For those who are interested: batch script to easily download the dedicated server via steamcmd and anonymous login HomefrontDedicatedServer_Batchscript.zip

Steam API v0.89.39.43 (2010/2011)

SteamClient009
SteamGameServer010
SteamGameServerStats001
SteamUser013
SteamFriends006
SteamUtils005
SteamMatchMaking008
SteamMatchMakingServers002
STEAMUSERSTATS_INTERFACE_VERSION007
STEAMAPPS_INTERFACE_VERSION003
SteamNetworking003
STEAMREMOTESTORAGE_INTERFACE_VERSION002
SteamMasterServerUpdater001
gameclamp commented 4 months ago

Enshrouded Dedicated Server not working too.But original gbe worked.It seems the new code broken something.

LuKeSt0rm commented 4 months ago

I have tested it with the game "Special Forces: Team X" and can confirm that it works with the last two official versions (802d8bcc and 475342f0) by Goldberg. (game will show up in the server browser)

It doesn't work with the version R4_20231108 by ce20fdf2 anymore.

otavepto commented 4 months ago

So I tested the game Special Forces: Team X (app id 217860) but couldn't replicate the problem on my end. I'm using real LAN.

In game option Find Match can detect my other machine. Left machine is called Mr_Goldberg (Remote Desktop), right machine is called Mr_Goldberg_222

img ![image](https://github.com/otavepto/gbe_fork/assets/153766569/50ccda8e-e01d-4003-970c-aa6fc1843535)

I could join the match

img ![image](https://github.com/otavepto/gbe_fork/assets/153766569/f8463909-3185-441d-b3bb-ad822f00d834)

And the multiplayer match plays fine

img ![image](https://github.com/otavepto/gbe_fork/assets/153766569/cd3aad83-7786-442f-87d0-29dee49128ec)

I'm using the latest build/release. Please let me know your steps so I can try to reproduce them. Also let me know if this game has a dedicated binary for the server browser like Homefront, I was testing with the in-game browser as you can see.

LuKeSt0rm commented 4 months ago

I meant via the in-game browser, correct. I used experimental - steam_api.dll with "steam_interfaces" and "disable_lan_only" in local steam_settings folder.

Special Forces doesn't have dedicated server files.

otavepto commented 4 months ago

I've created PR #82 to revert all networking changes as well as avatar, source query, and all of the friends stuff. Please give it a try when you have some time.

LuKeSt0rm commented 4 months ago

Special Forces: #82 fixes the issue with not showing the client hosted games in game browser, great! Now the only question is which of the removed parts/code is actually causing the issue.

non #82 build: joining via overlay and invite function works. So is this possibly an indicator that it has something to do with the networking/source query code changes.

otavepto commented 4 months ago

That's assuring to know, thanks a lot for testing. I suspect it'd be the networking changes, what I can do is create multiple PRs each reintroducing one of the disbaled features. I'm honestly fine with completely removing those additions since it's functional now.

Friend avatar is the least suspected one, source query is a new addition and while it introduces a lot it's still a new addition. The changes in the networking to get it all working together is the potential problem. On my end it's sporadic whether it will work or not (Special Forces X), as shown above it worked at the time of posting the image, but another time it completely stopped, so it's difficult for me to always reproduce it.

Another thing I kept getting errors from libssq which reads the info from the query server until I completely disabled all firewall software I have, including the default one in Windows.

LuKeSt0rm commented 4 months ago

Remove completely or possibly add the option to disable? I would like to test another PR with all features except networking changes.

Thanks for your effort, much appreciated!

Edit: I tested "disable_source_query.txt" and nothing changed, as expected.

otavepto commented 4 months ago

It may be difficult for me to add a configurable option given the amount of changes, but I re-added everything in this new PR #83 except the part I'm most worried about, it's in the steam_matchmaking_server.cpp Previously every server list request was being treated a LAN server request, so I changed the current code to do that, this is an example: https://github.com/otavepto/gbe_fork/pull/83/files#diff-598e28eac6f8b732776dda808faee8f6ac5a59ac233ca90ff45577f049d55af6R147-R148 The function Steam_Matchmaking_Servers::RequestServerList https://github.com/otavepto/gbe_fork/blob/3d43d39f0801c3fd5196f9f1707da07d65328dd0/dll/steam_matchmaking_servers.cpp#L38 behaves the same as original code when the given server list type = LAN.

Also reverted the function which sets the incoming server details, originally it used the server details from the incoming local packet, so I removed the code which tries to use libssq: https://github.com/otavepto/gbe_fork/pull/83/files#diff-598e28eac6f8b732776dda808faee8f6ac5a59ac233ca90ff45577f049d55af6R339

When you have time, please give it a test. I would suggest disabling the source query like you did and the friend avatar, just to be sure that these 2 are non effective. If it worked then try enabling them, hopefully they won't cause problems. Thank you so much for the time you invest in testing this, I really appreciate it.

LuKeSt0rm commented 4 months ago

Works: with "disable_source_query.txt" the client hosted game will be shown once you click on "Refresh" in the game browser. without "disable_source_query.txt" the client hosted game will be shown immediately without clicking on "Refresh"

configurable option: you are right. Maybe it makes sense to add an option for "LAN server request" ? (just a thought)

otavepto commented 4 months ago

I created PR #85 which should implement your suggestion. But I made things opt-in instead of opt-out, so by default the emu will behave as it originally did, like the original repo. And the user can enable the new options by creating the 2 new config files mentioned in the PR.

LuKeSt0rm commented 4 months ago

Thank you very much :) Linux build failed ?

otavepto commented 4 months ago

Yup I'll take care of that in a moment, also I missed one important change

LuKeSt0rm commented 4 months ago

Works flawless, thanks :)

otavepto commented 4 months ago

I've created a release with these changes, but I'll keep this one until we figure out over time why Homefront server isn't recognized. Can't thank you enough for the help.

gameclamp commented 4 months ago

The new build work on Enshrouded too. Thank you for your hard work.

otavepto commented 4 months ago

That's very good news, thank you for testing it.

qingchunnh commented 4 months ago

ARK Server Manager not working