Disable a script after player reaches low health

You can write your topic however you want, but you need to answer these questions:

  1. What do you want to achieve? I want to stop a script from working while a player reaches low health

Script I want to disable:
image

 local humanoid = script.Parent:FindFirstChild("Humanoid")

while true do
	wait ()
	if humanoid.Health <= 20 then 
		humanoid.WalkSpeed = 4 
	elseif
		humanoid.Health >= 20 then
		humanoid.WalkSpeed = 15
	end
end
2 Likes

There

local humanoid = script.Parent:FindFirstChild("Humanoid")

while true do
	wait ()
	if humanoid.Health <= 20 then 
		humanoid.WalkSpeed = 4 
game.ReplicatedStorage.Module.Disabled = true
	elseif
		humanoid.Health >= 20 then
		humanoid.WalkSpeed = 15

	end
end
2 Likes

Alright thanks, I will try this

1 Like

I tried it but it gave me this error:

1 Like

Oh yes, I realized that you can’t disable a module script.

2 Likes

Could you possibly share the Module code?

1 Like

Try using “break” there instead

2 Likes

Maybe try

local humanoid = script.Parent:FindFirstChild("Humanoid")

while true do
	wait ()
	if humanoid.Health <= 20 then 
		humanoid.WalkSpeed = 4 
        break
	elseif
		humanoid.Health >= 20 then
		humanoid.WalkSpeed = 15
	end
end
1 Like

This is the module I edited from @luisgamercooI231fan

Here it is anyways:

 local module = {}
local data = {}
local player = game:GetService("Players").LocalPlayer
local character = player.Character
local UIS = game:GetService("UserInputService")
local TS = game:GetService("TweenService")
local CAS = game:GetService("ContextActionService")


local Anim = Instance.new('Animation')
Anim.AnimationId = "rbxassetid://9299232261"
PlayAnim = character.Humanoid:LoadAnimation(Anim)


local function scale_button(CurrentCamera, name:string)
	local MinAxis = math.min(CurrentCamera.ViewportSize.X, CurrentCamera.ViewportSize.Y)
	local IsSmallScreen = MinAxis <= 500
	local ActionButtonSize = IsSmallScreen and 70 or 120

	local function RescaleActionButton(Name)
		local ActionButton = CAS:GetButton(Name)

		if ActionButton then
			local ActionTitle = ActionButton:WaitForChild("ActionTitle")

			if not IsSmallScreen then
				ActionTitle.TextSize = 36
			else
				ActionTitle.TextSize = 18
			end
			ActionButton.Size = UDim2.fromOffset(ActionButtonSize, ActionButtonSize)
		end
	end
	RescaleActionButton(name)
