搜索
热搜: 活动 交友 discuz
查看: 9845|回复: 12

[代码] 2.0 Dota2技能教程-主动技能-无目标

[复制链接]

43

主题

430

帖子

2855

积分

大魔导师

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

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

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

前面通过主动技能-单体目标把一个技能的构成给大家进行了讲解所以分成了前中后三篇
因为分成三篇,有些东西可能会讲漏了,有些人可能看不懂,唯一的解决方法当然是发帖提问

先附上前面的教程
Dota2技能教程-主动技能-单体目标-前篇
Dota2技能教程-主动技能-单体目标-中篇
Dota2技能教程-主动技能-单体目标-后篇
开始我们的无目标教程,前方高能,新手注意
到本教程这里就不会那么详细了


先来无目标的基础设置,我这里直接加入伤害
"MyAbility_null"
{
// 基础的定义,如果技能是单位目标还是无目标,单位目标的类型是什么
        //-------------------------------------------------------------------------------------------------------------
        "AbilityBehavior"                                "DOTA_ABILITY_BEHAVIOR_NO_TARGET"
        "AbilityUnitDamageType"                        "DAMAGE_TYPE_PURE"        
        "AbilityUnitTargetTeam"                        "DOTA_UNIT_TARGET_TEAM_ENEMY"
        "BaseClass"                                                 "ability_datadriven"
        "AbilityTextureName"                        "juggernaut_blade_fury"

        "AbilityCastPoint"                                "0.0"
        "AbilityCooldown"                                "1.0 2.0 3.0 4.0"
        "AbilityManaCost"                                "5"

        "OnSpellStart"
        {
                "Damage"
                {
                        "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"        "%radius"
                        }
                        "Damage"        "%damage"
                        "Type"                "DAMAGE_TYPE_PURE"
                }
        }
        // Special
        //-------------------------------------------------------------------------------------------------------------
        "AbilitySpecial"
        {
                "01"
                {
                        "var_type"                "FIELD_INTEGER"
                        "damage"                "100 200 300 400"
                }
                "02"
                {
                        "var_type"                "FIELD_INTEGER"
                        "radius"                "400"
                }
        }
}


英雄的设置
"npc_dota_hero_juggernaut"
{
        "override_hero"                                "npc_dota_hero_juggernaut"               
        "AttackRate"                                "0.5"        
        "Ability1"                                        "MyAbility_unit"        
        "Ability2"                                        "MyAbility_null"                                                        
        "VisionNighttimeRange"                "1800"
}


DamageTarget的扩展已经在单体目标教程后篇中讲了

接下来我加入音效和特效
我选用痛苦女王的特效
particles/units/heroes/hero_queenofpain/queen_scream_of_pain_owner.vpcf
音效是巫医
Hero_WitchDoctor.Maledict_Tick
soundevents/game_sounds_heroes/game_sounds_witchdoctor.vsndevts

"MyAbility_null"
{
// 基础的定义,如果技能是单位目标还是无目标,单位目标的类型是什么
        //-------------------------------------------------------------------------------------------------------------
        "AbilityBehavior"                                "DOTA_ABILITY_BEHAVIOR_NO_TARGET"
        "AbilityUnitDamageType"                        "DAMAGE_TYPE_PURE"        
        "AbilityUnitTargetTeam"                        "DOTA_UNIT_TARGET_TEAM_ENEMY"
        "BaseClass"                                                 "ability_datadriven"
        "AbilityTextureName"                        "juggernaut_blade_fury"

        "AbilityCastPoint"                                "0.0"
        "AbilityCooldown"                                "1.0 2.0 3.0 4.0"
        "AbilityManaCost"                                "5"

        "OnSpellStart"
        {
                "Damage"
                {
                        "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"        "%radius"
                        }
                        "Damage"        "%damage"
                        "Type"                "DAMAGE_TYPE_PURE"
                }

                "AttachEffect"
                {
                        "EffectName"                "particles\units\heroes\hero_queenofpain\queen_scream_of_pain_owner.vpcf"
                        "EffectAttachType"        "follow_chest"
                        "Target"                        "CASTER"
                }

                "FireSound"
                {
                        "EffectName"        "Hero_WitchDoctor.Maledict_Tick"
                        "Target"                "CASTER"
                }
        }
        // Special
        //-------------------------------------------------------------------------------------------------------------
        "AbilitySpecial"
        {
                "01"
                {
                        "var_type"                "FIELD_INTEGER"
                        "damage"                "100 200 300 400"
                }
                "02"
                {
                        "var_type"                "FIELD_INTEGER"
                        "radius"                "400"
                }
        }
}

