# 第二章:怪物特殊属性定义(getSpecials),表格配置 要求:读懂脚本编辑 - 怪物特殊属性定义(getSpecials)的实现。理解如何定义一个新的怪物属性。同时,还需要理解如何给怪物表格增加新项目。 回答如下问题: 1. 如何定义一个新的怪物属性? 2. 如何取得当前怪物的各项数值? 3. 第五项参数在哪些情况下写1?为什么需要? 4. 如何给怪物表格定义新项目?如何在伤害计算等地方取用定义的新项目? 5. 当前,有一部分怪物属性使用了相同的表格项,如阻激夹域都使用了`value`等;这样无法同时给怪物增加吸血和领域两个属性。那应该怎么做才能同时支持这两项? 6. 理解《咕工智障》的下述怪物特殊属性并回答: - 如果一个该属性怪物设置了`hpValue = 10, range = 2`,那么怪物手册中显示该怪物的特殊属性名和描述是什么? - 如果一个该属性怪物设置了`hpValue = -20, defValue = 30`,那么怪物手册中显示该怪物的特殊属性名和描述是什么? - 如果一个该属性怪物设置了`hpValue = 10, atkValue = 20, defValue = 30, add = true`,那么怪物手册中显示该怪物的特殊属性名和描述是什么? - 如果怪物手册中的描述是`周围方形范围内5格的友军生命提升10%,攻击降低20%,线性叠加`,那么该怪物的哪些项被设置了成了多少?该怪物的特殊属性名是什么? - 如果怪物手册中的描述是`周围十字范围内3格的友军生命提升20%,攻击提升10%,防御提升5%,不可叠加`,那么该怪物的哪些项被设置了成了多少?该怪物的特殊属性名是什么? ```js [25, function (enemy) { if (enemy.auraName) return enemy.auraName; if (enemy.hpValue && enemy.atkValue && enemy.defValue) return "魔力光环"; if (enemy.hpValue) { if (enemy.hpValue > 0) return "活力光环"; return "懒散光环"; } if (enemy.atkValue) { if (enemy.atkValue > 0) return "狂暴光环"; return "静谧光环"; } if (enemy.defValue) { if (enemy.defValue > 0) return "坚毅光环"; return "软弱光环"; } return "光环"; }, function (enemy) { var str; if (!enemy.range) { str = "同楼层所有友军"; } else { str = "周围" + (enemy.zoneSquare ? "方形" : "十字") + "范围内\r[yellow]" + (enemy.range || 1) + "\r格的友军"; } if (enemy.hpValue) { if (enemy.hpValue > 0) str += "生命提升\r[yellow]" + enemy.hpValue + "%\r,"; else str += "生命降低\r[yellow]" + (-enemy.hpValue) + "%\r,"; } if (enemy.atkValue) { if (enemy.atkValue > 0) str += "攻击提升\r[yellow]" + enemy.atkValue + "%\r,"; else str += "攻击降低\r[yellow]" + (-enemy.atkValue) + "%\r,"; } if (enemy.defValue) { if (enemy.defValue > 0) str += "防御提升\r[yellow]" + enemy.defValue + "%\r,"; else str += "防御降低\r[yellow]" + (-enemy.defValue) + "%\r,"; } str += (enemy.add ? "线性叠加" : "不可叠加"); return str; }, "#e6e099", 1], ``` 7. 理解《咕工智障》的下述怪物特殊属性并回答: - 吸血数值是如何计算在怪物手册之中的? - 如何根据角色当前拥有的道具或者变量来修改怪物属性描述? - 如果要让简单难度下,怪物吸血值减半,特殊属性定义中应该怎么修改? ```js [11, "吸血", function (enemy) { var str = "\r[\#e525ff]【红海技能】\r战斗前,首先吸取对方的" + Math.floor(100 * enemy.value || 0) + "%生命(约" + Math.floor((enemy.value || 0) * core.getRealStatus('hp')) + "点)作为伤害" + (enemy.add ? ",并把伤害数值加到自身生命上" : ""); if (core.hasItem("I_noVampire")) str += "\r[yellow](对你无效)\r"; return str; }, "#ff00d2"], ``` 8. 定义同时满足如下条件的特殊属性(编号`28`),并和《咕工智障》的写法进行比较。 - 当怪物的 `value28 > 0` 时,特殊属性名为`迅捷光环` - 当怪物的 `value28 <= 0` 时,特殊属性名为`怠惰光环` - 当难度为简单(`flag:hard = 1`)时,描述为`此技能在简单难度下无效!` - 当角色拥有道具 `I123` 时,描述为`此技能已被魔杖抵消!` - 当怪物的 `range > 0` 时,描述存在`周围[方形/十字]范围内[?]格的友军`;其中这`[]`里面内容由怪物的 `zoneSquare` 和 `range` 决定。 - 当怪物的 `range = null` 时,描述存在`当前楼层的友军` - 当怪物的 `value28 > 0` 时,描述存在`先攻X回合`,其中X由`value28`决定(如,`value28 = 5`时,描述存在`先攻5回合`) - 当怪物的 `value28 <= 0` 时,描述存在`被先攻X回合`,其中X由`value28`决定(如,`value28 = -5`时,描述存在`被先攻5回合`) 9. 定义同时满足如下条件的特殊属性(编号`30`),并和《咕工智障》的写法进行比较。 - 特殊属性名:匙之力 - 当怪物的 `range > 0` 时,描述存在`周围[方形/十字]范围内[?]格内`;其中这`[]`里面内容由怪物的 `zoneSquare` 和 `range` 决定。 - 当怪物的 `range = null` 时,描述存在`同楼层内` - 描述存在 `每存在一个黄钥匙,生命增加X点,攻击增加Y点,防御增加Z点`,其中`X, Y, Z`由怪物的`value, atkValue, defValue`决定。如果其中某一项为0或null则不显示对应项。(例如,如果`value = 30, defValue = 20`则只显示`生命增加30点,防御增加20点`) 10. 将阻击、激光、领域、吸血所使用的特殊属性值(当前均为`value`)分离,并实现一个怪物同时拥有`阻击伤害100点,激光伤害50点,领域伤害200点,且吸血20%`这四个特殊属性。 - 需在怪物手册正确显示 - 需正确实现对应的效果(需要修改`伤害计算(getDamageInfo)和阻激夹域伤害(updateCheckBlock)`两个函数) [点此查看答案](L2_answer)