-- ModuleScript WeaponRuntime (via decompile) local ReplicatedStorage_1 = game:GetService("ReplicatedStorage") local tbl_1 = script:FindFirstAncestor("App") local MuzzleRig_upv_1 = require(tbl_1.Modules.Vfx.MuzzleRig) local RecoilController_upv_1 = require(tbl_1.Modules.Weapon.RecoilController) local _ = require(ReplicatedStorage_1.App.Types.WeaponTypes) local VfxProfiles_upv_1 = require(ReplicatedStorage_1.App.Config.VfxProfiles) local ViewState_upv_1 = require(ReplicatedStorage_1.App.Modules.Character.ViewState) local WeaponAim_upv_1 = require(tbl_1.Modules.Weapon.WeaponAim) local WeaponAnimator_upv_1 = require(tbl_1.Modules.Weapon.WeaponAnimator) local WeaponAudio_upv_1 = require(tbl_1.Modules.Weapon.WeaponAudio) local WeaponFireLogic_upv_1 = require(tbl_1.Modules.Weapon.WeaponFireLogic) local WeaponFrame_upv_1 = require(tbl_1.Modules.Weapon.WeaponFrame) local WeaponHud_upv_1 = require(tbl_1.Modules.Ui.WeaponHud) local WeaponLocomotion_upv_1 = require(tbl_1.Modules.Weapon.WeaponLocomotion) local WeaponReloadLogic_upv_1 = require(tbl_1.Modules.Weapon.WeaponReloadLogic) local WeaponRuntimeState_upv_1 = require(tbl_1.Types.WeaponRuntimeState) local WeaponStateMachine_upv_1 = require(tbl_1.Modules.Weapon.WeaponStateMachine) local WeaponSyncHandler_upv_1 = require(tbl_1.Modules.Weapon.WeaponSyncHandler) local WeaponTrigger_upv_1 = require(tbl_1.Modules.Weapon.WeaponTrigger) tbl_1 = {} local function attachment(a1, a2) --[[ name: attachment line: 45 ]] if not a2 then return nil end local v1 = a1:FindFirstChild(a2) if v1 and v1:IsA("Attachment") then return v1 end return nil end function tbl_1.create(a1, a2, a3, a4) --[[ name: create line: 53 upvalues: VfxProfiles_upv_1 (copy, index: 1) MuzzleRig_upv_1 (copy, index: 2) WeaponAnimator_upv_1 (copy, index: 3) WeaponAudio_upv_1 (copy, index: 4) WeaponTrigger_upv_1 (copy, index: 5) WeaponAim_upv_1 (copy, index: 6) WeaponFireLogic_upv_1 (copy, index: 7) WeaponStateMachine_upv_1 (copy, index: 8) WeaponReloadLogic_upv_1 (copy, index: 9) WeaponSyncHandler_upv_1 (copy, index: 10) WeaponFrame_upv_1 (copy, index: 11) RecoilController_upv_1 (copy, index: 12) WeaponLocomotion_upv_1 (copy, index: 13) ViewState_upv_1 (copy, index: 14) WeaponHud_upv_1 (copy, index: 15) WeaponRuntimeState_upv_1 (copy, index: 16) ]] local Handle_1 = a3:FindFirstChild("Handle") if Handle_1 and Handle_1:IsA("BasePart") then local Head_1 = a1:FindFirstChild("Head") if Head_1 and Head_1:IsA("BasePart") then local v2 = VfxProfiles_upv_1.expect(a4.vfxProfile) local muzzleAttachment_1 = a4.muzzleAttachment local v3, v4 = nil, nil if muzzleAttachment_1 then v3 = Handle_1:FindFirstChild(muzzleAttachment_1) v4 = not (v3) or not (v3:IsA("Attachment")) or v3 else v4 = nil end local tbl_upv_2 = {sequence = 0, alive = true, reloadToken = 0, reportedRaised = false, lastShotAt = 0, audio = 0, trigger = 0, magazine = 0, consecutive = 0, aim = 0, reserve = 0, state = "Unequipped", animator = 0, muzzleRig = 0, shell = 0} tbl_upv_2.character = a1 tbl_upv_2.humanoid = a2 tbl_upv_2.tool = a3 tbl_upv_2.config = a4 tbl_upv_2.profile = v2 tbl_upv_2.head = Head_1 tbl_upv_2.handle = Handle_1 tbl_upv_2.muzzle = v4 local shellAttachment_1 = a4.shellAttachment local v5 = nil if shellAttachment_1 then v5 = Handle_1:FindFirstChild(shellAttachment_1) v3 = not (v5) or not (v5:IsA("Attachment")) or v5 else v3 = nil end tbl_upv_2.shell = v3 if v4 then v3 = MuzzleRig_upv_1.create(v4, a4, v2) else v3 = nil end tbl_upv_2.muzzleRig = v3 tbl_upv_2.animator = WeaponAnimator_upv_1.create(a2, a4) tbl_upv_2.audio = WeaponAudio_upv_1.create(Handle_1, a4) tbl_upv_2.trigger = WeaponTrigger_upv_1.create(a4) tbl_upv_2.aim = WeaponAim_upv_1.create(a4) tbl_upv_2.magazine = a4.magazineSize tbl_upv_2.reserve = a4.reserveAmmo WeaponFireLogic_upv_1.bindCharacter(a1) local tbl_3 = {} function tbl_3.fireInput(a5) --[[ name: fireInput line: 105 upvalues: tbl_upv_2 (copy, index: 1) ]] if a5 then if tbl_upv_2.state == "Equipping" then return end tbl_upv_2.trigger.press() else tbl_upv_2.trigger.abort() end end function tbl_3.aimInput(a6) --[[ name: aimInput line: 115 upvalues: a4 (copy, index: 1) WeaponStateMachine_upv_1 (copy, index: 2) tbl_upv_2 (copy, index: 3) ]] if not a6 then tbl_upv_2.aim.hold(a6) end if a4.aim.supported and WeaponStateMachine_upv_1.canAim(tbl_upv_2.state) then tbl_upv_2.aim.hold(a6) end end function tbl_3.reloadInput() --[[ name: reloadInput line: 122 upvalues: WeaponReloadLogic_upv_1 (copy, index: 1) tbl_upv_2 (copy, index: 2) ]] WeaponReloadLogic_upv_1.request(tbl_upv_2) end function tbl_3.availability() --[[ name: availability line: 125 upvalues: tbl_upv_2 (copy, index: 1) WeaponStateMachine_upv_1 (copy, index: 2) a4 (copy, index: 3) ]] local v6 = tbl_upv_2.alive and ((tbl_upv_2.state ~= "Equipping") and (tbl_upv_2.state ~= "Disabled")) local _ = v6 and (WeaponStateMachine_upv_1.canFire(tbl_upv_2.state, a4.allowReloadInterrupt)) local v8 = v6 and (a4.aim.supported and (WeaponStateMachine_upv_1.canAim(tbl_upv_2.state))) local v7 = v6 and ((a4.category ~= "Melee") and (WeaponStateMachine_upv_1.canReload(tbl_upv_2.state) and (tbl_upv_2.magazine < a4.magazineSize))) return v6, v6, v7 end function tbl_3.onAmmo(a7, a8, a9) --[[ name: onAmmo line: 133 upvalues: WeaponSyncHandler_upv_1 (copy, index: 1) tbl_upv_2 (copy, index: 2) ]] WeaponSyncHandler_upv_1.ammo(tbl_upv_2, a7, a8, a9) end function tbl_3.onReloadStart(a10, a11, a12) --[[ name: onReloadStart line: 137 upvalues: WeaponSyncHandler_upv_1 (copy, index: 1) tbl_upv_2 (copy, index: 2) ]] WeaponSyncHandler_upv_1.reloadStart(tbl_upv_2, a10, a11, a12) end function tbl_3.onReject(a13) --[[ name: onReject line: 141 upvalues: WeaponSyncHandler_upv_1 (copy, index: 1) tbl_upv_2 (copy, index: 2) ]] WeaponSyncHandler_upv_1.reject(tbl_upv_2, a13) end function tbl_3.update(a14) --[[ name: update line: 145 upvalues: WeaponFrame_upv_1 (copy, index: 1) tbl_upv_2 (copy, index: 2) ]] WeaponFrame_upv_1.update(tbl_upv_2, a14) end function tbl_3.destroy() --[[ name: destroy line: 149 upvalues: tbl_upv_2 (copy, index: 1) RecoilController_upv_1 (copy, index: 2) WeaponLocomotion_upv_1 (copy, index: 3) ViewState_upv_1 (copy, index: 4) WeaponHud_upv_1 (copy, index: 5) ]] tbl_upv_2.alive = false tbl_upv_2.reloadToken = tbl_upv_2.reloadToken + 1 tbl_upv_2.state = "Unequipped" tbl_upv_2.trigger.abort() tbl_upv_2.aim.release() if tbl_upv_2.animator.has("Unequip") then tbl_upv_2.animator.stop("Idle", 0.1) tbl_upv_2.animator.stop("Aim", 0.1) tbl_upv_2.animator.restart("Unequip") task.delay(0.5, tbl_upv_2.animator.destroy) else tbl_upv_2.animator.stopAll(0.1) tbl_upv_2.animator.destroy() end tbl_upv_2.audio.destroy() local muzzleRig_1 = tbl_upv_2.muzzleRig if muzzleRig_1 then muzzleRig_1.destroy() tbl_upv_2.muzzleRig = nil end RecoilController_upv_1.setWeapon(nil) WeaponLocomotion_upv_1.setWeapon(nil) ViewState_upv_1.resetWeapon() WeaponHud_upv_1.hide() end WeaponRuntimeState_upv_1.transition(tbl_upv_2, "Equipping") tbl_upv_2.animator.play("Equip", 0.05) tbl_upv_2.animator.play("Idle", 0.15) tbl_upv_2.audio.equip() ViewState_upv_1.state.weaponOut = true RecoilController_upv_1.setWeapon(a4) WeaponLocomotion_upv_1.setWeapon(a4) WeaponHud_upv_1.show(a4) WeaponHud_upv_1.setAmmo(tbl_upv_2.magazine, tbl_upv_2.reserve) task.delay( 0.25, function() --[[ line: 189 upvalues: tbl_upv_2 (copy, index: 1) WeaponRuntimeState_upv_1 (copy, index: 2) ]] if not tbl_upv_2.alive or tbl_upv_2.state ~= "Equipping" then return end WeaponRuntimeState_upv_1.transition(tbl_upv_2, "Idle") end ) return tbl_3 end return nil end warn((("WeaponRuntime: %* has no Handle"):format(a4.id))) return nil end return tbl_1