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

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

[复制链接]

43

主题

430

帖子

2855

积分

大魔导师

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

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

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

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


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

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

被动技能的基础设置
  1. "MyAbility_passive"
  2. {
  3.         //-------------------------------------------------------------------------------------------------------------
  4.         "AbilityBehavior"                                "DOTA_ABILITY_BEHAVIOR_PASSIVE"
  5.         "BaseClass"                                         "ability_datadriven"
  6.         "AbilityTextureName"                        "juggernaut_omni_slash"

  7.         "Modifiers"
  8.         {
  9.                 "modifier_MyAbility_passive"
  10.                 {
  11.                         "Passive"        "1"                //这句很重要
  12.                         //这里面可以填写BUFF或者攻击事件等
  13.                 }
  14.         }
  15. }
复制代码

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


接下来就加入光环的modifier
  1. "MyAbility_passive"
  2. {
  3.         "AbilityBehavior"                                "DOTA_ABILITY_BEHAVIOR_PASSIVE"
  4.         "BaseClass"                                         "ability_datadriven"
  5.         "AbilityTextureName"                        "juggernaut_omni_slash"
  6.         "AbilityCastRange"                                "500"

  7. "Modifiers"
  8. {
  9.       "modifier_MyAbility_passive"
  10.       {
  11.             "Passive"        "1"
  12.             "IsHidden"        "1"

  13.              "Aura"                        "modifier_MyAbility_passive_buff"
  14.              "Aura_Radius"                "500"
  15.              "Aura_Types"                "DOTA_UNIT_TARGET_HERO"
  16.              "Aura_Teams"                "DOTA_UNIT_TARGET_TEAM_FRIENDLY"
  17.              "Aura_Flags"                "DOTA_UNIT_TARGET_FLAG_NONE"
  18.       }

  19.       "modifier_MyAbility_passive_buff"
  20.       {
  21.            "Properties"
  22.            {
  23.               "MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE"        "20"        //攻击百分比加成
  24.               "MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS"                "15"        //护甲加成
  25.               "MODIFIER_PROPERTY_MAGICAL_RESISTANCE_BONUS"        "15"        //魔抗加成
  26.               "MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT"        "100"//移动速度
  27.               "MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT"        "10"        //生命恢复速度
  28.               "MODIFIER_PROPERTY_MANA_REGEN_CONSTANT"        "10"        //魔法恢复速度
  29.               "MODIFIER_PROPERTY_STATS_STRENGTH_BONUS"                "25"        //力量加成
  30.               "MODIFIER_PROPERTY_STATS_AGILITY_BONUS"                        "25"        //敏捷加成
  31.               "MODIFIER_PROPERTY_STATS_INTELLECT_BONUS"                "25"        //智力加成
  32.            }
  33.       }
  34.    }
  35. }
复制代码

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
这里说一下,攻击速度没有百分比的常量,可能是还没发现

技能文本如下
  1. “Modifiers”
  2. {
  3. "modifier_MyAbility_passive_attack"
  4.         {
  5.                 "IsHidden"        "1"
  6.                 "Passive"                "1"
  7.                 "OnAttack"
  8.                 {
  9.                         "ApplyModifier"
  10.                         {
  11.                                 "ModifierName"        "modifier_MyAbility_passive_attack_caster"
  12.                                 "Target"                        "CASTER"        //用ATTACKER也行
  13.                         }

  14.                         "ApplyModifier"
  15.                         {
  16.                                 "ModifierName"        "modifier_MyAbility_passive_attack_target"
  17.                                 "Target"                        "TARGET"        //被攻击的目标
  18.                         }
  19.                 }
  20.         }

  21.         "modifier_MyAbility_passive_attack_caster"
  22.         {
  23.                 "IsHidden"                "1"
  24.                 "Duration"                "10"
  25.                 "Attributes"        "MODIFIER_ATTRIBUTE_MULTIPLE"

  26.                 "Properties"
  27.                 {
  28.                         "MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE"                "1"
  29.                         "MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT"        "5"
  30.                 }
  31.         }

  32.         "modifier_MyAbility_passive_attack_target"
  33.         {
  34.                 "IsHidden"                "1"
  35.                 "Duration"                "10"
  36.                 "Attributes"        "MODIFIER_ATTRIBUTE_MULTIPLE"

  37.                 "Properties"
  38.                 {
  39.                         "MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS"                "-1"
  40.                 }
  41. }
  42. }
