local player = game.Players.LocalPlayer local char = player.Character local tool for i,v in player:GetDescendants() do if v.Name == "SyncAPI" then tool = v.Parent end end for i,v in game.ReplicatedStorage:GetDescendants() do if v.Name == "SyncAPI" then tool = v.Parent end end remote = tool.SyncAPI.ServerEndpoint function _(args) remote:InvokeServer(unpack(args)) end function SetCollision(part,boolean) local args = { [1] = "SyncCollision", [2] = { [1] = { ["Part"] = part, ["CanCollide"] = boolean } } } _(args) end function SetAnchor(boolean,part) local args = { [1] = "SyncAnchor", [2] = { [1] = { ["Part"] = part, ["Anchored"] = boolean } } } _(args) end function CreatePart(cf,parent) local args = { [1] = "CreatePart", [2] = "Normal", [3] = cf, [4] = parent } _(args) end function DestroyPart(part) local args = { [1] = "Remove", [2] = { [1] = part } } _(args) end function MovePart(part,cf) local args = { [1] = "SyncMove", [2] = { [1] = { ["Part"] = part, ["CFrame"] = cf } } } _(args) end function Resize(part,size,cf) local args = { [1] = "SyncResize", [2] = { [1] = { ["Part"] = part, ["CFrame"] = cf, ["Size"] = size } } } _(args) end function AddMesh(part) local args = { [1] = "CreateMeshes", [2] = { [1] = { ["Part"] = part } } } _(args) end function SetMesh(part,meshid) local args = { [1] = "SyncMesh", [2] = { [1] = { ["Part"] = part, ["MeshId"] = "rbxassetid://"..meshid } } } _(args) end function SetTexture(part, texid) local args = { [1] = "SyncMesh", [2] = { [1] = { ["Part"] = part, ["TextureId"] = "rbxassetid://"..texid } } } _(args) end function SetName(part, stringg) local args = { [1] = "SetName", [2] = { [1] = part }, [3] = stringg } _(args) end function MeshResize(part,size) local args = { [1] = "SyncMesh", [2] = { [1] = { ["Part"] = part, ["Scale"] = size } } } _(args) end function VertexColormf(part) local a1 = { [1] = "SyncMesh", [2] = { [1] = { ["Part"] = part, ["VertexColor"] = Vector3.new(3,3,3) } } } _(a1) end function Weld(part1, part2,lead) local args = { [1] = "CreateWelds", [2] = { [1] = part1, [2] = part2 }, [3] = lead } _(args) end function SetLocked(part,boolean) local args = { [1] = "SetLocked", [2] = { [1] = part }, [3] = boolean } _(args) end function SetTrans(part,int) local args = { [1] = "SyncMaterial", [2] = { [1] = { ["Part"] = part, ["Transparency"] = int } } } _(args) end function CreateSpotlight(part) local args = { [1] = "CreateLights", [2] = { [1] = { ["Part"] = part, ["LightType"] = "SpotLight" } } } _(args) end function SyncLighting(part,brightness) local args = { [1] = "SyncLighting", [2] = { [1] = { ["Part"] = part, ["LightType"] = "SpotLight", ["Brightness"] = brightness } } } _(args) end function Color(part,color) local args = { [1] = "SyncColor", [2] = { [1] = { ["Part"] = part, ["Color"] = color --[[Color3]], ["UnionColoring"] = false } } } _(args) end function SpawnDecal(part,side) local args = { [1] = "CreateTextures", [2] = { [1] = { ["Part"] = part, ["Face"] = side, ["TextureType"] = "Decal" } } } _(args) end function AddDecal(part,asset,side) local args = { [1] = "SyncTexture", [2] = { [1] = { ["Part"] = part, ["Face"] = side, ["TextureType"] = "Decal", ["Texture"] = "rbxassetid://".. asset } } } _(args) end function Sky(id) e = char.HumanoidRootPart.CFrame.x f = char.HumanoidRootPart.CFrame.y g = char.HumanoidRootPart.CFrame.z CreatePart(CFrame.new(math.floor(e),math.floor(f),math.floor(g)) + Vector3.new(0,-9,0),workspace.Terrain) wait(0.5) -- Increased wait time for part creation for i,v in game.Workspace:GetDescendants() do if v:IsA("BasePart") and v.CFrame.x == math.floor(e) and v.CFrame.z == math.floor(g) then SetName(v,"Sky") AddMesh(v) SetMesh(v,"111891702759441") SetTexture(v,id) MeshResize(v,Vector3.new(20000, 20000, 20000)) VertexColormf(v) SetLocked(v,true) local skyPart = v local rotationSpeedX = 50 local rotationSpeedZ = 50 local rotationSpeedY = 50 local currentRotation = Vector3.new(0, 0, 0) game:GetService("RunService").Heartbeat:Connect(function(deltaTime) currentRotation = Vector3.new( (currentRotation.X + rotationSpeedX * deltaTime) % 360, (currentRotation.Y + rotationSpeedY * deltaTime) % 360, (currentRotation.Z + rotationSpeedZ * deltaTime) % 360 ) local baseCFrame = CFrame.new(skyPart.Position) local rotatedCFrame = baseCFrame * CFrame.Angles( math.rad(currentRotation.X), math.rad(currentRotation.Y), math.rad(currentRotation.Z) ) MovePart(skyPart, rotatedCFrame) end) break end end end Sky("107890308562822")