78 lines
1.9 KiB
Lua
78 lines
1.9 KiB
Lua
local MarketplaceService = game:GetService("MarketplaceService")
|
|
local InsertService = game:GetService("InsertService")
|
|
|
|
local AssetUtil =
|
|
{
|
|
TextureCache = {};
|
|
NUM_FETCH_RETRIES = 4;
|
|
}
|
|
|
|
local assetTypes = {}
|
|
for _,assetType in pairs(Enum.AssetType:GetEnumItems()) do
|
|
assetTypes[assetType.Value] = assetType.Name
|
|
end
|
|
|
|
function AssetUtil:SafeCall(class,method,...)
|
|
local success,response
|
|
local tries = 0
|
|
while not success do
|
|
success,response = pcall(class[method],class,...)
|
|
if not success then
|
|
if response:find("400") then
|
|
success = true
|
|
response = false
|
|
else
|
|
tries = tries + 1
|
|
if tries > self.NUM_FETCH_RETRIES then
|
|
return false
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return success,response
|
|
end
|
|
|
|
function AssetUtil:Import(assetId)
|
|
local success,model = self:SafeCall(InsertService,"LoadAsset",assetId)
|
|
if success then
|
|
local objects = model:GetChildren()
|
|
return true,unpack(objects)
|
|
end
|
|
return false
|
|
end
|
|
|
|
function AssetUtil:RequestImage(assetId)
|
|
assert(typeof(assetId) == "number")
|
|
assert(assetId == math.floor(assetId))
|
|
assert(assetId > 0)
|
|
|
|
if self.TextureCache[assetId] == nil then
|
|
local success,response = self:SafeCall(MarketplaceService,"GetProductInfo",assetId)
|
|
if success then
|
|
local result
|
|
if response then
|
|
local assetType = assetTypes[response.AssetTypeId]
|
|
if assetType == "Image" then -- No transformation needed!
|
|
result = "rbxassetid://" .. assetId
|
|
elseif assetType == "TeeShirt" then
|
|
local imported,shirtGraphic = self:Import(assetId)
|
|
if imported then
|
|
result = shirtGraphic.Graphic
|
|
end
|
|
elseif assetType == "Decal" or assetType == "Face" then
|
|
local imported,decal = self:Import(assetId)
|
|
if imported then
|
|
result = decal.Texture
|
|
end
|
|
end
|
|
else
|
|
result = ""
|
|
end
|
|
self.TextureCache[assetId] = result
|
|
end
|
|
end
|
|
|
|
return true,self.TextureCache[assetId]
|
|
end
|
|
|
|
return AssetUtil |