ModAPI-ModUtil
本文的函数定义在游戏脚本跟目录下的modutil.lua,是一系列适用于Mod环境的API,它们是klei专门提供给Mod开发者的,在Mod环境内不需要引用全局变量即可使用。这些API作用非常丰富,掌握好了可以让你的Mod开发水平更上一层楼。
API列表¶
其中可用范围的含义,全部是指可以在modmain和modworldgenmain中使用。
函数名 | 输入参数 | 作用 | 分类 | 可用范围 | 已解析 |
---|---|---|---|---|---|
GetModConfigData | optionname, get_local_config | 获取模组配置数据 | Mod系统 | 全部 | 否 |
ReloadFrontEndAssets | (无参数) | 重新加载前端资源 | Mod系统 | 全部 | 否 |
ReloadPreloadAssets | (无参数) | 重新加载预加载资源 | Mod系统 | 全部 | 否 |
AddGameMode | game_mode, game_mode_text | [已废弃]添加游戏模式。此功能转移到了modinfo中进行定义 | 地图 | 全部 | 否 |
AddLevel | arg1, arg2, ... | 添加level | 地图 | 全部 | 否 |
AddLevelPreInit | levelid, fn | 修改level | 地图 | 全部 | 否 |
AddLevelPreInitAny | fn | 修改全部level | 地图 | 全部 | 否 |
AddLocation | arg1, ... | 添加location | 地图 | 全部 | 否 |
AddRoom | arg1, ... | 添加room | 地图 | 全部 | 否 |
AddRoomPreInit | roomname, fn | 修改room | 地图 | 全部 | 否 |
AddStartLocation | arg1, ... | 添加startlocation | 地图 | 全部 | 否 |
AddTask | arg1, ... | 添加task | 地图 | 全部 | 否 |
AddTaskPreInit | taskname, fn | 修改task | 地图 | 全部 | 否 |
AddTaskSet | arg1, ... | 添加taskset | 地图 | 全部 | 否 |
AddTaskSetPreInit | tasksetname, fn | 修改taskset | 地图 | 全部 | 否 |
AddTaskSetPreInitAny | fn | 修改全部taskset | 地图 | 全部 | 否 |
AddCustomizeGroup | category, name, text, desc, atlas, order | 添加自定义分组 | 建房UI | 全部 | 否 |
AddCustomizeItem | category, group, name, itemsettings | 添加自定义项目 | 建房UI | 全部 | 否 |
GetCustomizeDescription | description | 获取自定义描述 | 建房UI | 全部 | 否 |
RemoveCustomizeGroup | category, name | 删除自定义分组 | 建房UI | 全部 | 否 |
RemoveCustomizeItem | category, name | 删除自定义项目 | 建房UI | 全部 | 否 |
AddClassPostConstruct | package, fn | [猜测]与类修改有关,常用于UI组件修改 | 其它 | 全部 | 否 |
AddGamePostInit | fn | [猜测]添加游戏后初始化函数,较少用到 | 其它 | 全部 | 否 |
AddGlobalClassPostConstruct | package, classname, fn | [猜测]与类修改有关,可指定单个类,常用于UI组件修改 | 其它 | 全部 | 否 |
AddSimPostInit | fn | [猜测]添加模拟后初始化函数,较少用到 | 其它 | 全部 | 否 |
AddBrainPostInit | brain, fn | 修改brain | AI | 仅modmain | 否 |
AddLoadingTip | stringtable, id, tipstring, controltipdata | 添加加载提示 | Mod系统 | 仅modmain | 否 |
AddModCharacter | name, gender, modes | 添加Mod角色 | Mod系统 | 仅modmain | 否 |
RegisterInventoryItemAtlas | atlas, prefabname | 注册物品栏物品图集 | Mod系统 | 仅modmain | 否 |
RemoveDefaultCharacter | name | 移除默认角色 | Mod系统 | 仅modmain | 否 |
RemoveLoadingTip | stringtable, id | 移除加载提示 | Mod系统 | 仅modmain | 否 |
SetLoadingTipCategoryIcon | category, categoryatlas, categoryicon | 设置加载提示类别图标 | Mod系统 | 仅modmain | 否 |
SetLoadingTipCategoryWeights | weighttable, weightdata | 设置加载提示类别权重 | Mod系统 | 仅modmain | 否 |
AddStategraphActionHandler | stategraph, handler | 给指定sg添加ActionHandler | SG | 仅modmain | 否 |
AddStategraphEvent | stategraph, event | 给指定sg添加Event | SG | 仅modmain | 否 |
AddStategraphPostInit | stategraph, fn | 修改指定sg | SG | 仅modmain | 否 |
AddStategraphState | stategraph, state | 给指定sg添加state | SG | 仅modmain | 否 |
AddAction | id, str, fn | 添加动作 | 动作 | 仅modmain | 否 |
AddComponentAction | actiontype, component, fn | 添加组件动作 | 动作 | 仅modmain | 否 |
AddComponentPostInit | component, fn | 修改指定组件 | 基础修改 | 仅modmain | 否 |
AddPlayerPostInit | fn | 修改玩家 | 基础修改 | 仅modmain | 否 |
AddPrefabPostInit | prefab, fn | 修改指定prefab | 基础修改 | 仅modmain | 否 |
AddPrefabPostInitAny | fn | 修改任意Prefab | 基础修改 | 仅modmain | 否 |
AddPopup | id | 添加弹窗,未知用途 | 其它 | 仅modmain | 否 |
AddUserCommand | command_name, data | 添加用户命令 | 其它 | 仅modmain | 否 |
AddVoteCommand | command_name, init_options_fn, process_result_fn, vote_timeout | 添加投票命令 | 其它 | 仅modmain | 否 |
ExcludeClothingSymbolForModCharacter | name, symbol | 为模组角色排除服装符号 | 其它 | 仅modmain | 否 |
LoadPOFile | path, lang | 加载翻译文件 | 其它 | 仅modmain | 否 |
SetModHUDFocus | focusid, hasfocus | 设置ModHUD焦点 | 其它 | 仅modmain | 否 |
AddModShadersInit | fn | 添加shader初始化函数 | 特效 | 仅modmain | 否 |
AddModShadersSortAndEnable | fn | 添加shader排序和启用函数 | 特效 | 仅modmain | 否 |
AddClientModRPCHandler | namespace, name, fn | 添加客户端ModRPCHandler | 网络 | 仅modmain | 否 |
AddModRPCHandler | namespace, name, fn | 添加ModRPCHandler | 网络 | 仅modmain | 否 |
AddReplicableComponent | name | 添加replica | 网络 | 仅modmain | 否 |
AddShardModRPCHandler | namespace, name, fn | 添加分片ModRPCHandler | 网络 | 仅modmain | 否 |
GetClientModRPC | namespace, name | 获取客户端ModRPC | 网络 | 仅modmain | 否 |
GetClientModRPCHandler | namespace, name | 获取客户端ModRPCHandler | 网络 | 仅modmain | 否 |
GetModRPC | namespace, name | 获取ModRPC | 网络 | 仅modmain | 否 |
GetModRPCHandler | namespace, name | 获取ModRPCHandler | 网络 | 仅modmain | 否 |
GetShardModRPC | namespace, name | 获取分片ModRPC | 网络 | 仅modmain | 否 |
GetShardModRPCHandler | namespace, name | 获取分片ModRPCHandler | 网络 | 仅modmain | 否 |
SendModRPCToClient | id_table, ... | 向客户端ModRPC | 网络 | 仅modmain | 否 |
SendModRPCToServer | id_table, ... | 向主机端发送ModRPC | 网络 | 仅modmain | 否 |
SendModRPCToShard | id_table, ... | 向分片发送ModRPC | 网络 | 仅modmain | 否 |
RemapSoundEvent | name, new_name | 重映射声音事件 | 音效 | 仅modmain | 否 |
RemoveRemapSoundEvent | name | 移除重映射声音事件 | 音效 | 仅modmain | 否 |
AddMinimapAtlas | atlaspath | 添加小地图图标 | 游戏UI | 仅modmain | 否 |
AddCharacterRecipe | name, ingredients, tech, config, extra_filters | 添加角色专属制作配方 | 制作 | 仅modmain | 是 |
AddCookerRecipe | cooker, recipe | 添加烹饪配方 | 烹饪 | 仅modmain | 否 |
AddDeconstructRecipe | name, return_ingredients | 添加拆解配方 | 制作 | 仅modmain | 否 |
AddIngredientValues | names, tags, cancook, candry | 添加食材属性值(批量修改) | 烹饪 | 仅modmain | 否 |
AddPrototyperDef | prototyper_prefab, data | [待测试]添加原型制作器定义 | 制作 | 仅modmain | 否 |
AddRecipe | arg1, ... | [已废弃]添加新制作配方 | 制作 | 仅modmain | 是 |
AddRecipe2 | name, ingredients, tech, config, filters | 添加新制作配方 | 制作 | 仅modmain | 是 |
AddRecipeFilter | filter_def, index | 添加制作配方分类过滤器 | 制作 | 仅modmain | 是 |
AddRecipePostInit | recipename, fn | 修改指定制作配方 | 制作 | 仅modmain | 否 |
AddRecipePostInitAny | fn | 修改任意制作配方 | 制作 | 仅modmain | 否 |
AddRecipeTab | rec_str, rec_sort, rec_atlas, rec_icon, rec_owner_tag, rec_crafting_station | [已废弃]添加制作栏分类 | 制作 | 仅modmain | 是 |
AddRecipeToFilter | recipe_name, filter_name | 将制作配方添加到分类过滤器 | 制作 | 仅modmain | 是 |
Recipe | ... | [已废弃]创建配方 | 制作 | 仅modmain | 是 |
RemoveRecipeFromFilter | recipe_name, filter_name | 从过滤器中移除制作配方 | 制作 | 仅modmain | 是 |
物品制作¶
AddRecipe2¶
作用: 添加一个新的制作配方
参数
name
(string): 配方的名称。ingredients
(table): 配方所需的原料列表。tech
(string): 解锁该配方所需的科技名称。- (可选)
config
(table): 一个可选的配置表,包含以下字段:- (可选)
placer
(string): 放置物 prefab,用于显示一个建筑的临时放置物,在放下建筑后就会消失。 - (可选)
min_spacing
(num): 建造物的最小间距。 - (可选)
nounlock
(bool): 如果为 false,只能在对应的科技建筑旁制作。否则在初次解锁后,就可以在任意地点制作。 - (可选)
numtogive
(num): 制作成功后,玩家将获得的物品数量。 - (可选)
builder_tag
(string): 要求具备的制作者标签。如果人物没有此标签,便无法制作物品,可以用于人物的专属物品。 - (必须)
atlas
(string): 物品图标所在的 atlas 文件路径,用于制作栏显示图片,其实不填也行,但图标会是空的。 - (可选)
image
(string): 物品图标的文件名,其实 atlas 中已包含,不必再填。 - (可选)
testfn
(function): 放置时的检测函数,比如有些建筑对地形有特殊要求,可以使用此函数检测。 - (可选)
product
(string): 产出物,表示制作成功后产生的物品。默认 - (可选)
build_mode
(string): 建造模式,必须使用常量表BUILDMODE
,形如BUILDMODE.LAND
,具体取值为无限制(NONE)、地上(LAND)和水上(WATER)。 - (可选)
build_distance
(num): 建造距离,表示玩家与建筑之间的最大距离。
- (可选)
- (可选)
filters
(table): 一个可选的过滤器列表,包含要将配方添加到的过滤器名称。
代码示例
-- 文件: modmain.lua
local recipe_name = "lotus_umbrella" -- 配方唯一名称,不可重复,通常用prefab名
local ingredients = {Ingredient("cutgrass", 1), Ingredient("twigs", 1)} -- 原料表
local tech = TECH.NONE -- 所需科技,必须使用常量表TECH的值
local config = {
atlas = "images/inventoryimages/lotus_umbrella.xml",
}
AddRecipe2(recipe_name, ingredients, tech, config)
STRINGS.RECIPE_DESC.LOTUS_UMBRELLA = "荷叶做的雨伞" -- 制作栏描述
AddCharacterRecipe¶
作用: 添加角色专属制作配方。实际上参数和作用都和AddRecipe2一样,专属体现在config中的builder_tag
参数
- name
(string): 配方的名称。
- ingredients
(table): 配方所需的原料列表。
- tech
(string): 解锁该配方所需的科技名称。
- (可选) config
(table): 一个可选的配置表,同AddRecipe2
- (可选) filters
(table): 一个可选的过滤器列表,包含要将配方添加到的额外过滤器名称。
返回值:
rec
(Recipe2): 创建的Recipe2
对象。
代码示例
-- 创建一个角色专属配方,只有可读书的人才能使用
local config2 = {
atlas = "images/inventoryimages/lotus_umbrella.xml",
builder_tag = "reader",
product = "lotus_umbrella", -- 当recipe名不是prefab名时,需要显式指定
}
AddCharacterRecipe("lotus_umbrella_few", {Ingredient("cutgrass", 1)}, TECH.NONE, config2, {"SAMANSHA"})
AddRecipeFilter¶
作用: 添加一个新的配方过滤器。
参数
filter_def
(table): 过滤器定义,包括以下字段:name
(string): 过滤器的ID。主要用于两处,一是STRINGS.UI.CRAFTING_FILTERS[name]
。赋值给出在UI界面上显示的过滤器名字,二是在其它API使用过滤器作为参数时用于指代,请参考示例代码。atlas
(string 或 function): 图标的图集,可以是字符串或函数。image
(string 或 function): 显示在制作菜单中的图标,可以是字符串或函数。(可选) image_size
(table): 自定义图像尺寸,默认64。(可选) custom_pos
(table): 自定义的过滤器位置,默认为false。 如果为 true,则过滤器图标不会被添加到网格中,而是把这个分类下的物品都放在mod物品分类下。recipes
(table): 不支持此字段! 请创建过滤器后,将过滤器传递给AddRecipe2()
或AddRecipeToFilter()
函数。
(可选) index
(number): 插入过滤器定义的索引。如果提供,将在指定索引处插入过滤器定义;否则,将过滤器定义添加到列表末尾。
代码示例
-- 加载资源
Assets = {
Asset("ATLAS", "images/craft_samansha_icon.xml"),
}
-- 定义一个新的过滤器对象
local filter_samansha_def = {
name = "SAMANSHA",
atlas = "images/craft_samansha_icon.xml",
image = "craft_samansha_icon.tex"
}
-- 添加自定义过滤器
AddRecipeFilter(filter_samansha_def, 1)
STRINGS.UI.CRAFTING_FILTERS.SAMANSHA ="自定义过滤器" -- 制作栏中显示的名字
-- 创建一个配方,并将其添加到自定义过滤器中,注意用的是过滤器的name参数值
AddRecipe2("my_custom_recipe", ingredients, tech, config, {"SAMANSHA"})
AddRecipeToFilter¶
作用: 将配方添加到指定的过滤器中。
参数
recipe_name
(string): 要添加的配方名称。filter_name
(string): 要添加配方的过滤器名称。
代码示例
RemoveRecipeFromFilter¶
作用: 从指定的过滤器中移除配方。
参数
recipe_name
(string): 要移除的配方名称。filter_name
(string): 要从中移除配方的过滤器名称。
代码示例
AddDeconstructRecipe¶
作用: 添加分解配方,不会在任何过滤器下出现,这只是供「分解法杖」或敲碎不可制作的物品而设计的。
参数
name
(string): 要添加配方的prefab名。return_ingredients
(string): 返还的材料
代码示例
AddPrototyperDef¶
作用: 自定义原型机(研究或制作站)在制作菜单中的显示方式。光看这个名字有点难理解,其实原型机就是指科学机器、炼金机器、远古制作台这类东西,过年活动时的神龛也算此类。角色站在旁边时可以制作对应的物品 参数
prototyper_prefab
(string): 用于原型机的prefab名prototyper_def
(table)icon_atlas
(string): 图标文档icon_image
(string): 图标图片action_str
(string): 「建造」按钮显示的字符串,比如神龛显示的是「供奉」is_crafting_station
(bool): 是否是制作站,也就是是否只能在停留附近时才能制作对应物品filter_text
(string): 在过滤器上的名称
代码示例
local prototyper_prefab = "moon_altar"
prototyper_def = {
icon_atlas = "images/xxxx.xml",
icon_image = "moon_altar.tex",
is_crafting_station = true,
action_str = "生产",
filter_text = "月之产品“
},
AddPrototyperDef(prototyper_prefab, prototyper_def)
AddRecipePostInit¶
作用: 修改指定的Recipe
参数
recipe
(string): 要修改的recipe名fn
(function): 修改函数,传入参数为这个recipe对象
代码示例
AddRecipePostInitAny¶
作用: 修改任意Recipe
参数
fn
(function): 修改函数,传入参数为recipe对象。这个修改会对所有的recipe生效
代码示例
local function fn(recipe)
-- 统一修改制作栏描述
local old_str = recipe.description
recipe.description = "描述: " ... old_str
end
AddRecipePostInitAny(fn)
已废弃¶
以下API已废弃,不推荐在新的Mod制作中使用
- AddRecipe 添加新制作配方
- Recipe 创建配方
- AddRecipeTab 添加制作栏分类
其它¶
AddUserCommand¶
作用: 向游戏中添加一个自定义用户命令。
参数
name
(string): 命令的名称。data
(table): 命令的详细信息,包括以下字段:(可选) aliases
(table): 命令的别名列表。(可选) prettyname
(string): 写在UI上的名称。(可选) desc
(string): 命令的描述。permission
(string): 命令所需的权限(如:COMMAND_PERMISSION.USER)。(可选) slash
(boolean): 是否在命令前加斜杠。(可选) usermenu
(boolean): 是否在用户菜单中显示命令。(可选) servermenu
(boolean): 是否在服务器菜单中显示命令。(可选) params
(table): 命令的参数列表。(可选) paramsoptional
(table): 参数是否可选的布尔值列表。(可选) localfn
(function): 本地函数,当命令被调用时执行。(可选) serverfn
(function): 服务器函数,当命令被调用时执行。(可选)vote
(boolean): 是否允许对此命令进行投票,默认为false。(可选)votetimeout
(number): 投票持续时间(秒)。(可选)voteminstartage
(number): 用户必须在服务器上待至少多少秒才能开始投票。(可选)voteminpasscount
(number): 投票通过所需的最小票数。(可选)votecountvisible
(boolean): 投票结果是否对玩家可见。(可选)voteallownotvoted
(boolean): 是否允许未投票的玩家看到投票结果。(可选)voteoptions
(table): 投票选项(可选)votetitlefmt
(string): 投票标题的格式(可选)votenamefmt
(string): 投票名称的格式(可选)votepassedfmt
(string): 投票通过后的显示信息(可选)votecanstartfn
(function): 检查投票是否可以开始的函数(可选)voteresultfn
(function): 根据投票结果执行相应操作的函数
代码示例
AddUserCommand("hello", {
aliases = {"hi", "hey"},
prettyname = "Hello Command",
desc = "Say hello to the server",
permission = GLOBAL.COMMAND_PERMISSION.USER,
slash = true,
usermenu = false,
servermenu = false,
params = {"intro"},
paramsoptional = {true},
vote = false,
serverfn = function(params, caller)
if params.intro ~= nil then
GLOBAL.TheNet:Say("Hello, everyone! "..params.intro)
else
GLOBAL.TheNet:Say("Hello, everyone!")
end
end,
})