This doesn’t solve the problem though…
A module is still loaded separately between server and clients. A change made by the server won’t be seen by the client.
This doesn’t solve the problem though…
A module is still loaded separately between server and clients. A change made by the server won’t be seen by the client.
One piece of code that propagates between the server and client automatically is simply not possible. You must use a remote if you want to accomplish this. I suggested a common module because generally speaking, behaviors should be constant and see no changes during runtime. Why would you need to transmit changes across the network? What are you modifying?
The RaycastParameters.
It has to exclude the LocalPlayer’s character and the gun. The character can respawn and the gun can be added or removed.
The RaycastParameters have to change with them.
What you do is pull a local copy for each player (and for the server) and set the parameters in the copy. The module storing the behaviors should function as a provider. You tell it “I want a behavior for xyz gun”, it gives you a behavior for xyz gun. That’s how you make it so you only need to go to one place to get a behavior.
local Provider = {}
local FastCast = require(...)
function Provider.GetBehaviorForCoolGun()
local behavior = FastCast.newBehavior()
behavior.blahblahblah = asdfg -- Set all props here, except for RaycastParams
return behavior -- Then set RaycastParams from wherever this function was called.
end
return Provider
Did that whole idea get scrapped? If not it will be very helpful for me and many other people too.
I’ve tried many methods of hit registration, and none of them compare to FastCast. Combined with PartCache, you can have some absolutely insane hit registration without nearly as much headache as any other method. It’s fairly straight foward to setup and is almost perfect. I would highly recommend checking this out.
Also, a similar module works for melee, that i’d also check out (link here) he also has a similar module to PartCache, but PartCache is better faster
Hey EtiTheSpirit, I see that this is outdated in the title. If you have time, is it possible for you to make another tutorial for client replication? Thanks. Oh, and creating a separate model for it would be a great help. Thanks again!
I’ve read a few replies discussing how to make the client visualize the bullet. I’d just like to say that the code in the example laser gun model doesn’t give you exactly how you should do it, it’s just a very well-built hands-on reference. Many developers implement their own solutions.
Many games, like Arsenal - Roblox, sacrifices security for performance and quality. The bullets are managed purely from the client shooting it. What happens is:
Pros:
Cons:
Note: This may not necessarily be the best solution for all uses of this module, it depends completely on what you are using FastCast for.
How can I get the direction the cast came from in the rayhit event?
When I jump or am in midair, my cast won’t fire. Is this intented behaviour?
Hi, I have an issue;
Whenever I try to connect up RayHit
to a ray hit function, it simply doesn’t fire the event at all and it doesn’t work. Here’s my code:
caster.RayHit:Connect(function()
print('pew')
end)
Yes, I am 200% sure I fired the caster.
Yes, I am 100% sure I fired only one cast.
Yes, I am 100% sure I wired up the LengthChanged
event.
@EtiTheSpirit Excellent module!
I had one question on the FastCastBehaviour instance. Its not clear to me from reading the docs that the API allows me to manage the size of the projectile after its fired. If I wanted the bullet template to say grow larger as it travelled is that possible within the current API? And if not do you have any recommendations for the cleanest way to manage that?
Thanks for making this! I don’t think the game I’m working on would be possible without it, and it certainly wouldn’t be so far along in development without it.
I have two questions for anyone who can help:
Small suggestion:
Add projectile path prediction to simplify creating beams that indicate where the projectile will go.
Hi
I have a remote that the client fires to tell the server it wants to fire a bullet. The server then handles the damage to other players of multiple guns in a central script. I’m stuck however at how I can get the player that fired the bullet from the serverscript.
I’m not supposed to add the RayHit connection under the OnServerEvent connection, so is there a way to pass information to Caster:Fire()
that can be retrieved by Caster.RayHit()
?
When receiving a remote event from a client to server, the first parameter on server is the player that fired it, So for Example
in a local script
Local RemoteEvent = -- to the remote event
RemoteEvent:FireServer() -- add some parameters to your likings
in a server
Local RemoteEvent = -- to the remote event
RemoteEvent.OnServerEvent:Connect(function(Player)
--do the fast cast here
End)
I believe this is the solution you wanted?
Yes, I can call Caster:Fire()
inside the OnServerEvent, but how can I pass the player through to the RayHit
event?
Connecting the event under the RemoteEvent is not an option, since it should only be connected once.
Well couldn’t you just make a new remote event and use that remote event in the RayHit
event?
No a connection should only be connected once, not everytime the gun fires.