From 95edd42273e8822db7ec247699f17f94ad274197 Mon Sep 17 00:00:00 2001 From: I-Have-An-Issue <34550332+I-Have-An-Issue@users.noreply.github.com> Date: Sun, 12 Feb 2023 20:26:22 -0500 Subject: [PATCH] 3D --- src/index.js | 3 +++ src/lib/classes/RenderJob.js | 24 ++++++++++++++---------- src/lua/bodyshot.lua | 2 +- src/routes/render/3d/asset.js | 14 ++++++++++++++ src/routes/render/3d/user.js | 14 ++++++++++++++ 5 files changed, 46 insertions(+), 11 deletions(-) create mode 100644 src/routes/render/3d/asset.js create mode 100644 src/routes/render/3d/user.js diff --git a/src/index.js b/src/index.js index fd52e3f..bfb82eb 100644 --- a/src/index.js +++ b/src/index.js @@ -25,6 +25,9 @@ app.use("/render/game", require("./routes/render/game.js")) app.use("/render/headshot", require("./routes/render/headshot.js")) app.use("/render/bodyshot", require("./routes/render/bodyshot.js")) +app.use("/render/3d/asset", require("./routes/render/3d/asset.js")) +app.use("/render/3d/user", require("./routes/render/3d/user.js")) + app.use("*", require("./routes/index.js")) app.listen(process.env.PORT || 64989, () => { diff --git a/src/lib/classes/RenderJob.js b/src/lib/classes/RenderJob.js index 4d8cf8c..8a0d840 100644 --- a/src/lib/classes/RenderJob.js +++ b/src/lib/classes/RenderJob.js @@ -43,12 +43,13 @@ class RenderJob extends Job { return Buffer.from(result[0]?.OpenJobExResult?.LuaValue[0]?.value, "base64") } - async RenderBodyshot(id, base64 = false) { + async RenderBodyshot(id, base64 = false, three_d = false) { const started = await this.Start() if (!started) throw new Error("RCCService failed to start") if (!this.client) await this.CreateClient() - logger.info(`[${this.id}] Bodyshot RenderJob started for ${id}`) + if (three_d) logger.info(`[${this.id}] 3D Bodyshot RenderJob started for ${id}`) + else logger.info(`[${this.id}] Bodyshot RenderJob started for ${id}`) const result = await this.OpenJobEx({ name: this.id, @@ -58,7 +59,7 @@ class RenderJob extends Job { { type: "LUA_TSTRING", value: this.id }, { type: "LUA_TSTRING", value: "Bodyshot" }, - { type: "LUA_TSTRING", value: process.env.RENDER_FORMAT }, + { type: "LUA_TSTRING", value: three_d ? "OBJ" : process.env.RENDER_FORMAT }, { type: "LUA_TNUMBER", value: process.env.RENDER_USER_WIDTH }, { type: "LUA_TNUMBER", value: process.env.RENDER_USER_HEIGHT }, @@ -69,21 +70,23 @@ class RenderJob extends Job { }, }).catch((e) => false) - logger.info(`[${this.id}] Bodyshot RenderJob finished for ${id}`) + if (three_d) logger.info(`[${this.id}] 3D Bodyshot RenderJob finished for ${id}`) + else logger.info(`[${this.id}] Bodyshot RenderJob finished for ${id}`) await this.Stop() if (!result) return false - if (base64) return result[0].OpenJobExResult.LuaValue[0].value + if (base64 || three_d) return result[0].OpenJobExResult.LuaValue[0].value return Buffer.from(result[0]?.OpenJobExResult?.LuaValue[0]?.value, "base64") } - async RenderAsset(id, base64 = false) { + async RenderAsset(id, base64 = false, three_d = false) { const started = await this.Start() if (!started) throw new Error("RCCService failed to start") if (!this.client) await this.CreateClient() - logger.info(`[${this.id}] Asset RenderJob started for ${id}`) + if (three_d) logger.info(`[${this.id}] 3D Asset RenderJob started for ${id}`) + else logger.info(`[${this.id}] Asset RenderJob started for ${id}`) const result = await this.OpenJobEx({ name: this.id, @@ -93,7 +96,7 @@ class RenderJob extends Job { { type: "LUA_TSTRING", value: this.id }, { type: "LUA_TSTRING", value: "Asset" }, - { type: "LUA_TSTRING", value: process.env.RENDER_FORMAT }, + { type: "LUA_TSTRING", value: three_d ? "OBJ" : process.env.RENDER_FORMAT }, { type: "LUA_TNUMBER", value: process.env.RENDER_ASSET_WIDTH }, { type: "LUA_TNUMBER", value: process.env.RENDER_ASSET_HEIGHT }, @@ -105,12 +108,13 @@ class RenderJob extends Job { }, }).catch((e) => false) - logger.info(`[${this.id}] Asset RenderJob finished for ${id}`) + if (three_d) logger.info(`[${this.id}] 3D Asset RenderJob finished for ${id}`) + else logger.info(`[${this.id}] Asset RenderJob finished for ${id}`) await this.Stop() if (!result) return false - if (base64) return result[0].OpenJobExResult.LuaValue[0].value + if (base64 || three_d) return result[0].OpenJobExResult.LuaValue[0].value return Buffer.from(result[0]?.OpenJobExResult?.LuaValue[0]?.value, "base64") } diff --git a/src/lua/bodyshot.lua b/src/lua/bodyshot.lua index cfdf5f1..1af7359 100644 --- a/src/lua/bodyshot.lua +++ b/src/lua/bodyshot.lua @@ -8,7 +8,7 @@ game:GetService("ContentProvider"):SetBaseUrl(baseUrl) game:GetService("ScriptContext").ScriptsDisabled = true local Player = game.Players:CreateLocalPlayer(0) -Player.CharacterAppearance = ("%s/Character?id=%d"):format(baseUrl, assetId) +Player.CharacterAppearance = ("%s/users/%d/character"):format(baseUrl, assetId) Player:LoadCharacter(false) game:GetService("RunService"):Run() diff --git a/src/routes/render/3d/asset.js b/src/routes/render/3d/asset.js new file mode 100644 index 0000000..4b11be8 --- /dev/null +++ b/src/routes/render/3d/asset.js @@ -0,0 +1,14 @@ +const express = require("express") +const app = express.Router() + +const RenderJob = require("../../../lib/classes/RenderJob.js") + +app.get("/:id", async (request, response) => { + const job = new RenderJob() + const result = await job.RenderAsset(request.params.id, process.env.RENDER_BASE64, true).catch((_) => _) + + if (result?.message) return response.status(500).json({ error: result.message }) + else return response.end(result) +}) + +module.exports = app diff --git a/src/routes/render/3d/user.js b/src/routes/render/3d/user.js new file mode 100644 index 0000000..6fb684d --- /dev/null +++ b/src/routes/render/3d/user.js @@ -0,0 +1,14 @@ +const express = require("express") +const app = express.Router() + +const RenderJob = require("../../../lib/classes/RenderJob.js") + +app.get("/:id", async (request, response) => { + const job = new RenderJob() + const result = await job.RenderBodyshot(request.params.id, process.env.RENDER_BASE64, true).catch((_) => _) + + if (result?.message) return response.status(500).json({ error: result.message }) + else return response.end(result) +}) + +module.exports = app