#multiplayer

1 messages · Page 225 of 1

sinful tree
#

You can yes, and modify tick intervals, and manage visibility of objects.

summer tide
#

Nothing else needed. I am calling that from NPC char class

sinful tree
#

Test it out. Just make sure you're only executing that on simulated proxies.

summer tide
sinful tree
#

In an actor...

if(GetLocalRole() == ROLE_SimulatedProxy)
{
    // Do stuff here.
}
summer tide
sinful tree
ruby pendant
#

Still learning, not developing games, trying to understand UnrealNetwork

sinful tree
# ruby pendant Still learning, not developing games, trying to understand UnrealNetwork

Ok, but what would the ID you want to use be used for?

If you're trying to uniquely identify players, there is already a means of identifying a player in those online subsystems, and that ID is a means to identify a player regardless of what computer they may play from, what network they're connecting from, etc, and it's more of a hassle to do something that may already be done for you.

You can create a GUID which would be an almost guaranteed unique value (it's like, 1 in some absolutely huge number chance that it's incredibly unlikely to generate the same number twice within any reasonable amount of time). This can be assigned to a player, but how you keep track of which player is which then relies on you using some kind of authentication for a player to login with a user ID first so you know what GUID to use in subsequent connections after the GUID is first generated for them.

If all you're wanting to do is randomly assign an ID number to test replication and see that each player now has some value assigned to them, then you can easily generate a random number on the server in the Begin Play of your character. You'd set this variable to be Replicated w/ Notify and use the OnRep of that variable to then update the text render component with the now replicated value. The only caveat here, is that it won't persist beyond the lifetime of a character, so each time a character is spawned or on subsequent launches of the game, there's no correlation of the value to the player.

ruby pendant
# sinful tree Ok, but what would the ID you want to use be used for? If you're trying to un...

Thank you for your reply 🙂
I just wanted to know if I can assign some custom values to the PlayerState when the player joins the game. I would expect it to update the text component with the ID it gets from PostLogin.

Imagine an online role-playing game, your connection gets weak or disconnected but you are still playing in an old state of the game world. So you haven't fallen out of the game yet, but your world is out of sync with the world on the server. In this state you can still attack, you see the animation playing, but no damage is done to the enemy. You cannot get confirmation because you are disconnected from the server.

That's what I mean. Okay, the server and other clients shouldn't see it. But I want to keep the ID number from the first connection in my memory and use it in my local world.

sinful tree
# ruby pendant Thank you for your reply 🙂 I just wanted to know if I can assign some custom va...

Ok, so if that is what you're building out, it would require that you create some authentication system first and assign them a GUID when creating their account, or use an online subsystem which gives you an ID for that player (which in its own way is a separate means of authentication, like you login with Steam or Epic first and then play the game). If done without any authentication, then players would be able to spoof other players or provide invalid ID numbers to the server.

Also with how Unreal works, if you are using Unreal's built in networking, then you are normally kicked back to the entry map on disconnect, requiring you to connect to the game server again. There is no "old state" that the player would be playing in, they aren't there at all.

vagrant hamlet
#

how do I set the server tickrate programmatically?

ruby pendant
#

You can think of it as a function to get the player ready to play

sinful tree
#

If you're not using Unreal's networking however, then you probably wouldn't be using replicated variables, and in that case you have to follow whatever paradigm the system you're using has.

ruby pendant
#

Could Client RPC be what I am looking for? From what I understand, Client RPC seems to be a feature that should be used when the server needs to send commands to the client even after the first connection. Can't we solve this in PostLogin?

sinful tree
#

It really depends on what those values are used for. Even just sending out a value only once can still be something that may be better suited to be stored in a replicated variable in case the server ever needs to use that value itself, or that value does need to change in someway in the future.

#

"initial values" you can sometimes just trust that the client already has without the server sending it all either.

#

Like default non-replicated variables on a replicated actor class.... The client can use those defaults too if necessary.

ruby pendant
honest bloom
#

Ok so I've got an interesting findings between "Independent" and "Fixed" Ticking policy ..
In the case of "fixed" .. pre simulation tick is being called on the bullet spawn by the non authoritative client ..
However, in the case of "Independent" .. its not
which means there is some problem somewhere between Mover or NPP .. which makes the Mover just not work when in "Independent" ticking policy mode

#

Only OnComponentActivated/Deactivated events are being called
anything else .. doesn't

warm sparrow
#

in a 2 player game, how can i get the 'other' player state? im running this code from a component in the playerstate so get owner returns our playerstate, im comparing playerstates inside the players array to find the other playerstate but i think its just comparing if the classes are the same.

#

does unreal assign id's to players or anything like that so that i can retrieve the other player state in this case?

hoary spear
#

may i ask what you need the other player state for ?

#

Gamestate keeps track of all players PlayerState

#

as you've done

#

you just need to connect up the array element

#

also you dont need to store the initial owner, you can compare the player states to the owner directly

dark parcel
#

A player state that needs to know another player state?

If not don't correctly, this may happend

ruby pendant
#

Hi, What is the most reliable and guaranteed way to tell whether a game instance is a client or a server? (C++)

hoary spear
#

GetNetMode?

ruby pendant
# hoary spear GetNetMode?
void ALearnMPCharacter::BeginPlay()
{
    Super::BeginPlay();

    if (GetNetMode() == NM_ListenServer)
    {
        GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Cyan, "I'm, the Server.");
    }
}

If so, why is this code printed to the screen twice?

latent heart
#

Are there 2 characters?

ruby pendant
hoary spear
#

You prob want GetNetMode != NM_Client

#

Results in editor may vary

#

Try launching as separate process ?

ruby pendant
hoary spear
#

Its an option you can select under Advanced Settings among other things

hoary spear
#

Not that one

hoary spear
keen adder
#

IsLocallyControlled = whether it's the actual local computer

#

HasAuthority = whether it's the server (which is always local)

latent heart
#

...mostly.

keen adder
#

these two = not the server, and is the local computer

ruby pendant
# hoary spear

Thank you, I unchecked the box and when I test I get the following result:
Game starts, server is the first player. The screen says I am the server.
Then the client joins the game and the server prints again, I am the server.

Actually the message only appears on the server, which is what I expected, and I like that. But why does it do this every time a new client joins? What should I understand from this?

hoary spear
#

The character exists both on the s erver and on the client(s)

#

in this case it prints because you're only checking for if we're on the server, and not wether this specific character is locally controlled

#

which was somewhat suggested by DudeBroJustin with the IsLocallyControlled()check

#
void ACharacter::BeginPlay()
{
  if (GetNetMode() != NM_Client)
  {
    // Would execute on servers version of every joining Character
  }
  if (IsLocallyControlled())
  {
    // Would only execute on the controlled 'client/server' for this Character
  }
}
#

With 1 listen server and 1 joining client there would be;

  • 2 Characters on the server, 1 locally controlled (by the host), and 1 not locally controlled
  • 2 Characters on the Client, 1 locally controlled (by the client), and 1 not locally controlled
ruby pendant
# hoary spear which was somewhat suggested by DudeBroJustin with the `IsLocallyControlled()`...
void ALearnMPCharacter::BeginPlay()
{
    Super::BeginPlay();

    if (GetNetMode() != NM_Client)
    {
        GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Cyan, "I'm, the Server.");
    }

    if (!HasAuthority() && IsLocallyControlled())
    {
        GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Cyan, "I'm, Client.");
    }
}

The game starts and:
the server says “I am the server”.
The client joins the game and the server says “I am the server”,
but at the same time the client says “I am the client”.

The message printed by the server appears only on the server.
The message printed by the client appears only on the client.

This is what I expect, but I still don't understand why the server prints again for the new client.

hoary spear
#

From the server perspective, all characters spawned on the server have a netmode != client (as it's the server)

ruby pendant
# hoary spear From the server perspective, all characters spawned on the server have a netmode...

I spent some time with an old MMO game with leaked source code, where the client and server source code were separate. If you wanted to make changes on the client side, you made changes to the client source code, if you wanted to make changes on the server, you made changes to the server source code.
In Unreal Engine, both client and server source code are in the same place, so I'm having a hard time understanding 😅

ruby pendant
# hoary spear From the server perspective, all characters spawned on the server have a netmode...

But I think I understand, so as I predicted, this edit in the code gives the output I expected:
The server only prints messages for itself.
The client only prints messages for itself.

void ALearnMPCharacter::BeginPlay()
{
    Super::BeginPlay();

    if (GetNetMode() != NM_Client && IsLocallyControlled())
    {
        GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Cyan, "I'm, the Server.");
    }

    if (GetNetMode() == NM_Client && IsLocallyControlled())
    {
        GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Cyan, "I'm, Client.");
    }
}
#

Thank you very much for your time @hoary spear , @keen adder 🙏

lament flax
#

is there a way to replicate a destroyed event on clients ?

sinful tree
lament flax
#

okay thanks

#

endplay is only for clients or also for server ?

sinful tree
#

server as well.

lament flax
#

thanks

ancient adder
#

My code runs fine in editor and in package game including shipping but completely breaks when launched using standalone mode in the editor, Should I be worried?

keen adder
keen adder
#

Standalone should be nearly identical to packaged

#

I would be worried because there's so many diff PC configurations out there

#

It's possible that it could break for some other people who's environment resembles the standalone. Nothing worse than releasing a game to find out it's broken for hundreds of people.

ancient adder
# keen adder What part of it breaks?

I create replicated objects with their own properties using an actor component and enable input on client for those objects to add widget, modify their properties and so on on client side

So far it seems the input and server RPC doesn't work, properties within those objects replicates as expected

little pumice
keen adder
#

Yeah I would definitely figure that out, it's possible you're doing something wrong that is working by accident

#

Or a race condition that may work or break in different scenarios

#

gotta be 100% certain it always works

valid trellis
#

Is it normal that ~250 actors get that choppy on the client (right) running on the same machine? It is being run from the editor, but doesn't feel right to have such poor network performance in it. Tried PIE, Standalone, etc. - same thing. Tried different update frequencies (10-500) with no big change.

Setup is simple and nothing beyond what's shown is happening on the level (TPP template). I run Standalone net mode and then just create and join session within instances. Tried other modes for auto setup it gives but it behaves the same.

short arrow
#

It's not really a result of lag ( it can be though )

#

Replicate movement doesn't offer any interpolation for you

#

So that desync is gonna be crazy

#

You need to implement your own method to smooth out the location through interpolation or whatever

little pumice
#

Character Movement Component should interpolate things smoothly. The question is what Move Comp Cubes use?

valid trellis
valid trellis
little pumice
#

not sure, but maybe even replicates movement can make it smooth

#

have you tried with single cube?

valid trellis
little pumice
#

wait you cant use SetActorLocation, you have to use physics

#

i.e. force

#

MoveComp can predict velocity, not teleportation AFAIK

short arrow
#

As far I'm concerned, replicates movement does not provide interpolation for you. And if you're making the entire project in blueprints, you won't be able to override the function responsible for setting the actors location upon receiving the new location

#

it's not that hard to make your own though

little pumice
little pumice
valid trellis
little pumice
#

make it obvious that smoothness is a product of interpolation

valid trellis
#

not sure I follow what this is for

little pumice
little pumice
#

put aside Force

#

for now

valid trellis
#

update freq set to 1 and it obviously jumps between positions. but it seems to be overshooting or something, instead of cleanly being put in new position @little pumice

little pumice
#

at least we know there is no interpolation (which is obvious tbh)

#

it was just too frequent

#

now use AddForce, but without "replicate movement" flag

#

it should be choppy as well, then replicate movement flag should fix that

valid trellis
little pumice
#

also there might be property for "max velocity" so it won't go crazy

little pumice
#

though it's not required

valid trellis
little pumice
#

you don't need

#

if actor has "replicate movement" then we are fine

#

or there is a surprize for future us Jokerge

#

btw are cubes simulate physics and movable?

valid trellis
#

well. I need to enable physics (and disable gravity so it floats).

little pumice
#

it can slide along surface, though more force required cuz of friction

#

also it should be possible to constrain movement to XY instead of gravity

#

though not sure bare AActor/Mesh provides this

valid trellis
#

I'll set aside that I do not want to simulate physics on those cause I do not want actor affecting their movement

#

but even like that it's not moving on the client

#

with replicate movement ON

little pumice
#

component replicates?

#

mesh or whatever one

#

are u applying force on server?

little pumice
valid trellis
#

ok, with component replicates it moves

little pumice
#

not sure what you meant by actor affecting their movement

valid trellis
#

actor bumping into it and adding collision force

little pumice
valid trellis
#

imagine a simple moving platform. it doesn't (shouldn't) need physics to move if I don't want benefits of physics movement on it

#

but still, with force it moves similarly to setting location, doing "teleports" on client. BUT when I bump a character into it, the resulting movement from it is perfectly smooth...

little pumice
#

predictable movement direction is one of the benefits

valid trellis
little pumice
#

single cube?

valid trellis
#

not best at presenting but should be good enough to see what's happening

little pumice
#

so when you push it, it moves fine?

#

weird, both Force and interaction with character is a physics driven movement

valid trellis
valid trellis
little pumice
#

show the AddForce code

valid trellis
# little pumice show the AddForce code

?

{
    if (FBodyInstance* BI = GetBodyInstance(BoneName))
    {
        WarnInvalidPhysicsOperations(LOCTEXT("AddForce", "AddForce"), BI, BoneName);
        BI->AddForce(Force, true, bAccelChange);
    }
    else if (BoneName == NAME_None)
    {
        TArray<Chaos::FPhysicsObjectHandle> PhysicsObjects = GetAllPhysicsObjects();
        FLockedWritePhysicsObjectExternalInterface Interface = FPhysicsObjectExternalInterface::LockWrite(PhysicsObjects);

        PhysicsObjects = PhysicsObjects.FilterByPredicate(
            [&Interface](Chaos::FPhysicsObject* Object) {
                return !Interface->AreAllDisabled({ &Object, 1 });
            }
        );

        if (bAccelChange)
        {
            const float Mass = Interface->GetMass(PhysicsObjects);
            Interface->AddForce(PhysicsObjects, Force * Mass, /*bInvalidate*/true);
        }
        else
        {
            Interface->AddForce(PhysicsObjects, Force, /*bInvalidate*/true);
        }
    }
    else if (Chaos::FPhysicsObject* Object = GetPhysicsObjectByName(BoneName))
    {
        FLockedWritePhysicsObjectExternalInterface Interface = FPhysicsObjectExternalInterface::LockWrite({ &Object, 1 });
        if (bAccelChange)
        {
            const float Mass = Interface->GetMass({ &Object, 1 });
            Interface->AddForce({ &Object, 1 }, Force * Mass, /*bInvalidate*/true);
        }
        else
        {
            Interface->AddForce({ &Object, 1 }, Force, /*bInvalidate*/true);
        }
    }
}```
little pumice
#

I mean your code (BP nodes) 🙃

valid trellis
#

just to show the full picture, the accumulator driven by tick

little pumice
valid trellis
#

thanks for helping ❤️

little pumice
#

btw it was smooth when Character pushed cube bc it was also pushed locally by simulated proxy KEKL

warm sparrow
short arrow
# valid trellis thanks for helping ❤️

I haven't read any of the previous conversation but tbh it seems like it would have been way easier to just turn of replicate movement, and then just multicast the new location evergtime it changed

#

And then just have clients interpolate the current location to the new location

warm sparrow
short arrow
#

I really wish they'd add more support for replicate movement but seems like it only works well with cmc for now

crisp shard
#

I personally will be making MAi attack on it

short arrow
#

$600 scam < override the implementation yourself

#

Jokes aside, if you can afford it I'd definitely say buy it

#

But i do think $600 dollars is some kind of a joke

crisp shard
#

It’s 30p off

dark parcel
#

Some people said for the effort it took to write gmc, the price is justified.

But I am not willing to spend that much money if I don't know it fit my use case.

crisp shard
#

So 420

#

#blazeit

dark parcel
crisp shard
dark parcel
#

40% of marketplace stuff I bought, I didn't end up using it.

short arrow
crisp shard
#

So I have no other choice but to make it work for me

#

Lol

dark parcel
#

And in many cases I just roll my own in the end.

dark parcel
#

Perhaps the only way out is just to bite the bullet and stop looking for shortcut

#

I was told my people that use GMC, it's not like you can escape cpp

crisp shard
#

We will find out in about 1-2 months after I’ve bought and implemented it into my project

#

Worth the dice roll? For me, yea.

short arrow
#

Not to mention they could, at anytime stop support for it. And now you're down $600 and your project will never see thr next engine version with it

#

This ha happened before.

dark parcel
#

Just spend 2 weeks on learncpp.com and you can unlock many things your own, which cost 0 dollar.

short arrow
#

The OG's might remember "move it locomotion system 2.0" which cost $300

crisp shard
crisp shard
#

I don’t disagree with the basis of your points tho

dark parcel
#

It is what it is, it will take me years before I can call my self programmer

short arrow
#

All marketplace assets stop being supported eventually. Even the ones with the best reviews

dark parcel
#

Your call man, I just been through your shoes

sinful tree
#

If you can code properly in Blueprint and understand the idea behind object oriented programming, you're probably about 70% of the way to being able to work with C++ in Unreal. Mostly just a matter of learning the syntax, and figuring out what errors mean when you fail to compile 🙃

dark parcel
#

And I hate my self for going bp only

#

If I can rewind the time, I will learn it earlier

sinful tree
#

Most people fail at just the OOP part, hence why there's so many people that don't know how to get references, creating variables of "types" and not understanding what "Accessed None" really means, and then wondering what they should plug into casts.

crisp shard
short arrow
#

I just think $600 is wack for a marketplace asset where their is no consequence of they decide to just abandon it

crisp shard
#

I actually feel quite adept with BPs at this point

dark parcel
crisp shard
crisp shard
#

someone talk me out of it

#

lol

#

or , take 420 dollars and build me the cpp equivelant of what i need, offer stands for the next hour lmao

short arrow
#

guess you better strike while the irons hot!

dark parcel
#

I would probably consider GMC for the custom collision it provide since cmc tied to the capsule comp

#

But then mover2.0 is out so 🤷

short arrow
#

I actually haven't tried mover since it was initially released, wonder if it's worth using yet

#

I'm sure it will be in the future though if not already

sinful tree
# crisp shard someone talk me out of it

Well.... A few things... To try and talk you out of it, but I wouldn't say these are dealbreakers.... (I can't really endorse the product as I haven't used it, nor do I have a license for it)

GMC requires you to use their built in C++ Pawn and PlayerController, meaning if you have other systems that require you to use their C++ Pawn or PlayerController, you're out of luck - you'd have to choose between one or the other. Other systems you have may also rely on Unreal's own Character class, which you also would no longer be able to use.

The documentation seems a bit.... light? It doesn't really give you any examples on how to use it, nor does it give you a breakdown of the API. They have a few "showcases" but not the code as to how to make such things as an example.

The discord is "verified" locked, so you can't even see what their community has trouble with, or see what people have created with it until after you've forked over your money.

A quote in the FAB description:

Implementing lag-free, server-authoritative multiplayer movement is a notoriously difficult task and very hard to get right - the GMC will help you immensely with this by automating almost all of the complex setup required for you.

Is almost all good enough? If there's more complex setup required, what is it?

dark parcel
short arrow
dark parcel
#

cmc surely battle tested but I wonder how people get around the collision issue

#

what if I want to have a dragon

dark parcel
short arrow
#

oh yeah it's the worst haha, I actually have no idea how to get around that, I hate having to using the capsule only, but I've thankfully never been in a situation where I had a mesh that absolutely couldn't fit okayishly within it

dark parcel
#

blessed people that are making fps games

hoary spear
#

otherwise GMC wouldnt be a product

#

but isn't epic also working on something allowing all shapes in their move comp?

dark parcel
#

@hoary spear Yeah, I think if GMC is justified, it's the fact that it support custom collision

hoary spear
#

Right right

valid trellis
nocturne quail
#

whats the difference between ?

#if WITH_SERVER_CODE
#if UE_SERVER
lost inlet
#

WITH_SERVER_CODE is 1 for game and server targets, 0 for dedicated client
UE_SERVER is only 1 for dedicated server

#

Probably the 3rd time this week I've mentioned that

cunning bronze
#

I read net dormancy is broken in blueprints, is this true or does it auto flush?

fathom aspen
#

It is not really broken, they just designed it this way... yeah it auto flushes on setting a property/variable

tardy fossil
#

SEARCH_PRESENCE (\"PRESENCESEARCH\") is deprecated and will soon stop being a valid UE-defined key. Please consult upgrade notes for more details where can i find this fabled upgrade notes?

#

oh.. Deprecated usage of SEARCH_PRESENCE in OSS Sessions thats the extra info lol

woeful ferry
#

Has anyone run into a issue where the player state don't get their owner (PlayerController) replicated?

chrome bay
#

For your own player state, no. For other players, absolutely, you never receive them.

lament flax
#

lets say i got a listen server hosting a lobby, clients joined it
i need to transfer ownership, this means someone needs to be the new listen server.
whats the a good way to handle this ?

currently my idea is the following:

  • Client 1 is the the owner target
  • Client 1 goes load the lobby map as listen server
  • all the other clients go travel to that map (but wouldnt this cause an issue since 2 same maps are hosted ?)
  • "old" listen server leaves the map

since im using EOS for the lobby part, and that the client travels to the owner of the lobby using a special URL, i guess that if i change the owner of the lobby, travel with the playercontroller, and travel all clients using the special EOS string i might be fine

quasi tide
#

You're looking for "host migration". It is a PITA in UE

lament flax
#

would my flow would work tho ? since EOS has a special string to use for travel

#

i still have to change level, but its fine

modern cipher
#

or switch to unity

lament flax
#

explain why lol

#

sounds llike you just said a random list of stuff

modern cipher
#

it will take a long time to explain this but you know how host migration works

crisp shard
# sinful tree Well.... A few things... To try and talk you out of it, but I wouldn't say these...

Yea all good points.

To add to my own talking out of it:

  • I’m on Mac and it says Win64 only for compatibility. Now I’m sure I could get it to compile but that’s a red flag for me. Any dev that’s serious should have all compatibility to me.

  • I def don’t love using their pawn / player controller although I did know about this already. My main character is actually a paperZD character, so I’m not sure If that would disqualify me from using it because I’m pretty sure that pawn is simple and based off the main character one. But again, slightly red flag.

  • if community and support is overwhelmingly great, then I’d prob make the move but hard to tell when it is locked like that

All in all, I think it would be worth it for the movement but there are a few semi major issues I’d have to make sure would not be a problem before I’d make the move

dark parcel
#

Just spend 2 weeks on learncpp 🥹

#

It will be worth your time

crisp shard
# dark parcel Just spend 2 weeks on learncpp 🥹

I’m down to give that a go. I’m sure it would be worth it and delgoodie does have like a full blown series on this exact type of thing in cpp. Always figured I could just dive into that and watch and copy what’s going on

dark parcel
#

You can say goodbye to blueprint struct and unlock all the unexposed functions

crisp shard
#

I also have rider so that’s like a major help lol

verbal ice
#

i.e. it runs fine on Linux, and I can't get into it too much but it has ran fine on some consoles in my experience integrating it on some projects

#

As for community and support, both are great

crisp shard
#

Glad we have someone on the other end convincing me the other way now! Lol

prisma storm
#

hi, I have a question. I'm creating a custom server and I'm having a problem managing NPCs. I know that Unreal engine has a NavMesh system and the information I found for exporting NavMesh data was obsolete. So I'm wondering if it would be good practice to create the path to the player on the client side and send the data to the server so that it can move the NPC to the player?

frank creek
#

Hello everyone, I'm using the Steam Advanced sessions plugin. It works only when a friend who has the steam port 27015 port forwarded on their router. But when I try to host a session, it doesn't work. Does anyone know how to fix this? For reference, I'm using steam app ID 480. I was thinking maybe I need to purchase my own steam app ID, but not sure if that's it.

#

I can see lobbies other people create, but only join them if they have port 27015 added on their router, when I host a lobby they can see it but can't join

crisp shard
# verbal ice As for community and support, both are great

would you mind asking the discord if there are any issues if im using the paperZD character class currenty? it's used for sprite characters and im assuming this will cause some issues given i would have to switch to their pawn, but i really wouldn't know as it doesn't mention anything about this

#

fyi, the sprite characters are 2d sprites but the world is 3d and all movement is more like a 3rd person pov, not a 2d world

verbal ice
#

Don't see anyone using PaperZD or Paper2D on the GMC. A quick look at Paper2D shows it's very much supported, no idea about PaperZD

#

Depends on if it does custom movement or not

#

Downloading PaperZD, I can tell you if it's supported or not pretty easily

#

Good thing it's free

crisp shard
crisp shard
#

im using paper 2d as well of course, as they are used in tandem for some things

verbal ice
#

From the quick look at the code, it should be supported

#

You will need an engine tweak though

sinful tree
verbal ice
#

It derives from APaperCharacter from Paper2D which derives from ACharacter

#

So you'll have to modify the Paper2D plugin to make APaperCharacter derive from AGMC_Pawn

crisp shard
verbal ice
#

Could cause some compile issues

#

You do have option B though

#

You make APaperZDCharacter inherit from your own class, which inherits from AGMC_Pawn

#

and in your own class, you just copy what APaperCharacter does, which is not much

#

This would require less changes to the engine (basically none) assuming nothing else breaks by doing this

crisp shard
#

i mean, im def using a custom character calss, it's not the paperzd one but i think what you're saying is what was done, but i'd have to check it

verbal ice
#

PaperZD's code does require its character class to be used

#

But it would be simple to reparent their character class to use your own which derives from AGMC_Pawn

#

Basically you'd want this:

  • Your actual character class -> APaperZDCharacter -> ACustomPaper2DPawn -> AGMC_Pawn
#

ACustomPaper2DPawn would be a class that just does what APaperCharacter does, and then derives from AGMC_Pawn

#

this way you reduce your headaches

crisp shard
#

`#pragma once

