饥荒Mod 开发(二四):制作一把万能工具

news2025/2/5 0:35:09

饥荒Mod 开发(二三):显示物品栏详细信息
源码
饥荒中的每种工具都有独特的功能,比如 斧头用来砍树, 铲子用来 挖东西,鹤嘴锄用来挖矿, 锤子可以敲碎东西,所以我们随身备着4种工具,不仅需要多占用背包还要时不时的切换,那怎么制作一把万能的工具,可以用来砍树,打怪,挖矿,敲东西等。

原理

每个物品都会对应一个或者多个动作,这个动作决定了如何操作这个物品,每个预制物会添加一个"workable"组件,然后设置action,这样这个物品就可以被 Action处理。

	--下面是 evergreens.lua 中预制物的代码
      inst:AddComponent("workable")
      inst.components.workable:SetWorkAction(ACTIONS.CHOP)
	--浆果
	inst:AddComponent("workable")
	inst.components.workable:SetWorkAction(ACTIONS.DIG)

上两篇有介绍如何显示物品的详情,也可以将鼠标放到物品上,就能显示物品的动作。
比如萤火虫的动作是NET, 需要用捕虫网捕捉
在这里插入图片描述
浆果可以挖
在这里插入图片描述

树木可以砍
在这里插入图片描述

实现万能工具

2.1 添加tool组件

之前有一篇是实现了一把AOE 的武器,饥荒Mod 开发(十):制作一把AOE武器, 我们在这个基础上再增加一些功能, 让这把武器能砍树,能捕虫,能挖矿等等。只需要给这把武器添加相应的动作就可以了,代码很简单。在lightsword.lua 文件中添加tool组件

    -- 添加工具组件
    inst:AddComponent("tool")
    -- 设置工具动作为砍砍
    inst.components.tool:SetAction(ACTIONS.CHOP)
    -- 设置工具动作为锤子
    inst.components.tool:SetAction(ACTIONS.HAMMER)
    -- 设置工具动作为挖掘
    inst.components.tool:SetAction(ACTIONS.DIG)
    -- 设置工具动作为网
    inst.components.tool:SetAction(ACTIONS.NET)
    -- 设置工具动作为挖矿
    inst.components.tool:SetAction(ACTIONS.MINE)

进入游戏测试

进入游戏打开调试控制台,输入 c_give(“lightsword”) 可以获取一把武器, 装备之后就可以看到效果了
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

设置耐久度

工具有耐久度的设定,使用的时候会消耗耐久度,可以根据不同的动作设置不同的耐久度消耗,比如砍一下 消耗2%, 挖一下矿消耗2%, 捕虫 消耗1%等,可以自由设定。当然也可以不设置耐久,这样就可以一直用

    -- 添加有限使用组件
    inst:AddComponent("finiteuses")
    -- 设置最大使用次数为100
    inst.components.finiteuses:SetMaxUses(100)
    -- 设置当前使用次数为100
    inst.components.finiteuses:SetUses(100)
    -- 设置当使用完毕时的回调函数,移除实体
    inst.components.finiteuses:SetOnFinished(function (inst)
        inst:Remove()
    end)

    -- 设置各种动作的消耗
    -- 砍动作消耗3次使用
    inst.components.finiteuses:SetConsumption(ACTIONS.CHOP, 3)
    -- 锤子动作消耗2次使用
    inst.components.finiteuses:SetConsumption(ACTIONS.HAMMER, 2)
    -- 挖掘动作消耗2次使用
    inst.components.finiteuses:SetConsumption(ACTIONS.DIG, 2)
    -- 网动作消耗1次使用
    inst.components.finiteuses:SetConsumption(ACTIONS.NET, 1)

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

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

相关文章

浅谈智能型电动机保护器在也门化工行业的应用

1.背景信息Background 现代化工工业中,电动机作为一种拖动机械,成为所有动力机械基础,科学技术不断进步和工艺控制不断完善,尤其是自动化生产要求,迫切需要开发和完善电动机控制和保护设备,实现对生产过程…

论文降重隐藏字符怎么识别 papergpt

大家好,今天来聊聊论文降重隐藏字符怎么识别,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧,可以借助此类工具: 论文降重隐藏字符的识别方法 一、引言 在论文降重过程中&#xff…

Linux 学习

复制/etc 文件夹到/mnt 目录 cp -r(-a) /etc /mnt回到上一次文件夹 cd -切换到当前用户的家目录_cd ~________________________如何查找ls 命令的位置_______which ls_________________________________请写出ll 命令中查看到的7大文件类型缩写 - s l p c b …

PostgreSQL | FunctionProcedure | 函数与存储过程的区别