预载入如图

我是先在word文档里面写好教程的,复制到论坛里面排版会有点乱

接下来加点效果
1.      对周围的敌人击晕
2.      周围的敌人将减少50%的攻击力

"MyAbility_null"
{
        
        "AbilityBehavior"                                "DOTA_ABILITY_BEHAVIOR_NO_TARGET"
        "AbilityUnitDamageType"                        "DAMAGE_TYPE_PURE"        
        "AbilityUnitTargetTeam"                        "DOTA_UNIT_TARGET_TEAM_ENEMY"
        "BaseClass"                                                 "ability_datadriven"
        "AbilityTextureName"                        "juggernaut_blade_fury"

        "AbilityCastPoint"                                "0.0"
        "AbilityCooldown"                                "1.0 2.0 3.0 4.0"
        "AbilityManaCost"                                "5"

        "OnSpellStart"
        {
                "Damage"
                {
                        "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"        "%radius"
                        }
                        "Damage"        "%damage"
                        "Type"                "DAMAGE_TYPE_PURE"
                }

                "Stun"
                {
                        "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"        "%radius"
                        }
                        "Duration"                "2"
                }

                "ApplyModifier"
                {
                        "ModifierName"                "modifier_MyAbility_null_buff"
                        "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"        "%radius"
                        }
                }

                "AttachEffect"
                {
                        "EffectName"                "particles\units\heroes\hero_queenofpain\queen_scream_of_pain_owner.vpcf"
                        "EffectAttachType"        "follow_chest"
                        "Target"                        "CASTER"
                }

                "FireSound"
                {
                        "EffectName"        "Hero_WitchDoctor.Maledict_Tick"
                        "Target"                "CASTER"
                }
        }

        "Modifiers"
        {
                "modifier_MyAbility_null_buff"
                {
                        "Duration"                "10"
                        "Properties"
                        {
                                "MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE"        "-50"//攻击力降低
                        }
                }
        }
        // Special
        //-------------------------------------------------------------------------------------------------------------
        "AbilitySpecial"
        {
                "01"
                {
                        "var_type"                "FIELD_INTEGER"
                        "damage"                "100 200 300 400"
                }
                "02"
                {
                        "var_type"                "FIELD_INTEGER"
                        "radius"                "400"
                }
        }
}

接下来细讲一下Lua如何造成伤害
有两种方式
一种是通过Target传递单位组
一种是直接通过API获取单位组

先从Target传递单位组开始
在单体目标教程-中篇使用的是MyAbility.lua
在这里面添加MyAbility_null_1函数

//OnSpellStart里面的内容如下
"OnSpellStart"
{        
        "RunScript"
        {
                "ScriptFile"                "scripts/vscripts/MyAbility.lua"
                "Function"                        "MyAbility_null_1"
                "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"        "%radius"
                }
        }

        "Stun"
        {
                "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"        "%radius"
                }
                "Duration"                "2"
        }

        "ApplyModifier"
        {
                "ModifierName"                "modifier_MyAbility_null_buff"
                "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"        "%radius"
                }
        }

        "AttachEffect"
        {
                "EffectName"                "particles\units\heroes\hero_queenofpain\queen_scream_of_pain_owner.vpcf"
                "EffectAttachType"        "follow_chest"
                "Target"                        "CASTER"
        }

        "FireSound"
        {
                "EffectName"        "Hero_WitchDoctor.Maledict_Tick"
                "Target"                "CASTER"
        }
}

Lua里面的代码如下
function MyAbility_null_1( keys )
        local caster = keys.caster             --获取施法者
        local targets = keys.target_entities   --获取传递进来的单位组
        local al = keys.ability:GetLevel() - 1   --获取技能等级,并且减1

        --利用Lua的循环迭代,循环遍历每一个单位组内的单位
        for i,unit in pairs(targets) do
                local damageTable = {victim=unit,    --受到伤害的单位
                        attacker=caster,          --造成伤害的单位
                        damage=keys.ability:GetLevelSpecialValueFor("damage", al),        --在这里面必须技能等级减1
                        damage_type=keys.ability:GetAbilityDamageType()}    --获取技能伤害类型,就是AbilityUnitDamageType的值
                ApplyDamage(damageTable)    --造成伤害
        end
end

关于keys所能接收到的内容在单体目标教程后篇已讲
GetLevelSpecialValueFor这个API函数可以获取AbilitySpecial里面的内容,注意传递技能等级的数值,GetLevelSpecialValueFor里面等级1对应整数0,等级2就对应1,而GetLevelSetLevel这两个API却不同等级1对应1,等级2就对应2
for循环是Lua的基础知识,这里不多说了

上面的原理就是通过Target的扩展功能传递单位组到所调用函数内,keys会接收传递进来的内容,通过keys.target_entities来获取传递进来的单位组,在通过for循环遍历单位组内的单位,依次造成伤害,其中伤害取自AbilitySpecial里面的damage

接下来是利用API来获取,代码会多一些
MyAbility_null_1函数下面建立MyAbility_null_2函数

OnSpellStart里面的内容
"OnSpellStart"
{        
        "RunScript"
        {
                "ScriptFile"                "scripts/vscripts/MyAbility.lua"
                "Function"                        "MyAbility_null_2"
                "Target"                        "CASTER"
        }

        //省略后面音效等内容
}

Lua里面如下
function MyAbility_null_2( keys )
        local caster = keys.caster       --获取施法者
        local al = keys.ability:GetLevel() - 1   --获取技能等级,并且减1

        local c_team = caster:GetTeam()         --获取施法者所在的队伍
        local vec = caster:GetOrigin()                --获取施法者的位置,就是三维坐标
        local radius = keys.ability:GetLevelSpecialValueFor("radius", al)        --获取范围

        local teams = DOTA_UNIT_TARGET_TEAM_ENEMY
        local types = DOTA_UNIT_TARGET_BASIC+DOTA_UNIT_TARGET_HERO
        local flags = DOTA_UNIT_TARGET_FLAG_NONE

        --获取范围内的单位,效率不是很高,在计时器里面注意使用
        local targets = FindUnitsInRadius(c_team, vec, nil, radius, teams, types, flags, FIND_CLOSEST, true)

        --利用Lua的循环迭代,循环遍历每一个单位组内的单位
        for i,unit in pairs(targets) do
                local damageTable = {victim=unit,    --受到伤害的单位
                        attacker=caster,          --造成伤害的单位
                        damage=keys.ability:GetLevelSpecialValueFor("damage", al),        --在GetLevelSpecialValueFor里面必须技能等级减1
                        damage_type=keys.ability:GetAbilityDamageType()}    --获取技能伤害类型,就是AbilityUnitDamageType的值
                ApplyDamage(damageTable)    --造成伤害
        end
end

通过上面的代码可以看出,原理是类是的,只是获取方式不同
其中注意types那里,不是文本里面的|号而是+
FindUnitsInRadius是获取范围内单位的函数,返回一个table,里面记录了所有获取到的单位
注意FIND_CLOSEST这里,这里的意思是按离vec这个点最近的单位进行排序,所以targets[1]就是离英雄最近的单位,因为vec这个点取自施法者所在的点
以下是排序的常量
Find Types
    -FIND_ANY_ORDER            "任何顺序"
    -FIND_CLOSEST              "按最近"
    -FIND_FARTHEST             "按最远"
    -FIND_UNITS_EVERYWHERE     "随机"

