#multiplayer
1 messages Β· Page 52 of 1
π
I've got a ton of stuff I want to open-source when I have the time
But I'm working 80h weeks atm ... and just don't have the time π¦
Something something startup life
I think I also just got "old" and just can't work 40+ hours and then also spent my free time on making resources, which takes weeks either way
I'm too afraid to burn out and also kinda want to have time to live :D
Doesn't surprise me
Well I have been through burnout and have been left with severe permanent tinnitus, so I know my limits now
:d
Ah, says the person who just said they are working 80+ hours a week. :D *jk
"Burned out from 120+ hours of work per week"
You are joking, but that's what I was doing
I had 4h sleep between days during the week, collapsed on my bed on Sundays
that feels very βwe want a rock star that can work in our fast paced environmentβ
OOF
And then it was like a truck going at 120kmh into a wall, my body just stopped
"We offer dynamic work hours" aka "You can choose during which 4 hours to sleep."
i have no idea how people function on less than 9h of sleep per day
Although, I probably said the same to employees during hiring process >.>
nap during compilation and meetings
i mean, i did that like 15 years ago and i just slept in class so...
Idk, the only people I know of that do that either nap during the day or crash on the weekends
i just need a shock bracelet that zaps me awake when compilation finishes
life is not about just making games, sometimes you have to play them...
So this partially works. It stops the "push away from each other" stuff, but the characters aren't able to walk anymore as they are now stuck. Hmpf
Maybe I just have to return true instead of false, indicating it was resolved
NOPE, still stuck
Hi,
We're currently running into an issue where a replicated component is not replicating a TArray of vectors to new clients. The array only gets replicated when a new entry has been added, while the client is connected, they don't get the updates from the array when they join.
However, the new entry is replicating correctly to clients, but all the old indices that were added before the client has joined are 0,0,0.
meanwhile me writing collision code in Mass and not caring about CMC while sporting 120FPS 
So, the reason this doesn't work is that in a lot of other places, the Characters are still blocking each other. E.g. when finding the floor it still traces the other character and stuff like that.
Setting them to IgnoreWhenMoving obviously works, but I also noticed multiple other issues, like "What if they are ignored due to something else?" and even if I keep a custom list etc., I still have issues like "What if an Ability causes a player to land in another? I don't have a way to identify those targets ahead of time (player could be running there while the other is still in the air), so I can't really set them to IgnoreWhileMoving.
Means i would need to make them only overlap pawns during that time and then figure out afterwards if they are overlapping someone and then ignore them while moving.
What an annoying feature
You'd need to share some code
{
RemovedInstances.Add(InstanceIndex);
OnRep_RemovedInstances();
}```
This is literally all of it. We just add to the array.
On the server
And where is that code located?
In the component
Which one
that we're replicating
Just overall a bit more info would really help narrowing down what could cause this :P
What Actor, what Component, how is the Variable Declared, when is this being called. etc.
It's on a replicated actor that is set to always relevant. It's being called when you interact with foliage to remove a HISM instance to replace with an actor.
TArray<FInstanceInfo> RemovedInstances;```
```void UOGHierarchicalInstancedStaticMeshComponent::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(ThisClass, RemovedInstances);
}```
if (GetOwner()->HasAuthority())
{
RemovedInstances.Add(InstanceIndex);
OnRep_RemovedInstances();
}```
So this is getting called on the server, when we replace the instance with an actor. So the client can remove the HISM too.
The HISM component is what is replicating this array
Yes in a minute, currently not at the desk. Could it be something that the component is stably named? Or maybe not since itβs replicating as it should after the client has joined
If you think the Component itself is at fault, then I would suggest moving the Array to the Actor and checking if that makes a difference
Just for testing of course
Since you say it's stably named, I assume you runtime spawn this on Server?
Yes, we do. Since itβs a procedural map we are doing it that way. So itβs just determined by a seed
That we replicate
But yea, once you play, the array replicated as it should. Just the initial update of old indices that are screwed up
But Iβm gonna try put the same type of array in the actor to test it first
If that works, you could alter your Struct to contain a pointer to the Comp it is targeting to make the entry unique again
But yeah, less than ideal
Yea, unfortunately it replicates as it should in the actor.
I asked in UDN aswell, maybe can get some clarification π
this might be a multiplayer problem idk . it doesnt print hello
Overall it sounds like the Server thinks the Client already has those values, so it's only sending the new num + changed element
Could be a side-effect of whatever procedural system you have
what's the best way to implement input pause while waiting for the race to start?
We're just spawning HISM components π
I see the GameMode already has something similar but I can't find how it works exactly
Is the array too large by the time a new client joins?
Just 2 indices when I'm testing
AGameMode::StartMatch seems to be doing nothing?
And is this an actor that is in the world at startup time too?
No, we're generating as we move around the world. They're all stably named with the chunk ID they're in
Yeah ok that's what I meant RE proceduralism
Yea, right now I'm out of ideas π
What can cause it
Because the client never receives updates when they join until a new index has been added
Can't think of anything off the top of my head, I can't see any reson why server wouldn't send hose values - so my guess would be that the client receives them before it's spawned the object
And client has no object to mapped the data too
Sometime later it gets the update about the new element
But it would be worth figuring out if the Server is even sending them first
from FindPlayerStart lol :
AActor* BestStart = ChoosePlayerStart(Player);
if (BestStart == nullptr)
{
// No player start found
UE_LOG(LogGameMode, Log, TEXT("FindPlayerStart: PATHS NOT DEFINED or NO PLAYERSTART with positive rating"));
// This is a bit odd, but there was a complex chunk of code that in the end always resulted in this, so we may as well just
// short cut it down to this. Basically we are saying spawn at 0,0,0 if we didn't find a proper player start
BestStart = World->GetWorldSettings();
}
return BestStart;```
// This is a bit odd, but there was a complex chunk of code that in the end always resulted in this, so we may as well just
// short cut it down to this. Basically we are saying spawn at 0,0,0 if we didn't find a proper player start
The object being stably named means the network system will just assume the object can be reached via it's outer (which is probably the level)
How do I find that out? I'm not that knowledgeable in this type of debugging of the networking system.
Just check the logs first to see if there's anything untoward (turning on some verbose logging may help also). You could either a) run a network profile and see what is outgoing or b) drop a breakpoint somewhere in UReplicationDriver::ServerReplicateActors to see what it's sending
Probably an easier way but can't think of it atm
Oh sorry UNetDriver::ServerReplicateActors is the one you want
If the server actually is sending the data, it's probably a race condition between server sending it and client spawning the object to receive it.
But because it's stably-named (possibly fully stably named) - the client won't do anything about it I imagine
I'll check these out, thank you! π
when server looks down it looks down on clients screen but when client looks down it doesnt show up on servers screen
is there a fix to it
Replicate look rotation
Send the client's rotation to server
c++ or bp
I had this in an old character class i did ages ago, not sure if its the 'correct' way of doing it but it worked for me
I was also doing this in the animbp
again, old class no idea if its the correct way to do it lmao
iirc eXi, UT implements this in some shape I believe
holy crap, the syndrome of not scrolling down -
I always scroll down at least a little bit to see if something was answered
oh i needed help with the launch character. i have this issue where the first client launches fine, but when running on a server the 2nd client does the animation but the launch character is done on the first client. is there a way to fix it. im doing the blueprints in a GAS ability.
Hm any more precise pointers?
I have a replication question for you gurus that I cant seem to wrap my head around. I have a pickup that I want to display a UMG widget on. But I only want it to be visible for the 'owner' of the object. I am a bit confused, but this will only work on the server, the owning client (and other clients) will not see it. What am I missing
*screenshot of pickup BP
I currently ended up on just having the Character in question be marked as Overlap for Pawns until they don't overlap any other Paw, and that's it. Not ideal cause that means they could walk through a series of Players before collision is restored.
What defines the owner?
Im setting it as the overlapping actor using 'Set Owner'
Cause if it's just the overlap then all you have to do is cast the OtherActor to your Character and check if it's locally controlled
No need for setting ownership or rpcs
oh
Ownership will also not work if someone else overlaps afterwards. So that would be flawed anyway
Why not just make it visible for the overlapping pawn?
Overlap -> Cast to your pawn class -> is locally controlled? -> show widget
That might break down for AIControlled pawns on the server if it's listen server but that'll get you closer
The accurate test might be
Overlap -> Cast to Pawn or YourPawn -> Get controller -> is equal to Player0's Controller? -> Show widget
Unless I'm blind that's what Cedric said: #multiplayer message
ah yup im the blind one
Not sure if an AI controlled pawn would trigger that, not sure if they pass IsLocallyControlled or not on server
I guess AI are locally controlled on server
But I didn't catch up with the full context and the OP's goal
Hi, anyone have any experience with making a main menu party system?
I'm trying to work on a proper party system that allows players to connect to a 'party host' while on the main menu and then the party host can find a session which all members of the party join (the party host in this scenario isn't the host of the session that they all join however), once the session is over I want it to take the party host and all party members back to the main menu again with all party members staying connected
I've realised you cant do this through hosting sessions but I've stumbled across some info pointing towards the OnlineBeaconHostObject & OnlineBeaconClient classes or the PartyBeaconHost & PartyBeaconClient classes OR there is also a IOnlinePartySystem interface
Info on all these is a bit sparse so first of all I'm wondering out of all of these, which is actually the correct way of doing it and secondly, can this only be achieved through c++? cause so far that's all I've seen
Hey eXi, speaking by memory, but I remember I wanted that same exact behaviour years ago and I ended up yoinking a fraction of UTs CMC in which they did this.
Can't remember where but if you boot UT you can try to put one character inside another and you'll notice something
Alright will have a look on Monday, thanks!
anyone have a good reference document on ability system replication?
trying to get an understanding of how it's handled underneath the hood for Autonomous vs. Simulated
or if you understand it well, lets talk
Question-
Is there a way to determine which player is the local one? Scenario, making an interaction component that needs to fire events for the local player only and not any of the replicated players. I figured I could check for local controller as the owner. But is there a better way? Perhaps checking the local role?
Pass through a reference to the player controller or character of the player that is making the interaction so you can make an multicast call back referencing their controller/character which you can then check if is locally controlled or run a server->client RPC on their player controller/character.
This is entirely local, no replication on this system. But it exists in a world that is replicated with other players. Would LocalRole=AutonomousProxy do it? Im ultimately trying to run code only on the player instance that is locally controlled.
If its local then you can still do the same just without the RPCs.
ie. You press "E" button all logic that stems from that will only execute on the local client until you happen to call a client -> server RPC.
Here let me rewrite this. So I have a component that is on all player characters. This component runs logic on tick. In a game with 4 players I dont want each of the 4 characters running this logic. Only the local player (the one doing the controlling) do I want to run this logic.
Why are these montages not working network replicated the other client cant see me do them?
Assuming the interaction component is part of the character, this may be the easiest way to do it. C++ would be similar I imagine.
Thank you
are RepNotifies called when an actor's value changes before the client joins the game?
I guess not
IsLocallyControlled though could be false negative on BeginPlay
A better wat to do this is to use NotifyControllerChanged if my memory is not failing me
If there is no client, who will they be fired to
I meant like if something changes in GameState before an actor finishes logging in they will have the new value directly but would that mean they would fire OnRep as soon as they receive it since the value isn't the same as the one constructed by default or would it ignore the fact that it changed?
where should i handle a loading screen in the transition map? on the level blueprint?
game instance I'm pretty sure
LogNetPackageMap: Warning: InternalLoadObject: Unable to resolve object. FullNetGUIDPath: [241]NOT_IN_CACHE
LogScript: Warning: UGameplayStatics::BeginSpawningActorFromClass: can not spawn an actor from a NULL class
spawning a replicated actor on the server does not spawn it on client ?
how would you do it? create a function in game instance to create the widget but from where would you call it?
I mean yeah you could make the function call in the game instance, and inside of the function is the logic to create the loading screen UI and whatever else, and then when the new level is ready, just call whatever function in the game instance to remove the loading screen
I've never done it before, but I'm pretty sure that's what Easy RPG kit does and it works just fine
It costing $350 and forces people to rate 5 stars in order to get access to their discord... So I assume it's the right way to do it 
I don't know if this is a question for this channel or for online subsystens. There's some overlap in my mind so let me know if I need to bring this to another channel please.
If I want to have earned or purchased cosmetic items for my characters, what's the most common way devs use to achieve this? Would I have like a data table of items for instance, that could be unlocked, and then a corresponding cloud variable that gets checked on the online platform after authentication? I'm having trouble finding any resources for learning this. Probably not using the right key words. Or if that's not clear, I guess I'm just wondering what the best practice is for securely storing player inventory and unlockable abilities/items in a multiplayer game?
net.AllowClientRemapCacheObject fix your caching problems after map travel ?
guys what I should use for character as replication movement? I know character CMC is default replicated but I dont see move when I use this Add actor local rotation should I use something else?
it rubberbands back wether its client, server or multicast
Uff, that's an old question
It might have?
ControlRotation usually
Does an AController and APlayerState get instantiated and replicated for every AI agent? I'm thinking this could get costly for swarms of AI controlled entities such as zombies or ambient wildlife.
AIControllers are server only, and it has a flag bWantsPlayerState for whether each controller should have its own player state
Is it safe to assume the PlayerState created in this case is also not replicated?
It's not safe. By default it's replicated and always relevant
Do controllers own the player states?
So does that mean the AI's PlayerState just replicates as a state not owned by any controller?
Replicates and owned by AIController, otherwise the β would be awkward
class AController* GetOwningController() const;```
Oh I see
I think I understand. Thanks for helping me with the knowledge gap!
When is the best time to take down a loading screen after connecting to a dedicated server and your character being spawned? Currently I tried taking it down on Begin Play of the character but it's too early and the map is frozen until eventually the player is standing and ready to move.
I was pondering something similar this week. What I was going to try (but havent yet) - bind to the tick component, and then on the second tick, it should mean all the cpu processing is done from the begin play and the first tick - so remove the loading screen and the bind.
no idea if thats good practice or not though - so /shrug
if that doesnt work - then it would imply that you are still replicating in assets from the server? In which case you'd need to track what is still left to bring across and poll until all state is done.
Playing as listen server, I have an actor not replicated. Why does it say Role = None on the client. Even when the actor is spawned in the level and not replicated. Shouldnt each instance be the authority over its own actor?
When spawned by the client its role = authority. (Non replicated actor).
When actor exists in a level its role = None on client (Non replicated actor).
Shouldnt non replicated actors not have to be NetLoadOnClient ?
interesting thanks afraye and maybe you're right about the server replicating some assets. Although I didn't tell it to replicate any of the world, except just spawn in the player
is it possible for one server to controll multiple levels. so id be able to run 1 dedi server and when people are "online" in that server i can then hop them between levels/areas without them needing to go to a different running server instance. unless obvs 1 instance didnt cut it in respect to performance.
or would it be that the server would have to also go between the levels with the player so impossible.
Hello, i try to start an EQS but if i'm not the authority i have this error :
Has anyone experienced this before?
Hey Meags take a look at Lyra, their loading screen is pretty neat and it has behavior to determine when to take it down.. basically it sumarises on all your client side properly initialized and the world loaded
IE: world completely loaded, Asc created, inventory fully replicated...
it's connected to cmc?
i tried add movement input but it was really weird movement hehe
ControlRotation is part of the Controller but there are accessors in Pawns/Characters for it. E.g. Add Control Pitch
The CMC uses the Control Rotation for its movement
Will it fix the issue if i create arrays for actor classes in game instance and then cast to game instance to retrieve the actor class i require spawning on the server ?
The issue that originally fixed was that actors weren't being spawned on the client side anymore.
As in, the actor spawned on the server didnt spawn after it was replicated cause the client failed to find the matching class or something like that
exactly
This was highly technical
Had nothing to do with GameInstance
GameInstance should never hold an array of actors to begin with
What issue exactly? Are you trying to save an actor to the GameInstance before traveling to a new map?
i'm not i have replicated actors, Character weapons to be more precise i have the server spawn them at runtime on the char
they do not require saving
So you spawn them freshly whenever you arrive at the new map?
I'm unsure what your GameInstance comment was about then
everytime a char respawns yes
was suggesting if it would fix the issue
LogNetPackageMap: Warning: InternalLoadObject: Unable to resolve object. FullNetGUIDPath: [241]NOT_IN_CACHE
LogScript: Warning: UGameplayStatics::BeginSpawningActorFromClass: can not spawn an actor from a NULL class
Does it spawn on the Server?
yes reliable
And randomly not on the client after traveling?
What engine version do you use?
latest ue4 my hand are tight to physiX
Hm
We had that issue in 4.26 or so on The Ascent
All the info about it is locked behind a private udn thread
Despite what I posted here
I assumed epic fixed it back then
engine bug ?
Yeah I think it was an engine bug
The console variable basically being a workaround
so having a controller set net.AllowClientRemapCacheObject 1 would fix the problem ?
It's been like 2 or so years since I dealt with it. I'm half sure it fixed it. But you want to just enable that by default on your game
could it be a .cpp fix i could apply to the engine miself ?
I don't know. If this was fixed by Epic in later versions/UE5 then yes, but it could be more involved than some CPP file. Also no idea where to find that specific commit if it exists
I can't see the UDN post anymore. That's property of Neon Giant
hey all im using Smooth sync to replicate my vehicles movement , and im not sure how to replicate the Z rotations of my wheels, ive turned on Comp Replicates on each wheel and all the other objects up the chain but nothing happens. im a bit new to networking in Unreal but in Unity id just sync the child objects transform same way but i dont see the option in Smooth sync for UE.
was it his one https://issues.unrealengine.com/issue/UE-95295
@weary mason yes that sounds pretty much like what I discovered back then
:D anything but fun to figure that out
TargetFix 5.0
Makes sense you still experience it
yeah il apply the fixes to my engine version,
π
thx if it weren't for you i would probably never had figure this one out
No worries. (:
thx I will check it I thought if I will have CMC any blueprint with set, add rotation/location etc for (SELF) so it means character WILL affect and be replicated but it seems that not like this
sorry just trying to figure out so replying second time
CMC requires AddMovementInput and AddControlPitch/Roll/Yaw
And then the character needs to have "Use control yaw" etc ticked
Or the CMC. One of the two should have those settings
super nice thanks I didn't know this where I can read little bit about? + do I have to tick flying in movement? because my plane is flying even it's ticked or not
so i am confused hrhe
i mean it's not falling maybe because I put gravity to 0
No idea. You will have to try around a bit yourself.
I havent messed around much with the CMC but you probably dont need the flying toggle if you arnt using gravity
also for this I got idea when I am trying to tell my plane that it should fly forward I have function called update position its calculating from gravity, speed etc position where it will be and I am using there Add Actor world location and this one is replicating its bit strange should it not work?
No I literally just told you that you need to use the AddMovementInput node
Yes I know but why then this add actor world offset works?and it's replicated
I was gonna say that but i didnt wanna be wrong if you want the vehicle to move at a specific speed youd change that in the CMC im pretty sure
without rpc
because youre just changing the position in the world , which should already work naturally if its replicated
the CMC just has its own fancy ways of apply movement with acceleration and other various things
for example in my game im using Add force to apply movement in a physics based scenario
It works but this is not predicted
It will just result in teleporting
You need to use the Movement node cause that supplies the CMC with an Acceleration that does all the rest for you
btw do you know anything about replicating component transforms? for my static mesh wheels im trying to figure out how to send the Z rotations over. im not sure if its as simple as ticking "comp replicate" but ive enabled it for the other comps in the hierarchy as well and nothing happens.
thanks
he is senior in ue multiplayer he knows almost everything but I would like to read book or anything about it I cant find meh
atleast about CMC
yea but add control roll for example needs pawn and I am in character so I cant connect skeletal mesh or anything and its affecting only my camera position weird
Laos you really need to learn the basics of Object Oriented Programming.
Pawn is the Parent class of Character. Child classes can inherit functions and variables. Character inherits the function you posted.
So this is totally fine and correct
Component Replicates usually just means that it can replicate in general. Not sure if scene components and their children automatically replicate their transform but I mean that's easy enough to try
yes I understand this one I know it looks like I Dont understand but then why if its set to self Its moving with my camera not with my skeletal mesh
i understand what is inheriting etc.....
Because your camera or its spring arm is probably set to use control rotation
Check the settings of them
yes it was it, now I propably need to tick same for skeletal mesh as its not moving
this should be ticked for character
right?
yea its working wow
woooooooooooooooooooooooooooow
wohohoho

movement is now working, roll, yaw,pitch last thing I need find out is flying forward
only thing i need also find out is why i cant turn 360degress + like around myself it will stop me at 180 degrees
in every direction
thats wrong
ah ok its stoping me only with pitch + roll
Is it possible to chage the world coordinate of persistant level after loading or during loading that?
That's the so called GimbalLock
Haven't had to deal with that in a while. I fell back to using Quaternions last time, but that's out of question in Blueprints
i need to set a a bool "firstWinOfTheDay" after the match is over, doing it on the gamemode wont work i assume since gamemode doesnt exist on the client, gameinstance is not replicated and i use a different gamemode for the lobby so i dont think i can use the player state or gamestate(not sure on this), where would the best place be to put that variable?
Hm, what is that variable for?
Because "firstWinOfTheDay" sounds heavily like a game feature that rewards you currency or so
ye it is
Is this a competitive game?
this makes total sense, but i would rather avoid that haha
Then don't make a competitive game
working with steam stuff is a pain
You need to store this away from the Player and somewhere persistent
That is also not a variable to put into steam
im using steam as my backend
Steam doesn't have a Database, neither can it execute code though
You mean via Steam Cloud?
isnt there a way to do this localy?
Sure but then people can cheat
From what I know, Steam can't handle this for you
Which is why users code their own or use expensive third party services
Like Playfab
and shit like that
ive used playfab, didnt like it, steam can store some stuff
its not as complete as playfab
i havent experimented much with save data in UE but i imagine you could just read the real date and check for a different date from the last and lazily call it that way
but at least is not a rest api
check firebase
Well
Steam's Stats aren't really meant as persistent user data
They are meant to store some int or float values to progress achievements
i dont think thats true, the steam docs specificly mention MMR if i remember correctly
they make a destinction for stats and achievements
That's fair
That's cause they provide matchmaking
But "first win of the day"
And "currency" stuff is not really a steam thing
And we originally talked about first win of the day and currency :<
well i could probably get away with a bool in the steam stats but i rly dont wanna make call to get just a bool, the worst that can happen is that instead of a player playing a game or 2 to get the reward they just login and get the reward
so going the unsafe route, where would be the best place to put that var?
yes u did mention currency haha
- Storing it on the Game Server means it'll be gone once that Server restarts after the match.
- Storing it on the Client means it can be (and will be) cheated
im going with lootboxed tho haha
And storing it as a SaveGame on the Game Server would mean you need some shared drive and control read/write
Yeah all I can tell you is that without a system like PlayFab, you will either have to live with cheating or not do this at all
Β―_(γ)_/Β―
No
so what are my options?
If you don't care about cheating, tell the Client that they won a Game
And save that locally in a SaveGame for them
i rly didnt want to add another class just for this fml
haha
ok you cant replicate in the gmaeinstance but you could call a RPC and get the game instance locally no?
throug the gameState
?
A Multicast in the GameState, yes
ye thats probably what im gonna do
Where do I get replicated input?
I need the server to see the input that the client player controller is making
Character->GetCharacterMovement()->GetLastInputVector() doesn't work
Character->GetLastMovementInputVector() doesn't replicate either
but it can be somehow changed?
to use full turn in every direction
also I noticed it is always using centered X Y Z what is not ideal even I am rolled left and push S or W I am moving in centered X not in that rolled X... Shiet
My logs have just vomited up the following message a bunch of times before not letting my clients in:
LogNet: Warning: PacketHandler isn't fully initialized and also didn't fully consume a packet! This will cause the net connection to try to send a packet before the initial packet sequence has been established. Ignoring.
What causes this and how can I fix it?
Temporary fix: removing OnlineSubsystemSteam.SteamAuthComponentModuleInterface from [PacketHandlerComponents] in DefaultEngine.ini got rid of the problem but I do need to root out the problem as that's a necessary component
do you use character movement component? then add movement input or use add control pitch/roll/yaw
Hey smart people. I'm wondering what the best practice is for securely storing player inventory and unlockable abilities/items in a multiplayer game? Would I have like a data table of items for instance, that could be unlocked, and then a corresponding cloud variable that gets checked on the online platform after authentication? I'm having trouble finding any resources for learning this. Probably not using the right key words when I search.
depends on how important is security
if its very important then u do it on the backend
if not u can store it wherever rly
the way steam tells you to do things is to have a "copy" of ur database in game and then u can check against it
its not really a copy u can just store whatever is nescessary
it is as you said mostly but it depends on your back end
the way i did it, i just keep a copy of the database and then fetch my inventory in the server
Right. That's what I meant by having a cloud variable. I would think I could store variables on steam that tells the game what the player has unlocked and then it could add something to an array from a data table to the character or something
you can use that yes, or you can use the inventory directly
you could probably even use achievements
Hmmm. Interesting idea. What do you mean the inventory? Steam Inventory? Haven't looked into it as I've been using EOS via the Redpoint interface.
have you played cs:go?
its exactly like that
im not sure if its even possible to make EOS work with steam inventory tho
with steam inventory u basicly give your players items that stay in the inventory and then u can use them in game by fetching ur players inventory
theres the added benefit of your players being able to sell those items on the community market and u get a share of that sale
When i make a session and leave and then try to create another session it doenst let me, i assume i have to destroy the previous one before making a new one is that correct?
if yes, would something like this cause problems?
Hey, i have a multiplayer project set up with session hosting and joining but the players arent visible to each other. I'm using the default ue4 pawn class. Replication options seem to be ticked for the pawns but still no luck, how do i fix this?
u mean like, they join the server but u cant see them?
are you using c++?
yeah
nope, all bps
Interesting. I'll look into that but I don't think that'll work for what I'm trying to do. That could be a nice side thing tied to achievements though.
hey, a lot of the unreal doc says that unreal networking is server authoritative
is there any way to write client-authoritative code regardless of that?
in my case, I want each player's inventory to be managed entirely client side (picking up items, equipping or unequipping gear, etc), but still networked so other players can at least see the content of each player's inventory
I wanna also be able to save that inventory when the player leaves but that's a whole other problem I imagine
also I know this means player can cheat by giving themselves whatever items they want but I'm fine with that
thanks
if I try to set a replicated variable client-side, won't it just ignore the changes by default? I could RPC that stuff to the server but it'd be less responsive I imagine
the usual flow is to RPCs to the server and then the server does the replication to all clients afaik
I don't think I have ever replicated from client to server directly, dunno if it's possible
the other problem with RPCs is that since I'm only replicating changes instead of the current state of the inventory, other players joining mid game wouldn't see player 1's inventory
yep, that's usually why replicated variables are used for stateful replication
I know, that's why I'd like to use variables
I'm thinking of using a replicated variable with Skip Owner and to have the owner both set it locally and RPC the change to the variable to the server
even if that works it's hella roundabout
really dislike the whole "enforced server authority" thing, completely disregards the real reason most peoples want to do client authoritative stuff in the first place
Hey all, has anyone here worked with large scale chaos replication? How viable is that in practice with default systems, or would I be better suited going the voxel route?
is it possible to make a blueprint event that runs both on the server and the client when called from the client? without making duplicates of the event
as in it tells the server to run the function server side, but also immediately runs it client side without waiting for the server to tell it to do so
Client calls a Run On Server event
That event then calls a multicast
Just call it locally
As long as the client owns the actor, it'll be fine.
Of course there may be some server corrections, depending on what you are doing.
yes but I want what I'm doing in that function to also happen on the server, at least partially
Then call it on the server as well
- Client calls run on server event
- run on server event calls the function
- Client also calls the function locally
how would I do that in a blueprint? as far as I can tell, events can only be called from client but run on server, or be called from server but run on client
Not at all
I don't see any way to call a single event and have it immediately run client side but also server side
I literally just told you
Wouldn't something like a button press immediately run client side?
Button as in UI, or button as in controller?
Input
That's what im saying lol
?
Have 2 functions
ya, all inputs happen locally so idk why hes struggling haha
so it's impossible to do in 1 function then?
Of course
okay, thanks
prolly not gonna be very clean but if there's no better way to do it
It makes sense once you understand the flow of communication
I suggest watching some replication videos
I know how the information flows, it's just annoying that there's no shorthand for "run function on client and server in 1 event"
isn't a run on server event called from a client automatically "1 event"
yes but won't it not run on the client?
but doesn't it run locally?
yea then u gotta relay the info back to client right
run on client and server, isnt that a multicast?
It is, but they want the function to be ran immediately locally
No, that's run on all clients and server
So multicast doesn't fit their desires
Ahh
multicast is telling the server to tell all clients to run a function
Sort of. As long as you don't mean "It's a client telling the server to.."
The server has to invoke those methods itself.
right, sorry
so we're in agreement this is the best way to do it then?
I'm pretty sure it doesn't even work
Well - for one, the server event is not a Run on Server
oh lmao I forgot to set it yeah
still doesn't work I think, the variable gets replicated to the client anyway
that or the notify gets called when it's set locally
It'll be called in both instances because it is BP
The notify function is called every time the variable is set when done in BP
okay, thanks
One thing I don't understand about Lyra is there choice to make everything have a player state. They tout it as being able to be used for any type of project, but isn't it problematic to build an ARPG where you have tons of AI characters that all have PS?
PlayerStates are always relevant, so they're always replicating / taking up computations, even if the players are all the way across the world.
I think you're supposed to use the replication graph in cases like these
In which case, having them all have their own player state is not as big of a deal?
Obviously the answer depends on how big of a world / type of game you are making and its requirements, but just generally speaking, does that drastically cut down the concern?
presumably, as you'd use it to configure how often if at all different things get replicated to different players, based on distance among other things
Ok
Thanks
I've never worked with replication graph and have always used the traditional (maybe now old-school) replication model. I wonder how hard it is to implement.
addtionally, there is some new buzz word floating around called Iris, which maybe will replace even the replication graph?
Ohh thanks Vori!! I will have to look into. I realized my problem is I was running the game from an external hard drive so even though the map finished loading and the character was ready, it was frozen on the map until something in the background was intiialized. Running from an SSD was very fast, but on an internal HHD about 2 seconds of the frozen map thing. Any ideas if Lyra can help with that or if there's any callback functions to tap into when the map is officially ready? (not just onpostloaded etc.)
iirc Lyra's loading screen hooks itself to a map load delegate, it also has a setting to extend some seconds or so the loading screen in case you need some more extra time for texture streaming... There's no delegate in the engine that triggers when texture streaming and vegetation are ready so that's why sometimes you might want to extend the loading for a couple of seconds
@dry pebble
Also on the subject of loading I recently made a BP_Preloader which spawns all of the particle systems that can possibly exist on the level or gamemode or character ... etc and hide it underneath the map. This way they all fire at once when the map first loads so there's no hitching when they have to load for the first time during gameplay. Not sure if this is the proper way to do things but it seems to be working so far.
That's a classic one :)
I wish there was some list of all the classic things like that.
Stuff that a well experienced dev would say something like "ya...duh that's how its always been since forever"
Yeah.. well I guess you can learn some of this stuff by watching some dissections of classic games.. there are some interesting podcasts and YouTube channels you can follow for that.. but yeah it's quite sparse
I'm hopeful for a compact list of dense tips instead of sifting through hours and hours of post mortems
I specially enjoy the devs react to speedrun, they sometimes share cool development stories and stuff
Yea those are fun to watch every now and then
Hey, does the unreal doc have an entry level tutorial on starting, finding and connecting to online sessions? There's a quick start tutorial on the actual gameplay but not on that, and the "managing session" category only has stuff about travel
Ultimately I'd like to learn to use EOS / online subsystems but their respective docs assume you already know the basics about managing sessions so I'm stumped
It depends on what you want to do... there's IsNetRelevantFor to cut replication from connections
ah no.. then you dont want that
Bad preset everywhere is btw very terrible
still terrible
its like 600ms in total, right?
times two
thats just half the rtt iirc
either way check if you want a replication condition in which you just skip the owner
is there actually any advantage of seamless travel if I don't want to persist any data between map travels ?
at least not persist it default way that is (;
right now, when keeping quite a bit of things on PlayerState it actually seems to be more trouble than it is worth it
Having control over the loading screen I guess
like if you want to display something beyond simple slate widgets
can't really think of a reason otherwise
thinking about it I can't think about what I would like to display on UI that would require me persisting player states.
Thanks. Guess I'm going to disable it.
nothing but small issues poping all around when you use player state for more gameplay thingies
heh out of curiosity checked Lyra, and yeah Seamless travel is disabled
seems it was causing exactly the same issues as I have run into
complex init process + ASC on PlayerState + Experiences do not mesh with keeping actors alive when chaging maps
Im not sure if there's something im just not fundamentally understanding with replication or if there's something else wrong with my project but despite having all replication turned off , the client (right) still has a copy of of the server player. Im guessing the server(left) has a copy of the client because its the server and spawns the player pawn for each player regardless? but this has me really confused as I dont think the client should be spawning the server player?
also not sure if its related but I cant spawn anymore then 2 players, the third players pawn doesnt spawn despite being set to always spawn. if anyone has any insight id deeply appreciate it
Reason is that the engine force pawns to replicate when possessed
So if you want to change that you want to override APawn::PossessedBy and change that behavior
i have "Auto possess Player" disabled in the pawn section , unless youre referring to something else?
Not really. The engine by default spawns pawns for you and possesses them
Besides that's, it replicates the pawns for you
If the pawn is not possessed then that usually means that you can't control it (i.e. a PlayerController hasn't possessed it)
i see , thats really strange , thanks tho, im still not sure why my 3rd and 4th players wont spawn even with all the replications turned on
Sometimes that happens because they spawn too close to each other, so the engine freaks out
Good to look in the output log for such warnings
ah! right i forgot to set it to always spawn on the pawn itself , i had "always spawn" on the playerstart. that fixed it.
I dont wanna take up all your time but one thing i havent been able to find information on is replicating component transforms, for context im trying to show the Z rotation of wheels for all players, but i dont want it to be server authoritive, im aware i could tell the server to rotate the wheels and rotate locally but with how i understand replication works itd adjust the clients wheels to where they are on the server which would lag handling in my physics based set up. hopefully that makes sense
might make more sense here
Well I'm not the movement guy to give you the answer you desire and it's better if you ask here without pinging and I will make sure to answer if I know/want.
For component transform replication, I know that OnRep_Transform exists as part of USceneComponent, but no idea how that works. The way I would do it is probably make the client locally rotate them, and then send that to the server so it simulates to other players. That's basically how movement in general is done at a very abstract level.
ah, my apologies ,thanks tho I appreciate the insight.
Whatβs the best way to handle networked timers?
A reliable RPC on trigger?
Or replicating start time and having the clients trigger when expired?
Probably depends on what the timer is triggering.
If there is a chance the server could cancel it, then you would want the server to just do the timer on its end, and then fire an RPC when the timer is defintely ready to be done. Or if the timer results in something been spawned, then it has to be the server anyway.
If its a 'set and forget' type thing - i.e. display an effect after 3 seconds - then the server can RPC at the time of the event, and each client can handle the final step.
My use case is suffocation damage. The client needs to play a sound effect and display a hurt indicator on the hud every 3 seconds the character is underwater. The heath float is already replicated. So the question is how to handle the damage notification. A RPC call works but seems like maybe a waste of bandwidth if I can sync up the timers on the client and server?
You can't sync up server and client timers, don't ever do that. It'll never be reliable.
If it's not important then by all means go ahead. I was just answering the question I seen
Timers are the most unreliably "synced" things
Ok, good to know. Thank you π
its not an aesthetic thing, is it. Its a damage event, because on the server you are deducting health. Plus what if that final tick is the 'death' tick, the client wont know for sure what to do, especially if they were nearly getting out of the water, and the server thinks they are in, client thinks they are out etc.
So to me the event is timer -> server_damage_event -> fire damage notification RPC
There is some post about a net synced timer
Second pinned post has a net synced time
That you can use for timestamps to driver synced timers for
Interesting, that makes sense
Which link is it? The network clock?
yeah its just a matter to substract the delta difference in the timer's time when it gets to your client
yes, that one
Wonder why unreal doesn't do that by default, pretty logical
No need I guess
Hmm
the gamestate replicated time can work for some stuff
So with a more accurate networked synced clock
Is the idea that you replicate the timer start time?
Then have the client fire off the event?
Depends on what you are doing
Can also replicate start and duration and have the client check that on tick or so.
Hmm right makes sense
Sad that this networked synced clock doesn't work for late joins
Technically isn't any join a "late" join?
It's in relation to a clock already being used
E.g. some info about some timer in an OnRep already being there when someone joins
VS it being set and replicate when everyone joined originally
Hmm so it's just inaccurate at the time of joining and fixes itself after?
It's not about inaccuracy
wym it doesn't, it does
Yup, its explained in the text, to get rid of statistical outliers
@plush wave let me know what gave you the impression that the synced clock from the article doesn't work for late joiners so plox
I might need to edit the article to clarify that it does work for late joiners
otherwise it'd be pointless
That's how I read it when it said "you cannot trust the clock value in a late joining situation"
But I see it just meant at the time of joining
yeah, really, any
not even the gamestate one
as fluff needs time to replicate
mh...
That bit is important, but probably not very well written
because you often want to access the synced clock right when you join in your onreps
and that's not recommended
Right but it will sync pretty quickly afterwards
yes
Hi
Anyone know how I can make the MoveComponentTo function replicated?
I have this setup right here but the characters are jittery and when I turn p.NetShowCorrections on, you can see that the server is trying to correct the client position on every frame..
I would really appreciate any help!
but still you need to halt your onreps
because it you access the clock in your onrep it might not have updated yet
you can hook-delegate your onrep actions to the initer
This is only for a scenario where the game needs the network clock on join immediately, right?
ie: you can know when the clock is ready client side
no, it happens also with the gamestate clock
you need to wait for it to be ready
Hmm ok
gamestate might not even be ready by the time your onrep fires
I'll keep going through Jambax's code, still not sure how it causes the delay or where in here I need to modify to resume OnRep calls after the clock syncs.
you'd need to modify jambax code to add one extra condition
you need gamestate, pawn, controller... etc + the clock to be ready in order to call the client world initialized
A condition in the subsystem I assume? Which function?
correct one more extra
I dont have the code by hand rn
but this subsystem basically calls a delegate when all is reasy
what u want to do is to subscribe to this delegate
I'm looking at it right now. Probably CheckNetworkGameReady()?
yes likely
so when the delegate gets called u know all fluff is ready
there are other ways to do this
but so far that's the most elegant one i know
"call the client world initialized" this I do not understand. So is there a function built into the UE class that tells the world whether it is ready or not?
in order to "consider" the client world initialized
sorry haha
call - not as in - function call - as in "considering"
Right, but the delegate Jambax calls is his own, not an unreal one
So then there is still a missing piece, where do I subscribe to this?
From the game state?
Ok so every actor subscribes to this, and has to check some condition before preforming an OnRep?
Seems like a lot of code to have a condition for every OnRep
not for every onrep
you subscribe per actor
essentially it is client side signaling handled by a subsystem
Right
Would be nice if you could just stop the entire network driver from doing anything until the game clock was synced, which would avoid actor subscriptions
But I see how this works now
Thanks for explaining it
if u stop the net driver then the clock never syncs XD
I don't mean literally, I mean like stop all calls other than the specified time sync call
But yeah lol
That would likely take engine modification
this is selectively doing that will prevent you from accessing the playerstate until its ready
I hope James can write soon about the net event subsystem, it is quite interesting
Net Event System?
yes the subsystem we are talking about
what's this event subsystem we are talking about? π
ohh interesting, I'll have a look later, thanks!!!
Yo could conceivably do this time stuff in some other actor instead of the player controller right?
It just has to be owned by the local player so that RPC work?
so to confirm from what I just read in the code; its a subsystem - and its basically just setting a bunch of stuff to false. As each system (player state, network etc) is ready - its tells the subsystem and the subsystem sets that variable to true.
You can easily add as many things here that you care about for your game and have each of those things advise when its ready?
once all vars are true - the subsystem broadcasts "hey - I'm ready" - and then anything that wanted to know (i.e. HUD class I'm guessing) - can do its thing?
Maybe this is a good place to remove the loading screen too?
Can I create an AutonomousProxy actor that is not a Player Controller?
π
re: loading screen, usually you'd like to & more stuff to the condition set of the loading screen
nice usage of a subsystem
Try this
For Pawn class
Anyone have any idea why this could be happening? Ragdolls disappear on SceneCapture only on client tho server is fine
Hello everyone, I have questions about the possibility of making an mmo in TopView and I'm afraid for
performance and how to manage it with unreal, for example a player who has a limited GPU and one who has
high perf GPU... I can't adjust the FOV because whoever has the most powerful GPU will see the enemies first
or the one with the base-end GPU will see some players shoot into the void because they won't see the mobs.
my logical conclusion is to evaluate the performance of each player and according to a certain number of players in a region,
decrease the amount of mobs spawn to reach an acceptable average FPS.... but this would affect the playability of the one
which has a high performance GPU.
TopViews games generate more triangles than third person games because third person only sees what is in front of them.
exemple here, I have 30mob approx, with one player, I got 35fps with a RTX 3070ti
so imagine a mmo with multiple players with a lot of mob and spell etc....
the only method will be to ajust the LOD of each mesh and spawn mobs uppon player quantity in a close region
MMO as in World or Warcraft?
MassEntity has lod built in, including different representations depending on the distance
what is MassEntity ?
However afaik MMOs are notably difficult to make in Unreal (and in general), handling so many players in multiplayer is very difficult
a new plugin from Epic to handle large amounts of entities
I know in what I get in, not simple, only few mmo are made in TopView... but I like this challenge.
I don't like thirdperson game
The top view challenge is minor imho compared to the rest. Look into Mass probably if you want high performance with high number of agents
Thank you Max π
I prefer Unreal than Unity or other engine outthere
do you know if WorldPartition is mature anouggt to be use in mmo ? or it's not possible
I just got back and saw 5.1 so I'm asking if anyone is using it in multiplayer
I hear that nanite is not so a big deal for foliage.... the gain of performance is good for large number of foliage at distant , but close... it's the same fps
pretty impressive
6core/12thread 2.2GHz i7-8750h laptop cpu
25k interactive entities chasing player and avoiding each other.
yeah, I build a demo boid simulation with Mass with 20k boids, it's on my Github, it's a fork of MassSample. Just take into account that it is a 5.0 project and I don't plan to upgrade it
I just don't know if MassEntity will work in multiplayer mode
not yetβ’οΈ
It works in multiplayer but needs manual setup
as in, nothing will be multiplayer out of the box
is there any official tutorial on creating & joining multiplayer sessions in unreal? for some reason the one part of the doc that says it has such a tutorial doesn't
How do I respawn dead players?
I have a problem where this montage dose not work network replicated on client in a big map? but it works in a small map?
Can anybody tell me if what I'm trying to do is supported by unreal?
I want the client to start in a LoginMenuMap and I want the server to start in a MainGameMap.
When the client successfully authenticates I want the client to travel/connect/open the MainGameMap that the server is on.
The problem I'm having is despite setting the Default Server Map in my project settings to the MainGameMap, the dedicated server seems to be loading the LoginMenuMap.
I'm trying to avoid sessions if possible. It seems this should be possible to have a sort of "offline" main menu map that then connects to the server map.
Not ideal but try tick "Reliable" in the multicast just to see if it's the issue
What defines a "dead" state in your game? AFAIK unreal doesn't have a concept of killing/death/respawn, so likely you would need to do something like:
- Restore player back to a fully restored state (e.g. reset HP back to full on server)
- Set Actor's location to wherever your respawn location is in the game world
You have to implement that yourself (stop ragdoll, change location, restore health, etc.)
Like this?
When i change an actor's capsule collision's objecttype, do i have to multicast that change to all the other clients?
could i just set the capsule to replicate, or would that cause issues?
Neither
ObjectType is a State, you would use a RepNotify variable and the OnRep function to set the ObjectType then
Otherwise late joiners and peeps that are out of relevancy at the time of the RPC would not get the correct value
alright, i'll try that
worked perfectly, thank you so much π
I'm kinda new to this, so bear with me please!^^
I want to create a multiplayer game where the players game file data is saved locally, but players can join others game worlds. The problem im currently facing is that i cant pass the server a transient object, since that object wont exist on server side (unlike passing asset or actor references). Currently im converting my save game data into a struct, i pass that to the server, the server then manages that data, and when the client wants to save the game it requests the save game data from the server.
The problem i found with that approach is that, whenever i want to load, for example, the players inventory, i'd have to either send a request for the entire current game file data to the server (unneccessary), or i'd have to write separate functions for every aspect of the game file data id like to request independently (not very scalable).
Would it instead be possible to create a transient object at runtime on the server side which is replicated to the client(s) (at least the client that owns the game data, but possibly all connected clients) and that i can use on client side to read data / call RPCs?
Hey guys !
Someone told me to use ZeroTier.com to test my game with some friends in "false" LAN.
If i get it right :
I need to create a network on the website, and then open the app myself to enter the network ? And then my friend does the same ?
And then i need to setup my UE sessions nodes to "Use LAN" ?
Am I getting this right ?
Which are the top recommended cloud providers for dedicated servers?
I wonder which instance to pick. Gamethread is the most expensive thing in my server. Does UE dedicated server benefit from many vCPUs?
Yeah that what I thought. I wanted to try the AWS Graviton3 servers but Steamworks doesn't support LinuxArm64
after opening new level, Tick Code only runs on server not client..πΎ
Client1 : level A --> level B
pawn 1 --> pawn 2
βClient2: level A --> level C
pawn1 --> pawn2
Hello, i try to join my session when i find it but my player is not traveled to the server's map :c
after many seconds, an other level is loaded but not the server map
Hey all I'm getting a "fatal error" message in my Steam multiplayer game when the host attempts to server travel to a new map - does anybody know what might be causing it?
The destination map is correct and included in the package, and it works fine when playing single player but crashes when connected online with friends
I should also note that server travel executes correctly ONCE when playing online, but crashes on the next subsequent attempt
Any advice or suggestions are greatly appreciated thanks
Have you tried checking the logs?
Saved/Logs
Taking a look now
gosh there's so much stuff in here
lol
I'll have to do a new playtest and take a look right after the error
You just need to check latest log file and search for "fatal error" inside of it (also hi
)
Behold the guy that mentioned AngelScript to me. You're an angel yourself, you knew it?
I'm not used to flattery 
Did you start to use it?
I am going to run another test and see if it shows up
A tip: once the fatal happens, go to your latest log file and it should be one of the last things that happened. Maybe it does not explicitly mentions fatal (I really dunno), but you're going to see some crazy stuff that smells like fatal. Also, if you still can't find a thing, try to share I dunno, the last couple lines of your log here w us?
I set it up and played around, but haven't done anything serious yet. The community is awesome.
You using it?
I really want to, but it's too late for me at this point π I already built most of the stuff so lost the chance before I heard about AS
But in the future I'll kill myself if I dont use it π
"smells like fatal" π
yes thank you I will try this now
If I am playing through the Steam launcher do you know where the output logs go?
I just did a test but I can't see a log from today
Is your game deployed to Steam or you just pointing it to your built game?
It's uploaded as a build and depot etc on steam and I am launching it through the Steam library interface
B/C if it's deployed to Steam, then it would be
C:\Program Files (x86)\Steam\steamapps\common\YOURGAME\YOURGAME\Saved
I am in program files > Steam > steamapps > common > MyGameTitle > etc.. Saved/Logs
Maybe the engine folder? π€
Pretty sure it's not there but I don't have a deployed version myself so...
Doesn't it crash?
I mean, the Engine folder inside your game's folder
What kind of "fatal error" you are seeing?
Yes it crashed
Let me show
Fatal error!
Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x0000000000000000
0x00007ff64e866ba5 RRM4-Win64-Shipping.exe!UnknownFunction []
0x00007ff6506b5614 RRM4-Win64-Shipping.exe!UnknownFunction []
0x00007ff6506a0515 RRM4-Win64-Shipping.exe!UnknownFunction []
0x00007ff650ce89e0 RRM4-Win64-Shipping.exe!UnknownFunction []
0x00007ff64ef1adcb RRM4-Win64-Shipping.exe!UnknownFunction []
0x00007ff64ef1f147 RRM4-Win64-Shipping.exe!UnknownFunction []
0x00007ff650ceff70 RRM4-Win64-Shipping.exe!UnknownFunction []
0x00007ff650cf1b97 RRM4-Win64-Shipping.exe!UnknownFunction []
0x00007ff6509ed065 RRM4-Win64-Shipping.exe!UnknownFunction []
0x00007ff6509063ad RRM4-Win64-Shipping.exe!UnknownFunction []
0x00007ff64e84bec1 RRM4-Win64-Shipping.exe!UnknownFunction []
0x00007ff64e85285f RRM4-Win64-Shipping.exe!UnknownFunction []
0x00007ff64e8528da RRM4-Win64-Shipping.exe!UnknownFunction []
0x00007ff64e854024 RRM4-Win64-Shipping.exe!UnknownFunction []
0x00007ff64e85cc64 RRM4-Win64-Shipping.exe!UnknownFunction []
0x00007ff6516c436e RRM4-Win64-Shipping.exe!UnknownFunction []
0x00007ffd00d37614 KERNEL32.DLL!UnknownFunction []
0x00007ffd02bc26a1 ntdll.dll!UnknownFunction []
I just attempted to screensnip my screen and got this
No idea what happened or if that was a mistake
This is what turns up
On the host
And a black screen on the client
The infamous one.
From where you got this?
The logs?
I used shift+start+s to screensnip on windows and somehow it copied text instead of the screen
I think that's what happened anyway
OK so
Confused me when I went to paste into discord
You can't see a Saved/Logs folder, right? In your Steam's game folder..
Yep, it's what has happened anyways, however in your log the precious information you're looking for is a little bit before the error message you shared.
Hm. This is UE4, right?
4.27.2
This is weird, indeed. Have you tried checking at the Engine Folder, inside the latter RRM4 folder?
I mean, if you find any Saved folder.
I'm trying to solve the lack of logs you have
Perhaps not
You had logs yesterday, but not today
That's correct
It should be creating logs
You have to debug this, ship with debugging symbols and attach your IDE to game
and see where its accessing a nullptr
no more need for logs. gotta go fast
Eren I don't understand what you mean
When you build your game
You can choose which type of build you're going to output
Shipping, Debug, etc.
Right
I guess Eren is suggesting you to build it as Debug and deploy it to Steam as such.
But
enable this
So shipping build configuration and then include debug files checked?
One sec. You have some logs from 15/01
They're not relevant
Oh yeah my bad - I'm still at 15/01 lol
Even if you get the logs it wont provide much
You need to debug with Visual Studio or Rider or any other IDE
to see why its crashing exactly
and to do that you need debug files
Have either of you had a similar crash when server travelling?
Can you have a shot in the dark at what it could be?
The exactly same issue, the exactly same context.
It works once and then not the second time
Ok, let's break this down
The destination map is correct and included in the package, and it works fine when playing single player but crashes when connected online with friends
I should also note that server travel executes correctly ONCE when playing online, but crashes on the next subsequent attempt
Correct
By "ONCE", you mean...?
One client gets connected
A second one, doesn't... is that it?
Host opens listen server map
Invite friends via steam overlay
Up to 4 players can run around in the listen server map just fine
Host can enter an overlap which server travels to a new map
Server travel functions as expected
Host enters a new overlap to server travel back to the lobby map
"Fatal error"
Up to 4 players can run around in the listen server map just fine
Run around in the Lobby map, correct?
All players server travel successfully the first time it is called, and can play a full game inside the new map, but then when the host attempts to server travel again they get the error
Yes correct
Your calling ServerTravel from BP or C++?
BP on the host
Can I see the node that would travel them back to the lobby?
Nothing
Ok so can subsystems be replicated?
yeah it's just a macro
Log InURL and add a branch to Return Value - maybe its failing and you're doing something that you should not do
best way to identify the error is debugging tbh, you cant solve this with this amount of mysteries
I agree. This is we bruteforcing a solution, although I understand why this is complicated to debug around.
Or can subsystems not be replicated since they spawn in for clients too?
He can't debug that solo
And since it's on Steam, it requires aa second client connected
no yesn't - dont
I can test it with a laptop but it means repackaging and transfering the project each time which is a hassle
Somebody has suggested I just don't use server travelle and instead just disconnect and reconnect the clients
You tried Standaalone?
Which I might just do
Because this is insane and I'm at the end of my rope
Lol
that game looks cool, good job
How clients will know what is the next connection? 
I think they can save the blueprint session before disconnecting
How do I log InURL
Print String before calling travel and be sure Print to Log is checked
I just shared it because as I mentioned, this issue is really familiar to me due to the same nature: lobby -> gameplay -> lobby. I really remember the profane Fatal Error popping up.
What I'd suggest you to do is Standalone Play.
Have you tried it?
My use case would be a world subsystem. Just replicate like normal and block local spawning?
Also, as far as I remember, we used to Open Level instead of Server Travel.
Subsystems arent meant to replicate
use an actor instead
derive from AInfo
make a static getter function for it
its nothing different than any world subsystem at that point anyway
As opposed to what?
Deploy to Steam
So you can debug it locally
]
I'm using UE5, but it should be similar in UE4.
Didnt Jackson said its happening with clients? 
It works fine in editor and in a packaged build when single player
It only ever doesn't work when connected to other clients
In PIE, I guess?
oh yeah
How did you keep your clients connected
Open Level disconnects them right?
Lol
Wait, no
I'm confused. I mean, it's like 1 year since the last time I touched that project.
I guess I'm mistaken. I guess we used Server Travel.
But before discussing this
Try Standalone Game 2 clients
Or rather, Listen Server
both
Or both
I just did this in PIE with two clients and everything worked fine
Not errors
No errors
try with standalone too
PIE and Standalone are different
For multiplayer connection/travels etc
PIE is not safe to test your stuff
When travelling, the most accurate you can get is through Standalone
Of course, not as accurate as actually deploying to Steam but you get it
THe standalone games crash instantly
That's a smell
I mean, you get Fatal Error right away?
No I got this one
I think
check logs
Hang on let me check
Output log?
no Saved/Logs
ok
Yes but this time
In your project's folder
Not the steam one
(Just fwiw)
ok there's several
Most recent one (very likely)
If in doubt, share a pic of the files in the folder w us
I believe htis is the one youre looking for
And brace yourself, it's going to be a ride lol
(geez its 10 PM here, you in Australia? lol)
Yeah 12pm here
4am 
you guys are in the future π¦ still 1/15 (or 15/1) here lol
I have no idea what I'm looking for in this log
you'll see same thing
it doesn't tell me anything interesting as far as I can tell
access violation error
I don't see it
I don't even know what to look for
OK.
Don't you see this?
No
Unhandled Exception
search for this
its global keyword for any crash
it should be one of the any 4 log file
ok found one
You don't see the Unhandled Exception because probably only crashed in 1 instance
COOL
Now!
A little before these lines might dwell your culprit
[2023.01.16-00.57.04:085][570]LogWindows: Error: === Critical error: ===
This is the very first line of the error you shared
You want to look before this line
0x00007ffc9c2f2542 UE4Editor-CoreUObject.dll!UnknownFunction
Nice!
How do I do that
otherwise you cant know which function error is happening at
But wait
Go to epic games launcher, find UE, and modify, then tick "debugging symbols"
Share w us like 20-30 lines before this:
[2023.01.16-00.57.04:085][570]LogWindows: Error: === Critical error: ===
The other instances haven't crashed
This is exactly what happened in production/Steam
One instance crashes, the other stays black
It's the server when playing in steam
Yep.
Now, you can brute force (my favorite approach b/c I don't like debugging sh*t - unoptimal)
Or Eren's approach (which is way more rational)
BUT
I'd say
Disable this and play Standalone Game again
By "disable" I mean, unlink it
And see if it's going to crash
i guess that means server is crashing
LogScript: Warning: Accessed None trying to read property ChildActor
is this normal
Right?
Yeah dw about that
I found funny Jackson said "just invalid actors"
might not be relevant, but still π
