饥荒Mod 开发(二一):超大便携背包,超大物品栏,永久保鲜

2023-12-24 06:01

本文主要是介绍饥荒Mod 开发(二一):超大便携背包,超大物品栏,永久保鲜,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

饥荒Mod 开发(二十):显示打怪伤害值
源码
游戏中的物品栏容量实在太小了,虽然可以放在箱子里面但是真的很不方便,外出一趟不容易看到东西都不能捡。实在是虐心。 游戏中的食物还有变质机制,时间长了就不能吃了,玩这个游戏心里压力真是太大了。 下面介绍制作一个超级大背包,并且背包中的物品不会变质,基本上可以随心所欲的放食物进去。

1 需要先制作一个简易背包

结合之前做的5格装备栏,我们可以做一个自己的背包,将这个背包装备在背上。

1.1 准备贴图

下载一个64*64 png图片,带alpha通道的图片,放在 images\inventoryimages 目录下
在这里插入图片描述

1.2 编译贴图

使用 编译工具编译贴图,这部分可以参考 饥荒Mod 开发(三):资源工具使用

& 'h:\Don''t Starve Mod Tools\ds_mod_tools\build\win32\mod_tools\autocompiler.exe' "D:\WeGameApps\rail_apps\饥荒:单机版(2000013)\mods\pigpetfood"

执行完命令之后会生成贴图需要的文件
在这里插入图片描述

1.3 制作背包

前面的文章也有介绍如何制作一个简易的物品 饥荒Mod 开发(四):制作一个物品,先制作一个mybackpack 预制物,可以装备在背上,在 scripts\prefabs 目录下新建 mybackpack.lua
在这里插入图片描述

local assets=
{Asset("ATLAS", "images/inventoryimages/mybackpack.xml")
}-- 定义一个函数,用于创建一个实体
local function fn(Sim)-- 创建一个新的实体local inst = CreateEntity()-- 添加变换组件,用于处理实体的位置和方向inst.entity:AddTransform()-- 添加动画状态组件,用于处理实体的动画inst.entity:AddAnimState()-- 添加声音发射器组件,用于处理实体的声音inst.entity:AddSoundEmitter()-- 使实体具有物理属性,如重力和碰撞MakeInventoryPhysics(inst)-- 设置实体的动画库为"backpack1"inst.AnimState:SetBank("backpack1")-- 设置实体的构建为"backpack"inst.AnimState:SetBuild("backpack")-- 播放"anim"动画inst.AnimState:PlayAnimation("anim")-- 添加可检查组件,使实体可以被检查inst:AddComponent("inspectable")-- 添加库存项组件,使实体可以被放入库存inst:AddComponent("inventoryitem")-- 设置实体不能被放入容器inst.components.inventoryitem.cangoincontainer = falseinst.components.inventoryitem.atlasname = "images/inventoryimages/mybackpack.xml"-- 添加可装备组件,使实体可以被装备inst:AddComponent("equippable")-- 设置实体的装备插槽为背部插槽inst.components.equippable.equipslot = EQUIPSLOTS.BACK-- 返回创建的实体return inst
endreturn Prefab( "common/mybackpack", fn, assets) 

1.4 注册预制物,设置描述

创建完了预制物之后需要注册到游戏中,并且设置 检测描述,在modmain.lua中添加 如下代码

PrefabFiles = {"mybackpack"
}GLOBAL.STRINGS.NAMES.MYBACKPACK = "超级大背包"
GLOBAL.STRINGS.CHARACTERS.GENERIC.DESCRIBE.MYBACKPACK = "超级大,永久保鲜" 

1.5 进入游戏测试

由于背包设置的动画使用的饥荒自带的图片

在这里插入图片描述
装备之后
在这里插入图片描述

2 添加物品栏功能

2.1 创建3*25 格子

在mybackpack.lua 中添加容器代码

-- 添加一个容器组件,使实体可以存放物品
inst:AddComponent("container")
-- 创建一个表,用于存放插槽的位置
local slotpos = {}
-- 计算x轴的偏移量
local x_offset = (-72-72-40-2)*2-- 创建一个3行25列的格子,用于存放物品
for x = 1, 3 dofor y=1, 25 do-- 将每个格子的位置添加到slotpos表中table.insert(slotpos, Vector3(72*y +x_offset, 72*x -2-40-72-36, 0))end
end
-- 设置容器的插槽数量为slotpos表的长度
inst.components.container:SetNumSlots(#slotpos)
-- 设置容器的插槽位置为slotpos表
inst.components.container.widgetslotpos = slotpos
-- 设置容器的动画库为"ui_chest_3x3"
inst.components.container.widgetanimbank = "ui_chest_3x3"
-- 设置容器的位置
inst.components.container.widgetpos = Vector3(-340, -395, 0)
-- 设置容器的侧边对齐提示
inst.components.container.side_align_tip = 0
-- 设置容器的类型为"pack"
inst.components.container.type = "pack"

在这里插入图片描述

2.2 处理背包装备和卸载事件

-- 当装备背包时执行的函数local function onequip(inst, owner) -- 更改角色的动画状态,将 "swap_body" 符号替换为 "swap_backpack" 的 "backpack" 符号owner.AnimState:OverrideSymbol("swap_body", "swap_backpack", "backpack")-- 更改角色的动画状态,将 "swap_body" 符号替换为 "swap_backpack" 的 "swap_body" 符号owner.AnimState:OverrideSymbol("swap_body", "swap_backpack", "swap_body")-- 设置角色的背包为当前实例owner.components.inventory:SetOverflow(inst)-- 打开背包的容器inst.components.container:Open(owner)end-- 当卸下背包时执行的函数local function onunequip(inst, owner) -- 清除角色动画状态中的 "swap_body" 符号的替换owner.AnimState:ClearOverrideSymbol("swap_body")-- 清除角色动画状态中的 "backpack" 符号的替换owner.AnimState:ClearOverrideSymbol("backpack")-- 清除角色的背包owner.components.inventory:SetOverflow(nil)-- 关闭背包的容器inst.components.container:Close(owner)end-- 设置装备背包时的行为inst.components.equippable:SetOnEquip(onequip)-- 设置卸下背包时的行为inst.components.equippable:SetOnUnequip(onunequip)

3 添加保鲜功能

只需要在背包预制物代码中添加一个tag就可以实现保鲜功能

 inst:AddTag("fridge")

在modmain.lua 中添加如下代码

TUNING.PERISH_FRIDGE_MULT = 0

这篇关于饥荒Mod 开发(二一):超大便携背包,超大物品栏,永久保鲜的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/530753

相关文章

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3