#include "PaperZDCharacter.h"

#include "MW_Character.generated.h"

class UMW_CharacterMovementComponent;

UCLASS()
class AMW_Character
: public APaperZDCharacter
{
GENERATED_BODY()

public:
AMW_Character(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());

UFUNCTION(BlueprintCallable, Category="Character")
void StartSprinting();

UFUNCTION(BlueprintCallable, Category="Character")
void StopSprinting();

UFUNCTION(BlueprintPure, Category="Character")
bool IsSprinting() const;

UFUNCTION(BlueprintNativeEvent, Category="Character")
bool CanSprint() const;

UFUNCTION(BlueprintCallable, Category="Character")
void StartFlying();

UFUNCTION(BlueprintCallable, Category="Character")
void StopFlying();

UFUNCTION(BlueprintPure, Category="Character")
bool IsFlying() const;

UFUNCTION(BlueprintNativeEvent, Category="Character")
bool CanFly() const;

protected:
UPROPERTY(BlueprintReadOnly, Category="Character")
TWeakObjectPtr<UMW_CharacterMovementComponent> MwCharacterMovement = nullptr;
};
`

#

ok that's a lot to send at once, my b, but this is actually my current character's code

verbal ice
#

should be fine

crisp shard
# verbal ice should be fine

should be fine, as in i wouldn't need to change anything from this ? other than what would change from deriving this from the GMC pawn ?

#

of course, when i actually do it (assuming i make the play), i'll really find out but just curious off a look

verbal ice
#

You'll have to rewrite the movement stuff

#

Also your components shouldn't be weak object ptrs

crisp shard
#

yea the mvoement stuff, i'll compeltely delete tbh

prisma storm
crisp shard
crisp shard
#

maybe i'll just dive into cpp for the next month while i learn the plugin. kill multiple birds with this stone. i knew the time would eventually come

crisp shard
# dark parcel Just spend 2 weeks on learncpp 🥹

yo , just taking a look at learn cpp right now, any advice on where to start ? loads of stuff here , but tbh i'd only be ineterested in unreal engine specifics. not exactly saying , give me the easy route, as i'll dive into it all over time but im curious what might be the best place to start ?

dark parcel
#

Afterwards you can look into refactoring blueprint node tutorials by epic.

crisp shard
dark parcel
#

There is no unreal engine cpp

#

There is macro that will confuse you

#

In unreal engine

#

Also there isn't really any decent place you can start to learn the basic other than diving to cpp console program.

#

There's a well formatted tutorial already established for it.

#

I get it probably feel bad to leave UE but it's the step you should take if you want to learn cpp faster imo.

#

Just know enough that you can refactor blueprint nodes to cpp

brave flame
#

"Beta or Experimental"
i am Confused. please help me.

crisp shard
#

but i feel you , i'll take that advice

dark parcel
crisp shard
#

or gal*

summer tide
lethal blade
dark parcel
#

So imagine 3 players, each owning a character

#

That code in player 2 computer will run on player 1 and 3's character

sinful tree
#

Checking if the local role is simulated proxy ensures that you would only be changing the value specifically on clients that have that actor as a simulated proxy (ie. not controlled by this computer). The actors on the server and any locally spawned actors on clients are always ROLE_Authority.

summer tide
sinful tree
muted reef
#

How can I replicate destructions ?

dark parcel
#

Replication is just the process of synchronising state between different machines

#

What you ask is kinda broad, it do depend on what you want to achieve and what system do you use(e.g if it comes with network stuff out of the box)

#

Imo the easiest one would be to just simulate the destruction locally

#

Server can initiate a force on chaos destructible for example and the client can simulate it in their own machine.

#

I didn't do much with it, just chop off some trees and rocks. Result is kinda simmiliar but you won't always get the same result as each player run their own world.

woeful ferry
#

The onrep_owner never executes and no owner on beginplay. So all of our RPCs fails

chrome bay
#

You sure you have the right PS? Because that would imply you have no controller either

thin stratus
# lament flax explain why lol

As soon as the current Server Player leaves/disconnects/etc. UE will move all Clients to their original start map. You usually don't even get the chance to swap ownership.

And even if you would get a single frame to react, there is nothing that supports this. The world will tear down and take all actors and their state with them.
You will def get a HardTravel for the clients and you lose the state of the game.
There is some "fake" Host Migration stuff on the Marketplace iirc. They save all the data locally, tell all clients who the new host is, and after disconnecting and being sent back to the Main Menu or so, they let the Client host again and load the state manually from the drive, and then let everyone reconnect.
Pretty manual, A LOT of data that suddenly needs to be replicated to that new host (especially data that previously only the Server needed to know about) and still two HardTravels for all players.
That's why, if you want to properly support this, seamlessly like other games, you will need to edit the engine. And no one really attempted to add that feature yet, mostly cause it's probably a pita to implement.

lament flax
#

wouldnt that work since the listen server didnt disconnect ?

thin stratus
#

Loading a map with Listen or connecting to the new Server are HardTravels

lament flax
#

but yeah getting the state back would be very annoying so ill probably never support this feature

#

but data can be stored in the lobby attributes so i can save important stuff there

thin stratus
#

The Client that calls open level with listen will disconnect from the original server

#

And everyone, including the original server, will have to HardTravel for the connect

lament flax
#

yeah

thin stratus
#

Yeah so no one will really stay connected.

#

The state part is the problem

#

Not the connecting to a new host

lament flax
#

yeah a dedicated sever would be the easy solution for that

#

well thanks for the extra insights

glossy gate
#

right now when I join a game it works well for the server but when I try to join from a client it starts on the 0,0 of the world and then tps to the correct position. I tried making a loading screen to be delayed 3 seconds to hide that but I'm not currently making it work so, there's another way to fix the spawn of the client to not make it look like that?

dark parcel
#

and I mean real loading screen, not a picture you slap to the viewport which get deleted on hard travel

#

The reason your client is at 0,0,0 is because he wasn't given a pawn yet by the server

glossy gate
#

tried to do it with this:

#include "Core/TGameInstance.h"
#include "MoviePlayer.h"
#include "Blueprint/UserWidget.h"

void UTGameInstance::Init()
{
    Super::Init();

    FCoreUObjectDelegates::PreLoadMap.AddUObject(this, &UTGameInstance::BeginLoadingScreen);
    FCoreUObjectDelegates::PostLoadMapWithWorld.AddUObject(this, &UTGameInstance::EndLoadingScreen);
}

void UTGameInstance::BeginLoadingScreen(const FString& InMapName)
{
    UUserWidget* LoadingScreenWidgetInstance = CreateWidget<UUserWidget>(this, LoadingScreenWidget);

    if (!IsRunningDedicatedServer() && LoadingScreenWidgetInstance) {
        FLoadingScreenAttributes LoadingScreen;
        LoadingScreen.MinimumLoadingScreenDisplayTime = -1.f;
        LoadingScreen.bAutoCompleteWhenLoadingCompletes = true;
        LoadingScreen.bWaitForManualStop = false;
        LoadingScreen.bAllowEngineTick = false;
        LoadingScreen.WidgetLoadingScreen = LoadingScreenWidgetInstance->TakeWidget();

        GetMoviePlayer()->SetupLoadingScreen(LoadingScreen);
    }
}

void UTGameInstance::EndLoadingScreen(UWorld* InLoadedWorld)
{
    GetMoviePlayer()->StopMovie();
}
dark parcel
#

You can try unhiding the loading screen on AcknowledgePossesion for the client

glossy gate
#

but if I try to add a delay on the endloadingscreen if the map it's the main map doesn't work

dark parcel
#

at that point, the client would have a pawn to control (So the view would be the pawn's camera when you unhide the loading screen)

kindred widget
glossy gate
lusty sky
kindred widget
lusty sky
kindred widget
#

Correct. The cost only comes from a hosting service. Many games release dedicated servers for people to host themselves. You only need to host it yourself if you have a competitive game, and at that point money is less of a factor if you're big enough to even be considering that kind of game.

#

Course if you're small and insane you could host it yourself too, rip people on other continents.

shrewd ginkgo
#

have you any voice chat tutorial or can someone teach me

fossil veldt
#

that being said - common loading screen needs some mods to actually be good

#

by default it just uses GT widgets which is complete ass, it doesn't use movie player so i'd recommend adding movie player support to it

shrewd ginkgo
#

I want to make phone call event. Murderer must call others and play a sound in their locations like dokkaebi in R6.

#

but something doesnt work

thin stratus
shrewd ginkgo
#

Sound doesnt play in others

lament flax
#

how am i getting a null actor being considerated in ServerReplicateActors ?
i am travelling from an empty level to the game one, im using seamless travel and loading it as listen server with a gamemode specified (the one used in the game level)

#

happens only for client

ripe glen
#

Anyone know how to take a manual UDP position packet to update character movement but that effects motion matching? I know how to move the character through several functions but none of them actually make motion matching play the walking animations, how do I update the position vector and have it run motion matching?

ancient adder
#

How to temporarily remove a subobject from replication?

I tried removing it by calling RemoveActorComponentReplicatedSubObject but once thats done it doesnt replicate again when adding it back with AddActorComponentReplicatedSubObject

fossil spoke
#

CDOs are considered stably named right? I cant remember if they can be sent across the network?

nova wasp
#

Why not just send the uclass?

#

Not that it answers your question... just seems like you would not lose anything by just sending the uclass instead

fossil spoke
#

GameplayEvents dont natively have the ability to transmit a class in the payload

#

I dont want to make a custom structure to handle that

nova wasp
#

what else can they transmit?

fossil spoke
#

Instead just want to pack the CDO in the Optional Object

#

Assuming they are stably named and will be resolved

nova wasp
#

OptionalObject is a uobject... that can just be the uclass?

fossil spoke
#

BP doesnt let you do that

nova wasp
#

you could just make some simple BP calleable that turns a uclass into a uobject ref?

#

but yeah I don't know if the gameplayevent would even serialize it correctly

fossil spoke
#

Passing the CDO works in Editor PIE but thats not a good test since the CDOs are probably only being generated once for the editor, not for each PIE instance

nova wasp
#

makes me wonder how TSubClassOf serialization works

#

at a low-ish level unreal can turn some objects that get replicated into paths instead

fossil spoke
#

Yeah I just started wondering that myself

nova wasp
#

iris turns them into paths that get sent as exports once as the entire object path

#

then afterwords they are much smaller agreed upon ids

#

I am not sure where exactly the distinction is made between "this is an object created and here's some data" vs "just get the asset/native class you have or load it"

hollow eagle
#

the distinction is whether there's a stable name for the object

#

stable name = constant path that will never change or is in some way guaranteed to be the same for all connected instances of the game

#

whether it's an asset or not is irrelevant, that isn't handled at the same layer

nova wasp
#

so literally just IsNameStableForNetworking returning true or false?

hollow eagle
#

yes

nova wasp
#
bool UObject::IsNameStableForNetworking() const
{
    return HasAnyFlags(RF_WasLoaded | RF_DefaultSubObject | RF_ClassDefaultObject) || IsNative() || IsDefaultSubobject();
}
``` :0
#

