魔兽争霸吧 关注:1,004,082贴子:19,216,848

【魔兽地图编辑器教程】技能入门篇

只看楼主收藏回复

鄙人曾经在18年年末,在魔吧写过一篇有关编辑器的入门教程,但因为种种原因断更
时隔数年,再开一贴,专门讲解我个人对于技能的制作经验和心得,如有错漏,还望谅解


IP属地:湖南1楼2021-12-11 08:03回复
    郝仁23333被楼主禁言,将不能再进行回复
    本教程只针对技能制作
    如果您想学习有关编辑器的基础知识,可以前往【魔兽地图编辑器吧】或者见我的老帖
    【技术向】魔兽地图编辑器入门教程
    https://tieba.baidu.com/p/5966354357?pid=123076076270&cid=0&red_tag=2879166423#123076076270
    在去年,我还在魔兽战役吧制作了一篇有关于自定义战役制作的教程,如果您对自定义战役制作有兴趣,详见
    【教你做战役】战役编辑器入门教程
    https://tieba.baidu.com/p/6492914837?pn=1
    (该贴内容和本贴同步更新)


    IP属地:湖南2楼2021-12-11 08:05
    回复
      本教程主要包括以下4个模块
      【①了解基础技能模板】
      【②制作简单的单体技能和群体技能】
      【③计时器的运用】
      【④复杂的技能组合】


      IP属地:湖南3楼2021-12-11 08:07
      回复
        ————————————
        ①了解基础技能模板
        1)万能主动技能模板 - 通魔
        通魔,是一个几乎万能的主动技能模板,不论是单体、群体、持续性、瞬发型的技能,你都能够用它作为模板,然后用触发实现
        当然,除了本身附带的一些特效显示,它没有任何效果,就只是一个“技能模板”而已
        接下来详细讲解一下这个技能模板的一些重要参数

        “通魔”的位置在【技能】分类中的【中立敌对 - 英雄】中,位置如上

        【动作持续时间】
        这个动作持续时间其实是没有实际意义的,你怎么调都没用,如果你想要施放通魔技能的单位施法前后摇和动作匹配,只能修改【施法持续时间】

        【基础命令ID】
        这也是“通魔”技能几乎“万能”的原因(当然,也仅仅只是对于魔兽来说),你给通魔技能换上不同的命令ID,它们之间就不会发生冲突。而不是像其他的同模板技能一样,同时存在于一个单位身上,它们就会出现命令串冲突

        【目标类型】
        没有 - 如YDWE所提示,属于“无效选项”
        无目标 - 类似于雷霆一击,战争践踏的释放方式
        单位目标 - 类似于风暴之锤,死亡缠绕的释放方式
        点目标 - 类似于暴风雪,烈焰风暴的释放方式
        单位或点目标 - 可以对点也可以对单位释放,比如dota中著名大后期“幽鬼”的“幽鬼之刃”

        【施法持续时间】
        控制你的单位施法的实际持续时间,同时也可以用来做一些用触发控制的需要持续施法的技能

        【使其他技能无效】
        如果为true,单位释放技能时会进入魔兽的一种名为【停止】的特殊状态,个人建议设为false

        【通魔选项】
        图标可见 - 一般为必选,让你的通魔技能学习后能够正常显示图标
        目标选取图像 - 让你的技能选取呈现出“暴风雪”那样的一个圆面,当然,这个圆面的大小也和“影响区域”有关
        物理魔法 - 让你的技能即便不是“大招”的情况下也能够无视魔法免疫,但不无视虚无
        通用魔法 - 无视魔法免疫和虚无
        单独施放 - 比如你框选了多个单位,它们同时拥有该技能,如果这个项目没有勾选,你在施放的时候,所有单位都会一起施放。反之就只有一个单位施法(比如你控制熊德释放咆哮那样)


        IP属地:湖南4楼2021-12-11 08:08
        回复
          ②制作简单的单体技能和群体技能
          1)简单的单体属性伤害


          这里以我们的风暴之锤举例
          如果我想让风暴之锤释放时造成有关力量的伤害,并且关联等级(力量*3/6/9),其实流程很简单

          找到【任意单位事件】
          设置它为【任意单位 发动技能效果】


          然后设置【(施放技能) 等于 风暴之锤】

          然后,我们使用【伤害目标[R]】
          (为什么用带[R]的函数?
          带[R]的函数一般都是CJ函数,你可以理解为本地函数,如果你发现一个相同功能拥有多个不同种类的函数,那么就用带[R]的那个,它的效率更高)

          然后,设置我们的【触发单位】对【技能施放目标】造成伤害
          (【触发单位】能够响应绝大部分的有关单位的事件,你可以理解为引发该事件响应的主目标)


          IP属地:湖南6楼2021-12-11 08:11
          回复


            然后使用算数运算对计算对目标造成的伤害值

            这个算数运算需要嵌套一次,我们就在第一个参数里面再嵌套一个【乘法运算】,流程如下




            由于“力量”属性是整数,所以我们需要【转换整数为实数】

            同理,我们的【技能等级】也是整数,所以也需要转化一下

            最后修改一下其他的参数,大功告成

            最终效果图如上


            IP属地:湖南7楼2021-12-11 08:12
            回复


              进入游戏测试,我们的山丘之王非常残暴,一巴掌就锤死了一只750血的大树魔
              ————————————
              有些吧友完成这个功能之后,可能会有疑问,为什么属性伤害是在技能出手就直接触发了而不是锤子锤中目标才触发。因为【发动技能效果】可以理解为“单位成功的释放了技能”,锤子放出去了,这个事件自然就触发了
              想要解决这个问题也不用着急,后面的“马甲法”和“单位模拟投射物”都可以做到捕捉投射物的功能


              IP属地:湖南8楼2021-12-11 08:13
              回复
                2)简单的群体属性伤害

                这里以山丘之王的雷霆一击举例

                这两个步骤不废话

                从这里开始,我们就要使用【逆天】系列的强力功能之一~【逆天局部变量】
                当然,有局部变量,就肯定有全局变量,但这里的概念我不赘述,留待以后再讲解

                我们要对多个单位造成伤害,肯定就需要选取到多个单位,这里就需要用到【单位组】的功能
                设置我们新设置的单位组局部变量为【新建的单位组】
                注意变量名一定不能带中文和中文字符!
                (为什么不直接使用选取单位的动作而要新建单位组?因为那些动作需要用到点,而且本质上也只是暴雪给你封装的一个函数,它的效率相比于你新建单位组,然后根据坐标选取单位的效率相比,其实是十分低下的。而同样的,点的效率不仅远比坐标低下,还需要十分麻烦的去排泄,我个人十分建议不要用有关点的函数——这部分的内容在我曾经的一个教程贴内有过讲解,有兴趣可以去看看)

                然后找到【选取单位添加到单位组(坐标)】

                读取我们的局部变量

                然后获取我们的施放技能的单位的位置,也就是【单位所在X/Y轴坐标[R]】


                同样的,为了同步雷霆一击的影响范围,我们的选取单位的范围也需要进行一次运算


                IP属地:湖南9楼2021-12-11 08:15
                回复

                  然后设置我们选取单位的条件,可能有多个,所以需要用到And(且)功能(Or就是或)

                  我们肯定是要伤害敌对单位的,所以【是玩家的敌对单位】必须有

                  单位组筛选单位时的单位被称为【匹配单位】

                  我们就设置【(匹配单位) 是 ((触发单位)的所有者) 的敌对单位】


                  然后补充一些其他的条件

                  效果如上


                  IP属地:湖南10楼2021-12-11 08:16
                  回复
                    世界需要你这样的人


                    IP属地:浙江来自Android客户端11楼2021-12-11 08:16
                    收起回复

                      最后,就到了选取单位组内单位做动作的时候


                      我们只需要在“单位组做动作的内部”控制对【触发单位】对【选取单位】造成伤害就可以了,然后对一些参数做出修改

                      当然,如果单位组不使用了,一定不要忘了忘了清空和删除单位组!
                      (【清空单位组】实际上并不是必要的,你只要【删除单位组】就可以了)

                      完整截图如上


                      进入游戏测试,MK非常残暴,两脚地板送所有大树魔上天
                      ————————————
                      单位组的本质是对单位组内的所有单位运行一次你想要它们做的动作
                      当然,在单位组内也可以对“选取单位”进行条件判断,从而做出更加严格的判定
                      除此之外单位组还有很多别的功效,诸位也可以自己多进行摸索


                      IP属地:湖南12楼2021-12-11 08:17
                      回复
                        3) 马甲法-取消施法硬直
                        我们继续加深对技能的学习
                        相信接触过编辑器的吧友都对“马甲”这个词有所耳闻
                        如果用我个人的话来讲,“马甲”就是一个【辅助施法】的单位
                        当然,除了辅助施法,它还有别的用途,比如【绑定特效】【模拟投射物/弹幕】这种十分华丽的功能
                        当然,后面的这些内容我以后也会讲,但现在,我还是讲解较为基础的【辅助施法】的内容
                        什么样的单位适合做“马甲”?
                        没有阴影,没有碰撞体积,空模型,无施法前后摇的单位就十分适合做“马甲”
                        而小精灵就特别适合作为这个模板

                        我们新建一个小精灵,删除一些无用的杂项,然后添加上【蝗虫】技能(【无敌的】可加可不加,无影响)
                        添加了蝗虫的单位将无法被框选中,不会显示血条,并且也无法被触发器的【单位组】动作给选中,几乎可以理解为无敌了(地狱火模板的技能可以破除蝗虫)

                        然后我们将施法前后摇全部改为0
                        然后将移动速度改为0(这样单位施法时就不用转身,避免可能出现的延迟)

                        将单位类别改成没有,以免左下方的农民头像出现导致穿帮
                        同时给马甲添加一定的魔法值,以免马甲释放一些可能有魔法消耗的附属技能时却无法释放
                        最后占用人口改成0,虽然添加了生命周期后的单位不占用人口,但是以防人口跳动导致维修费用的闪动(比如你正好49人口,突然出现一个马甲然后又消失,会突兀的导致维修费变动),建议还是做修改
                        (有必要的话我们还可以修改一下视野)


                        IP属地:湖南13楼2021-12-11 08:20
                        收起回复
                          做好了这些,我们就可以来做一个简单的马甲法取消施法硬直的事例了
                          这里以我们经典的人族英雄【大魔法师】的【暴风雪】举例
                          我们想做出让暴风雪不需要持续施法的效果

                          这里就要用到我们之前讲过的“通魔”技能


                          我们新建一个通魔技能,并把原版暴风雪中的一些参数同步到这个模板技能里面来

                          然后把它原来带有的那些特效删去

                          最后,修改我们的命令串为“blizzard”(其他的点目标命令串比如烈焰风暴皆可)
                          一般来说,指向性技能就用指向性的命令串模板,点目标的技能就用……这也是考虑到可能要用触发手动控制AI释放通魔技能的原因
                          修改【目标类型】为【点目标】
                          【施法持续时间】为0,我们的本意是取消施法硬直,自然不需要它
                          【使其他技能无效】,个人认为完全没用的功能,我在前面也讲过,设为false就可以了
                          然后我们的通魔选项勾选【图标可见】
                          因为暴风雪是有一个施法圆面的,所以我们也勾选【目标选取图像】,别忘了,我们上面的图片中,是设置了【影响区域】的(也就是说这在通魔技能中这两个建议一起搭配使用)


                          IP属地:湖南14楼2021-12-11 08:21
                          回复
                            然后就是触发步骤

                            相信这个步骤不需要要我多讲

                            然后使用我们的逆天局部变量,新建一个单位
                            我们使用【新建单位(指定坐标)[R]】来新建单位

                            创建一个【(触发单位)所有者 的 马甲1号 在(技能目标点X坐标) (技能目标点Y坐标)】
                            面向角度可随意填

                            然后设置我们的马甲的【生命周期】

                            我们的生命周期该多长?
                            暴风雪3个等级的波数为6/8/10,每波间隔1秒,简单的小学数学题
                            4+2*技能等级
                            当然,为了防止可能的bug,我们可以将生命周期设置的比施法的持续时间略长一点

                            然后使用【添加技能[R]】函数,为马甲添加实际的暴风雪技能

                            使用【设置技能等级[R]】函数

                            将我们马甲的附属技能的等级设置成和英雄拥有的通魔模板技能的等级一样

                            最后,使用【发布命令(指定坐标)】功能

                            让马甲发布“暴风雪”命令在技能释放的位置
                            命令串发布功能,是对使用这个命令串的所有同模板技能都有效的(比如你新建了一个暴风雪技能,你仍然可以使用暴风雪命令串来控制释放它)。当然,除了通魔以外,你把一个技能的命令串换成另一个技能的命令串,是不会生效的,这一点我在之前的内容也提到过。


                            IP属地:湖南15楼2021-12-11 08:22
                            回复

                              完整截图如上
                              (可以看到,我依然避免了使用“点”系列的功能)
                              ————————————


                              进入游戏测试,可以看到,暴风雪的施法硬直被取消了
                              而这个十分炫酷而实用的功能却十分简单,相信诸位吧友看了教程以后,也会产生自己尝试的想法了


                              IP属地:湖南16楼2021-12-11 08:24
                              回复