#multiplayer

1 messages · Page 244 of 1

thin stratus
#

Hm.

#

So, there is one thing that might not be so clear when dealing with this stuff, due to how the CMC does it.

#

When dealing with prediction and reconciliation, you usually always want to do the same stuff, not matter what property changed.

#

If you take the NPP and Mover as an example, no matter which property causes the Rollback there, it will override the local data with the Auth Data and then re simulated all the saved moves.

#

The only difference is that NPP is more set up for "any data" and CMC is very specific on its Location.

#

The Location itself is being applied in the Super call you commented out. And then it wants to replay the SavedMoves. It has to, otherwise it will teleport the Client back.

#

I think the problem here is that you want to partially accept auth state.

#

This is usually one and the same thing.

#
  1. Accept full Auth State
  2. Re-run the Simulation that is still predicted
#

I can't fully recall what the problem was you tried to solve. You want to only accept the Stamina?

#

@grand kestrel

grand kestrel
thin stratus
#

This here I think?

grand kestrel
#

Yep

thin stratus
#

I think what you want to do is actually quite simple.

#

You should not disable the Resimulation.

#

Your problem is that the Server sends back its Location either way, and applies it.
But you want it to be Client Auth at that point.

#

So you should override the ClientAdjustPosition_Implementation and instead of setting the Location to the current Location of the Client, you need to set it to the one the Client had during that Timestamp.

#

Then it would replay the moves but based on the same location it was already using

#

Which should just result in the same

grand kestrel
#

you need to set it to the one the Client had during that Timestamp.
Hmm where do I get that tho

#

Ah found it

mild sonnet
#

Reposting this

Can anyone confirm if a FNetworkGUID, specifically the FNetworkGUID.ObjectID, is the same for a given replicated object on every client? Since FNetworkGUID can't be a UProperty I'd like to pass around the ObjectID int64 knowing it will refer to the corresponding UObject.

I assume it’s the same; but wanted to get some confirmation

thin stratus
#
void UPredMovement::ClientAdjustPosition_Implementation(...)
{
    /// Will apply Server Location and Ack Move etc.
    Super::ClientAdjustPosition_Implementation(...);

    FNetworkPredictionData_Client_Character* ClientData = GetPredictionData_Client_Character();
    check(ClientData);

    UpdatedComponent->SetWorldLocationAndRotation(ClientData->LastAckedMove->SavedLocation, ClientData->LastAckedMove->SavedRotation, false, nullptr, ETeleportType::TeleportPhysics);
}
#

Something like this maybe @grand kestrel

thin stratus
#

Not entirely sure. The PackageMap is what holds that iirc.

verbal ice
#

Yeah it'll likely be different on every client

mild sonnet
#

Yeah… I’m desperate to find some way to uniquely identify each object.

thin stratus
#

PackageMapClient to be more precise

verbal ice
#

Whatcha trying to do

mild sonnet
# verbal ice Whatcha trying to do

There are sub-objects that need to be manually synced by an external actor. This external actor has pointers to the sub-objects. Put simply, I just need some kind of replicable “ID” for each actor

#

It’s for a custom physics solution

thin stratus
#

Hm. Given the NetGuid is what is sent when sending some replicated Actor/Object, I assume there is a way to communicate that between Server and Clients, even if the ID is not the same across all.

#

Just probably nothing that can go Client <-> Client

grand kestrel
thin stratus
mild sonnet
grand kestrel
thin stratus
#

Puh, I will need to think about that tomorrow a bit. Can you leave me a DM once more explaining what you are trying to accomplish.
I kinda lost it halfway through, even with the old messages.

grand kestrel
#

Yeah I'll try 😄

thin stratus
#

Cheers

mild sonnet
#

Through some testing, I think I’ve confirmed that FNetworkGUID.ObjectId are the same on server and client. This will make it easier to work with actors across the network

hollow eagle
#

err, why though? The pointer to the object is itself translated to a consistent identifier.

#

or FObjectKey/TObjectKey if you want to be safe about it.

#

you should rarely if ever need to interact with a netguid directly - the engine already translates pointers to the object across the network.

mild sonnet
#

That’s interesting… my attempts at sending AActor*s over RPCs seemed to give invalid pointers

hollow eagle
#

then those actors aren't replicated

#

or they hadn't been replicated by the time the RPC was sent

#

or you sent the pointer in some other representation (like a uint64) which the engine can't translate for you because it doesn't know it's a pointer to an actor.

exotic wasp
#

^

#

i would be very interested in what situation a objectid would be valid on client and server but the actor isnt replicated yet...

mild sonnet
mild sonnet
grizzled garnet
#

How does the gamemode work in a replay playback? I'm having an issue likely caused by the gamemode, I think the default gamemode that's needed to initialize the game isn't being used in the replay

lost inlet
#

It doesn't is the short answer, just like a client

lethal sparrow
#

Wasn't there this string / var that you could check during debug to recognize if you are debugging client or server? Can't seem to find it now, slowly I'm starting to believe I'm was jsut imagining things 😱

lost inlet
#

UnrealEditor-Engine!GPlayInEditorContextString

chrome bay
#

Be aware that if you're not breaking in the game thread (or a thread that's in lockstep with it), it is not accurate lurkin

#

RIP spammer

mental apex
#

Any reason why FFastArraySerializer::OwningObject is not being tagged as UPROPERTY(Transient)? My program crashes under MarkArrayDirty() and then under IncrementArrayReplicationKey() because OwningObject is not nullptr but has been garbage collected.

shrewd ginkgo
#

I use voip voice chat, but if I don't put the microphone in my mouth, my voice doesn't sound right. treshold 0

#

and I think something is wrong with the replication. in our tests on different computers, sometimes the doors cannot be opened by the clients, but if I come as a server and interact with the door, the client can also open it. this problem rarely happens, but I want to know how to solve it.

violet sentinel
chrome bay
#

It's for PushModel only, you're not really supposed to access it directly. Classic awful encapsulation decisions from Epic

#

Just create your own property IMO

mellow escarp
#

If I want to attach a player pawn to another moving player pawn (a turret and a ship, respectively), what would be the best way to keep the camera from the turret stable when the ship is moving and the turret is rotating? I don't care about cheating or server check as long as it matches roughly what's happening.

mellow escarp
mild sonnet
#

I'm writing a c++ pawn. It has bReplicates set to true, *GetController()->GetName() returns a valid controller name, but client->server RPCs are being dropped. Strangely, even though the pawn is spawned on start, GetOwner() returns a nullptr until I set it manually to the player controller. If I could get a second pair of eyes on this that would be amazing https://pastebin.com/3vkXQrxP

dark edge
dark edge
#

honestly having a bIsPossessed is redundant, you can just check Controller

#

why have 2 bit of information when 1 bit do trick

#

especially if they disagree, then which is true?

mild sonnet
#

True true

What bothers me is that the owner is apparently null on spawn, and the pawn can’t even call rpcs on itself

dark edge
#

that's probably correctish

#

what are you actually trying to do that requires an RPC right off the bat

thin stratus
mild sonnet
dark edge
#

you're skipping a bunch of boilerplate

thin stratus
#

If you spawn the Replicated Pawn and Posses it on the Server, then waiting a few seconds an calling a ServerRPC via Button Press should work just fine.

#

Also, are you using the old Input System? Or are you still on UE4?

mild sonnet
#

Old input system, UE5; the inputs come in just fine

dark edge
#

just call Super::PossessedBy and the others after your code

mild sonnet
thin stratus
dark edge
#

If you're overriding stuff from parent framework classes, make sure to check that they aren't doing a bunch of work that you need.

mild sonnet
thin stratus
proper wharf
#

Hello, I'm using the online subsystem for STEAM right now but everytime I create a session, nobody can't seem to join it. Is there detailed tutorial on how networking works? I'm following this tutorial right now https://www.youtube.com/watch?v=_U0BK0olC-I&list=PLNb7FZ2Nw2HTBgWggHGaMtHAOygKcXIyW&index=8

👨‍🏫 My Patreon link:
https://www.patreon.com/kekdot
Download Project Files | Premium Tutorials | Courses

🕹️ Get our Game on Steam | The Anomaly Project:
https://store.steampowered.com/app/2960770/The_Anomaly_Project/


In this tutorial we implement/setup Steam for our game. We take a look at the Steam Advanced Sessions plugin and set it up f...

▶ Play video
#

I can create a session and host and stuff but it's just not stable for some reason

proper wharf
#

yes

thin stratus
#

And when joining it simply fails?

#

You'd need to check the log files of server and client then.

#

Potentially enable more logging to figure out why

proper wharf
#

oh that's a great idea! Where can we find log files for server and client? I know there are crash logs and fatal errors

thin stratus
#

Assuming you aren't packing for Shipping, they should be in the folder of the project (the packaged one) under Saved/Logs

proper wharf
#

got it thanks

#

would it be okay if I shared the log file on here?

#

I'm having some trouble understanding it

thin stratus
#

Yeah you can share it here. Just make sure you don't have any sensible data in it that you don't want to share

hot scroll
#

I am a bit perplexed by an Unreal error.

