Advertisement
DogTemmie

Untitled

Aug 9th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --tEdit by Coolbob44 -- Version 2.0.0 -- Script Builder Version
  2. Player_Name = "DeltaDminor"
  3.  
  4. ---------------------------------------------------------
  5.  
  6. plr=game.Players[Player_Name]
  7. repeat wait() until plr.Character
  8.  
  9. function Create_PrivImpl(objectType)
  10.     if type(objectType) ~= 'string' then
  11.         error("Argument of Create must be a string", 2)
  12.     end
  13.     return function(dat)
  14.         dat = dat or {}
  15.         local obj = Instance.new(objectType)
  16.         local ctor = nil
  17.         for k, v in pairs(dat) do
  18.             if type(k) == 'string' then
  19.                 obj[k] = v
  20.             elseif type(k) == 'number' then
  21.                 if type(v) ~= 'userdata' then
  22.                     error("Bad entry in Create body: Numeric keys must be paired with children, got a: "..type(v), 2)
  23.                 end
  24.                 v.Parent = obj
  25.             elseif type(k) == 'table' and k.__eventname then
  26.                 if type(v) ~= 'function' then
  27.                     error("Bad entry in Create body: Key `[Create.E\'"..k.__eventname.."\']` must have a function value\
  28.                            got: "..tostring(v), 2)
  29.                 end
  30.                 obj[k.__eventname]:connect(v)
  31.             elseif k == Create then
  32.                 if type(v) ~= 'function' then
  33.                     error("Bad entry in Create body: Key `[Create]` should be paired with a constructor function, \
  34.                            got: "..tostring(v), 2)
  35.                 elseif ctor then
  36.                     error("Bad entry in Create body: Only one constructor function is allowed", 2)
  37.                 end
  38.                 ctor = v
  39.             else
  40.                 error("Bad entry ("..tostring(k).." => "..tostring(v)..") in Create body", 2)
  41.             end
  42.         end
  43.         if ctor then
  44.             ctor(obj)
  45.         end
  46.         return obj
  47.     end
  48. end
  49. Create = setmetatable({}, {__call = function(tb, ...) return Create_PrivImpl(...) end})
  50. Create.E = function(eventName)
  51.     return {__eventname = eventName}
  52. end
  53.  
  54. if not script.Parent:IsA("HopperBin") then
  55.     x = Instance.new("HopperBin")
  56.     x.Parent = plr.Backpack
  57.     x.Name = "tE 2"
  58.     script.Parent = x
  59. else
  60.     max_material = 17
  61.     points={}
  62.     points_show = {}
  63.     undo_hist={}
  64.     redo_hist={}
  65.     SC = {}
  66.     mode = 1
  67.     images = {
  68.         "http://www.roblox.com/asset/?id=33577919";
  69.         "http://www.roblox.com/asset/?id=56563112";
  70.         "http://www.roblox.com/asset/?id=62356652";
  71.         "http://www.roblox.com/asset/?id=65961537";
  72.         "http://www.roblox.com/asset/?id=67532153";
  73.         "http://www.roblox.com/asset/?id=67532038";
  74.         "http://www.roblox.com/asset/?id=67532093";
  75.         "http://www.roblox.com/asset/?id=67531995";
  76.         "http://www.roblox.com/asset/?id=67532118";
  77.         "http://www.roblox.com/asset/?id=67532015";
  78.         "http://www.roblox.com/asset/?id=67532051";
  79.         "http://www.roblox.com/asset/?id=67532206";
  80.         "http://www.roblox.com/asset/?id=67532103";
  81.         "http://www.roblox.com/asset/?id=67531804";
  82.         "http://www.roblox.com/asset/?id=67532059";
  83.         "http://www.roblox.com/asset/?id=67531848";
  84.         "http://www.roblox.com/asset/?id=67531924";
  85.         "http://www.roblox.com/asset/?id=81407474";
  86.     }
  87.     modes = {"Set", "Replace", "Walls", "Outline", "Check"}
  88.     sBox = Create'Model'{
  89.         Create'Part'{
  90.             Name = "One";
  91.             FormFactor = "Custom";
  92.             Size = Vector3.new(4,4,4);
  93.             Transparency = 1;
  94.             Anchored = true;
  95.             CanCollide = false;
  96.             Locked = true;
  97.         };
  98.         Create'Part'{
  99.             Name = "Two";
  100.             FormFactor = "Custom";
  101.             Size = Vector3.new(4,4,4);
  102.             Transparency = 1;
  103.             Anchored = true;
  104.             CanCollide = false;
  105.             Locked = true;
  106.         };
  107.     };
  108.     SelectionBox = Create'SelectionBox'{
  109.         Parent = plr.PlayerGui;
  110.         Adornee = sBox;
  111.     }
  112.    
  113.     function CreateGui()
  114.         gui = Create'ScreenGui'{
  115.             Name = "tEdit 2";
  116.             Parent = nil;
  117.            
  118.             Create'TextButton'{
  119.                 Name = "Frame";
  120.                 Size = UDim2.new(0, 500, 0, 130);
  121.                 Position = UDim2.new(0.5, -250, 1, 10);
  122.                 Text = "";
  123.                 Draggable = true;
  124.                 BackgroundTransparency = 1;
  125.                
  126.                 Create'Frame'{
  127.                     Size = UDim2.new(1,0,1,0);
  128.                     Style = "RobloxRound";
  129.                 }
  130.             }
  131.         };
  132.        
  133.         gmain = gui.Frame.Frame
  134.         modebuttons = {}
  135.         materialbuttons = {}
  136.         mater = nil
  137.        
  138.         local modeBase = Create'TextButton'{
  139.             Size = UDim2.new(0, 100, 0, 20);
  140.             Style = "RobloxButton";
  141.             TextColor3 = Color3.new(1,1,1);
  142.             FontSize = "Size10";
  143.         }
  144.        
  145.         local matBase = Create'TextButton'{
  146.             Size = UDim2.new(0, 32, 0, 32);
  147.             BackgroundColor3 = Color3.new(50/255, 50/255, 50/255);
  148.             BorderSizePixel = 0;
  149.             Text = "";
  150.             AutoButtonColor = false;
  151.            
  152.             Create'ImageLabel'{
  153.                 Name = "Image";
  154.                 Image = "";
  155.                 Size = UDim2.new(0, 30, 0, 30);
  156.                 Position = UDim2.new(0, 1, 0, 1);
  157.                 BackgroundColor3 = Color3.new(80/255, 80/255, 80/255);
  158.                 BorderSizePixel = 0;
  159.                 BorderColor3 = Color3.new(1,0,0);
  160.                 BackgroundTransparency = 1;
  161.             };
  162.         }
  163.        
  164.         local expandUp = Create'TextButton'{
  165.             Size = UDim2.new(0, 20, 0, 20);
  166.             Style = "RobloxButton";
  167.             TextColor3 = Color3.new(1,1,1);
  168.             Text = "+";
  169.             FontSize = "Size10";
  170.             Parent = gmain;
  171.             Position = UDim2.new(0, 420, 0, 10);
  172.            
  173.             Create'TextLabel'{
  174.                 TextXAlignment = "Right";
  175.                 Position = UDim2.new(0, -10, 0, 5);
  176.                 Text = "Expand";
  177.                 TextColor3 = Color3.new(1,1,1);
  178.             };
  179.         };
  180.        
  181.         local expandDown = Create'TextButton'{
  182.             Size = UDim2.new(0, 20, 0, 20);
  183.             Style = "RobloxButton";
  184.             TextColor3 = Color3.new(1,1,1);
  185.             Text = "-";
  186.             FontSize = "Size10";
  187.             Parent = gmain;
  188.             Position = UDim2.new(0, 444, 0, 10);
  189.         };
  190.        
  191.         local shiftUp = Create'TextButton'{
  192.             Size = UDim2.new(0, 20, 0, 20);
  193.             Style = "RobloxButton";
  194.             TextColor3 = Color3.new(1,1,1);
  195.             Text = "+";
  196.             FontSize = "Size10";
  197.             Parent = gmain;
  198.             Position = UDim2.new(0, 420, 0, 35);
  199.            
  200.             Create'TextLabel'{
  201.                 TextXAlignment = "Right";
  202.                 Position = UDim2.new(0, -10, 0, 5);
  203.                 Text = "Shift";
  204.                 TextColor3 = Color3.new(1,1,1);
  205.             };
  206.         };
  207.        
  208.         local shiftDown = Create'TextButton'{
  209.             Size = UDim2.new(0, 20, 0, 20);
  210.             Style = "RobloxButton";
  211.             TextColor3 = Color3.new(1,1,1);
  212.             Text = "-";
  213.             FontSize = "Size10";
  214.             Parent = gmain;
  215.             Position = UDim2.new(0, 444, 0, 35);
  216.         };
  217.        
  218.         local autoWedge = Create'TextButton'{
  219.             Size = UDim2.new(0, 30, 0, 20);
  220.             Style = "RobloxButton";
  221.             TextColor3 = Color3.new(1,1,1);
  222.             Text = "AW";
  223.             FontSize = "Size10";
  224.             Parent = gmain;
  225.             Position = UDim2.new(0, 400, 0, 60);
  226.         };
  227.        
  228.         local noWedge = Create'TextButton'{
  229.             Size = UDim2.new(0, 30, 0, 20);
  230.             Style = "RobloxButton";
  231.             TextColor3 = Color3.new(1,1,1);
  232.             Text = "NW";
  233.             FontSize = "Size10";
  234.             Parent = gmain;
  235.             Position = UDim2.new(0, 435, 0, 60);
  236.         };
  237.        
  238.         autoWedge.MouseButton1Click:connect(function()
  239.             if not (points[1] and points[2]) then return end
  240.             SC:AutoWedge(points[1], points[2])
  241.         end)
  242.        
  243.         noWedge.MouseButton1Click:connect(function()
  244.             if not (points[1] and points[2]) then return end
  245.             SC:NoWedge(points[1], points[2])
  246.         end)
  247.        
  248.         expandUp.MouseButton1Click:connect(function()
  249.             if not (points[1] and points[2]) then return end
  250.             PointsExpand(1, "u")
  251.         end)
  252.        
  253.         expandDown.MouseButton1Click:connect(function()
  254.             if not (points[1] and points[2]) then return end
  255.             PointsExpand(-1, "u")
  256.         end)
  257.        
  258.         shiftUp.MouseButton1Click:connect(function()
  259.             if not (points[1] and points[2]) then return end
  260.             PointsShift(1, "u")
  261.         end)
  262.        
  263.         shiftDown.MouseButton1Click:connect(function()
  264.             if not (points[1] and points[2]) then return end
  265.             PointsShift(-1, "u")
  266.         end)
  267.        
  268.         for i, v in pairs(modes) do
  269.             local n = modeBase:Clone()
  270.             n.Parent = gmain
  271.             n.Position = UDim2.new(0, 5, 0, ((i-1)*22) + 7)
  272.             n.Text = v
  273.             if mode == i then
  274.                 n.Style = "RobloxButtonDefault"
  275.             end
  276.             n.MouseButton1Click:connect(function()
  277.                 for ie, ve in pairs(modebuttons) do
  278.                     ve.Style = "RobloxButton"
  279.                 end
  280.                 for ie, ve in pairs(materialbuttons) do
  281.                     ve.Visible = true
  282.                     mater = nil
  283.                 end
  284.                 n.Style = "RobloxButtonDefault"
  285.                 mode = i
  286.                 mater = nil
  287.             end)
  288.             modebuttons[#modebuttons+1] = n
  289.         end
  290.        
  291.         local row = 0
  292.         local column = 0
  293.        
  294.         for i, v in pairs(images) do
  295.             row = row + 1
  296.             if row==8 then
  297.                 row = 1
  298.                 column = column + 1
  299.             end
  300.             local n = matBase:Clone()
  301.             materialbuttons[#materialbuttons+1] = n
  302.             n.Image.Image = v
  303.             n.Position = UDim2.new(0, 90+(row*35), 0, (column*35)+10)
  304.             n.Parent = gmain
  305.             n.MouseEnter:connect(function()
  306.                 n.BackgroundColor3 = Color3.new(1,1,1)
  307.             end)
  308.             n.MouseLeave:connect(function()
  309.                 n.BackgroundColor3 = Color3.new(50/255, 50/255, 50/255)
  310.             end)
  311.             n.MouseButton1Click:connect(function()
  312.                 if not (points[1] and points[2]) then return end
  313.                 if mode == 1 then
  314.                     SC:Set(points[1], points[2], i-1)
  315.                 elseif mode == 2 then
  316.                     if mater then
  317.                         SC:Replace(points[1], points[2], i-1, mater)
  318.                         for ie, ve in pairs(materialbuttons) do
  319.                             ve.Visible = true
  320.                         end
  321.                         mater = nil
  322.                     else
  323.                         mater = i-1
  324.                         n.Visible = false
  325.                     end
  326.                 elseif mode == 3 then
  327.                     SC:Walls(points[1], points[2], i-1)
  328.                 elseif mode == 4 then
  329.                     SC:Outline(points[1], points[2], i-1)
  330.                 elseif mode == 5 then
  331.                     if mater then
  332.                         SC:Set(points[1], points[2], i-1, true, mater)
  333.                         for ie, ve in pairs(materialbuttons) do
  334.                             ve.Visible = true
  335.                         end
  336.                         mater = nil
  337.                     else
  338.                         mater = i-1
  339.                         n.Visible = false
  340.                     end
  341.                 end
  342.             end)
  343.         end
  344.        
  345.         return gui
  346.        
  347.     end
  348.    
  349.     function SC:Set(vec1, vec2, m, c, c2)
  350.         local minX=math.min(vec1.x, vec2.x)
  351.         local minY=math.min(vec1.y, vec2.y)
  352.         local minZ=math.min(vec1.z, vec2.z)
  353.         local maxX=math.max(vec1.x, vec2.x)
  354.         local maxY=math.max(vec1.y, vec2.y)
  355.         local maxZ=math.max(vec1.z, vec2.z)
  356.        
  357.         local x=minX
  358.         local y=minY
  359.         local z=minZ
  360.         table.insert(undo_hist, 1, {})
  361.         while x <= maxX do
  362.             local y=minY
  363.             while y <= maxY do
  364.                 local z=minZ
  365.                 while z <= maxZ do
  366.                     local ci1, ci2, ci3 = Workspace.Terrain:GetCell(x, y, z)
  367.                     table.insert(undo_hist[1], 1, {Vector3.new(x, y, z), ci1, ci2, ci3})
  368.                     if c then
  369.                         c3=z+x
  370.                         if c3%2==1 then
  371.                             Workspace.Terrain:SetCell(x, y, z, c2, 0, 1)
  372.                         else
  373.                             Workspace.Terrain:SetCell(x, y, z, m, 0, 1)
  374.                         end
  375.                     else
  376.                         Workspace.Terrain:SetCell(x, y, z, m, 0, 1)
  377.                     end
  378.                    
  379.                     z=z+1
  380.                 end
  381.                 y=y+1
  382.             end
  383.             x=x+1
  384.         end
  385.     end
  386.     function SC:NoWedge(vec1, vec2)
  387.         local minX=math.min(vec1.x, vec2.x)
  388.         local minY=math.min(vec1.y, vec2.y)
  389.         local minZ=math.min(vec1.z, vec2.z)
  390.         local maxX=math.max(vec1.x, vec2.x)
  391.         local maxY=math.max(vec1.y, vec2.y)
  392.         local maxZ=math.max(vec1.z, vec2.z)
  393.        
  394.         local x=minX
  395.         local y=minY
  396.         local z=minZ
  397.         while x <= maxX do
  398.             local y=minY
  399.             while y <= maxY do
  400.                 local z=minZ
  401.                 while z <= maxZ do
  402.                     local cell,cellt,cello=Workspace.Terrain:GetCell(x, y, z)
  403.                     Workspace.Terrain:SetCell(x, y, z, 0, 0, 1)
  404.                     Workspace.Terrain:SetCell(x, y, z, cell, 0, 1)
  405.                     z=z+1
  406.                 end
  407.                 y=y+1
  408.             end
  409.             x=x+1
  410.         end
  411.     end
  412.     function SC:AutoWedge(vec1, vec2, m)
  413.         local minX=math.min(vec1.x, vec2.x)
  414.         local minY=math.min(vec1.y, vec2.y)
  415.         local minZ=math.min(vec1.z, vec2.z)
  416.         local maxX=math.max(vec1.x, vec2.x)
  417.         local maxY=math.max(vec1.y, vec2.y)
  418.         local maxZ=math.max(vec1.z, vec2.z)
  419.            
  420.         local x=minX
  421.         local y=minY
  422.         local z=minZ
  423.         while x <= maxX do
  424.             local y=minY
  425.             while y <= maxY do
  426.                 local z=minZ
  427.                 while z <= maxZ do
  428.                     local cell,cellt,cello=Workspace.Terrain:GetCell(x, y, z)
  429.                     Workspace.Terrain:AutowedgeCell(x, y, z)
  430.                     z=z+1
  431.                 end
  432.                 y=y+1
  433.             end
  434.             x=x+1
  435.         end
  436.     end
  437.     function SC:Replace(vec1, vec2, m, r)
  438.         local minX=math.min(vec1.x, vec2.x)
  439.         local minY=math.min(vec1.y, vec2.y)
  440.         local minZ=math.min(vec1.z, vec2.z)
  441.         local maxX=math.max(vec1.x, vec2.x)
  442.         local maxY=math.max(vec1.y, vec2.y)
  443.         local maxZ=math.max(vec1.z, vec2.z)
  444.        
  445.         local x=minX
  446.         local y=minY
  447.         local z=minZ
  448.         while x <= maxX do
  449.             local y=minY
  450.             while y <= maxY do
  451.                 local z=minZ
  452.                 while z <= maxZ do
  453.                     local cell,cellt,cello=Workspace.Terrain:GetCell(x, y, z)
  454.                     if cell==Enum.CellMaterial:GetEnumItems()[r+1] then
  455.                         Workspace.Terrain:SetCell(x, y, z, m, 0, 1)
  456.                     end
  457.                     z=z+1
  458.                 end
  459.                 y=y+1
  460.             end
  461.             x=x+1
  462.         end
  463.     end
  464.     function SC:Walls(vec1, vec2, m)
  465.         local minX=math.min(vec1.x, vec2.x)
  466.         local minY=math.min(vec1.y, vec2.y)
  467.         local minZ=math.min(vec1.z, vec2.z)
  468.         local maxX=math.max(vec1.x, vec2.x)
  469.         local maxY=math.max(vec1.y, vec2.y)
  470.         local maxZ=math.max(vec1.z, vec2.z)
  471.            
  472.         local x=minX
  473.         local y=minY
  474.         local z=minZ
  475.         while x <= maxX do
  476.             local y=minY
  477.             local z=minZ
  478.             while y <= maxY do
  479.                 Workspace.Terrain:SetCell(x, y, minZ, m, 0, 1)
  480.                 Workspace.Terrain:SetCell(x, y, maxZ, m, 0, 1)
  481.                 y=y+1
  482.             end
  483.             x=x+1
  484.         end
  485.        
  486.         local x=minX
  487.         local y=minY
  488.         local z=minZ
  489.         while y <= maxY do
  490.             local z=minZ
  491.             while z <= maxZ do
  492.                 Workspace.Terrain:SetCell(minX, y, z, m, 0, 1)
  493.                 Workspace.Terrain:SetCell(maxX, y, z, m, 0, 1)
  494.                 z=z+1
  495.             end
  496.             y=y+1
  497.         end
  498.     end
  499.     function SC:Outline(vec1, vec2, m)
  500.         local minX=math.min(vec1.x, vec2.x)
  501.         local minY=math.min(vec1.y, vec2.y)
  502.         local minZ=math.min(vec1.z, vec2.z)
  503.         local maxX=math.max(vec1.x, vec2.x)
  504.         local maxY=math.max(vec1.y, vec2.y)
  505.         local maxZ=math.max(vec1.z, vec2.z)
  506.            
  507.         local x=minX
  508.         local y=minY
  509.         local z=minZ
  510.         while x <= maxX do
  511.             local y=minY
  512.             local z=minZ
  513.             while y <= maxY do
  514.                 Workspace.Terrain:SetCell(x, y, minZ, m, 0, 1)
  515.                 Workspace.Terrain:SetCell(x, y, maxZ, m, 0, 1)
  516.                 y=y+1
  517.             end
  518.             x=x+1
  519.         end
  520.        
  521.         local x=minX
  522.         local y=minY
  523.         local z=minZ
  524.         while y <= maxY do
  525.             local z=minZ
  526.             while z <= maxZ do
  527.                 Workspace.Terrain:SetCell(minX, y, z, m, 0, 1)
  528.                 Workspace.Terrain:SetCell(maxX, y, z, m, 0, 1)
  529.                 z=z+1
  530.             end
  531.             y=y+1
  532.         end
  533.        
  534.         local x=minX
  535.         local y=minY
  536.         local z=minZ
  537.         while z <= maxZ do
  538.             local x=minX
  539.             while x <= maxX do
  540.                 Workspace.Terrain:SetCell(x, minY, z, m, 0, 1)
  541.                 Workspace.Terrain:SetCell(x, maxY, z, m, 0, 1)
  542.                 x=x+1
  543.             end
  544.             z=z+1
  545.         end
  546.     end
  547.     function undoLatest()
  548.         if undo_hist[1] then
  549.             table.insert(redo_hist, 1, {})
  550.             for i, v in pairs(undo_hist[1]) do
  551.                 local ci1, ci2, ci3 = Workspace.Terrain:GetCell(v[1].x, v[1].y, v[1].z)
  552.                 table.insert(redo_hist[1], 1, {Vector3.new(v[1].x, v[1].y, v[1].z), ci1, ci2, ci3})
  553.                 Workspace.Terrain:SetCell(v[1].x, v[1].y, v[1].z, v[2], v[3], v[4])
  554.             end
  555.             table.remove(undo_hist, 1)
  556.         end
  557.     end
  558.     function redoLatest()
  559.         if redo_hist[1] then
  560.             table.insert(undo_hist, 1, {})
  561.             for i, v in pairs(redo_hist[1]) do
  562.                 local ci1, ci2, ci3 = Workspace.Terrain:GetCell(v[1].x, v[1].y, v[1].z)
  563.                 table.insert(undo_hist[1], 1, {Vector3.new(v[1].x, v[1].y, v[1].z), ci1, ci2, ci3})
  564.                 Workspace.Terrain:SetCell(v[1].x, v[1].y, v[1].z, v[2], v[3], v[4])
  565.             end
  566.             table.remove(redo_hist, 1)
  567.         end
  568.     end
  569.     function PointsExpand(amt, dir)
  570.         if dir=="u" then
  571.             if points[1].y >= points[2].y then
  572.                 points[1]=points[1]+Vector3.new(0,amt,0)
  573.                 updateBox()
  574.             else
  575.                 points[2]=points[2]+Vector3.new(0,amt,0)
  576.                 updateBox()
  577.             end
  578.         elseif dir=="d" then
  579.             if points[1].y <= points[2].y then
  580.                 points[1]=points[1]-Vector3.new(0,amt,0)
  581.                 updateBox()
  582.             else
  583.                 points[2]=points[2]-Vector3.new(0,amt,0)
  584.                 updateBox()
  585.             end
  586.         elseif dir=="vert" then
  587.             points[1]=Vector3.new(points[1].x, 0, points[1].z)
  588.             points[2]=Vector3.new(points[2].x, 62, points[2].z)
  589.             updateBox()
  590.         end
  591.     end
  592.     function updateBox()
  593.         if points_show[1] and not points_show[2] then
  594.             sBox.Parent = plr.Character
  595.             SelectionBox.Parent = plr.PlayerGui
  596.             sBox.One.CFrame = CFrame.new(Workspace.Terrain:CellCenterToWorld(points_show[1].x, points_show[1].y, points_show[1].z))
  597.             sBox.Two.CFrame = CFrame.new(Workspace.Terrain:CellCenterToWorld(points_show[1].x, points_show[1].y, points_show[1].z))
  598.             SelectionBox.Color = BrickColor.new("Really blue")
  599.         elseif points[1] and not points[2] and points_show[2] then
  600.             sBox.Parent = plr.Character
  601.             SelectionBox.Parent = plr.PlayerGui
  602.             sBox.One.CFrame = CFrame.new(Workspace.Terrain:CellCenterToWorld(points[1].x, points[1].y, points[1].z))
  603.             sBox.Two.CFrame = CFrame.new(Workspace.Terrain:CellCenterToWorld(points_show[2].x, points_show[2].y, points_show[2].z))
  604.             SelectionBox.Color = BrickColor.new("Lime green")
  605.         elseif points[1] and points[2] then
  606.             sBox.Parent = plr.Character
  607.             SelectionBox.Parent = plr.PlayerGui
  608.             sBox.One.CFrame = CFrame.new(Workspace.Terrain:CellCenterToWorld(points[1].x, points[1].y, points[1].z))
  609.             sBox.Two.CFrame = CFrame.new(Workspace.Terrain:CellCenterToWorld(points[2].x, points[2].y, points[2].z))
  610.             SelectionBox.Color = BrickColor.new("Really red")
  611.         elseif points == {} and points_show == {} then
  612.             sBox.Parent = nil
  613.             SelectionBox.Parent = nil
  614.         end
  615.     end
  616.     function PointsShift(amt, dir)
  617.         if dir=="u" then
  618.            
  619.                 points[1]=points[1]+Vector3.new(0,amt,0)
  620.                 points[2]=points[2]+Vector3.new(0,amt,0)
  621.                 updateBox()
  622.            
  623.         elseif dir=="d" then
  624.            
  625.                 points[1]=points[1]-Vector3.new(0,amt,0)
  626.                 points[2]=points[2]-Vector3.new(0,amt,0)
  627.                 updateBox()
  628.        
  629.         end
  630.     end
  631.     function down(mouse)
  632.         if mouse.Target ~= Workspace.Terrain then return end
  633.         local point_terrain = Workspace.Terrain:WorldToCellPreferSolid(mouse.hit.p)
  634.         if #points==0 or #points==2 then
  635.             points = {point_terrain}
  636.             points_show = {point_terrain}
  637.             updateBox()
  638.         else
  639.             points[2]=point_terrain
  640.             points_show[2] = point_terrain
  641.  
  642.             updateBox()
  643.         end
  644.     end
  645.     function move(mouse)
  646.         if mouse.Target ~= Workspace.Terrain then return end
  647.         local point_terrain = Workspace.Terrain:WorldToCellPreferSolid(mouse.hit.p)
  648.         if points[1] then
  649.             points_show[2] = point_terrain
  650.         else
  651.             points_show[1] = point_terrain
  652.         end
  653.         updateBox()
  654.     end
  655.     function keyDown(k, mouse)
  656.         if k=="c" then
  657.             points = {}
  658.             points_show = {}
  659.             updateBox()
  660.             move(mouse)
  661.         elseif k=="r" then
  662.             if mouse.Target ~= Workspace.Terrain then return end
  663.             local point_terrain = Workspace.Terrain:WorldToCellPreferEmpty(mouse.hit.p)
  664.             Workspace.Terrain:SetCell(point_terrain.x, point_terrain.y, point_terrain.z, 1, 0, 1)
  665.         elseif k=="q" then
  666.             if mouse.Target ~= Workspace.Terrain then return end
  667.             local point_terrain = Workspace.Terrain:WorldToCellPreferSolid(mouse.hit.p)
  668.             Workspace.Terrain:SetCell(point_terrain.x, point_terrain.y, point_terrain.z, 0, 0, 1)
  669.         elseif k=="f" then
  670.             if mouse.Target and plr.Character then
  671.                 plr.Character.Torso.CFrame = CFrame.new(mouse.hit.p+Vector3.new(0,3,0))
  672.             end
  673.         end
  674.     end
  675.     plr.Chatted:connect(function(msg)
  676.         if msg:lower():sub(1, 5) == "/set " then
  677.             local mat=msg:sub(6)
  678.             if tonumber(mat) and points[1] and points[2] then
  679.                 local mat=tonumber(mat)
  680.                 if mat < 0 or mat > max_material then return end
  681.                 SC:Set(points[1], points[2], mat)
  682.             end
  683.             print("Set to "..mat)
  684.         elseif msg:lower():sub(1, 3) == "/aw" then
  685.             if not points[1] or not points[2] then return end
  686.             SC:AutoWedge(points[1], points[2])
  687.             print("Autowedged region")
  688.         elseif msg:lower():sub(1, 7) == "/walls " then
  689.             local mat=msg:sub(8)
  690.             if tonumber(mat) and points[1] and points[2] then
  691.                 local mat=tonumber(mat)
  692.                 if mat < 0 or mat >  max_material then return end
  693.                 SC:Walls(points[1], points[2], mat)
  694.             end
  695.             print("Set walls to "..mat)
  696.         elseif msg:lower():sub(1, 9) == "/outline " then
  697.             local mat=msg:sub(10)
  698.             if tonumber(mat) and points[1] and points[2] then
  699.                 local mat=tonumber(mat)
  700.                 if mat < 0 or mat >  max_material then return end
  701.                 SC:Outline(points[1], points[2], mat)
  702.             end
  703.             print("Outlined with "..mat)
  704.         elseif msg:lower():sub(1, 9) == "/replace " then
  705.             local matt=msg:sub(10)
  706.             local del=matt:find(" ")
  707.             if not del then return end
  708.             mat=matt:sub(1, del-1)
  709.             rep=matt:sub(del+1)
  710.             if tonumber(mat) and tonumber(rep) and points[1] and points[2] then
  711.                 local mat=tonumber(mat)
  712.                 local rep=tonumber(rep)
  713.                 if mat < 0 or mat >  max_material then return end
  714.                 if rep < 0 or rep >  max_material then return end
  715.                 SC:Replace(points[1], points[2], rep, mat)
  716.             end
  717.             print("Successfully replaced "..rep.." with "..mat)
  718.         elseif msg:lower():sub(1, 8) == "/expand " then
  719.             local matt=msg:sub(9)
  720.             local del=matt:find(" ")
  721.             if not del then return end
  722.             mat=matt:sub(1, del-1)
  723.             dir=matt:sub(del+1)
  724.             if tonumber(mat) and points[1] and points[2] then
  725.                 local mat=tonumber(mat)
  726.                 PointsExpand(mat, dir)
  727.             end
  728.             print("Expanded "..mat.." "..dir)
  729.         elseif msg:lower():sub(1, 7) == "/check " then
  730.             local matt=msg:sub(8)
  731.             local del=matt:find(" ")
  732.             if not del then return end
  733.             mat=matt:sub(1, del-1)
  734.             mat2=matt:sub(del+1)
  735.            
  736.             if tonumber(mat) and tonumber(mat2) and points[1] and points[2] then
  737.                 local mat=tonumber(mat)
  738.                 local mat2=tonumber(mat2)
  739.                 if mat < 0 or mat >  max_material then return end
  740.                 if mat2 < 0 or mat2 >  max_material then return end
  741.                 SC:Set(points[1], points[2], mat, true, mat2)
  742.             end
  743.             print("Checked selection with "..mat.." and "..mat2)
  744.         elseif msg:lower():sub(1, 7) == "/shift " then
  745.             local matt=msg:sub(8)
  746.             local del=matt:find(" ")
  747.             if not del then return end
  748.             mat=matt:sub(1, del-1)
  749.             dir=matt:sub(del+1)
  750.             if tonumber(mat) and points[1] and points[2] then
  751.                 local mat=tonumber(mat)
  752.                 PointsShift(mat, dir)
  753.             end
  754.             print("Shifted "..mat.." "..dir)
  755.         elseif msg:lower():sub(1, 6) == "/evert" then
  756.             PointsExpand(nil, "vert")
  757.             print("Region expanded")
  758.         elseif msg:lower():sub(1, 3) == "/nw" then
  759.             SCnw(points[1], points[2])
  760.             print("Unwedged")
  761.         elseif msg:lower():sub(1, 5) == "/undo" then
  762.             undoLatest()
  763.             print("Undid")
  764.         elseif msg:lower():sub(1, 5) == "/redo" then
  765.             redoLatest()
  766.             print("Redid")
  767.         end
  768.     end)
  769.     function sel(mouse)
  770.         gui = CreateGui()
  771.         gui.Parent = plr.PlayerGui
  772.         gui.Frame:TweenPosition(UDim2.new(0.5, -250, .7, 0), "Out", "Quad", 0.5, true)
  773.         SelectionBox.Parent = plr.PlayerGui
  774.         updateBox()
  775.         move(mouse)
  776.         mouse.Button1Down:connect(function() down(mouse) end)
  777.         mouse.KeyDown:connect(function(k) keyDown(k, mouse) end)
  778.         mouse.Move:connect(function() move(mouse) end)
  779.     end
  780.     function desel()
  781.         points = {}
  782.         points_show = {}
  783.         SelectionBox.Parent = nil
  784.         updateBox()
  785.         if gui then gui.Frame:TweenPosition(UDim2.new(0.5, -250, 1, 5), "Out", "Quad", 0.5) game:service("Debris"):AddItem(gui, .5) end
  786.     end
  787.     script.Parent.Selected:connect(sel)
  788.     script.Parent.Deselected:connect(desel)
  789. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement