here the script
math.randomseed(tick())
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local punchEvent = Instance.new("RemoteEvent", ReplicatedStorage)
punchEvent.Name = "PunchEvent"
local animations = {2729957815, 2733095250, 2734153485}
local function onPunchFired(plr)
local char = game.Workspace:FindFirstChild(plr.Name)
local humanoid = char.Humanoid
local animation = Instance.new("Animation")
local picked = math.random(1, #animations)
animation.AnimationId = "http://roblox.com/asset/?id="..animations[picked]
local animTrack = humanoid:LoadAnimation(animation)
animTrack:Play()
local dmgScript = script.DmgScript:Clone()
if picked == 1 then
dmgScript.Parent = char.RightHand
elseif picked == 2 then
dmgScript.Parent = char.LeftHand
elseif picked == 3 then
dmgScript.Parent = char.RightFoot
end
dmgScript.Disabled = false
wait(.4)
dmgScript:Destroy()
print("Damage was did done did")
end
punchEvent.OnServerEvent:Connect(onPunchFired)
here the problem
22:44:00.497 - Touched is not a valid member of Script
22:44:00.498 - Stack Begin
22:44:00.498 - Script 'ServerScriptService.Punch.DmgScript', Line 1
22:44:00.499 - Stack End
22:44:02.262 - OnServerEvent can only be used on the server -- this
22:44:02.262 - Stack Begin
22:44:02.263 - Script 'Workspace.lord_lol.Punch', Line 31
22:44:02.263 - Stack End
22:44:05.513 - Infinite yield possible on 'ReplicatedStorage:WaitForChild("PunchEvent")'
22:44:05.514 - Stack Begin
22:44:05.514 - Script 'ServerScriptService.Punch', Line 3
22:44:05.515 - Stack End

2 comments
u need to create the remote event outside the script and then do game.ReplicatedStorage:WaitForChild("remotename").OnServerEvent:Connect(function() and function after that.
where do i create remote event?