Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local services = setmetatable({}, { __index = function(self, key) return game:GetService(key) end })
- local client = services.Players.LocalPlayer;
- local request = request or http_request
- if type(syn) == 'table' and type(syn.request) == 'function' then
- request = syn.request
- end
- local KickClient, LoadFromGithub do
- function KickClient(reason)
- return client:Kick(reason)
- end
- local function GetUrl(url)
- local response = request({ Url = url, Method = 'GET' })
- local success = response.Success;
- local body = response.Body;
- if not success then
- return false, 'Request failed. StatusCode: ' .. response.StatusCode
- end
- return true, body
- end
- function LoadFromGithub(owner, repo, file)
- local url = 'https://raw.githubusercontent.com/' .. owner .. '/' .. repo .. '/main/' .. file
- local success, body = GetUrl(url)
- if not success then
- return KickClient('Failed to fetch from github. ' .. table.concat({ 'Url:', url, '\n', 'Error:', tostring(body) }))
- end
- local fn, err = loadstring(body)
- if not fn then
- return KickClient('Failed to load from github. ' .. table.concat({ 'Url:', url, '\n', 'Error:', tostring(err) }))
- end
- local results = { pcall(fn) }
- local success = table.remove(results, 1)
- if not success then
- return KickClient('Failed to execute from github. ' .. table.concat({ 'Url:', url, '\n', 'Error:', tostring(results[1]) }))
- end
- return unpack(results)
- end
- end
- local ESP = LoadFromGithub('Kiriot22', 'ESP-lib', 'ESP.lua')
- local UI = LoadFromGithub('wally-rblx', 'LinoriaLib', 'Library.lua')
- local ThemeManager = LoadFromGithub('wally-rblx', 'LinoriaLib', 'addons/ThemeManager.lua')
- local SaveManager = LoadFromGithub('wally-rblx', 'LinoriaLib', 'addons/SaveManager.lua')
- -- Library addons
- SaveManager:IgnoreThemeSettings()
- ThemeManager:SetLibrary(UI)
- ThemeManager:SetFolder('frontlines-cheat')
- SaveManager:SetFolder('frontlines-cheat')
- -- Utility functions
- local globals = getrenv()._G.globals;
- local utils = getrenv()._G.utils;
- local enums = getrenv()._G.enums;
- local event_enum = utils.gbus.EVENT_ENUM
- local global_sol_state = globals.gbl_sol_state
- local fpv_sol_recoil = globals.fpv_sol_recoil
- local fpv_sol_spread = globals.fpv_sol_spread
- local fpv_sol_equipment = globals.fpv_sol_equipment
- local fpv_sol_multipliers = globals.fpv_sol_multipliers
- local sol_state_class = enums.sol_state_class;
- local sol_firearm_operation = enums.sol_firearm_operation;
- local sol_time_sequence_value = enums.sol_time_sequence_value;
- local getCharacter, getTeam, getHealth, getPlayerFromChar do
- local function getPlayerSolId(player)
- for idx, plr in next, globals.cli_plrs do
- if player == plr then
- return idx
- end
- end
- end
- function getCharacter(player)
- local id = getPlayerSolId(player)
- if not id then return end
- return global_sol_state.r15_models[id]
- end
- function getTeam(player)
- local id = getPlayerSolId(player)
- if not id then return end
- return globals.cli_teams[id]
- end
- function getHealth(player)
- local id = getPlayerSolId(player)
- if not id then return 0 end
- local health = globals.gbl_sol_healths[id]
- if not health then return 0 end
- return health
- end
- function getPlayerFromChar(character)
- for id, model in next, global_sol_state.r15_models do
- if model == character then
- return globals.cli_plrs[id]
- end
- end
- end
- end
- -- Aimbot target selection
- local aimbot = {} do
- local function isInCircle(point, center, radius)
- local rX = point.x - center.x
- local rY = point.y - center.y
- return (rX*rX) + (rY*rY) <= radius*radius
- end
- local circle = Drawing.new('Circle')
- circle.Position = Vector2.new()
- circle.Color = Color3.new(1, 1, 1)
- circle.Thickness = 1;
- circle.NumSides = 24;
- circle.Transparency = 1;
- circle.Visible = false;
- function aimbot.UpdateCircleState(value)
- if type(value) == 'number' then circle.Radius = value end
- if type(value) == 'boolean' then circle.Visible = value end
- if typeof(value) == 'Color3' then circle.Color = value end
- end
- services.RunService.Heartbeat:Connect(function(dt)
- local center = workspace.CurrentCamera.ViewportSize / 2
- circle.Position = center
- local clientCharacter = getCharacter(client)
- local clientHealth = getHealth(client)
- local clientTeam = getTeam(client)
- if not clientCharacter then return end
- if clientHealth <= 0 then return end
- local Choices = {}
- for _, plr in next, services.Players:GetPlayers() do
- if plr == client then continue end
- local character = getCharacter(plr)
- local health = getHealth(plr)
- local team = getTeam(plr)
- local bone = character and character:findFirstChild('Head')
- if health > 0 and character and team ~= clientTeam and bone then
- local pos, vis = workspace.CurrentCamera:WorldToViewportPoint(bone.Position)
- if not vis then continue end
- local screenPos = Vector2.new(pos.X, pos.Y)
- if Toggles.ShowCircle and Toggles.ShowCircle.Value and (not isInCircle(screenPos, center, circle.Radius)) then
- continue
- end
- local distance = math.floor((screenPos - center).magnitude)
- table.insert(Choices, {
- Player = plr,
- Distance = distance,
- Character = character,
- })
- end
- end
- table.sort(Choices, function(a, b)
- return a.Distance < b.Distance
- end)
- local choice = Choices[1]
- if choice then
- local plr = choice.Player;
- aimbot.target = plr;
- ESP.Highlighted = choice.Character
- else
- aimbot.target = nil;
- ESP.Highlighted = nil
- end
- end)
- end
- -- visuals
- do
- ESP:Toggle(false);
- ESP.Players = true
- ESP.FaceCamera = false;
- ESP.TeamMates = false;
- ESP.Names = false;
- ESP.Tracers = false;
- ESP.Boxes = false;
- ESP.HighlightColor = Color3.new(1, 1, 1)
- ESP.Overrides.GetTeam = getTeam
- -- ESP.Overrides.GetPlrFromChar = getPlayerFromChar
- function ESP.Overrides.UpdateAllow(self)
- if self.Player then
- local clientCharacter = getCharacter(client)
- local pHealth = getHealth(self.Player)
- if not clientCharacter or not clientCharacter.Parent then
- return false
- end
- if pHealth <= 0 then
- return false
- end
- end
- return true
- end
- local function GetTeamColor(self)
- local player = self.Player;
- local IsSameTeam = ESP:IsTeamMate(player)
- if Toggles.HighlightTarget and Toggles.HighlightTarget.Value then
- if player == aimbot.target then
- return Options.HighlightColor.Value
- end
- end
- if IsSameTeam then return Options.AllyColor.Value end
- return Options.EnemyColor.Value
- end
- for _, plr in next, services.Players:GetPlayers() do
- if plr == client then continue end
- local character = getCharacter(plr)
- if character then
- ESP:Add(character, { Name = plr.Name, Player = plr, PrimaryPart = character:WaitForChild('HumanoidRootPart', 10), ColorDynamic = GetTeamColor })
- end
- end
- local function onModelAdded(model)
- local plr = getPlayerFromChar(model)
- if not plr then return end
- if plr == client then return end
- ESP:Add(model, { Name = plr.Name, Player = plr, PrimaryPart = model:WaitForChild('HumanoidRootPart', 10), ColorDynamic = GetTeamColor })
- end
- workspace.ChildAdded:Connect(function(object)
- if object.Name == 'r15_rig' then
- task.defer(onModelAdded, object)
- end
- end)
- end
- -- game modifications
- do
- local spread = fpv_sol_spread.spread
- local attitude_delta = fpv_sol_recoil.attitude_delta
- setmetatable(fpv_sol_spread, {
- __index = function(self, key)
- if key == 'spread' then
- if Toggles.NoSpread and Toggles.NoSpread.Value then return 0 end
- return spread
- end
- return rawget(self, key)
- end,
- __newindex = function(self, key, value)
- if key == 'spread' then spread = value; return end
- rawset(self, key, value)
- end
- })
- setmetatable(fpv_sol_recoil, {
- __index = function(self, key)
- if key == 'attitude_delta' then
- if Toggles.NoRecoil and Toggles.NoRecoil.Value then return Vector3.new() end
- return attitude_delta
- end
- return rawget(self, key)
- end,
- __newindex = function(self, key, value)
- if key == 'attitude_delta' then attitude_delta = value; return end
- rawset(self, key, value)
- end
- })
- rawset(fpv_sol_spread, 'spread', nil)
- rawset(fpv_sol_recoil, 'attitude_delta', nil)
- local function ApplyWeaponMods(equipment)
- local reload_params = equipment.reload_params
- local recoil_params = equipment.recoil_params
- local aim_sway_params = equipment.aim_sway_params
- local time_sequences = equipment.time_sequences
- if not reload_params or not aim_sway_params then return end
- local function applyProxyMetatable(tbl, events)
- if getmetatable(tbl) then return end
- local cache = {}
- for key in next, events do
- cache[key] = tbl[key]
- end
- setmetatable(tbl, {
- __index = function(self, key)
- local fn = events[key]
- if fn and cache[key] then
- local result = fn(cache[key])
- if result then
- return result
- end
- return cache[key]
- end
- return rawget(self, key)
- end,
- __newindex = function(self, key, value)
- if events[key] then
- cache[key] = value
- return
- end
- rawset(self, key, value)
- end
- })
- for key in next, events do
- rawset(tbl, key, nil)
- end
- end
- local function SpoofReloadTime(old)
- if Toggles.NoReload and Toggles.NoReload.Value then
- return 0.01
- end
- end
- local function SpoofReloadVector(old)
- if Toggles.NoReload and Toggles.NoReload.Value then
- return { Vector3.new(0, sol_time_sequence_value.AMMO_IN), Vector3.new(0.01, sol_time_sequence_value.END), }
- end
- end
- local function SpoofFireRate(old)
- if Toggles.FastFire and Toggles.FastFire.Value then
- return old * Options.FastFireMult.Value
- end
- end
- applyProxyMetatable(reload_params, {
- dry_reload_duration = SpoofReloadTime,
- tac_reload_duration = SpoofReloadTime,
- })
- applyProxyMetatable(time_sequences, {
- [Vector3.new(sol_state_class.FIREARM_OPERATION, sol_firearm_operation.TAC_RELOAD)] = SpoofReloadVector,
- [Vector3.new(sol_state_class.FIREARM_OPERATION, sol_firearm_operation.DRY_RELOAD)] = SpoofReloadVector,
- [Vector3.new(sol_state_class.FIREARM_OPERATION, sol_firearm_operation.TAC_RELOAD_START)] = SpoofReloadVector,
- [Vector3.new(sol_state_class.FIREARM_OPERATION, sol_firearm_operation.DRY_RELOAD_START)] = SpoofReloadVector,
- [Vector3.new(sol_state_class.FIREARM_OPERATION, sol_firearm_operation.RELOAD_INCR)] = SpoofReloadVector,
- [Vector3.new(sol_state_class.FIREARM_OPERATION, sol_firearm_operation.RELOAD_END)] = SpoofReloadVector,
- })
- applyProxyMetatable(fpv_sol_multipliers, {
- fire_rate = SpoofFireRate,
- })
- end
- if fpv_sol_equipment.curr_equipment then
- ApplyWeaponMods(fpv_sol_equipment.curr_equipment)
- end
- local friendly_params
- local enemy_params
- local OldTrigEvent = nil
- local function TrigEventProxy(event, ...)
- local args = { ... }
- if event == event_enum.FPV_SOL_BULLET_SPAWN then
- local stack = debug.getstack(3)
- local discharge_params = nil
- for idx, obj in next, stack do
- if type(obj) == 'table' and type(rawget(obj, 'fire_params')) == 'table' then
- discharge_params = obj;
- break
- end
- end
- if Toggles.SilentAim.Value and aimbot.target and discharge_params then
- local character = getCharacter(aimbot.target)
- local bone = character and character:findFirstChild('Head')
- if bone then
- local fire_params = discharge_params.fire_params
- local fire_multipliers = discharge_params.fire_multipliers
- local velocity = fire_params.muzzle_velocity * fire_multipliers.muzzle_velocity;
- local velocity_mult = Toggles.BulletVelocity.Value and Options.BulletVelocityMult.Value or 1
- args[4] = CFrame.lookAt(args[3], bone.CFrame.p).lookVector * (velocity * velocity_mult)
- end
- end
- if friendly_params and enemy_params then
- friendly_params.FilterDescendantsInstances = Toggles.Wallbang.Value and { workspace:findFirstChild('workspace') } or {}
- enemy_params.FilterDescendantsInstances = Toggles.Wallbang.Value and { workspace:findFirstChild('workspace') } or {}
- end
- elseif event == event_enum.FPV_SOL_EQUIP then
- ApplyWeaponMods(fpv_sol_equipment.curr_equipment)
- end
- return OldTrigEvent(event, unpack(args))
- end
- OldTrigEvent = hookfunction(utils.gbus.trig_event, function(...)
- return TrigEventProxy(...)
- end)
- -- hookfunction didn't work here :(
- local OldEvalUdho = utils.math_util.eval_udho
- local function EvalUdhoProxy(...)
- if Toggles.NoRecoil and Toggles.NoRecoil.Value and debug.info(2, 's'):find('recoil_anim') then
- return 0, 0
- end
- return OldEvalUdho(...)
- end
- utils.math_util.eval_udho = EvalUdhoProxy
- local spawn_bullet = nil;
- for _, fn in next, getgc() do
- if type(fn) == 'function' then
- if islclosure(fn) and (not is_synapse_function(fn)) then
- local upvalues = getupvalues(fn)
- for _, upv in next, upvalues do
- if upv == OldEvalUdho then
- setupvalue(fn, _, EvalUdhoProxy)
- end
- end
- if getinfo(fn).name == 'spawn_bullet' then
- spawn_bullet = fn
- end
- end
- end
- end
- if spawn_bullet then
- friendly_params = getupvalue(spawn_bullet, 5)
- enemy_params = getupvalue(spawn_bullet, 7)
- end
- end
- local window = UI:CreateWindow('Frontlines') do
- local tMain = window:AddTab('Main')
- local gAimbot = tMain:AddLeftGroupbox('Silent aim')
- local gVisuals = tMain:AddRightGroupbox('Visuals')
- do
- gAimbot:AddToggle('SilentAim', { Text = 'Silent aim' })
- gAimbot:AddToggle('Wallbang', { Text = 'Wallbang' })
- gAimbot:AddToggle('ShowCircle', { Text = 'Show circle' }):AddColorPicker('CircleColor', { Default = Color3.new(1, 1, 1) })
- gAimbot:AddSlider('CircleRadius', { Text = 'Circle radius', Min = 0, Max = 300, Default = 0, Rounding = 0 })
- gAimbot:AddToggle('HighlightTarget', { Text = 'Highlight target' }):AddColorPicker('HighlightColor', { Default = Color3.new(1, 1, 1) })
- gVisuals:AddToggle('ESPEnabled', { Text = 'Enabled' })
- gVisuals:AddDropdown('ESPFlags', { Text = 'ESP Flags', Multi = true, Values = { 'Names', 'Boxes', 'Tracers', } })
- gVisuals:AddDropdown('ESPOptions', { Text = 'ESP Options', Multi = true, Values = { 'Show team', 'Face camera' } })
- gVisuals:AddLabel('Player colors')
- :AddColorPicker('AllyColor', { Default = Color3.fromRGB(0, 255, 140), Title = 'Ally color' })
- :AddColorPicker('EnemyColor', { Default = Color3.fromRGB(255, 25, 25), Title = 'Enemy color' });
- Toggles.ShowCircle:OnChanged(function() aimbot.UpdateCircleState(Toggles.ShowCircle.Value) end)
- Options.CircleColor:OnChanged(function() aimbot.UpdateCircleState(Options.CircleColor.Value) end)
- Options.CircleRadius:OnChanged(function() aimbot.UpdateCircleState(Options.CircleRadius.Value) end)
- Toggles.ESPEnabled:OnChanged(function() ESP:Toggle(Toggles.ESPEnabled.Value) end)
- Options.ESPFlags:OnChanged(function()
- local map = Options.ESPFlags.Value
- ESP.Names = map.Names or false
- ESP.Boxes = map.Boxes or false
- ESP.Tracers = map.Tracers or false
- end)
- Options.ESPOptions:OnChanged(function()
- local map = Options.ESPOptions.Value
- ESP.FaceCamera = map['Face camera'] or false
- ESP.TeamMates = map['Show team'] or false
- end)
- end
- local gModifications = tMain:AddLeftTabbox()
- local tWeapons = gModifications:AddTab('Weapons')
- do
- tWeapons:AddToggle('NoSpread', { Text = 'No spread' })
- tWeapons:AddToggle('NoRecoil', { Text = 'No recoil' })
- tWeapons:AddToggle('NoReload', { Text = 'Instant reload' })
- tWeapons:AddToggle('FastFire', { Text = 'Fire rate' })
- tWeapons:AddSlider('FastFireMult', { Text = 'Fire rate multiplier', Min = 1, Max = 2, Rounding = 1, Default = 1 })
- tWeapons:AddToggle('BulletVelocity', { Text = 'Increased bullet velocity' })
- tWeapons:AddSlider('BulletVelocityMult', { Text = 'Velocity multiplier', Min = 1, Max = 2, Rounding = 1, Default = 1 })
- end
- local tSettings = window:AddTab('UI Settings') do
- ThemeManager:ApplyToTab(tSettings)
- local tSaveSettings = tSettings:AddRightGroupbox('Save settings')
- local tCredits = tSettings:AddRightGroupbox('Credits')
- tSaveSettings:AddButton('Save settings', function()
- if SaveManager:Save('Default') then
- UI:Notify('Saved settings!', 2)
- else
- UI:Notify('Failed to save settings', 2)
- end
- end)
- tSaveSettings:AddButton('Load settings', function()
- if SaveManager:Load('Default') then
- UI:Notify('Loaded settings!', 2)
- else
- UI:Notify('Failed to save settings', 2)
- end
- end)
- tCredits:AddLabel('wally - Script')
- tCredits:AddLabel('Inori - UI library')
- tCredits:AddLabel('Kiriot22 - ESP library')
- tCredits:AddButton('Copy discord invite', function()
- if pcall(setclipboard, 'https://wally.cool/discord') then
- UI:Notify('Copied discord invite!', 3)
- else
- UI:Notify('Failed to copy discord invite!', 3)
- end
- end)
- end
- end
- UI:Notify('Frontlines script loaded!', 3)
- UI:Notify('Press RightControl to open the menu!', 3)
Add Comment
Please, Sign In to add comment