Why doesn't "my" capture the flag code work? the flag falls down.
im working on a capture the flag game, and when a player with dies, the flag is supposed to stay there for another player to pick up, but for some reason it falls through the ground instead.
here's "my" code, it's taken from the capture the flag template, i did use a few slight edits, but i dont know why its broken.
001 | ocal FlagStandManager = { } |
004 | local Players = game.Players |
007 | local Configurations = require(game.ServerStorage.Configurations) |
010 | local FlagObjects = { } |
011 | local FlagCarriers = { } |
012 | local Events = game.ReplicatedStorage.Events |
013 | local CaptureFlag = Events.CaptureFlag |
014 | local ReturnFlag = Events.ReturnFlag |
019 | local function DestroyFlag(flagObject) |
020 | flagObject.Flag:Destroy() |
021 | for player, object in pairs (FlagCarriers) do |
022 | if object = = flagObject then |
023 | FlagCarriers [ player ] = nil |
028 | local function OnCarrierDied(player) |
029 | local flagObject = FlagCarriers [ player ] |
031 | local flagPole = flagObject.FlagPole |
032 | local flagBanner = flagObject.FlagBanner |
034 | flagPole.CanCollide = false |
035 | flagBanner.CanCollide = false |
036 | flagPole.Anchored = true |
037 | flagBanner.Anchored = true |
039 | flagObject.PickedUp = false |
041 | FlagCarriers [ player ] = nil |
043 | if Configurations.RETURN_FLAG_ON_DROP then |
044 | wait(Configurations.FLAG_RESPAWN_TIME) |
045 | if not flagObject.AtSpawn and not flagObject.PickedUp then |
046 | DestroyFlag(flagObject) |
048 | ReturnFlag:Fire(flagObject.FlagBanner.BrickColor) |
054 | local function PickupFlag(player, flagObject) |
055 | FlagCarriers [ player ] = flagObject |
056 | flagObject.AtSpawn = false |
057 | flagObject.PickedUp = true |
060 | if player.Character.Humanoid.RigType = = Enum.HumanoidRigType.R 6 then |
061 | torso = player.Character:FindFirstChild( 'Torso' ) |
063 | torso = player.Character:FindFirstChild( 'UpperTorso' ) |
065 | local flagPole = flagObject.FlagPole |
066 | local flagBanner = flagObject.FlagBanner |
068 | flagPole.Anchored = false |
069 | flagBanner.Anchored = false |
070 | flagPole.CanCollide = false |
071 | flagBanner.CanCollide = false |
072 | local weld = Instance.new( 'Weld' , flagPole) |
073 | weld.Name = 'PlayerFlagWeld' |
074 | weld.Part 0 = flagPole |
076 | weld.C 0 = CFrame.new( 0 , 0 ,- 1 ) |
079 | local function BindFlagTouched(flagObject) |
080 | local flagPole = flagObject.FlagPole |
081 | local flagBanner = flagObject.FlagBanner |
082 | flagPole.Touched:connect( function (otherPart) |
083 | local player = Players:GetPlayerFromCharacter(otherPart.Parent) |
084 | if not player then return end |
085 | if not player.Character then return end |
086 | local humanoid = player.Character:FindFirstChild( 'Humanoid' ) |
087 | if not humanoid then return end |
088 | if humanoid.Health < = 0 then return end |
089 | if flagBanner.BrickColor ~ = player.TeamColor and not flagObject.PickedUp then |
090 | PickupFlag(player, flagObject) |
091 | elseif flagBanner.BrickColor = = player.TeamColor and not flagObject.AtSpawn and Configurations.FLAG_RETURN_ON_TOUCH then |
092 | DestroyFlag(flagObject) |
094 | ReturnFlag:Fire(flagObject.FlagBanner.BrickColor) |
099 | function MakeFlag(flagObject) |
100 | flagObject.Flag = flagObject.FlagCopy:Clone() |
101 | flagObject.Flag.Parent = flagObject.FlagContainer |
102 | flagObject.FlagPole = flagObject.Flag.FlagPole |
103 | flagObject.FlagBanner = flagObject.Flag.FlagBanner |
104 | flagObject.FlagBanner.CanCollide = false |
105 | flagObject.AtSpawn = true |
106 | flagObject.PickedUp = false |
107 | BindFlagTouched(flagObject) |
110 | local function BindBaseTouched(flagObject) |
111 | local flagBase = flagObject.FlagBase |
112 | flagBase.Touched:connect( function (otherPart) |
113 | local player = Players:GetPlayerFromCharacter(otherPart.Parent) |
114 | if not player then return end |
115 | if flagBase.BrickColor = = player.TeamColor and FlagCarriers [ player ] then |
116 | CaptureFlag:Fire(player) |
117 | local otherFlag = FlagCarriers [ player ] |
118 | DestroyFlag(otherFlag) |
120 | if player.Team = = game.Teams.Red then |
121 | game.Workspace.RedPoints.Value = game.Workspace.RedPoints.Value + 1 |
123 | if player.Team = = game.Teams.Blue then |
124 | game.Workspace.BluePoints.Value = game.Workspace.BluePoints.Value + 1 |
126 | if game.Workspace.Mode.Value = = 2 then |
127 | player.Character.Humanoid.WalkSpeed = 30 |
128 | if player.Team = = game.Teams.Red then |
129 | game.Workspace.RedPoints.Value = game.Workspace.RedPoints.Value + 1 |
131 | if player.Team = = game.Teams.Blue then |
132 | game.Workspace.BluePoints.Value = game.Workspace.BluePoints.Value + 1 |
135 | if game.Workspace.Mode.Value = = 3 then |
136 | if player.Team = = game.Teams.Red then |
137 | game.Workspace.RedPoints.Value = game.Workspace.RedPoints.Value - 1 |
138 | game.Workspace.BluePoints.Value = game.Workspace.BluePoints.Value - 1 |
140 | if player.Team = = game.Teams.Blue then |
141 | game.Workspace.BluePoints.Value = game.Workspace.BluePoints.Value - 1 |
142 | game.Workspace.RedPoints.Value = game.Workspace.RedPoints.Value - 1 |
149 | local function OnPlayerAdded(player) |
150 | player.CharacterAdded:connect( function (character) |
151 | character:WaitForChild( 'Humanoid' ).Died:connect( function () OnCarrierDied(player) end ) |
153 | player.CharacterRemoving:connect( function () |
154 | OnCarrierDied(player) |
159 | function FlagStandManager:Init(container) |
160 | local flagObject = { } |
162 | local success, message = pcall ( function () |
163 | flagObject.AtSpawn = true |
164 | flagObject.PickedUp = false |
165 | flagObject.TeamColor = container.FlagStand.BrickColor |
166 | flagObject.Flag = container.Flag |
167 | flagObject.FlagPole = container.Flag.FlagPole |
168 | flagObject.FlagBanner = container.Flag.FlagBanner |
169 | flagObject.FlagBase = container.FlagStand |
170 | flagObject.FlagCopy = container.Flag:Clone() |
171 | flagObject.FlagContainer = container |
174 | warn( "Flag object not built correctly. Please load fresh template to see how flag stand is expected to be made." ) |
177 | BindBaseTouched(flagObject) |
178 | DestroyFlag(flagObject) |
181 | table.insert(FlagObjects, flagObject) |
185 | Players.PlayerAdded:connect(OnPlayerAdded) |
187 | return FlagStandManager |