文章目录 PostgreSQL | Function&Procedure | 函数与存储过程的区别1. 简述书面说法大白话讲 2. 函数(Function)2.1 定义2.2 用途2.3 执行2.4 事务处理2.5 说点例子1. 当参数都是IN类时2. 参数中出现OUT、INOUT参数时 3. 存储过程(Proced…

路由器介绍和命令操作

先来回顾一下上次的内容: ip地址就是由32位二进制数组 二进位数就是只有数字0和1组成 网络位:类似于区号,表示区域作用 主机位:类似于号码,表示区域中编号 网络名称:网络位不变,主机位全为0 …

C++-类和对象(1)

1.面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完 成。…

数据结构思维导图

数据结构思维导图,目前先写这些,后续有更新会继续。 1 数据结构思维导图

git中的smart checkout和force checkout

切换分支时出现了这个问题: 这是因为shiyan01分支修改了代码,但是没有commit, 所以在切换到test分支的时候弹出这个窗口 一、smart checkout(智能签出) 会把shiyan01分支的改动内容带到test分支。合并处理后的内容就变成了test分支的内容,而shiyan01分支的改动会被…

面试题之二HTTP和RPC的区别?

面试题之二 HTTP和RPC的区别? Ask范围:分布式和微服务 难度指数:4星 考察频率:70-80% 开发年限:3年左右 从三个方面来回答该问题: 一.功能特性 1)HTTP是属于应用层的协议:超文本传输协议…

认识K8S的基本概念和原理

K8S:Kubernetes8个字母省略就是k8s 自动部署,自动扩展和容器化部署的应用程序的一个开源系统 k8s是负责自动化运维管理多个容器化程序的集群。是一个功能强大的容器编排工具。分布式和集群化的方式进行容器管理。 k8s的版本:1.15或1.18。使…

YOLOv8涨点技巧:一种新颖的多尺度滑窗注意力,助力小目标和遥感影像场景

💡💡💡本文全网独家改进:提出了一种新颖的多尺度滑窗注意力机制,有效的应用在遥感影像和小目标场景,实现涨点。 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482 💡💡💡全网独家首发创新(原创)…

【通讯录案例-搭建登录界面 Objective-C语言】

一、来看我们这个通讯录案例 1.接下来啊,我们来做这个通讯录案例, 然后呢,做这么一个应用程序啊, 我们第一步呢,先把界面儿搭了, 然后呢,搭之前,简单的来分析一下, 首先呢,这是,中间儿的这一块儿, 1)有个“账户”、“密码”,这一块儿, 这是一个什么控制器,…

Unity 贝塞尔曲线工具获取运动轨迹

Unity 贝塞尔曲线工具获取运动轨迹 一、介绍贝塞尔曲线二、Unity中贝塞尔曲线工具介绍1.创建一个空物体挂在上BezierSpline.cs脚本组件2.由上图可知刚创建出来的有两个点和两个手柄组成3.我们可修改其坐标看下效果4.这样我们就可以获得这两个点之间的指定数量的点来作为某个物体…

Spring Boot简单多线程定时任务实现 | @Async | @Scheduled

Spring Boot简单多线程定时任务实现 实现步骤 1 创建一个Spring Boot项目 2 定义定时任务: package com.jmd.timertasktest.task;import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.Async; impor…

Linux c++开发-14-IO复用

什么是文件 程序员使用I/O最终都逃不过文件这个概念。 在Linux世界中文件是一个很简单的概念,作为程序员我们只需要将其理解为一个N byte的序列就可以了: b1, b2, b3, b4, … bN 实际上所有的I/O设备都被抽象为了文件这个概念,一切皆文件…

实战 9 权限菜单管理

目录 1、权限菜单后端接口 2、查询权限菜单列表 2.1 设计效果图 2.2 menuList.vue 3、 新增权限菜单 3.1 新增权限菜单窗口代码 3.2 选择所属菜单代码 3.3 封装图标选择器 3.4 新增、编辑和删除权限菜单 1、权限菜单后端接口 package com.cizhu.service;import com.ci…

【Linux驱动】最基本的驱动框架 | LED驱动

🐱作者:一只大喵咪1201 🐱专栏:《Linux驱动》 🔥格言:你只管努力,剩下的交给时间! 目录 🏀最基本的驱动框架⚽驱动程序框架⚽编程 🏀LED驱动⚽配置GPIO⚽编程…

go语言基础 --时间处理常用函数

获取当前时间 时间和日期相关的函数是开发中常用的,go语言中,引入time包即可使用相关的函数 获取当前时间的方法:time.Now(),返回一个time.Time类型的时间信息,可直接打印出来 func main() {now : time.Now()fmt.Pr…

算法leetcode|94. 二叉树的中序遍历(多语言实现)

文章目录 94. 二叉树的中序遍历:样例 1:样例 2:样例 3:提示: 分析:题解:rust:go:c:python:java: 94. 二叉树的中序遍历: …

云原生Kubernetes:K8S集群版本升级(v1.22.14 - v1.23.14)

目录 一、理论 1.K8S集群升级 2.环境 3.升级集群(v1.23.14) 4.验证集群(v1.23.14) 二、实验 1. 环境 2.升级集群(v1.23.14) 2.验证集群(v1.23.14) 一、理论 1.K8S集群升级 …