找回密码
 点一下
查看: 1338|回复: 3

新人求问,将这个技能(鬼泣4Nero鬼手)改为支持多单位使用

[复制链接]
发表于 2015-1-6 21:00:33 | 显示全部楼层 |阅读模式
是这样的,本来确实基本上只有一个角色在地图里使用,然后这个角色有一个镜像敌人的设定,做了一个完全复制的一模一样的技能
但是还是想改成支持多单位的通用触发

学习了一下GA里处理的几个方式,局部变量的话做的触发器太多了不知道如何下手,用其他我查到的方式发现也是因为触发分支做得太复杂了....
因为这个技能不是一个简单的肉钩,所以YDWE自带的肉钩函数我都没有使用,直接重新写的肉钩,外加调用了一下YDWE里面一些别的函数,不过毕竟是写的单人版....

大概判定是这样的,肉钩长度为5以内执行近战动作,否则执行远程动作,可以抓的有敌我单位、可破坏物和物品
可破坏物的话,角色飞过去;物品的话,抓过来
对单位分建筑和非建筑的情况,建筑有以下这些
(1)友方建筑和敌方远程距离的建筑,Nero飞到建筑那里去
(2)敌方近战距离的建筑,(相对鬼泣4Nero原版鬼手做了一个改动,加了一个效果)鬼手悬停在目标上方,停一会打下去(从悬停到落地的模型动作时间是0.85秒)给范围内单位造成伤害(范围很小,对建筑的体积的话,一般只能打到建筑)
对非建筑的情况:
(1)友方单位,强行抓到Nero身边(脱离险境)
(2)敌方远程单位通过了生命值判定(随机0到目标生命值的随机实数大于Nero的生命值)那么像建筑(1)一样,Nero飞到目标单位那里去
(3)敌方近程单位通过了生命值判定,那么像建筑(2)一样,拳头打下去
(4)敌方远程单位未通过生命值判定,被抓过来,而且被击晕
(5)敌方近程单位未通过生命值判定,被鬼手抓到空中扔到地上,对单位和周围敌方单位造成AOE击晕伤害
很复杂是吗....

触发如下,共计6个触发,Extend,Hell Bond和Snatch默认不开启,需要别的触发来开启

[trigger]Devil Bringer Cast
    事件
        单位 - 任意单位 发动技能效果
    条件
        (施放技能) 等于 恶魔之手 (Nero)
    动作
        -------- 初始化目标是否为物品的判定 --------
        设置 DBIsItem = FALSE
        -------- 获取恶魔之手施法方向 --------
        设置 DBCaster = (触发单位)
        设置 DBCasterPoint = (DBCaster 的位置)
        设置 DBCastPoint = (技能施放点)
        设置 DBAngle = (DBCasterPoint 到 DBCastPoint 的角度)
        -------- 初始化类肉钩长度,使施法单位播放施法动作,开启后续触发 --------
        设置 DBLinkCount = 0
        动画 - 播放 DBCaster 的 spell 动作
        触发器 - 开启 Devil Bringer Extend <预设>
[/trigger]


