搜索
热搜: 活动 交友 discuz
查看: 9904|回复: 2

[代码] 4.0 Dota2技能教程-被动技能

[复制链接]

43

主题

430

帖子

2855

积分

大魔导师

UID
1731
金币
3664
精华
5
节操
-43

黑科技玩的6我是鸽手隐修议员扛把子教程大师创世者开拓者

QQ
发表于 2014-9-15 18:13:45 | 显示全部楼层 |阅读模式
本帖最后由 裸奔的代码 于 2014-10-4 17:38 编辑

之前做完主动技能那一部分了,这次是被动技能了


先附上之前的主动技能教程

先来简单的,就先光环吧
我们做一个万能光环
效果:攻击+20%,护甲+15,魔抗+15%,移动速度+100,生命恢复速度+10,魔法恢复速度+10,力量+25,敏捷+25,智力+25

被动技能的基础设置
"MyAbility_passive"
{
        //-------------------------------------------------------------------------------------------------------------
        "AbilityBehavior"                                "DOTA_ABILITY_BEHAVIOR_PASSIVE"
        "BaseClass"                                         "ability_datadriven"
        "AbilityTextureName"                        "juggernaut_omni_slash"

        "Modifiers"
        {
                "modifier_MyAbility_passive"
                {
                        "Passive"        "1"                //这句很重要
                        //这里面可以填写BUFF或者攻击事件等
                }
        }
}

可以看出被动技能的设置很简单
关键是在于modifier里面Passive这个关键词,就是被动的意思,有这个之后就代表modifier是个被动的modifier,所以在主动技能里,把里面的modifier加入Passive也变成被动的了,这样就是说主动技能跟被动技能是可以在一起的,这样可以做一些隐藏的被动效果


接下来就加入光环的modifier
"MyAbility_passive"
{
        "AbilityBehavior"                                "DOTA_ABILITY_BEHAVIOR_PASSIVE"
        "BaseClass"                                         "ability_datadriven"
        "AbilityTextureName"                        "juggernaut_omni_slash"
        "AbilityCastRange"                                "500"

"Modifiers"
{
      "modifier_MyAbility_passive"
      {
            "Passive"        "1"
            "IsHidden"        "1"

             "Aura"                        "modifier_MyAbility_passive_buff"
             "Aura_Radius"                "500"
             "Aura_Types"                "DOTA_UNIT_TARGET_HERO"
             "Aura_Teams"                "DOTA_UNIT_TARGET_TEAM_FRIENDLY"
             "Aura_Flags"                "DOTA_UNIT_TARGET_FLAG_NONE"
      }

      "modifier_MyAbility_passive_buff"
      {
           "Properties"
           {
              "MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE"        "20"        //攻击百分比加成
              "MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS"                "15"        //护甲加成
              "MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS"        "15"        //魔抗加成
              "MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT"        "100"//移动速度
              "MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT"        "10"        //生命恢复速度
              "MODIFIER_PROPERTY_MANA_REGEN_CONSTANT"        "10"        //魔法恢复速度
              "MODIFIER_PROPERTY_STATS_STRENGTH_BONUS"                "25"        //力量加成
              "MODIFIER_PROPERTY_STATS_AGILITY_BONUS"                        "25"        //敏捷加成
              "MODIFIER_PROPERTY_STATS_INTELLECT_BONUS"                "25"        //智力加成
           }
      }
   }
}

Aura就有光环的意思,也可以用来获取范围内的单位
Aura_Radius 光环作用范围
Aura_TypesAura_TeamsAura_Flags就不用说了吧

Properties里面就是一些BUFF,这里面的常量参考下面的网址
至于怎么知道哪个是攻击哪个是移动,当然是自己翻译呗
注意一点,Properties里面并不是所有的BUFF都有效


