饥荒联机版Mod开发——制作栏(九)

前言

物品栏的API是写在modmain.lua里的,基本上就一行代码。不过在使用前先加上下面这行代码,实现一键GLOBAL,直接用XXX来访问GLOBAL.XXX。

GLOBAL.setmetatable(env,{
    
    __index=function(t,k) return GLOBAL.rawget(GLOBAL,k) end})

添加物品到制作栏

--写法参考:recipes.lua,直接把Recipe2(...)的那堆参数copy过来用就行,参数是对应的

--添加配方,默认添加在MODS过滤器中
--name: 预设物名,自定义预设物需要配置config中的atlas

--ingredients:{Ingredient(...),Ingredient(...)} Ingredient定义在在recipe.lua
--Ingredient(prefab, amount, atlas=nil, deconstruct=false, imageoverride=nil)
--当材料是自定义prefab时,指定atlas为材料物品栏贴图即可, "images/inventoryimages/yyy.xml" 

--tech:TECH.NONE TECH.SCIENCE_ONE TECH.SCIENCE_TWO,看constants.lua中的TECH表
--[[ 
config={
	builder_tag = {"wilson"},	--建筑者需要的tag,一般用于专属配方
	atlas = "images/inventoryimages/xxx.xml", 	--自定义预设物需要指定贴图
	image = "xxx.tex",	--不填就默认是参数 name..".tex"
	--其他参数如:build_distance,min_spacing,nounlock等建筑解锁相关的
}  
--看recipe.lua中Recipe2的config参数]]
--filters = {"TOOLS", "LIGHT"},recipes_filter.lua中CRAFTING_FILTER_DEFS的name
AddRecipe2(name, ingredients, tech, config=nil, filters=nil)

--添加角色专属配方
--在建筑者标签是必须的,记得在你人物的预设物中添加这个标签
--config={builder_tag = ""}
--extra_filters:除角色过滤器外的过滤器名,如{"TOOLS", "LIGHT"}
AddCharacterRecipe(name, ingredients, tech, config, extra_filters=nil)

例子:添加自定义预设物到MODS过滤器

--modmain.lua
GLOBAL.setmetatable(env,{
    
    __index=function(t,k) return GLOBAL.rawget(GLOBAL,k) end})	

PrefabFiles = {
    
    
	"xxx",
}
--[[
xxx.lua 预设物中记得加载贴图
local assets = {
	Asset( "IMAGE", "images/inventoryimages/xxx.tex" ),	
	Asset( "ATLAS", "images/inventoryimages/xxx.xml" ),
}
--]]
AddRecipe2("xxx", {
    
    Ingredient("cutgrass", 2), Ingredient("ice", 1)},
 TECH.NONE, {
    
    atlas = "images/inventoryimages/xxx.xml"})

添加分解配方

--recipes.lua,直接把DeconstructRecipe(...)的那堆参数copy过来用就行,参数是对应的
--name和ingredients参数同上
AddDeconstructRecipe(name, ingredients)

自定义制作栏过滤器

--[[
filter_def = {	--参考recipes_filter.lua中的CRAFTING_FILTER_DEFS的写法
	name = "MYFILTER",	--独一无二的过滤器名
	atlas = "images/myfilter.xml",	--原始贴图54x54像素,64x64的也会默认缩放成54x54
	image = "myfilter.tex",
	--下面是可选参数
	--image_size = 80,  --表示缩放到80x80像素	
	--custom_pos = true,  --表示不添加在下面的网格中,如FAVORITES(收藏夹)
}
--]]
--index:插入表的位置,默认是插在最后面
同时要在modmain.lua中设置鼠标悬浮时的文字
STRINGS.UI.CRAFTING_FILTERS[filter_def.name] = "Hover Text"

AddRecipeFilter(filter_def, index=#CRAFTING_FILTER_DEFS+1)

--从过滤器中添加/删除配方
--recipe_name:Recipe2及AddRecipe2中的name
--filter_name:filter_def中的name,及recipes_filter.lua中CRAFTING_FILTER_DEFS的name
AddRecipeToFilter(recipe_name, filter_name)
RemoveRecipeFromFilter(recipe_name, filter_name)

例子:

--modmain.lua
GLOBAL.setmetatable(env,{
    
    __index=function(t,k) return GLOBAL.rawget(GLOBAL,k) end})		

--加载必须的贴图资源
Assets = {
    
    
    Asset( "IMAGE", "images/myfilter.tex" ),	--64x64像素即可
	Asset( "ATLAS", "images/myfilter.xml" ),
}

--添加悬浮文字
STRINGS.UI.CRAFTING_FILTERS["myfilter"] = "Hover Text"
--自定义过滤器
AddRecipeFilter({
    
    
	name = "MYFILTER",	--独一无二的过滤器名
	atlas = "images/myfilter.xml",	--原始贴图54x54像素,64x64的也会默认缩放成54x54
	image = "myfilter.tex",
	--下面是可选参数
	--image_size = 80,  --表示缩放到80x80像素	
	--custom_pos = true,  --表示不添加在下面的网格中,如FAVORITES(收藏夹)
})
--添加配方到过滤器
AddRecipeToFilter("tophat", "MYFILTER")
AddRecipe2("waterballoon",{
    
    Ingredient("cutgrass", 2), Ingredient("ice", 1)},  
TECH.NONE, nil, {
    
    "MYFILTER"})

在这里插入图片描述

配方后初始化

--fn参数:self,对应recipe中的Recipe类的对象
AddRecipePostInitAny(fn)
AddRecipePostInit(recipe_name, fn)

传送门

→饥荒联机版Mod开发——两种帽子(十)
←饥荒联机版Mod开发——常用inst方法(八)

猜你喜欢

转载自blog.csdn.net/weixin_46068322/article/details/127021044