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

Works, but how can I find the character that has shot the weapon from a server script?

local Tool = script.Parent.Parent
debounce = false
local Muzzle = Tool.Muzzle.PointLight
local FireSound = script:WaitForChild("FireSound")
local HitSound = script:WaitForChild("HitSound")
local CS = game:GetService("CollectionService")
local player = game.Players.LocalPlayer



game.ReplicatedStorage.RayCastEvent.OnServerEvent:Connect(function(Player,FromP,ToP)
	local RayCast = Ray.new(FromP,(ToP-FromP).unit*100)
	local ignore = workspace:GetChildren();
    table.insert(ignore,player)
	local Part = game.Workspace:FindPartOnRayWithIgnoreList(RayCast,workspace.Camera:GetDescendants())
	FireSound:Play()
	if Part and debounce == false then
		local Hum = Part.Parent:FindFirstChild("Humanoid")
		Hum:TakeDamage("20")
		HitSound:Play()
		Muzzle.Enabled = true
		wait(0.1)
		debounce = true
		wait(0.1)
		Muzzle.Enabled = false
		debounce = false
	end
end)

Edit 2 : I have fixed my old issue, now though I need to find a way to make the script ignore local player (This is problematic because you cannot find character from a server script, so, is there anyway I can make this server script make sure that the ray ignores the player who shot the gun?

This is the local part where the event is fired

local UnequipEvent = game.ReplicatedStorage.Folder.Unequipped
local EquippedEvent = game.ReplicatedStorage.Folder.Equipped
local char = script.Parent
local player = game.Players.LocalPlayer
local Character = workspace.Camera:WaitForChild("Viewmodel")
local cam = workspace.Camera
local Mouse = game.Players.LocalPlayer:GetMouse()
local humanoid = Character:WaitForChild("Humanoid")
local Run = script:WaitForChild('Run')
local Fire = script:WaitForChild('Fire')
local FireAnimTPS = script:WaitForChild('FireAnimTPS')
local Muzzle = Character.Gun.FirePart.Muzzle
local MuzzleLight = Character.Gun.FirePart.PointLight
local FireSound = script.Fire:WaitForChild("FireSound")
local Reload = script:WaitForChild('Reload')
local ReloadTPS = script:WaitForChild("ReloadAnimTPS")
local ReloadSound = script.Reload:WaitForChild("ReloadSound")
local dance = humanoid:LoadAnimation(Run)
local FireAnim = humanoid:LoadAnimation(Fire)
local FireAnimTP = player.Character.Humanoid:LoadAnimation(FireAnimTPS)
local ReloadAnim = humanoid:LoadAnimation(Reload)
local ReloadAnimTPS = player.Character.Humanoid:LoadAnimation(ReloadTPS)
local Running = false
local Shooting = false
local Ammo = game.StarterPack.Gun.Ammo.Value
local Tool = game.StarterPack.Gun

debounce = false
Fired = false

EquippedEvent.OnClientEvent:Connect(function()
	Fired = true
end)
UnequipEvent.OnClientEvent:Connect(function()
	Fired = false
end)

player.Character.Humanoid.Running:connect(function(speed) --I hope player is a variable of an actual player.
	    if speed <= 16 and humanoid.Jump == false then --If they are not walking,
		        dance:Stop()
		        Running = false
	    elseif speed > 18 and humanoid.Jump == false then --If they started walking or is walking.
		        dance:Play()
		        FireAnim:Stop()
		        MuzzleLight.Enabled = false
                 Running = true
	    end
	end)

Mouse.Button1Down:Connect(function()
	if Running == false and Ammo > 0 and Fired == true then
		Shooting = true
		print("Shooting")
		FireAnimTP:Play()
		FireAnim:Play()
		repeat FireSound:Play() Ammo = Ammo - 1 game.Players.LocalPlayer:GetMouse().TargetFilter = game.Players.LocalPlayer.Character print(Ammo)game.ReplicatedStorage.RayCastEvent:FireServer(Tool.FirePart.Position, Mouse.Hit.Position)  Muzzle.Enabled = true MuzzleLight.Enabled = true wait(0.1) Muzzle.Enabled = false  until Ammo == 0 or Shooting == false or Running == true or Fired == false
		if Ammo <= 0 and Fired == true then
			Muzzle.Enabled = false
			FireAnim:Stop()	
			FireAnimTP:Stop()
		    MuzzleLight.Enabled = false
			print("All out!")
			ReloadAnim:Play()
			ReloadAnimTPS:Play()
			ReloadSound:Play()
			Character.Gun.Magazine.Transparency = 1
			Character.Magazine1.Transparency = 0
			wait(1.3)
			Character.Magazine1.Transparency = 1
			Character.Gun.Magazine.Transparency = 0
			wait(1)
			ReloadSound:Stop()
		
	        Ammo = 30
			        print("Loaded!")
		end
	end
end)

Mouse.Button1Up:Connect(function()
	Shooting = false
	print("Not Shooting")
	FireAnim:Stop()
	FireAnimTP:Stop()
	MuzzleLight.Enabled = false
end)


player.Character.Humanoid.Died:Connect(function()
	while player.Character.Humanoid.Health == 0 do
		Ammo = 30
		wait()
	end
end)

Mouse.KeyUp:connect(function (key) 
	key = string.lower(key)
if string.byte(key) == 48 then
		Running = false
		dance:Stop()
end
end)
	-- Run function

Mouse.Button2Down:Connect(function()
	Character.PrimaryPart = Character.AimHumanoid
	Aiming = true	
end)

Mouse.Button2Up:Connect(function()
	Character.PrimaryPart = Character.PartHumanoid
		Aiming = false
end)

1 answer

Before firing event in local script you need a line like that:

game.Players.LocalPlayer:GetMouse().TargetFilter = game.Players.LocalPlayer.Character
local UnequipEvent = game.ReplicatedStorage.Folder.Unequipped
local EquippedEvent = game.ReplicatedStorage.Folder.Equipped
local char = script.Parent
local player = game.Players.LocalPlayer
local Character = workspace.Camera:WaitForChild("Viewmodel")
local cam = workspace.Camera
local Mouse = game.Players.LocalPlayer:GetMouse()
local humanoid = Character:WaitForChild("Humanoid")
local Run = script:WaitForChild('Run')
010	local Fire = script:WaitForChild('Fire')
011	local FireAnimTPS = script:WaitForChild('FireAnimTPS')
012	local Muzzle = Character.Gun.FirePart.Muzzle
013	local MuzzleLight = Character.Gun.FirePart.PointLight
014	local FireSound = script.Fire:WaitForChild("FireSound")
015	local Reload = script:WaitForChild('Reload')
016	local ReloadTPS = script:WaitForChild("ReloadAnimTPS")
017	local ReloadSound = script.Reload:WaitForChild("ReloadSound")
018	local dance = humanoid:LoadAnimation(Run)
019	local FireAnim = humanoid:LoadAnimation(Fire)
020	local FireAnimTP = player.Character.Humanoid:LoadAnimation(FireAnimTPS)
021	local ReloadAnim = humanoid:LoadAnimation(Reload)
022	local ReloadAnimTPS = player.Character.Humanoid:LoadAnimation(ReloadTPS)
023	local Running = false
024	local Shooting = false
025	local Ammo = game.StarterPack.Gun.Ammo.Value
026	local Tool = game.StarterPack.Gun
027	Mouse.TargetFilter = {Character, game.Players.LocalPlayer.Character}

028	debounce = false
029	Fired = false
030	 
031	EquippedEvent.OnClientEvent:Connect(function()
032	    Fired = true
033	end)
034	UnequipEvent.OnClientEvent:Connect(function()
035	    Fired = false
036	end)
037	 
038	player.Character.Humanoid.Running:connect(function(speed) --I hope player is a variable of an actual player.
039	        if speed <= 16 and humanoid.Jump == false then --If they are not walking,
040	                dance:Stop()
041	                Running = false
042	        elseif speed > 18 and humanoid.Jump == false then --If they started walking or is walking.
043	                dance:Play()
044	                FireAnim:Stop()
045	                MuzzleLight.Enabled = false
046	                 Running = true
047	        end
048	    end)
049	 
050	Mouse.Button1Down:Connect(function()
051	    if Running == false and Ammo > 0 and Fired == true then
052	        Shooting = true
053	        print("Shooting")
054	        FireAnimTP:Play()
055	        FireAnim:Play()
056	        repeat FireSound:Play() Ammo = Ammo - 1 print(Ammo)game.ReplicatedStorage.RayCastEvent:FireServer(Tool.FirePart.Position, Mouse.Hit.Position)  Muzzle.Enabled = true MuzzleLight.Enabled = true wait(0.1) Muzzle.Enabled = false  until Ammo == 0 or Shooting == false or Running == true or Fired == false
057	        if Ammo <= 0 and Fired == true then
058	            Muzzle.Enabled = false
059	            FireAnim:Stop()
060	            FireAnimTP:Stop()
061	            MuzzleLight.Enabled = false
062	            print("All out!")
063	            ReloadAnim:Play()
064	            ReloadAnimTPS:Play()
065	            ReloadSound:Play()
066	            Character.Gun.Magazine.Transparency = 1
067	            Character.Magazine1.Transparency = 0
068	            wait(1.3)
069	            Character.Magazine1.Transparency = 1
070	            Character.Gun.Magazine.Transparency = 0
071	            wait(1)
072	            ReloadSound:Stop()
073	 
074	            Ammo = 30
075	                    print("Loaded!")
076	        end
077	    end
078	end)
079	 
080	Mouse.Button1Up:Connect(function()
081	    Shooting = false
082	    print("Not Shooting")
083	    FireAnim:Stop()
084	    FireAnimTP:Stop()
085	    MuzzleLight.Enabled = false
086	end)
087	 
088	 
089	player.Character.Humanoid.Died:Connect(function()
090	    while player.Character.Humanoid.Health == 0 do
091	        Ammo = 30
092	        wait()
093	    end
094	end)
095	 
096	Mouse.KeyUp:connect(function (key)
097	    key = string.lower(key)
098	if string.byte(key) == 48 then
099	        Running = false
100	        dance:Stop()
101	end
102	end)
103	    -- Run function
104	 
105	Mouse.Button2Down:Connect(function()
106	    Character.PrimaryPart = Character.AimHumanoid
107	    Aiming = true  
108	end)
109	 
110	Mouse.Button2Up:Connect(function()
111	    Character.PrimaryPart = Character.PartHumanoid
112	        Aiming = false
113	end)
 MuzzleLight.Enabled = true wait(0.1) Muzzle.Enabled = false  until Ammo == 0 or Shooting == false or Running == true or Fired == false

1 comment

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