|
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位小数什么的。
|
|