-- GUNBOT FINAL V2.6 - TRANSFORM + DE-TRANSFORM if getgenv().GunbotLoaded then return end getgenv().GunbotLoaded = true local player = game.Players.LocalPlayer local cam = workspace.CurrentCamera -- PON TUS ANIM IDS AQUÍ local GUNSHOT_ANIM_ID = "rbxassetid://121573002971812" local MINIGUN_ANIM_ID = "rbxassetid://131501910953361" local IDLE_ANIM_ID = "rbxassetid://78286929778597" -- ANIM CUANDO ESTÁS QUIETO local RUN_ANIM_ID = "rbxassetid://90220723448748" -- ANIM CUANDO CORRES local DEATH_ANIM_ID = "rbxassetid://134871895179279" -- ANIM DE MUERTE local TRANSFORM_ANIM_ID = "rbxassetid://101155521231914" -- ANIM DE TRANSFORMACIÓN local TRANSFORMED_IDLE_ID = "rbxassetid://107822660492695" -- IDLE TRANSFORMADO local TRANSFORMED_RUN_ID = "rbxassetid://73379618463325" -- RUN TRANSFORMADO local TRANSFORMED_SHOT_ID = "rbxassetid://133488754387819" -- SHOT TRANSFORMADO -- ===================================== local function setup() local char = player.Character or player.CharacterAdded:Wait() local hum = char:WaitForChild("Humanoid") -- Cargar anims de botones local anim1 = Instance.new("Animation") anim1.AnimationId = GUNSHOT_ANIM_ID local gunTrack = hum:LoadAnimation(anim1) gunTrack.Looped = false local anim2 = Instance.new("Animation") anim2.AnimationId = MINIGUN_ANIM_ID local miniTrack = hum:LoadAnimation(anim2) miniTrack.Looped = true local anim3 = Instance.new("Animation") anim3.AnimationId = DEATH_ANIM_ID local deathTrack = hum:LoadAnimation(anim3) deathTrack.Looped = false local transformAnim = Instance.new("Animation") transformAnim.AnimationId = TRANSFORM_ANIM_ID local transformTrack = hum:LoadAnimation(transformAnim) transformTrack.Looped = false local transformedShotAnim = Instance.new("Animation") transformedShotAnim.AnimationId = TRANSFORMED_SHOT_ID local transformedShotTrack = hum:LoadAnimation(transformedShotAnim) transformedShotTrack.Looped = true -- Cargar anims IDLE y RUN local idleTrack, runTrack local currentIdleId = IDLE_ANIM_ID local currentRunId = RUN_ANIM_ID local function loadMovementAnims() if idleTrack then idleTrack:Stop() end if runTrack then runTrack:Stop() end local idleAnim = Instance.new("Animation") idleAnim.AnimationId = currentIdleId idleTrack = hum:LoadAnimation(idleAnim) idleTrack.Looped = true idleTrack.Priority = Enum.AnimationPriority.Movement local runAnim = Instance.new("Animation") runAnim.AnimationId = currentRunId runTrack = hum:LoadAnimation(runAnim) runTrack.Looped = true runTrack.Priority = Enum.AnimationPriority.Movement end loadMovementAnims() -- Quitar anims default de Roblox local function stopDefaultAnims() for _, track in pairs(hum:GetPlayingAnimationTracks()) do if track.Name == "WalkAnim" or track.Name == "RunAnim" or track.Name == "IdleAnim" then track:Stop() end end end -- Detectar si está corriendo o quieto local isMoving = false local runningConnection = hum.Running:Connect(function(speed) stopDefaultAnims() if speed > 0.1 then if not isMoving and runTrack then isMoving = true if idleTrack then idleTrack:Stop() end runTrack:Play() end else if isMoving and idleTrack then isMoving = false if runTrack then runTrack:Stop() end idleTrack:Play() end end end) -- Empezar con idle si existe if idleTrack then task.wait(0.5) idleTrack:Play() end -- GUI local gui = player.PlayerGui:FindFirstChild("GunbotGUI") if gui then gui:Destroy() end gui = Instance.new("ScreenGui") gui.Name = "GunbotGUI" gui.ResetOnSpawn = false gui.Parent = player.PlayerGui -- Función para texto arcoiris local function rainbowText(btn) task.spawn(function() local hue = 0 while btn.Parent do hue = (hue + 2) % 360 btn.TextColor3 = Color3.fromHSV(hue/360, 1, 1) task.wait(0.05) end end) end -- Botón CIRCULAR RELEASE - 70px pegado a la derecha local shootBtn = Instance.new("TextButton") shootBtn.Name = "NormalBtn" shootBtn.Size = UDim2.new(0, 70, 0, 70) shootBtn.Position = UDim2.new(1, -80, 0.7, -80) shootBtn.Text = "RELEASE\nGUN\nAND SHOT" shootBtn.Font = Enum.Font.GothamBold shootBtn.TextScaled = true shootBtn.BackgroundColor3 = Color3.fromRGB(200, 30, 70) shootBtn.BorderSizePixel = 0 shootBtn.ZIndex = 10 shootBtn.Parent = gui local corner1 = Instance.new("UICorner") corner1.CornerRadius = UDim.new(1, 0) corner1.Parent = shootBtn rainbowText(shootBtn) -- Botón CIRCULAR MINIGUN - 70px arriba del RELEASE local miniBtn = Instance.new("TextButton") miniBtn.Name = "NormalBtn" miniBtn.Size = UDim2.new(0, 70, 0, 70) miniBtn.Position = UDim2.new(1, -80, 0.7, -160) miniBtn.Text = "MINIGUN" miniBtn.Font = Enum.Font.GothamBold miniBtn.TextScaled = true miniBtn.BackgroundColor3 = Color3.fromRGB(30, 100, 200) miniBtn.BorderSizePixel = 0 miniBtn.ZIndex = 10 miniBtn.Parent = gui local corner2 = Instance.new("UICorner") corner2.CornerRadius = UDim.new(1, 0) corner2.Parent = miniBtn rainbowText(miniBtn) -- Botón CIRCULAR DEATH(RESET) - 70px arriba del MINIGUN local deathBtn = Instance.new("TextButton") deathBtn.Name = "NormalBtn" deathBtn.Size = UDim2.new(0, 70, 0, 70) deathBtn.Position = UDim2.new(1, -80, 0.7, -240) deathBtn.Text = "DEATH\n(RESET)" deathBtn.Font = Enum.Font.GothamBold deathBtn.TextScaled = true deathBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 50) deathBtn.BorderSizePixel = 0 deathBtn.ZIndex = 10 deathBtn.Parent = gui local corner3 = Instance.new("UICorner") corner3.CornerRadius = UDim.new(1, 0) corner3.Parent = deathBtn rainbowText(deathBtn) -- Botón TRANSFORM - A LA IZQUIERDA DEL SALTO local transformBtn = Instance.new("TextButton") transformBtn.Name = "TransformBtn" transformBtn.Size = UDim2.new(0, 70, 0, 70) transformBtn.Position = UDim2.new(1, -160, 1, -80) transformBtn.Text = "TRANSFORM" transformBtn.Font = Enum.Font.GothamBold transformBtn.TextScaled = true transformBtn.BackgroundColor3 = Color3.fromRGB(255, 215, 0) transformBtn.BorderSizePixel = 0 transformBtn.ZIndex = 10 transformBtn.Parent = gui local corner4 = Instance.new("UICorner") corner4.CornerRadius = UDim.new(1, 0) corner4.Parent = transformBtn rainbowText(transformBtn) -- Botón SHOT TRANSFORMADO - APARECE DESPUÉS DE TRANSFORM local transformedShotBtn = Instance.new("TextButton") transformedShotBtn.Size = UDim2.new(0, 70, 0, 70) transformedShotBtn.Position = UDim2.new(1, -80, 0.7, -80) transformedShotBtn.Text = "SHOT" transformedShotBtn.Font = Enum.Font.GothamBold transformedShotBtn.TextScaled = true transformedShotBtn.BackgroundColor3 = Color3.fromRGB(255, 0, 0) transformedShotBtn.BorderSizePixel = 0 transformedShotBtn.ZIndex = 10 transformedShotBtn.Visible = false transformedShotBtn.Parent = gui local corner5 = Instance.new("UICorner") corner5.CornerRadius = UDim.new(1, 0) corner5.Parent = transformedShotBtn rainbowText(transformedShotBtn) -- Botón TRANSFORM NORMAL - APARECE CON EL SHOT local normalTransformBtn = Instance.new("TextButton") normalTransformBtn.Size = UDim2.new(0, 70, 0, 70) normalTransformBtn.Position = UDim2.new(1, -160, 1, -80) -- MISMA POSICIÓN QUE TRANSFORM normalTransformBtn.Text = "TRANSFORM\nNORMAL" normalTransformBtn.Font = Enum.Font.GothamBold normalTransformBtn.TextScaled = true normalTransformBtn.BackgroundColor3 = Color3.fromRGB(100, 100, 255) normalTransformBtn.BorderSizePixel = 0 normalTransformBtn.ZIndex = 10 normalTransformBtn.Visible = false normalTransformBtn.Parent = gui local corner6 = Instance.new("UICorner") corner6.CornerRadius = UDim.new(1, 0) corner6.Parent = normalTransformBtn rainbowText(normalTransformBtn) local shooting = false local minigunActive = false local isDying = false local isTransforming = false local transformed = false local transformedShooting = false -- RELEASE GUN AND SHOT shootBtn.TouchTap:Connect(function() if shooting or minigunActive or isDying or isTransforming or transformed then return end shooting = true print("[GUNBOT] RELEASE AND SHOT activado") if runTrack then runTrack:Stop() end if idleTrack then idleTrack:Stop() end hum.WalkSpeed = 5 local ok, err = pcall(function() gunTrack:Play() gunTrack.Stopped:Wait() end) if not ok then warn("[GUNBOT] Error anim: "..err) end hum.WalkSpeed = 15 shooting = false if hum.MoveDirection.Magnitude > 0 and runTrack then runTrack:Play() elseif idleTrack then idleTrack:Play() end end) -- MINIGUN TOGGLE EN BUCLE miniBtn.TouchTap:Connect(function() if shooting or isDying or isTransforming or transformed then return end if minigunActive then print("[GUNBOT] MINIGUN desactivado") minigunActive = false miniTrack:Stop() hum.WalkSpeed = 15 miniBtn.BackgroundColor3 = Color3.fromRGB(30, 100, 200) miniBtn.Text = "MINIGUN" if hum.MoveDirection.Magnitude > 0 and runTrack then runTrack:Play() elseif idleTrack then idleTrack:Play() end else print("[GUNBOT] MINIGUN activado") minigunActive = true if runTrack then runTrack:Stop() end if idleTrack then idleTrack:Stop() end hum.WalkSpeed = 0 miniBtn.BackgroundColor3 = Color3.fromRGB(200, 30, 30) miniBtn.Text = "STOP" local ok, err = pcall(function() miniTrack:Play() end) if not ok then warn("[GUNBOT] Error anim: "..err) minigunActive = false hum.WalkSpeed = 15 miniBtn.BackgroundColor3 = Color3.fromRGB(30, 100, 200) miniBtn.Text = "MINIGUN" end end end) -- DEATH(RESET) - REPRODUCE ANIM Y MATA deathBtn.TouchTap:Connect(function() if isDying or shooting or minigunActive or isTransforming then return end isDying = true print("[GUNBOT] DEATH(RESET) activado") if runTrack then runTrack:Stop() end if idleTrack then idleTrack:Stop() end if miniTrack then miniTrack:Stop() end if transformedShotTrack then transformedShotTrack:Stop() end hum.WalkSpeed = 0 hum.JumpPower = 0 local ok, err = pcall(function() deathTrack:Play() deathTrack.Stopped:Wait() end) if not ok then warn("[GUNBOT] Error anim muerte: "..err) end hum.Health = 0 end) -- TRANSFORM - CAMBIA A MODO TRANSFORMADO transformBtn.TouchTap:Connect(function() if isTransforming or shooting or minigunActive or isDying or transformed then return end isTransforming = true print("[GUNBOT] TRANSFORM activado") if runTrack then runTrack:Stop() end if idleTrack then idleTrack:Stop() end if miniTrack then miniTrack:Stop() end hum.WalkSpeed = 0 local ok, err = pcall(function() transformTrack:Play() transformTrack.Stopped:Wait() end) if not ok then warn("[GUNBOT] Error anim transform: "..err) end -- Cambiar a modo transformado transformed = true currentIdleId = TRANSFORMED_IDLE_ID currentRunId = TRANSFORMED_RUN_ID loadMovementAnims() -- Quitar botones normales for _, btn in pairs(gui:GetChildren()) do if btn.Name == "NormalBtn" then btn.Visible = false end end transformBtn.Visible = false -- Mostrar botón SHOT y TRANSFORM NORMAL transformedShotBtn.Visible = true normalTransformBtn.Visible = true hum.WalkSpeed = 15 if idleTrack then task.wait(0.1) idleTrack:Play() end isTransforming = false end) -- TRANSFORM NORMAL - VUELVE A FORMA BASE CON ANIM INVERTIDA normalTransformBtn.TouchTap:Connect(function() if isTransforming or shooting or minigunActive or isDying or not transformed then return end isTransforming = true print("[GUNBOT] TRANSFORM NORMAL activado") if runTrack then runTrack:Stop() end if idleTrack then idleTrack:Stop() end if transformedShotTrack then transformedShotTrack:Stop() end transformedShooting = false hum.WalkSpeed = 0 -- Reproducir anim de transformación INVERTIDA local ok, err = pcall(function() transformTrack:Play() transformTrack:AdjustSpeed(-1) -- VELOCIDAD NEGATIVA = ANIM EN REVERSA transformTrack.Stopped:Wait() transformTrack:AdjustSpeed(1) -- RESETEAR VELOCIDAD end) if not ok then warn("[GUNBOT] Error anim transform normal: "..err) end -- Volver a modo normal transformed = false currentIdleId = IDLE_ANIM_ID currentRunId = RUN_ANIM_ID loadMovementAnims() -- Mostrar botones normales for _, btn in pairs(gui:GetChildren()) do if btn.Name == "NormalBtn" then btn.Visible = true end end transformBtn.Visible = true -- Quitar botones transformados transformedShotBtn.Visible = false normalTransformBtn.Visible = false transformedShotBtn.BackgroundColor3 = Color3.fromRGB(255, 0, 0) transformedShotBtn.Text = "SHOT" hum.WalkSpeed = 15 if idleTrack then task.wait(0.1) idleTrack:Play() end isTransforming = false end) -- SHOT TRANSFORMADO - TOGGLE EN BUCLE transformedShotBtn.TouchTap:Connect(function() if isTransforming or isDying then return end if transformedShooting then print("[GUNBOT] SHOT TRANSFORMADO desactivado") transformedShooting = false transformedShotTrack:Stop() transformedShotBtn.BackgroundColor3 = Color3.fromRGB(255, 0, 0) transformedShotBtn.Text = "SHOT" if hum.MoveDirection.Magnitude > 0 and runTrack then runTrack:Play() elseif idleTrack then idleTrack:Play() end else print("[GUNBOT] SHOT TRANSFORMADO activado") transformedShooting = true if runTrack then runTrack:Stop() end if idleTrack then idleTrack:Stop() end transformedShotBtn.BackgroundColor3 = Color3.fromRGB(0, 255, 0) transformedShotBtn.Text = "STOP" local ok, err = pcall(function() transformedShotTrack:Play() end) if not ok then warn("[GUNBOT] Error anim shot transformado: "..err) transformedShooting = false transformedShotBtn.BackgroundColor3 = Color3.fromRGB(255, 0, 0) transformedShotBtn.Text = "SHOT" end end end) end setup() player.CharacterAdded:Connect(setup)