Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local LaserEnabled=true local LaserPart,sp=Workspace.Laser.SelectionPartLasso,Workspace.Laser.Torso
- local Remote_Events=script:WaitForChild("Events")
- local MapStorage=game:GetService("ReplicatedStorage"):WaitForChild("Maps")
- local CurrentMap=nil
- local function FireClient(client,data) Remote_Events:FireClient(client,data) end
- LoadInProgress=false
- function LoadMap(Player,MapName)
- if LoadInProgress==true then print("Already going") FireClient(Player,{Type="Hint",Text="Loading already in progress."}) return end if not MapStorage:FindFirstChild(MapName) then return end
- if LoadInProgress==false then
- LoadInProgress=true
- if CurrentMap~=nil then DestroyMap() end
- local MapClone=RipParts(MapStorage[MapName]:Clone())
- local TotalParts=#MapClone:GetChildren()
- local PartsLoaded=0
- local newModel=Instance.new("Model",game.Workspace) CurrentMap=newModel
- local StartTick=tick()
- local k = 0
- local MapParts=MapClone:GetChildren()
- table.sort(MapParts,function(a,b) return a.Position.Y<b.Position.Y end)
- for _,v in pairs(MapParts) do
- PartsLoaded=PartsLoaded+1 k = k+1
- v.Anchored=true
- v.Parent=newModel
- Laser(v,v.BrickColor)
- --Fade(v)
- if k >= 20 then UpdateMapUI(MapName,PartsLoaded,TotalParts,true) k = 0 end
- coroutine.yield()
- --game:GetService("RunService").Stepped:wait()
- end
- Laser(nil)
- print("Finish time:",tick()-StartTick)
- UpdateMapUI(MapName,PartsLoaded,TotalParts)
- LoadInProgress=false
- end
- end
- function Fade(Part)
- coroutine.resume(coroutine.create(function()
- local base=Part.Transparency
- for i = 1,base,-.1 do
- Part.Transparency=i
- wait()
- end
- end))
- end
- function DestroyMap()
- local go=0
- local m=CurrentMap:GetChildren()
- table.sort(m,function(a,b) return a.Position.Y>b.Position.Y end)
- for _,v in pairs(m) do
- go=go+1
- Laser(v,BrickColor.new("Really red"))
- v:Destroy()
- if go>=5 then coroutine.yield() go=0 end
- end
- CurrentMap:Destroy()
- CurrentMap=nil
- end
- function Laser(Part,color)
- if not LaserEnabled or LaserPart==nil then return end
- LaserPart.Part=Part
- if color then LaserPart.Color=color end
- end
- function RipParts(Model)
- local Parts={}
- local NewModel=Instance.new("Model")
- local function Rip(p)
- for _,v in pairs(p:GetChildren()) do
- if v:IsA("BasePart") then
- table.insert(Parts,v)
- end
- Rip(v)
- end
- end
- Rip(Model)
- for _,v in pairs(Parts) do
- v.Parent=NewModel
- end
- return NewModel
- end
- function UpdateMapUI(MapName,Loaded,Count,Visible)
- coroutine.resume(coroutine.create(function()
- if Visible==false then Remote_Events:FireAllClients("HideMapUI") return end
- Remote_Events:FireAllClients({Type="MapProgress",Name=MapName,Loaded=Loaded,Count=Count,Visible=Visible})
- end))
- end
- Remote_Events.OnServerEvent:connect(function(Player,Data) print(Player,Data)
- if Data["Type"]=="SetMap" then print(Data["Map"]) if LoadInProgress==false then print("passed",Player.Name) LoadMap(Player,Data["Map"]) end end
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement