Replication bug with network ownership & joints

As of today, our cars in my game and many others that use the same base free model chassis script (A-Chassis by Novena) seem to have an issue with the joints. You can see what is happening in this video:


https://streamable.com/noj38k#


It appears that on the client who joined the game first, the joints and car drive perfectly fine. On the client who joined the game second, they do not work fine.

tl;dr of information I have gathered so far:

  • First player to join the server can drive and participate fine
  • Second player can’t spawn their car
  • Second player does not replicate position of the first player’s car on their screen
  • Spring joints seem to follow the wheel positions properly

I’m not really sure what could have caused this except that it was caused today about mid-day and many games are effected. My game works by inserting a car at runtime when the player asks for it, and then moving that car with MoveTo() to the player’s position. When a player sits down in the drive seat, they are given network ownership of the car.

It also happens in this game where I believe the cars are placed in studio and are already there in workspace when the server starts:

It also happens in our other game called Project Trackday which follows a similar set of instructions to Midnight Racing.

Links to games:

Edit: Thought it would be useful to link the chassis too:
This and the one before it are probably the most popular bases (unfortunately the model for the one before it has been taken offsale I believe):

This is the most recent iteration which has been released less than a month ago I believe:

25 Likes

We’re also experiencing this same problem with the game below. Our game functions similarly (with the same vehicle framework, and using MoveTo to relocate the vehicle to the player).

This issue only started appearing in somewhat recent servers (according to our group wall, the earliest mention of it was about an hour an a half ago). This makes the game unplayable entirely.

6 Likes

Having this same issue at my game. Started around an hour and a half ago as well, entirely breaking the game. Hopefully this change can be reverted/fixed soon as many other games use A-Chassis.

2 Likes

@k01t @Smeers, @Avxnturador and I have been trying to debug this and Avxnt said that changing the “JS” in the Initialize script seems to have fixed it…

Replace what is circled with a letter x and it fixes it. This is because JointsService is apparently no longer visible to both the client and the server and so any joints placed into there won’t replicate like they used to. Changing the parent to something still visible to both the client and the server fixed the issue.

I’m experiencing the same issues within the linked game. The spawner uses MoveTo and is also on the same vehicle chassis.

Issue is apparent even on an older update (6 hours ago) but on newer servers. Game is currently unplayable

CRU is experiencing the same problem but with a completely different chassis. Ours only uses JoinInstances with no constraints

The chassis works fine for the first few players that join the game, but physics do not replicate for the rest of the players. The cars fall through the ground after setting network owner to the player driving the car.

Another odd thing is that I am always able to drive the cars with the place owner.

4 Likes

Same here. I made a report earlier but it hasn’t been moved yet.

5 Likes

https://www.roblox.com/games/441585237/New-Kempton-V5#!/game-instances I Can confirm this is happening to us as well.

In the Initialize script, JS is the variable set to reference “JointsService”, and in the Instance.new constructor, the second argument (in this case, JS) references the Instance’s intended parent.

Thus, it appears that parenting Welds to JointsService (which is incidentally deprecated) is broken, and parenting those welds to the first part in the given function fixes the issue.

Given that this change was quick, I believe it may be related to a fast flag that Roblox toggled. This was (imo) the most likely flag, given that it relates to replication. Attempting to search for flags whose name included “Weld” or “Joints” returned no recently changed flags.

3 Likes

I did not realize that the joints service was deprecated, interesting. This was definitely the problem though and after testing for some time I can confirm it fixed our issue (JointsService must not be visible to both client and server anymore).

Wow, JointsService being deprecated? What is going to be annoying is replacing script sources with one that doesn’t break…

Not sure why were not told in advance, it would’ve been nice to be prepared.

When was the wiki entry updated?

For everyone who wants 6.81T with the patch that @bigcrazycarboy posted, here’s a free model (the original source is Avxnturador’s A-Chassis 6.81 T by Novena). https://www.roblox.com/library/5320957196/PATCH-A-Chassis-6-81T-by-Novena

(All credits to Avxn/Novena for the chassis, just added that patch.)

1 Like

I made a macro if you’re interested… Just fix one script and have it selected and then paste this in the command bar

local newSource = game.Selection:Get()[1].Source
for i,v in pairs(workspace.Vehicles:GetDescendants()) do
	if v:IsA("Script") and v.Name == "Initialize" then
		v.Source = newSource
	end
	if i%100==0 then
		wait()
	end
end

print("done")
2 Likes

With this all being said, it’s safe to say that this is unfortunately a false alarm and there’s no error, technically. A-Chassis is quite unoptimized and has a module for welds inside of it, using a part as the weld parent, so I assumed JointsService wasn’t the issue–but it turns out this module is basically entirely ignored/nearly never used and a slightly adjusted variant of the exact same code for welds in the initialize script parents to JointsService, so I didn’t think it was the issue until I triple checked.

Basically, because JointsService is deprecated, this is all technically intended/anticipated functionality and everything is normal.

9 Likes

The code for implementing welds for A-Chassis was written in a time where it was good practice to store welds inside JointsService. I don’t remember when it was deprecated, but it would have been nice to be notified of these changes.

1 Like

so basically just make sure nothing joins to joints service, that was a wild thing from start to finish lol

@Deferend thanks for the patch to 6.81T, haven’t touched that in a while and don’t want to

for the current version (1.4), the patch can be found in the official model here for anyone who needs it https://www.roblox.com/library/5181235975/A-Chassis-6-C-Version-1-4

if anyone else has more to add of course share here

4 Likes

Not guaranteed to work, but this might solve issues more quickly albeit in a less elegant way if you want to maintain support for older versions of AC6.

Server Script:

local _JS = game:GetService("JointsService")
local newTarget = workspace

_JS.ChildAdded:Connect(function(child)
    if child:IsA("JointInstance") then
        wait()
        child.Parent = newTarget
    end
end)
6 Likes