FindUnitsInRadius这个API注意使用,最好不要每0.1一秒以下使用这个API,会影响游戏体验,就是会变得卡,所以目前效率存在一定问题,坐等优化吧

还没完,接下来就教你怎么使用计时器

同样也是两种,一种在技能文本里,一种Lua里面,但是有些区别

我们先来文本里的

为了方便,我就清空OnSpellStart里面的内容
"OnSpellStart"
{        
        "ApplyModifier"
        {
                "ModifierName"        "modifier_MyAbility_null_time"
                "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"        "%radius"
                }
        }
}

"Modifiers"
{
        "modifier_MyAbility_null_time"
        {
                "IsHidden"                        "1"
                "Duration"                        "10"
                "ThinkInterval"                "1"
                "OnIntervalThink"
                {
                        "Damage"
                        {
                                "Type"                "DAMAGE_TYPE_PURE"
                                "Damage"        "10"
                                "Target"        "TARGET"
                        }
                }
        }
}

这效果是施放技能之后,获取范围内的敌人传进modifier_MyAbility_null_time
然后传进去的单位都会有一个modifier_MyAbility_null_tim,而这个modifier里面有个计时器
这个计时器持续10秒,每1秒对单位造成伤害,Duration就是计时器持续时间,ThinkInterval计时间隔,OnIntervalThink响应计时器到期

这里提醒一下,modifier_MyAbility_null_tim添加给单位的时候就会创建计时器,而这时计时器不会立马执行,而是先等第一个计时间隔到期之后才执行第一次OnIntervalThink,可以利用这个特点做延迟多少秒后造成击晕等效果,如果是延迟1秒,需要把持续时间(Duration)设置为1.1即可,如果不设置Duration,计时器会一直不停的持续下去,知道单位死亡,但是不建议这样做,这样容易引起游戏崩溃

接下来开始Lua
Lua的计时器就很自由了,我就直接在MyAbility_null_1里面修改

首先OnSpellStart内容
"OnSpellStart"
{        
        "RunScript"
        {
                "ScriptFile"                "scripts/vscripts/MyAbility.lua"
                "Function"                        "MyAbility_null_1"
                "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"        "%radius"
                }
        }
}

Lua里的内容
function MyAbility_null_1( keys )
        local caster = keys.caster             --获取施法者
        local targets = keys.target_entities   --获取传递进来的单位组
        local al = keys.ability:GetLevel() - 1   --获取技能等级,并且减1

        local time = 0
        GameRules:GetGameModeEntity():SetContextThink(DoUniqueString("MyAbility_null_1_time"),
                function( )
                        if time < 10 then
                                --利用Lua的循环迭代,循环遍历每一个单位组内的单位
                                for i,unit in pairs(targets) do
                                        if IsValidEntity(unit) and unit:IsAlive() then    --这里判断单位是否为空,且单位是否存活
                                                local damageTable = {victim=unit,    --受到伤害的单位
                                                        attacker=caster,          --造成伤害的单位
                                                        damage=keys.ability:GetLevelSpecialValueFor("damage", al),        --在GetLevelSpecialValueFor里面必须技能等级减1
                                                        damage_type=keys.ability:GetAbilityDamageType()}    --获取技能伤害类型,就是AbilityUnitDamageType的值
                                                ApplyDamage(damageTable)    --造成伤害
                                        end
                                end
                                time=time+1
                                return 1
                        else
                                return nil
                        end
                end, 0)
end

Lua里面的计时器就是这样用的
GameRules:GetGameModeEntity():SetContextThink(stringa,handle b,float c)
第一个参数是字符串a,意思就是计时器的名字,利用DoUniqueString()这个API就可以生成一个独立的字符串,具体生成个啥样我也不知道,那是底层的玩意了
第二个参数其实就是传递一个函数进去就行了
第三个参数是小数c,这个参数意味着延迟多少秒后执行第二个参数所填的函数,我填的是0所以会里面就执行一次,如果填1,效果就跟技能文本里面的一样了


