#multiplayer

1 messages · Page 8 of 1

errant vapor
#

ive actually tried with both... as in, initially dormant actors, and actors that just use a very low update frequency(eg 0.001).. whether they use net load on client/placed in level doesnt appear to matter

pallid mesa
#

yes I got also confused for a second hahaha

errant vapor
#

its a fine icon

pallid mesa
#

are they placed in the level?

#

question is relevant

#

if that's the case then I recommend you using a proxy replication actor that can run at a higher net updates

#

with a fast array serializer

#

@errant vapor

#

so comfortably turn off replication on these fellas

#

and let this always relevant big bro handle data replication 😄

#

ive included analytical data comparing the method against competitive methods ie: push based replication

errant vapor
#

thus the question of whether theyre placed in level or dynamic, since in the latter case they wouldnt be name stable

pallid mesa
#

correct

#

😄

#

you can make proc gen actors name stable by using deterministic name generation

#

but that's not covered in the article

errant vapor
#

thanks, ill have a read through of this

#

i was considering maybe trying to modify the replication graph to keep a high frequency update rate until such a time as the client has acked the latest packet

#

but it would probably require extensive changes

pallid mesa
#

👍 pass me feedback if you find typos or something not clear!

pallid mesa
#

im with you

#

hi

#

well that'd be effectively a local predicted remote activation

#

but in these cases server initiated is okay

#

you can jump first in the server and later start jumping in the client producing a semi jittery result

#

for a smooth experience you can do what you suggested

#

but its a flow of rpcs just to achieve smooth butter results for your local client

fallow shadow
#

2 rpcs right?

pallid mesa
#

from server to client and from client to server

#

its a local predicted action with remote activation

#

lol...

#

although

#

im not sure if there are server only events that can produce smooth results in your client by just interpolating the result

#

because i dont like the fact that you have to do a couple of rpcs just to achieve a smooth launch character that should be triggered from the server...

#

mh

#

maybe someone knows?

#

rn I cannot check engine code

fallow shadow
#

like this?

#

Well, as long as the result is fine i don't really mind lol

pallid mesa
#

yez

pallid mesa
#

i want you to learn the proper way

#

because maybe im missing something

#

and there is indeed a way i dont remember rn

#

to get smooth results in your client

#

when executing directly from the server

#

;/

#

ofc implying lag

#

so... not prediction

fallow shadow
#

Well, hold on because i added some animations and they messed up the character real good.

#

and i cannot test...

fallow shadow
pallid mesa
#

is this component replicated and owned by a pawn?

fallow shadow
#

Yes and yes

#

Need screenshots?

pallid mesa
#

where are you calling the local launch character?

fallow shadow
#

From the take damage function

pallid mesa
#

can you remove the set actor location local?

#

also i see you are selecting self and something else as the target

fallow shadow
#

Yeah, i want the launch to happen to both characters

pallid mesa
#

oh okay, give me a sec attending something else rn

fallow shadow
#

No worries

pallid mesa
#

okay remove that node to get rid of plausible source of errors and hang on a sec

#

the set actor location local

fallow shadow
pallid mesa
#

okay im back

#

well that should work

#

because from server side you have access to both players

#

and you are invoking a client rpc on them

#

which are client owned components

#

@fallow shadow

fallow shadow
#

Well, i can tell you that it's causing jittering

fallow shadow
pallid mesa
#

where is it causing jitter?

#

in your local client?

fallow shadow
#

Let me check

pallid mesa
#

try setting a launch of 0,0,200 rather than your calculus there

#

and see if jitter still happens

fallow shadow
#

It's only happening to the client that's attacking(meaning the damage causer) But if i plug the calculus in it happens on both

pallid mesa
#

okay there are several questions that i have before we move on but i have to pickup some friends

#

so it'd have to wait

#

basically there is this server only take damage event that is not related to your anim notify

#

that I have yet to comprehend how these interact

#

to see the big picture

fallow shadow
#

May i text you in dms?

pallid mesa
#

feel free, sure although not sure how available ill be

#

today ill have a social day

#

XD

fallow shadow
#

That's fine. I will just try to explain the entire flow of the code

pallid mesa
#

👍

#

as long as you learn why stuff is going wrong so you can think of solutions yourself its all right 😄

fallow shadow
#

That's one of the reasons i wanna type it out lol. Thats how i usually really understand something

graceful mango
#

How do i set net update rate in component?
There is no NetUpdateFrequency in component

unkempt tiger
#

I might be mistaken but I think components use their parent actor's net frequency, please someone correct me if I'm wrong

elder sable
#

Is that possible to use beacons in pie ?

pallid mesa
#

Beacons is a topic I'm researching now I haven't touched before

#

but maybe I'm able to give you an answer later this week

#

you tried to setup online beacons in pie and got no success?

#

i imagine with ossnull

#

i was able to use beacons in standalone with steam running in the background

#

so that's all I can tell you... if that works for you

#

so you can test them in the editor, yes

#

just not sure if PIE would work

storm bough
#

