#multiplayer

1 messages ¡ Page 695 of 1

twin juniper
#

nope

#

should it be?

tawny nova
#

you probably want to work through some of the sample projects, because you're kind of making this more difficult for yourself

#

yeah, if it was, then you could just get self

#

like if you do the key press handling in the character, you don't have to find the character, if that makes sense?

twin juniper
tawny nova
#

okay, so when it inherits the character BP, it is the character BP basically, with extra info

twin juniper
#

so it should work?

#

then why it doesn't?

#

both of them jump instead of only the one i'm making jumping

#

it happens for every input action

tawny nova
#

it's because you're trying to grab the character index, i believe.. the target for jump is probably supposed to be 'self'

twin juniper
#

:\

#

it says that 'Target' must have a connection

tawny nova
#

you can maybe do a 'self' pin and 'cast to character', but it's pretty sloppy

#

in general, you probably want your jump code in the character class, sorry to dodge your specific question a little

twin juniper
tawny nova
#

i feel ya.. it's hard to answer because it depends on what all is going on with that template

#

i know it doesn't apply to your particular template, but sometimes it can be helpful to work through it to know where to look in your own project

twin juniper
#

i think i found a way to make it works

twin juniper
tawny nova
#

glhf

neon ether
#

Was wondering if anyone could spot an error that I have no idea why im getting, since I've done this before and didnt have any issues. I have a multicast RPC in a parent class and my child class is trying to override the _Implementation of that RPC. Though I keep getting some unresolved externals from it for some reason...

#

Decleration in the parent header

#

Override in the childs header

tawny nova
#

someone in #cpp might spot it tbh, that error is some kind of import issue, yeah?

bitter oriole
#

Show the compiler log

#

Output tab in VS

neon ether
#

how do you find that in Rider?

bitter oriole
#

No idea, I don't use that

#

That's what you need to work though

fathom aspen
# neon ether

Not related to the issue, but I would suggest making this kind of RPCs as UnReliable. It's a cosmetic rpc and doesn't affect gameplay that much

neon ether
#

Other question (more relevant to here) about general code logic to spawn projectiles on the server and client as well as a vfx on client and server. This is the logic:

(The following is within a UComponent for the players inventory)

  • Input received to trigger "StartModFire()"
  • Continues on "FireActiveMod()" which determins what mod is active and calls its "FireMod()"
    (The logic jumps over to the Mod Actor, of which does have a reference back to the owning player if needed)
  • Within the Mod Actor's "FireMod()" a "ServerFireProjectile()" is called to spawn the projectile on the server (from what I know this spawns a projectile actor on both the client and server)
  • Finally within the "ServerFireProjectile()" a NetMulicast "MultiSpawnVfx()" method is ran to try and spawn a vfx that both players are able to see.

The result of this logic looks like this:
-when the server fires a projectile is put on client and server and the vfx is only visible from the servers point of view
-when the client fires a projectile is only put on the server and teh vfx is only visible from the clients point of view.

Both client and server follow the same logic path in code and call the same RPC functions in reguard to the server one and multicast one. I'm not sure what causes the server RPC being called by the client to only spawn the projectile on the server and im unsure why the multicast doesnt actualy multicast at all but rather only runs on the local machine...

proven kayak
# neon ether

The ufunction needs BlueprintNativeEvent, doesn't it.

#

Otherwise it won't generate the _Implementation versions

kindred widget
#

It doesn't need to be a BlueprintNativeEvent. Though it would be wise to put the implementation under where you declared the multicast function.

limber gyro
#

The "start match" and "End match" functions what do they do exactly? i am doing all logic myself and i was wondering if it would be better to use unreal stuff

neon ether
uncut schooner
#

What variable is used as the timestamp

thin stratus
#

Yeah

#

At least in the naive version

uncut schooner
#

😆 , what variable should I get in C++?

woeful ferry
#

When I send an actor reference through a RPC, what makes it recongnize the actor on servers/clients?

whole leaf
#

Does anybody have experience with replication of widget and widget interaction ?
I have a very simple widget, which is just a button (see screen below).
I want the states of this button to be replicated (hovered, pressed).
My FirstPersonCharacter has a WidgetInteraction.

But for some very weird reason, the hovered state is never seen.
It works if there is only one player but not when the others players spawn.
Any idea why ? I'm losing my mind

Thanks

sinful tree
uncut schooner
plucky prawn
#

Nope none. I only use a source build for delicate servers

vivid seal
#

Hey a few weeks ago you suggested manually ticking an actor to move it forward in time for prediction, but I can't figure out how to get that to work. I'm creating an actor that has a Projectille Movement Component and callling Projectile->Tick(DeltaTime), and drawing a debug sphere before and after the call, but the projectile doesn't move at all, and lags behind the client version of the projectile. Is there some other way to call Tick manually that will actually move the actor forward?

neon ether
#

So im trying to call a server RPC if the client is being ran on and the gen.cpp for the file is erroring when it calls the server RPC from the client. It says it errors on the last line here c++ static FName NAME_AModParent_ServerFireProjectile = FName(TEXT("ServerFireProjectile")); void AModParent::ServerFireProjectile(FVector Location, FTransform CollisionTransform, FVector Direction) { ModParent_eventServerFireProjectile_Parms Parms; Parms.Location=Location; Parms.CollisionTransform=CollisionTransform; Parms.Direction=Direction; ProcessEvent(FindFunctionChecked(NAME_AModParent_ServerFireProjectile),&Parms); }

#

is anyone familiar with this situation?

grand kestrel
vivid seal
#

yeah i tried that too and it didnt seem to work either. However, I'm not sure I'm calling the right function. I'm calling ReceiveTick, which just takes deltatime, but there's also a TickComponent function that takes a pointer to a function of some kind and an enum for what kind of tick is happening in addition to deltatime. I have no idea what these things are so I haven't called that one.

#

ummm it appears to be working if i call TickComponent passing in the component's primarycomponenttick struct as an argument. not sure what that actually is but okay

neon ether
#

#multiplayer message

The error it gives me is a stack overflow somehow just in case someone else has seen anything like this?

lost inlet
#

show stack

#

it's probably an incorrect check causing infinite recursion

#

@neon ether

vague fractal
#

Any tips on how to improve the attack feeling as playing client ?
Currently when i attack i'll play an animation montage via a Multicast, but with a "normal" ping you'll already get a somewhat clunky feeling.
I've also tried to play the animation montage locally too, it makes it only a tiny bit better tho >_>
The fact that i'm using root motion animations is likely also making it harder rather than easier. Also feel like i should point out that i'm not having problems with root motion jiggering itself

vague fractal
#

Not sure if i'm thinking weird here, but should i maybe try to play this montage locally based on a timer event ?
I thought about letting this event fire after e.g. X ms where X is the amount of time it will take till the server gets the command to play the montage from this client

modern cipher
modern cipher
neon ether
neon ether
lost inlet
#

any build type should show you it

#

and DebugGame is usually the normal choice

neon ether
#

I usually build in Development Editor as that was just the default for me

lusty sky
#

shouldn't it be declared virtual in header file? in parent class too?

lost inlet
#

well that is the default for binary build, but DebugGame is a nice compromise since DebugGame still has optimised engine modules

#

Development Editor would still show you a stack overflow though

modern cipher
#

how can you debug if you can't compile and run?

neon ether
lost inlet
#

ignore generated code

neon ether
lost inlet
#

it'll be in your _Implementation function probably

#

if your stack looks like

RPCFunc
RPCFunc_Implementation
RPCFunc
RPCFunc_Implemetation

over and over

neon ether
#

When i step through the code manually right when i try and step into that server RPC is when it gives me issues, it never actually makes it into my code for that function when i step through manually. That was what happened earlier when I was debugging. I am recompiling for the debug again at the moment

lost inlet
#

can you show your _Implementation function

vague fractal
#

I'm currently looking at the header file from APlayerState and i saw this here

/** Exact ping as float (rounded and compressed in replicated Ping) */
float ExactPing;
float ExactPingV2;

Are the any more informations about ExactPingV2 ?

lost inlet
#

also in addition, if you overrode ServerFireProjectile_Implementation in any child classes, make sure you're calling the right Super

neon ether
lost inlet
#

and now show FireProjectile

neon ether
modern cipher
#

rpc calls fire projectile and the fire projectile calls the same rpc?

vivid seal
#

only if not authority

neon ether
#

The idea behind is was to ensure a projectile always gets spawned on the server

#

NOTE: I'm relatively new to networking in c++ like this so things may look weird as I am in the process of reading documentation and whatnot still. Still working in progress

lost inlet
#

I would follow the UE4 coding style on braces, I tend to just use !HasAuthority() instead

#

but a callstack will certainly help

#

since it should fail that condition on the server

lusty sky
neon ether
#

This is the call stack after the exception

neon ether
#

That was my posed question/issue

lost inlet
#

I need to see more of it

#

where you can actually see a repeat in the pattern

neon ether
#

rider was frozen when i took that first screen snippet, but once it calmed down after the exception it definitely is recurssing somehow

lost inlet
#

can you find Role in the variables window

#

well OwningPlayer->Role

neon ether
#

I was able to find the owning player remote role...?

lost inlet
#

the variable is just called Role

#

nothing else

#

also RemoteRole being ROLE_Authority would indicate this is a crashing client rather than server

neon ether
#

Is it in the AActor hierarchy?

lost inlet
#

so the weird virtual stuff I saw from you the other day might be coming into play

#

yes

#

private member of AActor

neon ether
#

Found it, Rider was hiding it

lost inlet
#

yes it's crashing as a client

#

though at this point I would just do a complete audit of everything that declares or implements ServerFireProjectile(_Implementation)

#

remember: ServerFireProjectile SHOULD NOT BE VIRTUAL, this is a function generated by UHT which does all the networking magic

