I haven’t touched guns on Roblox much until now. I’m trying to make a gun that is safe from too much exploiting but isn’t completely unbearable to use if the player has high ping. How would I go about making guns responsive and like they’re doing damage but not give the client full control over what they’re able to damage?
Remove models with a lot of parts and make them one part using model creating programs, and make sure there are no script errors in your game or gun scripts.
As is said about exploiting, never trust the client.
You could make the damage happen over a server script by placing the script in the bullets and checking in the server rather than on the client.
I’m not sure having individual bullet objects is the best idea for guns. I’ve heard raycasting is one of, if not, the best way of hit detection for guns. But anyways, what would the general outline of the system be like? Having a remote event for shooting the gun is a bad idea because if the player has 500 ping it would take half a second before the player actually shoots, which is just unbearable. So what would you recommend to reduce delay from the player’s inputs while still not trusting the client?
I’m honestly not too sure how you could make a gun work without using remote events?
You could try something called part caching (a plugin/module), which might reduce the lag of cloning and destroy parts.
Well, of course it would use RemoteEvents, I’m just asking about how you would make it look not laggy while still handling everything with a delay on the server. For example: if you were to pick up an item, have the client pick it up right when there is input but have the server do some checks then show the other players that the person picked the item up. In terms of a gun, I would worry about the client projectile getting desynced with the server and creating a “hey I shot here but that’s not where the bullet went” kinda thing.
In my game, all gun effects are client-sided. This gives me the advantage of say, having the gun firing instantly for the players.
Although right now my remotes aren’t the safest possible when it comes to exploitability, so far I haven’t seen anyone exploit (nor have I heard of any news about it). This might be a good starting point for a new game.
What I do is that instead of passing the player the person hit, and where they hit, instead I end up passing the actual local-sided ray. Once the ray is done, locally make the effects for the person, server side checks then if its clear, fire the gun effects for each other person in game.
Thats a hard question I think already big companies trying that getting keys from client and moving characters from other clients would be useful as an example if there is 5 players in one server server amount will be 5+1 and her client will post same number to other clients and everyones client generates 6 players I mean with basic informations you can give a server sided game effect but everything will be server sided and this all reduces lag like you can try messaging service to do that, foreverHD made infinite servers before you can try it, it will reduce lag I think but im not sure about guns they can broke but still you can fix it with some basic edits
So, just in general so somebody can confirm, the best way of going about this is to make the bullet shoot with sounds and animation on the client and then have the server calculate the damage right as it gets a request from the client to shoot?
Let me ask you this, have you ever played a multiplayer FPS game where your shots have always landed? You’ve never been killed through cover? I don’t think there is really a way, it’s just as much faking as you can.
Basically what I ended up doing is having the client show effects like sounds for the gun shooting and visual indications (animation and particles) on the client side as soon as they shoot. Meanwhile it fires a remote to the server saying where to shoot. When the message gets to the server, I do the raycasting and create a fake bullet model to look like the gun is shooting. Along with that, I play any sounds for everybody else besides the client who shot. This ends up creating a system where the actual raycasting and hit detection is at a delay, but the visual indications aren’t, so it ends up looking like there isn’t too much ping between the client and server.
Of course this system still starts to show its weaknesses when the player’s ping is pretty high. They’ll often miss their shots too. There isn’t a simple solution to this, but for the majority of the players connecting to servers where they have a good ping, it should generally be fine.