it already considers cdos

hollow eagle
#

and it knows about assets through RF_WasLoaded, but it's not some inherent property of them

#

stable name doesn't imply anything about how the object is accessed or loaded

#

it just finds them through normal find object/load object functions after the fact

nova wasp
#

so that kind of thing is decided after the fact on a per-class basis?

#

say, a static mesh pointer

fossil spoke
#

I should have checked that function lol

hollow eagle
#

not per-class. I haven't looked at the code but I'd assume it's just a bunch of StaticLoadObject calls

fossil spoke
#

Cheers

hollow eagle
#

or maybe a FindObject with the world as a search context, then a StaticLoadObject if that doesn't work

nova wasp
#

UWorlds have a field to be net stable psyduck .... Would that be useful for travel or something?

hollow eagle
#

that might just be used when UWorld is being used as a container for level assets on disk

#

since those would be stable

nova wasp
#

could be some enterprise situation with multiple uworlds or replay copied worlds

mystic estuary
#

Hello, I'm trying to understand what are the cases where I want to use net dormancy. People say to use it when there's an actor like a tree in Fornite, it should stay dormant until some player interacts with it. However, what would it replicate to the player before it was touched either way? The initial health is known prior to runtime, so, unless the server tells the clients that the health was changed, it will be that. Why would I want to use net dormancy in this case?

nova wasp
#

the basic idea is similar to physics object sleeping

#

basically... don't waste time checking for things that changed when you are fairly certain nothing is near it or touching it

mystic estuary
#

What if I use stack based replication method push model?

nova wasp
#

what does stack based replication method mean in this context?

mystic estuary
#

Out of the box, the engine checks whether properties that were marked as replicated were changed since last update. In case they were, they'll be replicated to clients, in case they weren't, they won't, which means that the computer effectively did some useless work. We can change the replication method to the push based model, which makes us tell the engine what should be replicated instead, e.g. when we change a value

nova wasp
#

I suppose what you mean is... If something is net dormant does it send one "current state" of the object when someone joins in progress? Does that sound close?

mystic estuary
#

No, that's not it

nova wasp
#

It might be a term more used outside of unreal so forgive me if I seem ignorant lol

mystic estuary
#

Oh, sorry, yeah, push model. I personally don't use it, I just know that it exists, so forgot the correct name 🫠

nova wasp
#

I think you can kind of see how this works with COND_InitialOnly

mystic estuary
#

wdym?

nova wasp
#

these are properties that are only sent once for the first time an object is replicated

#

this is useful for things that never change but are still unique per object

mystic estuary
nova wasp
#

even if you use pushmodel I think it has to dirty the entire object (all properties etc) to send the initial object to a given connection

mystic estuary
#

Why would it send properties that weren't changed?

#

Relatively to the initial state

nova wasp
#

their initial state based on the class default or the previous state?

mystic estuary
#

To the CDO

nova wasp
#

I am not sure honestly... I could probably see if Iris does that for you via delta serialization but the actor channel stuff seems like it goes through
UPackageMapClient::SerializeNewActor

mystic estuary
#

I don't think that it replicates unchanged values relatively to what it has by defaults since it doesn't call their OnRep, if they have any

nova wasp
#

you could just run a net trace with some non-trivial cdo data (FVectors for example are fairly large) and see if it has to serialize them

#

I'm not sure if marking fields dirty persists more than a frame... like if it knows the value was changed EVER since the object was created

mystic estuary
#

But either way, in case I'm using push model, is there any reason to use net dormancy?

nova wasp
#

seems like dormancy closes the actor channel entirely

mystic estuary
#

Does it mean that it reopens it anytime I do a multicast or FlushNetDormancy? Sounds weird

nova wasp
#

it would re-awaken the actor until something makes it dormant again not the same as SetNetDormancy

mystic estuary
#

Are you sure? In here you can see that after 10 seconds it calls FlushNetDormancy, which makes it replicate a property which is constantly changing, but then it doesn't do that anymore
https://youtu.be/18LbGKf6QQw?si=uGlMhTkIJsJUw_KI&t=321

This is a tutorial on how net dormancy works and how to use it.

Net dormancy is one of the best ways you can use to optimize the performance of your server, net dormancy mainly concerns replication.

The server constantly checks for properties to replicate and that could eat up your performance if you have a lot of replicated properties, cert...

▶ Play video
nova wasp
#

ooh, FlushNetDormancy is just for sending the data and not awakening it

mystic estuary
#

Yeah, you use SetNetDormancy to change that

mystic estuary
nova wasp
#

also fwiw actor channels are going the way of the dodo eventually

#

Iris is replacing that entirely... Iris still supports dormancy though

mystic estuary
#

However, if I set the dormancy to DormantAll, the actor will still trigger the replication events

e.g. RPCs, right?

#

So dormant makes so that properties are not automatically replicated, but the replication can still happen if the client is relevant?

mystic estuary
nova wasp
#

it seems to depend on which dormancy mode it uses going by vori's article I linked

mystic estuary
#

To ensure incoming connections get the new values over DORM_Initial Actors, you should call FlushNetDormancy on them after updating their properties. This will make the Actor to become DORM_DormantAll but only when strictly needed.
I don't get how this makes sense. So, if I have a DORM_Initial actor, and I call FlushNetDormancy, it will make the dormancy to become DORM_DormantAll? I thought it's supposed to be dormant until I start replicating, in fact it's initial dormancy, why does it become dormant for everything?