在计时器之前有个局部变量time,这是用来计算时间的
function()…end里面,先判断时间,因为是持续10秒,time初始化为0,所以当time小于10就继续调用函数,return  1(返回1)的意思就是说1秒后再执行一次function()…end,大于等于10就删除计时器,return  nil(返回nil)的意思就是删除计时器


for循环里面我加了点判断IsValidEntity(unit) and unit:IsAlive()
意思就是判断单位是否存在实体和单位是否存活,如果不为空就返回true,如果存活就返回true
如果对一个不存在的单位,或者已阵亡的英雄继续造成伤害有可能会导致系统崩溃


对于这个SetContextThink,其实还有SetThinkAPI,只不过SetThink这个计时器不能独立运行,本次技能施放调用的SetThink会影响到前一次技能施放调用SetThink,所以才使用这个SetContextThink,这个可以独立运行,不会有冲突



好了,基本讲完了
如有不懂的地方欢迎提问


这次技能的附件:
因为论坛有一段时间在转移服务器,所以在此期间我进行无目标教程和点目标教程的制作,附件里面的内容已经包括的点目标教程里面的内容了

本帖子中包含更多资源

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

x

评分

参与人数 1节操 -1 收起 理由
白睫哥 -1 很给力!赞!

查看全部评分

回复

使用道具 举报

3

主题

23

帖子

638

积分

隐修议员

UID
7045
金币
613
精华
0
节操
-30
发表于 2015-11-15 10:57:07 | 显示全部楼层
我下载了附件里的代码,直接覆盖之后,技能在地图里都可以正常运行,但是比如说删掉npc_abilities_custom.txt里MyAbility_unit 这个技能,别的技能就无法显示了。这个是什么造成的?
回复 支持 反对

使用道具 举报

43

主题

430

帖子

2855

积分

大魔导师

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

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

QQ
 楼主| 发表于 2015-11-15 11:31:10 | 显示全部楼层
Greg 发表于 2015-11-15 10:57
我下载了附件里的代码,直接覆盖之后,技能在地图里都可以正常运行,但是比如说删掉npc_abilities_custom.t ...

检查{}
一般都是{}引起
回复 支持 反对

使用道具 举报

3

主题

23

帖子

638

积分

隐修议员

UID
7045
金币
613
精华
0
节操
-30
发表于 2015-11-16 21:44:52 | 显示全部楼层
本帖最后由 Greg 于 2015-11-16 22:26 编辑
裸奔的代码 发表于 2015-11-15 11:31
检查{}
一般都是{}引起