Question, did anyone managed to setup EOS plugin + advanced sessions for UE 5.0.3 using epic account (no steam)? I have very weird problems with it (can create session and host joins correctly as far I can tell, but others can't join that session properly). Yes, I use two separate computers with different epic accounts.

celest canopy
#

when the HOST player left the game, all players will be kicked from the server after the host player, how I can avoid this? in games like call of duty black ops zombie mode ,after host left the game , another person will become the Host by server automatically and the game continue , how can do that?

fathom aspen
graceful mango
#

Have pawn must be possessed in order to client -> server RPCs work? If my pawn just owned, isn't it enough?

fathom aspen
#

It's enough to be client owned afaik, and invoked by owning client. Otherwise, it's dropped

graceful mango
#

doesnt work

#
{
    const FString FullPath = "Blueprint'/Game/Units/" + UnitName + "." + UnitName + "_C'";
    const TSubclassOf<AActor> SpawnActor = Cast<UClass>(StaticLoadObject(UObject::StaticClass(), NULL, TCHAR_TO_WCHAR(*FullPath), NULL, ELoadFlags::LOAD_Verify, NULL, true));

    FVector Position = Vector;

    ProjectAndAdjustLocation(SpawnActor, World, Position);
    
    const FTransform SpawnPos(FRotator::ZeroRotator, Position);
    ARODPlayerController* const Controller = Cast<ARODPlayerController>(NetOwner);

    ABaseEntity* Actor = World->SpawnActorDeferred<ABaseEntity>(SpawnActor, SpawnPos, NetOwner, NULL, ESpawnActorCollisionHandlingMethod::AlwaysSpawn);
    
    Actor->SetTeam(static_cast<int32>(Team));
    Actor->SetOwner(NetOwner);

    if (Controller)
        Actor->SetPlayerOwner(Controller);
    
    Actor->FinishSpawning(SpawnPos);
    Actor->FindClearSpace(Vector);
    Actor->RegisterComponents();

    if (Controller)
    {
        Actor->SetPlayerOwner(Controller);
        Actor->SetOwner(Controller);
    }

    Actor->SpawnDefaultController();

    OnUnitSpawned.Broadcast(Actor, Controller, UnitName);

    return Actor;
}
``` This does not make Pawn owned by PC
#

for some reason

#

how can i print ownership?

#

to be sure

fathom aspen
#

GetOwner

#

Also you SetOwner on server

elder sable
# pallid mesa you tried to setup online beacons in pie and got no success?

Yep, i think it requires many code change checking if you are in editor mode, was trying to avoid that but not sure it's possible.
Atm i'm trying to persist a connexion over map changes but i think we need to respawn the beacon and reconnect, or maybe use the game server connection instead i don't know what's the best design

fathom aspen
#

I'm not sure what's the thing you trying to persist, but fwiw you got GetSeamlessTravelActorList

elder sable
#

The online beacon, you mean i can persist it without having to reconnect ?

fathom aspen
#

If it's a seamless travel then there is hope

elder sable
#

Mhh

#

That's server only ?

fathom aspen
#

There are two versions

#

One for server, one for client

#

AGameModeBase, APlayerController

elder sable
#

Will try that then, thanks !

elder sable
#

Mhh i'm not sure to understand, seamless travel can work if clients are not connected to the game server ?

fathom aspen
#

No. They have to be connected to a server

#

First time you connect to a server is a hard travel

open quail
#

Hey guys quick question, how are you handling loading the selected character/equipment on a server travel? (e.g I select archer with the magic bow and enter a match)
I can only think of three solutions:
1.- Using the game instance so that the player saves the configuration when traveling, having an RPC on load and loading that character
2.- On travel, use level settings (open 127.0.0.1?Character=Archer?Weapon1=MagicBow) so the server reads them and loads the character based on that
3.- Send the current configuration on an API when the person selects a configuration and have the server run all the logic (e.g. myAPI.com/LoadCharacterConfig&Id=12345)

The first 2 I have the problem that it becomes client authoritative and in the future someone might abuse that, the third option might be too much overkill?

low helm
#

Dude

#

go easy on yourself

#

#1

open quail
#

yeah you are right lol

#

but sometimes unreal has some arcane thing ive never heard before that handles this kinds of things

fathom aspen
#

Here's my suggestions though

#

1- Use APlayerState::CopyProperties as it's really the best method to persist stuff that involve the player, i.e. PlayerState/Pawn

#

2- Wait for my blog post to get a more thorough answer

#

Though the TLDR is going to be 1

open quail
#

see? arcane things ive never heard b4

fathom aspen
#

Note though that it works only when seamless traveling

open quail
#

ah, so when the player state persists

fathom aspen
#

Correct

#

If you want something to work for non seamless then you have GameInstance or Subsystems

open quail
#

damn since i come from the main menu that'd probably won't work for me

fathom aspen
#

Subsystems are better imo in that regard

open quail
#

let me check the subsystems cuz ive always done it via gameinstance

fathom aspen
elder sable
fathom aspen
#

But in that case you copy the data and reapply it on respawn

elder sable
#

You can spawn actors in the world and save them in the game instance ?

fathom aspen
#

Nope

elder sable
#

Well you have to reconnect then

fathom aspen
#

References don't persist, and the actor won't anyways

#

Yes though you respawn with the copied data

elder sable
#

Well saving data is ok, the reconnection is annoying :p

fathom aspen
#

Hard traveling is effing annoying

twin juniper
#

Hey guys.
Do you know how to make „Widget Component“ visible only to the person whose collider Sphere overlaps with it? (C++)

coral wing
#

I'm executing some code after my session is created:
GetWorld()->ServerTravel(ServerLevelAddress);
and it's causing my session to not be findable by my client yet EOS dev portal shows that there's matchmaking sessions.

My client prints out that 0 sessions are found.

sinful tree
livid arrow
#

so I am back with continuing my attempt at solving this. As I currently have it set up, clients can see themselves "lean" and see other clients "lean". but now the server host wont "lean" at all. it can however see the clients "lean" and I dont know why it is being exclusive. If I switch the authority node, then the clients cant lean but can see the server host now leaning.

#

im sure there is some simple mistake I have made, but I just cannot seem to find it

fathom aspen
#

Well on authority call LeanLocal

sinful tree
livid arrow
#

thank you so much

livid arrow
paper plinth
#

I am currently getting a warning LogOnlineSession: Warning: OSS: No game present to join for session (GameSession), does this mean that the session cannot be joined by a client?

cerulean hamlet
#

no, that log can be almost entirely ignored

paper plinth
#

I found the problem with my game, it turns out that the slider I had set with a minimum value of "2" was sending the default value of "0" for the amount of maximum players in the game session

vale grove
#

how do i do multi user editing

fathom aspen
#

What this has to do with this channel?

rough goblet
#

Hey, never made a multiplayer game before but I am trying to learn. Watching a tutorial from ue4 but I am using 5.0.3 which may have something to do with my issue. So I have used print string to give myself an idea of what's working and what's not and I can create a session, find a session, and join a session but it won't actually join. Is there something else I need to do after? It will print string for "Joined session" which comes after success of joining session but I don't actually load into the same session I just stay on the main menu level

stray mason
#

[QUESTION]
Hey, i have quick Q.
I have UPROPERTY with RepNotify. When i trigger the Uproperty from server, only Clients received. On_Rep function doesn't work on the server. Only clients. Is this normal? party_manny

stray mason
twin juniper
#

so first i developed a steam dedicated server game, but then i decided it's too expensive for one person to maintain, and did a steam listen server game

#

question is

#

what would be the drawbacks of using a listen server game hosted on some cloud and make it appear as a dedicated server?

zenith wyvern
#

I have a UI which I want to ultimately use to save data on a (dedicated) server. None of my rpc 'run on servers' are running, i imagine because of one of these rules...

#

I attempted to wire in to game state/player state to make the call, but no luck. What am i missing

short arrow
#

you have to give better information than this for the highest chance of receiving help

zenith wyvern
short arrow
#

even that's not enough, where are you calling save character event?

#

inside of the UI?

zenith wyvern
#

here is my ugly web of trying to find somewhere that can legally broadcast

#

i can see it fire in standalone, but when i switch to dedicated server/live testing, the call is getting dropped

short arrow
#

even that's not enough, where are you calling save character event?
inside of the UI?

zenith wyvern
#

yeah. in an onClicked of a button

#

but, im fairly certain that's not a legal place to rpc, so i started trying to find legal places to broadcast from

short arrow
#

So youre accessing the playerstate from the UI?

zenith wyvern
#

i tried game mode, game state, player state, and a pawn. no luck

short arrow
#

You can't call server functions inside of a UI

#

Unless it's the server doing it

formal solar
#

If I want to set the 'velocity' parameter in my CMC, do I need to multicast this? I am running it on server but not seeing it on any client

zenith wyvern
#

I thought I was circumventing that by having the owned/replicating actor make a call, which would be allowed right?

short arrow
#

That's never worked for me, only when I do it as the server

#

Try to add a second event that isn't replicated

#

On the character

#

And then have that event call the replicated event

zenith wyvern
#

sure, tryin

formal solar
#

character movement component

short arrow
#

I'm pretty sure you have to multicast movement related changes

#

I dont believe that's something ue does automatically

zenith wyvern
#

no luck. any chance 'save game to slot' functions differently on a dedicated server?

short arrow
#

It doesn't, can you connect breakpoints

#

and see if the events are being hit

#

and then make sure the objects are correctly being passed

zenith wyvern
#

Can i debug the dedicated server like that?

#

I thought only my client was in the PIE

#

when i run in standalone, the breakpoint is hit and stops

short arrow
#

clients shouldn't be giving server any information on saving by the way. The client should say (hey can you save?) and the server just saves

#

nothing should be passed to the server o.O

#

and yes you can run breakpoints on server

#

you are passing the slot name, and the save game object to the server as client

#

that shouldn't be a thing

zenith wyvern
#

that was just for simplicity in testing the rpc

#

youre saying it might be an actual issue though, and i should just move it now

#

?

short arrow
#

yes

formal solar
#

Ok so my issue is, I am trying to adjust character movement component vertical velocity value
The problem is, my actor is a child actor of another actor which is anchored on the xy plane. I attached the actor via the AttachActorToActor node and the attachment works fine

storm bough
#

If I want to open map after creating session with LAN true, options should be like that, correct? listen?bIsLanMatch=true

fathom aspen
# zenith wyvern

UMG are not actors and they aren't replicable, so it's 1 and 2

fathom aspen
# zenith wyvern

SaveGameObjects are not replicable, so they are local. That's why you can't send them via RPCs

storm bough
grim locust
#

I turned on network emulation in the editor to get a more realistic multiplayer test of a project I'm working on and noticed that the core movement seemed to have issues.

As a test, I created a new third person project, set the emulation profile to average, and ran the game in multiplayer and noticed occasional pops/rubber banding on my local client. They are small, but still noticeable/jarring.

I'm just a bit surprised - the stock character movement controller has a lot of code for handling prediction and synchronizing the client/server movement. I guess I just expected the default behavior here to be better, so I'm assuming I must be missing something.

thin stratus
#

You probably have PackageLoss in those Average Settings

#

PackageLoss is just the worst :P

cerulean hamlet
#

You can also tweak the rubber banding in the Character movement component settings

#

Under the client correction stuff

#

Packet loss tho does no one favors

grim locust
#

Ah, I see, it's at 1 percent in this profile yeah.

I do see in UCharacterMovementComponent::ReplicateMoveToServer() that it appears to aggregate "moves" all the way back to the last acknowledged one which should help with lost packets.

I was just about to ask if that misprediction interpolation was tuneable, awesome.

#

Verified that 0 packet loss removes the issue. I turned it back to 1 percent and tried playing with what appear to be client correction knobs but it doesn't feel like it's affecting the visual pops like I'd expect. Went all the way to one second for interpolation time but they still feel like very quick/aggressive corrections, so maybe I have the wrong ones?

#

Will keep digging though, thanks both for the assistance ❤️

graceful flame
#

The red circled values control the time for a server corrected simulated proxy to reach its destination. So you need to be testing with two clients running or sever and client and move one while watching it move on the other window with simulated lag.

grim locust
#

Ahh, I think I see, I misread the tooltip. I was looking for how the local client handles correcting mispredictions (e.g. autonomous_proxy rather than simulated_proxy)

graceful flame
#

Packet loss results in the sever correcting (teleporting) the player to where they’re supposed to be. I don’t think there’s a way to smooth that out because cheaters. You can adjust how much tolerance of deviation is allowed but that could just result in a complete and total desync.

#

You can interpolate the movement of simulated proxies so that other lagging players kinda look like they’re teleporting less but you as a player will have a jerky not so responsive feeling whenever there’s packet loss. Some AAA games come up with their own solutions to mitigate this as much as possible. There are some GDC talks floating around here and on YouTube for this subject and other similar ones for games like Overwatch and Valorant.

grim locust
#

Gotcha yeah, happy to add something if needed. Just seems like if you can work within how unreal expects you to solve these things you tend to have a better time, so was hoping to understand what was there out of the box. I'll probably debug through the source a bit and get a better feel for how that correction is happening now.

graceful flame
#

I find testing with packetloss can help out with finding bugs or game exploits that might give an unfair advantage due to lag spikes.

storm bough
#

I added text renderer component on player character (you know, for nickname above head) and marked that component for replication, but it does not update - player sees their own nick, but not others.
If I had to venture a guess, I am supposed to have separate replicated text variable and if it changes, update text renderer accordingly. Is that correct?

fathom aspen
#

Correct, you don't replicate that component. Also replicating FText isn't a good idea afaik. You already have a name property in PlayerState which is replicated. When the OnRep it's tied to fires you set the text on the component.

storm bough
#

Right, I forgot about PlayerState. Will check it.

low helm
#

Need a refresher --> Have an RTS Camera Pawn

How do I cause my multiplayer location to follow the client side pawn? As I roam the map, replicated actors are not popping into view. I thought it was this setting on the CameraManager but it seems to do nothing.

lost inlet
fathom aspen
#

Thanks for the clarification!

fathom aspen
lost inlet
#

well yeah thee player name there already exists, but you convert the FString to invariant text in the widget itself

fathom aspen
#

Gotcha, thanks!

lost inlet
#

plus localisation isn't really applicable to user-entered text anyway

fathom aspen
#

Ah it has to be set beforehand?

lost inlet
#

I was pretty surprised when I found FText replication "just works" though

fathom aspen
#

Oh wow, that's new to me. I'm not that familiar with how it works all together, but good to know. Notes written down

lost inlet
#

it replicates a FTextHistory or something similarly named to that, which unless the text is invariant, it'll retain information like string table entries and text formatting over the network

#

though of course if you do ToString on the server then that's destructive

fathom aspen
#

I see you, so you can't simply convert it like that. I guess I will have to dig into that FTextHistory thingy then.

lost inlet
#

I've seen the "you can't replicate FTexts" myth here a few times

fathom aspen
#

Literally. I've seen it mentioned quite a few times by big names, that's why I keep being worried about it xD

#

Though the RPC part you mentioned makes more sense to me now. I've seen an example somewhere of someone RPCing chat messages as FText

umbral horizon
#

Hi, I am using flying mode and want to have server authoratative gravity. Suppose I add movement input in the -Z direction from the client to act as gravity, then if the player net got off, he would be stuck in mid air. Isn't there a way i could have server authoratative gravity?

low helm
#

Need a refresher --> Have an RTS Camera Pawn

How do I cause my multiplayer location to follow the client side pawn? As I roam the map, replicated actors are not popping into view. I thought it was this setting on the CameraManager but it seems to do nothing.

low helm
peak sentinel
#

Quick question: I'm trying to replicate locally simulated weapon bullet spread by FRandomStream and its seeded by 42 -- but players joining late to the match wont be synced with others

#

whats the best way to overcome this?

sinful tree
peak sentinel
#

Each player would see a different spread though?

#

Actually seeding again after each shot might overcome this, as you said

sinful tree
#

Shouldn't. Server generates the seed after each shot for each player. When player A shoots, their seed is set to 3583. When player A shoots again, player A and player B will see the seed is 3583 for that player, thus they can simulate it exactly the same.

peak sentinel
#

Gotcha, thanks

peak sentinel
#

Another quick question: how ownership works on replicated UObjects?

#

Is it equal to replicating actor's owner?

lucid lake
#

😄 i am sure a lot of you know clash of clans for example.
Is there a way i can do the same, like every client has their own level but they are still connected to the server?

fathom aspen
#

Jambax's article covers that part iirc

fathom aspen
livid arrow
#

can anyone tell me why all of this is replicated except for the server host? the boost multicast is seen by the owning client and every other client including the host. but when the server host does it, only the server host sees it themselves.

#

also I am not super educated on multiplayer systems, so I apologize if I have made obvious mistakes.

fathom aspen
#

In case of a listen server, you don't need to RPC but anyways it will fire as normal function on server.

#

Is the multicast firing when you fire that input on host?

#

i.e. have you tried debugging it?

rough jolt
#

Hi folks! I am using "smoothsync" plugin to try and replicate multiplayer movement in my WIP star wars fangame but...

#

stuff like this keep happening, and no matter what I try i can't seem to get rid of it fully

#

Any ideas?

#

The spaceships always seem to be a little bit behind in the other clients

#

it's even worse because i'm just testing in the editor, which SHOULD be a virtually ping-free enviroment afaik? so it's probably much worse in actual gameplay

cosmic crystal
#

hello i am attempting to replicate this trackerball actor's selfdestruct and bool for selfdestruction, I would appreciate some help. It feels like a very small thing I need to add, but I jsut cant seem to put the right stuff in the right spot.

livid arrow
# fathom aspen i.e. have you tried debugging it?

what would be the best way to debug for that? the input does fire on the host client but it is not replicated to the other clients. Which doesnt make sense to me as the clients can see it as long as the host isnt the one doing it

#

its as if the multicast is not multicasting for the server host only

fathom aspen
#

That's a guess not a fact

#

Welcome to debugging

#

tl;dr you press on the node you want to set a breakpoint for and you hit f9

#

In your case the multicast

#

Then you can step through your code and see what's being executed and what's not

fathom aspen
#

But anyways learn to debug

livid arrow
rancid cave
#

what would be the smoothest way to MoveActorToLocation over a small amount of time in multiplayer. I'm guessing some kind of lerping using a timeline? But i don't quite have my head around lerping things yet, so I was hoping I could get some help. Whatever the solution is, would hopefully have as little server correction as possible. This would be a fairly fast movement. Thanks for any help you can provide.

livid arrow
fathom aspen
#

What anyone here would do is literally try to read your code and guess why it's not working. The better is option is if you see the debugger, he would tell you 100% why it's not working

#

^ Last guy did debug his issue was solved

dark edge
coral wing
#

I'm executing some code after my session is created:
GetWorld()->ServerTravel(ServerLevelAddress);

and it's causing my session to not be findable by my client yet EOS dev portal shows that there's matchmaking sessions.

My client prints out that 0 sessions are found.

rough jolt
quasi tide
#

Is there a way to turn on replication for a static mesh actor? Not a BP derived one, but like when you pull a static mesh into the world by hand. I can't find the setting.

fathom aspen
#

I don't see they have any, probably bNetLoadonClient is what you're looking for

sinful tree
#

I don't think you can do much else with the base Static Mesh Actor class

fathom aspen
fathom aspen
quasi tide
red sand
#

I am facing a small issue with replication.
I have a turret above a vehicle which is a actor that contains static mesh of turret.
It's controlled with camera movement. The problem I am facing is, that in multiplayer, the movement of turret isn't replication, can anyone please help me on what I might be missing?

fathom aspen
celest bough
#

i have a hopefully quick MP question. In my MP game, each player spawns a ghost of their best run on a level, but when the host spawns theirs, everyone else can see it also. How do i prevent this from happening? ❤️ ty

#

i had the event set to owning client but that didnt solve the issue

fathom aspen
#

Clearly you spawn it client side

fathom aspen
celest bough
#

it is on the player controller

fathom aspen
#

In that case it should be running on the owning client

celest bough
#

im nt sure i follow

#

i have it set to owning client

#

but it still spawns for all players when the host does it

fathom aspen
#

And I say that's not logical. At this point you have to decide if you want to share code or not

celest bough
#

you mean i shud send pics?

fathom aspen
#

Yes

celest bough
#

this is the code that spawns it

#

in the PC

fathom aspen
#

Though I don't see anything

#

Ok where you call it

celest bough
#

gets called from a child of the same PC

#

so these are the parent events

fathom aspen
#

Who calls that event

celest bough
#

and they arent set to client only

#

could this be the issue?

#

ok i tried making those client and it didnt fix it

#

so that is called from this

#

also on the PC

#

and that is called after the server spawns a pawn for the player that joined

fathom aspen
# celest bough

If you are already on client, why do you keep calling client RPCs

#

You are already on client, call a normal event

#

It will execute on client

celest bough
#

i see

#

is that the issue?

fathom aspen
#

No. It will execute on client, but that's some bad habit

celest bough
#

ah ok

#

any ideas how to prevent the host spawning its ghost for everyone?

fathom aspen
# celest bough

Also here the event after possess is a server RPC. You are calling it inside a server RPC. Same reasoning

#

Should be a normal event

celest bough
#

ah ok

#

so if im on a server event, if other events i call need to be on the saerver also i dont need to mark them to do it

#

since its already there

fathom aspen
#

Correct

#

Same goes for client

#

The event is self also should probably be a normal event (Request Player..)

#

That's 100% called from server.

celest bough
#

shouldnt be server?

fathom aspen
#

Yes. You already call it from somewhere where it's server

#

Where do you call it from?

celest bough
#

also from PC

fathom aspen
#

I meant from server or client

celest bough
#

client i believe

fathom aspen
#

RequestBeginPlay doesn't tell me much

#

That's custom

#

I'm looking for the engine function

celest bough
#

ok so it all starts in the game mode

#

with this

fathom aspen
#

That's server

#

See

celest bough
#

it calls the client though right in that function?

#

and this is the one that calls request gameplay

#

thats everything from the engine event

fathom aspen
#

Ok that's a ping pong which is valid

celest bough
#

xD

#

guess that means bed time for me. thanks for the tips ^o^

fathom aspen
#

No worries, it's for me too 💤

vivid prawn
#

How do you handle replication in level instance? it seems like it doesn't update clients.

sinful tree
vivid prawn
#

yeah, the level instance you add to existing map (not level streaming)

#

the blueprints that i have in it, when it call multicast; it doesn't send to clients

#

This is without level instance, it send both to Client and Server

#

this is in level instance, only appear on server

#

It seems like the level instance are not aware of clients? do you need to load them or something?

#

Net Load on Client is checked.

dark edge
rough jolt
#

i guess it was just the editor being janky af

paper plinth
#

Is there a reason ClientTravel() would only be working when ran from inside the editor and timing out when ran from outside the editor?

zenith wyvern
#

I'm struggling a ton with a replicated struct. On a server RPC, i load save game slot in the controller and store the loaded data in a local struct (which replicates)

#

It works in standalone, but on a dedicated server, the client never gets the loaded data, it just has a default values struct

chrome bay
#

probs need to paste some code

zenith wyvern
#

so here's the server rpc that loads a save, pulls struct data out, and sets the local version

chrome bay
#

First problem is your replicated struct appears to be stored on the game instance, which does not replicate

#

And infact cannot replicate

zenith wyvern
#

maybe ive combined 2 problems

#

I was trying to put it somewhere that would persist between levels

#

i landed on gameinstance last, i tried a bunch of others first. pawn/controller/etc

chrome bay
#

GameInstance survives level transitions but only actors have replication support

zenith wyvern
#

Maybe you can help me take a step back and think about the right way to do what im doing

chrome bay
#

My first question really is why load a save game on a Server, that makes very little sense to me without any background

zenith wyvern
#

The plan was to save characters on the server, which is dedicated persistant world

#

Saving on the client would mean security/data loss issues?

chrome bay
#

Well, the issue is when you join another server, that save data doesn't exist there

#

So everytime you join a new server, your save data is gone

zenith wyvern
#

At the moment, i have my servers runnin in the same folder

#

So, it has access to the same saved games folder

#

Or, you mean, on a level open, i lose everything anyway?

chrome bay
#

No but in the real world you wouldn't have servers running on the same machine, let alone the same folder

zenith wyvern
#

Definitely. This is just getting some foundation setup

#

So if the data existed in an sql db, i still have a similar issue right?

#

Server is going to fetch data from somewhere then need to replicate it

chrome bay
#

It depends, you don't necessarily have to replicate it. It also depends what it is.

#

If this is player-specific data, then the only logical place to store it really is the Player State or player controller

#

Even if the game instance method did work, you would be setting that on everybodies game instance

zenith wyvern
#

player data but not player specific. Things other clients would need to know about entities it encounters, like their names/levels

#

that would be replicated right?

chrome bay
#

Not usually

#

And how much data are we talking?

zenith wyvern
#

Oh. because i would be referencing it by obj, and all clients dont need all the data all the time

chrome bay
#

Data about entities belongs on the entity itself

valid imp
#

Hey there! I'm doing some Procedural meshes on client side and I get this weird error from LogNetPackageMap

Warning      LogNetPackageMap          FNetGUIDCache::SupportsObject: ProceduralMeshComponent /Game/FirstPersonCPP/Maps/UEDPIE_0_FirstPersonExampleMap.FirstPersonExampleMap:PersistentLevel.BlockWorld1.Chunk 51 NOT Supported.
Warning      LogNetPlayerMovement      ClientAdjustPosition_Implementation could not resolve the new relative movement base actor, ignoring server correction! Client currently at world location X=331.468 Y=255.332 Z=148.155 on base StaticMeshComponent0

I would expect mesh generation to be fully unrelated to networking, I don't want to replicate anything with that, how is that error even possible?

zenith wyvern
#

i guess i assumed that needed to be replicated to be available to other clients

chrome bay
#

Each of which is presumably an actor, and replication already has concepts to deal with relevency etc.

chrome bay
#

The object the character is walking on has to be network addressable to use based movement

valid imp
#

Ah, that's a pain. But it makes complete sense.
Would it work if I set CanBeCharacterBase to "No" only if I'm not the Authority?
Basically I want the server to have the meshes of all players, for movement, but clients only need the mesh of what is around their own player.

chrome bay
#

The server and clients all need to agree on the movement base

valid imp
#

For all players for all clients?

chrome bay
#

Just the controlling client and player

#

The Server can have all meshes, that's fine, and clients can only have certain meshes relevant to them, but the point is that all the mesh components need to e individually addressable, which means all names and ID's have to match for all clients

valid imp
#

Alright, so as long as names & IDs match I can generate things separately. Cool. Thanks.

chrome bay
#

But the long and short of it is they have to be network addressable, that's really all there is to it

#

Which either means their object names have to be completely stable (aka in the level or deterministically generated), or they are spawned at runtime and replicated by the Server.

zenith wyvern
#

I'm still doing something fundamentally wrong it seems. I cannot get the saved game data my server loads back to the client

#

I'm presenting the user with a list of save files, that contain basically just a character name for now

#

The user selects one, and is sent to another server, where the first thing it does is attempt to get the data from the save slot

#

The server is successfully loading, reading, printing the characters name, but the client never sees anything but default values in the data

#

Is there any chance it's because i'm using 'set ...' to set the struct as a whole? Do I have to do something else, like set members of?

chrome bay
#

Setting it in one go is fine

#

I mean you are getting PlayerState from player "0" there though, which is always going to be the first player in the server, or the server itself

zenith wyvern
#

yeah i swapped that to the proper multiplayer version

valid imp
chrome bay
faint eagle
#

is (and if so how much) replicating properties more performant than reliable multicast RPCs? I want to trigger some event on simulated proxies but I don't mind little delay in it, so initially I used replicated gameplay tag for it. But occasionally the engine doesn't replicate the same property value multiple times even if I use push based model so I've come up with an idea to wrap the tag into a struct and add a new nonce property (uint8) that is different on every update on server so that I can trick the engine. Does such hack worth the benefit of avoiding using reliable multicast RPCs? I don't mind the 1 byte overhead (if I wasn't that lazy I'd even implement custom NetSerialize to leave only 3 bits of the nonce)

chrome bay
#

The usage is different, so it's not really a question of performance.

#

State = Property, always

quasi tide
#

Hey Jambax - do you plan on digging into Iris?

chrome bay
#

Probably eventually

valid imp
chrome bay
#

I doubt it does tbh

storm bough
#

I've noticed that you do not have network data straight away and need to wait few ticks after new player joins before you can safely access stuff like network id or name. Is that normal?

pallid mesa
#

from the client? absolutely normal

storm bough
#

what to do in this case, just loop over ticks until IsValidUniqueNetID returns true?

fathom aspen
#

No. That property is replicated

#

Inside PlayerState

#

You have OnRep_UniqueId

#

Wait for it to be called

storm bough
#

ok, thanks

storm bough
fathom aspen
#

That's because it's not exposed to BP and I don't know of any workaround but to use cpp

#

You're going to have a hard time if you keep using BP for MP

quasi tide
#

You're going to end up using C++ in networking. Or you could try and find plugins that handle what you're trying to do.

storm bough
#

bleh. Ok, thanks

fathom aspen
river hound
#

LNK2001: unresolved external symbol "public: virtual void __cdecl IPlayMontage::PlayComboMontage(enum AttackTypes)" (?PlayComboMontage@IPlayMontage@@UEAAXW4AttackTypes@@@Z) any ideas ?

latent heart
#

You haven't included the correct module in your build.cs

#

(or the function isn't exported)

river hound
latent heart
#

Wrong class

river hound
#

?

latent heart
#

It's your interface implementation that is missing

#

You didn't put = 0 on the end

river hound
#

oh

#

I need to put = 0
?

#

I saw that in the documentation w

#

why?

latent heart
#

It indicates that that function has no body

#

Much like a nullptr

river hound
#

oh

latent heart
#

If it's not there, the compiler might expect one and throw errors, like that, where it thinks there should be one.

river hound
#

so I should always do that?

latent heart
#

For interfaces, absolutely.

river hound
#

virtual void PlayComboMontage(AttackTypes AttackTypes) = 0;

river hound
latent heart
#

You can't override functions and change signatures like that

#

Well, you can, but yeah. You probably shouldn't.

river hound
#

oh so need to go into a functions then called on the input

storm bough
# fathom aspen You have OnRep_UniqueId

I'm using OnRep_PlayerName(), but GetPawn() (returns pawn controlled by this player state) returns nullptr... I intended to cast it to player character and call function that sets name over character's head. Any idea what could be done?

latent heart
#

Create a second function (change the name or add using YourFunctionName; to your class to import the base class function instead of overwriting it) and do whatever you need to do in there.

#

A different function name would make your code a lot clearer.

worn wagon
#

Replicated physics?

fathom aspen
# storm bough I'm using OnRep_PlayerName(), but GetPawn() (returns pawn controlled by this pla...
storm bough
fathom aspen
#

From pawn class yes

storm bough
#

oh, I think I get it. thanks

storm bough
# fathom aspen From pawn class yes

virtual void OnRep_PlayerState() override; on my character (class AMultiplayerTestCharacter : public ACharacter) seems to not be called at all. checked with debugger, there is also logging

#

I do not know what I am doing wrong.

fathom aspen
#

No idea really. For sanity I tested it and it's called fine

storm bough
#

I also think it should work, after all OnRep_PlayerName() in PlayerState-derived class worked, even if value of GetPawn() did not exist yet...

worn wagon
#

What's the default NetUpdateFrequency?

quasi tide
#

Just create an actor and look?

worn wagon
quasi tide
#

Could also just look at the property in the AActor class itself.

worn wagon
#

It says it's 100, that feels like a lot

#

Actors will observe a maximum update frequency set in their NetUpdateFrequency variable. By reducing this variable on less-important or less-frequently-changing Actors, network updates can be made more efficient, potentially leading to smoother play experiences in limited-bandwidth scenarios. Common update frequency values are 10 (updating every 0.1 seconds) for important, unpredictable Actors like player-controlled characters in a shooter, 5 (updating every 0.2 seconds) for slower-moving characters like AI-controlled monsters in cooperative games, or 2 (updating every 0.5 seconds) for background Actors that are not very important to gameplay, but are still synced over the network and/or are controlled by server-side logic and thus need replication.

#

They say 10 is for important actors

#

I guess the minfrequency plays a role, that is 2.0 by default

#

Also, if I have a simulated physics skeletal mesh that I am replicating, is it important to setsimulatephysics to false on the client to prevent it from getting out of sync?

#

I feel like it is but it's hard to tell the difference, having tried it with and without

sweet ore
#

i still can change the value in cheat engine. what i did wrong?

quasi tide
#

Client is passing the value directly. Then the server is just adding 1 to it.

#

Server already has the amount of gold someone has. No need to have the client pass that value.

#

Client can intercept and say "I have 10 gold, not 1", then the server just takes that and increments it by 1.

sweet ore
#

thank you i get it but how to solve it

sinful tree
#

In fact, you shouldn't even let your client call any function that augments their gold value. The server should be able to do that logic itself.

sweet ore
sinful tree
# sweet ore is it ok to do this logic in player bp? or i need to change it to player state o...

It's not ok to do this logic anywhere at the moment. There really should be no reason you have the client tell the server to add 1 gold to themselves as this can be exploitable.
If the idea is to have some kind of "coin" being picked up, then that logic can be handled within the actor where the pickup happens.

For example, if you had a "coin" actor that you place in the world, on its OnOverlapBegin event:
OnOverlapBegin > HasAuthority (True) > Cast the "Other Actor" from OnOverlapBegin to your character class > Add 1 gold to the gold value of that character > Destroy Actor (Self)

#

The HasAuthority makes sure the code is only running on the server as that's where you want the coin value to be set.

sweet ore
#

thank you i'll keep that in mind and try it

fresh chasm
#

Hello, I'm trying to create a skeletal mesh at runtime, but the SetSkeletalMesh node only set the mesh on the server (only server sees the SKM appearance), any idea why?

Edit: I tried to add the Skeletal mesh directly in the Components panel, under CapsuleComponent, then :

  • Checked Character has bReplicates=true
  • Set CapsuleComponent, SkeletalMesh to ComponentReplicates=true
  • SetSkeletalMesh on server
    Still doesn't work...

Edit2: Ok so it seems that skeletal meshes don't replicate their mesh, not like static meshes, I will use a repnotify on a SkeletalMesh variable

sweet ore
fresh chasm
#

If I don't replicate I will need a RepNotify to update the SKMComp mesh

spark ivy
#

Hi guys, I am trying to replicate a webbrowser for multiplayer. So that a player can change the address of the browser and it will replicate for multiplayer to see the same website

#

Has anyone done this?

unkempt tiger
#

Anyone have any cool multiplayer tips-n-tricks for handling predicted grabbing of (mostly) server authoritative physics objects? 😄

fresh chasm
graceful flame
spark ivy
storm bough
valid imp
#

Is checking for Authority/Not authority a different paradigm than checking if Server/Client, or are these supposed to go hand in hand?
I don't see how writing flow based on role works well with RPCs which target Server or Clients.

sinful tree
# valid imp Is checking for Authority/Not authority a different paradigm than checking if Se...

Generally speaking having authority is an indication that you're running on the server, however, if you have actors that are spawned locally on clients, then the client can have authority over those actors rather than the server.
If the intention is to make sure whoever should have authority is doing the thing, then has authority should suffice. Generally speaking, you shouldn't need to ever use a server->client or client->server RPC then use a HasAuthority node as you know you are running on the server or a client, but that distinction is lost if using multicasts or other non-replicated events, like OnOverlaps/Hits etc. in which case you may only want to run logic if you know it's the server or a client.

You will also run into troubles using HasAuthority if you're dealing with listen servers & dedicated servers and you're trying to use the "Remote" path for only running something on a player's end or not as one of the players can also be acting as the server, and so, they would normally have authority. In this case you'd need to do a check like:

HasAuthority (Remote) > Run stuff for client. (Any clients would run this)
HasAuthority (Authority) > IsDedicatedServer() (False) > Run Stuff for client (the host would run this)

shell forum
#

Is the server RPC's Function_Validate function ran on the client?

fathom aspen
#

Also you don't call PossessedBy manually

#

It gets called when you possess a pawn on server

#

Automatically

storm bough
#

I said wrongly, I meant "you need to put code in PossessedBy()"

fathom aspen
#

Oh then that's something else :D

rustic charm
#

How do you guys handle when the game is started when a friend invited you to play a game via steam?

twin juniper
# sinful tree Do the overlap begin / end checks only on the client side.

Thanks for the answer.

I am a bit confused. Let's say I do the collision query in the Character.cpp tick function. And make Interface->ShowInteractionWidget()
of the closest actor with an "INTERFACE-class" and disable rest with Interface->HideInteractionWidget();

How do I make this all show only locally, so that each client is autonomous and maybe if I have listen server enabled also the server has only its own widget state.

sinful tree
sinful tree
#

I believe the concept behind it is to kick anyone who may be sending invalid values to the server.

shell forum
shell forum
#

So is the use case for _Validate to do something like check if the player is within distance, object not null, variables set, etc to prevent cheats?

sinful tree
#

It's to validate whatever you wish to validate when the RPC is received, but returning false from it will cause the engine to kick the player.
So like, if you know the player has only a choice of 0, 1 or 2, but someone somehow sends a 5, you know it's an invalid call so you'd return false.

shell forum
#

Kick the player?

sinful tree
#

Kick the player.

#

It's meant to be like your first line of defense against a bad RPC. You check whatever input values are what you are expecting or if you were even expecting the RPC itself, and if not, you know the person is manipulating their client or sending their own malformed RPCs manually.

fresh chasm
#

Talking about cheating, does a player can read in the memory and from reading a pointer, deduce what object it is and read its variables?

paper plinth
#

is GetCharacterMovement()->SetMovementMode(EMovementMode::MOVE_Flying); supposed to be automatically replicated?

fresh chasm
rustic charm
#

@fresh chasm I wouldn't

sinful tree
fresh chasm
fresh chasm
rustic charm
#

^ Wouldn't alter what happens on the server

#

Well with enough knowledge you can also hook function calls, so that would not make a difference

fresh chasm
#

Like on a survival game, if a player knows what is in a player base, it will give him a big advantage

sinful tree
#

You won't be able to avoid that.

rustic charm
#

You should focus on relevancy then

sinful tree
#

Mostly.

rustic charm
#

avoid the server sending info if the player is not concerned, there is not much you can do

sinful tree
#

^

fresh chasm
#

Using rpcs or ? Currently I have chests that replicates their content

sinful tree
#

Don't replicate their content to everyone all the time.

fresh chasm
#

Wait I can choose to which people the content replicates?

rustic charm
#

you don't really need to replicate their content at all, it can stay on the server

#

and do the spawning of the loot server side

graceful flame
fresh chasm
#

And then how do you send the content to client when he opens it?

short arrow
#

Request the information through RPC. That's the typical way to make chests and inventories

#

I'd be careful with relevancy. It can get quite complicated

rustic charm
short arrow
#

It's often not even worth it to go the extra mile just to avoid cheating.

rustic charm
#

And yes no need for relevancy here, you should avoid relying on relevancy whenever you can

short arrow
#

Making everything server sided is an easy way to a complicated game that some clients will experience lots of bugs on

#

Some things need to be client sided for best user experience

fresh chasm
#

By revelancy you mean Reliable / Unreliable?

rustic charm
#

No

short arrow
#

You can choose to make things relevant or not relevant for certain clients

#

They won't recieve network information on it

rustic charm
#

and they will receive network information again when they become relevant again

fresh chasm
#

Oh ok I get it

short arrow
#

I would highly recommend to not worry about making your game hack proof for evey little thing. It could be a lot of unnecessary effort. Program your game first and make sure that it actually works :p

#

Then when hacks are found and exploited you can patch those

fresh chasm
#

True, I will do that thanks for the advice

zenith wyvern
#

I'm struggling to unposses/detach an ai controller from a dead enemy. I think its a multiplayer issue. I'm calling from a server RPC on the pawn itself when it dies

blissful saffron
#

So I'm looking to develop matchmaking for my game. Currently we just join servers by searching for sessions and joining. My thinking is to make a matchmaking app using the EOS/Steam SDK and then have that manage the incoming players and forwarding them to the server that gets created for their game session as it comes online. Is this a standard approach?

short arrow
blissful saffron
zenith wyvern
#

I have a health = 0 trigger, and i want it to stop running around and fall over

#

but... i cant make the behavior tree stop and it keeps runnin

#

from hours of googling it seems like i should be able to just call unpossess or detach pending

short arrow
#

Stop ai brain

#

Or stop brain logic

#

Something like that

sinful tree
#

If you're calling a server RPC from a pawn for an AI, you're definitely encountering something multiplayer issue related.

#

As you shouldn't be doing that anyway....

blissful saffron
#

you don't need RPCs, I don't nkow what you're doing

#

the AIs are on the server. the server can just unpossess it or do whatever you want

fresh chasm
#

Just in case if I switch to rpc method later, if a client spam click on the chest, it will send content over and over again, is there some sort of network usage limitation in unreal?

zenith wyvern
blissful saffron
sinful tree
zenith wyvern
#

neither is workin

fresh chasm
#

Oh yeah that's the way to go, thanks

blissful saffron
sinful tree
zenith wyvern
#

parent pawn class

sinful tree
#

What is calling "Receive Damage"?

zenith wyvern
#

this would go for a while 😄

#

pawns have a receive damage function

blissful saffron
#

yeah, we don't need to know what's calling it

#

to help here lol

#

there should be a brain component on your AI if I remember correctly

sinful tree
#

We do if they're calling "Receive Damage" on the client.

zenith wyvern
#

i am callin on the client prob, which is why i tried the rpc

#

that wouldnt work?

sinful tree
#

No. Damage calculations should be done on the server, and you can't call an RPC on an unowned actor.

blissful saffron
#

AI should be handled on the server entirely

zenith wyvern
#

say an ai char walks into a trap and takes damage. cant the pawn say 'hey, im dead' and deactivate its own controller?

blissful saffron
#

you just code it to run and let everything happen server side

sinful tree
#

Flow would be something like:
Player Presses "Attack" Button > RPC To server they want to attack > Server plays attack sequence, spawns any damage dealing projectiles or does traces > Server Finds Hit Enemy > Server Applies Damage to Enemy > If Enemy is dead on server, then it can depossess.

blissful saffron
#

sure it can

#

it would just happen on the server. which it probably is.

sinful tree
#

For a trap, so long as the trap is spawned on the server >
OnOverlapBegin > Has Authority > Server Applies Damage to Target hit by Trap > If Enemy is dead on server, then it can deposses.

short arrow
#

@datura boo server traces voxeldeath if i had a dollar for everytime I got hit markers and didn't actually do any damage

sinful tree
#

Simplification... I know line traces you'd probably do on client and send over the result...

fresh chasm
#

How would you trust the client result ?

blissful saffron
#

you'd have to validate it

sinful tree
#

Do some sanity checks on the server.

blissful saffron
#

make sure it's something reasonable

fresh chasm
#

The client could get the target location and do a trace from his camera to the target loc right?

#

with a modified client

blissful saffron
#

are you talking about preventing cheating?

fresh chasm
#

yes I don't get it how you can prevent it

blissful saffron
#

depends on the game but you'll just have to check that what was done is reasonable. So for example, you'd want to use relevancy to keep information from clients that they shouldn't know

short arrow
# fresh chasm How would you trust the client result ?

For example in our melee slasher game .I'm. Client does the trace -> sends results to server -> server checks if the client is in an acceptable distance to land the hit, and checks to make sure the actor they are hitting was rendered on the client, and checks that they weren't flinched between a certain time frame (an estimated time that the client swung) and some other small stuff

#

You can usually deduce what's cheating and what isn't

blissful saffron
#

then on top of that, you could do something like, was the player at some point where this shot makes sense at N (ping) moments ago

fresh chasm
#

Oh ok I get it

#

The check might be bigger than the actual swing lol

#

I can't wait to start these anti cheat things, I like it 🙂

short arrow
#

You'd be surprised how big our melee system is

#

We couldn't afford to put that on the server even if we wanted to

fresh chasm
#

Because it's doing multiple trace from the start of the blade to the end?

#

I have a combat system that does that, I was about to move this logic on server, but it's not a good idea apparently lol

short arrow
#

Arm tracers, leg tracers, weapon tracers, weapon sway at the time of swinging, determining the type of attack, resetting everything when faints are called, morph detection, parry cancels, detecting world hits

#

There's so much being checked consistently when a player attacks

#

Because theirs so many different possible outcomes

#

That it's just too much for the server to do on a game with 50+ players fighting

short arrow
fresh chasm
#

Oh I see, looks like mordhau combat system

short arrow
#

It is heavily compared

#

But we are more chivalry style

fresh chasm
#

I would love to test your game when it comes out :p

short arrow
#

It's been in alpha for a while now, we are going to closed beta soon

fathom aspen
blissful saffron
#

Nice, I'd like to try it also

#

Neon

rancid monolith
#

Not sure what's going wring with my client RPC... I'm calling it from within this if statement

{
    GEngine->AddOnScreenDebugMessage(-1, 20.f, FColor::Orange,
        FString::Printf(L"spawn/equip called from netrole %d", GetLocalRole()));

    SpawnWeapon(WeaponClass, SLOT_Primary);
    EquipWeapon(SLOT_Primary);
}```
Within my EquipWeapon_Implementation, I have:
```if(weapon->FPAnimInstance != nullptr)
{
    FPMesh->SetAnimInstanceClass(weapon->FPAnimInstance);
    GEngine->AddOnScreenDebugMessage(-1, 20.f, FColor::Orange, 
        FString::Printf(L"AnimInstance set for netrole %d", GetLocalRole()));
}```
But in the debug message, it always says netrole is 3 (authority). Shouldn't it be 2, since it should be executed on the owning client?

The RPC's are defined as follows: 
```UFUNCTION(Client, Reliable)
virtual void EquipWeapon(EWeaponSlot slot);

UFUNCTION(Server, Reliable)
virtual void SpawnWeapon(TSubclassOf<AWeaponBase> wep, EWeaponSlot slot);```
hollow eagle
#

not on a listen server where a player is also the host

rancid monolith
#

I was running as client

#

also as a listen server w/ a connected client (it should be 2 for that client anyway, no?)

hollow eagle
#

no

#

the listen server will always be authority

#

and running a single client in PIE without telling the editor to launch a separate dedicated server means you're running a listen server.

rancid monolith
#

I had this option selected. Does what you just said still apply?

rancid monolith
hollow eagle
#

play as client runs a separate server, yes

#

which debug message is saying what though

rancid monolith
#

All of them are saying 3 for the net role

hollow eagle
#

And what is this actor? Who owns it?

rancid monolith
#

It's my player character

#

a subclass of ACharacter

hollow eagle
#

Is this the default pawn spawned by the gamemode or are you possessing it after the fact? Trying to understand if ownership is actually set correctly.

rancid monolith
#

they're spawned from Player Start actors

#

so I guess from the gamemode

fathom aspen
#

Then it seems like it's being executed before the pawn is actually possessed

#

So it's running on server

#

For sanity check what the net mode there is

rancid monolith
#

for some added context, the first if statement is within the actor's BeginPlay

#

that's where the "spawn/equip called from netrole %d" debug message is

fathom aspen
#

Ok then that's most prolly the issue

#

BeginPlay is called before Possessed is called

rancid monolith
#

so is there a "OnPossessed" event I can use then?

fathom aspen
#

Yes

rancid monolith
fathom aspen
#

That's in BP

fathom aspen
#

APawn::PossessedBy

#

Override it and call Super

#

Then do your thing

rancid monolith
#

👌 tyvm

celest bough
#

in my 4 years messing with UE, online is by far the worst thing i have ever done lmao. Literally nothing ever works how i think/hope its going too xD

fathom aspen
latent heart
#

It helps if you come from a background in asynchronous programming.

#

Doing Web tech is very much like mp in that respect.

#

Or at least some experience in that sort of thing.

quick kiln
#

Hi - So I read that AI can only be done if you set up a server, which should have explained why my Get AIController call returned None even though the actor in question has a default AIController. But, when I set up a local server and connect a local client to it, it still returns None in my debug messages. Anyone have any idea what I could be doing wrong?

#

this is my BP. My AIController is running the appropriate BehaviorTree which is connected to the appropriate Blackboard. The controlled actor is fine and in the debugger shows that its AIController class is appropriate.

#

I was also using this tutorial where the presenter has no problem using the AI without a server. This was about a year ago though, so maybe things have changes since then. I'd appreciate any explanation. I'm fairly new to Unreal. https://www.youtube.com/watch?v=5glARrtPS9U

In this episode we continue to delve deeper into AI and take a look at AI behavior trees and how it can communicate with blackboards and perception in Unreal engine 4 and Unreal engine 5.

Support me on Patreon here: https://www.patreon.com/LeafBranchGames

Join the Discord server here: https://discord.gg/zBeebU7uv3

▶ Play video
shell forum
#

What's the difference between ROLE == Authority and HasAuthority() in C++?

sinful tree
quick kiln
summer spoke
#

Hey all,
How can I make the ui input navigation player specific in a local multiplayer? just like in gears 5? player 1 controls its own ui and cannot control player’s 2 ui and vice versa. i have been struggling with this for the past 2 months and reached a dead end.

#

Any help would be deeply appreciated

umbral horizon
#

Quick question, it is not guaranteed that replicated properties reach the same frame that they were changed. But can I guarantee it if I bind them in a single replicated struct? The struct will replicate as a whole and hence the replicated properties will reach together. Is this what will happen or still the individual struct properties might differ in frames they reach?

shell forum
#

So how does RepNotify work in regards to something like playing a sound? Will it play the sound once it becomes relevant? So multicast would be better or does it save the time of the RPC?

valid imp
sinful tree
sinful tree
#

Not sure I follow the question.
Multicast is used if you have something fire and forget. If players aren't relevant to the actor, the multicast wouldn't be received. If you do a repnotify, relevancy still applies, except the players who are not relevant when it fires can have it fire when they are relevant, so it wouldn't be synchronized anyway.

If you have a sound that you absolutely want shared and synchronized, then use an actor that is always relevant, like GameState and do a multicast that plays the sound. It should then be mostly synchronized.

#

If it needs to be attached to an actor too, then that can still be done locally on the multicast.

winged badger
#

using either a timestamp with synced network clock, or a small hack with RepInitialOnly would work there

#

if your clients are aware of the delta between their and server world times, then they can translate the server timestamp into their own world time

#

and play your 30 second sound from 17 seconds in, for example

#

other hacky way is to have SoundRemainingTime ticked down by the server, and have it Replicated with Initial only

#

in that case you get only one OnRep as the Actor becomes relevant, but you can't use it to start a sound on relevant clients, and would have to rely on a multicast for that

#

special obfuscated rules, less work but its ugly

hoary nova
#

don't actors and objects save their fields after seamless travel?

tranquil yoke
#

Question: How can we create a grabbing feature for a multiplayer ?

we want to create a feature, where only one player can Grab an Actor in the world. If an actor is grabbed by someone then other players wont be able to grab it.
In order to do this, when a user wants to grab i make user grab the Object locally, then send an RPC to server which sets the data on server using a repNotified Parameter and that parameter makes the grab for server and simulated proxy.

if i dont do it immediately for user who was wants to grab, then you can see a little delay because we are waiting for server to replicate the data to the same user also.

this approach has a flaw at this moment, because the currentGrabingPawn parameter is on the Actor to which we want to grab, and that parameter only gets set on server (who is current grabbing pawn).
doint it on client does not make sense.
This approach will work most of the time, unless 2 client does Grab on the same actor exactly at the same time.

because user grabbing happens first on Client, although they are checking if currentGrabbingPawn is valid, but it is being set on server only, so they might both be valid to do grab.
so they both grab on client, but only one happens on server and simulated Proxy.

so my question, how should i create a mecahnism where client can see grabbing quickly as possible but also does not allow two users to grab at the same time.

marble gazelle
tranquil yoke
marble gazelle
tranquil yoke
#

right, thanks, make sense.

regal solar
#

How to replicate actor variables?

#

can actor replicate itself without player pawn?

random fractal
#

This might be a really simple question to some, but im just starting out - How do game developers make the first person playable character seemingly invisible to himself, except the arms? This is seen in almost every fps game, to others you look like a regular character, but you dont see your legs or body, but the model and character shadow is there.

short arrow
#

I hate it

random fractal
#

That doesnt explain everything

#

How can everyone else see my character but not floating arms then?

short arrow
#

when you click on the mesh component there's a variable called "only owner see" and "owner no see"

#

you set the character mesh to owner no see

#

and you set the arms mesh to only owner see

random fractal
#

Hm, alrighty

regal solar
#

but actor cant replicate variable changes to server

short arrow
#

and then click on the variable, and set it to replicates in the details panel

#

you must be setting the variable on the server

#

you can not update it on clients

regal solar
#

how to do that

short arrow
#

show code

#

what do you mean ?

#

you can set these things in the details panel

regal solar
#

changed replicated_var from client pawn

#

but didnt work

short arrow
#

that event

#

must be set to run on server

regal solar
#

event didnt work after "run on server" set

short arrow
#

what's calling the event

regal solar
#

client player pawn

#

by clicking E button

kind ermine
#

i want to spawn item on client only..but its spawning on server

short arrow
#

are you sure you set the BP to "replicates"?

#

in the details

#

it's a boolean

regal solar
#

yep

short arrow
#

then the server isn't spawning the actor

#

the client is

short arrow
regal solar
#

from server. event works perfect

kind ermine
#

can this effect it

short arrow
#

no I'm saying if you want it to spawn on clients

regal solar
short arrow
#

use has authority

#

macro

regal solar
#

but pawn can

kind ermine
#

i tried that it always goes to authority

#

which is right server is cslling interact

#

for pawn i ask server to interact

short arrow
#

if you run the function on server then yeah it'll only go through authority

#

you need to use run on owning client

kind ermine
#

from server to owning client right

short arrow
#

crate an event and set the replicated property to run on owning client

#

then spawn the actor

kind ermine
#

yeah same result

#

kekw

#

its spawning on server

#

actor is replicated

static flare
#
//A ServerRPC on my PlayerController, requesting possession of a Pawn
this->Possess(RequestedPawn);
RequestedPawn->MulticastFunction(SomeData);

MulticastFunction_Implementation(SomeData) will be run on all clients' instance of this pawn. I need some slightly different/additional code to run if I am the client that requested the possession. Due to the nature of the order of events, I'd like for this to just be a simple if-check in the middle of the same function that everyone else executes. Am I guaranteed that the possession is completed on client-side before the multicast-function fires for the client, so that I can just check if GetFirstPlayerController()->GetPawn() == this inside the multicast, or should I pass the PlayerController in the multicast (RequestedPawn->MulticastFunction(SomeData, this)) so that everyone receives the data AND the requesting PlayerController and can check if RequestingPlayerController == GetFirstPlayerController()?
Or are there other approaches I should consider?

short arrow
wary sigil
#

How do you hook up the "Join Game" option in steam friends list to actually do something? I'm working on a multiplayer coop game and finding/join sessions all works great - I just cannot find any documentation on this button and wtf you're suppose to do to hook it up. Anyone here have it working or some documentation on it?

kind ermine
zenith wyvern
#

I've managed to make my 'dead' AI enemies stop AIing, but its a monstrosity. Can someone help me clean this up?

#

i have a hunch these are showing up because of a multicast

#

When an owned actor attacks an AI, it calls on server a function on the AI entity, which then multicasts the detaching

#

The stops/detaching are successful, but I still get the errors, so I think even with the switch, the multicast is causing someone 'extra' to try and detach?

kindred widget
woeful ferry
#

Hi,

I have a problem where a multicast runs twice on the server, but is only called once.

It runs through the function the first time and then the next frame it gets called through an ActorChannel on the server again?

marble gazelle
#

Listenserver?

woeful ferry
#

Yes

marble gazelle
#

on the same instance? (object has the same memory address)?

woeful ferry
#

That's how I first saw it because a integer got ++ twice and I was like huh

#

I can show the callstack

marble gazelle
#

Interesting.

#

well I can't help xD could either be a bug or a feature 😛

modern cipher
#

how do i receive notifications of changes to items as a listen server when using a FastArraySerializer?
PreReplicatedRemove()
PostReplicatedAdd()
PostReplicatedChange()
only called for the clients

marble gazelle
#

you implement it your self^^

fathom aspen
#

CopyProperties

fathom aspen
spark ivy
#

Good morning everyone.... I'm still haven't an issue replicating a Webbrowser for multiplayer.

spark ivy
#

Does anyone know how we can replicate a webbrowser for multi-player?

#

I found a work around... which is to setup a virtual camera and it can record the webbrowser and then that video feed would be shown on the multiplayer screens

fathom aspen
#

By the time you travel both are valid. And anyways I would have the inventory on PS

woeful ferry
#

Can I check if a UWorld is in server?

#

Found it. UWorld::IsServer

fathom aspen
#

You null out the inventory on PS then

#

That's when the pawn spawns

#

But when he is killed it's still valid

grizzled stirrup
#

So is there any fix for clients jittering visibly from the point of view of the listen server in 4.27 or is it one of those things that Epic never got around to?

#

I believe the issue is that listen servers only tick client movement / animation when receiving network updates rather than every frame as they should (and as clients do with each other)

#

Calling GetMesh()->bOnlyAllowAutonomousTickPose = false; in PossessedBy() doesn't seem to change much as suggested in one of the reddit posts about this issue

#

It possibly does make animations smoother but the actual movement tick rate is still very low, resulting in very choppy movement

light iron
#

You have refresh bones checked right?

grizzled stirrup
#

You mean set to this? AlwaysTickPoseAndRefreshBones

#

Yes if so

light iron
#

Mkay

fringe dove
thin stratus
#

This does overall improve things, but yeah, they never fixed it :D

grizzled stirrup
#

One other thing, do you know if it's safe to do this as I know some of the original posts around it said that they didn't know if it interfered with anim notifies and such?

visual urchin
#

I'm not sure if this should go here or in #gameplay-ai.
Do BBTasks work online? Because, except the movement, all actions in behaviour trees, aren't played in client.

thin stratus
#

Well AI is a Authorative Concept

#

It should only run on the Server. Clients are mainly simulating.

west yoke
#

Good evening everyone, does anyone know if there is a way to protect ue 4.26 against ddos login floods? specifically for Mordhau servers

steady horizon
#

Good morning/afternoon/evening everyone!
Does anyone know if the seamless travel method that is in Player Controller "APlayerController::PostSeamlessTravel" is supposed to execute server-side only?

fathom aspen
#

It's. Reason is, it's called from a GameMode function which is server only (and the function called on PC is not an RPC)

steady horizon
#

Thanks !

acoustic drum
fringe dove
#

(edit: nevermind.. they moved Saved/Windows to Saved/WindowsEditor .. wasted hour)

What's the method of disabling steam in UE5? In UE4 I made a copy of Saved/Windows folder with:

Engine.ini

[/Script/Engine.GameEngine]
!NetDriverDefinitions=ClearArray
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
+NetDriverDefinitions=(DefName="DemoNetDriver",DriverClassName="/Script/Engine.DemoNetDriver",DriverClassNameFallback="/Script/Engine.DemoNetDriver")

[OnlineSubsystem]
DefaultPlatformService=Null

[OnlineSubsystemSteam]
-bEnabled=true
bEnabled=false

[PacketHandlerComponents]
!Components=ClearArray

But in UE5 when I try and connect to a listen server with that I can see it checking and failing steam auth

#

The PacketHandlerComponents ClearArray I think is what I had to turn off steam auth

I also just tried adding:


[GameNetDriver PacketHandlerProfileConfig]
!Components=ClearArray

[PendingNetDriver PacketHandlerProfileConfig]
!Components=ClearArray```

and it still failed


Does packethandler not handle ini overrides?

Core/Private/Misc/ConfigCacheIni.cpp
2929:bool FConfigCacheIni::GetPerObjectConfigSections( const FString& Filename, const FString& SearchClass, TArray<FString>& out_SectionNames, int32 MaxResults )

Core/Public/Misc/ConfigCacheIni.h
847: bool GetPerObjectConfigSections( const FString& Filename, const FString& SearchClass, TArray<FString>& out_SectionNames, int32 MaxResults=1024 );

PacketHandlers/PacketHandler/Private/PacketHandler.cpp
1058: if (GConfig->GetPerObjectConfigSections(GEngineIni, TEXT("PacketHandlerProfileConfig"), ProfileSectionNames))```

Seems to be the only caller of "GetPerObjectConfigSections"

hollow belfry
#

xpost from bp channel:

If I want to change UI when a particular pawn is possessed, how should I handle the client/server?
I can add a ui element on possession but i cant seem to remove it on unpossession

#

This is the current setup for possession and unpossession

sinful tree
hollow belfry
blissful saffron
#

when I'm traveling to the main game map from the lobby map, my playerstate seems to be destroyed and made new or something. I have been trying to figure out why some variables on the PlayerState aren't staying valid past the lobby and when I log the PS name in the lobby, it's _0 and after the lobby it's _1 (both logs coming from the server)

#

and the variable is no longer set

#

Am I missing something?

fathom aspen
#

Override that function and save the properties you want them to persist

blissful saffron
#

Thank you! The description of CopyProperties implies that it's for inactive players returning. I didn't know it needed to be run after travel as well. Thanks!

#

Is the PlayerState passed into that the new one?

#

I guess I can figure that out myself if I just look at it haha

fathom aspen
#

Yes the passed is the new one

fathom aspen
blissful saffron
#

thanks

#

That's perfect

#

how long does the server hang onto an old playerstate? and what does it use to verify it's the same player?

fathom aspen
#

The NetId is the one used to find the disconnected player. There has to be an OSS implemented for it to be valid

#

Otherwise it works by saved IP address

#

Which is not accurate

#

See AGameMode::FindInactivePlayer() for reference

blissful saffron
#

gotcha, thank you

#

I kinda figured that seemed like teh only valid way, but I wasn't sure

#

thanks

fathom aspen
#

Also note that CopyProperties can be used to keep some of the data but not all of it. You have to use OnDeactivated instead. That's a pitfall @winged badger told me about and I'm begging him to explain it to me more 😄

#

Like how the heck I can pull pawn data there if PawnLeavingGame has already been called (which destroys the pawn)

blissful saffron
#

haha, gotcha

#

thanks for the heads up

twin juniper
#

Is there any way to open an actor channel for specific connections?

sinful tree
fathom aspen
#

I know that's the reasonable thing to go for to solve this, though Zlo said that he exclusively populates his FDisconnctedHeroData from OnDeactivated. That's what bugged me out

#

Even CopyProperties is called after the pawn has been destroyed. So PawnLeavingGame has to enter to scene in the sense of pulling pawn related data

sinful tree
#

He probably still overrides PawnLeavingGame(), and on his Playerstate's OnDeactivated() he reads the pawn data and destroys the pawn when done.

#

When he said exclusively, I think he just means that everything that he was trying to save is getting handled within OnDeactivated(), not that everything required to save it was done within OnDeactivated().

fathom aspen
#

Oh yeah that makes more sense than to read data from both places, i.e. from PawnLeavingGame and OnDeactivated. Making the pawn stick to that point even solves the issue he referred to then which was saving the pawn location at the time of disconnection. Then he said that reading the data from CopyProperties won't yield a correct result as the data isn't there yet. So you have to pull that data from a later point in time which is OnDeactivated

fathom aspen
#

Thanks Datura, you was the secret weapon I was looking for

weak fog
#

anyone have an idea as to why PlayerState's CopyProperties would NOT be getting called during seamless server travel? i'm in the process of rapidly testing match connection. i'd say about 80% of the time it does get called, but 20% it does not. i'm currently digging thru the source but i'm assuming there must be some race condition i'm not aware of or something

fathom aspen
#

I haven't faced the 20% just yet, but seems like something is failing to spawn or some pointer there is null.

#

I would definitely debug and figure out what the issue is

weak fog
#

oh yeah, just scrolled up and see you've got some similar issues. it's definitely debuggable bc it never used to happen. we've done a million playtests without issue. so something must have changed

fathom aspen
#

It's not really a similar issue 😄
Though this one is from the type of bugs which unless you debug you never know what the issue is

#

I'm a traveling geek, so if you come to find out that it's some special pitfall, make sure you tell me xD

weak fog
#

yeah i always try to post solutions for posterity

fluid summit
#

Hi! i heard multiple times that replicating a static mesh is a bad idea, instead replicate a variable OnRep and adjust the mesh with that variable on clients.

Why exactly is this? If you replicate a static mesh you send to the net the whole mesh?

quasi tide
#

If you're talking about the difference between RPC and OnRep:

OnRep - for state changes.
RPC - for one off stuff mostly.

If someone is outside the relevancy of an actor and you do an RPC to change the mesh, they won't see the change. If you do it via OnRep, they will.

fluid summit
#

why not just set the mesh to replicated?

graceful flame
#

My understanding is that ideally you want to send only the data you need to over the network. So instead of an entire mesh if all you need is a boolean then just send the boolean and use an onRep to make the changes to the mesh.

fathom aspen
#

Exactly the less the data the better. Also sometimes you can't replicate the thing you're referring to. For example someone might want to change the skeletal mesh. Some think that replicating the skeletal mesh component would make the process of setting a skeletal mesh replicate to clients which in fact is wrong. The skeletal mesh itself is an object which doesn't replicate and has to be set on client explicitly for it to render there correctly.

#

That's why you use an OnRep for example

#

But for static mesh actors, if you have properties there that need to be synced over the network then yes replicate the actor

elder sable
#

Hi, why a beacon connection is slow to connect ?

weak fog
# weak fog anyone have an idea as to why PlayerState's `CopyProperties` would NOT be gettin...

got further with this but still not fully solved yet.

the actual bug was that the match was starting before everyone was finished server traveling. this was the result of a very simple mistake. one of my game mode's match start conditions is a check that all players are connected. i was doing this using GameMode's GetNumPlayers() method. but this method returns all the connected AND traveling players. of course i want only the connected ones; the traveling ones are giving me a false positive

however, what happens now is that server travel simply never finishes. so NumPlayers and NumTravellingPlayers return the correct numbers, but the latter never goes down.

edit: this seems to only happen in standalone mode from the editor. at least in some preliminary packaged builds it's fine...i feel like this just raises further questions lol

somber jasper
#

Need a help with replicating Character rotation. I have a scenario where Character is rotated using Input using SetActorRotation. Since Input is only on client, rotation is not synching properly. How do I replicate it properly ?

It is better to replicate an FRotator variable or a Server RPC ?

Since its happening on Input event, how do we make sure that no buffer overflow occurs on RPC calls ?

chrome bay
#

You need to apply your rotation by overriding PhysicsRotation() in a custom character movement component if you want it to work properly in multiplayer

meager fable
#

is there a way to delay a pawn spawn when a client joins a server? I need to retrieve spawn data from my backend and that's latent so I cannot do it in UGameModeBase::ChoosePlayerStart

chrome bay
#

Just need to prevent RestartPlayer() from being called, or spawning the player at least

meager fable
#

thanks

grizzled stirrup
#

If it's a safe workaround then it's definitely way better than how it behaves by default!

thin stratus
#

I do not know

harsh oyster
#

Hey, I've been working on dedicated server, but I got this error: UnrealBuildTool : error : Server targets are not currently supported from this engine distribution. when building the project as Development Server solution configuration. Does anyone know how to solve this, please?

I've been following this tutorial: https://www.youtube.com/watch?v=PIg2q0wEPJc&t=0s

I use:
Visual Studio 2022
Unreal Engine 5
GameLift-3.4.0

#

My target file:

using UnrealBuildTool;
using System.Collections.Generic;

[SupportedPlatforms(UnrealPlatformClass.Server)]
public class devBR1ServerTarget : TargetRules
{
    public devBR1ServerTarget( TargetInfo Target) : base(Target)
    {
        Type = TargetType.Server;
        DefaultBuildSettings = BuildSettingsVersion.V2;
        ExtraModuleNames.AddRange( new string[] { "devBR1" } );
    }
}```
#

The only thing I didn't do is building unreal from source, but downloading it from epic games launcher - is that the issue?

chrome bay
#

Yep

#

Can't build a server without using a source build.

harsh oyster
#

Oh okay, thanks

#

By the way, should I have UE installed from the launcher, or will it be useless?

#

If I build it from source

chrome bay
#

If you build from source that becomes your engine version for the project, so you shouldn't need the launcher one as well.

#

However, it can be useful to have a launcher version installed anyway tbh.

winged badger
#

compare and contrast. or track something design/art team have a problem with that you can't reproduce

#

as you don't want them running source engines, usually, custom binary is fine though

grizzled stirrup
#

Also at least in my experience it's nice when working on .cpp stuff as you can't accidentally recompile the entire engine with a change

winged badger
#

i did that twice in 5 years

grizzled stirrup
#

I'm not sure why but it seems to like building a lot for me 😄

winged badger
#

work the Ctrl+Z into your muscle memory

grizzled stirrup
#

I never touch engine source files but I think it may be changing .cs files or something similar?

#

Anyway have been happily working on the binary version now for a year or two with the source build on another PC used when packaging

winged badger
#

most of my unintended engine alteration are in scenario

#

running with a debugger, holding W and a breakpoint in an engine file breaks

#

Ctrl+Z to the rescue there

#

never delete, delete is changing the file

grizzled stirrup
#

I sanity ctrl + Z all the time

#

Honestly it's a bad habit for me 😄

#

But yeah it's the worst when you go back a bunch with Ctrl + Z then make a blunder with your fingers and you lose all that you did!

grizzled stirrup
grizzled stirrup
#

Nice, I'm using one of those for fast packaging across all platforms

#

No reason to sit through the engine recompiling every time

winged badger
#

throwing hardware at it also helps Building 337 actions with 64 processes...

harsh oyster
#

So if I build the engine from source, can I change "baked" variables like seed to randomly generate when the game starts?

winged badger
#

why would you need a source build for that?

#

we only modify the engine to fix engine bugs that are too annoying to work around

harsh oyster
#

I don't know, some guy told be that I should use some sort of library to generate landscapes at runtime, because I can't change the brush seed in the editor blueprint / cpp

winged badger
#

and ofc, to be able to debug engine code in a packaged game

grizzled stirrup
#

As it rebuilds the engine from scratch for each individual package

winged badger
#

this is ofc not the same machine you're working from?

grizzled stirrup
#

No but still

#

Package time is like 5-8 mins on installed build

#

Like 30-45 mins per platform on source build

#

No real reason to waste the time / energy constantly rebuilding the engine is there? Unless I'm missing something

winged badger
#

we don't rebuild the engine each time

#

and this lets me commit an engine change

#

and have it deployed on steam for testing in 25 minutes time

#

with 4 clicks

grizzled stirrup
#

That's great! It seems by default it does rebuild unless I'm doing it wrong

#

Did you change engine source to allow it to not rebuild every time?