so i want to make sniper helicopters where it shoots from inside as if there were snipers inside but the aiming is totally incorrect
i tried CFrame’s orientation using origin and look at vectors but it wasn’t accurate
then i tried trigonometry but its very inaccurate but while there was only 1 snipe helicopter then it worked then when it worked i copied it to the other side and put a minus before the first atan2 function it worked but its not working on the other “left and right” where the first helicopter is the back (i also experimented with the X Y Z values in the formula but it lead to nothing so i left it as it was before experimenting)
it has to do something with the trigonometry function being positive or negative and the input to them
Code:
local function laser()
local p = game.Players:GetPlayers()[math.random(1,#game.Players:GetPlayers() )]
local char = p.Character
local pos1 = script.Parent.Position
local pos2 = p.Character.Head.Position
-- for now randomly offsets the position for the shots to be **Slightly** innacurate
local pos2_5 = pos2 + Vector3.new(math.random(-15,15),math.random(-15,15),math.random(-15,15))
local extension = (pos1 - pos2_5).Magnitude /2 + 15
local direction = (pos2_5 - pos1).Unit
local pos3 = pos1 + (direction * extension)
local c = game.ReplicatedStorage:WaitForChild("Part"):Clone()
local fullDistance = (pos1 - pos2_5).Magnitude + 30
c.Parent = workspace
-- this bit uses a formula that i forgot the details of because i copied the code from my other project (like an average person does)
local posx = math.sqrt(math.abs(pos2_5.X - pos1.X)^2 + math.abs(pos2_5.Z - pos1.Z)^2)
local posy = math.sqrt(math.abs(pos2_5.Z - pos1.Z)^2 + math.abs(pos2_5.Y - pos1.Y)^2)
local posz = math.sqrt(math.abs(pos2_5.Y - pos1.Y)^2 + math.abs(pos2_5.X - pos1.X)^2)
local pos22 = pos2_5 - pos1
-- place with trigonometric functions
c.Orientation = Vector3.new(math.atan2(pos22.Z/posy,pos22.X/posy) * 57.2957795,math.atan2(pos22.X/posy,pos22.Z/posy) * 57.2957795,0)
c.Size = Vector3.new(0.3,fullDistance,0.3)
c.Position = pos3
task.wait(0.5)
c.Color = Color3.new(1, 1, 0)
c.Script.Enabled = true
task.wait(0.25)
c:Destroy()
end
while true do
laser()
end
the video: