饥荒Mod 开发(十):制作一把AOE武器

饥荒Mod 开发(九):物品栏排列
饥荒Mod 开发(十一):修改物品堆叠
前面的文章介绍了很多基础知识以及如何制作一个物品,这次制作一把武器,装备之后可以用来攻击怪物。

制作武器贴图和动画

1.1 制作贴图。

  • 先准备一张武器的贴图,png格式大小 64*64,32位图,放到images\inventoryimages 目录下 如果不知道如何制作可以参考 饥荒Mod 开发(三):资源工具使用
    在这里插入图片描述
  • 执行编译脚本:
#先cd 到 工具目录下,然后执行命令
.\autocompiler.exe "C:\WeGameApps\rail_apps\饥荒:单机版(2000013)\mods\pigpetfood"

在这里插入图片描述
执行完命令之后在相同目录下会生成两个文件,这两个文件就是贴图文件
在这里插入图片描述

1.2 制作动画

  • 下载一张高分辨率的图片,png 格式,32位图片,我下载了个128*128 像素的图片,将图片放在exported/lightsword/lightsword 目录下, 需要自己创建目录
    在这里插入图片描述

  • 打开Spriter.exe 工具,菜单新建工程,选择目录 mods\pigpetfood\exported\lightsword。然后从工程右上角拖入图片到画布中,然后保存工程到 lightsword.scml, 特别需要注意: 新建一个BUILD 动画,否则装备武器的时候不会有任何的显示。
    在这里插入图片描述

在这里插入图片描述

  • 编译脚本生成动画文件。脚本会自动编译动画并且拷贝到相应的目录里面,在制作贴图的时候也执行过一次编译脚本,其实只需要最后一次执行就可以了,为了演示这里就执行两次。
    在这里插入图片描述
    生成的动画文件被自动拷贝到anim目录下
    在这里插入图片描述

1.3 制作一个初始武器(“光剑”)物品

先参考之前的文章饥荒Mod 开发(四):制作一个物品,先制作一个简答的物品,暂时不具备攻击能力,只要能生成这个物品即可

  • 在scripts/prefabs 目录下创建一个 lightsword.lua 文件。用来创建预制物光剑

在这里插入图片描述

local assets=
{
    Asset("ANIM", "anim/lightsword.zip"), -- 加载动画资源
    Asset("ATLAS", "images/inventoryimages/lightsword.xml"), -- 加载图像资源
}

local function fn(Sim)
    local inst = CreateEntity() -- 创建一个新的实体
    inst.entity:AddTransform() -- 添加变换组件
    inst.entity:AddAnimState() -- 添加动画状态组件
    
    MakeInventoryPhysics(inst) -- 为实体添加物理属性
    
    inst:AddComponent("inspectable") -- 添加可检查组件
    
    inst:AddComponent("inventoryitem") -- 添加库存物品组件

    --物品放在地上的时候播放idle 动画
    inst.AnimState:SetBank("lightsword") -- 设置动画库
    inst.AnimState:SetBuild("lightsword") -- 设置动画构建
    inst.AnimState:PlayAnimation("idle") -- 播放"idle"动画
    
    inst.components.inventoryitem.atlasname = "images/inventoryimages/lightsword.xml" -- 设置在物品栏的图像

    
    return inst -- 返回创建的实体
end

return Prefab( "common/lightsword", fn, assets) -- 返回一个预制物品,这个预制物品使用了上面定义的
  • 在modmian.lua 中添加这个预制物
    在这里插入图片描述
--声明预制物
PrefabFiles = {
    "pigpetfood",
    "lightsword"
}

--添加光剑武器的描述
GLOBAL.STRINGS.NAMES.LIGHTSWORD = "光剑"
GLOBAL.STRINGS.CHARACTERS.GENERIC.DESCRIBE.LIGHTSWORD = "这是一把光剑"
GLOBAL.STRINGS.RECIPE_DESC.LIGHTSWORD = "可以发光的光剑"

