|
不要忽略了那个一闪的护盾效果!
可以看到,这个技能的效果并不复杂,
就是当圣骑士被近战单位攻击时,会几率击飞攻击单位
并且消耗魔法。同时,会在攻击单位和圣骑士之间出现一个护盾特效(举盾)
恩,这个技能并不复杂,但是完全用T(自定义代码也不使用)制作却很难
主要的难度在于两重局域化:对于击退的局域化(可以击退多个单位)和对于整个技能的局域化(多个英雄使用这个技能)
另外因为直接使用等待0.01秒作为击退循环间隔的效果特别不好(间隔太长,出现诡异的效果)
所以我们就需要单独出一个击退效果的T,而且这个T还要局域化(无变量冲突)
另外就是为了多个英雄能同时使用这个技能,我们需要将传递局域变量(不是真正的,只是不会冲突的变量)到击退的T
这个用J的话一般都是Return Bug+GameCache绑定计时器来制作的(猜测)
恩恩,反正完全用T做很难吧……
以上废话,可以不看
[trigger]
startreg
事件
时间 - 当游戏逝去 0.00 秒
条件
动作
循环动作[I]从 1 到 12, do (玩家 - 禁用 魔法书 对 (玩家 I))
单位组 - 选取 ((可用地图区域) 内的所有单位) 内所有单位 (触发器 - 为 attacked <预设> 添加事件: (单位 - (选取单位) 接受伤害))
[/trigger]
[trigger]
reg
事件
单位 - 任意单位进入 (可用地图区域)
条件
((进入的单位) 的类型) 不等于 计时马甲
动作
触发器 - 为 attacked <预设> 添加事件: (单位 - (进入的单位) 接受伤害)
[/trigger]
[trigger]
skillonandoff
事件
单位 - 任意单位 发布无目标指令
条件
Or - 任意条件成立
条件
(转换 (发布的命令ID) 为命令字符串) 等于 manashieldon
(转换 (发布的命令ID) 为命令字符串) 等于 manashieldoff
动作
如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作)
If - 条件
(转换 (发布的命令ID) 为命令字符串) 等于 manashieldon
Then - 动作
单位 - 添加 魔法书 给 (发布命令的单位)
Else - 动作
如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作)
If - 条件
(转换 (发布的命令ID) 为命令字符串) 等于 manashieldoff
Then - 动作
单位 - 删除 魔法书 从 (发布命令的单位)
单位 - 删除 近战抵抗护盾 从 (发布命令的单位)
Else - 动作
[/trigger]
[trigger]
attacked
事件
条件
(单位所受伤害) 等于 1.00
(随机实数,最小值: 0.00 最大值: 100.00) 小于或等于 (20.00 x (转换 (近战抵抗护盾 的等级对 (伤害来源)) 为实数))
动作
单位 - 设置 (触发单位) 的生命值为 ((生命值 对于 (触发单位)) + 1.00)
如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作)
If - 条件
((伤害来源) 拥有 近战抵抗护盾 ) 等于 TRUE
Then - 动作
如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作)
If - 条件
(魔法值 对于 (伤害来源)) 大于或等于 Needmana
Then - 动作
Set UnitA[(((当前触发) 的触发动作运行次数) mod 8000)] = (伤害来源)
Set UnitB[(((当前触发) 的触发动作运行次数) mod 8000)] = (触发单位)
Set Point_A = ((伤害来源) 的位置)
Set Point_B = ((触发单位) 的位置)
Set Point_C = (从 Point_A 开始,距离 50.00 ,方向为 (Point_A 到 Point_B 的角度) 度的位移处)
单位 - 设置 (伤害来源) 的魔法值为 ((魔法值 对于 (伤害来源)) - Needmana)
如果 ((魔法值 对于 (伤害来源)) 小于 Needmana) 成立,则运行 (单位 - 对 (伤害来源) 发布 中立 娜迦海巫 - 关闭魔法盾 命令) 否则运行 (不做任何动作)
单位 - 创建 1 个 计时马甲 给 ((伤害来源) 的所有者) 在 ((可用地图区域) 的中心点) ,面向角度为 默认建筑朝向 度
单位 - 设置 (最后创建的单位) 的自定义值为 (((当前触发) 的触发动作运行次数) mod 8000)
单位 - 设置 (最后创建的单位) 的魔法值为 (Movelength / Movespeed)
单位 - 设置 Movetime 秒 普通 类型的生命周期对 (最后创建的单位)
触发器 - 为 timer <预设> 添加事件: (单位 - (最后创建的单位) 死亡)
单位 - 创建 1 个 特效马甲 给 ((伤害来源) 的所有者) 在 Point_C ,面向角度为 (Point_A 到 Point_B 的角度) 度
单位 - 设置 0.30 秒 普通 类型的生命周期对 (最后创建的单位)
点 - 清除 Point_A
点 - 清除 Point_B
点 - 清除 Point_C
Else - 动作
单位 - 对 (伤害来源) 发布 中立 娜迦海巫 - 关闭魔法盾 命令
Else - 动作
单位 - 删除 魔法书 从 (伤害来源)
单位 - 删除 近战抵抗护盾 从 (伤害来源)
[/trigger]
[trigger]
timer
事件
条件
((死亡单位) 的类型) 等于 计时马甲
动作
Set PointA = (UnitA[((死亡单位) 的自定义值)] 的位置)
Set PointB = (UnitB[((死亡单位) 的自定义值)] 的位置)
Set PointC = (从 PointB 开始,距离 Movespeed ,方向为 (PointA 到 PointB 的角度) 度的位移处)
如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作)
If - 条件
(PointA 和 PointC 之间的距离) 小于或等于 Movelength
(PointC 处的 可通行地面 通行状态为关闭) 不等于 TRUE
(魔法值 对于 (死亡单位)) 大于或等于 1.00
Then - 动作
单位 - 设置 UnitB[((死亡单位) 的自定义值)] 的X坐标为 (PointC 的X轴坐标)
单位 - 设置 UnitB[((死亡单位) 的自定义值)] 的Y坐标为 (PointC 的Y轴坐标)
如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作)
If - 条件
((PointA 和 PointC 之间的距离) + Movespeed) 小于或等于 Movelength
Then - 动作
单位 - 创建 1 个 计时马甲 给 ((死亡单位) 的所有者) 在 ((可用地图区域) 的中心点) ,面向角度为 默认建筑朝向 度
单位 - 设置 (最后创建的单位) 的自定义值为 ((死亡单位) 的自定义值)
单位 - 设置 (最后创建的单位) 的魔法值为 ((魔法值 对于 (死亡单位)) - 1.00)
单位 - 设置 Movetime 秒 普通 类型的生命周期对 (最后创建的单位)
触发器 - 为 timer <预设> 添加事件: (单位 - (最后创建的单位) 死亡)
Else - 动作
Else - 动作
点 - 清除 PointA
点 - 清除 PointB
点 - 清除 PointC
[/trigger]
如果你仔细看了上面的T或者发上来的技能的话,你会发现我是用单位的生命周期来代替计时器的
关于生命周期的精确度请看这个测试
时间测试.w3x
(18 KB, 下载次数: 119)
效果如图
上面是执行100次0.01秒生命周期的总共时间
从此我们可以看出使用生命周期在精确度上是不必计时器差多少的
只是在运行中消耗更多的资源,好处是可以绑定很多的东西!
整个技能的局域化简单来说是用事件响应来局域化,
通过事件响应连接到(就是相关索引,如单位的自定义值是单位到整数的连接)的整数来传递数组序号以传递参数
而制作的技能。
唉,费这么大劲才制作这么简单的技能……
顺便广告下:
最近的考试完善后会将新写的T的进阶教程发上来,另外稍后还有个对于T范围内的局域化和参数传递的研究发上来
最后是这个技能
http://www.islga.org/bbs/read.php?tid=25587
这里有新的修改版 |
评分
-
查看全部评分
|