#

I usually explicitly declare the _Implementation function too

neon ether
#

So you're saying the original decleration of the function should not have vitrual

#

like in either the parent or child class?

lost inlet
#

no only the _Implementation function should ever be virtual

neon ether
#

Could that cause the issue, because I did have virtual on the front of the ServerFireMod() decleration?

modern cipher
#

yes
you should instead make the implementation virtual as sswires said

UFUNCTION(Server, Reliable, ...)
void ServerFireMod();
virtual void ServerFireMod_Implementation();

#

and in child classes, you can override the implementation

neon ether
#

Hmmm, the same situation still arose...

#

So im a bit confused as to how this is able to run recursively. So when the code is switched to server via the RPC that calls the same function. Does the role of OwningPlayer not switch to being the server?

#

I tried switching it to a simple HasAuthority but it seems as though the role of the Actor containing these RPC functions is always Authority

lusty sky
#

HasAuthority is return (GetLocalRole() == ROLE_Authority);

neon ether
#

Still unsure how the Local Role for the owning player could be the same when running on the client and when switched to running on the server

modern cipher
#

there's the local role and remote role
the server will always have authority over replicating an actor

lost inlet
#

Are you running as a single client on a dedicated server? Net mode helps to know

neon ether
#

So i've went through the call stack and the issue is definitely that when the server RPC is ran and it calls the Fire Projectile the Role of the Owning player does not switch from autonomous proxy to authority

neon ether
lusty sky
#

probably under one process

#

might cause issuees

lost inlet
#

Under one process is fine and a valid way to sanity check stuff

#

So what net mode is it?

#

On a listen server PIE session, the first player will always have ROLE_Authority

neon ether
#

it is indeed a listen server

modern cipher
#

the listen server can also play the game

neon ether
#

yes the server and client are both playing the game

lost inlet
#

Or does it happen in both

neon ether
#

Forgive me I dont think I understand what your asking. The server pops up in the first viewport and the client joins in when the second viewport pops open

lost inlet
#

Yes and I’m asking which situation replicates the crash

neon ether
#

Ahh i see, its only on the client which makes sense because the other player's role will never let it run the server fire projectile

lost inlet
#

I still think something is up with your overrides of that RPC

#

That’s why I was talking about virtual

neon ether
#

There are my current declerations after everything we talked about

modern cipher
#

u implemeneted _validate

lost inlet
#

WithValidation isn’t required anymore btw

#

So you can get rid of it if it’s just return true

neon ether
lost inlet
#

And these are the only 2 classes in the hierarchy?

#

That have this RPC

neon ether
#

yes

lusty sky
#

in docs they said: UHT require server RPC's to have _Validate

lost inlet
#

I really don’t know how your client could call the RPC implementation directly without networking

modern cipher
lost inlet
neon ether
#

Question: Am i naive in expecting the LocalRole for the owning player to switch to authority when running on the server?

#

I've used logic like this before where I check the Role and based on that will run the same function using a Server RPC and have never experienced anything like this

lost inlet
#

LocalRole will be Authority ALWAYS on the server

neon ether
#

Thats what I thought! So is the Server RPC not working due to some other potential reason maybe?

lost inlet
#

Well this is why to do an audit and run through your call stack and try and figure out why it keeps calling itself

#

I don’t have access to your code but have run into similar situations with RPC mishaps

neon ether
#

I examined the call stack thoroughly and it just called the same two functions over and over. Is there any thing in particular that might stick out or to look at?

#

That you would recommend when looking at the call stack?

lost inlet
#

Misuse of UFUNCTION in derived classes, overriding the RPC generated function rather than the Implementation are the usual suspects

#

But I can’t really say for sure unless it’s on my screen and diving into the code

neon ether
lost inlet
#

No, it should be avoided in any child classes

neon ether
#

okay good just checking, yeah I might just figure some other route to take since there seems to be nothing different than how I've done things in the past and there is just nothing that seems to remotely stand out

lost inlet
#

Also see if you’re accidentally spawning versions of these actors on the client

#

Because that’ll cause issues

neon ether
#

Im not sure what you mean?

lost inlet
#

Whatever the hell ADefaultAmmo is, make sure you’re not spawning a redundant client side version of it

#

The tell tale sign would be the roles being different

#

Between that and the owning player

neon ether
#

Rebuilding to check currently. Question though:
For what I have currently in the group im in we have two players. Both players have a custom UInventoryComponent attached to them. The inventory has reference to mods that the player can use. In this case i've just issolated the situation to using our default mod. So you mean for example that in this case both players inventories mod references should be replicated on the server? Still working through the logic of deciding when something needs to be replicated vs not being so

lost inlet
#

Replicated actors would need to be spawned by the server and the server only

neon ether
#

So i've just check and the Player character (server) has a role of AutonomousProxy, while the ADefaultMod that is in that same players inventory has a role of Authority. So i believe that matches the problematic situation you described

lost inlet
#

Your team is about to learn a very nasty lesson on why”SP now, MP later” is stupid

latent heart
#

Hah.

#

Yes, never, ever, ever try to convert a SP game to MP.

#

Always start out thinking about MP.

neon ether
# lost inlet Replicated actors would need to be spawned by the server and the server only

So what you saying in the case of this Mod Actor is that it shouldnt be spawned as such:

