Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Converted using Mokiros's Model to Script plugin
- -- Converted string size: 15461
- local genv={}
- local Scripts = {
- function() wtime = math.random(5,20)
- while true do
- wait(wtime)
- script.Parent.Sound1:play()
- wait(wtime)
- S2 = script.Parent.Sound2:play()
- end
- end;
- function() local larm = script.Parent:FindFirstChild("Left Arm")
- local rarm = script.Parent:FindFirstChild("Right Arm")
- sound = script.Parent.Head.Sound3
- function findNearestTorso(pos)
- local list = game.Workspace:children()
- local torso = nil
- local dist = 1000
- local temp = nil
- local human = nil
- local temp2 = nil
- for x = 1, #list do
- temp2 = list[x]
- if (temp2.className == "Model") and (temp2 ~= script.Parent) then
- temp = temp2:findFirstChild("Torso")
- human = temp2:findFirstChild("Humanoid")
- if (temp ~= nil) and (human ~= nil) and (human.Health > 0) then
- if (temp.Position - pos).magnitude < dist then
- torso = temp
- dist = (temp.Position - pos).magnitude
- end
- end
- end
- end
- return torso
- end
- function Hit(hit)
- local human = hit.Parent:FindFirstChild("Humanoid")
- if human ~= nil then
- human.Health = human.Health -4
- sound:play()
- end
- end
- larm.Touched:connect(Hit)
- rarm.Touched:connect(Hit)
- while true do
- wait(0.1)
- local target = findNearestTorso(script.Parent.Torso.Position)
- if target ~= nil then
- script.Parent.Zombie:MoveTo(target.Position, target)
- end
- end
- end;
- function() wait(1)
- human = script.Parent:findFirstChild("Humanoid")
- if human == nil then human = script.Parent:findFirstChild("Zombie") end
- if script.Parent.archivable == false then script.Parent.archivable = true end
- robo=script.Parent:clone()
- robo.Parent = game.Lighting
- player = game.Players:playerFromCharacter(script.Parent)
- if player ~= nil then robo:findFirstChild(script.Name):remove() end
- while true do
- wait(1)
- if human.Health<1 then
- robot=robo:clone()
- robot.Parent=script.Parent.Parent
- robot:makeJoints()
- wait(.1)
- robo:remove()
- script.Parent:remove()
- end
- end
- end;
- function() --Beta SpeedAI June 2012 -- Still has logic bugs - Look for updates..
- -- Kill added.
- -- co-operate/other "AI"s
- -- Climb "Truss" Parts
- -- Offset Ray
- -- Swim - Does not work. Don't know why.
- -- Adjusted Jump Ray
- -- Ray Graphics On/Off - flip line 90
- -- Delay next cycle, if Falling.
- -- Diagonal movement - I should add right-hand logic as well...
- local number = 1 + math.random()
- local BRAINWave = .6 -- AND line 38: Wait() between cycles of main loop
- local hum = nil -- Will be a pointer to the Humanoid of our AI.
- wait(number) -- hold on a sec. and spread multiple instances.
- --Globals
- local AI = script.Parent
- local AIName = AI.Name
- local AItorso = AI.Torso
- if true then -- if your torso doesn't have a Humanoid; flip this to false
- local HumanoidType = nil -- find-a-HumanoidObject -- make sure
- local list = AI:GetChildren() -- temp var.
- for x = 1, #list do
- local temp = list[x]
- if (temp.className == "Humanoid") then
- HumanoidType = temp.Name
- end -- found Humanoid
- end -- AI Parts
- if HumanoidType then
- number = math.floor(number*100) -- serial# of AI
- hum = AI[HumanoidType]
- BRAINWave = 7/hum.WalkSpeed -- For extreme speeds, this may have to be adjusted.
- print (script, ": Humanoid = ", hum, AI:GetFullName(), number, "- Think Speed = ", BRAINWave)
- end
- end -- set speed
- --Constants;
- local RAYLength = 100 -- Not really. A point, off in space.
- --Declarations
- local target = AItorso -- is of type torso
- local torsoPos = AItorso.Position
- local targpos = target.Position
- --local Oldtargpos = targpos
- local OldPos = torsoPos * 2
- local origin = CFrame.new(torsoPos)
- local Logic = 0
- local OldX = 100
- local OldZ = 0
- local Xdir = 100
- local Zdir = 0
- local ClimbingLadder = false
- local FreeFalling = false
- local GraphicsOn = script.GraphicsToggle.Value -- Only set at start
- --functions
- -- Are we falling?
- hum.FreeFalling:connect(function()
- FreeFalling = true
- end)
- -- Find Player (& who else not to find).
- function findNearestTorso(pos) -- declare pos a local vector3
- local list = game.Workspace:children()
- local torso = nil
- local dist = 560 -- Area to search
- local temp = nil
- local human = nil
- local temp2 = nil
- for x = 1, #list do
- temp2 = list[x]
- if temp2.className == "Model" then
- temp = temp2:findFirstChild("Torso")
- if temp ~= nil then
- human = temp2:findFirstChild("Humanoid")
- if human ~= nil and (human.Health > 0) and (temp2.Name ~= AIName) then -- not named the same as us.
- if (temp.Position - pos).magnitude < dist then
- torso = temp
- dist = (temp.Position - pos).magnitude
- end -- closer?
- end -- human? Not us.
- end -- Has torso?
- end -- Model?
- end -- For. Loop thru parts in Workplace
- return torso
- end -- findNearest
- function DrawRay(origin, point) -- 7 studs long
- local Ray = Ray.new(origin, (point).unit * 7) --Make the ray.
- local Hit,Position = game.Workspace:FindPartOnRay(Ray,AI) --Check for collisions along the ray, ignoring any Parts of us.
- if GraphicsOn then --Graphics
- local RayPart = Instance.new("Part",AI)
- if Hit then
- if Logic == 1 then
- RayPart.BrickColor = BrickColor.new("Black") --Set its color.
- else
- RayPart.BrickColor = BrickColor.new("Bright red") --Set its color.
- end
- else
- if Logic == 1 then
- RayPart.BrickColor = BrickColor.new("White") --Set its color.
- else
- RayPart.BrickColor = BrickColor.new("Olive") --Set its color.
- end
- end
- RayPart.Transparency = 0.2 --Set its transparency.
- RayPart.Anchored = true --Set whether it will fall or not.
- RayPart.CanCollide = false --Set whether people can walk though it or not.
- RayPart.formFactor = Enum.FormFactor.Custom --Make it so it can be small.
- local Distance = (Position-origin).magnitude --Find the distance between the hit and the torso.
- RayPart.Size = Vector3.new(0.4,.2,Distance) --Set its size to the distance.
- RayPart.CFrame = CFrame.new(Position, origin) * CFrame.new(0,0,-Distance/2) --Move it halfway.
- game.Debris:AddItem(RayPart,2) --Add it to the debris.
- end -- Graphics
- return Hit
- end -- DrawRay
- function FireRayToward() -- possible path, and read the Part we hit, if any.
- ClimbingLadder = false
- local originPrime = origin * Vector3.new(.8,0,0) - Vector3.new(0,.4,0) -- Offset Right + OffY
- local offset = origin * Vector3.new(.8,0,0) - origin * Vector3.new(-.8,0,0) -- left (I guess this is increment. I didn't WANT to do it this way)
- local point = origin.lookVector * 7 -- dir
- local pointPrime = point - offset + Vector3.new(0,2,0) -- dir + OffsetLeft + OffsetY = direction of Ray
- local Hit = DrawRay(originPrime, pointPrime) -- see if we hit anything
- if Hit then
- if target.Parent == Hit.Parent then
- -- AI.Head:BreakJoints()
- if Hit.Name ~= "Head" and Hit.Name ~= "Torso" then
- else
- Hit.Parent.Humanoid:TakeDamage(10)
- end -- kill
- Logic = 0
- Hit = nil
- elseif Hit.Parent.Name == AIName then
- -- if Xdir > 0 then -- if going ?North? then ignore, else (?South?); Jump
- -- Hit = nil -- ignore
- -- elseif Xdir == 0 then -- else swerve (only while in logic).
- if Xdir == 0 then
- Hit = Aitorso-- this should result in Hit = true-but-don't-attemp-a-jump, so swerve; doesn't check floor!
- -- return hit -- Swerve, without checking to jump.
- elseif Hit.Velocity.y > 1 then
- Hit = nil -- ignore, if other AI is already jumping; else check to Jump
- end -- East -West collisions - swerve. North/South, check-to-jump.
- end -- endifs
- end -- read hit
- -- Climb or Jump
- if Hit and Hit ~= AItorso then
- if (Hit.Name == "Truss" and target.Position.y > torsoPos.y - 3) or target.Parent == Hit.Parent then -- ignore parts called "Ladder", if AI is level or below CURRENT Targ pos.
- Hit = nil
- ClimbingLadder = true -- Climb and don't check floor
- else
- --print(Hit, Hit.Name)
- if Hit.Name == "Terrain" or Hit.CanCollide == false then -- In front is Water or a steep hill made of Terrain.
- Hit = nil -- swim or climb, or Ray hit a Non-colliding Part; and don't check for floor. This will not do, as we do not get a Hit when under-water, so we will check for floor. We must check Swimming event.
- else -- Jump?
- Hit = DrawRay(originPrime + Vector3.new(0,4.8,0), pointPrime)
- if Hit == nil then -- (Does NOT check CanCollide of Part blocking Jump)
- hum.Jump = true -- we do NOT check for "Floor", if jumping, but it might be a good idea.
- end -- Room to jump?
- end --Terrain? Water?
- end -- Ladder?
- else -- path is clear. Check for cliff... or OK to drop
- local Level = torsoPos.y
- if target then
- Level = target.Position.y -- get Target's current position.
- else -- Target is dead. Abandon all logic...
- Logic = 0 -- but still check for floor
- end
- if torsoPos.y - 2 < Level then -- if Player is not well below us...
- Hit = DrawRay(torsoPos + point * .8 + Vector3.new(0,1,0), Vector3.new(0,-7,0)) -- check for floor 85% of dir ahead
- if Hit == nil then -- There is no floor
- Hit = true -- Force a hit; we may not be able to get back up here.
- else
- Hit = nil -- Force a false to hit, 'cause everything is OK. (Does NOT check CanCollide of Floor!)
- end -- cliff check
- end -- Player Hieght
- end -- path ok?
- return Hit
- end -- FireRayToward
- function FireAtPlayer()
- origin = CFrame.new(torsoPos, Vector3.new(targpos.x, torsoPos.y, targpos.z)) -- This contains Origin & Direction
- local hit = FireRayToward()
- return hit
- end
- function FireRayAhead()
- origin = CFrame.new(torsoPos, torsoPos + Vector3.new(Xdir, 0, Zdir))
- local hit = FireRayToward()
- targpos = torsoPos + Vector3.new(Xdir,0,Zdir)
- return hit
- end
- function FireRay() -- Fire Ahead and diagonaly
- origin = CFrame.new(torsoPos, torsoPos + Vector3.new(Xdag, 0, Zdag))
- local hit = FireRayToward()
- if hit then
- origin = CFrame.new(torsoPos, torsoPos + Vector3.new(Xdir, 0, Zdir))
- hit = FireRayToward()
- if not hit then
- targpos = torsoPos + Vector3.new(Xdir,0,Zdir)
- end
- else
- targpos = torsoPos + Vector3.new(Xdag,0,Zdag)
- end
- return hit
- end -- Fire Ray
- function FireDag()
- origin = CFrame.new(torsoPos, torsoPos + Vector3.new(Xdag, 0, Zdag))
- local hit = FireRayToward()
- return hit
- end -- Fire Diagonaly
- function TurnRight()
- if Xdir == 0 then
- Xdir = -Zdir
- Zdir = 0
- else
- Zdir = Xdir
- Xdir = 0
- end
- if Xdag == Zdag then Xdag = -Xdag else Zdag = -Zdag end
- end -- Left
- function TurnLeft()
- if Xdir == 0 then
- Xdir = Zdir
- Zdir = 0
- else
- Zdir = -Xdir
- Xdir = 0
- end
- if Xdag == Zdag then Zdag = -Zdag else Xdag = -Xdag end
- end -- Left
- function GetDir()
- Xdir = (targpos.x - torsoPos.x) -- Which way are we going?
- Zdir = (targpos.z - torsoPos.z)
- -- if Zdir < 0 then -- Get closest 45 degree angle. Diagonal.
- -- Zdag = -RAYLength
- -- else
- -- Zdag = RAYLength
- -- end
- -- if Xdir < 0 then
- -- Xdag = -RAYLength
- -- else
- -- Xdag = RAYLength
- -- end
- if math.abs(Xdir) > math.abs(Zdir) then -- Ordinal.
- if Xdir < 0 then
- Xdir = -RAYLength
- -- convert to our direction indicator.
- else
- Xdir = RAYLength
- end
- Zdag = Xdir -- Diagonal Right.
- Xdag = Xdir
- Zdir = 0
- else -- abs
- if Zdir < 0 then
- Zdir = -RAYLength
- else
- Zdir = RAYLength
- end
- Zdag = Zdir
- Xdag = -Zdir
- Xdir = 0
- end -- abs
- end -- GetDir
- while AItorso do -- while I still have a body; search.
- torsoPos = AItorso.Position
- local targ = Workspace.Terrain -- Temp targ
- local Distance =(torsoPos - OldPos).magnitude -- Distance traveled, since last loop
- --local Distance =10
- if target == nil then Logic = 0
- -- Distance = 10
- end -- Player died.
- if Logic == 0 then -- Defalt logic
- target = findNearestTorso(torsoPos) --- target is some Player. FindNearest and get xdir, ydir.
- if target ~= nil then
- targ = target
- -- if ClimbingLadder and Distance >= 1 then
- -- targpos = torsoPos + AItorso.CFrame.lookVector * 9
- -- else
- targpos = target.Position
- -- end
- if Distance < 1 and (torsoPos - targpos).magnitude > 4 then -- Check if we are stuck.
- GetDir()
- OldX = Xdir -- Goal direction.
- OldZ = Zdir
- Logic = 1 -- Impeded
- else
- if FireAtPlayer() then -- hit
- GetDir()
- OldX = Xdir -- Goal direction.
- OldZ = Zdir
- if FireDag() then
- Logic = 1 -- Go Left; Look Right.
- ClimbingLadder = true -- first time thru logic 1 indicator
- else
- targpos = torsoPos + Vector3.new(Xdag,0,Zdag) -- go Right
- end -- dagRight
- end -- hit?
- end -- impeded?
- else
- print(AIName, number, ": No target. - ", target)
- -- torsoPos = torsoPos * 2 -- Turn Impeded?, off
- -- Distance = 10
- end -- if no target?
- end -- Logic 0
- -- 1 - Look Right or Go left
- if Logic == 1 then
- if Distance >= 1 then
- if ClimbingLadder == false then -- or target.Position.y < torsoPos.y + 4 then
- TurnRight()
- end -- else go straight or go up
- else
- TurnLeft()
- end
- if FireRayAhead() then -- Check straight first. (And Diagonaly left)
- TurnLeft()
- if FireRay() then -- Check left (And Diagonaly left & back)
- TurnLeft()
- if FireRay() then
- TurnLeft()
- if FireRay() then
- targpos = torsoPos + Vector3.new(Xdir,0,Zdir)
- hum.Jump = true
- end -- right
- end -- Back
- end -- Left
- else -- If succesful Ahead then... (We only check RightTurns for a get-out-of-jail-Free card)
- if Xdir == OldX and OldZ == Zdir then -- Gracefully exiting Logic 1
- Logic = 0
- end -- check Goal dir?
- end -- Ahead
- end -- Logic 1
- -- go
- OldPos = torsoPos
- hum:MoveTo(targpos, targ) -- MoveToward Target
- --wait
- wait(BRAINWave)
- while FreeFalling do
- FreeFalling = false
- wait(.2)
- end
- end -- Main
- end;
- function() -- Enemy by RangeMeludE --
- function waitForChild(parent, childName)
- while true do
- local child = parent:findFirstChild(childName)
- if child then
- return child
- end
- parent.ChildAdded:wait()
- end
- end
- ----------------------------- TEAM COLORS
- ----------------------------- ANIMATION
- -- declarations
- local Figure = script.Parent
- local Torso = waitForChild(Figure, "Torso")
- local RightShoulder = waitForChild(Torso, "Right Shoulder")
- local LeftShoulder = waitForChild(Torso, "Left Shoulder")
- local RightHip = waitForChild(Torso, "Right Hip")
- local LeftHip = waitForChild(Torso, "Left Hip")
- local Neck = waitForChild(Torso, "Neck")
- local Humanoid = nil -- Hack to Animate a Humanoid, no mateer what Humanoid is .Named.
- if true then
- local list = Figure:GetChildren() -- temp var.
- for x = 1, #list do
- local temp = list[x]
- if (temp.className == "Humanoid") then
- Humanoid = temp.Name
- end -- found Humanoid
- end -- Parts
- end -- Discard list
- local Humanoid = Figure[Humanoid]
- --local Humanoid = waitForChild(Figure, "Humanoid")
- local pose = "Standing"
- local toolAnim = "None"
- local toolAnimTime = 0
- local isSeated = false
- -- functions
- function onRunning(speed)
- if isSeated then return end
- if speed>0 then
- pose = "Running"
- else
- pose = "Standing"
- end
- end
- function onDied()
- pose = "Dead"
- end
- function onJumping()
- isSeated = false
- pose = "Jumping"
- end
- function onClimbing()
- pose = "Climbing"
- end
- function onGettingUp()
- pose = "GettingUp"
- end
- function onFreeFall()
- pose = "FreeFall"
- end
- function onFallingDown()
- pose = "FallingDown"
- end
- function onSeated()
- isSeated = true
- pose = "Seated"
- print("Seated")
- end
- function moveJump()
- RightShoulder.MaxVelocity = 0.5
- LeftShoulder.MaxVelocity = 0.5
- RightShoulder.DesiredAngle = 3.14
- LeftShoulder.DesiredAngle = -3.14
- RightHip.DesiredAngle = 0
- LeftHip.DesiredAngle = 0
- end
- function moveFreeFall()
- RightShoulder.MaxVelocity = 0.5
- LeftShoulder.MaxVelocity = 0.5
- RightShoulder.DesiredAngle = 1
- LeftShoulder.DesiredAngle = -1
- RightHip.DesiredAngle = 0
- LeftHip.DesiredAngle = 0
- end
- function moveClimb()
- RightShoulder.MaxVelocity = 0.5
- LeftShoulder.MaxVelocity = 0.5
- RightShoulder.DesiredAngle = -3.14
- LeftShoulder.DesiredAngle = 3.14
- RightHip.DesiredAngle = 0
- LeftHip.DesiredAngle = 0
- end
- function moveSit()
- print("Move Sit")
- RightShoulder.MaxVelocity = 0.15
- LeftShoulder.MaxVelocity = 0.15
- RightShoulder.DesiredAngle = 3.14 /2
- LeftShoulder.DesiredAngle = -3.14 /2
- RightHip.DesiredAngle = 3.14 /2
- LeftHip.DesiredAngle = -3.14 /2
- end
- function getTool()
- kidTable = Figure:children()
- if (kidTable ~= nil) then
- numKids = #kidTable
- for i=1,numKids do
- if (kidTable[i].className == "Tool") then return kidTable[i] end
- end
- end
- return nil
- end
- function getToolAnim(tool)
- c = tool:children()
- for i=1,#c do
- if (c[i].Name == "toolanim" and c[i].className == "StringValue") then
- return c[i]
- end
- end
- return nil
- end
- function animateTool()
- if (toolAnim == "None") then
- RightShoulder.DesiredAngle = 1.57
- return
- end
- if (toolAnim == "Slash") then
- RightShoulder.MaxVelocity = 0.5
- RightShoulder.DesiredAngle = 0
- return
- end
- if (toolAnim == "Lunge") then
- RightShoulder.MaxVelocity = 0.5
- LeftShoulder.MaxVelocity = 0.5
- RightHip.MaxVelocity = 0.5
- LeftHip.MaxVelocity = 0.5
- RightShoulder.DesiredAngle = 1.57
- LeftShoulder.DesiredAngle = 1.0
- RightHip.DesiredAngle = 1.57
- LeftHip.DesiredAngle = 1.0
- return
- end
- end
- function move(time)
- local amplitude
- local frequency
- if (pose == "Jumping") then
- moveJump()
- return
- end
- if (pose == "FreeFall") then
- moveFreeFall()
- return
- end
- if (pose == "Climbing") then
- moveClimb()
- return
- end
- if (pose == "Seated") then
- moveSit()
- return
- end
- RightShoulder.MaxVelocity = 0.15
- LeftShoulder.MaxVelocity = 0.15
- if (pose == "Running") then
- amplitude = 1
- frequency = 9
- else
- amplitude = 0.1
- frequency = 1
- end
- desiredAngle = amplitude * math.sin(time*frequency)
- RightShoulder.DesiredAngle = desiredAngle
- LeftShoulder.DesiredAngle = desiredAngle
- RightHip.DesiredAngle = -desiredAngle/4
- LeftHip.DesiredAngle = -desiredAngle/4
- local tool = getTool()
- if tool ~= nil then
- animStringValueObject = getToolAnim(tool)
- if animStringValueObject ~= nil then
- toolAnim = animStringValueObject.Value
- -- message recieved, delete StringValue
- animStringValueObject.Parent = nil
- toolAnimTime = time + .3
- end
- if time > toolAnimTime then
- toolAnimTime = 0
- toolAnim = "None"
- end
- animateTool()
- else
- toolAnim = "None"
- toolAnimTime = 0
- end
- end
- -- connect events
- Humanoid.Died:connect(onDied)
- Humanoid.Running:connect(onRunning)
- Humanoid.Jumping:connect(onJumping)
- Humanoid.Climbing:connect(onClimbing)
- Humanoid.GettingUp:connect(onGettingUp)
- Humanoid.FreeFalling:connect(onFreeFall)
- Humanoid.FallingDown:connect(onFallingDown)
- Humanoid.Seated:connect(onSeated)
- -- main program
- local nextTime = 0
- local runService = game:service("RunService");
- while Figure.Parent~=nil do
- time = runService.Stepped:wait()
- if time > nextTime then
- move(time)
- nextTime = time + .1
- end
- end
- end;
- function() -- Created by Quenty (@Quenty, follow me on twitter).
- -- Should work with only ONE copy, seamlessly with weapons, trains, et cetera.
- -- Parts should be ANCHORED before use. It will, however, store relatives values and so when tools are reparented, it'll fix them.
- --[[ INSTRUCTIONS
- - Place in the model
- - Make sure model is anchored
- - That's it. It will weld the model and all children.
- THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED.
- THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED.
- THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED.
- THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED.
- THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED.
- THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED.
- THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED.
- THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED.
- This script is designed to be used is a regular script. In a local script it will weld, but it will not attempt to handle ancestory changes.
- ]]
- --[[ DOCUMENTATION
- - Will work in tools. If ran more than once it will not create more than one weld. This is especially useful for tools that are dropped and then picked up again.
- - Will work in PBS servers
- - Will work as long as it starts out with the part anchored
- - Stores the relative CFrame as a CFrame value
- - Takes careful measure to reduce lag by not having a joint set off or affected by the parts offset from origin
- - Utilizes a recursive algorith to find all parts in the model
- - Will reweld on script reparent if the script is initially parented to a tool.
- - Welds as fast as possible
- ]]
- -- qPerfectionWeld.lua
- -- Created 10/6/2014
- -- Author: Quenty
- -- Version 1.0.3
- -- Updated 10/14/2014 - Updated to 1.0.1
- --- Bug fix with existing ROBLOX welds ? Repro by asimo3089
- -- Updated 10/14/2014 - Updated to 1.0.2
- --- Fixed bug fix.
- -- Updated 10/14/2014 - Updated to 1.0.3
- --- Now handles joints semi-acceptably. May be rather hacky with some joints. :/
- local NEVER_BREAK_JOINTS = false -- If you set this to true it will never break joints (this can create some welding issues, but can save stuff like hinges).
- local function CallOnChildren(Instance, FunctionToCall)
- -- Calls a function on each of the children of a certain object, using recursion.
- FunctionToCall(Instance)
- for _, Child in next, Instance:GetChildren() do
- CallOnChildren(Child, FunctionToCall)
- end
- end
- local function GetNearestParent(Instance, ClassName)
- -- Returns the nearest parent of a certain class, or returns nil
- local Ancestor = Instance
- repeat
- Ancestor = Ancestor.Parent
- if Ancestor == nil then
- return nil
- end
- until Ancestor:IsA(ClassName)
- return Ancestor
- end
- local function GetBricks(StartInstance)
- local List = {}
- -- if StartInstance:IsA("BasePart") then
- -- List[#List+1] = StartInstance
- -- end
- CallOnChildren(StartInstance, function(Item)
- if Item:IsA("BasePart") then
- List[#List+1] = Item;
- end
- end)
- return List
- end
- local function Modify(Instance, Values)
- -- Modifies an Instance by using a table.
- assert(type(Values) == "table", "Values is not a table");
- for Index, Value in next, Values do
- if type(Index) == "number" then
- Value.Parent = Instance
- else
- Instance[Index] = Value
- end
- end
- return Instance
- end
- local function Make(ClassType, Properties)
- -- Using a syntax hack to create a nice way to Make new items.
- return Modify(Instance.new(ClassType), Properties)
- end
- local Surfaces = {"TopSurface", "BottomSurface", "LeftSurface", "RightSurface", "FrontSurface", "BackSurface"}
- local HingSurfaces = {"Hinge", "Motor", "SteppingMotor"}
- local function HasWheelJoint(Part)
- for _, SurfaceName in pairs(Surfaces) do
- for _, HingSurfaceName in pairs(HingSurfaces) do
- if Part[SurfaceName].Name == HingSurfaceName then
- return true
- end
- end
- end
- return false
- end
- local function ShouldBreakJoints(Part)
- --- We do not want to break joints of wheels/hinges. This takes the utmost care to not do this. There are
- -- definitely some edge cases.
- if NEVER_BREAK_JOINTS then
- return false
- end
- if HasWheelJoint(Part) then
- return false
- end
- local Connected = Part:GetConnectedParts()
- if #Connected == 1 then
- return false
- end
- for _, Item in pairs(Connected) do
- if HasWheelJoint(Item) then
- return false
- elseif not Item:IsDescendantOf(script.Parent) then
- return false
- end
- end
- return true
- end
- local function WeldTogether(Part0, Part1, JointType, WeldParent)
- --- Weld's 2 parts together
- -- @param Part0 The first part
- -- @param Part1 The second part (Dependent part most of the time).
- -- @param [JointType] The type of joint. Defaults to weld.
- -- @param [WeldParent] Parent of the weld, Defaults to Part0 (so GC is better).
- -- @return The weld created.
- JointType = JointType or "Weld"
- local RelativeValue = Part1:FindFirstChild("qRelativeCFrameWeldValue")
- local NewWeld = Part1:FindFirstChild("qCFrameWeldThingy") or Instance.new(JointType)
- Modify(NewWeld, {
- Name = "qCFrameWeldThingy";
- Part0 = Part0;
- Part1 = Part1;
- C0 = CFrame.new();--Part0.CFrame:inverse();
- C1 = RelativeValue and RelativeValue.Value or Part1.CFrame:toObjectSpace(Part0.CFrame); --Part1.CFrame:inverse() * Part0.CFrame;-- Part1.CFrame:inverse();
- Parent = Part1;
- })
- if not RelativeValue then
- RelativeValue = Make("CFrameValue", {
- Parent = Part1;
- Name = "qRelativeCFrameWeldValue";
- Archivable = true;
- Value = NewWeld.C1;
- })
- end
- return NewWeld
- end
- local function WeldParts(Parts, MainPart, JointType, DoNotUnanchor)
- -- @param Parts The Parts to weld. Should be anchored to prevent really horrible results.
- -- @param MainPart The part to weld the model to (can be in the model).
- -- @param [JointType] The type of joint. Defaults to weld.
- -- @parm DoNotUnanchor Boolean, if true, will not unachor the model after cmopletion.
- for _, Part in pairs(Parts) do
- if ShouldBreakJoints(Part) then
- Part:BreakJoints()
- end
- end
- for _, Part in pairs(Parts) do
- if Part ~= MainPart then
- WeldTogether(MainPart, Part, JointType, MainPart)
- end
- end
- if not DoNotUnanchor then
- for _, Part in pairs(Parts) do
- Part.Anchored = false
- end
- MainPart.Anchored = false
- end
- end
- local function PerfectionWeld()
- local Tool = GetNearestParent(script, "Tool")
- local Parts = GetBricks(script.Parent)
- local PrimaryPart = Tool and Tool:FindFirstChild("Handle") and Tool.Handle:IsA("BasePart") and Tool.Handle or script.Parent:IsA("Model") and script.Parent.PrimaryPart or Parts[1]
- if PrimaryPart then
- WeldParts(Parts, PrimaryPart, "Weld", false)
- else
- warn("qWeld - Unable to weld part")
- end
- return Tool
- end
- local Tool = PerfectionWeld()
- if Tool and script.ClassName == "Script" then
- --- Don't bother with local scripts
- script.Parent.AncestryChanged:connect(function()
- PerfectionWeld()
- end)
- end
- -- Created by Quenty (@Quenty, follow me on twitter).
- end;}local ActualScripts = {}
- function s(var)
- local func = table.remove(Scripts,1)
- setfenv(func,setmetatable({script=var,require=fake_require or require,global=genv},{
- __index = getfenv(func),
- }))
- table.insert(ActualScripts,coroutine.wrap(func))
- end
- Decode = function(str,t,props,classes,values,ICList,Model,CurPar,LastIns,split,RemoveAndSplit,InstanceList)
- local tonum,table_remove,inst,parnt,comma,table_foreach = tonumber,table.remove,Instance.new,"Parent",",",
- function(t,f)
- for a,b in pairs(t) do
- f(a,b)
- end
- end
- local Types = {
- Color3 = Color3.new,
- Vector3 = Vector3.new,
- Vector2 = Vector2.new,
- UDim = UDim.new,
- UDim2 = UDim2.new,
- CFrame = CFrame.new,
- Rect = Rect.new,
- NumberRange = NumberRange.new,
- BrickColor = BrickColor.new,
- PhysicalProperties = PhysicalProperties.new,
- NumberSequence = function(...)
- local a = {...}
- local t = {}
- repeat
- t[#t+1] = NumberSequenceKeypoint.new(table_remove(a,1),table_remove(a,1),table_remove(a,1))
- until #a==0
- return NumberSequence.new(t)
- end,
- ColorSequence = function(...)
- local a = {...}
- local t = {}
- repeat
- t[#t+1] = ColorSequenceKeypoint.new(table_remove(a,1),Color3.new(table_remove(a,1),table_remove(a,1),table_remove(a,1)))
- until #a==0
- return ColorSequence.new(t)
- end,
- number = tonumber,
- boolean = function(a)
- return a=="1"
- end
- }
- split = function(str,sep)
- if not str then return end
- local fields = {}
- local ConcatNext = false
- str:gsub(("([^%s]+)"):format(sep),function(c)
- if ConcatNext == true then
- fields[#fields] = fields[#fields]..sep..c
- ConcatNext = false
- else
- fields[#fields+1] = c
- end
- if c:sub(#c)=="\\" then
- c = fields[#fields]
- fields[#fields] = c:sub(1,#c-1)
- ConcatNext = true
- end
- end)
- return fields
- end
- RemoveAndSplit = function(t)
- return split(table_remove(t,1),comma)
- end
- t = split(str,";")
- props = RemoveAndSplit(t)
- classes = RemoveAndSplit(t)
- values = split(table_remove(t,1),'|')
- ICList = RemoveAndSplit(t)
- InstanceList = {}
- Model = inst"Model"
- CurPar = Model
- table_foreach(t,function(ct,c)
- if c=="n" or c=="p" then
- CurPar = c=="n" and LastIns or CurPar[parnt]
- else
- ct = split(c,"|")
- local class = classes[tonum(table_remove(ct,1))]
- if class=="UnionOperation" then
- LastIns = {UsePartColor="1"}
- else
- LastIns = inst(class)
- if LastIns:IsA"Script" then
- s(LastIns)
- elseif LastIns:IsA("ModuleScript") then
- ms(LastIns)
- end
- end
- local function SetProperty(LastIns,p,str,s)
- s = Types[typeof(LastIns[p])]
- if p=="CustomPhysicalProperties" then
- s = PhysicalProperties.new
- end
- if s then
- LastIns[p] = s(unpack(split(str,comma)))
- else
- LastIns[p] = str
- end
- end
- local UnionData
- table_foreach(ct,function(s,p,a,str)
- a = p:find":"
- p,str = props[tonum(p:sub(1,a-1))],values[tonum(p:sub(a+1))]
- if p=="UnionData" then
- UnionData = split(str," ")
- return
- end
- if class=="UnionOperation" then
- LastIns[p] = str
- return
- end
- SetProperty(LastIns,p,str)
- end)
- if UnionData then
- local LI_Data = LastIns
- LastIns = DecodeUnion(UnionData)
- table_foreach(LI_Data,function(p,str)
- SetProperty(LastIns,p,str)
- end)
- end
- table.insert(InstanceList,LastIns)
- LastIns[parnt] = CurPar
- end
- end)
- table_remove(ICList,1)
- table_foreach(ICList,function(a,b)
- b = split(b,">")
- InstanceList[tonum(b[1])][props[tonum(b[2])]] = InstanceList[tonum(b[3])]
- end)
- return Model:GetChildren()
- end
- local Objects = Decode('Name,PrimaryPart,CustomPhysicalProperties,Color,Transparency,Position,Orientation,Velocity,Size,TopSurface,Scale,SoundId,Volume,LeftSurface,RightSurface,MaxVelocity,C0,C1,Part0,Part1,DesiredAngle,CanC'
- ..'ollide,BottomSurface,NameOcclusion,Health,MaxHealth,WalkSpeed,Anchored,Material,MeshId,MeshType,BackSurface,FrontSurface,Reflectance,TextureId,VertexColor,Texture,Face,Shape;Part,Model,SpecialMesh,Scr'
- ..'ipt,Sound,Motor,Weld,Humanoid,BoolValue,Decal,CylinderMesh;Part|Allosaurus|Head|0.6999,0,0.5,1,1|0.3568,0.3647,0.4117|1|13.4643,1.7685,50.2597|0,-95.25,0|-10.0613,-0.0011,8.0146|0.7859,0.3929,0.3929|0'
- ..'|1.25,1.25,1.25|Sound2|rbxassetid://284340475|Sound3|rbxassetid://1099690763|Sound1|Torso|13.4644,1.179,50.2597|-10.0614,-0.0011,8.0154|0.7859,0.7859,0.3929|2|Right Shoulder|0.15|-0.786,0.1964,0,0,0,1'
- ..',0,1,-0,-1,0,0|-0.1965,0.1964,0,0,0,1,0,1,-0,-1,0,0|-0.5989|Left Shoulder|0.7859,0.1964,0,0,0,-1,0,1,0,1,0,0|0.1964,0.1964,0,0,0,-1,0,1,0,1,0,0|Right Hip|0.1|0.3929,-0.393,0,0,0,1,0,1,-0,-1,0,0|0.1964'
- ..',0.3929,0,0,0,1,0,1,-0,-1,0,0|0.1497|Left Hip|-0.393,-0.393,0,0,0,-1,0,1,0,1,0,0|-0.1965,0.3929,0,0,0,-1,0,1,0,1,0,0|Neck|0,0.3929,0,-1,0,0,0,0,1,0,1,-0|0,-0.1965,0,-1,0,0,0,0,1,0,1,-0|Left Arm|13.518'
- ..'3,1.179,49.6727|-0.9075,-0.0011,8.8568|0.3929,0.7859,0.3929|0|Right Arm|13.4104,1.179,50.8467|-19.2152,-0.0011,7.174|Left Leg|13.4824,0.393,50.064|-7.0102,-0.0011,8.2969|Right Leg|13.4465,0.393,50.455'
- ..'4|-13.1127,-0.0011,7.736|400|30|Respawn|AIScript|GraphicsToggle|AnimateAny|Arm1|Middle|0.2908,0.5816,0.2908|0,0,0,0,0,-1,0,0.9999,-0.0001,0.9999,0,-0.0001|Arm2|Chest|0.1058,0.1647,0.2078|14.4017,1.729'
- ..'2,50.3284|0,180,30|0.7899,0.3929,0.448|neck|1312|14.1449,1.6485,50.3296|25.52,85.05,-179.1301|-37.0621,-0.0011,5.2401|0.5816,0.1163,0.2908|EggMesh3|0.1744,0.2908,0.2326|http://www.roblox.com/asset/?id'
- ..'=1527559|5|tail|12.7479,1.3926,50.1967|88.43,-125.42,-30.0901|18.3674,-0.0011,10.5149|0.5816,0.5816,0.2908|0.1454,0.8724,0.1454|13.9728,0.912,50.1246|-0.7901,174.6699,91.36|-30.2326,-0.0011,13.3735|0.'
- ..'2908,0.1163,0.2908|0.0581,0.2035,0.0872|13.8564,1.089,50.1144|-55.0401,83.54,1.3799|0.1163,0.0872,0.2035|14.1516,0.7269,50.1498|-0.77,174.6699,-139.75|-37.3243,-0.0011,12.374|0.2908,0.1163,0.5816|0.05'
- ..'81,0.1163,0.0872|13.9367,0.9174,50.5122|-28.7974,-0.0011,-2.0033|Handle|0.4|14.0202,0.5664,50.5134|60.06,-97.1201,-91.56|-32.1114,-0.0011,-2.0497|0.5816,0.4653,0.2908|0.2908,0.2908,0.0872|http://www.r'
- ..'oblox.com/asset/?id=10681506|http://www.roblox.com/asset/?id=10681501|14.1212,0.7267,50.5177|-0.77,174.6699,-145.17|-36.1192,-0.0011,-2.2217|13.8486,1.0967,50.4845|-56.6,83.48,1.4299|13.2202,1.221,50.'
- ..'2299|5.1999,84.7399,-179.2101|-0.3694,-0.0011,9.1972|0.1163,0.2617,0.3199|-7.7222,6.6444,48.4559|-0.0501,-95.25,-1.51|0.5816,0.6979,0.5816|0.3929,0.3929,0.3929|rbxassetid://778193911|rbxassetid://7781'
- ..'94802|13.9511,1.3518,50.3074|-32.6,-94.82,-0.94|0.1744,0.2908,0.1744|12.2952,1.4168,50.1548|36.3315,-0.0011,12.1769|0.1163,0.8724,0.1163|14.1901,0.8297,50.1484|-0.77,174.6699,2.23|-38.8538,-0.0011,12.'
- ..'4299|0.0581,0.0872,0.0581|14.1551,0.8323,50.5255|-37.4659,-0.0011,-2.5327|13.4101,1.3821,50.2574|4.9,-95.38,-1.52|0.5816,1.3959,0.5816|0.0872,0.2326,0.5816|Stripe|14.0763,1.5852,50.3223|-43.6801,83.91'
- ..'99,-178.9101|-34.3395,-0.0011,5.5287|0.1599,0.1817,0.0581|14.0716,0.5969,50.1313|14.2136,1.7297,50.3371|-11.5101,84.51,-179.1901|-39.7889,-0.0011,4.9417|0.1599,0.2181,0.0727|14.1243,1.6891,50.3283|-30'
- ..'.83,84.1999,-179.0801|-36.2475,-0.0011,5.2936|0.1599,0.189,0.0727|13.5505,1.4381,50.2713|2.93,84.7099,-179.2101|-13.4755,-0.0011,7.5547|0.0727,0.2181,0.0581|13.2867,1.4302,50.2465|-3.0104,-0.0011,8.53'
- ..'53|13.7586,1.3805,50.2899|-21.734,-0.0011,6.8162|Hawk|14.2927,1.9428,50.3475|11.1499,84.83,0.8|-42.9325,-0.0011,4.531|0.5816,0.3489,0.2908|0.1454,0.1454,0.2908|2,0,0|http://www.roblox.com/asset/?id=11'
- ..'185882|14.4073,1.9479,50.3583|19.76,84.9599,0.8399|RaptorMask|14.6243,1.6996,50.3737|-13.1401,-95.14,-0.8101|-56.0871,-0.0011,3.4962|0.4653,0.0785,0.0785|0.2035,0.2035,0.2908|3,2,17.8999|http://www.ro'
- ..'blox.com/asset/?id=80291600|http://www.roblox.com/asset/?id=166123148|1|Egg|1296|14.539,1.7601,50.5079|70.3,-97.53,-175.26|0.0045,0.0045,0.0137|http://www.roblox.com/asset/?id=76608021|0.9607,0.8039,0'
- ..'.1882|288|14.53,1.7604,50.4902|0.0229,0.0229,0.0229|14.5413,1.7725,50.2439|14.5432,1.7719,50.2252|qPerfectionWeld|0,0,0,-0.001,0.0137,-1,0.0238,0.9996,0.0137,0.9997,-0.0239,-0.0014|0,-1.0444,-0.6322,-'
- ..'0.0001,0,0.9999,-0.3157,0.9488,-0.0001,-0.9489,-0.3157,-0.0001|0,0.7184,-0.4149,0,-0.0001,-1,0.4094,-0.9124,0,-0.9124,-0.4095,-0.0001|-0.0009,-0.7242,0.1965,0,-0.0001,-1,0.9999,0,0,0,-1,0|0.2576,-0.5,'
- ..'-0.178,0,1,-0.0001,-1,0,-0.0001,-0.0001,0,0.9999|-0.1798,0.3618,-0.1402,0,0,0.9999,0.833,0.5532,-0.0001,-0.5533,0.833,-0.0001|-0.808,0.0886,-0.1671,-0.7784,-0.6279,-0.0002,0.6278,-0.7784,-0.0003,0,-0.'
- ..'0003,0.9999|0.2469,-0.4997,0.2111,0,1,-0.0001,-1,0,-0.0001,-0.0001,0,0.9999|-0.8057,-0.2048,-0.24,-0.8783,-0.4782,-0.0069,0.0077,0,-1,0.4781,-0.8783,0.0036|-0.8133,0.018,0.202,-0.8343,-0.5515,-0.0002,'
- ..'0.5514,-0.8343,-0.0003,0,-0.0003,0.9999|0.1893,0.3806,-0.1555,-0.0001,0,0.9999,0.8478,0.5303,-0.0001,-0.5304,0.8478,-0.0001|0.0075,0.0194,0.2487,0,0,-1,0.0669,-0.9978,0,-0.9978,-0.067,0|0.0014,-0.772,'
- ..'1.0166,0,-0.0001,-1,-0.2042,0.9789,-0.0001,0.9789,0.2041,-0.0001|0,-0.4091,0.3188,0,-0.0001,-1,-0.5187,0.855,-0.0001,0.855,0.5186,0|-0.0009,-1.1793,0.2099,0,-0.0001,-1,0.9999,0,0,0,-1,0|0.7253,0.3236,'
- ..'-0.1734,0.9998,0.0152,-0.0001,-0.0153,0.9998,0.0002,0,-0.0003,0.9999|0.7252,0.3159,0.2052,0.9998,0.0152,-0.0001,-0.0153,0.9998,0.0002,0,-0.0003,0.9999|0.0026,-0.2071,-0.0367,-0.0017,-0.0127,-1,0.109,0'
- ..'.9939,-0.0128,0.994,-0.1091,-0.0003|0,-0.131,-0.7254,0,-0.0001,-1,-0.7077,-0.7066,0,-0.7066,0.7076,-0.0001|-0.8041,0.1809,-0.2117,-0.8783,-0.4782,-0.0069,0.0077,0,-1,0.4781,-0.8783,0.0036|0,0.3893,-0.'
- ..'848,0,-0.0001,-1,-0.2229,-0.9749,0,-0.9749,0.2228,-0.0001|0,0.098,-0.8312,0,-0.0001,-1,-0.5328,-0.8463,0,-0.8463,0.5327,-0.0001|0,0.2632,-0.0734,0,-0.0001,-1,0.0273,-0.9997,0,-0.9997,-0.0274,-0.0001|0'
- ..',0.2417,0.1907,0,-0.0001,-1,0.0273,-0.9997,0,-0.9997,-0.0274,-0.0001|0,0.2163,-0.2851,0,-0.0001,-1,0.0273,-0.9997,0,-0.9997,-0.0274,-0.0001|0,-0.9108,-0.6695,-0.0001,0,1,-0.1701,0.9854,-0.0001,-0.9855'
- ..',-0.1701,-0.0001|Leg1|0.4442,-0.0943,-0.224,-0.8436,-0.5371,0,-0.0001,0,0.9999,-0.5371,0.8435,-0.0001|-0.7333,-0.3117,0.1216,0.3963,0.8711,-0.2899,0.1533,0.2484,0.9564,0.9052,-0.4235,-0.0351|-0.1108,-'
- ..'0.0937,-0.1171,0.866,0.5,-0.0001,-0.0001,0,0.9999,0.5,-0.8661,0|0.0428,0.106,0.2193,-0.014,0,-1,0.3983,0.9172,-0.0056,0.9171,-0.3984,-0.0129|0.0907,0.0503,-0.117,0,0.9999,-0.0001,0,0,-1,-1,-0.0001,0|-'
- ..'0.185,-0.1852,0.0868,0,-1,0,-0.9088,-0.0001,0.4173,-0.4174,0,-0.9088|-0.1745,-0.2278,0.091,-0.0001,-1,0,-1,-0.0001,0,0,0,-1|13.2376,0.8205,49.9469|-57.5201,84.75,-90|-5.1836,-0.0011,4.4796|0.2908,0.34'
- ..'89,0.2908|0.1163,0.0872,0.4071|13.2633,1.1607,49.9536|25.0599,-93.03,74.08|-5.289,-0.0011,4.8794|0.5816,0.2326,0.2908|0.3489,0.0872,0.1744|13.3372,0.347,49.9566|60,-95.25,90|-5.3357,-0.0011,6.0328|0.2'
- ..'908,0.2326,0.2908|0.378,0.0872,0.1163|Claw|272|13.7285,0.3831,50.0402|23.4799,-94.45,0|-6.6389,-0.0011,12.1339|0.1,1,1|13.6035,0.3023,50.0246|0,84.75,90|-6.3956,-0.0011,10.1843|0.6999,0.2,0.6999|13.62'
- ..'82,0.208,49.9206|0,19.42,-90|-4.7735,-0.0011,10.5706|0.0581,0.4943,0.0581|http://www.roblox.com/asset/?id=1033714|13.7175,0.2185,49.9942|0,-5.25,-90|-5.9216,-0.0011,11.9631|Leg2|-0.1135,0.0618,-0.112,'
- ..'0.8668,0.4954,-0.0557,0.064,0,0.9979,0.4943,-0.8687,-0.0318|-0.7151,-0.3025,-0.2241,0.5041,0.8148,0.2861,0.1505,0.2433,-0.9582,-0.8505,0.5261,-0.0001|0.4119,0.093,-0.1957,-0.8344,-0.5512,0,-0.0001,0,0'
- ..'.9999,-0.5512,0.8343,-0.0001|-0.0384,0.1061,0.218,-0.014,0,-1,0.3983,0.9172,-0.0056,0.9171,-0.3984,-0.0129|-0.0751,0.0424,-0.1356,-0.0001,-1,0,-0.0001,-0.0001,0.9999,-1,-0.0001,0|-0.1745,-0.2597,-0.08'
- ..'29,0,-1,0,-1,0,-0.0001,0,0,-1|-0.1758,-0.1974,-0.032,0.057,-0.9984,0.0079,-0.8584,-0.0532,-0.5104,0.5098,0.0223,-0.86|13.2908,0.352,50.5129|60.31,-91.5801,90|-14.01,-0.0011,5.3082|13.224,1.1671,50.520'
- ..'5|-31.75,84.75,73.37|-14.1281,-0.0011,4.2671|13.203,0.7833,50.5264|-56.5601,84.75,-90|-14.221,-0.0011,3.9401|13.6851,0.3825,50.5124|-14.0015,-0.0011,11.4569|13.5775,0.318,50.5101|0,84.75,-90|-13.9654,'
- ..'-0.0011,9.7798|13.6975,0.2185,50.5617|-14.7704,-0.0011,11.6505|13.5773,0.2077,50.5947|-1.28,-35.92,-93.0401|-15.286,-0.0011,9.777;0,1>2>2,9>19>17,9>20>8,10>19>15,10>20>8,11>19>8,11>20>21,12>19>8,12>20'
- ..'>19,13>19>8,13>20>2,14>19>8,14>20>99,16>19>15,16>20>30,18>19>17,18>20>33,20>19>19,20>20>127,22>19>21,22>20>151,31>19>30,31>20>30,34>19>33,34>20>33,100>19>99,100>20>99,101>19>99,101>20>85,102>19>99,102'
- ..'>20>37,103>19>99,103>20>39,104>19>99,104>20>41,105>19>99,105>20>43,106>19>99,106>20>45,107>19>99,107>20>47,108>19>99,108>20>49,109>19>99,109>20>51,110>19>99,110>20>53,111>19>99,111>20>55,112>19>99,112'
- ..'>20>87,113>19>99,113>20>59,114>19>99,114>20>61,115>19>99,115>20>63,116>19>99,116>20>65,117>19>99,117>20>67,118>19>99,118>20>69,119>19>99,119>20>71,120>19>99,120>20>73,121>19>99,121>20>75,122>19>99,122'
- ..'>20>77,123>19>99,123>20>79,124>19>99,124>20>81,125>19>99,125>20>83,128>19>127,128>20>127,129>19>127,129>20>136,130>19>127,130>20>138,131>19>127,131>20>140,132>19>127,132>20>142,133>19>127,133>20>144,1'
- ..'34>19>127,134>20>146,135>19>127,135>20>148,152>19>151,152>20>151,153>19>151,153>20>160,154>19>151,154>20>162,155>19>151,155>20>164,156>19>151,156>20>166,157>19>151,157>20>168,158>19>151,158>20>170,159'
- ..'>19>151,159>20>172;2|1:2;n;1|1:3|3:4|4:5|5:6|6:7|7:8|8:9|9:10|10:11|4:5|4:5;n;3|11:12;4;5|1:13|12:14|13:6;5|1:15|12:16|13:6;5|1:17|12:16|13:6;p;1|1:18|3:4|4:5|5:6|6:19|7:8|8:20|9:21|14:22|15:22|4:5|4:'
- ..'5;n;6|1:23|16:24|17:25|18:26|21:27;6|1:28|16:24|17:29|18:30|21:27;6|1:31|16:32|17:33|18:34|21:35;6|1:36|16:32|17:37|18:38|21:35;6|1:39|16:32|17:40|18:41;7;p;1|1:42|4:5|5:6|6:43|7:8|8:44|9:45|22:46|4:5'
- ..'|4:5;n;7;p;1|1:47|4:5|5:6|6:48|7:8|8:49|9:45|22:46|4:5|4:5;n;7;p;1|1:50|4:5|5:6|6:51|7:8|8:52|9:45|22:46|23:11|4:5|4:5;n;7;p;1|1:53|4:5|5:6|6:54|7:8|8:55|9:45|22:46|23:11|4:5|4:5;n;7;p;8|24:11|25:56|2'
- ..'6:56|27:57;4;4|1:58;4|1:59;n;9|1:60;p;4|1:61;2|1:62;n;1|1:63|4:5|5:6|6:43|7:8|8:44|9:64|22:46|4:5|4:5;n;7|17:65|18:65;p;p;2|1:66;n;1|1:63|4:5|5:6|6:48|7:8|8:49|9:64|22:46|4:5|4:5;n;7|17:65|18:65;p;p;2'
- ..'|1:67;n;1|4:68|5:6|6:69|7:70|9:71|4:68|4:68;1|1:72|28:6|4:5|29:73|5:6|6:74|7:75|8:76|9:77|22:46|4:5|4:5;n;3|1:78|11:79|30:80|31:81;p;1|1:82|28:6|4:5|29:73|5:6|6:83|7:84|8:85|9:86|22:46|32:22|23:22|33:'
- ..'22|14:22|15:22|10:22|4:5|4:5;n;3|1:78|11:87|30:80|31:81;p;1|28:6|4:5|29:73|5:6|6:88|7:89|8:90|9:91|22:46|23:22|4:5|4:5;n;3|1:78|11:92|30:80|31:81;p;1|28:6|4:5|29:73|5:6|6:93|7:94|9:77|22:46|23:22|10:2'
- ..'2|4:5|4:5;n;3|1:78|11:95|30:80|31:81;p;1|28:6|4:5|29:73|5:6|6:96|7:97|8:98|9:99|22:46|23:22|4:5|4:5;n;3|1:78|11:100|30:80|31:81;p;1|28:6|4:5|29:73|5:6|6:101|7:89|8:102|9:91|22:46|23:22|4:5|4:5;n;3|1:7'
- ..'8|11:92|30:80|31:81;p;1|1:103|28:6|4:5|29:73|34:104|5:6|6:105|7:106|8:107|9:108|22:46|23:11|10:11|4:5|4:5;n;3|11:109|30:110|35:111|31:81;p;1|28:6|4:5|29:73|5:6|6:112|7:113|8:114|9:99|22:46|23:22|4:5|4'
- ..':5;n;3|1:78|11:100|30:80|31:81;p;1|28:6|4:5|29:73|5:6|6:115|7:116|9:77|22:46|23:22|10:22|4:5|4:5;n;3|1:78|11:95|30:80|31:81;p;1|1:82|28:6|4:5|29:73|5:6|6:117|7:118|8:119|9:86|22:46|32:22|23:22|33:22|1'
- ..'4:22|15:22|10:22|4:5|4:5;n;3|1:78|11:120|30:80|31:81;p;1|1:63|28:6|4:5|29:73|6:121|7:122|9:123|22:46|4:5|4:5;n;3|11:124|30:125|35:126|31:81;p;1|1:72|28:6|4:5|29:73|5:6|6:127|7:128|9:77|22:46|4:5|4:5;n'
- ..';3|1:78|11:129|30:80|31:81;p;1|1:82|28:6|4:5|29:73|5:6|6:130|7:84|8:131|9:86|22:46|32:22|23:22|33:22|14:22|15:22|10:22|4:5|4:5;n;3|1:78|11:132|30:80|31:81;p;1|28:6|4:5|29:73|5:6|6:133|7:134|8:135|9:99'
- ..'|22:46|23:22|4:5|4:5;n;3|1:78|11:136|30:80|31:81;p;1|28:6|4:5|29:73|5:6|6:137|7:134|8:138|9:99|22:46|23:22|4:5|4:5;n;3|1:78|11:136|30:80|31:81;p;1|1:63|28:6|4:5|29:73|5:6|6:139|7:140|9:141|22:46|4:5|4'
- ..':5;n;3|1:78|11:142|30:80|31:81;p;1|1:143|28:6|4:68|29:73|5:6|6:144|7:145|8:146|9:77|22:46|4:68|4:68;n;3|1:78|11:147|30:80|31:81;p;1|1:103|28:6|4:5|29:73|34:104|5:6|6:148|7:106|9:108|22:46|23:11|10:11|'
- ..'4:5|4:5;n;3|11:109|30:110|35:111|31:81;p;1|1:143|28:6|4:68|29:73|5:6|6:149|7:150|8:151|9:77|22:46|4:68|4:68;n;3|1:78|11:152|30:80|31:81;p;1|1:143|28:6|4:68|29:73|5:6|6:153|7:154|8:155|9:77|22:46|4:68|'
- ..'4:68;n;3|1:78|11:156|30:80|31:81;p;1|1:143|28:6|4:68|29:73|5:6|6:157|7:158|8:159|9:77|22:46|4:68|4:68;n;3|1:78|11:160|30:80|31:81;p;1|1:143|28:6|4:68|29:73|5:6|6:161|7:158|8:162|9:77|22:46|4:68|4:68;n'
- ..';3|1:78|11:160|30:80|31:81;p;1|1:143|28:6|4:68|29:73|5:6|6:163|7:158|8:164|9:77|22:46|4:68|4:68;n;3|1:78|11:160|30:80|31:81;p;1|1:165|28:6|4:68|29:73|5:6|6:166|7:167|8:168|9:169|22:46|32:22|23:11|10:1'
- ..'1|4:68|4:68;n;3|11:170|36:171|30:172|31:81;p;1|1:165|28:6|4:68|29:73|5:6|6:173|7:174|9:169|22:46|32:22|23:11|10:11|4:68|4:68;n;3|11:170|36:171|30:172|31:81;p;1|1:175|28:6|4:5|29:73|5:6|6:176|7:177|8:1'
- ..'78|9:179|22:46|23:11|10:11|4:5|4:5;n;3|11:180|36:181|30:182|31:81;10|37:183|38:184;p;1|1:185|28:6|4:68|29:186|5:6|6:187|7:188|9:124|39:11|22:46|23:11|10:11|4:68|4:68;n;3|11:189|30:190|31:81;p;1|1:185|'
- ..'28:6|4:191|29:192|5:6|6:193|7:188|9:124|39:11|22:46|23:11|10:11|4:191|4:191;n;3|11:194|30:190|31:81;p;1|1:185|28:6|4:191|29:192|5:6|6:195|7:188|9:124|39:11|22:46|23:11|10:11|4:191|4:191;n;3|11:194|30:'
- ..'190|31:81;p;1|1:185|28:6|4:68|29:186|5:6|6:196|7:188|9:124|39:11|22:46|23:11|10:11|4:68|4:68;n;3|11:189|30:190|31:81;p;4|1:197;1|1:63|28:6|4:5|29:73|5:6|6:19|7:8|8:20|9:123|22:46|4:5|4:5;n;7|17:198|18'
- ..':198;7|17:198|18:199;7|17:198|18:200;7|17:198|18:201;7|17:198|18:202;7|17:198|18:203;7|17:198|18:204;7|17:198|18:205;7|17:198|18:206;7|17:198|18:207;7|17:198|18:208;7|17:198|18:209;7|17:198|18:210;7|1'
- ..'7:198|18:211;7|17:198|18:212;7|17:198|18:213;7|17:198|18:214;7|17:198|18:215;7|17:198|18:216;7|17:198|18:217;7|17:198|18:218;7|17:198|18:219;7|17:198|18:220;7|17:198|18:221;7|17:198|18:222;7|17:198|18'
- ..':223;p;p;2|1:224;n;1|1:63|4:5|29:73|5:6|6:51|7:8|8:52|9:64|22:46|4:5|4:5;n;7|17:65|18:65;7|17:65|18:225;7|17:65|18:226;7|17:65|18:227;7|17:65|18:228;7|17:65|18:229;7|17:65|18:230;7|17:65|18:231;p;1|4:'
- ..'5|29:73|5:6|6:232|7:233|8:234|9:235|22:46|23:22|4:5|4:5;n;3|1:78|11:236|30:80|31:81;p;1|4:5|29:73|5:6|6:237|7:238|8:239|9:240|22:46|23:22|10:22|4:5|4:5;n;3|1:78|11:241|30:80|31:81;p;1|4:5|29:73|5:6|6:'
- ..'242|7:243|8:244|9:245|22:46|23:22|10:22|4:5|4:5;n;3|1:78|11:246|30:80|31:81;p;1|1:247|4:68|29:248|5:6|6:249|7:250|8:251|9:91|22:46|4:68|4:68;n;3|11:252|31:22;p;1|4:5|29:248|5:6|6:253|7:254|8:255|9:235'
- ..'|22:46|4:5|4:5;n;11|11:256;p;1|1:247|4:68|29:248|5:6|6:257|7:258|8:259|9:235|22:46|23:22|10:11|4:68|4:68;n;3|11:260|30:261|31:81;p;1|1:247|4:68|29:248|5:6|6:262|7:263|8:264|9:235|22:46|23:22|10:11|4:6'
- ..'8|4:68;n;3|11:260|30:261|31:81;p;p;2|1:265;n;1|1:63|4:5|29:73|5:6|6:54|7:8|8:55|9:64|22:46|4:5|4:5;n;7|17:65|18:65;7|17:65|18:266;7|17:65|18:267;7|17:65|18:268;7|17:65|18:269;7|17:65|18:270;7|17:65|18'
- ..':271;7|17:65|18:272;p;1|4:5|29:73|5:6|6:273|7:274|8:275|9:245|22:46|23:22|10:22|4:5|4:5;n;3|1:78|11:246|30:80|31:81;p;1|4:5|29:73|5:6|6:276|7:277|8:278|9:240|22:46|23:22|10:22|4:5|4:5;n;3|1:78|11:241|'
- ..'30:80|31:81;p;1|4:5|29:73|5:6|6:279|7:280|8:281|9:235|22:46|23:22|4:5|4:5;n;3|1:78|11:236|30:80|31:81;p;1|1:247|4:68|29:248|5:6|6:282|7:250|8:283|9:91|22:46|4:68|4:68;n;3|11:252|31:22;p;1|4:5|29:248|5'
- ..':6|6:284|7:285|8:286|9:235|22:46|4:5|4:5;n;11|11:256;p;1|1:247|4:68|29:73|5:6|6:287|7:263|8:288|9:235|22:46|23:22|10:11|4:68|4:68;n;3|11:260|30:261|31:81;p;1|1:247|4:68|29:73|5:6|6:289|7:290|8:291|9:2'
- ..'35|22:46|23:22|10:11|4:68|4:68;n;3|11:260|30:261|31:81;p;p;p;')
- for _,Object in pairs(Objects) do
- Object.Parent = script and script.Parent==workspace and script or workspace
- end
- for _,f in pairs(ActualScripts) do f() end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement