Wings Of Glory AI AUTOPLAY SCRIPT – REALLY COOL

Created by brianops1/brianops16

Features:

  • AI AUTOPLAYER
    • !!! This script will use whatever your first plane is !!!
  •  
  •  
  • DEV NOTES:
  • Ultimately I worked on this over a couple of hours and don’t want toput more time/effort into it, but this could be easily modified tobe an aim-bot, improve the AI, autofarm for wins, etc. But as it isthis script will, more often than not, crash into the floor, mountains,rarely get kills, etc. THAT BEING SAID if you’d like to take parts of thescript and modify it, please do. I don’t care about credits tbh
if not game.Loaded then game.Loaded:Wait() end
wait(5)

-- Make sure to have the script saved in your auto execute to have it be automated!
-- Also the script will take like 5-8 seconds to get started, added some prints to
-- show it's working

local MouseMovement = 4 -- Would not recommend below 4 (changes how fast the mouse moves)
local FireLength = 50 -- how long the AI will shoot for
local ReloadLength = 10 -- how long inbetween shooting it will wait until it shoots again
_G.Stop = false --Execute the script with this as true to make it stop

-------------------------------------------------------


-- ALSO, known bugs / things I wanted to do are commented throughout the code
-- And of course this could easily be made a GUI to make it 100x better

print("Starting")
local plr = game.Players.LocalPlayer
local MainMenu = plr.PlayerGui:WaitForChild("GUI")
local Cam = game.Workspace.Camera
local Mouse = plr:GetMouse()

function ClickUI(UI)
    for i,v in pairs(getconnections(UI.MouseButton1Click)) do
        v:Fire()
    end
    for i,v in pairs(getconnections(UI.MouseButton1Down)) do
        v:Fire()
    end
end

function Closest()
    -- I wanted to make it so it'd stick with the closest instead of switching a bunch
    -- But never got around to doing that :P
    local Lowest = 1e9
    local Low = nil
    local Plane = game:GetService("Workspace").viewmodels:FindFirstChild(plr.Name)
    if not Plane then return nil end
    for i,v in pairs(game:GetService("Workspace").Camera["plane_part_viewmodels"]:GetChildren()) do
        if v and v ~= plr.Name and v:FindFirstChild("air_target_bb") and v["air_target_bb"].main.mark.team.main.label.Text ~= "FRIENDLY" then
            local mag = (Plane.Position - v.Position).Magnitude
            if mag < Lowest then
                Lowest = mag
                Low = v
            end
        end
    end
    return Low
end

function MouseTo(UI)
    Vec = Vector2.new(UI.X,UI.Y) - Vector2.new(Mouse.X,Mouse.Y)
    mousemoverel(Vec.X / MouseMovement,Vec.Y / MouseMovement)
end

function LockOn(P,CurrentlyLocked)
    local LockPart = nil
    local CL = nil
    for i,v in pairs(game:GetService("Workspace").Camera["plane_part_viewmodels"]:GetChildren()) do
        if v and v:FindFirstChild("air_target_bb") and v["air_target_bb"].main.mark.player.Visible then
            CL = v
        end
    end
    if not CurrentlyLocked then
        keypress(0x58)
        keyrelease(0x58)
    end
    local Assist = MainMenu.Billboards:FindFirstChild("assistant")
    if Assist then
        local Icon = Assist:FindFirstChild("icon")
        local Plane = game:GetService("Workspace").viewmodels:FindFirstChild(plr.Name)
        if Plane and Icon and Icon.Visible and Icon.AbsolutePosition.X < Cam.ViewportSize.X and Icon.AbsolutePosition.Y < Cam.ViewportSize.Y and (P.Position - Plane.Position).Magnitude < 300 then
            -- Originally this wasn't meant to have a distance/magnitude check, but since the Icon would load in
            -- early but not be where it was supposed to be I ended up doing a magnitude to the enemy plane...
            -- This coulc easily be fixed with a distsance check from the enemy plane to the icon though... HMMMMMM
            LockPart = Icon
        end
    end
    return CL,LockPart
