Verifying target visibility before firing in Luau:
local function IsVisible(targetHead, localHead, targetCharacter, localCharacter)
local params = RaycastParams.new()
params.FilterType = RaycastFilterType.Exclude
params.FilterDescendantsInstances = { localCharacter, targetCharacter }
params.IgnoreWater = true
local origin = localHead.Position
local direction = targetHead.Position - origin
local result = workspace:Raycast(origin, direction, params)
-- If ray hits no obstacles, player is directly visible
return result == nil
end