--Armour Script
print("Putting on Armour")
local plr = game.Workspace.AllianceScripter
--Torso
local p = Instance.new("Part")
p.Size = Vector3.new(2,2,1)
p.Name = "Armour"
p.TopSurface = "Smooth"
p.BottomSurface = "Smooth"
p.BrickColor = BrickColor.new("Mid gray")
p.Reflectance = 0.3
p.Parent = plr
plr.Torso.Transparency = 1
local w1 = Instance.new("Weld", plr)
w1.Part0 = w1.Parent.Torso
w1.Part1 = p
w1.C0 = CFrame.fromEulerAnglesXYZ(0,0,0)*CFrame.new(0,0,0)
--RightArm
local rightarm = p:Clone()
rightarm.Size = Vector3.new(1,3,1)
rightarm.Name = "ArmourRightArm"
rightarm.TopSurface = "Smooth"
rightarm.BottomSurface = "Smooth"
rightarm.BrickColor = BrickColor.new("Mid gray")
rightarm.Reflectance = 0.3
rightarm.Parent = plr
rightarm.Transparency = 1
local w2 = Instance.new("Weld", plr)
w2.Part0 = plr["Right Arm"]
w2.Part1 = rightarm
w2.C0 = CFrame.fromEulerAnglesXYZ(0,0,0)*CFrame.new(0,0,0)
--LeftArm
local leftarm = p:Clone()
leftarm.Size = Vector3.new(1,3,1)
leftarm.Name = "ArmourRightArm"
leftarm.TopSurface = "Smooth"
leftarm.BottomSurface = "Smooth"
leftarm.BrickColor = BrickColor.new("Mid gray")
leftarm.Reflectance = 0.3
leftarm.Parent = plr
leftarm.Transparency = 1
local w3 = Instance.new("Weld", plr)
w3.Part0 = plr["Left Arm"]
w3.Part1 = leftarm
w3.C0 = CFrame.fromEulerAnglesXYZ(0,0,0)*CFrame.new(0,0,0)
COMMUNITY QUESTION
Is there a better way to shorten this script?
1 answer
There are a few things.
Instance.newhas a second parameter; the parent.
local obj = Instance.new(class)
obj.Parent = model
-- becomes
local obj = Instance.new(class, model)
CFrame.Anglesis the same thing asCFrame.fromEulerAnglesXYZ.Multiplying by
CFrame.new(0, 0, 0)is redundant;CFrame.new(0, 0, 0)is the identity -- multiplying by it changes nothing.Coincidentally,
CFrame.Angles(0, 0, 0)is also the identity, and the default value forC0on snaps; so that line can be omitted.
This trims things down slightly, but not much.
We still have more or less the same code repeated, so we should use a function. These things change between them:
Part0of weldSizeof part
Thus, those will be the parameters to our function, and everything else is as we had it:
-- Base: What our armor is based on.
-- A shiny brick.
local base = Instance.new("Part")
base.TopSurface, base.BottomSurface = "Smooth", "Smooth"
base.Reflectance = 0.3
base.BrickColor = BrickColor.new("Mid gray")
base.FormFactor = "Custom"
-- Puts a copy of "base" of size "size" attached to "part",
-- and hides "part".
function armor( part, size )
local p = base:clone()
p.Parent = part.Parent
p.Size = size
p.Name = "Armor" .. part.Name
local w = Instance.new("Weld", part)
w.Part0 = part
w.Part1 = p
part.Transparency = 1
end
armor( plr.Torso , Vector3.new(2, 2, 1))
armor( plr["Left Arm"], Vector3.new(1, 3, 1))
armor( plr["Right Arm"], Vector3.new(1, 3, 1))
This discussion is preserved as it was. New answers, comments, and votes are closed.
