I’m trying to make gui show when player enter safe zone
local part = script.Parent
local region = Region3.new(part.Position - part.Size/2, part.Position + part.Size/2)
local rp = game:GetService("ReplicatedStorage")
local remoteF = rp.showGui
part.Size = region.Size
part.Anchored = true
part.CanCollide = false
local ignore = {workspace.Baseplate, part, workspace.SpawnLocation}
while true do
wait()
part.Size = region.Size
local partsInRegion = workspace:FindPartsInRegion3WithIgnoreList(region, ignore, math.huge)
if #partsInRegion ~= 0 then
for i,v in pairs(partsInRegion) do
local humanoid = v.Parent:FindFirstChild("Humanoid") or v.Parent.Parent:FindFirstChild("Humanoid")
if humanoid then
remoteF:FireClient(humanoid.Parent)
print(humanoid.Parent)
humanoid.HealthChanged:Connect(function(hp)
humanoid.Health = 100
wait(0.1)
end)
end
end
end
end
I’m guessing this supposed to make gui update but :FireClient() takes a player argument, not character. To get player from character you can use game.Players:GetPlayerFromCharacter() so you should do this to fix that:
local player = `game.Players:GetPlayerFromCharacter(humanoid.Parent)
remoteF:FireClient(player)
If player’s character has touched the region and the player doesn’t have the safe zone GUI: clone the GUI from ServerStorage and set Parent property of the GUI to player.PlayerGui
Inform me about having any issue(s) with any of the steps above.
Modify your region script to make a table of players inside the region for every region update:
local part = script.Parent
local region = Region3.new(part.Position - part.Size/2, part.Position + part.Size/2)
local rp = game:GetService("ReplicatedStorage")
local remoteF = rp.showGui
part.Size = region.Size
part.Anchored = true
part.CanCollide = false
local ignore = {workspace.Baseplate, part, workspace.SpawnLocation}
while true do
wait()
local playersInRegion = {} -- The script should make a table of players, who are inside the region
part.Size = region.Size
local partsInRegion = workspace:FindPartsInRegion3WithIgnoreList(region, ignore, math.huge)
if #partsInRegion ~= 0 then
for i,v in pairs(partsInRegion) do
local humanoid = v.Parent:FindFirstChild("Humanoid") or v.Parent.Parent:FindFirstChild("Humanoid")
if humanoid then
remoteF:FireClient(humanoid.Parent)
print(humanoid.Parent)
humanoid.HealthChanged:Connect(function(hp)
humanoid.Health = 100
wait(0.1)
end)
end
end
end
end
EDIT: You can use this function for getting all players in region if you struggle to do it:
local function getAllPlayersInRegion(regionParts)
local tableOfPlayers = {}
for i, v in pairs(regionParts) do
local player = game:GetService("Players"):GetPlayerFromCharacter(v:FindFirstAncestorOfClass("Model"))
if player then
table.insert(tableOfPlayers, player)
end
end
return tableOfPlayers
end
How to delete the GUI if player left the region:
Use playersInRegion table to remove the GUI from players, who are outside the region. Use and modify this piece of code:
for i, v in pairs(game:GetService("Players"):GetPlayers()) do
if table.find(playersInRegion, v) == nil and v.PlayerGui:FindFirstChild("GUI_NAME_HERE") then
v.PLayerGui.GUI_NAME_HERE:Destroy()
end
end