- if not game:IsLoaded() then game.Loaded:Wait() end
- local lPlayer = game.Players.LocalPlayer
- -- thanks 3ds and kiko metatables r hard
- if not getgenv().MTAPIMutex then loadstring(game:HttpGet("https://raw.githubusercontent.com/KikoTheDon/MT-Api-v2/main/__source/mt-api%20v2.lua", true))() end
- if game.PlaceId == 111311599 then -- Critical Strike
- local anticheat = game:GetService("ReplicatedFirst")["Serverbased AntiCheat"] -- then why put it in a localscript?
- -- I literally copied the rest of this from the "Serverbased Anticheat"
- local sValue = game:GetService("Players").LocalPlayer:WaitForChild("SValue")
- local function constructAnticheatString()
- return "CS-" .. math.random(11111, 99999) .. "-" .. math.random(1111, 9999) .. "-" .. math.random(111111, 999999) .. math.random(1111111, 9999999) .. (sValue.Value * 6) ^ 2 + 18;
- end
- -- to be fair the game hasn't been updated in over a year
- task.spawn(function()
- while true do task.wait(2)
- game:GetService("ReplicatedStorage").ACDetect:FireServer(sValue.Value, constructAnticheatString());
- end
- end)
- anticheat.Disabled = true
- end
- local playerNames = {}
- --local npcNames = {} -- I was planning on adding npc support
- local teamNames = {}
- -- thanks inori and wally
- local Library = loadstring(game:HttpGet('https://raw.githubusercontent.com/wally-rblx/LinoriaLib/main/Library.lua'))()
- local SaveManager = loadstring(game:HttpGet('https://raw.githubusercontent.com/wally-rblx/LinoriaLib/main/addons/SaveManager.lua'))()
- SaveManager:SetLibrary(Library)
- SaveManager:SetFolder("HitboxExtender")
- Library:Notify("hai :3")
- local mainWindow = Library:CreateWindow("Personal object of abuse")
- local mainTab = mainWindow:AddTab("Main")
- local mainGroupbox = mainTab:AddLeftGroupbox("Hitbox Extender")
- local ignoresGroupbox = mainTab:AddRightGroupbox("Ignores")
- local miscGroupbox = mainTab:AddLeftGroupbox("Misc")
- local extenderToggled = mainGroupbox:AddToggle("extenderToggled", {Text = "Toggle"})
- local extenderSize = mainGroupbox:AddSlider("extenderSize", {Text = "Size", Min = 2, Max = 100, Default = 10, Rounding = 0})
- local extenderTransparency = mainGroupbox:AddSlider("extenderTransparency", {Text = "Transparency", Min = 0, Max = 1, Default = 0.5, Rounding = 2})
- -- for some reason the save manager doesn't save inputs, idk how to fix it
- local customPartNameInput = mainGroupbox:AddInput("customPartList", {Text = "Custom Part Name", Default = "HeadHB"})
- local extenderPartList = mainGroupbox:AddDropdown("extenderPartList", {Text = "Body Parts", AllowNull = true, Multi = true, Values = {"Custom Part", "Head", "HumanoidRootPart", "Torso", "Left Arm", "Right Arm", "Left Leg", "Right Leg"}, Default = "Head"})
- local extenderUpdateRate = miscGroupbox:AddSlider("extenderUpdateRate", {Text = "Update Rate", Min = 0, Max = 1000, Default = 0, Rounding = 0, Suffix = "ms"})
- local extenderSitCheck = ignoresGroupbox:AddToggle("extenderSitCheck", {Text = "Ignore Sitting Players"})
- local ignoreSelectedPlayersToggled = ignoresGroupbox:AddToggle("ignoreSelectedPlayersToggled", {Text = "Ignore Selected Players"})
- local ignorePlayerList = ignoresGroupbox:AddDropdown("ignorePlayerList", {Text = "Players", AllowNull = true, Multi = true, Values = playerNames})
- --local ignoreSelectedNpcsToggled = ignoresGroupbox:AddToggle("ignoreSelectedNpcsToggled", {Text = "Ignore Selected Npcs"})
- --local ignoreNpcList = ignoresGroupbox:AddDropdown("ignoreNpcList", {Text = "Npcs", AllowNull = true, Multi = true, Values = npcNames})
- local ignoreSelfTeamToggled = ignoresGroupbox:AddToggle("ignoreSelfTeamToggled", {Text = "Ignore Own Team"})
- local ignoreSelectedTeamsToggled = ignoresGroupbox:AddToggle("ignoreSelectedTeamsToggled", {Text = "Ignore Selected Teams"})
- local ignoreTeamList = ignoresGroupbox:AddDropdown("ignoreTeamList", {Text = "Teams", AllowNull = true, Multi = true, Values = teamNames})
- -- thanks roblox dev forum
- local function CheckTableEquality(t1,t2)
- for i,v in next, t1 do if t2[i]~=v then return false end end
- for i,v in next, t2 do if t1[i]~=v then return false end end
- return true
- end
- -- updates the player list
- task.spawn(function()
- while true do task.wait() -- if you cry about while true do loops then kys
- local temp = {}
- for i,v in ipairs(game.Players:GetPlayers()) do
- if v ~= lPlayer then
- temp[i] = v.Name
- end
- end
- if not CheckTableEquality(playerNames, temp) then
- playerNames = temp
- ignorePlayerList.Values = temp
- ignorePlayerList:SetValues()
- ignorePlayerList:Display()
- end
- end
- end)
- -- updates the team list
- task.spawn(function()
- while true do task.wait()
- local temp = {}
- for i,v in pairs(game.Teams:GetTeams()) do
- temp[i] = v.Name
- end
- if not CheckTableEquality(teamNames, temp) then
- teamNames = temp
- ignoreTeamList.Values = temp
- ignoreTeamList:SetValues()
- ignoreTeamList:Display()
- end
- end
- end)
- --task.spawn(function()
- -- while true do task.wait()
- -- local temp = {}
- -- for i,v in ipairs(npcs) do
- -- temp[i] = v.Name
- -- end
- -- if not CheckTableEquality(npcNames, temp) then
- -- ignoreNpcList.Values = temp
- -- ignoreNpcList:SetValues()
- -- ignoreNpcList:Display()
- -- end
- -- end
- --end)
- SaveManager:BuildConfigSection(mainTab)
- SaveManager:LoadAutoloadConfig()
- -- Returns a table of every possible bodypart in a character, or nil if the character does not exist.
- local function getBodyParts(character)
- local humanoid = character:WaitForChild("Humanoid")
- local parts = {
- Head = character:WaitForChild("Head"),
- HumanoidRootPart = character:WaitForChild("HumanoidRootPart"),
- Humanoid = character:WaitForChild("Humanoid")
- }
- if humanoid.RigType == Enum.HumanoidRigType.R6 then
- parts.Torso = {Torso = character:WaitForChild("Torso")}
- parts["Left Arm"] = {LeftArm = character:WaitForChild("Left Arm")}
- parts["Right Arm"] = {RightArm = character:WaitForChild("Right Arm")}
- parts["Left Leg"] = {LeftLeg = character:WaitForChild("Left Leg")}
- parts["Right Leg"] = {RightLeg = character:WaitForChild("Right Leg")}
- elseif humanoid.RigType == Enum.HumanoidRigType.R15 then
- parts.Torso = {
- UpperTorso = character:WaitForChild("UpperTorso"),
- LowerTorso = character:WaitForChild("LowerTorso")
- }
- parts["Left Arm"] = {
- LeftHand = character:WaitForChild("LeftHand"),
- LeftLowerArm = character:WaitForChild("LeftLowerArm"),
- LeftUpperArm = character:WaitForChild("LeftUpperArm")
- }
- parts["Right Arm"] = {
- RightHand = character:WaitForChild("RightHand"),
- RightLowerArm = character:WaitForChild("RightLowerArm"),
- RightUpperArm = character:WaitForChild("RightUpperArm")
- }
- parts["Left Leg"] = {
- LeftFoot = character:WaitForChild("LeftFoot"),
- LeftLowerLeg = character:WaitForChild("LeftLowerLeg"),
- LeftUpperLeg = character:WaitForChild("LeftUpperLeg")
- }
- parts["Right Leg"] = {
- RightFoot = character:WaitForChild("RightFoot"),
- RightLowerLeg = character:WaitForChild("RightLowerLeg"),
- RightUpperLeg = character:WaitForChild("RightUpperLeg")
- }
- end
- return parts
- end
- -- Main function that allows the character passed to be expanded at will
- local function extendCharacter(character)
- local player = game.Players:GetPlayerFromCharacter(character)
- local timer = 0
- local originals = {}
- local collisions = {}
- local CharacterAdded = {}
- local bodyParts = getBodyParts(character)
- --Sets up original sizes, creates collision constraints, and creates hooks to bypass localscript anticheats
- local function setup(i, v)
- if not originals[i] then
- originals[i] = {}
- originals[i].Size = v.Size
- originals[i].Transparency = v.Transparency
- originals[i].CanCollide = v.CanCollide
- originals[i].Massless = v.Massless
- local sizeHook = v:AddGetHook("Size", originals[i].Size)
- local transparencyHook = v:AddGetHook("Transparency", originals[i].Transparency)
- local canCollideHook = v:AddGetHook("CanCollide", originals[i].CanCollide)
- local masslessHook = v:AddGetHook("Massless", originals[i].Massless)
- v:AddSetHook("Size", function(self, value)
- originals[i].Size = value
- sizeHook:Modify("Size", value)
- return value
- end)
- v:AddSetHook("Transparency", function(self, value)
- originals[i].Transparency = value
- transparencyHook:Modify("Transparency", value)
- return value
- end)
- v:AddSetHook("CanCollide", function(self, value)
- originals[i].CanCollide = value
- canCollideHook:Modify("CanCollide", value)
- return value
- end)
- v:AddSetHook("Massless", function(self, value)
- originals[i].Massless = value
- masslessHook:Modify("Massless", value)
- return value
- end)
- end
- if not collisions[i] then
- collisions[i] = {}
- -- thanks to GameGuy#5286 for telling me collision constraints exist
- for o,b in pairs(getBodyParts(lPlayer.Character)) do
- if o ~= "Humanoid" and type(b) ~= "table" then
- collisions[i][o] = Instance.new("NoCollisionConstraint", v)
- collisions[i][o].Enabled = false
- collisions[i][o].Part0 = v
- collisions[i][o].Part1 = b
- CharacterAdded[i] = lPlayer.CharacterAdded:Connect(function(char)
- local temp = char:WaitForChild(o)
- collisions[i][o].Part1 = temp
- end)
- elseif type(b) == "table" then
- for g,z in pairs(b) do
- if z:IsA("BasePart") then
- collisions[i][g] = Instance.new("NoCollisionConstraint", v)
- collisions[i][g].Enabled = false
- collisions[i][g].Part0 = v
- collisions[i][g].Part1 = z
- CharacterAdded[i] = lPlayer.CharacterAdded:Connect(function(char)
- local temp = char:WaitForChild(g)
- if temp:IsA("BasePart") then
- collisions[i][g].Part1 = temp
- end
- end)
- end
- end
- end
- end
- end
- end
- do
- local customPart = character:FindFirstChild(customPartNameInput.Value)
- if customPart and customPart:IsA("BasePart") then
- if not originals[customPart.Name] then
- setup(customPart.Name, customPart)
- end
- end
- for i,v in pairs(bodyParts) do
- if i ~= "Humanoid" and type(v) ~= "table" then
- if not originals[i] then
- setup(i,v)
- end
- elseif type(v) == "table" then
- for o,b in pairs(v) do
- if not originals[o] then
- setup(o,b)
- end
- end
- end
- end
- end
- -- resets the properties of the selected part.
- -- if "all" is passed, will reset every part
- local function reset(part)
- if part == "custompart" or part == "all" then
- local customPart = character:FindFirstChild(customPartNameInput.Value)
- if customPart and customPart:IsA("BasePart") then
- customPart.Size = originals[customPart.Name].Size
- customPart.Transparency = originals[customPart.Name].Transparency
- customPart.CanCollide = originals[customPart.Name].CanCollide
- customPart.Massless = originals[customPart.Name].Massless
- end
- end
- for i,v in pairs(bodyParts) do
- if string.lower(part) == string.lower(i) or part == "all" then
- if i ~= "Humanoid" and type(v) ~= "table" then
- v.Size = originals[i].Size
- v.Transparency = originals[i].Transparency
- v.CanCollide = originals[i].CanCollide
- v.Massless = originals[i].Massless
- elseif type(v) == "table" then
- for o,b in pairs(v) do
- b.Size = originals[o].Size
- b.Transparency = originals[o].Transparency
- b.Massless = originals[o].Massless
- for _,z in pairs(collisions[o]) do
- if z.Enabled == true and z.Part0 == b then
- z.Enabled = false
- end
- end
- end
- end
- end
- end
- end
- local function getChecks()
- if bodyParts.Humanoid:GetState() == Enum.HumanoidStateType.Dead then
- return 2
- end
- if extenderSitCheck.Value then
- if bodyParts.Humanoid.Sit then
- return 1
- end
- end
- if ignoreSelfTeamToggled.Value then
- if game.PlaceId == 2039118386 then -- Neighborhood War
- local selfTeam
- local playerTeam
- pcall(function()
- selfTeam = lPlayer.Character.HumanoidRootPart.BrickColor
- playerTeam = bodyParts.HumanoidRootPart.BrickColor
- end)
- if selfTeam == playerTeam then
- return 1
- end
- else
- if lPlayer.Team == player.Team then
- return 1
- end
- end
- end
- if ignoreSelectedTeamsToggled.Value then
- local teamList = ignoreTeamList:GetActiveValues()
- if table.find(teamList, tostring(player.Team)) then
- return 1
- end
- end
- if ignoreSelectedPlayersToggled.Value then
- local playerList = ignorePlayerList:GetActiveValues()
- if table.find(playerList, tostring(player.Name)) then
- return 1
- end
- end
- return 0
- end
- -- here's the actual expander code
- local Heartbeat
- Heartbeat = game:GetService("RunService").Heartbeat:Connect(function(deltaTime)
- timer += deltaTime
- if timer >= (extenderUpdateRate.Value / 100) then -- divided by 100 because milliseconds
- timer = 0
- local bodyPartList = extenderPartList:GetActiveValues()
- local checks = getChecks()
- if checks == 2 then
- reset("all")
- for _,v in pairs(CharacterAdded) do
- v:Disconnect()
- end
- Heartbeat:Disconnect()
- return
- elseif checks == 1 then
- reset("all")
- return
- end
- if extenderToggled.Value then
- if table.find(bodyPartList, "Custom Part") then
- local customPart = character:FindFirstChild(customPartNameInput.Value)
- if customPart then
- customPart.Size = Vector3.new(extenderSize.Value, extenderSize.Value, extenderSize.Value)
- customPart.Transparency = extenderTransparency.Value
- customPart.CanCollide = false
- customPart.Massless = true
- end
- else
- reset("custompart")
- end
- for i,v in pairs(bodyParts) do
- if table.find(bodyPartList, i) then
- if type(v) ~= "table" then
- if i ~= "HumanoidRootPart" then
- v.Massless = true
- end
- v.Size = Vector3.new(extenderSize.Value, extenderSize.Value, extenderSize.Value)
- v.Transparency = extenderTransparency.Value
- v.CanCollide = false
- else
- for o,b in pairs(v) do
- b.Massless = true
- b.Size = Vector3.new(extenderSize.Value, extenderSize.Value, extenderSize.Value)
- b.Transparency = extenderTransparency.Value
- for _,z in pairs(collisions[o]) do
- if z.Enabled == false and z.Part0 == b then
- z.Enabled = true
- end
- end
- end
- end
- else
- reset(i)
- end
- end
- else
- reset("all")
- end
- end
- end)
- local PlayerRemoving
- PlayerRemoving = game.Players.PlayerRemoving:Connect(function(v)
- if v == player then
- Heartbeat:Disconnect()
- PlayerRemoving:Disconnect()
- end
- end)
- end
- for _,player in ipairs(game.Players:GetPlayers()) do
- if player ~= lPlayer then
- task.spawn(function()
- if player.Character then
- -- why use coroutine.wrap after I've been abusing task.spawn? fuck you that's why
- coroutine.wrap(extendCharacter)(player.Character)
- end
- player.CharacterAdded:Connect(function(v)
- coroutine.wrap(extendCharacter)(v)
- end)
- end)
- end
- end
- game.Players.PlayerAdded:Connect(function(player)
- player.CharacterAdded:Connect(function(v)
- coroutine.wrap(extendCharacter)(v)
- end)
- end)
- -- now, where are my schizo meds?