被动的触发事件,一般都是通过攻击或者被攻击,或者受到伤害来触发
OnAttack                    //技能拥有者攻击到单位才会触发
OnAttacked               //技能拥有者受到攻击会触发
OnAttackStart          //技能拥有者开始攻击,就是说产生攻击前摇的时候就会触发
OnAttackLanded      //OnAttack差不多
OnAttackFailed         //技能拥有者攻击失败,就是攻击miss
OnAttackAllied         //技能拥有者攻击友军
OnDealDamage       //技能拥有者造成伤害
OnTakeDamage       //技能拥有者受到伤害,毒龙的皮
OnUnitMoved           //技能拥有者移动,血魔的大招
OnSpentMana          //技能拥有者消耗魔法,可以用来监控魔法值
OnManaGained        //技能拥有者恢复魔法,可以用来监控魔法值
OnHealthGained      //技能拥有者恢复生命,可以用来监控生命值

可以参考下面网址
https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/Abilities_Data_Driven


我们来做一个攻击的触发事件
效果:技能拥有者攻击单位,技能拥有者攻击力+1,攻击速度+5,单位的护甲-1
这里说一下,攻击速度没有百分比的常量,可能是还没发现

技能文本如下
“Modifiers”
{
"modifier_MyAbility_passive_attack"
        {
                "IsHidden"        "1"
                "Passive"                "1"
                "OnAttack"
                {
                        "ApplyModifier"
                        {
                                "ModifierName"        "modifier_MyAbility_passive_attack_caster"
                                "Target"                        "CASTER"        //用ATTACKER也行
                        }

                        "ApplyModifier"
                        {
                                "ModifierName"        "modifier_MyAbility_passive_attack_target"
                                "Target"                        "TARGET"        //被攻击的目标
                        }
                }
        }

        "modifier_MyAbility_passive_attack_caster"
        {
                "IsHidden"                "1"
                "Duration"                "10"
                "Attributes"        "MODIFIER_ATTRIBUTE_MULTIPLE"

                "Properties"
                {
                        "MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE"                "1"
                        "MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT"        "5"
                }
        }

        "modifier_MyAbility_passive_attack_target"
        {
                "IsHidden"                "1"
                "Duration"                "10"
                "Attributes"        "MODIFIER_ATTRIBUTE_MULTIPLE"

                "Properties"
                {
                        "MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS"                "-1"
                }
}
}

竟然是攻击事件,就会想到概率
我们上面的modifier_MyAbility_passive_attack那个加以改造

如下
"modifier_MyAbility_passive_attack"
{
        "IsHidden"                "1"
        "Passive"                        "1"
        "OnAttack"
        {
                "Random"
                {
                        "Chance"                "50"
                        "PseudoRandom"        "DOTA_PSEUDO_RANDOM_JUGG_CRIT"
                        "OnSuccess"
                        {
                                "ApplyModifier"
                                {
                                        "ModifierName"        "modifier_MyAbility_passive_attack_caster"
                                        "Target"                        "CASTER"        //用ATTACKER也行
                                }

                        "ApplyModifier"
                        {
                                        "ModifierName"        "modifier_MyAbility_passive_attack_target"
                                        "Target"                        "TARGET"        //被攻击的目标
                                }
                        }
                }
        }
}

修改结果显而易见,就是用Random这个字段
其中Chance是触发的概率
PseudoRandom应该是触发概率的类型,目前没发现其作用,所以不要这句也可以
OnSuccess触发成功
OnFailure触发失败

好了被动到这里就差不多了,可以把OnAttack改成前面说的那些触发事件看看效果


接下来就做一个小小的皮,只模仿攻击被击晕部分
反弹伤害那里做不了,因为V社没有提供接口来获取受到是伤害值
小小的皮是在产生攻击前摇的时候就会触发
所以使用OnAttackStart

Modifier如下
“Modifiers”
{
"modifier_MyAbility_passive_xx"
        {
        "IsHidden"                "1"
        "Passive"                        "1"

        "Aura"                        "modifier_MyAbility_passive_xx_attack"
        "Aura_Radius"        "1000"
        "Aura_Types"                "DOTA_UNIT_TARGET_HERO"
        "Aura_Teams"                "DOTA_UNIT_TARGET_TEAM_ENEMY"
        "Aura_Flags"                "DOTA_UNIT_TARGET_FLAG_NONE"
        }

        "modifier_MyAbility_passive_xx_attack"
        {
        "IsHidden"                "1"
        "OnAttackStart"
        {
                "Random"
                {
                        "Chance"                "50"
                        "OnSuccess"
                        {
                                "Stun"
                                {
                                        "Duration"        "2"
                                        "Target"                "ATTACKER"
                                }
                        }
                }
        }
}
}


