Run it
Copy the script and paste it into your executor.
Settings = {};
Settings.ModelId =
Settings.BlacklistedProperties = { , , , }
Settings.BlacklistedClasses = { , , }
Settings.DebugMode =
ReplicatedStorage = :();
InsertService = :();
_RetroStudio = ReplicatedStorage:();
Remotes = _RetroStudio.Remotes
HashLibrary = (_RetroStudio.HashLib);
Properties = (_RetroStudio.PermissionData.ClassData);
Hint = .(, ); Hint.Text =
CreatedInstances = {};
Creation = {
Class: ,
Parent: ,
Properties: { []: any },
}
Debug = (...)
Settings.DebugMode
(...);
GenerateHash = ()
Clock = .();
HashLibrary.((():(Clock))), Clock
Create = (Data: Creation)
.(Settings.BlacklistedClasses, Data.Class)
(, Data.Class);
Hash, Clock = ();
Arguments = {
[] = Data.Class,
[] = Data.Parent,
[] = Hash,
[] = Clock,
}
Result = Remotes.CreateObject:(.(Arguments));
Name, Property , (Data.Properties {})
Arguments = {
[] = {
[] = Result
},
[] = Name,
[] = Property,
}
Remotes.ChangeObjectPropertyAndReturn:(.(Arguments))
Result
Copy = (Target: )
FromName = Properties.FromName[Target.ClassName]
ClassProperties = FromName FromName.PropertiesFromName
ClassProperties
CopyProperties = (()
Properties = {};
Property, Data , ClassProperties
Default = Data.DefaultValue
.(Settings.BlacklistedProperties, Property)
Success, Result = (()
Target[Property]
)
(Success) (Default == Result ~= Default)
(, Target.Name, , Property);
Properties[Property] = Result
Properties
)()
Result = ({
Class = Target.ClassName,
Parent = ,
Properties = CopyProperties,
});
Result
GetLength = (Dictionary: { []: any })
Length =
Index, Value , Dictionary
Length +=
Length
Old = InsertService:(Settings.ModelId);
Model = .(); Old.Parent = Model
DescendantsList = (()
Descendants = {}
_, Object , Model:()
( .(Settings.BlacklistedClasses, Object.ClassName)) (Properties.FromName[Object.ClassName])
.(Descendants, Object);
Descendants
)();
ParentsSet =
ExpectedDescendantCount = #DescendantsList
Index, Descendant , DescendantsList
.(()
Created = (Descendant);
Tries =
Created
.()
Tries +=
Created = (Descendant);
Created Tries >=
Hint.Text = .(, (CreatedInstances), ExpectedDescendantCount);
Created
(, Created);
CreatedInstances[Descendant] = Created
ExpectedDescendantCount -=
)
.()
.()
(CreatedInstances) >= ExpectedDescendantCount
_, Descendant , DescendantsList
OriginalParent = Descendant.Parent
Created = CreatedInstances[Descendant]
Created
NewParent = CreatedInstances[OriginalParent]
OriginalParent == Model
NewParent =
ParentsSet +=
Hint.Text = .(, ParentsSet, (CreatedInstances))
(, Created.Name, , NewParent)
Arguments = {
[] = {
[] = Created
},
[] = ,
[] = NewParent,
}
Remotes.ChangeObjectPropertyAndReturn:(.(Arguments))
Remotes.ChangeHistoryInteractionRequested:()
Hint.Text = (); .();
Hint:();
Model:();Some RetroStudio model copier i made out of boredom 鈿狅笍 I'd recommend setting the game's time period to Mid-2015 to support the most materials and more 鈿狅笍 (Only change Settings.BlacklistedProperties and Settings.BlacklistedClasses if you know what you're doing) 鈩癸笍 To get the ModelId copy the numbers from the Model URL you found For example if you found a URL like https://create.roblox.com/store/asset/187789986/ Then the ModelId is "rbxassetid://187789986"