#multiplayer
1 messages Β· Page 400 of 1
Just looked at it
It triggers if "bPassedChallenge" is false and yes if it accepts connections
Hmm
Seems to be running on tick though
So if it fails it just tries again
Welp, the Client seems to connect despite that warning
it might be a matter of timing
and it might be common occurence, considering most people don't log LogNet VeryVerbose
yeah, was tracing the wrong warning above π¦
with bAcceptingConnection
is there a built-in way to monitor tick rate of a dedicated server?
do you still need to follow this in current versions ? https://docs.unrealengine.com/en-us/Programming/Online/Steam
for using steam ?
so i dont need to manually update to v142
I just followed these steps because i had alot of issues with connectivity and testing in the past few days
for example i cant even host sessions anymore in PIE
steam won't run in PIE
but i was able to do it before no issue and i know that steam wont run
what can i do for testing in pie ?
it falls back to a backup if steam doesn't run
so maybe you were able to find lan games
im going to test hosting a lan game really quickly
also if i package a project do i need to pack steam into it ?
Okay Anything else than manuallly adding the steam_appid.txt
you don't even have to do that
oh ?
unreal creates one if oyu added your appid in the config
i did but it doesnt always do that for me for whatever reason
do you see the overlay when starting standalone?
now it works
Shift + Tab
well, then it thats it
everything else should be a different issue
like not using sessions correctly
or wrong settings
ports
etc
can i ask you one more thing ?
bRelaunchInSteam, it's probably a good idea to set that to true
also is that your real appid?
so like this ?
if that is the case, I think you have to write the steam support to whitelist your game for p2p usage
ya, I would try with 480 first
if that doesn't work, then dunno
so i can remove the p2p usage ? i was just following the steamworks tutorial from steam thats why
So also if steam doesnt allow loading in pie whats the best way to test networking locally ?
because even after all those changes i still cant host locally
you can use standalone, or a test build with your defaultengine.ini configged like that.
i always package out to test steam builds.
or an editor shortcute with your project and -game as start parameter
^
What would i need to change to locally test it in pie for now ? i dont really need to use steam right now i just need to test networking in general
and haveing to package it out every time is a additional step wich i rather not take at this moment if possible
for that you can just crank up the number of clients in the play drop-down
if you want to test networking, just set it to 2 players and run it in UE..
oh nvm i just realized i dont even have to host a session i can just open the map and PIE
Thank you both^^
no problem, just wait until you have to do a dedicated server
π
those are the best
dont worry that wont be any of my issues anytime soon its a playerhosted simple game project xp
@lean hornet "path to unreal binary\UE4Editor.exe" "path to game project\gameuproject" -game will get it to test locally, or you can use -server -game -log at the end for local server testing. taht';s what Denny was reffering to earlier
Ohhhhhhhh
yep
this is annoying me, trying to get an anim to replicate reliable but for some reason it just doesn't
works fine the first time, second time, it just doesn't animate
is there a way to make an HPBar (UWidget) face the character at all times - but be local? In a multiplayer setting - each local player would have enemies HP bars face towards the player character - but not be replicated in rotation.
I typically have pulled this off with a tick event, setting the rotation of the widget to the player if(!HasAuthority()) but this could get pretty expensive with 50+ enemies on the scene (which will be easily done in this game mode)
my thoughts were to use a MaterialBillboard - with a child widget parented to it - but this doesnt drive the rotation of the children unfortunately π¦
even though i'm doing this via C++ so it'll be fast - i still want to optimize this if i can.
you can attach the widget component and set it to screen space
that should take care of everything automatically
ah lemme try that - thanks @full bane - let you know how this goes in a sec!
@worthy wasp You can make a widget component as part of the actors
Idk if I'm late to the party
But 4.20 has:
Networking Updates:
-Replication Driver / Replication Graph (Experimental)
--UReplicationDriver is a base class that can be used for implementing custom server replication logic.
--UReplicationGraph is an implementation of UReplicationDriver that provides a replication system optimized for games with large actor and player counts.
-Steam Authentication has been added.
you sire are NEVER late to the party β€
:D hehe
Steam Authentication has been added
not too long ago I've spent a frustrating week of doing this
π¦
also the ReplicationDriver sounds amazing
Yeah that's actually kinda cool
Anyone used GameLift before? How was your experience?
So, who knows how to use Replication Driver/Graph ? π
@wary willow Can't wait for 4.20-release?
Currently I would estimate exactly 2 people, both of whom work at epic
I haven't come across any "how-to" about those.
@fleet sluice as long as they test
Think that replication driver is foundation for instant replay maybe?
How do we implement something like Fortnite's crossplay features?
Is this a difficult undertaking
@hasty adder Wasn't the UDemoNetDriver class supposed to handle everything about replays?
Not sure. All I know is instant replay is on the todo list and Iβm hoping the work will make it easier to implement stuff for live network games π
@marsh gate I believe you have to design your own online subsystem that can cooperate with Steam, Xbox, PSN, etc. To answer your question yes it would be a difficult undertaking
Doesnβt it all just come down to connection to the dedicated servers?
For instance you canoad game in steam and connect to a null dedicated server
Replication driver doesn't have anything to do with instant replay, it's a thing for optimizing network bandwidth and server cpu usage for large player counts
Ah
I have this problem when I respawn everyone in the lobby. It respawns everyone but the person who won. PM me if you have any ideas, I can give more info there
@marsh gate crossplay, moderately difficult. Depending on platforms. But generally..
Need your own custom oss (or at the very least customize current ones)
Or a backend
Like GameSparks
I should have tried out PlayFab this go around
Maybe next time
But heard they are pretty good for cross platform as well since not only is it BaaS, they provide server solutions as well
Or a backend... hmm
I'm planning on using AWS GameLift
@wary willow @sharp pagoda I'm not sure if they have that sort of functionality already built in, but if they do, that'll come in really handy. I have no idea what an Online Subsystem even is right now LOL.
Reading up on it
I hope its a button that turns my game into fortnite
does a dedicated server have a player controller?
and does the dedicated server have a pawn spawnned in the word
@mellow cipher also what is steam auth i though ue4 already has steam
Steam auth checks if you own the game
When u join a server/game
Else pirated versions can play online too
ok
@umbral adder Dedi Servers aren't players. So no.
Why would he have a Pawn? :D
@mellow cipher the shooter game sample will be updated to show how to use replication graph
Shooter game actually gets updates OwO?
well for the 4.20 release it will
Oh baby I'm hyped
@lost inlet source on that?
dev-networking branch
gona take a look thanks sswires
it might not be on github, i don't think they have the sample projects on there
P4 if anything
well maybe they don't have the sample projects on github
but they are making a reference in the github on that branch you say
right?
Anyone know where abouts the replication graph stuff is in the source?
for anyone insterested on what sswires said https://github.com/EpicGames/UnrealEngine/commit/f77fd90e90be32359ad7268b9c0b39ade4809bc3
Cheers mate
LogNetPackageMap: Warning: FNetGUIDCache::SupportsObject: ParticleSystemComponent /Game/ThirdPersonCPP/Maps/UEDPIE_1_ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.BP_Twinblast_C_0.ParticleSystemComponent_86 NOT Supported.
LogNetPackageMap: Warning: FNetGUIDCache::SupportsObject: ParticleSystemComponent /Game/ThirdPersonCPP/Maps/UEDPIE_1_ThirdPersonExampleMap.ThirdPersonExampleMap:PersistentLevel.BP_Twinblast_C_0.ParticleSystemComponent_87 NOT Supported.```
only started happening
I have a question about general session creation and session join, I've been using the NULL subsystem for this, when I create a session with a player (without server travel) and I dump the session details it shows 0 Registered Players, if I then join that session with another player (no client travel) and dump the session, it still shows 0 Registered Players also no players seem to be in that session from the NumOpenPrivateConnections. Do I require to travel to a Lobby Map in order for these players to register and start updating the NumOpenPrivateConnections?
How do I correctly get the ping of a server in my server browser? I am currently using in BPs: Session->GetPingInMs, but that one doesnt seem to be accurate or update unless I refresh the server browser multiple times, whats the best way to get the ping of a session, and update it every second?
You want every client to ping every server every second ?
Sounds like a really bad idea π
Maybe ping it a few times on server browser refresh, and then get the median value of all pings? the way I do it right now displays too high pings
Pings aren't meant to update after you received the list. :D
But the pings from the logs ('found server xxx with ping xx') seem to be much more accurate than my server browser pings
tbh
There are some external solutions
Just need to make something to ping current city to target city
or region
Depending on how much data you can get from each player, can be super accurate, or semi-
I was thinking about using GameSparks to do that eventually
But I think there are some other (maybe even better) solutions
Hi guys, got a weird behavior with my MP Game ....
Yeah pinging region is how rocket league works
It pings itβs server farm not the instance of server itself
FPS game, when a client connects, if the host character is running around, then the client see the host player in the wrong spot !
Then when connected it can run a routine with a time stamp message to get time sent time returned for live ping and split the time
anyone has a hint for my issue ?
Movement in the pawn set to replicate?
yes, it replicates perfect if server host is not running around
the effect on the client is like the the local position of the character is being offset .. when i just look around on server, the client then see my skin move around my location on a big circle ... not sure how to explain properly
so I have the server spawn a bunch of cubes at begin play, but theres horrible "pop in" effect as the actors become relevant (?)
I want to be able to see them on the client from a distance
so okay I thought I should spawn them on the client, however that doesnt seem to work
I dont know what to do to fix this issue, theres gotta be some conceptual thing I am missing here
its just static objects
i should be able to see them from anywhere without communicating with server
anyone know why my dedicated server game i hosted on ec2 might be 4.5 GB in ram use? if the answer is textures, i already set compression to 512, many of them are 4096. does unreal use the imported texture size in dedicated servers, or the compressed one?
nvm i figured out my issue i had to replicate movement and make it always relevant i think
B-ry if you spawn the actor using multicast it should work without replicates/replicates movement
otherwise yes you will need those.
I tried that
hm
it might be because i am spawning randomly sized cubes
server decides the random size
would it still work in that situation? because i tried a lot of things and it didnt seem to work for me
check the network culling setting ?
@prisma ore you would still need to replicate to use that yes?
so i could replicate, but have the pop in only for really distant objects?
the parameter is a distance (or distance squared, not sure)
so anything farther is culled
that did fix it, no longer need to always be relevant
im still a bit confused why i even need to replicate though, I guess its because i change the scale after its spawned
nah, you replicate so every other client see the same thing as you
you being the server
right. hm. but it seems to me like if its a static object that doesnt move during game the client could just be responsible for what it sees, and server just handles collision. but maybe im thinking too deeply about this
you are generating those objects at runtime, right ?
yeah I am. spawn random cube type at begin play, call a function on that cube type to get a random scale value
then use that random scale value to set its size
initially i was trying to use that random scale and spawn identical versions for each client
Once the cube has been replicated, if it does not move or scale etc then no network data will update it so you're not losing bandwidth
ohhh okay thats good to know
so its not constantly checking for changes
the clients arent
the server calculates a delta .. and if that gives a zero transform .. no need to replicate again
okay i see, thanks
yw
so why do you think it culls then? if you've seen the object once, and you move away... is that just so you dont have inaccurate/out of date information about the object?
it just hides it rather than giving you a visual on a potentiall out of date actor?
the culling is usually done to keep performance
performance for the client?
in this case, for net culling, performance with the network and a bit for visuals
i guess what i mean is, instead of just letting the actor exist as what you have most recently seen without communicating with the server, it hides it.
which makes sense especially for non-static things like players or enemies
sorry kinda just thinking out loud
cool. now time to figure out how to build the dedicated server and join sessions hah
what version of engine you on ?
im stuck on 4.16.3 for my project
why stuck, too much refactoring to update?
ya, that would require huge refactoring
it was my boss that created 99.9% of the game and all he had done in the past was MS Access stuff lol
ouch
he has impressed me actually
oh?
he knows the engine much better than me
always good to work with someone who knows more than you.
my knowledge is more with C# than UE blueprings
was this unity?
flash is a damn PITA lol
yeah no kidding
it was a nightmare for us too. there was this interface between python and flash scaleform
bleh
i mean once you got the groove of it, worked ok i guess but still a pain
i have clients sometimes getting a "flash not installed" message, yet they had not updated the version of flash
lol
then some players get back and say "clear your browser history, clean temp folder .. and it will work again" ... duh !!!
haha
Anyone want to help make mobile game please message me.
try #looking-for-talent @hazy herald
@winged badger itβs read only
you need to message the bot and fill out a form, there is instructions how to do it somewhere
yes, its pinned on the channel there
@twin juniper probably want to use GameLift instead of EC2
Wasnt there a gitHub repo exactly for that
anyone can help me with a strange case when client is connecting?
has anyone got VOIP working with the Null subsystem on 4.18?
not me, sorry
I have a problem with my respawn system. I dont wanna fill up the chat with screenshots so if you can help, pm me
@marsh gate hey. was looking into this. as long as the code overhead is not too bad i can try it. saw they have some kind of automated downtime and dynamic instancing for diffrent times of day. i am totally fine with a ded server staying up for 24/7, just need to focus on optimization and trying to get the graphics util down to below 4GB for my dedicated server build. i am fairly certain the problem is coming from my graphics. so since i add in like tons of 4096 maps, it might be causing it. problem is i got some of my assets on the marketplace, and they were imported from other users hard disks do i dont have access to the original texture files. would be happy to manually convert everything in a batch image resizer, just need to figure how to get at all the files. if anyone else has any idea why a dedicated server build might be taking up 4.5 GB for the exe please let me know, would love to hear ideas on that. trying to get it down to under 4 GB so my ec2 pricing is halved ($40 a month instead of $99 a month).
I know there's a lot of performance analysis tools that UE4 comes with @twin juniper
I have never used them before, but I know it is extensive
Hey guys I'm trying to run my dedicated server but I'm running into this error
that's such a random error, missing sky sphere? Idt I ever even touched a sky sphere
are u talking about this stuff here https://docs.unrealengine.com/en-us/Engine/Performance . currently reviewing.
for that error did you fix up redirectors on the appropriate folder, and try repackaging?
make sure there is no dangling references anywhere to anything you might have imported from marketplace?
this is kind of a silly question, but I guess functions that arent marked specifically as client or server can be called by anyone?
and follow up question, if this is the case; why mark something as Client or Server instead of having if statement and checking the actors role? cleaner code?
nvm i did some reading and i understand it better. its more along the lines of when a client wants to call a function on server and vice versa
rather than determining if the code should be executed (although it does sorta do that but thats not the main intent)
@twin juniper yup, you found it π Looks like many of the performance tools are there. Regarding your case, perhaps this may be of use: https://docs.unrealengine.com/en-US/Engine/Performance/GPU
I have no imports from marketplace, but I'll check redirectors
hey guys
i am using advanced steam sessions and i am using this: to make a friend invite system
the event doesnt get called
only on session recieved
this is my gameinstance
@thin stratus ?
@umbral adder when is the event being called? Does it ever get called?
if it is the case that it's never being called, the issue is in another part of your code where the Event on Session Invite is being called
Not in the implementation of the event
So where is Event on Session Invite Received being called?
are you using two steams, on two different computers?
Send Session Invite to Friend's implementation is what calls Event on Session Invite Received?
yes
- Play game
- Go to the BP you want to debug
- On the top right click "debug filter"
- Select your BP
- Observe red lines demonstrating nodes being executed
more efficient than print strings
ohh ok
@twin vault party?
no
just sent 1 invite
@marsh gate does bp debugging work with blueprints?
and in standalone build?
ok
what's a standalone build?
ayyyyyyy
Yeah I've used standalone a few times
@marsh gate no thats just the invite part
Idk if it works with debugging
steam works only with standalone
its called lobby* not party, i though you needed one to invite π€ but seens you're inviting already
standalone is like the finished model which acess other external libs
yea @twin vault the received part is not working
ok i joint session
but
i have a session ivite interface
on session received is not working
anyone know who is advanced sessions creator?
any ideas?
Hi, i have a question. Upon a client joining a session and traveling to the map. What would be the best way to spawn UI for that specific player?
HUD Class
@narrow trench
===
Hey I have an advanced session question,
What is local player num
Thanks
How do I distinguish between host and clients in HUD and new connections in general
there is a isserver bool node
@umbral adder call it from the playercontroller works like this
@narrow trench HUD is probably going to be deprecated or renamed to "PlayerScreen" (according to an already-old livestream) soon. It's best to avoid it and use 100% UMG, especially since HUD doesn't add anything new. You distinguish between host and clients by using SwitchHasAuthority.
Ive been looking at this: https://wiki.unrealengine.com/Authoritative_Networked_Character_Movement#Boost_Dodge
question about the following:
{
ServerSetMoveDirection(MoveDirection);
}```
ok
doesnt this mean that the simulated pawns will call the serverSetMove ?
and isnt that bad?
or do I misunderstand something
@twin juniper get player controller id returns 0 right?
and u dint answer my question
waht is the meaning of it
yes for self, i think its some kind of strange conversion or something to convert it to be used by the networked voice.
all i know is, that code works :>
i always call it from self in playercontroller
ohh so it doenst return 0?
ok
i dont get 1 thing get player controller id retruns the net player id or local?
just looked i think it does
you have to convert it to "byte" i blieve
believe*
to be used in that networked voice call
i am unable to understand
nvm
and it can be any player
like player 1-8
ok
it works for me
when i press the button and any player tries
not just player 1
with steam?
yeah
i use steam online subsys and advanced sessions
somteimes packets drop
and mic dropouts
but it works
make sure to add the aadvanced session voicelines like mordentral states on his advanced sessions forum page into defaultengine.ini
should work.
when u hold it activates for u only right?
yep press and hold for me
i actually have an image that shows up too whenever a user presses it. so people who who's talking
so you can add that to a widget if you want to get people to see who talks
so if you exec the mic on and mic off events on server, you can set the var in an array
and then turn it on that way
i can do that thanks
i am a terrible programmer lol so i have bad code
yea np just an idea of how to do it
and yea i think like in OW although havent played recently haha
are u making a full game?
yes
u 2?
6dof?
six degree of freedom game like descent from the 90s its a space clone
closed levels, full multi
ohh yea i think u sent a screenshot
and i think i helped u afaik
lol i think so
ohh i got dedi long ago π
ye ec3
same
but i stopped becuase no money π¦
dude my instance is 4.5 GB because.. textures probably. so i am paying 99 a month rofl
if my binary was just under 4gb i coudl pay less..
just using null servers
hrm?
thinking lol
are you gonna post to steam, mine is on steam. glad i did.
@umbral adder What's the Discord post for?
my game
#old-rules :P
...
sorry
:P Okay
π
i was working on a lobby/ party template that ill be posting to marektplace
cool. dont forget to look at the MP right now dude there's some amazing stuff. i went on a spree. a literal spree. i got like i think 5 multiplayer assets already.
?
marketplace summer sale π i sorted by low priced and kept going for like 30 pages loil
took me 4 days
i better get going. ttyl
Anyone here have experience with dedicated server instance performance costs?
Like in personal experience, how much processing power and ram does a single instance of a typical ue4 project take up?
Trying to figure out costings of running all our dedicated servers on amazon EC2s, and how many game instances we can run on a single server instance
@hollow patrol i've done this.
the process is fairly lengthy (took me about 3 days to get everything working at full blast), but once it's up, it's really fun to see working π fire and forget. i use t2.large for mine, the cost is roughly .13 per hour and 99$ per month. if you use t2.medium, your ram must be below 4 GB, and you are looking at roughly half that cost per month. you should run your game server.exe with -log enabled in a shortcut to see the console, and test your ram util / cpu util on your local machine first. that way you can gauge what you'll need instance wise by looking at the process details in the task manager of your machine.
hope that helps. let me know if you need some general paradigm advice on setting up the dedicated server. i have a friend on here who walked me through the whole thing.
@twin juniper yea. Thanks for the insight. How many servers can you run on a single large instance?
is all these 5 widget different or same?
Does PlayerState get destroyed/cleared when a player dies?
I'm getting strange behaviour where my variables are not being saved when a player respawns
do you destory the pawn and again possess?
yes
send the error screenshot
is that a new controller or something?
I'm storing the current weapon in the player state as an enum, and when the player respawns I want to give him the gun again from what he had selected before
it doesnt get destroyed
but for some reason, the weapon enum is being reset to default even if the palyer changed weapon
make sure when u spawn the weapon get it from ps
@hollow patrol i am running one server. if you try to run more than one, you will need to do some kind of port setting for it. if you run more than one you can go up to the mem cap - but just make sure to keep all TCP / UDP / ICMP open with ec2s
We use playfab for instance management. So launching multiple is easy
Do you know what your RAM per instance cost is?
I'm casting the PlayerState to my own CustomPlayerState that I've created and when I switch weapon, it's like nothing is happening to that state (I'm stepping through with debugger and the variables don't update)
did u select the player state in the gamemode?
yeah
playerstate take 2seconds to load even with a good pc
so add a delay
or
did u update the player state after weapon switch?
what do you mean 'update player state'?
when u switch the weapon cast to player state and set the variable
yeah that's what I do
I actually call a server RPC to switch weapon
but that variable is replicated
I've also got a client RPC call inside the server switch weapon rpc just to make sure it's updated on both server and client
that was just for testing
...
what? π
john galt tutorials?
@thin stratus can u make a doc on online beacon
can u explain it to me?
In this video, I go over what is a Steam Party and Online Beacons. Available on the UE4 Marketplace: https://launcher-website-prod07.ol.epicgames.com/ue/mark...
such a nice intro with such an ugly border over it
Does player state have issue with running multiple instances in editor? Because my switching weapon works for one of the clients
and the second client seems like it uses the same state as the first client
Use data breakpoint then
I'm also interested in understanding how to use online beacons for the party system, but I've seen some stuff in the engine like the OnlinePartyInterface that makes me wonder if beacons are really needed for this purpose
but I guess explaining that beats the purpose of selling the party plugin on the Marketplace
working on it
btw, he made a vid i think https://www.youtube.com/watch?v=RLOog4locQE
See how to send data over the steam beacon network. A new blueprintable SteamBeaconPlayerState class for your game specific data. Available on the UE4 Market...
I'm still learning by looking at the engine and examples
I'm right now trying to understand why beacons would be necessary for a party, I think you cannot join a session unless both client and server call their respective travels into a new map
so there is a lot of examples in the OnlineSubsystemUtils module
if you dont use beacons youre bound to platforms wich implement the interface, steam, xbox, psn...
u want to dm someone but to do that ull need a connection
usally ull have to join the session to connect up
but with beacons its just simple tcp/ip stuff
its the base for ue4 networking
but if I do care about the platforms that implement it, is it worth it?
beacons are necessary
like i said DM's, u would at somepoint have a friend chat
and u wouldnt want the friend to join u just to chat
so yea beacons are necessary, always ue4 uses it π
oh ok, I'm just not used to them, I need to understand them first, I have a long way to go I guess
yea
not much tutorials or docs
either
lets be friends and keep in touch
cedric_eXi h help would be appericiated
hi!
It seems to me that Net Update Frequency is different for the client and for the server
is that correct?
in my game, my pawn has a NetUpdateFrequency of 10.
The server sees the client move quite smoothly while the client sees the server move in a jittery manner.
What gives?
steam? @daring arch
not using steam.
this is confusing: it seems to me that the server has a different Net Update Frequency
everything is smoother on the server than it is on the client
either that or the server has some sort of built in interpolation
any ideas?
Whats the best way for a player to pick up another player? Should I be doing this by mounting the player onto another and then restricting their movement input?
Not restricting their movement input, just restricting their movement. You'd have a property like bIsPickedUp and you'd check this on every movement operation
You don't want to prevent players from even sending inputs to the game
Imo
@icy nacelle
Yeah movement is what I meant, infact I've already sorted out that stuff using a bool variable
I'm thinking about more on how I should deal with picking up the player
You can attach the two pawns together
Yes, I'm trying to figure out how to do this.
if you're using regular character class, probably not possible
π€
like outright attach them
picking up a player sounds difficult
definitely need some customized character movement
Guys how do I make a multiplayer match for players to join
That's what a session is right
Can I make it via BP?
I added in some code into GameSession::RegisterServer()
Idk how to connect to it though
Or how to even see if the session was successfully created
How can I see if a session has been successfully created?
- You just do it, try PinnedMessages
- Yes
- Yes
- K
- Watch/Read tutorials or PinnedMessages code
- Simple Debug Print String will do or logs, or the fact you travelled OnSuccess to new map
- See 6
@marsh gate
Thanks Victor :)
Can someone explain to me when I should and shouldnt use the custom flags in the character movement component? For example, they use it for crouch and the wiki has an example with dodge where they use it...
but im not understanding the benefits here. like i know it compresses the boolean with other stuff
but then it has to do some wacky stuff with the simulated proxy characters
idk its just freakin strange, and it works for me but it doesnt show the animation for other clients when i do my dodge/dash right now.
I know its a loaded question, but maybe someone has experience adding a dash or dodge mechanic, and maybe they know how to get the animations to play for players other than yourself
are you playing the animation through the blueprint?
yes I am @meager spade
the AnimBlueprint sorry
I am calling a getter function which gets the bool which is part of the compressed flags
yes anim blueprint
i am getting the bool in the anim bp
the flag gets set via client input, so it makes sense the simulated proxy wouldnt have it set. but im not sure how to set it, or if i should be using a separate boolean thats replicated
theres a bCrouched in the Character class that is separate from the bWantsToCrouch (which is the compressed flag)
so i was trying to do that but idk
not sure where I should set it to true/false in the whole process
yeah thats what i was trying to do... Im probably not setting it to true int he right place
but im not sure where that should happen
blueprint or c++?
how are you querying it in the Animblueprint for the dash?
based on the Movement Mode?
i did mine via a bool which gets removed then the dash is finished
no no, not movement mode. Im just getting bDashed by callling IsDashing, which is a C++ function
isdashed exists in movement component
isdashing*
so you would need to replicate bDashed to all clients via a repnotify
that sort of thing you trying to achieve?
I wish i hadnt used the compressed flags... its making this more complicated
compressed flags?
oh right, yeah i use Gameplayabilties
and reference a set tag
those bools should be replicated though for multiplayer?
Any AWS gamelift users having issues with 4.19?
uhhhh well, it works like i see myself dash functionally is correct
the only issue is
the other players dont have the animation playing
they move correctly and everything
its just the damn animation
i keep hearing about gameplay abilities i should probably be using that
@dull stream only thing i can think of is you need to replicate the bool
so all clients get it
When I apply damage to a character, and then set the player state health..... and then do a (on-rep func) with the health being set, to show on the widget, there's a small delay?
how small is the delay?
I would say 0.3 to 0.8 seconds
so 300 milliseconds to 800 milliseconds
Ah, I figured it out
Was set to 1 and 2
So I always get an error creating session anyone know how to fix
ok thanks Kaos. I will probably end up reworking this stuff to use gameplay abilities anyway
but i do want to understand why its not working first
so I'll keep at it
@fossil spoke do you know how to connect to an online beacon?
Not yet, im close to needing to know that myself. However here are a few links for reading material if you havent already done so.
@rough iron Wrote that last article on the Wiki.
Cameras shouldnt be replicated right?
@agile lotus The PlayerCameraManager class provides Server Side information on Camera Location/Rotation information.
For Clients
But typically you would not replicate a camera no, i cant think why you would outside of the default state of the PCM.
using a shared camera and was wondering if it was a good idea to replicate it or let clients do it
if its already handled by the PCM then thats good
For your game i think you should let Clients manage their camera themselves.
thanks for the tip π
Good luck
@fossil spoke thx
π
π
Is it OK to store widgets in player state? e.g. I'm trying to implement a kill feed and even when the player dies, I still want the player to be notified of deaths
yeah I'm wondering if that's a good idea or not - perhaps there's a better way
but when the player is dead does he still receive updates?
because destroying the actor will destroy the widget wouldn't it?
my assumptions π
wait but don't you have a reference to that widget when you first create the character?
where are you creating this widget by the way? we might be talking about different things
i told u to create it in hud class
HUD class is outdated now isn't it?
no
its just not used that much
reason being you can use a is locally controlled bool
but yes its not used much
hmm ok thanks π
π
@scenic tangle Yes, yes it is. @umbral adder Should stop promoting it. Epic themselves said, in an older live-stream, that HUD will either be deprecated or renamed and repurposed. They use UMG in Robo Recall and Paragon. Period.
OK thanks for the info vlad
hud class in the gamemode is just used to create widget's whats the harm in that?
instead of using a bool node and checking if its locally controlled?
It's the equivalent of coding in Notepad and that's it.
π
If you want to be stuck in the past, go for it. But don't teach others to do so as well.
so where is preffered to create widgets?
Using the HUD and UMG aren't mutually exclusive; like Decode said, you can use it to spawn UMG widgets. If you're using it to manually draw things shape by shape however, that's a different story. π
@scenic tangle Think of UIs this way: the engine was built for multiple local players. Each of these has an APlayerController actor associated. Each of them also has a screen associated, which isn't easily "visible" in BPs. Ideally, you'd create/destroy UMGs in an APlayerController subclass, because you're going to use that anyway, but HUD is just as optional as an APlayerState (sure, the engine creates all that stuff by default, but routing every single bullshit through some of those classes will just end up with a ARK/PUBG/ConanExiles-like performance).
btw Vlad, do you know about online beacons if so could you tell me how to connect them?
The usual "single local player" type of game is just a particular case of what I said above and works the exact same way.
I know a bit. I'm not going to tell you. I read every single line that's being written in this channel and you're the kind of person who takes my whole arm if I lend you a hand. Read this: https://answers.unrealengine.com/questions/467973/what-are-online-beacons-and-how-do-they-work.html
If that doesn't work, just mention Cedrix (eXi) again. I'm sure he's enjoying it.
hahaha OK Vlad, cheers for the helpful advice
I don't want terrible performance like those games π
Anytime!
i read that Vlad. but it doesnt tell us how to connect or pair them
is it a simple join session?
plugin?
ya
also: official docs: https://docs.unrealengine.com/en-us/Gameplay/Networking/OnlineBeacons
Hey everyone,
I noticed that this is covered very little in the official docs and around the web. You can find tidbits here and there, but not a full example that
free tut
thanks
also is it necessary to
[/Script/OnlineSubsystemUtils.OnlineBeaconHost]
ListenPort=7787
BeaconConnectionInitialTimeout=48.0
BeaconConnectionTimeout=49.0
[/Script/Engine.Engine]
!NetDriverDefinitions=ClearArray
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="/Script/OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")
+NetDriverDefinitions=(DefName="DemoNetDriver",DriverClassName="/Script/Engine.DemoNetDriver",DriverClassNameFallback="/Script/Engine.DemoNetDriver")
+NetDriverDefinitions=(DefName="BeaconNetDriver",DriverClassName="/Script/OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")
put this in the config?
nvm its necessary
can online beacon functions be accessed by blueprints?
i see virtual void OnClientConnected(class AOnlineBeaconClient* NewClientActor, class UNetConnection* ClientConnection) override;
in c++ but is it exposed to blueprints?
...well doing the saved moves and compressed flag stuff was great and all, good learning experience... but screw that. Im gonna learn gameplay abilities rofl.
i have no idea where that custom flag is being set by server, and i have no idea why I couldnt get it to replicate to simulated proxy... I ended up just brute forcing it out of frustration and setting it in tick rofl. works but this whole thing needs to be reworked π©
the networking and client prediction in movement component makes my head hurt
I'm having trouble finding any created sessions, I can host and bring clients into online matches if I use party beacons but I'd like to have a server browser too for people who don't want to join a party
Hey @dull stream have you read https://gafferongames.com/tags/networking ? I found it very useful
in some of those articles he covers prediction
using Advanced Sessions it finds nothing and using the standard find sessions it fails to search
@scenic tangle Nah I haven't but I'll check it out
Why does this tutorial https://wiki.unrealengine.com/How_To_Use_Sessions_In_C++#Creating_a_Session use a class that extends UGameInstance rather than using AGameSession?
I thought AGameSession was supposed to handle the entire flow of creating a session and logging players in
Even here https://github.com/Noesis/UE4-ShooterGame/blob/be00fa829e08aaeb0a371331bf17c1f23ddf9914/Source/ShooterGame/Private/Online/ShooterGameSession.cpp#L200:27 why is there both HostSession and RegisterServer
Oh I see
it's when it's a dedicated server
by itself
Is there any good documentation anywhere that explains how to use the networking especially the stuff that should prevent hackers/cheaters to teleport around or exploit network variables etc.?
clients can only affect the server via server RPC
and can only push a variable to the server as an argument to the server RPC
all of them come with bool MyServerFunction_Validate(params); function that you have to implement by default
which is, aside from some special use cases, like Server instructing clients to disable user input for a bit, enough to prevent clients from cheating
listen server host is entirely different subject
so I should avoid using client RPC functions when doing things that only the server should be able to do e.g. teleport players around
server is absolute authority
when it client RPCs it notifies the client that something in its PlayerController hierarchy changed
has no affect on cheating
client can for example hack his location, teleporting, locally
maybe ill understand it better with an example, how would this scenario secure against hackers: we have the player who needs to speak to some npc to fast travel somewhere, what kind of network functionality would you be using here
on the server, and as far as any other clients are concerned the location of the would-be cheating client will not change
if he does that
next update for the client's character, server will replicate the location again and correct him to where it should be
in your example
say player presses E key to interact with the NPC
that is mapped to InputActionInteract in your ProjectSettings/Input
yes, so on the server there would be a check if he is within the range of this npc
else it could be faked and he would be able to fast travel from anywhere theoretically
and your, say, PlayerCharacter blueprint has a node to handle that input action
from there you just do a ServerEventInteract, replicated to server, reliable
and let the server handle all the logic required
is the NPC in range, did the player complete a required quest...
and I would be using a UFUNCTION( Server, Reliable) void ServerRPCFunction(); for this
alright so in the XX_Validate function I would be doing all the checks or?
that function will just drop the client
if it returns false
so no, you should be catching cheaters explicitly there
and nothing else
yea that is what I meant, check if player is within range of npc and quests etc.
you don't want to boot a player if he pressed E while being a meter too far from the NPC
no but the client shouldnt send that interaction if he is too far away anyway
basically ServerRPCFunction_Implementation() should handle the interaction
as it if were a single player game
and just ClientRPC the results
back to the player
like NPC is in range, and available for a chat, you should open a dialogue window now
Alright I think I understand it now thanks
I got another question with this server/client thing, so basically if I want to hide some server logic for example a database connection from the game.exe how would I do that
the end goal is to have a dedicated server that connects to a database, and there would probably be a few things that I would prefer wasnt available in any of the exe/dll files the client needs to play
dedicated server has a separate build
you wouldn't need to hide it because only dedi build would have it
my advice: get the thing to work now, catch the cheaters later
yea sure I just like to understand things before I work with it, but how does the dedi thing make sense, I guess my question is more like how can I split the c++ code for client and dedicated server
i have not worked with dedicated servers
but you would have some classes that exist only on server
easiest example: Component of a GameMode
and you would not package that class, or the database with your client builds
(educated guess now)
yea ofc not, just wondering if I need to make a seperate module that is only available for the server incase all the c++ code is packed to 1 thing that the client needs
that i can't help you with, probably not
np ill figure it out eventually
Hey guys! I've been trying to think of the best ways to handle this, and I thought it'd probably be best if I ask here before going ahead:
I've got a jailing system in my dedicated multiplayer game. Players are sent to jail for a certain length of time, and then released. If a player disconnects, their remaining time is resumed when they return. What kind of system should I create to handle this? I was thinking of having a timer on the player controller using 'Timer By Function Name', and then pausing it when they disconnect, and releasing them when the timer is complete. Are there any heavy downsides to using a system like this that I should be aware of? What would you recommend is the best way of doing this?
my biggest concern would be about the number of players, and if players can be replaced. Lots of memory use if theres a lot of players leaving
I dont know if theres an alternative though other than having a database?
Thanks for the response @dull stream, what kind of database would I be looking at creating? I'm already using a datatable to store all the items in the game, would it be using the same datatable system?
oh i meant like, legit database thats separate from the dedicated server that has information about your players
also you can't really write to a DT
I'd suggest a database as well
There's probably an alternative if you're ok with sketchy workaround for just-this-one-thing and just-that-one-server, but that isn't a good idea unless you can't avoid it.
yeah it might be "ok" to do it that way but its definitely not a good practice to be storing persistent information about your players, even if they are logged off
just think about if you had like, a million players and your server executable is storing all that memory during runtime
regardless of whether or not you had like, 10k people currently playing
it would still be storing memory about all 1 million players
im exaggerating the situation to convey the potential issue
sure.
and not only that
but you'd be storing the data all of players who ever logged in and not finished their sentence. (assuming you store beyond server shutdown)
ya
PID<->float really adds up fast
yeah it could be dangerous
Great, this is really helpful. I don't know anything about creating this type of database though, what's some keywords I can search this up to get a good understanding of how it works?
I have no idea. Never done it and know nothing about it. π
I see a lot of MySQL when I try and research the database, is this what I'm looking for?
so Im interested in the answer as well
probably would need some sort of sql backend. but idk how ue4 would communicate with the database. i know theres json stuff in ue4, and theres nodejs plugins
plugins to help make the process easier. but either way you'd have to have a separate server with a sql database of some sort, probably
if this is like an MMO with instancing and stuff
you'd have to have a database server
otherwise if its more like, say, Rust, you could get away with SQL on the same server
there's a few plugins to UE4 which assist with SQL and also doing JSON stuff
hmmm alright, looks like I'll have to do some research and learning π Thanks for your help!
Would it be good to store things like inventory and skill levels on the server also?
yes, unless they are temporary and disappear when you log off.
anything that is persistent for a long period of time. wouldnt want the players to lose their stuff if the server crashed or there was maintenance
everytime you created a new server build, like when you add new content to game, youd shut down server and lose all the stuff
if its on a database it wouldnt be lost
[2018.06.09-17.45.28:705][433]LogOnline: Warning: Async task 'FOnlineAsyncTaskSteamFindLobbiesForFindSessions bWasSuccessful: 0 NumResults: 3' failed in 15.022457 seconds
[2018.06.09-17.45.28:705][433]LogOnline: STEAM: Found 2 lobbies, finalizing the search
[2018.06.09-17.45.28:705][433]LogOnline: Verbose: STEAM: "gamedir" "unrealtest"
[2018.06.09-17.45.29:005][451]LogOnline: Verbose: STEAM: Server query complete '2' eNoServersListedOnMasterServer (No servers match)
[2018.06.09-17.45.29:005][451]LogOnline: Verbose: Async task 'FOnlineAsyncTaskSteamFindServers bWasSuccessful: 1 Results: 0' succeeded in 0.284243 seconds
Can someone help me figure out why I can't find sessions
@severe widget I've had a look around and decided since I'm a novice at databases, it'll probably be a good idea for me to download a plugin,
Does this look like the sort of thing I need?
https://www.unrealengine.com/marketplace/usqlite-database
(apologies for the tag π )
Yeah, he's got a lengthy guide on forums.unreal
Thanks for your help with this one mate, wish me luck π
Is there a way to do server sided line trace and if hit, it does client sided spawn emitters (without using an RPC ALL func) ?
hey guys, I'm doing a map travel after I create a session and I've noticed something is wrong with my game mode, looks like it's not using the overrided GameMode I set on the World Settings of the new map, in the URL I cannot find out how to pass in the GameMode and if I don't pass it at all it still doesn't seem to load the new one
GameModes are based upon maps I think.
@vocal dagger
actually
I'm wrong
For gameplay programmers writing C++ code.
here you go
answer
yeah I know, I set the GameMode in the world settings of the new map, but if I Server Travel (or OpenLevel with options) the new GM is not being used
No clue.
oh so turning off* SeamlessTravel may do the trick? hmm, no prob man you helped me with that link already
ok I take it back, well first my URL was wrong, then I thought my GM was not correctly set since I couldn't use my custom cheat manager from my PC set in that GM. Then I read this on the CheatManager base class commands only spawned in single player mode π
at least I got to learn more about seamless nonseamless and Travel_Absolute and Relative...
did someone give 4.20's steam auth a shot yet?
Can anyone help me figure out why I can't find sessions? I have a log here
[2018.06.09-17.45.28:705][433]LogOnline: Warning: Async task 'FOnlineAsyncTaskSteamFindLobbiesForFindSessions bWasSuccessful: 0 NumResults: 3' failed in 15.022457 seconds
[2018.06.09-17.45.28:705][433]LogOnline: STEAM: Found 2 lobbies, finalizing the search
[2018.06.09-17.45.28:705][433]LogOnline: Verbose: STEAM: "gamedir" "unrealtest"
[2018.06.09-17.45.29:005][451]LogOnline: Verbose: STEAM: Server query complete '2' eNoServersListedOnMasterServer (No servers match)
[2018.06.09-17.45.29:005][451]LogOnline: Verbose: Async task 'FOnlineAsyncTaskSteamFindServers bWasSuccessful: 1 Results: 0' succeeded in 0.284243 seconds
@twin juniper i use execute console command node -> open x.x.x.x without a port number for a dedicated connection, works.
@agile lotus any luck with your issue yet? the general process i use for testing listen servers with create and find session is by using two separate machines, and a steam test app id 480 in the defaultengine.ini file
What's easier / better for replication:
a) Play sound at location
b) Play sound component in BP
@twin juniper If you don't specify a port, it defaults to 7777. If your server is on another port, it will fail (if you run multiple servers, they will bind to multiple ports).
ok
Iβm trying to store a var across sessions using advanced sessions and I see that player controller is passed in. I created a var called left handed in my steam VR player controller and Iβm setting a local var in my character bp on possessed with it ... it seems itβs resetting?
Your PC and the Session stuff don't really have to do much with each other
The PC that you pass in is used to retrieve a specific user ID in the code that the Session Nodes use
If you want something to persists, you either use SeamlessTravel and use "OnSwapPlayerControllers" in the GameMode to pass the data over (Server). You'd need to replicate the variable after wards of course.
Or if you don't/can't use SeamlessTravel, save it somewhere local (GameInstance/SaveGame)
Hm, just to refresh my memory: Why can't I override an OnRep function in a Child of a BP?
.>
#feature
π
Footage from our 12-player session for a new gamemode we're testing. More info: http://www.tomlooman.com/switch-dynamic-online-first-person-shooter/ Core rul...
Could any tell me how would you achieve this setup of meshs
So we have to have 2 meshs?
Please @ me
I am getting Removed Incompatible build whenever I am trying to search for sessions using the steam online subsystem
I am running the same build on two different computers with two different steam accounts, how come I can't find my session?
Soo, what do you think is "Remove Incompatible Build" then
and I still only see the same 4 sessions pop up
I know what it means, it's finding sessions of different binaries. But I am hosting a session from one computer with the same binary as what I am using to try and find it
how come I'm only getting 4 sessions when my search results number is so high?
@umbral adder One Base Weapon class, two child classes.
Each having their own Fire Weapon Implementation, Animations, Meshes, Sounds, etc.
@cerulean hamlet Well, Steam uses a Presence system, means it checks for your region, friendlist, friends etc.
That sadly has the problem that it often fails to find session if you aren't in the same download region as your friends
I see
And I wouldn't trust the log there too much
So I've set both steam accounts to be US - Boston
I haven't had issues using a custom AppID
Well it owuld increase the chance to find your mate
If you are on the same region
for a custom AppID I need to have my own app id right?
iirc, I have to apply for one correct?
I wouldn't worry too much atm. It's only for connecting and serverlist.
You can still code all the rest of your game.
And if really needed, connect via IP (or lan session + hamachi or what ever you can come up with)
You have to setup a dev account iirc and pay the 100β¬ or $
right
Then you should get your ID
But it seems like other people have had success with 480, I'm thinking I should also see it
is download server the only thing that matters for region?
As far as I'm aware, yes
And a lot of people have trouble with 480
You are far from being alone
Q: When do we have to rebuild the <Game>Server.exe for a dedicated server?
Q: Is there a way to cache building the <Game>Server.exe so that it doesn't take forever just for a simple change?
Do we even need to rebuild the server much?
I thought whenever I make a change to my game I need to rebuild the server
I'm probably wrong, I probably only have to repackage the game
The Variable "My Character" is only set on the server but it is replicated..
Why and how do i fix it ?
is the dedicated server on UE4 HTTP?
You need to rebuild the Server if you changed Server Code. @marsh gate
@thin stratus where can I edit server code?
Whereever you coded Server stuff?
@thin stratus You mean server code like any server has authority logic in a PlayerController for example?
trying to create a multiplayer, where each player is a rolling ball and they have to knock each other off a platform to win, but i'm having problems with the replication of the pawns/characters. Is there problems with replicating physics based movement for pawn movement?
@tired jasper im working on the exact same thing lmao
I haven't had any issue replicating physics movement so far
@funnygoose haha, mind sending over some tips? =D
What issues are you having
i havent tested over the internet yet but Lan works fine
Thanks ce
@marsh gate Google it and learn the questions your asking are out of range
Also Cedric I have tried everything but I think epic's fp mesh animations and tp animations don't match
Telling people to "google it and learn" isn't really a very positive message to be giving people seeking help. At the very least you could word it more politely π
Yea I get a hint of competitiveness among people learning in here where sometimes people come off a bit abrasive lol
@umbral adder hit marker? Collision detection? Sphere? Box?
no when u hit enemy player
Oh
ui displays a hit marked line
or crosshair
i have done it but its a bit intensive i think and i want to know an optimised way
Line trace
Then spawn the crosshair or effect as decal
On hit
Use hit normal to give the decal transform
No different than blood or any other particles you would do on hit
what's a decal transform and hit normal?
On hit and on overlap events
They return results and can break the results out
They have information like hit location, hit normal etc
Use that to execute a spawn decal node
Then from hit normal you tell the decal how to spawn and which direction to face
ok thanks
how is the gun being spawned?
i am not able to select it its also not there in the editor
is it being spawned in cpp?
and does the shooter example character have a camera?
@strong breach it seems when I use a standard static mesh pawn using applied force to move the pawn the client sees all movement but the server cannot see the client move and when the server comes in contact with the client the client snaps back to its original loc and then loses all movement control =/
But I was testing using steam over Internet
Does the player state stay on the server when the player leaves?
I am wanting to keep some data on the server and allow the player to leave and reconnect
Is that possible ?
@raven holly you have this not sure how up to date it is
https://www.google.com/amp/s/blog.maide.ca/2016/02/26/ue4-persisting-users-across-disconnects/amp/
Thanks mate
@worn nymph its up-to-date and anyways cedric only asked epic for that event π so all thanks goes to him.
@tired jasper yeah thats normal when you just enable replicates (im assuming thats all youve done)
im a super newb but you also have to send the move information to the server aso the server can see the client moving. Im still working on this part
you have to do something like (YOUR_MOVE_METHOD)_Implmentation and another verify method. If i can get it working ill try to help u more lol sorry if this doesnt help im confused myself
ah, thats where i'm stuck as well π
I had it working but i accidentally deleted my entire project file...
Ill shoot u a message when i fix it though
this is the kind of setup I tried first
but I think it was trying to set the location of the client at the same time the client was trying to move so the client was stuck in-place
Anyone know a technique to avoid jitter on listen server? on clients i can just interpolate between the client position and the server position, obviously if i do that on the server it will have the wrong location, i though about just interpolating the mesh, while keeping the actor on the correct place, but that would cause to the physics asset to be on the wrong place
oh im using c++
our games are the exact same thing lol
but its not stuck i dont believe i think the server is just updating its position (which is just sitting there) thats why its kind of jittery
just guessing here but i think you need to update the simulated proxy on the server's position (which is the ball the user is not controlling on the server)
hmmm, i'll have a read about 'simulated proxy' π ...I also get this error message: "LogNet: Warning: UIpNetDriver::ProcessRemoteFunction: No owning connection for actor BP_MasterBall_C_0. Function RunOnServerEvent will not be processed."
May have solved it with this setup... I need to test online still but i'll let you know (Y)
hey guys, does anyone know how I can travel into a LobbyMap without setting the session state to InProgress?
as soon as I create a session I do ServerTravel into this URL /Game/Maps/TestMap?game=/Game/Gameplay/GameMode/FNTestMapGameMode.FNTestMapGameMode_C?listen?bIsLanMatch=1
that changes my session state, then if I don't have bAllowJoinInProgress I cannot find the session anymore
ok in case someone comes in here later, it looks like if you open a map after you create a session it will set the session state to InProgress, I think I can either 1. Update the session to Pending on the "LobbyMap" so that other players can find it and join or 2. Maybe I can open the map with the listen parameter and there create the session. I'm not even sure I need to open a map with the "listen" parameter, I think it's unnecessary
@fleet sluice Does UWork have party functionality ?
My OnRep_EmitterSpawnLocation() doesn't get called when the variable get's changed :/
Can anyone tell me why?
header
@arctic willow the location has to be set on a Server of Multicast function call, you need ServerHit or something similar that can replciate the information and call the OnRep. Also make sure you set the variable to replicate in GetLifetimeReplicatedProps
Yea my bad lol
make sense, i try that thx @shut gyro !
i tried that but still it didn't called the OnRep function
Call OnRep in the Server function as well. Pretty sure it needs to be called directly
yes they need to