[trigger]Devil Bringer Extend
    事件
        时间 - 每当游戏逝去 0.01 秒
    条件
    动作
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                DBLinkCount 小于或等于 25
            Then - 动作
                设置 DBLinkCount = (DBLinkCount + 1)
                设置 DBLinkPoint[DBLinkCount] = (从 DBCasterPoint 开始,距离 (转换 (DBLinkCount x 32) 为实数) ,方向为 DBAngle 度的位移处)
                设置 DBLinkUnit[DBLinkCount] = (新建 (DBCaster 的所有者) 的 恶魔之手 在 DBLinkPoint[DBLinkCount] 面向角度:DBAngle 度)
                动画 - 改变 DBLinkUnit[DBLinkCount] 的飞行高度为 20.00 ,变换速率: 0.00
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                    If - 条件
                        DBLinkCount 大于 1
                    Then - 动作
                        单位 - 将 DBLinkUnit[(DBLinkCount - 1)] 替换为 恶魔之手尾部 使用 新单位的最大值 生命和魔法
                        动画 - 改变 (最后替换的单位) 的飞行高度为 20.00 ,变换速率: 0.00
                        设置 DBLinkUnit[(DBLinkCount - 1)] = (最后替换的单位)
                    Else - 动作
                -------- 选取右爪的单位目标,用完后马上清理掉单位组 --------
                设置 DBTempUnitGroup = (半径为 64.00 圆心为 DBLinkPoint[DBLinkCount] 且满足 ((((匹配单位) 是存活的) 等于 TRUE) 且 ((匹配单位) 不等于 DBCaster)) 的所有单位)
                设置 DBTargetUnit = (DBTempUnitGroup 中第一个单位)
                单位组 - 删除 DBTempUnitGroup
                -------- 判定物品和可破坏物的矩形区域,用完了马上清理掉 --------
                设置 DBRectangleArea = (以 DBLinkPoint[DBLinkCount] 为中心,宽 64.00 ,高 64.00 的矩形区域)
                设置 DBTree = (DBRectangleArea 内满足 ((((匹配的可破坏物) 的闭塞高度) 大于或等于 75.00) 且 (((匹配的可破坏物) 是存活的) 等于 TRUE)) 的一个随机可破坏物)
                设置 DBItem = (DBRectangleArea 内随机选取的一个物品)
                区域(矩形) - 删除 DBRectangleArea
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                    If - 条件
                        DBTargetUnit 不等于 没有单位
                    Then - 动作
                        设置 DBTargetPoint = (DBTargetUnit 的位置)
                        -------- 判定右爪的对单位效果 --------
                        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                            If - 条件
                                Or - 任意条件成立
                                    条件
                                        (DBTargetUnit 是 建筑) 等于 TRUE
                            Then - 动作
                                -------- 检查1:Hell Bond或Repulse启动条件1:目标为建筑 --------
                                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                                    If - 条件
                                        DBLinkCount 小于或等于 5
                                        (DBTargetUnit 是 (DBCaster 的所有者) 的敌对单位) 等于 TRUE
                                    Then - 动作
                                        -------- Repulse:近战距离且与奶油敌对目标适用,右爪Spell动作重拳打下去,0.85秒后造成奶油力量×5.76~6的128范围混乱攻击伤害 --------
                                        触发器 - 关闭 (当前触发)
                                        触发器 - 运行 Devil Bringer - Repulse <预设> (检查条件)
                                    Else - 动作
                                        -------- Hell Bond:远程或与奶油同盟目标适用,奶油移动到目标单位身边 --------
                                        设置 DBLoop = 1
                                        触发器 - 关闭 (当前触发)
                                        触发器 - 开启 Devil Bringer - Hell Bond <预设>
                            Else - 动作
                                -------- 目标不是建筑,判定敌我 --------
                                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                                    If - 条件
                                        (DBTargetUnit 是 (DBCaster 的所有者) 的敌对单位) 等于 TRUE
                                    Then - 动作
                                        -------- 先判定距离 --------
                                        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                                            If - 条件
                                                DBLinkCount 小于或等于 5
                                            Then - 动作
                                                -------- 近战距离,判定血量 --------
                                                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                                                    If - 条件
                                                        (随机实数,最小值: 0.00 最大值: (DBTargetUnit 的 生命值)) 大于 (DBCaster 的 生命值)
                                                    Then - 动作
                                                        -------- Repulse:近战距离,通过了生命值判定适用,右爪Spell动作重拳打下去,0.85秒后造成奶油力量×5.76~6的128范围混乱攻击伤害 --------
                                                        触发器 - 关闭 (当前触发)
                                                        触发器 - 运行 Devil Bringer - Repulse <预设> (检查条件)
                                                    Else - 动作
                                                        -------- Buster:近战距离,未通过生命值判定适用,右爪attack动作抓起目标然后扔向地面,0.75秒后造成奶油力量×3.84~4的128范围混乱攻击伤害 --------
                                                        触发器 - 关闭 (当前触发)
                                                        动画 - 播放 DBTargetUnit 的 death 动作
                                                        触发器 - 运行 Devil Bringer - Buster <预设> (检查条件)
                                            Else - 动作
                                                -------- 远程距离,判定血量 --------
                                                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                                                    If - 条件
                                                        (随机实数,最小值: 0.00 最大值: (DBTargetUnit 的 生命值)) 大于 (DBCaster 的 生命值)
                                                    Then - 动作
                                                        -------- Hell Bond:远程距离,通过了生命值判定适用,奶油移动到目标单位身边 --------
                                                        设置 DBLoop = 1
                                                        触发器 - 关闭 (当前触发)
                                                        触发器 - 开启 Devil Bringer - Hell Bond <预设>
                                                    Else - 动作
                                                        -------- Snatch:远程距离:未通过生命值判定适用,把目标抓到奶油身边 --------
                                                        触发器 - 关闭 (当前触发)
                                                        动画 - 播放 DBTargetUnit 的 death 动作
                                                        触发器 - 开启 Devil Bringer - Snatch <预设>
                                    Else - 动作
                                        -------- 检查3:Snatch启动条件2:目标为我方,从战场上拉回来 --------
                                        触发器 - 关闭 (当前触发)
                                        触发器 - 开启 Devil Bringer - Snatch <预设>
                    Else - 动作
                        -------- 判定是否为可破坏物 --------
                        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                            If - 条件
                                DBTree 不等于 没有可破坏物
                            Then - 动作
                                -------- Hell Bond:抓到树木并移动到那儿去 --------
                                设置 DBTargetPoint = (DBTree 的位置)
                                设置 DBLoop = 1
                                触发器 - 关闭 (当前触发)
                                触发器 - 开启 Devil Bringer - Hell Bond <预设>
                            Else - 动作
                                -------- 判定是否为物品 --------
                                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                                    If - 条件
                                        DBItem 不等于 没有物品
                                    Then - 动作
                                        -------- 改动物品判定Flag --------
                                        设置 DBIsItem = TRUE
                                        设置 DBTargetPoint = (DBItem 的位置)
                                        触发器 - 关闭 (当前触发)
                                        触发器 - 开启 Devil Bringer - Snatch <预设>
                                    Else - 动作
                                        -------- 循环继续,继续寻找目标 --------
            Else - 动作
                -------- 用Snatch的触发器收回右爪,途中有可能抓到新目标 --------
                触发器 - 关闭 (当前触发)
                触发器 - 开启 Devil Bringer - Snatch <预设>
