#multiplayer
1 messages Β· Page 32 of 1
@fathom aspen I can't wait to ask you lots of questions about iris
I can't wait to get 5.1 installed too
Does 5.1 have Iris?
Show the bool's replication conditions
yeah
It does, experimental zone
Iris achieves replication performance improvements over the current replication system by:
Unlocking scalability by removing antipatterns that constrain it
Enabling concurrency through separation of replication and game thread data
Improving efficiency by sharing as much work as possible for multiple objects and connections
π€
Iris is the metaverse now
Yeah I like how they updated kept that page as is
All I care about with this update is Nanite / Lumen for VR honestly x)
But I don't blame them, they at least got us Iris.
I can keep crying in fixing their own docs
I've just changed it so it doesn't have a flip flop.
when I print the variable in ON_REP , it only prints to a client and server, it does not print to my own client.
Meh - until I can actually use it. It means nothing to me π
Sorry but I can't read that message
π¦
I will be sad to figure out that it's unusable at the current state
Experimental intensifies
But who doesn't want to stare at highly realistic pixels :(
I do, but I mind not learning the tech.
Lol fair enough.
That's why I'm stealing Epic's sample projects and will VR-ify it π€£
VR Sample option PR?
If only, they don't really care about VR for the most part π
We don't even have a multiplayer compatible VR sample project. Let alone Nanite / Lumen.
Seems like you have a SkipOwner condition
what is that?
I don't think you need to have one, but for more info check pinned messages in #online-subsystems
π
IT'S GOING DOWN
You will prolly end up having one replicated instance on client and another dummy one you created yourself. For them to link-up you don't have to replicate anything, all you need to do is spawn the actor on both sides, and name it the same, and override IsFullNameStableForNetworking to return true
In before "Introducing the priority download pass, now for only $5.99" π
I'm getting half of that, so that's Thom guaranteed
You need Twitter Blue for full DL speed
I only need to download something along the lines of another 70GB, so just grab some coffee and then you can get your connection back.
Thanks I'm fine with my potato speed then
I mean I could watch a match of World Cup, but that's next week π
Why did epic have to release 5.1 and a new fortnite update on the same day
That is a good question
I want to laugh, but I know Epic will screw me over and throttle my download speed if I do π
Not multiplayer related but the new UMG Viewmodel plugin looks pretty cool https://docs.unrealengine.com/5.1/en-US/umg-viewmodel/
thank you It works , I was trying all the options and the only one that worked for me was skip replay, is that the right one or is there another one? what does skip replay do? just that parameter is not in the documentation.
Darn, that's lit.
Oh snap - so we can have replication groups now? Hot diggity dog.
Hey @kindred widget , I need a blog post on that, or benui
what is it?
The right one is to have no conditions at all (None)
I thought it was SkipOwner
guess so. I wonder how you would implement actors having specific groups since this is for subobjects. guessing have an actor treated as a group and have another actor as subobject?
A way of streamlining bindings. Before you either bind a value that is constantly updated (not good performance) or use an event driven approach to only update ui info when needed (lots of boilerplate code) this is the "best of both worlds", less work and good performance.
Reject UI, embrace unplayable games with no UI π
Yes, it was SkipOwner, thank you
wow cool
This is pretty dope too (sorry for non-multiplayer stuff)
this is exactly something I was looking for some months ago, and ended up giving up and doing a duplicated translucent mesh. Cooool
This is something Tom Looman will be addressing any time now on his Twitter π
assuming this works with nanite meshes
I can't tell if I like that or not. Would need to try it out.
I dunno. Maybe when it's more finished. Or maybe if your were making Fortnite2 and needed that stupid level of organization. Personally the abstractness that Lyra presents with tagged widgets and GAS component is enough abstraction and boilerplate right now.
I'm really overwhelmed by the tools I have to study rn 
Study Iris π
I just spent last weekend kinda pulling apart Lyra. Do love their UI extension implementation, but I took the liberty of simplifying it for a single game instead of needing Fortnight's Games within games that have games who play games.
+1 to this! π -eagerly awaiting iris blog post-
@fathom aspen In regards to the blog post, if it isn't a 40 minute read, I'll doubt that it is actually you who wrote it.
I'm dead.
I raised the bar for myself by myself π
Rip. I've downloaded the "Valley of the ancient" sample mean while π
Get blocked for teasing my potato internet
You downloaded it for the GAS content right?
No. For being my VR testing playground π
Although it's already broken for someone in #virtual-reality .. So I don't have many expectations if I'm honest.
How in-depth does this get?
do you have agent simulation when unloaded anyway?
Is this for agents or just for traffic lights to look right?
Then build the traffic light state into your simulation
the ACTOR just displays that state (This intersection is red in this direction and green in this direction)
The actual simulation is global, just the display of it is local around the player.
Do you already have virtual agents that get represented by actors when near?
If I was making a simulation game I'd start with the simulation. Is this a city builder?
That's probably no way to work. You probably want the simulation to exist independent of the actors. Depends on if you need an actual simulation or just for it to look like one
Up to you. I like running a simulation in a subsystem but I haven't done much with smoothly attaching and destroying actors to represent that simulation
I am working on something somewhat in the vein of a traffic simulation, it's more for hydraulics and power but it's still graph networks and flow.
Sad moment.
Not only a cliffhanger in Chainsaw Man, now I'll still need to struggle with that... Or just put the project on ice, I guess.
Maybe in a year or two someone will a working example project, that actually uses the stuff there, because the old smooth character Network plug-in is kinda useless when looking at the code.
how do i get a reference to the simulated proxy when the server spawns a replicated actor? like if i want to check if he's on my team or not
Team is just a replicated property inside PlayerState.
Inside OnRep_Team you would check if GetLocalController->GetPlayerState.Team == GetPlayerState.Team
Wonder if the new OnlineServices is supposed to replace OnlineSubsystems? π€
They both just seem to be solving the same problem space.
Because this part in the docs certainly leads one to believe that they're beginning the depreciation of the online subsystem stuff.
I see, so basically Online Subsystem terminology is now of the past, and is replaced with Online Service
Does anyone know how to implement a NetSeriallize that serializes a UObject pointer?
Is it just Ar << MyUObjectPointer;?
Have you looked into FObjectPropertyBase::NetSerializeItem?
no. but im looking at it rn
Good, might give you some pointers
Basically it was the answer, but they were too happy to reply that it worked for them π
Now that I'm looking at serialization code I'm trying to understand what happens if you replicate an already linked actor for some arbitrary connection
Does it get duplicated on client, or does it get replaced with the already linked one, or does it not get created at all and the instance on client becomes somehow the replicated version?
Someone on here asked about that earlier today and that opened a research door for me π€
Subsystem with a manager for replication is what a lot of people do
i have a question. game state stores variables like name - health. if i had a database for these variables is it still necessary to do any calculations in the game state or is it ok to do it in the character bp ?
like set name (take it from db) or change name and like so
db access is going to add latency / slow down to your system.
Better to get a local copy and work with that.
Also allows a sort of "transaction" system - i.e. you don't update things in the db constantly, but you can update them all when you leave the game or whatever.
Or just not update them at all.
even for mmo? get copy for work fast
I wonder why would GameState store variables like name, health, etc. ?
These sound as perfect examples to reside in PlayerState
Especially for an mmo. You want to minimise network traffic!
Only update when you need to.
I would have expected you to say "even for a side scroller game?"
An MMO adds a ton of network traffic that you want to minimize as Daekesh said
thank you so much guys i'll keep it in mind and study more
Do you guys know of any common reasons a client RPC could be being fired twice? There is only one call to the RPC anywhere in my code, I have breakpointed it and it triggers the first one as intended, but then the rpc is called again from somewhere else. I'm debugging rn so i'll figure it out eventually, but just wondered if this happens commonly for any particular reason.
An mmo is about the most stressful and hard thing to do, both for you as a programmer and for the machine that runs it.
Optimise everything.
It doesn't happen commonly at all. Either show code, or have fun debugging it yourself.
Fair enough xD
I'm not sure what code to even show you
We can start with the function that calls that client RPC
Are you running multiple clients under a single process or somtehing?
If that's a custom one, then keep showing us the path of function calls until you reach an engine one
I'll have to get back to you guys later, I appreciate the interest though
But I did 
Say you deterministically name an actor for a connection on both server and client and make sure it was linked correctly doing some engine hackery. What would happen if you replicate that actor at runtime?
I mentioned 3 cases/circumstances, you can bet on one, while I die finding out the answer 
Right
Is that what it does or what you think it should/would do?
And would a replicated version still gets created on client?
If it's net addressable, it shouldn't get recreated on the client, because it'll look for the local version and be like "Hey, use this"
I mean, that's what it should do..
Ah yes.
Static actors aren't replicated, they just exist for the client from map load.
I assume you mena static = ones in the level.
// Spawn actor if necessary (we may have already found it if it was dormant)
if ( Actor == NULL )
{
It seems not to create it, so I believe that too.
Unless I'm looking at the wrong place
I wouldn't expect it to create actors it's trying to net address to the client. It should be a specific net create command for that. Or weird stuff could happen.
I will make sure to report my findings once they stack up
Oh yeah, it is, it is π
Damn. So if you send a random netguid, it will just assume it was meant to exist and create it from nothing?
Ah. That sounds reasonable.
Unless you've already ack'd it, deleted it and then the server messages you about it again.
Then the srever would skip the "here's the data" part?
I think so, because it can't find an actor channel for it
Pretty much like non-relevant actor for a client
Gets deleted
I think this is all firmly left in the "just let epic handle it" pile.
Hehe. Hate it indeed.
Not if you want to hack their systems 
There are many days I'm glad I don't work on a game, let alone a mp then.
Then there are days when I have to integrate things into sequencer and I want to stab Epic with a rusty fork.
Daekesh works on 3rd party plugins, confirmed!
Was this a node pre-5.1? π€
Yes
It is why you basically can use PushModel BP only
#blueprint peeps are gonna party now
MMO BP here I come
I totes do.
Virtual production/broadcast stuff.
The stuff I'm on isn't even targeted for release for several versions π
Not sure. Not sure it'll even be publicly available. It was in the unrealfest thing, but I can't really say much about it, I don't think.
I say just tell us and then ask for forgiveness later π
Hehe. There's not much to tell. π
https://www.youtube.com/watch?v=XAtjoawRN_Y If this is visible to you, feel free to see!
Wait so Daekesh works at Epic, or works for a company that is contracted for Epic?
The latter.
Hmmm π΅π»
I'm curious how people even find jobs with virtual production and well...non-games with UE π
I had to ask, considering I shit on them sometimes
I got recruited because of a project on github I started in ue 4.0
It was a super fun "not slate, but slate" ui implementation based on HUD and its associated stuff.
Virtual production enthusiasts writing notes meanwhile
Heh
The stuff I've been working on for the past couple of months wasn't even in the video. π¦
Who knows, man, you'd have to ask Andy.
Player controller thing happens after Begin Play. Is this right way to do this? Account ID is set in main menu and this happens in playable level after joining dedicated server.
is there execution order problem?
PostLogin will happen well before the variable is set on the playerstate.
Okay thanks! What could be good way to fix that? Add delay to postlogin?
When you're setting the variable on the playerstate you can continue with your logic that you need.
Keep in mind, that even the playerstate takes a moment to replicate to the player, and if you're running an RPC from the player controller, you shouldn't need to tell the server which playerstate as the server can get a reference to the correct playerstate by just doing "Get Player State" in the controller.
Okay thank you!
You might also want to use a Do Once on that RPC Event so it can only be called once (per player controller) so that someone malicious doesn't keep calling it π
haha okay thanks!
Second question. Is this good way to save players in SERVER? Beginplay starts timer saving players function. And other pictures from that function. "PlayerControllers" are current controllers online on server. "PlayersDB" is structure array that contains all players that have connected to server lifetime.
later I would implement some other way to make backup to real database or something. For example once in hour.
(In player actor beginplay: calls Gamemode and PlayersDB to get variables like "health" to player character. Atm this works but have tested with 2 players on server. But goal is to have 50 players same time playing. Would this saving be too hard for server?
Rather than looping through an array, you could use a map variable of ID -> Data
is that faster? I will try that!
It's easier. You'll only be working with the player IDs that are on the server.
Someone joins? Use the "find" of their ID on the map and it returns their data.
Saving? Just "Add" the ID & their data to the map again.
Okay thanks!
If your intending for each server to house their own data, you may even consider using a save game object for each player so the server doesn't have to constantly have everyone's data in memory.
I was wondering, what is the way to build a production level dedicated server game with blueprints only nowadays?
I remember couple a years ago to reach production level i had to use some external plugin (uworks) and steam.
What i mean by production level is that the dedicated servers are visible to clients out of the box, and they donβt need to do some port forwarding manually or similar.
To elaborate more, i remember that when i didnβt use uworks/steam i ran into a couple of issues which were solved by the plugin:
server list wasnβt available to clients(had to enter server ip manually)
you had to do something with port 7777
You use an Online Subsystem, like Steam's or Epic Online Services. Your servers would essentially create sessions that players can join. The clients would poll the online subsystems for available sessions and join them, no port-forwarding required. #online-subsystems for more info on that.
but is the functionality available via blueprints?
ah there is a whole channel about oss
maybe i should ask there
If I create a project with Binary build, can I transfer it to a Source build hassle-free later?
If you mean a Launcher build versus Git build, I use both personally. Project swaps between them fine.
Thanks
Just the other way round could be an issue if your source build has changes. But that's more or less obvious I guess
If the source build is a clean install it should be fine then, I guess.
Yeah
Better here then, (eXi) here i use this with Multicast.. because the Client needs to tell the box that he is interacting, right? sorry for the mess ( Edit) So the client needs to tell the Server that he is holding the Lootkey which would be on server only..... but the server needs to tel the client what he "looted" so this replication should do it?
Hello there, do anyone know if there's a way, when a player press a button, to call a network event on Level Blueprint to play a level Sequence synced for all players?
can someone recommend a tutorial for a dedicated server that will work with UE5 please.
The documentation.
?? there is documentation
@quasi tide - finally posted why FInstancedStruct is excitable
https://twitter.com/_Jambax/status/1592826899486867456
Hmm, I've set some actors to replicates, but bNetLoadOnClient to false, but they still spawn on the client?
bNetLoadOnClient means "don't load as part of the map" - and network system will treat it like a spawned actor
Clients will still create it, it'll just be a dynamic network object instead
I need to spawn the actor on server/client because it's a procedural generation game, and I just wanna replicate the seed and let the client also do generation. Then just link the actors up with the names.
The actors in this case are points of interests
The name part is done, but the client gets duplicated actors
Check bNetLoadOnClient then
bNetLoadOnClient = false basically tells the server to send a spawn packet for it to the client
It should be true
ohh
But you also need to fool the engine into thinking it's a network startup actor (i.e, it's stably named)
Hi!
In a multiplayer game, if I want to change a text on a blueprint widget, do I need to changed on the server to let all the players see the change?
Thanks!
Anyone with any experience with beacons able to help?
I have two PC's who communicate via beacons to get number of players in a server before joining said listen server, but the connection always fails when connecting the second time.
- PC -1 "pings" PC-2, ping passes and PC-1 successfully joins PC-2
- PC-1 disconnects with (execute console command "disconnect")
- PC -2 "pings" PC-1, ping passes and PC-2 successfully joins PC-1
- PC-2 disconnects with (execute console command "disconnect")
then
- PC -1 "pings" PC-2, ping fails and every consecutive ping fails until I shut down the project and start again.
Since OnlineBeacons documentation is...lacking to say the least, I thought someone who already worked with them could maybe help.
What does stably named mean exactly and why/when is it important? Afaik the compendium doesn't cover this right?
Essentially means it can be accessed through it's outer by name
E.G, actor components that are part of the CDO can be reached by name, therefore you don't need to create/ack a dynamic GUID for it
E.g "this packet is for SomeActorGUID::MeshComponent"
Objects placed in the level are stably named for example
So each one doesn't have to be individually replicated by spawning a new object, passing the class etc.
Any object that the server + client spawn independently outside the networking system, but wants to be referenced on network, must be stably named essentially
Also. Hey Jambax. Do you know anything about the weird thing where sometimes if you replicate only one property in an actor component, it won't replicate?
hmm no don't think so
Setting it to true still makes the server spawn it, so I have a duplicate
It's because it's not stably named - the server thinks it's a dynamic actor
Blah. Still curious what caused that. π¦ I had a component I was networking. Had a single replicated TArray. Wasn't working, checked everything. Out of curiosity, added a second replicated uint8, suddenly the array starts replicating fine.
Like I said you have to fool the engine into thinking that actor was created as part of the level load
And for it to magically "link up" with the client-spawned actor, you also need to guarantee the object names are identical
virtual bool IsNameStableForNetworking() const; <- this needs to evaluate to true to stop the server telling the client to spawn a new one
yup, that one is true
I spawn the actors on server/client with the same naming rules too
SpawnParams.NameMode = FActorSpawnParameters::ESpawnActorNameMode::Required_Fatal;
SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;```
{
return IsNetStartupActor() || HasAnyFlags( RF_ClassDefaultObject | RF_ArchetypeObject ) || bForceNetAddressable != 0;
}```
This also needs to be done at a very particular time
{
// Check bNetStartup and also check if this is a Net Startup Actor that has not been initialized and has not had a chance to flag bNetStartup yet
return bNetStartup || (!bActorInitialized && !bActorSeamlessTraveled && bNetLoadOnClient && GetLevel() && !GetLevel()->bAlreadyInitializedNetworkActors);
}```
I might have found the issue,
Gonna check
Okay, now I don't get a duplicate and I can interact with it from client to server, but RPCs and variables don't get replicated
Atleast some progress
Networking and Multiplayer
Iris (Experimental)
Iris is an experimental implementation of a new replication system for Unreal Engine. The goal of Iris is to enable richer multiplayer experiences with larger, more interactive worlds, higher player counts, and reduced server costs. Iris achieves replication performance improvements over the current replication system by:Unlocking scalability by removing antipatterns that constrain it
Enabling concurrency through separation of replication and game thread data
Improving efficiency by sharing as much work as possible for multiple objects and connections
Iris is an opt-in system and will exist alongside the current replication system for the foreseeable future. Existing game code will continue to work as before. Opting into Iris requires game code to use new engine APIs, however, existing replicated properties and Remote Procedure Call (RPC) definitions in C++ and Blueprints remain compatible.
So I assume it will eventually replace the current system
@meager spade There is also a new way to repicated subobjects in 5.1. Maybe that can resolve the ASC/AttributeSet issue from runtime spawned/lazy loaded ASCs
It doesn't look much different tbh, they're just keeping a list on the actor/component instead of having to subclass and override ReplicateSubObjects
Although, you can selectively replicate them now to different connections which is nice
hello everyone,
is replicating projectile movement a bad idea ? I did some testing where I tried firing a high fire rate projectile weapon and the bandwidth cost is insane (15 -20 kb/s per player compared to 5 β 6 kb/s for a hit scan weapon with the same fire rate).
I even reduced their lifetimes to 0.2 β 0.8 s and their net update frequency to 30.
Is this to be expected or am I doing something wrong?
thanks
Sounds about right tbh. It's not a "bad" idea but every actor has a lot of overhead, takes a lot of effort to squeeze it down.
The stock projectile movement component isn't great
A high-rof weapon using actor projectiles is indeed a non-scaling approach though, for sure
But the minimum amount of data needed to sync will depend on your project and how deterministic your projectiles are
If your projectiles don't home or bounce or do anything weird, just syncing the initial conditions can be enough (initial location and velocity)
thank you both for responding !
I tried that but a lot of time it will miss on client and hit on server and vice versa
You sure they start flight in the exact same place and at the exact same velocity? The only way they can disagree is if they hit something moving which may be in different places on different machines
in that case you're into the Favor the Shooter territory. If you have clientside prediction of movement, you implicitly have a mismatch between what a client sees and what the server sees at any given time
There also could be some deviations because of the movement math and different timesteps. Should be small but can grow to be large. You'd want to use analytical math for movement and not Euler
Stock projectile uses numeric integration which is great for cool stuff like drag and homing but impossible to make match up exactly without fixed timestep.
Depends on what you need really
math β¦ very spooky.
I guess Il try to avoid projectiles in high fire rate weapons.
You can have projectiles
Just need to do them differently
I have a projectile system that does a line trace per frame based on velocity. It basically "becomes" a line trace weapon if the velocity is set high enough
Super simple.
Tick -> Calculate new position -> Trace from OldPosition to NewPosition -> Do Stuff if hit
The faster the projectile, the further the new position is from old position. A 100m/s projectile (paintball) would trace 1.5m every frame. A 1200m/s projectile (.50 BMG) would trace 20m per frame
so if you're shooting a 50 bmg at a target 10m away, it hits instantly
if they're 1km away, it takes 50 frames to get there
That's sort of how the projectile movement component works, only it does a movement sweep instead of a line trace
thanks this helps a lot! I will try the trace from projectile method you explained
also, what bandwidth is considered high for a modern game?
Dependsβ’οΈ
(tm) ?
Static doesn't mean non-moving in this context π
Static means actors that are assigned static net guids
For example those that are loaded from package (preplaced actors)
Correct, which you want to avoid.
The how involves tricking the engine into thinking that actor was loaded from package
Basically overriding IsFullNameStableForNetworking to return true and making sure bNetLoadOnClient=true and bNetStartupActor=true
how TF you do that
I've been trying to do these jokes for ages but haven't got it to work
Right. While it sounds not that maintainable approach, it will end up saving you a lot of precious server cycles
oh yeah, i understood your joke now π
: before and after the tm
β’
i did it
I tried copying the unicode before and that didnt work
:r:
:R:
hmm
It doesn't work for anything not a tm
Then I use this for anything else: https://exoticfonts.com/discord-superscript-generator/
ΰΆ
So to elaborate more on my question. What bandwidth is considered bad for a 40 player battle royal game
If you have to ask the question you're not gonna do that.
But PUBG uses like 30 kbps or so I'm seeing
so anything within a 10x either way of that
crushing my dreams aside, do you mean i can reach 300 kbps
Starbase uses near that. Well it did when ppl played it.
it all depends on the game
thats like asking if 10k polys is a good amount for a character. Well, are you making Mario or The Last of Us?
Lower is usually better but there's a minimum lower bound depending on what your game is actually doing
wait when you say 30kbps do you mean the total kbps when all ports are selected ( in the networkprofiler) , or when you select 1 player
I am currently averaging 6-12 kbps when I select a single client port, so I guess I am on the right path ?
Total bandwidth will be something like Clients^SomePower x BaseRate
since the more clients, the more stuff going on, making the rate per client higher
But if you don't alreay have a working game don't worry about it. You're a long ways off from worrying about bandwidth
40 players doesn't have double the bandwidth of 20, it has more than that. It'll depend on if they're all in the same place and relevency etc
And how much your game actually replicates
yep the fact it doesn't scale lineary is what's scaring me
Do you already have a game where 40 people can connect and shoot each other?
My tax bill when I'm a billionaire is scaring me too. That'll suck when it happens.
lol
It's one of them good problems
I didnβt start with lobby and joining stuff, but I already have a sort of a functioning game, multiple weapons that you can craft during the game equip / unequip abilities, 1 movement ability and obviously the players can take damage and consume attributes, ( iam using GAS).
i was testing all of it while enabling network emulation and trying high latency, i just wanted to start optimizing bandwidth use early on rather than late.
anyways thanks a lot for the help !
There are some basics you can apply and that's about it. After that you need to do actual network stress tests, like everyone else, by having the max amount of (real) people play the game.
yeah, there is no going around that, I just wanted to make sure i am getting the basic stuff that you can test with the network profiler right
Does onrep notify get called on the server as well? I'm getting conflicting answers on google search
In C++ it's an actual OnRep. It should NOT call on the Server, and local client changes are, I think, also not triggering it.
In BPs, it's a "Property Change" Event. It will call on everyone.
[UE 5.0.3, Oculus Quest 2] On a dedicated server, should I make the hand spawning happen on the server? Wondering whether to make this RunOnServer+Reliable. I'm trying to adapt Collab Viewer for dedicated server use but whenever I arrive on the server itself, although the head moves, the hands don't and stay stuck at their spawn point.
(Pic is slightly outdated, I've given up on trying to make the Controllers themselves replicated.)
Pretty sure you always want to spawn the Hands on the Server and make sure they are replicated.
Thanks, I'll try that then.
If it works I'll owe you one.
(Well, another one, the first is for the Compendium.)
Wouldn't be too sure. I have barely any info on your project :P
But the general idea is to spawn the hands on the server
It's an Unreal ArchViz template that was made for LAN use, but I'm trying to make it work as a dedicated server. Just not sure what to change.
So should I make the hands replicated after all?
I've read conflicting information about that.
Their transforms are already replicated, FWIW.
I'm not sure why it would be any different for DediServers
Also I don't know the setup, again. I, personally, would handle the the Controller/Hands in their own BP, that is replicated and handles location replication in there.
If the template just updates the actors location with some transform in the character, then you might not need to spawn them replicated
But ListenServer vs DediServer shouldn't matter here
If Clients worked before, then they should still work
I don't understand either, although apparently someone else had trouble with this: #virtual-reality message
Okay - so a way to build even more lightweight data only stuff?
Basically yes
Guess I just don't know what limitations the standard ustruct had in comparison
None - but try to make a UFUNCTION that takes two different ustruct types. Uh-oh
So it's basically a UHT limitation
What? How would that be problematic? That's so strange.
As in
virtual void DoSomething(FData& OutData)```
You can't override that in a child class, or a blueprint, to output some other data
(that's what my example shows anyway)
annewheyyy polymorphism gud basically
Hmmm - I'm not following. I wouldn't expect to be able to override that and instead of FData&, it'd be like FNotData&. Unless you're talkin' specifically about inheritance/polymorphism....and you are π
Exactly - but then how do you create a something that interfaces with various classes of that object that might want/need different data
Okay. So base ustruct polymorphism sucks. instanced struct polymorphism good.
base ustruct polymorphism = non existant
Which sucks π
Okay, I'm trackin' now. A way to have lightweight data containers that support polymorphism now.
It just means you can use the same core implementations for different data, without having to f-about with UObjects as the alternative
I guess Jambax has found his coroutine π
I swear you show the same level of enthusiasm as Laura does for π΅
Found James in the wild
Good catch lol
dis me
OK someone elevator pitch an instanced struct to me
what is it
Struct that can support polymorphism in UE's reflection system
A long tweet about it from James: #multiplayer message
ah so I'd probably use it for my vehicle part data
instead of
NamesArray, FloatsArray, IntsArray etc
when an engine might have torque, rpm limit, etc, while a transmission might have number of gears, gear ratios, etc
Yeah.
Thanks for coming to my TED talk
Does the "Break Instanced Struct" exist in 5.1?
All I saw was this one
Kinda equivalent @chrome bay
if I have an actor component that im running a Multicast Event on, but I want to do a slightly different thing depending on if it's locally controlled or not? (The player's weapon vs someone else looking at that same weapon in third person). I know i can like walk up the chain to find if its a player controller and if its locally controlled, but wondered if i had any easier way to figure it out.. I still get tripped up by Role and RemoteRole π¦
I'm still not big brain enough to see the purpose. Cries.
Role and RemoteRole aren't that difficult conceptually. I would highly recommend figuring out how it works so that it makes sense to your self as it's pretty much used for everything in one way or another. What is the part that confuses you?
Also your weapon is likely attached to a pawn I assume? Find a reference to that pawn and simply use IsLocallyControlled on it, you don't need to grab a reference to the player controller for that π
GetOwner -> Cast to Pawn -> IsLocallyControlled
if im in an actor component, the first Owner would be the weapon actor woudlnt it?
right now its PC>Pawn>Weapon>WeaponComponent
Correct, but why you have that Weapon Component
Weapon Actor should be a component
Not a CAC god forbid
no not a child actor. π Im just trying to be a bit more modular. So my weapon logic is split into components
should have described better... PC>Pawn>WeaponActor>WeaponFXHandlerComponent
Then you want to GetOwner twice
yea, makes sense, just wondered if there was another way. In the future if I have even deeper actor ownership chains, im worried im going to lose track of how many times i need to GetOwner or something.. Maybe a function that keeps calling GetOwner() until the owner is a PC or there is no owner? π
(or a pawn)
GetTypedOwner?
i dont seem to see that, I see GetTypedOuter?
or are you suggesting to make one similar to that but for ownership
That one exists but seems to be for internal use
I'm not sure if Outer is set properly for Actor when attached to other actors/components
For comps it works great
where would i actually assign net ownership, i think this is the first case ive tried to call some multicast events on things that arent directly part of my Character class.
I spawn the weapon actor on the server, and "attach" it to my character which im guessing has nothing to do with ownership in this context.
Correct.
There is FSpawnActorParams.Owner
You need to assign it to your character
ohh nice! And that grants me the permission to request server events be called on it.
Correct
Is it viable to call a SetOwner function somewhere else because I actually dont initially spawn the weapon directly to the character. He needs to pick it up first, which is where i want him to become the owner
ok sweet, thanks so much for answering my questions, its starting to make more and more sense π
That will then be 5000 dollars for these 10 minutes. You can pay either with PayPal or Mastercard
π
put it on my tab π
Thanks Thom for reminding me, I keep forgetting to get paid these days
look for my next AAA title in 2030
x)
i'm trying to learn how to make a Multiplayer game for me and my friend and i don't know where to begin can i get some help?
I would recommend looking at some of the Unreal docs and pinned messages in this channel to get started, for example:
https://www.youtube.com/watch?v=JOJP0CvpB8w
https://docs.unrealengine.com/5.0/en-US/networking-and-multiplayer-in-unreal-engine/
Also Cedric made an amazing compendium describing a lot of what things are, highly recommended:
https://cedric-neukirchen.net/
An overview of the essential concepts for writing multiplayer game code in Unreal, in under 25
minutes or your money back.
Sample project: https://github.com/awforsythe/Repsi/
Patreon: https://patreon.com/alexforsythe
Twitter: https://twitter.com/alexforsythe
00:00 - Introduction
01:24 - Net Mode
03:33 - Replication System Basics
05:13 - Acto...
thanks a lot
I'm getting this error: LogNet: Warning: UNetDriver::ProcessRemoteFunction: No owning connection for actor BP_MultiplayerCharacter_C_1. Function Show Players Name On Server will not be processed. But BP_MultiplayerCharacter_C_1 is the player running on the server.
It is because the characters hasn't been possessed yet
It works in the client but it doesnβt on the server.
My answer still holds tho
Chances for this happen is you are firing this server RPC on BeginPlay and that's not good
No. Iβm not doing that. Iβm firing on Onrep_PlayerState
That's even worst. OnRep_PlayerState fires on simulated proxies. Server RPCs get dropped on simulated proxies
Donβt worry. Iβm donβt need to do that. Thanks
Anyways if you want to make sure you are firing a server RPC and that you're an autonomous proxy then check IsLocallyControlled before firing that server RPC
OK. Thanks a lot.
hi guys. i want to make sure if the client can hack the value without variable by anyway?
sorry i'll try to ask again
if my client having skin or anything as an attachment. can the client change the value of it and just say hat44 and get the (hat44)
They technically can alter any value on their side, but they "sadly" can't transfer what they see to other clients
Unless they server RPC and the server approves the RPC with blind eyes
thats sad. i thought if i didnt make variable they cant change value lol. anyway thanks you for help
anyone know if it's possible to connect to a remote session via e.g. IP address? I assume host needs to port forward the port (17777 default?) but then I'm unsure about connecting as host.
I get if it's not possible, this is just for demo purposes.
I'm using advanced sessions.
Ideally I can call Create Session on one PC, then that person can just DM their IP address to another person who can enter it and Join that session. But I don't see a way to do so.
FWIW I can see the session via Find Advanced Session if it's all done on one PC, and connecting to that session works fine.
It's 7777 and session stuff is next channel #online-subsystems
Is there a way to select the world youβre in when doing multiplayer in editor? When I hit f8 it puts me in the last clients world.
F8 would just make you "unpossess" your pawn and be able to float around
I'm not sure what you mean by select the world
The world Iβm floating around in is that of client 2 instead of client 1 or the server
You can select the world in blueprints when debugging, so I figured there would be a way to do that with editor viewport too.
F8 works only for the client in the editor. AFAIK there is ToggleDebugCamera command which you can run in console command of the client in question
I know it's there but it never worked for me. I always get Command not recognized: ToggleDebugCamera when I run it and I never looked much into why that happens
Seems like I have to setup something inside something
When playing - eject out and go to the world outlier, there should be a dropdown that allows you to select which machine it is showing
But that only shows the actor for that's world outliner. How would you be able to float around in that world (as client)?
Honestly haven't tried. Never needed to honestly. So I figured I'd throw that bit of info in, in case they wanted to see specific properties on actors in a specific client's world.
Not perfect but that will work
Lol it only works for listen server
I think that's part of the cheat manager and I need to load the cheat manager for clients to be able to do it?
Lol that was it
EnableCheats followed by ToggleDebugCamera and you're good to go
I tried making the hand-spawning function RunOnServer+Reliable and instead of having unusable hands like before, I now have no hands at all whether or not I make the Controllers replicated, and in the latter case whether without a condition or with the Skip Owner condition. If I make the function RunOnOwningClient+Reliable, the hands spawn but, whatever the replication conditions for the controllers, lie clasped beneath the pawn. What might I be missing?
depends on optimization and what you do.
monitor NetBroadcastTickTime in your profiles
no
i mean, world partition server streaming works
but it has a couple of gotchas in terms of net security
you can try world partition server streaming in 5.1
you only have to turn on a couple of CVars and you'll get it working
the server only loads the tiles with a streaming source
yeah hang on
@manic harbor @normal fulcrum the 4 starting in the line I highlighted
bear in mind this is all extremely experimental
therefore functional safety isn't totally guaranteed
use it at your own risk
π
You shouldn't even need an RPC though. Just use the VR Pawns OnPossess function?
hi guys i had a problem with steam online subsytem, ββtwo friends are connected to the game from different wifi, but we can both use the same character. The same character can play and jump together.
[00:49]
How can my connected friend come to me with a different character?
Yeah Mikko renamed a couple of bits when merging IIRC
Unfortunate they havent merged the replication support PR π¦
He did say he was going to, but I guess they got swamped in 5.1 stuff π¦
You mean like this? Tried this setup so far with hands both non-replicated and replicated no-cond, but they don't appear on the client. Sorry for the bother, starting to despair at this.
if im using get hit result under cursor for objects to find an AI under the cursor should it be done on the server?
im getting a hit result but breaking it says theres no data for the hit actor
It should be done at the local controller level
Server for listen-server, and client for others
IsLocalController/IsLocallyControlled should be enough to tell you you're safe to use it
its running on the client.. any reason why the hit result returns false but the hit actor returns data anyway?
No idea. I would debug the native function to find out. But looking at it, seems if there was no hit then it generates a default hit result.
If you have a game that is both singleplayer and multiplayer, do you have to write 2 different implementations for functions that you intend to replicate - the actually replicated ones, and a singleplayer-only version - or do functions that are written to be replicated work even in an offline context where there is no server?
It will just workβ’οΈ
Architect it right and it'll work whether single player, listen server, dedicated server, or client.
cant tell if real advice or meme
It's called standalone net-mode then and they have full authority
Can't tell if that's an advice or a meme now fr
ps Adriel, not exactly related to multiplayer but do you have know of any resources about the graph systems you mentioned in the discussion yesterday I think?
We were talking about a game where you could stack objects like blocks and see if they were supported by other nearby blocks
Why is this not working? Am I missing something? Clicking the FindSessions button always fails. I'm launching 2 standalone windows, but when a player creates a server a debug string gets sent to both windows
Hi guys , in order to RPCs to work inside of ActorComponent you don't neccessaraly need to replicated that component right ?
If the component is not marked as replicated, you can't use RPCs within it.
The events can still be called, but they won't perform the server->client or client->server logic.
oh okay , thats why my code wasn't working properly , Thanks !
If I wanted to edit the engine so that APlayerController was replicated to all clients, where would I even begin?
Why would you want to do that though? Seems like the effort of doing that is likely or lead to just multiple issues�
Fair, but that isn't the question I asked. I understand the potential issues but I'm trying to solve a problem at work
Sounds like a terrible solution, but the Controller/PlayerController class would be where I started. GameMode is what spawns the PC so it may also get some networking stuff set there. So you can check there as well.
How do you keep track of what is in the FInstanceStruct?
If I want to have a function with two different possible values for Data, how would I know which one I'm dealing with?
I couldn't make that bit out from your images.
Does the "BreakInstancedStruct" node return "NotValid" if I try to break the "Data" pin to the wrong class?
It would only show debug strings on each window if you are playing in the Editor on the same process.
Or you literally are connected and use something that calls on everyone, like BeginPlay, to call your PrintString
For Finding Lan Sessions, has that ever worked for you? There are routers who don't support you just using the broadcast IP, which LAN Searches in SubsystemNULL are doing.
Here is the thing though: By not stating why you want to do that you remove the option for us to maybe know of a better way to solve whatever work problem you have. It can totally be that you tunnel vision into replicating the PC to everyone (horrible idea btw), while there might be a way simpler solution. There sits a combined knowledge of multiple decades in this channel, about UE and it's multiplayer framework. So if you can, state the reason. Worst case, people can't help you or even suggest you to... replicate the PC to everyone, best case you get an alternative with less headache.
Funnily I'm reading your network compendium right now.
I understand why people would ask the question, and I didn't mean to come off as rude, it's just preliminary research on the best way to tackle the problem, not the likely solution on its own.
Basically I'm trying to get online splitscreen. So splitscreen with remote clients. The problem is current splitscreen works only with ULocalPlayer, so I either need to make it work with UPlayer or a subclass of it, or "trick" the engine into spawning ULocalPlayers for everyone in the network, but then I don't know the replication impact of that.
Do you mean that you have issues with UEs default implementation for Online Splitscreen?
I'm so sorry, there's already an implementation for Online splitscreen?
Online Splitscreen should be support out of the box theoretically
UE is already registering Splitscreen Players that a Client brings with them
As ULocalPlayer, yes.
I haven't set it up yet, so there might be some initial things, but it should def be supported
But we need to see the "screen" of the other player over the network.
Cheatscreen was the biggest one I was shown.
No Way Out was referenced too, I think.
So this isn't about actual Splitscreen players, but about online players that you want the screen from?
Yeah their camera basically
Right but the built-in splitscreen support is for ULocalPlayer, which gets the view target from the player controller of the local player. Which is where the issue is.
Let me have a quick look through the engine to see possible solution
Drawing to render target would murder performance.
I appreciate that a lot.
No Way Out was done in UE, so can't be that difficult. I doubt they replicate the PC
Do you mean "A Way Out"?
Right so they're apparently using Remote Play Together
Isn't that a Steam thing?
That would be weird. I never played that on Steam. Is that a library one can use outside of steam?
I'm not familiar with the library that powers Remote Play Together
What I do know is that tying ourselves to that tech wouldn't be acceptable to my client, i.e we can't force people to use Remote Play Together
I wouldn't do that either, that's fair
Also, even the actual Splitscreen is a performance killer
What I need to do is subclass the GameViewport class that lays out the split screen, override the function that lays out the screen from ULocalPlayers, and find a way to feed it the viewpoint of each player.
Yeah that's probably a good approach. And I understand your issue with LocalPlayer.
Right, I think it's just that the further I dive into the functions that make it work, the more classes are required to get it working, all of which come back to ULocalPlayer
If memory serves
I kinda wiped it after I finished today lol.
Probably still worth having it written out here. Who knows what mad-person reads this and actually solved it haha
Yeah, like I said, I wasn't trying to be rude to that person, I think I was just tunnel-visioned at the moment. Sorry @woven basin π’
I wasn't implying that you were rude. Just making sure you open yourself up to help with the actual problem. :P
I wonder if one can delegate the data away from ULocalPlayer into APlayerState or similar
As you said, GameViewportClient (which you can override without engine changes), has LayoutPlayers, which could be used to get a list of PlayerStates instead of ULocalPlayer.
I have to look again, but I was almost sure it was getting or using data from ULocalPlayer and passing it further away from abstraction
Or that there was something deeper in that code that made me think I have to use ULocalPlayer
Yeah so it fells the data in the ULocalPlayer and later uses that in the SGameLayerManager
That is indeed very local driven
I wonder if one can just bypass the local functions and simply add ones-own
They call UpdateLayout when local players are added and removed. Simple enough to call that for non-local players (or a custom version)
Yeah we're about on the same wavelength right now, I just have to keep trucking away at it.
UpdateLayout then calls AddOrUpdatePlayerLayers with an array of GamePlayers
That could be changed to an Array of PlayerStates in a custom function.
GamePlayers is ULocalPlayer
Is the function that gets it virtual?
No, but my current thought is to just put a second solution in parallel to the local stuff
So this was my original idea, just to pass the viewpoint to the player state
Right.
The actually tricky part is the FPlayerLayer stuff
And SPlayerLayer I think
I wonder if that's even needed
Ah yeah it is
Or wait
I think that might only be for UI
Yeah it's a mess and I feel weird charging so much an hour to this dude lol
Yeah - the idea is you know what type the data is at the start and end point, but the stuff in the middle doesn't care
Could I put Structs into it that have a common parent, and then break to the parent struct?
Yeah that would work
The way I implemented the break for the PR should traverse the struct hierarchy, so it's checking IsChildOf rather than IsA
@surreal schooner Random.. stupid idea...
Spawn a normal Splitscreen Player and map the other Client to it?
Basically let the Splitscreen Player spectate the other one
That's what I was thinking
But the ULocalPlayer has a validity check that looks for a player controller
So unless I can dummy that and it still all works
No dice.
But does it matter that you have an additional PC?
oh wait
"Spectate the other one" hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
It's kinda a work around, but I think this mgiht be a lot simpler to create
If that's going to be a solution let me know for my own sanity .D
It's going to be an attempted solution but you've caught me after the workday lol
No worries hehe
If we do get it working that way in x weeks I will be sure to ping you
All good. As Exi said, sometimes people come into the channel with strange requests, so having a small amount of background means we can help. Not everyone can be trusted with a loaded gun ππ
I can finally host, find and join session via steam, but it only works when Steam download region is set to exactly the same
country-City. What can you do to make the session searches more global, so I could find session from all over europe?
I'm using listen server
You'll need to look at the distance filter
I would bet very strongly that it's not exposed in the Steam OSS plugin to gamecode, so you may need to mod the OSS - but nothing new there
Oh, so can I just subclass OSS, or do I have to switch to src build of the engine?
Easiest option is copy the plugin out of the engine into your project directory, and modify it there
But if you need to make a change to the base OSS, then custom engine it is
Unless you also want every OSS plugin in your project
Not many folks seem to know but if you copy and engine plugin to your project, that one will be loaded instead. It only breaks when another plugin has a dependency on it
Interesting, thanks a lot
But I have trigger discipline, I promise!
Hey, quick theoretical question. If you move from a main menu map or a lobby with a controller of type, let's say AMainMenuController and you ClientTravel into a map whose gamemode is set up for a controller of type AGameController, and both of them inherit from APlayerController as siblings, how does client travel resolve the difference in classes?
Does it not care? Does it just serialize the controller and fkn send it, even if some data is sliced?
You get a new controller and AGameModeBase::SwapPlayerControllers is called
Pretty sure you always get a new controller anyway
See AGameModeBase::HandleSeamlessTravelPlayer
That's also what virtual void SeamlessTravelTo(class APlayerController* NewPC); and virtual void SeamlessTravelFrom(class APlayerController* OldPC); are for, to do a handover
So if you wanted to handle any variables inside of the first controller that needed to persist in the second controller, even if they're of different classes, you would override this?
You'd have to do some kind of handover yes, I'm pretty sure nothing persists from controllers - you always get a new one
Right so like you said, just hand it off. It's not like the GameInstance.
right
Can we do multiplayer in VR? If yes, any guides?
Should be the same as regular mutliplayer
No? Cause your character wont load in the VR. As controllers are different for Oculus?
its just like a FPS isnt it?
(first on my screen) π
yep π
I'm in Australia - so all our clocks are forward apparently π
VR is just a display mode. Whether yourcharacter is visible or not is purely a game design detail, does not impact multiplayer in any way at all
and Oculus is just a different input controller right? like gamepad, keyboard, mouse etc
I would expect your VR game to work without VR if you want to have normal sales
From a business POV
So you can simply develop a regular MP title, keeping in mind the VR support
It's not like your developers are going to spend all day with a VR headset, you will test it on a screen
not if Mark Zuckerberg gets his way - we'll all be living in the metaverse wearing occulus all day long π
oh yeah - i totally dont think it will happen either π (and nor do I want it to) - but he's trying, thats for sure...
We might all live in a metaverse, but we'll be doing it on normal screens
I have two perfectly fine legs right there
Ahhhh alright, ill give that a shot then. Its a demo scene which I loaded in a VR Template. Added nav mesh and a pawn. Do i need to load the map in a First Person Template? Sorry newbie at UE
its probably best to focus on the single player bit and get yourself comfortable there, then branch out into the multiplayer side
Find yourself a multiplayer tutorial, a VR tutorial, get both up and running and then take a close look at how you would enable VR features in your multiplayer prototype
I would certainly suggest to avoid either while beginning
But hey
The VR part is working completely fine, just the multiplayer was an issue. And i was told Multiplayer for VR is different. Ahhh my boss wants VR multiplayer Demo π© so gotta do it somehow
Multiplayer is a project-defining feature that essentially bars you from physics, vehicles, non-character moving parts unless you're going to do a shitload more work on them
Obviously it's very doable but depending on the game it can be way, way harder
Its not a functional Game, just a normal room wherin you can move around in VR and interact with few objects or guns.
so i should just start with creating a normal scene with multiplayer and then it should work the same in VR, yes?π
basically - yes
It's all anyone's hiring for now, though :/
There are a lot of multiplayer clients, that is true
Usually with quite the high (probably not aware of) requirements in terms of skill level
This is clearly why Cedric is swimming in money π
Hello Guys! Where can i reduce this anim tickrate for multiplayer. I need that if the othe rplayer is further away it doesnt tick 1 so optimized a lower value
its bp only project
You will do it soonβ’οΈ 
See how is AnimUpdateTickRate is calculated. Maybe you need to override that one.
You get a completely persistent PC if you seamless travel and the old and new PC classes are the same π
Anyone tried out the iris stuff?
Yeah figured that would be the case
tbh I've never done a PC->PC handover
If I have a replicated variable called Var1 ,which I change its value using an RPC, in the OnRep_Var1 function can I change another replicated variable? or do I necessarily have to call another rpc to change that variable?
Only ever really have a menu and a game controller at most in a project
I did last night, things are going overwhelmingly well.
Don't change properties with RPCs - ever
Yeah I find it strange to have it to persist, considering you always have different classes anyway
where should I change the values of the replicated variables?
You change them server-side only during regular game code
I think they meant server RPC and changed it there
Yeah it's hard to work out what the question is asking exactly..
Not sure what the OnRep part is asking in this case
I guess
ServerRPC -> ChangeVar1 -> OnRep_Var1 -> ChangeVar2
I have a timer on server and I would like to start/stop it on server and have client approximately in sync. Since the start/stop (aka restart) can happen in 1 tick, I cannot use something like bool bIsTimerRunning. So I came up with rolling uint8 bTimerState which increases by 1 each time it is stopped/started and rounded up to even or odd number. (even indicates running and odd indicates not running).
It works, but leaves bad taste in my mouth after coding it. Is there any more elegant solution?
Yeah, if ChangeVar2 is also replicated - dis bad
If I have a replicated variable called Var1 ,which I change its value using an RPC(SERVER), in the OnRep_Var1 function can I change another replicated variable? or do I necessarily have to call another rpc to change that variable?
Ints to ensure replication are totally fine @split siren
Another RPC
But as James said properties are changed on server @devout dagger
OnRep is called on client, so you definitely don't want to change it there
They are used in the engine too to ensure that stuff is replicating @split siren
You should never change replicated variables client-side unless you know what you're doing (usually very special cases, like prediction)
oh thank you understand
Unless you are predicting you mean π
Acutally, adjusting a replicated variable on client side is usually a shitshow
Thanks for the sanity check, I have seen it couple of times here and there, but somehow it felt like a dirty workaround.
If you do prediction you usally don't even replicate the var
Na it's fine. especially with quick changing booleans it makes sense
There is a C++ override for the RepNotify to ALWAYS call
They say they want it to "just work" along with a few other things a big one being reduced costs you have any input on this? also you know of any resources there seems to be a lack of any though it is still experimental
But in BPs you might be f'd
Cause that's a property changed notifier and true -> true is not changed :D
BP networking π«
Both works, BP networking might shoot you
The absolute genius of Epic choosing two totally different methods for C++ vs BP
Also James, small offtopic question, WTF is going on with the Achievements in HLL
Because that's not going to confuse people at all
Did you peeps have too much free time and fun haha
Oh lol.. we're adding new ones for the next update
!!!!!!!!!!!
I have nothing but that initial PR they did. So it helps to know where to look in source. I'm still not far deep in it to explain the "just work" part.
But we don't want people to know what they are, but they can find out anyway by just looking at the metadata.. nobody listens to me π
Fair I'll just wait til it moves out of experimental tbh
xD you went as far as not even providing images. Not even one with a ? or so
Looks a bit broken
But yeah, I figured. Meta Data it is π΅οΈ
it's your fault most definitely your fault I drove my tank up a tree and got stuck defending it with a pistol and a blowtorch for 10 minutes
While we have such talent in the chat atm, just going to leave this here. https://www.youtube.com/watch?v=zp4TlfZ5YCI
The Guided Hacking UE4 Dumper is finally here! Download link below.
Support us on GH: https://guidedhacking.com/register/
Support us on Patreon: https://patreon.com/guidedhacking
Support us on YT: https://www.youtube.com/channel/UCCMi6F5Ac3kQDfffWXQGZDw/join
Download the GH Unreal Engine Dumper here:
https://guidedhacking.com/resources/gh-unre...
Wife has a lot of fun playing it. So you must be doing something right haha
It honestly raises more questions than it answers.. IDK why we don't just prefix them with [Update 13] or something π
Glad someone is.. it's weird working on a game for like 5+ years that doesn't appeal to you at all π
Lovely
i wish more games adopted multiple people in one tank mechanics it's so much fun
honestly the only thing in that game I enjoy
Not saying it is good or bad, just wanted to give you heads up about the tools that exist
Wondering how hard would it be to write an obfuscator.
I mean, this was all possible before. Just makes it a bit easier.
It won't change anything about online cheating.
Singleplayer cheating might be easier then for the random person who wants to cheat.
And maybe some TAS can hook into that, idk
Yeah I've seen a lot of these tools already tbh
The real solution to hacking is making it illegal
save online gaming
by imprisoning the losers
π‘
I'm pretty sure it can only gather "reflected" data types though
Which in UE, is most of it tbf
Oh 100%, there was ton of tools over the years, just this one feels very "script-kiddie" friendly
Large part of the reason the engine is so easily hackable is because of reflection, and it being notquite open-source
That "Memory View" is a good example of why you literally shouldn't trust a damn thing the client machine sends to you (the server)
"Just gonna change this float before UE sends it to the server" - uh oh
Honestly, if you only send input to the server, you are already quite far with the cheat protection
Never trust a client! #1 Rule of Multiplayer
defo
I don't think we have anything else that we send to the server
Very prediction-heavy though
(... reminds me I still have to solve GAS shit)
HLL is still exploitable for some things sadly, but some of it is just too mega to workaround
Did our best where it made sense though
I mean, the games themselves can clarify what is okay and what not and revoke your license if you cheat.
aka ban you
If you want to re-buy a game very time, sure
And iirc there were some peeps who even got busted big time for selling cheats
DW, all the players will blame you, the developer, for being "lazy" anyway
Well, aren't you?
Then they'll buy a cheat "just to try it" and fuel the market
Thus the cycle doth continue...
LaZy DeVs
Cheaters be Cheaters
hackers gonna hax
Doesn't matter if Singleplayer, Multiplayer or Chess
yo tbf some of the developers are kinda lazy
I've ranted about this, openly to myself, in my house sometimes. Only the cat is listening
like ain't no excuse why people are flying like that
shouting at the walls
That cat has heard things haha
I do wonder if it's that or an experience thing. Still baffles me that a game like Division 2 was so easily hackable when it launched, with stuff that could have been so easily preventable
I would assume it's a mix of a lot of things
yeah defo
Deadlines, expectations, experience
Unless it is a small game with very limited resources, the management and development workflow should have those into account
It's also a lot of "Is this actually affecting what we earn with the product?"
you know a real weird one is Roblox is like so server authoritative lots of the hacking has disappeared
And if you have companies with the experience of "No, it doesn't, it's the loud minority that screams about the minority of cheaters." then you gonna get GTA 5 and Destiny 2
I really wonder how far did Valve get with detecting aim/walls with Machine Learning... It was a big thing like 2 years ago but no update since
Devs that need to do features in half the time they need, won't be able to worry about hack prevention
They also don't have to deal with it tbh
A good use-case for ML I'd say
Most if it will clash against the wall of Community Mods
true
It's those false-positives that get you though
where someone gets banned for legitimately doing nothing wrong and `gitting gud"
lol yeah til they make their cheats using datasets of real players just tuning it to be the best
lmao
always going to be some heuristic involved, and you've got to lean towards the "light" side to stop actual humans getting rekt
Bigger companies mostly invest in preventing players from gaining without the company gaining.
But the easy stuff like checking a player is firing a wep at a gajjilion rounds a second or from the other side of the map is a good start π
E.g. if there are a lot of botters
Or when WoW players boost others so blizz can't sell 60β¬ boosts
yeah agreed tbh
The question is, will the number of false positives be greater than whatever system they have implemented atm... Same argument as for self driving cars
that's why hacking should be illegal
I'll become president and solve all issues
we should execute them
set an example
oy oy oy

The real solution to cheating is deleting all forms of games
obviously this is the easiest answer to the problem
as an indie dev - if people start hacking my game to cheat in multiplayer (non-pvp), it means I've sold at least 2 copies, and that is more than I've sold now, so I'll take the win...
refunded on steam lost money on server costs
I tried stadia once on destiny 2
That's the trick. You get hired by people to make their game and then not have to worry about it selling or not.
it was so terrible
Only shitty if the game goes through the roof
write the core systems so terribly that no one can work on it besides you
Free exposure I guess 
#sourcetrustmebro
didnt find anywhere where to change that, can it be binded to lods`?
Did you check the function itself in c++?
me? no its blueprint only....yea
I mean I know you're joking but some people take that seriously π
Seriously though if you're one of the first engineers on a new project and you have the political capital to ... push for documentation.
I'm not sure how this advice goes for places like the US where job security is not part of the dictionary, but new devs will love ya! π
UMG buttons and widgets don't fire on click, on release, or on pressed events on android multiplayer, but is works fine on PC multiplayer, however, for a reason, this problem is only on android multiplayer.
(or its fire after pressing the button repeatedly)
Does someone have a clue?
Correct, set bNetLoadOnClient to false to if you don't want them to
If you're talking WorldPartition I have no clue, I don't use it
It is
Hey guys - question. When the server sets an input vector for a UCharacterMovementComponent but the owning connection has been interrupted, would the server inputs be ignored? I'm trying to understand why my movement components are acting wacky
i.e. ignore server inputs
Gotta be honest. As an American living in Europe and working for a European company. That statement really hits the spot. π
Eh, the input vector is coming from client only
In form of acceleration fwiw
@surreal schooner Caught up on what I missed last night. You could always try and join Hazelight's discord and ask how they achieved the effect you're going for in A Way Out.
Wondering what the new theoretical maximum player count on a standard unreal server will be with Iris. I can't make sense of the source code but someone told me there is some kind of authorization check that happens for every client in the tick for the default system but not in Iris?
I would like to see what this draws, what do I have to do to be able to see what this line of code is drawing?
Question, I have a weapon I want to pick up. When I pick it up and equip it, its visual for all clients except the listenserver.
If I during PIE check the BP_Rifle visible is set to true, and if I flip it it dissapears for the clients, but nothing seems to happen at all for the listen server. Any clue as to why this happens?
Because there is an OnRep being called which you need to call it manually on server
OnRep get called only for clients in C++
Is something wrong with the Join Session node? It always fails. I've been able to join LAN sessions on other apps (for example, Minecraft) if that's what you mean. If you're talking about Unreal, this is my first time attempting to do this
So you end up changing the property tied to the OnRep and next line you call the OnRep
How can I ensure they are different processes? I've enabled play standalone in the net mode
I would assume you didn't fully setup your project
Standalone in netmode only means that they are not connected
Fully standalone would be, for example, by rightclicking your UPROJECT file and clicking Launch Game twice
But to use LAN you don't need that
You need to set the SubsystemNULL as default in your ini
I don't have a project at hand to show you sadly
No worries
already sent you the CVARs u need to set to get server side streaming working
at an actor granularity and for preplaced objects bNetLoadOnClient can help you
also you can make something to opt out from world parti
setting "is spatially loaded" to false
They force you to use Steam's Play Together Remote.
Aren't you just trying to get the camera though?
Because it's also on Console and I find it hard to believe that they would force it there too π
This isn't working :(
Hi everyone, I have a dedicated server, i want to allow users to change map after they login. I tried with playercontroller ClientTravel, but players cannot see each other. Can anyone help?
I can't get this code to work on any clients, but it works for the server.
Does anyone have a clue to why?
This is in an actor bp and it is set to replicate
You aren't doing the interact call on server?
You need something like
Input -> Select UInteract to interact with -> Run On Server Event -> Call the interact
OR
Input -> Run On Server Event -> Select UInteract to interact with -> Call the interact
Well the actor is obviously not owned by client so the server RPC will be dropped
As long as ClientTravel is specifying the same server, clients should be traveling to the same server
@ashen pebbleYou need a Client -> Server RPC somewhere in the logic chain between the input and calling the event on that interaction component. Either in the pawn or playercontroller, whichever makes the most sense. Pawn probably.
@fathom aspen ok thanks, I'll do further investigations.
This worked! I set the owner to whichever player overlaps the actor and it now works
FWIW you are missing the next channel #online-subsystems
How to spown players in deffrant playerstart?
I placed player starts into the level then added a tag for each one so I can designate separate team respawn areas. Then I use get all actors of class (player starts) and can split them based on their tag. Then its just a matter of getting the location of a player start (can be randomly selected from the list, given the specific tag) and used as the location when spawning in a new character.
Is Iris only available when compiling the engine from source?
I tried to force the usage by overriding the target editor options (bOverrideBuildEnvironment) and adding a bUseIris = true, in addition to adding SetupIrisSupport(Target) in the modules, but it didn't work, it gives linking errors. And there is no IrisCore in the Intermediate folder of the Engine. π
Do I need to add anything else or is it really not available yet in the released UE5.1 ver.?
Gamemode has functions you can override
I also tried in the binary but to no avail.
I don't think you can use it in the binary just yet.
Are there any docs to Iris yet? It seems like a no-brainer to use when it's ready
None. Don't worry it's not ready yet xD
Epic will flood you with docs when it is. Though it's really sad that it's still hard to get it working.
Yeah, looking forward to reading what they did to optimise networking. Though I finally wrapped my head around Replication graph and Fast Paths, hope at least some of it is transferable
Is Iris going to replace the current replication under the hood (like Chaos did with Physx) or is more like an alternate system?
mmm Fast Paths? need to look into those
Pretty sure it will, but not any time soon. They are pushing for too many new systems that will end-up replacing old ones. Online Services instead of Online Subsystems for example.
Brew a really big coffee if you decide to dive in, it's one hell of a ride
Much nastier to implement than the other I forgot what it's called path.
You can write blog posts on the RG until Epic releases their docs on Iris
It's honestly hard to keep up lol
If I dare take a break my knowledge is then outdated
As soon as I put my head into mastering one system, another 3 drop
Yup
One must be a multi-tasker with their systems π
Interesting. I doubt it really helps my project bcs we use replication in a very specific way but who knows
lol
the npm syndrome
From what we know, does Iris change much of the code though? I.e. Iβm starting to write down systems for MP, such as replication and TPCs, are they going to need to be entirely rewritten for Iris?
Nice. Makes sense, they have tried to mantain stuff as compatible as possible with UE5
I'm not sure I will know the answer, so it's obviously not #multiplayer
My guesses were true in a sense: #multiplayer message 
is there any good way to test huge amount of non real players to test how many players can server handle? i'm thinking of making ai that run on server as same as players to check what requirments i need for server
Whatever solution you end up with is going to be cloud-oriented
This is the answer I got last time I asked: #cpp message
But I would be willing to hear other ways too
How do I decrease the "rate" of replication of a variable, or rather to only replicate it when I set it through a function?
I'm using an Alpha to dictate movement of an Actor and it's on tick. But I only want the listen server to replicate it to clients when we have to "reset" the alpha to 0.
So that I can get some good prediction even on bad connections
Is character movement supposed to be replicated by default or do we have to manually set up replication?
There is no such a thing as "rate of replication to a variable".
You can use the Push Model and choose when you want to mark the property as dirty
Only then the property will actually replicate
No you don't touch anything related to that. Everything is setup for you. And I don't think it's replicated anymore. They moved all the replication part to the character.
Hmm, alright. That's what I was seeing when I looked it up as well, but I'm running into an issue where I cannot move the character when I increase the number of players to 2 or more
Then you have changed something you shouldn't have to (not necessarily CMC related)
The character moves around fine when I have it set to only one player. But with more than one, they don't actually move. The character seems able to rotate and like it picks up the input for a second, but doesn't go forward or anything. I can open my UI, move the camera, etc
just can't actually move
Are you editing the CMC?
No, I haven't messed with it
Look into the logs
You will definitely see something related to you not be able to move
You maybe able to simulate connections with Gauntlet tests. Try looking into that.
Wow the whole automation part is something I have missed
Checking, but the only errors I got in the error window that pops up were about some failed IK system I had tried to set up a while back in the animgraph, just deleted that entirely and tried again - this time no errors in the window
I'm scrolling through the actual output log now though
I have a yellow warning message in there that says LogOnlineSession: Warning: OSS: No game present to join for session (GameSession)
No that's not related
Got that working! Had to enable this in DefaultEngine.ini but it worked!
Hmm. I see nothing :/
thanks. i'll take a look and study this more
The only thing that looks remotely like an error in the log is "LogSubsystemCollection: Failed to initialize subsystem dependency (WorldPartitionSubsystem)"
Ah I just switched the character to the default third person template's character and that one moves though, so it's definitely related to my custom character class
Was gonna say, if you open up a new UE template, things will work as supposed, so it's definitely custom game code related.
It's funny, it only happens once the second character spawns in
There's a brief second where I can start to move the character, then the second player character spawns in and I can't move it
Probably because you used GetPlayerXXX(0) functions
ohshit
you might be right
I have GetPlayerController blah blah in some of my cpp classes
Butbutbut they are evil
That will basically speak to only the first connection
Sadly the network compendium doesn't really clearly address this (and almost makes it sound like it should work?)
What's the preferred way to get a player's character in multiplayer?
Depends in which context
What class?
let me see if I can find an example
I have every case where I used that marked with a //TODO to make it mp friendly, since I knew it would eventually become a problem
just didn't predict this specific problem lol
Ah you're converting, RIP
yeah I am
Ha, I'm not that deep into the project yet. There's a lot of stuff I've left for when I got to learning replication knowing that it would be easier to build replicated from the start. I just had a lot of other stuff I needed to learn first before I tackled networking
Alright, will read it, thanks for the link
@fathom aspen alright so it's not looking like I have as many of these getplayercontroller statements as I thought I did tbh, but I did find one that's literally just grabbing the playercontroller reference on begin play
I mean, if you just want a player's character to grab a reference to its own controller, what's the MP friendly way to do that?
GetController
Is one way
Though you have to understand that a function like BeginPlay fires on both server and client
What Brand is your computer?π΅
So sometimes you want to filter execution and you use HasAuthority @frail skiff
But anyways, you don't need to keep a reference in the header
If that's a local one then it's fine
oh, huh
I did not realize that
That is somehow mentioned in that doc
You can check an Actor's network role to see if it is ROLE_Authority or not. This is a useful method for filtering execution in functions that activate on both server and client.
nice, going to read that doc just as soon as I hunt down any other getplayercontroller usages and see if that unbreaks movement
Hmm. I'm not sure if GetPlayerCharacter is actually the culprit because I think I actually only had it 2 classes, one of which isn't in the level I'm testing on and the other I changed to GetController()
I just went through my whole codebase and Ctrl-F'd for "GetPlayer," the only instances were in those 2 classes

