Clients/Client2020/ExtraContent/LuaPackages/UGCValidationImpl/Constants.lua

248 lines
5.5 KiB
Lua

local CorePackages = game:GetService("CorePackages")
local Cryo = require(CorePackages.Cryo)
-- switch this to Cryo.List.toSet when available
local function convertArrayToTable(array)
local result = {}
for _, v in pairs(array) do
result[v] = true
end
return result
end
local Constants = {}
Constants.MAX_HAT_TRIANGLES = 4000
Constants.MAX_TEXTURE_SIZE = 256
Constants.MATERIAL_WHITELIST = convertArrayToTable({
Enum.Material.Plastic,
})
Constants.BANNED_CLASS_NAMES = {
"Script",
"LocalScript",
"ModuleScript",
"ParticleEmitter",
"Fire",
"Smoke",
"Sparkles",
}
Constants.R6_BODY_PARTS = {
"Torso",
"Left Leg",
"Right Leg",
"Left Arm",
"Right Arm",
}
Constants.R15_BODY_PARTS = {
"UpperTorso",
"LowerTorso",
"LeftUpperLeg",
"LeftLowerLeg",
"LeftFoot",
"RightUpperLeg",
"RightLowerLeg",
"RightFoot",
"LeftUpperArm",
"LeftLowerArm",
"LeftHand",
"RightUpperArm",
"RightLowerArm",
"RightHand",
}
Constants.EXTRA_BANNED_NAMES = {
"Head",
"HumanoidRootPart",
"Humanoid",
}
if game:GetFastFlag("UGCExtraBannedNames") then
local extraBannedNames = {
"Body Colors",
"Shirt Graphic",
"Shirt",
"Pants",
"Health",
"Animate",
}
for _, name in ipairs(extraBannedNames) do
table.insert(Constants.EXTRA_BANNED_NAMES, name)
end
end
Constants.BANNED_NAMES = convertArrayToTable(Cryo.Dictionary.join(
Constants.R6_BODY_PARTS,
Constants.R15_BODY_PARTS,
Constants.EXTRA_BANNED_NAMES
))
Constants.ASSET_STATUS = {
UNKNOWN = "Unknown",
REVIEW_PENDING = "ReviewPending",
MODERATED = "Moderated",
}
-- https://confluence.rbx.com/display/AVATAR/UGC+Accessory+Max+Sizes
-- Measurements are doubled to account full size
-- boundsOffset is used when measurements are non-symmetrical
-- i.e. WaistAccessory is 3 behind, 2.5 front
Constants.ASSET_TYPE_INFO = {}
Constants.ASSET_TYPE_INFO[Enum.AssetType.Hat] = {
attachmentNames = { "HatAttachment" },
bounds = {
HatAttachment = {
size = Vector3.new(3, 4, 3),
},
},
}
Constants.ASSET_TYPE_INFO[Enum.AssetType.HairAccessory] = {
attachmentNames = { "HairAttachment" },
bounds = {
HairAttachment = {
size = Vector3.new(3, 5, 3.5),
offset = Vector3.new(0, -0.5, 0.25),
},
},
}
local FACE_BOUNDS = { size = Vector3.new(3, 2, 2) }
Constants.ASSET_TYPE_INFO[Enum.AssetType.FaceAccessory] = {
attachmentNames = { "FaceFrontAttachment", "FaceCenterAttachment" },
bounds = {
FaceFrontAttachment = FACE_BOUNDS,
FaceCenterAttachment = FACE_BOUNDS,
},
}
Constants.ASSET_TYPE_INFO[Enum.AssetType.NeckAccessory] = {
attachmentNames = { "NeckAttachment" },
bounds = {
NeckAttachment = { size = Vector3.new(3, 3, 2) },
},
}
local SHOULDER_BOUNDS = { size = Vector3.new(3, 3, 3) }
Constants.ASSET_TYPE_INFO[Enum.AssetType.ShoulderAccessory] = {
attachmentNames = {
"NeckAttachment",
"LeftCollarAttachment",
"RightCollarAttachment",
"LeftShoulderAttachment",
"RightShoulderAttachment",
},
bounds = {
NeckAttachment = { size = Vector3.new(7, 3, 3) },
LeftCollarAttachment = SHOULDER_BOUNDS,
RightCollarAttachment = SHOULDER_BOUNDS,
LeftShoulderAttachment = SHOULDER_BOUNDS,
RightShoulderAttachment = SHOULDER_BOUNDS,
},
}
Constants.ASSET_TYPE_INFO[Enum.AssetType.FrontAccessory] = {
attachmentNames = { "BodyFrontAttachment" },
bounds = {
BodyFrontAttachment = { size = Vector3.new(3, 3, 3) },
},
}
Constants.ASSET_TYPE_INFO[Enum.AssetType.BackAccessory] = {
attachmentNames = { "BodyBackAttachment" },
bounds = {
BodyBackAttachment = {
size = Vector3.new(10, 7, 4.5),
offset = Vector3.new(0, 0, 0.75),
},
},
}
local WAIST_BOUNDS = {
size = Vector3.new(4, 3.5, 7),
offset = Vector3.new(0, -0.25, 0),
}
Constants.ASSET_TYPE_INFO[Enum.AssetType.WaistAccessory] = {
attachmentNames = {
"WaistBackAttachment",
"WaistFrontAttachment",
"WaistCenterAttachment",
},
bounds = {
WaistBackAttachment = WAIST_BOUNDS,
WaistFrontAttachment = WAIST_BOUNDS,
WaistCenterAttachment = WAIST_BOUNDS,
}
}
Constants.PROPERTIES = {
Instance = {
Archivable = true,
},
Attachment = {
Visible = false,
},
SpecialMesh = {
MeshType = Enum.MeshType.FileMesh,
Offset = Vector3.new(0, 0, 0),
VertexColor = Vector3.new(1, 1, 1),
},
BasePart = {
Anchored = false,
Color = BrickColor.new("Medium stone grey").Color, -- luacheck: ignore BrickColor
CollisionGroupId = 0, -- collision groups can change by place
CustomPhysicalProperties = Cryo.None, -- ensure CustomPhysicalProperties is _not_ defined
Elasticity = 0.5,
Friction = 0.3,
LocalTransparencyModifier = 0,
Massless = false, -- this is already done by accessories internally
Reflectance = 0,
RootPriority = 0,
RotVelocity = Vector3.new(0, 0, 0),
Transparency = 0,
Velocity = Vector3.new(0, 0, 0),
-- surface properties
BackParamA = -0.5,
BackParamB = 0.5,
BackSurfaceInput = Enum.InputType.NoInput,
BottomParamA = -0.5,
BottomParamB = 0.5,
BottomSurfaceInput = Enum.InputType.NoInput,
FrontParamA = -0.5,
FrontParamB = 0.5,
FrontSurfaceInput = Enum.InputType.NoInput,
LeftParamA = -0.5,
LeftParamB = 0.5,
LeftSurfaceInput = Enum.InputType.NoInput,
RightParamA = -0.5,
RightParamB = 0.5,
RightSurfaceInput = Enum.InputType.NoInput,
TopParamA = -0.5,
TopParamB = 0.5,
TopSurfaceInput = Enum.InputType.NoInput,
BackSurface = Enum.SurfaceType.Smooth,
BottomSurface = Enum.SurfaceType.Smooth,
FrontSurface = Enum.SurfaceType.Smooth,
LeftSurface = Enum.SurfaceType.Smooth,
RightSurface = Enum.SurfaceType.Smooth,
TopSurface = Enum.SurfaceType.Smooth,
},
Part = {
Shape = Enum.PartType.Block,
},
}
return Constants