Copy salient and essential scripts and models from Plane Building Roblox
This commit is contained in:
@@ -0,0 +1,205 @@
|
||||
chat = {}
|
||||
local rchat=game:GetService("Chat")
|
||||
function chat.Chat(ignore,object,text)
|
||||
if not object then return end
|
||||
rchat:Chat(object,text)
|
||||
--print("AUTO:",text) --
|
||||
end
|
||||
|
||||
local function advancedTarget(pS,t,o) -- pS = projectileSpeed, t = targetPart, o = originPart
|
||||
-- So, I understand the maths in this. I also understand that it forms a circle for radius of targetting, also the curve to find it is quadratic and there is sine somewhere too
|
||||
-- https://devforum.roblox.com/t/making-a-lead-shot-indicator/325666/9 (figure out the maths here when you're older, i understand it but not confidently)
|
||||
local tV = t.Velocity * 1.1 -- target Velocity, *1.5 because of compensation
|
||||
local di = t.Position - o.Position -- displacement, origin to target
|
||||
local a = pS^2 - tV:Dot(tV) -- a,b,c as in quadratic equation so that ax^2 + bx + c = 0
|
||||
local b = -2 * tV:Dot(di)
|
||||
local c = -di:Dot(di)
|
||||
local d = b^2 - 4*a*c -- d as an intermediate value for quadratic formula
|
||||
if d < 0 then return t.Position end -- failed, let's just hope we hit it anyways by luck
|
||||
local t0 = (-b + math.sqrt(d)) / (2*a) -- hello mr. hegarty, i exist
|
||||
local t1 = (-b - math.sqrt(d)) / (2*a)
|
||||
local ti = 0
|
||||
if t0 > 0 then ti = t0 end
|
||||
if t1 > 0 then ti = t1 end
|
||||
local target = t.CFrame.Position + tV * ti
|
||||
return target
|
||||
end
|
||||
|
||||
function travelToLocation(a)
|
||||
a.humanoid:MoveTo(a.target.Position)
|
||||
end
|
||||
|
||||
function findPlayer(a)
|
||||
local closest
|
||||
local distance = 100
|
||||
for _,player in pairs(game.Players:GetPlayers()) do
|
||||
if player.Character and player.Character:FindFirstChild("Humanoid") then
|
||||
local currentDistance = (player.Character.PrimaryPart.Position - a.head.Position).Magnitude
|
||||
if currentDistance < distance then distance = currentDistance end
|
||||
closest = player.Character.PrimaryPart
|
||||
end
|
||||
end
|
||||
if closest then a.task = travelToLocation a.target = closest end
|
||||
end
|
||||
|
||||
function enterPlane(a)
|
||||
--[[local pathfinding = game:GetService("PathfindingService")
|
||||
local path = pathfinding:CreatePath({
|
||||
AgentCanJump = true,
|
||||
AgentHeight = 4,
|
||||
AgentWidth = 4
|
||||
})
|
||||
chat:Chat(a.head,"computing")
|
||||
path:ComputeAsync(a.model.PrimaryPart.Position,a.plane.Position)
|
||||
if path.Status ~= Enum.PathStatus.Success then
|
||||
chat:Chat(a.head,"no path")
|
||||
a.model:SetPrimaryPartCFrame(a.plane.CFrame)
|
||||
a.task = getTask return end
|
||||
|
||||
a.plane.Material = Enum.Material.Neon
|
||||
a.plane.Transparency = 0.5
|
||||
|
||||
chat:Chat(a.head,"walking")
|
||||
local waypointIndex = 0
|
||||
local waypoints = path:GetWaypoints()
|
||||
local function operateWaypoint()
|
||||
if not a.operate then return end
|
||||
if a.humanoid.SeatPart then chat:Chat(a.head,"piloting") a.task = flyPlane return end
|
||||
waypointIndex = waypointIndex + 1
|
||||
if waypointIndex > #waypoints or not waypoints[waypointIndex] then return end
|
||||
a.humanoid:MoveTo(waypoints[waypointIndex].Position)
|
||||
|
||||
local shouldReturn = false
|
||||
local event = a.humanoid.MoveToFinished:Connect(function()
|
||||
if waypoints[waypointIndex] and not a.humanoid.SeatPart and waypoints[waypointIndex].Action == Enum.PathWaypointAction.Jump then
|
||||
a.humanoid.Jump = true
|
||||
end
|
||||
shouldReturn = true
|
||||
operateWaypoint()
|
||||
end)
|
||||
wait(1)
|
||||
if not a.plane or not a.plane:FindFirstChild("Pilot") then return end
|
||||
event:Disconnect()
|
||||
if (a.model.PrimaryPart.Position - a.plane.Position).Magnitude < 6 then
|
||||
|
||||
end
|
||||
if shouldReturn then return end
|
||||
operateWaypoint()
|
||||
end
|
||||
operateWaypoint()]]
|
||||
a.model:SetPrimaryPartCFrame(a.plane.CFrame)
|
||||
a.task = flyPlaneStraight
|
||||
a.v.parent = a.plane.Parent.Parent
|
||||
a.target = game.Workspace.BotTarget.Position
|
||||
end
|
||||
local flight = require(_G.Modules.ObjectInteraction.Main)
|
||||
function flyPlaneStraight(a)
|
||||
if not a.flyPlaneStraightTick then a.flyPlaneStraightTick = tick() end
|
||||
if (tick() - a.flyPlaneStraightTick) > 3 then a.task = flyPlane a.flyPlaneStraightTick = nil end
|
||||
a.v.bindings.throttle = 0.8
|
||||
a.v.bindings.pitch = 0.3
|
||||
a.v.bindings.roll = 0
|
||||
a.v.bindings.yaw = 0
|
||||
local tar = a.plane.CFrame.LookVector
|
||||
tar = Vector3.new(tar.X,0,tar.Z).Unit
|
||||
local pos = (a.plane.Position + tar * 1000 + Vector3.new(0,150,0))
|
||||
a.v:aimTowards(pos)
|
||||
end
|
||||
function stop(a)
|
||||
end
|
||||
local trajectoryPart = Instance.new("Part")
|
||||
for index,item in pairs({
|
||||
Color = Color3.new(1,1,1),
|
||||
Material = Enum.Material.Neon,
|
||||
Transparency = 0.2,
|
||||
Size = Vector3.new(6,6,6),
|
||||
CanCollide = false,
|
||||
Anchored = true,
|
||||
Shape = Enum.PartType.Ball,
|
||||
Parent = game.Workspace
|
||||
}) do
|
||||
trajectoryPart[index] = item
|
||||
end
|
||||
local targetPart = trajectoryPart:Clone()
|
||||
targetPart.Parent = game.Workspace
|
||||
function flyPlane(a)
|
||||
a.target = a.model.Target.Value.PrimaryPart.Position
|
||||
local trajectory = a.plane.Velocity*2 + a.plane.Position
|
||||
trajectoryPart.Position = trajectory
|
||||
targetPart.Position = a.target
|
||||
print(trajectory)
|
||||
if trajectory.Y < -20 then
|
||||
a.task = flyPlaneStraight
|
||||
print("recover!")
|
||||
end
|
||||
a.v.bindings.pitch = 0.0
|
||||
a.v.bindings.yaw = 0
|
||||
a.v:aimTowards(a.target)
|
||||
local speed = a.plane.Velocity.Magnitude
|
||||
if speed > 350 or speed < 50 or a.plane.Position.Y < -40 then print("stop!",speed) a.task = stop a.v.bindings.throttle = 0 task.delay(1,function() a.humanoid.Health = 0 end) end
|
||||
end
|
||||
function getTask(a)
|
||||
chat:Chat(a.head,"task")
|
||||
wait(0.5)
|
||||
if a.humanoid.SeatPart then chat:Chat(a.head,"piloting") a.task = flyPlaneStraight return end
|
||||
a.task = locatePlane
|
||||
chat:Chat(a.head,"pilot")
|
||||
end
|
||||
function selfDestruct(a)
|
||||
chat:Chat(a.head,"destruct")
|
||||
a.humanoid.Health = 0
|
||||
end
|
||||
function locatePlane(a)
|
||||
chat:Chat(a.head,"find plane")
|
||||
a.plane = nil
|
||||
local distance = 100
|
||||
for _,object in pairs(game.Workspace.Auto:GetChildren()) do
|
||||
local seat = object:FindFirstChildWhichIsA("VehicleSeat",true)
|
||||
if seat and not seat.Occupant then
|
||||
local offset = (seat.Position - a.head.Position).Magnitude
|
||||
if offset < distance then
|
||||
distance = offset
|
||||
a.plane = seat
|
||||
end
|
||||
end
|
||||
end
|
||||
if a.plane then
|
||||
chat:Chat(a.head,"found plane")
|
||||
a.task = enterPlane
|
||||
return
|
||||
end
|
||||
chat:Chat(a.head,"no plane")
|
||||
a.task = selfDestruct
|
||||
end
|
||||
function hibernate(a)
|
||||
|
||||
end
|
||||
function init(auto)
|
||||
local a = {}
|
||||
a.model = auto
|
||||
a.head = auto.Head
|
||||
if a.head:FindFirstChildWhichIsA("SurfaceGui") then a.head.SurfaceGui:Destroy() end
|
||||
a.face = a.head.Face
|
||||
a.humanoid = auto.Humanoid
|
||||
a.team = auto.Team.Value
|
||||
a.operate = true
|
||||
wait()
|
||||
a.plane = a.humanoid.SeatPart
|
||||
a.task = flyPlaneStraight
|
||||
a.v = flight.initialise(a.head)
|
||||
a.v.parent = a.humanoid.SeatPart.Parent.Parent
|
||||
a.v:seatEntered(true,a.humanoid.SeatPart)
|
||||
a.target = (a.plane.CFrame * CFrame.new(0,0,1000)).Position
|
||||
a.target = Vector3.new(a.target.X,a.plane.CFrame.Position.Y + 100,a.target.Z)
|
||||
a.humanoid.Died:Connect(function()
|
||||
wait(2)
|
||||
a.operate = false
|
||||
a.v.operate = false
|
||||
a.v:destroy()
|
||||
a.model:Destroy()
|
||||
end)
|
||||
while wait((1/30)*3) and a.operate do
|
||||
a.task(a)
|
||||
end
|
||||
end
|
||||
return getfenv()
|
||||
Reference in New Issue
Block a user