Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- ____________________________________________________________________________________________________________________
- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- ____________________________________________________________________________________________________________________
- ___ ___
- ( ) ( ) .-.
- .--. .--. | |_ | |_ ( __) ___ .-. .--. .--.
- / _ \ / \ ( __) ( __) (''") ( ) \ / \ / _ \
- . .' `. ; | .-. ; | | | | | | | .-. . ; ,-. ' . .' `. ;
- | ' | | | | | | | | ___ | | ___ | | | | | | | | | | | ' | |
- _\_`.(___) | |/ | | |( ) | |( ) | | | | | | | | | | _\_`.(___)
- ( ). '. | ' _.' | | | | | | | | | | | | | | | | | | ( ). '.
- | | `\ | | .'.-. | ' | | | ' | | | | | | | | | ' | | | | `\ |
- ; '._,' ' ' `-' / ' `-' ; ' `-' ; | | | | | | ' `-' | ; '._,' '
- '.___.' `.__.' `.__. `.__. (___) (___)(___) `.__. | '.___.'
- ( `-' ;
- `.__.
- ____________________________________________________________________________________________________________________
- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- ____________________________________________________________________________________________________________________
- --]]
- local SearchDistance = 150 -- How far a player can be before it detects you
- local aiDamage = 20 -- How much damage the ai inficts towards the player
- --[[
- ____________________________________________________________________________________________________________________
- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- ____________________________________________________________________________________________________________________
- -- OPTIONAL --]]
- local canWander = false
- local WanderX, WanderZ = 0, 0
- -- How many studs the ai can wander on the x and z axis in studs
- --]]
- function getHumanoid(model)
- for _, v in pairs(model:GetChildren()) do
- if v:IsA'Humanoid' then
- return v
- end
- end
- end
- local ai = script.Parent
- local human = getHumanoid(ai)
- local hroot = ai.HumanoidRootPart
- local zspeed = hroot.Velocity.magnitude
- local pfs = game:GetService("PathfindingService")
- function GetPlayerNames()
- local players = game:GetService('Players'):GetChildren()
- local name = nil
- for _, v in pairs(players) do
- if v:IsA'Player' then
- name = tostring(v.Name)
- end
- end
- return name
- end
- spawn(function()
- while wait() do
- print("THIS BALDI MODEL WAS MADE BY ANPHU04, DO NOT TRUST ANYBODY THAT USES THIS!")
- end
- end)
- function GetPlayersBodyParts(t)
- local torso = t
- if torso then
- local figure = torso.Parent
- for _, v in pairs(figure:GetChildren()) do
- if v:IsA'Part' then
- return v.Name
- end
- end
- else
- return "HumanoidRootPart"
- end
- end
- function GetTorso(part)
- local chars = game.Workspace:GetChildren()
- local torso = nil
- for _, v in pairs(chars) do
- if v:IsA'Model' and v ~= script.Parent and v.Name == GetPlayerNames() then
- local charRoot = v:FindFirstChild'HumanoidRootPart'
- if (charRoot.Position - part).magnitude < SearchDistance then
- torso = charRoot
- end
- end
- end
- return torso
- end
- for _, zambieparts in pairs(ai:GetChildren()) do
- if zambieparts:IsA'Part' then
- zambieparts.Touched:connect(function(p)
- if p.Parent.Name == GetPlayerNames() and p.Parent.Name ~= ai.Name then -- damage
- local enemy = p.Parent
- local enemyhuman = getHumanoid(enemy)
- enemyhuman:TakeDamage(aiDamage)
- end
- end)
- end
- end
- -- no touchy
- local path
- local waypoint
- local oldpoints
- local isWandering = 0
- if canWander then
- spawn(function()
- while isWandering == 0 do
- isWandering = 1
- local desgx, desgz = hroot.Position.x + math.random(-WanderX, WanderX), hroot.Position.z + math.random(-WanderZ, WanderZ)
- human:MoveTo( Vector3.new(desgx, 0, desgz) )
- wait(math.random(4, 6))
- isWandering = 0
- end
- end)
- end
- while wait() do
- local enemytorso = GetTorso(hroot.Position)
- if enemytorso ~= nil then -- if player detected
- isWandering = 1
- local function checkw(t)
- local ci = 3
- if ci > #t then
- ci = 3
- end
- if t[ci] == nil and ci < #t then
- repeat
- ci = ci + 1
- wait()
- until t[ci] ~= nil
- return Vector3.new(1, 0, 0) + t[ci]
- else
- ci = 3
- return t[ci]
- end
- end
- path = pfs:FindPathAsync(hroot.Position, enemytorso.Position)
- waypoint = path:GetWaypoints()
- oldpoints = waypoint
- local connection;
- local direct = Vector3.FromNormalId(Enum.NormalId.Front)
- local ncf = hroot.CFrame * CFrame.new(direct)
- direct = ncf.p.unit
- local rootr = Ray.new(hroot.Position, direct)
- local phit, ppos = game.Workspace:FindPartOnRay(rootr, hroot)
- if path and waypoint or checkw(waypoint) then
- if checkw(waypoint) ~= nil and checkw(waypoint).Action == Enum.PathWaypointAction.Walk then
- human:MoveTo( checkw(waypoint).Position )
- human.Jump = false
- end
- -- CANNOT LET BALDI JUMPS --
- --[[if checkw(waypoint) ~= nil and checkw(waypoint).Action == Enum.PathWaypointAction.Jump then
- human.Jump = true
- connection = human.Changed:connect(function()
- human.Jump = true
- end)
- human:MoveTo( checkw(waypoint).Position )
- else
- human.Jump = false
- end]]
- --[[hroot.Touched:connect(function(p)
- local bodypartnames = GetPlayersBodyParts(enemytorso)
- if p:IsA'Part' and not p.Name == bodypartnames and phit and phit.Name ~= bodypartnames and phit:IsA'Part' and rootr:Distance(phit.Position) < 5 then
- connection = human.Changed:connect(function()
- human.Jump = true
- end)
- else
- human.Jump = false
- end
- end)]]
- if connection then
- connection:Disconnect()
- end
- else
- for i = 3, #oldpoints do
- human:MoveTo( oldpoints[i].Position )
- end
- end
- elseif enemytorso == nil and canWander then -- if player not detected
- isWandering = 0
- path = nil
- waypoint = nil
- human.MoveToFinished:Wait()
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement