This script is supposed to manage events and execute functions
However, the script doesn't work, and I don't know why. Output didn't give me anything.
Can someone please help me?
There's two scripts involved.
Here's the one that reacts to events when they are fired:
local Players = game.Players local Events = game.ReplicatedStorage.Events local CaptureFlag = Events.CaptureFlag local ReturnFlag = Events.ReturnFlag local GUI2Change = game.StarterGui.Notifier.Frame:WaitForChild("Text") function OnCaptureFlag(player) game.ServerScriptService.Score.Value = game.ServerScriptService.Score.Value + 1 local player = game.Players:getPlayers() GUI2Change.Text = "The flag has been captured!" for i = 1, #player do player[i].PlayerGui.Notifier.Frame.Text.Text = "The flag has been captured!" end end local function OnReturnFlag(flagColor) local player = game.Players:getPlayers() GUI2Change.Text = "The flag has been returned!" for i = 1, #player do player[i].PlayerGui.Notifier.Frame.Text.Text = "The flag has been returned!" end end CaptureFlag.Event:connect(OnCaptureFlag) ReturnFlag.Event:connect(OnReturnFlag)
and here's the one that actually fires them:
local FlagStandManager = {} -- ROBLOX Services local Players = game.Players -- Game Services local Configurations = require(game.ServerStorage.Configurations) -- Local Variables local FlagObjects = {} local FlagCarriers = {} local Events = game.ReplicatedStorage.Events local CaptureFlag = Events.CaptureFlag local ReturnFlag = Events.ReturnFlag -- Local Functions local MakeFlag local function DestroyFlag(flagObject) flagObject.Flag:Destroy() for player, object in pairs(FlagCarriers) do if object == flagObject then FlagCarriers[player] = nil end end end local function OnCarrierDied(player) local flagObject = FlagCarriers[player] if flagObject then local flagPole = flagObject.FlagPole local flagBanner = flagObject.FlagBanner flagPole.CanCollide = false flagBanner.CanCollide = false flagPole.Anchored = true flagBanner.Anchored = true flagObject.PickedUp = false FlagCarriers[player] = nil if Configurations.RETURN_FLAG_ON_DROP then wait(Configurations.FLAG_RESPAWN_TIME) if not flagObject.AtSpawn and not flagObject.PickedUp then DestroyFlag(flagObject) MakeFlag(flagObject) ReturnFlag:Fire(flagObject.FlagBanner.BrickColor) end end end end local function PickupFlag(player, flagObject) FlagCarriers[player] = flagObject flagObject.AtSpawn = false flagObject.PickedUp = true local torso = player.Character:FindFirstChild('Torso') local flagPole = flagObject.FlagPole local flagBanner = flagObject.FlagBanner flagPole.Anchored = false flagBanner.Anchored = false flagPole.CanCollide = false flagBanner.CanCollide = false local weld = Instance.new('Weld', flagPole) weld.Name = 'PlayerFlagWeld' weld.Part0 = flagPole weld.Part1 = torso weld.C0 = CFrame.new(0,0,-1) end local function BindFlagTouched(flagObject) local flagPole = flagObject.FlagPole local flagBanner = flagObject.FlagBanner flagPole.Touched:connect(function(otherPart) local player = Players:GetPlayerFromCharacter(otherPart.Parent) if not player then return end if not player.Character then return end local humanoid = player.Character:FindFirstChild('Humanoid') if not humanoid then return end if humanoid.Health <= 0 then return end if flagBanner.BrickColor ~= player.TeamColor and not flagObject.PickedUp then PickupFlag(player, flagObject) elseif flagBanner.BrickColor == player.TeamColor and not flagObject.AtSpawn and Configurations.FLAG_RETURN_ON_TOUCH then DestroyFlag(flagObject) MakeFlag(flagObject) ReturnFlag:Fire(flagObject.FlagBanner.BrickColor) end end) end function MakeFlag(flagObject) flagObject.Flag = flagObject.FlagCopy:Clone() flagObject.Flag.Parent = flagObject.FlagContainer flagObject.FlagPole = flagObject.Flag.FlagPole flagObject.FlagBanner = flagObject.Flag.FlagBanner flagObject.FlagBanner.CanCollide = false flagObject.AtSpawn = true flagObject.PickedUp = false BindFlagTouched(flagObject) end local function BindBaseTouched(flagObject) local flagBase = flagObject.FlagBase flagBase.Touched:connect(function(otherPart) local player = Players:GetPlayerFromCharacter(otherPart.Parent) if not player then return end if flagBase.BrickColor == player.TeamColor and FlagCarriers[player] then CaptureFlag:Fire(player) local otherFlag = FlagCarriers[player] DestroyFlag(otherFlag) MakeFlag(otherFlag) end end) end local function OnPlayerAdded(player) player.CharacterAdded:connect(function(character) character:WaitForChild('Humanoid').Died:connect(function() OnCarrierDied(player) end) end) player.CharacterRemoving:connect(function() OnCarrierDied(player) end) end -- Public Functions function FlagStandManager:Init(container) local flagObject = {} local success, message = pcall(function() flagObject.AtSpawn = true flagObject.PickedUp = false flagObject.TeamColor = container.FlagStand.BrickColor flagObject.Flag = container.Flag flagObject.FlagPole = container.Flag.FlagPole flagObject.FlagBanner = container.Flag.FlagBanner flagObject.FlagBase = container.FlagStand flagObject.FlagCopy = container.Flag:Clone() flagObject.FlagContainer = container end) if not success then warn("Flag object not built correctly. Please load fresh template to see how flag stand is expected to be made.") end BindBaseTouched(flagObject) DestroyFlag(flagObject) MakeFlag(flagObject) table.insert(FlagObjects, flagObject) end -- Event Bindings Players.PlayerAdded:connect(OnPlayerAdded) return FlagStandManager