end
function module.new()
	if game:GetService("RunService"):IsClient() then
		local plr = game:GetService("Players").LocalPlayer
		local self = setmetatable({}, {})
		local start_time = nil
		self.phone_button_offset = 45 
		self.tablet_button_offset = 2.45 
		self.mobile_button_icon = "rbxassetid://1921587812" 
		local sprinted = Instance.new("BindableEvent")
		local unsprinted = Instance.new("BindableEvent")
		self.camera = workspace.CurrentCamera
		self.mobile_button_title = nil 
		self.run_animation = nil 
		self.default_FOV = 70
		self.FOV_tween_speed = 0.3 
		self.FOV_tween_style = Enum.EasingStyle.Quad 
		self.FOV_tween_direction = Enum.EasingDirection.Out 
		self.FOV_tween_info = TweenInfo.new(self.FOV_tween_speed, self.FOV_tween_style, self.FOV_tween_direction, 0, false, 0)
		self.default_speed = game:GetService("StarterPlayer").CharacterWalkSpeed 
		self.run_speed = self.default_speed * 1.27
		self.uses_default_ui = true
		self.sprint_ui = nil
		self.Sprinted = sprinted.Event
		self.Unsprinted = unsprinted.Event
		self.use_run_FOV = true
		self.running_FOV = 83 
		local goals = {
			FieldOfView = self.running_FOV
		}
		local stop_goals = {
			FieldOfView = self.default_FOV
		}
		local FOV_tween = TS:Create(self.camera, self.FOV_tween_info, goals)
		local FOV_stop_tween = TS:Create(self.camera,self.FOV_tween_info, stop_goals)
		self.valid_keys = { 
			--[PC]--
			Enum.KeyCode.LeftShift, 
			Enum.KeyCode.RightShift,
			--[Xbox]--
			Enum.KeyCode.ButtonX -- the X button on controller
		}
		
		
		local function sprint(name, state)
			if state == Enum.UserInputState.Begin then
				start_time = tick()
				sprinted:Fire(start_time)
			else
				if start_time then
					unsprinted:Fire(tick(),tick() - start_time)
				else
					unsprinted:Fire(tick(),0)
				end

				start_time = nil
			end
		end
		self.Sprint = function(state:Enum.UserInputState)
			sprint(nil, state)
		end
		self.Sprinted:Connect(function(start_time)
			local char = plr.Character
			if char then
				local hum = char:FindFirstChildWhichIsA("Humanoid")
				if hum then
					hum.WalkSpeed = self.run_speed
					if hum.WalkSpeed > 15 then
						PlayAnim:Play()
					end
					if self.use_run_FOV then
						FOV_tween:Play()
					end

				end
			end
		end)
		self.Unsprinted:Connect(function(end_time, activation_time)
			local char = plr.Character
			if char then
				local hum = char:FindFirstChildWhichIsA("Humanoid")
				if hum then
					hum.WalkSpeed = self.default_speed
				
					PlayAnim:Stop()
					FOV_stop_tween:Play()
				end
			end
		end)

		function self:Init(id:string)
			table.insert(data, self)
			local CurrentCamera = self.camera
			if self.uses_default_ui == true and self.sprint_ui == nil then
				local MinAxis = math.min(CurrentCamera.ViewportSize.X, CurrentCamera.ViewportSize.Y)
				local IsSmallScreen = MinAxis <= 500
				local ActionButtonSize = IsSmallScreen and 70 or 120
				CAS:BindActionAtPriority(id, sprint, true, 10000, unpack(self.valid_keys))
				CAS:SetPosition(id, IsSmallScreen and UDim2.new(1, -(ActionButtonSize * 2.52), 1, -ActionButtonSize - self.phone_button_offset) or
					UDim2.new(1, -(ActionButtonSize * 2.52 - 10), 1, -ActionButtonSize  * self.tablet_button_offset))
				scale_button(CurrentCamera, id)
				if self.mobile_button_title then
					CAS:SetTitle(id, self.mobile_button_title)
				else
					CAS:SetImage(id, self.mobile_button_icon)
				end	
			elseif self.uses_default_ui == false and self.sprint_ui ~= nil then
				local ui:TextButton | ImageButton = self.sprint_ui
				if ui:IsA("TextButton") or ui:IsA("ImageButton") then
					CAS:BindActionAtPriority("sprint-action", sprint, false, 10000, unpack(self.valid_keys))
					if not UIS.KeyboardEnabled then
						ui.Visible = true
						ui.InputBegan:Connect(function(input)
							sprint(nil, input.UserInputState)
						end)
						ui.InputEnded:Connect(function(input)
							sprint(nil, input.UserInputState)				
						end)
					else --user has keyboard
						ui.Visible = false
					end
				end
			end
		end
		return self
	else
		error('please run sprinting module on client; exit code 1')
	end


end
function module:Get(id:string)
	for _, sprint_data in ipairs(data) do
		if sprint_data.id == id then
			return sprint_data
		end
	end


end
return module
1 Like

A module script cant be disabled and you should not use while true do here, u could replace it with GetPropertyChangedSignal()

1 Like

Create a :Destroy function in the module and then use the :Destroy function.

1 Like