找回密码
 点一下
查看: 2966|回复: 8

获得单位指定武器当前攻击间隔的函数的小演示

[复制链接]
发表于 2011-4-14 09:39:55 | 显示全部楼层 |阅读模式
1.3.0中加入了一个新的官方函数。可以获得单位指定编号武器(因为一个单位可以不只一个武器)的攻速倍率。

注意这个攻击速度倍率计算的是单位身上的所有buff导致的攻击速度改变比例。所以。如果你一个机枪兵身上没buff,但是用科技升级提高了攻击速度,那么你会发现用这个函数获取攻速倍率的时候,返回的结果是1,也就是说没有任何改变。因为科技升级改变的是Catalog数据库。这相当于直接更改默认攻击速度。

所以要获得单位的当前攻击速度,我们必须通过CatalogFieldValueGet()来查询单位武器的默认攻击速度。而且查询的目标玩家必须是单位的拥有者,这样才能准确得到经过科技升级后的结果。

另外要注意的一点是,虽然在对战时单位的武器不会变动,但在很多地图里你可以通过触发器或者装备物品来改变指定单位所拥有的武器。所以通过Catalog查表来获得指定单位身上有哪些武器是不准确的。好在我们有函数可以直接获得单位身上指定编号的武器ID。

这样,如果我们要获得单位身上第N个武器的攻击速度,只需要先获取这第N个武器的模板ID,然后CatalogFieldValueGet()查询它的攻击间隔这一属性(属性路径为"Peiod"),将其转化为实数类型。并用1.3.0新加入的获得攻速倍率的函数来获得其攻击间隔倍率。然后将两个值相乘即可获得单位当前的实际攻击速度。


我们可以把这一过程作成一个通用函数方便调用:

[trigger]
Unit Weapon Speed
    Options: Function
    Return Type: Real
    Parameters
        Unit = (Triggering unit) <Unit>
        Weapon = 1 <Integer>
    Grammar Text: Unit Weapon Speed(Unit, Weapon)
    Hint Text: (None)
    Custom Script Code
    Local Variables
        WeaponLink = (Unit weapon Weapon) <Game Link - Weapon>
        DefaultSpeed = (Real((Value of Weapons (String(WeaponLink)) "Period" for player (Owner of Unit)))) <Real>
        Mutiplier = (Speed Multiplier of Unit weapon Weapon) <Real>
        Speed = (DefaultSpeed * Mutiplier) <Real>
    Actions
        General - If (Conditions) then do (Actions) else do (Actions)
            If
                Speed < 0.0625
            Then
                Variable - Set Speed = 0.0625
            Else
        General - Return Speed
[/trigger]
这个触发器帖的是英文版的,反正中文版编辑器的同学下载下面那个演示就能看到中文版。所以我就不重复帖中文版了。


大家可能注意到了。里面我多加了一个判断,当两数相乘的结果小于0.0625时,直接返回0.0625。因为我很久以前就说过,0.0625是SC2的一个游戏周期。所以攻击间隔的最小值只能是0.0625。就算你攻速倍率多么大,也无法将攻击间隔提升到小于0.0625。所以这里必须做个特殊处理。



附演示。中文版的同学可以直接打开地图来查看这个函数的结构。反正一样的。

进入地图后按ESC就可以显示那个机枪兵的攻击间隔。这个机枪兵身上被附加了2个buff,一个将攻击速度提升为200%,另一个将攻击速度提升为150%。

显示的时候保留了4位小数。如果你想和武器界面上显示的位数一样也可以考虑保留2位小数什么的。


Screenshot2011-04-14 09_41_57.jpg

Weapon Speed.SC2Map

171 KB, 下载次数: 63

发表于 2011-4-14 09:54:37 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2011-4-14 10:18:54 | 显示全部楼层
稍微修改了下~~重新传了~~
回复

使用道具 举报

发表于 2011-4-14 13:39:51 | 显示全部楼层
千恩万谢~头目真是个好淫阿~好好学习头目的演示。
回复

使用道具 举报

发表于 2011-4-14 13:43:01 | 显示全部楼层
可以得到当前CD时间吗?
回复

使用道具 举报

 楼主| 发表于 2011-4-14 13:43:40 | 显示全部楼层
可以呢~~
回复

使用道具 举报

发表于 2011-4-14 13:46:49 | 显示全部楼层
那就可以用来继续优化小狗闪避算法了
回复

使用道具 举报

发表于 2011-4-16 20:47:09 | 显示全部楼层
“虽然在对战时单位的武器不会变动,但在很多地图里你可以通过触发器或者装备物品来改变指定单位所拥有的武器。所以通过Catalog查表来获得指定单位身上有哪些武器是不准确的。”    头目 这句话怎么理解啊??为什么用Catalog查表来获得是不准确的?
回复

使用道具 举报

发表于 2011-4-16 21:38:04 | 显示全部楼层
因为那个查的是这个单位类型的数据。而具体到每一个单位的具体数值,不一定都和默认模板一样。

比如机枪兵的默认武器是高斯步枪。但是你可以换掉一个机枪兵的武器。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 12:16 , Processed in 0.040847 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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