[/trigger]


[trigger]Devil Bringer - Repulse
    事件
    条件
    动作
        -------- Repulse是个完全自主设计的技能,是为了处理近身范围控制不了的敌人所用,但伤害造成会有0.85秒的延迟,外加范围较小,所以敌人有时间回避掉 --------
        -------- 清理掉任何有碍观瞻的肉钩尾巴 --------
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                DBLinkCount 大于 1
            Then - 动作
                循环动作[循环整数A]从 1 到 (DBLinkCount - 1), 运行 (Loop - 动作)
                    Loop - 动作
                        单位 - 删除 DBLinkUnit[循环整数A [R]]
            Else - 动作
        -------- 让右手移动到目标单位头顶,右手位置不变,不能控制目标,所以技能可能打空 --------
        单位 - 立即移动 DBLinkUnit[DBLinkCount] 到 DBTargetPoint
        动画 - 改变 DBLinkUnit[DBLinkCount] 的飞行高度为 90.00 ,变换速率: 0.00
        动画 - 播放 DBLinkUnit[DBLinkCount] 的 spell 动作
        等待 0.70 秒
        -------- 0.15秒的循环,单位高度从40调整到0 --------
        循环动作[循环整数A]从 1 到 15, 运行 (Loop - 动作)
            Loop - 动作
                等待 0.01 秒
                动画 - 改变 DBLinkUnit[DBLinkCount] 的飞行高度为 (90.00 - (6.00 x (转换 循环整数A [R] 为实数))) ,变换速率: 0.00
        -------- 召唤Dummy造成雷霆一击效果 --------
        设置 DBDummy = (新建 (DBCaster 的所有者) 的 Nero的施法Dummy 在 DBTargetPoint 面向角度:DBAngle 度)
        动画 - 改变 DBDummy 的飞行高度为 0.00 ,变换速率: 0.00
        单位 - 对 DBDummy 发布 人族山丘之王 - 雷霆一击 命令
        设置 DBSFX = (新建特效 Abilities\Spells\Human\Thunderclap\ThunderClapCaster.mdl 在 DBTargetPoint 处)
        特殊效果 - 在 2.00 秒后删除 DBSFX
        -------- 造成伤害,直接利用右爪的位置,第二次使用TempGroup,第一次使用时已排泄 --------
        设置 DBTempUnitGroup = (半径为 200.00 圆心为 DBTargetPoint 且满足 ((((匹配单位) 是 (DBCaster 的所有者) 的敌对单位) 等于 TRUE) 且 (((匹配单位) 的当前飞行高度) 小于或等于 30.00)) 的所有单位)
        单位组 - 选取 DBTempUnitGroup 内所有单位做动作
            Loop - 动作
                单位 - 命令 DBCaster 对 (选取单位) 造成 (((转换 (DBCaster 的力量值(包括 加成)) 为实数) x (随机实数,最小值: 5.76 最大值: 6.00)) x (取(0.00, (1.00 - ((从DBLinkUnit[DBLinkCount]到(选取单位)的距离) / 200.00)))中较大值)) 点伤害(是 攻击伤害, 不是远程攻击) 攻击类型: 混乱 伤害类型: 普通 武器类型: 岩石重击
        -------- 排泄掉单位组 --------
        单位组 - 删除 DBTempUnitGroup
        -------- 排泄点 --------
        点 - 清除 DBCasterPoint
        点 - 清除 DBCastPoint
        点 - 清除 DBTargetPoint
        循环动作[循环整数A]从 1 到 DBLinkCount, 运行 (Loop - 动作)
            Loop - 动作
                点 - 清除 DBLinkPoint[循环整数A [R]]
        -------- 0.45秒后删除钩子本体,这时候其实只有右手这个本体一个单位 --------
        等待 0.45 秒
        单位 - 删除 DBLinkUnit[DBLinkCount]
        -------- 删除攻击特效施放单位 --------
        单位 - 删除 DBDummy
        -------- 恢复奶油的状态 --------
        动画 - 重置 DBCaster 的动作,恢复到普通状态
        -------- 清除其余各变量的指向 --------
        设置 DBAngle = 默认建筑朝向
        设置 DBCaster = 没有单位
        设置 DBIsItem = FALSE
        设置 DBItem = 没有物品
        设置 DBLinkCount = 0
        设置 DBLoop = 0
        设置 DBTargetRavenForm = FALSE
        设置 DBTargetUnit = 没有单位
        设置 DBTree = 没有可破坏物
[/trigger]


[trigger]Devil Bringer - Hell Bond
    事件
        时间 - 每当游戏逝去 0.01 秒
    条件
    动作
        -------- Hell Bond和Snatch在原作中都没有伤害,在这方面为了忠实原作以及提供部分平衡,因此给予了技能较短的CD和较少的蓝耗 --------
        -------- 把奶油位置前移到最后一个模拟肉钩的尾部,删除这个肉钩尾并直接删除点 --------
        -------- DBLoop在Extend触发里已经定义,初始值为1,本触发循环到和肉钩数量DBLinkCount相等时结束触发 --------
        单位 - 立即移动 DBCaster 到 DBLinkPoint[DBLoop]
        单位 - 删除 DBLinkUnit[DBLoop]
        点 - 清除 DBLinkPoint[DBLoop]
        设置 DBLoop = (DBLoop + 1)
        -------- 设定循环触发结束的条件 --------
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                DBLoop 大于 DBLinkCount
            Then - 动作
                触发器 - 关闭 (当前触发)
                -------- 排泄点 --------
                点 - 清除 DBCasterPoint
                点 - 清除 DBCastPoint
                点 - 清除 DBTargetPoint
                -------- 肉钩结构的点和单位已排泄,因此不额外排泄 --------
                -------- 恢复奶油的状态 --------
                动画 - 重置 DBCaster 的动作,恢复到普通状态
                -------- 清除其余各变量的指向 --------
                设置 DBAngle = 默认建筑朝向
                设置 DBCaster = 没有单位
                设置 DBIsItem = FALSE
                设置 DBItem = 没有物品
                设置 DBLinkCount = 0
                设置 DBLoop = 0
                设置 DBTargetRavenForm = FALSE
                设置 DBTargetUnit = 没有单位
                设置 DBTree = 没有可破坏物
            Else - 动作
[/trigger]


