13 个版本 (重大更新)
0.10.0 | 2022年6月13日 |
---|---|
0.9.1 | 2021年10月11日 |
0.9.0 | 2021年8月18日 |
0.8.1 | 2021年4月9日 |
0.5.0 | 2019年9月24日 |
580 在 游戏开发 中排名
每月 45 次下载
195KB
2.5K SLoC

重构
重构是一个用于操作 Roblox 文件及其包含实例的命令行工具。它是一个可脚本化的工具,旨在实现其他工具无法完成的流程。
重构可以用于处理 Roblox 文件的几乎所有操作。一些用途包括
- 从场景中提取模型以与 Rojo 一起使用
- 将地形从一个场景复制到另一个场景
- 在部署场景之前压缩脚本
- 自动将构建元数据附加到场景
- 同步开发场景与生产环境
重构仍在早期开发阶段,但它的 API 大部分已经稳定。欢迎反馈!
安装
使用 Foreman
可以使用 Foreman(Roblox 项目工具链管理器)安装重构
[tools]
remodel = { source = "rojo-rbx/remodel", version = "0.10.0" }
从 GitHub 发布版
您可以从 重构的 GitHub 发布页面 下载预构建的二进制文件。
从 crates.io
您需要 Rust 1.56.0 或更高版本。
cargo install remodel
快速入门
重构的大部分界面是其 Lua API。用户编写 Lua 5.3 脚本,由重构运行,并提供一组特殊的 API。
重构的一个用途是将场景文件分解成多个模型文件。假设我们有一个名为 my-place.rbxlx
的场景文件,其中存储了一些模型在 ReplicatedStorage.Models
中。
我们希望将这些模型保存到名为 models
的文件夹中的单个文件中。
local game = remodel.readPlaceFile("my-place.rbxlx")
-- If the directory does not exist yet, we'll create it.
remodel.createDirAll("models")
local Models = game.ReplicatedStorage.Models
for _, model in ipairs(Models:GetChildren()) do
-- Save out each child as an rbxmx model
remodel.writeModelFile(model, "models/" .. model.Name .. ".rbxmx")
end
有关更多示例,请参阅 examples
文件夹。
支持的 Roblox API
重构支持 Roblox API 的某些部分,以便使代码对现有 Roblox 用户更加熟悉。
实例.new(className)
(0.5.0+)- 重构不支持第二个参数(父级)。
<实例>.Name
(可读可写)<实例>.ClassName
(只读)<实例>.Parent
(可读可写)<实例>:销毁()
(0.5.0+)<实例>:克隆()
(0.6.0+)<实例>:获取子对象()
<实例>:获取后代()
(0.8.0+)<实例>:查找第一个子对象(名称)
- Remodel不支持递归的第二个参数。
<数据模型>:获取服务(名称)
(0.6.0+)
Remodel API
Remodel拥有超出Roblox内部所能完成的自己的API。
remodel.readPlaceFile
remodel.readPlaceFile(path: string): Instance
从文件系统中加载一个rbxlx
文件。
返回一个DataModel
实例,相当于Roblox内部的game
。
出错时抛出异常。
remodel.readModelFile
remodel.readModelFile(path: string): List<Instance>
从文件系统中加载一个rbxmx
或rbxm
(0.4.0+) 文件。
注意,这个函数返回的是一个实例列表
而不是单个实例!这是因为模型可以包含多个顶层实例。
出错时抛出异常。
remodel.readPlaceAsset
(0.5.0+)
remodel.readPlaceAsset(assetId: string): Instance
从Roblox.com读取场所资产,相当于remodel.readPlaceFile
。
此方法需要私有资产的Web认证!有关更多信息,请参阅认证。
出错时抛出异常。
remodel.readModelAsset
(0.5.0+)
remodel.readModelAsset(assetId: string): List<Instance>
从Roblox.com读取模型资产,相当于remodel.readModelFile
。
此方法需要私有资产的Web认证!有关更多信息,请参阅认证。
出错时抛出异常。
remodel.writePlaceFile
remodel.writePlaceFile(instance: DataModel, path: string)
将给定的DataModel
实例保存为rbxlx
文件。
如果实例不是DataModel
,则此方法将抛出异常。模型应使用writeModelFile
保存。
出错时抛出异常。
remodel.writeModelFile
remodel.writeModelFile(instance: Instance, path: string)
将给定的Instance
保存为rbxmx
或rbxm
(0.4.0+) 文件。
如果实例是DataModel
,则此方法将抛出异常。场所应使用writePlaceFile
保存。
出错时抛出异常。
remodel.writeExistingPlaceAsset
(0.5.0+)
remodel.writeExistingPlaceAsset(instance: Instance, assetId: string)
将给定的DataModel
实例上传到Roblox.com,通过现有的场所。
如果实例不是DataModel
,则此方法将抛出异常。模型应使用writeExistingModelAsset
上传。
此方法始终需要Web认证!有关更多信息,请参阅认证。
出错时抛出异常。
remodel.writeExistingModelAsset
(0.5.0+)
remodel.writeExistingModelAsset(instance: Instance, assetId: string)
将给定的实例上传到Roblox.com,通过现有的模型。
如果实例是DataModel
,则此方法将抛出异常。场所应使用writeExistingPlaceAsset
上传。
此方法始终需要Web认证!有关更多信息,请参阅认证。
出错时抛出异常。
remodel.getRawProperty
(0.6.0+)
remodel.getRawProperty(instance: Instance, name: string): any?
从给定的实例获取给定名称的属性,绕过所有验证。
这是Remodel功能更加人性化的同时,旨在简单实现但非常强大的API。
如果实例上存储的值类型尚不能由Remodel表示,则抛出异常。有关更多详细信息,请参阅支持的Roblox类型。
remodel.setRawProperty
(0.6.0+)
remodel.setRawProperty(
instance: Instance,
name: string,
type: string,
value: any,
)
使用给定的名称、类型和值在给定的实例上设置属性。有效值对于类型
在支持的Roblox类型的左侧列表中定义。
这是Remodel功能更加人性化的同时,旨在简单实现但非常强大的API。
如果值类型尚不能由Remodel表示,则抛出异常。有关更多详细信息,请参阅支持的Roblox类型。
remodel.readFile
(0.3.0+)
remodel.readFile(path: string): string
读取给定路径的文件。
出错时抛出异常,如文件不存在。
remodel.readDir
(0.4.0+)
remodel.readDir(path: string): List<string>
返回目录中所有子文件的文件名列表。
出错时会抛出异常,例如目录不存在时。
remodel.writeFile
(0.3.0+)
remodel.writeFile(path: string, contents: string)
在给定的路径写入文件。
出错时抛出异常。
remodel.createDirAll
remodel.createDirAll(path: string)
在给定的路径创建目录,以及所有尚未存在的父目录。
这是Rust的fs::create_dir_all
函数的一个薄包装。类似于Unix中的mkdir -p
。
出错时抛出异常。
remodel.isFile
(0.7.0+)
remodel.isFile(path: string): bool
判断给定的路径是否是文件。
这是Rust的fs::metadata
函数的一个薄包装。
出错时会抛出异常,例如路径不存在时。
remodel.isDir
(0.7.0+)
remodel.isDir(path: string): bool
判断给定的路径是否是目录。
这是Rust的fs::metadata
函数的一个薄包装。
出错时会抛出异常,例如路径不存在时。
JSON API
json.fromString
(0.7.0+)
json.fromString(source: string): any
解码包含JSON的字符串。
出错时会抛出异常,例如输入的JSON无效。
json.toString
(0.7.0+)
json.toString(value: any): string
将Lua对象编码为JSON字符串。只能编码Lua原语,如表、字符串、数字、布尔值和nil。实例不能编码为JSON。
出错时会抛出异常,例如输入的表无法编码。
json.toStringPretty
(未发布)
json.toStringPretty(value: any, indent?: string = " "): string
将Lua对象编码为格式化的JSON字符串。如果传递了缩进,将使用该缩进,否则默认为两个空格。
出错时会抛出异常,例如输入的表无法编码。
支持Roblox类型
当与Roblox实例交互时,Remodel尚不支持所有值类型,可能会抛出错误。
支持的类型及其Lua等价物
String
:string
Content
:string
Bool
:boolean
Float64
:number
Float32
:number
Int64
:number
Int32
:number
随着时间的推移,将添加更多类型,并且Remodel将开始自动在更多上下文中推断正确的类型。
身份验证
Remodel的一些API访问Roblox Web API,并需要通过.ROBLOSECURITY
cookie进行身份验证以访问私有资源。Auth cookie看起来像这样
_|WARNING:-DO-NOT-SHARE-THIS.--Sharing-this-will-allow-someone-to-log-in-as-you-and-to-steal-your-ROBUX-and-items.|<actual cookie stuff here>
Auth cookie是非常敏感的信息!如果您在远程服务器(如Travis CI或GitHub Actions)上使用Remodel,应创建一个权限有限的临时账户,以确保您的宝贵账户不受损害!
在Windows上,Remodel将尝试使用登录的Roblox Studio会话中的cookie来验证所有请求。
要为Remodel提供不同的auth cookie,请使用--auth
参数
remodel run foo.lua --auth "$MY_AUTH_COOKIE"
您还可以定义REMODEL_AUTH
环境变量,以避免将--auth
作为参数传递。
Remodel与rbxmk的比较
Remodel类似于rbxmk
- Remodel和rbxmk都使用Lua
- Remodel和rbxmk具有类似的功能集和使用场景
- Remodel是命令式的,而rbxmk是声明式的
- Remodel模拟Roblox的API,而rbxmk有自己的,非常独特的API
许可证
根据MIT许可证条款,Remodel可用。有关详细信息,请参阅LICENSE.txt。
标志来源.
依赖项
~25–37MB
~670K SLoC