
Key RequiredUniversal

-- Phantom Forces | Aimbot & ESP | made by #tupsutumppu | 15.4.2024
local RUN_SERVICE = cloneref(game:GetService("RunService"));
local TWEEN_SERVICE = cloneref(game:GetService("TweenService"));
local PLAYERS = cloneref(game:GetService("Players"));
local localPlayer = PLAYERS.LocalPlayer;
local comm_id, comm_channel = create_comm_channel();
local camera = cloneref(workspace.CurrentCamera);
local ignore = cloneref(workspace.Ignore);
local mouse = localPlayer:GetMouse();
local closest = nil;
local btDefault = {enabled = false; outline = true; color = Color3.fromRGB(255, 0, 255); outlineColor = Color3.fromRGB(0, 40, 255); thickness = 1.5; transparency = 1};
local textDefault = {enabled = false; outline = true; color = Color3.fromRGB(255, 0, 255); outlineColor = Color3.fromRGB(0, 40, 255); size = 14; font = 2; transparency = 1};
local esp = {
settings = {
box = table.clone(btDefault);
tracer = table.clone(btDefault);
name = table.clone(textDefault);
weapon = table.clone(textDefault);
};
};
esp.cache = {
__index = esp;
};
local combatSettings = {
visCheck = true;
aimPart = "Head";
noRecoil = false;
noSway = false;
aimbot = {
enabled = false;
smoothing = 2;
};
silentAim = {
enabled = false;
hitChance = 80;
};
fovCircle = {
enabled = false;
sides = 64;
color = Color3.fromRGB(255, 255, 255);
transparency = 1;
radius = 100;
thickness = 1.2;
filled = false
};
};
local mouse2Down = false;
function esp:update()
if self.data and self.data.character and self.data.character.Head and self.player.Team ~= localPlayer.Team then
local torso = self.data.character.Torso;
local screenPosition, onScreen = camera:WorldToViewportPoint(torso.CFrame.Position);
if torso and screenPosition and onScreen then
local scaleFactor = 1 / (screenPosition.Z * math.tan(math.rad(camera.FieldOfView / 2)) * 2) * 1000;
local boxWidth, boxHeight = math.round(4 * scaleFactor), math.round(5 * scaleFactor);
local boxPos = Vector2.new(math.round(screenPosition.X - boxWidth / 2), math.round(screenPosition.Y - boxHeight / 2));
local topTextY = (screenPosition.Y - (boxHeight + self.drawings.name.TextBounds.Y + 19) / 2);
local bottomTextY = (screenPosition.Y + (boxHeight + self.drawings.weapon.TextBounds.Y - 5) / 2);
self.drawings.boxOutline.Visible = esp.settings.box.enabled and esp.settings.box.outline;
self.drawings.boxOutline.Size = Vector2.new(boxWidth, boxHeight);
self.drawings.boxOutline.Position = boxPos;
self.drawings.boxOutline.Color = esp.settings.box.outlineColor;
self.drawings.boxOutline.Thickness = esp.settings.box.thickness + 1.5;
self.drawings.boxOutline.Transparency = esp.settings.box.transparency;
self.drawings.box.Visible = esp.settings.box.enabled;
self.drawings.box.Size = Vector2.new(boxWidth, boxHeight);
self.drawings.box.Position = boxPos;
self.drawings.box.Color = esp.settings.box.color;
self.drawings.box.Thickness = esp.settings.box.thickness;
self.drawings.box.Transparency = esp.settings.box.transparency;
self.drawings.tracerOutline.Visible = esp.settings.tracer.enabled and esp.settings.tracer.outline;
self.drawings.tracerOutline.From = Vector2.new(camera.ViewportSize.X / 2, camera.ViewportSize.Y);
self.drawings.tracerOutline.To = Vector2.new(screenPosition.X, screenPosition.Y);
self.drawings.tracerOutline.Color = esp.settings.tracer.outlineColor;
self.drawings.tracerOutline.Thickness = esp.settings.tracer.thickness + 1.5;
self.drawings.tracerOutline.Transparency = esp.settings.tracer.transparency;
self.drawings.tracer.Visible = esp.settings.tracer.enabled;
self.drawings.tracer.From = Vector2.new(camera.ViewportSize.X / 2, camera.ViewportSize.Y);
self.drawings.tracer.To = Vector2.new(screenPosition.X, screenPosition.Y);
self.drawings.tracer.Color = esp.settings.tracer.color;
self.drawings.tracer.Thickness = esp.settings.tracer.thickness;
self.drawings.tracer.Transparency = esp.settings.tracer.transparency;
self.drawings.weapon.Visible = esp.settings.weapon.enabled;
self.drawings.weapon.Text = (self.data.weapon) or "no weapon";
self.drawings.weapon.Size = esp.settings.weapon.size;
self.drawings.weapon.Color = esp.settings.weapon.color;
self.drawings.weapon.Transparency = esp.settings.weapon.transparency;
self.drawings.weapon.Outline = esp.settings.weapon.outline;
self.drawings.weapon.OutlineColor = esp.settings.weapon.outlineColor;
self.drawings.weapon.Font = esp.settings.weapon.font;
self.drawings.weapon.Position = Vector2.new(screenPosition.X, bottomTextY);
self.drawings.weapon.Center = true;
self.drawings.name.Visible = esp.settings.name.enabled;
self.drawings.name.Text = self.player.Name;
self.drawings.name.Size = esp.settings.name.size;
self.drawings.name.Color = esp.settings.name.color;
self.drawings.name.Transparency = esp.settings.name.transparency;
self.drawings.name.Outline = esp.settings.name.outline;
self.drawings.name.OutlineColor = esp.settings.name.outlineColor;
self.drawings.name.Font = esp.settings.name.font;
self.drawings.name.Position = Vector2.new(screenPosition.X, topTextY);
self.drawings.name.Center = true;
else
self.drawings.boxOutline.Visible = false;
self.drawings.box.Visible = false;
self.drawings.tracerOutline.Visible = false;
self.drawings.tracer.Visible = false;
self.drawings.weapon.Visible = false;
self.drawings.name.Visible = false;
end
else
self.drawings.boxOutline.Visible = false;
self.drawings.box.Visible = false;
self.drawings.tracerOutline.Visible = false;
self.drawings.tracer.Visible = false;
self.drawings.weapon.Visible = false;
self.drawings.name.Visible = false;
end
end
function esp.new(player, data)
local self = setmetatable({}, esp.cache);
self.player = player;
self.data = data;
self.drawings = {
boxOutline = Drawing.new("Square"), {};
box = Drawing.new("Square"), {};
tracerOutline = Drawing.new("Line"), {};
tracer = Drawing.new("Line"), {};
weapon = Drawing.new("Text"), {};
name = Drawing.new("Text"), {};
};
self.connection = RUN_SERVICE.RenderStepped:Connect(function()
self:update()
end);
esp.cache[player] = self;
return self;
end
function esp:remove()
self.connection:Disconnect();
for _, drawing in next, self.drawings do
if typeof(drawing) ~= "table" then
drawing:Remove();
end
end
esp.cache[self.player] = nil;
table.clear(self);
end
function esp.getEnemyCharacters()
local enemies = {};
for k, v in next, esp.cache do
if typeof(k) == "Instance" and v.data and v.data.character and k.Team ~= localPlayer.Team then
table.insert(enemies, v.data.character);
end
end
return enemies;
end
PLAYERS.PlayerRemoving:Connect(function(player)
local self = esp.cache[player];
if self then
self:remove();
end
end);
comm_channel.Event:Connect(function(caller, player, data)
if caller == "actor" then
local self = esp.cache[player];
if self then
self.data = data;
else
esp.new(player);
end
end
end);
run_on_actor(getactors()[1], [[
local RUN_SERVICE = cloneref(game:GetService("RunService"));
local req = getrenv().shared.require
local operateOnAllEntries = req("ReplicationInterface").operateOnAllEntries;
local applyImpulse = req("RecoilSprings").applyImpulse;
local combatSettings;
local closest;
local comm_channel = ...;
comm_channel = get_comm_channel(comm_channel);
RUN_SERVICE.Heartbeat:Connect(function()
operateOnAllEntries(function(player, data)
comm_channel:Fire("actor", player, {
weapon = (data._thirdPersonObject and data._thirdPersonObject._weaponname) or false;
character = (data._thirdPersonObject and data._thirdPersonObject._characterHash) or false;
});
end);
end);
comm_channel.Event:Connect(function(caller, _, data)
if caller == "main" then
combatSettings = data.combatSettings;
closest = data.closest;
end
end)
local old_applyImpulse;
local old_index;
old_applyImpulse = hookfunction(applyImpulse, function(...)
if combatSettings.noRecoil then
return
end
return old_applyImpulse(...);
end);
old_index = hookmetamethod(game, "__index", newcclosure(function(...)
local self, index = ...;
if typeof(self) == "Instance" and index == "CFrame" and debug.info(3, "n") == "fireRound" then
if combatSettings.silentAim.enabled and closest and math.random(1, 100) <= combatSettings.silentAim.hitChance then
local oldCFrame = old_index(self, index);
return CFrame.lookAt(oldCFrame.Position, closest.CFrame.Position);
end
end
return old_index(...);
end));
]], comm_id);
local function isVisible(head, character)
local params = RaycastParams.new();
params.FilterDescendantsInstances = {camera, ignore};
params.FilterType = Enum.RaycastFilterType.Exclude;
params.IgnoreWater = true;
local result = workspace:Raycast(camera.CFrame.Position, head.CFrame.Position - camera.CFrame.Position, params);
if result and result.Instance and result.Instance:IsDescendantOf(character) then
return true;
end
return false;
end
local function getClosestEnemy()
local enemies = esp.getEnemyCharacters();
local maxDist = math.huge;
local closest = nil;
for _, v in next, enemies do
if v and v.Head and v[combatSettings.aimPart] then
local head = v.Head;
local headPos = head.CFrame.Position;
local headPosV2, onScreen = camera:WorldToViewportPoint(headPos);
if onScreen then
local distance = (Vector2.new(headPosV2.X, headPosV2.Y) - (camera.ViewportSize / 2)).Magnitude;
if ((distance < combatSettings.fovCircle.radius) or not combatSettings.fovCircle.enabled) and (not combatSettings.visCheck or isVisible(head, head.Parent)) then
distance = (camera.CFrame.Position - headPos).Magnitude;
if distance < maxDist then
maxDist = distance;
closest = v[combatSettings.aimPart];
end
end
end
end
end
if closest then
return closest;
end
return nil;
end
local function lookAt(pos)
local mousePos = Vector2.new(mouse.X, mouse.Y);
mousemoverel((pos.X - mousePos.X) / combatSettings.aimbot.smoothing, (pos.Y - mousePos.Y) / combatSettings.aimbot.smoothing);
end
mouse.Button2Down:Connect(function()
mouse2Down = true;
end);
mouse.Button2Up:Connect(function()
mouse2Down = false;
end);
local circle = Drawing.new("Circle");
circle.Position = Vector2.new(camera.ViewportSize.X / 2, camera.ViewportSize.Y / 2);
RUN_SERVICE.Heartbeat:Connect(function()
closest = getClosestEnemy();
comm_channel:Fire("main", nil, {
combatSettings = combatSettings;
closest = closest;
});
if combatSettings.aimbot.enabled and mouse2Down then
if closest then
lookAt(camera:WorldToScreenPoint(closest.CFrame.Position));
end
end
circle.Visible = combatSettings.fovCircle.enabled;
circle.Thickness = combatSettings.fovCircle.thickness;
circle.NumSides = combatSettings.fovCircle.sides;
circle.Radius = combatSettings.fovCircle.radius;
circle.Color = combatSettings.fovCircle.color;
circle.Transparency = combatSettings.fovCircle.transparency;
end)
local repo = "https://raw.githubusercontent.com/violin-suzutsuki/LinoriaLib/main/";
local Library = loadstring(game:HttpGet(repo .. "Library.lua"))();
local ThemeManager = loadstring(game:HttpGet(repo .. "addons/ThemeManager.lua"))();
local Window = Library:CreateWindow({
Title = tostring(cloneref(game:GetService("MarketplaceService")):GetProductInfo(game.PlaceId).Name) .. " |" .. " #tupsutumppu";
Center = true;
AutoShow = true;
TabPadding = 8;
MenuFadeTime = 0.2
});
local Tabs = {
Combat = Window:AddTab("Combat");
ESP = Window:AddTab("ESP");
["UI Settings"] = Window:AddTab("UI Settings")
};
local aimingGB = Tabs.Combat:AddLeftGroupbox("Aiming");
local gunModsGB = Tabs.Combat:AddRightGroupbox("Gun Mods");
local boxGB = Tabs.ESP:AddLeftGroupbox("Box");
local tracerGB = Tabs.ESP:AddRightGroupbox("Tracer");
local nameGB = Tabs.ESP:AddRightGroupbox("Name");
local weaponGB = Tabs.ESP:AddLeftGroupbox("Weapon");
aimingGB:AddToggle("aimbot", {
Text = "Aimbot";
Default = false;
Tooltip = "enable / disable aimbot";
Callback = function(Value)
combatSettings.aimbot.enabled = Value;
end
});
aimingGB:AddToggle("silentAim", {
Text = "Silent Aim";
Default = false;
Tooltip = "enable / disable silent aim";
Callback = function(Value)
combatSettings.silentAim.enabled = Value;
end
});
aimingGB:AddToggle("visCheck", {
Text = "Visibility Check";
Default = true;
Tooltip = "checks if target is visible";
Callback = function(Value)
combatSettings.visCheck = Value;
end
});
aimingGB:AddDropdown("hitPart", {
Values = {"Head", "Torso"},
Default = "Head",
Multi = false,
Text = "Aim Part",
Tooltip = "",
Callback = function(Value)
combatSettings.aimPart = Value;
end
});
aimingGB:AddSlider("aimbotSmoothing", {
Text = "Aimbot Smoothing",
Default = combatSettings.aimbot.smoothing,
Min = 2,
Max = 20,
Rounding = 1,
Compact = false,
Callback = function(Value)
combatSettings.smoothing = Value;
end
});
aimingGB:AddSlider("silentAimHitChance", {
Text = "Silent Aim Hit Chance",
Default = combatSettings.silentAim.hitChance,
Min = 1,
Max = 100,
Rounding = 0,
Compact = false,
Callback = function(Value)
combatSettings.silentAim.hitChance = Value;
end
});
aimingGB:AddDivider();
aimingGB:AddToggle("fovCircle", {
Text = "FOV Cirle";
Default = false;
Tooltip = "enable / disable fov circle";
Callback = function(Value)
combatSettings.fovCircle.enabled = Value;
end
});
aimingGB:AddSlider("circleRadius", {
Text = "Radius",
Default = combatSettings.fovCircle.radius,
Min = 25,
Max = 1000,
Rounding = 0,
Compact = false,
Callback = function(Value)
combatSettings.fovCircle.radius = Value;
end
});
aimingGB:AddSlider("circleThickness", {
Text = "Thickness",
Default = combatSettings.fovCircle.thickness,
Min = 1,
Max = 3,
Rounding = 1,
Compact = false,
Callback = function(Value)
combatSettings.fovCircle.thickness = Value;
end
});
aimingGB:AddSlider("circleNumSides", {
Text = "NumSides",
Default = combatSettings.fovCircle.sides,
Min = 6,
Max = 256,
Rounding = 0,
Compact = false,
Callback = function(Value)
combatSettings.fovCircle.sides = Value;
end
});
aimingGB:AddSlider("circleTransparency", {
Text = "Transparency",
Default = combatSettings.fovCircle.transparency,
Min = 0,
Max = 1,
Rounding = 1,
Compact = false,
Callback = function(Value)
combatSettings.fovCircle.transparency = Value;
end
});
aimingGB:AddLabel("Color"):AddColorPicker("fovCircleColor", {
Default = combatSettings.fovCircle.color,
Title = "Color",
Transparency = 0,
Callback = function(Value)
combatSettings.fovCircle.color = Value;
end
});
gunModsGB:AddToggle("noRecoil", {
Text = "No Recoil";
Default = false;
Tooltip = "enable / disable weapon recoil";
Callback = function(Value)
combatSettings.noRecoil = Value;
end
});
boxGB:AddToggle("boxEnabled", {
Text = "Enabled";
Default = false;
Tooltip = "enable / disable boxes";
Callback = function(Value)
esp.settings.box.enabled = Value;
end
});
boxGB:AddSlider("boxThickness", {
Text = "Thickness",
Default = esp.settings.box.thickness,
Min = 0,
Max = 3,
Rounding = 1,
Compact = false,
Callback = function(Value)
esp.settings.box.thickness = Value;
end
});
boxGB:AddSlider("boxTransparency", {
Text = "Transparency",
Default = esp.settings.box.transparency,
Min = 0,
Max = 1,
Rounding = 1,
Compact = false,
Callback = function(Value)
esp.settings.box.transparency = Value;
end
});
boxGB:AddLabel("Color"):AddColorPicker("boxColor", {
Default = esp.settings.box.color,
Title = "Color",
Transparency = 0,
Callback = function(Value)
esp.settings.box.color = Value;
end
});
boxGB:AddDivider()
boxGB:AddToggle("boxOutline", {
Text = "Outline";
Default = true;
Tooltip = "enable / disable box outline";
Callback = function(Value)
esp.settings.box.outline = Value;
end
});
boxGB:AddLabel("Outline Color"):AddColorPicker("boxOutlineColor", {
Default = esp.settings.box.outlineColor,
Title = "Outline Color",
Transparency = 0,
Callback = function(Value)
esp.settings.box.outlineColor = Value;
end
});
tracerGB:AddToggle("tracerEnabled", {
Text = "Enabled";
Default = false;
Tooltip = "enable / disable tracers";
Callback = function(Value)
esp.settings.tracer.enabled = Value;
end
});
tracerGB:AddSlider("tracerThickness", {
Text = "Thickness",
Default = esp.settings.tracer.thickness,
Min = 0,
Max = 3,
Rounding = 1,
Compact = false,
Callback = function(Value)
esp.settings.tracer.thickness = Value;
end
});
tracerGB:AddSlider("tracerTransparency", {
Text = "Transparency",
Default = esp.settings.tracer.transparency,
Min = 0,
Max = 1,
Rounding = 1,
Compact = false,
Callback = function(Value)
esp.settings.tracer.transparency = Value;
end
});
tracerGB:AddLabel("Color"):AddColorPicker("tracerColor", {
Default = esp.settings.tracer.color,
Title = "Color",
Transparency = 0,
Callback = function(Value)
esp.settings.tracer.color = Value;
end
});
tracerGB:AddDivider()
tracerGB:AddToggle("tracerOutline", {
Text = "Outline";
Default = true;
Tooltip = "enable / disable tracer outline";
Callback = function(Value)
esp.settings.tracer.outline = Value;
end
});
tracerGB:AddLabel("Outline Color"):AddColorPicker("tracerOutlineColor", {
Default = esp.settings.tracer.outlineColor,
Title = "Outline Color",
Transparency = 0,
Callback = function(Value)
esp.settings.tracer.outlineColor = Value;
end
});
nameGB:AddToggle("nameEnabled", {
Text = "Enabled";
Default = false;
Tooltip = "enable / disable name esp";
Callback = function(Value)
esp.settings.name.enabled = Value;
end
});
nameGB:AddDropdown("nameFont", {
Values = {"UI", "System", "Plex", "Monospace"},
Default = "System",
Multi = false,
Text = "Font",
Tooltip = "",
Callback = function(Value)
esp.settings.name.font = Drawing.Fonts[Value];
end
});
nameGB:AddSlider("nameSize", {
Text = "Size",
Default = esp.settings.name.size,
Min = 5,
Max = 20,
Rounding = 0,
Compact = false,
Callback = function(Value)
esp.settings.name.size = Value;
end
});
nameGB:AddSlider("nameTransparency", {
Text = "Transparency",
Default = esp.settings.name.transparency,
Min = 0,
Max = 1,
Rounding = 1,
Compact = false,
Callback = function(Value)
esp.settings.name.transparency = Value;
end
});
nameGB:AddLabel("Color"):AddColorPicker("nameColor", {
Default = esp.settings.name.color,
Title = "Color",
Transparency = 0,
Callback = function(Value)
esp.settings.name.color = Value;
end
});
nameGB:AddDivider()
nameGB:AddToggle("nameOutline", {
Text = "Outline";
Default = true;
Tooltip = "enable / disable text outline";
Callback = function(Value)
esp.settings.name.outline = Value;
end
});
nameGB:AddLabel("Outline Color"):AddColorPicker("nameOutlineColor", {
Default = esp.settings.name.outlineColor,
Title = "Outline Color",
Transparency = 0,
Callback = function(Value)
esp.settings.name.outlineColor = Value;
end
});
weaponGB:AddToggle("weaponEnabled", {
Text = "Enabled";
Default = false;
Tooltip = "enable / disable weapon esp";
Callback = function(Value)
esp.settings.weapon.enabled = Value;
end
});
weaponGB:AddDropdown("weaponFont", {
Values = {"UI", "System", "Plex", "Monospace"},
Default = "System",
Multi = false,
Text = "Font",
Tooltip = "",
Callback = function(Value)
esp.settings.weapon.font = Drawing.Fonts[Value];
end
});
weaponGB:AddSlider("weaponSize", {
Text = "Size",
Default = esp.settings.weapon.size,
Min = 5,
Max = 20,
Rounding = 0,
Compact = false,
Callback = function(Value)
esp.settings.weapon.size = Value;
end
});
weaponGB:AddSlider("weaponTransparency", {
Text = "Transparency",
Default = esp.settings.weapon.transparency,
Min = 0,
Max = 1,
Rounding = 1,
Compact = false,
Callback = function(Value)
esp.settings.weapon.transparency = Value;
end
});
weaponGB:AddLabel("Color"):AddColorPicker("weaponColor", {
Default = esp.settings.weapon.color,
Title = "Color",
Transparency = 0,
Callback = function(Value)
esp.settings.weapon.color = Value;
end
});
weaponGB:AddDivider()
weaponGB:AddToggle("weaponOutline", {
Text = "Outline";
Default = true;
Tooltip = "enable / disable text outline";
Callback = function(Value)
esp.settings.weapon.outline = Value;
end
});
weaponGB:AddLabel("Outline Color"):AddColorPicker("weaponOutlineColor", {
Default = esp.settings.weapon.outlineColor,
Title = "Outline Color",
Transparency = 0,
Callback = function(Value)
esp.settings.weapon.outlineColor = Value;
end
});
local MenuGroup = Tabs["UI Settings"]:AddRightGroupbox("Menu");
MenuGroup:AddButton("Unload", function() Library:Unload() end);
MenuGroup:AddLabel("Menu bind"):AddKeyPicker("MenuKeybind", {Default = "End", NoUI = true, Text = "Menu keybind"});
Library.ToggleKeybind = Options.MenuKeybind;
ThemeManager:SetLibrary(Library);
ThemeManager:ApplyToTab(Tabs["UI Settings"]);
ThemeManager:ApplyTheme("Quartz");

![Sir Meme Hub | [16 GAMES] [$14.99 LIFETIME] | FARM/AIM/ESP](https://scriptblox.com/images/sb/-1-1791044877945.webp)

Dayum
Please stop uploading thumbnails unrelated to Roblox. Those posts are deleted and repeated offenses will get you banned from our platform.
ok so whenever i use esp script in pf a few days later il get banned dont matter what script it is, this game anti cheat is good