Murder Mystery 2 Script – Very very good stuff open source - Verified script for Murder Mystery 2
Key Required

Murder Mystery 2 Script – Very very good stuff open source

Murder Mystery 2EviIAlienWareEviIAlienWare 163.4K views 280 executesUpdated Sep 6, 2023
Unrated
00
Lua Script•375 lines (12694 chars)
local Rayfield = loadstring(game:HttpGet('https://sirius.menu/rayfield'))()
local Window = Rayfield:CreateWindow({
   Name = "Murder Mystery 2 OP",
   LoadingTitle = "Made by freScript on scriptblox",
   LoadingSubtitle = "by frescript",
   ConfigurationSaving = {
      Enabled = true,
      FolderName = MurderMysteryFre, -- Create a custom folder for your hub/game
      FileName = "FreScriptsScriptblox"
   }
})

local Tab = Window:CreateTab("Trading Stuff", 4483362458) -- Title, Image
local Section = Tab:CreateSection("Trade op")

local TextBox = Tab:CreateInput({
    Name = "Player Name",
    PlaceholderText = "Enter player name...",
    RemoveTextAfterFocusLost = false,
    Callback = function(Text)
        -- The function that takes place when the input is changed
        playerNameTextbox = Text
    end,
})

local Button = Tab:CreateButton({
    Name = "Force Trade",
    Callback = function()
        if playerNameTextbox and playerNameTextbox ~= "" then
            local player = game.Players:FindFirstChild(playerNameTextbox)

            if player then
                local args = {
                    [1] = player
                }

                game:GetService("ReplicatedStorage"):WaitForChild("Trade"):WaitForChild("SendRequest"):InvokeServer(unpack(args))

                game:GetService("ReplicatedStorage"):WaitForChild("Trade"):WaitForChild("AcceptRequest"):FireServer()

                Rayfield:Notify({
                    Title = "Trade System",
                    Content = "Force Traded Player: " .. playerNameTextbox,
                    Duration = 5,
                    Image = 4483362458,
                    Actions = {
                        Ignore = {
                            Name = "Okay!",
                            Callback = function()
                            end
                        },
                    },
                })
            else
                Rayfield:Notify({
                    Title = "Trade System",
                    Content = "Player not found.",
                    Duration = 5,
                    Image = 4483362458,
                    Actions = {
                        Ignore = {
                            Name = "Okay!",
                            Callback = function()
                            end
                        },
                    },
                })
            end
        else
            Rayfield:Notify({
                Title = "Trade System",
                Content = "Please enter a valid player name.",
                Duration = 5,
                Image = 4483362458,
                Actions = {
                    Ignore = {
                        Name = "Okay!",
                        Callback = function()
                        end
                    },
                },
            })
        end
    end,
})

local Section = Tab:CreateSection("role op")

local Button = Tab:CreateButton({
   Name = "Chat Expose Roles",
   Callback = function()
   local allPlayers = game.Players:GetPlayers()

for _, player in pairs(allPlayers) do
    local backpack = player:FindFirstChild("Backpack")
    
    if backpack then
        if backpack:FindFirstChild("Knife") then
            local args = {
                [1] = player.Name .. ": Has The Knife",
                [2] = "normalchat"
            }

            game:GetService("ReplicatedStorage"):WaitForChild("DefaultChatSystemChatEvents"):WaitForChild("SayMessageRequest"):FireServer(unpack(args))
        end
        
        if backpack:FindFirstChild("Gun") then
            local args = {
                [1] = player.Name .. ": Has The Gun",
                [2] = "normalchat"
            }

            game:GetService("ReplicatedStorage"):WaitForChild("DefaultChatSystemChatEvents"):WaitForChild("SayMessageRequest"):FireServer(unpack(args))
        end
    end
end
   end,
})

local Label = Tab:CreateLabel("Gun Not Dropped") -- Use "Label" instead of "GunLabel"
coroutine.wrap(function()
    local gunDropped = false
    while wait(1) do
        local gunExists = Workspace:FindFirstChild("GunDrop")
        
        if gunExists then
            Label:Set("Gun Dropped") -- Update to use "Label" instead of "GunLabel"
            
            -- Only send notification if the gun has been dropped since last check
            if not gunDropped then
                gunDropped = true
                Rayfield:Notify({
                    Title = "Gun Status",
                    Content = "Gun Dropped",
                    Duration = 6.5,
                    Image = 5578470911,
                    Actions = {
                        Ignore = {
                            Name = "Okay!",
                            Callback = function()
                                print("The user tapped Okay!")
                            end
                        },
                    },
                })
            end
        else
            Label:Set("Gun Not Dropped") -- Update to use "Label" instead of "GunLabel"
            gunDropped = false
        end
    end
end)()

