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

6.3 KiB
Raw Permalink Blame History

第二章怪物特殊属性定义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%,不可叠加,那么该怪物的哪些项被设置了成了多少?该怪物的特殊属性名是什么?
    [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. 理解《咕工智障》的下述怪物特殊属性并回答:

    • 吸血数值是如何计算在怪物手册之中的?
    • 如何根据角色当前拥有的道具或者变量来修改怪物属性描述?
    • 如果要让简单难度下,怪物吸血值减半,特殊属性定义中应该怎么修改?
    [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 时,描述存在周围[方形/十字]范围内[?]格的友军;其中这[]里面内容由怪物的 zoneSquarerange 决定。
    • 当怪物的 range = null 时,描述存在当前楼层的友军
    • 当怪物的 value28 > 0 时,描述存在先攻X回合其中X由value28决定(如,value28 = 5时,描述存在先攻5回合
    • 当怪物的 value28 <= 0 时,描述存在被先攻X回合其中X由value28决定(如,value28 = -5时,描述存在被先攻5回合
  9. 定义同时满足如下条件的特殊属性(编号30),并和《咕工智障》的写法进行比较。

    • 特殊属性名:匙之力
    • 当怪物的 range > 0 时,描述存在周围[方形/十字]范围内[?]格内;其中这[]里面内容由怪物的 zoneSquarerange 决定。
    • 当怪物的 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两个函数)

点此查看答案