#multiplayer
1 messages Β· Page 356 of 1
uh - one member should spawn @ A - the other @ B
my desired logic
ultimately i'll have many A's and many B's
you can see - 1 is true - the other false
ok it is fixed now
this vid i was watching - the guy had the matching to the playerstate... here:
for (TActorIterator<ATeamStart> StartItr(GetWorld()); StartItr; ++StartItr)
{
if (StartItr->TeamB)
TeamStartsB.Add(*StartItr);
else
TeamStartsA.Add(*StartItr);
}
it USED to read:
if (StartItr->TeamB == PState->TeamB)
taking that out - it works fine
Hi, anyone knows how to setup ownership for network.
currently none of my characters have no owner, how do i manually spawn the characters and set owners?
Possessing a Pawn gives the Player ownership
Possession needs to happen on the Server
If you need to manually override ownership of a ServerOwned Actor, then you need to call "SetOwner" on the Server for that actor and provide it with an Actor (best would be PlayerController) of the Player who should get ownership
@severe widget Those things with ForEachLoop and GetPlayerController have been changed before you replied. @thin stratus told me about them. And now the event tick shouldnβt be reliable. Will fix that and let you know guys if something has changed. π
@thin stratus Okay. What is prosessing a pawn? how to do that?
It's calling "Possess" on a Pawn with a PlayerController
You might want to read my Compendium first
And also study the GameFramework of UE4
as that is very basic :x
Well yes, if they are possessed
GameMode has a Default Pawn Variable. That one is spawned and possessed by default
So if you don't remove that and spawn a Pawn by yourself, you should already be fine
indeed, i use the default pawn
however, when i log HasNetOwner() its false for all players..
when the server crashes and shuts down, is there a way to do something like OnShutdown?
particularly when this happens in the log:
[2017.11.30-22.09.19:267][440]LogExit: Executing StaticShutdownAfterError
@thin stratus so using the default pawn variable, but why is HasNetOwner() always false?
Hm, shouldn't actually
HasNetOwner cycles to the TopOwner
Which for your Character is the PlayerController
That one returns true for HasNetOwner
Are you maybe calling that on the Server or so?
Also for what do you need that
im trying to implement RPC
but its sometimes telling me the actor has no owner
but indeed, i thought so it shouldnt be :S
@twin juniper Welly ou already kinda posted it
virtual void ShutdownAfterError() {}
In an Object
You can override that
@gusty raptor Well, when are you calling the RPC?
On BeginPlay in the Character might be too early
You have to see that the PlayerController possess after the Character is spawned and probably already called BeginPlay
You can use "OnPossessed" for that
great
@thin stratus thanks
Midsoft Games, you could create a custom movement mode
is there some part of the charmovecomp replication system you dont like?
i'd imagine it would be a lot less work to adjust the existing system to your needs than starting from scratch
@thin stratus whenever u write ur new version of ur network doc... Idk if you already mentioned this... but if a object was spawned in by gamemode on boot, all "Client" rpc's are then called on the server as it is the "Owning client" you should add this, because it actually gets annoying as many of the client rpc's i have are widget stuff... and because of this, the widget information just gets a bit... error prone? It gives a ton of access none errors on the server console on boot because things like beginplay are called which then access a widgetw hich doesnt exist... coz its a Server
but once the player possesses it its fine then
but its still an annoying error lol
im not saying write the error
im saying let people know that if a object is spawned on server... all "Client" rpcs are now essentially server rpcs
until SetOwner() is called
@thin stratus so i not log HasNetOwner() inside ACharacter::PossessedBy . however still all my characters are not owned
now log* ^
@twin juniper But i do that already
That's what the whole ownership is about
There is even a table showing how it works
@gusty raptor no idea right now. Haven't had an issue with this yet
seems to be wierd:S
have to look more into it, atleast input driven RPC's do work, while the log says it has no owner!
@thin stratus okay yeah i just wanted to make sure
@thin stratus Do you know the "Epicer" (Epic employee) who could tell me more about Net dormancy?
Like who developed the feature?
I can't find any information on it other than info about it being used heavily in Fortnite.
I j ust wanna see if I can send them a message on forums or email lol
Hey guys, i want to make a project with the ability of sharing pictures and save files trough the internet. I'm using the Gamesparks plugin right now but i was reading that Unreal Engine has an online subsystem module and i was wondering if i could use that module instead (the less dependencies, the better). But the documentation about sharing files using the module (if it's even possible) is scarce and i was wondering if you could point me in the right direction. Can i use the built-in online subsystem to connect me to a service and share files in-game? Or, do you recommend me another solution?
@frozen fog - you would have to transfer files via TCP Socket connections from host IP (The one with the file) to destination IP (the one that is requesting trade). There is no automatic file transfer function to my knowledge and if there was i dont think it would be part of hte Online Subsystem module - as this is a straight up file.io function with TCP functionalities for the transfer.
If i want to share files in the cloud using a service provided by a host (gamesparks, amazon, google drive, etc.) i suppose it's very similar, right?
you would simply retrieve the file from the storage location then - no transfer from owner -> requestor at that point
simply server -> Requesstor
Thanks, i was watching some tutorials about gamesparks but i don't have too much knowledge about the subject. I would like to use only UE4 functionality but i will probably end up using a plug-in like gamesparks. I basically want to share files trought the network so anyone can download it. In a very similar way to Mario Maker where everyone can share and download levels.
meh - i used gamesparks over 2 years ago
gave up after a few months due to their lack of API & Documentation
hopefully over 2 years its changed π
Oh, i hope hahaha i don't want to spend weeks figuring out how to do basic stuff xD.
good luck to you. check out SpatialOS too - great service - again - very new and a stiff learning curve.... but theyre aggressive towards UE4 implementation.
@frozen fog
Question guys - i'm trying to do logic to build TEAMS in my MP game (LISTEN SERVER)..... While this is working - its also addign my server 2x to the same team. I tried to build logic around this .... but i cant seem to get it right.
How can i stop my server from being added 2x to the same team?
{
Super::PostLogin(NewPlayer);
if (NewPlayer)
{
AAvantGardeGameState* MyGameState = Cast<AAvantGardeGameState>(GameState);
AAvantGardePlayerState* PState = Cast<AAvantGardePlayerState>(NewPlayer->PlayerState);
if (PState && MyGameState)
{
uint8 NumTeamA = 0;
uint8 NumTeamB = 0;
for (APlayerState* It : MyGameState->PlayerArray)
{
AAvantGardePlayerState* OtherPState = Cast<AAvantGardePlayerState>(It);
if (OtherPState && (!MyGameState->TeamB.Contains(OtherPState) || !MyGameState->TeamA.Contains(OtherPState)))
{
if (OtherPState->TeamB)
{
MyGameState->TeamB.Add(OtherPState);
NumTeamB++;
}
else
{
MyGameState->TeamA.Add(OtherPState);
NumTeamA++;
}
if (NumTeamA > NumTeamB)
{
OtherPState->TeamB = true;
MyGameState->TeamA.Remove(OtherPState);
MyGameState->TeamB.Add(OtherPState);
}
}
}
APController_Game* PController = Cast<APController_Game>(NewPlayer);
if (NewPlayer)
PController->Respawn();
}
}
}
what exactly is the point of this line: (!MyGameState->TeamB.Contains(OtherPState) || !MyGameState->TeamA.Contains(OtherPState)) ?
He basically checks if the PlayerState in the Loop is in a team or not
Kinda weird
You know that the new one isn't in a team yet
So just add him to one
If you want to know which one of the two it should be added to (based on filling them equally), just check which of the two Arrays (TeamA or TeamB) has less items
@worthy wasp
The Server should never end in a team if you simply only handle the new PlayerState
Remove the loop
but the problem is - the listen server is added 2x to the same team
Yeah, cause of your loop probably
but it returns true if the player is not in either team
ok so instead of looping - just add them to the array
and handle ht array logic the same - just without the loop
switch the || with &&
but yeah, the loop is unnecessary in general, unless the rest of your code is very different from what one would expect
ok thanks - tryin this out π
void AAvantGardeGameMode::PostLogin(APlayerController* NewPlayer)
{
Super::PostLogin(NewPlayer);
if (NewPlayer)
{
AAvantGardeGameState* MyGameState = Cast<AAvantGardeGameState>(GameState);
AAvantGardePlayerState* PState = Cast<AAvantGardePlayerState>(NewPlayer->PlayerState);
if (PState && MyGameState)
{
uint8 NumTeamA = MyGameState->TeamA.Num();
uint8 NumTeamB = MyGameState->TeamB.Num();
if (NumTeamA > NumTeamB)
{
PState->TeamB = true;
MyGameState->TeamB.Add(PState);
}
else
{
PState->TeamB = false;
MyGameState->TeamA.Add(PState);
}
APController_Game* PController = Cast<APController_Game>(NewPlayer);
if (NewPlayer)
PController->Respawn();
}
}
}
@worthy wasp
I would also remove the boolean "TeamB" and use an Enum
make sure to remove players from teams once they exit server too
Yus, Logout function
or rejoining players will have trouble
for what purpose @thin stratus ?
Well, easier to maintain
i guess if i were to have more than 2 teams
PState->Team == ETeam::TeamB
eitehrway - its cleaner yes
- switch
overall though it would probably be nicer to just make one big 'teambalance' function that you run whenever someone joins/leaves server
yes - i can see the case for switches use
β€
@thin stratus - works great - taking out the for loop i understand. Thanks bud!
@thin stratus did you just assume that a Team can't have more than 256 team members!???
TRIGGERED
youre loading player count into uint8 ;|
if i use SetPawn to know when my PC posses a pawn, it's only server side and i have to use a RPC to notify the client ?
@elder sable - i'm working that EXACT method right now o- i'm doing a function directly after possession in the controller's RESPAWN code
if (GameMode) { if (GetPawn()) GetPawn()->Destroy(); APawn* NewPawn = GameMode->SpawnDefaultPawnFor(this, GameMode->ChoosePlayerStart(this)); Possess(NewPawn); BeginPlayingState(); }
BeginPlayState - is a local function in the playercontroller that handles A: Building up the UI and B: running a custom BeginPlay in the PAWN class
so BeginPlayingState is a RPC called from server and executed on client ?
no RPC
the posses is server side no ?
it should only happen server side yes
this is coming from GameMode call to the playercontroller
it will only happen SERVER auth
so how you call a client function from server ?
its not an RPC
its a local function - it'll be in AUTH mode
if you need to go back to CLIENT - simply run a Client RPC in the controller
to handle anything locally
FYI - Server has ZERO to do with widgets
so anythign widgets wise - make sure to RPC back down to CLIENT
yep
otherwise you'll get warnings/errors
I need to replicate an event that is called from the tick
can it be reliable?
@distant wave - Tick & BeginPlay are ran as both HasAuthority & !HasAuthority - if you need to do something on server you dont need to RPC it (unless of course youneed to NetMulticast it)
just use th appropriate lockout - if(HasAuthority() or ! if you need local
Or you just tell him "No, don't do reliable on tick"
@distant wave dont do reliable on tick
I made my IK system
it looks like it doesnt need replication
@thin stratus You are really good with multiplayer. It looks like you are a very very experienced programmer as well. Why donβt you get hired at Epic Games?
awesome, yeah IK shouldn't rely on networking
When I jion a steam lobby the map is the main menu and its black screen
[2017.12.01-22.03.43:233][776]LogTemp: Warning: steam.76561198309012868:7777
[2017.12.01-22.03.43:235][776]LogNet: Browse: steam.76561198309012868//Game/Maps/Menu
[2017.12.01-22.03.43:236][776]LogTemp: Display: ParseSettings for GameNetDriver
[2017.12.01-22.03.43:236][776]LogTemp: Display: ParseSettings for SteamNetDriver_0
[2017.12.01-22.03.43:236][776]LogTemp: Display: ParseSettings for PendingNetDriver
[2017.12.01-22.03.43:237][776]LogNet: Display: SteamNetDriver_0 bound to port 7777
[2017.12.01-22.03.43:237][776]PacketHandlerLog: Loaded PacketHandler component: Engine.EngineHandlerComponentFactory (StatelessConnectHandlerComponent)
[2017.12.01-22.03.43:238][776]LogNet: Game client on port 7777, rate 10000
You can use UE4 with everything, given you have the skill to implement it
anyone ( @jolly siren ) why is a reliable on Tick not good?
bandwidth killer. There aren't many cases where you would actually need to replicate something on tick. In most cases it is just bad design
so im trying to 'snap' the character to surface
(like setting rotation) in tick
how would i replicate that hhm?
if you need to call an rpc every tick, then youve probably made an awkward design
reliable or not
is this for the player or for other objects in the world
its for the character
can the player control his character's rotation directly?
yeah its pretty like the thirdperson
so player moves mouse/camera, sends that input to server, then receives the char response many milliseconds later?
the movementcomponent is just replicated
like it should
after that i just rotate the character to surface by its normal
movement components are generally not replicated, at least not directly
but how is the server informed that the player is trying to move rotate?
hhm well i havnt implemented any server logic to be able to have two working players π
actually i make a linetrace on both server and client
getting the impact normal and then rotate the character to the surface
but the basic character movement is already replicated because the movement component was set to replicate (by default)
youre using the ACharacter and UCharacterMovementComponent classes?
why do you need to snap the char to a surface? wall running or some such?
i mean, the base classes already do floor movement
yeah indeed
ive been investigating it
actually i have both character and movement in c++
indeed i could work like the floor stuff
its just like
imagine a not horizontal surface
like a ramp
right, so you'd like to rotate the char along with the surface, so hes always orthogonal to it
exactly π
i mean, i already have it
(the rotation calculations )
just need a way to replicate it
hmm the basic replication system in ucharmovement only looks at position and velocity i believe, not rotation
so you'd need to extent it to include rotation
yeah
how is the mouse rotation done actually
it has atleast have 'some' rotation implemented ?
i can rotate the character with mouse or movement keys, these are replicated to..
careful when using the term replication; it refers to the server sending information to the client, not the other way around
yeah:D
rotation is not replicated
client sends rotation to server, but the server doesnt replicate rotation to client
its calculated just on the client with positions? hhm
yeah:)
There can always be things that make sense there
The important part is to NEVER make them reliable
its like a thing to think about, really
the client sends acceleration and location to server, along with the 'view'(which does include rotation)
But in a lot of cases it's being lazy
As you could setup simulation on the client
One example is the replication of a timer
Can easily start timer on Client and sync that up with server using UTC Now, instead of replicating the seconds/float
@manic pine so well, what do u think its the best way ?
its a kind of complex feature, but i think id start by looking into a custom movement mode
alternatively altering the default walking movement mode
if you have a look in the WalkingPhysics function of ucharmovecomp, you can see how they've done it there
you could copy paste it into your own custom 'wallwalking' mode and make necessary adjustments
yeah, ive been doing that.. i have a custom mode ready
i can start moving the rotation stuff to the movement component, its in the actor right now
so ill see whats next
thanks so far..
oh, yeah thats a good start
you'll be changing a lot of stuff though, including client correction functions, replaying moves, etc.
otherwise the server wont be able to tell the client when/how to correct its position based on the wall walking system
Hello using the Steam Session is a good idea to list all dedicaced servers online ?
can "Get Lifespan" not be called
on client side?
it seems like its returning 0
but initial lifespan is right
the lifespan timer only happens on the server if you are using SetLifeSpan. So you will only get valid values on the server..
looking at a best practice for as little as possible network traffic (Listen Server setup)
I am going to implement a GameTimer and a RespawnTimer functionality. My question is - should i have each timer happen on the server - and say every N# of seconds (inverval) i would broadcast a sync update to the connected clients (i'm looking at a maximum of 10v10 so 19 players total bandwitch usage) to sync their LOCAL timers to the gamestates variable?
I just think it would be alot of traffic for a simple float variable every second from 19 different IP's to one (HOST SERVER) IP & back out no?
at MatchState-BeginPlay .... i would start the timer locally to all players , as well teh server timer. and say every 5 or 10 seconds - sync between server + clients? I dont know how outa sync they would get?
AnimMontages - set the rootmotion to true in the animation
when you play an animmontage - play it both locally AND on server
yea, but I have a blendspace
all the anims in the bs
should be montages? can montages be included in blendspaces?
walking/running/crouching
so yea
but also
walk left
right
fwd
bwd
crouch walk fwd bwd rt lt
i'm in no means saying your doing it wrong - by why root motion for these?
root motion is more intended for: Lunge attacks, Jump Attacks, Dodges
Has anyone tried level streaming with Multiplayer? Is such a thing even possible? NVM I realized it works but it loads eveyone even if not in the new streaming level
because i am using the movement animset pro
walk/run/etc ... all tehse are tied (should be tied) to INPUT AXIS
it is a realistic effect
reading
ok
how long do you expect your games to be walldiv
@manic pine anywhere from 20 (min) to about 1 hour
@distant wave - go private message
we dont clutter here
ok
no rounds or anything like that?
its hard to predict how inaccurate client timers will be, since it'll depend on fps/deltatime and whatnot, but unless youre using it for actual gameplay
then a long update period probably wont be bad
i assume in this case its as a visual aid for the player accurate to e.g. a second?
well the gametime doesnt need to be pinpoint on to the second... but i dont want it to get out of sync too bad
nothing CRITICAL happens at the gametime....
but the respawn timer - yes
yeah but respawn timer will just run on server
every 45 seconds - the respawn timer resets PlayerStarts to allow players to be REBORN basically
yes
but heres the thing
say 10 people from a team die
that means 10 people are waiting the respawn timer to hit 0
so they can be reborn
now
i dont want to ping the server client 10x every second
from 10 different IP's
so my thoughts were
OnDeath - get the current RespawnTimer
do a LOCAL TIMER for the current RespawnTImer and increment down to 0
when the LOCAL hits 0
sync up with the server
or...
every 5/10 seconds... w/e
that way - it sonly a few times that the dead players hit the server with a SYNC request
but also
when the SERVERS respawn timer hits 0
it'll broadcast a delegate
the LOCAL side is simply for UI purposes
so i can display ot the LOCAL client - how much time they have left
till rebirth
right, but i dont see a need for the client to contact server at all here
player dies, server sends rpc to client with time until respawn
timer reaches 0, server sends respawn to client
client doesnt need to do anything
i guess i was just looking for a sync
was the best way to describe it
i dont want a client to be able to show 0 time remaining until respawn
when the server actually has 4 seconds left
and i do see a desync happening on every client... i just dont know how much
hmm even so, that could be handled purely server-side... i.e. when server reads 5 seconds until client should respawn, send an unreliable client rpc with 5 sec
why unreliable?
because if its reliable, it'll resend it if the package is lost... but that takes extra time, so the timer is already out of date
i understand that
right, so having it reliable will just cause more problems than it solves
no problem
Just another thought, if you are looking to sync things up closely you might be able to make use of AGameStateBase::ReplicatedWorldTimeSeconds
That gives you the current time on the server, so if you send a timestamp of the timer start along with the RPC you'll be able to know exactly how much longer you have on the client
It should allow you to mitigate both the effects of ping and delayed RPC sends
yeah, if youre using gamestate then that pretty much solves this problem
i'll def look into that Lethal
though of course, gamestate does update the timer regularly(at 'high' bandiwdth cost)
yes i am using AGameState (NOT BASE)
but in previous projects... i've always done the timer in GameMode - and send this information to GameeState class
that way - theres 1 sync point - GameMode - which exists on one entity (SERVER)
and the GameState is a replicated value of this to all clients
yeah, a timer is fine in the game mode, the gamestate just gives the client a reference to the world time on the server
so you can tell clients that " i started a timer that runs out at 11' o clock", then they cal just do 11 - gamestatetimer to find remaining time
i should say too - i STILL dont understand the full purpose/intention of GameModeBASE and GameStateBASE
i've only recently (in the past 6 months) been on projects above 4.14
way i understand it, they original just had gamemode and gamestate, then in a recent version added a more basic verison of those two classes
so games wouldnt have to use unnecessary functionality
i.e. maybe a game doesn't need to use "MatchState" which is implemented in AGameMode
so better to use AGameModeBase, which doesnt have it
but if you dont use it... does it hinder things?
thats where i dont understand hte logic
other than - the BASE IMPLEMENTATION of AGameMode
which uses MatchStates natively i guess i udnerstand that the more ti talk it
If you use AGameMode and AGameState, you need to follow a stricter match flow.
Not all games use that, and it can get in the way of what they're trying to accomplish
agamemodebase does fundamental things like allowing players to join/quit etc., agamemode does more by also keeping the 'state' of the match, which isnt necessarily relevant for all game types
What does the match state actually include?
And since we're on the topic, what does game state do that game state base doesn't?
Same thing?
If I want to send a RPC Multicast when someone connecting to tell to everybody, I can detect the PostLogin in the GameMode but I can't send RPC from GameMode? So how should I do?
I guess I have to get the GameState and call my RPC Multicast?
Yop
Or you save an array of playcontrollers
In the gamemode
Loop over them and call client rpcs
No idea how that counts in terms of performance vs a multicast
alright, and can you explain me what's exactly the gameinstance? i understand gamemode, gamestate, playerstate, playercontroller
If I have online subsystem enabled and DefaultPlatformService is set to null, do the session find queries find only lan sessions?
Yeah, NULL doesn't have a Master Server
@mild geyser
@haughty star GameInstance is a singleton (so exists once only) that describes the complete game. So not only the stuff that happens in one round or map, but everything around the game.
It only exists ONCE per player, is not replicated and should technically not contain any gameplay logic
It survives map changes and only gets destroyed when the game gets closed
@thin stratus Thx, so if I connect with MyGame.exe <ip-address> is that same as calling ClientTravel with the ip string?
Ok, thx
hey
I am having a strange issue with crouching and multiplayer
they can both crouch
(the server and the client)
the server can see the client crouching, but when the server crouches, the client sees the server going into the floor, but still crouching
the crouching blendspace contains root motion animations
the anim bp is set the root motion from everything
any idea on how to fix this issue?
@thin stratus alright so do you have an exemple of use? I see someone who use it for exec command or other stuff like that
Γhm, i put everything in there that is match irrelevant. GameState. UI Handling for MainMenu. Objects for outside databases
alright
Is there a way to completely remove an actor from the network, but still keep it on clients so that we can re-activate it as needed?
really need to know so i can save bandwidth
if i cant do this... i cant get the number of AI i want on my map
I believe the term you're looking for is net dormancy
I don't know specifics of implementing it, but that's the general mechanic
@brittle sinew definitely but i have been unable to find any documentation for it
You'll want to either use AActor::SetNetDormancy if you'd like to make an actor dormant for all connections or override AActor::GetNetDormancy if you only want to make it dormant based on certain conditions on different clients
Took about 60 seconds of looking on the actor docs and repo to find that :p
@twin juniper
@brittle sinew yeah but what about this tho...
If a Actor is dormant... can yoiu still do things like SphereTrace?
so i can say... check every 5 seconds, if a client is near us, wake up again?
You wouldn't do a manual check for something like that; you would probably just override GetNetDormancy
Unless you want to change dormancy for all clients, in which case dormancy only applies to replication
AFAIK, it has no effect on the server version of the object
Yeah essentially i just want my actors to go into dormancy when no player is there
@brittle sinew is there nothing which can make an actor just not do anything on the network
if a client isnt nearby
...isn't that what we're discussing?
I don't believe there's anything that does it automatically, no
yeah but u said ```AFAIK, it has no effect on the server version of the object
if it has no effect on the server version... wouldnt it still be running that code
on the serverr?
like AI stufdf...etc
but wouldnt it still slow things down
lol
becausse the server is still running it?
just not "replicating" it
You could stop it from ticking if its not actively replicating?
"Is there a way to completely remove an actor from the network"
"really need to know so i can save bandwidth"
The premise of your question was about replication, not running code on the server.
He did answer your question pretty well @twin juniper
yes
but im just wondering if it would still effect anything
like... if its still running?
on the server
wouldl it slow anything else down?
The actor is still running on the server, yes.
"Slow down" is entirely based on what you're doing
Like @fossil spoke suggested, perhaps you can also make more optimizations like disabling tick when an actor is dormant
hm
bool GetNetDormancy(const FVector& ViewPos, const FVector& ViewDir, class AActor* Viewer, AActor* ViewTarget, UActorChannel* InChannel, float Time, bool bLowBandwidth)
what is ViewPos? the viewpos of the player?
nvm ima look it up on docs
Thats just AActors version of it
Im quite sure that any derivative objects would override it
Yeah ^, that's the whole point of it
The function gets called by the engine, and you define the functionality
Returns true if the actor should be dormant for a specific net connection.
Just not sure what the params mean
I would assume that ViewDirection and ViewPosition are just helpers derived from the Viewer and ViewTarget if i was to take an guess
Check that out, it's a struct that defines a "viewer" over the network
Yeah, @fossil spoke is right, it really is what the parameter name describes
yeah but what is a "Viewer"
lol
@brittle sinew
oh
the player controller
UPROPERTY()
class AActor* InViewer;```
/** The actor that is being directly viewed, usually a pawn. Could also be the net actor of consequence */
UPROPERTY()
class AActor* ViewTarget;
And I'm guessing "ViewTarget" is what the controller is possessing?
It literally tells you in the comment
No, it's not necessarily what it's possessing
It's what is being viewed
yeah idk what that means
"viewed"
when i hear that word
im thinking of a window
I "view" a window to look outside of my house.
I'd suggest looking further into the source and looking at the role of FNetViewer in replication
I'm not just going to sit here and dig through the source for everything :p
I don't know all of this stuff by heart; for a lot of it I'm just using the resources provided to me.
mhm
@twin juniper You really need to start researching it yourself. Following the code isnt that hard, it just takes time.
@brittle sinew i ended up just printing ther name of "VIewer"
viewer is just the player controller
lol
so yeah
Hey guys, is there a specific reason why you're supposed to create a session before opening a level?
Let's assume that my lobby for people joining the match is hosted in the level itself.
When my player clicks on host a session, I would think that opening the level first and then hosting the session from within that level would make more sense
Unless you need to be in a session before opening a level in order for it to sync properly
the replicatedusing function, is a server function ?
Can I ask if Unreal Engine 4 has handlled client side rotation blend/smoothing? From what I see, the movement on client side is smooth but rotation is not.
@cursive shard The CharacterMovementComponent handles network smoothing for movement, but it doesnt handle control rotation smoothing no.
Thank you very much, so it means we need to write our own code to deal with the rotation smoothing on client side. Do you have any suggestions about it?
Networked smoothing conceptually is usually the same all round.
Smoothing the rotation of the Character on simulated pawns shouldnt be to difficult. Take an look at the CMC and see how Epic does their smoothing you maybe able to get an good idea.
Be warned though its not for the faint of heart π
@fossil spoke Thanks, I'll take a look at the movement component and see if I can figure out something. π
π
wouldn't it be better to handle rotation smoothing in animations?
that way you could do in place turn animations and such and handle all that in a single place
like, the rotation received over network would be the "current desired rotation" and then in the animation you'd interpolate towards that desired rotation from the current rotation of the character mesh
does the existing replay saved move/client correction system in ucharmovecomp handle externally applied forces at all?
@fossil spoke if u think im bad
look at some of these customers i work with
i send them an API guide with all api methods
they email back saying "i cant find it"
its literally on ppage 23
Hello
can someone help me with replication?
I have StaticMeshes that can be picked up by players in game, I am trying to replicate the changes in all the clients but I am not able to
What is your setup?
If you have a replicated class with the static mesh, it should automatically update all clients as it's destroyed
@brittle sinew btw that reminds me
GetNetDormancy() once this returns true it no longer is called... ever
so you have to set it back to Dormant_Partial somewhere like in your Tick() function
Otherwise it will never call that again
it essentially closes the connection
which makes sense
On a scale of 1 which is "I don't care" to 10 "Are you completely retarded to ignore it?", how important is this warning:
LogScriptCore: Warning: Script Msg: FindSessionsCallback - Invalid player state
I have problems seeing my lan hosted session
Also I found out that you can make an actor come out of dormancy via AIPerception, and I believe just walking into it makes it wake up
it may just be one or the other... not sure yet
Yeah it looks like its just the AIPerception component
but thats actually really useful to know lol
@brittle sinew
Epic has a livestream for local coop splitscreen, does anyone know if they have a simple LAN one...I'm trying to have some extremely simple interaction between a VR player and a spectator.....there is no spectator screen interaction implemented currently, so someone recommended using multiplayer to get the functionality I needed... I couldn't find any videos describing the cross VR and non-VR but that should be a simple player controller change and different pawn. Does anyone have a go-to video they recommend to all LAN multiplayer beginniners in Unreal?
It works the same way as normal multiplayer
You have to check which is the VR player or make sure that always the VR player hosts
Then you can simply decide in PostLogin what pawn to spawn
I'm completely new to multiplayer in general, I'm about to go experiment but is it as simple as opening up the same project in the editor on two different computers on the same network? (and start the VR one first?)
I'm going to scour for some more video I just wanted to check to make sure that is the general principle
Well you want to maybe package the project
Or at least run as standalone
Two editors don't connect (well)
that makes sense....all I literally want is to be able to click a button on the 2nd client and get one piece of data from the first, which should already be present if I replicate it through the game mode
GameMode doesn't replicate
GameInstance?
That's the one...THANK YOU'
@thin stratus ive finally implemented network dormancy
π
@thin stratus i think im gonna implement it on not only my NPCs now
but also on my structures
Lol.
I might make a few videos on this
because this is honestly a really under-explained feature
@thin stratus just found your 'Unreal Engine 4' Network Compendium π the website doesn't exist anymore, can you find the mentioned "blogposts" anywhere?^^
oh lol.. sry ^^#
lol thats from my twitch stream ha ha
@thin stratus lol dude i just now realised that your from NRW germany, me too man ^^
just looked at the about me page man xDD
what exactly is the purpose of the bNetForce parameter in Actor::Destroy() ?
@manic pine Ignored unless called during play. Default is false. says the wise dev
yeah, i didnt feel the description cleared it up so much
livin the dream ^^
Quick question - is it possible to have a mix of local and online multiplayer, meaning that say, two people are playing on a shared screen while connected to another 2 people via internet?
so effectively 4 players on 2 clients?
I following along some Epic streams on multiplayer and blueprint replication.... he connected basically two clients on the same machine...is there more to making it work when you have two separate machines on the same network? for the client machine, how do I enter the local ip address, or does the engine just magically know to connect to the right one (seems unlikely but multiplayer is new to me )
fucking windows 10, I know it is fucking with me
I can't see the computer on the network even though I have a goddamn ethernet going from one to the other
welcome to windows
fuck you SOOOOO much Windows 10
I can ping the other computer all night
and vice versa
but nothing in the explorer
Did you allow it to be shared on the network?
@merry hemlock You have to enable network sharing for it to be visible
@fossil spoke Do you mean network discovery? it's turned on both
Yeah
I'm still not sure if it is more of a windows problem
I can ping both IP addresses
@merry hemlock Why even looking at that?
Just start the two games and enter "open MapName?listen" into the console on the host and "open IPADDRESS" on the client
Or setup Sessions, as they work for LAN even with Subsystem NULL
And no, it doesn't know the IP magically
Might be that OpenLevel node also works for the IP Address
In general you canexpose that to UMG then and have the player enter the IP
hey guys.. i'm wondering what's the path going forward for a project going steam dedicated server
what options do I have?
@compact gulch man don't eeeeven get me started xDD been working on that the past two weeks...
so i managed to get the dedicated server registered in the steam subsystem but so far i can't get the clients to find the session
basically you just need to have an unreal source build to build your dedicated server with steam subsystem activated and modify some c++ code
just follow this
https://wiki.unrealengine.com/Dedicated_Server_Guide_(Windows_%26_Linux)
and this
https://wiki.unrealengine.com/How_To_Use_Sessions_In_C++
and of course basics for steam subsystem
@shy nymph what's your implementation you are choosing for
i'll look into that thanks
I'm a bit lost on a few things ( let me know if those things are covered int he guide, i'm reading them as i type ) :
- if we use something like Gamelift , is OSSteam still valid? h ow do you authenticate
- I've used something like gamespark ( currently stilll using ) , how woudl I get it to launch dedicated server from there? . I saw ryanjon2040 using node.js as an intermediary , is there an alternative
Well no, non the guides cover GameLift or GameSparks
That's also non-documented in general as it's a pretty specific setup
GameLift and GameSparks each alone have documentation on their end that you can follow
Gamesparks as far as I know provide no option to communicate to hosting server
hosting service*
It does, HTTP Request
GameLift on the other hand have no way to do steamAuth
GameLift is not meant for ServerLists
So Steam ServerLists aren't really a thing for it
when you say serverlists are you talking about master browser?
sorry a bit unfamiliar with the terms
Yeah
i'm intending to do matchmaking type only hosting where instances are host and specific players are pulled in
i beleive that would not need server list yes?
Correct
SteamAuth is to make sure the connecting client is owning the game on Steam
Doesn't have a lot to do with GameLift
how do we uniquely idneity user then?
if not via their steam id
i'm using gamespark now and i use that
*identify
GameSparks can use Steam to authenticate a Player
Well, what is your idea?
i thought to use either one
let me ponder my ignorance for a moment
so far i'm using DB, Auth and cloud on gamespark.. ... hmm.
right... Gamelift is for hosting
ahh okay okay .... i see how using both could work.. gamepsark would then need to communicate with gamelift to host it and enter in parameter for which player this is being hosted for
all via http request
@thin stratus typically when you host dedicated server that uses steamsession. does this mean the Dedicated instance would have a steam login ( and a steam user ) as well? I can't quite imagine how it would work without
Dedicated Servers for Steam are a bit annoying using UE4.
The default implementation by Epic doesn't use any Auth
Means everyone can connect, even with pirated games etc
right
i see. this is where you need your own WebAPI to steam to auth with service like gamespark right?
Doubt that. You would rather need to implement the Auth stuff to the Server
So that, on connection, it checks
And kicks the client if it's not valid
Yeah
if that's the case , if someone is using "https://www.unrealengine.com/marketplace/amazon-gamelift-unreal-plugin"
something like that
wouldn't be able to use steam out of the box
I would not say it's a GameLift or GameSparks thing
GameLift is just there to boot up sessions
GameSparks for Data and Matchmaking
The Server needs to work with Steam even without GameLift
right..... are you implementing something like this yourself?
mind to share high level overview of your architecture?
I did set this up for clients. Can't share, sorry
ah ic alright
Are there any ways other than delay nodes to offset the timing of things slightly? I find that certain initialize functions won't fire off unless I put at least a .1 second delay before them- happens especially with On Possessed / Begin Play events
Problem is it starts to get messy having delays around- eg Gamemode has a delay before spawning AI characters to ensure all human characters are spawned/ fully initialized first
Ehm, usually you code it the way that you are sure that what ever you need to access actually exist
eg Gamemode has a delay before spawning AI characters to ensure all human characters are spawned/ fully initialized first
Well in this case simply setting team colors could be an example- if you spawn and immediately set team colors, they don't get set
Call the AI Spawning stuff after all player joined
On my end they do
I set Team from Controller to Character on possess
That replicates to Clients as it's repnotify
and sets the color
Might be due to the fact that I have net pkt lag at 200ms and the team colors are set from the server
Could be
However I haven't used a single delay in my games
If at all, then a Timer, but only for actually time things, not for delaying a call
If that is the case then how would it work in a real life scenario- server thinks players have spawned but they haven't initialized yet- it spawns too many AI
Well, "not for delaying a call that would fail otherwise" might be better
Due to latency
Good points!
Still not sure about the init player with latency, I just tested without any simulated latency and it worked fine
With latency it won't fire off on time
I think it just fires off on server before the client has actually possessed- perhaps changing my architecture a bit so that all properties will be replicated down anyway will work fine
@thin stratus Do you just have a bool like "bSetTeamColors"? Which then fires off the RepNotify event?
Enum, but yeah
Oh so I can do it while setting my actual team int variable- so like set int "Team" - that will fire the repnotify event which will check if colors are set
Smart! 2 birds with one stone!
Thanks for the help- will feel so good to not have hidden delays all over the place
i canΒ΄t put my work when login is sucess change the the login to server by switcher
this is my code
and how i clean the textfield in c++
TextField->SetText("")?
Also either post so much code to hastebin.com
or at least wrap it into three ` in front and behind the code
ok thanks
i gonna edit the i put in pastbeen sorry
i post in pastbean
sorry is not textfield but UEditableTextBox
i find the soluction for the empty text
now i have find a away the change the menu by switcher when login is sucess
i have a laser weapon which is fired by a client connected to a dedicated server. when the client's fire command reaches the server, the server does a multicast to the other clients telling them to spawn a beam emitter to simulate the shot. the first time client#1 shoots after loading map, client#2 can see the shot immediately. every time thereafter, there appears to be a seemingly random(0-500ms) delay between client#1 shooting and client#2 seeing the effect. any ideas what could cause this? its all run locally, so there's no noticeable latency involved.
i canΒ΄t put to work
the problem its my var is non static the function i want call its static function
https://pastebin.com/pKYGDGfs https://pastebin.com/PAwiWWDF
this is my code
can someone help-me
@twin juniper You could use a lambda with this capture like this:
authRequest.Send([this](GameSparks::Core::GS gs&, const GameSparks::Api::Responses::AuthenticationResponse& response){
AuthenticationRequest_Response(gs, response);
this->Sucesso();
});
Is a question about MakeShareable in a context of Multiplayer code appropriate here?
i cant put it work
its onther away
the problem it is non statick var in static functionj
yes, I understand. Using a lambda you can capture the this pointer into a static callback. You need to move all non-static code from AuthenticationRequest_Response into the body of the lambda.
I assume you want to call Sucesso() from the static callback AuthenticationRequest_Response ?
yes
and AuthenticationRequest_Response its static
the sucess
its not static one
@twin juniper Whats the error you are getting when you use the code I posted above instead of:
authRequest.Send(AuthenticationRequest_Response);
Severity Code Description Project File Line Suppression State
Error (active) identifier "response" is undefined TheLegendsOfArthur f:\Unreal ProjectsServer\TheLegendsOfArthur\Source\TheLegendsOfArthur\Widgets\Login.cpp 79
Error (active) expected a ')' TheLegendsOfArthur f:\Unreal ProjectsServer\TheLegendsOfArthur\Source\TheLegendsOfArthur\Widgets\Login.cpp 78
Error (active) no instance of overloaded function "GameSparks::Api::Requests::AuthenticationRequest::Send" matches the argument list TheLegendsOfArthur f:\Unreal ProjectsServer\TheLegendsOfArthur\Source\TheLegendsOfArthur\Widgets\Login.cpp 78
authRequest.Send([this](GameSparks::Core::GS& gs, const GameSparks::Api::Responses::AuthenticationResponse& response){
AuthenticationRequest_Response(gs, response);
this->Sucesso();
});
had a typo, the & was at the wrong location
sorry, did not compile it by myself
the function have be like this https://pastebin.com/ymaBVQpy
you now have two calls to authRequest.Send(). Remove the first one. And since you copied all the code from AuthenticationRequest_Response into the body of the lambda, it is no longer necessary to call the function from inside the lamda.
ok
So.... how again, do I check to see if an Actor is relavant to any ACharacter?
Is there a way to see if it is active to ANY?
IsActorRelavantToAnyone()?
Lol
Is that possible?
the code is be like this right https://pastebin.com/hTiGm9SY
looks good from here, (you don't need to call the empty function in line 77 though). Does it do what you wanted to achieve?
thanks its working now
glad to help
I don't know gamespark, sorry
Hello, I have a question regarding OpenSSL DTLS implementation using FSockets. I posted on the answerhub a moment ago here: https://answers.unrealengine.com/questions/732758/accessing-file-descriptor-of-fsockets.html
I want to assign a color to each player that joins based on what 'player slot' they're in, but I have no idea how to determine that value
Hey guys, im trying to make a cheeky check for all players being loaded in and ready to work. I have this setup here, which im pretty damn sure worked last week, even got a build of it working, but now a week later, and a possible ungine update it is no longer happy.
im trying to get the clients to rep notify the server that they are receiving replication and ready to go
the rep notify does not appear to run for any client now it seems
just the whole whom is the guy who gets his value set alrdy
just the host*
@cerulean rapids your clients cant execute test1 because the gamemode only exists on the server
if i understood correctly
test1 runs on server, it then casts to the host controller and sets his IsReady to true
then their repnotify should trigger and turn their own other bool to true on the server
but their rep notify wont even trigger so idk :/
but if its running on server, and you are only getting the first player controller, wont it always be the server itself?
could the cast to archerycontroller be failing?
no the cast is working :/
index 0 of th eplayer controller would be either the first client, or the listenserver client
either way it should be enough to trigger it
aye, it works and it sets the hosts IsReady to true
thing is, clients repnotify isnt triggering off of that
ah
How do you expect it to?
The host's PlayerController only exists on the server; the clients don't know about it
hes calling it from the server on the first player controller, which is either the listenserver or the first client
anyway, with that scrapped, and lets all just ingore the fact that it somehow worked in this state last week
whats the best way for me to notify the server when all clients are ready to recieve replication and go baby go
Sure, but the RepNotify would only occur on that controller, which doesn't exist on the clients @manic pine
it exists on the client that owns it
Which is only one client, at most.
Most likely it'd be the server's PlayerController
right, presumably hes planning on looping through it
Well, that's not what was shown :p
either way there should be one call going through
i.e. one notify going through, in turn causing one server rpc
would the best way here, be to set all controllers to ready, and have them repnotify to set their own serverready bool on server?
if the server controls when a client is ready, why do you need to send it forth then back again?
i simply want to know when all players have loaded in, so i can go through the game setup/possess process
you have a PostLogin function you can override in gamemode
im not the most experienced in unreal, so im probably trying in my own butchered pig-breed methods
you can check there whether i.e. numberplayers >= minimum players
in my game im just sending a RPC saying 'im ready', when everyone sends it the game starts
from pc
can u explain that in a little more detail for me takain? it sounds perfect
sec
how so?
its all about whta you want
if you want e.g. the game to start once a certain number of players have joined the game, postlogin is great
it works if you start when everyone connect, but i need a delay to choose the character
i can remember it not doing what i want, i played with it a lot last week, like it triggers too early or something
if you want to wait until a certain number of players have pressed "join game"(after having joined server), then takains suggestion is great
well, you could use the postlogin to start a timer which in turn triggers start of match
its CPP but you get the idea:
PlayerController:
Declaration:
UFUNCTION(Server, reliable, WithValidation)
void SetPlayerReady();
Implementation:
Ready = true;
Gamemode:
Declaration:
UFUNCTION()
bool CheckEveryoneReady();
Implementation:
bool bEveryoneReady = true;
for (FConstPlayerControllerIterator Iterator = GetWorld()->GetPlayerControllerIterator(); Iterator; ++Iterator)
{
bEveryoneReady = bEveryoneReady && Cast<ALobbyPlayerController>(Iterator->Get())->Ready;
}
return bEveryoneReady;
i wont tell its the best way, im using ue4 for six months only
ah wait, im using seamless travel, is that why postlogin wont work
havent used seamless travel myself, but that should be separate from postlogin entirely
it means my controllers never leave, they simply change
so i use Event OnSwapPlayerControllers, which triggers for all of them before the level is loaded
yeah it wont fire
now takain it has been a while since i touched an actual language
it simple does that "set variable Ready of playercontroller to true > Execute on server, reliable, with validation"
all players controller will have Ready after everyone clicked my button
on the server i just check if all player controllers Ready's are true
(i didnt have a way to unready)
so if i did something along the lines of beginplay -> run on client custom -> run on client custom[set var rdy] ? or is this stupid and redundant
run on client --> run o server
i cocked that a bit
yeah in my case the players decided when to be ready, so i called from client to execute on server
could be the other way around if needed
but wait, server has a copy of all controllers right
yeap
even if i do a run on client command, it will run on all the controllers from the server right away
run on client works like that > tells everyone that object X must execute code Y, if the object X doesnt exist on the client, it cant execute the code
it executes locally, on the persons computer
yeh so this wouldant work
ye
D:
xd
either im not amazingly smart, which is highly possible. or this is a slightly overlooked aspect of seamless travel
only difference is the PostLogin
if you need to send from server to tell when the players are ready
i just need it so that, when all players are loaded and ready to recieve replication, the server gets a bump. so he can start the show.
makes sense but i never did it, will let someone else answer that
np :3
I'm still struggling to find the best way to notify my gamemode that all of my clients have loaded in and are ready to recieve replication/possess. Using seamless travel, so i can't use postlogin
if any1 has any ideas, id love to hear π
@@cerulean rapids HUD!
It's only loaded on client
So I call "fakepostlogin" to PC and PC does the RPC to server
@twin juniper Yo, what are you guys calling the update?
BTW, just saw the trailer, looking good!
@wary willow Ctrl Alt Delete π
Trailer? I don't think that's done yet
We posted a little gameplay vid
Slinger π
Hey guys
just a quick question
I'm replicating a character
and I'm rotation the pawn's yaw with the rotation control
but i control the pitch only on the animblueprint
I thought that the control rotation would be replicated but it isn't... I wouldn't want to double the amount of traffic for the rotator... What would be the best approach?
Hello, has anyone come across an issue that NPCs shakes a little when working on slopes on a dedicated server?
hello, I cant find my session? before use find session I already created a session
Under what circumstances?
@halcyon abyss Control rotation isn't replicated in that regard as the Controller itself only exist on Server and Local Client
So if you want to rotate something for Pitch, you'd need to replicate that float in addition
You can set it to SkipOwner if needed/wanted
Hey cedric Thanks for your answer... yes I know it isn't replicated but I was hoping that setting the "use controller desired rotation" boolean on the character component would replicate that rotator instead of the pawns rotation
well anyway
I'm working around it by sending rpc's for that rotation
unfortunately I can't remove the pawns rotation from being replicated
Ah actually
Use get base aim rotation it stems from replicated pitch
I believe view rotation is also
No need to replicate another pitch var
base aim rotation? where do I find that?
Pawn
Thanks for replying Vaei btw π
so your saying that the aim rotation is replicated?
No, the result it gets stems from the rotation that's replicated through cmc's prediction
Get base aim rotation is a function belonging to pawn, available to bp and cpp alike
yeah I found it
but i'm trying to understand what it does exactly
where it gets the rotation from
wow that does work on the client
where can i find a tutorial on this aim rotation function
I'd like to understand it in depth
Lol, it's being replicated through cmc prediction
Vaei thank you so much! this saves me so much on traffic
π
since we're here
I'm trying to figure out a good value for the Net update frequence
frequency
I set it to 30... but it's not that smooth
cmc doesnt do any smoothing though right?
yes exactly.... which scares me for precise aiming
but i was ignoring that as of now
probably does no compression on the aim
just last thing
what im not getting is... im running 90 fps...
why would i have 100 on net freq
Fps and net frequency are unrelated
...oh... i though fps would logically cap net freq
so I'm missing something important here
if the game runs slower than the update it sends on the net.... then... what is it sending during those gaps?
Replication isn't tied to the tick
it has to be... no need to update unless data's changed
yeah I trust you! π was just trying to explain it to myself... to consolidate this knowledge
data only changes in tick
yeah that's what I'm wondering π
your server's fps wont be stable though
well, might not be
netfrequency seems to be used to create netupdatetime
So i got 10 players
each with a netfrequency of 100
I'd really like to understand and estimate a good frequence to not clog things up
how much is really replicated though?
its the cmc thats it
all the rest are one shot rpcs
im not replicating anything else on tick or anything
if its just cmc then its a tradeoff between enemy responsivness for clients vs bandwidth on server/client
i think the only good way to find an answer there is testing
you are client#1 and are watching client#2
if updatefrequency is 1(1 per second), your computer will only receive direction changes etc for client2 once per second
the rest of the time the cmc will simply interpolate
oh yes of course! Didn't understnd you meant that by enemy responsiveness
Yeah ill just test around a bit
although im not very happy with cmc's interpolation
i think for small arena-type games, 100 is probably okay
it's not as smooth
for something large scale you'd probably wanna do lower though
awesome! thank you so much Raap!
there's tons of factors involved however, including server fps as you've noted
many unreal tournament players claimed to notice a huge difference for servers running at 40fps vs servers running 100-120fps
Hey guys, CharacterMovementComponent seems to be very heavy on Tick() performance on the CPU
I was wondering if there is a way to improve performance
for the CharMoveComponent
what is the best method of creating a party and then having that party join a dedicated server as a team?
Beacons
@jolly siren you know of any working examples/docs to get an idea of how to set it up?
thanks
np
when we replicate an object, only members marked replicated are replicated ?
yes
ok thanks
Anyone know if Stat StartFile is doing a CPU profile on the client or the server? Or both? I'm refering to when we are running it in editor with "Run Dedicated Server" checked.
Because I need to know if some of these tick functions can be disabled on the client side or if they need to be disabled on both.
If you are using a single process then I would assume both
Yeah its just... Tick() on my AI Character movement components are taking up a ton of Frame time.
So Im not sure how to deal with it because i cant just disable tick on that component or they wont move at all
Was just wondering if youn know how to resolve this issue.
You have a ton of AI? Have you set the default land movement mode to navmesh walking?
I know that is what Paragon uses
hey.. question... is using -server on standalone commandline sufficient to test dedicated server?
i'm running -server -log -nosteam
but my other standalone client can't seems to join with "open 127.0.0.1" no error message. just nothing happens
any idea why?
Guys can i make a game with 2 different maps who players can switch. like one player plays on Map1 and the other guy on Map2? and if it works how can i do that ?
When it comes to using the steam sub system and the interfaces of steams API is Advanced sessions the best way to go ?
(With BP)
Depends on what Server model you want to use
But in generall it's good to go
UWorks would also work, doesn't use the Subsystem Interface though (not yet)
Idk how much additional things AdvanceSessions has by now
But UWorks properly reimplemented all Steam stuff
(in my eyes even better than Epic)
yeah the default steam implementation is pretty trashy imo, i haven't tried UWorks myself but Advanced Sessions (at least as of 4.14) has a lot of its functionality opened up as far as session things go
the likes of leaderboards, stats etc I wrote our own implementation of which really isn't difficult to do with the steamworks documentation providing most of it for you to just c&p
@next falcon i can't remember how but yeah its possible to do, somewhere IIRC there is a checkbox along the lines of "allow players to be on different maps"
What's the best way to go about calling an RPC on an object that is placed into the world instead of spawned?
What is IIRC ?
If I remember correctly
"allow players to be on different maps" wat?
If your talking about level streaming, if u level stream in multiplayer as far as im aware it forces all players to load every single level in even if there not in it
Okay guys... im about to lose it D: What else can i do to figure out why i can't find the online session of my dedicated server hosted into the steam Subsystem? I've tried everything but im about to run out of stuff to change to test whats going wrong π¦
Sorry i was thinking about the wrong engine
so in UE4 if you want the client to be on a different level you just stream it in somewhere
This is my dedicated server registering onto the steam subsystem
have one persistent level for the server, stream in the maps you need and tell the clients to load in the map they're supposed to belong to at the time
This my clients code to find sessions
i'm pretty sure decicated servers don't suppose "presence"
hold on let me check, there was something about it a while back on the advanced sessions thread
presence is false?
i looked through that but couldn't really find anything useful, i was working with the advanced sessions plugin but now im trying on my own since it wouldn't work
well it still doesn't u..u
allow join via prescence maybe?
its been a while since i've played with dedicated servers
hm i could try to set this to false, let me get back at you..
