So... This may sound complicated but, I've scripted this Mob and it attacks you etc... But when it goes to attack you.. it doesnt do anything but play the hit animation once but never hurts the player... any ideas? I'm trying to explain this the best i can, If you need more information. Just ask me! :) heres the script code:
local humanoid = script.Parent:WaitForChild("Humanoid") local torso = script.Parent:WaitForChild("Torso") local head = script.Parent:WaitForChild("Head2") local real_head = script.Parent:WaitForChild("Head") local linked_sword = script.Parent:WaitForChild("Linked_Sword") local settings = script.Parent:WaitForChild("Settings") local events = {} local damage_sounds = {181268610,181268607,181268605} local hats = {} --- animations storage --- local animation_walk = Instance.new("Animation") animation_walk.AnimationId = "http://www.roblox.com/asset/?id=180426354" local running_animation_walk = nil local animation_attack = Instance.new("Animation") animation_attack.AnimationId = "http://www.roblox.com/asset/?id=361958918" local running_animation_attack = nil -------------------------- function load_hat(id) local new_hat = game:GetService("InsertService"):LoadAsset(id) for i,v in ipairs(new_hat:GetChildren()) do if(v.ClassName == "Hat") then v.Parent = script.Parent end end new_hat:Destroy() end Instance.new("ForceField",script.Parent) --load_hat(hats[math.random(1,#hats)]) for i = 1,2 do wait(0.5) humanoid.MaxHealth = settings.Health.Value humanoid.Health = settings.Health.Value end script.Parent.ForceField:Destroy() humanoid.MaxHealth = settings.Health.Value humanoid.Health = settings.Health.Value function sound(id,parent,pitch,volume,remove_time) local sounde = Instance.new("Sound",parent) game.Debris:AddItem(sounde,remove_time) sounde.SoundId = "http://www.roblox.com/asset/?id=" .. id game:GetService("ContentProvider"):Preload(sounde.SoundId) sounde.Pitch = pitch sounde.Volume = volume sounde:Play() return (sounde) end function hurt (human) if(human) then if(human.Health ~= 0 and human.Parent:FindFirstChild("Torso")) then human.Health = human.Health - settings.Damage.Value local random_sound_effect = damage_sounds[math.random(1,#damage_sounds)] sound(random_sound_effect,human.Parent.Torso,math.random(70,100)/100,1,2) end end end function attack (human) game:GetService("ContentProvider"):Preload(animation_attack.AnimationId) sound(181268614,linked_sword.Handle,math.random(90,110)/100,1,2) if(running_animation_attack == nil and human.Health ~= 0) then local event_keyframe_reached running_animation_attack = humanoid:LoadAnimation(animation_attack) running_animation_attack:Play() event_keyframe_reached = running_animation_attack.KeyframeReached:connect(function(keyframeName) -- Bind function to KeyframeReached event if (keyframeName == "Hit") then hurt(human) elseif(keyframeName == "End") then running_animation_attack:Stop() running_animation_attack = nil event_keyframe_reached:disconnect() end end) repeat wait(0.05) until running_animation_attack == nil end end function walk(operation) game:GetService("ContentProvider"):Preload(animation_walk.AnimationId) if(operation == true and running_animation_walk == nil) then running_animation_walk = humanoid:LoadAnimation(animation_walk) running_animation_walk:Play() elseif(operation == false and running_animation_walk ~= nil) then running_animation_walk:Stop() running_animation_walk = nil humanoid:MoveTo(torso.Position,torso) end end function loot_player_items(stat_holder) --- give a stat_holder and you will have a chance of getting loot local looted = 0 if(stat_holder:FindFirstChild("Inventory")) then for i,v in ipairs(settings.Possible_Items:GetChildren()) do wait() if(looted < 3.1 and math.random(0,10000) < (v.Value*100)) then stat_holder.Inventory.Value = stat_holder.Inventory.Value .. ":" .. v.Name .. ":" looted = looted + 1 elseif(looted > 1.9) then break end end end end function follow(plr,char,dist) if(plr and char) then if(dist <= settings.Attack_Distance.Value and char:FindFirstChild("Humanoid")) then walk(false) attack(char.Humanoid) elseif(char:FindFirstChild("Humanoid") and dist > settings.Attack_Distance.Value) then walk(true) script.Parent.Humanoid:MoveTo(char.HumanoidRootPart.Position,char.HumanoidRootPart) end else walk(false) end end events[#events + 1] = humanoid.Died:connect(function() sound(12222242,head,1.1,0.8,2) real_head.Surprise:Destroy() animation_walk:Destroy() animation_attack:Destroy() for i,v in ipairs(humanoid:GetChildren()) do ---- Giving players items and gold, rewarding if(game.ServerStorage:FindFirstChild(v.Name .. "Stats")) then local stat_holder = game.ServerStorage:FindFirstChild(v.Name .. "Stats") if(stat_holder:FindFirstChild("Gold")) then stat_holder.Gold.Value = stat_holder.Gold.Value + settings.Gold.Value end if(stat_holder:FindFirstChild("EXP")) then stat_holder.EXP.Value = stat_holder.EXP.Value + settings.EXP.Value end if(stat_holder:FindFirstChild("ClanPoints")) then stat_holder.ClanPoints.Value = stat_holder.ClanPoints.Value + settings.Clan_Points.Value end loot_player_items(stat_holder) end end --- done rewarding players game.Debris:AddItem(script.Parent,3.5) for i = 1,#events do events[i]:disconnect() end end) while wait() do local dist = 45 local target = nil local target_char = nil for i,v in ipairs(game.Players:GetChildren()) do wait() if(v.ClassName == "Player") then if(v.Character) then if(v.Character:FindFirstChild("HumanoidRootPart")) then if((v.Character.HumanoidRootPart.Position - script.Parent.HumanoidRootPart.Position).Magnitude < dist) then dist = (v.Character.HumanoidRootPart.Position - script.Parent.HumanoidRootPart.Position).Magnitude target = v target_char = v.Character end end end end end follow(target,target_char,dist) wait(settings.Fire_Speed.Value) end