void UInventoryComponent::BeginPlay()
{
    Super::BeginPlay();
    // must spawn in our default mod so that it becomes usable
    FActorSpawnParameters SpawnParams;
    SpawnParams.Instigator = GetOwner()->GetInstigator();
    AModParent* ModParent = GetWorld()->SpawnActor<AModParent>(DefaultModClass,GetOwner()->GetActorLocation(), FRotator(0,0,0), SpawnParams);
    if(ModParent)
    {    // we want the default mod to stay forever so set never destroy to true and destroy the mesh component
        DefaultMod=ModParent;
        DefaultMod->bNeverDestroy = true;
        DefaultMod->bIsDefaultMod = true;
        DefaultMod->MeshComponent->DestroyComponent();
        DefaultMod->OwningPlayer = Cast<ANetworkChar>(GetOwner());
    }
}``` 
But rather having a check before like HasAuthority() to make sure the server spawns is?
latent heart
#

And never try to write a mp game before you have a good understanding of network replication, authority and asynchronous programming.

#

I forget if beginplay runs on server and client (I assume it does) so you should probably add an authority check before spawning anything.

lusty sky
#

true that will spawn 3 actors 1 on server and 2 on client

latent heart
#

2 on the client because the server will send an extra one to the client to "replicate" the one it has created itself.

#

Assuming it passes the relevancy checks

neon ether
# lost inlet Your team is about to learn a very nasty lesson on why”SP now, MP later” is stup...

Believe me I know, the situation is less than ideal. What this project is is our "Senior Project" and our idea was to make a two player fps shooter (which in heindsight was very dumb), but our team was naive to networking in unreal and what it really took. And our leadership through this project which was essentially our professors in charge of overseeing things (who are supposed to know what their doing) never mentioned that its absolutely critical to think about mp from the very start of the systems. Granted it would have been nice if we looked into that but we were naive and didnt know to look and the people overseeing things never said anything about it. So we went about our ways with just one "network programmer" until i realized that when we tried to plug his networking code to spawn two players as a client and server and things broke and I started looking into things that we were so beyond screwed because of layed our own foundation for failure essentially without anyone watching informing us...

neon ether
#

since wouldnt the client player never have authority and always be the AutonomousProxy?

lusty sky
#

the server will tell the client to spawn the same actor

lost inlet
#

BeginPlay runs on clients too

#

So your client and server are spawning independent copies of the same actor

lusty sky
#

that is why u get all kinds of roles

#

xD

neon ether
#

Okay now i see what your saying

neon ether
latent heart
#

Man, I miss gameplay programming.

modern cipher
#

lets just call it programming lol

neon ether
#

I love gameplay programming. I do not love "turn this SP game into MP game programming" 😅

#

I added the check like so c++ if (GetOwner()->GetInstigator()->HasAuthority()) { FActorSpawnParameters SpawnParams; SpawnParams.Instigator = GetOwner()->GetInstigator(); AModParent* ModParent = GetWorld()->SpawnActor<AModParent>(DefaultModClass,GetOwner()->GetActorLocation(), FRotator(0,0,0), SpawnParams); if(ModParent) { // we want the default mod to stay forever so set never destroy to true and destroy the mesh component DefaultMod=ModParent; DefaultMod->bNeverDestroy = true; DefaultMod->bIsDefaultMod = true; DefaultMod->MeshComponent->DestroyComponent(); DefaultMod->OwningPlayer = Cast<ANetworkChar>(GetOwner()); } } and it does what i thought were the client player's inventory has no default mod at all

deep shore
#

Hello… I’m curious if shipping and development builds are compatible for multiplayer?

lost inlet
#

Yes?

plucky prawn
#

Does an actor need an owner to replicate? I'm currently using the default spawn parameters to spawn in my actor on the server but it's not replicating at all

fading birch
#

Is your server responsible for spawning this actor?

#

Only actors spawned by the server will replicate

plucky prawn
fading birch
#

oh sorry i missed that

#

are you positive?

#

i'm also assuming the actor is set to replicate

late vale
#

Anyone know how I could replicate this? So that the flipbook is set on server so other's can see it

winged badger
#

sent a server RPC that has the flip[book asset poitner parameter

verbal tendon
peak sentinel
#

Sometimes even "You can't just turn an SP game into MP without a lot of pain" more correct sentence

#

Imagine making a montage based movement system with IK and physics related gameplay mechanics, and your boss wants you to convert it to MP

#

Anyway a curiosity question, are OnRep functions binded via dynamic delegates? Why UFUNCTION required for them?

verbal tendon
peak sentinel
#

If you are willing to fight with engine's nature, sure everything is possible but with a dedicated engineering support and tons of budget. Or if you are just crazy (and experienced) enough to rewrite the core parts of the engine

#

Some things can not be replicated directly, or just not sensible to replicate

twin juniper
#

So, I'm using the FPS Multiplayer Template. And when I play the packaged game and click create game. It's just stuck on the loading screen. Here is are my host game blueprints:

#

And this is what the publisher said when playing multiplayer

Option 1 Using Steam
-Download the demo from the discord
-Open steam and leave it open
-Make sure that the steam download region is the same for all the players, this can be changed in Steam->Settings->Downloads ->Download Region
-Open the demo
-Create/Join a multiplayer game

That's for the demo which I think also applies to the actually project

peak sentinel
#

Anyone knows if there is a way to make OnRep fire when value is set by server but not changed?

#

I set a bool to true by local client and send server RPC to set it to true again to fire OnRep, but due to its predicted before server change OnRep is not being called on local controller

bitter oriole
twin juniper
#

and you have REPNOTIFY_Always/REPNOTIFY_OnChanged

#

you use it like that, so the repnotify will be called everytime the value is set, even if it's the same than the old one
DOREPLIFETIME_CONDITION_NOTIFY(UZircoHealthSet, CurrentShield, COND_None, REPNOTIFY_Always);

verbal tendon
#

Don't need determinism or hotjoin? All the doors are open

bitter oriole
#

You want to port that to MP?

verbal tendon
#

You work your way from zero constraints to those that are required for the particular project

bitter oriole
#

I'm currently making a space sim with realistic orbital trajectories, hundreds of ships that all always move all the time (since they're in orbit)

#

You think you could port that from SP to MP after the fact?

peak sentinel
verbal tendon
verbal tendon
#

I don't see a purpose for the discussion you're trying to lead

bitter oriole
#

You felt the need to write "everything can always be turned into an MP game"

#

But like, for many many games that would be a completely different game with a full rewrite

verbal tendon
#

Atleast take the full quote, not the first half

#

Whether or not it's reasonable to do for any project is a different story, and the pain&difficulty of doing this will scale exponentially with the lack of experience from the person doing so

bitter oriole
#

I disagree with the full quote - sometimes it's literally impossible

#

Quite often really

#

Any large enough amount of gameplay-affecting physics will make your game single-player

#

Any large enough amount of real-time data changes will make your game single-player

verbal tendon
#

Well I completely disagree with your statements

#

Let's just agree to disagree and leave it at that

outer rose
#

.. I am using a custom c++ character movement component to drive all the movement and rotation replication.

Any tips for solving this problem -> https://forums.unrealengine.com/t/listen-server-sees-client-movement-as-jittery-stuttering/476520

Details:
Hi, after testing my game with the average network emulation profile, I discovered that the actor velocity in a listen server, is not smoothed as in simulated proxies.
I am using the actor velocity to drive walking animations (the distance of each step - stride), in the listen server the walking animations stutter because the velocity has abrupt changes. (This only happens in the listen server)

sinful marlin
#

If I call a server rpc from the server, does it go through the whole process of rpc'ing or does it just run it like a normal function?

plucky prawn
peak sentinel
#

UE says "whatchu doin' bud, you cant send RPC to yourself" internally and ignores it

sinful marlin
#

Perfect. Thanks.

sinful marlin
#

yeah I know it runs on the server but i wasnt sure if it would go through the whole rpc process, i.e. not be called until the next frame

#

at least thats my understanding of rpc since replication occurs at the end of frame

peak sentinel
#

at least thats my understanding of rpc since replication occurs at the end of frame
Yeah

#

So I'm trying to understand why my OnRep is not being fired when it's set to false but fired when it is true. Anyone has any idea?

    DOREPLIFETIME_CONDITION_NOTIFY(UWeaponModule, bActive, COND_SkipOwner, REPNOTIFY_Always);
#

bWroteSomething is false but I changed bActive from true to false in server

peak sentinel
lusty sky
#

you should call OnRep right after changing bActive on server
also SkipOwner will send changes to everyone but the owner

peak sentinel
#

Owner is server, so it should arrive to clients

#

Clients dont receive OnRep, also the change of the value

verbal tendon
#

RPC networking doesn't care about value assignment on a variable, it checks for a diff between the actual value

peak sentinel
#

My original value was true and I'm setting it to false

#

Also when you have REPNOTIFY_Always on DOREPLIFETIME_CONDITION_NOTIFY it will replicate without checking the difference

chrome bay
#

It'll only ever send a property if it changes, REPNOTIFY_Always doesn't change that

peak sentinel
peak sentinel
#

It was for OnRep function triggering condition, not replication

lusty sky
peak sentinel
#

So bActive is false by default on clients, and only being set by server

#

They dont change it locally

#

So when server sets it to true, server replicates it and it's true on all clients, but still can't reason why same thing doesnt happen when server sets it to false back

chrome bay
#

Are you turning off replication when it's false?

peak sentinel
#

No

chrome bay
#

Through PreReplication or somesuch

modern cipher
#

its a bool in a uobject i think

peak sentinel
#

Yeah, its a replicated UObject

#

Stored/created inside an AActor

kindred silo
#

Hi. I cannot scroll in Network Profiler GUI.

chrome bay
#

Yeah good luck with that, the profiler is old and broken AF

peak sentinel
#

Not sure if its identical as features but you can try Insights

chrome bay
#

Honestly don't think the profiler has had an update in over 10 years

peak sentinel
#

Oh, its from UE3?

chrome bay
#

Well it was there as early as 4.0 that's for sure 😄

bitter oriole
#

Like UnrealFrontend, Lightmass, and Cascade

chrome bay
#

But while it's useful it's a pretty crusty old app that Epic don't maintain so milage may vary

bitter oriole
#

Literally the UE3 stuff, all of them

kindred silo
peak sentinel
#

Try Network Insights instead, more fancy

modern cipher
#

that just a visual update

chrome bay
#

If it's a third-party app you probably won't get much help here

#

Probs have to fix it yourself

#

RyanJon2040 is in this Discord but under a different name it seems

#

@mighty schooner or there are four of them 😄

kindred silo
peak sentinel
#

RyanJon is doing good things with UI/slate, I saw some of his works for FlowGraph

peak sentinel
kindred silo
peak sentinel
#

Insights is updated profiler

#

made by Epic

#

Available for 4.25 and beyond

#

with fancy widgets

kindred silo
#

Ok. Thanks. I will look for it.

plucky prawn
#

@chrome bay how much would it cost me if I wanted more help with my replication (or lack thereof) stuff?

chrome bay
#

I doubt the comment matches the declaration order

#

Only way to know for sure would be to dig deeper

#

Also in an ideal world, the In shouldn't be that high - the server isn't constantly sending updates, it's only sending changes.

#

But what I mean is, you won't be getting any updates unless anything is actually changing

#

12 idle players will make little if any impact

vague fractal
#

So uhm, how much would GAS help me when it comes to client side prediction of animation montages ?

peak sentinel
#

You would just call play montage task in an ability and its done

vague fractal
#

That sounds easy enough.
But would it be fine if i use GAS just for this goal ?
Like i wrote already most of the systems i need, the only real problem for me is the client side predictions for things like attacking with an montage ^^"

peak sentinel
#

Implementing GAS is not 5 minutes work (its 30 minutes of work but a hassle if you are just going to implement for this)

#

So just for this, eh, no wouldnt be fine

#

But if you are going to use abilities or effects directly, yeah totally

vague fractal
#

Alright, so GAS it is not then xD
I've also heard about a plugin epic works on atm. Network Prediction was it i think
Is it still to early to give that a try ?

peak sentinel
#

Why not have a boolean with COND_SkipOwner condition

sinful marlin
#

I think GAS for just predicting anim montages is overkill

peak sentinel
#

And send the server RPC to set it true

#

Its pretty easy thing to predict

#

Since CMC also drives the mesh pose

eternal canyon
vague fractal
vague fractal
peak sentinel
vague fractal
#

I actually don't use the OnRep method atm, but a Multicast since the attack isn't relevant for players who are very far away

peak sentinel
#

Then just play animation and call server rpc to call multicast, on multicast if player is locally controlled return before playing animation

vague fractal
#

Gonna try it 👍

#

Btw, feel like it's worth noting that it's working good atm. The problem starts only when i test with an "normal" ping as it feels clunky on the playing client

vague fractal
peak sentinel
#

It will be trouble if client finishes before simulated proxies finish their anims and send another RPC to play animation

#

Other type of issues probably caused from CMC

#

since it drives root motion replication and mesh pose ticking

#

And its doing its best, so yeah sometimes you cant avoid issues :\

vital bramble
#

Hi, what could be a reason to have a RemoteRole set to None on my PlayerCameraManager inheriting class in BeginPlay ?

modern cipher
floral mauve
#

Probably a simple answer, I want to assign each player character the unique ID UID. I've replicated that variable and now I'm encountering the following issue

Instance 1:
Local character has UID 12345
Remote character has UID 12345

Instance 2:
Local character has UID 6789
Remote character has UID 6789

#

Ah I think I'm misunderstanding the concept of replicating

ripe shadow
neon ether
#

So I'm running into an issue where I'm quite certain im doing something a bit wrong when it comes to spawning in actors within client and server. To make things simple lets say I have an Inventory Component attached to a player. This inventory spawns in a weapon within begin play and the player can use that weapon. The issue im running into is when i debug the game and lets say im looking at the client or just player2 lets say. Player 2 will show its Role as Autonomous Proxy while if i look within the inventory at the weapon actor reference its holding the Role for that will show as Authority. What would be the correct way to go about spawning in the weapon actors so that the information matches up as would be needed?

floral mauve
#

(Basically making an RPC to tell the server "Hey I've been assigned this UID! Let the others know about this, thanks!")

#

If I understood the documentation correctly

ripe shadow
floral mauve
ripe shadow
# floral mauve It's actually a UID that is assigned by a third party app for teleconferencing i...

Seems like you got yourself a little login riddle. Make sure that the third party is ok with disclosing the UID to general public. Otherwise it has to stay strictly on the server and you will have to figure out other way to identify the characters. I've got myself once into situation where we got stuck on shipping a product because of legals and its a bitch to rework core system just before shipping.

floral mauve
sinful tree
# neon ether So I'm running into an issue where I'm quite certain im doing something a bit wr...

Your weapon actor sounds like it is being spawned on the client rather than server side. The role doesn't directly tell you if the object is from the server or not, it's more that it is telling you its relation to the current instance of the game.
While running code on the client, anything spawned by the client will return its role as Authority, similar to if you were running on the server, anything spawned by the server would have role as Authority.

late vale
#

Anyone know how I could replicate this? So that the flipbook is set on server so other's can see it

sinful marlin
molten matrix
#

This might be a long shot, but not sure what's going on. I have a networked game where I right-click somewhere and it sends an RPC to the server and then on both the server and the client it calls UAIBlueprintHelperLibrary::SimpleMoveToLocation(PController, DestLocation);.

Now this has been working great while running in the editor, but I recently went through the process of packaging up my game with a specific server target and everything. Now when I start a dedicated server from an .exe and connect to that server from the editor (locally, on the same machine), I'm getting some insane rubber-banding. Walking a distance that normally takes 2 seconds now takes close to a minute. This is really weird to me for several reasons:

  1. It's happening locally, so there should be minimal latency
  2. Even if the client and server were fighting about where to place the actor, I would expect the server to win and for the actor to still move the whole distance within a couple of seconds, instead of moving super slowly.
  3. If I change windows so I'm not focused on the editor (client) window, I can see the pawn walking normally in the background without the rubber-banding.

Any ideas what might be happening here?

grand kestrel
molten matrix
grand kestrel
#

You'd need to use client-side prediction, with characters you'd just send the pathfinding results as movement inputs though rather than building it from scratch

molten matrix
# grand kestrel You'd need to use client-side prediction, with characters you'd just send the pa...

Alright, it's definitely net corrections. Getting lots of green/red cylinder around my pawn as it's rubber-banding and I'm seeing a lot of "player movement" errors in the logs. Interestingly it seems like the ServerVelocity is almost always 0, and that's seem to be causing the difference in location:

Tue Feb 22 15:42:10 PST 2022  Warning      LogNetPlayerMovement *** Client: Error for TopDownCharacter_C_0 at Time=55.136 is 8.215 LocDiff(X=-4.576 Y=6.822 Z=0.000) ClientLoc(X=-18595.691 Y=-12035.105 Z=145.594) ServerLoc(X=-18591.115 Y=-12041.928 Z=145.594) NewBase: CruiserCommand:PersistentLevel.CCStaticMeshActor_11.StaticMeshComponent NewBone: None ClientVel(X=-105.065 Y=156.662 Z=0.000) ServerVel(X=0.000 Y=0.000 Z=0.000) SavedMoves 0
grand kestrel
#

You should be using AddMovementInput based on client side path following anyway so you get prediction

molten matrix
#

Got it. So to confirm, you're saying do something like this:

  1. User right-clicks ground somewhere. Calculate hit.
  2. Send RPC to server with destination vector
  3. Server kicks off pathfinding to destination.
  4. Server (somehow) repeatedly calculates based on the current path, what the movement input should be
  5. Server replicates this movement input down to the client, which then applies it locally using AddMovementInput.

If I want to add prediction to this, I would need to add a step between (1) and (2) where I also do pathfinding locally (or maybe just naively assume just use the angle from the current location to destination) and use that to calculate an initial movement input that can be used initially until we start getting movement input from the server.

neon mango
#

Having a bit of a multiplayer brain fart. I'm using onrep to notify the player states when the server has assigned the team int. Then on rep I execute logic to set the color of the pawns team on pawn's mesh.

But the client doesn't seem to do it for the server, only for itself. What am I missing?

vague fractal
neon mango
#

I'm not sure I understand what you mean?

vague fractal
#

The OnRep fires when the server changed the variable anyhow, right ?

neon mango
#

The On rep fires only for both pawns on the server, and only for the clients owning player state but on the client the servers player state doesn't seem to fire it

#

That is what the output log shows, you should see 4 Team Assigned messages but only see 3

vague fractal
#

Are you doing it in C++ or blueprints ?

neon mango
#

BP

sweet ore
#

hey guys. i'm thinking to make a web game with multiplayer with ue. is using pixel streaming can allow people to play together

#

?

sweet ore
#

but i don't want people to download the game. so is it good idea pixel streaming or just switch the engine

vague fractal
neon mango
#

Yeah. part of me is thinking, maybe I'm not supposed to do this in the player state, but like the Team Number should be replicated on the player state for sure?

#

I have this working for Health on the pawn itself with on Rep, health changes and updates everyone via the pawn. Health should also probably be on player state but if team int is acting this way then I can't move health over till I figure this out

neon mango
#

So my Team Int was default to 0 which represented an actual team. So when I assigned team 0 to the var that is already team 0, the OnRep wasn't fired because the value didn't change.

#

So I made the int default to -1 so it changes and sends an on rep.... so silly

vague fractal
#

Yeah, that's actually a thing you can quickly overview 😄

wary trench
vague fractal
#

Kinda wish this wouldn't be the case tho

neon mango
#

Yup, total brain fart...

neon mango
sweet ore
#

i'm not sure if pixel streaming can do this. thats why i'm asking it would be great if it is

neon mango
#

Ah.. I see. I don't think that is the right solution for the task. I'd use unity and build out to webGL. I think they still support doing that.

sweet ore
neon mango
#

So yes pixel streaming would be lightweight to the end user, essentially like cloud computing/gaming

#

But you'll have to spin up an instance of the game per client that jumps in

#

Unless you do some sort of local gameplay that runs remotely and have multiple users access the same instance, that might be possible never tried but that is less of a multiplayer question and more of a pixel streaming question

#

On top of that there are other existing solutions to hosting application online you could look into but again this is less of a multiplayer question and more of a cloud gaming question

neon ether
sinful tree
neon ether
# sinful tree If it's a replicated actor, it should only ever be spawned on the server if you'...

Okay so make sure the actor is replicated as well as the variable reference. And in the begin play with the client it will spawn it on the server and set the reference and since its a replicated variable the client will get that updated reference? Just wanting to make sure I understand the whole flow so I can actually learn and not just try and mindlessly program what your saying, sorry if the repetitive questions are super annoying

sinful tree
#

Why would your client make the server spawn the sword?

#

If the sword is supposed to be getting spawned along with the client's character, then you can do it on Begin Play, but it should be on the authority/server side only.

twin juniper
#

So, I'm using the FPS Multiplayer Template. And when I play the packaged game and click create game. It's just stuck on the loading screen. Here is are my host game blueprints:

#

And this is what the publisher said when playing multiplayer

Option 1 Using Steam
-Download the demo from the discord
-Open steam and leave it open
-Make sure that the steam download region is the same for all the players, this can be changed in Steam->Settings->Downloads ->Download Region
-Open the demo
-Create/Join a multiplayer game

That's for the demo which I think also applies to the actually project

neon ether
# sinful tree Why would your client make the server spawn the sword?

I must have misunderstood the "it should only ever be spawned on the server". The problem im trying to solve is that the Role for the weapon actor reference in the players inventory does not match the owning players Role. I was told this was an issue yesterday and have been trying to track down the correct way

neon ether
# sinful tree If the sword is supposed to be getting spawned along with the client's character...

So your saying something like this? c++ void UInventoryComponent::BeginPlay() { Super::BeginPlay(); // must spawn in our default mod so that it becomes usable if (GetOwner()->GetInstigator()->HasAuthority()) { FActorSpawnParameters SpawnParams; SpawnParams.Instigator = GetOwner()->GetInstigator(); AModParent* ModParent = GetWorld()->SpawnActor<AModParent>(DefaultModClass,GetOwner()->GetActorLocation(), FRotator(0,0,0), SpawnParams); if(ModParent) { // we want the default mod to stay forever so set never destroy to true and destroy the mesh component DefaultMod=ModParent; DefaultMod->bNeverDestroy = true; DefaultMod->bIsDefaultMod = true; DefaultMod->MeshComponent->DestroyComponent(); DefaultMod->OwningPlayer = Cast<ANetworkChar>(GetOwner()); } } }

#

the GetOwner()->GetInstigator() is just the owning player of the inventory

sinful tree
#

That looks ok to me. Yeah, when I said "should only ever be spawned on the server" I was meaning that however you do do it, it should be on the server, but I questioned why you were trying to have the client ask the server to spawn it as it is on Begin Play anyway and since Begin Play already fires on the server as well, you may as well let the server handle what it needs to handle.

neon ether
#

Sounds good, yeah it already works on the server side and once I have that "DefaultMod" replicated it should work for the client side as well

neon ether
#

Am I mistaken in thinking that is how it should work?

sinful tree
#

Is the inventory component also replicated?

pseudo schooner
#

Does anyone have a good tutorial or something for multiplayer elevators? I have m-player elevators working in general, but I have an issue where clients see the host jittering. The host sees all clients move smoothly, all the clients see other clients move smoothly, but all clients see the host jittering. Is there some magic settings I should be checking to fix this?

neon ether
#

I know its getting into that if check for Authority when the client spawns in but it just doesnt replicate the mod down to the client

neon ether
#

So I'm trying to set replicate a variable that im setting on the server in a begin play function. Im doing it as shown in the images below. For some reason though when the server sets the variable in begin play it doesnt replicate down to the client and call the "OnRep_DefaultModUpdate". I'm not sure if there is anything im missing, any suggestions would be much appreciated:

peak sentinel
neon ether
#

It turns out in the AModParent class I needed a "bAlwaysRelevant = true" in the constructor...

winged badger
#

network can handle only so many relevant actors at any given time

#

some need to be always relevant, but that comes to about 10% of use cases

grand kestrel
worthy knot
#

Guys i have a public IP installed, i have added port 7777 TCP/UDP on my routers port forwarding. added port 7777 on my firewalls inbound and outbound rules with edge traversal enabled. but yet when i launch a dedicated server exe on my PC and make a person from a different connection / IP join my PC, it says connection timed out

#

btw my IP gives ping response to other networks so theres nothing wrong with it

#

ive enabled and disabled the firewall on my router as well and then made clients join the game, yet they get timed out

hollow portal
#

I'm trying to get sprinting to work in multiplayer but it just feels really laggy and doesn't sprint

vague fractal
#

But very big note. It's kinda just not possible to make a proper sprint system in Blueprints only. You actually need C++ for it

#

You'll notice the "not working properly part" once you play with some lag

#

Also, you should set the Sprinting variable on the server rather than only on the client

twin juniper
#

does anyone know how do i fix this i need this connected

vague fractal
#

On CreateSaveGameObject, do you have to option to select PlayerSaveObject as class ?

twin juniper
#

does anyone have good steam multiplayer course? (tried watching DevAddict/Jeff course already)

thin stratus
#

If I have a NetLoaded Actor with a small NetCullDistance and my Client Spawns outside of it.
And the Server then changes something on that Actor, which results in an OnRep Variable being changed. Shouldn't that variable replicate and trigger the OnRep when I enter the CullDistance as a client? o.o

chrome bay
#

yeah it should

thin stratus
#

Hmpf, it doesn't

#

I'm drawing the CullDistances (the sqrt of it) with a sphere collision, so it should be accurate

#

Walking into it as one of the clients just doesn't update the OnRep var

#

It starts on Empty. It gets set to Loading -> Loaded on Overlap, which calls on everyone even without being in range of course. Then the Server does something that sets it back to Empty, which is not replicated to out of relevancy range player. But walking back into the sphere doesn't cause it to update ;_;

chrome bay
#

Hmm yeah it should do, unless it's the same as the default value of that class for some reason

thin stratus
#

Hm no, it just tried something else

#

I left 1 client outside of the range

#

And cause the loading and the firing with another client

#

means Loading -> Loaded happens again on everyone cause of overlap

#

And Loaded -> Empty happens on Client 1 and Server

#

When i walk into it with client 2 after that it works

#

If I do it with the Server and both clients are out of range, it breaks or so idk

marble gazelle
#

but the values are replicated properly?

thin stratus
#

I mean, I guess? It's an OnRep enum that the Server sets

marble gazelle
#

I mean, do you check if the value on client is the value on the server if you enter your sphere of interest e.g. does the value replicated properly at all

thin stratus
#

The Value properly replicates if everyone starts in the sphere

marble gazelle
#

Does it replicate in the cases where you don't receive the OnRep ^^

thin stratus
#

No, the variable simply doesn't replicate for Players that walk back into relevancy range

marble gazelle
#

Ok. you don't have any fancy rules added to the replication of the properties?

thin stratus
#

At least in that specific scenario

#

No

#

Simple "None" OnRep

marble gazelle
#

Ahh, it's in data

#

Out of curiosity, what happens if you try the same with code?

thin stratus
#

Hm?

marble gazelle
#

define the property and the on rep stuff in code instead of data (as rep notify is handled different for code and data IIRC)

thin stratus
#

You mean C++ vs BP?

marble gazelle
#

yep

thin stratus
#

I know the difference between OnReps in BP and C++

#

That's not the point here

marble gazelle
#

so did you test it to reduce the unknowns

thin stratus
#

No, that's also not a relevant test. The Project also doesn't have enough C++ to quickly do that

#

The variable OnReps just fine if I stand in the sphere when it happens

#

The value isn't even updated on the client

#

I can make it Replicated instead of OnRep

#

And we would have the same issue

#

The Client that walks into the relevancy range doesn't seem to get an update

#

even though it should

#

That's the whole idea of it

marble gazelle
#

Got that. I just mean, to identify the bug, it could be worth to test if the same happens if you try the same in c++, so if it's a BP specific issue or a general replication issue 🙂

thin stratus
#

Yeah I get you

#

It weirdly enough works fine if one of the clients issues the change

#

If the other one walks into the range it updates their variable

#

Well "issues"

#

It's a Server RPC then of course

#

But shouldn't matter. Server Clearly set the varaible to "Empty" and the Clients have it set to "Loaded"

#

Even if I change it to Rep instead of OnRep, it should at least update to "Empty" for a client that walks into range

#

Gnaaah ue4 why are you like this

chrome bay
#

Wait if it's outside of relevancy range, the client shouldn't have the actor at all

thin stratus
#

NetLoadedOnClient actors don't despawn

chrome bay
#

Ah kk so it's placed in map

thin stratus
#

Yeah

#

It's a Cannon to be precise

#

Walking into an Overlap loads the cannon. Walking over another one waits for input to fire it

#

That all works fine if everyone is in range

chrome bay
#

what engine ver btw?

thin stratus
#

4.26

chrome bay
#

Hmm

#

Out of interest, what happens if you uncheck NetLoadClient?

#

So it spawns an actor on startup

marble gazelle
#

Question on that.
If you have an actor that is net loaded, how does it get linked to the server? Is OnActorChannel open (was that the client side of things) called for it and then closed again and reopned?

chrome bay
#

They're linked by FName

#

Since if they're in the map then they're stably named

#

And net addressable

#

But yeah it should be opening/closing channels IIRC

marble gazelle
#

then I'd set a breakpoint there and see what happens^^

thin stratus
#

I can't realyl compare it to NOT NetLoadOnClient

#

Cause then they spawn without the Actor to begin with

#

What I did try was not setting the load state on the Client on overlap (so no prediction) and that seems to help? Idk why it would though.

#

Oh no

chrome bay
#

Oh

thin stratus
#

Is it that fucking bug

chrome bay
#

well yeah that's probably the issue then

#

I didn't realise you were changing it on client

thin stratus
#

No it's probably this annoying bug

#

That it compares the State with the Archtype

#

Instead of the instance

#

asdjklgfasjklfgaj

marble gazelle
#

onrep is only called if the value is different

thin stratus
#

The value is different

marble gazelle
#

but if you predict its not, right?

thin stratus
#

But it might be comparing to the archtype

#

If I predict then the value is 100% different

#

All have it on Loaded

chrome bay
#

yeah but server doesn't know that

thin stratus
#

Server sets it back to Empty

chrome bay
#

So it won't send back "empty"

thin stratus
#

Eh

chrome bay
#

If it never acked "loaded" for that client, it'll never send "empty"

#

And since channels are opening/closing, it won't send anything initially because it thinks the actor is in "empty" state

thin stratus
#

Okay, that might make sense

#

But how does one predict stuff then

chrome bay
#

So if the client predicts something when the actor is not net-relevant, then it'll be permanently out of sync

#

Don't 😄

thin stratus
#

Am I supposed to not NetLoadOnClient

chrome bay
#

Even Epic say they predict as little as possible

thin stratus
#

Hm

#

Okay, guess I do it server only then

#

That said, there is also this nasty archtype bug

chrome bay
#

That would be my guess as to what's happening anyway

thin stratus
#

but I think that had to do with Instanced changed variables

#

E.g. Blueprint has it set to Empty.
Instance in the Level has it set to Loaded.
Server sets it back to Empty when the Game Starts (everyone is relevant).
Breaks

#

Wonder if that's fixed in UE5

#

usually surfaces if you have an actor with a boolean state

chrome bay
#

IIRC we made "spawners" for some of our permanent actors in HLL to skirt around issues with startup actors

#

Though it was so long ago I can't remember what they were

thin stratus
#

Yeah we had Actors in The Ascent that had boolean states, which were e.g. false by default.
Like "Is this Terminal active?"
Some instances in the level were set to true, and later deactivated runtime again.
Client never got that update.

chrome bay
#

That does present an interesting edge-case though, if you predict something client-side and never ack it with the server because of relevancy, it could go permanently out of sync

thin stratus
#

Turned out that deep down in the code, for whatever reason, they compared the value with the BP Class value, but only in specific scenarios. Never got around fixing that. Not even UDN was able to help

chrome bay
#

Wonder if it's linked to that age-old issue where in-map actors would occasionally drop their saved properties

thin stratus
#

BP Class is the Archtype or so in their code

#

You can find that issue on Google quickly. Someone fought that a while ago with a simple pole actor that was in the floor by default

#

And outside the floor if hte boolean was flipped

#

Should 100% exist in 4.26

#

But I think, iirc, it had to do with flipping the value on BeginPlay back

#

So:
BP Class: False
Instance in Level: True
OnBeginPlay (Server): Set to False

#

Something like that

thin stratus
twin juniper
#

I made a multiplayer lobby using advanced steam session but when i load a new level using open level it just restart the current level. How can i fix?

verbal tendon
#

It never updates to False and Client has the value set to True?

chrome bay
twin juniper
chrome bay
#

ServerTravel TheMap (on the server)

#

Also this won't work in editor

thin stratus
#

Basically you would expect it to update back to false, case the server sets it.
But somewhere it compares to the BP Class value, so Server thinks it's not dirty.
A random ass delay fixes it. Not even frame based.

#

Even though it can't have anything todo with latency

twin juniper
chrome bay
#

think so, not sure if blueprint has a specific node for it

thin stratus
chrome bay
#

take a look at seamless travelling

verbal tendon
peak sentinel
thin stratus
chrome bay
#

Possibly changing between true/false too quickly?

#

Bools are useless for fast network changes

verbal tendon
peak sentinel
thin stratus
#

The only way we got to fix this was by turning the Bool into an enum and setting the BP Class to some invalid entry

#

E.g. Invalid, True, False

verbal tendon
#

lel 😄

thin stratus
#

:D You lel, it had to figure out why that happened in the first place

verbal tendon
#

I feel your pain

thin stratus
#

And it was not at all clear why it randomly worked when adding a 2.34524523 second delay

#

On the Server, that has no "ping"

#

As if the Engine takes a random amount of time to say "hey, you need to use the default value of the instance, not the BP Class!"

#

Uff, anyway, I will change this code to run on the server only. But first, walking the doggo.

verbal tendon
#

would've been great if you still had the context on this

#

to go fishing in the UE5 codebase and make a PR if it wasn#t fix

thin stratus
#

Ya, been too long, but you can try to repro it :P

#

It's not a big setup

#

takes maybe 10min

#

or 5

#

Make an Actor with a StaticMesh. Add an OnRep Boolean.
In the OnRep, move the StaticMesh upwards by some units on True, and back to the default value on False (some relative z location for example).
Set the value to false on the BP. Place an instance into your level and set it to true there.
On BeginPlay set it back to false on the Server.

#

Result: Server sees it correctly on the start z value. Client remains seeing it on the higher up value.
Expected Result: Both have it on the start z value.

verbal tendon
#

I'll make notes and take a look sometime

thin stratus
peak sentinel
# peak sentinel No, I wait 3 secs at least

Does not provide anything at all but if it's going to help I'll show my code: https://pastebin.com/WAH5T4fb
Rep condition:

    FDoRepLifetimeParams Parms;
    Parms.Condition = COND_SkipOwner;
    Parms.bIsPushBased = true;
    Parms.RepNotifyCondition = REPNOTIFY_OnChanged;
    DOREPLIFETIME_WITH_PARAMS_FAST(UWeaponModule, bActive, Parms);
verbal tendon
thin stratus
#

Left: False (Extended), Right: True (Retracted)

#

BP Class: False

#

Ah no, I confused my self, it breaks on clients

#

Server:

#

Client

verbal tendon
thin stratus
#

Yeah, haha nvm

#

But yes, 4.26 relatively easy to reproduce. Additional step to see it properly in the Editor is to also run the code in the COnstructionScript

#

So you see the update when flipping the bool in the level

verbal tendon
#

👼

thin stratus
#

Why

#

Evil, but why

#

Anyway, not looking for offtopic. Multiplayer Bug. Feel free to check UE5EA :D

#

Going to walk doggo now, cheers and thanks for the help everyone

verbal tendon
#

👋

peak sentinel
thin stratus
#

Isn't that basically what I described above?

neon ether
#

Okay so shocker I have another question: I'm trying to run a server RPC from an actor with a Role of SimulatedProxy and it just doesnt actually run the RPC it just skips over it more or less. Are you able to call Server RPC's from a SimulatedProxy? The actor is being spawned in on the server in the clients BeginPlay and replicated down to the client, does anyone have any insight in this situation?

thin stratus
#

No you are not allowed to call ServerRPCs on simulated proxies

#

Server and ClientRPCs only work if the Actor is owned by a Client

#

And ServerRPC specifically only if the owning Client calls it

neon ether
#

So should I be spawning in the actor differently to be able to allow it to call those RPCs or should I be following a different kind of work flow where I dont try and run RPCs within repliciated actors like I am trying to do?

thin stratus
#

Depends

#

If the Actor belongs to a Player, the nspawning it on the Server with the specific Player(Controller) as the Owner would allow you to call ServerRPCs on it

#

Think a Weapon that the Player carries

#

If the Actor belongs to anyone, then you should perform the RPC elsewhere, somewhere where the Client has ownership

#

Think a Door in the Scene

#

This problem often comes up when peeps try to make an Interaction System and trace something in the Scene and call the RPC on it then

neon ether
#

Thats the exact situation that im in, im trying to call these RPCs from a weapon that the player holds

thin stratus
#

Then you should be fine passing in the Controller of that Player

#

You usually spawn Weapons after the Character is possessed

#

So not on BeginPlay

#

Character has an OnPossessed event

#

Or PossessedBy or whatever it is called

#

Only runs on the Server

#

spawn it there and use GetController for the Owner

#

Or fwiw the Character itself

#

Since ownership is basically recursive

neon ether
#

So I need to be able to give the spawned actor's owner a reference back to the owning players player controller some way of which your saying is best to do form within the characteres OnPossess?

thin stratus
#

In the very specific case of spawning a weapon for the Character, yes

#

There may be situations where you do it elsewhere, as long as you pass in an Owner to the SpawnActor node that is either PC or owned by the PC

#

Read the ownership part in the Network Compendium

#

It should help clear things up

neon ether
#

It is worth noting that im doing all this in c++

thin stratus
#

Doesn't matter, the SpawnActorParams have an Owner property

neon ether
#

If im spawning in the actor within an actor component attached to the player does that change anything? Would i just be able to get the player controller by getting the component owner and calling GetInstigatorController()?

thin stratus
#

Yeah, whatever way you cna get it

#

GetOwner on the Component is the Character

#

Get the owner of that

#

And you already have the PC

molten matrix
thin stratus
#

I usually have a CharacterPointer in my Components that I init from Owner on BeginPlay or so. Then doing GetController() is straight forward1

neon ether
#

That makes sense! Ill give that a shot and see if it fixes the situation!

dreamy oracle
#

Hey so it really seems like my event tick never runs through the client version of my update slide function, despite the client being able to slide exactly like how the server does. This is a problem because the client never gets to the F0V control macro which adjusts the FOV of the camera based on the speed of your slide. Anybody have any ideas why? (This is in event tick)

thin stratus
#

:<

#

So many RPCs on Tick

#

You theoretically only need one

#

The one that tells the Server that you want to slide

#

And to be rreeeeaaally picky

#

You can't do movement properly in BPs anyway, as the only way to not get corrections at start and end of your actions is to use the CMC and send your input info along the ServerRPC that the CMC uses for Jumping, Crouching and general movement.

#

Also ClientCheckGround being a Multicast makes no sense

#

You aren't executing it on the Server

#

This setup looks generally like a clusterf'ck that will be hard to ever get done properly

#

If you need complex networked movement, you should learn C++ and the CMC, it's sadly just that

neon ether
thin stratus
#

To answer the question itself:

Hey so it really seems like my event tick never runs through the client version of my update slide function
Probably cause it's a not a normal event but a Multicast, which Clients can't execute

#

And the ServerRPC would only run on via the OwningClient, not the simulated ones

thin stratus
neon ether
#

So your saying this Owner ref in the AActor shouldnt be NULL or am I looking for a different specific Owner variable?

thin stratus
#

Yeah

thin stratus
#

Saying "Sorry" at the start doesn't make this any better.

#

It's not allowed. Use the Job Board

#

Yeah, so is everybody else. Rules are rules though (: If you don't want to catch strikes you should make sure to read them. Otherwise your reach turns very small.

#

We have 11 rules. Rule 8 is literally about this :D You aren't scoring points

#

Cheers

twin juniper
#

hi, i'm using advanced steam session but when i use servertravel nothing happen. How is it possible?

#

i mean, it works only when i play as Listen Server

thin stratus
#

Can you try to rephrase that and give more information?

#

Because Sessions and ServerTravel aren't directly related

twin juniper
#

nvm i fixed

thin stratus
#

What is the crash error?

eternal canyon
#

This could help with learning how to do networked movement in the CMC

#

If u needed resources

dreamy oracle
#

Thanks for the vid!

neon ether
short arrow
#

Someone told me you shouldn't let clients connect to databases, is this true? Shouldn't it be fine for clients to read from a database, just not write to it?

hollow eagle
#

no

#

You never want to expose a database publically.

short arrow
#

So then how do games give players their level when they aren't in a game?

hollow eagle
#

You contact a public-facing API that does the query against the database for you.

short arrow
#

Ah damn

#

More complicated things to learn. Thanks for the info

#

I think team tree house has a course in making APIs lol

neon ether
# thin stratus What is the crash error?

When i actually build in a development build to let it crash and tell me the error it doesnt crash at all...it doenst work and call the server RPC still but no crash

#

Does the controller itself also have to be set to replicates?

thin stratus
#

The Controller is by default replicated

#

It should give you an error in the log anyway

fading birch
#

that does cost $$$ eventually

neon ether
#

When using that player controller?

#

Because Im storing the player controller in the Actors Owner member as such:

grand kestrel
#

Simulated can't call RPC and don't have a playercontroller

thin stratus
#

Yeah I mean I already said that

#

Only the owner of that character will be able to do so

fading birch
#

Controllers only exist on the owning client and the server

thin stratus
#

It should be fine to just pass the owner via the spawnactor params

#

And that's it

#

There are no other special requirements

grand kestrel
#

If only someone would write a compendium on this stuff

grand kestrel
#

So here's a question. Standard character in UE4.26, nothing really added other than printing velocity if simulated proxy and velocity isn't 0. FPS capped at 30fps to reduce log spam otherwise this looks worse.

LogTemp: vel 106.301460
LogTemp: vel 159.662140
LogTemp: vel 159.662140
LogTemp: vel 213.789612
LogTemp: vel 240.260269
LogTemp: vel 266.940063
LogTemp: vel 266.940063
LogTemp: vel 320.090607
LogTemp: vel 320.090607

Notice the repeated values? It's both updating velocity too infrequently and too incorrectly. Question is... how do I get correct velocity value on simulated proxy 😄

short arrow
neon ether
#

Is that logic not correct?

thin stratus
#

It is. Again there is no magic behind this

#

Spawn replicated actor on the server, pass correct Owner and you can call ServerRPCs from client side on it, but only from the owning client

#

Any other client can't on that actor

neon ether
thin stratus
#

Yeah then it should be fine to call server rpcs

#

Everything that doesn't work is up to debugging

twilit radish
#

Why is the CMC such a pain to extend, I'm also just bad at this.. But it's still a pain xD

#

The docs mention how to at least somewhat extend it but doesn't really go into details too much.

grand kestrel
#

The docs couldn't possibly cover it. You just need to read it. It's huge

#

It's not really designed well

twilit radish
#

They wouldn't have to cover it all if you ask me, I understand that's a bit too much. But I would have loved a good example of extending something with custom data 😄

grand kestrel
#

It's been out there for many years in various forms, community wise

cosmic epoch
#

Is there a smarter way to get Add Impulse to replicate nicely to Autonomous proxies than to do an RPC? It works by default for simulated proxies due to their simulated tick interpolation etc which updates the velocity, but that's not the case for Autonomous proxies.

#

I mean, is there sth in the CMC that I could configure to get this done or maybe something better than Add Impulse?

kindred widget
#

CMC should be using LaunchCharacter, not AddImpulse.

ember vine
#

i need to have a replicated struct, however each value in the struct is dependant on another due to an initialization sequence - is there a way i can check that the entire struct has been replicated successfully (cleanly) before performing clientside logic to work with the values ?

#

is NetSerialize what i need to be looking at ?

winged badger
#

you can use PostRepNotifies, it will get called after all OnReps are done

#

something similar to what USceneComponent does here:

void USceneComponent::OnRep_Transform()
{
    bNetUpdateTransform = true;
}

void USceneComponent::OnRep_AttachParent()
{
    bNetUpdateAttachment = true;
}

void USceneComponent::OnRep_AttachSocketName()
{
    bNetUpdateAttachment = true;
}

void USceneComponent::PostRepNotifies()
{
    if (bNetUpdateAttachment)
    {...
ember vine
#

how does PostRepNotifies work with replicated structs, is it going to wait until each property inside the struct finished replicating and its happy ? also what happens in the case of one of these values is changed during play

#

does PostRepNotifies know to fire again or is that just an initial one time thing

winged badger
#

it will get caled after actor has finished calling all its repnotifies

ember vine
#

i see

#

what is the purpose of net serialization then, just bandwidth optimization ?

winged badger
#

mostly, yes

cosmic epoch
winged badger
#

FHitResult has an excellent example of that, its quite self explanatory

ember vine
#

thanks, will take a look now

winged badger
#

also, docs for NetSerialization are in NetSerialization.h header in few pages worth of comments

grand kestrel
winged badger
#

i do too, but felt silly to post an engine example and tell him to use a different function 😄

grand kestrel
#

Can't do distance matching without getting proper values

winged badger
#

that kinda looks like one of your scene components is replicating, probably the skeletal mesh

grand kestrel
#

I just made a new c++ character, added the logging, made a blueprint, chucked mannequin on with a new animation blueprint

#

Didn't change anythin like that

#

But nah the character jittering is from distance matching and the fact the velocity isn't updating properly creating fluctuating predicted locations

#

If I remove the mesh entirely I'll still get abnormal values when debugging velocity

#

One moment, I'll figure out some better debugging setup

#

Blank character with this now

#

The jitter is a lot more noticable when not recorded in low fps video too

#

Wonder what Epic did in Paragon to get usable values

#

Is it possible paragon had to have simulated proxy actually compute velocity at least to some degree

grand kestrel
#

I found a good enough solution by making simulated proxies compute velocity between replications (and replicating input to use with acceleration) on tick (not physics loops)

manic falcon
#

I am trying to make a multiplayer game, and am having trouble. How do i connect to a server that is not on my local machine? I am using AWS computer to host my server files, but when i type in hte IP adress of the the ASW computer, i cant connect. How do i fix that?

#

any youtube videos you know about? i tried searching and cant find one

winged fjord
#

hey, so quick question. Can I take the default shooter game in unreal and make it multiplayer?

#

if yes, then how?

sinful tree
winged fjord
#

but how can I give the exe or linux build to other people and ask them to join?

#

@sinful tree

modern cipher
#

you can setup a listen server with port forwarding or using hamachi i think

winged fjord
median nacelle
#

Is there a way to replicate ai on the client side because character movement only works on the listen server 😦

sinful tree
late vale
#

Anyone know how I could replicate this? So that the flipbook is set on server so other's can see it

mint nymph
#

Datura I tried looking into it more on like server changing all clients to a new level with the combo box but nothing

median nacelle
#

but not on the client

#

and yes I believe the pawn is replicated

#

this is the pawn Im using

winged fjord
#

I followed this tut

#

uh, how do I ask others to join the server?

sinful tree
# median nacelle Is there a way to replicate ai on the client side because character movement onl...

Hmmm.. I'd try disabling the replication on the AIController as by default it's not needed. Below are the replication settings I have on an AI controller that is operating no problem on my end and moving using a behavior tree.
There's not much else to go on with what you've provided so far as everything else looks like it should be ok in terms of replicating movement.

You could try even a more basic AI - just a series of "AI Move To" nodes on begin play of the AI Controller, just to see what happens. If it's still not moving around then maybe it's getting stuck somehow?

vital bramble
#

Hi, being in a setup : Run a dedicated server, run in one process disable and playing as a standalone client, I would like to work on the connection system, so without being auto connect to the server unreal starts when clicking on play.
I can't find a way to connect to this local server, trying to scan for session, even with open 127.0.0.1, I'm missing someone ? Thanks

plucky prawn
#

So I'm not sure who has been following my journey of the non replicating actor and I'm sort of hoping I don't have to retell it, but I managed to get PIE to start and not crash with "Play as Client" and it's still not replicating. Not sure if the server and client share the output log window in the editor but I was getting gamemode logs in it 🤷‍♂️

late vale
#

Is it possible to use a PI 4 (8GB) to Run a dedicated server?

plucky prawn
hollow portal
#

wait so why is multiplayer sprinting impossible without c++ ?

vital bramble
#

Hi, I think I'm missunderstanding something about PlayerState... every PlayerController contains a PlayerState which is use to replicate to all clients information about a particular player in the game right ? But only owning client & server has PlayerController which seems totally right, but how does the replication of PlayerState works then ? If client doesn't have PlayerController of other client, how does the PlayerState replicate and can be use by all client to get informations about other players ?

peak sentinel
#

@vital bramble what you are going to do? lets talk about that first

vital bramble
#

Nothing particular atm, I'm quite new to UE, and I'm trying to understand the lifecycle of network I would say, understanding how everything is linked together

peak sentinel
#

Gotcha. Think about 'world' for a while. When you are connecting a server, you are connecting it's world. And anything happens in that world triggered by server will also happen on other clients. When server spawns an object/actor, if it's set to bReplicates = true the instance of that object will be created in every connection. That's the 'object replication' itself.

#

There is also property replication, when you create that object, if you want your clients to access it from other classes you want to mark it as Replicated on UPROPERTY

#

And UE will use NetGuids behind the scene to replicate that object's reference/pointer

#

PlayerState is declared in APawn class

#

Which exists on every client if you spawn it from server

#

PlayerController accesses the Pawn and gets the reference

#

So if you need to access PlayerState from all clients you can just call GetPlayerState from Pawn class

vital bramble
#

Ok get it for the moment so basically, the world replicate himself on all client's world to make it simple. Actor are replicated (and only the actor, without his component), and then if you want some properties in component to be replicated, you mark them as Replicated

When you say PlayerState is declared in APawn class, I don't understand because I can see in engine source code, that AController has the PlayerState variable

peak sentinel
#

It also exists on APawn

peak sentinel
vital bramble
#

OK, it might be possible that the PlayerController on the server replicate any change made to PlayerState from either the server or owning client on the pawn, and that Pawn is replicating to all client, which in itself, it will propagate to all clients right ?

peak sentinel
#

Yeah but even if APawn hadn't a reference to PlayerState it would still replicate to other clients when you make a change from PlayerController by accessing that PlayerState reference

#

Because property replication is just 'property' replication, when you replicate a pointer to object it will just become accessible from everyone. Object can still exist on everyone's world even if they dont have a reference in anywhere

peak sentinel
#

But of course if you are making a change from client you need to send a Server RPC to make it possible

vital bramble
#

Ok, so replication works "automatically" from server to clients, but not from client to server ? I need to make an RPC on this case ? Can't simply modify my variable right ?

peak sentinel
#

so replication works "automatically" from server to clients
Yeah, properties marked as Replicated will be updated automatically behind the scenes in the engine. Also setting transform and spawning things will work automatically too because actor transform is replicated via FRepMovement struct in AActor and has an OnRep function. Spawning is a special case that engine handles for you. Rest is as I said, just property replication
but not from client to server ? I need to make an RPC on this case ? Can't simply modify my variable right ?
yep

#

but not from client to server ? I need to make an RPC on this case ? Can't simply modify my variable right ?
If you have a int32 X; marked as replicated, and want to change it by client, you send a server rpc Server_SetX(yourvalue); and server sets it

#

Then it replicated to everyone

#

Further and advanced topics covers prediction, lag compensation etc.

#

Even worse (most thing I hate to implement) reconciliation

vital bramble
#

Ok, and in the case I want prediction and set X in client before sending to server, I'll need to handle it right ? And when server replicate X to client, it also replicate from the sending client right ?

peak sentinel
#

Yeah, you might want to have Cond_SkipOwner on that properties replication condition though, depending on the case

#

If its a movement component that frequently updates that variable you dont want server to teleport you back to your previous sent location

#

But if its just an integer that only updates a few times in the game just setting it locally and sending to server is fine

#

Though be careful OnRep func wont fire in that case

#

Because OnRep is fired if current value and updated value is different

peak sentinel
vital bramble
#

Oh ok! Right thanks a lot for all the explanation 🙂 I'll keep diving into the lifecycle (got to see Session, game mode, game state, etc haha) might need some help again in the day! Thanks anyway have a good day!

twin juniper
#

after joining a steam session i'm still alone in my level but log says that i've successfully joined my second pc's session. Maybe i need to travel or something?

hollow portal
#

yo i made a multiplayer sprint system in bp

vague fractal
#

Now have fun to try the system with lags :D

hollow portal
#

it no lag 🙂

#

it just work for some reason

vague fractal
#

The world would be perfect with no lags, but that's sadly not the case 🥲

#

With lag i mean ping btw

hollow portal
#

yeah

#

ping sounds scary

vague fractal
#

I really don't wanna bring bad news, but from all i know now it's impossible to make a proper sprint system in BP only as you need C++ with its client prediction.
Once you play with ping (which isn't the case when you play via the editor by default) it will quickly break. At least for playing clients. Playing server will work

peak sentinel
#

BP + Custom CMC features for Multiplayer = Nope

#

It wont work, you gotta suffer implementing bitflags, custom movement states and derived classes that holds movement info

#

That's what gods of UE decided

vague fractal
vital bramble
#

Hey again! Got a question which is bit more concrete this time, I have coded a camera system which works quite fine in singleplay, but seems to broke totally in multiplayer, long story short, because I needs the player character in the initialization state, but I think that it is not already spawn on the server, so it broke it up.
Anyway, I just thought "anyway, camera on my case has nothing to do with server, it is an actor which is not replicated and it is not directly attached to the player position"
The problem is that it is my PlayerCameraManager which handle the SetViewTarget with my camera actor, and it is a call I only do on client side, and it seems like server doesn't really like this fact, and will fallback to default camera, does server also need to be authoritative on camera ? Dunno if that's really clear

hollow portal
#

ok idk if this is a bug but if you try and join a session then try and host a session it crashes the engine

crude grove
#

Anyone have this error with the advanced steam overlay? LogPluginManager: Error: Unable to load plugin 'OnlineSubsystemSteam'. Aborting.

#

i get this when i try to open the game after packaging

rocky night
#

Hrlp! 🤦🏻‍♂️ i spawn from the level bp replicated AIs… works great on server and client. BUTT🍑 if one spawns, on client spawns also a lifeless version which has no collision or movement

mint nymph
#

How can i travel all clients to another map and be executed to server pls need help on this

thin stratus
#

Preferably Seamless

thin stratus
#

You are probably runing it on both while replicated actors should only be spawned on server

mint nymph
thin stratus
#

It's how you do it though

#

Like, there is no additional magic :P

mint nymph
crude grove
mint nymph
#

well on the change level command on my controller

thin stratus
#

Why are you calling Open Level?

#

If you call that on the Client they will disconnect

mint nymph
#

yeah but when i delete that

#

it doesnt change for anyone

#

at all

thin stratus
#

Doesn't matter, you only need to call ServerTravel

#

OpenLevel are hardtravels, they will disconnect the player

#

E.g. moving back to MainMenu

mint nymph
#

ahhh ok

#

i wish i had my updated code

#

but it would look something like this to execute server command with an append

thin stratus
#

Yeah that should be fine

#

The ExecuteConsoleCommand node isn eeded for that in BPs

rocky night
#

if i run only on server still the same

thin stratus
#

Where is the spawning

rocky night
thin stratus
#

That's not spawning

rocky night
#

in targetpoints

thin stratus
#

That's getting a ref

#

Is that the LevelBP?

#

LevelBPs can't have RPCs

rocky night
#

yes its a evetn i call from another actor

#

oh

#

yes its a level bp

thin stratus
#

Yeah then you need to make sure it's already ont he Server before calling it

rocky night
#

i have keys and npc spawning from there

#

bin auch deutscher Ăźbrigens

thin stratus
#

Too much stuff I don't know about to really help, make sure the SpawnActor is called Server Only

vague fractal
#

You are aware that not everyone understands german here, right ? xD

thin stratus
#

I do, but @rocky night please stick to english.

heady python
#

Just started to use a PlayerCameraManager. It spawns on the server and the client, but isnt replicated. Whats the point to this? I'd understand if it was replicated because the server can verify data but its not so why is it even spawned on the server? Hasnt had an effect on me yet but i want to make sure that this wont cause issues later on.

latent heart
#

Probably so the server can work out where the player camera is meant to be?

neon mango
#

Is it possible using the null/no networking sub system to have a user connect to a listen server over the internet?

late vale
#

Is it possible to allow player's to join other's server's without having to use port-forwarding as the host

plucky prawn
#

depends if they are on the same network

#

if not, then not really without setting up a VPN

#

if yes, then yes

plucky prawn
#

is there any caveats to spawning an actor from a UWorldSubsystem? im trying to figure out why its not replicating to clients and honestly im out of ideas

kind ember
plucky prawn
#

eh what?

plucky prawn
#

the subsystem does not contain any replicated properties

#

im using SpawnActor from a function inside of my subsystem but its not replicating to clients

#

like.. it doesnt exist at all

neon mango
#

Cannot have replicated properties or functions

#

Spawnactor is a function

kind ember
plucky prawn
kind ember
#

Then the world subsystem should be created for game world,
Weird,
But the spawn actor replicates normally if spawn not via WorldSubsystem?

lost inlet
#

this should work as we also do it

#

the subsystem maybe initing too early in the UWorld initialisation so you might need to use one of the world delegates to wait until the world is ready

plucky prawn
#

im doing some more testing right now to confirm this

lost inlet
#

try using the FWorldDelegates::OnPostWorldInitialization delegate to spawn it

#

(also checking GetWorld() == World)

plucky prawn
#

ah thanks. ive moved my code around so that GameMode::BeginPlay calls a function in my subsystem which spawns it. delegate might work better though. i have confirmed its all working though which is great :D [2022.02.24-23.26.41:769][193]LogTemp: Warning: AJobProxy.GetLifetimeReplicatedProps [2022.02.24-23.26.41:769][193]LogTemp: Warning: AJobProxy.GetLifetimeReplicatedProps [2022.02.24-23.26.41:769][193]LogTemp: Warning: AJobProxy.OnRep_Jobs: Jobs Replicated [2022.02.24-23.26.41:769][193]LogTemp: Warning: AJobProxy.OnRep_Jobs: Adding jobs to subsystem except that its crashing now which i think i know why

lost inlet
#

yeah but I think it's a bit more elegant if the subsystem is able to self-manage it somewhat

plucky prawn
#

ye definitely

#

can i bind protected functions to a delegate?

lost inlet
#

even though the proxy actor will need some clientside code to register itself with the subsystem

plucky prawn
#

or do they have to be public

lost inlet
#

yes

plucky prawn
#

@peak sentinel didnt you say you were having the same/similar issue to me?

late vale
#

Is 100tb Bandwidth a month good enough for a server?

plucky prawn
#

just to make sure thats not a typo, is it actually 100 terabytes?

late vale
#

That's what the hoster says

plucky prawn
#

what type of traffic are you expecting? that is a ton of bandwidth

late vale
#

It's a light game nothing too heavy

plucky prawn
sinful tree
plucky prawn
#

you could probably host like.. 10k servers on that

late vale
#

So yes.

plucky prawn
#

yes

#

depending on the price though i would recommend seeking a lower bandwidth if its cheaper

kind ember
late vale
#

Where I'm getting it from.

#

It's like around 108 USD every month. 6 Core's, 960GB SSD x 2, 100tb Bandwidth, And 64gb RAM.

kind ember
#

Idk, first time hearing about it,
I use AWS GameLift,
How you are going to handle scaling with that?

late vale
#

One more question. I'm pretty sure but I want to double-check. Is it possible to host dedicated servers on Linux like Ubuntu?

plucky prawn
plucky prawn
lost inlet
#

Maybe there’s one a bit later then?

plucky prawn
#

is there a way to set the editor to play a client without starting a server?

sinful tree
#

If you do not connect to a server, then you are playing standalone, which means the instance you would be playing in is effectively the server.

plucky prawn
#

thats not at all what i asked

sinful tree
#

But it is effectively the answer to your question. You cannot have a client without a server.

#

The editor itself cannot act as a client unless it is connected to a server.

plucky prawn
lost inlet
#

GetNetMode() will only return NM_Standalone in single player

#

so I'm not sure where you're getting that from unless you roll your own networking

plucky prawn
#

im not rolling my own, but GetWorld()->GetNetMode is NM_Standalone on my connecting client :(

lost inlet
#

where are you calling this

#

are you sure it's not on an actor instance in the editor world?

plucky prawn
#

in my OnWorldInitializedActors delegate

plucky prawn
lost inlet
#

your world subsystem will initialize for your entry map too

#

are you also sure it's not there you're seeing NM_Standalone?

plucky prawn
#

... imagine if i actually read in the logs literally the line above that says its for the mainmenu

#

is the ReplicatedUsing function called before or after the property is replicated?

neon ether
#

Is PossessedBy() supposed to run on the server twice when possessing a client?

#

Mine is and I believe it should only be running it once on the server

lost inlet
#

you can add a parameter to the function if you need the old value

plucky prawn
#

does anyone know what would cause a TArray<AInfo*> to replicate all null values?

plucky prawn
kind ember
plucky prawn
kind ember
#

Server could be sending null values, or client does not have AInfo* instance

#

Btw what is your job system?

plucky prawn