饥荒联机版mod制作[耐久度与专精修补]

提到专精修补大家最先想到的应该就是亮茄与虚空这两组装备了。

但是这两组装备所采用的专精修补有一个明显的缺点,就是无法设置修补程度,修补套件无论在修补任何破损程度的套装时,都会将其修补到100%耐久并且直接消失。

所以这篇文章不详细介绍亮茄与虚空套件的修补方法,感兴趣的小伙伴可以在我的主页[耐久度、新鲜度、燃料值详解]对其了解大概。

本篇文章采用增添燃料类型的方法来实现专精修补。

一、装备耐久度设置

为装备增添耐久度的代码如下:

-- 为实例添加 "fueled" 组件,使其具有燃料属性
inst:AddComponent("fueled")

-- 设置燃料类型为 FUELTYPE.USAGE
inst.components.fueled.fueltype = FUELTYPE.NAME

-- 初始化燃料水平为 TUNING.EYEBRELLA_PERISHTIME
inst.components.fueled:InitializeFuelLevel(TUNING.EYEBRELLA_PERISHTIME)

-- 设置燃料耗尽时的回调函数为 eyebrella_perish
inst.components.fueled:SetDepletedFn(eyebrella_perish)

fueled组件的具体请看[耐久度、新鲜度、燃料值详解],

其中新增燃料值只需要在modmain中声明即可:

FUELTYPE.NAME = "NAME"

如果不想要专精修补的话,可以将燃料类型设置为普通的燃料类型:FUELTYPE.USAGE。

二、修补套件设置

2.1  一次性修补套件

修补套件需要增添的组件与fueled是配套的,名称为fuel,增添的代码如下:

inst:Addcomponent("fuel")
inst.components.fuel.fueltype = FUELTYPE.NAME  -- 设置燃料类型
inst.components.fuel.fuelvalue = num  -- 设置燃料值,也就是修补时增添的耐久度

2.2  可多次使用的修补套件

可多次使用的修补套件的代表是针线包,他是用了与fuel不同的组件——sewing,增添的代码如下:

local function onsewn(inst, target, doer)
    doer:PushEvent("repair")
end

inst:AddComponent("sewing")
inst.components.sewing.repair_value = TUNING.SEWINGKIT_REPAIR_VALUE  -- 设置每次修补增加的耐久度
inst.components.sewing.onsewn = onsewn

此时,在进行修补时,只会增加被修补对象的耐久度,而对修补套件的耐久度没有影响;

需要通过给修补套件增加finiteuses组件来减少其耐久,也就是使用次数,方法如下:

inst:AddComponent("finiteuses")
inst.components.finiteuses:SetMaxUses(TUNING.SEWINGKIT_USES) -- 最大使用次数
inst.components.finiteuses:SetUses(TUNING.SEWINGKIT_USES)  -- 使用次数
inst.components.finiteuses:SetOnFinished(inst.Remove) -- 用完之后的回调函数,这里直接使用一条语句移除了

大家应该注意到了,使用这种方法时没有用到任何标签来实现专精修补,所以现在还不能完成专精修补。这是因为sewing组件判断能否修补只用到了一个标签“needssewing”来判断,并没有判断是否专精。

想要实现可多次使用的修补套件来完成专精修补,这里提供两种方法:

一是我们可以选择对原有的组件sewing进行“hook”来修改,所谓“hook”其实就是在其初始化的时候对其进行修改,让其从一开始就变成我们想要的样子。“hook”的具体用法后面会讲。

二是自己新增一个组件。这里不要求我们学会自制组件,关于组件的制作方法后面会讲。此处仅将原有的组件sewing复制过来加以修改。原有的sewing组件很简单,代码如下:

local Sewing = Class(function(self, inst)
    self.inst = inst
    self.repair_value = 1
end)

function Sewing:DoSewing(target, doer)

    if target:HasTag("needssewing") then

		target.components.fueled:DoDelta(self.repair_value)

		if self.inst.components.finiteuses then
			self.inst.components.finiteuses:Use(1)
		elseif self.inst.components.stackable then
			self.inst.components.stackable:Get(1):Remove()
		end

		if self.onsewn then
			self.onsewn(self.inst, target, doer)
		end

		AwardPlayerAchievement("sewing_kit", doer)

		return true
	end

end

return Sewing

这里,我们只需要再传入一个标签,并判断被修补的物品是否有该标签,即可实现专精修补,修改后的组件singlerepair如下:

local SingleRepair = Class(function(self, inst)
    self.inst = inst
    self.repair_value = 1
end)

function SingleRepair:DoRepair(target, doer,tag)

    if target:HasTag(tag) then

		target.components.fueled:DoDelta(self.repair_value)

		if self.inst.components.finiteuses then
			self.inst.components.finiteuses:Use(1)
		elseif self.inst.components.stackable then
			self.inst.components.stackable:Get(1):Remove()
		end

		if self.onsewn then
			self.onsewn(self.inst, target, doer)
		end
		-- 这行是成就相关代码
		--AwardPlayerAchievement("sewing_kit", doer)

		return true
	end

end

return SingleRepair

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值