Edit: there's an explanation for that in Epic docs

Once a statically placed, initially dormant actor has been awoken, you should not set it back to ENetDormancy::DORM_Initial. Use ENetDormancy::DORM_DormantAll instead.

nova wasp
#

just go read the ENetDormancy header I guess

mystic estuary
#

So, if the NetDriver is Null at the moment you call ForceNetUpdate
When is NetDriver initialised? Why would it be null server-side?

nova wasp
mystic estuary
mystic estuary
nova wasp
#

To me it's kind of like... there's not really a "I am currently dormant for everyone" as much as an indication that they want to be... it's kind of per-connection

mystic estuary
#

DormatAll means that it's dormant to every single connection. wdym?

nova wasp
mystic estuary
nova wasp
#

It kind of stands to reason that you need something for the rpc to hit

#

hence multicast rpcs being a bit violent

mystic estuary
#

True, but still, you might run into that, and think why properties are being replicated without an explicit flush

#

Vori's article and Epic docs 🫠

nova wasp
#

it's a moot point to do it before or after I think

#

most netcode busywork is done later in the frame so doing it before or after won't matter I assume

mystic estuary
#

Yeah, I feel like net driver would check the fact that something was changed the next frame or something

nova wasp
#

not the next frame... the end of the frame is when net broadcast happens

#

it's a bit similar to render dirty

mystic estuary
#

Gotcha

nova wasp
#

you should just run insights and look at where network stuff is called to illustrate this easily

mystic estuary
#

Yeah, I still need to get used to profiling networking

#

Rendering was the biggest problem so far, so I only have done that

nova wasp
#

this isn't even for packet profiling... just to see when functions are called

mystic estuary
#

Oh, yeah

mystic estuary
#

When do you want to use DORM_Never? I see that there's only one place the enum value is used, and it's inside ABandwidthTestActor. Does it mean that it's effectively the same as using DORM_Awake since all the engine code uses the AActor::NetDormancy with operator> or operator<=, e.g. no direct comparison against DORM_Awake?

mystic estuary
#

That's applied in GameplayEffect, so that must be the correct approach

tame kraken
#

Hello can someone guide me to the solution of how can I give the client a pawn when I seamless travel?
because now only it doesn't have the pawn by default while the server does

tame kraken
#

please why is my client's pawn getting destroyed through the server travel

crisp shard
#

[2024.11.29-20.27.04:512][ 0]LogBlueprint: Warning: Blueprint BP_Rifle (child of/implements BP_EQUPITABLEMASTER) has a function graph with a conflicting name (Get Current Default Spell). Changing to Get Current Default Spell_0.

Excuse my spelling, but how can i get rid of this error message ? it still works but this was becuase i changed a structure, but i never changed the name ? kinda strange error , but again, everything is working , just not sure how i can ensure this doesn't end up being an error i get later when packaging or something

dark parcel
#

one of the reason to never go full bp is because of bp struct

#

I am not sure if that error has anything to do with struct though

#

the warning just says ther are function with the same name

crisp shard
#

there's another one where i get a similar error but it specifially states that it's an "unknokn struct" but in the logs it ends up finding the right one, just not sure how much i should worry about that

dark parcel
#

the bp struct curse continues

dark parcel
#

declare the struct in C++ and you will enver have to look back

crisp shard
dark parcel
#

changing or re-ordering bp struct can corrupt your project / restore existing overriden values in assets / unknown struct error / something else that other people experience

#

solution is to never use bp struct, it's been broken for forever

#

and will never get fixed

crisp shard
#

insane considering how many structs im using

#

so, to fix that would i need to like completely redo the struct and just reimplement all of that ?

#

or declare it in cpp like you mentioned ?

dark parcel
#

The worse part is the error is silent. Like you would just keep making your game for months and when it comes to packaging, UE went sike

dark parcel
crisp shard
dark parcel
#

what UE version are you at btw?

crisp shard
#

i could try to rebuild the project and maybe that would solve it

dark parcel
#

why would that fix your issue?

crisp shard
#

lol i have no idea, maybe it would realize it's being dumb

dark parcel
crisp shard
#

lmfao

#

im done for aren't i

#

even worse, im using enums inside of struxts

dark parcel
#

make a new one in cpp and replace them

crisp shard
#

im assuming i'd need to get rid of all of the places im using those structs ?

#

that's a lot of places

dark parcel
#

yeah unfortunately

dark parcel
#

but at least you can package your project, don't forget to commit to your source control too before you start the proccess

crisp shard
#

that i dont understand could possbility exist, cause they are fundemental things to the engine

dark parcel
#

well you are not the only victim, I had re-done my work too, many times over.

thin stratus
#

The error kinda just says that a function has a conflicting name though?

crisp shard
#

although, in this exchanging of logs at the end it does find the right one and tells me to add the struct to something

#

i can run it and send the exact error

thin stratus
#

Hm ok. What you can try is to restart the editor, don't open the mentioned BP, but simply right-click it. Find the Reload action, probably under Asset Actions, and then right-click again and save and restart the editor once more.

#

More or less trying to flush out anything that shouldn't be there

thin stratus
crisp shard
#

im restartig rn and will post the actual log just so it's clear

crisp shard
thin stratus
#

Lovely

crisp shard
#

[2024.11.29-23.36.58:930][ 0]LogProperty: Error: FStructProperty::Serialize Loading: Property 'StructProperty /Game/MAiBLUEPRINTS/CHARACTER/SAVE_GAME/PlayerInfo_SG.PlayerInfo_SG_C:Owned NFTs.Owned NFTs'. Unknown structure. [2024.11.29-23.37.00:818][ 0]LogProperty: Error: FStructProperty::Serialize Loading: Property 'StructProperty /Game/MAiBLUEPRINTS/UI/W_NFTCartsMenu.W_NFTCartsMenu_C:Current Selected NFT'. Unknown structure. [2024.11.29-23.37.00:818][ 0]LogProperty: Error: FStructProperty::Serialize Loading: Property 'StructProperty /Game/MAiBLUEPRINTS/UI/W_NFTCartsMenu.W_NFTCartsMenu_C:Set NFT info Texts:NFT info'. Unknown structure. [2024.11.29-23.37.00:818][ 0]LogProperty: Error: FStructProperty::Serialize Loading: Property 'StructProperty /Game/MAiBLUEPRINTS/UI/W_NFTCartsMenu.W_NFTCartsMenu_C:Set NFT info Texts:local nft info'. Unknown structure. [2024.11.29-23.37.00:818][ 0]LogProperty: Error: FStructProperty::Serialize Loading: Property 'StructProperty /Game/MAiBLUEPRINTS/UI/W_NFTCartsMenu.W_NFTCartsMenu_C:Update NFT Info Text:NFT info'. Unknown structure. [2024.11.29-23.37.00:841][ 0]LogProperty: Error: FStructProperty::Serialize Loading: Property 'StructProperty /Game/MAiBLUEPRINTS/UI/W_NFTCartsMenu.W_NFTCartsMenu_C:ExecuteUbergraph_W_NFTCartsMenu:K2Node_CustomEvent_NFT_info'. Unknown structure. [2024.11.29-23.37.01:171][ 0]LogClass: Warning: Struct Property Current Selected NFT has a struct type mismatch (tag STRUCT_REINST_S_SongNFTInfo_71(/Engine/Transient) != prop FallbackStruct(/Script/CoreUObject)) in package: /Game/MAiBLUEPRINTS/UI/W_NFTCartsMenu. If that struct got renamed, add an entry to ActiveStructRedirects.

#

this is the series of logs

#

don't be scared of the acronym gents

dark edge
crisp shard
#

again, would i just be recreating the struct ? or is there like a way to convert it to cpp ?

dark edge
#

I would recreate, dunno if the conversion thing is even possible

crisp shard
dark edge
#

You can get a lot of mileage out of a YourProjectTypes file with all your structs and enums and a BPFunctionLibrary in it

crisp shard
dark edge
#

The point is that you can just have a one stop shop for whatever system you're making, with all your basic types and BP callable functions in it

#

then it's trivial to move the slow stuff to C++, just add a function to the function library and reimplement it in C++. Great way to learn

crisp shard
#

im a hands on type of learner, so i just need to try something like that

crisp shard
#

and the enum has two entires? circle, and directional ?

#

also, i realize that wasn't exactly the point you were making, but im just trying to see if i can look at that and undersatnd it lol

dark edge
#

I'm doing 2d vision / fog of war

crisp shard
#

ahhh ok dope, very cool, glad i could semi regonize that

#

the syntax is legitmatley the only thing i need to understand in cpp

#

which i guess is obvious lol

dapper lagoon
#

can somebody please help me with advanced sessions?

#

everything works in standalone game but when i open my packaged project and then tried it and created a session it brings me back to wherever my default map is.

silent valley
dapper lagoon
#

thanks

buoyant compass
#

hi there ! I'm looking for either a plugin or a basic template for multiplayer 🙂
I wanna create a very small experience, just run around in multi with some friends in unreal
woudl you have any ? thanks !

dark parcel
#

look on how to setup session and lobbies then just play as the default character, all of yous can run around with that

buoyant compass
dark parcel
#

you will need to package your project and give them a copy

#

also the connection will depend on the Subsystem you used

buoyant compass
#

https://www.youtube.com/watch?v=Iefxj6tgDgI maybe i could just grab this

A gift for all the support from our subscribers! 🙏
Thank you for watching! Please subscribe for more!

Project Files:
https://drive.google.com/file/d/12j9EUjPwGQ3hJMCIdi6dQMhLRBRm23ik/view?usp=sharing

Locomotion available on the Marketplace:
https://www.unrealengine.com/marketplace/en-US/product/basic-locomotion-system-replicated

Tutorial Play...

▶ Play video
dark parcel
#

I recommend using Steam and uploading your build there. You can then just send your friends copies

buoyant compass
buoyant compass
lost inlet
#

no but you'll need to pay the fee for an appid

buoyant compass
#

hahahahh

#

sorry !!

buoyant compass
lost inlet
#

also the overwhelming majority of youtube tutorials are unadulterated trash

buoyant compass
#

damn

#

sad

#

would have any to recommend ? maybe epic content ?

dark parcel
#

so you don't need to pay $100 yet for your own app id, until you are ready to do so

buoyant compass
dark parcel
#

I'm 95% sure if you just want to test

#

you can use steam app id 480

buoyant compass
#

yeah especially my friends will maybe don't want to play long ::

bright summit
dark parcel
#

