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

饥荒Mod 开发(二三):显示物品栏详细信息
饥荒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, 需要用捕虫网捕捉
饥荒Mod 开发(二四):制作一把万能工具_第1张图片
浆果可以挖
饥荒Mod 开发(二四):制作一把万能工具_第2张图片

树木可以砍
饥荒Mod 开发(二四):制作一把万能工具_第3张图片

实现万能工具

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”) 可以获取一把武器, 装备之后就可以看到效果了
饥荒Mod 开发(二四):制作一把万能工具_第4张图片

饥荒Mod 开发(二四):制作一把万能工具_第5张图片
饥荒Mod 开发(二四):制作一把万能工具_第6张图片
饥荒Mod 开发(二四):制作一把万能工具_第7张图片

设置耐久度

工具有耐久度的设定,使用的时候会消耗耐久度,可以根据不同的动作设置不同的耐久度消耗,比如砍一下 消耗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)

你可能感兴趣的:(饥荒Mod,游戏,lua,饥荒Mod,饥荒)