Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

(Self Solved) Trying to keep certain parts in a string that is inside a table? I accept answers.

I've been coding a game for the past couple days and I ran into this problem that I have yet to figure out. So a table gets created that gets the children of the players Character. So now at this point we have our table created and we sort through it. Then the problem comes in when I make a string of Names that belong in the players Character that I do not want to delete but instead it deletes everything inside the players Character. I know what the problem is just I do not know how to go about fixing it since I'm just now getting started in Tables. I hope I worded this correctly but any help would greatly be appreciated! I think I need to run through the entire string before I run the :Destroy function but I don't know how I would do that.

local object = script.Parent
local partsToKeep = {"Head", "HumanoidRootPart"} ----Parts I want to keep 

local function infectPlayer(hit)
	if hit.Parent:FindFirstChild("Humanoid")then
		if hit.Parent.Infected.Value == false then
			hit.Parent.Infected.Value = true
			local playersTable = hit.Parent:GetChildren()
			for i, v in pairs(playersTable) do
				print(i .. " is = to " .. v.Name)
				for _, p in pairs(partsToKeep) do
					if v.Name ~= p.Name then  ----Possible broken code 
						v:Destroy()
					end
				end
			end	
		end
	end
end
object.Touched:Connect(infectPlayer)

1 answer

I've came up with some new code that correctly works. If you have a better way to script it let me know, I'm always willing to learn. Fixed Code is below

local object = script.Parent
local partsToKeep = {"Head", "HumanoidRootPart"}
local killPart = nil

local function infectPlayer(hit)
	if hit.Parent:FindFirstChild("Humanoid")then
		if hit.Parent.Infected.Value == false then
			hit.Parent.Infected.Value = true
			local playersTable = hit.Parent:GetChildren()
			for i, v in pairs(playersTable) do
				---print(i .. " is = to " .. v.Name)
				for _, p in pairs(partsToKeep) do
					if v.Name == p then
						killPart = 1
						print(p)
					end
				end
				if killPart == 1 then
					killPart = 0
				else
					v:Destroy()
				end
			end	
		end
	end
end
object.Touched:Connect(infectPlayer)

This discussion is preserved as it was. New answers, comments, and votes are closed.