-- ModuleScript WeaponActionController (via bytefall decompiler) -- Decompiled using ByteFall -- discord.gg/pHTnqmmWzk return { init = function(p1) local services = p1.Services local refs = p1.Refs local modules = p1.Modules local v5 = p1.State local api = p1.API local refsPlayer = refs.Player local PlayerGui = refs.PlayerGui local Character = refs.Character local Humanoid = refs.Humanoid local Camera = refs.Camera local refsScript = refs.Script local refsServerFolder = refs.ServerFolder local refsGameEvents = refs.GameEvents local clientData = v5.ClientData local weaponDataNew = v5.WeaponDataNew local weaponAction = v5.WeaponAction local runtime = v5.Runtime local presentation = v5.Presentation local ping = v5.Ping local keybinds = v5.Keybinds local playerSettings = v5.PlayerSettings local helpers = v5.Helpers v5 = function(...) if api.Presentation and api.Presentation.SelectHUDEquipment then return api.Presentation.SelectHUDEquipment(...) end end local function v24(...) if api.Presentation and api.Presentation.PushSpectatePresentationState then return api.Presentation.PushSpectatePresentationState(...) end end local function v25(p2, p3) if weaponDataNew and weaponDataNew.SendPresentationEvent then return weaponDataNew:SendPresentationEvent(p2, p3) end end local function resolveEquippedCharacterWeaponModel(p4, p5) if not p4 then return nil end local v63 = typeof(p5) == "string" and p5 ~= "" and modules.WeaponSlotResolver.ResolveVisibleModel(p4, p5) if v63 then return v63 end v63 = modules.WeaponSlotResolver.GetStateFolder(p4) local v64 = v63 and v63:GetAttribute("EquippedToolName") if typeof(v64) == "string" and v64 ~= "" then return modules.WeaponSlotResolver.ResolveVisibleModel(p4, v64) end return nil end function helpers.getCurrentStateFolder() local Character2 = refsPlayer.Character return Character2 and modules.WeaponSlotResolver.GetStateFolder(Character2) or nil end helpers.resolveEquippedCharacterWeaponModel = resolveEquippedCharacterWeaponModel local function SetThrowablePreviewBridgeState(p8, p9) local v68 = if p8 == true then p9 or "" else "" local throwablePreviewActive = refsScript:GetAttribute("ThrowablePreviewActive") if p8 ~= throwablePreviewActive then refsScript:SetAttribute("ThrowablePreviewActive", p8) end local throwablePreviewToolName = refsScript:GetAttribute("ThrowablePreviewToolName") if v68 ~= throwablePreviewToolName then refsScript:SetAttribute("ThrowablePreviewToolName", v68) end local updateStateFolder = modules.WeaponSlotResolver.UpdateStateFolder local Character3 = refsPlayer.Character local v73 = Character3 and modules.WeaponSlotResolver.GetStateFolder(Character3) or nil updateStateFolder(v73, { ThrowablePreviewActive = p8, ThrowablePreviewToolName = v68 }) v24({ ThrowablePreviewActive = p8, ThrowablePreviewToolName = v68 }) end local function SyncThrowablePreviewState() local weaponDataNewCurrentTool = weaponDataNew.CurrentTool local u75: boolean = false if weaponAction.ThrowableRecoveryActive ~= true then u75 = false if weaponDataNewCurrentTool ~= nil then u75 = false if weaponDataNewCurrentTool.Tool ~= nil then u75 = false if weaponDataNewCurrentTool.Tool:GetAttribute("Class") == "Throwable" then u75 = if not weaponDataNewCurrentTool or not weaponDataNewCurrentTool.Tool then false else if weaponDataNewCurrentTool.Tool:GetAttribute("Class") == "Throwable" then (tonumber(weaponDataNewCurrentTool.Tool:GetAttribute("Amount")) or 0) > 0 else false if u75 then u75 = true if weaponDataNew.CurrentToolIndex ~= 4 then u75 = weaponAction.QuickThrowHoldActive == true end end end end end end if u75 == true then SetThrowablePreviewBridgeState(true, weaponDataNewCurrentTool.Tool.Name) return end SetThrowablePreviewBridgeState(false) end local function BuildThrowableIgnoreList(p10) local t1: {[any]: any} = { Character, Camera } if weaponDataNew.CameraModel then table.insert(t1, weaponDataNew.CameraModel) end if p10 then table.insert(t1, p10) end return t1 end local function ClearThrowableThrowSnapshot() weaponDataNew.ThrowableSnapshot = nil end local function CaptureThrowableThrowSnapshot() local weaponDataNewCurrentTool = weaponDataNew.CurrentTool if weaponDataNewCurrentTool and weaponDataNewCurrentTool.Tool and weaponDataNewCurrentTool.Tool:GetAttribute("Class") == "Throwable" then local buildClientThrowData = modules.Throwable.BuildClientThrowData local playerGuiCrosshair = PlayerGui.Crosshair local weaponDataNewCurrentToolModel = weaponDataNewCurrentTool.Model local model = weaponDataNewCurrentTool.Model local t2: {[any]: any} = { Character, Camera } if weaponDataNew.CameraModel then table.insert(t2, weaponDataNew.CameraModel) end if model then table.insert(t2, model) end local v84 = buildClientThrowData(Character, Camera, playerGuiCrosshair, weaponDataNewCurrentToolModel, t2) if not v84 then weaponDataNew.ThrowableSnapshot = nil return nil end local throwableSnapshot: {[any]: any} = { ToolName = weaponDataNewCurrentTool.Tool.Name, CameraPosition = v84.CameraPosition, ViewDirection = v84.ViewDirection or v84.Direction, StartPosition = v84.Origin, ThrowData = v84 } weaponDataNew.ThrowableSnapshot = throwableSnapshot return throwableSnapshot end weaponDataNew.ThrowableSnapshot = nil return nil end local function SetThrowableRecoveryState(throwableRecoveryActive) weaponAction.ThrowableRecoveryActive = throwableRecoveryActive SyncThrowablePreviewState() end local u33 = nil local u34 = nil local u35 = nil local u36 = nil local u37 = nil local function IsWeaponPresentationReady() return weaponDataNew ~= nil and weaponDataNew.IsWeaponPresentationReady ~= nil and weaponDataNew:IsWeaponPresentationReady() == true end local function IsWeaponFullyReady() return weaponDataNew ~= nil and weaponDataNew.IsWeaponReady ~= nil and weaponDataNew:IsWeaponReady() == true end local function GetCurrentBufferedADSToolSerial() local weaponDataNewCurrentTool = weaponDataNew.CurrentTool if not weaponDataNewCurrentTool or not weaponDataNewCurrentTool.Tool then return "" end return modules.WeaponSlotResolver.GetOrAssignToolSerial(weaponDataNewCurrentTool.Tool) end local function SyncBufferedADSIntentAttributes() refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") end local function SetBufferedADSIntent(bufferedADSIntent) weaponAction.BufferedADSIntent = bufferedADSIntent refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") end SetBufferedADSIntent = function() weaponAction.BufferedADSIntent = false weaponAction.BufferedADSSwapGeneration = 0 weaponAction.BufferedADSToolSerial = "" refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") end local function ShouldMaintainBufferedADSIntent() if weaponAction.BufferedADSIntent == true then if playerSettings:GetAttribute("ADSToggle") == true then return true end return clientData.ADSInputHeld == true end return false end local function BufferADSForCurrentSwap() weaponAction.BufferedADSIntent = true weaponAction.BufferedADSSwapGeneration = weaponAction.SwapGeneration or 0 local weaponDataNewCurrentTool = weaponDataNew.CurrentTool weaponAction.BufferedADSToolSerial = if not weaponDataNewCurrentTool or not weaponDataNewCurrentTool.Tool then "" else modules.WeaponSlotResolver.GetOrAssignToolSerial(weaponDataNewCurrentTool.Tool) refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") end local function IsADSOnSwapCooldown() local v90 = weaponAction.ADSUnlockAt or 0 local v91 = os.clock() return v90 > v91 end local u46 = nil local function ScheduleBufferedADSRetry(p13) local v93 = p13 if not v93 then local v94 = weaponAction.ADSUnlockAt or 0 local v95 = os.clock() v93 = math.max(v94 - v95, 0) end if v93 <= 0 then task.defer(u46) return end task.delay(v93, function() if weaponAction.BufferedADSIntent == true then u46() end end) end local function ApplyHoldPresentationState(p14) local u97 local weaponDataNewCurrentTool = weaponDataNew and weaponDataNew.CurrentTool if weaponDataNewCurrentTool and weaponDataNewCurrentTool.Aiming == true then u37(weaponDataNewCurrentTool, p14) return end modules.CameraSens:AdjustSensitivity(keybinds.CameraSensitivity) if api.Presentation and api.Presentation.TweenFOV then local tweenFOV = api.Presentation.TweenFOV local fieldOfView = playerSettings:GetAttribute("FieldOfView") tweenFOV(fieldOfView, p14 or 0.12) end if clientData.GameHUD and clientData.GameHUD.ScopeUI then clientData.GameHUD.ScopeUI.Visible = false end local t4: {[any]: any} = { ScopeVisible = false, Aiming = false, TargetFOV = playerSettings:GetAttribute("FieldOfView"), CrosshairVisible = u97 } if weaponDataNew.Crosshair then local u97 = true if weaponDataNew.Crosshair.Enabled ~= true then u97 = false end else u97 = false end v24(t4) end u37 = function(p15, p16) if not p15 or not p15.Tool or not p15.Settings then return end local v104 = p16 or 0.12 if p15.Tool:GetAttribute("ADSType") == "Scope" then modules.CameraSens:AdjustSensitivity(keybinds.ADSSensitivity * 0.5) if api.Presentation and api.Presentation.TweenFOV then api.Presentation.TweenFOV(25, v104) end if clientData.GameHUD and clientData.GameHUD.ScopeUI then clientData.GameHUD.ScopeUI.Visible = true end v24({ TargetFOV = 25, ScopeVisible = true, CrosshairVisible = false, Aiming = true }) return end local n1 = playerSettings:GetAttribute("FieldOfView") - 5 * p15.Settings.ADSZoom modules.CameraSens:AdjustSensitivity(keybinds.ADSSensitivity) if api.Presentation and api.Presentation.TweenFOV then api.Presentation.TweenFOV(n1, v104) end if clientData.GameHUD and clientData.GameHUD.ScopeUI then clientData.GameHUD.ScopeUI.Visible = false end v24({ ScopeVisible = false, CrosshairVisible = false, Aiming = true, TargetFOV = n1 }) end u46 = function() if weaponAction.BufferedADSIntent == true then if (if weaponAction.BufferedADSIntent == true then if playerSettings:GetAttribute("ADSToggle") == true then true else clientData.ADSInputHeld == true else false) == true then if (weaponDataNew ~= nil and weaponDataNew.IsWeaponPresentationReady ~= nil and weaponDataNew:IsWeaponPresentationReady() == true) ~= true then return end if (weaponAction.BufferedADSSwapGeneration or 0) ~= (weaponAction.SwapGeneration or 0) then weaponAction.BufferedADSIntent = false weaponAction.BufferedADSSwapGeneration = 0 weaponAction.BufferedADSToolSerial = "" refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") return end local weaponDataNewCurrentTool = weaponDataNew.CurrentTool local v107 = weaponAction.BufferedADSToolSerial or "" local v108 = weaponDataNewCurrentTool and weaponDataNewCurrentTool.Tool and modules.WeaponSlotResolver.GetOrAssignToolSerial(weaponDataNewCurrentTool.Tool) or "" if v107 == "" or v107 ~= v108 then weaponAction.BufferedADSIntent = false weaponAction.BufferedADSSwapGeneration = 0 weaponAction.BufferedADSToolSerial = "" refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") return end if not weaponDataNewCurrentTool or not weaponDataNewCurrentTool.Tool then weaponAction.BufferedADSIntent = false weaponAction.BufferedADSSwapGeneration = 0 weaponAction.BufferedADSToolSerial = "" refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") return end if weaponDataNewCurrentTool.Tool:GetAttribute("Class") ~= "Primary" and weaponDataNewCurrentTool.Tool:GetAttribute("Class") ~= "Secondary" then weaponAction.BufferedADSIntent = false weaponAction.BufferedADSSwapGeneration = 0 weaponAction.BufferedADSToolSerial = "" refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") return end if weaponDataNewCurrentTool.Aiming == true then if (weaponDataNew ~= nil and weaponDataNew.IsWeaponReady ~= nil and weaponDataNew:IsWeaponReady() == true) == true then weaponAction.BufferedADSIntent = false weaponAction.BufferedADSSwapGeneration = 0 weaponAction.BufferedADSToolSerial = "" refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") end return end local v109 = weaponAction.ADSUnlockAt or 0 local v110 = os.clock() v108 = v109 - v110 if v108 > 0 then ScheduleBufferedADSRetry(v108) return end if u33 then u33() end local currentTool = weaponDataNew.CurrentTool if currentTool and currentTool.Aiming == true then if (weaponDataNew ~= nil and weaponDataNew.IsWeaponReady ~= nil and weaponDataNew:IsWeaponReady() == true) == true then weaponAction.BufferedADSIntent = false weaponAction.BufferedADSSwapGeneration = 0 weaponAction.BufferedADSToolSerial = "" refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") end end return end weaponAction.BufferedADSIntent = false weaponAction.BufferedADSSwapGeneration = 0 weaponAction.BufferedADSToolSerial = "" refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") return end end refsScript:GetAttributeChangedSignal("WeaponPresentationReady"):Connect(function() if refsScript:GetAttribute("WeaponPresentationReady") == true then task.defer(u46) end end) refsScript:GetAttributeChangedSignal("WeaponFullyReady"):Connect(function() if refsScript:GetAttribute("WeaponFullyReady") == true then task.defer(u46) end end) local function ReturnToPreviousWeaponIfNeeded(p17) local weaponDataNewCurrentTool = weaponDataNew.CurrentTool if weaponDataNewCurrentTool and weaponDataNewCurrentTool.Tool and weaponDataNewCurrentTool.Tool:GetAttribute("Class") == "Throwable" then local v114 = p17 or weaponAction.LastNonThrowableWeaponIndex if (tonumber(weaponDataNewCurrentTool.Tool:GetAttribute("Amount")) or 0) <= 0 and type(v114) == "number" and v114 >= 1 and v114 ~= 4 then u35(v114) end return end end local function FindBarricadeModelFromHitInstance(p18) local v116 = p18 while v116 do if v116:IsA("Model") and v116.Name == "Barricade" then return v116 end local barricade = v116:FindFirstChild("Barricade") if barricade and barricade:IsA("Model") then return barricade end v116 = v116.Parent end return nil end local function GetClosestPointOnPart(p19, p20) local v120 = p19.CFrame:PointToObjectSpace(p20) local n1 = p19.Size * 0.5 local cFrame = p19.CFrame local v123 = math.clamp(v120.X, -n1.X, n1.X) local v124 = math.clamp(v120.Y, -n1.Y, n1.Y) local v125 = math.clamp(v120.Z, -n1.Z, n1.Z) local vector3 = Vector3.new(v123, v124, v125) return cFrame:PointToWorldSpace(vector3) end local function IsActiveBarricadeBlocker(p21) if not p21 or not p21:IsA("BasePart") then elseif p21.Name == "BarricadePort" or p21:GetAttribute("BlockSetup") == true then return p21.CanCollide == true end return false end local function ResolveKnifeBarricadeHit(p22) if p22 and p22.Instance and p22.Instance.Name ~= "BarricadePlank" then local v129 = p22.Instance if (if v129 and v129:IsA("BasePart") then if v129.Name == "BarricadePort" or v129:GetAttribute("BlockSetup") == true then v129.CanCollide == true else false else false) == true then return p22 end local v130 = FindBarricadeModelFromHitInstance(p22.Instance) if not v130 then return p22 end v129 = nil local v131 = nil local n1 = math.huge for _, v in ipairs(v130:GetChildren()) do if v:IsA("BasePart") and v.Name == "BarricadePlank" and (v:GetAttribute("Health") or 0) > 0 then local v135 = GetClosestPointOnPart(v, p22.Position) local magnitude = (v135 - p22.Position).Magnitude if n1 > magnitude then n1 = magnitude v129 = v v131 = v135 end end end if v129 and not (n1 > math.max(1.5, modules.Config.KnifeDistance * 0.5)) then return { Instance = v129, Position = v131 or p22.Position, Normal = p22.Normal, Material = v129.Material, Distance = p22.Distance } end return p22 end return p22 end local function CastBulletRay(p23) clientData.Ray_Ignore = { Character, Camera } local vector3 = Vector3.new() if weaponDataNew.CurrentTool and weaponDataNew.CurrentTool.Tool:GetAttribute("Class") ~= "Knife" then local randomNumber = math.random(-weaponDataNew.CurrentTool.Settings.MinSpread * 10, weaponDataNew.CurrentTool.Settings.MinSpread * 10) local v140 = math.rad(randomNumber / 10) local randomNumber2 = math.random(-weaponDataNew.CurrentTool.Settings.MinSpread * 10, weaponDataNew.CurrentTool.Settings.MinSpread * 10) local v142 = math.rad(randomNumber2 / 10) local randomNumber3 = math.random(-weaponDataNew.CurrentTool.Settings.MinSpread * 10, weaponDataNew.CurrentTool.Settings.MinSpread * 10) local v144 = math.rad(randomNumber3 / 10) vector3 = Vector3.new(v140, v142, v144) if weaponDataNew.CurrentTool.Aiming == false then local randomNumber4 = math.random(-weaponDataNew.CurrentTool.Settings.MaxSpread * 10, weaponDataNew.CurrentTool.Settings.MaxSpread * 10) local v146 = math.rad(randomNumber4 / 10) local randomNumber5 = math.random(-weaponDataNew.CurrentTool.Settings.MaxSpread * 10, weaponDataNew.CurrentTool.Settings.MaxSpread * 10) local v148 = math.rad(randomNumber5 / 10) local randomNumber6 = math.random(-weaponDataNew.CurrentTool.Settings.MaxSpread * 10, weaponDataNew.CurrentTool.Settings.MaxSpread * 10) local v150 = math.rad(randomNumber6 / 10) vector3 = Vector3.new(v146, v148, v150) * (1 - weaponDataNew.CurrentTool.Settings.HipFireReduction / 100 or 1) end end local CFramePosition = Camera.CFrame.Position local n1 = Camera.CFrame.LookVector + vector3 local v153 = modules.Components.Player.BulletRayCast if weaponDataNew.CurrentTool and weaponDataNew.CurrentTool.Tool:GetAttribute("Class") == "Knife" then v153 = modules.Components.Player.KnifeRayCast end local v154, t5 = v153(CFramePosition, n1, p23 or 500, { Character, Camera }) if weaponDataNew.CurrentTool and weaponDataNew.CurrentTool.Tool:GetAttribute("Class") == "Knife" then v154 = ResolveKnifeBarricadeHit(v154) end local t6 = nil if v154 then t6 = { StartPosition = CFramePosition, Direction = n1, EndPosition = v154.Position, Instance = v154.Instance, Normal = v154.Normal, Material = v154.Material } end if typeof(t5) ~= "table" then t5 = {} end for _, v in pairs(t5) do modules.Components.HitEffect.Hit(v.Instance, v.Position, v.Normal, v.Material, weaponDataNew.CurrentTool.Settings, refsPlayer) refsGameEvents.Hit:FireServer(v, { StartPosition = CFramePosition, Direction = n1, EndPosition = v.Position, Instance = v.Instance, Normal = v.Normal, Material = v.Material }) end local v159 = nil n1 = nil if v154 and weaponDataNew.CurrentTool then if services.CollectionService:HasTag(v154.Instance, "PlayerHitRegistration") then local v160 = modules.Components.Player.FindHumanoidFromBulletHit(v154.Instance) if v160 and v160.Health > 0 then v159 = services.Players:FindFirstChild(v160.Parent.Name) or v160.Parent if weaponDataNew.CurrentTool and weaponDataNew.CurrentTool.Tool:GetAttribute("Class") == "Knife" or services.CollectionService:HasTag(v154.Instance, "PlayerHead") then n1 = modules.Config.HeadDamage elseif services.CollectionService:HasTag(v154.Instance, "PlayerTorso") then n1 = weaponDataNew.CurrentTool.Settings.TorsoDamage elseif services.CollectionService:HasTag(v154.Instance, "PlayerLimb") then n1 = weaponDataNew.CurrentTool.Settings.LimbsDamage else n1 = weaponDataNew.CurrentTool.Settings.LimbsDamage warn("Missing tags") end end elseif weaponDataNew.CurrentTool then if weaponDataNew.CurrentTool.Tool:GetAttribute("Class") == "Knife" then modules.Components.HitEffect.Hit(v154.Instance, v154.Position, v154.Normal, v154.Material, true, refsPlayer) else modules.Components.HitEffect.Hit(v154.Instance, v154.Position, v154.Normal, v154.Material, nil, refsPlayer) end refsGameEvents.Hit:FireServer(v154, t6) end if weaponDataNew.CurrentTool and weaponDataNew.CurrentTool.Tool:GetAttribute("Class") == "Knife" then weaponDataNew.CurrentTool.Model.Handle:FindFirstChild("Hit"):Play() weaponDataNew:ServerSoundCue("Hit", true, weaponDataNew.CurrentTool.Model.Name) end end if weaponDataNew.CurrentTool then refsGameEvents.Damage:FireServer(v159, n1, weaponDataNew.CurrentTool.Model.Name, t6) end end local function Recoil() task.spawn(function() if weaponDataNew.CurrentTool and weaponDataNew.CurrentTool.Settings then runtime.CameraShake:Shake(modules.CShakeModule.Presets.Bullet) local n1 = weaponDataNew.CurrentTool.Settings.VRecoil * modules.Config.RecoilMultiplier local hRecoil = weaponDataNew.CurrentTool.Settings.HRecoil local randomNumber = math.random(-1, 1) local n2 = hRecoil * randomNumber local v234 = CFrame.Angles(n1 * 0.00001, n2 * 0.00001, 0) if helpers.IsFirstPersonSpectateCameraActive() ~= true then Camera.CFrame = Camera.CFrame * v234 end if weaponDataNew.CurrentTool.Aiming == true then clientData.Recoil = CFrame.Angles(0, n2 * 0.00001, 0) * CFrame.new(0, 0, -0.15) else clientData.Recoil = CFrame.Angles(0, n2 * 0.00001, 0) * CFrame.new(0, 0, -0.8) end end weaponDataNew:Shoot() end) if weaponDataNew.CurrentTool and weaponDataNew.CurrentTool.Model then modules.Components.Weapon.MuzzleShootEffect(weaponDataNew.CurrentTool.Model) end end local function IsSprintBlockedByHardAction() local weaponDataNewCurrentTool = weaponDataNew.CurrentTool if not weaponDataNewCurrentTool or not weaponDataNewCurrentTool.Tool then return false end if weaponDataNew.QuickAction == true or weaponDataNew.ActionDebounce == true then return true end if weaponDataNewCurrentTool.Reloading == true or weaponDataNewCurrentTool.Bolting == true or weaponDataNewCurrentTool.Pumping == true or weaponDataNewCurrentTool.SemiCooldown == true then return true end local v162 = weaponDataNewCurrentTool.Animations and weaponDataNewCurrentTool.Animations.Client if v162 then if v162.Action and v162.Action.IsPlaying == true then return true end if v162.Equip and v162.Equip.IsPlaying == true then return true end return false end return false end local function Knife() if not weaponDataNew.CurrentTool then elseif weaponDataNew.ActionDebounce == false and weaponDataNew.CurrentTool.Animations.Client.Action then weaponDataNew.ActionDebounce = true u34() if not weaponDataNew.CurrentTool.Animations.Client.Action.IsPlaying then weaponDataNew:Action("Knife") CastBulletRay(modules.Config.KnifeDistance) end task.wait(modules.Config.KnifeCooldown / 1.5) weaponDataNew.ActionDebounce = false end end local function StartQuickThrowHold() if weaponAction.QuickThrowHoldActive == true or refsPlayer.ServerData:GetAttribute("Alive") ~= true then return end local v163 = weaponDataNew.Tools and weaponDataNew.Tools.Throwable if (if not v163 or not v163.Tool then false else if v163.Tool:GetAttribute("Class") == "Throwable" then (tonumber(v163.Tool:GetAttribute("Amount")) or 0) > 0 else false) == true then weaponAction.QuickThrowPreviousWeaponIndex = weaponDataNew.CurrentToolIndex ~= 4 and weaponDataNew.CurrentToolIndex or weaponAction.LastNonThrowableWeaponIndex if weaponDataNew.CurrentToolIndex ~= 4 then u35(4) end local weaponDataNewCurrentTool = weaponDataNew.CurrentTool if (if not weaponDataNewCurrentTool or not weaponDataNewCurrentTool.Tool then false else if weaponDataNewCurrentTool.Tool:GetAttribute("Class") == "Throwable" then (tonumber(weaponDataNewCurrentTool.Tool:GetAttribute("Amount")) or 0) > 0 else false) == true then weaponDataNew.ThrowableSnapshot = nil weaponDataNew.QuickAction = true weaponAction.QuickThrowHoldActive = true weaponAction.ThrowableRecoveryActive = false SyncThrowablePreviewState() SyncThrowablePreviewState() return end weaponAction.QuickThrowPreviousWeaponIndex = 0 SetThrowablePreviewBridgeState(false) weaponDataNew.ThrowableSnapshot = nil return end end u36 = function() if not weaponDataNew.CurrentTool then elseif weaponDataNew.CurrentTool.Tool:GetAttribute("Amount") then u34() if tonumber(weaponDataNew.CurrentTool.Tool:GetAttribute("Amount")) > 0 then SetThrowablePreviewBridgeState(false) if not CaptureThrowableThrowSnapshot() then weaponDataNew.ThrowableSnapshot = nil return end weaponAction.ThrowableRecoveryActive = true SyncThrowablePreviewState() weaponDataNew:Action("Throwable") ReturnToPreviousWeaponIfNeeded() weaponAction.ThrowableRecoveryActive = false SyncThrowablePreviewState() SetThrowablePreviewBridgeState(false) weaponDataNew.ThrowableSnapshot = nil return end return end end u33 = function() local v165 = weaponAction.ADSUnlockAt or 0 local v166 = os.clock() if v165 > v166 == true then weaponAction.BufferedADSIntent = true weaponAction.BufferedADSSwapGeneration = weaponAction.SwapGeneration or 0 local weaponDataNewCurrentTool = weaponDataNew.CurrentTool weaponAction.BufferedADSToolSerial = if not weaponDataNewCurrentTool or not weaponDataNewCurrentTool.Tool then "" else modules.WeaponSlotResolver.GetOrAssignToolSerial(weaponDataNewCurrentTool.Tool) refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") ScheduleBufferedADSRetry() return end if (weaponDataNew ~= nil and weaponDataNew.IsWeaponPresentationReady ~= nil and weaponDataNew:IsWeaponPresentationReady() == true) == true then local currentTool = weaponDataNew.CurrentTool if currentTool and currentTool.Tool and (currentTool.Tool:GetAttribute("Class") == "Primary" or currentTool.Tool:GetAttribute("Class") == "Secondary") and (refsServerFolder:GetAttribute("Phase") == "Round Started" or refsServerFolder:GetAttribute("Phase") == "Preparation" or refsServerFolder:GetAttribute("Phase") == "Round Ended") and currentTool.Bolting ~= true and refsPlayer.ServerData:GetAttribute("Alive") == true then if (weaponAction.SwapGeneration or 0) > 0 then local v169: boolean = true if refsScript:GetAttribute("SwapInProgress") ~= true then if (weaponDataNew ~= nil and weaponDataNew.IsWeaponReady ~= nil and weaponDataNew:IsWeaponReady() == true) == true then v169 = false end end if v169 then weaponAction.BufferedADSIntent = true weaponAction.BufferedADSSwapGeneration = weaponAction.SwapGeneration or 0 local v170 = weaponDataNew.CurrentTool weaponAction.BufferedADSToolSerial = if not v170 or not v170.Tool then "" else modules.WeaponSlotResolver.GetOrAssignToolSerial(v170.Tool) refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") end end weaponDataNew:ADS() weaponDataNew.Animations.Client.Run:Play() weaponDataNew.Animations.Client.Run:Stop(0.02) weaponDataNew:SoundCue("Run", false) if api.Movement.GetMovement() == "Running" then api.Movement.SetMovement("Walking") end api.Movement.UpdateWalkSpeedClient(api.Movement.GetMovement()) refsGameEvents.ChangeMovement:FireServer(api.Movement.GetMovement()) if currentTool.Tool:GetAttribute("ADSType") == "Scope" then local t7: {[any]: any} = { CurrentState = "ADS", Aiming = true, ScopeVisible = true, CrosshairVisible = false, TargetFOV = 25, FOVDuration = 0.2 } if weaponDataNew and weaponDataNew.SendPresentationEvent then weaponDataNew:SendPresentationEvent("ADSBegin", t7) end u37(currentTool, 0.2) modules.Config.AddSound("Scope_In", nil, false, services.SoundService, false) else local t8: {[any]: any} = { CurrentState = "ADS", Aiming = true, ScopeVisible = false, CrosshairVisible = false, FOVDuration = 0.2, TargetFOV = playerSettings:GetAttribute("FieldOfView") - 5 * currentTool.Settings.ADSZoom } if weaponDataNew and weaponDataNew.SendPresentationEvent then weaponDataNew:SendPresentationEvent("ADSBegin", t8) end u37(currentTool, 0.2) end if (weaponDataNew ~= nil and weaponDataNew.IsWeaponReady ~= nil and weaponDataNew:IsWeaponReady() == true) == true then weaponAction.BufferedADSIntent = false weaponAction.BufferedADSSwapGeneration = 0 weaponAction.BufferedADSToolSerial = "" refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") end end return end weaponAction.BufferedADSIntent = true weaponAction.BufferedADSSwapGeneration = weaponAction.SwapGeneration or 0 local v173 = weaponDataNew.CurrentTool weaponAction.BufferedADSToolSerial = if not v173 or not v173.Tool then "" else modules.WeaponSlotResolver.GetOrAssignToolSerial(v173.Tool) refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") end u34 = function() weaponAction.BufferedADSIntent = false weaponAction.BufferedADSSwapGeneration = 0 weaponAction.BufferedADSToolSerial = "" refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") local weaponDataNewCurrentTool = weaponDataNew.CurrentTool if weaponDataNewCurrentTool and weaponDataNewCurrentTool.Tool and (weaponDataNewCurrentTool.Tool:GetAttribute("Class") == "Primary" or weaponDataNewCurrentTool.Tool:GetAttribute("Class") == "Secondary") and (refsServerFolder:GetAttribute("Phase") == "Round Started" or refsServerFolder:GetAttribute("Phase") == "Preparation" or refsServerFolder:GetAttribute("Phase") == "Round Ended") and weaponDataNewCurrentTool.Aiming == true and weaponDataNewCurrentTool.Bolting ~= true and refsPlayer.ServerData:GetAttribute("Alive") == true then weaponDataNew:ReleaseADS() api.Movement.UpdateWalkSpeedClient(api.Movement.GetMovement()) refsGameEvents.ChangeMovement:FireServer(api.Movement.GetMovement()) local u175 if weaponDataNew.Crosshair then u175 = true if weaponDataNew.Crosshair.Enabled ~= true then u175 = false end else u175 = false end local t9: {[any]: any} = { CurrentState = "Hold", Aiming = false, ScopeVisible = false, FOVDuration = 0.2, CrosshairVisible = u175, TargetFOV = playerSettings:GetAttribute("FieldOfView") } if weaponDataNew and weaponDataNew.SendPresentationEvent then weaponDataNew:SendPresentationEvent("ADSEnd", t9) end ApplyHoldPresentationState(0.2) if weaponDataNewCurrentTool.Tool:GetAttribute("ADSType") == "Scope" then modules.Config.AddSound("Scope_Out", nil, false, services.SoundService, false) end end end u35 = function(lastNonThrowableWeaponIndex) if refsPlayer.ServerData:GetAttribute("Alive") == true and lastNonThrowableWeaponIndex ~= weaponDataNew.CurrentToolIndex and weaponDataNew.QuickAction == false and weaponDataNew.Holster == true and weaponDataNew.CurrentTool then weaponAction.SwapGeneration = (weaponAction.SwapGeneration or 0) + 1 refsScript:SetAttribute("SwapGeneration", weaponAction.SwapGeneration) weaponAction.BufferedADSToolSerial = "" refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") weaponAction.ADSUnlockAt = os.clock() + 0.01 u34() weaponAction.BufferedADSIntent = false weaponAction.BufferedADSSwapGeneration = 0 weaponAction.BufferedADSToolSerial = "" refsScript:SetAttribute("BufferedADSIntent", weaponAction.BufferedADSIntent == true) refsScript:SetAttribute("BufferedADSSwapGeneration", weaponAction.BufferedADSSwapGeneration or 0) refsScript:SetAttribute("BufferedADSToolSerial", weaponAction.BufferedADSToolSerial or "") local t10: {[any]: any} = { "Primary", "Secondary", "Knife", "Throwable" } local v179 = t10[lastNonThrowableWeaponIndex] if not v179 then return end if not weaponDataNew.Tools[v179] then return end if v179 == "Throwable" and (if not weaponDataNew.Tools[v179] or not weaponDataNew.Tools[v179].Tool then false else if weaponDataNew.Tools[v179].Tool:GetAttribute("Class") == "Throwable" then (tonumber(weaponDataNew.Tools[v179].Tool:GetAttribute("Amount")) or 0) > 0 else false) ~= true then return end if weaponDataNew.SetReadinessState then weaponDataNew:SetReadinessState(true, false, false) end weaponAction.SwapFinalizing = true if weaponDataNew:SwapTools(lastNonThrowableWeaponIndex) == true then ApplyHoldPresentationState(0.05) weaponAction.SwapFinalizing = false if lastNonThrowableWeaponIndex ~= 4 then weaponAction.LastNonThrowableWeaponIndex = lastNonThrowableWeaponIndex end v5(weaponDataNew.CurrentTool.Tool.Name) local u180 if weaponDataNew.Crosshair then u180 = true if weaponDataNew.Crosshair.Enabled ~= true then u180 = false end else u180 = false end v24({ CrosshairVisible = u180 }) return end weaponAction.SwapFinalizing = false if weaponDataNew.SetReadinessState then local u181: boolean = weaponDataNew.CurrentTool ~= nil weaponDataNew:SetReadinessState(false, u181, u181) end return end end return { CastBulletRay = CastBulletRay, ShootEffect = function(player, p25) if player:IsA("Model") then local foundChild = player:FindFirstChild(player:GetAttribute(player:GetAttribute("CurrentWeapon"))) if foundChild then modules.Components.Weapon.MuzzleShootEffect(foundChild) end elseif player ~= refsPlayer then local Character4 = player.Character local v186 if not Character4 then v186 = nil else local v187 = modules.WeaponSlotResolver.GetStateFolder(Character4) local v188 = v187 and v187:GetAttribute("EquippedToolName") v186 = if typeof(v188) == "string" and v188 ~= "" then modules.WeaponSlotResolver.ResolveVisibleModel(Character4, v188) else nil end if v186 ~= nil then modules.Components.Weapon.MuzzleShootEffect(v186) end local animBase = player.Character:FindFirstChild("AnimBase") if animBase and animBase:FindFirstChild("Shoulder") then animBase.Shoulder.C1 = CFrame.new(0, 0, 0.15) task.wait(p25 / 2) if animBase:FindFirstChild("Shoulder") then animBase.Shoulder.C1 = CFrame.new() return end end end end, Recoil = Recoil, Shoot = function() if (weaponDataNew ~= nil and weaponDataNew.IsWeaponReady ~= nil and weaponDataNew:IsWeaponReady() == true) == true then if not weaponDataNew.CurrentTool then elseif weaponDataNew.Holster == true and Humanoid.Health > 0 then local weaponDataNewCurrentTool = weaponDataNew.CurrentTool local class = weaponDataNewCurrentTool.Tool:GetAttribute("Class") if class == "Primary" or class == "Secondary" then local ammo = weaponDataNewCurrentTool.Tool:GetAttribute("Ammo") if not (math.floor(ammo) > 0) then local handle = weaponDataNewCurrentTool.Model:FindFirstChild("Handle") if not handle then return end local firePoint = handle:FindFirstChild("FirePoint") modules.Components.Weapon.AddSFX(services.ReplicatedStorage.Config.Audio.GunClick, firePoint, 0.5, true) return end if weaponDataNew.QuickAction == false and weaponDataNewCurrentTool.Bolting ~= true and weaponDataNewCurrentTool.Pumping ~= true and weaponDataNewCurrentTool.SemiCooldown ~= true then weaponDataNew.Animations.Client.Run:Play() weaponDataNew.Animations.Client.Run:Stop(0.02) weaponDataNew:SoundCue("Run", false) if weaponDataNewCurrentTool.Animations.Client.Inspect then weaponDataNewCurrentTool.Animations.Client.Inspect:Stop() end if weaponDataNewCurrentTool.Reloading == true then weaponDataNewCurrentTool.ReloadCancel = true weaponDataNewCurrentTool.Animations.Client.Reload:Stop() weaponDataNewCurrentTool.Animations.Server.Reload:Stop() end if api.Movement.GetMovement() == "Running" then api.Movement.SetMovement("Walking") end if (weaponDataNewCurrentTool.Settings.Mode == "Semi" or weaponDataNewCurrentTool.Settings.Mode == "Pump-Action") and math.floor((weaponDataNewCurrentTool.Tool:GetAttribute("Ammo"))) > 0 then weaponDataNewCurrentTool.SemiCooldown = true refsGameEvents.Shoot:FireServer() for _ = 1, weaponDataNewCurrentTool.Settings.Bullets do CastBulletRay() end Recoil() if weaponDataNewCurrentTool.Settings.Mode == "Pump-Action" then weaponDataNew:Pump() else task.wait(1 / (weaponDataNewCurrentTool.Settings.FireRate * modules.Config.FireRateMultiplier / 60)) end weaponDataNewCurrentTool.SemiCooldown = false return end if weaponDataNewCurrentTool.Settings.Mode == "Bolt-Action" and math.floor((weaponDataNewCurrentTool.Tool:GetAttribute("Ammo"))) > 0 then weaponDataNewCurrentTool.SemiCooldown = true refsGameEvents.Shoot:FireServer() for _ = 1, weaponDataNewCurrentTool.Settings.Bullets do CastBulletRay() end Recoil() local weaponDataNewCurrentToolAiming = weaponDataNewCurrentTool.Aiming local ToolName = weaponDataNewCurrentTool.Tool.Name u34() weaponDataNew:Bolt() if ToolName == weaponDataNewCurrentTool.Tool.Name and weaponDataNewCurrentToolAiming == true then clientData.RunningHold = false if api.WeaponAction and api.WeaponAction.AimDownSight then api.WeaponAction.AimDownSight() end end weaponDataNewCurrentTool.SemiCooldown = false return end if weaponDataNewCurrentTool.Settings.Mode == "Auto" then while clientData.MouseHeld and weaponDataNewCurrentTool and weaponDataNewCurrentTool.Model ~= nil and weaponDataNewCurrentTool.Tool:GetAttribute("Ammo") > 0 and weaponDataNew.QuickAction == false do weaponDataNewCurrentTool.SemiCooldown = true local weaponDataNewCurrentToolID = weaponDataNew.CurrentToolID refsGameEvents.Shoot:FireServer() for _ = 1, weaponDataNewCurrentTool.Settings.Bullets do CastBulletRay() end Recoil() task.wait(1 / (weaponDataNewCurrentTool.Settings.FireRate * modules.Config.FireRateMultiplier / 60)) if weaponDataNewCurrentToolID ~= weaponDataNew.CurrentToolID then clientData.MouseHeld = false end weaponDataNewCurrentTool.SemiCooldown = false end end end else if class == "Knife" then Knife() return end if class == "Throwable" then u36() end end return end return end end, Ping = function() if ping.CanPing == true then ping.CanPing = false local v201 = modules.Config.RayCast(Camera.CFrame.Position, Camera.CFrame.LookVector, ping.MaxDistance, clientData.Ray_Ignore) local v202 = v201 and v201.Instance or nil if v202 ~= nil then refsGameEvents.PingLocation:FireServer(v201 and v201.Position or nil, v202.Name, v201 and v201.Normal or nil) end task.wait(ping.Cooldown) ping.CanPing = true end end, IsInspectBlockingSprint = function() local weaponDataNewCurrentTool = weaponDataNew.CurrentTool if not weaponDataNewCurrentTool then return false end local v204 = weaponDataNewCurrentTool.Animations and weaponDataNewCurrentTool.Animations.Client local inspect = v204 and v204.Inspect return inspect ~= nil and inspect.IsPlaying == true end, TryCancelInspectForSprint = function() if weaponDataNew and weaponDataNew.CancelInspect then return weaponDataNew:CancelInspect() end local weaponDataNewCurrentTool = weaponDataNew.CurrentTool if not weaponDataNewCurrentTool then return false end local v207 = weaponDataNewCurrentTool.Animations and weaponDataNewCurrentTool.Animations.Client local inspect = v207 and v207.Inspect if inspect and inspect.IsPlaying == true then inspect:Stop() return true end return false end, IsSprintBlockedByHardAction = IsSprintBlockedByHardAction, IsSprintBlockedByCurrentAction = function() local u209: boolean = true if IsSprintBlockedByHardAction() ~= true then local weaponDataNewCurrentTool = weaponDataNew.CurrentTool local u211 if not weaponDataNewCurrentTool then u211 = false else local v212 = weaponDataNewCurrentTool.Animations and weaponDataNewCurrentTool.Animations.Client local inspect = v212 and v212.Inspect u211 = false if inspect ~= nil then u211 = inspect.IsPlaying == true end end u209 = u211 == true end return u209 end, Knife = Knife, QuickKnife = function() local weaponDataNewCurrentToolIndex = weaponDataNew.CurrentToolIndex u35(3) weaponDataNew.QuickAction = true Knife() weaponDataNew.QuickAction = false u35(weaponDataNewCurrentToolIndex) end, StartQuickThrowHold = StartQuickThrowHold, ReleaseQuickThrowHold = function(p26) if weaponAction.QuickThrowHoldActive == true then weaponAction.QuickThrowHoldActive = false SetThrowablePreviewBridgeState(false) local weaponActionQuickThrowPreviousWeaponIndex = weaponAction.QuickThrowPreviousWeaponIndex weaponAction.QuickThrowPreviousWeaponIndex = 0 if p26 == true then u36() else weaponDataNew.ThrowableSnapshot = nil weaponDataNew.QuickAction = false end if weaponDataNew.QuickAction == true then weaponDataNew.QuickAction = false end if type(weaponActionQuickThrowPreviousWeaponIndex) == "number" and weaponActionQuickThrowPreviousWeaponIndex >= 1 and weaponActionQuickThrowPreviousWeaponIndex ~= 4 then u35(weaponActionQuickThrowPreviousWeaponIndex) end return end end, TacticalThrow = u36, QuickThrow = function() StartQuickThrowHold() end, Reload = function() if (weaponDataNew ~= nil and weaponDataNew.IsWeaponReady ~= nil and weaponDataNew:IsWeaponReady() == true) ~= true then return end if not weaponDataNew.CurrentTool then warn(modules.Utility.formatWarnInstanceIsNil("WeaponDataNew (type: table)", "CurrentTool", "Failed to reload because CurrentTool is nil")) return end if not weaponDataNew.CurrentTool.Animations then warn(modules.Utility.formatWarnInstanceIsNil("WeaponDataNew.CurrentTool (type: table)", "Animations", "Failed to reload because Animations is nil")) return end if weaponDataNew.CurrentTool.Animations.Client.Reload == nil or not (weaponDataNew.CurrentTool.Tool:GetAttribute("StoredAmmo") > 0) or not (math.floor((weaponDataNew.CurrentTool.Tool:GetAttribute("Ammo"))) < weaponDataNew.CurrentTool.Settings.Ammo) or weaponDataNew.CurrentTool.Reloading == true or weaponDataNew.QuickAction ~= false or weaponDataNew.CurrentTool.Bolting == true or weaponDataNew.CurrentTool.Pumping == true then return end u34() if weaponDataNew.CurrentTool.Settings.ReloadType == 1 then if api.Movement.GetMovement() == "Running" then api.Movement.SetMovement("Walking") end weaponDataNew:Reload() elseif weaponDataNew.CurrentTool.Settings.ReloadType == 2 then local v217 = weaponDataNew.CurrentTool.Settings.Ammo local ammo = weaponDataNew.CurrentTool.Tool:GetAttribute("Ammo") local floored = math.floor(ammo) local storedAmmo = weaponDataNew.CurrentTool.Tool:GetAttribute("StoredAmmo") local floored2 = math.floor(storedAmmo) for _ = 1, math.clamp(v217 - floored, 0, floored2) do if weaponDataNew.CurrentTool.Tool:GetAttribute("StoredAmmo") and weaponDataNew.CurrentTool.Tool:GetAttribute("StoredAmmo") > 0 and math.floor((weaponDataNew.CurrentTool.Tool:GetAttribute("Ammo"))) < weaponDataNew.CurrentTool.Settings.Ammo and weaponDataNew.CurrentTool.Reloading ~= true and weaponDataNew.QuickAction == false and weaponDataNew.CurrentTool.Bolting ~= true and weaponDataNew.CurrentTool.Pumping ~= true then weaponDataNew:Reload() end if weaponDataNew.CurrentTool.ReloadCancel == true then break end end end end, AimDownSight = u33, AimDownSightRelease = u34, SwapWeapon = u35, ApplyConfirmedWeaponSlot = function(p6) if typeof(p6) == "table" then local slot = p6.Slot if typeof(slot) == "string" then local v225 = modules.WeaponSlotResolver.GetIndexFromClass(slot) if not v225 then return end local v226 = weaponDataNew.Tools and weaponDataNew.Tools[slot] if not v226 or not v226.Tool or not v226.Model then return end if typeof(p6.ToolName) == "string" and p6.ToolName ~= "" and v226.Tool.Name ~= p6.ToolName then return end local v227 = weaponDataNew.CurrentTool and weaponDataNew.CurrentTool.Tool if v227 then v227 = modules.WeaponSlotResolver.GetToolSerial(weaponDataNew.CurrentTool.Tool) end local v228 = modules.WeaponSlotResolver.GetOrAssignToolSerial(v226.Tool) if typeof(p6.ToolSerial) == "string" and p6.ToolSerial ~= "" then v228 = p6.ToolSerial end if v225 ~= weaponDataNew.CurrentToolIndex or v227 ~= v228 then weaponDataNew:SwapTools(v225, true) elseif weaponDataNew.EnsureCurrentToolPresentation then weaponDataNew:EnsureCurrentToolPresentation() end if v226.Tool then v5(v226.Tool.Name) end return end return end end, SetThrowablePreviewBridgeState = SetThrowablePreviewBridgeState, SyncThrowablePreviewState = SyncThrowablePreviewState, IsThrowableAvailable = function(p7) if not p7 or not p7.Tool then elseif p7.Tool:GetAttribute("Class") == "Throwable" then return (tonumber(p7.Tool:GetAttribute("Amount")) or 0) > 0 end return false end, resolveEquippedCharacterWeaponModel = resolveEquippedCharacterWeaponModel } end }