#multiplayer
1 messages ยท Page 166 of 1
Yup, if u need to tell server something, server rpc away
When dealing with networking you want to be lightweight as possible
Only send data that you need to send
Sometime it's also compressed
Yea that makes sense, I shall be careful
Keep in mind you cannalso supplement info client side to avoid replicating it ๐
Yea for sure, but I assume that because this is physics and I am only simulating it on the server, I need to pass this info along, but for anything else, I can keep it client side
Yeppyepp
any1 know what this does?
Only renders what the player can see
Okay ty
But code is still running ?
Is there events called when an actor is rendered/not rendered
adds a button to the editor toolbar to allow you to add a player after the PIE session starts, thought the wording there was pretty obvious though
Did that and still only works on the host but not on the client ๐ฌ
(Also, why branch and not feed the bool directly to the set ignore nodes?)
And have you derived a new child from pc_core?
Already tried that smae issue
yes
Do you happen to override the events there ?
i don't think so as I wrote nothing in that child controller yet
And child class is ofc set to replicate
yes (it's the case by default, as I guess it's because I derived from the parent class being already set to "Replicate")
Should be, yes, just making sure ๐
that's why I'm so confused as I never encountered somethind like this ๐
Hold on a sec
On server only yes
I thought the issue was because I was in "Standalone" instead of "Listen Server" but being now on "Listen Server" I can't start the game anymore / transfer to another level for some reason ๐ฅฒ
๐
Pressing the button si doing this, I guess it's not working because only the server can call the "servertravel" command ? ๐ค
You need to call the command on server
can widgets communicate with "gamemode" through an RPC ?
On listen server it was working because it was probably the server player that executed the command
No
๐คฃ
so I can't do in the widget : GetGameMode > Cast to GM_MainMenu > Call "StartGame" RPC > Execute Console Command "servertravel Mansion_Level" ?
Mb i was thinking about GS
Yeah you cant get GM on widget
It existe only on server side
so how should I do that ? Like something like this ? GetController > Cast to "PC_Lobby" > Call Event "Start Game"
And inside Start Game of PC_Lobby > Get the Gamemode > Cast to GM_MainMenu > Call Event Start Game > Execute Console Command "servertravel Mansion_Level ?
the person who can start the game is the host so it's technically on the server already
true
Any progress?
still doesn't work (the Start Game part)
Something is really messed up with your controller it seems
Are the casts succeeding ?
Add prints on each step
Ah
Let me fix that
Now it's being called no issue but still no travel to the game level ๐ฌ
Did you forget the space?
And suffix ?Listen some forum post suggest (doesnt make sense to me but idk)
nope
I havve no clue what your sentence means ๐
try appending "?Listen" to the end of the console command for servertravel
so its servertravel Mansion_Level?Listen
still doesn't work
any errors in the log?
I don't know ๐คทโโ๏ธ
guess you gotta figure out the network errors
I have no clue how to figure that out as i never did that ๐ญ
Part of the process
Found this but eXi says to uncheck the bool called "Auto Connect to server" but I don't have that in the advanced settings, do you know by any chance where I can find that or if its name changed to something else ? https://forums.unrealengine.com/t/4-14-servertravel-with-more-than-the-server-doesnt-work-in-pie/376392
This is not PREVIEW anymore, it is release version of 4.14! Hey there! I updated my Marketplace Project from 4.13 to 4.14. Following stuff happens in PIE! Remember, starting Multiplayer in PIE connects the Server and Clients already! Even in the MainMenu! After starting the project with one Listen Server and one Client, I host a new โServer...
I already have this Error Handling setup but no error appears on the screen and in the log not details / name of the error is given so it's impossible for me to debug ๐ฆ
netmode or modes ?
I don't know how to do that, however trying in "Standalone" Mode works perfectly
so that means there's an issue with "New Editor Window (PIE)"
@thin stratus Sorry to ping you but you're the only one I found having this issue (2016 post ๐ ), Did you find a solution since then ? Because you talked about a "Auto Connect to Server" bool to uncheck but can't find it in the Advanced Settings like you mentionned in your post, and the screenshot you posted doesn't work anymore ๐ฅฒ โ๏ธ
Hi everyone, I'm profiling the network using Unreal Network Insights, and I'm new to this. I've noticed some points where the total size of packages reaches 1,008 bytes. Currently, we're testing two-player multiplayer. These spikes occur when a new player joins, as there are plenty of things being loaded.
My question is, at what point should I be concerned about the total size or the network usage? Is it around 1,000 bytes or 10,000 bytes? What are considered normal ranges for multiplayer? Just to provide some context, I'm working on a 4-player co-op game.
What the heck, why do I have 4 characters in standalone game when in the settings I chose 2 players
standalone doesnt use PIE settings (its the whole point of standalone, being "detched" from the editor)
there is probably 4 players because its somewhere else in settings
the question is where ๐ฌ
You using the fast array replication?
No, I've never used it before.
I just know it is a thing, if it works as is then it's probably fine, but if it becomes a problem then probably investigate the fast array replication
Thanks! I will probably end up using it for building struct and maybe for the inventory. Currently I haven't experienced any issues but I'm looking for some reference point for the limits when it comes to packet size.
I want to use UGameInstance::GetFirstLocalPlayerController function in blueprint to reliably get the local controller on listen server, problem is I am extremely poorly versed in C++,is there a way to duplicate this function into a blueprint function library (I have created a custom one in my project) and flag it as blueprint implementable?
Thats basically the same thing as using the GetPlayerController(0) node.
I am following this guide https://wizardcell.com/unreal/multiplayer-tips-and-tricks/ and it says there is a chance that on listen server, local controller will not have index 0
If client connects faster than host
Sure, but UGameInstance::GetFirstLocalPlayerController uses the same functionality.
Eitherway, what you can do
In your BlueprintFunction Library in C++
Create a new function
The guide says that the game instance version is reliable
That has the same signature
And just return the result of UGameInstance::GetFirstLocalPlayerController
Im totally new to C++ and I'm confused by the engine code
Dont worry about the engine code
Just focus on making a new function in your function library class
My header for the blueprint function library I created, I know to add BlueprintCallable (or should it be BlueprintImplementable) but not after that
Ehhh
what I think is the function I need but Im confused by the lack of UFUNCTION()
Add this to the header instead
/** Returns the first locally controlled player controller. */
UFUNCTION(BlueprintPure, Category="Game", meta=(WorldContext="WorldContextObject"))
static class APlayerController* GetFirstLocalPlayerController(const UObject* WorldContextObject);
thank you, do I need anything else in my 'include' list? Like World or such
No
Add this to the cpp
class APlayerController* UCustomBPFL::GetFirstLocalPlayerController(const UObject* WorldContextObject)
{
if (UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull))
{
return World->GetGameInstance()->GetFirstLocalPlayerController(World);
}
return nullptr;
}
Thanks I will try that
You may need to add this include to the cpp
#include "GameFramework/PlayerController.h"
I just edited the above code to include your specific class name in the definition
yes I think thats why I am getting a not found warning
still got the warning
What do you mean warning?
Warnings wont stop compilation.
Errors do.
There is no point saying "Ive got a warning".
Paste the actual issue so we can help.
We cant see your computer.
Ok
Did you definitely mean add this to the cpp file and not the header?
Ok first up
Ignore the Error Tab
It is useless
Actually compile the code
The Output Tab will tell you if compilation failed
You can then read the actual reason why it failed in that log.
is compile same as build?
Yes
Quick question: How would I hide widget component in the player character. OnlyNoSee isn't working. Any tips? Only for the owning player that is
Set HiddenIngame?
Right, but I'd have to find out if it's the owner, then HiddenInGame, how would I find out which players owns the widget?
You have to close the Editor.
yeah stupid me
If its locally controlled?
Yes! I'll try that!
syntax error I think
I can't believe I didn't think of that! That did it! Thanks man!
Why did you screenshot half of it?
Thats really unhelpful.
Paste the entire log
Can you show your code for the cpp file?
anyone please ? โ๏ธ ๐ญ
I need an extra } I see in the C++ file
So you didnt copy paste what I had exactly
no my mistake
default 'build solution' will build all windows you have open yes?
Thank you for the help hugely appreciated, my C++ is embarassing compared to my knowledge of blueprints
If you havent touched C++ before no one can expect you to know what your doing
You should learn it though.
Yes more transferable skill if anything
Next question: How do I get a projectile to ignore owning actor?
do you mean as in net ownership
Well I'm spawning a projectile ball, however it damages the player who spawns it. I'd like it to only damange non-owning players
I figured it out! I had to pass the investigator in the spawn. All good!
I have an issue with there being a small delay after attacking another player while on client. Anyway to predict damage on client?
Are you purposely multicasting the spawning of this projectile and not just spawning a replicated projectile?
Sure there's ways. It's up to you
it's not automagic
How?
however you want.
Right now I'm assuming you detect the hit on the server, do the damage, then the client eventually finds out right?
There's nothing stopping you from also doing the hit on a client and predicting whatever the hit does
Make no mistake, prediction is INSANELY COMPLICATED
I'm pretty much using the gameplay ability system to replicate the montages and attacks hit boxes. The only issue I'm having is the delay between the player being attacked and the attack hitting on client. Not sure if this is a gameplay ability system issue or a multiplayer issue
should I take this to the gameplay ability system chat? or is it a multiplayer issue?
If you're using GAS then prediction should just be happening if you set it up right
that's GAS chat land tho
I'd probably prefer it the way you're suggestion, do you have a screenshot example of what you're talking about?
just spawn projectile on server only (it's a replicated actor)
that's the typical approach
if you need prediction that's a whole other can of worms
I'll adjust, you're not the only one mentioning the heavy use of RPC's that's bad haha. I think it's wise I listen! Thanks for your input!
RPCing shots CAN be valid, that's what I do
but you have to expect that not everyone will agree on where that bullet is going
whether or not that matters, depends
i have an issue with IsNetRelevantFor. The resturn value is being printed out for both clients. When the players are too far from eachother, they arent relevant to eachother. The function returns the right value, but the clients stay replicated for a few seconds after, which shouldnt happen. when the result is false, the function gets called a lot more, why is this?
How does unreal know which asset to show in multiplayer? Apparently it's not just about the uasset name, it's more like an ID or something inside of an asset I guess?
I am trying to replicate an asset which was mounted at runtime like a chair so it was not there in the initial build. At the moment the client does indeed see that something was created and the collisions of the blueprint work and stuff but it cannot actually see the asset ie. the content that was mounted. The blueprint was already in the build, it just had empty references and got filled from the player who mounted something
Even after mounting the same chair by the other player, he still can't see the one of the server player although he can see his own mounted chair which is the same.
that's why I think it's deeper than only uasset names that unreal relies on to recognize which asset to show
otherwise it would see the connection there and show all chairs of that type when mounted by everyone
hello! i was wondering how i could go about replicating the left hand IK on a player, everything I try only lets it show on that players end but nobody elses
Hey is anyone using the common session subsystem from Lyra? It seems to me that the lobby attributes are hardcoded as part of this subsystem and I can't modify or add my own lobby attributes? Since all the variables are set in UCommonSessionSubsystem::CreateOnlineSessionInternalOSSv1
Does it need to be replicated? If the calculation is the same, you should be able to see the same result without replication at all.
Take the IK foot for example.
On my main Player Pawn, I have a Widget Component with Text that is suppose to Display a Name. I use a Rep Notify to get the name and update it for everybody which works great on a Text Render Component. Inside my Rep Notify, the Widget always fails to Cast. I was wondering how I should go about setting the Widget Text since this is happening.
is the widget component created at runtime or in editor?
print the value of theat Get User Widget Object, what is it on all the machiens?
3 players on Listen Server
The Text would be set at Runtime on Begin play with the Rep Notify. The Component itself should already be there because it's on the Pawn Blueprint
The widget class is also already set to the Widget for the Name Tag
Do you have an answer for my question please ? #multiplayer message
@mild lynx looks like a rat race. There are times it's empty and times it prints value
Make sure u set the variable before accessing it
Here is some more context. On begin play, the Client will eventually call "Server Set Player Name" which is a Server event to check Player State for a Valid ID, then upon success it does what you saw in the above image in the Rep Notify
I don't go thru people code. I can only mention what seems to be the problem
U are getting empty object at some point, that's when the cast failed
Okay, I'll just try a Valid check and run it through a timer a few times to see if it updates at all then. Thanks for the help anyway.
It seems to just not be Valid for the first tick, but Delay until Next Tick got it working, along with a Timer check for backup.
The problem is likely because though you have the widget component on the actor, the widget that is housed within it isn't necessarily created by the time you'd receive the OnRep of the name.
Yeah, that makes sense. Luckily this seemed to do the trick. I have the Timer do it's thing every 3 seconds, and if it fails 3 times it just invalidates, so that seems to work
Another thing you can do is have the widget fetch the name when it wakes up
๐ How would I do that?
No clue, I've literally never once done a server travel
Assuming you have some way for the widget to know about the pawn it's on, just go get the name when it initializes. Whatever the begin play is for a widget
Okay then. I'll try that out sometime, thanks for the Info.
or, do the same thing you're doing in the repnotify also in the actor's begin play
that way you keep the references flowing one way
Race conditions, welcome to multiplayer
My host seems to recreate its player controller whenever a client joins my networked lobby is this normal behavior or am I messing something up.
Are you sure its not just creating its version of the new players PC?
Server + owning client gets one
Refactoring it around, it looks like my set view target with blend just seems to be getting reset(?)
I have a lobby where the camera moves around for option menus. Whenever a client joins the lobby, the viewtarget seems to snap back to the original position
And you're not doing GetPlayerX(index) i hope ๐
What should I use?
A proper reference to the correct playerController
my understanding was that getplayercontroller(0) would get the local player
Its not guaranteed afaik
I guess then what would a proper reference to the correct player controller look like, this is meant to be a client side operation as each client should be able to independently move about the lobby options
I guees this is triggered on some beginplay?
Either you provide it. Or it already somehow exist in the context of the actor you're on (prob not here)
yea it is on a begin play :c this specific one is supposed to be the first little landing animation
i've tried it in multiple places.
This specific desperate iteration is indeed in the LevelBP, but I also have tried it in the menu widget blueprint itself.
๐ฆ
The only reason its in the LevelBP was becasue I was unsure if it was a replication issue
What about in the pc?
The playercontroller gets recreated each time a client joins, which eludes to my first question
Im sure it doesnt
Each new plauer gets their ownn
And server gets a copy of it
So with 4 players:
Server - 4 controllers
Clients - 1 controller each
I'll try it again, maybe i didn't properly set it up.
On beginplay you cam bramch "IsLocallyControlled"
oh neat ill try that right now
it still seems to happen in the player controller :c
Did you remove the old code everywhere?
yes ๐
that shouldn't matter right?
Not for it resetting i guess
I dont know what you mean by sharing the same viewtarget. Its my understanding that the playercameramanager is local to the client itself and not replicated.
what does Setup do?
Wheres the logic for moving the view target actor?
Or do you lerp between different cameras?
As long as this is the ONLY thing setting view target right now I see no reason why it wouldn't work
it should start -> delay -> blend towards MenuCamera
does menucamera move or is it completely static?
menucamera is intended to just be a static anchor camera since blendview target requires an actor at least was my understanding
does it actually move or do you just not have the camera moving around part hooked up?
are you intending that "Camera moves around" = "view target jumps between different cameras with different tags"
or
"Camera moves around" = "View target is always Camera which is actually moving"
Here is a video to kind of document the issue
As soon as a client joins, the viewtargets seem to reset to their starting point
The only thing that should be manipulating the viewtarget is this playercontroller blueprint that ive shown above
maybe it's calling RestartPlayer on everyone due to gamemode shenanigans
don't think so but just thinking out loud
That may be a play-in-editor "feature"
Print Self on BlendToView
Gotta love those ๐
listen or dedicated?
The Boolean for auto manage viewtarget is off though, right?
Listen
Do this real quick
when 2nd player joins does it do 2 prints or 1
I'd test with launching
not sure how you launch as listen but do that 2x then join one to the other
console -> open localhost should do it I think
i mean launching, independent from editor
I'm not sure this is my first time using viewtarget like this
It's a Boolean on the PlayerController iirc
It's meant to automatically manage the ViewTarget for possessing etc
Wierd.. 2 server prints + client print
It was not off, but turning it off seems to not alleviate the issue
Ultimately you don't really want to change your ViewTarget if there is already a pawn or similar that you possess. At that point you would keep the ViewTarget and simply use the PlayerCameraManager to offset the camera to where you want it
If you have no pawn etc yet then it's fine though
I can't see the video on my phone. Did it print twice?
The second server print came when the client joined?
Initially it prints twice aswell
Oh
client joined, sever printed for client
Show the actual log
Hm would need to see the whole code, including where it's called from etc. too much unknown about the setup
not the millisecond it's on the screen
also is Use Single Process unchecked in PIE settings?
Can only check later. Need to get up first ๐
when is ClientsideSetup called?
show the entire chain from whatever event is automatic to that event
is there a way to clear the log
excellent ty
Hm, is view target a thing that is ever replicated or otherwise server managed? Could be a forced replication?
LogBlueprintUserMessages: [BP_LobbyGM_C_0] Server: BP_LobbyPlayerController_C_0
LogBlueprintUserMessages: [BP_LobbyPlayerController_C_0] Server: BlendToView called: BP_LobbyPlayerController0
LogBlueprintUserMessages: [BP_LobbyGM_C_0] Server: BP_LobbyPlayerController0
LogBlueprintUserMessages: [BP_LobbyGM_C_0] Server: BP_LobbyPlayerController_C_1
LogBlueprintUserMessages: [BP_LobbyPlayerController_C_0] Client 1: BlendToView called: BP_LobbyPlayerController0
LogBlueprintUserMessages: [BP_LobbyGM_C_0] Server: BP_LobbyPlayerController_C_1
I changed the text because i cant find that other print statement so blentoview is appended to the print
the gamemode printing isn't helping
ohhhh
it shows you where it is, let me remove that
LogBlueprintUserMessages: [BP_LobbyPlayerController_C_0] Server: BlendToView called: BP_LobbyPlayerController0
LogBlueprintUserMessages: [BP_LobbyPlayerController_C_0] Client 1: BlendToView called: BP_LobbyPlayerController0
show all code paths that can call ClientsideSetup though
is that the whole run?
or just the moment 2nd client joins
why is the server printing
oh nvm that's the listen server
But that function is not the culprit
Our code runs only on thenowning client
There's something else going on
is that EVERY print string for the entire run?
yes
why is it the same object both times then
I'm not sure
sec, trying to replicate
what are the errors
this happens in shipping builds as well so i can confirm the behavior is not PIE
They're errors from removing my UI
how do you have the add client button?
you can enable it in earlier 5.x versions in editor properties and "allow late join"
Same name doesn't mean same object
One of the reasons DisplayName isn't meant for Gameplay
I'm not getting the same behavior in 5.2
Default Pawn set to None.
Server (host) joins the game, camera blends to a camera actor in the level after 2 seconds.
I click the "Join Late" button, client window pops up, and after 2 seconds, blends to the same camera actor. Server view unaffected.
The camera movement in the video is solely by the view blend, right? It's not some camera track on top of that?
have you tried join during the blend?
Yep works fine as expected... Both server and client has their own view of the scene and are both blending towards the target camera simultaneously but the server is ahead of course ๐
video in a second
ok it appears with delay it's fine
without delay, the client misses it
when my lobby pawn class is set to none it works fine
Then it's a possession timing problem.
what in pawn is causing this to snap back..
The possession overrides the blending to the new camera.
But I'm not sure why that would influence the server....
I'm not seeing server affected at all
I thought maybe I did at first but I can't replicate that
I seem to be making progress,
So you and Datura got the same result then
my lobbypawn had manipulated my camera, i removbed that and now just the client snaps back
Yeah same - mine doesn't effect the server snap back, but if there is a default pawn set up then the client doesn't see the blend, it just snaps to their pawn.
Should I just do this in the pawns begin play so that there's no snap back?
like a local function on the pawn so that this only happens after possession
So youd want the evnt connected to onpossess
What's the goal?
you want what to happen in the lobby
Possibly one frame after that even @_@
Perhaps
on possess is clientside anyway right?
Depends on where the k2 event is chained
er serverside
Id expect last&^
the bug at hand was that each time a new client connected, the lobby would snap back, for all players.
ideally each new connected client wouldn't snap back those who were already there, that may be fixed now with making parity with you all
Generally Beginplay + multiplayer is a bucket of worms
Just make your lobby pawn be a thing with a camera that you can move around as normal I'd say
but also that the new joining client has the transition
probably, but the benefit to blendview was that I assumed this function was for this purpose of blending between camera views.
so I was hoping to use it for this usecase.
But the possession ViewTarget stuff comes from the PlayerController Boolean iirc
If that is false then the pawn shouldn't matter
I had it off but still was missing the blend
๐ญ
I'd sit at default cam -> snap to final when blend time was over with nothing in between
There might be more at hand, but if there is anything resetting ViewTarget then it's that Boolean
maybe default cam wasn't set up yet so it had nowhere to blend from
that fixed it for me
If it's in the level then it should be available
๐โโ๏ธ The like 6 people that play my game are forever grateful.
I can't stress enough that I would use the camera manager for this stuff
To you as well
Is there a later event to hook into clientside?
is there an "everything is definetly here and ready to go" event?
sorry to you as well ๐โโ๏ธ
So both sides now work fine for you? Client and Server?@shrewd carbon
Yes
And solution was no Pawn + Boolean to false?
That would be something huh ๐ not afaik
Unticking automanage and then fixing my lobby pawn from attempting to snap the camera fixed it
And what stuff do you dream about at night?
Dont forget me ๐โโ๏ธ
Made you move the logic back to pc lol ๐
My lobby pawn had a bug which was causing the server camera to snap by attempting to snap
Probably better to get yourself some ancient Oracle to read the stars for you than hoping there some everything is ready event
How do Real Gamesโข๏ธ do it?
Looks like what I could do is have a pawn, but set this false.
Once that was fixed it was the automanager that was set to true -> false that fixed everything
Mostly by keeping relevant logic in the classes they belong to
yes yes. Thank you
If you have a race condition you gotta solve it by checking both ways
hello there playerArray
Lyra I think tried to cover this a bit
What would the player camera manager approach look like? Do you still get the blending functionality?
or are you having to reinvent blending
I'm also curious to know what camera manager would look like
Yeah you can store the current and the target transform and Lerp between them over time
the whole point was to avoid reinventing blending as im not sure i could do it better.
In c++ you can probably just use the existing blending logic fwiw
But blending isn't really difficult tbh
So now the question is, why isn't the blending functionality in the camera manager to begin with
i imagine its not just a linear blend between values
Depends, id say
The benefit of keeping the ViewTarget on the Pawn
Cause some logic in UE somewhat requires that
which is hilarious
I found that out the hard way when having a second actor for the camera years ago
E.g. OnlyOwnerSee etc stops functioning
I'd go back to the subscription model for an Unreal Engine 5 Lite
Yeah that was like 6 to 8 years
Well. Regardless, I appreciate the help
I can look at it in a minute
this was really confusing my players :sob
Hey at least you got players, that's better than most of us here.
The blend logic is not more than the PC telling the PCM (iirc) that it wants a blend. And then it just blends over time to the actor you specified.
who holds the 2 states you're blending between?
Would need to check. Guess is PCM
If that's the case then it's not as insane as I thought, that's the PCM doing the blend and the PC just commanding it
Yeah
I saw that in cpp, i didn't know if i should mess with calling it directly.
Don't ask me why the function is on the pc
I thought that was already how it worked
I would think potentially for possession etc.
Pc just had a forwarder function...
ima sleep so good tonight this was driving me crazy. such a small thing too in the grand scheme.
Hello, I have lots of actors in my level that are not important for game. I want those actors be only locally loaded so server would not know about those. Those are like level design actors so those are already in level. What is correct way to remove those from dedicated server?
And those are small collectable robots. I have over 1k of those on level and I don't want to use server cpu at all for those
why do you want your server to not know about those collectable robots ?
Has anyone done Steam Stat based Achievements in C++? I looked at what people did in BPs, and checked the WriteLeaderboards node, but doing the (at least I believe I do the same), doesn't seem to work. It fails finding a Leaderboard (does one need to set up a Leaderboard on steamworks too?) and then the Steam Task stuff kinda hangs up.
Been a really long time since I did anything with it but IIRC, the default Steam OSS implementation requires that you setup a leaderboard for every accumulation based achievement on the steam backend. Either that or a user stat, can't remember which.
Yeah the BP node also fails. I think the Client doesn't have a Leaderboard for their stat
I will ask them to set one up.
did you find the "late join" setting ?=
for the additional button
question: setting a replicated variable to COND_InitialOnly will take it off the list of replicated variables that need to be checked and save some performance right? if i have some replicated variables that change ONLY due to server events, would it be more optimal to set that variable set to COND_InitialOnly and update its value with a RPC multicast?
Unless you have an obscenely expensive comparison to perform then the difference will likely be utterly unmeasurable
If you want to save performance then drop the update frequency of the actor and reduce the number of replicated objects you have
yeah i kinda figured that was the case.. i think the right answer is to utilize dormancy and force net updates
dormancy is certainly an option if it's changing very infrequently
@thin stratus Any help please ? You're my last hope ๐ฅฒ #multiplayer message
@sinful tree Do you have any solution please ? ๐ โ๏ธ
Might be the "Launch Separate Server" boolean by now?
On my side it's already set to off but still have the issue ๐ฌ
You're the best ! โค๏ธ
If it's off then it will probably already connect
I turned it "on" and it works ๐คทโโ๏ธ
How would one assign a player controller to a player in unreal engine blueprint. I have a listen server and both players start with an initial controller, but ive made 2 of my own controllers. to better be identified for turn rotation.
currently the players possess the pawns I want them to, but im not sure, nor is the internet being very helpful atm for explaining how to assign other Player Controllers in blueprint.
ha literally just read that. thanks for the reply. Though now i question how the unreal devs make an array of player controllers for multiplayer.
what do you mean ?
last thing, is this a valid alternative for identifying the players? can i just use these tags ive made and derive the player controllers from them
apparently unreal makes a player controller array and assigns the controller to the player as they start, or possibly during some level transition, im not sure.
as long as ive got a valid means to identify a controller in blueprint im good.
You can do that like this
Hey.
For some reason the WidgetInteraction component breaks whenever a client joins. I'm assuming its because of the pointer index or the virtual user index However I've so far failed to assign the player index to those values and get it working. Any tips suggestions? thanks ๐
So at what point do we stop executing functionality on the server after a Run on Server RPC? Is it until we call a run on owning client RPC in the same line of execution? Or do we just break the line of execution with a custom event at some point?
Any function/event you call on an RPC will continue execution on that computer until you explicitly call another RPC
Gotcha. So if I have something like Server RPC -> Some functionality (this happens on server) -> Run on Owning client RPC -> Some functionality (This happens on client again).
Do I understand it correctly this way?
Well if you mean a chain of white execution pin with your example, no. The functionality after the client RPC will also run on server
The functionality inside the client RPC you implement will run on the client only
Right, so instead of my earlier example;
Server RPC 1 -> Some functionality (this happens on server) -> Run on Owning client RPC 1 -> Some functionality (this happens on server).
Event Run on Owning Client RPC 1 -> Some functionality (This happens on the owning client).
Yep, that's it
Right gotcha, that makes sense now. Thanks for the clear explanation!
why does this not apply to the client ?
Good day, I am trying to understand how unreal handles references and knows what to display exactly because apparently it's not the asset names. First a bit of context, I am trying to replicate a pak mounted chair which was mounted by server and client. It is the same pak file so if references were built upon asset names, then it would have worked but apparently each asset has a serialization ID and a GUID? Now when mounting the pak on server and client the assets apparently have different IDs and thus the engine doesn't know that these are actually the same assets. Right now, the chair does get spawned on the server but is invisible to the client. The client does recognize that there was a blueprint spawned and sees it's other functionalities but the assets inside the pak which were mounted like the static mesh, textures etc are invisible to him although he mounted it as well.
I like drawing flowcharts to help keep my thoughts straight
Can be hard to juggle it all at times
Ugly as they might be, they help me a ton
That is really handy, I will be using this as well
Yeah, but effort ๐ญ
any help Squize please ? ๐ I'm stuck on this for days ๐ฅฒ #multiplayer message
wth ๐ฎ
IgnoreMoveInput = FMath::Max(IgnoreMoveInput + (bNewMoveInput ? +1 : -1), 0);
so there's a stack of ignore move xD
Sorry Diversity, I'm stuck debugging my own stuff ๐
race conditions are fun
ok ๐ญ
gotta get used to finding the way, there's a lot of hurdles coming your way xD
there are too much in a small period of time ๐ฅฒ And i tried everything, using the HasAuthority node, tried using an RPC, tries doing it in GameMode, trying doing it in PlayerController, nothing worked and it makes no sense ๐ฅฒ
Its usually not about trying everything, but understanding whats going on
I tried but it doesn't make any sense, as it's supposed to work the way I set that up
so, move input is not ignored?
or are you using something else than move input? ๐
yeah
I'm using Ignore Move Input and Ignore Look Input, both work on the host but not on the joigning client
I tried doing that through a RepNotify variable, didn't work. Tried directly calling "Ignore Move Input" and "ignore Look Input" it doesn't work either.
If you print string, is Event BeginPlay called on the client? @vagrant grail
where exactly ? ๐
after your beginplay event?
in wich class ๐
Which one are we troubleshotting ๐ซ
โ๏ธ
there are multiple, either the gamemode, either the player controller, and as I have parents and children classes we need to know which one we're talking about ๐คฃ
Pc_werewolf
whats in the parents beginplay ? do you have anything else modifying move input?
add on event tick -> IsMoveInputIgnored()?
what is the proper way to make the player control rotation set to the pawns rotation on possession?
setting control rotation directly using event receive restarted and event possessed with a rep notify ends up with a frame where the rotation is the wrong direction before then being changed
besides what's inside the OnReps no
you mean, translating code to flowcharts ?
whats your issue
Yes, specifically just following function calls across rpc's and whatnotn
So a chart could show if you're on server or not
Or perhaps the Exec lines indicate
that would be cool
Wether you are server/Client or both
its a bit like visual scripting but a bigger point of view
Yepp, zoom out a step
thats a thing i would love to dev
if i knew how to dev graphs in custom editor windows
I'm trying to disable movement and look input for players when they join the Mansion_Level. It does work on the host player but not on the client joining and i don't understand why
the gamemode
Nope, Player Controller
okay
can you get the player states array in game mode ?
try to type something like "get players"
why ?
to see if you can get the players from GM
Like I already have an array of player controllers
i couldnt guess that
so, you tried to run on server an event to disable movement from those refs ?
Let me show you what I tried to do at first
At first I tried like this but it doesn't work
maybe this has to be run on client and not server
The PlayerController is set to replicated, so changing the value of those variables on the server would apply to both server and client
whats is called when you start your game ?
from where ?
anyone? only solution ive found is to unpossess the old pawn on the server, then set the control rotation on the client, then rpc back to server to possess the new pawn
i mean, show me what is printed
can you move ?
On the server no, on the client yes
where is this called
@wanton bear onAcknowledgePossesion runs on client
You can set control rotation there
thanks summer
GameModes are server only
they do not exist on the client
But couldn't the gamemode call the RepNotify on the server that will then replicate to the client ?
Hi guys maybe some one know, about a Videogame or software or pluggin or blueprint that let me connect one or more virtual reality device to a PC, the PC is the server and VR are the clients?
@lament flax @hoary spear I fixed the issue ๐ค
What was it
On the player character I had a "Set Input Mode Game Only" that was overriding the ignore input
Lol ๐
Yeah ๐ค
Can we rep notify custom structs/types?requires setup?
Can usually, yes
Maps and sets dont replicate
Bpndoesnt give you per var control (and all bp structs should be replaced by sane c++ ones)
What is the difference between FInternetAddr and FIPv4Endpoint?
At a glance, it seems a significant difference is that FInternetAddr has support for port information.
Whereas IPv4 does not.
Which makes sense.
Are you sure you looked at Ipv4Endpoint, and not Ipv4Address?
Is there an event or something that gives a signal to say that all the player from the previous level were all transferred ?
maybe some one know, about a VR Videogame or software or pluggin or blueprint that let me connect one or more virtual reality device to a PC? , the PC is the server and VR de ices are the clients
I don't have the best understanding with, but say if I had:
UPROPERTY(ReplicatedUsing=OnRep_Number) int Number; and the associated OnRep_Number().
If a client changes this value the OnRep_Number() will not be called on everyone whereas if server sets it then other clients will run, am I correct?
OnRep is only automatically called on Clients if the value is changed on the Server.
The server side code must manually call OnRep in C++
Ok I was correct in my understanding then thanks aha
Maybe just check if the same amount of players is in the game level as there were in the lobby?
Not sure if this is the proper solution, but maybe have the constructor call an event/function similar to like how Begin Play works, and then check if it's running on the client? From that begin play you can have your object locate and communicate with whatever you want it to. The alternative that I can think of is holding an OnRep reference you set in whatever is creating the object, assuming it is replicated. I believe the OnRep will fire when the object is successfully created on the client giving the client a valid reference.
During Seamless Travel, the owner of the Inventory Object changed (because Controller is changed.) Despite changing the Outer in the SeamlessTravelTo function, does anyone know why the replication of the Inventory Object does not work?
on the "lobby controller", on server side, is the inventory data correct ?
Yes all data is valid.
mh
maybe UE does a specia lthing that make the client not updating its value from server
is your inventory a variable , struct ? ACBP ?
UObject
Yeah I have several variables to store item and those are replicated.
repnotify is not triggering and Inventory is just null
maybe the inventory is build before client, so when server sets the inventory vars, he got no clients to replicate to
weird
I think that's true.
But I don't know how to set client's inventory that doesn't constructed? Controller yet. (Because PlayerController has InventoryComponent)
i would try this :
after travel :
client side :
- on beginplay, ask server for inventory data
server side :
- event : return data
--
this would be a fix to get back data after travel, but you would need to check if after the travel, if you update your inventory, if the clients get updates by its own with replication
Okay I will try this
im not a MP pro, but this is the only idea i got rn
Did you implement functions required to replicate the UObject?
Hi,
Do dev teams generally split up code into modules (Server, Client, Shared), or folders?
I'm leaning towards modules
Splitting up into modules is a way but not like splitting between server client and shared
I think it's more common to name your modules for your mechanics/systems
InventoryCore, InventoryEditor
Like you can have an inventory module (I mean basically folders by modules) where you can have your Inventory component to add to your player, your Actor class that can represent actors in the world that can get into your inventory (I would prefer another component here but just giving an example) and your widget which would display on owning client to show your inventory content
All in a single module/folder which includes all server and client side code
At least that's what I would do
Bp separation/clear intent can be improved by decorating your ndoes with BlueprintAuthorityOnly and BlueprintCosmeticOnly
For the networking part ^
In my case I am plannng on supporting only dedicated server and dedicated client, i.e. no listen server.
So I don't want the server or client to contain any network code that is not shared.
So maximizing the separattion has a lot of appeal.
well you cant really "split", for example, your BP PlayerCharacter will be 1 asset, and server and client side code will be inside
but you can create subgraph for server only stuff and client only stuff
That's a shared module. But there is also server-only code, client-only code.
personally, i like adding "On Client" and "On Server" at the end of my interfaces/events/functions names so i can clearly see what is used where
Ideally you don't expose code that is not needed
yes
but you canr create a BP PlayerCharacter for server, and another PlayerCharacter for client
it will be the same PlayerCharacter for both, but each server and client will have an instance
For example, since I am not supporting single player or listen server, I can move the gamemode class into a server module
I'm talking about exposing your code to players. Don't even put it in the exe.
i think im misunderstanding what you call a "server module"
i see now
not my thing so forget all i said previously, i dont want to tell you mistakes
haha np
im a BP only dev so modules arent something i touch on a daily basics
Most people support single-player or listen servers, so they don't have the option to not ship server-only code
im working on a dedicated only game to, but maybe adding support for self hosting depending on the project plan
ideally you decide in advance, because ideally you would do things differently
If only dedicated server, you can make it more secure (less hackable) and simpler code
dedicated only but also bp only?
for now im doing great with BP only, i will have to dive in cpp at some point
I'm the opposite, avoid BP as much as i can!
yes, i did some researchs
basically, with a listen server you would add more checks than just a "switch on authority"
ofc im not talking about the security part
im still new to MP
Yeah most secure is if the server code is not shipped to the players
i prefer having dedicated server; and player can create sessions on it
a bit like creating private matchs of FPS
its a fake "self hosted" server
yup if you can bear the hosting cost
but on project launch, when i'll see the costs of servers, i might do a beta launch with support of self hosting server using steam API
and if its going great, level up to dedicated servers
Self-hosting means code is more complicated because you have to support the case of a server that is also a client. Kinda a PITA.
I'm already supporting listen servers and dedi but thinking of dropping listen
but, if i can avoir paying a ton of money each months for dedicated servers, why not
its only a money decision for me
if i have infinite budget i'll go dedicated
self hosting still means players must tackle port forwarding etc
steam already handles that right ?
any player can easily create a session and invite friends
Hmmm not sure. Normally done on your router
unless all the network traffic passes through a central hub?
i guess i have to do more researchs
me too lol
from memory, there is not cost when using listen server on steam API
*no money cost
its the big advantage of steam
ima ask chatgpt
its why small devs do listen servers games, because they have no fees with hosting
I think AWS has a free tier? to get you started
oh. well 1 year to make your game succeed ๐
I thought it was size based
So chatgpt says Unreal has no built-in support for port forwarding
true, but i never used AWS so im scared of the infrastructure
looks like steam has some functionality to faciltate player hosting
player-hosted servers are always second best though
i found this guy docs about a plugin using steam API
it handles dedicated server and listen server
Perhaps take a look at Playfab for dedi hosting. Also has a free tier. Supposed to make it simpler.
seems great, ty
or AWS GameLift. Something similar I think
I suspect playfab preferred for small teams.
ChatGPT: "PlayFab has an official plugin available on the Unreal Marketplace"
BTW most dedis are linux, usually cheaper. More work to support.
I thought Unreal Engine did not include server-side code in the packaged client configuration (dedicated servers).
I don't have a good source to back it up, so if anyone knows how this is handled by the engine, I would like to know.
Oh probably via the server/client defines
yeah you've gotta build the dedicated server seperately
so it can strip out all the unneeded stuff the dedicated server wont use
@tardy fossil what do you think of the idea of splitting code into Client, Server, Shared UE modules?
to keep stuff as independent as possible
not really fond of plugins like this since it leads to vendor lock-in
it's the whole reason the online subsystem abstraction exists
i understand
i'd say that is up to personal preference. i personally dont split that up and just use mixtures of HasAuthority() and IsLocallyOwned() (or IsLocallyViewed() when dealing with AI) to make the logic do what it needs to
Yeah I meant for classes that exist on dedi or client or both. For shared classes you still need branching logic.
I tend to have GameMode create various manager classes, which are all dedi only
Guess I will try splitting it this way, see how it turns out
I've had client and server only game modules on a project before but they didn't get that much use
It's nice to be clear about which classes exist in which contexts. A looser option is folders.
id say it depends a lot on the type of game too, like if your server does a lot of server only logic that doesn't exist on clients then yea it makes sense to split that up
yes, which is achievable through runtime conditions, but once you start having things like BP references that rely on client and server only modules, it can be more trouble than it's worth
Most of the backend stuff will probably be on the server too
I don't do much wth BPs lol. Solo dev.
well you should be because even data only BPs are a critical part of unreal workflow
on that previous project, the split modules had the voice chat implementation since for Vivox the client and server were doing very different things
hey guys does anybody know if i can set the gamemode i'm in "listen" without reloading it?
whats the easiest way to retrieve the local ip adress via blueprint?
I'd be very surprised if that's readily exposed to BP, why?
is replicating movement expensive?
it would solve a few things, but I can work around it if it is. (many actors)
What would be the workaround for this?
I just ~~send ~~replicate the speed, and each client takes care of the movement.
I don't know the answer of if it is or how much it is. But I use it without consideration to be honest. I have many actors that can be added to inventory, which requires to replicate the movement due to add/drop operations, so anyone can add the item to their inventory again. Didn't have any problems so far but I don't know if there is a risk in the future
right, in my case the game Im making its a sort of RTS so the units move every tick.
so I imagine it might have some overhead
Hmm I'm not using it for that kind of movement
also, if you know, how can I profile these kind of things?
so I can check if Im abusing the network
or if you know of a guide of sorts
It's been a long time since I used this so I don't remember the gists and how tos but you can record your gameplay and check what are causing an overhead in the networking with this, just like the CPU and GPU profiler. I don't know if there is any more recommended thing though
https://docs.unrealengine.com/4.27/en-US/InteractiveExperiences/Networking/NetworkProfiler/
oh cool Ill check it out
How do I get the final packet size a struct gets after serialization? Been trying FArchive's TotalSize(), but it seems it returns me -1 regardless (its implementation seems to be a INDEX_NONE)
Anyone worked before on sitting movement ?
Hey all I'm working on a multiplayer project and I found out about the replication graph and was wondering if I would need it I'm going to have 30 people in each server (dedicated server) and how important is network bandwidth in a mp game I also heard somewhere that rep notifys should be used as much as possible instead of RPC's is this true?
Yes ๐ฏ
with 30 people, bandwidth is pretty important so the game feels responsive for the player
^
^
also yeah rep notifies should be used where it can be implemented but it ONLY replicates variable value changes from server to client, not the other way around, so if you need to implement some sort of client prediction/server correcting to make the game feel responsive, rpc's would be the way for it, there's a lot more to it tbh & hopefully someone with a whole lot more experience can correct me if i said anything wrong
though rep graph will be old hat by the time Iris is more stable
Is the gains that significant tho.
it's what fortnite uses for their battle royale so it looks pretty significant considering fortnite is a very competitive game where that kind of optimization is important
I suppose they havnt shared any stats about its perf in fortnite ?
not too sure, im just glad it works with the current replication system in projects rn
Surely its not just flipping a switch?
the whole point was to reimplement replication from the ground up with an emphasis on performance
just the CPU load of the current replication system can get out of hand pretty quickly
Appreciate all the advice guys I'll start learning about the replication graph also heard about significance manager seams interesting too thanks once again.
Right, makes sense so far. But have they released any numbers on it ? Sureley fortnite managed with rep graph(?) And switching to iris didnt increase their playercount so...
Makes me wonder
but the motivation is likely to increase server density not player count
Fair enough, tho a stresstest would be cool
Is there something special I need to do to get ENetDormancy::DormantAll to work?
ENetDormancy::Initial seems to work, but after flushing the net dormancy I would like to return back to dormant which won't work with Initial, and DormantAll seems to be the way for this to work, however, it does nothing. If I have an actor as DormantAll it will continue to replicate normally. Anyone know what's up with that?
In Begin Play, I attach an armour to AI_Enemy and set Leader Pose with multicast. Since the client is late in the game, Leader Pose with multicast does not work on the client, armor only attaches to the socket. If I use Delay, the problem goes away, but this is not the solution. How can I prevent this?
(first screenshot is server,
second screenshot is client which joins game late)
Repnotify is your friend.
Beginplay and network is not, at all
And rpc's doesnt reach late joiners
They only reach those who are already there, and relevant
How can I use Repnotify in this situation? Should I create a array called Attached Meshes and use attach functions in it?
Thats one way, Yes
You need a variable for the mesh(es)
And update this on the server
Mark it as rep notify
Then in the function you set the mesh to the variable mesh, and set leader pose comp
Test it first with single skel mesh ref, and go from there ๐
If I am doing physics simulation for an actor on the server side, I can disable physics on the client side right? On BeginPlay do a Switch has Authority, and set physics sim based on that?
Yea I have been hearing that from more people ๐
So your best bet is prob server simulation with clients simply interpolating transforms or smth
Yea that is what I am doing at the moment, but then I realised that at the moment the client is still simulating physics (because it is default true for this actor). So if i on beginplay check if this actor is running on the client, and then turn off physics for it, it should be fine right?
Oh my, I just tested it, and it works like a charm ๐คฉ
Aside from the small bit of rubberbanding because of the delay between server and client, it looks much smoother now that the clients dont care about physics at all
Bump
Hi, its me again
Is it normal that RepNotify doesnt trigger when i add something to array?
It triggers only when i set array
Yes
๐
I prefer regular vars when its just a few
It doesnt support delta replication either i've heard so...
If you really want that, you'd have to implement Fast Arrays - that requires C++
It will trigger whenever it's modified. Adding, Removing, if the data inside it changes etc.
You positive about that? Not the first time ive heard one gotta set the array to trigger it
This is bp land
BP RepNotifies are a massive shitty hack so that doesn't shock me
But yea, I guess if it's Blueprint, you aren't modifying the array FProperty directly so it won't give you that fake "rep notify" callback that isn't even a rep notify callback.
How do people do anything multiplayer in Blueprint honestly
it does need to be set directly for the BP onrep, at least in 4.27 when I still used BPs for multiplayer, idk about UE5...probly still quite some spaghetti
Is it enough to set it to self ?
Blueprint networking is a meme.
yes
It is a meme mostly because it begs for C++ for everything. Though singleplayer games are fine being mostly BPs, I don't think any game can function decently with 100% BPs if they have multiplayer.
I have some bIsPushedBased = true; properties and would like to run some cleanup just after they got sent to clients (I don't care when they received them, just want to run this cleanup on the server after the server has done its task of dispatching these properties via the network). That said, is there any way I can "intercept" the replication frame? (Talking about some kind of OnPostReplicated)
Is there something special I need to do to get ENetDormancy::DormantAll to work?
ENetDormancy::Initial seems to work, but after flushing the net dormancy I would like to return back to dormant which won't work with Initial, and DormantAll seems to be the way for this to work, however, it does nothing. If I have an actor as DormantAll it will continue to replicate normally as if it were set to Awake. Anyone know what's up with that?
As in using the current velocity and direction to determine where it is going to be in the next frame?
something like that, yeah
Right okay, I might give that a shot as some polish after I have done some more playtests to see how bothersome it is for the players ๐
Ooooh, how would I go about doing this? Just setting delays on the server RPCS?
haha
Is it ok with logic inside GetLifetimeReplicatedProps ?
feels like there shouldnt be any, but I kinda need there to be
Perhaps I should just subclass it and override for the specific one...
Sounds cleaner that way
It's not bad imo
Squize, you just sent his replicated physics to the shadow realm
is itbad practce to cast to the game mode from the player controller so to get game modes enums for spawn? I wanted to just add a varible to the event but it gets access none so I figure casting to the game mode to get the actual game mode would help?
no, you can safely do it - i mean, it's not a bad practice
thanks
is casting to the game state and player state in the player cotnroller also ok?
Casting is fine, where ever you need to do it. Why do you think its inappropriate?
what would be the best way for the game state to update a blackboard key ?
Thats not really a #multiplayer question? #gameplay-ai would probably be a better place to ask.
well, idk if MP changes something so i wanted to ask here first
for instances, can a client change a BB key ?
It doesnt? Behavior Trees are run on the Server.
does the BB keys have same rules than replicated BP vars
okay good
do they "exist" on client side ?
like, if i try to get a ref, will it be null or valid ?
the AI controller ?
you mean its only existing on server ?
Sure, so then to access a BT you need access to the AI Controller, right?
okay so yeah no clients can get the BB
Clients dont have access to AI Controllers, because they only exist on the Server.
Therefore, Clients have no access to the BTs
i understand your point now
Awesome.
The only controller type that exists for a Client
Is that Clients PlayerController
No other controller is Client side
Anyone know if the GMC plug-in would be useful for someone with limited MP experience to make a kind of fighting game? Not exactly a classic fighting game but something that would require pretty fast input response. Or would looking into something more along the lines of snap net be good.
For a bit more context, I'm currently replicating a root motion montage of a forward roll in a mostly BP project, and with simulated average lag is pretty terrible looking.
So I've been looking into other paths I might take.
Also maybe it's fine to use unreal default systems and I'm just doing it wrong?
Is it possible to save the state of a game before the listen server leaves so they can resume later or this is not possiblr?
W sessions
Save as the Host?
You would probably just initiate a save before the leave operation is executed?
Given that typically a "leave" is initiated by some sort of button press, you have control over when the leave actually occurs.
The "Leave" button would really be a Save + Leave operation
The Leave part would only happen after the Save was complete.
Open console, net emulation.pktlag 300, or something like that. If 0 lag is introduced you are testing fake mp. Always add some lag when testing
If u already have rubber banding at 0 ms, I would have doubts if it work at all in real settings
What if they alt f4? ๐ณ
Random question, I'm not sure where else to ask this. I'm using Steam for multiplayer, and on the server browser someone has created a server called "Kill all J***". Obviously that's extremely offensive, and potentially even illegal in terms of hate speech, but what on earth can I do about it?
Obviously I can't terminate the session because it's between the host and Steam's servers, and I have no visibility of the host's SteamID. Is this something I have to report to Steam? Has anyone else had to deal with this sort of thing? Thanks ๐
Cant help that.
Periodic saves?
You can only do so much
Is there something we can run before client is booted from the map when listen server leave?
Potentially.
Maybe you can intercept the game from being started if the name contain offensive words
hello, what alternatives do i have to Steam's online subsystem to make players be able to join other player's listen servers without having them port forwarded?
Yeah, I think I'll have to implement some rudimentary dictionary checks, but I'll never catch everything.
One can only do soo much
I would worry more about putting my time for the gameplay
Epic online service maybe
does that require publishing on epic games store?
the entire point is im broke so i cant afford to publish to any major online store lol
ill probably go for itch.io
I only use steam, so not sure
@snow trail u r missing most of your audience already if you don't use the big platform
im aware of that, but not sure i can do too much about it
Right , if u can't afford that. Use their default app id
Then do a crowd funding maybe
wait, you can just do that? and the subsystem works?
Yes for development, I don't know for published app
I mean to publish requires you to pay that $100
But just for testing and playing with friends, that's completely free
Is it your game?
Are you the developer of the game?
Report it, itโll get taken down pretty fast
Feels like I'm doing something illegal here
void UInventoryComponent::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
if (bReplicateOwnerOnly)
{
DOREPLIFETIME_CONDITION(UInventoryComponent, Inventory, COND_OwnerOnly);
DOREPLIFETIME_CONDITION(UInventoryComponent, InventorySize, COND_OwnerOnly);
}
else
{
DOREPLIFETIME(UInventoryComponent, Inventory);
DOREPLIFETIME(UInventoryComponent, InventorySize);
}
}
Guys the "on owning client" node doesnt really work, isnt that supposed to do something only for yourself and nobody else can see it? i am trying to play a camera shake on my client but it keeps shaking for the server aswell
depends if you're doing it correctly or not
Idk i have it followed to a multicast that plays my animation
i tried it to put it behind a "run on server" but same thing
Who's the owner
Wait i send the code
the actor itself
or wym
I have 2 players and they play the shake in their code
after attacking
I have it on a montage notify
I cant fkn screenshot
it wont fire off for some reason
yes
or an unowned one?
yes
finally
The owning client thing is behind the multicast so i think that messes it up
i tried to put it behind "notify begin" but same thing there
the only thing ive learned is i do variables on the server and animations and mesh changes on the multicast
but idk how to play things only for the owning player
you gotta clean up this mess