Hello, I am making a dagger tool that can be Thrown & Kills players when hit. This script works good... In the Client Side But the Server Side Can't see it or effect it.
I Only know Basic Functions On making a FireServer But Don't have any knowledge on What I need to do to get to achieve My goal. If anyone can assist Me on How Can I make this Possible?
wait(0.6)
local player = game.Players.LocalPlayer
local character = player.Character
local pgui = player.PlayerGui
local torso = character.Torso
local gamemodel = Workspace.GameModel
local pmouse = player:GetMouse()
local camera = Workspace.CurrentCamera
local tool = script.Parent
local daggerspeed = 120
local spinspeed = 2
local maxdistance = 300
local fadetm = 1
local r_serv = game:GetService("RunService")
local fr = script.shadowdg:clone()
fr.Frame.Visible = true
local reach = fr.Frame.reach
reach.Text = ""
local beam = Instance.new("Part")
beam.Name = "DaggerBeam"
beam.formFactor = "Custom"
beam.Size = Vector3.new(0.2, 0.2, 0.2)
beam.Transparency = 0.2
beam.CanCollide = false
beam.Anchored = true
beam.TopSurface = 0
beam.BottomSurface = 0
beam.BrickColor = BrickColor.new("Really red")
local m = Instance.new("BlockMesh")
m.Scale = Vector3.new(1, 1, maxdistance / 0.2)
m.Offset = Vector3.new(0, 0, -maxdistance / 2)
m.Parent = beam
if _G.MOBILE_DEVICE then
fr.Frame.reach.Visible = false
fr.Frame.horizontal.Visible = false
fr.Frame.Size = UDim2.new(0, 120, 0, 120)
fr.Frame.Position = UDim2.new(1, -130, 0.5, -60)
beam.Transparency = 1
end
function GenIgnore()
local result = {}
local ch = game.Players:GetPlayers()
for i = 1, #ch do
local char = ch[i].Character
if char ~= nil then
local sc = char:GetChildren()
for a = 1, #sc do
if sc[a]:IsA("Hat") or sc[a]:IsA("Tool") then
result[#result + 1] = sc[a]
end
end
end
end
return result
end
function randomsound()
local rnd = {"146594648", "146594640", "146457047"}
return "http://www.roblox.com/asset/?id=" .. rnd[math.random(1, #rnd)]
end
function RayCast(ps1, ps2, ignore)
local ray = Ray.new(
ps1,
(ps2 - ps1).unit * (ps1 - ps2).magnitude
)
local nign = ignore
nign[#nign + 1] = character
return Workspace:FindPartOnRayWithIgnoreList(ray, nign) --hit, position
end
local dg = Instance.new("Part")
dg.formFactor = "Custom"
dg.Size = Vector3.new(0.2, 0.2, 0.2)
dg.BrickColor = BrickColor.new("Really black")
dg.Transparency = 0.2
dg.Anchored = true
dg.CanCollide = false
dg.TopSurface = 0
dg.BottomSurface = 0
local m = Instance.new("SpecialMesh")
m.MeshId = "http://www.roblox.com/asset/?id=20719463"
m.Scale = Vector3.new(1, 1.4, 1)
m.Parent = dg
local loop = Instance.new("Sound")
loop.SoundId = "http://www.roblox.com/asset/?id=146470466"
loop.Volume = 1
loop.Looped = true
loop.Parent = dg
local dagger_rot = CFrame.Angles(math.rad(-90), math.rad(0), math.rad(-90))
local spin = CFrame.Angles(0, 0, 0)
function DaggerScript(ps)
local tps = torso.Position
script.Parent = pgui
tool.Parent = nil
--DAGGER SCRIPT
local ignores = GenIgnore()
ignores[#ignores + 1] = gamemodel
local tcf = CFrame.new(tps, ps)
local travelled = 0
dg.Parent = gamemodel
dg.CFrame = tcf * dagger_rot * spin
coroutine.resume(coroutine.create(function()
wait(0.1)
loop:play()
end))
while true do
local st = tick()
r_serv.RenderStepped:wait()
local delta = (tick() - st)
local dist = daggerspeed * delta
local nps = tcf * CFrame.new(0, 0, -dist)
spin = spin * CFrame.Angles(0, math.rad(-360 * delta * spinspeed), 0)
travelled = travelled + dist
--STUFF
while true do
local hit, pos = RayCast(tcf.p, nps.p, ignores)
if hit ~= nil then
local hum = hit.Parent:findFirstChild("Humanoid")
if hum == nil then
hum = hit.Parent.Parent:findFirstChild("Humanoid")
end
if hum ~= nil then
ignores[#ignores + 1] = hum.Parent
local sdf = hum.Parent:findFirstChild("ShieldDefence")
if sdf ~= nil then
sdf.TakeDamage.Value = true
else
hum.Parent:BreakJoints()
local sndp = Instance.new("Part")
sndp.formFactor = "Custom"
sndp.Size = Vector3.new(0.2, 0.2, 0.2)
sndp.Transparency = 1
sndp.Anchored = true
sndp.CanCollide = false
sndp.CFrame = CFrame.new(pos)
sndp.Parent = gamemodel
local snd = Instance.new("Sound")
snd.Volume = 1
snd.SoundId = randomsound()
snd.Parent = sndp
coroutine.resume(coroutine.create(function()
wait(0.1)
snd:play()
wait(1)
sndp:remove()
end))
end
else
ignores[#ignores + 1] = hit
end
else
break
end
end
--STUFF
tcf = nps
dg.CFrame = tcf * dagger_rot * spin
if travelled >= maxdistance then
break
end
end
local ld = 0
while ld ~= 1 do
local st = tick()
r_serv.RenderStepped:wait()
local delta = (tick() - st)
ld = math.min(1, ld + delta / fadetm)
local dist = daggerspeed * delta
dg.Transparency = 0.2 + (0.8 * ld)
spin = spin * CFrame.Angles(0, math.rad(-360 * delta * spinspeed), 0)
tcf = tcf * CFrame.new(0, 0, -dist)
dg.CFrame = tcf * dagger_rot * spin
end
dg:remove()
--DAGGER SCRIPT
print("The end")
script.Parent = nil
end
local throwmode = false
local bounce = false
local eq = false
tool.Selected:connect(function(mouse)
eq = true
if bounce then return end
fr.Parent = pgui
beam.Parent = camera
mouse.Button1Down:connect(function()
fr.Parent = nil
beam.Parent = nil
if bounce then return end
bounce = true
if not throwmode then
DaggerScript(mouse.Hit.p)
else
local ps = mouse.Hit.p
DaggerScript(Vector3.new(ps.x, torso.Position.y, ps.z))
end
end)
mouse.KeyDown:connect(function(key)
if string.lower(key) == "q" then
throwmode = not throwmode
end
end)
end)
tool.Deselected:connect(function()
eq = false
fr.Parent = nil
beam.Parent = nil
end)
while not bounce do
r_serv.RenderStepped:wait()
if eq then
if not throwmode then
beam.CFrame = CFrame.new(torso.Position, pmouse.Hit.p)
if (torso.Position - pmouse.Hit.p).magnitude <= maxdistance then
reach.Text = "WILL REACH TARGET"
reach.TextColor3 = Color3.new(0, 1, 0)
else
reach.Text = "WON'T REACH TARGET"
reach.TextColor3 = Color3.new(1, 0, 0)
end
else
local ps = pmouse.Hit.p
beam.CFrame = CFrame.new(torso.Position, Vector3.new(ps.x, torso.Position.y, ps.z))
if (torso.Position - Vector3.new(ps.x, torso.Position.y, ps.z)).magnitude <= maxdistance then
reach.Text = "WILL REACH TARGET"
reach.TextColor3 = Color3.new(0, 1, 0)
else
reach.Text = "WON'T REACH TARGET"
reach.TextColor3 = Color3.new(1, 0, 0)
end
end
end
end
beam.Parent = nil

6 comments
use a script instead of local script, or you can use the local script to fire the event and let the server handles the visuals
I only have basic Knowledge on Making event, But I have No complete idea on What Exactly Should I put to make this work.
watch a youtube video or read an article about remote events and functions their is plenty of useful resources
Alright.
how do you not know about remote events if you could make this, makes no sense :/
Cause I Hardly use it