Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local Players = game:GetService("Players")
- local player = Players.LocalPlayer
- -- Função de clonagem
- local function CloneMe(char)
- char.Archivable = true
- local clone = char:Clone()
- char.Archivable = false
- return clone
- end
- -- Função para enviar mensagens como Bubble Chat para o clone
- local function SendBubbleChatToClone(clone, message)
- -- Verifica se o clone possui uma cabeça
- local head = clone:FindFirstChild("Head")
- if head then
- -- Envia a mensagem como Bubble Chat para a cabeça do clone
- ChatService:Chat(head, message, Enum.ChatColor.Red)
- end
- end
- local function weldParts(a, b)
- local weld = Instance.new("Weld")
- weld.Part0 = a.Parent
- weld.Part1 = b.Parent
- weld.C0 = a.CFrame
- weld.C1 = b.CFrame
- weld.Parent = a.Parent
- return weld
- end
- local function createWeld(name, parent, part0, part1, c0, c1)
- local weld = Instance.new("Weld")
- weld.Name = name
- weld.Part0 = part0
- weld.Part1 = part1
- weld.C0 = c0
- weld.C1 = c1
- weld.Parent = parent
- return weld
- end
- local function findAttachment(parent, attachmentName)
- for _, child in pairs(parent:GetChildren()) do
- if child:IsA("Attachment") and child.Name == attachmentName then
- return child
- elseif not child:IsA("Accessory") and not child:IsA("Tool") then
- local attachment = findAttachment(child, attachmentName)
- if attachment then
- return attachment
- end
- end
- end
- end
- function attachAccessory(character, accessory)
- accessory.Parent = character
- local handle = accessory:FindFirstChild("Handle")
- if handle then
- local attachment = handle:FindFirstChildOfClass("Attachment")
- if attachment then
- local correspondingAttachment = findAttachment(character, attachment.Name)
- if correspondingAttachment then
- weldParts(correspondingAttachment, attachment)
- end
- else
- local head = character:FindFirstChild("Head")
- if head then
- createWeld("HeadWeld", head, head, handle, CFrame.new(0, 0, 0), accessory.AttachmentPoint)
- end
- end
- end
- end
- function ChangeAppearance(clone, userId)
- local success, appearance = pcall(function()
- return Players:GetCharacterAppearanceAsync(userId)
- end)
- if success and appearance then
- for _, item in pairs(clone:GetChildren()) do
- if item:IsA("Shirt") or item:IsA("Pants") or item:IsA("Accessory") or item:IsA("CharacterMesh") or item:IsA("BodyColors") or item:IsA("Decal") then
- item:Destroy()
- end
- end
- for _, item in pairs(appearance:GetChildren()) do
- if item:IsA("Shirt") or item:IsA("Pants") or item:IsA("Accessory") or item:IsA("CharacterMesh") or item:IsA("BodyColors") or item:IsA("Decal") then
- local cloneItem = item:Clone()
- cloneItem.Parent = clone
- end
- end
- for _, accessory in pairs(appearance:GetChildren()) do
- if accessory:IsA("Accessory") then
- attachAccessory(clone, accessory)
- end
- end
- else
- warn("Falha ao carregar a aparência do jogador com ID:", userId)
- end
- end
- local function SpawnClone(userId)
- local character = player.Character or player.CharacterAdded:Wait()
- local charClone = CloneMe(character)
- charClone.Parent = game.Workspace
- charClone:SetPrimaryPartCFrame(character.PrimaryPart.CFrame + Vector3.new(0, 5, 0))
- ChangeAppearance(charClone, userId)
- wait(2)
- local user = Players:GetNameFromUserIdAsync(userId)
- local emojis = {"[💻]", "[📱]"}
- local randomEmoji = emojis[math.random(1, #emojis)]
- local displayText = randomEmoji .. " - " .. user
- local nome = charClone:FindFirstChild("Nome")
- if nome then
- local nomeTexto = nome:FindFirstChild("NomeTexto")
- if nomeTexto then
- nomeTexto.Text = displayText
- end
- end
- local humanoid = charClone:FindFirstChildOfClass("Humanoid")
- if humanoid then
- local idleAnim = Instance.new("Animation")
- idleAnim.AnimationId = "rbxassetid://180435792"
- local animTrack = humanoid:LoadAnimation(idleAnim)
- animTrack:Play()
- end
- end
- -- Função para buscar o ID de usuário pelo nome
- local function GetUserIdFromUsername(username)
- local userId = nil
- local success, result = pcall(function()
- userId = Players:GetUserIdFromNameAsync(username)
- end)
- if success then
- return userId
- else
- return nil
- end
- end
- -- Função de UI para o menu de clonagem e gravação
- local function LoadDrRay()
- local DrRayLibrary = loadstring(game:HttpGet("https://raw.githubusercontent.com/AZYsGithub/DrRay-UI-Library/main/DrRay.lua"))()
- local window = DrRayLibrary:Load("Macroability", "Default")
- -- Aba de Clonagem
- local tab2 = DrRayLibrary.newTab("Clonagem", "13025876355")
- tab2.newLabel("Clonagem")
- local usernameInput
- tab2.newInput("Nome de usuário", "Digite o nome de usuário para clonar", function(name)
- usernameInput = name -- Armazena o nome de usuário inserido
- end)
- local fakeMessageInput
- tab2.newInput("Mensagem Fake", "Digite a mensagem que aparecerá como Bubble Chat", function(message)
- fakeMessageInput = message
- end)
- tab2.newButton("Spawnar Clone", "Cria um clone do jogador", function()
- if usernameInput then
- local userId = GetUserIdFromUsername(usernameInput)
- if userId then
- SpawnClone(userIdm fakeMessageInput)
- else
- warn("Não foi possível encontrar o jogador com o nome de usuário fornecido.")
- end
- else
- warn("Digite um nome de usuário válido.")
- end
- end)
- -- Aba de Macro (Gravação)
- local tab1 = DrRayLibrary.newTab("Macro", "18155304028")
- local Running = false
- local Frames = {}
- local TimeStart = tick()
- local HttpService = game:GetService("HttpService")
- local RunService = game:GetService("RunService")
- local Player = game:GetService("Players").LocalPlayer
- local WalkConnection
- -- Funções de Gravação
- local getChar = function()
- local Character = Player.Character
- if Character then
- return Character
- else
- Player.CharacterAdded:Wait()
- return getChar()
- end
- end
- local function CreateFolder()
- if not isfolder("Gravações") then
- makefolder("Gravações")
- end
- end
- local function StartRecord()
- Frames = {}
- Running = true
- TimeStart = tick()
- while Running do
- RunService.Heartbeat:Wait()
- local Character = getChar()
- local HumanoidRootPart = Character:FindFirstChild("HumanoidRootPart")
- local Humanoid = Character:FindFirstChild("Humanoid")
- if HumanoidRootPart and Humanoid then
- table.insert(Frames, {
- {HumanoidRootPart.CFrame:GetComponents()},
- Humanoid:GetState().Value,
- tick() - TimeStart
- })
- end
- end
- end
- local function StopRecord()
- Running = false
- end
- local function StartWalking()
- WalkConnection = RunService.RenderStepped:Connect(function()
- local Character = getChar()
- if Character and Character:FindFirstChild("Humanoid") then
- Character:FindFirstChild("Humanoid"):Move(Vector3.new(0, 0, -1), true)
- end
- end)
- end
- local function StopWalking()
- if WalkConnection then
- WalkConnection:Disconnect()
- WalkConnection = nil
- end
- end
- local function MoveToInitialPosition(initialCFrame, callback)
- local Character = getChar()
- if Character then
- local HumanoidRootPart = Character:FindFirstChild("HumanoidRootPart")
- if HumanoidRootPart then
- local targetPosition = initialCFrame.Position
- local humanoid = Character:FindFirstChild("Humanoid")
- humanoid:MoveTo(targetPosition)
- humanoid.MoveToFinished:Wait()
- local targetOrientation = initialCFrame.Position - HumanoidRootPart.Position
- local initialOrientation = HumanoidRootPart.CFrame.LookVector
- local elapsedTime = 0
- local rotationDuration = 0.5 -- Duração da rotação suave
- RunService.RenderStepped:Connect(function(dt)
- elapsedTime = elapsedTime + dt
- if elapsedTime <= rotationDuration then
- local alpha = elapsedTime / rotationDuration
- local currentOrientation = initialOrientation:Lerp(targetOrientation, alpha)
- HumanoidRootPart.CFrame = CFrame.lookAt(HumanoidRootPart.Position, HumanoidRootPart.Position + currentOrientation)
- end
- end)
- if callback then
- callback()
- end
- end
- end
- end
- local function PlayTAS()
- local Character = getChar()
- local initialCFrame = CFrame.new(unpack(Frames[1][1]))
- MoveToInitialPosition(initialCFrame, function()
- StartWalking()
- wait(0.1)
- local TimePlay = tick()
- local FrameCount = #Frames
- local OldFrame = 1
- local TASLoop
- TASLoop = RunService.Heartbeat:Connect(function()
- local NewFrames = OldFrame + 60
- local CurrentTime = tick()
- if (CurrentTime - TimePlay) >= Frames[FrameCount][3] then
- TASLoop:Disconnect()
- StopWalking()
- end
- for i = OldFrame, NewFrames do
- local Frame = Frames[i]
- if Frame and Frame[1] and type(Frame[1]) == "table" and Frame[2] and Frame[3] then
- if Frame[3] <= CurrentTime - TimePlay then
- OldFrame = i
- local HumanoidRootPart = Character:FindFirstChild("HumanoidRootPart")
- local Humanoid = Character:FindFirstChild("Humanoid")
- if HumanoidRootPart and Humanoid then
- HumanoidRootPart.CFrame = CFrame.new(unpack(Frame[1]))
- Humanoid:ChangeState(Frame[2])
- end
- end
- end
- end
- end)
- end)
- end
- tab1.newLabel("Gravação")
- tab1.newButton("Iniciar gravação", "Inicia a gravação", function()
- StartRecord()
- end)
- tab1.newButton("Parar gravação", "Para a gravação", function()
- StopRecord()
- end)
- tab1.newButton("Reproduzir gravação", "Reproduz a gravação", function()
- PlayTAS()
- end)
- local ConfigName
- tab1.newInput("Nome da gravação", "Insira o nome da gravação", function(text)
- ConfigName = tostring(text)
- end)
- tab1.newButton("Salvar gravação", "Salva a gravação com o nome especificado", function()
- CreateFolder()
- if ConfigName and ConfigName ~= "" then
- local Json = HttpService:JSONEncode(Frames)
- writefile("Gravações/"..ConfigName..".json", Json)
- print("Configuração salva em Gravações/"..ConfigName..".json")
- else
- print("Dê um nome válido para a configuração.")
- end
- end)
- tab1.newButton("Carregar gravação", "Carrega a gravação com o nome especificado", function()
- CreateFolder()
- if ConfigName and ConfigName ~= "" then
- local FilePath = "Gravações/"..ConfigName..".json"
- if isfile(FilePath) then
- local FileContent = readfile(FilePath)
- local Success, Decoded = pcall(function()
- return HttpService:JSONDecode(FileContent)
- end)
- if Success and type(Decoded) == "table" then
- Frames = Decoded
- print("Configuração carregada:", Frames)
- else
- print("Falha ao decodificar o JSON ou estrutura inválida.")
- end
- else
- print("O arquivo nomeado não foi encontrado na pasta de gravações.")
- end
- else
- print("Dê um nome válido para a configuração.")
- end
- end)
- end
- LoadDrRay()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement