[ad_1]
Created by 2B#0038
Features:
- SILENT AIM
- INSTANT KILL
- AUTO RELOAD
- ANTI DUMB CAMERA
- DEV NOTES:
- Silent Aim will now ignore targets sitting in a car unless you break its window such that Silent Aim can detect the target through the gap. Well, I did some testing pretty sure you can’t kill someone standing behind a car.
- Anti Dumb Camera basically disables the toxic camera lock for guns so you can enjoy them like Anomic v1
- This script is pretty similar(EX SilentAim Keybinds) to the one I made for Anomic v1 but works on the new game Anomic v2 so you should visit the other thread for more details too lazy to write them again
---------------- [[Local Variables]]
local ReplicatedStorageService = game:GetService("ReplicatedStorage")
local ContextActionService = game:GetService("ContextActionService")
local UserInputService = game:GetService("UserInputService")
local PlayersService = game:GetService("Players")
local GuiService = game:GetService("GuiService")
local System = {}
---------------- [[Main Variables]]
System.IsSilentAimEnabled = true
System.IsInstantKillEnabled = true
System.SACircleSizeControlSpeed = 10 -- don't touch unless you understand what it does
System.SACircleTransparencyControlSpeed = .1 -- don't touch unless you understand what it does
System.SilentAimCircleRange = System.SACircleSizeControlSpeed * 10 -- just don't touch
---------
System.LocalPlayer = PlayersService.LocalPlayer
System.Mouse = System.LocalPlayer:GetMouse()
System.RSRemotesFolder = ReplicatedStorageService:WaitForChild("Events", 100)
System.RSAmmoFolder = ReplicatedStorageService:WaitForChild("AmmoFolder", 100)
System.PlayerVehiclesFolder = workspace:WaitForChild("PlayerVehicles", 100)
System.ViewModelsFolder = workspace:WaitForChild("ViewModels", 100)
System.TemporaryIgnore = workspace:WaitForChild("TemporaryIgnore", 100)
System.Modules = {}
System.Modules.GunModule = require(ReplicatedStorageService:WaitForChild("GunModule",100))
System.Modules.TeamList = require(ReplicatedStorageService:WaitForChild("TeamList",100))
System.Modules.ItemList = require(ReplicatedStorageService:WaitForChild("ItemList",100))
System.Modules.CameraModifier = require(ReplicatedStorageService:WaitForChild("CameraModifier",100))
System.Modules.ShoulderCamera = require(ReplicatedStorageService.CameraModifier:WaitForChild("ShoulderCamera",100))
System.Remotes = {}
System.Remotes.GunServer = System.RSRemotesFolder:WaitForChild("GunServer", 100)
System.Remotes.GetDataInfo = System.RSRemotesFolder:WaitForChild("GetDataInfo", 100)
System.ServerRunTimeHolder = ReplicatedStorageService:WaitForChild("ServerRunTime", 100)
System.LocalPlayerAmmoFolder = System.RSAmmoFolder:WaitForChild(System.LocalPlayer.Name, 100)
System.RecordedToolData = {}
System.VehiclesDataTab = {}
System.TargetsDataTab = {}
System.LocalPlayerDataTab = nil
System.LastGunUsedTick = 0
System.CurrentGunRange = 300
System.LocalPlayerPing = 1
System.LocalPlayerPingHalf = 1
System.SilentAimIgnoreList = {System.ViewModelsFolder, System.TemporaryIgnore}
System.SilentAimIgnoreListStartFrom = #System.SilentAimIgnoreList + 1
---------------- [[Functions]]
local TickForPing
function System:updateLocalPlayerPing()
TickForPing = tick()
self.Remotes.GetDataInfo:InvokeServer("Playtime")
TickForPing = tick() - TickForPing
self.LocalPlayerPing, self.LocalPlayerPingHalf = TickForPing, TickForPing/2
end
function System:registerNewObjectToTable(TargetTable, NewObject, OldObject, TableFindStartFrom)
if NewObject ~= nil then
table.insert(TargetTable, NewObject)
end
if OldObject ~= nil then
local OldObjectIndex = table.find(TargetTable, OldObject, TableFindStartFrom)
--warn("Removing Value: ", OldObject, "Index: ", OldObjectIndex)
if OldObjectIndex ~= nil then
table.remove(TargetTable, OldObjectIndex)
end
end
end
function System:registerItemType(ToolName)
if self.RecordedToolData[ToolName] == nil then
local CurrentToolData = self.Modules.ItemList[ToolName]
if CurrentToolData ~= nil then
local ItemDataTab = {}
ItemDataTab.MaxAmmo = CurrentToolData.MaxAmmo -- fixed
ItemDataTab.AmmoType = CurrentToolData.AmmoType -- fixed
ItemDataTab.Damage = CurrentToolData.Damage -- fixed
ItemDataTab.Firerate = CurrentToolData.Firerate -- fixed
ItemDataTab.Accuracy = (CurrentToolData.Accuracy ~= nil and CurrentToolData.Accuracy.MinAimingAccuracy) or nil -- fixed
ItemDataTab.ReloadTime = CurrentToolData.ReloadTime -- fixed
ItemDataTab.DamageMultiplier = CurrentToolData.DamageMultiplier -- fixed
ItemDataTab.ProjectileAmount = CurrentToolData.ProjectileAmount -- fixed
ItemDataTab.FullDamageRange = CurrentToolData.FullDamageRange -- fixed
ItemDataTab.Range = CurrentToolData.Range -- fixed
self.RecordedToolData[ToolName] = ItemDataTab
return ItemDataTab
else
self.RecordedToolData[ToolName] = false
return false
end
else
return self.RecordedToolData[ToolName]
end
end
function System:returnIsGovernmentFromTeamName(TeamName)
local CurrentTeamData = self.Modules.TeamList[TeamName]
if CurrentTeamData ~= nil then
return CurrentTeamData.IsGovernment
else
return false
end
end
function System:findCharacterHeadFromTargetPart(TargetPart)
if TargetPart.Name ~= "Head" then
local CurrentParent
for Repeat = 1, 5 do
CurrentParent = TargetPart.Parent
if CurrentParent == nil then
break
elseif CurrentParent:IsA("Model") == true and CurrentParent:FindFirstChildOfClass("Humanoid") ~= nil then
return CurrentParent:FindFirstChild("Head") or TargetPart, CurrentParent.Humanoid
end
end
else
return TargetPart, TargetPart.Parent:FindFirstChildOfClass("Humanoid")
end
return TargetPart
end
System.ProcessedToolNamesForPass = {}
function System:generatePassForGunRemote(ToolName, MagValue)
local ToolData = self:registerItemType(ToolName)
local Pass1, Pass2 = nil, 1
local ToolNameLength = ToolName:len()
if self.ProcessedToolNamesForPass[ToolName] == nil then
for Num1 = 1, ToolNameLength do
Pass2 = Pass2 + (string.byte(string.sub(ToolName, Num1, Num1)) * 2)
end
self.ProcessedToolNamesForPass[ToolName] = Pass2
else
Pass2 = self.ProcessedToolNamesForPass[ToolName]
end
Pass1 = self.ServerRunTimeHolder.Value
Pass2 = tonumber(string.sub(tostring(Pass2 * Pass1 * MagValue * ToolNameLength * ToolData.Firerate * ToolData.Accuracy), 1, 16))
return Pass2, Pass1
end
function System:customGunReloadFunction(GunTool)
self.Remotes.GunServer:FireServer("Reload", GunTool)
end
System.DamageHitInfoHolderTabs = {}
System.DamageHitInfoTab = {}
System.DamageHitInfoTab.HitType = "Player"
function System:returnHitInfoHolderTab(GunProjectileAmount)
local CurrentDamageHitInfoHolderTab = self.DamageHitInfoHolderTabs[GunProjectileAmount]
if CurrentDamageHitInfoHolderTab == nil then
CurrentDamageHitInfoHolderTab = {}
for ProjectileCount = 1, GunProjectileAmount or 1 do
CurrentDamageHitInfoHolderTab["HitInfo"..tostring(ProjectileCount)] = self.DamageHitInfoTab
end
self.DamageHitInfoHolderTabs[GunProjectileAmount] = CurrentDamageHitInfoHolderTab
end
return CurrentDamageHitInfoHolderTab
end
function System:customDamagePlayerFunction(RepeatCount, HitPosition, HitObject, HitNormal, GunTool, GunMagValue, GunProjectileAmount)
local CurrentDamageHitInfoHolderTab = self:returnHitInfoHolderTab(GunProjectileAmount)
self.DamageHitInfoTab.HitPoint = HitPosition
self.DamageHitInfoTab.HitPart = HitObject
self.DamageHitInfoTab.Surface = HitPosition.Unit
for ShootCount = 0, RepeatCount - 1 do
self.Remotes.GunServer:FireServer("Fire", GunTool, CurrentDamageHitInfoHolderTab, self:generatePassForGunRemote(GunTool.Name, GunMagValue - ShootCount));
end
end
--------
function System:returnDamageFromTargetDistance(TargetDistance, TargetDamageMultiplier, FullDamageRange, MaxGunRange, DamageValue)
if TargetDistance > FullDamageRange then
if TargetDistance < MaxGunRange then
return math.floor(math.ceil(DamageValue-DamageValue*((TargetDistance-FullDamageRange)/(MaxGunRange-FullDamageRange))) * TargetDamageMultiplier)
else
return 0
end
else
return math.floor(DamageValue * TargetDamageMultiplier)
end
end
function System:requestInstantKill(GunSelf, HitPosition, HitObject, HitNormal)
--warn(GunSelf, HitPosition, HitObject, HitNormal, "End")
if HitObject ~= nil and HitObject:IsA("BasePart") == true and HitObject.Parent ~= nil then
local HitHumanoid, HitPlayer, HitPlayerDataTab; HitObject, HitHumanoid = self:findCharacterHeadFromTargetPart(HitObject)
if HitHumanoid ~= nil and HitHumanoid.Health > 0 then
HitPlayer = PlayersService:GetPlayerFromCharacter(HitObject.Parent)
HitPlayerDataTab = self.TargetsDataTab[HitPlayer]
--warn("Player About To Target: ", HitPlayer, HitPlayerDataTab.IsOnVehicleSeat, HitPlayerDataTab.WantedStatusHolder.Value, HitPlayerDataTab.InMyTeam)
if HitPlayerDataTab ~= nil and HitPlayerDataTab.InMyTeam == false then
local CurrentShootDamage = System:returnDamageFromTargetDistance((GunSelf.GunHandle.Position - HitPosition).Magnitude, HitPlayerDataTab.DamageMultiplier or 1, GunSelf.FullDamageRange, GunSelf.MaxGunRange, GunSelf.GunDamageOnHead)
--print("+Damage From Range ::", CurrentShootDamage, (GunSelf.GunHandle.Position - HitPosition).Magnitude, HitPlayerDataTab.DamageMultiplier or 1, GunSelf.FullDamageRange, GunSelf.MaxGunRange, GunSelf.GunDamageOnHead)
if CurrentShootDamage ~= 0 then
local CurrentShootLoopCount = math.ceil((HitHumanoid.Health/CurrentShootDamage)/GunSelf.GunProjectileAmount) -- ModuleTab.FullDamageRange
if CurrentShootLoopCount > GunSelf.GunMagHolder.Value then
CurrentShootLoopCount = GunSelf.GunMagHolder.Value
end
self:customDamagePlayerFunction(CurrentShootLoopCount, HitPosition, HitObject, HitNormal, GunSelf.GunTool, GunSelf.GunMagHolder.Value, GunSelf.GunProjectileAmount)
--print("+Damage Loop Count : ", CurrentShootLoopCount, GunSelf.GunTool, GunSelf.GunMagHolder.Value)
return nil
end
end
end
end
return HitPosition, HitObject, HitNormal
end
System.CosmeticBulletObject = Instance.new("Part")
System.CosmeticBulletObject.Anchored = true
System.CosmeticBulletObject.CanCollide = false
System.CosmeticBulletObject.CanTouch = false
System.CosmeticBulletObject.Transparency = 0
System.CosmeticBulletObject.Material = Enum.Material.Neon
System.CosmeticBulletObject.Color = Color3.new(0.666667, 0, 1)
System.CosmeticBulletObject.Size = Vector3.new(.1, .1, 0)
function System.playSilentAimBulletEffect(Origin, TargetHead)
local cosmeticBulletObject = System.CosmeticBulletObject:Clone()
cosmeticBulletObject.Size = Vector3.new(cosmeticBulletObject.Size.X, cosmeticBulletObject.Size.Y, (TargetHead.Position - Origin).Magnitude)
cosmeticBulletObject.CFrame = CFrame.new(Origin, TargetHead.Position) * CFrame.new(0, 0, -cosmeticBulletObject.Size.Z/2)
cosmeticBulletObject.Parent = System.TemporaryIgnore
task.wait(.1)
cosmeticBulletObject:Destroy()
end
function System.modedFireSingleProjectile(GunSelf, GunTool)
System.LastGunUsedTick = tick()
System.CurrentGunRange = GunSelf.MaxGunRange
--print("Using ModedFireSingleShot", GunSelf, GunTool)
local TargetPosition, TargetObject, TargetNormal
if System.IsSilentAimEnabled == true then
if GunSelf.AmmoType ~= "12 Gauge" or tick() - GunSelf.SilentShotgunTick >= .1 then
local SilentTargetHead = System:returnClosestVisibleTargetToMouse()
if SilentTargetHead ~= nil then
TargetPosition, TargetObject, TargetNormal = SilentTargetHead.Position, SilentTargetHead, SilentTargetHead.Position.Unit
task.spawn(System.playSilentAimBulletEffect, GunSelf.GunHandle.Position, SilentTargetHead)
else
TargetPosition, TargetObject, TargetNormal = GunSelf:FireCuteProjectile(GunTool)
end
else
return nil
end
else
TargetPosition, TargetObject, TargetNormal = GunSelf:FireCuteProjectile(GunTool)
end
if System.IsInstantKillEnabled == true then
if GunSelf.AmmoType == "12 Gauge" then
if tick() - GunSelf.SilentShotgunTick < .1 then
return nil
else
GunSelf.SilentShotgunTick = tick()
end
end
return System:requestInstantKill(GunSelf, TargetPosition, TargetObject, TargetNormal)
end
return TargetPosition, TargetObject, TargetNormal
end
function System:modifyGunHandlerModule(Module, ModuleTab)
if ModuleTab.LoumecDum == nil then
ModuleTab.LoumecDum = true
if Module.Parent ~= nil and Module.Parent.Parent ~= nil then
ModuleTab.GunTool = Module.Parent.Parent
ModuleTab.GunName = ModuleTab.GunTool.Name
ModuleTab.GunHandle = ModuleTab.GunTool.Handle
ModuleTab.GunInfoFolder = ModuleTab.GunTool.InfoFolder
ModuleTab.GunMagHolder = ModuleTab.GunInfoFolder.Mag
ModuleTab.GunDataTab = self:registerItemType(ModuleTab.GunName)
ModuleTab.AmmoType, ModuleTab.GunDamage, ModuleTab.GunProjectileAmount, ModuleTab.FullDamageRange, ModuleTab.MaxGunRange = ModuleTab.GunDataTab.AmmoType, ModuleTab.GunDataTab.Damage, ModuleTab.GunDataTab.ProjectileAmount, ModuleTab.GunDataTab.FullDamageRange, ModuleTab.GunDataTab.Range
ModuleTab.GunDamageOnHead = ModuleTab.GunDamage.Head
--warn(Module:GetFullName(), ModuleTab, ModuleTab.AmmoType, ModuleTab.GunDamage, ModuleTab.GunDamageOnHead)
ModuleTab.SilentShotgunTick = 0
ModuleTab.FireCuteProjectile = ModuleTab.FireSingleProjectile
ModuleTab.FireSingleProjectile = self.modedFireSingleProjectile
end
end
end
System.OriginalRequire = getrenv().require
function System:initiateGunHandlerModification()
getrenv().require = function(Module)
if Module.Name == "GunHandlerLocal" then
self:modifyGunHandlerModule(Module, require(Module))
end
return self.OriginalRequire(Module)
end
local ClientInteractor, GunHandlerLocal
for _, GunTool in next, self.LocalPlayer:WaitForChild("Backpack"):GetChildren() do
if GunTool:IsA("Tool") == true then
ClientInteractor = GunTool:FindFirstChild("ClientInteractor")
if ClientInteractor ~= nil then
GunHandlerLocal = ClientInteractor:FindFirstChild("GunHandlerLocal")
if GunHandlerLocal ~= nil then
task.spawn(self.modifyGunHandlerModule, self, GunHandlerLocal, require(GunHandlerLocal))
end
end
end
end
if self.LocalPlayer.Character ~= nil then
for _, GunTool in next, self.LocalPlayer.Character:GetChildren() do
if GunTool:IsA("Tool") == true then
ClientInteractor = GunTool:FindFirstChild("ClientInteractor")
if ClientInteractor ~= nil then
GunHandlerLocal = ClientInteractor:FindFirstChild("GunHandlerLocal")
if GunHandlerLocal ~= nil then
task.spawn(self.modifyGunHandlerModule, self, GunHandlerLocal, require(GunHandlerLocal))
end
end
end
end
end
end
----
function System:updateInMyTeamTargetData(TargetData)
if TargetData.WantedStatusHolder ~= nil then
local CurrentTargetWantedValue = TargetData.WantedStatusHolder.Value
if self.LocalPlayerDataTab.TeamIsGovernment == true then
if CurrentTargetWantedValue == 1 or (CurrentTargetWantedValue == 2 and TargetData.IsOnVehicleSeat == false) then
TargetData.InMyTeam = true
else
TargetData.InMyTeam = false
end
else
TargetData.InMyTeam = self.LocalPlayerDataTab.PassiveMode
end
end
end
function System.updateTargetCharacterData(Character)
local Player = PlayersService:GetPlayerFromCharacter(Character)
if Player ~= nil then
local CurrentPlayerData, CurrentHumanoidSeatPart = System.TargetsDataTab[Player], nil
System:registerNewObjectToTable(System.SilentAimIgnoreList, Character, CurrentPlayerData.Character, System.SilentAimIgnoreListStartFrom)
CurrentPlayerData.DamageMultiplier = 1
CurrentPlayerData.Character = Character
CurrentPlayerData.Head = Character:WaitForChild("Head", 10)
CurrentPlayerData.Humanoid = Character:WaitForChild("Humanoid", 10)
local function onChildAddedToCharacter(Child)
if Child:IsA("Accessory") == true and Child.Name:find("Helmet") ~= nil then
local CurrentAccessoryData = System:registerItemType(Child.Name)
if CurrentAccessoryData ~= false and CurrentAccessoryData.DamageMultiplier ~= nil then
CurrentPlayerData.DamageMultiplier = CurrentAccessoryData.DamageMultiplier
end
end
end
Character.ChildAdded:Connect(onChildAddedToCharacter)
for _, Child in next, Character:GetChildren() do
if Child:IsA("Accessory") == true then
task.spawn(onChildAddedToCharacter, Child)
end
end
CurrentPlayerData.Dead = false
end
end
function System.registerTargetPlayer(TargetPlayer)
if TargetPlayer ~= System.LocalPlayer then
local CurrentTargetTab = {}
CurrentTargetTab.Dead = true
CurrentTargetTab.InMyTeam = false
CurrentTargetTab.IsOnVehicleSeat = false
CurrentTargetTab.LastVisiblityCheck = 0
CurrentTargetTab.DamageMultiplier = 1
System.TargetsDataTab[TargetPlayer] = CurrentTargetTab
CurrentTargetTab.WantedStatusFolder = TargetPlayer:WaitForChild("WantedStatus", 10)
if CurrentTargetTab.WantedStatusFolder ~= nil then
CurrentTargetTab.WantedStatusHolder = CurrentTargetTab.WantedStatusFolder:WaitForChild("WantedStatus", 10)
if CurrentTargetTab.WantedStatusHolder ~= nil then
local function WantedValueChanged()
--warn("--++++--", Value, CurrentPlayerData.WantedHolder.Value, " Wanted Or Team Changed ", Player)
System:updateInMyTeamTargetData(CurrentTargetTab)
end
CurrentTargetTab.WantedStatusHolder.Changed:Connect(WantedValueChanged)
System:updateInMyTeamTargetData(CurrentTargetTab)
TargetPlayer.CharacterAdded:Connect(System.updateTargetCharacterData)
if TargetPlayer.Character ~= nil and TargetPlayer.Character.Parent ~= nil then
System.updateTargetCharacterData(TargetPlayer.Character)
end
end
end
else
if System.LocalPlayerDataTab == nil then
local NewLocalPlayerDataTab = {}
NewLocalPlayerDataTab.TeamHolder = {Value = "IDK"}
NewLocalPlayerDataTab.TeamValue = "IDK"
NewLocalPlayerDataTab.TeamIsGovernment = false
NewLocalPlayerDataTab.PassiveMode = true
System.LocalPlayerDataTab = NewLocalPlayerDataTab
NewLocalPlayerDataTab.WantedStatusFolder = TargetPlayer:WaitForChild("WantedStatus", 10)
NewLocalPlayerDataTab.PassiveModeHolder = NewLocalPlayerDataTab.WantedStatusFolder:WaitForChild("PassiveMode", 10)
local function updateAllTargetsData()
for _, TargetDataTab in next, System.TargetsDataTab do
System:updateInMyTeamTargetData(TargetDataTab)
end
end
local function onLocalTeamValueChanged()
if NewLocalPlayerDataTab.TeamHolder.Value ~= NewLocalPlayerDataTab.TeamValue then
NewLocalPlayerDataTab.TeamValue = NewLocalPlayerDataTab.TeamHolder.Value
NewLocalPlayerDataTab.TeamIsGovernment = System:returnIsGovernmentFromTeamName(NewLocalPlayerDataTab.TeamValue)
updateAllTargetsData()
end
end
local function onLocalCharacterAdded(Character)
System:registerNewObjectToTable(System.SilentAimIgnoreList, Character, NewLocalPlayerDataTab.Character, System.SilentAimIgnoreListStartFrom)
NewLocalPlayerDataTab.Character = Character
NewLocalPlayerDataTab.TeamHolder = Character:WaitForChild("PlayerTeam", 10)
NewLocalPlayerDataTab.TeamHolder.Changed:Connect(onLocalTeamValueChanged)
onLocalTeamValueChanged()
end
local function onPassiveModeChanged()
if NewLocalPlayerDataTab.PassiveModeHolder.Value ~= NewLocalPlayerDataTab.PassiveMode then
NewLocalPlayerDataTab.PassiveMode = NewLocalPlayerDataTab.PassiveModeHolder.Value
updateAllTargetsData()
end
end
NewLocalPlayerDataTab.PassiveModeHolder.Changed:Connect(onPassiveModeChanged)
onPassiveModeChanged()
System.LocalPlayer.CharacterAdded:Connect(onLocalCharacterAdded)
if System.LocalPlayer.Character ~= nil then
onLocalCharacterAdded(System.LocalPlayer.Character)
end
end
end
end
function System.unregisterTargetPlayer(Player)
local PlayerDataTab = System.TargetsDataTab[Player]
--print("Player Left: ", Player, "Data: ", PlayerDataTab)
if PlayerDataTab ~= nil and PlayerDataTab.Character ~= nil then
--print("Player Left: ", Player, "Removing Character")
System:registerNewObjectToTable(System.SilentAimIgnoreList, nil, PlayerDataTab.Character, System.SilentAimIgnoreListStartFrom)
end
System.TargetsDataTab[Player] = nil
end
System.raycastParams = RaycastParams.new()
System.raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
System.raycastParams.FilterDescendantsInstances = {}
System.raycastParams.IgnoreWater = true
function System:isTargetHeadVisible(TargetCharacterHeadPosition, LocalPlayerRootPosition, IgnoreList)
local CurrentCameraPosition = workspace.CurrentCamera.CFrame.Position
--table.insert(IgnoreList, TargetCharacter)
self.raycastParams.FilterDescendantsInstances = IgnoreList
if workspace:Raycast(CurrentCameraPosition, TargetCharacterHeadPosition - CurrentCameraPosition, self.raycastParams) == nil and workspace:Raycast(CurrentCameraPosition, LocalPlayerRootPosition - CurrentCameraPosition, self.raycastParams) == nil then
return true
end
return false
end
function System:returnClosestVisibleTargetToMouse()
if self.LocalPlayer.Character ~= nil and self.LocalPlayer.Character.PrimaryPart ~= nil then
local LocalPlayerCharacter = self.LocalPlayer.Character
local LocalPlayerRootPart = LocalPlayerCharacter.PrimaryPart
local CurrentCamera = workspace.CurrentCamera
local MousePositionVector2 = Vector2.new(self.Mouse.X, self.Mouse.Y)
local CurrentIgnoreList = self.SilentAimIgnoreList
local ClosestTargetData = {}
local currentTargetScreenPositionV2, currentTargetScreenPosition, currentTargetScreenZIndex, currentTargetDistanceFromMouse, currentTargetOnScreen, currentTargetVisible
for TargetPlayer, TargetPlayerTab in next, self.TargetsDataTab do
if TargetPlayerTab.InMyTeam == false and TargetPlayerTab.Dead == false then
if TargetPlayerTab.Humanoid.Health > 0 then
if self.LocalPlayer:DistanceFromCharacter(TargetPlayerTab.Head.Position) < self.CurrentGunRange then
--print("WorldToViewportPoint --- --- ---", CurrentCamera:WorldToViewportPoint(TargetPlayerTab.Head.Position))
currentTargetScreenPosition, currentTargetOnScreen = CurrentCamera:WorldToScreenPoint(TargetPlayerTab.Head.Position)
if currentTargetOnScreen == true then
currentTargetScreenPositionV2 = Vector2.new(currentTargetScreenPosition.X, currentTargetScreenPosition.Y)
--currentTargetScreenZIndex = currentTargetScreenPosition.Z
currentTargetDistanceFromMouse = (MousePositionVector2 - currentTargetScreenPositionV2).Magnitude
--print(TargetPlayer, "-------- 1", currentTargetDistanceFromMouse)
--if CurrentIgnoreList == nil then CurrentIgnoreList = self:returnNewSilentIgnoreList(LocalPlayerCharacter) end
if currentTargetDistanceFromMouse <= self.SilentAimCircleRange and (tick() - TargetPlayerTab.LastVisiblityCheck <= .1 or self:isTargetHeadVisible(TargetPlayerTab.Head.Position, LocalPlayerRootPart.Position, CurrentIgnoreList) == true) then
--print(TargetPlayer, "----------------- 2", currentTargetDistanceFromMouse)
if tick() - TargetPlayerTab.LastVisiblityCheck > .1 then
TargetPlayerTab.LastVisiblityCheck = tick()
end
if ClosestTargetData.Head == nil then
ClosestTargetData.Head = TargetPlayerTab.Head
--ClosestTargetData.ScreenZIndex = currentTargetScreenZIndex
ClosestTargetData.DistanceFromMouse = currentTargetDistanceFromMouse
--warn("-- Updated List ", TargetPlayerTab.Head, currentTargetDistanceFromMouse)
elseif ClosestTargetData.DistanceFromMouse > currentTargetDistanceFromMouse then --and ClosestTargetData.ScreenZIndex > currentTargetScreenZIndex then
ClosestTargetData.Head = TargetPlayerTab.Head
--ClosestTargetData.ScreenZIndex = currentTargetScreenZIndex
ClosestTargetData.DistanceFromMouse = currentTargetDistanceFromMouse
--warn("-- Updated List 2 ", TargetPlayerTab.Head, currentTargetDistanceFromMouse)
end
end
end
end
else
TargetPlayerTab.Dead = true
end
end
end
if ClosestTargetData.Head ~= nil then
return ClosestTargetData.Head
end
end
end
--------
function System:updateSeatedPlayerFromSeatWeld(VehicleDataTab, VehicleSeatWeld)
local LastSeatedPlayerDataTab = VehicleDataTab.SeatedPlayerDataTab
if LastSeatedPlayerDataTab ~= nil then
VehicleDataTab.SeatedPlayerDataTab = nil
LastSeatedPlayerDataTab.IsOnVehicleSeat = false
if self.LocalPlayerDataTab.TeamIsGovernment == true then
self:updateInMyTeamTargetData(LastSeatedPlayerDataTab)
end
--warn("-- Player Un-Seated: ", LastSeatedPlayerDataTab.Character)
end
if VehicleSeatWeld ~= nil and VehicleSeatWeld.Part1 ~= nil and VehicleSeatWeld.Part1.Parent ~= nil then
local SeatedPlayerDataTab = self.TargetsDataTab[PlayersService:GetPlayerFromCharacter(VehicleSeatWeld.Part1.Parent)]
if SeatedPlayerDataTab ~= nil then
VehicleDataTab.SeatedPlayerDataTab = SeatedPlayerDataTab
SeatedPlayerDataTab.IsOnVehicleSeat = true
--warn("++ Player Seated: ", SeatedPlayerDataTab.Character)
if self.LocalPlayerDataTab.TeamIsGovernment == true then
self:updateInMyTeamTargetData(SeatedPlayerDataTab)
end
end
end
end
function System.registerVehicleModel(VehicleModel)
local VehicleDataTab = {}
System.VehiclesDataTab[VehicleModel] = VehicleDataTab
VehicleDataTab.SeatedPlayerDataTab = nil
VehicleDataTab.VehicleChassis = VehicleModel:WaitForChild("Chassis", 5)
if VehicleDataTab.VehicleChassis ~= nil and System.VehiclesDataTab[VehicleModel] ~= nil then
VehicleDataTab.VehicleSeat = VehicleDataTab.VehicleChassis:WaitForChild("VehicleSeat", 5)
if VehicleDataTab.VehicleSeat ~= nil and System.VehiclesDataTab[VehicleModel] ~= nil then
VehicleDataTab.VehicleSeat.ChildAdded:Connect(function(Child)
if Child.Name == "SeatWeld" then
System:updateSeatedPlayerFromSeatWeld(VehicleDataTab, Child)
end
end)
VehicleDataTab.VehicleSeat.ChildRemoved:Connect(function(Child)
if Child.Name == "SeatWeld" then
System:updateSeatedPlayerFromSeatWeld(VehicleDataTab, nil)
end
end)
if VehicleDataTab.VehicleSeat:FindFirstChild("SeatWeld") ~= nil then
System:updateSeatedPlayerFromSeatWeld(VehicleDataTab, VehicleDataTab.VehicleSeat.SeatWeld)
end
end
end
end
function System.unregisterVehicleModel(VehicleModel)
System.VehiclesDataTab[VehicleModel] = nil
end
function System:initiateVehicleRegistrationSystem()
self.PlayerVehiclesFolder.ChildAdded:Connect(self.registerVehicleModel)
self.PlayerVehiclesFolder.ChildRemoved:Connect(self.unregisterVehicleModel)
for _, VehicleModel in next, self.PlayerVehiclesFolder:GetChildren() do
task.spawn(self.registerVehicleModel, VehicleModel)
end
end
--------
System.CurrentGuiInest = GuiService:GetGuiInset()
function System.updateSilentAimCirclePosition()
System.SilentAimCircle.Position = Vector2.new(System.Mouse.X + System.CurrentGuiInest.X, System.Mouse.Y + System.CurrentGuiInest.Y)
end
function System:updateSilentAimCircleRadius(CurrentSrollDirection)
local CurrentRadius, CurrentSizeControlSpeed = self.SilentAimCircle.Radius, self.SACircleSizeControlSpeed
if CurrentSrollDirection == 1 then
self.SilentAimCircle.Radius = self.SilentAimCircle.Radius + CurrentSizeControlSpeed
else
if CurrentRadius - CurrentSizeControlSpeed <= 0 then
self.SilentAimCircle.Radius = CurrentSizeControlSpeed
else
self.SilentAimCircle.Radius = self.SilentAimCircle.Radius - CurrentSizeControlSpeed
end
end
self.SilentAimCircleRange = self.SilentAimCircle.Radius
end
System.SilentAimCircleTransparencySave = 1
function System:updateSilentAimCircleTransparency(CurrentSrollDirection)
local CurrentTransparency, CurrentTransparencyControlSpeed = self.SilentAimCircle.Transparency, self.SACircleTransparencyControlSpeed
if CurrentSrollDirection == 1 then
if CurrentTransparency + CurrentTransparencyControlSpeed >= 1 then
self.SilentAimCircle.Transparency = 1
else
self.SilentAimCircle.Transparency = self.SilentAimCircle.Transparency + CurrentTransparencyControlSpeed
end
else
if CurrentTransparency + CurrentTransparencyControlSpeed <= 0 then
self.SilentAimCircle.Transparency = 0
else
self.SilentAimCircle.Transparency = self.SilentAimCircle.Transparency - CurrentTransparencyControlSpeed
end
end
self.SilentAimCircleTransparencySave = self.SilentAimCircle.Transparency
end
function System:updateSilentAimCircleFilled(CurrentSrollDirection)
if CurrentSrollDirection == 1 then
self.SilentAimCircle.Filled = true
self.SilentAimCircle.Transparency = self.SilentAimCircleTransparencySave
else
self.SilentAimCircle.Filled = false
self.SilentAimCircle.Transparency = 1
end
end
function System.onLocalPlayerScroll(actionName, inputState, inputObj)
local CurrentSrollDirection, ContextActionResult = inputObj.Position.Z, Enum.ContextActionResult.Pass
if UserInputService:IsKeyDown(Enum.KeyCode.J) == true then
System:updateSilentAimCircleRadius(CurrentSrollDirection)
ContextActionResult = Enum.ContextActionResult.Sink
end
if UserInputService:IsKeyDown(Enum.KeyCode.K) == true then
System:updateSilentAimCircleTransparency(CurrentSrollDirection)
ContextActionResult = Enum.ContextActionResult.Sink
end
if UserInputService:IsKeyDown(Enum.KeyCode.L) == true then
System:updateSilentAimCircleFilled(CurrentSrollDirection)
ContextActionResult = Enum.ContextActionResult.Sink
end
return ContextActionResult
end
--------
function System:AntiSmallBrainCamera()
local CameraModifierModule, ShoulderCameraModule = self.Modules.CameraModifier, self.Modules.ShoulderCamera
local NiceFunctionBTW, CurrentTool = function()end, nil
if self.LocalPlayer.Character ~= nil then CurrentTool = self.LocalPlayer.Character:FindFirstChildOfClass("Tool") end
CameraModifierModule.EnableADS = NiceFunctionBTW
CameraModifierModule.EnableOSC = NiceFunctionBTW
if CurrentTool ~= nil then
if CameraModifierModule:GetADSEnabled() == true then
CameraModifierModule.DisableADS(nil, CurrentTool)
end
if CameraModifierModule:GetOSCEnabled() == true then
CameraModifierModule.DisableOSC(nil, CurrentTool)
end
if ShoulderCameraModule.enabled == true then
ShoulderCameraModule:setEnabled(false)
end
end
CameraModifierModule.DisableADS = NiceFunctionBTW
CameraModifierModule.DisableOSC = NiceFunctionBTW
ShoulderCameraModule.setEnabled = NiceFunctionBTW
CameraModifierModule.InitiateHolsterCountdown = NiceFunctionBTW
CameraModifierModule:ToggleWeaponHolster(true)
CameraModifierModule.ToggleWeaponHolster = NiceFunctionBTW
CameraModifierModule.GunHolstered = false
end
--------
System.RegisteredCharacterGuns = {}
function System.onAutoReloadChildAdded(Child)
if Child:IsA("Tool") == true then
local CurrentGunDataTab = {}
System.RegisteredCharacterGuns[Child] = CurrentGunDataTab
local CurrentToolDataTab = System:registerItemType(Child.Name)
if CurrentToolDataTab ~= false and CurrentToolDataTab.ReloadTime ~= nil then
CurrentGunDataTab.ToolDataTab = CurrentToolDataTab
CurrentGunDataTab.ReloadTick = 0
CurrentGunDataTab.ReloadTime = CurrentToolDataTab.ReloadTime
CurrentGunDataTab.GunInfoFolder = Child:WaitForChild("InfoFolder", 4)
CurrentGunDataTab.GunHandle = Child:WaitForChild("Handle", 4)
if CurrentGunDataTab.GunInfoFolder ~= nil and CurrentGunDataTab.GunHandle ~= nil then
CurrentGunDataTab.MagHolder = CurrentGunDataTab.GunInfoFolder:WaitForChild("Mag", 4)
CurrentGunDataTab.FakeAmmoHolder = CurrentGunDataTab.GunHandle:WaitForChild("ClientAmmo", 4)
if CurrentGunDataTab.MagHolder ~= nil and CurrentGunDataTab.FakeAmmoHolder ~= nil then
CurrentGunDataTab.OwnedAmmoHolder = System.LocalPlayerAmmoFolder[CurrentToolDataTab.AmmoType]
CurrentGunDataTab.Registered = true
end
end
else
System.RegisteredCharacterGuns[Child] = nil
end
end
end
function System.onAutoReloadChildRemoved(Child)
System.RegisteredCharacterGuns[Child] = nil
end
function System.onAutoReloadCharacterAdded(Character)
table.clear(System.RegisteredCharacterGuns)
Character.ChildAdded:Connect(System.onAutoReloadChildAdded)
Character.ChildRemoved:Connect(System.onAutoReloadChildRemoved)
for _, Object in next, Character:GetChildren() do
if Object:IsA("Tool") == true then
System.onAutoReloadChildAdded(Object)
end
end
warn("----------------------------------------------------------------------------------")
print("OP Gun Script:: Join Discord Server for support related to the script and to report bugs oh ofc i accept suggestions too")
print("Discord Join Link: https://discord.gg/GdU7xkQpsp")
warn("----------------------------------------------------------------------------------")
end
function System:checkIfGunMagHasEnoughBullets(GunTab)
if GunTab.OwnedAmmoHolder.Value > 0 then
if GunTab.ToolDataTab.AmmoType == "12 Gauge" then
if GunTab.MagHolder.Value < GunTab.ToolDataTab.MaxAmmo and tick() - self.LastGunUsedTick >= self.LocalPlayerPing then
return false
else
return true
end
else
if GunTab.MagHolder.Value <= 1 or (tick() - self.LastGunUsedTick >= 4.5 + self.LocalPlayerPing and GunTab.MagHolder.Value < GunTab.ToolDataTab.MaxAmmo/2) then
return false
else
return true
end
end
end
end
function System:checkIfGunNeedsReload(GunTool, GunTab)
if GunTab.Registered == true then
GunTab.FakeAmmoHolder.Value = GunTab.MagHolder.Value
if self:checkIfGunMagHasEnoughBullets(GunTab) == false and tick() - GunTab.ReloadTick > GunTab.ReloadTime + self.LocalPlayerPing then
GunTab.ReloadTick = tick()
self:customGunReloadFunction(GunTool)
end
end
end
function System:requestCheckRegisteredGunsForReload()
for GunTool, GunTab in next, System.RegisteredCharacterGuns do
self:checkIfGunNeedsReload(GunTool, GunTab)
end
end
--------
function System:initiateSystem()
PlayersService.PlayerAdded:Connect(self.registerTargetPlayer)
PlayersService.PlayerRemoving:Connect(self.unregisterTargetPlayer)
self.registerTargetPlayer(self.LocalPlayer)
for _, Player in next, PlayersService:GetPlayers() do
if Player ~= self.LocalPlayer then
task.spawn(self.registerTargetPlayer, Player)
end
end
self:initiateVehicleRegistrationSystem()
if Drawing ~= nil then
self.SilentAimCircle = Drawing.new("Circle")
self.SilentAimCircle.Radius = self.SilentAimCircleRange
self.SilentAimCircle.Visible = true
self.SilentAimCircle.Thickness = 2
self.SilentAimCircle.Filled = false
self.SilentAimCircle.Color = Color3.fromRGB(255, 0, 127)
self.SilentAimCircle.Transparency = 1
self.SilentAimCircleTransparencySave = 1
self.Mouse.Move:Connect(self.updateSilentAimCirclePosition)
ContextActionService:BindAction("SilentAimScrollEvent", self.onLocalPlayerScroll, false, Enum.UserInputType.MouseWheel)
else
self.SilentAimCircleRange = 9999
end
self:AntiSmallBrainCamera()
self:initiateGunHandlerModification()
self.LocalPlayer.CharacterAdded:Connect(self.onAutoReloadCharacterAdded)
if self.LocalPlayer.Character ~= nil then
self.onAutoReloadCharacterAdded(self.LocalPlayer.Character)
end
while task.wait(0) do
--print("Players Count: ", #PlayersService:GetPlayers(), "SilentAimIgnoreList Count: ", #self.SilentAimIgnoreList - 2, #self.CustomIgnoreList)
--[[local VehicleCount = 0
for _, _ in next, self.VehiclesDataTab do
VehicleCount = VehicleCount + 1
end
print("Registered Vehicle Count: ", VehicleCount, "GetChildren Vehicle Count: ", #self.PlayerVehiclesFolder:GetChildren())]]
self:updateLocalPlayerPing()
self:requestCheckRegisteredGunsForReload()
--warn("Last LocalPlayer Ping ====== ", self.LocalPlayerPing)
end
end
---------------- [[ ;) ]]
if _G.OPOPGunScript == nil then
_G.OPOPGunScript = true
System:initiateSystem()
end
ENJOY!
Warning: DO NOT DOWNLOAD anything from this page, you’re only here to copy the script!
[ad_2]