end

--------- Main Script -------------

if MainMenu:FindFirstChild("Spectate") then
    -- Game
    print("In Game")
    wait(1)
    if string.find(string.lower(MainMenu["text_alert"].Text),"waiting for",1,true) then
        wait(5)
        -- This is a little fast but *eh*, could've added a player check like less than 3 players joins new server
        if string.find(string.lower(MainMenu["text_alert"].Text),"waiting for",1,true) then
            ClickUI(game:GetService("Workspace").Spawn.menu["plane_list_buttons"].gui.main["buttons_2"]["return"])
        end
    end
    while not _G.Stop do
        if not MainMenu.Deployed.Visible then
            local Play = game:GetService("Workspace").Spawn.menu["plane_list_buttons"].gui.main["buttons_2"].play
            repeat wait(.2) until (game:GetService("Workspace").Spawn.menu["plane_list_buttons"].Position - Cam.CFrame.Position).Magnitude < 50 or _G.Stop
            ClickUI(Play)
            wait(.5)
            ClickUI(MainMenu.SpawnMenu.Main.spawn.button)
            wait(.5)
        end
        CurrentlyLocked = nil
        local Iter = 0
        local Direction = 0
        while not _G.Stop and not plr.condition.destroyed.Value do
            game:GetService('RunService').Stepped:wait()
            LockPart = nil
            local Vic = Closest()
            -- Thought about doing it closest to the cursor for a "silent aim" exploit since I pulled a past
            -- silent aim for some of this code. But *EHHH*
            if Vic then
                if CurrentlyLocked == nil then
                    CurrentlyLocked,LockPart = LockOn(Vic,(CurrentlyLocked == Vic.Name))
                else
                    CurrentlyLocked,LockPart = LockOn(Vic,(CurrentlyLocked.Name == Vic.Name))
                end
                local Pos,Screen
                if LockPart then
                    Pos,Screen = Vector2.new(LockPart.AbsolutePosition.X,LockPart.AbsolutePosition.Y),true
                    --I was trying to mess around with this and get it so it would actually properly aim at the icon
                    --But I couldn't get it to in the end
                    Iter = Iter + 1
                    if Iter < FireLength + ReloadLength then
                        Iter = Iter + 1
                        mouse1press()
                        --Sometimes the plane doesn't stop shooting when it respawns? Never looked into it
                        --Probably when the round ends and you're still alive so you aren't "destroyed"
                        --Could be fixed by adding a check for the alert_text for "new match" or something
                    elseif Iter < FireLength then
                        Iter = 0
                        mouse1release()
                    end
                else
                    Iter = 0
                    mouse1release()
                    Pos,Screen = Cam:WorldToScreenPoint(Vic.Position)
                end
                if not Screen then
                    Vec = Vector2.new(Pos.X,Pos.Y) - Vector2.new(Mouse.X,Mouse.Y)
                    local NewVector = {['X']=Vec.X,['Y']=Vec.Y}
                    NewVector.X = 30
                    -- I wanted to make it actually turn around properly but never
                    -- really got the X or Y to work so we just spin in circles now :)
                    if Vec.Y > Cam.ViewportSize.Y then
                        NewVector.Y = Cam.ViewportSize.Y
                    elseif Vec.Y < -Cam.ViewportSize.Y then
                        NewVector.Y = -Cam.ViewportSize.Y
                    end
                    mousemoverel(NewVector.X,NewVector.Y/2)
                    wait(.1)
                else
                    MouseTo(Pos)
                end
            end
        end
        mouse1release()
        wait(3)
    end
else
    -- Menu
    print("MainMenu")
    wait(3)
    -- Instead of a wait, could've waited for the fade UI to go away
    ClickUI(MainMenu["right_bar"].buttons.play)
end

⚠️ Warning: Do not download any extensions or anything other than .txt/.lua file, because script will download only in .txt/.lua format or It will redirect you to a pastebin link.

📋 Notice: If you find any of the scripts patched or not working, please report it to Forever4D through Discord. The script will be removed or marked as patched!