tianta/_codelab/L2.md
2022-10-17 02:58:52 +13:00

103 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 第二章怪物特殊属性定义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)