local MurdererLabel = Tab:CreateLabel("Murderer is: Unknown")
local SheriffLabel = Tab:CreateLabel("Sheriff is: Unknown")

-- Function to check and update the roles based on tools in players' backpacks
local function updateRolesInfo()
    while true do
        local players = game:GetService("Players"):GetPlayers()
        local murderer, sheriff = "Unknown", "Unknown"

        for _, player in ipairs(players) do
            if player.Character then
                local backpack = player.Backpack
                if backpack then
                    for _, tool in ipairs(backpack:GetChildren()) do
                        if tool:IsA("Tool") then
                            if tool.Name == "Knife" then
                                murderer = player.Name
                            elseif tool.Name == "Gun" then
                                sheriff = player.Name
                            end
                        end
                    end
                end
            end
        end

        MurdererLabel:Set("Murderer is: " .. murderer)
        SheriffLabel:Set("Sheriff is: " .. sheriff)

        wait(1)
    end
end

-- Start updating the Murderer and Sheriff information
coroutine.wrap(updateRolesInfo)()

local ESPFolder = Instance.new("Folder")
ESPFolder.Name = "ESP Holder"
ESPFolder.Parent = game.CoreGui

local function AddBillboard(player)
    local Billboard = Instance.new("BillboardGui")
    Billboard.Name = player.Name .. "Billboard"
    Billboard.AlwaysOnTop = true
    Billboard.Size = UDim2.new(0, 200, 0, 50)
    Billboard.ExtentsOffset = Vector3.new(0, 3, 0)
    Billboard.Enabled = false
    Billboard.Parent = ESPFolder

    local TextLabel = Instance.new("TextLabel")
    TextLabel.TextSize = 20
    TextLabel.Text = player.Name
    TextLabel.Font = Enum.Font.FredokaOne
    TextLabel.BackgroundTransparency = 1
    TextLabel.Size = UDim2.new(1, 0, 1, 0)
    TextLabel.TextStrokeTransparency = 0
    TextLabel.TextStrokeColor3 = Color3.new(0, 0, 0)
    TextLabel.Parent = Billboard

    repeat
        wait()
        pcall(function()
            Billboard.Adornee = player.Character.Head
            if player.Character:FindFirstChild("Knife") or player.Backpack:FindFirstChild("Knife") then
                TextLabel.TextColor3 = Color3.new(1, 0, 0)
                if getgenv().MurderEsp then
                    Billboard.Enabled = true
                end
            elseif player.Character:FindFirstChild("Gun") or player.Backpack:FindFirstChild("Gun") then
                TextLabel.TextColor3 = Color3.new(0, 0, 1)
                if getgenv().SheriffEsp then
                    Billboard.Enabled = true
                end
            else
                TextLabel.TextColor3 = Color3.new(0, 1, 0)
                if getgenv().AllEsp then
                    Billboard.Enabled = true
                end
            end
        end)
    until not player.Parent
end

for _, player in pairs(game.Players:GetPlayers()) do
    if player ~= game.Players.LocalPlayer then
        coroutine.wrap(AddBillboard)(player)
    end
end

game.Players.PlayerAdded:Connect(function(player)
    if player ~= game.Players.LocalPlayer then
        coroutine.wrap(AddBillboard)(player)
    end
end)

game.Players.PlayerRemoving:Connect(function(player)
    local billboard = ESPFolder:FindFirstChild(player.Name .. "Billboard")
    if billboard then
        billboard:Destroy()
    end
end)

local ToggleAllESP = Tab:CreateToggle({
    Name = "Every Player ESP",
    CurrentValue = false,
    Flag = "AllESP",
    Callback = function(state)
        getgenv().AllEsp = state
        for _, billboard in ipairs(ESPFolder:GetChildren()) do
            if billboard:IsA("BillboardGui") then
                local playerName = billboard.Name:sub(1, -10)
                local player = game.Players:FindFirstChild(playerName)
                if player and player.Character then
                    local hasKnife = player.Character:FindFirstChild("Knife") or player.Backpack:FindFirstChild("Knife")
                    local hasGun = player.Character:FindFirstChild("Gun") or player.Backpack:FindFirstChild("Gun")
                    if not (hasKnife or hasGun) then
                        billboard.Enabled = state
                    end
                end
            end
        end
    end,
})



local ToggleMurderESP = Tab:CreateToggle({
    Name = "Murder ESP",
    CurrentValue = false,
    Flag = "MurderESP",
    Callback = function(state)
        getgenv().MurderEsp = state
        for _, billboard in ipairs(ESPFolder:GetChildren()) do
            if billboard:IsA("BillboardGui") then
                local playerName = billboard.Name:sub(1, -10)
                local player = game.Players:FindFirstChild(playerName)
                if player and (player.Character:FindFirstChild("Knife") or player.Backpack:FindFirstChild("Knife")) then
                    billboard.Enabled = state
                end
            end
        end
    end,
})

