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 --craaa remote = tool.SyncAPI.ServerEndpoint local sc = remote 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) task.wait(0.1) for _, obj in ipairs(parent:GetChildren()) do if obj:IsA("BasePart") and (obj.Position - cf.Position).Magnitude < 1 then return obj end end 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 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 SetTransparency(part,int) local args = { [1] = "SyncMaterial", [2] = { [1] = { ["Part"] = part, ["Transparency"] = int } } } _(args) end function reflect(part,int) local args = { [1] = "SyncMaterial", [2] = { [1] = { ["Part"] = part, ["Reflectance"] = 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 local head = player.Character and player.Character:FindFirstChild("Head") head.Anchored = true local targetCFrame = head.CFrame + Vector3.new(0, 20, 0) local Cloud = CreatePart(targetCFrame, workspace) SetLocked(Cloud, true) SetCollision(Cloud, false) Color(Cloud, Color3.fromRGB(255, 255, 0)) AddMesh(Cloud) SetMesh(Cloud, "111820358") MeshResize(Cloud, Vector3.new(8, 8, 8)) reflect(Cloud, 0.5) Weld(Cloud, char.HumanoidRootPart, char.HumanoidRootPart) SetAnchor(false, Cloud) head.Anchored = false local function rainFromCloud() while true do wait(0.1) if Cloud and Cloud.Parent then local basePos = Cloud.Position local offsetX = math.random(-3, 3) local offsetZ = math.random(-3, 3) local spawnCFrame = CFrame.new( basePos.X + offsetX, basePos.Y - 2, basePos.Z + offsetZ ) spawn(function() local lol = CFrame.new(0,0,0) local newPart = remote:InvokeServer("CreatePart","Normal",lol,Cloud) if not newPart then return end spawn(function() SetName(newPart, "parti") end) spawn(function() SetCollision(newPart, false) end) spawn(function() SetAnchor(false, newPart) end) spawn(function() Resize(newPart, Vector3.new(2, 2, 0.000001), spawnCFrame) end) spawn(function() SpawnDecal(newPart, Enum.NormalId.Front) end) spawn(function() AddDecal(newPart, "331959655", Enum.NormalId.Front) end) spawn(function() SpawnDecal(newPart, Enum.NormalId.Back) end) spawn(function() AddDecal(newPart, "331959655", Enum.NormalId.Back) end) spawn(function() local randomAngle = math.random(0, 1) == 0 and math.rad(-30) or math.rad(30) MovePart(newPart, spawnCFrame * CFrame.Angles(0, 0, randomAngle)) end) spawn(function() SetTransparency(newPart, 1) end) end) end wait(0.05) end end coroutine.wrap(rainFromCloud)()