[trigger]Devil Bringer - Buster
    事件
    条件
    动作
        -------- 真正起到近战控制作用的技能,对目标必中而且必控制,0.15秒抓单位到地面悬空0.45秒,然后再用0.15秒给砸下来造成伤害和眩晕,再过0.45秒右爪消失 --------
        -------- 清理掉任何有碍观瞻的肉钩尾巴 --------
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                DBLinkCount 大于 1
            Then - 动作
                循环动作[循环整数A]从 1 到 (DBLinkCount - 1), 运行 (Loop - 动作)
                    Loop - 动作
                        单位 - 删除 DBLinkUnit[循环整数A [R]]
            Else - 动作
        -------- 让右手移动到目标单位身边,作出attack准备抓起目标的动作 --------
        单位 - 立即移动 DBLinkUnit[DBLinkCount] 到 DBTargetPoint
        动画 - 改变 DBLinkUnit[DBLinkCount] 的飞行高度为 0.00 ,变换速率: 0.00
        动画 - 播放 DBLinkUnit[DBLinkCount] 的 attack 动作
        -------- 让目标进入被控制的模式,高度先被强制拉到0再和右爪一起动 --------
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                (DBTargetUnit 的 风暴之鸦 技能等级) 大于或等于 1
            Then - 动作
                -------- 避免出错! --------
                设置 DBTargetRavenForm = TRUE
            Else - 动作
                设置 DBTargetRavenForm = FALSE
                单位 - 为 DBTargetUnit 添加 风暴之鸦
        动画 - 改变 DBTargetUnit 的飞行高度为 0.00 ,变换速率: 0.00
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                DBTargetRavenForm 等于 TRUE
            Then - 动作
                -------- 避免出错! --------
            Else - 动作
                单位 - 为 DBTargetUnit 删除 风暴之鸦
        -------- 0.15秒的循环,调整目标和右爪的高度,爪子到90,目标到150 --------
        循环动作[循环整数A]从 1 到 15, 运行 (Loop - 动作)
            Loop - 动作
                等待 0.01 秒
                动画 - 改变 DBLinkUnit[DBLinkCount] 的飞行高度为 (6.00 x (转换 循环整数A [R] 为实数)) ,变换速率: 0.00
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                    If - 条件
                        DBTargetRavenForm 等于 TRUE
                    Then - 动作
                        -------- 避免出错! --------
                    Else - 动作
                        单位 - 为 DBTargetUnit 添加 风暴之鸦
                动画 - 改变 DBTargetUnit 的飞行高度为 (10.00 x (转换 循环整数A [R] 为实数)) ,变换速率: 0.00
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                    If - 条件
                        DBTargetRavenForm 等于 TRUE
                    Then - 动作
                        -------- 避免出错! --------
                    Else - 动作
                        单位 - 为 DBTargetUnit 删除 风暴之鸦
        等待 0.45 秒
        -------- 0.15秒的循环,爪子和目标落地 --------
        循环动作[循环整数A]从 1 到 15, 运行 (Loop - 动作)
            Loop - 动作
                等待 0.01 秒
                动画 - 改变 DBLinkUnit[DBLinkCount] 的飞行高度为 (90.00 - (6.00 x (转换 循环整数A [R] 为实数))) ,变换速率: 0.00
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                    If - 条件
                        DBTargetRavenForm 等于 TRUE
                    Then - 动作
                        -------- 避免出错! --------
                    Else - 动作
                        单位 - 为 DBTargetUnit 添加 风暴之鸦
                动画 - 改变 DBTargetUnit 的飞行高度为 (150.00 - (10.00 x (转换 循环整数A [R] 为实数))) ,变换速率: 0.00
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                    If - 条件
                        DBTargetRavenForm 等于 TRUE
                    Then - 动作
                        -------- 避免出错! --------
                    Else - 动作
                        单位 - 为 DBTargetUnit 删除 风暴之鸦
        -------- 确保目标回到了单位点,恢复目标的行动状态 --------
        单位 - 立即移动 DBTargetUnit 到 DBTargetPoint
        动画 - 重置 DBTargetUnit 的动作,恢复到普通状态
        -------- 召唤Dummy造成战争践踏效果 --------
        设置 DBDummy = (新建 (DBCaster 的所有者) 的 Nero的施法Dummy 在 DBTargetPoint 面向角度:DBAngle 度)
        动画 - 改变 DBDummy 的飞行高度为 0.00 ,变换速率: 0.00
        单位 - 对 DBDummy 发布 兽族牛头人酋长 - 战争践踏 命令
        设置 DBSFX = (新建特效 Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl 在 DBTargetPoint 处)
        特殊效果 - 在 2.00 秒后删除 DBSFX
        -------- 造成伤害,直接利用右爪的位置,第二次使用TempGroup,第一次使用时已排泄 --------
        设置 DBTempUnitGroup = (半径为 200.00 圆心为 DBTargetPoint 且满足 ((((匹配单位) 是 (DBCaster 的所有者) 的敌对单位) 等于 TRUE) 且 (((匹配单位) 的当前飞行高度) 小于或等于 30.00)) 的所有单位)
        单位组 - 为 DBTempUnitGroup 删除 DBTargetUnit
        单位 - 命令 DBCaster 对 DBTargetUnit 造成 ((转换 (DBCaster 的力量值(包括 加成)) 为实数) x (随机实数,最小值: 3.84 最大值: 4.00)) 点伤害(是 攻击伤害, 不是远程攻击) 攻击类型: 混乱 伤害类型: 普通 武器类型: 岩石重击
        动画 - 播放 DBTargetUnit 的 death 动作
        单位组 - 选取 DBTempUnitGroup 内所有单位做动作
            Loop - 动作
                单位 - 命令 DBCaster 对 (选取单位) 造成 (((转换 (DBCaster 的力量值(包括 加成)) 为实数) x (随机实数,最小值: 3.84 最大值: 4.00)) x (取(0.00, (1.00 - ((从DBTargetUnit到(选取单位)的距离) / 200.00)))中较大值)) 点伤害(不是 攻击伤害, 不是远程攻击) 攻击类型: 混乱 伤害类型: 普通 武器类型: 岩石重击
        -------- 排泄掉单位组 --------
        单位组 - 删除 DBTempUnitGroup
        -------- 排泄点 --------
        点 - 清除 DBCasterPoint
        点 - 清除 DBCastPoint
        点 - 清除 DBTargetPoint
        循环动作[循环整数A]从 1 到 DBLinkCount, 运行 (Loop - 动作)
            Loop - 动作
                点 - 清除 DBLinkPoint[循环整数A [R]]
        -------- 0.45秒后删除钩子本体,这时候其实只有右手这个本体一个单位 --------
        等待 0.45 秒
        单位 - 删除 DBLinkUnit[DBLinkCount]
        -------- 删除攻击特效施放单位 --------
        单位 - 删除 DBDummy
        -------- 恢复奶油的状态 --------
        动画 - 重置 DBCaster 的动作,恢复到普通状态
        -------- 清除其余各变量的指向 --------
        设置 DBAngle = 默认建筑朝向
        设置 DBCaster = 没有单位
        设置 DBIsItem = FALSE
        设置 DBItem = 没有物品
        设置 DBLinkCount = 0
        设置 DBLoop = 0
        设置 DBTargetRavenForm = FALSE
        设置 DBTargetUnit = 没有单位
        设置 DBTree = 没有可破坏物
