-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] --[[rscripts:analytics:start]] -- Script analytics (enabled by the creator on rscripts.net). -- Runs in its own thread and cannot affect the script below. task.spawn(function() pcall(function() loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6abb2a17678d6101b6981215"))() end) end) --[[rscripts:analytics:end]] local Players = game:GetService("Players") local RunService = game:GetService("RunService") local VIM = game:GetService("VirtualInputManager") local UIS = game:GetService("UserInputService") local genv = (getgenv and getgenv()) or _G local prev = genv.__ShamisenAuto if prev then prev.stop = true if prev.conn then pcall(function() prev.conn:Disconnect() end) end if prev.toggleConn then pcall(function() prev.toggleConn:Disconnect() end) end end local CONFIG = { on = true, autoSelect = false, song = nil, toggleKey = Enum.KeyCode.RightShift } local state = { stop=false, on=CONFIG.on, autoSelect=CONFIG.autoSelect, song=CONFIG.song, toggleKey=CONFIG.toggleKey, hits=0, misses=0, resets=0, selectedAt=0 } genv.__ShamisenAuto = state local lp = Players.LocalPlayer local function getRoots() local sh = lp:FindFirstChild("PlayerGui") and lp.PlayerGui:FindFirstChild("MainUI") and lp.PlayerGui.MainUI:FindFirstChild("Instruments") and lp.PlayerGui.MainUI.Instruments:FindFirstChild("Shamisen") if not sh then return end local mg = sh:FindFirstChild("Minigame") return ((mg and mg.Visible) and mg:FindFirstChild("Board")) or nil, sh:FindFirstChild("SongList") end local KEY_BY_LANE = { Lane1=Enum.KeyCode.A, Lane2=Enum.KeyCode.S, Lane3=Enum.KeyCode.K, Lane4=Enum.KeyCode.L } local noteState = setmetatable({}, { __mode="k" }) local boardRef, targetY = nil, 0.76 local function fire(key) VIM:SendKeyEvent(true, key, false, game) task.defer(function() task.wait(0.02) VIM:SendKeyEvent(false, key, false, game) end) state.hits += 1 end local function trySelectSong(songList) -- optional if not state.autoSelect or not songList or not songList.Visible then return end if os.clock() - state.selectedAt < 3 then return end local container = songList:FindFirstChild("Songs"); if not container then return end local button = state.song and container:FindFirstChild(state.song) if not button then for _, c in ipairs(container:GetChildren()) do if c:IsA("GuiButton") and c.Visible and c.Name ~= "SongTemplate" then button = c break end end end if button and type(firesignal) == "function" then state.selectedAt = os.clock() pcall(function() lp:SetAttribute("PerformanceMode", true) end) task.defer(function() pcall(function() firesignal(button.Activated) end) end) end end state.conn = RunService.RenderStepped:Connect(function() if state.stop then if state.conn then state.conn:Disconnect() end return end local board, songList = getRoots() if not board then trySelectSong(songList) return end if not state.on then return end if board ~= boardRef then boardRef = board; noteState = setmetatable({}, {__mode="k"}); state.resets += 1 end local target = board:FindFirstChild("Lane1") and board.Lane1:FindFirstChild("Target") if target then targetY = target.Position.Y.Scale end for laneName, key in pairs(KEY_BY_LANE) do local lane = board:FindFirstChild(laneName) if lane then for _, c in ipairs(lane:GetChildren()) do if c.Name == "Note" then local y = c.Position.Y.Scale local st = noteState[c] if not st then local fresh = { prevY = y, hit = false }; noteState[c] = fresh if y >= targetY - 0.08 and y <= targetY + 0.06 then fire(key); fresh.hit = true elseif y > targetY + 0.06 then state.misses += 1; fresh.hit = true end elseif not st.hit then if st.prevY < targetY and y >= targetY then fire(key); st.hit = true elseif y > targetY + 0.06 then state.misses += 1; st.hit = true end st.prevY = y end end end end end end) state.toggleConn = UIS.InputBegan:Connect(function(input, processed) if processed then return end if input.KeyCode == state.toggleKey then state.on = not state.on end end)