#multiplayer
1 messages ยท Page 321 of 1
maybe someone knows how to do it better than I do =p Keep asking for suggestions ๐
I thought of making two levels, one level for the fps character which will be the pc version and package it. The another level will be a plane with a minimap texture and packaged for Android version. But the thing that stops me is - how the replication would work when its about two different lelvels. :/
anyway @hollow pond thanks for the suggestions! ๐
Np ๐
@rough iron These are what I get server side when it happens [2017.05.05-02.11.59:567][841]LogNet: Server connection received: ActorChannelFailure
@NasteX#9854 Not possible. One Server, one Level/Map.
Solution is to use 1 project and 1 level
Anyone else use the advanced steam sessions plugin? Ive managed to Get steam "presence" joins working, as well as searching and joining for LAN servers, but I haven't had any luck with hosting Internet findable sessions
My game has its own steam app ID but is unreleased. I only tested searching from another computer on the same local network, in the non-LAN, non-presence configuration.
@spare owl Steam sessions aren't what Steam considers dedicated servers. They're actually lobbies. Two things to note here:
1 - If you have your own AppID, you need to request lobbies to be enabled for that AppID. You do that by going to the SteamDev group and by making your own thread there.
2 - Even with your own AppID, Steam only returns the geographically closest 50 lobbies, regardless of whether your AppID is region locked or not.
All in all, it's unlikely online sessions will ever work properly with the current OnlineSubsystemSteam implementation. I'm working on a proper module and have a plugin in the submission process at the moment.
neat! but also, thanks
tbh those are constraints i can work with for now
since i'm making a VR multiplayer game it's gonna be a while before i hit 50 lobbies, lol
Yo so I have an issue right now. I followed the multiplayer BP guide on YouTube and setup my server/client menu system.
Right now it's a host based system. Here's the problem:
Let's say I host a game, 3 friends join, I start the match, we play, we finish, it returns us to main menu. Now I host a match again, server is up, my friends cannot find the match though. They have to relaunch their clients to find the match. Any ideas?
I believe you have to destroy the session client-side first
oh
okay so http://i.imgur.com/GBO5Tup.png
that's in my gameplay GM
is that not a correct solution?
how do I guarantee client first gets destroyed?
OnLogout occurs on the server
Yet you're getting the local, server, GameInstance, one that wouldn't apply directly to the exiting client
[2017.05.08-20.17.44:830][ 94]LogScriptCore:Warning: Script Msg: DestroySessionCallback - Invalid player state
[2017.05.08-20.17.44:830][ 94]LogBlueprintUserMessages: [GameInfoInstance_C_0]
[2017.05.08-20.17.44:830][ 94]LogBlueprintUserMessages: [GameInfoInstance_C_0] Success INFOINSTANCE @@@@@@
is that why I get an invalid player state
even though it succeeds?
I added print statements
Possibly, I'd have to see what's in the function to see, but I can pretty much assure you that function isn't working as intended at the moment
There's ClientReturnToMainMenu that occurs on the client's PC, but it doesn't look like it's exposed to BP unfortunately
ah alright
so now my question is, should I disable that connection for event OnLogout and is there a better function for handling this stuff?
should I move it to the PC
Player Controller*
You might be able to call an RPC to the exiting controller to destroy the session on the client
I'm not sure if the controller would still be valid at that point, however
I can surround it with an exists call
and then I wouldn't have to worry
but uh
the problem is right
let's say the host disconnects
what function gets called on the client side
like host DCs so everyone has to crash to main menu
what's the Event that'll get called in this case where I can failsafe and destroy the session on the client
cause the way I see it if Event OnLogout is only run on server there must be a way to guarantee a session gets destroyed
I would do Event EndPlay in the player controller but then I'm afraid if I wanna return to the lobby instead of main menu, I don't wanna destroy the session I just wanna update it so I feel like that solution wouldn't be able to work long term
I'm not really aware of the flow for that off the top of my head, sorry :/
If you're able to look at at least C++ docs you might be able to figure it out
no uve been a fantastic help
that's most likely the issue
i can mess with it tonight ๐
would that run on the client
or does the Server technically still own the Player Controller and therefore it still runs on the Server?
It should, given that the PC still exists by the time the client receives it
That is the one thing I'm not super sure about, but in theory it seems fine
okay ye it does seem like ur right about the server client thing
however that RPC did not go back to client
so i gotta figure that out
@brittle sinew do you have to destroy the server session for each PC
or only the local one matters?
anyone know why a pawn moving will register a velocity on server but on the client it shows 0 even though its clearly moving on the client? http://prntscr.com/f5omqp
@jolly siren there might be to many actors that are relevant at once, I had something similiar once and went the route creating spawners. They where just server only actors that spawn/destroy an actor from a given class. When I was spawing a thing that had a mesh the spawner was using that mesh in editor actually xD. It's a cool way to handle actors and to reset them easily.
@jolly siren that way you can also decide what to spawn and when and optimize the whole thing a bit
Hi guys, Is there any AGameMode::Login in the GameMode for Blueprints. In my case i wanna parse the options of the AGameMode::Login but didn't find similar function in the blueprints . How can address this in Blueprints /
@jolly berry I think instead of using onlogout use event endplay https://docs.unrealengine.com/latest/INT/BlueprintAPI/AddEvent/EventEndPlay/index.html
@spark igloo you can send parse options through the open level node https://answers.unrealengine.com/questions/441857/open-level-options.html
@worn nymph In my case i have a client which sends the ticket and the player id to the server and the server needs to verify the player is a valid user by parsing the options and matching the player id. If they matches then the spawning needs to be done else it will show the error message but will the open level node only takes the results but it wont give any options to do verification on the server side
@spark igloo Oh I see . I use varest plugin and Json to parse login validation details
does a forloopwithbreak save the last variable as the array element?
for example during my completed execution line
will it use the variable it last obtained when it breaked
lets say it breaks at PC3
will my cast to GameplayPC be receiving the object PC3?
@worn nymph the problem is I'll destroy a session no matter what as long as the gamemode ends but what if I wanted to travel back to the Lobby room instead of the main menu, I would NOT wanna destroy the session
unless im thinknig abotu this wrong
@jolly berry onlogout only exists on the server so that code you showed their won't work only way to do is is cast to the player state iterate through the player state array then call the function
if i wanted to travel from one map to another
without dcing people
would I still be destroying a session on end play?
or would that then conflict with traveling people?
like does EndPlay get called if u ServerTravel?
Not sure sorry I only used sessions once and them gave up because It has no host migration and to implement it is a pain in the butt you have to basically override so many things unreal is doing . That's why I use dedicated servers instead
I plan on doing dedicated long term
just doing session rn so i can have the game up and running
btw is easy to setup a dedicated server? costs much?
Then why not do it now save yourself some hassle in the long run
Setup is easy yes . Just follow my wiki guide . Costs depend on the game and type of game
At the moment I host my servers on my own machine
Because it's a moba and only ten players max I can have multiple instances easy handled
So let's say I can have 20 instances on my machine that's supports a player base of 200
If everyone was to log in at once
If I need to get more after that I can just start buying real severs
I have written a dedicated server manager that starts and stops the server so they only run when needed
mind linking me the wiki? I gotta present this game in a day so I'm a bit concerned to just switch the system over yet
There are lots of people making plugins at the moment that do the same thing if you check out the work in progress section on unreal forums
but after I graduate I intend to continue this as a personal project so that's when I'd probably set it up
unless u think I could manage in a day
Oh if you only have a day I wouldn't bother
I appreciate it btw
yeah
rn it works
i actually fixed the client issues
i have ALOT of destroy session calls though
a lot that are probably unnecessary
but it gets the job done for the build atm
gonna do my final bug test now
btw I did most of it through blueprints but
does it make sense to just rewrite the dedicated server system in C++ moving forward?
like I'm completely fine using C++
just wondering if it's at all beneficial to approach it with a C++ solution instead
I could probably just make a library of C++ -> blueprint calls and then run it that way
Its up to you there are advantages and disadvantages to each . I always do blueprints then if I can't do something in bp I do it in c++ . If you want to go c++ route here is exi guide https://forums.unrealengine.com/showthread.php?78333-WIKI-Finished-C-Session-Create-Find-Join-Destroy
nah I meant for dedicated servers haha
Does anyone know if there are problems with dedicated app id like spacewar test id has (region lock...)
@signal lance There are a ton of problems and limitations with Spacewar/480, but what kind of problems are you having?
Mostly other people can't see my sessions, for testing I solved that by directly joining to a friend. I don't know if this problem exists when you have your own app id
It does exist even with your own AppID. It's because of the poor implementation of OnlineSubsystemSteam
Technically, a session on OSS is what Steam calls a lobby, NOT a dedicated server (again, in Valve terminology). And Steam only lets you see the 50 geographically closest lobbies. Spacewar has a huge number of testers and devs at any time so that's most likely why you can't find your session (lobby)
Will probably do my own implementation then or buy your Plugin (looks great btw)
thanks ๐
If you want your own implementation, I'd recommend looking into ISteamGameServer and my video on the thread for the BP implementation (those particular functions are just wrappers, nothing extra, in my plugin)
But also, OSS is v132 and Steam is now running v140 so I don't know what's going to happen
2.5y gap lmao
So basically with my own app id I will be able to find other sessions but only 50 geographically closest if I got that right?
What is the final price for you Plugin, I saw you posted something but can't find it now
Yes and 90EUR
But that's just how lobbies work in Steam. If you use my plugin you'd have to register your application as a server. If you register it as a lobby, you'll obviously still have the same issue
ok, thanks, I don't need it yet but when I get close to a release I will probably get it
I include server registration in the example project though:p
I plan to improve the example in the near future as well as finishing the docs
Just... Too... Little... Time....
Will test your example project when I get some time...
Hii!!! In my game I am using execute consol command node(Open 127.0.0.1:7777?np={players count}. Whenever a client logins into a game will I get those values into Options String of GameMode. And what does Options String do???
options string allows you to send options to the game from a previous world, so you can say what the game rules are etc.
You can then retrive those options using the 'Parse Option' nodes
@chrome bay How can I check those values that is passed through Open 127.0.0.1:7777?np={players count} on the server gamemode
Instead of console command use open level it's easier https://answers.unrealengine.com/questions/441857/open-level-options.html
Then just use parse option bp node and put in your variable key
is there a good dedicated server tutorial out there? that shows how to host more than one instance of the game on the same server? Also how (if possible) to integrate dedicated server with steam?
@dusty sleet Dedicated server with Steam is not possible atm. You either heavily modify the engine, forget about it or wait for the UWorks plugin to be released. For your other question, assuming you have a packaged server, you just create a shortcut to run it with "-log" and run it multiple times. It's also not possible to package a dedicated server with the Launcher version of the engine.
Havnt quite finished it because got sidetracked . Don't forget to open unreal ports if using multiple instances it starts at 7777 and goes up sequentially so second server instance would be 7778 etc
Hi - I'm new to the channel :). So if dedicated server+steam is not working, how does Playerunknowns Battlegrounds Multiplayer System work ? Or Arks ? I've followed the tutorial you posted and everything works fine on my machine. I can join the server with multiple game instances and run around, but how can I extend my knowledge further ? I'm kinda stuck here ๐ฆ
@EniGma#6597 thx! will check this out tomorrow
@IceD34ler it's not that server+steam doesn't work . It's just the unreal steam we have is outdated and incomplete . So like vlad said above you can either not bother , wait for his plugin or do it yourself if you have the time , patience and knowledge .Those games mentioned will have network programmers that either wrote their own network online subsystems or implemented the steam api themselves . "Kinda stuck here" can you be more specific what is it your stuck on ?
@worn nymph @thin prawn It's worth mentioning that both PUBG and ARK are closed source and their networking is very very poorly designed at the same time. Their programmers didn't even follow the 6-7 videos on replication if you check the crate falling in PUBG or trilobytes in ARK
Also, last I checked I wasn't able to host a truly dedicated server with OSS. It was a stupid lobby. Keep in mind Steam and Unreal have different terminology and what is a dedicated server for Unreal is not mandatory the same thing as a Steam dedicated server (and that's exactly how OSS is designed)
What you mean it was a lobby you talking about a steam unreal dedicated server or just using unreal dedicated server ?
One more thing: the tutorial above shows how to create an Unreal dedicated server. But that uses OnlineSubsystemSteam, which will link it as a Steam lobby, not register it as a true Steam dedicated server.
Yes my guide is not for steam it is unreal dedicated server
It's a beautiful guide btw
It's just that solving OSS problems and, as you said, it being outdated, is out of the scope of that tutorial
Did you manage to get any host migration working with the plugin?
@worn nymph Ok. So I guess I'm best of by just waiting and continuing creating my game logic instead until there is a good solution on that ? With "kinda stuck here" I mean that I don't know where to find information on how to create an online system much like PUBG, Ark or The Stomping Land has it. I've done epics tutorials with blueprint networking, everything works fine. But since my game will be something like pubg, ark etc. I don't think it's a good idea to follow the listen server tutorials as I most likely want to have a separate dedicated server (also to avoid cheating)
You mean like CoD does it? If so, then I haven't even tried. I just wanted a simple way to build dedicated servers and that's basically how the idea of a plugin began.
@fleet sluice thanks . Kinda regret putting my contact details in it though . Everyday I get spam from people crying help me lol. And most of the time they are having trouble because they didn't even follow it and are then like why isn't mine working lol
LOL
I've lately been getting requests to put my plugin on itch/gumroad/sellfy which is understandable, but I can't afford to compromise the legal part atm
i already modified the steam OSS to use actual sockets rather than steam p2p, was pretty easy
though it being p2p by default is awful
@fleet sluice Didn't know that, I thought these guys know what they are doing ๐
@thin prawn You are right. All the listen server guides or marketplace BPs are designed to be quick and easy solutions. If you aim for a larger scale architecture, none of them will ever be enough to fit as a solution
the steam OSS has a lot to be desired, probably won't get any love until epic decides to ship games on steam again
@lost inlet ooh you could be my new best friend sockets do my head in . I have a program at the moment that just listen and responds to http requests written in c# which controls my dedicated servers so I can start and stop them dynamically when needed or shut them down when not needed but I really want to switch it to socket
Is that something you could do?
I've said multiple times I'll be adding an OnlineSubsystemUWorks module to replace OSSteam
not sure why that depends on your dedicated server using raw sockets or not
but then how can I learn how to create something like that ? To me it seems like there are only a handful of people on this planet who know how to accomplish something like that, the others are just not the lucky ones. I mean, I can't find anything that could teach me how to create a simple system much like the early access title "The Stomping Land" had, which is all that I need. A server List, be able to join, save my character information somewhere safe and thats it
I mean, they all used dedicated servers, right ? Ark, PUBG, Stomping Land
there's no listen server, no player IS the server
Well, for a generic OnlineSubsytem I don't know if there are guides for exactly what you want
I can't tell in PUBG
They do hit detection 100% client-side
persistence storage isn't the responsibility of the online subsystem
So they might be using a retarded listen architecture
no they don't
For @thin prawn go to the UWorks thread and check the video j example project screenshot
How the fuck not?
ah so you're here just to plug your plugin? lol
You can unplug your internet cable, move near an enemy, headshot him, plug the cable back in and that hit will count. That is 100 fucking percent client-side and its just the work of a retard with all due respect to anyone else who works on PUBG
client authoritive hits doesn't mean they're not using servers
My plugin isn't even released, but I developed it as a solution to all of this Steam bullshit so it makes perfect sense I would objectively recommend it. I also discussed alternatives 5-10 mins earlier and gave more than enough info for people to know how to fix the OSS implementation
- my video shows exactly what true dedicated server registration means on Steam
You are right, it doesn't mean that they must not be using dedicated servers. I just gave client-side authority as an example of a feature which is generally a consequence of a listen-server architecture
@fleet sluice Really ? Did you try that in PUBG ? That's crazy
doesn't that mean that it's hyper-susceptible to cheaters ?
pretty much how planetside and H1Z1 handle it
it takes a crap ton of load of the server
way easier to cheat though
actually in planetside 2 this had serious gameplay implications without cheating
because infantry had a smaller network replication radius than vehicles
so infantry could damage vehicles while being invisible and invincible from the vehicle
@Vlad lol there's hope for the rest of us then if their networking is so bad and a lot of people still play the game haha
anyone has some good tips about creating a master server? Should I use steam integration instead?
@thin prawn @worn nymph https://www.youtube.com/watch?v=7WLAUxslWwM
A basic how to cheat using your network connection ...
I haven't tried it, personally, but a friend did, once.
+1 to what EniGma said. I also didn't realise a game's characteristics of being addictive and well designed are independent, until I played ARK and PUBG
Hope, indeed.
that either means that their server side validation is non-existing or that the heuristic just sucks
I tend to believe it's the first option ^ lmao
and i thought BF3 was bad because damage amount was client authoritive
but yeah, this is no validation at all
even ShooterGame has some basic validation
i went for the lag compensation approach rather than the "i hit you" RPC approach
wouldn't be surprised if cheats for PUBG already have a mass kill option in them
wow, just wow. I'm kinda speechless. And they still make millions...
hilarious and sad at the same time
well the king of how not to design netcode is still the arma series
i think gta 5 is in the same territory too
@thin prawn another option you have is playfab or gamesparks
third party services like that are kinda terrifying
look at what activision did to demonware
@thin prawn Tens of millions*
@worn nymph well, I only need something simple you know. Start the game, click on server browser, choose server and connect. It all works with the blueprint tutorial provided by epic, it's all there and working (tested with 5 friends) but since I need a separate server later on I need to start converting my project and learn how to create a simple system like that. If anyone know "The Stomping Land" (an early access title with dinosaurs) they had the most simplistic system ever but it worked fine
and that's basically what I want to achieve ๐
@fleet sluice that explains btw. why I was shot by a guy with a Crossbow two times trough the wall and died right at the beginning
+1 to that. Similar stuff happened to my friends and I plenty of times
I rarely experience bugs in which the houses are not loaded and I can move through them, loot them and even shoot players I can clealry see through the walls
Seeing this video made me understand why those hits registered
And its sad that this is a bug which works like a cheat. I couldn't find a way to replicate it though lmao
crazy
as Enigma said, if THEY can do it with such a bad system, there's still hope haha ๐
There's also another UE4 game on steam right now (early access) that uses the same setup I want to achieve. It's called The Isle
So there's no actual "tutorial" on that ?
There are some, but last I checked none worked. There was also a BP multiplayer project with listen servers made by someone at Epic, but last I checked that wasn't working either (or was, but barely and rarely)
If I knew something that works 100% as you described earlier, I'd definitely recommend it
huh?
That BP version with listen servers is what I have implemented right now
all the listen server stuff works fine
and it works with no problems
Didn't even need to port forward or anything
Port forwards are trivial. Try testing it again on internet when at a time when multiple people test their own, using 480
tested it with 5 friends and it worked out of the box ๐
Or if your game has low population, you'll always get the 50 lobbies nearest to you, I guess
huh?
But that's not even close to a solution for larger environments and bigger player bases
I mean when you iterally connect to the ip
What
not via steam sessions
ah ok
Literally connect to IP doesn't count what
That's bypassing everything
I thought we were talking about the Steam tutorials out there
For server support
soooo...there's no actual source where I can learn how to create something like Ark, PUBG, Stomping Land or The Isle do ? Maybe they were all done by old UDK veterans who don't want to share their knowledge ๐
I said listen servers don't work as intended (i.e. not going to work for larger player bases) and dedicated servers don't work without modifying the engine a lot
both are working just fine 0o
I am willing to bet at least PUBG and ARK were made by UE developers who thought they were too smart to even look at the replication tutorial
ofc listen servers are limited by the hosts PC
I'm going to back off. I already explained at least 3 times today what are the limitations of Steam with UE, where they come from and even how to fix them inside the engine's source code as they can't be fixed in BP. I don't have time and/or energy to explain everything a 4th time. Everyone who sees this has a scroll button or a keyboard to use the scroll bar.
Wow this is still going . Grabs popcorn -> sneaks into the background ๐
I am not sure what you are trying to explain tbh
For one last time, connecting via IP uses the engine directly and nothing else. That wasn't, isn't and never will be an indication of a working server architecture
0o
you can just write your own session management
write your own master server backend
and only use steam to make a party
and then let all of them join a server this way
well, I can't ๐ - where to get the knowledge to do exactly this ?
just study network programming
๐
or just look into c++ network frameworks
or what unreal ships with
or look into this
@thin prawn if you can't do it I can make you one . But most likely won't be able to do it till the weekend as I'm quite busy
@worn nymph That's very kind of you, but I guess if I can't understand all that by myself I will have a hard time updating/doing my own changes on that
except it will also be explained by yourself (I'm sure you don't have the time for that though :D)
@thin prawn it's the same with that plugin . It's backend is python and I'm guessing the ue4 part is c++ although he might have exposed it to blueprints you will have a hard time customising it unless you know the languages well . Can't see what you would need to customise though I mean it's literally a list of servers
and i'm guessing no authentication
Do I need to pay for servers or anything if I want to do multiplayer?
That depends on your Multiplayer
If the player shost themselves, then no
If you want to have servers out of reach of the players, then yes
@thin stratus have u built a linux dedi before?
Nope
I recently purchased a new PC just to host my servers
and i was not sure if i want to use windows or linux
lol
We are running Windows Servers on Windows 2012 instances atm
No need for Linux atm so I haven't touched it
@thin stratus
why is this checked by default
lmao
@thin stratus are u using aws?
or what
Yop
That depends on what your budget is
It scales for you so it's technically the best you can do
I'm actually using GameLift
and not AWS itself
I mean
why not just buy a computer
and host it at ur house
like i have experience with Servers
and ive managed them many times b4
Like
wouldnt hosting a server yourself be the cheapest?
its a one time fee, only thing u pay for is electricity and internet
lol
Have fun hosting a computer like that
"only electricityy and internet"
- Depending on the game, one PC can't manage a lot of Dedicated Server instance
- Since that means you need multiple PCs, you get tons of electricity problems over time (expensive af)
- Your internet needs to be damn fast and have static ips
Have u seen these
these little things are great for hosting servers like this
and by the time i out scale it ill have made enough money
to purchase a better solution
they barely use any electricity
na that's bs
?
what is
i dont see how i would need more than 16gb of ram and an i5 to run a game server
with 100 players
lol
i can already host that much on my desktop
had like 20 people on my game
no lag, except for crashes (but that was just coding mistakes)
like idk, ive had no issues
@thin stratus How much trouble was integrating GameLift? I've been thinking about using that for my dedicated servers..
@thin stratus =.=
Was in ranked
So, first thing is that this still depends on the game
If your game is pong, then you can host way more games than if you have a more complex game
Then the electricity costs are really high if you have a lot of PCs
and we don't use GameLift if we only host a 2 games for 20 people
But hundreds of games for thousands of people
Then, even if you want to pay hundreds of euros for your electricity, you still need internet that manages to down and upload tons of data the whole time
especially if you use a the native impl of everything
So you need VERY good internet with a static ip
Most countries don't eve offer that to private people
So you have need a company setup for that
For an indie studio is way better to get GameLift running for the beginning
Cause you would also need to code the whole "start server on demand" stuff
Which means you need to either do that yourself (takes time) or pay someone (expensive)
As a private person, hosting at home just doesn't work. And even if you get company internet, it's really not cheap.
It's nothing you easily do
Have you heard of NO-IP?
It's a program which allows u to set a host name which can act as a Static IP
So basically the IP i would put in is myip.no-ip.org
And it exists for ages
Because it's also about the speed?
How much do you have to pay for AWS?
My 100mbit down/40mbit down costs 40+โฌ per month
On a monthly basis
Lol
If its over the cost of electricity + Internet
then its not worth it
on a monthly basis
@harsh turtle We are currently using it in combination with GameSparks. Means the Client talks to GameSparks and GameSparks talks to GameLift.
All in all it's not that hard to setup, but there is like 0 info about it
=/
@twin juniper You can't compare that
I don't know what internet and electricity costs to provide a running server system for 15k ccu
As said, if you host a single server at home feel free
That#s not what gamelift is about
Then google it and learn about it first before arguing? :P
Im not arguing about gamelift
im just arguing that i dont need a dedicated monthly server for a few game servers with only a maximum of like 100 players per server
lol
I said I'm using GameLift
You say it's expensive
what else are you arguing about
Sure you don't need to
it's still kinda expensive though
๐
That's all
I've gotten away with running a web server with 4,300~ members
on a pc with 4 gb of ram and a pentium processor
at my house
it had frequently around 300+ users daily
WebServer aka webpage?
So do you think your internet and electricity prices are higher than 5โฌ a month with that thing running?
My webpage runs on a DigitalOcean droplet for 5โฌ a month.
Together with a Perforce Server
Would never host that at my home
around 21k per month
12k on Blog page and 8k on Job page
The thing is, it's just not worth it
Idk at work we also host a few rack servers for our clients lol
Running a PC the whole night. Buying it. having the internet or setting up the DynDNS
If you are a bigger company, then sure, host everything on your end so you can probably maintain it.
Or get a server in the big server farms in frankfurt etc
Middle company or indie people might be better with the online services you can pay
And yeah, for a private little server for your game, go ahead and host it at home
Idk, I just see it as... if people want my project to get bigger. they will throw money at me to help me do it
xD
If people are throwing money at you, it's best if you have a plan to scale up quickly and smoothly ^_^
@thin stratus I'm using Gamesparks but I'm not using Gamelift Yet, hosting dedicated servers on a google cloud. Do you have any tips on how to registrate servers on the gamesparks for users to find them? It is still not clear to me if I should do that using a master server or gamesparks provide that, couldn't find much info on Gamesparks regarding that matter, but haven't look a lot tbh.
I know it is not exactly about Ue4, but I'm still trying to think if I can do those things using Sparks SDK for UE4, or directly on Servers startin up
I don't actually know
I think you can probably set something up where the Server uses his server credentials for GameSparks to tell it that there is a new session with IP etc
And then have clients ask gamesparks for that list
If they offer saving that
Our current setup is more towards having GameLift start the Servers on demand
The Client never sees any IPs, at least not as a player
He just searches and gets thrown into a game, like Overwatch
anybody have tips for improving multiplayer performance over unstable wifi? One player is the listen server, but last time we tested some players would disconnect on wifi
Fix the wifi :p?
That would be my first port of call.
Second would be network profiling the game
@thin stratus Oh I see, So you've done a matchmaking system, yeah, that's pretty cool. My game is more casual so matchmaking is not yet the best thing to add. Yeah, maybe I can do that with server credentials and manipulate a list with cloud code and nosql
Or even loggining as a server... I'll try that
Can someone help me figure out an error when a steam client joins a steam listen server? I don't know if the error is even multiplayer related but it only happens in my packaged build when I try join a game.
Assertion failed: !bPostTickComponentUpdate [File:D:\Build++UE4+Release-4.15+Compile\Sync\Engine\Source\Runtime\Engine\Private\LevelTick.cpp] [Line: 842]
WolfPackBattalion!FDebug::AssertFailed() WolfPackBattalion!UWorld::MarkActorComponentForNeededEndOfFrameUpdate() WolfPackBattalion!UPaperFlipbookComponent::CalculateCurrentFrame() WolfPackBattalion!UPaperFlipbookComponent::CreateSceneProxy() WolfPackBattalion!FScene::AddPrimitive() WolfPackBattalion!UPrimitiveComponent::CreateRenderState_Concurrent() WolfPackBattalion!UActorComponent::RecreateRenderState_Concurrent() WolfPackBattalion!UActorComponent::DoDeferredRenderUpdates_Concurrent() WolfPackBattalion!TActorIteratorBase >::operator++() WolfPackBattalion!ParallelForWithPreWork() WolfPackBattalion!UWorld::SendAllEndOfFrameUpdates() WolfPackBattalion!FRendererModule::BeginRenderingViewFamily() WolfPackBattalion!UGameViewportClient::Draw() WolfPackBattalion!FViewport::Draw() WolfPackBattalion!UGameEngine::RedrawViewports() WolfPackBattalion!UGameEngine::Tick() WolfPackBattalion!FEngineLoop::Tick() WolfPackBattalion!GuardedMain() WolfPackBattalion!GuardedMainWrapper() WolfPackBattalion!WinMain() WolfPackBattalion!__scrt_common_main_seh() [f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:255] kernel32 ntdll
@hollow pond You might get a unique ID when the Server connects to GameSparks
Maybe something like the request ID or so that you can save
idk :x
@thin stratus Yeah. I'll try a bunch of things, but I don't know if I'd be able to login into sparks as servers with basic auth, I'd have to generate a bunch of usernames/passwords for them. I need to take a look at how credentials work
@cedric_exi why gamelift and not playfab? i was also thinking about, but the free developing on playfab and its features are pretty nice in my opinion ^^
yes but they have some pretty nice features like photon for multiplayer and many other useful things ^^ also i think u can host, but its not the fastest direct in playfab ^^
@hollow pond Device needs to login
Server credentials don't
They can make requests without login in with actualy data
So dedicated server -> server
listenserver ->device
@frank portal I can do all kinds of stuff wit hgamesparks too
Oh, I see. Yeah that makes a lot of sense actually
sry should write english: yes ik you can do everything in gamesparks but i wanted to know why your team decided gamesparks is better ^^
Thanks @thin stratus, being awesome as always
@agile lotus I can't figure out what causes that, but it doesn't seem related to Steam or multiplayer/networking.
@fleet sluice Thank you for the info
Np. Can tou please paste that code somewhere where I can see it more organized? It's a mess on my mobile
Can you*
Encapsulate in ' or pastebin or whatever
playfab also has the same support options i believe ... i am also unsure what to use, but i tend to playfab even both have not the best documentations ^^
GameSparks gave us special support
And the Plugin (once properly rewritten) works quite well
Docs on GameSparks are fine
They have a whole section with tutorials and examples
@fleet sluice https://pastebin.com/sMRgT9Vh
ok i looked at some basic documemtations and both were almost the same and i was really surprised when i logged into photon i got a email some days ago and yeah ^^ think both are good, but starting without any costs i am on playfab side :P
@agile lotus Way cleaner! Unfortunately, I still can't tell what's wrong, but I found this link: https://answers.unrealengine.com/questions/340558/assertion-failed-bposttickcomponentupdate-error-wh.html
Could it be something within your level BP?
My level BP's are blank
Are you adding any kind of component
Somewhere?
Looks like the PaperFlipbookComponent is doing shit
Maybe not registered?
my whole game is made of flipbooks pretty much
Did 4.15 do anything to flipbooks?
I never had this issue on 4.12
No idea
What's up with Teleport on Client? If I run it straight from the event to teleport, it briefly TPs to the location I want and then a frame later comes back to the original position.
I looked this up: https://answers.unrealengine.com/questions/292623/teleportation-in-multiplayer.html and sadly, that actually doesn't do anything. https://gyazo.com/c8cf4ba5ea0921451d51c9eb02196f52
Server works just fine, so I thought it was some simple replication issue, and I am sure it is, but I've tried it all. Multi, makes it work like if I plugged it straight in like this: https://gyazo.com/59cb39c8e75601c488a5c094a4ca1c0a
The Actor AND Destination both print out the correct actor/location, so that's not the issue, it just doesn't want to teleport correctly the actor.
Fixed it by just having the teleport logic inside the character, which thinking about it more, makes more sense, since I can call this function later by anything I want
I had a problema earlier on, could someone explain me what could be wrong?
On WASD I was asking Server to handle input, it them Multicast/Send to client with the proper world direction / scale to Add Movement Input, but Clients just wouldn't Move when on ground, only when falling.
This only happened on dedicated servers. I just ignored all that and did a Add Movement input directly on client and stopped asking the server to do it.
Doesn't make sense at all for me that it would work on jumps/falling and not on ground movement
Not sure as to exactly what would be causing that type of behavior, but are you putting this input on a character?
If so, the CharacterMovementComponent handles all the replication and what's called a proxy system for you, no need to manually call up to the server and multicast movement
It might have to do with the fact that the multicast might've been overwriting your moved position on the client, but when you're falling, you're accelerating, so the last update would've been at a slower movement velocity, allowing you to move
That's just a really basic theory though, no idea if that's really what would cause something like that
I'm sure there are holes in it compared with the behavior expressed ๐
@brittle sinew Yeah, I was using character movement component but I wanted to do some other server stuff with user input before actually adding movement. I understand the proxy thing but for me it still doesn't even make sense that just by asking the server to call client and the client add movement input without the server doing anything wouldn't work and the character would be there, stopepd
stopped*
I would think the value you receive from the server is clashing with the local one
Since the server value is older
Well, actually, you're asking for input, not dictating location
So not 100% at that point
Yeah, I'm still confused but what you're saying makes sense
I would be confused if I were you, I don't really know what the issue is fully ๐
Kinda just putting (as educated as possible) ideas out there
Yeah, and to get me even more confused is that on listen servers it would work like a charm
Even when passing messages exactly the same way, client->server->client
Hello everyone! I have already done 2 very simple multiplayer games using BP. I'm set to work on a much more complex project that will involve steam integration and also Google Gaming Solution: https://cloud.google.com/solutions/gaming/dedicated-server-gaming-solution/
Should I continue this other game using Blueprints or do you guys think that for this level of complexity, I must use C++? I'm a experienced developer and love C++. But I really enjoy working with BP on UE4, so if I could do everything using bp, I would prefer instead of C++
what are your thoughts on this?
Do I need to have steam running in order to allow my server to run?
what kind of multiplayer do i need for an fps game
Probably want TDM at a minimum.
@twin juniper No
I`m looking for good source, how to make a Steam ready Dedicated Server?
How to get player controller id ?
I'm using int32 id = GetLocalPlayer()->GetControllerId();
but its giving me numm value :/
null*
@wary willow The ServerRPC solution isn't even calling the HELLO?
When I host a listen server for my 4 player game and connect 3 other computers with their own packaged builds to the server the first client to join my server (Player 2) crashes when seamless travelling while player 1, player 3 and player 4 travel fine
Player 2 crashes with this error
Assertion failed: !bPostTickComponentUpdate [File:D:\Build++UE4+Release-4.15+Compile\Sync\Engine\Source\Runtime\Engine\Private\LevelTick.cpp] [Line: 842]
KERNELBASE.dll!0x00000000928A9E08
WolfPackBattalion.exe!FOutputDeviceWindowsError::Serialize()
WolfPackBattalion.exe!FOutputDevice::Logf__VA()
WolfPackBattalion.exe!FDebug::AssertFailed()
WolfPackBattalion.exe!UWorld::MarkActorComponentForNeededEndOfFrameUpdate()
WolfPackBattalion.exe!UPaperFlipbookComponent::CalculateCurrentFrame()
WolfPackBattalion.exe!UPaperFlipbookComponent::CreateSceneProxy()
WolfPackBattalion.exe!FScene::AddPrimitive()
WolfPackBattalion.exe!UPrimitiveComponent::CreateRenderState_Concurrent()
WolfPackBattalion.exe!UActorComponent::RecreateRenderState_Concurrent()
WolfPackBattalion.exe!UActorComponent::DoDeferredRenderUpdates_Concurrent()
WolfPackBattalion.exe!TActorIteratorBase<TActorIterator<AMatineeActor> >::operator++()
WolfPackBattalion.exe!ParallelForWithPreWork()
WolfPackBattalion.exe!UWorld::SendAllEndOfFrameUpdates()
WolfPackBattalion.exe!FRendererModule::BeginRenderingViewFamily()
WolfPackBattalion.exe!UGameViewportClient::Draw()
WolfPackBattalion.exe!FViewport::Draw()
WolfPackBattalion.exe!UGameEngine::RedrawViewports()
WolfPackBattalion.exe!UGameEngine::Tick()
WolfPackBattalion.exe!FEngineLoop::Tick()
WolfPackBattalion.exe!GuardedMain()
WolfPackBattalion.exe!GuardedMainWrapper()
WolfPackBattalion.exe!WinMain()
WolfPackBattalion.exe!__scrt_common_main_seh() [f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:255]
KERNEL32.DLL!0x0000000092CD2774
ntdll.dll!0x0000000095660D61
ntdll.dll!0x0000000095660D61
Run the game with the visual studio debugger attached. It's usually impossible to find the problem just from a callstack alone
Looks like the error is happening in UWorld::MarkActorComponentForNeededEndOfFrameUpdate() though, since that's the last thing that gets called before the assertion fires
@main sentinel there's always https://aws.amazon.com/gamelift/ aswell
gamelift is overpriced for what it is
OVH are good
https://www.ovh.co.uk/dedicated_servers/game/
dedicated GAME servers โ The high-performance game server with anti-DDoS protection designed for gaming.
@chrome bay yeah OVH has always seemed to have pretty good deals
I use them for my VPS, they're so cheap compared to most competitors!
takes a few days to get your server setup though
Hey peeps!
Anyone knows why is this happening? If we are playing the game in a session, and one closes the game a NetworkError node gets called. However if the internet connection is terminated in ANY ways (turning off WiFi, etc) nothing is happening. They are both in the "session" but not seeing eachother's movement and actions. Anyone knows how to actually get them disconnected in case the internet dies, and call the network error node?
@thin stratus Nah it didn't, that's the crazy part.
Only when in Multicast did it work as if just hooked up, but calling to server in that particular BP did nothing.
(It was a spawning menu)
But, having the TP logic inside the character (literally, just did the same thing I did in that BP and moved it over to Character BP, and called it from spawn menu BP) fixed it.
@lost inlet How much is it on average?
much more than just rolling it yourself with existing AWS features
there is really nothing specific to it about running game servers
it doesn't even have decent version management
EC2 is a pretty expensive way of hosting your game servers to start with anyway
my belief has always been
start with a simple VPS
and go from there
lol
or host it in house
@thin stratus https://gyazo.com/7d358610c30b9f92ac1787d2f889d781 Spawn menu
https://gyazo.com/5eb1322eb0736ac8addc3cf9f1bc4923 character bp
ยฏ_(ใ)_/ยฏ
It works, so I'm moving on
So if I set an actor to be replicated
what exactly is being replicated
other than its existance
that
thats it?
You still have to replicate variables
And movement, if you check that off
If it doesn't move, you shouldn't have it checked off
That's what I've done anyway
Usually get some warning about lighting if not anyway
So has anyone actually integrated the gamelift plugin and used it ? Their documentation is awful ?
if i call Switch Has Authory() => and drag from authority
does that mean
i dont need a server rpc
@worn nymph AFAIK only like one dev team has
because its running from authority lol
Probably because of documentation
@twin juniper Um, well, it's being called from the server's version of that actor
lol amazon, the only company on the internet which charges per hour for server usage
But that might not have access to the server
no other company does that
billions of web pages, only one uses per hour sales model
And probably won't replicate to client
You'll still need to multi that
i was under the understanding
Ah
that if u placed it in scene (like in editor)
that the server becomes owner by default
also
gamelift looks expensive as shit
Designating function replication across the network
@twin juniper Google also charges per hour =p on cloud.google
does anyone know what playerunknowns battlegrounds does ? is it dedicated or listen servers ?
@thin prawn its a session system i think
no idea tho
never played it
you trying to copy them? lmao
@hollow pond Yeah I think its a really dumb setup
how does a "per hour" system even work?
based on what? just having it turned on? a single connection?
lol
@twin juniper yea, releasing next week. Nah, just curious ๐
what
@twin juniper It works based on a lot of things. On the Instances you're running, their capabilities, ccu. I don't really think it is a dumb setup. Everything has its price that is added accordingly to your needs, and that is an awesome thing to have when thinking on scaling things on demand. If your servers out of nowhere Peaks and you need to add a bunch of new resources it just autoscales and you'll be only charged by the used time of those things.
@hollow pond Yes, but it also means you don't get a straight answer of how much money you are going to need. Personally, I like to have a straight answer of how much I am going to need so I can budget appropriately.
@twin juniper But, you can. You can just configure not having auto scalling, you can set your maximum budget and the system auto scales for that
These solutions are not dumb =p You can do pretty much everything with it and have everything custom made for your specific needs. I can know precisely how much I'm gonna spend on a month using my google cloud
They are anything but dumb :P
And after the first month you can technically calculate what you need to pay based on x ccu
amazon are not the only company that has hourly server charges lmao
You are right @hollow pond . I can't think of a better and fairer system when you have a matchmaking system. That means no standby servers or queues and you only pay for the exact amount that you're using
and @lost inlet . What other services do you know besides Google Server Gaming solution or Game Lift from Amazon?
google isn't a specific solution, that page is basically telling all the existing generic services can be used to host game servers on their platform
multiplay do something like gamelift but they've actually worked with actual games companies so if you partner with them it would be more beneficial than gamelift
you can also try cheaper VPS providers like digitalocean, linode or vultr depending on how much CPU you really need
I dont think digital ocean would be very good for this. Seems like there's gonna be a lot more work than using a service that was designed for multiplayer games like gamelift
And I'll check Multiplay out
i saw their demo at GDC
it's really nothing special at all
mostly with deploying new versions
you have to create a new fleet with the new version rather than being able to do in-place upgrades
we developed an in-house tool to scale servers for our source engine games and while it isn't perfect, it's probably a lot better than gamelift
The problem for me is that I'm alone in this project. So, using an existing solution is probably the only option for me if I want to get something done "quick"
i really wouldn't call gamelift a solution, more like a creator of new problems
is enum replication still sent as a uint8 ? no special gimmiks anywhere ?
well that's how it's represented in memory so i would safely assume so
Hey guys, I have a question about using ReplicatedUsing in C++
is this reliable and will always get called on the clients?
Anyone know how to simulate physics for rag doll on a dedicated server . I'm just trying to make it so once death anim has finished the body rag dolls . But I either get the body falling through the floor or it just flies off into the air and spins around like crazy . To be honest it might not even be something I'm doing wrong I'm testing using a Mixamo character so the physics asset might not be correctly setup for rag doll?
@worn nymph change it to the mannequin
@twin juniper yeah will do just thought I'd mention it in case anyone had similar experience or if I had to do anything different other than the replication of course
Does it do the same in PIE?
Yeah
With one player?
okay, so I am trying to simulate FX on clients when a client fires a weapon. What is the best way to accomplish this?
I am currently calling a server function to increment a variable(with ReplicatedUsing) which sends Notify events to the clients ( COND_SkipOwner).
Problem is I dont always get the notify events on the clients
is there a better way of doing this?
@twin juniper not sure I test with two on one player I shoot the other player . He death anims to the ground simulate physics gets called through anim notify which starts the rpc events needed to replicate and then the player I shot goes flying off into the air spinning the camera and mesh like crazy
I'm at work I'll post bluelrints later
question on dedicated servers, there's a checkbox somewhere in skeletal mesh to update joints on dedicated servers too
allthou Im not sure is that the issue
@sharp mirage this is technically a good way. It's how epic did it in the shootergame
Skipowner makes it so that the local client doesn't call the onrep
Because you usually handle the fx on the local owning client directly when pressing "fire"
Otherwise he feels a delay
@thin stratus the problem is I don't always see the notify events on the clients
Hello. I'm having a bit of trouble with my game. I built a Windows Client and Server and they work. I built the Linux dedicated server and I can connect from the Windows client to it. However, the Mac client is getting a "Client connecting with invalid version" error in the server log. Seems like something that should be easy to fix, but not sure where would the version go.
@sharp mirage you are incrementing the variable, right?
And if you stop shooting you set it back to 0?
yup, thats correct
The fall should happen when the value changes
Too many changes might get wrapped into one though
Hmmm.
@rugged patrol You need to make sure that the engine versions are the same
ah okay
You can't build the client with the mac launcher version while using source on win and Linux
You need to stick to zhe same engine
@sharp mirage at some point, when your weapon shoots very fast, it migjt be better to think about a better way
Maybe only signal the point you start shooten and end shooting
And let the other clients then perform the fx stuff between both calld
Instead of sending each call to play fx
Makes sense. I built the Windows and Linux builds from my windows machine which has UE built from source.
I'll probably have to grab the same commit and build it on my Mac.
Thanks, @thin stratus
@worn nymph How did you replicate the physics simulation? Or do you just play them in both clients and let them be? =p
Has anyone used Child Actors with replicated Blueprints? Are there any known quirks? I'm considering using them quite extensively, and they seem fine so far, but am not so confident in them...
@twin juniper yeah it is the physics asset it works fine using the unreal manequin
@hollow pond this is the anim notify that starts the ragdoll
then in my character i just do this
@worn nymph Does the ragdoll replicates the same? Or do you have 2 separated simulation with that?
not sure cant test properly because i dunno how to sort out the other physics body
Anybody could help me out with replicating anim montages please?
How's the animation called?
I currently have this setup:
-
on ever characters tick I check for bool bIsAttacking -> if it's true then I can call function Attack
-
bIsAttacking is replicated like this DOREPLIFETIME_CONDITION(AFFCharacter, bIsAttacking, COND_SkipOwner);
-
on key press I call AttackStart which sets bIsAttacking to true which means function Attack is called
-
Attack() function:
UFFAnimInstance* AnimInstanceRef = Cast<UFFAnimInstance>(GetMesh()->GetAnimInstance());
if (AnimInstanceRef)
AnimInstanceRef->AttackLight();
In AnimInstance I do TryGetPawnOwner and then get montage and play it
Currently it's not replicated even if I attack on server
So client only sees it?
only local player sees animation
Owner client that is yeah
Well must admit I'm mostly in blueprint world.. And these bools I handle with a replicated value on pawn. Which is grabbed in anim blueprint to set a bool in the anim blueprint. That's replicated as well
I think it should work but I have no idea why it doesn't work
I already made similar mechanic but using normal animation, not anim montage
Hm strange server wouldn't see if if its replicated. If the server side sees it we'd atleast know that it's just bot@multi casting the value to everyone to know.
ER phone correct
Not multi
Any idea why my cross-compiled (from source, 4.15.2) linux dedicated server would die with a failed assert (Detected negative delta time)?
I just got that recently too. Only happened once tho. On 4.15.1, didn't see it in previous versions.
The exact same build worked yesterday but now dies as soon as I run the dedicated server process.
Every time?
I've only had it once
have you tried installing the thing it tells you in the logs?
Hmm, it seems to not crash now. But I did manage to get a crash when starting it like 5 times in a row earlier.
That seems like a windows driver. This is a linux server.
has anyone seen these Static actor failed to load, SerializeNewActor failed to find/spawn actor, errors on travel?
It only happens sometimes and I'm still trying to figure out why
@rough iron any ideas?
Has anyone solved the issue with ping over steam displaying 9,999?
@worn nymph I saw that you posted about this problem in one of the answerhub threads, did you ever get around to solving it?
It has been backlogged: https://issues.unrealengine.com/issue/UE-27444
Which is a little disturbing...
I want to filter servers by ping for each user but I can't do that if they all return 9999
4.15.2
Even when using steams OnlineSubsystem?
It doesn't happen if you're on the same network
If I play LAN it works just fine
And as per the issue, it's still backlogged and not fixed
yes
with steam
and not on the same network
PingInMs works for me
I'm using a dedicated server tho
So this might be a noob question, and I'm quite new to C++ on Unreal, but I'm trying to use FUniqueNetIdString in order to create a UniqueNetId from the Player ID string that oculus returns in blueprint, in order to set the player state ID accordingly. Unfortunately, it is not finding this class, so I tried to add the Online Subsystem as a public dependency in my build.cs file, and when I include it in my class, it brings up like 33 errors from the OnlineSubsystem.h file. What am I doing wrong?
@erebel55 It only seems to be an issue with listen
@twin juniper it's not a bug it's not implemented properly the 999 is just some default value the programmer entered . The steam plugin is outdated and missing a lot of api functionality . Speak to @fleet sluice he knows more about steam . I'm not really good to ask I realised how bad it was back then and switched to dedicated servers haven't touched steam since . Sorry
Speaking of ping. What bout a pseudo ping of sorts. Message sent with say a time stamp to a server and server sends a reply back with same time stamp then get the difference in that time stamp and current time
@worn nymph Heh thanks for the recommendation!
@twin juniper Unfortunately, I don't know by hand why they show ping 9999. I'll have to look into it when I get home. Here's what I believe is happening: typically, a session in Unreal terminology is a lobby in Steam terminology (I think there's a bIsPresence property to turn the usage of lobbies off and use the regular server or something, but I don't remember the exact details on why this doesn't work or doesn't work properly). Lobbies don't have associated ping information as they are abstract concepts and live inside the Steam backend so every client/user obtains data via their Steam client application on their PC. Thus, Unreal is showing you lobby results and has no way of obtaining ping information.
The 9999 ping is hardcoded. The steam reply for the session list is not properly updating it so it stays as the default value
@twin juniper http://www.aclockworkberry.com/ping-9999-issue-on-unreal-engine-steam-session-results/
@jolly siren worldsettings? mhh seamless travel chaning the game mode?
ogPlayerController:Verbose: NULL GameState when trying to spawn spectator!
I get that warning every time, even when it works. And the gamemode isn't changing.
@rough iron One thing I did notice is that ClientPostLogin is called BEFORE the seamless travel finishes when it breaks. And AFTER the seamless travel finishes when it works.
And I am calling ClientPostLogin from GenericPlayerInitialization
are you calling ClientPostLogin yourself?
yes, from GenericPlayerInitialization. ClientPostLogin isn't an ootb function
the engine expects that that function get's called only when you first connect to a game
it get's called from your GameMode in the login process
strange stings can happen if you call it yourself
which function?
ClientPostLogin
oh I thought that wasn't an out of the box function, checking for it
ok, no it's not sorry
but there is one that is called that you shouldn't
let me revise it ^^
okay
This is the difference between the logs when it works and when it breaks
so it seems like it is a timing issue
hmm yeah the GameMode isn't constructed when it breaks
But that is probably because the worldsettings are failing to serialize
along with the rest of those actors. hmmm ๐ฆ
does set actor tick enabled replicates to clients? Or it wont tick on clients if it does not tick on server? damn..
argh I can't see to reproduce this issue in the editor using multi process, even when introducing simulated lag
I can't include "Online.h" in any of my files. It is riddled with errors
@twin juniper I included it in my build.cs file by uncommenting where it says PrivateDependancyModuleNames.Add("OnlineSubsystem"); I also tried including it as a public dependency as well, to no avail. My defaultEngine.ini has all the right prep code as well
Do you have visual assist
lol
because i rememebr having an issue like that, it wasnt a real error
just intellisense squiggly lines
@twin juniper
send your project build cs file
@twin juniper
Super jealous lol
ohhh
i know what it is
Lol
after u add that
go to Edit => Plugins
then OnlineSubsystems
and make sure its checked there
then Generate project files
and it should work then
Yeaaaah that's checked too
the .uproject file
right click it and click "Generate Visual studio Project Files"
also
right click the .uproject file, and open it in notepad
then paste whats in it into here
{
"FileVersion": 3,
"EngineAssociation": "4.15",
"Category": "",
"Description": "",
"Modules": [
{
"Name": "OnlineTest",
"Type": "Runtime",
"LoadingPhase": "Default"
}
]
}
Can't find that option when I right click it, unfortunately
Nvm found the option when right clicking on file explorer
lol
@twin juniper Yeaaa still getting the error...can't understand why. Would it be too much to ask you to send me a blank project with it successfully including the OnlineSubsystem.h file?
@twin juniper I hear ya...well if you find the time at some point, it would be greatly appreciated. Thanks for the help
@paper furnace are you use you generated project files
also
"Plugins": [
{
"Name": "GearVR",
"Enabled": false
}
]
you should have a plugins section
in your uproject
i noticed u dont have the one for the subsystem
check and uncheck the plugin
and it should add it
then generate project files
and try again
@twin juniper just did what you said. The plugins section now exists, but still getting the errors ๐ฆ
lol these pictures
xD
@paper furnace also add the modules
"EngineAssociation": "{}",
"Category": "",
"Description": "",
"Modules": [
{
"Name": "MyGame",
"Type": "Runtime",
"LoadingPhase": "Default",
"AdditionalDependencies": [
"Engine",
"Core",
"CoreUObject",
"InputCore",
"HeadMountedDisplay",
"OnlineSubsystem",
"OnlineSubsystemUtils",
"Json",
"JsonUtilities",
"UMG",
"Slate",
"SlateCore",
"Foliage"
]
}
],```
should look like that
hey so if anyone is on, something odd is happening. I am trying to possess my Character class I made (as a mounting system), I'm only able to move the character in single player when I possess it. It is possessing it but its not letting me move it. When I do DisplayAll on my classes here's what they look like (the first one is when I'm possessing the main character and able to move aroun perfectly fine (this is the VeritexCharacter.cpp class).
http://i.imgur.com/Ds282Bf.png
When I possess the mount:
http://i.imgur.com/tIgnEPH.png
If you notice the character changes to a simulated proxy and nothing changes on testmunt
any ideas?
also the mount was palced into the scene
not spawned in using SpawnActor<>()
So for some reason, everything in the Possess() function is being called, except for SetAutonomous() and SetOwner(), and when I try to call it manually it doesn't work.
@twin juniper how do you call it
Possess needs to happen on the server
How are you doing that, since the actor is server owned and doesn't allow server rpcs?
Cause i assume you are ending up calling posses on the client
@thin stratus you know how could I do a simulated character launch on client?
(sudden impulse)
without server interfering too much with the correction
Wanna know something fun
LawBreakers i built on the ShooterGame sample
How about that
@slim holly What exactly do you mean? You call LaunchCharacter and the server is trying to correct the whole time?
I mean Launch character works but it has nasty ping*2 delay
even at 100ms it's very noticeable
You calling it both client and server side?
An alternative way (and possibly the best way), would be to directly modify Velocity on Client and Server
since that's essentially what 'Jump' does
I tried, but getting the location to match before movement correction kicks in is super hard
now, did check that the path from projectile simulation is pretty dead on, so I could use that on client side for like a 0.2 seconds before handing over the location control back to server
I just dont know how to momentarily override that
You doing this in BP or C++ btw?
BP mainly, My c++ aint so fluent
ok
From what I can understand, the way to launch a character would be to ensure that whatever 'launches' them has it's behaviour synced as well
Then call launch both client and server side
LaunchCharacter doesn't get ignored client side, according to C++
hmm ๐ค
{
if (!PendingLaunchVelocity.IsZero() && HasValidData())
{
Velocity = PendingLaunchVelocity;
SetMovementMode(MOVE_Falling);
PendingLaunchVelocity = FVector::ZeroVector;
return true;
}
return false;
}```
so it's just SetVelocity, but queued on next movement tick
Mind you so does 'Jump' actually
What should happen is, both client launches, server also launches, by the time correction comes around they should have both launched at the same time (ish)
I got it working on regular doublejump, but it's locked to z+
I had theory tho about using custom movement mode
since it uses different max speed value, so the prediction/correction margin could be bigger too
I did not use Launch Character in my HookUp Swinging game
As Launching Character was really weird in na network environment
I ended up really modifying the velocity directly
@thin stratus The possess works fine, its actually moving the camera, and I can rotate the new actor by moving the mouse. The only thing I can't do is move the actual character when AddMovementInput() is called
Literally, walk upto mount, press E, call ServerRPC "Server_Mount" call possess, pass the controller and the actor to possess into this RPC, it moves the camera, lets me rotate, but i cant move
What's the class of the mount?
its the strangest thing because ti know its not the movement component, it works fine in Single player, but then I also know the possess() function is going through because it mmoves camera, and lets me rotate the object. The only thing that's locked up is the actual movement. I even tried to call AddMovementInput() in an RPC... nothing happened
Its
ACharacter
What happens if you start as the mount
instead of the character
does it work then?
Just to make sure the class itself is not bugged
well, i know for a fact it works in single player
like im able to possess, unpossess, and move freely
k
If yes, then we need to check why the possess breaks it
if not, then we need check what the class is doing wrong
Yus
@thin stratus so for some reason i changed the default pawn yet its still spawning the old pawn
Lolwtf
ohh yeah
shit
ill just comment that out lol
@thin stratus yeah so when i spawn in as it its the same thing btw, cabnt move
Yeah then the Mount itself is the problem
First thing to check is if you properly set it to replicate and replicate movement
Even if that's beginners mistake, we all have that sometimes
Alright
thats the base mount class
It's directly from ACharacter, right?
Then next thing is checking if the axis events are calling
and if yes, if the value is changing when you press buttons
{```
yep i did a debug log when calling AddmovementInput
it still did the debug log
Hmm, tricky
Do you have a lot of code in that hting?
Otherwise, mind sharing the header and cpp on hastebin
uhm
So i can have a look
its small
i just started on it
lol
yea hold up
thats the .h
lemme send u the .cpp
thats the cpp
@thin stratus Tell me if you figure anything out.
@twin juniper The GetLifeTimeReplicated Props
You are not calling the super
Maybe that's the cause
Despite that I can't see anything weird
whelp
that seems to have fxed it
LOL
idk why tho
but thanks man!
probably some replication stuff in there with movement
Character probably has the charactermovementcomponent in its own GetLiftTime function
and if you don't call the Super (parent) function, it doesn't replicate them anymore
yeah
god damn i knwo exactly why i didnt have that too
its because i used visual assist
and they dont add Super calls
when creating the functions
so i just forgot lol
so on my travel replication issue thing. you get stuck in limbo at a playerstart on the map. and you can't see any other characters on the map even when in view. but you can hear sounds like doors opening or the other player shooting.
@twin juniper it's a bug. Restarting Ue4 editor usually fixes it. (The defaule spawn bug where you change it but it still spawns the old one)
@vocal ingot i ended up fixing it, it was a different problem :p
that happened because my PostLogin() handles spawning and possession
oh, okay
Also, I have a question. For example my game has character selection and I too do my spawning in OnPostLogin (there is no default pawn). How do I know which character the user has selected in OnPostLogin and then spawn that character from the server?
uhm
dont use onpostlogin
create a widget
then spawn the actor using SpawnActor<>
and possess it using the player controler
i mean u might be able to do that on postogin
but its going to happen every time u login
lol
you can send some data in the login URL if you really wanted, depending how complex the choice is
yeah idk anything about the login URL
it probably is some sort of POST request right?
is this for like, gamesparks or something
lol
the aws stuff
if it's something stored in a persistant backend, you'll want to fetch that on login, but while that's being retrieved just spawn them as a spectator pawn or something
then when it's received, spawn them as the appropriate pawn
but rarely will a multiplayer game (that isn't an MMO) just plop you in the game without some form of thing to confirm
@twin juniper in my game you select character in main menu and when you join there is an algorithm which automatically decides your team and where you spawn
I just want to spawn a specific character specified by that player that is being spawned
@lost inlet what's a login URL?
travelling in UE4 uses URLs
common example: MyMap?Game=MyGameModeClass
this also applies to connecting to a server
you can use this to append this URL
which can be retrieved serverside on connect
Does the ServerTravel console command work for anyone?
nvm guess it doesn't work in editor
@vocal ingot You can technically just add an option to the connection URL
Connection URL means the IP for example
Thanks! Will try it
@thin stratus hey when I possess this pawn, is there any way of moving the camera back? Isn't my camera still attached to the other character?
like, its literally inside the body of the thing
lolol
Possessing will move the viewtarget
yeah i know that much, but what if i want to zoom out
@vocal ingot Idk if you use C++ or BPs, but in BPs you would do it via ClientTravel and the URL is then sth like 127.0.0.1?Key1=Value1?Key2=Value2
I guess when using the "OpenLevel" node, you can do the same
I use both