local ToggleSheriffESP = Tab:CreateToggle({
    Name = "Sherif ESP",
    CurrentValue = false,
    Flag = "SheriffESP",
    Callback = function(state)
        getgenv().SheriffEsp = state
        for _, billboard in ipairs(ESPFolder:GetChildren()) do
            if billboard:IsA("BillboardGui") then
                local playerName = billboard.Name:sub(1, -10)
                local player = game.Players:FindFirstChild(playerName)
                if player and (player.Character:FindFirstChild("Gun") or player.Backpack:FindFirstChild("Gun")) then
                    billboard.Enabled = state
                end
            end
        end
    end,
})

local Tab = Window:CreateTab("Misc", 4483362458)
local Section = Tab:CreateSection("other very op stuff")

local Button = Tab:CreateButton({
    Name = "Get Every Emote",
    Callback = function()
        local PlayerGui = game.Players.LocalPlayer:WaitForChild("PlayerGui")
        local Emotes = PlayerGui:WaitForChild("MainGUI"):WaitForChild("Game"):FindFirstChild("Emotes")

        if Emotes then
            require(game:GetService("ReplicatedStorage").Modules.EmoteModule).GeneratePage({"headless", "zombie", "zen", "ninja", "floss", "dab", "sit"}, Emotes, "Free Emotes")

            Rayfield:Notify({
                Title = "Emotes",
                Content = "Succesfly added emotes!",
                Duration = 6.5,
                Image = 4483362458,
                Actions = { -- Notification Buttons
                    Ignore = {
                        Name = "Okay!",
                        Callback = function()
                        end
                    },
                },
            })
        end
    end,
})

local Button = Tab:CreateButton({
    Name = "Get Every Gun/Knife!",
    Callback = function()
        local WeaponOwnRange = {
            min = 999999999,
            max = 999999999
        }

        local DataBase, PlayerData = getrenv()._G.Database, getrenv()._G.PlayerData

        local newOwned = {}

        for i, v in next, DataBase.Item do
            newOwned[i] = math.random(WeaponOwnRange.min, WeaponOwnRange.max) -- newOwned[Weapon]: ItemCount
        end

        local PlayerWeapons = PlayerData.Weapons

        game:GetService("RunService"):BindToRenderStep("InventoryUpdate", 0, function()
            PlayerWeapons.Owned = newOwned
        end)

        game.Players.LocalPlayer.Character.Humanoid.Health = 0

        ReyField:Notify({
            Title = "Weapon Update",
            Content = "Got every weapon/gun (Client)",
            Duration = 3
        })
    end,
})

How to Execute Murder Mystery 2 Script – Very very good stuff open source

Step 1: Copy Code: Click the Copy Code button in the viewer above to grab the clean Lua loadstring.

Step 2: Launch Executor: Open a compatible, unpatched executor. If you need one, check our Roblox Executors Directory.

Step 3: Join Experience: Launch Roblox and join Murder Mystery 2.

Step 4: Attach & Run: Attach/inject your executor into the Roblox process, paste the code into the script tab, and press Execute.

Created By

EviIAlienWare
EviIAlienWare
Script Creator
View Author Profile

Roblox Experience

Active Players:409.8K
Play on Roblox

Features & Information

Execute Murder Mystery 2 Script – Very very good stuff open source. Key system required, created by EviIAlienWare, updated Sep 6, 2023. Tested and working on supported executors.

Script Changelog (1)

@EviIAlienWareMar 28, 2025

Create script

Community Comments (1)

latwice989latwice989Sep 30, 2023(edited)

https://discord.com/invite/HUBfmJUA2H

Frequently Asked Questions

How do I execute Murder Mystery 2 Script – Very very good stuff open source in Roblox?

To run Murder Mystery 2 Script – Very very good stuff open source, copy the Lua loadstring from the code viewer above, launch Roblox and join Murder Mystery 2, attach a working executor (such as Potassium, Solara, or Delta from our Executors directory), paste the code into your executor console, and click Execute.

Is Murder Mystery 2 Script – Very very good stuff open source keyless or does it require an access key?

Murder Mystery 2 Script – Very very good stuff open source requires an access key. You can retrieve the official key directly using the Get Script Key link provided above.

Is Murder Mystery 2 Script – Very very good stuff open source currently safe and working?

This script is active and operational. Always test scripts using a secondary (alt) Roblox account to safeguard your main profile against anti-cheat bans.