@longfei
2016-12-14T03:29:03.000000Z
字数 2459
阅读 2393
联机版组件解析
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来说是否可食用,对玩家则是是否可以尝试进食。 |