这个是文本里的代码,我检查过去并没有多或少{}。有点困惑- -
[mw_shl_code=c,true]// Dota Heroes File
"DOTAAbilities"
{
        "Version"                "1"

        "MyAbility_null"
        {
                // 基础的定义,如果技能是单位目标还是无目标,单位目标的类型是什么
                //-------------------------------------------------------------------------------------------------------------
                "AbilityBehavior"                                "DOTA_ABILITY_BEHAVIOR_NO_TARGET"
                "AbilityUnitDamageType"                        "DAMAGE_TYPE_PURE"        
                "AbilityUnitTargetTeam"                        "DOTA_UNIT_TARGET_TEAM_ENEMY"
                "BaseClass"                                                 "ability_datadriven"
                "AbilityTextureName"                        "juggernaut_blade_fury"

                "AbilityCastPoint"                                "0.0"
                "AbilityCooldown"                                "1.0 2.0 3.0 4.0"
                "AbilityManaCost"                                "5"

                "OnSpellStart"
                {        
                        "RunScript"
                        {
                                "ScriptFile"                "scripts/vscripts/MyAbility.lua"
                                "Function"                        "MyAbility_null_1"
                                "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"        "%radius"
                                }
                        }

                        "RunScript"
                        {
                                "ScriptFile"                "scripts/vscripts/MyAbility.lua"
                                "Function"                        "MyAbility_null_2"
                                "Target"                        "CASTER"
                        }

                        "ApplyModifier"
                        {
                                "ModifierName"        "modifier_MyAbility_null_time"
                                "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"        "%radius"
                                }
                        }

                        "Stun"
                        {
                                "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"        "%radius"
                                }
                                "Duration"                "2"
                        }

                        "ApplyModifier"
                        {
                                "ModifierName"                "modifier_MyAbility_null_buff"
                                "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"        "%radius"
                                }
                        }

                        "AttachEffect"
                        {
                                "EffectName"                "particles\units\heroes\hero_queenofpain\queen_scream_of_pain_owner.vpcf"
                                "EffectAttachType"        "follow_chest"
                                "Target"                        "CASTER"
                        }

                        "FireSound"
                        {
                                "EffectName"        "Hero_WitchDoctor.Maledict_Tick"
                                "Target"                "CASTER"
                        }
                }

                "Modifiers"
                {
                        "modifier_MyAbility_null_buff"
                        {
                                "Duration"                "10"
                                "Properties"
                                {
                                        "MODIFIER_PROPERTY_DAMAGEOUTGOING_PERCENTAGE"        "-50"
                                }
                        }

                        "modifier_MyAbility_null_time"
                        {
                                "IsHidden"                        "1"
                                "Duration"                        "10"
                                "ThinkInterval"                "1"
                                "OnIntervalThink"
                                {
                                        "Damage"
                                        {
                                                "Type"                "DAMAGE_TYPE_PURE"
                                                "Damage"        "10"
                                                "Target"        "TARGET"
                                        }
                                }
                        }
                }
                // Special
                //-------------------------------------------------------------------------------------------------------------
                "AbilitySpecial"
                {
                        "01"
                        {
                                "var_type"                "FIELD_INTEGER"
                                "damage"                "100 200 300 400"
                        }
                        "02"
                        {
                                "var_type"                "FIELD_INTEGER"
                                "radius"                "400"
                        }
                }
        }
}
[/mw_shl_code]
回复 支持 反对

使用道具 举报

43

主题

430

帖子

2855

积分

大魔导师

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

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

QQ
 楼主| 发表于 2015-11-16 23:19:39 | 显示全部楼层
Greg 发表于 2015-11-16 21:44
这个是文本里的代码,我检查过去并没有多或少{}。有点困惑- -
[mw_shl_code=c,true]// Dota Heroes File
...

你这个技能没问题,那应该是英雄那边有问题
回复 支持 反对

使用道具 举报

3

主题

23

帖子

638

积分

隐修议员

UID
7045
金币
613
精华
0
节操
-30
发表于 2015-11-17 20:03:49 | 显示全部楼层
裸奔的代码 发表于 2015-11-16 23:19
你这个技能没问题,那应该是英雄那边有问题

英雄也不应该有问题啊…VS有个技能没对应,应该跟JUGG没啥关系吧。我贴上来您看一下
[mw_shl_code=c,true]// Dota Heroes File
// NOTE: This is not for creating new heroes, this is for taking a currently existing hero as a template and overriding
// the specified key-value combinations.  Use override_hero <hero_to_override> for this.
"DOTAHeroes"
{
        //=================================================================================================================
        // HERO: Templar Assassin
        //=================================================================================================================
        "npc_dota_hero_templar_assassin_template"
        {
                "override_hero"                                "npc_dota_hero_templar_assassin"                        // Hero to override
                "Ability1"                                        "templar_assassin_refraction_holdout"                // Ability 1
                "VisionNighttimeRange"                "1800"                                                                                // Range of vision at night time.
        }

        "npc_dota_hero_juggernaut"
        {
                "override_hero"                                "npc_dota_hero_juggernaut"               
                "AttackRate"                                "0.5"        
                "Ability1"                                        "MyAbility_null"        
                "Ability2"                                        ""        
                "Ability3"                                        ""        
                "Ability4"                                        ""                                                        
                "VisionNighttimeRange"                "1800"
        }

        "npc_dota_hero_vengefulspirit"
        {
                "override_hero"                                "npc_dota_hero_vengefulspirit"        
                "Ability1"                                        "MyAbility_passive"
        }
}
[/mw_shl_code]
回复 支持 反对