接下来是毒龙的皮,使用OnTakeDamage,用ATTACKER可以获取伤害来源
"modifier_MyAbility_passive_dulong"
{
        "IsHidden"                "1"
        "Passive"                "1"
        "OnTakeDamage"
        {
                "ApplyModifier"
                {
                        "ModifierName"        "modifier_MyAbility_passive_dulong_damage"
                        "Target"                        "ATTACKER"
                }
        }
}

"modifier_MyAbility_passive_dulong_damage"
{
        "IsHidden"                "1"
        "Attributes"                "MODIFIER_ATTRIBUTE_MULTIPLE"
        "Duration"                        "5"
        "ThinkInterval"                "1"
        "OnIntervalThink"
        {
                "Damage"        
                {
                        "Type"                "DAMAGE_TYPE_MAGICAL"
                        "Damage"        "15"
                        "Target"                "TARGET"
                }
        }
}


简单的演示了下被动技能
被动技能也可以用RunScript,我这里就不演示了
在Lua里面获取攻击者可以用keys.attacker(假设你用keys来接收传递进来的参数)
但是原理是一样的

不懂的地方可以发帖提问

被动技能就到此结束了,技能教程正式完成

技能附件:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册账号

x

评分

参与人数 2金币 +10 互助 +2 智慧 +2 节操 -1 收起 理由
a409197988 -1 很给力!赞!
无双 + 10 + 2 + 2 代码君你太赞了

查看全部评分

相关帖子

回复

使用道具 举报

0

主题

6

帖子

21

积分

Lv:1 隐谧贤者

UID
3075
金币
34
精华
0
节操
0
发表于 2014-12-9 10:19:30 | 显示全部楼层
                                   "AttachEffect"
                                   {
                                      "EffectName"               
                                      "particles\generic_gameplay\generic_stunned.vpcf"
                                      "EffectAttachType"        "follow_overhead"
                                      "Duration"                "2"//持续效果2秒
                                      "Target"                  
                                      {
                                          "Types"            "DOTA_UNIT_TARGET_BASIC|DOTA_UNIT_TARGET_HERO"
                                          "Teams"            "DOTA_UNIT_TARGET_TEAM_ENEMY"
                                          "Flags"            "DOTA_UNIT_TARGET_FLAG_NONE"
                                          "Center"           "CASTER"
                                          "Radius"           "300"
                                      }
                                   }问下代码君,我在modifier里面加了这个特效,想让这个效果持续2秒钟,但是"Duration"  "2"//持续效果2秒 好像不起作用,如何让这个effect持续2秒钟呢
回复 支持 反对

使用道具 举报

43

主题

430

帖子

2855

积分

大魔导师

UID
1731
金币
3664
精华
5
节操
-43

黑科技玩的6我是鸽手隐修议员扛把子教程大师创世者开拓者

QQ
 楼主| 发表于 2014-12-9 14:22:30 | 显示全部楼层
simon 发表于 2014-12-9 10:19
"AttachEffect"
                                   {
            ...

- -!AttachEffect没有Duration
Duration除了一些特定的动作,只有modifier才有
比如ApplyModifier、Stun就可以在里面填写Duration
你应该是这样
"Modifiers"
{
    "modifier_name“
    {
          "Duration"     "2"
          "OnCreated"
          {
               "AttachEffect"
               {
               }
          }
    }
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|Archiver|手机版|小黑屋|AMHC!dota2rpg~ ( 闽ICP备14009209 )

GMT+8, 2019-11-20 11:50 , Processed in 0.077334 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc. Theme.Yeei

快速回复 返回顶部 返回列表