Hi everyone I’m currently working on an IDK like Round…System IG and rn I want if the Innocents or the Murderer wins the Winner should get 200 Cash ima show 3 Scripts:(I think the Cash function should get added at the end of the third script
--ModalScript(ReplicatedStrage)
local mmSystem = {}
function mmSystem.ChooseRoles()
local players = game:GetService("Players")
local playersInGame = {}
for i, p in pairs(players:GetChildren())do
table.insert(playersInGame, p.Name)
end
if #playersInGame >= 2 then
local murderer = playersInGame[math.random(1, #playersInGame)]
table.remove(playersInGame, table.find(playersInGame, murderer))
players:FindFirstChild(murderer):WaitForChild("Role").Value = "Murderer"
for i, plrName in pairs(playersInGame) do
players:FindFirstChild(plrName):WaitForChild("Role").Value = "Innocent"
end
--Display Roles for Players
wait(2.5)
for i, playerInRound in pairs(players:GetChildren()) do
if playerInRound.Team.Name == "Playing" then
game.ReplicatedStorage.DisplayRole:FireClient(playerInRound)
end
end
wait(5)
local knifeclone = game.ReplicatedStorage.Sword:Clone()
knifeclone.Parent = players:FindFirstChild(murderer).Backpack
return " Success"
else
return "Not Enough Players"
end
end
return mmSystem
--CashServer(ServerScriptService)
local dss = game:GetService("DataStoreService")
local ds = dss:GetDataStore("DATA")
local mps = game:GetService("MarketplaceService")
local devProducts = require(game:GetService("ReplicatedStorage"):WaitForChild("DeveloperProducts"))
function saveData(plr:Player)
if not plr:FindFirstChild("DATA FAILED TO LOAD") then
local plrCash = plr.leaderstats.Cash.Value
local success, err = nil, nil
while true do
success, err = pcall(function()
ds:SetAsync(plr.UserId .. " - Cash", plrCash)
end)
if not success then
warn(err)
task.wait(0.01)
else
break
end
end
end
end
function loadData(plr:Player)
local dataFailedWarning = Instance.new("StringValue")
dataFailedWarning.Name = "DATA FAILED TO LOAD"
local success, plrData = nil, nil
while true do
success, plrData = pcall(function()
return ds:GetAsync(plr.UserId .. " - Cash")
end)
task.wait(0.02)
if not success then
dataFailedWarning.Parent = plr
warn(plrData)
else
break
end
end
dataFailedWarning:Destroy()
return plrData
end
function setupLeaderstats(plr:Player, savedCash:number)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = plr
local cash = Instance.new("IntValue")
cash.Name = "Cash"
cash.Value = savedCash or 0
cash.Parent = leaderstats
end
function handlePurchase(purchaseInfo)
local plr = game.Players:GetPlayerByUserId(purchaseInfo.PlayerId)
if not plr or plr:FindFirstChild("DATA FAILED TO LOAD") then
return Enum.ProductPurchaseDecision.NotProcessedYet
end
local productID = purchaseInfo.ProductId
if devProducts[productID] then
plr.leaderstats.Cash.Value += devProducts[productID].Cash
return Enum.ProductPurchaseDecision.PurchaseGranted
else
return Enum.ProductPurchaseDecision.NotProcessedYet
end
end
game.Players.PlayerRemoving:Connect(saveData)
game:BindToClose(function()
for _, plr in pairs(game.Players:GetPlayers()) do
saveData(plr)
end
end)
game.Players.PlayerAdded:Connect(function(plr)
local plrData = loadData(plr)
setupLeaderstats(plr, plrData)
end)
mps.ProcessReceipt = handlePurchase
--MainRoundScript(ServerScriptService)
-------------------------------------[AUTHOR: reccur]--------------------------------
local intermission = 50
local roundLength = 180
local inRound = game.ReplicatedStorage.InRound
local staus = game.ReplicatedStorage.Status
local playingTeam = game.Teams.Playing
local lobbyTeam = game.Teams.Lobby
local murderMysteryModule = require(game.ReplicatedStorage.MurderMysterySystem)
inRound.Changed:Connect(function()
if inRound.Value == true then
for i, plr in pairs(game.Players:GetChildren()) do
local char = plr.Character
local humanRoot = char:WaitForChild("HumanoidRootPart")
plr.Team = playingTeam
char:WaitForChild("Humanoid").Died:Connect(function()
plr.Team = lobbyTeam
end)
end
else
for i, plr in pairs(game.Players:GetChildren()) do
local char = plr.Character
local humanRoot = char:WaitForChild("HumanoidRootPart")
local human = char:WaitForChild("Humanoid")
humanRoot.CFrame = game.Workspace.lobbySpawn.CFrame
plr.Team = lobbyTeam
human:UnequipTools()
plr.Backpack:ClearAllChildren()
end
end
end)
local function round()
while true do
local requiredPlayers = 2
repeat
wait(1)
staus.Value = "Atleast ".. requiredPlayers.." players are needed to start a round"
until #game.Players:GetChildren() >= requiredPlayers
inRound.Value = false
for i = intermission, 0, -1 do
staus.Value = "Game will start in "..i.." seconds"
wait(1)
end
inRound.Value = true
local msg = murderMysteryModule.ChooseRoles()
for i = roundLength, 0, -1 do
staus.Value = "Game will end in "..i.." seconds"
local playing = {}
for i, plr in pairs(game.Players:GetChildren()) do
if plr.Team.Name == "Playing" then
table.insert(playing, plr.Name)
end
end
local MurdererAlive = false
local NonMurdererAlive = false
local murderer
for i, playerInRound in pairs(playing) do
if game.Players:FindFirstChild(playerInRound):WaitForChild("Role").Value == "Murderer" then
MurdererAlive = true
murderer = game.Players:FindFirstChild(playerInRound)
elseif game.Players:FindFirstChild(playerInRound):WaitForChild("Role").Value ~= "Murderer" then
NonMurdererAlive = true
end
end
if #playing == -1 then
staus.Value = "Everyone Has Died"
wait(3)
break
end
if MurdererAlive == true and NonMurdererAlive == false then
staus.Value = playing[1].." The Murderer Has Won!"
wait(3)
break
end
if (MurdererAlive == false and NonMurdererAlive == true) or NonMurdererAlive == true and i == 0 then
staus.Value = playing[1].." The Innocents Have Won!"
wait(3)
break
end
wait(1)
end
wait(3)
end
end
spawn(round)