This is inspired by Event Part.NetworkOwnerChanged - #26 by Baumz, but that thread changed focus to diagnosing and fixing the OP’s problem specifically, So I’m making a new thread.
As a Roblox developer, it is currently too hard to know when Roblox’s automatic NetworkOwner system assigns a part to your client. The available BasePart:GetNetworkOwner method is not accessible from the client. (see also Allow GetNetworkOwner() To Be Called On Client - #5 by coplox)
I would like to use new events that fire when a part has its NetworkOwner assigned to or removed from the current machine. These events should be accessible from both the client and server, where they will fire from the context of that machine, rather than only the server.
This can be used to register Touched events for the machine that is simulating a rocket, for better responsiveness.
As the rocket passes between client and server ownership, the server and clients can connect and disconnect the Touched event on the rocket when they gain or lose NetworkOwnership, then process the explosion and damage if the event is fired. Otherwise, the rocket only has the Touched event processed on the server, and if it’s NetworkOwned by a client at the time, the rocket could bounce for a few frames on clients before exploding.
Similarly, Zombies could have their AI processed by their NetworkOwner to reduce response time.
A rolling ball that uses a Torque to roll towards the nearest player could have the homing logic processed by their NetworkOwner just like their physics is.
If Roblox is able to address this issue, it would improve my development experience because I could better manipulate Roblox’s physics on the machine that is simulating any specific part, while leaving the NetworkOwnership on automatic.
Thank you for your consideration!