找回密码
 点一下
查看: 4933|回复: 0

有关单位命令[issue系列函数]

  [复制链接]
发表于 2007-1-29 00:55:47 | 显示全部楼层 |阅读模式
介绍:
在War3中对游戏世界的单位的操控是用的命令系统。大多数即时战略游戏都如此。
玩家的键盘鼠标等等操作被GPI(游戏玩家接口)所截获,然后分析操作是给哪个单位下达了什么命令。
把命令(order)和命令接受者作为参数提交给命令系统。
命令系统则分析单位的状态属性等等数据,计算出该不该响应该命令,如果该,则如何响应该命令。
然后就是响应的过程,它们被提交给下一个系统。

其中命令系统完成的工作就是计算出该不该响应该命令,如果该,则如何响应该命令。
这包括寻径(如果是单位的移动命令),延迟响应(如果单位受到限制性效果,如昏迷),智能响应(如某些技能的施放点超出射程,单位的移动能力也未受到限制,则自动靠近施放点,直到足够施放技能),拒绝命令(如果技能的对象不接受技能,如攻击无敌目标,闪烁到黑雾地区等等命令)。。。等等等等

至于命令执行的效果不是由命令系统单独完成的,这里就不多说了

在War3的命令系统中,几乎所有的命令无外乎科技研究和施放技能。其他的命令还包括购买物品单位和生产单位。比较特殊的命令是玩家按下UI键。

Jass中几乎提供了所有关于命令的函数,它们是名字里带有issue的函数。

这篇文章研究的重点是技能的施放命令。
技能的施放命令字面量是字符串即文本,实际存放的是句柄值,这个句柄系统独立与handle和string。有的人说它的值只能在运行一次过后才能知道。其实原因很简单,因为句柄值是在装载了地图的技能数据后才发放的。所以就算是同样的技能在不同的地图中它们的orderId也可能是不一样的,但是只要地图的技能数据没有大的变化,orderId也不会变。

Jass的命令函数通常有两个版本,一个是使用字面量即字符串来做order参数,另一个则使用orderId来做参数。没有函数能在游戏开始前计算出orderString所对应的handle即orderId。也没有函数能根据orderId计算出orderString。

大家使用对象编辑器的技能页面编辑技能时就可以找到技能的一些有关命令的数据。
虽然它们只能用选的,但是它们实际是以string保存的。可以用w3mMaster来编辑。
这个技巧可以让你的T或Jass实现的自定义技能相互区分开。避免这个情况:如果一个单位身上有两个order一样的技能,你使用order来命令该单位使用技能,那个单位会傻掉,因为它不知道使用哪一个。

当然如果你没有给技能设置order,你也可以发布该技能的命令,只要你知道该技能的orderId。
获得orderId有很多办法,一般用GetIssuedOrderId(),这个函数能够取得触发命令的orderId。

一个技能可能有多个order,如激活和关闭自动释放技能,开关技能的order,释放技能的order。
Jass的命令函数不仅可以用来做AI,还可以用来做技能。
您需要登录后才可以回帖 登录 | 点一下

本版积分规则

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

GMT+8, 2024-12-4 02:56 , Processed in 0.122536 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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