偶久网

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

网站魔兽热门地图

查看: 12164|回复: 52

T的局域化与变量传递研究

  [复制链接]
ou99孽缘 title=
发表于 2010-12-14 18:05:20
本帖最后由 ou99孽缘 于 2010-12-14 18:10 编辑 1.gif
不要忽略了那个一闪的护盾效果!

可以看到,这个技能的效果并不复杂,

就是当圣骑士被近战单位攻击时,会几率击飞攻击单位

并且消耗魔法。同时,会在攻击单位和圣骑士之间出现一个护盾特效(举盾)

恩,这个技能并不复杂,但是完全用T(自定义代码也不使用)制作却很难

主要的难度在于两重局域化:对于击退的局域化(可以击退多个单位)和对于整个技能的局域化(多个英雄使用这个技能)

另外因为直接使用等待0.01秒作为击退循环间隔的效果特别不好(间隔太长,出现诡异的效果)

所以我们就需要单独出一个击退效果的T,而且这个T还要局域化(无变量冲突)

另外就是为了多个英雄能同时使用这个技能,我们需要将传递局域变量(不是真正的,只是不会冲突的变量)到击退的T

这个用J的话一般都是Return Bug+GameCache绑定计时器来制作的(猜测)

恩恩,反正完全用T做很难吧……

以上废话,可以不看

startreg
事件
时间 - 当游戏逝去 0.00 秒

条件
动作
循环动作[I]从 1 到 12, do (玩家 - 禁用 魔法书 对 (玩家 I))
单位组 - 选取 ((可用地图区域) 内的所有单位) 内所有单位 (触发器 - 为 attacked <预设> 添加事件: (单位 - (选取单位) 接受伤害))



reg
事件
单位 - 任意单位进入 (可用地图区域)

条件
((进入的单位) 的类型) 不等于 计时马甲
动作
触发器 - 为 attacked <预设> 添加事件: (单位 - (进入的单位) 接受伤害)


skillonandoff
事件
单位 - 任意单位 发布无目标指令

条件
Or - 任意条件成立
条件
(转换 (发布的命令ID) 为命令字符串) 等于 manashieldon
(转换 (发布的命令ID) 为命令字符串) 等于 manashieldoff



动作
如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作)
If - 条件
(转换 (发布的命令ID) 为命令字符串) 等于 manashieldon

Then - 动作
单位 - 添加 魔法书 给 (发布命令的单位)

Else - 动作

如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作)
If - 条件
(转换 (发布的命令ID) 为命令字符串) 等于 manashieldoff

Then - 动作
单位 - 删除 魔法书 从 (发布命令的单位)
单位 - 删除 近战抵抗护盾 从 (发布命令的单位)

Else - 动作





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 - 动作
单位 - 删除 魔法书 从 (伤害来源)
单位 - 删除 近战抵抗护盾 从 (伤害来源)


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

如果你仔细看了上面的T或者发上来的技能的话,你会发现我是用单位的生命周期来代替计时器的

关于生命周期的精确度请看这个测试
时间测试.w3x (17.09 KB, 下载次数: 94)

效果如图

1.jpg


面是执行100次0.01秒生命周期的总共时间

从此我们可以看出使用生命周期在精确度上是不必计时器差多少的

只是在运行中消耗更多的资源,好处是可以绑定很多的东西!

整个技能的局域化简单来说是用事件响应来局域化,

通过事件响应连接到(就是相关索引,如单位的自定义值是单位到整数的连接)的整数来传递数组序号以传递参数

而制作的技能。
教程隐藏
1-101121220343.rar (22.96 KB, 下载次数: 108)











ou99孽缘 title=
 楼主| 发表于 2010-12-14 18:11:05
{:6_325:}
jostu
发表于 2011-1-20 21:15:43
支持。以后看
UltraBB
发表于 2011-2-15 17:55:03
呃 这也太麻烦了
ww55032
发表于 2011-2-19 10:22:52
{:6_287:}
极道神光
发表于 2011-3-13 04:52:32
{:6_258:}虾米啊
ck88988
发表于 2011-4-9 13:47:30
感谢楼主分享
极道神光
发表于 2011-4-10 04:18:27
{:6_325:}{:6_325:}{:6_325:}
鬼子
发表于 2011-4-10 11:15:02
很强大的说
angyuang
发表于 2011-5-9 21:22:45
^^^去看看啊啊!!!!
快速回复 返回顶部 返回列表