1.4 测试物品

  • 进入游戏按下 ` 键盘,在ESC 的下面。 打开控制台输入 c_give(“lightsword”) 生成光剑物品看看是否显示正常。
    在这里插入图片描述
    在这里插入图片描述
    简单物品创建完成之后,接下来让他成为一把能攻击的武器。

成为有攻击力的武器

2.1 让武器能装备

在lightsword.lua 文件的fn 函数中添加可装备组件。这样鼠标悬浮上就会显示装备,右键点击就可以装备

--添加可装备组件
    inst:AddComponent("equippable") -- 添加可装备组件
    inst.components.equippable.equipslot = EQUIPSLOTS.HANDS
    inst.components.equippable:SetOnEquip(function(inst, owner) -- 设置装备时的回调函数
        owner.AnimState:OverrideSymbol("swap_object", "lightsword", "lightsword") -- 设置玩家的动画
        owner.AnimState:Show("ARM_carry") -- 显示玩家的手臂
        owner.AnimState:Hide("ARM_normal") -- 隐藏玩家的手臂
    end)
    inst.components.equippable:SetOnUnequip(function(inst, owner) -- 设置卸下时的回调函数
        owner.AnimState:Hide("ARM_carry") -- 隐藏玩家的手臂
        owner.AnimState:Show("ARM_normal") -- 显示玩家的手臂
    end)

在这里插入图片描述
右键装备之后,就可以看到手上持有武器了。
在这里插入图片描述

2.2 设置攻击力

此时装备的光剑并没有任务的作用,所以需要给武器增加攻击力,攻击范围等等

 --添加武器组件
    inst:AddComponent("weapon") -- 添加武器组件
    inst.components.weapon:SetDamage(1) -- 设置武器的伤害值
    inst.components.weapon.hitrange = 10 -- 设置武器的攻击范围

2.3 添加耐久度

武器每次攻击都会丢失耐久度,耐久度为0 就会报废掉。下面设置了100的耐久度,每次攻击默认会减少1.耐久为0的时候就会消失,也可以不设置耐久,这样武器可以一直使用

    -- 添加"finiteuses"组件,这个组件用于表示一个物品的耐久度
    inst:AddComponent("finiteuses")
    -- 设置物品的最大耐久度为100
    inst.components.finiteuses:SetMaxUses(100)
    -- 设置物品的当前耐久度为100
    inst.components.finiteuses:SetUses(100)
    -- 设置当耐久度用完时的回调函数
    -- 在这个例子中,当耐久度用完时,物品会被移除
    inst.components.finiteuses:SetOnFinished(function (inst)
        inst:Remove()
    end)

在这里插入图片描述

2.4 添加冰冻AOE 效果

如果有一堆怪物的武器可以触发群体攻击,并且冰冻怪物,触发AOE伤害

    inst.components.weapon:SetOnAttack(function (inst, attacker, target)
        -- 获取攻击目标的世界坐标
        local x, y, z = target.Transform:GetWorldPosition()
        -- 在攻击目标周围5个单位的范围内查找所有带有"monster"标签的实体
        local entities = TheSim:FindEntities(x, y, z, 5, {"monster"})
        -- 计算AOE伤害,等于武器的伤害的200%
        local damage = inst.components.weapon:GetDamage(attacker, target) * 2
        for _,obj in pairs(entities) do
            -- 触发"onareaattackother"事件,该事件在区域攻击其他实体时触发
            inst:PushEvent("onareaattackother", {target = obj, weapon = inst})
            -- 对除攻击目标外的其他实体造成AOE伤害
            if obj ~= target then
                obj.components.combat:GetAttacked(inst, damage, inst)
            end
            -- 如果实体可以被冻结,则增加其冷度
            if obj.components.freezable then
                obj.components.freezable:AddColdness(1)
            end
            -- 在实体位置生成随机特效
            local fxs = {"icespike_fx_1", "icespike_fx_2","icespike_fx_3","icespike_fx_4"}
            SpawnAt(GetRandomItem(fxs), obj)
        end
    end)

在这里插入图片描述

AOE带冰冻效果武器源码

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【23-24 秋学期】NNDL 作业11 LSTM

目录 习题6-4 推导LSTM网络中参数的梯度, 并分析其避免梯度消失的效果 习题6-3P 编程实现下图LSTM运行过程 (一)numpy实现 (二)使用nn.LSTMCell实现 (三) 使用nn.LSTM实现 总结 &#x…

神经网络可以计算任何函数的可视化证明

神经网络可以计算任何函数的可视化证明 对于神经网络,一个显著的事实就是它可以计算任何函数。 如下:不管该函数如何,总有神经网络能够对任何可能的输入x,输出值f(x) 即使函数有很多输入和输出&#xff0…

vue2入门

vue2官方文档&#xff1a;安装 — Vue.js 1、安装 新建"vue"文件夹——>新建vue1.html 直接用<script>标签引入vue&#xff1a; <script src"https://cdn.jsdelivr.net/npm/vue2.7.14/dist/vue.js"></script> tips: CDN:一个网络…

uniapp中uni-data-select下拉框组件如何去除边框?

在目录中找到文件夹。 找到下拉框组件文件夹 注释该文件夹以下代码就能实现下拉框不带边框。

前端对接 —— 周末

1.点击校验 点击校验 宇哥 记得过滤 不能校验的数据&#xff08;我后端还要检验吗&#xff1f;&#xff09; 2.前端数据对接 这个可以吗&#xff1f; 这种的可以吗&#xff1f;

uniapp实现地图电子围栏功能

该功能使用uniapp中内置组件map实现 效果图预览&#xff1a; 实现过程&#xff1a; 1.文档&#xff1a; 2.代码&#xff1a; <template><view><map :style"width: 100%; height:screenHeight" :latitude"latitude" :longitude"longit…

免费在线markdown语法编辑器

本地用习惯了Typora&#xff0c;但是上传的图片保存在本地&#xff0c;其他电脑想查看必须连本地的图片也拷贝过去。虽然Typora可以用PicGo保存远程的图片&#xff0c;但电脑离线之后看不到图片&#xff0c;不能接受。所以想找一款在线版的编辑器&#xff0c;方便记笔记。 我之…

二叉树前,中序推后续_中,后续推前序

文章目录 介绍思路例子 介绍 二叉树是由根、左子树、右子树三部分组成。 二叉树的遍历方式又可以分为前序遍历&#xff0c;中序遍历&#xff0c;后序遍历。 前序遍历&#xff1a;根&#xff0c;左子树&#xff0c;右子树 中序遍历&#xff1a;左子树&#xff0c;根&#xff0…

【JVM】4.运行时数据区(程序计数器、虚拟机栈)

文章目录 4.JVM的运行时数据区4.1 程序计数器4.2 Java虚拟机栈4.3 虚拟机栈内存溢出 4.JVM的运行时数据区 4.1 程序计数器 程序计数器&#xff08;PC&#xff09;会记录着下一行字节码指令的地址。执行完当前指令后&#xff0c;PC刷新&#xff0c;JVM的执行引擎根据程序计数器…

饥荒Mod 开发(十一):修改物品堆叠

饥荒Mod 开发(十)&#xff1a;制作一把AOE武器 饥荒Mod 开发(十二)&#xff1a;一键制作 饥荒中物品栏有限&#xff0c;要拾取的物品有很多&#xff0c;经常装不下要忍痛丢掉各种东西&#xff0c;即使可以将物品放在仓库但是使用不方便&#xff0c;所以可以将物品的堆叠个数设…

GitHub入门介绍:从小白到大佬的旅程

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

【MySQL】MySQL表的操作-创建查看删除和修改

文章目录 1.创建表2.查看表结构3.修改表4.删除表 1.创建表 语法&#xff1a; CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;说明&#xff1a; field 表示列名datatype 表示列的类型…

第7章 排序

前言 在这一章&#xff0c;我们讨论数组元素的排序问题。为简单起见&#xff0c;假设在我们的例子中数组只包含整数&#xff0c;虽然更复杂的结构显然也是可能的。对于本章的大部分内容&#xff0c;我们还假设整个排序工作能够在主存中完成&#xff0c;因此&#xff0c;元素的个…

【TB作品】51单片机,语音出租车计价器

西交大题目 1.语音出租车计价器 一、功能要求: 1.具有可模拟出租车车轮转速传感器的硬件设计,可计量出租车所走的公 里数。 2.显示和语音播报里程、价格和等待红灯或堵车的计时价格: 3.具有等待计时功能 4.具有实时年月日显示和切换功能。 5.操作简单、界面友好。 二、设计建议…

机器学习算法---异常检测

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…

计算机网络:自顶向下第八版学习指南笔记和课后实验--运输层

记录一些学习计算机网络:自顶向下的学习笔记和心得 Github地址&#xff0c;欢迎star ⭐️⭐️⭐️⭐️⭐️ 运输层 TCP&#xff1a; 传输控制协议 报文段 UDP&#xff1a; 用户数据包协议 数据报 将主机间交付扩展到进程间交付被称为运输层的多路复用与多路分解 将运输层…

饥荒Mod 开发(十三):木牌传送

饥荒Mod 开发(十二)&#xff1a;一键制作 饥荒Mod 开发(十四)&#xff1a;制作屏幕弹窗 一键传送源码 饥荒的地图很大&#xff0c;跑地图太耗费时间和饥饿值&#xff0c;如果大部分时间都在跑图真的是很无聊&#xff0c;所以需要有一个能够传送的功能&#xff0c;不仅可以快速…

docker文档转译1

写在最前面 本文主要是转译docker官方文档。主题是Docker overview&#xff0c;这里是链接 Docker概述 Docker是一个用于开发、发布和运行应用程序的开放平台。Docker使你能够将应用程序与基础设施分离&#xff0c;从而可以快速交付软件。你可以使用相同的方法像管理应用程序…

HarmonyOS4.0从零开始的开发教程18HarmonyOS应用/元服务上架

HarmonyOS&#xff08;十六&#xff09;HarmonyOS应用/元服务上架 简介 随着生活节奏的加快&#xff0c;我们有时会忘记一些重要的事情或日子&#xff0c;所以提醒功能必不可少。应用可能需要在指定的时刻&#xff0c;向用户发送一些业务提醒通知。例如购物类应用&#xff0c…

急速上手搭建单节点 k8s集群实战

Minikube搭建 是一种轻量化的Kubernetes集群&#xff0c;是k8s社区为了帮助开发者和学习者能够更好学习和体验k8s功能而推出的&#xff0c;使用个人PC的虚拟化环境就快速构建启动单节点k8s机器准备&#xff1a;阿里云 CentOS 7.x &#xff0c;2核4g 安装 安装Docker # 1.先…