复制代码

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

如下
  1. "modifier_MyAbility_passive_attack"
  2. {
  3.         "IsHidden"                "1"
  4.         "Passive"                        "1"
  5.         "OnAttack"
  6.         {
  7.                 "Random"
  8.                 {
  9.                         "Chance"                "50"
  10.                         "PseudoRandom"        "DOTA_PSEUDO_RANDOM_JUGG_CRIT"
  11.                         "OnSuccess"
  12.                         {
  13.                                 "ApplyModifier"
  14.                                 {
  15.                                         "ModifierName"        "modifier_MyAbility_passive_attack_caster"
  16.                                         "Target"                        "CASTER"        //用ATTACKER也行
  17.                                 }

  18.                         "ApplyModifier"
  19.                         {
  20.                                         "ModifierName"        "modifier_MyAbility_passive_attack_target"
  21.                                         "Target"                        "TARGET"        //被攻击的目标
  22.                                 }
  23.                         }
  24.                 }
  25.         }
  26. }
复制代码

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

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


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

Modifier如下
  1. “Modifiers”
  2. {
  3. "modifier_MyAbility_passive_xx"
  4.         {
  5.         "IsHidden"                "1"
  6.         "Passive"                        "1"

  7.         "Aura"                        "modifier_MyAbility_passive_xx_attack"
  8.         "Aura_Radius"        "1000"
  9.         "Aura_Types"                "DOTA_UNIT_TARGET_HERO"
  10.         "Aura_Teams"                "DOTA_UNIT_TARGET_TEAM_ENEMY"
  11.         "Aura_Flags"                "DOTA_UNIT_TARGET_FLAG_NONE"
  12.         }

  13.         "modifier_MyAbility_passive_xx_attack"
  14.         {
  15.         "IsHidden"                "1"
  16.         "OnAttackStart"
  17.         {
  18.                 "Random"
  19.                 {
  20.                         "Chance"                "50"
  21.                         "OnSuccess"
  22.                         {
  23.                                 "Stun"
  24.                                 {
  25.                                         "Duration"        "2"
  26.                                         "Target"                "ATTACKER"
  27.                                 }
  28.                         }
  29.                 }
  30.         }
  31. }
  32. }
复制代码


接下来是毒龙的皮,使用OnTakeDamage,用ATTACKER可以获取伤害来源
  1. "modifier_MyAbility_passive_dulong"
  2. {
  3.         "IsHidden"                "1"
  4.         "Passive"                "1"
  5.         "OnTakeDamage"
  6.         {
  7.                 "ApplyModifier"
  8.                 {
  9.                         "ModifierName"        "modifier_MyAbility_passive_dulong_damage"
  10.                         "Target"                        "ATTACKER"
  11.                 }
  12.         }
  13. }

  14. "modifier_MyAbility_passive_dulong_damage"
  15. {
  16.         "IsHidden"                "1"
  17.         "Attributes"                "MODIFIER_ATTRIBUTE_MULTIPLE"
  18.         "Duration"                        "5"
  19.         "ThinkInterval"                "1"
  20.         "OnIntervalThink"
  21.         {
  22.                 "Damage"        
  23.                 {
  24.                         "Type"                "DAMAGE_TYPE_MAGICAL"
  25.                         "Damage"        "15"
  26.                         "Target"                "TARGET"
  27.                 }
  28.         }
  29. }
复制代码


简单的演示了下被动技能
被动技能也可以用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
节操
-46

黑科技玩的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, 2023-11-29 12:47 , Processed in 0.077207 second(s), 28 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc. Theme.Yeei

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