[关闭]
@longfei 2016-12-14T03:29:03.000000Z 字数 2459 阅读 2393

Eater组件解析

联机版组件解析 Don'tStarve Mod教程


简介

eater组件是用于处理进食的组件。一个prefab必须要拥有该组件才能进行进食行为。
通过该组件可以设置可进食的食物类型,食物对进食者的影响等等。

成员变量

变量名 数据类型 默认值 描述
inst table inst 附着的inst
eater bool false 作用不明
strongstomach bool false 为true时,吃含有tag"monstermeat"的食物不会受到负面影响(血和精神不会降低)
preferseating table {FOODGROUP.OMNI} 喜食表。元素可以是一张食性表或者一个食物类型。用于判断玩家是否可以真的吃下指定类型的食物。所谓食性表,就是一些食物类型组合而成的表。默认值中的FOODGROUP.OMNI就是默认的食性表,包含了FOODTYPE.MEAT,FOODTYPE.VEGGIE,FOODTYPE.INSECT,FOODTYPE.SEEDS,FOODTYPE.GENERIC这些食物类型。
caneat table {FOODGROUP.OMNI} 可食表,元素内容同上。非玩家对象,都是通过这个来判断食物是否可吃。对玩家,则是决定能否尝试做出吃的动作。
(举例,女武神的preferseating为{FOOTTYPE.MEAT}而caneat为{FOODGROUP.OMNI},这就使得她能和正常人物一样尝试吃各种素食,但无法真正地吃下去。)
oneatfn function nil 在吃食物时触发的函数。传入参数:进食者,食物。
lasteattime number nil 上一次吃食物的时间
ignoresspoilage bool false 是否忽略食物变质。如果忽略的话,无论食物处于什么状态,都可以全额吸收其营养。(典型例子:机器人)
eatwholestack bool false 是否直接吃完整堆食物。如果填true,则会一次性吃完一个堆叠的食物。(春、秋BOSS的此项属性都是true
healthabsorption number 1 health吸收率,对正负都有影响,下同。
hungerabsorption number 1 hunger吸收率
sanityabsorption number 1 sanity吸收率

关联函数

关联函数是指与成员变量相关联的函数,一旦成员变量的值发生变化,就会执行该函数。传入参数为self.inst,新值,旧值。

关联成员变量 函数名 参数选择 描述
caneat oncaneat inst;caneat;old_caneat 清除人物原有的进食者类型标签,并添根据caneat表添加新的标签。进食者类型标签格式:食物类型_eater

成员函数

函数调用格式 参数 返回值 描述
OnRemoveFromEntity() 系统函数,在entity调用。
RemoveComponent函数时调用。清理entity上的eater标签。
SetDiet(caneat, preferseating) caneat-可食表
preferseating-喜食表
为entity设置两张表,如果第二个参数为空,则用第一个参数代替。
SetAbsorptionModifiers(health, hunger, sanity) health,hunger,sanity分别代表各自属性的吸收率 设置对食物三围值的吸收率。
TimeSinceLastEating() 上一次进食的系统时间点 返回上一次进食的系统时间点。
HasBeen(time) time-时间 是否可以进食 该函数目前未被使用。
判断在time这个时间点,是否可以进食。
OnSave() TimeSinceLastEating()的值。 系统函数,在储存游戏时调用。
会储存返回值到data表中。你也可以自行修改以储存自己需要的值。
OnLoad(data) data-之前储存的数据 系统函数,在载入游戏时调用。
读取data表并更新数据。默认会更新self.lasteattime
SetCanEatHorrible() 设置eater可以吃类型为FOODTYPE.HORRIBLE的食物
SetCanEatGears() 设置eater可以吃类型为FOODTYPE.GEARS的食物
SetCanEatRaw() 设置eater可以吃类型为FOODTYPE.RAW的食物
SetOnEatFn(fn) fn-在进食时触发的函数oneatfn 设置在进食时触发的函数oneatfn,传入参数:进食者,食物
DoFoodEffects(food) food-食物 如果strongstomach==true并且food有monstermeat标签,则返回false,否则返回true 判断食物的sanityvalue和healthvalue<0时,是否会影响到eater。(也就是说strongstomach为true,只能让人物,如Webber,在吃怪物肉之类拥有monstermeat标签的食物时,不会受到减血减精神的负面影响。但吃蘑菇就没有这个好处)
GetEdibleTags() 全部的可食标签 这个主要用于寻找周围可以供eater食用的食物。
Eat(food, feeder) food-食物
feeder-喂食者
进食动作的执行函数,给出了进食的详细的数据处理过程
TestFood(food, testvalues) food-食物
testvalues-检验类型表
如果food有检验类型表中的任一标签,则返回true,否则返回false 该函数一般不单独使用,而是用在下面两个函数PrefersToEat和CanEat中。
PrefersToEat(food) food-食物 TestFood(inst, self.preferseating)的值 检验该食物对玩家来说是否可以吃下去
CanEat(food) food-食物 TestFood(inst, self.caneat)的值 检验该食物对eater来说是否可食用,对玩家则是是否可以尝试进食。
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注