偶久网

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

网站魔兽热门地图

查看: 8926|回复: 19

击退技能教程-纯T版

  [复制链接]
ou99孽缘 title=
发表于 2010-12-14 18:32:28
概念:
击退=突进,简单来说就是快速冲刺。

教程使用UI:YDWE1.17,没有注入额外代码

首先大家要明白一个原理,电脑中的平滑移动只是快速进行位置变化,欺骗人类眼睛的1/24秒的最高判定范围,使图象看起来是在做"连续动作"。因此明白这个道理后,做击退也就没那么困难了。
(PS.传说有些魔术师的手速移动能超出1/24秒,因此能在无道具辅助下做出匪夷所思的事情)


击退制作要点:
1、循环每段时间设置坐标的方法
2、遇到障碍物停下

设置坐标的优势在于效率高且不用排泄,数学不好不懂坐标的同学也没关系,只要记住以下公式就能应付击退了。向着单位面向角度移动20距离,X、Y设置如下
Set X = ((unit所在X轴坐标) + ((Cos(面向角度)) x 20))
Set Y = ((unit所在Y轴坐标) + ((Sin(面向角度)) x 20))
更多坐标知识请看:https://www.ou99.com/thread-82447-1-1.html

还是不懂的同学也没关系,照着做的OK

连贯移动只需要循环计时器,然后按照上面的方法设置坐标的能达到连贯移动了。

接下来是击退一直以来存在的难点,即判定不可击退地区,比如悬崖、树木、水域、单位等等,无视这些的话会导致被击退单位卡住无法动弹。

以前的方法是设置一个“探路者”的角色先行移动,并匹配“探路者”的实际坐标与所要移动的坐标是否一致,不一致的话就停止击退,这个方法虽然能解决判定问题,但是效率的话仍稍有欠缺。因此在这里感谢<大师与天才>前不久发明的布尔值建造法,能更高效且巧妙地完成这个判断。

原理:
1、发布命令给单位会返回一个成功与否的布尔值。
2、建造单位(不是建筑)需要所建造区域符合单位的移动类型与触碰。
3、拥有“幽灵”的单位不会阻碍单位的建造。

因此,我们先来设置一个农民马甲,把人族农民Ctrl+C和Ctrl+V一下,并设置以下项目:
1、战斗-允许攻击模式-无
2、技能-普通-幽灵(可见的)、蝗虫、修理(人族)
3、显示-模型文件-none.mdl
4、显示-阴影图象(单位)-没有
5、显示-特殊效果-没有
6、状态-单位类别-无
7、状态-黄金消耗-无
8、状态-占用人口-0
9、状态-生命回复-(-1000)
10、状态-视野范围(白天)-0
11、状态-视野范围(夜晚)-0
12、状态-隐藏小地图显示-TRUE
13、科技树-可建造建筑-(就现在这个单位,自己建造自己)
14、移动-基础速度-0
15、路径-碰撞体积-32

这样一个进化版的探路者就出现了!接下来还要进行一个重要的事情,在物体编辑器里按下Ctrl+D,这时候会发现单位名字前多了一些字符,如下图


1.jpg
那么我们把它们记录下来,比如我的是h000

接下来进入触发部分

新建变量:
计时器Timer——(循环时间设置坐标)
单位Unit——(击退单位)
实数Degree——(击退方向)
实数Speed——(击退速度,即每次循环时间内移动的距离)
实数Distance——(击退的总距离)
实数X——(击退的X坐标)
实数Y——(击退的Y坐标)
布尔Boolean——(判断前方是否有障碍物)

下面是我做的事例,启动条件是我输入一个数值,然后圣骑士向前突进这个数值

start
┣━事件
┃   └—玩家 - 玩家1(红色) 输入 <空字符串> ,信息过滤方式 包含字符串
┣━条件
┗━动作
     ├—计时器 - 启动 Timer,应用计时方式: 循环,计时周期为 0.02 秒
     ├—Set Unit = 圣骑士 0001 <预设>
     ├—Set Degree = (Unit 的面向角度)
     ├—Set Speed = 20.00
     ├—Set Distance = (转换 (输入的聊天信息) 为实数)
     └—单位 - 添加 幽灵 (可见的) 给 Unit

rush
┣━事件
┃   └—时间 - Timer 到期
┣━条件
┗━动作

注释:这里所用的“COS”“SIN”都是后缀没有“<New>”的那个

     ├—Set X = ((Unit 所在X轴坐标) + ((Cos(Degree)) x Speed))
     ├—Set Y = ((Unit 所在Y轴坐标) + ((Sin(Degree)) x Speed))

注释:由于YD还没有加入获取命令成功布尔的功能,因此接下来需要我们自己运用自定义代码

     ├—自定义代码:   set udg_Boolean=IssueBuildOrderById( CreateUnit(GetOwningPlayer(udg_Unit), 'h000', udg_X, udg_Y, udg_Degree), 'h000', udg_X, udg_Y )

注释:这段代码是新建农民建造自己的命令,可以看到我们刚刚在物编里记录的字符“h000”被调用了2次,这就是你们以后要修改的地方,其它“Boolean、Unit、X、Y”这些变量按照你设置的变量名改动就OK,绝对不能去掉“udg_”

     ├—如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作)
   │     If - 条件
   │         Or - 任意条件成立
   │             条件
   │                 Boolean 等于 FALSE
   │                 Distance 小于或等于 0.00
   │     Then - 动作
   │         计时器 - 暂停 Timer
   │         单位 - 删除 幽灵 (可见的) 从 Unit
   │         跳过剩余动作
   │     Else - 动作

注释:上面这个判定就是用来判定可否可以击退过去。

     ├—单位 - 立即移动 Unit 到(X,Y)
     ├—特殊效果 - 删除 (新建特效 Abilities\Spells\Human\HolyBolt\HolyBoltSpecialArt.mdl 在(X,Y)处)

注释:通过判定后可以为自己的击退加些效果,比如我这里就加入的神圣之光的特效,记得排泄。

     ├—Set Distance = (Distance - Speed)
     └—如果(所有的条件成立) 则运行 (Then - 动作) 否则运行 (Else - 运作)
            If - 条件
                Distance 小于或等于 0.00
            Then - 动作
                单位 - 删除 幽灵 (可见的) 从 Unit
                计时器 - 暂停 Timer
            Else - 动作

注释:这个判定是计算是否到达击退最大距离从而停止击退

结语:
那么如此简洁的一个击退触发就完成了,我们可以自己制作所需要的击退触发,而不必依赖YD死板的击退函数,大家可以在我创建特效的位置尽情增加想需要的动作。

ou99孽缘 title=
 楼主| 发表于 2010-12-14 18:33:03
{:6_306:}
轮回の爱
发表于 2011-1-15 11:24:30
{:6_256:}{:6_256:}
轮回の爱
发表于 2011-1-15 11:24:53
走在贴吧边,赚到一毛钱,直接把它收进腰兜里面。
极道神光
发表于 2011-2-9 15:52:55
{:6_274:}{:6_274:}{:6_274:}{:6_274:}{:6_274:}
极道神光
发表于 2011-2-11 22:34:38
{:6_325:}
发表于 2011-4-17 02:53:11
神马神马的
ou99孽缘 title=
 楼主| 发表于 2011-4-22 09:10:19
我发现  这个触发有点错误
   帮我看看  
Btlost
发表于 2011-6-14 22:48:25
不能击退啊。晕死!
gw96123
发表于 2011-10-16 01:51:40
.................
快速回复 返回顶部 返回列表