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:
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.
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). https://www.roblox.com/games/891852901/Greenville-Beta
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.
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.
@k01t@Smeers, @pointclouded 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.
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.
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.
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).
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")
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.
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.
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)