-- ModuleScript CharacterController (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_upv_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_1 = Refs_1.Humanoid local Camera_upv_1 = Refs_1.Camera local Script_upv_1 = Refs_1.Script local GameEvents_upv_1 = Refs_1.GameEvents local ClientData_upv_1 = State_upv_1.ClientData local WeaponDataNew_upv_1 = State_upv_1.WeaponDataNew local Presentation_upv_1 = State_upv_1.Presentation local Character_upv_2 = State_upv_1.Character local Helpers_upv_1 = State_upv_1.Helpers local function IsInitialEquipReady() --[[ name: IsInitialEquipReady line: 34 upvalues: Script_upv_1 (copy, index: 1) ]] local v1 = (Script_upv_1:GetAttribute("InitialEquipReady") == true) and ((Script_upv_1:GetAttribute("WeaponReady") == true) and (Script_upv_1:GetAttribute("SwapInProgress") ~= true)) return v1 end local function RunWhenInitialEquipReady(a2) --[[ name: RunWhenInitialEquipReady line: 40 ]] task.spawn(function() end) end local function ClearCacheCamera() --[[ name: ClearCacheCamera line: 26 upvalues: Camera_upv_1 (copy, index: 1) ]] for _, value_1 in pairs(Camera_upv_1:GetChildren()) do if value_1.Name == "HeadBase" then continue end if value_1:IsA("Model") then value_1:Destroy() end end end local function CastClimbRay() --[[ name: CastClimbRay line: 110 upvalues: Modules_upv_1 (copy, index: 1) Camera_upv_1 (copy, index: 2) Character_upv_1 (copy, index: 3) Services_upv_1 (copy, index: 4) ]] local v2 = Modules_upv_1.Components.Player.ClimbRayCast(Camera_upv_1.CFrame.Position, Camera_upv_1.CFrame.LookVector, 5, {Character_upv_1, Camera_upv_1}) if v2 and v2.Instance and Services_upv_1.CollectionService:HasTag(v2.Instance, "Climb") then return true end return false end local function GetActionPositions(a3, a4) --[[ name: GetActionPositions line: 118 upvalues: Character_upv_1 (copy, index: 1) ]] local v3 = a4.Position + (a4.CFrame.LookVector * 1) - Vector3.new(0, 0.5, 0) local v4 = a4.Position - (a4.CFrame.LookVector * 1) - Vector3.new(0, 0.5, 0) local tbl_2 = {} if (Character_upv_1.PrimaryPart.Position - v3).Magnitude < (Character_upv_1.PrimaryPart.Position - v4).Magnitude then tbl_2.Start = v3 tbl_2.End = v4 - (a4.CFrame.LookVector * 1) else tbl_2.Start = v4 tbl_2.End = v3 + (a4.CFrame.LookVector * 1) end return tbl_2 end local function CastVaultRay() --[[ name: CastVaultRay line: 134 upvalues: Modules_upv_1 (copy, index: 1) Camera_upv_1 (copy, index: 2) Character_upv_1 (copy, index: 3) Services_upv_1 (copy, index: 4) GetActionPositions (copy, index: 5) Player_upv_1 (copy, index: 6) GameEvents_upv_1 (copy, index: 7) WeaponDataNew_upv_1 (copy, index: 8) ]] local v5 = Modules_upv_1.Components.Player.VaultRayCast(Camera_upv_1.CFrame.Position, Camera_upv_1.CFrame.LookVector, Modules_upv_1.Config.DefaultVaultDistance, {Character_upv_1, Camera_upv_1}) if not v5 or not v5.Instance or not Services_upv_1.CollectionService:HasTag(v5.Instance, "Window") or not ((v5.Instance.Position - Character_upv_1.PrimaryPart.Position).Magnitude <= Modules_upv_1.Config.VaultPromptDistance) then return end if v5.Instance:GetAttribute("CanVault") == true then local v6 = GetActionPositions(Player_upv_1, v5.Instance) local v7 = v6.End - v6.Start local v8 = Vector3.new(v7.X, 0, v7.Z) if v8.Magnitude <= 0.001 then local _ = v5.Instance.CFrame.LookVector v8 = Vector3.new(v5.Instance.CFrame.LookVector.X, 0, v5.Instance.CFrame.LookVector.Z) end if v8.Magnitude <= 0.001 then v8 = Vector3.new(0, 0, -1) else v8 = v8.Unit end local v9 = CFrame.lookAt(v6.Start, v6.Start + v8) local v10 = CFrame.lookAt(v6.End, v6.End + v8) GameEvents_upv_1:WaitForChild("VaultSync"):FireServer({EntryDuration = 0.25, CrossDuration = 0.35, Window = v5.Instance, StartCFrame = v9, EndCFrame = v10}) WeaponDataNew_upv_1:Vault() Character_upv_1.PrimaryPart.Anchored = true Modules_upv_1.Components.Menu.TweenCreate(Character_upv_1.PrimaryPart, {CFrame = v9}, Enum.EasingStyle.Linear, 0.25, true) Modules_upv_1.Components.Menu.TweenCreate(Character_upv_1.PrimaryPart, {CFrame = v10}, Enum.EasingStyle.Linear, 0.35, true) Character_upv_1.PrimaryPart.Anchored = false end end local function onHumanoidDied() --[[ name: onHumanoidDied line: 198 upvalues: API_upv_1 (copy, index: 1) ClientData_upv_1 (copy, index: 2) ]] API_upv_1.Movement.ResetPendingSprintExitState() ClientData_upv_1.GameHUD.ScopeUI.Visible = false end Character_upv_1:SetAttribute("Barricading", false) Script_upv_1.Destroying:Connect( function() --[[ line: 214 upvalues: Character_upv_2 (copy, index: 1) API_upv_1 (copy, index: 2) ClientData_upv_1 (copy, index: 3) State_upv_1 (copy, index: 4) ClearCacheCamera (copy, index: 5) ]] Character_upv_2.RoundEndCleanupTriggered = true API_upv_1.Movement.ResetPendingSprintExitState() ClientData_upv_1.PlayerHUD.Visible = false ClientData_upv_1.MobileControlsMenu.Visible = false State_upv_1.WeaponAction.QuickThrowHoldActive = false State_upv_1.WeaponAction.ThrowableRecoveryActive = false API_upv_1.WeaponAction.SetThrowablePreviewBridgeState(false) ClearCacheCamera() end ) Refs_1.ServerFolder:GetAttributeChangedSignal("Phase"):Connect( function() --[[ line: 225 upvalues: Character_upv_2 (copy, index: 1) ClientData_upv_1 (copy, index: 2) API_upv_1 (copy, index: 3) ]] if Character_upv_2.RoundEndCleanupTriggered == true then return end if ClientData_upv_1.MobileControlsMenu then ClientData_upv_1.MobileControlsMenu.Visible = API_upv_1.Input.CanShowMobileControlsMenu() if ClientData_upv_1.MobileControlsMenu.Visible then API_upv_1.Input.UpdateClawMode() API_upv_1.Input.RefreshMobileControlsPosition() end end end ) GameEvents_upv_1.SwapWeapon.OnClientEvent:Connect( function(a5, a6) --[[ line: 238 upvalues: API_upv_1 (copy, index: 1) WeaponDataNew_upv_1 (copy, index: 2) Presentation_upv_1 (copy, index: 3) Character_upv_2 (copy, index: 4) Script_upv_1 (copy, index: 5) ]] if a5 == "Equip" then API_upv_1.WeaponAction.SwapWeapon(a6.Index) elseif a5 == "Confirm" then WeaponDataNew_upv_1:ConfirmServerEquip(a6 or {}) API_upv_1.WeaponAction.ApplyConfirmedWeaponSlot(a6 or {}) elseif a5 == "Reject" then WeaponDataNew_upv_1:RejectPendingEquip(a6) API_upv_1.WeaponAction.ApplyConfirmedWeaponSlot(a6 or {}) elseif a5 == "SetUp" then task.defer( function() --[[ line: 248 upvalues: Presentation_upv_1 (copy, index: 1) Character_upv_2 (copy, index: 2) Script_upv_1 (copy, index: 3) API_upv_1 (copy, index: 4) ]] if Presentation_upv_1.InitialWeaponEquipCompleted == true then return end if Character_upv_2.RoundEndCleanupTriggered ~= true then local v11 = (Script_upv_1:GetAttribute("InitialEquipReady") == true) and ((Script_upv_1:GetAttribute("WeaponReady") == true) and (Script_upv_1:GetAttribute("SwapInProgress") ~= true)) if v11 == true or API_upv_1.Presentation.TryInitialWeaponEquip("server setup") == true then Presentation_upv_1.InitialWeaponEquipCompleted = true Presentation_upv_1.InitialWeaponEquipVisualized = true end end end ) end end ) GameEvents_upv_1.SoundCue.OnClientEvent:Connect( function(a7, a8, a9, a10) --[[ line: 265 upvalues: API_upv_1 (copy, index: 1) Player_upv_1 (copy, index: 2) ]] if a7:IsA("Model") then local v12 = a7.HumanoidRootPart:FindFirstChild(a8) if v12 == nil and a10 then v12 = (not a7:FindFirstChild(a10)) or (a7:FindFirstChild(a10).Handle:FindFirstChild(a8)) end if not v12 or a7 == Player_upv_1 then return end if a9 ~= true then v12:Stop() else v12:Play() end elseif a7.Character then if a7.Character:FindFirstChild("HumanoidRootPart") then local v13 = a7.Character.HumanoidRootPart:FindFirstChild(a8) if v13 == nil and a10 then local v14 = API_upv_1.WeaponAction.resolveEquippedCharacterWeaponModel(a7.Character, a10) local v15 = v14 and (v14:FindFirstChild("Handle", true)) v13 = v15 and v15:FindFirstChild(a8) end if not v13 or a7 == Player_upv_1 then return end if a9 ~= true then v13:Stop() else v13:Play() end end end end ) GameEvents_upv_1.Hit.OnClientEvent:Connect( function(a11, a12, a13, a14, a15, a16) --[[ line: 301 upvalues: Player_upv_1 (copy, index: 1) Modules_upv_1 (copy, index: 2) ]] if a11 == Player_upv_1 then return end Modules_upv_1.Components.HitEffect.Hit(a12, a13, a14, a15, a16, a11) end ) GameEvents_upv_1.HitFromServer.OnClientEvent:Connect( function(a17, a18, a19, a20, a21, a22) --[[ line: 308 upvalues: Modules_upv_1 (copy, index: 1) ]] Modules_upv_1.Components.HitEffect.Hit(a18, a19, a20, a21, a22, a17) end ) GameEvents_upv_1.Shoot.OnClientEvent:Connect( function(a23, a24) --[[ line: 312 upvalues: API_upv_1 (copy, index: 1) ]] API_upv_1.WeaponAction.ShootEffect(a23, a24) end ) GameEvents_upv_1.PingLocation.OnClientEvent:Connect( function(a25, a26, a27, a28) --[[ line: 316 upvalues: Player_upv_1 (copy, index: 1) Services_upv_1 (copy, index: 2) Modules_upv_1 (copy, index: 3) ]] if Player_upv_1.Team ~= a25.Team then return end local v17 = workspace.Map_Cache:FindFirstChild("Ping" .. a25.Name) if v17 then v17:Destroy() end local u1 = Services_upv_1.ReplicatedStorage.Components.GameMenu.Ping:Clone() u1.Parent = workspace.Map_Cache u1.CFrame = CFrame.new(a26, a26 + a28) u1.PingFrame.Enabled = true u1.Name = "Ping" .. a25.Name u1.Beep:Play() u1.PingFrame.Pin.Player.Image = a25.ServerData:GetAttribute("ProfilePicture") u1.SurfaceGui.Circle.Size = UDim2.new(0, 0, 0, 0) u1.PingFrame.Enabled = true u1.SurfaceGui.Enabled = true Modules_upv_1.Components.Menu.TweenCreate(u1.SurfaceGui.Circle, {ImageTransparency = 1, Size = UDim2.new(1, 0, 1, 0)}, Enum.EasingStyle.Sine, 1, false) Modules_upv_1.Components.Menu.TweenCreate(u1.PingFrame, {ExtentsOffset = Vector3.new(0, 2, 0), Size = UDim2.new(0, 50, 0, 50)}, Enum.EasingStyle.Sine, 0.2, false) task.wait(0.5) pcall( function() --[[ line: 335 upvalues: Modules_upv_1 (copy, index: 1) u1 (copy, index: 2) Services_upv_1 (copy, index: 3) ]] Modules_upv_1.Components.Menu.TweenCreate(u1.PingFrame, {ExtentsOffset = Vector3.new(0, 0, 0), Size = UDim2.new(0, 25, 0, 25)}, Enum.EasingStyle.Bounce, 0.2, false) Services_upv_1.Debris:AddItem(u1, 5) end ) end ) GameEvents_upv_1.SpawnPlayer.OnClientEvent:Connect( function(a29) --[[ line: 341 upvalues: Helpers_upv_1 (copy, index: 1) Character_upv_2 (copy, index: 2) Script_upv_1 (copy, index: 3) ]] local function ApplySpawnLook() --[[ name: ApplySpawnLook line: 342 upvalues: a29 (copy, index: 1) Helpers_upv_1 (copy, index: 2) ]] local CurrentCamera_1 = workspace.CurrentCamera local v18 = a29 * Vector3.new(1, 0, 1) if (v18.Magnitude <= 0) or Helpers_upv_1.IsFirstPersonSpectateCameraActive() == true then return end CurrentCamera_1.CFrame = CFrame.new(CurrentCamera_1.CFrame.Position, CurrentCamera_1.CFrame.Position + v18.Unit) end local u2 = function() --[[ line: 354 upvalues: a29 (copy, index: 1) Helpers_upv_1 (copy, index: 2) ApplySpawnLook (copy, index: 3) ]] local CurrentCamera_2 = workspace.CurrentCamera local v19 = a29 * Vector3.new(1, 0, 1) if not (v19.Magnitude <= 0) and Helpers_upv_1.IsFirstPersonSpectateCameraActive() ~= true then CurrentCamera_2.CFrame = CFrame.new(CurrentCamera_2.CFrame.Position, CurrentCamera_2.CFrame.Position + v19.Unit) end task.defer(ApplySpawnLook) task.delay(0.1, ApplySpawnLook) end task.spawn( function() --[[ line: 41 upvalues: Character_upv_2 (copy, index: 1) Script_upv_1 (copy, index: 2) u2 (copy, index: 3) ]] for _ = 1, 30 do if Character_upv_2.RoundEndCleanupTriggered == true then return end local v20 = (Script_upv_1:GetAttribute("InitialEquipReady") == true) and ((Script_upv_1:GetAttribute("WeaponReady") == true) and (Script_upv_1:GetAttribute("SwapInProgress") ~= true)) if v20 ~= true then task.wait(0.1) continue end u2() return end u2() end ) end ) task.spawn( function() --[[ line: 361 upvalues: PlayerGui_upv_1 (copy, index: 1) ]] PlayerGui_upv_1.GameHUD.DamageFeed.Heal.ImageTransparency = 1 end ) GameEvents_upv_1.HitMarker.OnClientEvent:Connect(function(a30) --[[ line: 365 ]] end) local function onHumanoidStateChanged(a31, a32) --[[ name: onHumanoidStateChanged line: 181 upvalues: CastClimbRay (copy, index: 1) WeaponDataNew_upv_1 (copy, index: 2) ]] if a32 == Enum.HumanoidStateType.Climbing and a31 ~= Enum.HumanoidStateType.Climbing then if CastClimbRay() == true then WeaponDataNew_upv_1:HolsterWeapon(false) WeaponDataNew_upv_1.Animations.Client.Climb:Play() WeaponDataNew_upv_1.Animations.Server.Climb:Play() end return end if a32 == Enum.HumanoidStateType.Climbing or a31 ~= Enum.HumanoidStateType.Climbing or WeaponDataNew_upv_1.Holster ~= false then return end WeaponDataNew_upv_1:HolsterWeapon(true) WeaponDataNew_upv_1.Animations.Client.Climb:Stop() WeaponDataNew_upv_1.Animations.Server.Climb:Stop() end Humanoid_1.StateChanged:Connect(onHumanoidStateChanged) local function onHumanoidJumping(a33) --[[ name: onHumanoidJumping line: 203 upvalues: API_upv_1 (copy, index: 1) WeaponDataNew_upv_1 (copy, index: 2) Modules_upv_1 (copy, index: 3) ]] local v21 = API_upv_1.Movement.GetMovement() if WeaponDataNew_upv_1.Jumping ~= false or not a33 or v21 == "Proning" or v21 == "Crouching" or v21 == "Freezing" then return end WeaponDataNew_upv_1.Jumping = true task.wait(Modules_upv_1.Config.JumpCooldown) WeaponDataNew_upv_1.Jumping = false end Humanoid_1.Jumping:Connect(onHumanoidJumping) Humanoid_1.Died:Connect(onHumanoidDied) local function onBarricadingAttributeSignalChanged() --[[ name: onBarricadingAttributeSignalChanged line: 90 upvalues: Character_upv_1 (copy, index: 1) API_upv_1 (copy, index: 2) WeaponDataNew_upv_1 (copy, index: 3) ]] local v22 = Character_upv_1:GetAttribute("Barricading") if v22 == true then API_upv_1.Movement.ResetPendingSprintExitState() API_upv_1.Movement.SetMovement("Standing", false) if WeaponDataNew_upv_1.CurrentTool then WeaponDataNew_upv_1:EnterBarricadePresentation() WeaponDataNew_upv_1:HolsterWeapon(false) end WeaponDataNew_upv_1.Animations.Client.Barricade:Play() elseif v22 == false then API_upv_1.Movement.SetMovement("Standing", false) if WeaponDataNew_upv_1.CurrentTool then WeaponDataNew_upv_1:HolsterWeapon(true) WeaponDataNew_upv_1:ExitBarricadePresentation() end WeaponDataNew_upv_1.Animations.Client.Barricade:Stop() end end Character_upv_1:GetAttributeChangedSignal("Barricading"):Connect(onBarricadingAttributeSignalChanged) ClientData_upv_1.GameHUD.ScopeUI.Scope.Position = UDim2.new(0.5, State_upv_1.Runtime.ScopeSwaySin, 0.5, State_upv_1.Runtime.ScopeSwayCos + Helpers_upv_1.getGuiInset()) local tbl_3 = {} function tbl_3.CleanupClientWeaponSystem(a34) --[[ name: CleanupClientWeaponSystem line: 56 upvalues: Character_upv_2 (copy, index: 1) Presentation_upv_1 (copy, index: 2) API_upv_1 (copy, index: 3) ClientData_upv_1 (copy, index: 4) ClearCacheCamera (copy, index: 5) WeaponDataNew_upv_1 (copy, index: 6) State_upv_1 (copy, index: 7) Script_upv_1 (copy, index: 8) ]] if Character_upv_2.RoundEndCleanupTriggered == true then return end Character_upv_2.RoundEndCleanupTriggered = true Presentation_upv_1.InitialEquipRetryInProgress = false Presentation_upv_1.InitialWeaponEquipCompleted = false Presentation_upv_1.InitialWeaponEquipVisualized = false API_upv_1.Movement.ResetPendingSprintExitState() ClientData_upv_1.PlayerHUD.Visible = false ClientData_upv_1.MobileControlsMenu.Visible = false ClearCacheCamera() if WeaponDataNew_upv_1 then WeaponDataNew_upv_1.CurrentTool = nil WeaponDataNew_upv_1.CurrentToolIndex = 0 WeaponDataNew_upv_1.Reloading = false end State_upv_1.Runtime.SampledLaserTarget = nil State_upv_1.Runtime.ActiveLocalLaserWeaponModel = nil State_upv_1.WeaponAction.QuickThrowHoldActive = false State_upv_1.WeaponAction.QuickThrowPreviousWeaponIndex = 0 State_upv_1.WeaponAction.ThrowableRecoveryActive = false API_upv_1.WeaponAction.SetThrowablePreviewBridgeState(false) task.defer( function() --[[ line: 83 upvalues: Script_upv_1 (copy, index: 1) ]] if not Script_upv_1.Parent then return end Script_upv_1:Destroy() end ) end tbl_3.ClearCacheCamera = ClearCacheCamera tbl_3.CastClimbRay = CastClimbRay tbl_3.CastVaultRay = CastVaultRay function tbl_3.Vault() --[[ name: Vault line: 172 upvalues: WeaponDataNew_upv_1 (copy, index: 1) Player_upv_1 (copy, index: 2) API_upv_1 (copy, index: 3) CastVaultRay (copy, index: 4) ]] if WeaponDataNew_upv_1.Animations.Client.Vault.IsPlaying ~= false or Player_upv_1.ServerData:GetAttribute("Alive") ~= true or API_upv_1.Movement.GetMovement() == "Proning" then return end if API_upv_1.Movement.GetMovement() == "Crouching" or API_upv_1.Movement.GetMovement() == "Proning" then API_upv_1.Movement.SetMovement("Standing", false) end CastVaultRay() end return tbl_3 end return tbl_1