關(guān)于單位生命周期的一些技巧
測試環(huán)境:1.27a
單位生命周期指的是:

編輯器中給出了7種選項:
- 操縱死尸(Animate Dead)? ? ? ? ?'Buan'
- 疾病云霧(Disease Cloud)????? ? ?'Bapl' → 'Bplg'
- 自然之力(Force of Nature)? ? ? ?'BEfn'
-?類(Generic)??????????????????????????????'BTLF'
- 治療守衛(wèi)(Healing Ward)? ? ? ? ? 'Bhwd'
-?復活死尸(Raise Dead)?????????????'Brai'
- 水元素(Water Elemental)?????????'BHwe'
但還有一個可用Id并未列入:
- 召喚單位(Summoned Unit)? ? ? ?'BFig'
PS:吐槽一下原版翻譯(召喚出來的物品)想了半天也不知道要表達什么意思,所以改成通俗易懂的。
這些Id都有自己的效果,和物體編輯器中的效果一致,但無一例外,都會給目標單位添加召喚(UNIT_TYPE_SUMMONED)類別。
實際上觸發(fā)器中疾病云霧(Disease Cloud)的Id是錯誤的,應該是'Bplg'。
如果使用觸發(fā)器添加疾病云霧(Disease Cloud),則實際上添加了類(Generic)。
這是因為這個函數(shù)存在限制:
native?UnitApplyTimedLife?takes?unit?whichUnit,?integer?buffId,?real?duration?returns?nothing
buffId只能為上述8個Id,如果為其他Id,則強制添加類(Generic)。



通常情況下,擁有生命周期的單位都會在生命周期結(jié)束后死亡。
有時候我們可能想要取消一個單位的生命周期,比如試圖想讓一個擁有生命周期的單位擁有無限的持續(xù)時間。
https://www.hiveworkshop.com/threads/timed-life-and-unit-immortality.250357/
這個貼子講了如何讓單位躲過生命周期到期的審判,只需要單位的最大生命值為0。
YDWE的JAPI可以修改單位生命值為0,并且單位不會死亡。
還有一個方法是通過添加高數(shù)值的負數(shù)恢復指環(huán)來達到無法死亡的效果,不推薦。
來看一段示例,這是取消一個單位生命周期的函數(shù):
function?UnitCancelTimedLife?takes?unit?whichUnit,?integer?buffId?returns?boolean
????????????local?real?maxLife
????????????local?real?life
????????????local?boolean?b?=?false
????????????if?GetUnitAbilityLevel(whichUnit,?buffId)?<=?0?then
????????????????return?false
????????????endif
????????????set?maxLife?=?GetUnitState(whichUnit,?UNIT_STATE_MAX_LIFE)
????????????set?life?=?GetWidgetLife(whichUnit)
????????????call?SetUnitState(whichUnit,?UNIT_STATE_MAX_LIFE,?0.)
????????????set?b?=?UnitRemoveAbility(whichUnit,?buffId)
????????????call?SetUnitState(whichUnit,?UNIT_STATE_MAX_LIFE,?maxLife)
????????????call?SetWidgetLife(whichUnit,?life)
????????????return?b
endfunction
只需要用變量記錄下單位的當前血量和最大生命值,將單位最大生命值設(shè)置成0,然后刪除單位身上的生命周期BUFF,單位在0點最大生命值時無法死亡。刪除生命周期BUFF后將最大生命值和血量設(shè)置回去,便成功刪除掉生命周期。
T的一個示例:
UnitCancelTimedLife?
? ? 事件
? ? ? ? 單位 - 任意單位 被召喚(召喚單位)
? ? 條件
? ? ? ? ((觸發(fā)單位) 擁有 水元素) 等于 TRUE
? ? 動作
? ? ? ? [逆天] - 設(shè)置 [實數(shù)] loc_life = ((觸發(fā)單位) 的 生命值)
? ? ? ? [逆天] - 設(shè)置 [實數(shù)] loc_maxLife = ((觸發(fā)單位) 的 生命值)
? ? ? ? 單位 - 設(shè)置 (觸發(fā)單位) 的 最大生命值 [JAPI] 為 0.00
? ? ? ? 單位 - 刪除 水元素 從 (觸發(fā)單位)
? ? ? ? 單位 - 設(shè)置 (觸發(fā)單位) 的 最大生命值 [JAPI] 為 (loc_maxLife)
? ? ? ? 單位 - 設(shè)置 (觸發(fā)單位) 的 生命值 為 (loc_life)
PS:一些生命周期帶來的特性可能還會存在。