饥荒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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/241933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【高数定积分求解旋转体体积】 —— (上)高等数学|定积分|柱壳法|学习技巧

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 Shell method Setting up the Integral 例题 Example 1: Example 2: Example 3: Computing…

Linux--shell练习题

1、写一个 bash脚本以输出数字 0 到 100 中 7 的倍数(0 7 14 21...)的命令。 vim /shell/homework1.sh #!/bin/bash for num in {0..100} doif [[ num%7 -eq o ]];thenecho $numfi done执行输出脚本查看输出结果 输出结果: 2、写一个 bash脚本以统计一个文本文件…

LLM之RAG实战(七)| 使用llama_index实现多模态RAG

一、多模态RAG OpenAI开发日上最令人兴奋的发布之一是GPT-4V API(https://platform.openai.com/docs/guides/vision)的发布。GPT-4V是一个多模态模型,可以接收文本/图像,并可以输出文本响应。最近还有一些其他的多模态模型&#x…

flutter 实战 之 dio小实践

我们要对dio进行封装 class HttpRequest {static Future request(String url,{String method "get",Map<String,dynamic>? params})async{// 创建dio实例BaseOptions baseOptions BaseOptions(baseUrl: base_url,connectTimeout: Duration(seconds: 1));fi…

50 个具有挑战性的概率问题 [04/50]:尝试直至首次成功

一、说明 你好&#xff0c;我最近对与概率相关的问题产生了兴趣。我偶然发现了 Frederick Mosteller 所著的《五十个具有挑战性的概率问题及其解决方案》这本书。我认为创建一个系列来讨论这些可能作为面试问题出现的迷人问题会很有趣。每篇文章仅包含 1 个问题&#xff0c;使其…

【四】【C语言\动态规划】地下城游戏、按摩师、打家劫舍 II,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略&#xff0c;它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题&#xff0c;并将每个小问题的解保存起来。这样&#xff0c;当我们需要解决原始问题的时候&#xff0c;我们就可以直接利…

一款超好看流行的HTML随机视频播放背景引导页面源码

前言 今天宋佳乐博客给大家带来一款2024新版视频背景网址导航引导页面源码带背景动态HTML源码 源码介绍 2024新版视频背景网址导航引导页面源码带背景动态HTML源码&#xff0c;非常的炫酷&#xff0c;有需要的自行去体验吧&#xff0c;还是非常不错的 演示地址&#xff1a;点…

《xHCI 1.2》3体系结构概览

3.2 xHCI数据结构 3.2.1 Device Context Base Address Array 3.2.2 Device Context 3.2.3 Slot Context

keystone和beaengine的编译

编译Keystone 根据github的文档编译不出来&#xff0c;所以还是用CMake项目转成Visual Studio的项目来编译 1、下载源码 https://github.com/keystone-engine/keystone clone或者直接下载zip都行 2、CMake创建Visual Studio项目 下载和安装CMake就不细说了&#xff0c;在…

网络7层架构

网络 7 层架构 什么是OSI七层模型&#xff1f; OSI模型用于定义并理解数据从一台计算机转移到另一台计算机&#xff0c;在最基本的形式中&#xff0c;两台计算机通过网线和连接器相互连接&#xff0c;在网卡的帮助下共享数据&#xff0c;形成一个网络&#xff0c;但是一台计算…

正餐---二叉树的OJ题

目录​​​​​​​ 前言&#x1f36f; 1. 检查两颗树是否相同&#x1f947; 1.1 思路分析&#x1fa99; 1.2 代码实现&#x1f9f0; 2. 单值二叉树&#x1f332; 2.1 思路分析&#x1f52e; 2.2 代码实现&#x1f488; 3. 二叉树的前序遍历&#x1f39f;️ 3.1 思路分…

【数据结构】线性表

一.线性表 1.定义&#xff1a; n个同类型数据元素的有限序列&#xff0c;记为 L为表名&#xff0c;i为数据元素在线性表中的位序&#xff0c;n为线性表的表长&#xff0c;n0时称为空表。 2.数据元素之间的关系&#xff1a; 直接前驱和直接后继 3.抽象数据类型线性表的定义…

git首次使用--去公司第一次拉取

文章目录 一&#xff0c; 在企业中首次拉取项目二&#xff0c;提交项目1. 提交----新添加的文件2. 将分支上的代码同步到master3. 提交----更改后的文件 三&#xff0c;常见问题1. Git Pull Failed 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一&am…

固定效应模型-以stata为工具

固定效应模型-以stata为工具 文章目录 1.固定效应模型2. 模型原理3. `stata`代码实现1.固定效应模型 固定效应模型(Fixed Effects Model)是一种面板数据分析方法,通过引入个体固定效应来控制个体间的异质性,并更准确地估计解释变量对因变量的影响。它在许多经济、社会科学…

qt项目-《图像标注软件》源码阅读笔记-类图

目录 1. 开源项目链接 2. 项目界面 3. 项目类图 3.1 形状的绘制及形状的存储 3.2 主窗口中心组件的界面管理 3.3 Command负责实现撤销和重做功能 3.4 其他类 3.5 枚举 3.5.1 Status 主窗口的状态变量 3.5.2 Mode 主窗口模式状态变量 3.5.3 shapeStatus 中心组件状态…

josef约瑟 电流继电器 RL-D1 电压AC220V 整定范围0-9.99AAC

系列型号 RL-D1型电流继电器&#xff1b; RL-D2型电流继电器&#xff1b; 基本参数 RL-D系列电流继电器用于发电机、变压器和输电线的过负荷和短路保护装置中作为启动元件。本继电器为集成电路型继电器&#xff0c;精度高、功耗小、动作时间快&#xff0c; 返回系数高、整定…

AndroidStudio无法新建aidl文件解决办法

我用的 AS 版本是 Android Studio Giraffe | 2022.3.1 Build #AI-223.8836.35.2231.10406996, built on June 29, 2023 右键新建 aidl 文件&#xff0c; 提示 (AIDL File)Requires setting the buildFeatures.aidl to true in the build file 解决办法 修改 app 的 build.…

03_排序

03_排序 一、简单排序Comparable接口介绍需求&#xff1a; 冒泡排序排序原理&#xff1a;冒泡排序API设计&#xff1a; 选择排序排序原理&#xff1a;选择排序API设计&#xff1a;选择排序的时间复杂度分析&#xff1a; 插入排序需求&#xff1a;排序原理&#xff1a;插入排序A…

三菱人机交互GT Designer的安装

今天&#xff0c;与小编一起来学习三菱的GT Designer软件&#xff0c;下面就是小编记录的软件查找&#xff0c;安装的全过程&#xff0c;希望对你学习三菱有帮助。 目录 安装 选择官网下载安装包 解压安装包进行安装 创建一个工程 安装 选择官网下载安装包 三菱&#xff08;中…

如何在linux安装软件

一.安装种类 1.编译安装&#xff1a;灵活性高&#xff0c;难度较大&#xff0c; 可以安装新版本 2.rpm安装&#xff1a;查软件信息&#xff0c;是否安装&#xff0c;文件列表 3.yum&#xff1a;是rpm的升级版本&#xff0c;解决rpm的弊端 rpm安装&#xff1a; 安装软件的时…