NetworkOwnership Issue is SUPER inconsistent

This is an issue that I have been experiencing for a few days now, and I have no idea why.

Basically, I have a plane that players can spawn and fly. This plane can also have multiple people be passengers while the pilot is flying.

I set the NetworkOwnership of the engine of this plane, which contains the BodyGyro and LinearVelocity objects for movement, in it. I then also set the PersistantPlayer of this engine to any players that hop into the passenger seats. They will be removed from PersistantPlayers when they leave the passenger seat.

However, there are some BIG issues with this. The pilot will take off, and the pilot will see that the plane is moving, but for all the other passengers, the plane will still be at the runway. Sometimes there will be flickering of the screen between the original runway and the location of the plane from the pilot’s perspective, as you can see in this video: Streamable Video
But, if the passenger jumps out, either the passenger will be randomly seated and then synched up with the pilot again, or the passenger will be left on the runway, and the plane will go away.

That is what happened when I, the creator of the game, was spawning and flying planes, with my brother, who is on a computer in the next room, as a passenger.

However, when he was the pilot and I a passenger, there were no issues, as seen in this video: testing weird glitch - YouTube

I have no idea why this happening nor how to fix it. Can someone help?

Is the script in a LocalScript, or Regular Script? Does it have to be in a certain one (i.e to connect to a player with LocalScript)?

It uses a local script to detect input, such as the player moving his or her mouse, and send it to a remote. A server script then picks that information up and uses it to edit the BodyGyro of the plane from the server

There are no edits done to the plane in any local script

Does the Regular Script affect anything to any other clients other than the player in the plane?

No. It is supposed to run the plane flying on the server, which is does given there are no passengers in the plane, but sometimes it will run the plane flying even if there are players in the passenger seats. It’s very inconsistent

The only thing it will effect for other clients is adding a player that sits in a passenger seat as a persistent player. Here’s some code relating to that:

local function detectSeat(whichSeat)
        if whichSeat:IsA("Seat") then
            whichSeat:GetPropertyChangedSignal("Occupant"):connect(function()
                local plr = nil
                if whichSeat.Occupant ~= nil then
                    local Humanoid = whichSeat.Occupant
                    local Char = Humanoid and Humanoid.Parent
                    plr = Char and game.Players:GetPlayerFromCharacter(Char)
                    self.actualModel.Engine:AddPersistentPlayer(plr)
                else
                    if plr ~= nil then
                        self.actualModel:RemovePersistentPlayer(plr)
                    end    
                end    
            end)
        end    
    end

if self.actualModel:FindFirstChild("seats") then
        for _,thisSeat in next,self.actualModel.seats:GetDescendants() do
            detectSeat(thisSeat)
        end
    end

self.actualModel.Engine:SetNetworkOwner(Player)

More updates to this issue.

So, I am using three computers to test this. My old AF Macbook, my new(ish) PC with a 3070TI in it, and my brother’s PC with a 1060 in it.

On my PC and my Macbook, when I am piloting the plane with my main account, CoolJohnnyboy, my alt on my Macbook can see us flying just fine, as seen here:

However, on my brother’s PC, who is also in the plane with us, this is happening:
image

The plane’s changes in gyro/orientation are being replicated on his end, but us actually flying and moving is not being replicated.

I have no clue why this is happening. My friend and fellow developer @Kyxino has said this has to be some sort of networking issue on ROBLOX’s end or my brother’s PC.