Description
best script to use so far all features
GAME'94 REMASTERED
UPDATEDOct 10, 2026
ACCESSKey System
PLATFORMDesktop
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. Deal with caution.
--
-- Stay safe:
-- • Never log in on unofficial Roblox sites or lookalike domains.
-- • Real Roblox links use roblox.com (check the .com ending).
-- • Treat fake Roblox login / "claim reward" pages as phishing.
-- [[ End BloxScripts Risk Notice ]]
local reloadState = ...
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UIS = game:GetService("UserInputService")
local RS = game:GetService("ReplicatedStorage")
local localPlayer = Players.LocalPlayer
assert(game.PlaceId == 3279760276, "This script is for '94 REMASTERED.")
local env = getgenv()
if env.Remastered94Toolkit and type(env.Remastered94Toolkit.stop) == "function" then
env.Remastered94Toolkit.stop()
end
-- Rayfield Gen2 does not include the legacy Rayfield key prompt, so gate the window before it loads.
local keyGui, keySignal
local keyGateAlive = true
if reloadState and reloadState.onCleanup then
reloadState.onCleanup(function()
keyGateAlive = false
if keySignal then pcall(function() keySignal:Fire() end) end
if keyGui then pcall(function() keyGui:Destroy() end) end
end)
end
local guiParent = gethui and gethui() or game:GetService("CoreGui")
local previousGate = guiParent and guiParent:FindFirstChild("AppleKeySystem")
if previousGate then previousGate:Destroy() end
keyGui = Instance.new("ScreenGui")
keyGui.Name = "AppleKeySystem"
keyGui.IgnoreGuiInset = true
keyGui.ResetOnSpawn = false
keyGui.DisplayOrder = 100000
keyGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
keyGui.Parent = guiParent
local shade = Instance.new("Frame")
shade.Name = "Shade"
shade.Size = UDim2.fromScale(1, 1)
shade.BackgroundColor3 = Color3.fromRGB(8, 10, 14)
shade.BackgroundTransparency = 0.25
shade.BorderSizePixel = 0
shade.Parent = keyGui
local panel = Instance.new("Frame")
panel.Name = "Panel"
panel.AnchorPoint = Vector2.new(0.5, 0.5)
panel.Position = UDim2.fromScale(0.5, 0.5)
panel.Size = UDim2.fromOffset(390, 235)
panel.BackgroundColor3 = Color3.fromRGB(20, 23, 30)
panel.BorderSizePixel = 0
panel.Parent = shade
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 12)
corner.Parent = panel
local stroke = Instance.new("UIStroke")
stroke.Color = Color3.fromRGB(96, 135, 255)
stroke.Transparency = 0.25
stroke.Thickness = 1.5
stroke.Parent = panel
local title = Instance.new("TextLabel")
title.BackgroundTransparency = 1
title.Position = UDim2.fromOffset(24, 20)
title.Size = UDim2.new(1, -48, 0, 34)
title.Font = Enum.Font.GothamBold
title.Text = "Apple Key System"
title.TextColor3 = Color3.fromRGB(245, 247, 255)
title.TextSize = 24
title.TextXAlignment = Enum.TextXAlignment.Left
title.Parent = panel
local subtitle = Instance.new("TextLabel")
subtitle.BackgroundTransparency = 1
subtitle.Position = UDim2.fromOffset(24, 55)
subtitle.Size = UDim2.new(1, -48, 0, 24)
subtitle.Font = Enum.Font.Gotham
subtitle.Text = "Enter the key to open '94 Toolkit"
subtitle.TextColor3 = Color3.fromRGB(155, 163, 184)
subtitle.TextSize = 14
subtitle.TextXAlignment = Enum.TextXAlignment.Left
subtitle.Parent = panel
local keyBox = Instance.new("TextBox")
keyBox.Position = UDim2.fromOffset(24, 94)
keyBox.Size = UDim2.new(1, -48, 0, 46)
keyBox.BackgroundColor3 = Color3.fromRGB(30, 34, 44)
keyBox.BorderSizePixel = 0
keyBox.ClearTextOnFocus = false
keyBox.Font = Enum.Font.GothamMedium
keyBox.PlaceholderText = "Key"
keyBox.PlaceholderColor3 = Color3.fromRGB(105, 113, 132)
keyBox.Text = ""
keyBox.TextColor3 = Color3.fromRGB(240, 243, 255)
keyBox.TextSize = 16
keyBox.Parent = panel
local boxCorner = Instance.new("UICorner")
boxCorner.CornerRadius = UDim.new(0, 8)
boxCorner.Parent = keyBox
local submit = Instance.new("TextButton")
submit.Position = UDim2.fromOffset(24, 153)
submit.Size = UDim2.new(1, -48, 0, 43)
submit.BackgroundColor3 = Color3.fromRGB(82, 120, 255)
submit.BorderSizePixel = 0
submit.AutoButtonColor = true
submit.Font = Enum.Font.GothamBold
submit.Text = "Unlock"
submit.TextColor3 = Color3.fromRGB(255, 255, 255)
submit.TextSize = 15
submit.Parent = panel
local submitCorner = Instance.new("UICorner")
submitCorner.CornerRadius = UDim.new(0, 8)
submitCorner.Parent = submit
local feedback = Instance.new("TextLabel")
feedback.BackgroundTransparency = 1
feedback.Position = UDim2.fromOffset(24, 201)
feedback.Size = UDim2.new(1, -48, 0, 22)
feedback.Font = Enum.Font.Gotham
feedback.Text = ""
feedback.TextColor3 = Color3.fromRGB(255, 105, 105)
feedback.TextSize = 13
feedback.Parent = panel
keySignal = Instance.new("BindableEvent")
local keyUnlocked = false
local function submitKey()
if keyBox.Text == "Apple" then
keyUnlocked = true
feedback.TextColor3 = Color3.fromRGB(110, 235, 155)
feedback.Text = "Accepted"
submit.Active = false
keySignal:Fire()
else
feedback.TextColor3 = Color3.fromRGB(255, 105, 105)
feedback.Text = "Incorrect key"
keyBox.Text = ""
keyBox:CaptureFocus()
end
end
submit.Activated:Connect(submitKey)
keyBox.FocusLost:Connect(function(enterPressed)
if enterPressed then submitKey() end
end)
keyBox:CaptureFocus()
while keyGateAlive and not keyUnlocked do keySignal.Event:Wait() end
keySignal:Destroy()
keySignal = nil
if keyGui then keyGui:Destroy(); keyGui = nil end
if not keyUnlocked then return end
local M = {
infiniteAmmo = false, rpgNoReload = false, ammoStatus = "Off", ammoRefills = 0,
customFireRate = false, fireRPM = 1200, holdToFire = false, fireStatus = "Off",
wallPenetration = false, wallPower = 100, penetrationShots = 0,
stopped = false, esp = false, boxes = false, names = false, health = false, distance = false,
tracers = false, showAllies = false, espRange = 2500, showWeapon = false,
healthText = false, targetHighlight = false, espFPS = 30, maxESP = 16,
detailRange = 1200, espOpacity = 85,
silent = false, teamCheck = false, visibility = false, prediction = false, gravity = false,
targetPart = "Head", radius = 160, aimRange = 2000, showCircle = false,
requireADS = false, hitChance = 100, targetName = "None", rendered = 0,
seen = 0, localShots = 0, redirected = 0, errors = 0, status = "Starting",
lastError = "", lastTarget = "None", travelTime = 0, frameMs = 0,
enemyColor = Color3.fromRGB(255, 105, 105), allyColor = Color3.fromRGB(100, 200, 255)
}
env.Remastered94Toolkit = M
local connections, records, allDrawings = {}, {}, {}
local window, dashboard, handler, original, wrapper
local circle, targetDot
local restoreFireControls = function() end
local ammoFault, fireFault
local function normalizePart(value)
local part = type(value) == "table" and value[1] or value
if part == "Head" or part == "Torso" or part == "HumanoidRootPart" then return part end
return "Head"
end
local function reportFault(feature, message)
M.errors += 1
M.lastError = feature .. ": " .. tostring(message)
return "Disabled: " .. tostring(message)
end
local function removeDrawing(d)
if not d then return end
allDrawings[d] = nil
pcall(function() d:Remove() end)
end
local function newDrawing(kind, props)
local d = Drawing.new(kind)
allDrawings[d] = true
d.Visible = false
for k, v in props do d[k] = v end
return d
end
local function hideRecord(record)
record.visible = false
if record.drawings then for _, d in record.drawings do d.Visible = false end end
end
local function removeRecord(p)
local record = records[p]
if record and record.drawings then
for _, d in record.drawings do removeDrawing(d) end
end
records[p] = nil
end
function M.stop()
if M.stopped then return end
M.stopped, M.silent, M.esp, M.infiniteAmmo = true, false, false, false
M.rpgNoReload = false
M.customFireRate, M.holdToFire, M.wallPenetration = false, false, false
for _, c in connections do pcall(function() c:Disconnect() end) end
table.clear(connections)
pcall(restoreFireControls)
if handler and wrapper and handler.SimulateProjectile == wrapper then
pcall(function() handler.SimulateProjectile = original end)
end
for d in allDrawings do pcall(function() d:Remove() end) end
table.clear(allDrawings)
table.clear(records)
if window and not window.unloaded then pcall(function() window:Unload() end) end
M.status = "Unloaded"
end
if reloadState and reloadState.onCleanup then reloadState.onCleanup(M.stop) end
-- Solve a low-flight-time intercept using the shot's actual speed/acceleration.
local function intercept(origin, position, velocity, speed, acceleration)
if speed ~= speed or speed <= 0 or speed == math.huge then return nil end
local relative = position - origin
if relative.Magnitude < 0.001 then return nil end
local a = velocity:Dot(velocity) - speed * speed
local b = 2 * relative:Dot(velocity)
local c = relative:Dot(relative)
local t
if math.abs(a) < 0.000001 then
if math.abs(b) < 0.000001 then return nil end
t = -c / b
else
local discriminant = b * b - 4 * a * c
if discriminant < 0 then return nil end
local root = math.sqrt(discriminant)
local t1, t2 = (-b - root) / (2 * a), (-b + root) / (2 * a)
if t1 > 0 and t2 > 0 then t = math.min(t1, t2)
elseif t1 > 0 then t = t1 elseif t2 > 0 then t = t2 end
end
if not t or t <= 0 or t > 5 then return nil end
for _ = 1, 16 do
local delta = relative + velocity * t - acceleration * (0.5 * t * t)
local nextT = delta.Magnitude / speed
if nextT ~= nextT or nextT <= 0 or nextT > 5 then return nil end
if math.abs(nextT - t) < 0.00001 then t = nextT; break end
t = nextT
end
local delta = relative + velocity * t - acceleration * (0.5 * t * t)
if delta.Magnitude < 0.001 or math.abs(delta.Magnitude / speed - t) > 0.002 then return nil end
return delta.Unit, t
end
local function allies(p)
if localPlayer.Team and p.Team and not localPlayer.Neutral and not p.Neutral then
return localPlayer.TeamColor == p.TeamColor
end
local mine, theirs = localPlayer.Character, p.Character
local a, b = mine and mine:FindFirstChild("TEAM"), theirs and theirs:FindFirstChild("TEAM")
return a and b and a:IsA("ValueBase") and b:IsA("ValueBase") and a.Value == b.Value or false
end
local function validPlayer(p, forAim)
if p == localPlayer or not p.Parent then return nil end
if p.Team and p.Team.Name == "Choosing" then return nil end
local c = p.Character
local h = c and c:FindFirstChildOfClass("Humanoid")
local root = c and c:FindFirstChild("HumanoidRootPart")
if not h or h.Health <= 0 or not root or not root:IsA("BasePart") then return nil end
local friendly = allies(p)
if forAim then
if M.teamCheck and friendly then return nil end
if c:FindFirstChildOfClass("ForceField") then return nil end
elseif friendly and not M.showAllies then return nil end
return c, h, root, friendly
end
local function aimPart(c)
M.targetPart = normalizePart(M.targetPart)
local part = c:FindFirstChild(M.targetPart)
if not part and M.targetPart == "Torso" then part = c:FindFirstChild("UpperTorso") end
return part and part:IsA("BasePart") and part or nil
end
local function lineClear(origin, position, enemy)
local camera = workspace.CurrentCamera
local ignore = {}
if localPlayer.Character then table.insert(ignore, localPlayer.Character) end
if camera then table.insert(ignore, camera) end
local acs = workspace:FindFirstChild("ACS_WorkSpace")
if acs then
for _, name in {"Client", "Server", "Boulets"} do
local folder = acs:FindFirstChild(name)
if folder then table.insert(ignore, folder) end
end
end
local params = RaycastParams.new()
params.FilterType = Enum.RaycastFilterType.Exclude
params.IgnoreWater = true
params.FilterDescendantsInstances = ignore
local direction = position - origin
if direction.Magnitude < 0.001 then return true end
for _ = 1, 8 do
local hit = workspace:Raycast(origin, direction, params)
if not hit or hit.Instance:IsDescendantOf(enemy) then return true end
local part = hit.Instance
if part:IsA("BasePart") and (part.Transparency >= 0.95
or (not part.CanCollide and part.Name ~= "Head" and part.Name ~= "Torso")) then
table.insert(ignore, part)
params.FilterDescendantsInstances = ignore
else return false end
end
return false
end
local function selectTarget(origin)
local camera = workspace.CurrentCamera
local myChar = localPlayer.Character
local myHum = myChar and myChar:FindFirstChildOfClass("Humanoid")
if not camera or not myHum or myHum.Health <= 0 then return nil end
if localPlayer.Team and localPlayer.Team.Name == "Choosing" then return nil end
local center = camera.ViewportSize / 2
local candidates = {}
for p in records do
local c, _, root = validPlayer(p, true)
if c then
local part = aimPart(c)
if part and (part.Position - origin).Magnitude <= M.aimRange then
local point, onScreen = camera:WorldToViewportPoint(part.Position)
if onScreen and point.Z > 0 then
local distance = (Vector2.new(point.X, point.Y) - center).Magnitude
if distance <= M.radius then
table.insert(candidates, {player = p, character = c, root = root, part = part, score = distance})
end
end
end
end
end
table.sort(candidates, function(a, b)
if a.score == b.score then return a.player.UserId < b.player.UserId end
return a.score < b.score
end)
for _, candidate in candidates do
if M.wallPenetration or not M.visibility or lineClear(origin, candidate.part.Position, candidate.character) then return candidate end
end
return nil
end
local function adsActive()
return not M.requireADS or UIS:IsMouseButtonPressed(Enum.UserInputType.MouseButton2)
or UIS:IsGamepadButtonDown(Enum.UserInputType.Gamepad1, Enum.KeyCode.ButtonL2)
end
local function localShot(origin, direction, speed, behavior, replicatedSettings)
local c = localPlayer.Character
return replicatedSettings == nil and typeof(origin) == "Vector3" and typeof(direction) == "Vector3"
and type(speed) == "number" and type(behavior) == "table"
and typeof(behavior.SettingFolder) == "Instance" and behavior.SettingFolder:IsA("Tool")
and c ~= nil and behavior.SettingFolder.Parent == c
end
local function applyShotModifiers(behavior)
if not M.wallPenetration then return false end
local power = math.clamp(tonumber(M.wallPower) or 100, 1, 250)
M.wallPower = power
behavior.BulletPenetration = power
M.penetrationShots += 1
return true
end
M.applyShotModifiers = applyShotModifiers
local function redirect(origin, direction, speed, behavior)
if not M.silent or M.stopped or UIS:GetFocusedTextBox() or not adsActive() then return direction end
if M.hitChance < 100 and math.random() * 100 >= M.hitChance then return direction end
local candidate = selectTarget(origin)
if not candidate then return direction end
local velocity = M.prediction and candidate.root.AssemblyLinearVelocity or Vector3.zero
if velocity.Magnitude > 180 then velocity = Vector3.zero end
local acceleration = M.gravity and typeof(behavior.Acceleration) == "Vector3"
and behavior.Acceleration or Vector3.zero
local solved, flight = intercept(origin, candidate.part.Position, velocity, speed, acceleration)
if not solved then return direction end
-- Reject steep or reversed redirects even if a very large radius is configured.
if direction.Magnitude < 0.001 or solved:Dot(direction.Unit) < math.cos(math.rad(70)) then return direction end
M.lastTarget, M.travelTime = candidate.player.Name, flight
return solved * direction.Magnitude, candidate
end
local function makeWrapper(nextFunction)
return function(self, origin, direction, speed, behavior, tracer, weaponData, replicatedSettings, ...)
M.seen += 1
if localShot(origin, direction, speed, behavior, replicatedSettings) then
M.localShots += 1
applyShotModifiers(behavior)
local ok, changed, candidate = pcall(redirect, origin, direction, speed, behavior)
if ok then
if candidate then direction = changed; M.redirected += 1 end
else
M.errors += 1
M.lastError = tostring(changed)
M.silent = false
end
end
return nextFunction(self, origin, direction, speed, behavior, tracer, weaponData, replicatedSettings, ...)
end
end
-- Read-only helpers let regression tests inspect math without firing a weapon.
M.intercept = intercept
local function createOverlay(record)
if record.drawings then return end
local d = {}
record.drawings = d
d.outline = newDrawing("Square", {Thickness = 3, Filled = false, Color = Color3.new(0, 0, 0)})
d.box = newDrawing("Square", {Thickness = 1, Filled = false})
d.label = newDrawing("Text", {Size = 13, Center = true, Outline = true, Font = 2})
d.healthBack = newDrawing("Line", {Thickness = 4, Color = Color3.new(0, 0, 0)})
d.health = newDrawing("Line", {Thickness = 2})
d.tracer = newDrawing("Line", {Thickness = 1, Transparency = 0.65})
end
local function fastBounds(c, root, camera)
local head = c:FindFirstChild("Head")
local topPosition = head and head:IsA("BasePart")
and head.Position + Vector3.new(0, head.Size.Y * 0.65 + 0.25, 0)
or root.Position + Vector3.new(0, 3.2, 0)
local top = camera:WorldToViewportPoint(topPosition)
local bottom = camera:WorldToViewportPoint(root.Position - Vector3.new(0, 3.1, 0))
if top.Z <= 0.1 or bottom.Z <= 0.1 then return nil end
local height = math.clamp(math.abs(bottom.Y - top.Y), 12, camera.ViewportSize.Y * 1.5)
local width = height * 0.52
local centerX = (top.X + bottom.X) * 0.5
local low = Vector2.new(centerX - width * 0.5, math.min(top.Y, bottom.Y))
local high = Vector2.new(centerX + width * 0.5, math.min(top.Y, bottom.Y) + height)
if high.X < 0 or high.Y < 0 or low.X > camera.ViewportSize.X or low.Y > camera.ViewportSize.Y then return nil end
return low, high
end
local function cachedWeapon(record, c)
if record.character ~= c then
record.character, record.weapon, record.weaponRefresh = c, "", 0
end
if os.clock() >= record.weaponRefresh then
record.weaponRefresh = os.clock() + 0.75
local tool = c:FindFirstChildOfClass("Tool")
record.weapon = tool and tool.Name or ""
end
return record.weapon
end
local function renderESP(camera)
M.rendered = 0
local origin = camera.CFrame.Position
local candidates = {}
for p, record in records do
hideRecord(record)
if M.esp then
local c, hum, root, friendly = validPlayer(p, false)
if c then
local offset = root.Position - origin
local distanceSquared = offset:Dot(offset)
if distanceSquared <= M.espRange * M.espRange then
table.insert(candidates, {player = p, record = record, character = c, humanoid = hum,
root = root, friendly = friendly, distanceSquared = distanceSquared})
end
end
end
end
table.sort(candidates, function(a, b)
if a.distanceSquared == b.distanceSquared then return a.player.UserId < b.player.UserId end
return a.distanceSquared < b.distanceSquared
end)
for index = 1, #candidates do
if M.rendered >= math.clamp(M.maxESP, 4, 32) then break end
local item = candidates[index]
local low, high = fastBounds(item.character, item.root, camera)
if low then
local record, hum = item.record, item.humanoid
createOverlay(record)
local d, distance = record.drawings, math.sqrt(item.distanceSquared)
local highlighted = M.targetHighlight and item.player.Name == M.targetName
local color = highlighted and Color3.fromRGB(255, 210, 80)
or item.friendly and M.allyColor or M.enemyColor
local alpha = math.clamp(M.espOpacity / 100 * (1 - 0.35 * distance / math.max(M.espRange, 1)), 0.25, 1)
local size, detailed = high - low, distance <= M.detailRange
d.outline.Position, d.outline.Size, d.outline.Transparency = low, size, alpha * 0.8
d.outline.Visible = M.boxes
d.box.Position, d.box.Size, d.box.Color, d.box.Transparency = low, size, color, alpha
d.box.Thickness, d.box.Visible = highlighted and 2 or 1, M.boxes
local title = M.names and item.player.DisplayName or ""
local details = {}
if M.healthText and detailed then table.insert(details, tostring(math.floor(hum.Health + 0.5)) .. " HP") end
if M.distance then table.insert(details, string.format("%.0f st", distance)) end
if M.showWeapon and detailed then
local weaponName = cachedWeapon(record, item.character)
if weaponName ~= "" then table.insert(details, weaponName) end
end
local detailText = table.concat(details, " • ")
local label = title .. (title ~= "" and detailText ~= "" and "\n" or "") .. detailText
d.label.Text = label
d.label.Position = Vector2.new((low.X + high.X) / 2, low.Y - (title ~= "" and detailText ~= "" and 29 or 16))
d.label.Color, d.label.Transparency, d.label.Visible = color, alpha, label ~= ""
local fraction = math.clamp(hum.Health / math.max(hum.MaxHealth, 1), 0, 1)
d.healthBack.From, d.healthBack.To = Vector2.new(low.X - 5, high.Y), Vector2.new(low.X - 5, low.Y)
d.health.From, d.health.To = d.healthBack.From, Vector2.new(low.X - 5, high.Y - size.Y * fraction)
d.health.Color, d.health.Transparency = Color3.fromRGB(255 * (1 - fraction), 220 * fraction, 70), alpha
d.healthBack.Transparency = alpha * 0.65
d.health.Visible, d.healthBack.Visible = M.health and detailed, M.health and detailed
d.tracer.From, d.tracer.To = Vector2.new(camera.ViewportSize.X / 2, camera.ViewportSize.Y), Vector2.new((low.X + high.X) / 2, high.Y)
d.tracer.Color, d.tracer.Transparency, d.tracer.Visible = color, alpha * 0.65, M.tracers and detailed
record.visible = true
M.rendered += 1
end
end
end
local function addPlayer(p)
if p ~= localPlayer then records[p] = records[p] or {weaponRefresh = 0, visible = false} end
end
-- These two single-upvalue accessors are verified against the current ACS layout.
-- Keep finite capacities; never modify jam, cooldown, or animation state.
local ammoScript, ammoEnvironment
local function refillAmmo()
if M.stopped or not (M.infiniteAmmo or M.rpgNoReload) then M.ammoStatus = ammoFault or "Off"; return end
local character = localPlayer.Character
local health = character and character:FindFirstChildOfClass("Humanoid")
local saude = character and character:FindFirstChild("Saude")
local client = saude and saude:FindFirstChild("ACS_Client")
if not client or not health or health.Health <= 0 then
ammoScript, ammoEnvironment = nil, nil
M.ammoStatus = "Waiting for character"
return
end
if client ~= ammoScript then
ammoEnvironment = getsenv(client)
ammoScript = client
end
local e = ammoEnvironment
if not e.Equipped or type(e.Settings) ~= "table" then M.ammoStatus = "Equip a weapon"; return end
local weapon = character:FindFirstChildOfClass("Tool")
if not weapon or not weapon:FindFirstChild("ACS_Modulo") then M.ammoStatus = "Equip an ACS weapon"; return end
local settings = e.Settings
local capacity, reserve = settings.Ammo, settings.StoredAmmo
if type(capacity) ~= "number" or capacity ~= capacity or capacity < 1 or capacity > 10000
or type(reserve) ~= "number" or reserve ~= reserve or reserve < 0 or reserve > 100000 then
M.ammoStatus = "Unsupported weapon capacity"; return
end
assert(type(e.CheckGunFull) == "function" and type(e.InsertShell) == "function", "Ammo accessors missing")
local magazineValues, reserveValues = debug.getupvalues(e.CheckGunFull), debug.getupvalues(e.InsertShell)
assert(#magazineValues == 1 and #reserveValues == 1
and type(magazineValues[1]) == "number" and type(reserveValues[1]) == "number", "Ammo layout changed")
-- Scope chamber restoration to RPGs; leave other weapons' chamber states alone.
local launcher = settings.ExplosionType == "RPG" or string.find(string.upper(weapon.Name), "RPG", 1, true) ~= nil
if not M.infiniteAmmo and not launcher then M.ammoStatus = "No-reload waiting for RPG"; return end
local noReload = launcher and M.rpgNoReload
local shootValues, spawnValues
if noReload then
assert(settings.Mode == "Semi" or settings.Mode == "Auto" or settings.Mode == "Burst", "Unsupported RPG firing mode")
assert(type(e.Shootable) == "function" and type(e.SpawnShot) == "function", "RPG accessors missing")
shootValues, spawnValues = debug.getupvalues(e.Shootable), debug.getupvalues(e.SpawnShot)
assert(#shootValues == 3 and type(shootValues[1]) == "boolean" and type(shootValues[2]) == "boolean"
and shootValues[3] == magazineValues[1] and #spawnValues == 5
and type(spawnValues[5]) == "boolean", "RPG chamber layout changed")
end
local changed = false
local desiredReserve = math.max(reserve, capacity)
if reserveValues[1] < desiredReserve then
debug.setupvalue(e.InsertShell, 1, desiredReserve)
changed = true
end
if (not launcher or noReload) and not e.Reloading and not e.AnimDebounce then
if magazineValues[1] < capacity then
debug.setupvalue(e.CheckGunFull, 1, capacity)
changed = true
end
if noReload then
if not shootValues[2] then debug.setupvalue(e.Shootable, 2, true); changed = true end
if spawnValues[5] then debug.setupvalue(e.SpawnShot, 5, false); changed = true end
end
end
if changed then M.ammoRefills += 1 end
if noReload and (e.Reloading or e.AnimDebounce) then
M.ammoStatus = weapon.Name .. " | Waiting for current animation"
return
end
M.ammoStatus = weapon.Name .. (noReload and " | No reload active" or launcher and " | Unlimited reserve; reload normally" or " | Ammo refill active")
end
M.refillAmmo = refillAmmo
local fireBinding
restoreFireControls = function()
local b = fireBinding
fireBinding = nil
if not b then return end
-- A newly equipped weapon has already replaced the shared numeric counters.
local current = localPlayer.Character and localPlayer.Character:FindFirstChildOfClass("Tool")
if b.settings.Mode == b.writtenMode then b.settings.Mode = b.mode end
if b.environment.Settings == b.settings and current == b.weapon then
for _, slot in b.slots do
if slot.written and debug.getupvalue(slot.fn, slot.index) == slot.written then
debug.setupvalue(slot.fn, slot.index, slot.original)
end
end
end
end
local function updateFireControls()
if M.stopped or not (M.customFireRate or M.holdToFire) then
restoreFireControls(); M.fireStatus = fireFault or "Off"; return
end
local c = localPlayer.Character
local h = c and c:FindFirstChildOfClass("Humanoid")
local weapon = c and c:FindFirstChildOfClass("Tool")
local saude = c and c:FindFirstChild("Saude")
local client = saude and saude:FindFirstChild("ACS_Client")
if not client or not h or h.Health <= 0 or not weapon or not weapon:FindFirstChild("ACS_Modulo") then
restoreFireControls(); M.fireStatus = "Equip a weapon"; return
end
local e = fireBinding and fireBinding.client == client and fireBinding.environment or getsenv(client)
if not e.Equipped or type(e.Settings) ~= "table" then restoreFireControls(); return end
if fireBinding and (fireBinding.client ~= client or fireBinding.weapon ~= weapon or fireBinding.settings ~= e.Settings) then restoreFireControls() end
if not fireBinding then
local rate = debug.getupvalue(e.Shoot, 5)
local burst = debug.getupvalue(e.BurstShot, 2)
assert(type(rate) == "number" and rate > 0 and rate <= 10
and debug.getupvalue(e.BoltFire, 3) == rate
and type(burst) == "number" and burst > 0 and burst <= 10, "Fire timing layout changed")
fireBinding = {client = client, environment = e, settings = e.Settings, weapon = weapon,
mode = e.Settings.Mode, slots = {{fn = e.Shoot, index = 5, original = rate},
{fn = e.BurstShot, index = 2, original = burst}}}
end
local b = fireBinding
for _, slot in b.slots do
local interval = M.customFireRate and 60 / math.clamp(M.fireRPM, 60, 3600) or slot.original
if debug.getupvalue(slot.fn, slot.index) ~= interval then debug.setupvalue(slot.fn, slot.index, interval) end
slot.written = interval
end
-- Use ACS's native automatic loop: mouse release still calls StopShooting.
if M.holdToFire and (b.settings.Mode == "Semi" or b.settings.Mode == "Burst") then
b.mode = b.settings.Mode
b.settings.Mode, b.writtenMode = "Auto", "Auto"
elseif not M.holdToFire and b.writtenMode then
if b.settings.Mode == b.writtenMode then b.settings.Mode = b.mode end
b.writtenMode = nil
end
M.fireStatus = string.format("%s | %s | %s", weapon.Name,
M.customFireRate and tostring(M.fireRPM) .. " RPM requested" or "Normal rate", b.settings.Mode)
end
M.updateFireControls = updateFireControls
local function initialize()
local Rayfield = loadstring(game:HttpGet("https://sirius.menu/gen2"))()
window = Rayfield:CreateWindow({
name = "'94 Toolkit", subtitle = "ESP / Silent Aim", sidebarLayout = true,
configuration = {autoSave = false, autoLoad = false, fileName = "Remastered94ToolkitV1"}
})
local esp = window:CreateTab({name = "ESP"})
local espToggle = esp:CreateToggle({name = "ESP (P)", value = M.esp, flag = "ESP", callback = function(v) M.esp = v end})
for _, spec in {{"Boxes", "boxes"}, {"Names", "names"}, {"Health bars", "health"}, {"Health text", "healthText"},
{"Distance", "distance"}, {"Weapon name", "showWeapon"}, {"Tracers", "tracers"},
{"Highlight aim target", "targetHighlight"}, {"Show teammates", "showAllies"}} do
local key = spec[2]
esp:CreateToggle({name = spec[1], value = M[key], flag = "ESP_" .. key, callback = function(v) M[key] = v end})
end
esp:CreateSlider({name = "ESP distance", range = {100, 6000}, increment = 100, value = M.espRange,
suffix = " studs", flag = "ESPRange", callback = function(v) M.espRange = v end})
esp:CreateSlider({name = "Detailed info distance", range = {100, 3000}, increment = 100, value = M.detailRange,
suffix = " studs", flag = "ESPDetailRange", callback = function(v) M.detailRange = v end})
esp:CreateSlider({name = "Maximum players drawn", range = {4, 32}, increment = 1, value = M.maxESP,
flag = "ESPMaxPlayers", callback = function(v) M.maxESP = v end})
esp:CreateSlider({name = "ESP refresh rate", range = {10, 60}, increment = 5, value = M.espFPS,
suffix = " Hz", flag = "ESPFPS", callback = function(v) M.espFPS = v end})
esp:CreateSlider({name = "ESP opacity", range = {25, 100}, increment = 5, value = M.espOpacity,
suffix = "%", flag = "ESPOpacity", callback = function(v) M.espOpacity = v end})
esp:CreateColorPicker({name = "Enemy color", color = M.enemyColor, flag = "EnemyColor", callback = function(v) M.enemyColor = v end})
esp:CreateColorPicker({name = "Teammate color", color = M.allyColor, flag = "AllyColor", callback = function(v) M.allyColor = v end})
local aim = window:CreateTab({name = "Silent Aim"})
local aimToggle = aim:CreateToggle({name = "Silent aim (V)", value = M.silent, flag = "SilentAim", callback = function(v) M.silent = v end})
aim:CreateDropdown({name = "Target part", options = {"Head", "Torso", "HumanoidRootPart"},
value = M.targetPart, flag = "AimPart", callback = function(v) M.targetPart = normalizePart(v) end})
aim:CreateSlider({name = "Aim radius", range = {25, 600}, increment = 5, value = M.radius,
suffix = " px", flag = "AimRadius", callback = function(v) M.radius = v end})
aim:CreateSlider({name = "Aim distance", range = {100, 4000}, increment = 100, value = M.aimRange,
suffix = " studs", flag = "AimRange", callback = function(v) M.aimRange = v end})
for _, spec in {{"Team check", "teamCheck"}, {"Visibility check", "visibility"}, {"Movement prediction", "prediction"},
{"Bullet-drop compensation", "gravity"}, {"Show aim circle", "showCircle"}, {"Require right-click / L2", "requireADS"}} do
local key = spec[2]
aim:CreateToggle({name = spec[1], value = M[key], flag = "Aim_" .. key, callback = function(v) M[key] = v end})
end
aim:CreateSlider({name = "Redirect chance", range = {0, 100}, increment = 5, value = 100, suffix = "%",
flag = "AimChance", callback = function(v) M.hitChance = v end})
local weapons = window:CreateTab({name = "Weapons"})
local ammoToggle = weapons:CreateToggle({name = "Infinite ammo — guns / RPG", value = false,
flag = "InfiniteAmmo", callback = function(v) ammoFault = nil; M.infiniteAmmo = v end})
local rpgToggle = weapons:CreateToggle({name = "RPG no reload", value = false,
flag = "RPGNoReload", callback = function(v) ammoFault = nil; M.rpgNoReload = v end})
local rateToggle = weapons:CreateToggle({name = "Custom fire rate", value = false,
flag = "CustomFireRate", callback = function(v) fireFault = nil; M.customFireRate = v end})
weapons:CreateSlider({name = "Fire rate — guns / RPG", range = {60, 3600}, increment = 60,
value = M.fireRPM, suffix = " RPM", flag = "FireRPM", callback = function(v) M.fireRPM = v end})
local holdToggle = weapons:CreateToggle({name = "Hold mouse to fire — guns / RPG", value = false,
flag = "HoldToFire", callback = function(v) fireFault = nil; M.holdToFire = v end})
weapons:CreateToggle({name = "Shoot through walls — guns", value = false,
flag = "WallPenetration", callback = function(v) M.wallPenetration = v end})
weapons:CreateSlider({name = "Wall penetration strength", range = {1, 250}, increment = 5,
value = M.wallPower, suffix = " power", flag = "WallPower", callback = function(v) M.wallPower = v end})
local ammoConsole = weapons:CreateConsole({name = "Weapon status", height = 110,
text = "RPG no reload restores the round and chamber between shots. Normal firing cooldown remains."})
local ammoElapsed = 0
table.insert(connections, RunService.Heartbeat:Connect(function(dt)
if M.stopped then return end
if window.unloaded then M.stop(); return end
local fireOK, fireError = pcall(updateFireControls)
if not fireOK then
M.customFireRate, M.holdToFire = false, false
pcall(restoreFireControls)
fireFault = reportFault("Fire controls", fireError)
M.fireStatus = fireFault
rateToggle:Set(false, true); holdToggle:Set(false, true)
end
ammoElapsed += dt
if ammoElapsed < 0.025 then return end
ammoElapsed %= 0.025
local success, message = pcall(refillAmmo)
if not success then
M.infiniteAmmo = false
M.rpgNoReload = false
ammoFault = reportFault("Ammo", message)
M.ammoStatus = ammoFault
ammoToggle:Set(false, true)
rpgToggle:Set(false, true)
end
end))
local activity = window:CreateTab({name = "Activity"})
dashboard = activity:CreateConsole({name = "Live status", height = 155, text = "Starting"})
activity:CreateButton({name = "Reset counters", callback = function()
M.seen, M.localShots, M.redirected, M.penetrationShots, M.errors, M.lastError = 0, 0, 0, 0, 0, ""
end})
activity:CreateButton({name = "Unload", callback = M.stop})
circle = newDrawing("Circle", {Radius = M.radius, Thickness = 1, Filled = false, Color = Color3.fromRGB(230, 230, 230), Transparency = 0.65})
targetDot = newDrawing("Circle", {Radius = 4, Thickness = 1, Filled = true, Color = Color3.fromRGB(255, 210, 80)})
for _, p in Players:GetPlayers() do addPlayer(p) end
table.insert(connections, Players.PlayerAdded:Connect(addPlayer))
table.insert(connections, Players.PlayerRemoving:Connect(removeRecord))
table.insert(connections, UIS.InputBegan:Connect(function(input, processed)
if processed or UIS:GetFocusedTextBox() then return end
if input.KeyCode == Enum.KeyCode.P then espToggle:Set(not M.esp) end
if input.KeyCode == Enum.KeyCode.V then aimToggle:Set(not M.silent) end
end))
local module = RS:WaitForChild("GunSys", 10)
module = module and module:FindFirstChild("Mod")
module = module and module:FindFirstChild("ProjectileHandler")
assert(module and module:IsA("ModuleScript"), "ACS projectile module is unavailable.")
handler = require(module)
assert(type(handler) == "table" and type(handler.SimulateProjectile) == "function", "Unsupported ACS projectile module.")
assert(not table.isfrozen(handler), "ACS projectile module is read-only.")
original = handler.SimulateProjectile
wrapper = makeWrapper(original)
handler.SimulateProjectile = wrapper
M.status = "ACS adapter installed"
local espElapsed, aimElapsed, statusElapsed = 0, 0, 0
table.insert(connections, RunService.RenderStepped:Connect(function(dt)
if M.stopped then return end
if window.unloaded then M.stop(); return end
local start = os.clock()
espElapsed += dt; aimElapsed += dt; statusElapsed += dt
local ok, err = pcall(function()
local camera = workspace.CurrentCamera
if not camera then
circle.Visible, targetDot.Visible = false, false
for _, record in records do hideRecord(record) end
return
end
circle.Position, circle.Radius = camera.ViewportSize / 2, M.radius
circle.Visible = M.silent and M.showCircle
local espInterval = 1 / math.clamp(M.espFPS, 10, 60)
if espElapsed >= espInterval then espElapsed %= espInterval; renderESP(camera) end
if aimElapsed >= 0.05 then
aimElapsed %= 0.05
local candidate = M.silent and adsActive() and not UIS:GetFocusedTextBox() and selectTarget(camera.CFrame.Position)
M.targetName = candidate and candidate.player.Name or "None"
targetDot.Visible = false
if candidate and M.showCircle then
local q, visible = camera:WorldToViewportPoint(candidate.part.Position)
targetDot.Position, targetDot.Visible = Vector2.new(q.X, q.Y), visible
end
end
if statusElapsed >= 0.5 then
statusElapsed %= 0.5
if aimToggle.value ~= M.silent then aimToggle:Set(M.silent, true) end
ammoConsole:Set(M.ammoStatus .. "\n" .. M.fireStatus .. "\nWall shots: " .. M.penetrationShots .. " | Refills: " .. M.ammoRefills)
if handler.SimulateProjectile ~= wrapper then
M.silent = false
aimToggle:Set(false, true)
M.status = "Adapter replaced; unload and reload to reconnect"
end
dashboard:Set(string.format("%s\nTarget: %s | ESP: %d/%d | Frame work: %.2f ms\nProjectile calls: %d | Local shots: %d | Redirected: %d | Wall: %d\nLast shot target: %s | Flight: %.0f ms\nErrors: %d %s",
M.status, M.targetName, M.rendered, M.maxESP, M.frameMs, M.seen, M.localShots, M.redirected,
M.penetrationShots, M.lastTarget, M.travelTime * 1000, M.errors, M.lastError))
end
end)
M.frameMs += ((os.clock() - start) * 1000 - M.frameMs) * 0.1
if not ok then
M.errors += 1
M.lastError = tostring(err)
M.esp, M.silent = false, false
espToggle:Set(false, true); aimToggle:Set(false, true)
circle.Visible, targetDot.Visible = false, false
for _, record in records do pcall(hideRecord, record) end
end
end))
end
local ok, err = xpcall(initialize, function(message) return tostring(message) end)
if not ok then M.stop(); error(err, 0) end
return M
Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place