hi so i have this nuke script so that when a certain gamepass is bought it activates i want it to activate in all servers can somebody modify this script and show me
local mps = game:GetService("MarketplaceService")
local ts = game:GetService("TweenService")
local nukeFolder = game.ReplicatedStorage:WaitForChild("NukeFolder")
local remoteEvent = nukeFolder:WaitForChild("NukeRemoteEvent")
local isNuking = nukeFolder:WaitForChild("IsNuking")
local productId = nukeFolder:WaitForChild("DeveloperProductId").Value
function processReceipt(receipt)
if receipt.ProductId == productId then
if isNuking.Value == true then
return Enum.ProductPurchaseDecision.NotProcessedYet
else
isNuking.Value = true
local plrName = game.Players:GetNameFromUserIdAsync(receipt.PlayerId)
remoteEvent:FireAllClients("nuke message", plrName .. " has launched a nuke!")
local alarmSound = nukeFolder.AlarmSound:Clone()
alarmSound.Parent = workspace
alarmSound.Looped = true
alarmSound:Play()
wait(8)
local nuke = nukeFolder:WaitForChild("Nuke"):Clone()
local nukeSound = nukeFolder.NukeSound:Clone()
nukeSound.Parent = nuke
nukeSound.Looped = true
nukeSound:Play()
nuke.Position = workspace.Baseplate.Position + Vector3.new(0, nuke.Size.Y * 5, 0)
nuke.Anchored = true
nuke.Parent = workspace
local nukeTweenInfo = TweenInfo.new(8, Enum.EasingStyle.Linear)
local nukeTween = ts:Create(nuke, nukeTweenInfo, {Position = workspace.Baseplate.Position + Vector3.new(0, nuke.Size.Y/2 + 7, 0)})
nukeTween:Play()
nukeTween.Completed:Wait()
nuke:Destroy()
remoteEvent:FireAllClients("shake camera")
local explosionPart = nukeFolder.ExplosionPart:Clone()
explosionPart.Anchored = true
explosionPart.CanCollide = false
explosionPart.Size = Vector3.new(0, 0, 0)
explosionPart.Position = workspace.Baseplate.Position
explosionPart.Parent = workspace
local explosionSound = nukeFolder.ExplosionSound:Clone()
explosionSound.Parent = explosionPart
explosionSound:Play()
local oldRespawnTime = game.Players.RespawnTime
game.Players.RespawnTime = explosionSound.TimeLength
local explosionTweenInfo = TweenInfo.new(explosionSound.TimeLength, Enum.EasingStyle.Linear)
local explosionTween = ts:Create(explosionPart, explosionTweenInfo, {Size = Vector3.new(workspace.Baseplate.Size.X, workspace.Baseplate.Size.X, workspace.Baseplate.Size.X)})
explosionTween:Play()
for i, player in pairs(game.Players:GetPlayers()) do
local char = player.Character
if char then
local distance = (char.HumanoidRootPart.Position - explosionPart.Position).Magnitude
spawn(function()
repeat
wait(0.2)
until explosionPart.Size.X/2 >= distance - 30
remoteEvent:FireClient(player, "lighting effect")
wait(1)
char.Humanoid.Health = 0
end)
end
end
explosionSound.Ended:Wait()
game.Players.RespawnTime = oldRespawnTime
alarmSound:Destroy()
explosionPart:Destroy()
wait(5)
isNuking.Value = false
return Enum.ProductPurchaseDecision.PurchaseGranted
end
end
end
mps.ProcessReceipt = processReceipt
Use MessagingService to publish and receive events from different servers. Also, your code is extremely prone to errors because of your implementation of .ProcessReciept. I strongly advise you to follow Roblox’s tutorial on Developer Products.
Code:
--//Services
local Players = game:GetService("Players")
local mps = game:GetService("MarketplaceService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local MessagingService = game:GetService("MessagingService")
local ts = game:GetService("TweenService")
--//Variables
local nukeFolder = ReplicatedStorage:WaitForChild("NukeFolder")
local remoteEvent = nukeFolder:WaitForChild("NukeRemoteEvent")
local isNuking = nukeFolder:WaitForChild("IsNuking")
local productId = nukeFolder:WaitForChild("DeveloperProductId").Value
--//Functions
local function processReceipt(receipt)
if receipt.ProductId ~= productId then
return
end
if isNuking.Value then
return Enum.ProductPurchaseDecision.NotProcessedYet
else
isNuking.Value = true
local plrName = Players:GetNameFromUserIdAsync(receipt.PlayerId)
MessagingService:PublishAsync("Nuke", plrName)
return Enum.ProductPurchaseDecision.PurchaseGranted
end
end
MessagingService:SubscribeAsync("Nuke", function(message)
remoteEvent:FireAllClients("nuke message", message.Data .. " has launched a nuke!")
local alarmSound = nukeFolder.AlarmSound:Clone()
alarmSound.Parent = workspace
alarmSound.Looped = true
alarmSound:Play()
task.wait(8)
local nuke = nukeFolder:WaitForChild("Nuke"):Clone()
local nukeSound = nukeFolder.NukeSound:Clone()
nukeSound.Parent = nuke
nukeSound.Looped = true
nukeSound:Play()
nuke.Position = workspace.Baseplate.Position + Vector3.new(0, nuke.Size.Y * 5, 0)
nuke.Anchored = true
nuke.Parent = workspace
local nukeTweenInfo = TweenInfo.new(8, Enum.EasingStyle.Linear)
local nukeTween = ts:Create(nuke, nukeTweenInfo, {Position = workspace.Baseplate.Position + Vector3.new(0, nuke.Size.Y/2 + 7, 0)})
nukeTween:Play()
nukeTween.Completed:Wait()
nuke:Destroy()
remoteEvent:FireAllClients("shake camera")
local explosionPart = nukeFolder.ExplosionPart:Clone()
explosionPart.Anchored = true
explosionPart.CanCollide = false
explosionPart.Size = Vector3.new(0, 0, 0)
explosionPart.Position = workspace.Baseplate.Position
explosionPart.Parent = workspace
local explosionSound = nukeFolder.ExplosionSound:Clone()
explosionSound.Parent = explosionPart
explosionSound:Play()
local oldRespawnTime = Players.RespawnTime
Players.RespawnTime = explosionSound.TimeLength
local explosionTweenInfo = TweenInfo.new(explosionSound.TimeLength, Enum.EasingStyle.Linear)
local explosionTween = ts:Create(explosionPart, explosionTweenInfo, {Size = Vector3.new(workspace.Baseplate.Size.X, workspace.Baseplate.Size.X, workspace.Baseplate.Size.X)})
explosionTween:Play()
for i, player in pairs(Players:GetPlayers()) do
local char = player.Character
if not char then
continue
end
local distance = (char.HumanoidRootPart.Position - explosionPart.Position).Magnitude
task.spawn(function()
repeat
task.wait(0.2)
until explosionPart.Size.X/2 >= distance - 30
remoteEvent:FireClient(player, "lighting effect")
task.wait(1)
char.Humanoid.Health = 0
end)
end
explosionSound.Ended:Wait()
Players.RespawnTime = oldRespawnTime
alarmSound:Destroy()
explosionPart:Destroy()
task.wait(5)
isNuking.Value = false
end)
mps.ProcessReceipt = processReceipt