-- ModuleScript WeaponActionController (via decompile) local tbl_1 = {} function tbl_1.init(a1) --[[ name: init line: 4 ]] local Services_upv_1 = a1.Services local Refs_1 = a1.Refs local Modules_upv_1 = a1.Modules local State_1 = a1.State local API_upv_1 = a1.API local Player_upv_1 = Refs_1.Player local PlayerGui_upv_1 = Refs_1.PlayerGui local Character_upv_1 = Refs_1.Character local Humanoid_upv_1 = Refs_1.Humanoid local Camera_upv_1 = Refs_1.Camera local Script_upv_1 = Refs_1.Script local ServerFolder_upv_1 = Refs_1.ServerFolder local GameEvents_upv_1 = Refs_1.GameEvents local ClientData_upv_1 = State_1.ClientData local WeaponDataNew_upv_1 = State_1.WeaponDataNew local WeaponAction_upv_1 = State_1.WeaponAction local Runtime_upv_1 = State_1.Runtime local Ping_upv_1 = State_1.Ping local Keybinds_upv_1 = State_1.Keybinds local PlayerSettings_upv_1 = State_1.PlayerSettings local Helpers_upv_1 = State_1.Helpers local u1 = function(...) --[[ line: 36 upvalues: API_upv_1 (copy, index: 1) ]] if API_upv_1.Presentation and API_upv_1.Presentation.PushSpectatePresentationState then return API_upv_1.Presentation.PushSpectatePresentationState(...) end end function Helpers_upv_1.getCurrentStateFolder() --[[ name: getCurrentStateFolder line: 48 upvalues: Player_upv_1 (copy, index: 1) Modules_upv_1 (copy, index: 2) ]] local Character_2 = Player_upv_1.Character local v1 = (Character_2 and (Modules_upv_1.WeaponSlotResolver.GetStateFolder(Character_2))) or nil return v1 end local function resolveEquippedCharacterWeaponModel(a2, a3) --[[ name: resolveEquippedCharacterWeaponModel line: 53 upvalues: Modules_upv_1 (copy, index: 1) ]] if not a2 then return nil end if typeof(a3) == "string" then local v2 = nil if a3 ~= "" then v2 = Modules_upv_1.WeaponSlotResolver.ResolveVisibleModel(a2, a3) if v2 then return v2 end end end local v3 = Modules_upv_1.WeaponSlotResolver.GetStateFolder(a2) local v4 = v3 and (v3:GetAttribute("EquippedToolName")) if typeof(v4) == "string" and v4 ~= "" then return Modules_upv_1.WeaponSlotResolver.ResolveVisibleModel(a2, v4) end return nil end Helpers_upv_1.resolveEquippedCharacterWeaponModel = resolveEquippedCharacterWeaponModel local u2 = function(...) --[[ line: 30 upvalues: API_upv_1 (copy, index: 1) ]] if API_upv_1.Presentation and API_upv_1.Presentation.SelectHUDEquipment then return API_upv_1.Presentation.SelectHUDEquipment(...) end end local function SetThrowablePreviewBridgeState(a4, a5) --[[ name: SetThrowablePreviewBridgeState line: 130 upvalues: Script_upv_1 (copy, index: 1) Modules_upv_1 (copy, index: 2) Player_upv_1 (copy, index: 3) u1 (copy, index: 4) ]] local v5 = ((a4 ~= true) and "") or (a5 or "") if Script_upv_1:GetAttribute("ThrowablePreviewActive") ~= a4 then Script_upv_1:SetAttribute("ThrowablePreviewActive", a4) end if Script_upv_1:GetAttribute("ThrowablePreviewToolName") ~= v5 then Script_upv_1:SetAttribute("ThrowablePreviewToolName", v5) end local UpdateStateFolder_1 = Modules_upv_1.WeaponSlotResolver.UpdateStateFolder local Character_3 = Player_upv_1.Character local v6 = (Character_3 and (Modules_upv_1.WeaponSlotResolver.GetStateFolder(Character_3))) or nil UpdateStateFolder_1(v6, {ThrowablePreviewActive = a4, ThrowablePreviewToolName = v5}) u1({ThrowablePreviewActive = a4, ThrowablePreviewToolName = v5}) end local function BuildThrowableIgnoreList(a6) --[[ name: BuildThrowableIgnoreList line: 166 upvalues: Character_upv_1 (copy, index: 1) Camera_upv_1 (copy, index: 2) WeaponDataNew_upv_1 (copy, index: 3) ]] local tbl_2 = {Character_upv_1, Camera_upv_1} if WeaponDataNew_upv_1.CameraModel then table.insert(tbl_2, WeaponDataNew_upv_1.CameraModel) end if a6 then table.insert(tbl_2, a6) end return tbl_2 end local function ClearThrowableThrowSnapshot() --[[ name: ClearThrowableThrowSnapshot line: 177 upvalues: WeaponDataNew_upv_1 (copy, index: 1) ]] WeaponDataNew_upv_1.ThrowableSnapshot = nil end local function SyncThrowablePreviewState() --[[ name: SyncThrowablePreviewState line: 149 upvalues: WeaponDataNew_upv_1 (copy, index: 1) WeaponAction_upv_1 (copy, index: 2) SetThrowablePreviewBridgeState (copy, index: 3) ]] local CurrentTool_1 = WeaponDataNew_upv_1.CurrentTool local v7 = false local _ if WeaponAction_upv_1.ThrowableRecoveryActive ~= true then _ = false if CurrentTool_1 ~= nil then _ = false if CurrentTool_1.Tool ~= nil then _ = false if CurrentTool_1.Tool:GetAttribute("Class") == "Throwable" then if (CurrentTool_1) and (CurrentTool_1.Tool) and CurrentTool_1.Tool:GetAttribute("Class") == "Throwable" then v7 = (tonumber(CurrentTool_1.Tool:GetAttribute("Amount")) or 0) > 0 else v7 = false end if v7 then v7 = true if WeaponDataNew_upv_1.CurrentToolIndex ~= 4 then v7 = WeaponAction_upv_1.QuickThrowHoldActive == true end end end end end end if v7 == true then SetThrowablePreviewBridgeState(true, CurrentTool_1.Tool.Name) else SetThrowablePreviewBridgeState(false) end end local function SetThrowableRecoveryState(a7) --[[ name: SetThrowableRecoveryState line: 205 upvalues: WeaponAction_upv_1 (copy, index: 1) SyncThrowablePreviewState (copy, index: 2) ]] WeaponAction_upv_1.ThrowableRecoveryActive = a7 SyncThrowablePreviewState() end local u3 = nil local u4 = nil local u5 = nil local u6 = nil local u7 = nil local function IsWeaponPresentationReady() --[[ name: IsWeaponPresentationReady line: 216 upvalues: WeaponDataNew_upv_1 (copy, index: 1) ]] local v8 = (WeaponDataNew_upv_1 ~= nil) and ((WeaponDataNew_upv_1.IsWeaponPresentationReady ~= nil) and (WeaponDataNew_upv_1:IsWeaponPresentationReady() == true)) return v8 end local function IsWeaponFullyReady() --[[ name: IsWeaponFullyReady line: 220 upvalues: WeaponDataNew_upv_1 (copy, index: 1) ]] local v9 = (WeaponDataNew_upv_1 ~= nil) and ((WeaponDataNew_upv_1.IsWeaponReady ~= nil) and (WeaponDataNew_upv_1:IsWeaponReady() == true)) return v9 end local function GetCurrentBufferedADSToolSerial() --[[ name: GetCurrentBufferedADSToolSerial line: 224 upvalues: WeaponDataNew_upv_1 (copy, index: 1) Modules_upv_1 (copy, index: 2) ]] local CurrentTool_2 = WeaponDataNew_upv_1.CurrentTool if CurrentTool_2 and CurrentTool_2.Tool then return Modules_upv_1.WeaponSlotResolver.GetOrAssignToolSerial(CurrentTool_2.Tool) end return "" end local function SyncBufferedADSIntentAttributes() --[[ name: SyncBufferedADSIntentAttributes line: 232 upvalues: Script_upv_1 (copy, index: 1) WeaponAction_upv_1 (copy, index: 2) ]] Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") end local function SetBufferedADSIntent(a8) --[[ name: SetBufferedADSIntent line: 238 upvalues: WeaponAction_upv_1 (copy, index: 1) Script_upv_1 (copy, index: 2) ]] WeaponAction_upv_1.BufferedADSIntent = a8 Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") end local function ClearBufferedADSIntent() --[[ name: ClearBufferedADSIntent line: 243 upvalues: WeaponAction_upv_1 (copy, index: 1) Script_upv_1 (copy, index: 2) ]] WeaponAction_upv_1.BufferedADSIntent = false WeaponAction_upv_1.BufferedADSSwapGeneration = 0 WeaponAction_upv_1.BufferedADSToolSerial = "" Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") end local function ShouldMaintainBufferedADSIntent() --[[ name: ShouldMaintainBufferedADSIntent line: 250 upvalues: WeaponAction_upv_1 (copy, index: 1) PlayerSettings_upv_1 (copy, index: 2) ClientData_upv_1 (copy, index: 3) ]] if WeaponAction_upv_1.BufferedADSIntent == true then if PlayerSettings_upv_1:GetAttribute("ADSToggle") ~= true then return ClientData_upv_1.ADSInputHeld == true end return true end return false end local function BufferADSForCurrentSwap() --[[ name: BufferADSForCurrentSwap line: 260 upvalues: WeaponAction_upv_1 (copy, index: 1) WeaponDataNew_upv_1 (copy, index: 2) Modules_upv_1 (copy, index: 3) Script_upv_1 (copy, index: 4) ]] WeaponAction_upv_1.BufferedADSIntent = true WeaponAction_upv_1.BufferedADSSwapGeneration = WeaponAction_upv_1.SwapGeneration or 0 local CurrentTool_3 = WeaponDataNew_upv_1.CurrentTool local v10 if (CurrentTool_3) and (CurrentTool_3.Tool) then v10 = Modules_upv_1.WeaponSlotResolver.GetOrAssignToolSerial(CurrentTool_3.Tool) else v10 = "" end WeaponAction_upv_1.BufferedADSToolSerial = v10 Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") end local function IsADSOnSwapCooldown() --[[ name: IsADSOnSwapCooldown line: 267 upvalues: WeaponAction_upv_1 (copy, index: 1) ]] local v11 = os.clock() < (WeaponAction_upv_1.ADSUnlockAt or 0) return v11 end local u8 = nil local function ScheduleBufferedADSRetry(a9) --[[ name: ScheduleBufferedADSRetry line: 273 upvalues: WeaponAction_upv_1 (copy, index: 1) u8 (ref, index: 2) ]] local v12 = a9 or (math.max((WeaponAction_upv_1.ADSUnlockAt or 0) - os.clock(), 0)) if v12 <= 0 then task.defer(u8) else task.delay( v12, function() --[[ line: 279 upvalues: WeaponAction_upv_1 (copy, index: 1) u8 (ref, index: 2) ]] if WeaponAction_upv_1.BufferedADSIntent ~= true then return end u8() end ) end end local function ApplyHoldPresentationState(a10) --[[ name: ApplyHoldPresentationState line: 286 upvalues: WeaponDataNew_upv_1 (copy, index: 1) u7 (ref, index: 2) Modules_upv_1 (copy, index: 3) Keybinds_upv_1 (copy, index: 4) API_upv_1 (copy, index: 5) PlayerSettings_upv_1 (copy, index: 6) ClientData_upv_1 (copy, index: 7) u1 (copy, index: 8) ]] local v13 if WeaponDataNew_upv_1 then v13 = WeaponDataNew_upv_1.CurrentTool else v13 = WeaponDataNew_upv_1 end if v13 and v13.Aiming == true then u7(v13, a10) return end Modules_upv_1.CameraSens:AdjustSensitivity(Keybinds_upv_1.CameraSensitivity) if API_upv_1.Presentation and API_upv_1.Presentation.TweenFOV then API_upv_1.Presentation.TweenFOV(PlayerSettings_upv_1:GetAttribute("FieldOfView"), a10 or 0.12) end if ClientData_upv_1.GameHUD and ClientData_upv_1.GameHUD.ScopeUI then ClientData_upv_1.GameHUD.ScopeUI.Visible = false end local tbl_3 = {CrosshairVisible = 0, ScopeVisible = false, Aiming = false} tbl_3.TargetFOV = PlayerSettings_upv_1:GetAttribute("FieldOfView") local v14 if WeaponDataNew_upv_1.Crosshair then v14 = true if WeaponDataNew_upv_1.Crosshair.Enabled ~= true then v14 = false end else v14 = false end tbl_3.CrosshairVisible = v14 u1(tbl_3) end u7 = function(a11, a12) --[[ line: 308 upvalues: Modules_upv_1 (copy, index: 1) Keybinds_upv_1 (copy, index: 2) API_upv_1 (copy, index: 3) ClientData_upv_1 (copy, index: 4) u1 (copy, index: 5) PlayerSettings_upv_1 (copy, index: 6) ]] if not a11 or not a11.Tool then return end if a11.Settings then local v15 = a12 or 0.12 if a11.Tool:GetAttribute("ADSType") ~= "Scope" then local v16 = PlayerSettings_upv_1:GetAttribute("FieldOfView") - 5 * a11.Settings.ADSZoom Modules_upv_1.CameraSens:AdjustSensitivity(Keybinds_upv_1.ADSSensitivity) if API_upv_1.Presentation and API_upv_1.Presentation.TweenFOV then API_upv_1.Presentation.TweenFOV(v16, v15) end if ClientData_upv_1.GameHUD and ClientData_upv_1.GameHUD.ScopeUI then ClientData_upv_1.GameHUD.ScopeUI.Visible = false end u1({CrosshairVisible = false, ScopeVisible = false, Aiming = true, TargetFOV = v16}) else Modules_upv_1.CameraSens:AdjustSensitivity(Keybinds_upv_1.ADSSensitivity * 0.5) if API_upv_1.Presentation and API_upv_1.Presentation.TweenFOV then API_upv_1.Presentation.TweenFOV(25, v15) end if ClientData_upv_1.GameHUD and ClientData_upv_1.GameHUD.ScopeUI then ClientData_upv_1.GameHUD.ScopeUI.Visible = true end u1({CrosshairVisible = false, TargetFOV = 25, ScopeVisible = true, Aiming = true}) end end end u8 = function() --[[ line: 345 upvalues: WeaponAction_upv_1 (copy, index: 1) PlayerSettings_upv_1 (copy, index: 2) ClientData_upv_1 (copy, index: 3) Script_upv_1 (copy, index: 4) WeaponDataNew_upv_1 (copy, index: 5) Modules_upv_1 (copy, index: 6) ScheduleBufferedADSRetry (copy, index: 7) u3 (ref, index: 8) ]] if WeaponAction_upv_1.BufferedADSIntent == true then local v17 if WeaponAction_upv_1.BufferedADSIntent == true then v17 = ((PlayerSettings_upv_1:GetAttribute("ADSToggle") == true) and true) or (ClientData_upv_1.ADSInputHeld == true) else v17 = false end if v17 == true then v17 = (WeaponDataNew_upv_1 ~= nil) and ((WeaponDataNew_upv_1.IsWeaponPresentationReady ~= nil) and (WeaponDataNew_upv_1:IsWeaponPresentationReady() == true)) if v17 ~= true then return end if (WeaponAction_upv_1.BufferedADSSwapGeneration or 0) == (WeaponAction_upv_1.SwapGeneration or 0) then local CurrentTool_4 = WeaponDataNew_upv_1.CurrentTool local v18 = WeaponAction_upv_1.BufferedADSToolSerial or "" local v19 = ((CurrentTool_4 and (CurrentTool_4.Tool)) and (Modules_upv_1.WeaponSlotResolver.GetOrAssignToolSerial(CurrentTool_4.Tool))) or "" if v18 ~= "" and v18 == v19 then if CurrentTool_4 and CurrentTool_4.Tool then if CurrentTool_4.Tool:GetAttribute("Class") ~= "Primary" and CurrentTool_4.Tool:GetAttribute("Class") ~= "Secondary" then WeaponAction_upv_1.BufferedADSIntent = false WeaponAction_upv_1.BufferedADSSwapGeneration = 0 WeaponAction_upv_1.BufferedADSToolSerial = "" Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") return end local v20 = nil if CurrentTool_4.Aiming ~= true then v20 = (WeaponAction_upv_1.ADSUnlockAt or 0) - os.clock() if v20 > 0 then ScheduleBufferedADSRetry(v20) else if u3 then u3() end local CurrentTool_5 = WeaponDataNew_upv_1.CurrentTool if CurrentTool_5 and CurrentTool_5.Aiming == true then local v21 = (WeaponDataNew_upv_1 ~= nil) and ((WeaponDataNew_upv_1.IsWeaponReady ~= nil) and (WeaponDataNew_upv_1:IsWeaponReady() == true)) if v21 == true then WeaponAction_upv_1.BufferedADSIntent = false WeaponAction_upv_1.BufferedADSSwapGeneration = 0 WeaponAction_upv_1.BufferedADSToolSerial = "" Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") end end end else local v22 = (WeaponDataNew_upv_1 ~= nil) and ((WeaponDataNew_upv_1.IsWeaponReady ~= nil) and (WeaponDataNew_upv_1:IsWeaponReady() == true)) if v22 == true then WeaponAction_upv_1.BufferedADSIntent = false WeaponAction_upv_1.BufferedADSSwapGeneration = 0 WeaponAction_upv_1.BufferedADSToolSerial = "" Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") end end return end WeaponAction_upv_1.BufferedADSIntent = false WeaponAction_upv_1.BufferedADSSwapGeneration = 0 WeaponAction_upv_1.BufferedADSToolSerial = "" Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") return end end WeaponAction_upv_1.BufferedADSIntent = false WeaponAction_upv_1.BufferedADSSwapGeneration = 0 WeaponAction_upv_1.BufferedADSToolSerial = "" Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") else WeaponAction_upv_1.BufferedADSIntent = false WeaponAction_upv_1.BufferedADSSwapGeneration = 0 WeaponAction_upv_1.BufferedADSToolSerial = "" Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") end end end Script_upv_1:GetAttributeChangedSignal("WeaponPresentationReady"):Connect( function() --[[ line: 401 upvalues: Script_upv_1 (copy, index: 1) u8 (ref, index: 2) ]] if Script_upv_1:GetAttribute("WeaponPresentationReady") ~= true then return end task.defer(u8) end ) Script_upv_1:GetAttributeChangedSignal("WeaponFullyReady"):Connect( function() --[[ line: 407 upvalues: Script_upv_1 (copy, index: 1) u8 (ref, index: 2) ]] if Script_upv_1:GetAttribute("WeaponFullyReady") ~= true then return end task.defer(u8) end ) local function ReturnToPreviousWeaponIfNeeded(a13) --[[ name: ReturnToPreviousWeaponIfNeeded line: 413 upvalues: WeaponDataNew_upv_1 (copy, index: 1) WeaponAction_upv_1 (copy, index: 2) u5 (ref, index: 3) ]] local CurrentTool_6 = WeaponDataNew_upv_1.CurrentTool if not CurrentTool_6 or not CurrentTool_6.Tool then return end if CurrentTool_6.Tool:GetAttribute("Class") == "Throwable" then local v23 = tonumber(CurrentTool_6.Tool:GetAttribute("Amount")) or 0 local v24 = a13 or (WeaponAction_upv_1.LastNonThrowableWeaponIndex) if v23 <= 0 and type(v24) == "number" and v24 >= 1 and v24 ~= 4 then u5(v24) end end end local function GetClosestPointOnPart(a14, a15) --[[ name: GetClosestPointOnPart line: 444 ]] local v25 = a14.CFrame:PointToObjectSpace(a15) local v26 = a14.Size * 0.5 return a14.CFrame:PointToWorldSpace(Vector3.new(math.clamp(v25.X, -v26.X, v26.X), math.clamp(v25.Y, -v26.Y, v26.Y), math.clamp(v25.Z, -v26.Z, v26.Z))) end local function IsActiveBarricadeBlocker(a16) --[[ name: IsActiveBarricadeBlocker line: 454 ]] if a16 and a16:IsA("BasePart") then if a16.Name ~= "BarricadePort" and a16:GetAttribute("BlockSetup") ~= true then return false end return a16.CanCollide == true end return false end local function FindBarricadeModelFromHitInstance(a17) --[[ name: FindBarricadeModelFromHitInstance line: 426 ]] local v27 = a17 local v28 = nil while v27 do if not (v27:IsA("Model")) or v27.Name ~= "Barricade" then v28 = v27:FindFirstChild("Barricade") if not (v28) or not (v28:IsA("Model")) then v27 = v27.Parent continue end return v28 end return v27 end return nil end local function ResolveKnifeBarricadeHit(a18) --[[ name: ResolveKnifeBarricadeHit line: 466 upvalues: FindBarricadeModelFromHitInstance (copy, index: 1) GetClosestPointOnPart (copy, index: 2) Modules_upv_1 (copy, index: 3) ]] if not a18 or not a18.Instance or a18.Instance.Name == "BarricadePlank" then return a18 end local v29 = a18.Instance local v30 if (v29) and (v29:IsA("BasePart")) and (v29.Name == "BarricadePort" or v29:GetAttribute("BlockSetup") == true) then v30 = v29.CanCollide == true else v30 = false end if v30 == true then return a18 end local v31 = FindBarricadeModelFromHitInstance(a18.Instance) if not v31 then return a18 end v29 = nil local v32 = nil local v33 = math.huge for _, value_1 in ipairs(v31:GetChildren()) do local v34 = value_1:IsA("BasePart") if not (v34) or value_1.Name ~= "BarricadePlank" or not ((value_1:GetAttribute("Health") or 0) > 0) then continue end local v35 = GetClosestPointOnPart(value_1, a18.Position) local Magnitude_1 = (v35 - a18.Position).Magnitude if Magnitude_1 < v33 then v33, v29, v32 = Magnitude_1, value_1, v35 end end if v29 and not (math.max(1.5, Modules_upv_1.Config.KnifeDistance * 0.5) < v33) then local tbl_4 = {Normal = 0, Position = 0, Material = 0, Distance = 0} tbl_4.Instance = v29 tbl_4.Position = v32 or (a18.Position) tbl_4.Normal = a18.Normal tbl_4.Material = v29.Material tbl_4.Distance = a18.Distance return tbl_4 end return a18 end local function ShootEffect(a19, a20) --[[ name: ShootEffect line: 610 upvalues: Player_upv_1 (copy, index: 1) Modules_upv_1 (copy, index: 2) ]] local v36 = nil if a19:IsA("Model") then v36 = a19:FindFirstChild(a19:GetAttribute(a19:GetAttribute("CurrentWeapon"))) if not v36 then return end Modules_upv_1.Components.Weapon.MuzzleShootEffect(v36) elseif a19 ~= Player_upv_1 then local Character_4 = a19.Character local v37 if Character_4 then local v38 = Modules_upv_1.WeaponSlotResolver.GetStateFolder(Character_4) local v39 = v38 and (v38:GetAttribute("EquippedToolName")) if typeof(v39) ~= "string" or v39 == "" then v37 = nil else v37 = Modules_upv_1.WeaponSlotResolver.ResolveVisibleModel(Character_4, v39) end else v37 = nil end if v37 ~= nil then Modules_upv_1.Components.Weapon.MuzzleShootEffect(v37) end local AnimBase_1 = a19.Character:FindFirstChild("AnimBase") if not AnimBase_1 or not AnimBase_1:FindFirstChild("Shoulder") then return end AnimBase_1.Shoulder.C1 = CFrame.new(0, 0, 0.15) task.wait(a20 / 2) if not AnimBase_1:FindFirstChild("Shoulder") then return end AnimBase_1.Shoulder.C1 = CFrame.new() end end local function Ping_2() --[[ name: Ping line: 662 upvalues: Ping_upv_1 (copy, index: 1) Modules_upv_1 (copy, index: 2) Camera_upv_1 (copy, index: 3) ClientData_upv_1 (copy, index: 4) GameEvents_upv_1 (copy, index: 5) ]] if Ping_upv_1.CanPing == true then Ping_upv_1.CanPing = false local v40 = Modules_upv_1.Config.RayCast(Camera_upv_1.CFrame.Position, Camera_upv_1.CFrame.LookVector, Ping_upv_1.MaxDistance, ClientData_upv_1.Ray_Ignore) local v41 = (v40 and (v40.Instance)) or nil local v42 = (v40 and (v40.Position)) or nil local v43 = (v40 and (v40.Normal)) or nil if v41 ~= nil then GameEvents_upv_1.PingLocation:FireServer(v42, v41.Name, v43) end task.wait(Ping_upv_1.Cooldown) Ping_upv_1.CanPing = true end end local function IsSprintBlockedByHardAction() --[[ name: IsSprintBlockedByHardAction line: 708 upvalues: WeaponDataNew_upv_1 (copy, index: 1) ]] local CurrentTool_7 = WeaponDataNew_upv_1.CurrentTool if CurrentTool_7 and CurrentTool_7.Tool then if WeaponDataNew_upv_1.QuickAction ~= true and WeaponDataNew_upv_1.ActionDebounce ~= true then if CurrentTool_7.Reloading ~= true and CurrentTool_7.Bolting ~= true and CurrentTool_7.Pumping ~= true and CurrentTool_7.SemiCooldown ~= true then local Animations_1 = CurrentTool_7.Animations and (CurrentTool_7.Animations.Client) if Animations_1 and (Animations_1.Action and Animations_1.Action.IsPlaying == true or Animations_1.Equip and Animations_1.Equip.IsPlaying == true) then return true end return false end return true end return true end return false end local function CastBulletRay(a21) --[[ name: CastBulletRay line: 508 upvalues: ClientData_upv_1 (copy, index: 1) Character_upv_1 (copy, index: 2) Camera_upv_1 (copy, index: 3) WeaponDataNew_upv_1 (copy, index: 4) Modules_upv_1 (copy, index: 5) ResolveKnifeBarricadeHit (copy, index: 6) Player_upv_1 (copy, index: 7) GameEvents_upv_1 (copy, index: 8) Services_upv_1 (copy, index: 9) ]] ClientData_upv_1.Ray_Ignore = {Character_upv_1, Camera_upv_1} local v44 = Vector3.new() if WeaponDataNew_upv_1.CurrentTool and WeaponDataNew_upv_1.CurrentTool.Tool:GetAttribute("Class") ~= "Knife" then v44 = Vector3.new(math.rad(math.random(-WeaponDataNew_upv_1.CurrentTool.Settings.MinSpread * 10, WeaponDataNew_upv_1.CurrentTool.Settings.MinSpread * 10) / 10), math.rad(math.random(-WeaponDataNew_upv_1.CurrentTool.Settings.MinSpread * 10, WeaponDataNew_upv_1.CurrentTool.Settings.MinSpread * 10) / 10), math.rad(math.random(-WeaponDataNew_upv_1.CurrentTool.Settings.MinSpread * 10, WeaponDataNew_upv_1.CurrentTool.Settings.MinSpread * 10) / 10)) if WeaponDataNew_upv_1.CurrentTool.Aiming == false then v44 = Vector3.new(math.rad(math.random(-WeaponDataNew_upv_1.CurrentTool.Settings.MaxSpread * 10, WeaponDataNew_upv_1.CurrentTool.Settings.MaxSpread * 10) / 10), math.rad(math.random(-WeaponDataNew_upv_1.CurrentTool.Settings.MaxSpread * 10, WeaponDataNew_upv_1.CurrentTool.Settings.MaxSpread * 10) / 10), math.rad(math.random(-WeaponDataNew_upv_1.CurrentTool.Settings.MaxSpread * 10, WeaponDataNew_upv_1.CurrentTool.Settings.MaxSpread * 10) / 10)) * ((1 - (WeaponDataNew_upv_1.CurrentTool.Settings.HipFireReduction / 100)) or 1) end end local Position_1 = Camera_upv_1.CFrame.Position local v45 = Camera_upv_1.CFrame.LookVector + v44 v44 = Modules_upv_1.Components.Player.BulletRayCast if WeaponDataNew_upv_1.CurrentTool and WeaponDataNew_upv_1.CurrentTool.Tool:GetAttribute("Class") == "Knife" then v44 = Modules_upv_1.Components.Player.KnifeRayCast end local v46, v47 = v44(Position_1, v45, a21 or 500, {Character_upv_1, Camera_upv_1}) if WeaponDataNew_upv_1.CurrentTool and WeaponDataNew_upv_1.CurrentTool.Tool:GetAttribute("Class") == "Knife" then v46 = ResolveKnifeBarricadeHit(v46) end local v49 = nil if v46 then local tbl_5 = {} tbl_5.StartPosition = Position_1 tbl_5.Direction = v45 tbl_5.EndPosition = v46.Position tbl_5.Instance = v46.Instance tbl_5.Normal = v46.Normal tbl_5.Material = v46.Material end if typeof(v47) ~= "table" then v47 = {} end for _, value_2 in pairs(v47) do Modules_upv_1.Components.HitEffect.Hit(value_2.Instance, value_2.Position, value_2.Normal, value_2.Material, WeaponDataNew_upv_1.CurrentTool.Settings, Player_upv_1) GameEvents_upv_1.Hit:FireServer(value_2, {StartPosition = Position_1, Direction = v45, EndPosition = value_2.Position, Instance = value_2.Instance, Normal = value_2.Normal, Material = value_2.Material}) end v47 = nil local v50 = nil if v46 and WeaponDataNew_upv_1.CurrentTool then local v51 = nil if Services_upv_1.CollectionService:HasTag(v46.Instance, "PlayerHitRegistration") then v51 = Modules_upv_1.Components.Player.FindHumanoidFromBulletHit(v46.Instance) if v51 and v51.Health > 0 then local _ = Services_upv_1.Players:FindFirstChild(v51.Parent.Name) or (v51.Parent) if (WeaponDataNew_upv_1.CurrentTool) and WeaponDataNew_upv_1.CurrentTool.Tool:GetAttribute("Class") == "Knife" then v45 = Modules_upv_1.Config.HeadDamage elseif Services_upv_1.CollectionService:HasTag(v46.Instance, "PlayerHead") then v45 = Modules_upv_1.Config.HeadDamage elseif Services_upv_1.CollectionService:HasTag(v46.Instance, "PlayerTorso") then v45 = WeaponDataNew_upv_1.CurrentTool.Settings.TorsoDamage elseif Services_upv_1.CollectionService:HasTag(v46.Instance, "PlayerLimb") then v45 = WeaponDataNew_upv_1.CurrentTool.Settings.LimbsDamage else local LimbsDamage_1 = WeaponDataNew_upv_1.CurrentTool.Settings.LimbsDamage warn("Missing tags") v45 = LimbsDamage_1 end else v45 = v50 end else if WeaponDataNew_upv_1.CurrentTool then if WeaponDataNew_upv_1.CurrentTool.Tool:GetAttribute("Class") ~= "Knife" then Modules_upv_1.Components.HitEffect.Hit(v46.Instance, v46.Position, v46.Normal, v46.Material, nil, Player_upv_1) else Modules_upv_1.Components.HitEffect.Hit(v46.Instance, v46.Position, v46.Normal, v46.Material, true, Player_upv_1) end GameEvents_upv_1.Hit:FireServer(v46, v49) end v45 = v50 end if WeaponDataNew_upv_1.CurrentTool and WeaponDataNew_upv_1.CurrentTool.Tool:GetAttribute("Class") == "Knife" then WeaponDataNew_upv_1.CurrentTool.Model.Handle:FindFirstChild("Hit"):Play() WeaponDataNew_upv_1:ServerSoundCue("Hit", true, WeaponDataNew_upv_1.CurrentTool.Model.Name) end else v45 = v50 end if not WeaponDataNew_upv_1.CurrentTool then return end GameEvents_upv_1.Damage:FireServer(v47, v45, WeaponDataNew_upv_1.CurrentTool.Model.Name, v49) end local function Knife() --[[ name: Knife line: 739 upvalues: WeaponDataNew_upv_1 (copy, index: 1) u4 (ref, index: 2) CastBulletRay (copy, index: 3) Modules_upv_1 (copy, index: 4) ]] if not WeaponDataNew_upv_1.CurrentTool then return end if WeaponDataNew_upv_1.ActionDebounce == false and WeaponDataNew_upv_1.CurrentTool.Animations.Client.Action then WeaponDataNew_upv_1.ActionDebounce = true u4() if not (WeaponDataNew_upv_1.CurrentTool.Animations.Client.Action.IsPlaying) then WeaponDataNew_upv_1:Action("Knife") CastBulletRay(Modules_upv_1.Config.KnifeDistance) end task.wait(Modules_upv_1.Config.KnifeCooldown / 1.5) WeaponDataNew_upv_1.ActionDebounce = false end end local function Recoil() --[[ name: Recoil line: 635 upvalues: WeaponDataNew_upv_1 (copy, index: 1) Runtime_upv_1 (copy, index: 2) Modules_upv_1 (copy, index: 3) Helpers_upv_1 (copy, index: 4) Camera_upv_1 (copy, index: 5) ClientData_upv_1 (copy, index: 6) ]] task.spawn( function() --[[ line: 636 upvalues: WeaponDataNew_upv_1 (copy, index: 1) Runtime_upv_1 (copy, index: 2) Modules_upv_1 (copy, index: 3) Helpers_upv_1 (copy, index: 4) Camera_upv_1 (copy, index: 5) ClientData_upv_1 (copy, index: 6) ]] if WeaponDataNew_upv_1.CurrentTool and WeaponDataNew_upv_1.CurrentTool.Settings then Runtime_upv_1.CameraShake:Shake(Modules_upv_1.CShakeModule.Presets.Bullet) local v52 = WeaponDataNew_upv_1.CurrentTool.Settings.HRecoil * math.random(-1, 1) local v53 = CFrame.Angles((WeaponDataNew_upv_1.CurrentTool.Settings.VRecoil * Modules_upv_1.Config.RecoilMultiplier) * 1e-05, v52 * 1e-05, 0) if Helpers_upv_1.IsFirstPersonSpectateCameraActive() ~= true then Camera_upv_1.CFrame = Camera_upv_1.CFrame * v53 end if WeaponDataNew_upv_1.CurrentTool.Aiming ~= true then ClientData_upv_1.Recoil = CFrame.Angles(0, v52 * 1e-05, 0) * CFrame.new(0, 0, -0.8) else ClientData_upv_1.Recoil = CFrame.Angles(0, v52 * 1e-05, 0) * CFrame.new(0, 0, -0.15) end end WeaponDataNew_upv_1:Shoot() end ) if not WeaponDataNew_upv_1.CurrentTool or not WeaponDataNew_upv_1.CurrentTool.Model then return end Modules_upv_1.Components.Weapon.MuzzleShootEffect(WeaponDataNew_upv_1.CurrentTool.Model) end local function StartQuickThrowHold() --[[ name: StartQuickThrowHold line: 855 upvalues: WeaponAction_upv_1 (copy, index: 1) Player_upv_1 (copy, index: 2) WeaponDataNew_upv_1 (copy, index: 3) u5 (ref, index: 4) SetThrowablePreviewBridgeState (copy, index: 5) SyncThrowablePreviewState (copy, index: 6) ]] if WeaponAction_upv_1.QuickThrowHoldActive == true then return end if Player_upv_1.ServerData:GetAttribute("Alive") == true then local v54 = WeaponDataNew_upv_1.Tools and (WeaponDataNew_upv_1.Tools.Throwable) local v55 if (v54) and (v54.Tool) and v54.Tool:GetAttribute("Class") == "Throwable" then v55 = (tonumber(v54.Tool:GetAttribute("Amount")) or 0) > 0 else v55 = false end if v55 ~= true then return end WeaponAction_upv_1.QuickThrowPreviousWeaponIndex = ((WeaponDataNew_upv_1.CurrentToolIndex ~= 4) and (WeaponDataNew_upv_1.CurrentToolIndex)) or (WeaponAction_upv_1.LastNonThrowableWeaponIndex) if WeaponDataNew_upv_1.CurrentToolIndex ~= 4 then u5(4) end local CurrentTool_8 = WeaponDataNew_upv_1.CurrentTool local v56 if (CurrentTool_8) and (CurrentTool_8.Tool) and CurrentTool_8.Tool:GetAttribute("Class") == "Throwable" then v56 = (tonumber(CurrentTool_8.Tool:GetAttribute("Amount")) or 0) > 0 else v56 = false end if v56 == true then WeaponDataNew_upv_1.ThrowableSnapshot = nil WeaponDataNew_upv_1.QuickAction = true WeaponAction_upv_1.QuickThrowHoldActive = true WeaponAction_upv_1.ThrowableRecoveryActive = false SyncThrowablePreviewState() SyncThrowablePreviewState() else WeaponAction_upv_1.QuickThrowPreviousWeaponIndex = 0 SetThrowablePreviewBridgeState(false) WeaponDataNew_upv_1.ThrowableSnapshot = nil end end end local function CaptureThrowableThrowSnapshot() --[[ name: CaptureThrowableThrowSnapshot line: 181 upvalues: WeaponDataNew_upv_1 (copy, index: 1) Modules_upv_1 (copy, index: 2) Character_upv_1 (copy, index: 3) Camera_upv_1 (copy, index: 4) PlayerGui_upv_1 (copy, index: 5) ]] local CurrentTool_9 = WeaponDataNew_upv_1.CurrentTool if CurrentTool_9 and CurrentTool_9.Tool and CurrentTool_9.Tool:GetAttribute("Class") == "Throwable" then local BuildClientThrowData_1 = Modules_upv_1.Throwable.BuildClientThrowData local Crosshair_1 = PlayerGui_upv_1.Crosshair local Model_1 = CurrentTool_9.Model local Model_2 = CurrentTool_9.Model local tbl_6 = {Character_upv_1, Camera_upv_1} if WeaponDataNew_upv_1.CameraModel then table.insert(tbl_6, WeaponDataNew_upv_1.CameraModel) end if Model_2 then table.insert(tbl_6, Model_2) end local v57 = BuildClientThrowData_1(Character_upv_1, Camera_upv_1, Crosshair_1, Model_1, tbl_6) if v57 then local tbl_7 = {ThrowData = 0, StartPosition = 0, ViewDirection = 0} tbl_7.ToolName = CurrentTool_9.Tool.Name tbl_7.CameraPosition = v57.CameraPosition tbl_7.ViewDirection = v57.ViewDirection or (v57.Direction) tbl_7.StartPosition = v57.Origin tbl_7.ThrowData = v57 WeaponDataNew_upv_1.ThrowableSnapshot = tbl_7 return tbl_7 end WeaponDataNew_upv_1.ThrowableSnapshot = nil return nil end WeaponDataNew_upv_1.ThrowableSnapshot = nil return nil end u6 = function() --[[ line: 910 upvalues: WeaponDataNew_upv_1 (copy, index: 1) u4 (ref, index: 2) SetThrowablePreviewBridgeState (copy, index: 3) CaptureThrowableThrowSnapshot (copy, index: 4) WeaponAction_upv_1 (copy, index: 5) SyncThrowablePreviewState (copy, index: 6) ReturnToPreviousWeaponIfNeeded (copy, index: 7) ]] if not WeaponDataNew_upv_1.CurrentTool then return end if WeaponDataNew_upv_1.CurrentTool.Tool:GetAttribute("Amount") then u4() if tonumber(WeaponDataNew_upv_1.CurrentTool.Tool:GetAttribute("Amount")) > 0 then SetThrowablePreviewBridgeState(false) if CaptureThrowableThrowSnapshot() then WeaponAction_upv_1.ThrowableRecoveryActive = true SyncThrowablePreviewState() WeaponDataNew_upv_1:Action("Throwable") ReturnToPreviousWeaponIfNeeded() WeaponAction_upv_1.ThrowableRecoveryActive = false SyncThrowablePreviewState() SetThrowablePreviewBridgeState(false) WeaponDataNew_upv_1.ThrowableSnapshot = nil else WeaponDataNew_upv_1.ThrowableSnapshot = nil return end end end end u3 = function() --[[ line: 974 upvalues: WeaponAction_upv_1 (copy, index: 1) WeaponDataNew_upv_1 (copy, index: 2) Modules_upv_1 (copy, index: 3) Script_upv_1 (copy, index: 4) ScheduleBufferedADSRetry (copy, index: 5) ServerFolder_upv_1 (copy, index: 6) Player_upv_1 (copy, index: 7) API_upv_1 (copy, index: 8) GameEvents_upv_1 (copy, index: 9) u7 (ref, index: 10) Services_upv_1 (copy, index: 11) PlayerSettings_upv_1 (copy, index: 12) ]] local v58 = os.clock() < (WeaponAction_upv_1.ADSUnlockAt or 0) local v59 = nil if v58 ~= true then local v60 = (WeaponDataNew_upv_1 ~= nil) and ((WeaponDataNew_upv_1.IsWeaponPresentationReady ~= nil) and (WeaponDataNew_upv_1:IsWeaponPresentationReady() == true)) local v61, v62 = nil, nil if v60 == true then v61 = WeaponDataNew_upv_1.CurrentTool if v61 and v61.Tool and (v61.Tool:GetAttribute("Class") == "Primary" or v61.Tool:GetAttribute("Class") == "Secondary") and (ServerFolder_upv_1:GetAttribute("Phase") == "Round Started" or ServerFolder_upv_1:GetAttribute("Phase") == "Preparation" or ServerFolder_upv_1:GetAttribute("Phase") == "Round Ended") and v61.Bolting ~= true and Player_upv_1.ServerData:GetAttribute("Alive") == true then local v63 = nil if (WeaponAction_upv_1.SwapGeneration or 0) > 0 then local v64 = nil if Script_upv_1:GetAttribute("SwapInProgress") == true then WeaponAction_upv_1.BufferedADSIntent = true WeaponAction_upv_1.BufferedADSSwapGeneration = WeaponAction_upv_1.SwapGeneration or 0 v63 = WeaponDataNew_upv_1.CurrentTool local v65 if (v63) and (v63.Tool) then v65 = Modules_upv_1.WeaponSlotResolver.GetOrAssignToolSerial(v63.Tool) else v65 = "" end WeaponAction_upv_1.BufferedADSToolSerial = v65 Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") else v64 = (WeaponDataNew_upv_1 ~= nil) and ((WeaponDataNew_upv_1.IsWeaponReady ~= nil) and (WeaponDataNew_upv_1:IsWeaponReady() == true)) if v64 ~= true then WeaponAction_upv_1.BufferedADSIntent = true WeaponAction_upv_1.BufferedADSSwapGeneration = WeaponAction_upv_1.SwapGeneration or 0 v63 = WeaponDataNew_upv_1.CurrentTool local v65 if (v63) and (v63.Tool) then v65 = Modules_upv_1.WeaponSlotResolver.GetOrAssignToolSerial(v63.Tool) else v65 = "" end WeaponAction_upv_1.BufferedADSToolSerial = v65 Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") end end end WeaponDataNew_upv_1:ADS() WeaponDataNew_upv_1.Animations.Client.Run:Play() WeaponDataNew_upv_1.Animations.Client.Run:Stop(0.02) WeaponDataNew_upv_1:SoundCue("Run", false) if API_upv_1.Movement.GetMovement() == "Running" then API_upv_1.Movement.SetMovement("Walking") end API_upv_1.Movement.UpdateWalkSpeedClient(API_upv_1.Movement.GetMovement()) GameEvents_upv_1.ChangeMovement:FireServer(API_upv_1.Movement.GetMovement()) if v61.Tool:GetAttribute("ADSType") ~= "Scope" then local tbl_8 = {CrosshairVisible = false, ScopeVisible = false, Aiming = true, CurrentState = "ADS", FOVDuration = 0.2} tbl_8.TargetFOV = PlayerSettings_upv_1:GetAttribute("FieldOfView") - (5 * v61.Settings.ADSZoom) if WeaponDataNew_upv_1 and WeaponDataNew_upv_1.SendPresentationEvent then local _ = WeaponDataNew_upv_1:SendPresentationEvent("ADSBegin", tbl_8) end u7(v61, 0.2) else local tbl_9 = {CrosshairVisible = false, ScopeVisible = true, Aiming = true, TargetFOV = 25, CurrentState = "ADS", FOVDuration = 0.2} if WeaponDataNew_upv_1 and WeaponDataNew_upv_1.SendPresentationEvent then local _ = WeaponDataNew_upv_1:SendPresentationEvent("ADSBegin", tbl_9) end u7(v61, 0.2) Modules_upv_1.Config.AddSound("Scope_In", nil, false, Services_upv_1.SoundService, false) end local v66 = (WeaponDataNew_upv_1 ~= nil) and ((WeaponDataNew_upv_1.IsWeaponReady ~= nil) and (WeaponDataNew_upv_1:IsWeaponReady() == true)) if v66 == true then WeaponAction_upv_1.BufferedADSIntent = false WeaponAction_upv_1.BufferedADSSwapGeneration = 0 WeaponAction_upv_1.BufferedADSToolSerial = "" Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") end end else WeaponAction_upv_1.BufferedADSIntent = true WeaponAction_upv_1.BufferedADSSwapGeneration = WeaponAction_upv_1.SwapGeneration or 0 v62 = WeaponDataNew_upv_1.CurrentTool local v67 if (v62) and (v62.Tool) then v67 = Modules_upv_1.WeaponSlotResolver.GetOrAssignToolSerial(v62.Tool) else v67 = "" end WeaponAction_upv_1.BufferedADSToolSerial = v67 Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") end else WeaponAction_upv_1.BufferedADSIntent = true WeaponAction_upv_1.BufferedADSSwapGeneration = WeaponAction_upv_1.SwapGeneration or 0 v59 = WeaponDataNew_upv_1.CurrentTool local v68 if (v59) and (v59.Tool) then v68 = Modules_upv_1.WeaponSlotResolver.GetOrAssignToolSerial(v59.Tool) else v68 = "" end WeaponAction_upv_1.BufferedADSToolSerial = v68 Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") ScheduleBufferedADSRetry() end end u4 = function() --[[ line: 1029 upvalues: WeaponAction_upv_1 (copy, index: 1) Script_upv_1 (copy, index: 2) WeaponDataNew_upv_1 (copy, index: 3) ServerFolder_upv_1 (copy, index: 4) Player_upv_1 (copy, index: 5) API_upv_1 (copy, index: 6) GameEvents_upv_1 (copy, index: 7) PlayerSettings_upv_1 (copy, index: 8) ApplyHoldPresentationState (copy, index: 9) Modules_upv_1 (copy, index: 10) Services_upv_1 (copy, index: 11) ]] WeaponAction_upv_1.BufferedADSIntent = false WeaponAction_upv_1.BufferedADSSwapGeneration = 0 WeaponAction_upv_1.BufferedADSToolSerial = "" Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") local CurrentTool_10 = WeaponDataNew_upv_1.CurrentTool if not CurrentTool_10 then return end if CurrentTool_10.Tool and (CurrentTool_10.Tool:GetAttribute("Class") == "Primary" or CurrentTool_10.Tool:GetAttribute("Class") == "Secondary") and (ServerFolder_upv_1:GetAttribute("Phase") == "Round Started" or ServerFolder_upv_1:GetAttribute("Phase") == "Preparation" or ServerFolder_upv_1:GetAttribute("Phase") == "Round Ended") and CurrentTool_10.Aiming == true and CurrentTool_10.Bolting ~= true and Player_upv_1.ServerData:GetAttribute("Alive") == true then WeaponDataNew_upv_1:ReleaseADS() API_upv_1.Movement.UpdateWalkSpeedClient(API_upv_1.Movement.GetMovement()) GameEvents_upv_1.ChangeMovement:FireServer(API_upv_1.Movement.GetMovement()) local tbl_10 = {CrosshairVisible = 0, ScopeVisible = false, Aiming = false, TargetFOV = 0, CurrentState = "Hold", FOVDuration = 0.2} local v69 if WeaponDataNew_upv_1.Crosshair then v69 = true if WeaponDataNew_upv_1.Crosshair.Enabled ~= true then v69 = false end else v69 = false end tbl_10.CrosshairVisible = v69 tbl_10.TargetFOV = PlayerSettings_upv_1:GetAttribute("FieldOfView") if WeaponDataNew_upv_1 and WeaponDataNew_upv_1.SendPresentationEvent then local _ = WeaponDataNew_upv_1:SendPresentationEvent("ADSEnd", tbl_10) end ApplyHoldPresentationState(0.2) if CurrentTool_10.Tool:GetAttribute("ADSType") ~= "Scope" then return end Modules_upv_1.Config.AddSound("Scope_Out", nil, false, Services_upv_1.SoundService, false) end end u5 = function(a22) --[[ line: 1053 upvalues: Player_upv_1 (copy, index: 1) WeaponDataNew_upv_1 (copy, index: 2) WeaponAction_upv_1 (copy, index: 3) Script_upv_1 (copy, index: 4) u4 (ref, index: 5) ApplyHoldPresentationState (copy, index: 6) u2 (copy, index: 7) u1 (copy, index: 8) ]] if Player_upv_1.ServerData:GetAttribute("Alive") ~= true or WeaponDataNew_upv_1.CurrentToolIndex == a22 or WeaponDataNew_upv_1.QuickAction ~= false or WeaponDataNew_upv_1.Holster ~= true then return end if WeaponDataNew_upv_1.CurrentTool then WeaponAction_upv_1.SwapGeneration = (WeaponAction_upv_1.SwapGeneration or 0) + 1 Script_upv_1:SetAttribute("SwapGeneration", WeaponAction_upv_1.SwapGeneration) WeaponAction_upv_1.BufferedADSToolSerial = "" Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") WeaponAction_upv_1.ADSUnlockAt = os.clock() + 0.01 u4() WeaponAction_upv_1.BufferedADSIntent = false WeaponAction_upv_1.BufferedADSSwapGeneration = 0 WeaponAction_upv_1.BufferedADSToolSerial = "" Script_upv_1:SetAttribute("BufferedADSIntent", WeaponAction_upv_1.BufferedADSIntent == true) Script_upv_1:SetAttribute("BufferedADSSwapGeneration", WeaponAction_upv_1.BufferedADSSwapGeneration or 0) Script_upv_1:SetAttribute("BufferedADSToolSerial", WeaponAction_upv_1.BufferedADSToolSerial or "") local v70 = ({[1] = "Primary", [2] = "Secondary", [3] = "Knife", [4] = "Throwable"})[a22] if not v70 then return end if WeaponDataNew_upv_1.Tools[v70] then local v71 = nil if v70 == "Throwable" then v71 = WeaponDataNew_upv_1.Tools[v70] local v72 if (v71) and (v71.Tool) and v71.Tool:GetAttribute("Class") == "Throwable" then v72 = (tonumber(v71.Tool:GetAttribute("Amount")) or 0) > 0 else v72 = false end if v72 ~= true then return end end if WeaponDataNew_upv_1.SetReadinessState then WeaponDataNew_upv_1:SetReadinessState(true, false, false) end WeaponAction_upv_1.SwapFinalizing = true if WeaponDataNew_upv_1:SwapTools(a22) == true then ApplyHoldPresentationState(0.05) WeaponAction_upv_1.SwapFinalizing = false if a22 ~= 4 then WeaponAction_upv_1.LastNonThrowableWeaponIndex = a22 end u2(WeaponDataNew_upv_1.CurrentTool.Tool.Name) local tbl_11 = {CrosshairVisible = 0} local v73 if WeaponDataNew_upv_1.Crosshair then v73 = true if WeaponDataNew_upv_1.Crosshair.Enabled ~= true then v73 = false end else v73 = false end tbl_11.CrosshairVisible = v73 u1(tbl_11) else WeaponAction_upv_1.SwapFinalizing = false if WeaponDataNew_upv_1.SetReadinessState then local v74 = WeaponDataNew_upv_1.CurrentTool ~= nil WeaponDataNew_upv_1:SetReadinessState(false, v74, v74) end end end end end local tbl_12 = {} tbl_12.CastBulletRay = CastBulletRay tbl_12.ShootEffect = ShootEffect tbl_12.Recoil = Recoil function tbl_12.Shoot() --[[ name: Shoot line: 762 upvalues: WeaponDataNew_upv_1 (copy, index: 1) Humanoid_upv_1 (copy, index: 2) API_upv_1 (copy, index: 3) GameEvents_upv_1 (copy, index: 4) CastBulletRay (copy, index: 5) Recoil (copy, index: 6) Modules_upv_1 (copy, index: 7) u4 (ref, index: 8) ClientData_upv_1 (copy, index: 9) Services_upv_1 (copy, index: 10) Knife (copy, index: 11) u6 (ref, index: 12) ]] local v75 = (WeaponDataNew_upv_1 ~= nil) and ((WeaponDataNew_upv_1.IsWeaponReady ~= nil) and (WeaponDataNew_upv_1:IsWeaponReady() == true)) if v75 ~= true or not WeaponDataNew_upv_1.CurrentTool or WeaponDataNew_upv_1.Holster ~= true or not (Humanoid_upv_1.Health > 0) then return end local CurrentTool_11 = WeaponDataNew_upv_1.CurrentTool local v76 = CurrentTool_11.Tool:GetAttribute("Class") if v76 ~= "Primary" and v76 ~= "Secondary" then if v76 == "Knife" then Knife() elseif v76 == "Throwable" then u6() end return end local v77 = nil if math.floor(CurrentTool_11.Tool:GetAttribute("Ammo")) > 0 then if WeaponDataNew_upv_1.QuickAction ~= false or CurrentTool_11.Bolting == true or CurrentTool_11.Pumping == true or CurrentTool_11.SemiCooldown == true then return end WeaponDataNew_upv_1.Animations.Client.Run:Play() WeaponDataNew_upv_1.Animations.Client.Run:Stop(0.02) WeaponDataNew_upv_1:SoundCue("Run", false) if CurrentTool_11.Animations.Client.Inspect then CurrentTool_11.Animations.Client.Inspect:Stop() end if CurrentTool_11.Reloading == true then CurrentTool_11.ReloadCancel = true CurrentTool_11.Animations.Client.Reload:Stop() CurrentTool_11.Animations.Server.Reload:Stop() end if API_upv_1.Movement.GetMovement() == "Running" then API_upv_1.Movement.SetMovement("Walking") end if CurrentTool_11.Settings.Mode == "Semi" then if math.floor(CurrentTool_11.Tool:GetAttribute("Ammo")) > 0 then CurrentTool_11.SemiCooldown = true GameEvents_upv_1.Shoot:FireServer() for _ = 1, CurrentTool_11.Settings.Bullets do CastBulletRay() end Recoil() if CurrentTool_11.Settings.Mode ~= "Pump-Action" then task.wait(1 / ((CurrentTool_11.Settings.FireRate * Modules_upv_1.Config.FireRateMultiplier) / 60)) else WeaponDataNew_upv_1:Pump() end CurrentTool_11.SemiCooldown = false elseif CurrentTool_11.Settings.Mode == "Bolt-Action" and math.floor(CurrentTool_11.Tool:GetAttribute("Ammo")) > 0 then CurrentTool_11.SemiCooldown = true GameEvents_upv_1.Shoot:FireServer() for _ = 1, CurrentTool_11.Settings.Bullets do CastBulletRay() end Recoil() local Aiming_1 = CurrentTool_11.Aiming u4() WeaponDataNew_upv_1:Bolt() if CurrentTool_11.Tool.Name == CurrentTool_11.Tool.Name and Aiming_1 == true then ClientData_upv_1.RunningHold = false if API_upv_1.WeaponAction and API_upv_1.WeaponAction.AimDownSight then API_upv_1.WeaponAction.AimDownSight() end end CurrentTool_11.SemiCooldown = false elseif CurrentTool_11.Settings.Mode == "Auto" then while ClientData_upv_1.MouseHeld and (CurrentTool_11) and CurrentTool_11.Model ~= nil and (CurrentTool_11.Tool:GetAttribute("Ammo") > 0) and WeaponDataNew_upv_1.QuickAction == false do CurrentTool_11.SemiCooldown = true local CurrentToolID_1 = WeaponDataNew_upv_1.CurrentToolID GameEvents_upv_1.Shoot:FireServer() for _ = 1, CurrentTool_11.Settings.Bullets do CastBulletRay() end Recoil() task.wait(1 / ((CurrentTool_11.Settings.FireRate * Modules_upv_1.Config.FireRateMultiplier) / 60)) if WeaponDataNew_upv_1.CurrentToolID ~= CurrentToolID_1 then ClientData_upv_1.MouseHeld = false end CurrentTool_11.SemiCooldown = false end end elseif CurrentTool_11.Settings.Mode == "Pump-Action" and math.floor(CurrentTool_11.Tool:GetAttribute("Ammo")) > 0 then CurrentTool_11.SemiCooldown = true GameEvents_upv_1.Shoot:FireServer() for _ = 1, CurrentTool_11.Settings.Bullets do CastBulletRay() end Recoil() if CurrentTool_11.Settings.Mode ~= "Pump-Action" then task.wait(1 / ((CurrentTool_11.Settings.FireRate * Modules_upv_1.Config.FireRateMultiplier) / 60)) else WeaponDataNew_upv_1:Pump() end CurrentTool_11.SemiCooldown = false elseif CurrentTool_11.Settings.Mode == "Bolt-Action" and math.floor(CurrentTool_11.Tool:GetAttribute("Ammo")) > 0 then CurrentTool_11.SemiCooldown = true GameEvents_upv_1.Shoot:FireServer() for _ = 1, CurrentTool_11.Settings.Bullets do CastBulletRay() end Recoil() local Aiming_1 = CurrentTool_11.Aiming u4() WeaponDataNew_upv_1:Bolt() if CurrentTool_11.Tool.Name == CurrentTool_11.Tool.Name and Aiming_1 == true then ClientData_upv_1.RunningHold = false if API_upv_1.WeaponAction and API_upv_1.WeaponAction.AimDownSight then API_upv_1.WeaponAction.AimDownSight() end end CurrentTool_11.SemiCooldown = false elseif CurrentTool_11.Settings.Mode == "Auto" then while ClientData_upv_1.MouseHeld and (CurrentTool_11) and CurrentTool_11.Model ~= nil and (CurrentTool_11.Tool:GetAttribute("Ammo") > 0) and WeaponDataNew_upv_1.QuickAction == false do CurrentTool_11.SemiCooldown = true local CurrentToolID_1 = WeaponDataNew_upv_1.CurrentToolID GameEvents_upv_1.Shoot:FireServer() for _ = 1, CurrentTool_11.Settings.Bullets do CastBulletRay() end Recoil() task.wait(1 / ((CurrentTool_11.Settings.FireRate * Modules_upv_1.Config.FireRateMultiplier) / 60)) if WeaponDataNew_upv_1.CurrentToolID ~= CurrentToolID_1 then ClientData_upv_1.MouseHeld = false end CurrentTool_11.SemiCooldown = false end end else v77 = CurrentTool_11.Model:FindFirstChild("Handle") if not v77 then return end Modules_upv_1.Components.Weapon.AddSFX(Services_upv_1.ReplicatedStorage.Config.Audio.GunClick, v77:FindFirstChild("FirePoint"), 0.5, true) end end tbl_12.Ping = Ping_2 function tbl_12.IsInspectBlockingSprint() --[[ name: IsInspectBlockingSprint line: 677 upvalues: WeaponDataNew_upv_1 (copy, index: 1) ]] local CurrentTool_12 = WeaponDataNew_upv_1.CurrentTool if not CurrentTool_12 then return false end local v78 = CurrentTool_12.Animations and (CurrentTool_12.Animations.Client) local v79 = v78 and (v78.Inspect) local v80 = false if v79 ~= nil then v80 = v79.IsPlaying == true end return v80 end function tbl_12.TryCancelInspectForSprint() --[[ name: TryCancelInspectForSprint line: 688 upvalues: WeaponDataNew_upv_1 (copy, index: 1) ]] if WeaponDataNew_upv_1 and WeaponDataNew_upv_1.CancelInspect then return WeaponDataNew_upv_1:CancelInspect() end local CurrentTool_13 = WeaponDataNew_upv_1.CurrentTool if not CurrentTool_13 then return false end local v81 = CurrentTool_13.Animations and (CurrentTool_13.Animations.Client) local v82 = v81 and (v81.Inspect) if v82 and v82.IsPlaying == true then v82:Stop() return true end return false end tbl_12.IsSprintBlockedByHardAction = IsSprintBlockedByHardAction function tbl_12.IsSprintBlockedByCurrentAction() --[[ name: IsSprintBlockedByCurrentAction line: 735 upvalues: IsSprintBlockedByHardAction (copy, index: 1) WeaponDataNew_upv_1 (copy, index: 2) ]] local v83 = true local v84 = nil if IsSprintBlockedByHardAction() ~= true then v84 = WeaponDataNew_upv_1.CurrentTool local v85 if v84 then local v86 = v84.Animations and (v84.Animations.Client) local v87 = v86 and (v86.Inspect) v85 = false if v87 ~= nil then v85 = v87.IsPlaying == true end else v85 = false end if v85 == true then v83 = true else v83 = false end end return v83 end tbl_12.Knife = Knife function tbl_12.QuickKnife() --[[ name: QuickKnife line: 753 upvalues: WeaponDataNew_upv_1 (copy, index: 1) u5 (ref, index: 2) Knife (copy, index: 3) ]] u5(3) WeaponDataNew_upv_1.QuickAction = true Knife() WeaponDataNew_upv_1.QuickAction = false u5(WeaponDataNew_upv_1.CurrentToolIndex) end tbl_12.StartQuickThrowHold = StartQuickThrowHold function tbl_12.ReleaseQuickThrowHold(a23) --[[ name: ReleaseQuickThrowHold line: 884 upvalues: WeaponAction_upv_1 (copy, index: 1) SetThrowablePreviewBridgeState (copy, index: 2) u6 (ref, index: 3) WeaponDataNew_upv_1 (copy, index: 4) u5 (ref, index: 5) ]] if WeaponAction_upv_1.QuickThrowHoldActive ~= true then return end WeaponAction_upv_1.QuickThrowHoldActive = false SetThrowablePreviewBridgeState(false) local QuickThrowPreviousWeaponIndex_1 = WeaponAction_upv_1.QuickThrowPreviousWeaponIndex WeaponAction_upv_1.QuickThrowPreviousWeaponIndex = 0 if a23 ~= true then WeaponDataNew_upv_1.ThrowableSnapshot = nil WeaponDataNew_upv_1.QuickAction = false else u6() end if WeaponDataNew_upv_1.QuickAction == true then WeaponDataNew_upv_1.QuickAction = false end if type(QuickThrowPreviousWeaponIndex_1) ~= "number" then return end if (QuickThrowPreviousWeaponIndex_1 >= 1) and QuickThrowPreviousWeaponIndex_1 ~= 4 then u5(QuickThrowPreviousWeaponIndex_1) end end tbl_12.TacticalThrow = u6 function tbl_12.QuickThrow() --[[ name: QuickThrow line: 931 upvalues: StartQuickThrowHold (copy, index: 1) ]] StartQuickThrowHold() end function tbl_12.Reload() --[[ name: Reload line: 935 upvalues: WeaponDataNew_upv_1 (copy, index: 1) Modules_upv_1 (copy, index: 2) u4 (ref, index: 3) API_upv_1 (copy, index: 4) ]] local v88 = (WeaponDataNew_upv_1 ~= nil) and ((WeaponDataNew_upv_1.IsWeaponReady ~= nil) and (WeaponDataNew_upv_1:IsWeaponReady() == true)) if v88 ~= true then return end if WeaponDataNew_upv_1.CurrentTool then if WeaponDataNew_upv_1.CurrentTool.Animations then if WeaponDataNew_upv_1.CurrentTool.Animations.Client.Reload == nil or not (WeaponDataNew_upv_1.CurrentTool.Tool:GetAttribute("StoredAmmo") > 0) or not (math.floor(WeaponDataNew_upv_1.CurrentTool.Tool:GetAttribute("Ammo")) < WeaponDataNew_upv_1.CurrentTool.Settings.Ammo) or WeaponDataNew_upv_1.CurrentTool.Reloading == true or WeaponDataNew_upv_1.QuickAction ~= false or WeaponDataNew_upv_1.CurrentTool.Bolting == true or WeaponDataNew_upv_1.CurrentTool.Pumping == true then return end u4() if WeaponDataNew_upv_1.CurrentTool.Settings.ReloadType == 1 then if API_upv_1.Movement.GetMovement() == "Running" then API_upv_1.Movement.SetMovement("Walking") end WeaponDataNew_upv_1:Reload() elseif WeaponDataNew_upv_1.CurrentTool.Settings.ReloadType == 2 then for _ = 1, math.clamp(WeaponDataNew_upv_1.CurrentTool.Settings.Ammo - math.floor(WeaponDataNew_upv_1.CurrentTool.Tool:GetAttribute("Ammo")), 0, math.floor(WeaponDataNew_upv_1.CurrentTool.Tool:GetAttribute("StoredAmmo"))) do if WeaponDataNew_upv_1.CurrentTool.Tool:GetAttribute("StoredAmmo") and WeaponDataNew_upv_1.CurrentTool.Tool:GetAttribute("StoredAmmo") > 0 and math.floor(WeaponDataNew_upv_1.CurrentTool.Tool:GetAttribute("Ammo")) < WeaponDataNew_upv_1.CurrentTool.Settings.Ammo and WeaponDataNew_upv_1.CurrentTool.Reloading ~= true and WeaponDataNew_upv_1.QuickAction == false and WeaponDataNew_upv_1.CurrentTool.Bolting ~= true and WeaponDataNew_upv_1.CurrentTool.Pumping ~= true then WeaponDataNew_upv_1:Reload() end if WeaponDataNew_upv_1.CurrentTool.ReloadCancel == true then break else continue end end end else warn(Modules_upv_1.Utility.formatWarnInstanceIsNil("WeaponDataNew.CurrentTool (type: table)", "Animations", "Failed to reload because Animations is nil")) end else warn(Modules_upv_1.Utility.formatWarnInstanceIsNil("WeaponDataNew (type: table)", "CurrentTool", "Failed to reload because CurrentTool is nil")) end end tbl_12.AimDownSight = u3 tbl_12.AimDownSightRelease = u4 tbl_12.SwapWeapon = u5 function tbl_12.ApplyConfirmedWeaponSlot(a24) --[[ name: ApplyConfirmedWeaponSlot line: 77 upvalues: Modules_upv_1 (copy, index: 1) WeaponDataNew_upv_1 (copy, index: 2) u2 (copy, index: 3) ]] if typeof(a24) ~= "table" then return end local Slot_1 = a24.Slot if typeof(Slot_1) ~= "string" then return end local v89 = Modules_upv_1.WeaponSlotResolver.GetIndexFromClass(Slot_1) if not v89 then return end local Tools_1 = WeaponDataNew_upv_1.Tools and (WeaponDataNew_upv_1.Tools[Slot_1]) if not Tools_1 then return end if Tools_1.Tool and Tools_1.Model and (typeof(a24.ToolName) ~= "string" or a24.ToolName == "" or Tools_1.Tool.Name == a24.ToolName) then local CurrentTool_14 = WeaponDataNew_upv_1.CurrentTool local _ = CurrentTool_14 and (WeaponDataNew_upv_1.CurrentTool.Tool and (Modules_upv_1.WeaponSlotResolver.GetToolSerial(WeaponDataNew_upv_1.CurrentTool.Tool))) local v90 = Modules_upv_1.WeaponSlotResolver.GetOrAssignToolSerial(Tools_1.Tool) if typeof(a24.ToolSerial) == "string" and a24.ToolSerial ~= "" then v90 = a24.ToolSerial end if WeaponDataNew_upv_1.CurrentToolIndex ~= v89 or CurrentTool_14 ~= v90 then WeaponDataNew_upv_1:SwapTools(v89, true) elseif WeaponDataNew_upv_1.EnsureCurrentToolPresentation then WeaponDataNew_upv_1:EnsureCurrentToolPresentation() end if not Tools_1.Tool then return end u2(Tools_1.Tool.Name) end end tbl_12.SetThrowablePreviewBridgeState = SetThrowablePreviewBridgeState tbl_12.SyncThrowablePreviewState = SyncThrowablePreviewState function tbl_12.IsThrowableAvailable(a25) --[[ name: IsThrowableAvailable line: 118 ]] if a25 and a25.Tool then if a25.Tool:GetAttribute("Class") ~= "Throwable" then return false end local v91 = (tonumber(a25.Tool:GetAttribute("Amount")) or 0) > 0 return v91 end return false end tbl_12.resolveEquippedCharacterWeaponModel = resolveEquippedCharacterWeaponModel return tbl_12 end return tbl_1