yea i know it’s unavoidable for everything to be decently unresponsive, but i really want to figure out a method that will make my game feel better for players with +200 ping, while staying secure, since i know how horrible games can feel past that point
i just want to know if there’s some obscure method out there to somewhat do this
The way most games do it is having the animation and particles play on the client, and having the hit register on the server.
Then the client can approximate if someone was hit on their end, and play some hit effects.
If other players have to see particles, they can be sent a RemoteEvent to play hit effects at that location
This does mean that sometimes the client will think they hit someone that didn’t get hit. But it’s better to feel like you hit someone immediately than wait and see.
Here’s a pseudocode explanation of it
--Client script pseudocode
function OnAttack(attackData) --AttackData is whatever information is needed for your attack (animations, particles, etc)
attackData.Animation:Play()
clientFX(attackData) --Sounds, attack particles, anything the player should hear immediately for feedback
serverAttack:FireServer(attackData, workspace:GetServerTimeNow()) --Use GetServerTimeNow to sync hits on the server better
local hitRegister = checkHits() --Clientside Hit detection
if hitRegister then
hitFX(hitRegister) -- Play hit particles
end
end
--Serverside Pseudocode
function onServerAttack(player, attackData, timeStamp)
if attackData.Particles then
sendClientParticles:FireAllClients(attackData, player)
end
local serverHit = checkHits()
if serverHit then
damageHit()
hitParticles()
end
end
A practical application to explain this would be in FPS games - instead of waiting for the server to check if a person was hit, you can check on the client as well. While the server does get final say on things like damage, you can apply hitmarkers on the client even if the server disagrees with whether a hit was successful. This is what I mean by “Immediate feedback vs being correct” and is the trade off you have to balance when doing any sort of multiplayer game
i could give the player specific fx/sfx as the client detects the hit, to sort of build up to the real hit if possible, so it feels better either way, although that way if they miss they get to blame the game which is a problem but i’ll think about it