you will be sharing sessions with everyone that usses the app id, but you can just apply filter so you get to see people that host your game

dark parcel
buoyant compass
dark parcel
#

but maybe you are right, I don't know for sure. It will still be enough to test games. There's no need to cough money to test the water imo.

buoyant compass
#

haha thanks

#

amazing i'll try for now i don't know anyhting !:

bright summit
dark parcel
#

What to download?

bright summit
#

so if you and your friend will set the same region it should work

buoyant compass
#

ok great i hope they are not too noobs

bright summit
dark parcel
#

there is a setting for that iirc

bright summit
#

yes it is

dark parcel
#

anyway it's enough to test with friends from the same country

buoyant compass
#

https://www.fab.com/listings/2d9d26e3-ce4e-43ce-b313-1e7bd93e0112
Sorry i hope you won't break your monitor
What about this

Fab.com

NEW v3.5:Battle Royale Game Mode (Pre-Alpha)Improved 3rd Person AnimationsImproved Weapons/AnimationsImproved ADS weapon recoilParachute System (Press O)Down/Revive SystemImproved CompassOptimized For Performance (increase in frame rate)v3.5 Full List - Full Listv3 Full List - Full ListDEMO | DEMOTRAILER | TRAILER GAME MODE CREATOR VIDEO | WALK ...

dark parcel
#

How far are you in multiplayer?

buoyant compass
#

no where

dark parcel
#

then you probably won't learn or gain anything from plugins

buoyant compass
#

i know unreal but never touch multi

#

i see

dark parcel
#

touch basic replication first

#

read the pinned material in this channel.
Exi's compedium and Wizard tips and trick

buoyant compass
#

oh ok amazing forgot about the pinged stuff thanks again i'll check it out

bright summit
#

I think going into plugins without any basic knowledge is the most bad decision to take to learn something

torpid crest
#

is server travel broken in 5.5?

#

[2024.11.30-16.38.39:596][838]LogLongPackageNames: Warning: Can't Find URL: Test_Level_WP: . Invalidating and reverting to Default URL.

lost inlet
#

So did you package the level?

#

Does it work with the open command?

buoyant compass
#

i guess i can't just do that i need to use EOS or steam right ,

fading hull
#

In My Multiplayer Game that I am working on the Game uses a "Tab Target" method of combat, Players will select the target and the abillity that they choose will fire towards or on that target,.
For this where is the best place to store the "Current Target"
When Storing This Variable Refrence within the Player Character The Server is able to get they location and fire the projectile, however connected clients are firing towards world 0, despite having a selected target.
When Storing this variable within the Player Controller Both Players will fire towards the Servers current Target.

#

The Calculations to Fire towards the targets position is done within the Player Character

#

The More that I think on it ^^ This would be the cause because the server cannot read from another players Character. So the Server needs to know the reference to find the world location, but then that leads me back to the issue im having with the player controller

meager heart
#

If a client is connected to a server, can a function running on the server-side client character run a function explicitly on the client-side client character? I tried using the Client function specifier but that didn't seem to function properly, the function never ran after being called

meager heart
# dark parcel Show what you have

This UCollabAbilitySystemComponent::GiveCharacterAttributeSet() is only ran on the server, but I need to make sure the client also gets bound to this delegate

So I created UCollabAbilitySystemComponent::Client_OnAttributeSetAdded() for the server to call to pass the attribute set to the client so it can bind to it, but it never fires

dark parcel
#

@meager heart did you check if you get a valid attribute set?

meager heart
#

Yeah the attribute set is valid for sure

#

The breakpoint never fires on the first line of the client function though

dark parcel
#

Client RPC should fire on the owning client

dark parcel
#

i am not aware of this

#

nvm you probably do

#

I haven't use a single client rpc soo far

#

only from blueprint, which fires

meager heart
#

I don't think so, I wrote it in after my first try failed, just in case it was maybe affecting it

But i didn't get different results from either one, but both built properly

dark parcel
#

@meager heart is this for the actor owned by the client? not some A.I right?

#

becauase client RPC only fires on client that owns the actor

meager heart
#

Yeah I'm actually wondering now if the actor its firing from is my second client, or actually the simulated proxy of my server client

dark parcel
#

probably test with 2 players, 1 listen 1 client

#

the breakpoint should trigger though even if there is only 1 client

#

hopefully someone else know the issue

#

@meager heart mine triggers

void UAGAbilitySystemComponent::AbilityActorInfoSet()
{    //** Bind Delegates here **//
    OnGameplayEffectAppliedDelegateToSelf.AddUObject(this, &UAGAbilitySystemComponent::EffectApplied);
    auto GameplayTags = FAGGameplayTags::Get();

    PrintHelloWorldFromClientMachine();
}
UFUNCTION(Client, Reliable)
void PrintHelloWorldFromClientMachine();
void UAGAbilitySystemComponent::PrintHelloWorldFromClientMachine_Implementation()
{
    UKismetSystemLibrary::PrintString(this, "Hello World, from server after ability actor info is set");
}
meager heart
#

It looks like this is where mine's early returning in UObject::ProcessEvent()

The callspace isn't correct maybe? Not sure what that means

#

Ah this is ultimately what gets called in AActor::GetFunctionCallspace() on the owning player state

dark parcel
#

@meager heart I have no idea, my cpp is too basic.

AbilitySystemComponent = CreateDefaultSubobject<UAGAbilitySystemComponent>("AbilitySystemComponent");
AbilitySystemComponent->SetIsReplicated(true);
AbilitySystemComponent->SetReplicationMode(EGameplayEffectReplicationMode::Minimal);

This might be dumb but have you set your ASC to be replicated?

#

0o

meager heart
#

Oh my god I swear I did, maybe I didn't?

dark parcel
#

that might not be the issue though

meager heart
#

Oh i think it happens when it's created yeah, not the issue there

dark parcel
#

would be suprised if ASC not replicated by default

meager heart
#

Yeah it's replicated, something about the net owning player / net owner it seems, I'll do some more looking into that

#

Thanks for testing it out for me!

dark parcel
#

sorry that I can't help, hopefully someone else jumped in

#

perhaps check if the ASC already have it's avatar and owner set

#

the owner of my ASC is my PlayerState

meager heart
#

Yeah that's mine as well, good point though not sure if that's set at this point

meager heart
meager heart
#

I'm having an issue where input isn't being accepted in my listen server, this is how I'm initializing my UI and setting the input mode to UI in my player controller class, is there another place/way I'm supposed to do it?

With this setup clients CAN take input, but when they die and respawn they behave the same way as my listen server where they don't accept any input at all and the cursor isn't consumed by the window

#

And also if I don't have the SetInputModeGameOnly() function call, it works on the listen server and NOT the client, and again when the working player dies/respawns it breaks again on their side

bright summit
#

maybe that's an issue

meager heart
#

Yeah I added that as a failsafe when I first hit an issue in case that was a problem, but it didn't make a difference

And luckily I did figure out the issue, it was because at the time that function was being called my player character hadn't actually been spawned which was causing a problem for finding a netowner to call the function on

bright summit
#

that was the second thing I wanted you to check

tame kraken
#

Hello, does anyone have insights on why my Unique Net ID gets ruined when seamless traveling on the client?
I knew this seamless travel will be trouble with how many things it screws up 😵‍💫

tame kraken
#

I had to save my unique net ID and set it again
turns out the idea of the seamless travel 'preserving' information works exactly opposite to that 😅

tardy fossil
#

try using player id.. that might work better

tame kraken
flat night
#

hey, has anyone made a Local MP game with Enhanced Inputs, Unreal 5.4?
My controllers are working fine in the Engine as second and third player (keyboard is 1), but as soon as I build, they are not recognized, either playing the build or putting it on Steam for testing. Wondering if anyone has any experience with that?

river shore
#

Hallo guys!
I am having this issue when trying to destroy my Item actor. When interacting with the item it checks if can be added and then if true Server destroys Item. This event gets executed by the server proved by debugging, but when it gets to the destroy the engine crashes
thx for any help ^^

honest bloom
river shore
#

hahaha

#

thx though ^^

honest bloom
#

np

buoyant compass
#

hi there !
so i'm just trying to understand how to make a very simple lobby to invite friends from the same region (but not in LAN) I need to get EOS setup, do you have a working tutorial on how to do that ? thanks a lot 🙂

#

https://www.youtube.com/watch?v=Fd9m4cG2hnU like this one is great but apparently doesn't work anymore from what i see in the comments

Unreal Engine 5 Epic Online Services - Set Up EOS for Your Multiplayer Game

Set up Epic Online Services for your multiplayer game!

Epic Online Services Dev Portal:
https://dev.epicgames.com

EOS Documentation:
https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/Online/EOS/

Multiplayer Plugin:
https://github.com/DruidMech/Multipla...

▶ Play video
#

ok i found something i guess ill try

lament flax
#

OnlineServices is the newer version

buoyant compass
#

ah ok amazing didn't know

#

do you have a tutorial on this ? https://www.youtube.com/watch?v=FJePnvi47O8 i tried with this one as well but i'm having a please recompile manually error..

#coding #programming #unrealengine5 #ue5 #html #css #ascentcombatframework #gamedev

Support me on Patreon: https://www.patreon.com/CodeWithRo
Join my Discord Server: https://discord.gg/gZH4JDpgdT
Donations: https://ko-fi.com/codewithro
Synty Store: https://syntystore.com/kb/CodeWithRo
Business Inquiries: codewithropatreon@gmail.com

Epic Online...

▶ Play video
lament flax
#

this is steam

#

and i think the video is using a paid plugin

buoyant compass
#

ah ok 🙂

lament flax
#

not easy at the beginning

buoyant compass
lament flax
buoyant compass
# lament flax not easy at the beginning

oh no yeah i thought it would simpler

I just want to have a basic lobby to get my friends started on ue5 and invite them to imagine a multiplayer game togehter

lament flax
#

yeah for starter it might take you a week

#

because you need to setup the app, login, and create/find/join the lobby

buoyant compass
#

https://www.fab.com/listings/0e58c723-7c91-46b5-ac6a-ac35a70c3bfb i also have this basic template maybe i could use this ?

Fab.com

Welcome to Parkour Race! 🏃‍♂️💨Parkour Race is a fun 100% Multiplayer Blueprint Party Game Template - Make your way across moving platforms, jump pads, rotating beams and bridges that suddenly open. The first player to pick up the trophy is the winner! 🏆Trailer video✅ Parkour Race is a beginner friendly, Plug & Play multiplayer party game templat...

lament flax
#

it probably dont have EOS

#

so you will have to edit the lobby logic

buoyant compass
#

ah damnnnn

lament flax
#

i can send you some code if you want

#

