Over the last few months, I have noticed people have been reporting that boss fights in my game have not been respawning. After further investigation, I found out that the entire map was mysteriously shifted off-center causing the boss fights and other important parts to spawn away from where they are supposed to be. To make things worse, I am unable to replicate this issues myself and players would sometimes get stuck in an infinite death loop because of the map shifting. I’m trying to figure out a way to stop the map from being shifted, but I have no idea how it could be happening (my best guess is exploiters). I’ve searched through several DevForum articles relating to anchored parts moving, but none of it seemed to be relevant to the issue I had with TONS of anchored parts (that aren’t even grouped together) being moved without any script telling it to do so.
Any ideas/suggestions on how this might be happening or a way to shift back all the parts in the map to the original position is appreciated!
Here is the death/respawn script for the boss:
local furious = false
local alldestroyed = false
local dead = false
script.Parent.Humanoid.Changed:Connect(function()
if script.Parent.Humanoid.Health <= script.Parent.Humanoid.MaxHealth / 2 and furious == false then
furious = true
game.ReplicatedStorage.WranglerFurious:FireAllClients()
game.ServerStorage.SpeedSparks:Clone().Parent = script.Parent.Torso
script.Parent.Head.Eye.Effects.Enabled = true
script.Parent.Head.Eye.Eye.Enabled = true
script.Parent.Head.Eye2.Effects.Enabled = true
script.Parent.Head.Eye2.Eye.Enabled = true
elseif script.Parent.Humanoid.Health <= 0 and dead == false then
dead = true
game.ReplicatedStorage.WranglerRocks.Parent = workspace
game.ReplicatedStorage.WranglerDefeated:FireAllClients()
script.Parent.Humanoid:LoadAnimation(script:WaitForChild("Death")):Play(0,1,0.50)
script.Parent.Torso["Boss Defeat"]:Play()
wait(2)
script.Parent.Head.Eye.Effects.Enabled = false
script.Parent.Head.Eye.Eye.Enabled = false
script.Parent.Head.Eye2.Effects.Enabled = false
script.Parent.Head.Eye2.Eye.Enabled = false
for i = 1, 10 do
for i, v in pairs(script.Parent:GetChildren()) do
if v:IsA("BasePart") then
v.Transparency += 0.1
if v:FindFirstChild("Face") then
v.Face.Transparency += 0.1
end
end
end
wait(0.1)
end
local s = game.ServerStorage.FuryGloves:Clone()
s.Parent = workspace
s.gloveleft.Position = workspace.TheWrangler.Head.Position
s.glove.Position = workspace.TheWrangler.Head.Position
wait(60)
for i, v in pairs(game.Players:GetChildren()) do
if v:FindFirstChild("Wrangler") then
v.Wrangler:Destroy()
v.Character:MoveTo(workspace.WranglerEnd.Position)
end
end
workspace.BossIndicators.WranglerParti.Value = 0
workspace.FuryGloves:Destroy()
game.ServerStorage["TheWrangler"]:Clone().Parent = workspace
game.ReplicatedStorage.RespawnWrangler:FireAllClients()
workspace.WranglerRocks.Parent = game.ReplicatedStorage
script.Parent:Destroy()
end
end)
script.Parent.ChildRemoved:Connect(function(child)
if child.Name == "HumanoidRootPart" then
for i, v in pairs(game.Players:GetChildren()) do
if v:FindFirstChild("Wrangler") then
v.Wrangler:Destroy()
v.Character:MoveTo(workspace.WranglerEnd.Position)
end
end
workspace.BossIndicators.WranglerParti.Value = 0
print("BOSS REMOVED WHEN ITS NOT SUPPOSED TO BE")
if workspace:FindFirstChild("FuryGloves") then
workspace.FuryGloves:Destroy()
end
game.ServerStorage["TheWrangler"]:Clone().Parent = workspace
if workspace:FindFirstChild("WranglerRocks") then
workspace.WranglerRocks.Parent = game.ReplicatedStorage
end
game.ServerStorage.EmergencyShutdown:Fire(script.Parent.Name)
end
end)
This is where the boss fight is supposed to respawn:
This is where the boss fight ends up respawning (screenshot submitted by a player):
This is the infinite death loop some players get into (screenshot submitted by a player):