LogNet: Error: UEngine::BroadcastNetworkFailure: FailureType = OutdatedClient, ErrorString = The match you are trying to join is running an incompatible version of the game.  Please try upgrading your game version., Driver = PendingNetDriver IpNetDriver_8```

I totally understand the idea of 'server and client aren't same version', but I literally just built both with the Project Launcher

For further context: I'm using PlayFab's Local Multiplayer Agent which starts up a .zip version of the server (which I did re-zip after building) and joining via ip-127.0.0.1 (which I've been doing for a while now)

I feel like there must be some common gotcha or my development somehow caused it to not recognize as compatible?
Like is there possibly some cacheing behavior going on here?

Hypothesis: I had a headless server running in the background and it was trying to connect to that over the new builds.
**Solved:** Rebooted and that resolved it
#

(Nonsarcastic) Thanks for the help. Explaining the problem led me to find the solution.

quaint roost
#

has anyone tried using level instancing (load level instance) in multiplayer?

#

I plan to have the server load all the sub levels, but the client will stream based on distance

remote tusk
#

Are there anyway to create A C++ class inherited from GASP character? I implemented GAS to my project to create multiplayer attributes etc. But I was using GASP character as blueprint. I also need C++ Character class, but IDK what to do in that case. Or for example, using TPS character as C++. This is an existing project that started from TPS template.

quasi tide
#

I'm not familiar with GASP (also, hate that people try to acronymize everything) but of course there is. GAS itself has no relation on something being a specific class. So just inherit from the GASP character.

#

If your GASP character is in BP, then make it in C++.

thin stratus
#

If GASP Character is a C++ class, you can inherit from it in C++, or via BPs.
If it's a BP class, then you can only inherit via BPs.

#

If the GASP Character is a BP Class, then you could make that inherit from your own C++ class, in case that helps.

remote tusk
thin stratus
#

If GASP has C++ code and they are shipping it without the Source code, then you can't edit it.

remote tusk
#

Alright, I will check it out ❤️ Thanks for information. I think i will go pure C++ way for my character, and implement everything on my own, which means i will have more control over as first place. Like animations etc.

thin stratus
remote tusk
#

I successfully changed CBP_SandboxCharacter's parent to my c++ class.

shrewd ginkgo
#

I use voip voice chat, but if I don't put the microphone in my mouth, my voice doesn't sound right. treshold 0
and I think something is wrong with the replication. in our tests on different computers, sometimes the doors cannot be opened by the clients, but if I come as a server and interact with the door, the client can also open it. this problem rarely happens, but I want to know how to solve it.

unique forge
#

Hi uhm, im having trouble with changing the emmessive material to switch on/off like a flashlight. Somehow i cant figure out for hours what the problem is, any tips or suggestions?

#

i thought its like a flashlight replication, but idk sometimes my brain says its the material to change and not the sphere

thin stratus
#

You shouldn't have bLightOn and bLightOff.

#

bLightOn is already covering both states by being either True (On) or False (Off).

#

And then you are left with just one OnRep function in which you can BRANCH on bLightOn to set the Material and print your little debug string.

dark parcel
rare wharf
#

hi having some noob troubles with generating railtracks, i am not sure how to replicate spline points being added

#

the client gets the data and i did a repnotify for each spline point

#

but the client cant create the points so im not sure how to replicate the tracks being created

#

(the values are fine just not sure how to add spline points)

#

i found the issue nvm :D

#

wasnt updating the spline correctly

unique forge
dark wing
#

if its true that means its on, if its false then its off

unique forge
#

so wait my brain is thinking

#

normally the sphere has a material called LightOff, so bascially at lightoff i dont have to setup anything?

dark wing
#

well, if the light is off by default then set that material

unique forge
#

yeah its default

#

so only i need to add is the LightOn material

dark wing
#

then when the variable is set to true or false, handle that in OnRep

unique forge
#

and thats it i think

#

nvm

#

lightOn Material is there but LightOff not

#

so i have to add it

unique forge
dark wing
#

OnRep

unique forge
#

the varibale

#

okay

dark wing
#

the method will be called if the variable value is changed by the server

#

from there you can handle logic for both server and clients

unique forge
#

like that ?

dark wing
#

but keep in mind OnRep won't be automatically called in C++

#

you can have one method

#

Server_ToggleLight

#

with no params

#

and get "Flashlight" variable then "Not"

#

so that if its true, the returned value is false, and vice versa

unique forge
#

so OnServer is nothing to change i guess

#

so onRep i have to work with it

#

delete the OnClient above and others

dark wing
#

once the value is replicated, the OnRep will be called

unique forge
#

not boolean ?

#

on RepON?

lament flax
#

OnRep_YourVarName

dark wing
lament flax
#

no need to be rude to beginners

dark wing
#

remove these

lament flax
# unique forge like that ?

on server set the var to whatevr you want

if its different, the OnRep function will be called on server AND clients

unique forge
#

aha koay

dark wing
#

show me the logic in

OnRep_flashlight

dark wing
lament flax
unique forge
#

i think that works

#

M_Camcorder is LightOn Material

dark wing
# lament flax .

Relax, it was just an emoji.. not an insult. If you can’t handle a simple facepalm, maybe the internet isn’t for you

dark wing
unique forge
#

want me to rename it to LightOn?

dark wing
#

Whatever’s convenient for you, LightOn works if it makes things clearer

unique forge
#

yeah

#

thats how it looks like right now

dark wing
#

press on "ToggleLightOnServer" Event

#

and remove the parameter

unique forge
#

a or b

dark wing
unique forge
#

a

lament flax
# unique forge

in the future replace the flip flop node with a branch reading the flashlight var.
flip flop are rarely useful outside prototyping

unique forge
#

okAY

#

i deleted it

lament flax
#

if flash light on -> set it off
if flash light off -> set it on

dark wing
lament flax
#

you got your toggle back

unique forge
#

but im talking about the material

#

not the spotlight

lament flax
#

you arent changing it

unique forge
#

the bright emmessive material

#

on the flashlight

lament flax
#

you are not using the bool here

unique forge
#

yeah i renamed it to lighton

#

what bool to add?

lament flax
#

idk what you want, but if you want to change the mat depending on the flash light bool var, use a select node

dark parcel
#

Multiplayer is too early for you if you are new to blueprint.

unique forge
#

material pin

dark wing
#

this is the pin

unique forge
#

ah lol

dark wing
#

hold and drag then release it

#

and write

#

select

unique forge
#

okay

#

i see it

dark wing
#

choose that node

#

then in "Index"

unique forge
#

option o

#

option 1

dark wing
#

put the boolean there

unique forge
#

okay

dark wing
unique forge
#

the repnotify variable?

dark wing
#

yes

#

join the thread

near rapids
#

I'm trying to do character selection, in front end. What's the best place to store those variables in regard to persistence? The PlayerState persists seeless travel (or rather get's copied to the new one) as far as i know. But can i count on the travel from UI map to playable map be seemless?

forest spindle
#

I'm having an issue where the host's music seems to loop over and start again once another player joins or when the music is changed so it is essentially playing twice at different points. I'm using an audio manager just to handle the functions for setting and playing sounds but it is passed an audio component from the player pawn bp.

kindred widget
forest spindle
dark parcel
#

Showing the code would be a start.

forest spindle
#

Moving it to the player hud has solved the doubling audio. I was wondering about having different music playing for players, when a player enters a district it would play that districts music for that player.

dark parcel
#

The overlap will happend in every machine when it happens. So if player 3 enter the region, all other players will also execute the overlap.

Imo what you have shouldn't work either.

#

What you can do if you want to play the music only for the player that overlap it.

You can get the actor that overlap it. Check if it's the player character, if it is then check if it's locally controlled. If true then play the music

forest spindle
#

So in the District BP off of its ActorBeginOverlap cast it to the player bp, check if locally controlled, then call the HUD to change its music?

dark parcel
#

Thst should work though I'm not sure what music got to do with HUD

#

I would probably make a component for this

#

Actor component*

forest spindle
#

Someone else had suggested handling the audio in the HUD since its local only

#

an Actor Component in the District BP?

dark parcel
#

And that's done with OnOverlap-> get actor -> is locally controlled.

#

Saying hud is local in this context doesn't make much sense. Everything is local.

#

The overlap happend locally too

#

Everyone running their own instance

#

The component exist on every single machine.

#

It triggers when it triggers for that instance.

#

You will use rpc to communicate between machines but for playing music, why do you need to tell anyone that hey I am in this region?

#

Simply overlap, is the overlapping character the character i am possessing? If yes then play music

forest spindle
#

okay that makes sense

#

thank you for your help, getting use to networking and what to rpc and what not to rpc has definitely been challenging

open wave
#

anyone know where i can find the documention for the advanced steam sessions i have been looking and i cant find it. i want to look over it instead of watching people just show you how to do it

gray orchid
#

Hello, I am working on a multiplayer FPS game and I have the weapon as a separate actor and am trying to make it so only the player can see the arms and weapons but I cant figure out how to set the owner to the player. I am using the actor with an child actor component attached to the camera. Can anyone tell me what I am doing wrong?

upbeat basin
#

Is there a properer way of handling the initial travel to server and the map change that comes with it? I'm currently gathering the players in a lobby for the waiting for players state which is just a different UI on the same level, so the standalone and networked levels are the same. Although it's like a fraction of a second it still is understandable as the animations and particles on the background reset, I'd ideally not have the visible discontinuity on the scene.

I feel like beacons could be the way but I would still need to travel at some point when game is about to start and server travelling while having everyone connected feels more secure than travelling with server only and having a second waiting for players state as well as needing to return the lobby back to main menu if an expected player have issues with initial travel or something. Is this an empty concern from my end?

grizzled garnet
#

Replay and server/authority

thin stratus
#

Just override the Possessed Event in your Pawn/Character, which should be Server-only, and spawn the replicated Weapon Actor and attach it to the Component that your ChildActorComponent was attached to before. Then you can pass in the Controller as the Owner on the Spawn Node. (don't use GetPlayerController0!).

#

Pretty sure the OwnerOnlySee stuff on Components only works for the Actor that is the current ViewTarget. Which means your Pawn/Character.
So you can only really set this on the Arms Mesh Component. Not sure if it hides attached Components/Actors too, but that would be my first test.

cold temple
#

Hi, should I replicate SkeletonMeshComponent using RepNotify? as I have to spawn the SkeletonMeshComponent on server and then replicate to individual client, or is there a better way to do this?

versed plume
#

Hello! I'm working on an AI that basically just "grabs" the player, moves to a location, and then drops the player. The issue is that, after grabbing the player, the AI keeps having a jittery movement on the client side, while on server works fine.
The set up is:

  • The client that gets grabbed it gets granted and activated an ability by the grabber (so run on server since it's AI)
  • This ability disables collisions of the owner, sets the owner's movement mode to None, disables the tick on the CharacterMovementComponent of the owner, and finally attaches the owner (the grabbed) to the instigator (the grabbing)

The ability gets executed by the client. Am I missing something? I got one improvement by setting the Network Smoothing Mode to Linear instead of Exponential but still didn't solve the issue

chrome bay
cold temple
dark parcel
#

would it be sane to disable correction entirely on Autonomous actor and instead correct by smoothing out the transform?

#

I want to not apply correction when the delta is too small. Looking at the settings though, smoothing seems to only be for Proxies not autonomous character.

#

When an A.I comes charging at me and the client pushed it self toward the target, there's always a mini correction. Which isn't noticeable but it stops my montage from playing 😦 because the client being corrected regardless.

#

to be exact it stops PlayMontageAndWait from GAS.

#

my test seems to point that it must be the NetCorrection that caused the animation to stop midway. When disabling correction, there will not be an instance where the anim get stopped mid way.

chrome bay
#

You don't smooth autonomous characters because you are typically moving them ahead of the Server, they are predicting, so inherently "smoothed".

#

It's virtually impossibly to avoid corrections when two players come into contact with each other because they are in different temporal regions. Local character is ahead of server by ping / 2, everything not being predicted is behind the server by ping / 2.

dark parcel
chrome bay
#

AGameNetworkManager has the tolerances IIRC

#

It's extremely small, like 3cm, maybe not even that

#

But larger tolerances will mean more divergence

dark parcel
#

will check it out, thanks!

#
    /** MAXPOSITIONERRORSQUARED is the square of the max position error that is accepted (not corrected) in net play */
    UPROPERTY(GlobalConfig)
    float MAXPOSITIONERRORSQUARED;

    /** MAXNEARZEROVELOCITYSQUARED is the square of the max velocity that is considered zero (not corrected) in net play */
    UPROPERTY(GlobalConfig)
    float MAXNEARZEROVELOCITYSQUARED;

Just gotta find where the config is

#

I guess this goes on DefaultEditor and DefaultGame?

#

nvm I see it in BaseGame.ini. Wonder if that effect both editor and packaged or not though.

shrewd ginkgo
#

I use voip voice chat, but if I don't put the microphone in my mouth, my voice doesn't sound right. treshold 0
and I think something is wrong with the replication. in our tests on different computers, sometimes the doors cannot be opened by the clients, but if I come as a server and interact with the door, the client can also open it. this problem rarely happens, but I want to know how to solve it.

winter pollen
#

Do i need to replicate procedural animations? Because right now the animations only apply on the clients screen to that clients character only.

grand kestrel
#

You don't replicate any animations
Animations are a representation of the game
Which is already replicated

karmic trellis
#

Hello, I have a question about if I attach an actor to character can I make the actors rotation seperate from character? I tried to change rotation method on attach function but didnt effected. What can I do different for it? I want this because I m using set actor rotation to turn character, not using relative or world because project is listen server and I couldnt make them work well so If u have a solution for rotation method too it can be another solve. extra: rotation system just rotates character to mouse point in 3d

rare wharf
#

hi all im struggling with how to replicate a widget component i have a radar dish

#

it only runs on server and idk how to as widgets are client specific

karmic trellis
#

widgets cant replicate so calculate everything on server and keep what u need for variables in server -example object location or eg- and send them to clients with an solver and rewriter widgets Event for all clients @rare wharf

rare wharf
#

that what i was thinking to do ima try calculate all thing snad call it from the radar itself rather than widget

karmic trellis
#

ok so what u wanted to ask then 🤔

rare wharf
#

i just htought of it after i sent it and wasnt sure if it was the right solution cuz im a noob

#

worked thank you

#

@karmic trellis xoxo

daring gorge
karmic trellis
#

Late reply but I unchecked lots of things Always Relevant to off -mainly chars bAlwaysRelevant false rn- and now network traffic looks better thanx but still the 80ms problem didnt changed. crying crying new profiler result is on attach. I think all looks good but what can be the really problem.. I dont have any extra high value replications and everything I designed simple -I think-, but still movements takes the highest heaviness 🤔

thin stratus
#

How is your framerate usually looking like?

karmic trellis
karmic trellis
#

and clients higher normally

thin stratus
#

What's with the player thath as the higher ping?

#

Was this hosted somewhere and a player from a different location connected, or is this on the same PC or LAN?

karmic trellis
karmic trellis
#

I have 2 pc with me rn and testing with them

#

not lan

thin stratus
#

You could try hosting an empty level that just has a widget with a text showing the ping.

#

And see if connecting to that shows something else.

#

empty level -> fresh/empty gamemode -> no character etc.

#

Basically as bare bones as possible.

#

If that's still a high ping that it's probably not UE related.

#

How are you currently printing the ping?

karmic trellis
#

ohk got it I will try rn, btw is it helps if I check the UnrealInsights screen?

#

looks so complex but should I try to analyze it too is it worth?

thin stratus
#

Eh, not sure. You can do some traces on Server and Client for CPU and Network fwiw. Can't generally hurt.
should be done on a packaged build though, preferably testing, but if you have no source build then just development.

#

Could you show me how you are currently determining/printing the ping?

karmic trellis
#

like this @thin stratus

#

btw I should ask again, for the characters the net update frequency I m using 60, may is it high? but whe I decrease this the characters movement looks laggy -on same computer editor test with 0 ms-. 🤔

thin stratus
#

But you are probably trying to fix Clients looking laggy on the ListenServer.

#

Everything else shouldn't really look laggy.

karmic trellis
#

hmmm

thin stratus
#

The FPS/ms of the GameThread can indeed affect the ping.

#

Expecially low FPS can cause updates to be send and received less often, causing the ping to be higher.

#

That's why I asked for the FPS

karmic trellis
#

I know but in the real testing I always see 80 90 fps but in blueprintinsight record says game drops to 3fps

#

if it drops this much then how I cant see it in the game

#

look says 10fps for a huge time

#

I will check this I think thanx for helps, I will give more information if I found somethings more. and I will try to run an empty map too @thin stratus

thin stratus
#

You'd need to actually check below the graph what the higher areas are.

#

The majority looks to be around 60 to 30 FPS.

#

More 60 than 30, so that should be fine-ish

mild sonnet
#

Warning LogTemp RoundTrip: 0.216667, Half: 0.108333, clock set to: 7.491666, was 7.475000
I made a simple clock sync algorithm that sync's the world's TimeSeconds to that of the server. It seems pretty accurate. I worry, though, that I'm not doing this "the right way" and TimeSeconds wasn't meant to be touched manually. Also the time values look truncated to 1/60 (which is fine for my use case)

sage scroll
#

Hey guys, so i am trying to fix my spectator system issue here it is:
Since my map is big when a player dies and starts spectating someone else and he goes far away and triggers rpcs, those rpcs doesn't trigger for the client that's spectating due to network relevancy. So to fix that i made a spectator Pawn class and when the player dies i possess it and set its position to the currently spectated player every couple of seconds, the thing is i added a cube to the actor to visualise its position and it works it teleports properly for everyone, but the rpcs that are far away still don't work, any ideas?

#

That's my pc code:

thin stratus
sage scroll
thin stratus
#

There is no need to spawn a Spectator Pawn if you aren't letting the player control it anyway

mild sonnet
#

Though for my own sanity, I like a small codebase over doing it the optimal way 🙂

compact flame
#

How do I make this smoother on client it jitters a bit sorry it looks like a mess, I want it to function before making it look all pretty lol

dark wing
#

Don't set the RPC as reliable

#

It'll overload the server

#

and what is this velocity for?

compact flame
magic vessel
# compact flame How do I make this smoother on client it jitters a bit sorry it looks like a mes...

First off, why are you dividing by 2 then normalising it? The normalisation negates any affect to the scalar component of your vector
Second, clamping the normalised vector size to 800 does not get you a mapped range between 0-800, I'd use the x component of your input to map a range between 0-800 and multiply the normalised vector by that amount. That should give you a smoother progression in your velocity.
Third, all of this logic should be done on the server. You should send the input data raw through a UNRELIABLE RPC, and in your server implementation perform the math logic. The cardinal rule of multiplayer, never trust the client. Being able to set the velocity of your client directly through an RPC is not a good idea

tardy fossil
#

also once you introduce ping, movement is gonna be delayed and not feel very good. i'd highly suggest looking into the character movement component. theres a flying movement mode

magic vessel
#

That is another good point, the CMC has a lot of nice built in functionality for exactly this

vocal ridge
karmic trellis
#

@thin stratus Hi again, news here I checked the bpInsighter and games fps is stabile at 60fps -sure clipped on editor to 60 defaultly- the shown 3fps sections we checked yesterday was all just players joining and world generation frames soo in frames the game is lookin well. andd another news I tried what u said yesterday "test on a fresh world with fresh GameMode and egs" andd the results are, fresh games blank pawn gives 8ms and in the same world with my gamemode and pawn the pawns ping is around 30..
When I checks the details just the replicated movements/locations/rotations are looking high but they re already all default too. sooo Idk what should I do now 😕 😕

thin stratus
karmic trellis
#

just a server pawn and clients pawn

#

nothing more

#

all a blank world

thin stratus
#

How many clients?

karmic trellis
#

1

#

not any AI around

thin stratus
#

Your own Pawns probably have a way too high update rate then

#

Check if it gets better if you reduce the values a bit.

karmic trellis
#

but I reduced them already and wait I will show u too may I misunderstand somethings

#

all this right? for a pawn with character movement.. I typed Replicat and Network and all showns are here

#

in the network tab all the values was like 0.1 or 0.01 per second and I increased them to make less repeat per second

#

soo actually this is less repeating for a default pawn

#

and btw my components not all replicated too just capsule comp and 2 meshes are component replicated enable

thin stratus
#

Higher number in frequency means it's more often tested

karmic trellis
#

I know I know but netupdate frequency already decreased from 100-default-

#

and I decreased it with checking so If I make it lower the character starts teleporting

thin stratus
#

10 is probably enough tbh.

#

It shouldn't teleport from that

karmic trellis
#

humm lemme try

thin stratus
#

If it does then there are other issues.

karmic trellis
#

btw I curious why this low values are while ok then why defaultly the engine is too high like 100? why did they do this 🤔 is it have a reason do u know?

karmic trellis
#

@thin stratus

queen escarp
#

Hi Doing stuff on an Actor component

#

it not "counted as owning client doing it " ?

#

i mean components cant speak to server ?

dire cradle
#

Im guessing it's the issue

dire cradle
queen escarp
#

yeah but its a actor componenet

karmic trellis
#

for details the average size of rotation is very low but if u wanna know here @dire cradle

queen escarp
#

on the "owwning actor"

#

so its the owner

karmic trellis
dire cradle
#

Even if the server wasn't overloaded this will look jittery on clients

karmic trellis
dire cradle
#

Plus this is a reliable RPC running on tick

karmic trellis
#

but I m filtering it if its pawns owner it runs or not

#

so not running extra

dire cradle
#

Doesn't matter, it's still sending rotation data every tick with a reliable rpc

#

that's the issue overloading the server

karmic trellis
#

if the players remotely owner the next progress going

karmic trellis
#

I tested it already before

#

thanx but solution is not about rotation rn

lament flax
#

whatever you do you shouldnt send on tick reliable RPCs

#

doesnt matter if you fix or not, because yont wont keep it

karmic trellis
#

I will change it thanx

dire cradle
lament flax
#

i dont know what you are trying to do, but the minimum would be sending unreliable rpcs

dire cradle
#

And don't interpolate on the network, it will always look jittery
Interpolate locally

karmic trellis
#

oh I do just turn to players pawn to mouse point

#

but didnt found a better way

#

how can I do it and will be better for network 🤔

dire cradle
#

I think it would be better if you used a simple replicated float variable for yaw

#

and set it to skip owner

#

Set the value both on local and send it to server at the same time

#

Then interpolate the rotation locally on everyone

karmic trellis
lament flax
#

no

dire cradle
#

No

karmic trellis
dire cradle
#

Firstly the replicated variable only sends deltas, meaning it will only send the last value when it's changed, and only the changes

#

An RPC will always send the full variable regardless if it has changed or not

#

and if it's a reliable RPC it can't be dropped, meaning it can overwhelm the server if you send it on tick

karmic trellis
dire cradle
#

That's a good thing to have

karmic trellis
#

hmmm am I get right, I need change to event from "to server" to "to locally"

#

or just making an variable is enough?

dire cradle
#

I just realised you weren't multicasting the rotation

#

Try the current setup with 2 clients

#

They won't see each other's rotations

karmic trellis
#

yea because its actor rotation so server enough to show them to client

dire cradle
#

ah then yeah if replicate movement is on, but since it's trying to interpolate on the server it might still look jittery

karmic trellis
#

🤔

dire cradle
#

still a good idea to keep scalability in mind

karmic trellis
dire cradle
#

sure

karmic trellis
#

I m there in 10 min

quiet snow
#

guys i am trying to use Web auth for Epic account login using javascript , the problem is i am able to generate a 2FA code(sent to my email) , but unable to use the 2FA to get an asses token

quiet snow
true spade
#

Hi, i have a question for creating lobby. I wanna make lobby something like the OG MW2 style, and I'm using Lyra sample, I made a new experience that would load GameLobby map, and it will show character and open a widget of the lobby, but when I try to create session it opens the level, but other player cant find it, but if I start any other session it will find that session. Does anyone know, how I can or what I have to change so that I can see that lobby session in the browser. FYI, if I switch experience it will show in the browser, and I tried adding those in my lobby experience but that one could not be seen. Any ideas?

queen escarp
#

Hi whats the best way to replicate orient roattion to movement

#

in this case the player is standing still but u can rotate him with mouse,

#

it need to be rpcd

compact flame
quiet snow
queen escarp
#

oh play in on the server

#

"set it" ?

rare wharf
#

hey all i have a widget component that im trying to only appear on the client that is near it but it appears on the server and all clients any help

quiet snow
#

How are you checking who is near it

rare wharf
#

a sphere collisiipn

quiet snow
#

Use is locally controlled for the actor/pawn

#

If locally controlled then call the event dispatcher

rare wharf
#

thank you :)

#

thanks spartan

queen escarp
#

@quiet snowwow that was to easy xD

brazen anvil
#

I have a component that lives on the character. This component controls the weapon in terms of recoil, sway, etc. The values that drive this is stored in a data asset that is attached to the weapon. When I switch weapons, does it make sense to read the data asset off of the weapon and update the values that control the weapon? Or should it be done a different way? If done this way does it make it easy for cheaters to change these values?

dire cradle
#

Don't pass trajectory data to the server to execute

#

Let the server calculate the trajectory itself

brazen anvil
#

So if I did that, lets say the client cheated and made it have no recoil. So the barrel is always at position X. On the server, it has the recoil and now the barrel is at position Y. The server will calculate based on the servers barrel position correct? And the client will just have no recoil but it will never hit. It will be like shooting with sights that are not dialed in.

dire cradle
#

Yes exactly

brazen anvil
#

Ok thanks

dire cradle
#

You can't really stop the players from messing with their local camera, that they can just cheat and control

#

That's why there are kernel level anti cheat software

#

like Easy Anti-Cheat etc

#

But you can put measures in so they can't control the server-side logic

brazen anvil
#

Ok good to know. Thank you!

dark edge
#

The client can say where they were shooting or who they hit, but you should verify or sanity check it before affecting any canonical state of the game

brazen anvil
#

Yeah makes sense

rare wharf
#

i need some help with a pickup, im not sure if doing this right cuz im a noob

#

(player controller)

#

item pickup

#

the server works but client never interacts with the item with breakpoints

#

im doing something wrong but not sure what

gleaming crane
#

5.5.4 just got updated for me, i remember someone talking about how they updated the sessions code to "work" now for this version. Anyone have any info on the notes for it?

unique forge
#

Do I add destroy session when host is leaving his party/lobby

remote tusk
#

Its my player state class, One thing I didnt understand is, is this replicated directly, shouıld i call RPC? For example, Client will also call that method, then what will happen?
Double decrease on client etc, because we have server instance of it, and client instance of it. How things work in GAS?

devout sonnet
#

Im done, its been nearly 2 years and I still cant even share a single variable over multiplayer. DM me if you think you can help me, im offering a reward.

#

I keep thinking chatgpt could at least guide me with the logic but everyone on here was right, it really is useless.

thin stratus
# rare wharf item pickup

The ServerRPC inside the Item won't work. The Item isn't owned by the Client. You can only perform the ServerRPC before you call the interact interface function inside the PlayerController or similar.

thin stratus
thin stratus
thin stratus
thin stratus
gleaming crane
#

🫡 thanks!!

thin stratus
#
Epic Developer Community Forums

Hotfix 5.5.4 is coming your way - check out this latest version with over 80 new fixes and updates! Please feel free to share feedback and discuss the current version in the release topic, Unreal Engine 5.5 Released. If you experience a bug with the 5.5.4 Hotfix, please follow the How to Report a Bug guide to report it on the Bug Submission F...

thin stratus
thin stratus
thin stratus
quiet snow
#

@thin stratus hi , I want to login to eos using device id grant

thin stratus
#

That's great. How about you try it and post to #epic-online-services if you fail, without randomly pinging me :D

#

I never used eos, despite putting Evershire on the EGS.

quiet snow
#

Got no answer , thought you could help .

thin stratus
#

@remote tusk Predicition Thread stuff.

charred ivy
#

Hi peoples! I already asked about this in #gameplay-ability-system , but was instructed to also ask here as I didn't get it solved yet. I'm developing a multiplayer turn-based tactics game as a hobby project. My game allows multiple characters to be assigned to and controlled by players. I'm using GAS and it seems to be designed to only support single character possessed by the player as the abilities are not replicated to simulated proxies. In my game, players are possessing a top-down camera pawns and only indirectly controlling the character pawns, which makes them simulated proxies.

How should the proper setup for this kind of game be? I have tried setting characters to autonomous proxy without possessing them, by calling SetAutonomousProxy(true) on them. I also tried to setting static boolean bReplicateAbilitiesToSimulatedProxies found in AbilitySystemComponent.cpp to true. None of this made the replication work though. As soon as I directly possessed one of the characters, the replication worked. But as I said, this really isn't an option for me. The goal is, that players would be able to control the camera, switch between their assigned characters and access their abilities—similar to Baldur’s Gate 3 or other squad-based RPGs.

I'm also pondering about giving the AbilitySystemComponent only to PlayerState and storing GameplayTags corresponding abilities to characters and refresh the abilities of the ASC each time selected character changes. This is a bit of a hack though, as each character is supposed to have their own abilities.

If anyone has insights on how to solve this or best practices for implementing such a system, I'd really appreciate the help! Even a high-level overview of the correct approach and reasoning would be invaluable.

dark parcel
#

Why do you need the ability to be called on Simulated proxy

#

I can't think of an instance where you want to do that.

#

Simualted proxy should just simulate the visual stuff, like playing the animation.

dark parcel
#

How can we prevent cheat for something like auto parrying? The client would know the enemy is attacking anyway, so it can just inject some script to be in a parry state.
It wouldn't matter if we are listening to client input either at certain time stamp if that's the case?

thin stratus
#

That goes in line with any other client side cheat.

dark parcel
#

Gotcha, not important but I got very curious 😛

thin stratus
#

The whole thing is client input driven. And the Client needs the info for the visual queue.

dark parcel
#

Reckon this would be something that client side anti-cheat do I suppose?

thin stratus
#

So you can't really know if they pr essed it by hand or via a third party help

charred ivy
# dark parcel Why do you need the ability to be called on Simulated proxy

Here is the visualization of my current setup. My thought process has been that as each character is supposed to have their own abilities, I should put the ASC:s to characters. And if I put the ASC to PlayerState instead, I would still need to refresh the available abilities each time selected character changes.

Also, if I put the ASC to PlayerState, the characters wouldn't be able to have abilities active when they are not selected as only the selected character's abilities would exist in ASC, right? I don't know if this is a problem in the end, but it would at least prevent calling an ability and selecting another character before the ability has completed.

If you got ideas on how this should be done properly, I'm all ears! 🙂

thin stratus
#

Most likely. You could check how Dead By Daylight handle their generator events.

#

Idk if there is anything written about that.

#

But I coul imagine you could cheat that if wanted.

dark parcel
#

Yup, deffinitly not something someone on my level should worry about.

thin stratus
#

I think it's already hard enough to make sure the Client parries based on their visuals and it feels good for them.

#

cause of all the ping involved.

dark parcel
#

hmm I thought it would be as simple as the server not doing instant damage but allow some window for the client to respond back.

nova wasp
#

that window would have to be quite generous

#

and what happens when it reaches the edge? does it wait to apply damage?

dark parcel
#

I was thingking after 50 - 75 ms (adjustable value)
just apply damage anyway if client doesn't respond back.

nova wasp
#

It's not a bad idea though I think... Trusting the client here to respond in a set window is far easier than alternatives imo

dark parcel
#

well the A.I attack would come from the future for them so I guess we kinda have to wait?

nova wasp
#

if the client side has to do parry then I suppose so

#

another factor could be offsetting the timing of the attack or the parry window/ windup by their ping a bit

dark parcel
#

right

nova wasp
#

but that's a bit wishy washy in context when ping is fickle

thin stratus
#

Either you trust the client fully or you need to take ping etc. into account.

nova wasp
#

it can be a combination I think where the server says "respond to this damage event in a way that I agree with or get bonked"

thin stratus
#

Server needs to know the exact Timestamp Window the Client can parry in.
Client has to tell the Server when it tried to Parry.
Server has to math out if that Timestamp, compared to its own, given the Ping, is valid.

nova wasp
#

Of course they can cheat by reading the local memory

#

that's just reality unfortunately

thin stratus
#

This isn't really fixable tbh. You'd probably ban those on a case by case thing.

#

At least if you are a small game.

dark parcel
#

true and tested method 🙂 ban the players.

thin stratus
#

Can also start installing Kernel level anti cheat and get hated

dark parcel
#

flag all the parry god.

nova wasp
#

There could be some idea of a rule where you can't possible have parried an attack given the situation but even that is going to be tough to nail down

dark parcel
#

reading the convo, I decide to just let the client cheat and let report system do the work

#

Only games that sells need to worry about people cheating anyway :P.

open wave
#

you ever find out why im getting the same error

nova wasp
#

does it respond to visibility with an overlap?

#

how is this multiplayer related

remote tusk
nova wasp
#

to answer anyways: you can see in that screenshot that it doesn't respond with an overlap

hexed path
#

Hello

When it comes to cheating, for Singleplayer games we don't care, because they bought the game, they are not harming anyone, let them do in game what they want.

For Dedicated Server Multiplayer games it is not particularly hard to implement sanity checks and other Anti-Cheating measures.

But what about Singleplayer games, with Online Leaderboards? Implementing Anticheat without a Dedicated Server is practically impossible, because as long as the player is the server (or Standalone), they can do with the game what they want, disable or bypass your anticheat. How do you deal with this?

A good example is Speedrunners From Hell. It is a Singleplayer Parkour game, and Global Online Leaderboards are a huge part of it, they are what makes the game competitive and interesting. In such a game, how can you ensure that there is no cheating, which would completely ruin the Leaderboards.
Removing "Unrealistic" stats from the leaderboards is not an option, because as long as someone doesn't go completely nuts, they can cheat while keeping the stats within reasonable limits that you can't be sure that it's impossible.

remote tusk
#

Since we talk about Server can destroy item, Even if I call this inside the Interact method, would this still be synced and destroyed on all clients? Since we dont own the item, and "Call" destroy actor, would this be still count as "The interactor" is destroying the item?

dark parcel
ruby parrot
#

@dire cradle just pinged you as you helped me with this too 🙂
@dark edge you told me to "make a struct my guy"... I have done this now for Equipment on a character. So
Struct_Equipment

  • Head
  • Chest
  • Gloves

now when I change the gloves with "Set members in struct_Equipment"(Screenshot 1) I get a OnRep_Equipment.
Is there a way to know WICH variable was changed inside the struct? like "if Head was changed,do this, but if Chest was changed,do something else"?

Because otherwise I would have to call the Update_GearVisuals for EVERY item each time ONE is changed, i hope I explained that good enough 😄

dark parcel
#

I doubt it, at least in blueprint. Imo just use what you already have. Just add an extra check before setting the skeletal mesh.

If the mesh is the same as the one from the struct then don't change the asset.

ruby parrot
#

I mean I can do that, but it feels wrong 😄 I have to "Update_Visuals" for, as you can see, 14variables(if we ignore amulet and rings as they wont be represent in a mesh its down to 11) especially as I have to do that then in the EquipmentUI as well and update every Icon/Tooltip for all 11 items again. I could do that, because I mean how often do you REALLY update your gear anyway, but wanted to check if im not missing something xD

dark parcel
#

Not sure if you understand. If you are not setting the mesh that has the same value, you will only update the one that has new value.

#

So if you just change the chest,

When the struct replicated to client, if chest isn't the same value then you will use the set skeletal mesh asset node.

#

That's just one call to do necessary update.

ruby parrot
dark parcel
#

Say for chest

#

Get player chest if mesh == mesh from struct then do nothing

#

Else set chest to mesh from struct.

ruby parrot
#

yeye,im changing it to that, gimme a moment 🙂

#

this should fix it all?

dark parcel
#

Yeah looks better

ruby parrot
#

this way i dont even need the "true" part of the branch. as if None=None then there is no item equipped,so no Mesh update needed,and if its not the same, then when we either unequipped something wich then will write "None" into the mesh or we equipped something wich then is Mesh = MeshFromEquippedItem and it puts that mesh in.

#

hm, i just remembered... isnt there a "OldValue" and "NewValue" you get OnRep?

I could
OldValue_Chest == NewValue_Chest
OldValue_Helmet == NewValue_Helmet

and depending on that I could execute the code..... isnt that viable too?

imma finish a video and then imma test this way with all possible outcomes, imma tag you with the result,but for now i cant see a reason why it wont work 🙂 so both prolly will work, just gotta figure out what makes more sense 😄

dark parcel
#

@ruby parrot you don't even have access to OldValue on blueprint

#

that's available in C++ OnRep but I don't even know how that helps with the struct delta

ruby parrot
remote tusk
#

How should we replicate Adding item to a character's inventory? This is called on Server, but since its on server, client wont add item to "inventory", but item will be destroyed since its called on server. I can simply call *MultiCast RPC *here. But i am not sure what would be advantages and disadvantages of it. How we could replicate picking up items, adding inventory in proper way? Should I simply replicate Inventory array?

#

If i replicate variable of Array Items, adding, removing would call OnRepNotify in blueprints? If so, i can follow that way. When I replicate Array, Adding/Removing (editing struct) items wont call OnRep_Notify.

unique forge
#

Someoneknow how to make public/privat lobby and 0/4 players using steamadvacedsession plugin?

remote tusk
thin stratus
#

Deterministic game and you gotta upload the replay. Didn't stop Riolu from cheating for years, by turning down the speed at which the game runs, but well. Even that was caught in 2021.

remote tusk
#

Or I can simply add a bool like InventoryUpdated? with repNotify, and change it wherever i update my inventory, then it will locally update my inventory.

#

Or hacky solutions like this. How do you guys handle array's Set Element function to replicated?

#

I've solved it with RepNotify bool, whever I update my Inventory, i set it to true, then as soon as i do stuff, I set it to false. OOOR I didnt, even if I call RepNotify, it will update its inventory, but we still didnt call Add Item in the server.. Mmh.

ruby parrot
remote tusk
#

yeap

ruby parrot
#

okay, so currently my approach is the following:

Actor Component that does all the variables+adding/removing/stacking items etc....
PLUS has a Event dispatcher wich is called on the REP NOTIFY variable array of InventoryItems

then in the WidgetBlueprint Inventory you BIND said event dispatcher to something like Update_Inventory wich "recreates" your inventory from scratch.

and yes, for an array to RepNotify you have to SET the array(i could be wrong,but i think Array.Add() or .Remove() DOES NOT trigger RepNotify by itself)

#

ill give you "my code" for the entire thing, but as mentioned im "pretty new" too so there might be non-"best practice" in there, but at least it works 😄

remote tusk
#

I actually did this, I am adding the Item to inventory in Server, and re-setting Inventory array again.
And this is calling this method. But even if I log this, It wont updating my inventory on the client after it picks up item.

ruby parrot
#

In WB_Inventory:

remote tusk
#

Widget is subscribed to On Inventory Updated method, and rebuilds inventory again.

ruby parrot
#

AddItem in AC_Inventory wich is Attached to BP_playerCharacter:

remote tusk
#

The Inventory Length is also coming right, but it prints from "Server:"

ruby parrot
#

And OnRep_Inventory ....this Update_Inventory is, as mentioned before, just bound OnBeginPlay to the Update_Inventory function inside WB_Inventory

remote tusk
#

I call Interaction on the Server:

#

Then pickup Item calls that in the server, via Interact method.

#

Then as soon as i add item to my inventory, I set notify my array, to itself so it it calls RepNotify.

dark parcel
#

jesus, I am at the brink of giving up on multiplayer again

remote tusk
#

And inside RepNotify, I check if i am local, if so, I am calling Updating Inventory event, which bind by widget to update its UI.

ruby parrot
remote tusk
#

One thing I didnt understand this, Why OnRep_Method prints from Server only? Shouldnt it call from client also?

tardy fossil
#

might be because you're getting the player controller by index

remote tusk
ruby parrot
ruby parrot
ruby parrot
remote tusk
ruby parrot
#

nope

dark parcel
#

if you are only playing as listen server and no additional player it will just print server

remote tusk
dark parcel
#

because there's only the server

remote tusk
ruby parrot
remote tusk
#

As you see on the left, I triggered the item to add

#

On Rep Notify worked, and printed by Server?!

remote tusk
dark parcel
#

OnRep gets called for both server and client in blueprint.

#

OnRep in cpp only gets called by client.

#

in BP it's more like variable change listener

remote tusk
dark parcel
#

the picture doesn't give enough context.

remote tusk
#
  1. Send RPC to Interact method.
  2. Add Item to Inventory in the Server in Interact method which is called by the server.
  3. Update Inventory Items Array (replicated arrray) to get Notify after adding item.
  4. Notify gets called, and in the server only.
ruby parrot
#

it might have to do,that youre doing your get player controller wrong 🙂

remote tusk
#

Nah, it doesnt print anything

remote tusk
ruby parrot
#

i wanted to fix this later, as i didnt want to distract with another fix first.

dark parcel
#

OnRep-> BroadcastInventoryUpdated

#

why do you need local controller check?

ruby parrot
#

cause he only wants to update his UI on the client..i did it his way like 6months ago too 🙂 i know exactly what hes trying there ^^

#

i did the same logical mistake as he did ^^

remote tusk
#

Alright, I did this. Print is coming from server only. I think I should create an empty project and check RepNotify prints where do they from etc. I cant seem to understand if this is the problem.

ruby parrot
#

somewhere in WB_Inventory you need to BIND-> OnInventoryUpdated

remote tusk
#

yes, I found it now, going screenshot to not messy look. 😄

#

Here in the picture, On Start, I call Build Inventory Grid.. It will create empty grids. Then after complete, I bind for Inventory Updated event here in the Item Container.

#

So as soon as I create my grid, I also bind for Inventory Updated event. I first unbind, so that it wont bind multiple times

ruby parrot
#

ah...when i fix an issue,doesnt matter if it looks messy.... making it look nice is second step, we are step 1 😄

remote tusk
#

As i said Its working on server, when item picked up by the server. 😄 I'm pretty sure i am picking item in the Server Instance of the client, too.

#

I think On Inventory Updated is not called in the client.

ruby parrot
#

okay,this is way too complicated... each time you create your inventory, you unbind the call and then bind it again? what? 😄

remote tusk
#

Here in the Server, after i pick item, It calls the Inventory Length print, and Inventory Updated print, which I printed after bind.

#

In client though;
Its not printing..

remote tusk
#

So what i am sure now is, This OnRepNotify is somehow not executed in client.

dark parcel
#

@remote tusk where do you add item?

ruby parrot
#

yeah,as mentioned, lets make this easier first.... this is (ignore the parent call) this is EventConstruct on WB_Inventory no need to bind and unbind.

remote tusk
#

Yeah, I can do that in the Construct before building the widget, creating slots. But i dont think this error is where derives from. The problem is my client is not calling OnInventoryUpdated, even if its called in Rep_Notify.

quiet snow
#

if you are using dedicated server the User interface classes will not be on the server , if it is of any significance

dark parcel
ruby parrot
dark parcel
ruby parrot
remote tusk
main bluff
#

Is it good practice to create an enum that will be responsible for indicating the material for the client from the server (the server sets the enum and replicates it to the client, and then the client sets the appropriate material according to the enum)? (Dedicated Server)

ruby parrot
#

but given that OnRep is called, it should work 🙂

remote tusk
#

This Add Item is called in PickupItem's Interact method, And I call Interact method via Send RPC.

quiet snow
#

The rep notify have to be called by server , are you sure the RepNotify is getting triggered by server

remote tusk
ruby parrot
dark parcel
ruby parrot
#

aka they see each other?

quiet snow
#

You can use a client RPC as alternative solution

tardy fossil
ruby parrot
quiet snow
#

Like use a server RPC to let the server trigger a client RPC on owning clinet , pass the inventory value to the client

remote tusk
remote tusk
quiet snow
#

why

dark parcel
#

because RPC is not stateful

quiet snow
#

And why he needs to have states in inventory replication .

dark parcel
remote tusk
#

What i am not sure is, If we Send RPC to Server, and set a "replicated variable" there. Then OnRep_Notify print on Server, Or server and client?

dark parcel
#

if you see people updating values on clients using RPC, you probably learn that from youtube

#

like MattAspald tutorial

#

shockingly bad

quasi tide
#

BP - the onrep will run
C++ - you have to manually call it

#

(Server wise that is)

ruby parrot
remote tusk
#

What i meant is;
Two logs.
Server: Updated Inventory
Client: Updated Inventory

quiet snow
#

@dark parcel So you have not learnt from Youtube

ruby parrot
#

yes,thats what i am showing you 🙂

main bluff
dark parcel
main bluff
#

so idk

remote tusk
#

For now, When i take item on the Client, Only the print is "Server: 1".

quiet snow
#

Then how did you learn

ruby parrot
#
  1. Screenshot is Client, 2nd screenshot is server
dark parcel
ruby parrot
#

i run a dedicated,so it doesnt say "Server" or "Client" infront 😄

dark parcel
#

also if you are looking for video tutorial, Stepehn Ulbardi is pretty good imo.

#

95% of bp youtube MP tutorial is flat out wrong.

ruby parrot
quiet snow
#

Bro i have already gone through every thing , if something is not working do not stick to principles , that way you will get stuck

dark parcel
#

getting off topic anyway.

#

All I'm saying is don't do what you suggested just then about using RPC to update values on client.

remote tusk
#

And thats the picture itself.

#

Its time to re-watch 10. times RepNotify for me. 😄

ruby parrot
tardy fossil
dark parcel
remote tusk
quasi tide
#

RepNotify is kind of straight forward.

If you change a variable in BP - the OnRep will fire off. Inside of the OnRep, the variable will have the updated value. If you change it in C++, it will only fire off on the client. On the server, you will have to manually call it.

Use OnReps to handle stateful things. Such as a flashlight being on or off. Or your currently equipped weapon. All it is, is a method that gets ran when a variable is changed. @remote tusk

dark parcel
ruby parrot
quiet snow
#

And also there is a limitation on how much you can replicate , if you are trying to replicate a large object which does not meet the quota the rep notify will fail

remote tusk
#

Its a small game for now, I have 8 slot in my inventory, and slots are only struct with GameplayTag and quantity.

tardy fossil
# ruby parrot oh,nice to know!

yea its a good way to replicate a bunch of info for cheap if you don't need that info to be dynamic. can just create a data asset with multiple variables and replicate the pointer of that data asset

main bluff
quasi tide
#

Yes

remote tusk
#

This is my Inventory array which is replicated.

ruby parrot
dark parcel
remote tusk
#

I call that Add Item inside the BP_PickupItem, when interacted via Server. (maybe this is the problem, since its not the authority object.)
Then my OnRepNotify is called.

dark parcel
#

If your Inventory struct changes in value, BP OnRep should be called for server and client

remote tusk
#

But OnRepNotify is not called for client. Maybe because Array is not changed or smth in Set /w Notify in the client.

dark parcel
quiet snow
#

you can just go live with the code , if it is not of sensitive nature in a screen share , and invite people

dark parcel
#

afaik replication get pushed only when there is delta between old and new value

remote tusk
#

This is my Populate method. It simple while loops until it doesnt find existying item and slot.

#

Add Item is setting the Set Array Element simply.

ruby parrot
remote tusk
#

Maybe because I add my Item in Server, and not in client, My client doesnt get Rep_Notify??!

dark parcel
#

that's not the reason

remote tusk
#

And this is my PickupItem which is replicated.

dark parcel
#

Replication works Server to Client anyway

quasi tide
# remote tusk What would happen if you didnt check Has AUthority?

All "Has Authority" does is checks who has the network authority. In an overwhelming majority of cases, it will be the server. Another way to think of it (to an extent that is) is "who spawned this actor?". The reason I say to a lesser extent is because you can change who has network authority. So, assuming you don't do that, that thought process works.

The reason Cold has it set up this way is because a player can be the server. So, if they are - they'll go through the "Authority" branch. Setting the variable. If they are a client, they have to do a server rpc to tell the server that they want to change a variable value. Server changes it and then it replicates back down to the client.

Now, admittingly - they don't even need that check. Running a server RPC on the server doesn't actually do a rpc across the wire. But, it is up to you.

ruby parrot
remote tusk
#

And this is how I interact in Interaction Component, which is replicated.

quiet snow
#

And what is the class this is getting called from

remote tusk
remote tusk
quiet snow
#

is the component it self replicates

remote tusk
#

Its correctly happening in the server side

dark parcel
#

is the destroyed actor a replicated actor?

#

Go to your can and tick Replicates in the detail panel

remote tusk
ruby parrot
dark parcel
#

destroying a replicated actor as server should propagate the action to client

remote tusk
#

Here i colelcted all the items on the server

#

Is there any case like OnRep_Notify works on Server and not in Client?

#

Like Server has a change and OnRep is called, but client didnt have a change on itself smth like that?

ruby parrot
#

not that im aware of

remote tusk
#

Because when I collect from client, It calls the Print inside the OnRep_ like "Server: etc."

remote tusk
ruby parrot
#

cause it would defeat the purpose of OnRep

remote tusk
#

Anyway, I'm pretty sure I made something wrong because i am trying to replicate my whole full system of inventory. 😄

ruby parrot
#

nah the approach is correct, but imo some things are too complicated for no reason 😄

remote tusk
#

So i am pretty sure the item is "ADDED" on my server instance of the client.

#

If I simply add item to my inventory, and print that, it will print by the Server the correct item.

#

But i am pretty sure it needs to log "client: Item_rawMaterial.food: 3". too. so that we can be sure the client also updated.

#

I think this might be related to ownership or smth. IDK. How can I be sure that in Server, this item is added the "client" version the Server Instance, so the other player in my Server (when played in client version)

#

We cant check in the editor like this yeah? 😄

dark parcel
#

you can choose the world

remote tusk
#

F... I didnt drink water like 2 hours trying to solve that. 😄

ruby parrot
#

Usually when I have such issues, i break it down to as easy as possible... Make a fresh new array of int, make it RepNotify, make a key-press event wich calles "AddToArray" etc. maybe that helps finding the issue?

remote tusk
#

Should we suppose to replicate components if added on the Character?

#

Inventory and Hotbar Component is on Character.

#

Also Interaction, And I can also call Interaction RPC in the component itself. So I assume its replicated.

#

It also correctly prints correct Component names in the server. So its calling correct hotbar in the server.

#

So i am pretty sure something is kinda strange here. 😄

ruby parrot
remote tusk
#

I am setting Inventory again to itself, because to get notify. It is working too.

ruby parrot
#

i have the same 🙂

remote tusk
#

One fucking tick...

#

And it works..

ruby parrot
#

LOL really ? 😄

#

HAHAHAHAHAHA

remote tusk
#

Yeah.. I didnt check Replicates component.. Because i thought its already working. Because RPC's are working in interaction component for example even though its not ticked?!!

#

Gosh finally!

remote tusk
quiet snow
#

Yes the component have to be replicated if you are using it in network

remote tusk
#

But how this is working then?! My Interaction Component is not replicated.

#

Is that because Enhanced Input?

#

Because I call this Interact success via EnhancedInput_Interact

#

LMAO. EVERYTHING WAS CORRECT.. BUT ONLY ONE TICK.

ruby parrot
#

because it is "ignoring" the replication stuff for that Component only 🙂

remote tusk
ruby parrot
#

but yes, when i had that revelation months ago I thought the same .... UE should make it so that you get errors if you use RPCs on a non replicating component 😄

remote tusk
#

Now lets not forget to notify, when removing item. 😄

quiet snow
#

the RPCs may be getting called on the owner , not sure !!!

remote tusk
remote tusk
ruby parrot
ruby parrot
remote tusk
#

ah, so you mean "sending Server RPc" is not networking stuff, its after that.

ruby parrot
#

replicated basically just means "do i send results to the client or not?"

remote tusk
#

So an actor can send Server RPC, without being replicated?!

ruby parrot
#

correct

#

it should?

remote tusk
#

Thats what i like in multiplayer.. One question, and everyone thinks different way. 😄

ruby parrot
#

could be my inexperience though, im still quite new, like 1year 3months is nothing xD

quiet snow
#

Unless the actor is replicated it is actually local to the Machine itself

remote tusk
quiet snow
#

And there is no network relevancy

remote tusk
#

And its sending to server from client.

ruby parrot
#

anyway,gotta go afk, gl @remote tusk 😄

remote tusk
quiet snow
#

May be if the component is using the network relevancy of the owner

#

it is possible that we have a successful RPC

remote tusk
#

Yeah, I think yes. Interaction Component is on the Player Character.

#

But Inventory is also is on Player character, but OnRepNotify wasnt working on the client. Before I ticked one fucking "replicates component." 😄

#

maybe RPC's work on Components that owned by replicated actors.
But not replicated variables.

quiet snow
#

May be on a deployed game the RPC will fail , with out replication

remote tusk
#

Anyway, I am happy that All I do wrong is not ticking "Replicates Component"

quiet snow
#

it might work locally

remote tusk
quiet snow
#

as both clients are pointing to the same object

remote tusk
#

Its time to replicate "CHEST WIDGET"! now.

#

😄

#

may all the HOLY help me.

quiet snow
#

Ha:)

#

Guys anyone here can help me with EOS integreation in a VR project i am working on .

unique forge
#

Hello again, im trying like when the host is creating a lobby, that the server name will be his steamname, but somehow when i play standalon and the net mode is 2 listen server, somehow i cant see the server. like when i hit refresh i dont see it. but when i make new editor window, then i can see the lobby

dark parcel
quiet snow
#

I think he means to say he wants to see it gets triggered in Client as he want.

lament flax
#

check the GM, it might have something

#

maybe a func marked as Exec

ruby parrot
remote tusk
dark parcel
#

Solution for what.

#

Widget just read

#

Simple as that.

remote tusk
#

Finally managed to fully replicate add item, drop item and take it back etc.

#

Now i spawn instantly, I want to apply force but Mr. Cedric didnt recommend it ,so maybe do a projectile movement to fake it.

main bluff
#

Could someone explain to me why, if I have a timer on the server that calls a function with one parameter (a pointer to the PlayerController that was passed earlier), and then I disconnect the player, the PlayerController is neither nullptr nor valid?

dark parcel
remote tusk
dark parcel
#

Not here to kick anyone.

#

Multiplayer is hars

remote tusk
#

And I will ask a question regarding to that.

dark parcel
#

I'm pulling my hair at my own misfortune

remote tusk
#

It was because My Inventory component wasnt ticked as "Replicates Component". I thought It would be automatically replicated by the owner since its a character.

#

I thought this because My Interaction Component was not ticked to Replicates Component, but still can call Server RPC.

dark parcel
remote tusk
#

I could call from Client,the server PC

#

Here its not replicated.

#

Maybe it wont work on Deployed Build, or only the RPC calls are working since its a request. Thats what we said here. 😂

#

So what about that?

#

One f****g tick was the solution.

#

😄

remote tusk
#

Now that I realize Widgets are client only;
I made an Server RPC event in the Inventory Component, and call it directly. So that it updates my removal item, and spawn for the clients etc.

remote tusk
remote tusk
main bluff
unique forge
remote tusk
#

So if I spawn those with Server RPC, would clients that is far can see them when come in our base? Is Spawning is always relevant? I spawn this in the Inventory Component where I drop item. Also Should I be setting my item's collision preset to Block All and simulate to true for lootable items? Is that expensive for Multiplayer? I am throwing this item with physics and doing these when dropped the item : Set Simulat Physics to True -> Set Collision Enables to Query and Physics > Set Collision Profile Name to Block All.

magic furnace
#

Anybody have a clue why this would work for the server but not for the client? Server gets teleported fine, the client if you watch from the server does a little hop in place and does not move. Clientside nothing happens.
Prints only on server as it should, executes the code, Teleport does not hit the fail branch. Destination is correct, doublechecked.

#

Code is in gamemode

quiet snow
#

what is a portal , if you are getting location of t in server , is it giving you correct response

#

Event try teleport to is getting called from which class??

quiet snow
quiet snow
#

but your net cull distace by default is really high in unreal , so yes .

magic furnace
#

difference of 500 units on the x axis at least

#

so the response is correct, the location is correct, it does not teleport in place

#

The client rpc did the trick??????

#

why

#

what the hell

#

the client also has authority to call the teleport???

quiet snow
#

Teleport is not a server bound function

magic furnace
#

seems crazy to me?

quiet snow
#

you will see a wierd computer symbol on top of the function slate for server functions

magic furnace
#

you're right now that I think about it

#

but that is absolute nonsense?

#

like why, wouldn't this enable cheats pretty much?

#

and why can't the server teleport the player, i am 100% confused

quiet snow
#

I think it is because of the movement component of the player

#

it might be setting the teleportation back to it's current location as the movement component is replicated and always replicates players location and rotation

#

So there might be a possibility of overwritting the server teleportation by the client himself after the server teleports the client .

#

because of this you might see a hop in client

magic furnace
#

Yeah I get it, so it was just doing a net correction on the prediction

#

seems crazy to me it's not default implemented since the CMC has "was teleported" as a variable

#

I think it's just somebody messed something up in our CMC for the project...

#

as the client should not have authority over it's position by default..

sharp hamlet
#

I have my login system by Aws cognito, and after logging in, i set a cloud variable in aws that loggedin=true. Now, when i press exit game, this value is again set to false. I m doing these by http requests. But now, if the game crashes, loggedin=true stays. How can i send a http request on game crash?

I mean, there is a event for OnActorDestroyed etc, so is there an event for onGameCrash or sth like that

#

i can run a function frm cognito as well to handle these instead of the game doing it. But is there a way in UE to do it?

quiet snow
sharp hamlet
#

Yea but i only join it for a match

quiet snow
#

So you have a gamemode that is handling all join and leave sessions Right

sharp hamlet
#

Yea but thats in the match. Mainmenu is totally offline, and i only communicate to server by http requests

quiet snow
#

Yeh so let's say in between your game play your application crashed

#

You can use your server to detect this

#

As your player controller is going to leave the match

sharp hamlet
#

Yes but only, if the game crashes from the match, if the game crashes from the mainmenu, or alt+f4 or power down, this is what i want to know

quiet snow
#

Understood

sharp hamlet
#

noo, thank u, atleast i can add a code in the server gamemode to logout frm cognito

#

I have to do this for the mainmenu as well

quiet snow
#

If you want to do that then there is no direct way in ue to do this

sharp hamlet
#

Mm, so custom game launcher is the only option from client end?

quiet snow
#

What you can rather do is write a task watcher in python , or any automation language , and detect the closing of application/task .

#

And send a request to cognito to sign out

sharp hamlet
#

Got it. Thanks!

karmic briar
#

<@&213101288538374145>

unique forge
#

rip to that guy

quiet snow
unique forge
# unique forge

update: i packaged it and the servername is blank, i tried it with my friend.

nocturne quail
#

why is in default character movement MaxWalkSpeed is not a replicated value?
I mean so server can set it for clients...

    /** The maximum ground speed when walking. Also determines maximum lateral speed when falling. */
    UPROPERTY(Category="Character Movement: Walking", EditAnywhere, BlueprintReadWrite, meta=(ClampMin="0", UIMin="0", ForceUnits="cm/s"))
    float MaxWalkSpeed;
dark parcel
thin stratus
nocturne quail
# thin stratus Cause it's meant to be a Setting, not something that changes during gameplay. C...

Yeah, I need it to change during gameplay depending on different states...
was getting the same thing of correction which results a smal glitch and feels a tiny gameplay lag.
than i work around with it using cached prediction, not sure if this is a good practice but seems fine to me and working fine too

void AArmaCharacter::ServerHandleForwardGroundMovement_Implementation(const float Value)
{
    if (!IsEnableMove) {
        return;
    }
    const float VelocitySize = GetCharacterMovement()->Velocity.Size() + 5.0f;
    const float PredictedCharacterSpeed = UpdateOtherMovementSpeed();
    const float MaxCharacterWalkSpeed = (VelocitySize <= PredictedCharacterSpeed) ? VelocitySize : PredictedCharacterSpeed;
    Client_RecieveForwardGroundMovement(Value, PredictedCharacterSpeed);
}

bool AArmaCharacter::ServerHandleForwardGroundMovement_Validate(const float Value)
{
    return true; //temp return true for testing
}

void AArmaCharacter::Client_RecieveForwardGroundMovement_Implementation(const float Value, const float MovementSpeed)
{
    GetCharacterMovement()->MaxWalkSpeed = MovementSpeed;
    AddMovementInput(FRotationMatrix(FRotator(0, PC->GetControllerRotation().Yaw, 0)).GetUnitAxis(EAxis::X), Value);
}
nocturne quail
# nocturne quail Yeah, I need it to change during gameplay depending on different states... was g...

OPTIMIZATION:

void AArmaCharacter::ServerHandleForwardGroundMovement_Implementation(const float Value)
{
    if (!IsEnableMove) {
        return;
    }

    const float VelocitySize = GetCharacterMovement()->Velocity.Size() + 5.0f;
    const float PredictedCharacterSpeed = UpdateOtherMovementSpeed();

    const bool bNeedToUpdateSpeed = (GetCharacterMovement()->MaxWalkSpeed != PredictedCharacterSpeed) ? 1 : 0;
    const float MaxCharacterWalkSpeed = (VelocitySize <= PredictedCharacterSpeed) ? VelocitySize : PredictedCharacterSpeed;
    
    if (bNeedToUpdateSpeed)
    {
        GetCharacterMovement()->MaxWalkSpeed = MaxCharacterWalkSpeed;
    }
    Client_RecieveForwardGroundMovement(bNeedToUpdateSpeed, Value, MaxCharacterWalkSpeed);
}

bool AArmaCharacter::ServerHandleForwardGroundMovement_Validate(const float Value)
{
    return true;
}

void AArmaCharacter::Client_RecieveForwardGroundMovement_Implementation(const bool bShouldUpdateSpeed, const float Value, const float MovementSpeed)
{
    if (bShouldUpdateSpeed)
    {
        GetCharacterMovement()->MaxWalkSpeed = MovementSpeed;
    }
    AddMovementInput(FRotationMatrix(FRotator(0, PC->GetControllerRotation().Yaw, 0)).GetUnitAxis(EAxis::X), Value);
}
quiet snow
#

Will not be a multicast helpful here

#

I couldn't get your context properly

#

Oh okay

thin stratus
#

@dark parcel Please don't crossprost (:

remote tusk
#

I have added Camera Up and Down for my character in animations by modifying bones of spine. Now i am replicating it.
Do you think is that a good way of replicating my pitch, or should i be using Rep_Notify?

dark parcel
#

If the bone are driven based on where the player is looking at then there is already replicated variable for it.

#

GetBaseAimRotation

#

I wouldn't use RPC, just set the replicated variable on tick for proxies with some interpolation.

exotic wasp
remote tusk
#

This is how I set up Rotator, and appy to the spine bones. Character's Pitch is replicated variable.

remote tusk
#

Like this?

#

Yes, this is working succesfully. Thanks ColdSummer. I hate most of the Youtube Tutorials actually again and again.

dark parcel
#
void AAGPlayerCharacter::AimOffset(float DeltaTime)
{
    if (IsLocallyControlled())
        AO_Pitch = GetBaseAimRotation().Pitch;
    /** Gets proxies characters in server that server don't control. */
    if (GetBaseAimRotation().Pitch > 90.f && !IsLocallyControlled())
    {    /** map pitch from [270, 360] to [-90, 0] because of compression */
        const FVector2D InRange(270.f, 360.f);
        const FVector2d OutRange(-90.f, 0.f);
        float L_AO_Pitch = FMath::GetMappedRangeValueClamped(InRange, OutRange, GetBaseAimRotation().Pitch);
        AO_Pitch = FMath::FInterpTo(AO_Pitch, L_AO_Pitch, DeltaTime, 15.0f);
    }
    else
    {
        AO_Pitch = FMath::FInterpTo(AO_Pitch, GetBaseAimRotation().Pitch, DeltaTime, 15.0f);
    }
}
remote tusk
dark parcel
#

you began your journey on mp

#

I think I am ending mine today

remote tusk
#

lmao

dark parcel
#

looking for tutour now as my last stand.

remote tusk
#

What i am afraid is now I will equip some stuffs like Axe, Pickaxe, and i think i need custom animations or smth. IT needs to both look good in FPS and TPS. Because user is FPs but others see it as TPS..
And should also be replicated.. Do you think this setup would break my equipping etc. because arm will be playing a lot of role in here.

dark parcel
#

no idea, sorry.

remote tusk
#

❤️ Good luck on your journey mate. Maybe its to time to rest before thinking to give up mp journey, need clean mindset

modest crater
dark parcel
modest crater
#

I know this is a little obvious but have you seen how lyra makes use of GAS? I have a little bit of experience with it but I don't really have any projects that needs it so I am rusty. Wouldn't a hit reaction be some kind of gameplay cue locally an not a networked thing?

dark parcel
#

I need knockback with the hit react 😦

#

So server picks the montage to play and the resolve the location where hit actor should be

modest crater
dark parcel
#

Sort of, I already have knock back "working" but for single player.

#

Unsure how to pass the parameter I need for client from server when using gameplay ability.

lament flax
#

why do you want to use a GA for that ?

#

couldnt you just multicast the data to play the montage ?

modest crater
#

Because I would assume the knockback is from some ability which is from GAS hence wanting to keep it all within the same replication framework

The video I linked uses a gameplay ability for the knockback so I would assume it works fine in networked context since they have replication policies and what not, as for the param thing you're talking about I assume you mean just extra data related to said ability right?

#

If so that is FGameplayEventData isn't it? (again I am super rusty though)

Maybe someone here would know for sure

dark parcel
#

damage is server side, I execute a hit react through Gameplay ability and Gameplay cue for the visual.

#

but when working with GAS, I don't think we are suppose to do our own RPCs?

#

they got a lot of things that already made for multiplayer but I am just too dumb for this.

#

I think I should just make single player game =(, today is soo demotivating.

modest crater
#

Make a blank project where you can go ham on one feature without everything else distracting you. You'll get it, its just time

And yeah RPCs aren't supposed to be mixed and matched with GAS specific logic

#

Serious, a blank project might help a lot. You can break and fix things without worrying

modest crater
#

There are child classes to look at for examples of using it like FGameplayAbilityTargetData_SingleTargetHit

dark parcel
#

really appreciate the help.

open wave
#

so been trying to setup dedicated servers for my game i have the server being listed in my search box on mainmenu but when i go to join it i have my server crash.

narrow prairie
#

so people say state changes should be done by repnotifys, but how do people work around relevancy then, if an actor is not relevant to a player , for example a ui update

#

is it then ok to just do a owning client rpc?

#

and the ui update is on the client not the actual actor itself

dark parcel
#

can you give an example

narrow prairie
#

so for example when a building has finished build and the actor is not relevant updating the player controllers ui

#

so switchting from non build to build, and then it will display a category list

dark parcel
#

they have to be relevant for you to receive update accross the network.

narrow prairie
#

why?

#

if u have a actor that handles the tyhat

#

i only have id's

#

since actors pop in and out of relevancy

#

so my question,

#

if i for example have a structure