might help you to check the classes and methodes

#

i had a interesting conversation with someone who helped me getting started, you might want to read the message starting here #epic-online-services message

buoyant compass
#
Unreal Engine

Skip setting up your Multiplayer Lobby system and dive straight into making your game!

Fab.com

What is the Modular Blueprint Lobby Solution? 🚀👾The MBLS product is an advanced multiplayer lobby solution that includes features such as: Hosting and joining games, lobby game settings (match settings), player list, character customization, a ready up system, kicking players, multiplayer chat and much more.🔎 See an advanced feature list down be...

buoyant compass
buoyant compass
#

it says it has EOS integration in mind but i don't really know how to configure it

lament flax
#

its not much

#

and highly configurable

#

cached stuff:

    // Cached needed interfaces
    OnlineServices = UE::Online::GetServices(UE::Online::EOnlineServices::Epic);
    OnlineAuth = OnlineServices->GetAuthInterface();
    OnlineUserInfo = OnlineServices->GetUserInfoInterface();
    OnlinePresence = OnlineServices->GetPresenceInterface();
    OnlineLobby = OnlineServices->GetLobbiesInterface();
#

login:

void UTFCOnlineSubsystem::Login(FString ID, FString Token, FString LoginType)
{
    if (OnlineAuth.IsValid())
    {
        FName LoginTypeName = "None";
        if (LoginType == "Developer")
        {
            LoginTypeName = UE::Online::LoginCredentialsType::Developer;
        }
        else if (LoginType == "PersistentAuth")
        {
            LoginTypeName = UE::Online::LoginCredentialsType::PersistentAuth;
        }
        else if (LoginType == "AccountPortal")
        {
            LoginTypeName = UE::Online:: LoginCredentialsType::AccountPortal;
        }
        FAuthLogin::Params Params;
        Params.CredentialsId = ID;
        Params.CredentialsToken.Set<FString>(Token);
        Params.CredentialsType = LoginTypeName;
        Params.PlatformUserId = FPlatformMisc::GetPlatformUserForUserIndex(0);
        
        TOnlineAsyncOpHandle<FAuthLogin> AuthLoginHandle = OnlineAuth->Login(MoveTemp(Params))
            .OnComplete([this, ID, Token, LoginType](const TOnlineResult<FAuthLogin>& LoginResult)
            {
                if(LoginResult.IsOk())
                {
                    TFC_OSS_SLOG("Login successful");
                    CachedLocalLoggedAccountInfo = LoginResult.GetOkValue().AccountInfo.ToSharedPtr();
                }
                else
                {
                    UE::Online::FOnlineError Error = LoginResult.GetErrorValue();
                    FString ErrorMsg = Error.GetText().ToString();
                    TFC_OSS_ELOG("Login request failed for ID: %s, Token: %s, LoginType: %s Error: %s", *ID, *Token, *LoginType, *ErrorMsg);
                }
            });
        return;
    }
}
buoyant compass
#

ah cool yeah but sadly i can't spend a week on this i'd like better to work on the game and i already got those packs anyway so i wanted to see how they would work but

#

oh ok wow thanks a lot

#

beauritufl

buoyant compass
lament flax
#

make a empty main menu and lobby and game levels and maek it work

#

then paste it where you want

buoyant compass
#

ah ok amazing
post it ? what do u mean sorry

#

and i need to select a c++ project in the template right ?

#

here i mean

lament flax
lament flax
#

is this your first time doing c++ ?

humble night
#

Is there some recommend tutorials that cover the basics of multiplayer, I.e. host on one computer and another can join? Anything in its simplest form

meager heart
#

I'm having trouble getting my clients / listen server to have their input captured by the viewport, right now I can't click into the viewport at all

I'm trying to have the player controller initialize the UI and set the input mode on-possess, but for some reason this completely stops any input from working

Does anyone know if what I'm doing is incorrect? Should I be doing input from somewhere else?

#

From the tutorials I've seen they usually are just initializing their HUDs on the PlayerCharacter actor BeginPlay, but I'm not confident that will handle dying/respawning well especially in multiplayer, so that's why I'm trying to use the possessed delegates on the player controller

lament flax
#

you can also check the various pinned messages in this channel

meager heart
meager heart
toxic falcon
buoyant compass
buoyant compass
toxic falcon
buoyant compass
#

oh ok thanks a lot

#

oh didin't understand thanks makes sense now

lament flax
buoyant compass
#

true definetly i just didn't know that multi involved c++ 🙂 i already have so much to learn in BP..

lament flax
#

doing a multiplayer game with BP only is the path of pain

#

BP has little exposed

#

people told me that in the past, i tried with BP only, switched to c++

buoyant compass
#

ah i get it
I guess my plan is not going to work then
i just wanted to create a simple for my friends to join
Because we were looking for cool coop games but then i thought what i love the most is doing stuff in unreal

lament flax
buoyant compass
#

but yeah i can see how struggling i am

lament flax
#

for various reasons

buoyant compass
#

yeah i understand.. sad !

lament flax
#

you could make a cool singleplayer game/protoype to start learning BP more in depth or c++

buoyant compass
#

true but i would need to integrate my friends maybe through source control ?

toxic falcon
#

Would be very hard to dev if everyone has to learn c++ just to do OSS integration xd.

lament flax
#

also, you should remove the epic games logo on your EOS docs

toxic falcon
lament flax
#

as its misleading and probably illegal

lament flax
#

blindly using a plugin doesnt get you anywhere on the long run

toxic falcon
fossil veldt
lament flax
#

the few Sessions nodes for LAN is enough to have as a beginner

fossil veldt
#

It’s kind of just objectively bad to have in BP tho for proper setups

#

because it just doesn’t give you the same level of logging or error handling

lament flax
#

for me its like giving a powerful truck to a toddler

fossil veldt
#

to the point where there are things you actually can’t debug if you did it in BP

lament flax
#

if you want to use a tool, you should be "good enough" to learn and use it properly

fossil veldt
lament flax
#

as someone said in #generative-ai :

“Mastery of a foundational skill precedes effective use of advanced tools.”

#

here foundational skill is C++ and multiplayer and advanced tools OSS

split siren
#

Any idea why clients on GASP (animations sample) on standalone server slightly rubber band when rotated rapidly?
It doesn't do that when playing with dedicated server, on the main map, but in another level it rubber bands even on dedicated server.

toxic falcon
# fossil veldt to the point where there are things you actually can’t debug if you did it in BP

I don't think that is right. It really depends on which subsystem/plugin you use and your approach. Most plugins have debugging methods and ways to find the issue. OSS too gives clear warnings if you want to stay with that. Never see this complaint before. And if you still want to go through directly implementing of stuff, sdk can be used too which gives the highest level of debugging you can get with online services.

lament flax
#

so it interpolates, but you already finished the 360

split siren
# lament flax probably because you rotate to fast

I suspected it has to do with interpolation. But what is the difference being a client on a dedicated server and being a client on standalone? It doesn't interpolate at all on another client on dedicated server.

fossil veldt
#

you just don’t get the logs in BP

#

for the more obscure stuff

lament flax
split siren
# lament flax well if you are a client on standalone there is no server until you open a level...

I didn't communicate my point correctly, sorry. My main confusion is that it does that when observed on server in listen server (client rotates rapidly).
It doesn't do that when both are clients on dedicated server.

Shouldn't it trigger the same interpolation code? I can make a case that server in listen server scenario shouldn't see the interpolation as it has the authority, but that is kinda the opposite of what I see.

lament flax
#

well i remember peopel talkign abotu this

#

because i think the server has more data or something, so it interpolates differently that a simply client

#

luckily i saved the stuff

split siren
#

Oh wow, thanks for the link!

lament flax
#

if you search the text inside here you'll find the discord messages

#

here !

split siren
# lament flax if you search the text inside here you'll find the discord messages

Hmmm.. I have the bandwidth caps really high, basically uncapped.
It is a bit more complicated as in the original GASP, the clients rubber band only in listen server, but when I ported the functionality to a new character, it rubber bands in both listen server and dedicated server scenario.

It is still within the same project and I thought I moved all settings from the original character to the new one, but I must have missed some setting.

lament flax
#

sadly i cant help you more

split siren
#

Thanks for the link and sanity check, it's not something super obvious

queen escarp
#

hey guys, tips im going to make a small Turn based project, where would i handle the turn manager in the gamemode, gamestate, or playerstate ?

#

wdythink ?

dark edge
#

Either GameMode or GameState, depending on the design

queen escarp
#

well basicly player 1 turn, player 2, npc repeat

sinful tree
# queen escarp hey guys, tips im going to make a small Turn based project, where would i handle...

Very simply, a GameState can contain a reference to the PlayerState who's turn it is. This could probably be handled better through an Array of PlayerStates using index 0 as the player who's turn it is. When a player finishes their turn, you remove Index 0 from the array, then add them to the array again (moving them to the end).

Any commands sent in by players that you need to know if it's their turn or not, you would first check if it's that Player's Turn in the GameState by comparing if their PlayerState is at index 0, and then proceed if they are.

queen escarp
#

yeah somethinglike that was my idea

split siren
# lament flax sadly i cant help you more

Slowly figured out the rotation rubber-banding issue. It seems the main issue is that I am using a child actor for the character mesh to allow modular cosmetics. No idea why or how to fix it, but that seems to be the where the issue is coming from. Just wanted to provide update in case someone searches for it.

lament flax
#

the character mesh is inside the CAC ?

#

CACs are terrible

#

epic recommend rarely using it, and only for very basic and simple stuff

split siren
# lament flax CACs are terrible

I hate them as well, but my system is almost a carbon copy of the cosmetics system from Lyra, or at least I thought so. Need to revisit how they did it, but if I remember correctly they had invisible mesh in the character mesh component and child actor that was retargetting the pose from the invisible mesh.

lament flax
#

if you want modular meshs you can check UE modular character mesh system

split siren
#

Has the demo been released yet? I am looking forward to it

lament flax
#

its been a while since this existed

split siren
#

Ah, I meant the new modular system plugin coming for 5.5

fading hull
#

Pretty new to this multiplayer stuff, If I were to want a separate actor to change a value on the Player Character (Once said Actor is Clicked it should set said Actor as the Players "Current Target" which is an Actor Reference) What would be the best way to get that information to the server?

dark edge
split siren
buoyant compass
#

never had this error any idea ?

dark edge
#

Pawn or PC can send the fact that they want to target an actor to the server, which can set a replicated TargetActor ref

buoyant compass
#

ok i think i'm abandonning multiplayer ahha 🙂

#

https://www.youtube.com/watch?v=5nMKEKV0acI&t=255s i've followed tihs tutorial it seems nice but i don't know i have too many absurd errors

