local ReplicatedStorage_1 = game:GetService("ReplicatedStorage") local CollectionService_upv_1 = game:GetService("CollectionService") local ServerStorage_upv_1 = game:GetService("ServerStorage") local Players_upv_1 = game:GetService("Players") local CONSTANTS_upv_1 = require(ReplicatedStorage_1.Modules.CONSTANTS) local BetterDebris_upv_1 = require(ReplicatedStorage_1.Modules.BetterDebris) local ItemLibrary_upv_1 = require(ReplicatedStorage_1.Modules.ItemLibrary) local ShopLibrary_upv_1 = require(ReplicatedStorage_1.Modules.ShopLibrary) local Utility_upv_1 = require(ReplicatedStorage_1.Modules.Utility) local Maps_upv_1 = ReplicatedStorage_1.Assets.Temp.Maps local tbl_upv_1 = {} tbl_upv_1.__index = tbl_upv_1 function tbl_upv_1._new() --[[ name: _new line: 20 upvalues: tbl_upv_1 (copy, index: 1) Maps_upv_1 (copy, index: 2) ]] local v1 = setmetatable({}, tbl_upv_1) v1.TEMP_MAPS_FOLDER = Maps_upv_1 v1.OOB_DEFAULT_WARN_DELAY = 1 v1.OOB_DEFAULT_KILL_DELAY = 4 v1:_Init() return v1 end function tbl_upv_1.IsThingInWorkspace(a1, a2) --[[ name: IsThingInWorkspace line: 36 upvalues: Maps_upv_1 (copy, index: 1) ]] local v2 = a2:IsDescendantOf(workspace) or (a2:IsDescendantOf(Maps_upv_1)) return v2 end function tbl_upv_1.IsEntity(a1, a2) --[[ name: IsEntity line: 41 upvalues: CollectionService_upv_1 (copy, index: 1) ]] while a2 and a2 ~= workspace do if not (CollectionService_upv_1:HasTag(a2, "Entity")) then local _ = a2.Parent continue end return a2 end return false end function tbl_upv_1.GetEnvironmentID(a1, a2) --[[ name: GetEnvironmentID line: 53 ]] while a2 and (a2:IsDescendantOf(workspace)) do local v3 = a2:GetAttribute("EnvironmentID") if not (v3) then local _ = a2.Parent continue end return v3 end return nil end function tbl_upv_1.GetSmokeCloudBetweenPoints(a1, a2, a3) --[[ name: GetSmokeCloudBetweenPoints line: 67 upvalues: CollectionService_upv_1 (copy, index: 1) Utility_upv_1 (copy, index: 2) ]] for _, value_1 in pairs(CollectionService_upv_1:GetTagged("SmokeCloud")) do if not (Utility_upv_1:SphereLineIntersection(value_1.Position, value_1.Size.X / 2, a2, a3)) then continue end return value_1 end end function tbl_upv_1.GetSmokeCloudsInSphere(a1, a2, a3, a4, a5) --[[ name: GetSmokeCloudsInSphere line: 75 upvalues: CollectionService_upv_1 (copy, index: 1) Utility_upv_1 (copy, index: 2) ]] local tbl_2 = {} for _, value_2 in pairs(CollectionService_upv_1:GetTagged("SmokeCloud")) do if not ((value_2.Size.X / 2) + (a3 or 0) < (a2 - value_2.Position).Magnitude) and (not (a4) or not (a5) or not (a5 < Utility_upv_1:AngleBetweenVectors(a4, value_2.Position - a2))) then table.insert(tbl_2, value_2) end end return tbl_2 end function tbl_upv_1.GetEquippedItems(a1, a2, a3, a4) --[[ name: GetEquippedItems line: 94 ]] if not a2 then return {} end local tbl_3 = nil local v4 = nil for key_1, value_3 in pairs(a3) do if value_3:Get("ObjectID") == a2 then tbl_3, v4 = value_3, key_1 break end end if not tbl_3 then return {} end tbl_3 = {} for n_1 = v4, v4 + (a4 or 0) do tbl_3[a3[((n_1 - 1) % #a3) + 1]] = true end return tbl_3 end function tbl_upv_1.KnockbackTaggedParts(a1, a2, a3, a4, a5, a6, a7, a8) --[[ name: KnockbackTaggedParts line: 125 upvalues: CollectionService_upv_1 (copy, index: 1) Utility_upv_1 (copy, index: 2) ]] local v5 = OverlapParams.new() v5.FilterType = Enum.RaycastFilterType.Include v5.FilterDescendantsInstances = CollectionService_upv_1:GetTagged("Knockbackable") for _, value_4 in pairs(workspace:GetPartBoundsInRadius(a3, a4, v5)) do if value_4.Anchored or value_4.Position:FuzzyEq(a3) then continue end if not (a7) or not (a8) or not (a8 < Utility_upv_1:AngleBetweenVectors(a7, value_4.Position - a3)) then if not (value_4:HasTag("RaycastWhitelist" .. (a2 or ""))) then continue end if value_4:HasTag("TrowelBrick") then value_4.CustomPhysicalProperties = PhysicalProperties.new(0.1, value_4.CurrentPhysicalProperties.Friction, value_4.CurrentPhysicalProperties.Elasticity) end value_4.Velocity = a6 or ((value_4.Position - a3).Unit * a5 * (1 - ((value_4.Position - a3).Magnitude / a4))) end end end function tbl_upv_1.GetRaycastRedirection(a1, a2, a3, a4, a5, a6) --[[ name: GetRaycastRedirection line: 149 upvalues: Utility_upv_1 (copy, index: 1) ]] if a6 <= 0 then return a4 end local tbl_upv_4 = {} a1:GetEntitiesWithinSphere( a2, a3, a5, 128, false, nil, nil, nil, function(a7) --[[ line: 156 upvalues: a5 (copy, index: 1) Utility_upv_1 (copy, index: 2) a4 (copy, index: 3) tbl_upv_4 (copy, index: 4) ]] local LookVector_1 = CFrame.new(a5, a7.RootPart.Position).LookVector table.insert(tbl_upv_4, {Entity = a7, LookDir = LookVector_1, Angle = Utility_upv_1:AngleBetweenVectors(a4, LookVector_1)}) end ) table.sort( tbl_upv_4, function(a8, a9) --[[ line: 167 ]] return a8.Angle < a9.Angle end ) return (((tbl_upv_4[1]) and (tbl_upv_4[1].Angle < a6)) and (tbl_upv_4[1].LookDir)) or a4 end function tbl_upv_1.SwitchingWeaponsMakesSense(a1, a2, a3) --[[ name: SwitchingWeaponsMakesSense line: 174 upvalues: ItemLibrary_upv_1 (copy, index: 1) ShopLibrary_upv_1 (copy, index: 2) CONSTANTS_upv_1 (copy, index: 3) ]] local tbl_5 = {} for key_2, _ in pairs(ItemLibrary_upv_1.Classes) do tbl_5[key_2] = {} end for _, value_5 in pairs(ShopLibrary_upv_1:GetReleasedOwnableWeapons(CONSTANTS_upv_1.WEAPON_EARLY_ACCESS_TIME_OFFSET)) do for key_3, value_6 in pairs(ItemLibrary_upv_1.Classes) do if not (a1:CanUseWeapon(a2, a3, value_5, value_6.Slot)) then continue end table.insert(tbl_5[key_3], value_5) if not (#tbl_5[key_3] > 1) then continue end return true end end return false end function tbl_upv_1.CanUseWeapon(a1, a2, a3, a4, a5) --[[ name: CanUseWeapon line: 198 upvalues: ShopLibrary_upv_1 (copy, index: 1) CONSTANTS_upv_1 (copy, index: 2) ItemLibrary_upv_1 (copy, index: 3) ]] if a4 and a2 and a3 then local v6 = a2:Get("WeaponPool") local v7 = a2:Get("WeaponPoolFilterType") local v8 = v6 and ((v7 == "Whitelist") and (table.find(v6, a4))) if not (table.find(ShopLibrary_upv_1:GetReleasedOwnableWeapons(CONSTANTS_upv_1.WEAPON_EARLY_ACCESS_TIME_OFFSET), a4)) and not (v8) then return false end local v9 = a3:GetWeaponData(a4) if not (v9) then v9 = a2:Get("IsInShootingRange") if not v9 then v9 = a2:Get("CanUseLockedWeapons") if not v9 then v9 = a1:_CanUseWeaponFromFFlag(a4) if not v9 then local v10 = a2:Get("FreeWeaponTrials") or {} v9 = table.find(v10, a4) end end end end if v9 then if v6 and (v7 == "Whitelist" and not (table.find(v6, a4)) or v7 == "Blacklist" and table.find(v6, a4)) or a5 and ItemLibrary_upv_1.SlotToClass[a5].Name ~= ItemLibrary_upv_1.Items[a4].Class and not (a2:Get("WeaponClassRestrictionDisabled")) then return false end return true end return false end return false end function tbl_upv_1.GetSpread(a1, a2, a3, a4, a5, a6, a7, a8) --[[ name: GetSpread line: 242 ]] local v11 = (a4 and a3) or 1 local v12 = math.min(v11, (a5 and 0.75) or 1) local v13 = math.rad(a2) * v12 if a8 and a7 and a7 > 1 and a6 == 1 then return CFrame.identity elseif a8 and a7 and a7 > 1 and a6 ~= nil then v13 = v13 / 0.75 if a6 % 2 ~= 0 then return CFrame.Angles(0, 0, (math.tau / (a7 - 1)) * a6) * CFrame.Angles(v13 / 2, 0, 0) end return CFrame.Angles(0, 0, (math.tau / (a7 - 1)) * a6) * CFrame.Angles((v13 / 2) / 2, 0, 0) else return CFrame.Angles(0, 0, math.tau * math.random()) * CFrame.Angles(v13 * math.random(), 0, 0) end end function tbl_upv_1.IsInWhitelist(a1, a2, a3) --[[ name: IsInWhitelist line: 266 ]] for _, value_7 in pairs(a3) do if a2 ~= value_7 and (not (value_7:IsA("Instance")) or not (a2:IsDescendantOf(value_7))) then continue end return true end return false end function tbl_upv_1.GetMousePositionFromCameraData(a1, a2, a3, a4, a5, a6, a7, a8) --[[ name: GetMousePositionFromCameraData line: 276 upvalues: CONSTANTS_upv_1 (copy, index: 1) ]] local v14 if a6 then v14 = a6.CFrame * (a7 or (CFrame.identity)) else v14 = a6 end local v15 = v14 and CFrame.new(a5.Position, v14.Position) or a5 local v16 = v15 * (a8 or (CFrame.identity)) local _, v17 = a1:GetEntitiesFromRaycast(a2, a3, v16.Position, v16.LookVector, CONSTANTS_upv_1.MAX_RAYCAST_DISTANCE) return v17.Position end function tbl_upv_1.GetMouseLocationFromCameraData(a1, a2, a3, a4, a5, a6, a7, a8) --[[ name: GetMouseLocationFromCameraData line: 285 upvalues: tbl_upv_1 (copy, index: 1) Utility_upv_1 (copy, index: 2) ]] local v18 = tbl_upv_1:GetRaycastWhitelist(a6, a8) local v19 if a4 then v19 = a4.CFrame * (a5 or (CFrame.identity)) else v19 = a4 end local v20 = (v19) and (CFrame.new(a3.Position, v19.Position)) or a3 local v21 = nil local v22 = nil v19 = v21 for _ = 1, 10 do v22 = Utility_upv_1:Raycast(a2.Position, Utility_upv_1:Raycast(v20.Position, v20.Position + v20.LookVector, a7, v18, Enum.RaycastFilterType.Include).Position, a7, v18, Enum.RaycastFilterType.Include) if v22.Instance and not (v22.Instance.Transparency < 0.99) then table.insert(v18, v22.Instance) v19 = v22 continue end v21 = v22 return v21 end v21 = v19 end function tbl_upv_1.GetRaycastWhitelist(a1, a2, a3, a4, a5) --[[ name: GetRaycastWhitelist line: 307 upvalues: CollectionService_upv_1 (copy, index: 1) ]] local v23 = (a5 and {}) or (CollectionService_upv_1:GetTagged("RaycastWhitelist" .. (a2 or ""))) if not a3 then return v23 end local v24 = a4 or {} local tbl_6 = {} for _, value_8 in pairs(CollectionService_upv_1:GetTagged("Entity")) do local v25 = a1:GetEntityFromModel(value_8) if v24[v25] or not (a3:IsValidTarget(v25)) or v25:Get("EnvironmentID") ~= a2 then continue end for v26, value_9 in pairs(v25:GetHitboxes(a3.GrabSmallHitboxes)) do table.insert(v23, value_9) tbl_6[value_9] = v25 end end return v23, tbl_6 end function tbl_upv_1.GetEntityFromModel(a1, a2) --[[ name: GetEntityFromModel line: 333 upvalues: CONSTANTS_upv_1 (copy, index: 1) ServerStorage_upv_1 (copy, index: 2) Players_upv_1 (copy, index: 3) ]] if CONSTANTS_upv_1.IS_SERVER then local FighterService_1 = require(ServerStorage_upv_1.Services.FighterService) local EnemyService_1 = require(ServerStorage_upv_1.Services.EnemyService) local v26 = FighterService_1:GetFighter(a2) local v27 = (v26 and (v26.Entity)) or (EnemyService_1:GetEnemy(a2)) return v27 elseif CONSTANTS_upv_1.IS_CLIENT then local FighterController_1 = require(Players_upv_1.LocalPlayer.PlayerScripts.Controllers.FighterController) local EnemyController_1 = require(Players_upv_1.LocalPlayer.PlayerScripts.Controllers.EnemyController) local v28 = FighterController_1:GetFighter(a2) local v29 = (v28 and (v28.Entity)) or (EnemyController_1:GetEnemy(a2)) return v29 end end function tbl_upv_1.GetEntityFromTouch(a1, a2, a3, a4) --[[ name: GetEntityFromTouch line: 350 ]] local v30 = a1:GetEntityFromModel(a1:IsEntity(a4)) if not v30 or v30:Get("EnvironmentID") ~= a2 then return end if a3:IsValidTarget(v30) then return v30 end end function tbl_upv_1.GetEntitiesWithinSphere(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) --[[ name: GetEntitiesWithinSphere line: 365 upvalues: BetterDebris_upv_1 (copy, index: 1) Utility_upv_1 (copy, index: 2) ]] if a11 then local v31 = tonumber(a11) or (tonumber(false) or 30) local v32 = Instance.new("Part") v32.Color = Color3.fromRGB(255, 0, 0) v32.Material = Enum.Material.ForceField v32.CanTouch = false v32.CanCollide = false v32.CanQuery = false v32.CastShadow = false v32.Anchored = true v32.Shape = Enum.PartType.Ball v32.Size = (Vector3.new(1, 1, 1) * a5) * 2 v32.CFrame = CFrame.new(a4) v32.Parent = workspace BetterDebris_upv_1:AddItem(v32, v31) local v33 = Instance.new("Part") v33.Color = Color3.fromRGB(255, 0, 0) v33.Material = Enum.Material.Neon v33.CanTouch = false v33.CanCollide = false v33.CanQuery = false v33.CastShadow = false v33.Anchored = true v33.Shape = Enum.PartType.Ball v33.Size = Vector3.new(0.10000000149011612, 0.10000000149011612, 0.10000000149011612) v33.CFrame = CFrame.new(a4) v33.Parent = workspace BetterDebris_upv_1:AddItem(v33, v31) end local v34 = OverlapParams.new() v34.FilterType = Enum.RaycastFilterType.Include v34.FilterDescendantsInstances = a1:GetRaycastWhitelist(a2, a3, nil, true) local v35 = not a6 local v36 = v35 and (a1:GetRaycastWhitelist(a2)) local v37 = not a6 local _ = v37 and (Enum.RaycastFilterType.Include) local tbl_7 = {} local v38 = nil for v41, value_10 in pairs(workspace:GetPartBoundsInRadius(a4, a5, v34)) do if value_10:GetAttribute("IsAssemblyRootPart") then v38 = value_10 or value_10.AssemblyRootPart or value_10 else v38 = value_10.AssemblyRootPart v38 = v38 or value_10 end if tbl_7[v38] then continue end if not (a7) or not (a8) or not ((a9 or 3) < (value_10.Position - a4).Magnitude) or not (a8 < Utility_upv_1:AngleBetweenVectors(a7, value_10.Position - a4)) then local v39 = a1:GetEntityFromTouch(a2, a3, value_10) if not (v39) or tbl_7[v39] then continue end local v40 = v39:IsAlive() if not (v40) then continue end if a6 then tbl_7[v39] = true tbl_7[v38] = true task.spawn(a10, v39, value_10) continue end local Instance_1 = Utility_upv_1:Raycast(a4, value_10.Position, (a4 - value_10.Position).Magnitude, v36, v37).Instance if not (Instance_1) then tbl_7[v39] = true tbl_7[v38] = true task.spawn(a10, v39, value_10) end end end end function tbl_upv_1.GetEntitiesFromPoint(a1, a2, a3, a4, a5) --[[ name: GetEntitiesFromPoint line: 436 ]] local tbl_upv_8 = {} a1:GetEntitiesWithinSphere( a2, a3, a4, a5 or 0, nil, nil, nil, nil, function(a6, a7) --[[ line: 439 upvalues: tbl_upv_8 (copy, index: 1) ]] table.insert(tbl_upv_8, {Entity = a6, Hitbox = a7}) end ) return tbl_upv_8 end function tbl_upv_1.GetEntitiesFromRaycast(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) --[[ name: GetEntitiesFromRaycast line: 450 upvalues: Utility_upv_1 (copy, index: 1) BetterDebris_upv_1 (copy, index: 2) ]] local v41 = a7 or 0 local v42 = a8 or 0 local v43 = (a9 and (Utility_upv_1:CloneTable(a9, true))) or {} local tbl_upv_9 = {} local u1 = nil local v44 = nil local Magnitude_1 = 1 local v45 = nil while Magnitude_1 <= 1 + v42 do local v46, v47 = a1:GetRaycastWhitelist(a2, a3, v43) local v48 = RaycastParams.new() v48.FilterDescendantsInstances = v46 v48.FilterType = Enum.RaycastFilterType.Include v48.IgnoreWater = true if v41 > 0 then v46 = workspace:Spherecast(a4, v41, a5 * a6, v48) else v46 = workspace:Raycast(a4, a5 * a6, v48) end v45 = Utility_upv_1:MakeSafeRaycastResult(v46, a4, a5, a6) v46 = v47[v45.Instance] u1 = u1 or v45 if v46 then table.insert(tbl_upv_9, {Entity = v46, Hitbox = v45.Instance, RaycastResult = v45}) v43[v46] = true v42 = (v46.Model:GetAttribute("PierceThrough") and (v42 + 1)) or v42 Magnitude_1 = Magnitude_1 + 1 v44 = v45 continue end v44 = v45 a1:GetEntitiesWithinSphere( a2, a3, a4, v41, nil, nil, nil, nil, function(a11, a12) --[[ line: 499 upvalues: tbl_upv_9 (copy, index: 1) u1 (ref, index: 2) ]] table.insert(tbl_upv_9, {IsFromPoint = true, Entity = a11, Hitbox = a12, RaycastResult = u1}) end ) if v44 and a10 then Magnitude_1 = (v44.Position - a4).Magnitude local v49 = Instance.new("Part") v49.Color = Color3.fromRGB(255, 0, 0) v49.Material = Enum.Material.ForceField v49.CanTouch = false v49.CanCollide = false v49.CanQuery = false v49.CastShadow = false v49.Anchored = true v49.Size = Vector3.new(0.1, 0.1, Magnitude_1) v49.CFrame = CFrame.new(a4, v44.Position) * CFrame.new(0, 0, -Magnitude_1 / 2) v49.Parent = workspace BetterDebris_upv_1:AddItem(v49, 10) end return tbl_upv_9, v44 end end function tbl_upv_1.GetJumpPadPlacement(a1, a2, a3, a4, a5, a6, a7) --[[ name: GetJumpPadPlacement line: 522 upvalues: Utility_upv_1 (copy, index: 1) CONSTANTS_upv_1 (copy, index: 2) tbl_upv_1 (copy, index: 3) ]] local v50 = a1:GetRaycastWhitelist(a2) local v51 if a6 then v51 = a6.CFrame * (a7 or (CFrame.identity)) else v51 = a6 end local v52 = (v51) and (CFrame.new(a5.Position, v51.Position)) or a5 local v53 = v52 if v52 ~= v53 then v52 = CFrame.new(a5.Position) end v52 = Utility_upv_1:Raycast(a4.Position, a4.Position + ((Utility_upv_1:Raycast(v52.Position, v52.Position + (v52.LookVector * CONSTANTS_upv_1.MAX_RAYCAST_DISTANCE), CONSTANTS_upv_1.MAX_RAYCAST_DISTANCE, v50, Enum.RaycastFilterType.Include).Position - a4.Position).Unit * a3), a3, v50, Enum.RaycastFilterType.Include) if v52.Instance and not (v52.Instance:HasTag("Barrier")) and not (Utility_upv_1:IsWithinTaggedParts("Barrier", v52.Position)) and not (tbl_upv_1:IsWithinOOBPart(v52.Position)) then return v52, (CFrame.new(v52.Position, v52.Position + v52.Normal) * CFrame.Angles(-1.5707963267948966, 0, 0)) * CFrame.new(a4.Position * Vector3.new(1, 0, 1), v52.Position * Vector3.new(1, 0, 1)).Rotation * CFrame.Angles(1.5707963267948966, 0, 0) end return v52, nil end function tbl_upv_1.GetSubspaceTripminePlacement(a1, a2, a3, a4) --[[ name: GetSubspaceTripminePlacement line: 545 ]] local v54 = (a3:FuzzyEq(a4) and a3) or (a4 + (a3 - a4).Unit * math.min(a2, (a3 - a4).Magnitude)) local v55 = v54:FuzzyEq(a4) and CFrame.identity or CFrame.new(v54 * Vector3.new(1, 0, 1), a4 * Vector3.new(1, 0, 1)) return CFrame.new(v54) * v55.Rotation end function tbl_upv_1.GetOOBWarnDelay(a1, a2) --[[ name: GetOOBWarnDelay line: 553 ]] local v56 = a2 or (a1.OOB_DEFAULT_WARN_DELAY) if v56 ~= -1 then return v56 end return math.huge end function tbl_upv_1.GetOOBKillDelay(a1, a2) --[[ name: GetOOBKillDelay line: 558 ]] local v57 = a2 or (a1.OOB_DEFAULT_KILL_DELAY) if v57 ~= -1 then return v57 end return math.huge end function tbl_upv_1.IsWithinOOBPart(a1, a2, a3) --[[ name: IsWithinOOBPart line: 563 upvalues: Utility_upv_1 (copy, index: 1) ]] if Utility_upv_1:IsWithinTaggedParts("OutOfBoundsSafePart", a2) then return nil end local v58 = Utility_upv_1:IsWithinTaggedParts("OutOfBoundsPart", a2, a3, true) table.sort( v58, function(a4, a5) --[[ line: 572 upvalues: a1 (copy, index: 1) ]] local v59 = a1:GetOOBWarnDelay(a4:GetAttribute("WarnDelay")) + a1:GetOOBKillDelay(a4:GetAttribute("KillDelay")) < a1:GetOOBWarnDelay(a5:GetAttribute("WarnDelay")) + a1:GetOOBKillDelay(a5:GetAttribute("KillDelay")) return v59 end ) return v58[1] end function tbl_upv_1._CanUseWeaponFromFFlag(a1, a2) --[[ name: _CanUseWeaponFromFFlag line: 586 upvalues: CONSTANTS_upv_1 (copy, index: 1) ServerStorage_upv_1 (copy, index: 2) Players_upv_1 (copy, index: 3) ItemLibrary_upv_1 (copy, index: 4) ]] local success_1, v60 = pcall( function() --[[ line: 588 upvalues: CONSTANTS_upv_1 (copy, index: 1) ServerStorage_upv_1 (copy, index: 2) Players_upv_1 (copy, index: 3) ItemLibrary_upv_1 (copy, index: 4) a2 (copy, index: 5) ]] local v61 if CONSTANTS_upv_1.IS_SERVER then v61 = require(ServerStorage_upv_1.Services.FFlagService) else v61 = require(Players_upv_1.LocalPlayer.PlayerScripts.Controllers.FFlagController) end return v61:GetFFlag("FreeToUse" .. ItemLibrary_upv_1.Items[a2].Status .. "Weapons") end ) if not (success_1) then warn("Failed to fetch FreeWeapons FFlag") end return success_1 and v60 end function tbl_upv_1._Init(a1) --[[ name: _Init line: 602 ]] end return tbl_upv_1._new()