[/trigger]


[trigger]Devil Bringer - Snatch
    事件
        时间 - 每当游戏逝去 0.01 秒
    条件
    动作
        -------- Hell Bond和Snatch在原作中都没有伤害,在这方面为了忠实原作以及提供部分平衡,因此给予了技能较短的CD和较少的蓝耗 --------
        -------- Snatch在右爪伸到最大距离但没抓到任何东西时也会触发,收回右爪过程中碰到各种可以触发右爪能力的单位也会进行相应触发 --------
        -------- 首先判断已获取目标是不是物品,如果是,显然此时目标已获取 --------
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                DBIsItem 等于 TRUE
            Then - 动作
                物品 - 移动 DBItem 到 DBLinkPoint[DBLinkCount]
            Else - 动作
                -------- 不是物品,判断有没有单位 --------
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                    If - 条件
                        DBTargetUnit 不等于 没有单位
                    Then - 动作
                        单位 - 立即移动 DBTargetUnit 到 DBLinkPoint[DBLinkCount]
                    Else - 动作
                        -------- 没有单位,再做一遍Extend里的判定 --------
                        -------- 选取右爪的单位目标,用完后马上清理掉单位组 --------
                        设置 DBFakeTempUnitGroup = (半径为 64.00 圆心为 DBFakeLinkPoint[DBFakeLinkCount] 且满足 ((((匹配单位) 是存活的) 等于 TRUE) 且 ((匹配单位) 不等于 DBFakeCaster)) 的所有单位)
                        设置 DBTargetUnit = (DBTempUnitGroup 中第一个单位)
                        单位组 - 删除 DBTempUnitGroup
                        -------- 判定物品和可破坏物的矩形区域,用完了马上清理掉 --------
                        设置 DBRectangleArea = (以 DBLinkPoint[DBLinkCount] 为中心,宽 64.00 ,高 64.00 的矩形区域)
                        设置 DBTree = (DBRectangleArea 内满足 ((((匹配的可破坏物) 的闭塞高度) 大于或等于 75.00) 且 (((匹配的可破坏物) 是存活的) 等于 TRUE)) 的一个随机可破坏物)
                        设置 DBItem = (DBRectangleArea 内随机选取的一个物品)
                        区域(矩形) - 删除 DBRectangleArea
                        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                            If - 条件
                                DBTargetUnit 不等于 没有单位
                            Then - 动作
                                设置 DBTargetPoint = (DBTargetUnit 的位置)
                                -------- 判定右爪的对单位效果 --------
                                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                                    If - 条件
                                        Or - 任意条件成立
                                            条件
                                                (DBTargetUnit 是 建筑) 等于 TRUE
                                    Then - 动作
                                        -------- 检查1:Hell Bond或Repulse启动条件1:目标为建筑 --------
                                        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                                            If - 条件
                                                DBLinkCount 小于或等于 5
                                                (DBTargetUnit 是 (DBCaster 的所有者) 的敌对单位) 等于 TRUE
                                            Then - 动作
                                                -------- Repulse:近战距离且与奶油敌对目标适用,右爪Spell动作重拳打下去,0.85秒后造成奶油力量×5.76~6的128范围混乱攻击伤害 --------
                                                触发器 - 关闭 (当前触发)
                                                触发器 - 运行 Devil Bringer - Repulse <预设> (检查条件)
                                            Else - 动作
                                                -------- Hell Bond:远程或与奶油同盟目标适用,奶油移动到目标单位身边 --------
                                                设置 DBLoop = 1
                                                触发器 - 关闭 (当前触发)
                                                触发器 - 开启 Devil Bringer - Hell Bond <预设>
                                    Else - 动作
                                        -------- 目标不是建筑,判定敌我 --------
                                        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                                            If - 条件
                                                (DBTargetUnit 是 (DBCaster 的所有者) 的敌对单位) 等于 TRUE
                                            Then - 动作
                                                -------- 先判定距离 --------
                                                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                                                    If - 条件
                                                        DBLinkCount 小于或等于 5
                                                    Then - 动作
                                                        -------- 近战距离,判定血量 --------
                                                        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                                                            If - 条件
                                                                (随机实数,最小值: 0.00 最大值: (DBTargetUnit 的 生命值)) 大于 (DBCaster 的 生命值)
                                                            Then - 动作
                                                                -------- Repulse:近战距离,通过了生命值判定适用,右爪Spell动作重拳打下去,0.85秒后造成奶油力量×5.76~6的128范围混乱攻击伤害 --------
                                                                触发器 - 关闭 (当前触发)
                                                                触发器 - 运行 Devil Bringer - Repulse <预设> (检查条件)
                                                            Else - 动作
                                                                -------- Buster:近战距离,未通过生命值判定适用,右爪attack动作抓起目标然后扔向地面,0.75秒后造成奶油力量×3.84~4的128范围混乱攻击伤害 --------
                                                                触发器 - 关闭 (当前触发)
                                                                动画 - 播放 DBTargetUnit 的 death 动作
                                                                触发器 - 运行 Devil Bringer - Buster <预设> (检查条件)
                                                    Else - 动作
                                                        -------- 远程距离,判定血量 --------
                                                        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                                                            If - 条件
                                                                (随机实数,最小值: 0.00 最大值: (DBTargetUnit 的 生命值)) 大于 (DBCaster 的 生命值)
                                                            Then - 动作
                                                                -------- Hell Bond:远程距离,通过了生命值判定适用,奶油移动到目标单位身边 --------
                                                                设置 DBLoop = 1
                                                                触发器 - 关闭 (当前触发)
                                                                触发器 - 开启 Devil Bringer - Hell Bond <预设>
                                                            Else - 动作
                                                                -------- Snatch:远程距离:未通过生命值判定适用,把目标抓到奶油身边 --------
                                                                -------- 本触发就是Snatch,不需要关了再开 --------
                                                                动画 - 播放 DBTargetUnit 的 death 动作
                                            Else - 动作
                                                -------- 检查3:Snatch启动条件2:目标为我方,从战场上拉回来 --------
                                                -------- 本触发就是Snatch,不需要关了再开 --------
                            Else - 动作
                                -------- 判定是否为可破坏物 --------
                                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                                    If - 条件
                                        DBTree 不等于 没有可破坏物
                                    Then - 动作
                                        -------- Hell Bond:抓到树木并移动到那儿去 --------
                                        设置 DBTargetPoint = (DBTree 的位置)
                                        设置 DBLoop = 1
                                        触发器 - 关闭 (当前触发)
                                        触发器 - 开启 Devil Bringer - Hell Bond <预设>
                                    Else - 动作
                                        -------- 判定是否为物品 --------
                                        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                                            If - 条件
                                                DBItem 不等于 没有物品
                                            Then - 动作
                                                -------- 改动物品判定Flag --------
                                                设置 DBIsItem = TRUE
                                                设置 DBTargetPoint = (DBItem 的位置)
                                                -------- 本触发就是Snatch,不需要关了再开 --------
                                            Else - 动作
                                                -------- 循环继续,继续寻找目标 --------
        -------- 收回爪子,删除当前的爪子,直接搞定当前爪子的点的排泄,并把最近一个肉钩尾替换成爪子 --------
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                DBLinkCount 大于 1
            Then - 动作
                单位 - 将 DBLinkUnit[(DBLinkCount - 1)] 替换为 恶魔之手 使用 新单位的最大值 生命和魔法
                设置 DBLinkUnit[(DBLinkCount - 1)] = (最后替换的单位)
            Else - 动作
        单位 - 删除 DBLinkUnit[DBLinkCount]
        点 - 清除 DBLinkPoint[DBLinkCount]
        设置 DBLinkCount = (DBLinkCount - 1)
        -------- 判定右爪是否已经完全收回 --------
        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
            If - 条件
                DBLinkCount 小于或等于 0
            Then - 动作
                -------- 完全收回来了 --------
                触发器 - 关闭 (当前触发)
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                    If - 条件
                        DBIsItem 等于 TRUE
                    Then - 动作
                        -------- 恢复奶油的状态 --------
                        动画 - 重置 DBCaster 的动作,恢复到普通状态
                        -------- 尝试获取物品 --------
                        单位 - 对 DBCaster 发布 右键点击 命令到目标: DBItem
                    Else - 动作
                        -------- 不是物品,判断有没有单位 --------
                        如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                            If - 条件
                                (DBTargetUnit 是 (DBCaster 的所有者) 的敌对单位) 等于 TRUE
                            Then - 动作
                                -------- 恢复目标的行动 --------
                                动画 - 重置 DBTargetUnit 的动作,恢复到普通状态
                                -------- 目标为敌人,召唤Dummy造成风暴之锤效果 --------
                                设置 DBDummy = (新建 (DBCaster 的所有者) 的 Nero的施法Dummy 在 DBCasterPoint 面向角度:DBAngle 度)
                                动画 - 改变 DBDummy 的飞行高度为 0.00 ,变换速率: 0.00
                                单位 - 对 DBDummy 发布 人族山丘之王 - 风暴之锤 命令到目标: DBTargetUnit
                            Else - 动作
                                -------- 没有单位或为友军,无行为 --------
                -------- 排泄点 --------
                点 - 清除 DBCasterPoint
                点 - 清除 DBCastPoint
                点 - 清除 DBTargetPoint
                -------- 肉钩结构的点和单位已排泄,因此不额外排泄 --------
                等待 0.45 秒
                -------- 删除攻击特效施放单位 --------
                单位 - 删除 DBDummy
                -------- 恢复奶油的状态,注意如果是物品,那么奶油已经恢复而且在捡物品,所以这里就不能恢复奶油的状态了 --------
                如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 动作)
                    If - 条件
                        DBIsItem 等于 FALSE
                    Then - 动作
                        动画 - 重置 DBCaster 的动作,恢复到普通状态
                    Else - 动作
                -------- 清除其余各变量的指向 --------
                设置 DBAngle = 默认建筑朝向
                设置 DBCaster = 没有单位
                设置 DBIsItem = FALSE
                设置 DBItem = 没有物品
                设置 DBLinkCount = 0
                设置 DBLoop = 0
                设置 DBTargetRavenForm = FALSE
                设置 DBTargetUnit = 没有单位
                设置 DBTree = 没有可破坏物
            Else - 动作
                -------- 继续 --------
[/trigger]

发表于 2015-1-7 12:55:49 | 显示全部楼层
1. 局部变量
2. 全局变量数组
3. 哈希表或以上配合哈希表

总共也就那么几种方法,LZ嫌麻烦不想改的话就只能从设定方面着手了,比如设计成单一时间内只有一个钩子会出现之类的
回复

使用道具 举报

发表于 2015-1-7 13:12:42 | 显示全部楼层
为什麽不试试用vJass来做呢? 在Library里定义全局变量数组 在函数名前添加Private.
声明私有变量后剩下的调用就随意你发挥了~
回复

使用道具 举报

 楼主| 发表于 2015-1-7 16:10:13 | 显示全部楼层
看了大家的回复....好吧,既然这样,反正也不算难,还是默默啃jass去...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-21 22:17 , Processed in 0.057008 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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