This video covers how to set up Steam Multiplayer in Unreal Engine 5.5 using Blueprints.
It covers all of the setup steps, how to create and join sessions, as well as testing the game works over steam (even when you only have access to one computer through the use of Sandboxie).

If you enjoyed this compact tutorial, please comment below what yo...

▶ Play video
split siren
buoyant compass
#

like the one i've shown avove

buoyant compass
#

When trying to open first person character

fading hull
buoyant compass
#

ok i will retry doing everything from the beginning 🙂

#

i'm so stubborn lol

#

Experienced the same issue with 5.5 - can confirm that renaming (or deleting if you are brave) the user data folder solves this problem

%userprofile%\AppData\Local\UnrealEngine\x.y

where x.y is your version number (in my case %userprofile%\AppData\Local\UnrealEngine\5.5) ok its this i guess

split siren
#

But the target actor NEEDS to be replicated, otherwise the pointer to the actor will not be resolved on the server.

fading hull
slow wing
#

What is the best way to make the server not accept connections until the asset manager is done loading everything it needs?

little pumice
#

blocking load I guess

#

thou user experience would suffer, better to implement some kind of lobby system

buoyant compass
#

hi there would anyone be interested in helping me debug this tutorial ? i've done it 3 times already

#

it's supposed to be simple but it's not working properly..
https://www.youtube.com/watch?v=5nMKEKV0acI

This video covers how to set up Steam Multiplayer in Unreal Engine 5.5 using Blueprints.
It covers all of the setup steps, how to create and join sessions, as well as testing the game works over steam (even when you only have access to one computer through the use of Sandboxie).

If you enjoyed this compact tutorial, please comment below what yo...

▶ Play video
split siren
silent valley
buoyant compass
#

at 4.42

#

they spawn in separate worlds

#

ive even tried getting the session info but couldn't

split siren
#

Just to confirm, the step at 2:21 works right?

#

You can see the steam overlay

buoyant compass
#

my project is first person his is third but i think it has nothing to do with it 🙂

buoyant compass
#

actually i can't see it when i try now with the new setup

#

but i could before

#

i can even with the two sesssions

split siren
#

Can you double check your join logic? Join should never load user to a locally opened new map, it always has to be a remote map or it throws an error.
A) Check logs when joining
b) Add some print statements so you know you are actually joining and not creating a new session.

Simple stuff, but we take it step by step

buoyant compass
#

amazing thanks a lot i see what u mean

split siren
#

Also here, check the number of sessions you find.

#

This is a hacky code at best

buoyant compass
#

might be the issue in yellow here

split siren
#

That is just voice interface, that's ok

buoyant compass
#

ah ok

split siren
#

Clear the log before you click join and give me only what happens during the join? Right click, clear log

buoyant compass
#

crazy it actually says "sucess" but never joins

#

sure ill do that

#

interesting

buoyant compass
#

this is the full log of when i click join

split siren
#

That is quite positive, what actually do you see after clicking join?
Do you spawn into a level and with a character and you can run around (aka, the other player is missing). Or do you spawn in and you don't have a character but you can see the other player?

buoyant compass
#

i can run around

split siren
#

Fyi, lines

LogNet: Login request: ?Name=A-2F3102BC4A4CBF465B47E096AAEBDE9A userId: NULL:A-2F3102BC4A4CBF465B47E096AAEBDE9A platform: NULL
LogNet: Welcomed by server (Level: /Game/FirstPerson/Maps/UEDPIE_0_FirstPersonMap, Game: /Game/FirstPerson/Blueprints/BP_FirstPersonGameMode.BP_FirstPersonGameMode_C)
``` are important, and how that you are reaching the server and you are loading in
buoyant compass
#

actual magic 🙂

buoyant compass
#

it's crazy because other people didn't seem to have a problem with the tutorial or this particular part

split siren
#

At this point I would check 2 things.

  1. Am I actually connected to the server? You can make a Dummy Box Actor that Multicasts a random number that clients print out.
    If the numbers are same in both game windows, you are guaranteed you are in the same instance
  2. Check that your character is replicating. Probably unlikely you turned that off, but it's a simple tickbox.
buoyant compass
#

thanks a lot again 🙂

#

Multicasts a random number that clients print out. how would u do that sorry i'm really noob with multiplayer 🙂

split siren
#
  1. but easier, print on tick this
#

The idea is, that the window where you create the server is the authority and should print true. The other window, that joins the game is just a client and doesn't have the authority so it should be false.

buoyant compass
#

wait i dont' get it my first person character bp is empty

split siren
buoyant compass
#

no idea i just followed the tutorial

#

mystery is thickening

#

just added a third person it seems to be normal

#

OMG

split siren
#

Since SteamINT55Character is not on google nor Github, I have no clue where you got that from.

buoyant compass
#

ok it works now

#

that is crazy

#

i tried with the third person

#

and it works flawless

#

just loss 3h or something but hat's ok the dopamine from it working is actually insane aahh

#

thank u so much
I need to test it with a friend now lol a new world of issues i guess

split siren
#

I would recommend nuking whatever you have and replicate it in a new project. Having a base class you have no clue where it came from is a bit fishy.

buoyant compass
#

true definetly i'll do that !

split siren
#

Glad you got it to work, gj!

buoyant compass
#

thanks a lot for your help

#

steam menu is not working for some reason 🙂

#

but

split siren
buoyant compass
#

maybe it's not supposed to

#

i need to test it with the rest of the tutorial

#

thanks i'll try

split siren
buoyant compass
#

ah cool ok won't do that
how can i test it ?

#

"Blueprint Runtime Error: "Accessed None trying to read property CallFunc_GetLocalPlayerSubSystemFromPlayerController_ReturnValue". Node: AddMappingContext Graph: EventGraph Function: Execute Ubergraph BP Third Person Character Blueprint: BP_ThirdPersonCharacter""
and also got this weeeeeeeeeeeeeeird issue like What?? why here

#

maybe the mapping context is not replicated or something ? even though it's working
sorry for the spam !

split siren
buoyant compass
#

and last question if i want test with a friend i need to build the project right and send the .exe ?

split siren
#

Regarding the nullptr issue, I guess Enhanced input is not spawned for client on server side. You should check if player controller is locally controlled before adding mapping. Not 100% sure on this one, I didn't dig into the enhanced input too much.

split siren
buoyant compass
#

sorry just did this build but like why is it 1gb 😉

split siren
# buoyant compass sorry just did this build but like why is it 1gb 😉

Most likely because you have debug symbols included. It's a special file or set of files that allows you to attach a debugger to the game and see what went wrong or what the program is doing.
There are options in UE if you don't want to include them or you can just delete them manually.

#

Oh, SteamINT55 is your project name!

buoyant compass
#

ahha yeah 🙂 no idea why lol

slow wing
slow wing
buoyant compass
split siren
sinful tree
#

That looks like you're moving that red character on both the server and the client.

rustic sable
#

I have a UAssetManager instance where I load datatables into a singleton. It works in PIE but fails in standalone client mode. I can move the singleton load to beginplay of the player which does in fact work but wondering why datatables containing game item classes wouldnt be ready for something like an UAssetManager. Where else to load them?

dark parcel
#

can't the client call launch function? Since you are using GAS you might call it on both the server and client and it will fight each other.
@amber vale

#

try calling launch only on locally controlled character

#

i think it already handle networking stuff under the hood

little pumice
#

it's not about latency, but update frequency. Though high frequency (if it's the cause) is not a solution. Movement should be interpolated locally which CMC provides for characters out of the box. Also it maybe be contention between two sources of movement: client-driven vs server-driven(replicated + corrections).

To clarify things control/possess red guy with another client and move around to see(in the viewport of first client) how smooth movement is

#

movement component/character is broken in some way

#

have you setup packet loss?

#

what's the network config?

#

yeah

#

just screenshot them

dark parcel
#

why do you add packet loss

#

1% is huge

little pumice
#

set packet loss to 0, and min/max latency to same number. 30 to 60 is a huge deviation

#

though I don't thing it's the problem

#

iirc Unreal do not emulate at all by default

#

select CMC in your character and inspect for modified properties (there is special filter in gear button of details panel)

#

Character is also default?

#

do you use C++?

#

you can try put breakpoint somewhere in CMC to check what drives movement (contributes to velocity)

#

i.e. inspect call stack

sinful tree
#

Are you doing any kind of logic that could potentially launch the red character on the client initiating the knock up before launching on the server, and is that red character performing any kind of movement otherwise?

nova wasp
#

p.NetVisualizeSimulatedCorrections 3

little pumice
#

or recreate very default character from scratch

#

check this command in project that has no issues with movement

#

I guess only clients

#

server is authority, so no need for correction

#

though I dont think Epic would design it to crash editor if you type it on server

#

are you on stable branch/release of engine?

little pumice
#

I guess crash itself says a lot, have you modified engine?

#

put breakpoint in a place where you caught exception, but in a project where command works fine. to check that it follows same code path (i.e. AVX disabled)

little pumice
#

which is not optimized

#

otherwise breakpoint might not hit at all

#

check for compiler options/ .ini configs

#

non-default

#

disable command

#

p.NetVisualizeSimulatedCorrections 0

#

I mean check movement with this option on default

little pumice
#

create new bp character from ACharacter
for simplicity you can assign it AI Controller and order AI MoveTo to avoid mess with input setup

#

though nav mesh required

#

Character setup Pepechill

#

well AI controller is assigned by default

little pumice
#

what exactly? default character has no issue?

buoyant compass
#

Hi there how can i remove the SteamINT55 file (it's almost a gb) from my build ? thanks !

#

here is what is inside the file

little pumice
buoyant compass
void nest
#

Hello. Experiencing a really strange issue. I have an actor which has replicate movement disabled. However, when I set the actor location on the server only (using switch has authority node) the actor also inexplicably moves on the clients as well. There is no code whatsoever running on the clients. What is going on here?

#

Isn't the whole point of disabling replicate movement to make it so when the actor location is set on server it is NOT replicated? 🤔

#

Is this a bug or?

split siren
void nest
#

I'm working in blueprint on this project. The only node I'm calling in this actor is a "SetActorLocation" node that happens after a switch has authority node on tick. Other than that there is no other code inside the actor.

thin stratus
#

@void nest is that actor attached?

void nest
thin stratus
#

Then it replicates its relative location

void nest
#

Aaaaah

thin stratus
#

Needs c++ to stop that

void nest
#

Ok makes sense

#

I found another solution in the meantime

#

But good to know

#

I already had a bit of a suspicion it had something to do with it being attached to a ship

#

Would be cool if they added a replicate relative movement bool to actors

buoyant compass