hello developers of roblox
You can write your topic however you want, but you need to answer these questions:
What do you want to achieve?
-The code shown below is placed inside a module script, the module script functions as an ending script, when a player does something to trigger the ending, for this instance, eating a forbidden chip.
What is the issue?
in the module script you can see in the line that contains a print(“Test test”), it’s to test whether the script is running as it should. But it doesn’t appear in the output. No errors were shown in the output, but the script refuses to work. Everything else above that line works, the gui, the sound, everything works, even the lines of code that comes after a task.wait(). Weirdly enough, if i happen to remove the task.wait(3) that comes before the print(“test test”), the text appears in the output.
What solutions have you tried so far?
I searched everywhere, finding flaws in the script that could’ve been potentially causing this error. But i’ve yet to find anything that has helped me
-- Variables --
local SScript = game:GetService("ServerScriptService")
local RStorage = game:GetService("ReplicatedStorage")
local EndingsManager = require(SScript.Ending.EndingSettings)
local TweenService = game:GetService("TweenService")
local Audio = require(SScript.ModuleCode.SoundModule)
local AudioData = require(RStorage.ClientModules.GameData)
local Module = {}
-- Event functions for each ending
local events = {
Pandemic = function(player)
end,
UnsuccessfulEvasion = function(player)
end,
ForbiddenSnack = function(player)
local frame = player.PlayerGui.UI.EndingUI.MainFrame
-- Event logic for the ForbiddenSnack ending
-- Obtain necessary information from the EndingsManager
local endingData = EndingsManager.endings.ForbiddenSnack
local badgeId = endingData.badgeId
local kickMessage = endingData.kickMessage
local endingName = endingData.endingName
-- Perform actions specific to the ForbiddenSnack ending
-- Cutscene
local character = player.Character
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
local humanoidRootPart = character and character:FindFirstChild("HumanoidRootPart")
if not humanoid or not humanoidRootPart then
warn("Character or HumanoidRootPart not found for player: " .. player.Name)
return
end
-- Additional Functionalities
workspace.GameContainer.Audio.StomachGrowl:Play()
task.wait(3)
Audio.PlaySound(AudioData.SkibiBomb, 1, character.Torso, false)
workspace.GameContainer.Audio.StomachGrowl:Stop()
task.wait(1.1)
local explosion = Instance.new("Explosion")
explosion.Parent = workspace.TemporaryFX
explosion.Position = humanoidRootPart.Position
game.Debris:AddItem(explosion, 3)
task.wait(2)
workspace.GameContainer.Audio.Announcer_Defeat:Play()
frame.Visible = true
-- Initial position
local startPos = UDim2.new(0.5, 0, -0.9, 0)
-- Final position after bounce
local endPos = UDim2.new(0.5, 0, 0.5, 0)
-- Create the tween info for the bounce
local bounceInfo = TweenInfo.new(
2, -- Duration of the tween (5 seconds)
Enum.EasingStyle.Bounce, -- Bouncing easing style
Enum.EasingDirection.Out, -- Outward direction
0, -- Number of times to repeat (0 means no repeat)
false, -- Reverses the tween when repeating
0 -- Delay before starting the tween (in seconds)
)
-- Create the tween
local bounceTween = TweenService:Create(frame, bounceInfo, {Position = endPos})
bounceTween:Play()
task.wait(3) --- where the error starts
print("test test")
end,
-- Add more events for different endings here...
}
-- Function to trigger an ending event
function Module.TriggerEnding(player, endingName)
local event = events[endingName]
if event then
event(player)
else
warn("No event found for the ending: " .. endingName)
end
end
return Module
Help would be appreciated as this issue still remains unsolved
Most likely the issue isn’t with this script.
Could you provide more information about where this thread is running (i.e. where is it called from, a server/local script, is it in a model, are you using coroutines etc).
Currently my guess is that some other event is cancelling the thread from continuing during that wait time, perhaps the script is being destroyed somewhere else?
-- Variables --
local SScript = game:GetService("ServerScriptService")
local RStorage = game:GetService("ReplicatedStorage")
local EndingsManager = require(SScript.Ending.EndingSettings)
local TweenService = game:GetService("TweenService")
local Audio = require(SScript.ModuleCode.SoundModule)
local AudioData = require(RStorage.ClientModules.GameData)
local Tool = script.Parent;
local ValueSetting = require(RStorage.ClientModules.ValueSettings)
local playerservice = game:GetService("Players")
Consume = true
function Grab()
Tool.GripForward = Vector3.new(0.675, -0.675, -0.3)
Tool.GripPos = Vector3.new(0.4, -0.9, 0.9)
Tool.GripRight = Vector3.new(0.212, -0.212, 0.954)
Tool.GripUp = Vector3.new(0.707, 0.707, 0)
Tool.Handle.DrinkSound:Play()
task.wait(.8)
Tool.GripForward = Vector3.new(-1, 0, 0)
Tool.GripPos = Vector3.new(.2, 0, 0)
Tool.GripRight = Vector3.new(0, 0, -1)
Tool.GripUp = Vector3.new(0,1,0)
end
local EndingModule = require(SScript.Ending.MainHandler)
function onActivated()
if workspace:WaitForChild("Living"):FindFirstChild("Disabled") then return end
if not Consume then
return
end
Consume = false
Grab()
local character = Tool.Parent
local Player = playerservice:GetPlayerFromCharacter(character)
character.HumanoidRootPart.Anchored = true
EndingModule.TriggerEnding(Player, "ForbiddenSnack")
ValueSetting:CreateBooleanValue("Disabled", true)
end
function onEquipped()
Tool.Handle.OpenSound:Play()
end
script.Parent.Activated:connect(onActivated)
script.Parent.Equipped:connect(onEquipped)
This is the serverscript that is activitated when the tool is used. Could this potentially be the cause?
This is the only script that I am aware of to use the module script.
local SScript = game:GetService("ServerScriptService")
local RStorage = game:GetService("ReplicatedStorage")
local EndingsManager = require(SScript.Ending.EndingSettings)
local TweenService = game:GetService("TweenService")
local Audio = require(SScript.ModuleCode.SoundModule)
local AudioData = require(RStorage.ClientModules.GameData)
local Module = {}
function Module.TriggerEnding(player, endingName)
local event = events[endingName]
if event then
event(player)
else
warn("No event found for the ending: " .. endingName)
end
end
local events = {
Pandemic = function(player)
-- add your logic for the Pandemic ending here
end,
UnsuccessfulEvasion = function(player)
-- add your logic for the UnsuccessfulEvasion ending here
end,
ForbiddenSnack = function(player)
-- add your logic for the ForbiddenSnack ending here
local frame = player.PlayerGui.UI.EndingUI.MainFrame
-- event logic for the ForbiddenSnack ending
local endingData = EndingsManager.endings.ForbiddenSnack
local badgeId = endingData.badgeId
local kickMessage = endingData.kickMessage
local endingName = endingData.endingName
-- perform actions specific to the ForbiddenSnack ending
local character = player.Character
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
local humanoidRootPart = character and character:FindFirstChild("HumanoidRootPart")
if not humanoid or not humanoidRootPart then
warn("Character or HumanoidRootPart not found for player: " .. player.Name)
return
end
workspace.GameContainer.Audio.StomachGrowl:Play()
wait(3) -- wait for 3 seconds
Audio.PlaySound(AudioData.SkibiBomb, 1, character.Torso, false)
workspace.GameContainer.Audio.StomachGrowl:Stop()
wait(1.1) -- wait for 1.1 seconds
local explosion = Instance.new("Explosion")
explosion.Parent = workspace.TemporaryFX
explosion.Position = humanoidRootPart.Position
game.Debris:AddItem(explosion, 3)
wait(2) -- wait for 2 seconds
workspace.GameContainer.Audio.Announcer_Defeat:Play()
frame.Visible = true
local startPos = UDim2.new(0.5, 0, -0.9, 0)
local endPos = UDim2.new(0.5, 0, 0.5, 0)
local bounceInfo = TweenInfo.new(
2, -- duration of the tween (2 seconds)
Enum.EasingStyle.Bounce, -- Bouncing easing style
Enum.EasingDirection.Out, -- Outward direction
0, -- number of times to repeat (0 means no repeat)
false, -- reverses the tween when repeating
0 -- delay before starting the tween (in seconds)
)
local bounceTween = TweenService:Create(frame, bounceInfo, {Position = endPos})
bounceTween:Play()
wait(3) -- wait for 3 seconds
print("test test") -- this line will execute after the 3-second delay
end,
-- add whatever you want for different endings here.
}
return Module
Here is what I changed:
Moved the print("test test") line inside the ForbiddenSnack event, after the wait(3)
Used wait() instead of task.wait() for delays, which is a cleaner way to handle delays
Simplified the code structure for better readability
Hope this helps, and good luck with what you are doing!
35:22.598 CreateCollisionGroup is deprecated, please use RegisterCollisionGroup instead. More info: https://devforum.roblox.com/t/updates-to-collision-groups/1990215 - Studio
18:35:22.599 SetPartCollisionGroup is deprecated, please use BasePart.CollisionGroup instead. More info: https://devforum.roblox.com/t/updates-to-collision-groups/1990215
local SScript = game:GetService("ServerScriptService")
local RStorage = game:GetService("ReplicatedStorage")
local EndingsManager = require(SScript.Ending.EndingSettings)
local TweenService = game:GetService("TweenService")
local Audio = require(SScript.ModuleCode.SoundModule)
local AudioData = require(RStorage.ClientModules.GameData)
local Module = {}
local events = {
Pandemic = function(player)
-- add your logic for the Pandemic ending here
end,
UnsuccessfulEvasion = function(player)
-- add your logic for the UnsuccessfulEvasion ending here
end,
ForbiddenSnack = function(player)
-- add your logic for the ForbiddenSnack ending here
local frame = player.PlayerGui.UI.EndingUI.MainFrame
-- event logic for the ForbiddenSnack ending
local endingData = EndingsManager.endings.ForbiddenSnack
local badgeId = endingData.badgeId
local kickMessage = endingData.kickMessage
local endingName = endingData.endingName
-- perform actions specific to the ForbiddenSnack ending
local character = player.Character
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
local humanoidRootPart = character and character:FindFirstChild("HumanoidRootPart")
if not humanoid or not humanoidRootPart then
warn("Character or HumanoidRootPart not found for player: " .. player.Name)
return
end
workspace.GameContainer.Audio.StomachGrowl:Play()
wait(3) -- wait for 3 seconds
Audio.PlaySound(AudioData.SkibiBomb, 1, character.Torso, false)
workspace.GameContainer.Audio.StomachGrowl:Stop()
wait(1.1) -- wait for 1.1 seconds
local explosion = Instance.new("Explosion")
explosion.Parent = workspace.TemporaryFX
explosion.Position = humanoidRootPart.Position
game.Debris:AddItem(explosion, 3)
wait(2) -- wait for 2 seconds
workspace.GameContainer.Audio.Announcer_Defeat:Play()
frame.Visible = true
local startPos = UDim2.new(0.5, 0, -0.9, 0)
local endPos = UDim2.new(0.5, 0, 0.5, 0)
local bounceInfo = TweenInfo.new(
2, -- duration of the tween (2 seconds)
Enum.EasingStyle.Bounce, -- Bouncing easing style
Enum.EasingDirection.Out, -- Outward direction
0, -- number of times to repeat (0 means no repeat)
false, -- reverses the tween when repeating
0 -- delay before starting the tween (in seconds)
)
local bounceTween = TweenService:Create(frame, bounceInfo, {Position = endPos})
bounceTween:Play()
wait(3) -- wait for 3 seconds
print("test test") -- this line will execute after the 3-second delay
end,
-- add whatever you want for different endings here.
}
function Module.TriggerEnding(player, endingName)
local event = events[endingName]
if event then
event(player)
else
warn("No event found for the ending: " .. endingName)
end
end
return Module
My code doesn’t appear to use SetPartCollisionGroup and CreateCollisionGroup functions. If you do have parts with these functions, you’ll need to update them to use BasePart.CollisionGroup and RegisterCollisionGroup.
Hmm, I don’t use explosions much, but from reading the docs they clean themselves up so don’t need to be added to debris, not sure this would stop the script though.
My other thought is the explosion destroying the humanoid and the tool being cleaned up by the default died/respawn scripts, which might cancel the thread. In this case try reparenting the tool to the workspace before the explosion occurs or changing the explosion.destroypartsradius to 0 to test.