使用道具 举报

43

主题

430

帖子

2855

积分

大魔导师

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

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

QQ
 楼主| 发表于 2015-11-18 15:50:48 | 显示全部楼层
Greg 发表于 2015-11-17 20:03
英雄也不应该有问题啊…VS有个技能没对应,应该跟JUGG没啥关系吧。我贴上来您看一下
[mw_shl_c ...

并没有问题
回复 支持 反对

使用道具 举报

3

主题

23

帖子

638

积分

隐修议员

UID
7045
金币
613
精华
0
节操
-30
发表于 2015-11-18 18:34:40 | 显示全部楼层

好吧 那这个锅只能给V爹了
我昨天新建了一个Addon然后全部手写,倒是可以正常运行。只好当初BUG了
这种情况会很多吗?
回复 支持 反对

使用道具 举报

43

主题

430

帖子

2855

积分

大魔导师

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

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

QQ
 楼主| 发表于 2015-11-19 01:34:20 | 显示全部楼层
Greg 发表于 2015-11-18 18:34
好吧 那这个锅只能给V爹了
我昨天新建了一个Addon然后全部手写,倒是可以正常运行。只好当初BUG了
这种 ...

竟然你新建立了一个可行,那么最有可能的就是你的文件编码不是UTF-8
编码编码不对也会引起失效
回复 支持 反对

使用道具 举报

3

主题

23

帖子

638

积分

隐修议员

UID
7045
金币
613
精华
0
节操
-30
发表于 2015-11-19 22:26:00 | 显示全部楼层
裸奔的代码 发表于 2015-11-19 01:34
竟然你新建立了一个可行,那么最有可能的就是你的文件编码不是UTF-8
编码编码不对也会引起失效

实践证明 确实是这样…hero的编码是ANSI. 太年轻了。

多谢大神指导。
回复 支持 反对

使用道具 举报

5

主题

28

帖子

299

积分

Lv:2 长袍法师

UID
4933
金币
330
精华
0
节操
-1
发表于 2016-2-4 09:09:39 | 显示全部楼层
local targets = FindUnitsInRadius(c_team, vec, nil, radius, teams, types, flags, FIND_CLOSEST, true)
代码君,你这段我有点看不懂啊,是注释错了,还是你放颠倒了。teams是敌军啊,怎么会被过滤。
FindUnitsInRadius(nil, Vector b, nil, float d, DOTA_UNIT_TARGET_TEAM_ENEMY, int f, int g,FIND_ANY_ORDER, bool i) --[[Returns:table
        Finds the units in a given radius with the given flags. ( iTeamNumber, vPosition, hCacheUnit(隐藏), flRadius, iTeamFilter, iTypeFilter, iFlagFilter, iOrder, bCanGrowCache )]]
回复 支持 反对

使用道具 举报

43

主题

430

帖子

2855

积分

大魔导师

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

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

QQ
 楼主| 发表于 2016-2-5 17:18:53 | 显示全部楼层
白睫哥 发表于 2016-2-4 09:09
local targets = FindUnitsInRadius(c_team, vec, nil, radius, teams, types, flags, FIND_CLOSEST, true ...

= =
就是这圈内经过过滤,留下的绝对是teams,也就是敌军,跟第一个的team不一样
回复 支持 反对

使用道具 举报

0

主题

8

帖子

225

积分

Lv:2 长袍法师

UID
14780
金币
93
精华
0
节操
0
发表于 2019-9-1 20:19:56 | 显示全部楼层
本帖最后由 cowboyfan 于 2019-9-1 21:47 编辑

嗯……帖子里提到后篇中讲了keys获取到的内容
去看了怎么没找到呢找了一下大概可用的有
keys.caster
keys.target
keys.ability
还有 其余常用的内容吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2019-11-12 19:53 , Processed in 0.094972 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc. Theme.Yeei

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