warscript 0.0.1-dev.aaf0a9d → 0.0.1-dev.ac556d2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/attributes.d.ts +12 -0
  2. package/attributes.lua +16 -0
  3. package/binaryreader.d.ts +1 -0
  4. package/binaryreader.lua +3 -0
  5. package/core/types/effect.d.ts +13 -3
  6. package/core/types/effect.lua +116 -17
  7. package/core/types/frame.d.ts +8 -1
  8. package/core/types/frame.lua +93 -1
  9. package/core/types/group.d.ts +0 -1
  10. package/core/types/handle.d.ts +2 -1
  11. package/core/types/handle.lua +5 -0
  12. package/core/types/image.d.ts +0 -1
  13. package/core/types/missile.d.ts +2 -2
  14. package/core/types/missile.lua +8 -2
  15. package/core/types/unit.lua +8 -0
  16. package/core/util.d.ts +1 -1
  17. package/core/util.lua +12 -0
  18. package/decl/index.d.ts +1 -0
  19. package/engine/ability.d.ts +1 -1
  20. package/engine/behavior.d.ts +10 -10
  21. package/engine/behavior.lua +6 -6
  22. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  23. package/engine/behaviour/ability/always-enabled.lua +31 -0
  24. package/engine/behaviour/ability/apply-buff.d.ts +3 -5
  25. package/engine/behaviour/ability/apply-unit-behavior.d.ts +13 -4
  26. package/engine/behaviour/ability/apply-unit-behavior.lua +31 -9
  27. package/engine/behaviour/ability/damage.d.ts +33 -11
  28. package/engine/behaviour/ability/damage.lua +89 -31
  29. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  30. package/engine/behaviour/ability/emulate-impact.lua +29 -0
  31. package/engine/behaviour/ability/heal.d.ts +33 -6
  32. package/engine/behaviour/ability/heal.lua +89 -10
  33. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  34. package/engine/behaviour/ability/instant-impact.lua +4 -15
  35. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  36. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  37. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  38. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  39. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  40. package/engine/behaviour/ability/restore-mana.lua +29 -0
  41. package/engine/behaviour/ability.d.ts +16 -2
  42. package/engine/behaviour/ability.lua +88 -12
  43. package/engine/behaviour/unit/stun-immunity.d.ts +0 -1
  44. package/engine/behaviour/unit.d.ts +8 -2
  45. package/engine/behaviour/unit.lua +27 -0
  46. package/engine/buff.d.ts +68 -21
  47. package/engine/buff.lua +276 -90
  48. package/engine/game-map.d.ts +7 -0
  49. package/engine/game-map.lua +32 -0
  50. package/engine/internal/ability.d.ts +17 -14
  51. package/engine/internal/ability.lua +79 -76
  52. package/engine/internal/item/ability.lua +90 -0
  53. package/engine/internal/item+owner.lua +2 -2
  54. package/engine/internal/mechanics/ability-duration.d.ts +1 -3
  55. package/engine/internal/mechanics/ability-duration.lua +2 -0
  56. package/engine/internal/mechanics/cast-ability.d.ts +2 -0
  57. package/engine/internal/mechanics/cast-ability.lua +86 -0
  58. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  59. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  60. package/engine/internal/unit/ability.d.ts +10 -1
  61. package/engine/internal/unit/ability.lua +36 -14
  62. package/engine/internal/unit/bonus.d.ts +9 -8
  63. package/engine/internal/unit/bonus.lua +6 -1
  64. package/engine/internal/unit/detach-missiles.d.ts +7 -0
  65. package/engine/internal/unit/detach-missiles.lua +30 -0
  66. package/engine/internal/unit/item.d.ts +24 -0
  67. package/engine/internal/unit/item.lua +79 -0
  68. package/engine/internal/unit/main-selected.d.ts +13 -0
  69. package/engine/internal/unit/main-selected.lua +51 -0
  70. package/engine/internal/unit+ability.lua +2 -2
  71. package/engine/internal/unit+transport.lua +4 -10
  72. package/engine/internal/unit-missile-launch.lua +25 -6
  73. package/engine/internal/unit.d.ts +58 -16
  74. package/engine/internal/unit.lua +346 -126
  75. package/engine/internal/utility.lua +12 -0
  76. package/engine/local-client.d.ts +7 -2
  77. package/engine/local-client.lua +82 -0
  78. package/engine/object-data/auxiliary/attachment-preset.d.ts +0 -1
  79. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  80. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  81. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  82. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  83. package/engine/object-data/entry/ability-type/blink.d.ts +10 -0
  84. package/engine/object-data/entry/ability-type/blink.lua +39 -0
  85. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  86. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  87. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  88. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  89. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  90. package/engine/object-data/entry/ability-type.d.ts +1 -1
  91. package/engine/object-data/entry/ability-type.lua +9 -12
  92. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  93. package/engine/object-data/entry/buff-type/applicable.lua +27 -71
  94. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  95. package/engine/object-data/entry/buff-type.d.ts +0 -1
  96. package/engine/object-data/entry/destructible-type.d.ts +0 -1
  97. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  98. package/engine/object-data/entry/item-type.d.ts +14 -1
  99. package/engine/object-data/entry/item-type.lua +91 -0
  100. package/engine/object-data/entry/lightning-type.d.ts +0 -1
  101. package/engine/object-data/entry/unit-type.d.ts +42 -2
  102. package/engine/object-data/entry/unit-type.lua +378 -50
  103. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  104. package/engine/object-data/entry/upgrade.d.ts +0 -1
  105. package/engine/object-data/entry.d.ts +2 -3
  106. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  107. package/engine/object-field/ability.d.ts +28 -6
  108. package/engine/object-field/ability.lua +57 -1
  109. package/engine/object-field/unit.d.ts +1 -0
  110. package/engine/object-field/unit.lua +3 -0
  111. package/engine/object-field.d.ts +6 -5
  112. package/engine/object-field.lua +37 -15
  113. package/engine/random.d.ts +1 -0
  114. package/engine/random.lua +9 -0
  115. package/engine/standard/entries/unit-type.d.ts +42 -1
  116. package/engine/standard/entries/unit-type.lua +42 -1
  117. package/engine/standard/fields/ability.d.ts +3 -1
  118. package/engine/standard/fields/ability.lua +3 -1
  119. package/engine/unit.d.ts +3 -0
  120. package/engine/unit.lua +12 -2
  121. package/event.d.ts +2 -3
  122. package/event.lua +9 -5
  123. package/global/vec2.lua +1 -0
  124. package/index.d.ts +1 -0
  125. package/index.lua +1 -0
  126. package/lualib_bundle.lua +146 -42
  127. package/math/vec2.d.ts +2 -9
  128. package/math.d.ts +0 -2
  129. package/net/socket.d.ts +7 -1
  130. package/net/socket.lua +45 -4
  131. package/network.d.ts +1 -0
  132. package/network.lua +3 -2
  133. package/objutil/ability.d.ts +0 -1
  134. package/objutil/buff.d.ts +0 -1
  135. package/objutil/buff.lua +1 -1
  136. package/objutil/object.d.ts +0 -1
  137. package/objutil/unit.d.ts +0 -1
  138. package/package.json +13 -14
  139. package/patch-lua.d.ts +0 -0
  140. package/patch-lua.lua +10 -0
  141. package/property.d.ts +55 -0
  142. package/property.lua +374 -0
  143. package/string.d.ts +30 -0
  144. package/string.lua +14 -0
  145. package/util/stream.d.ts +0 -1
  146. package/utility/arrays.d.ts +11 -5
  147. package/utility/arrays.lua +34 -3
  148. package/utility/bit-set.d.ts +0 -2
  149. package/utility/lazy.d.ts +2 -0
  150. package/utility/lazy.lua +14 -0
  151. package/utility/linked-set.d.ts +12 -3
  152. package/utility/linked-set.lua +21 -2
  153. package/utility/lua-maps.d.ts +1 -2
  154. package/utility/lua-sets.d.ts +1 -2
  155. package/utility/types.d.ts +3 -2
  156. package/core/mapbounds.d.ts +0 -8
  157. package/core/mapbounds.lua +0 -12
@@ -2,7 +2,6 @@ local ____lualib = require("lualib_bundle")
2
2
  local __TS__ArrayMap = ____lualib.__TS__ArrayMap
3
3
  local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
4
4
  local __TS__Class = ____lualib.__TS__Class
5
- local __TS__New = ____lualib.__TS__New
6
5
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
7
6
  local __TS__InstanceOf = ____lualib.__TS__InstanceOf
8
7
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
@@ -11,7 +10,10 @@ local ____exports = {}
11
10
  local ____handle = require("core.types.handle")
12
11
  local Handle = ____handle.Handle
13
12
  local ____ability = require("engine.internal.item.ability")
13
+ local abilityActionDummy = ____ability.abilityActionDummy
14
14
  local doAbilityAction = ____ability.doAbilityAction
15
+ local doAbilityActionForceDummy = ____ability.doAbilityActionForceDummy
16
+ local startItemCooldown = ____ability.startItemCooldown
15
17
  local getUnitAbilityLevel = GetUnitAbilityLevel
16
18
  local setUnitAbilityLevel = SetUnitAbilityLevel
17
19
  local setAbilityIntegerField = BlzSetAbilityIntegerField
@@ -33,7 +35,7 @@ local getAbilityStringLevelField = BlzGetAbilityStringLevelField
33
35
  local getUnitAbilityCooldownRemaining = BlzGetUnitAbilityCooldownRemaining
34
36
  local startUnitAbilityCooldown = BlzStartUnitAbilityCooldown
35
37
  local getHandleId = GetHandleId
36
- local getItemAbility = BlzGetItemAbility
38
+ local unitHideAbility = BlzUnitHideAbility
37
39
  local match = string.match
38
40
  local ____type = _G.type
39
41
  local ____tostring = _G.tostring
@@ -151,55 +153,6 @@ local orders = postcompile(function()
151
153
  end
152
154
  return orders
153
155
  end)
154
- local RealFields = __TS__Class()
155
- RealFields.name = "RealFields"
156
- function RealFields.prototype.____constructor(self, handle)
157
- self.handle = handle
158
- end
159
- function RealFields.prototype.set(self, field, value)
160
- return BlzSetAbilityRealField(self.handle, field, value)
161
- end
162
- function RealFields.prototype.get(self, field)
163
- return BlzGetAbilityRealField(self.handle, field)
164
- end
165
- function RealFields.prototype.has(self, field)
166
- local handle = self.handle
167
- return BlzSetAbilityRealField(
168
- handle,
169
- field,
170
- BlzGetAbilityRealField(handle, field)
171
- )
172
- end
173
- local RealLevelFields = __TS__Class()
174
- RealLevelFields.name = "RealLevelFields"
175
- function RealLevelFields.prototype.____constructor(self, handle, level)
176
- self.handle = handle
177
- self.level = level
178
- end
179
- function RealLevelFields.prototype.set(self, field, value)
180
- return BlzSetAbilityRealLevelField(self.handle, field, self.level, value)
181
- end
182
- function RealLevelFields.prototype.get(self, field)
183
- return BlzGetAbilityRealLevelField(self.handle, field, self.level)
184
- end
185
- function RealLevelFields.prototype.has(self, field)
186
- local handle = self.handle
187
- return BlzSetAbilityRealLevelField(
188
- handle,
189
- field,
190
- 0,
191
- BlzGetAbilityRealLevelField(handle, field, 0)
192
- )
193
- end
194
- local realLevelMetatable = {__index = self}
195
- local levelDescriptors = {realFields = function(self, handle, level)
196
- return __TS__New(RealLevelFields, handle, level)
197
- end}
198
- local levelMetatable = {__index = function(self, key)
199
- local fields = levelDescriptors[key](levelDescriptors, self.handle, self.level)
200
- rawset(self, key, fields)
201
- return fields
202
- end}
203
156
  local fieldGetters = {
204
157
  abilityintegerfield = function(ability, field)
205
158
  return getAbilityIntegerField(ability.handle, field)
@@ -346,43 +299,26 @@ __TS__SetDescriptor(
346
299
  )
347
300
  __TS__SetDescriptor(
348
301
  Ability.prototype,
349
- "orderId",
302
+ "orderTypeStringId",
350
303
  {get = function(self)
351
304
  local field = orderIdFieldByParentTypeId[self.parentTypeId]
352
- return order2orderId(field ~= nil and getAbilityStringLevelField(self.handle, ABILITY_SLF_BASE_ORDER_ID_NCL6, self.level) or (orders[self.parentTypeId] or ""))
305
+ return field ~= nil and getAbilityStringLevelField(self.handle, field, self.level) or (orders[self.parentTypeId] or "")
353
306
  end},
354
307
  true
355
308
  )
356
309
  __TS__SetDescriptor(
357
310
  Ability.prototype,
358
- "realFields",
311
+ "orderTypeId",
359
312
  {get = function(self)
360
- local realFields = __TS__New(RealFields, self.handle)
361
- rawset(self, "realFields", realFields)
362
- return realFields
313
+ return order2orderId(self.orderTypeStringId)
363
314
  end},
364
315
  true
365
316
  )
366
317
  __TS__SetDescriptor(
367
318
  Ability.prototype,
368
- "levels",
319
+ "levelCount",
369
320
  {get = function(self)
370
- local handle = self.handle
371
- local levels = setmetatable(
372
- {},
373
- {
374
- __len = function(self)
375
- return BlzGetAbilityIntegerField(handle, ABILITY_IF_LEVELS)
376
- end,
377
- __index = function(self, i)
378
- local level = setmetatable({handle = handle, level = i - 1}, levelMetatable)
379
- self[i] = level
380
- return level
381
- end
382
- }
383
- )
384
- rawset(self, "levels", levels)
385
- return levels
321
+ return self:getField(ABILITY_IF_LEVELS)
386
322
  end},
387
323
  true
388
324
  )
@@ -393,6 +329,17 @@ __TS__SetDescriptor(
393
329
  end},
394
330
  true
395
331
  )
332
+ __TS__SetDescriptor(
333
+ Ability.prototype,
334
+ "cooldownRemaining",
335
+ {
336
+ get = function(self)
337
+ end,
338
+ set = function(self, cooldownRemaining)
339
+ end
340
+ },
341
+ true
342
+ )
396
343
  __TS__ObjectDefineProperty(
397
344
  Ability,
398
345
  "onCreate",
@@ -416,6 +363,8 @@ function UnrecognizedAbility.prototype.____constructor(self, typeId, owner)
416
363
  UnrecognizedAbility.____super.prototype.____constructor(self, nil, typeId)
417
364
  self.owner = owner
418
365
  end
366
+ function UnrecognizedAbility.prototype.interruptCast(self)
367
+ end
419
368
  __TS__SetDescriptor(
420
369
  UnrecognizedAbility.prototype,
421
370
  "level",
@@ -424,6 +373,18 @@ __TS__SetDescriptor(
424
373
  end},
425
374
  true
426
375
  )
376
+ __TS__SetDescriptor(
377
+ UnrecognizedAbility.prototype,
378
+ "cooldownRemaining",
379
+ {
380
+ get = function(self)
381
+ return 0
382
+ end,
383
+ set = function(self, _)
384
+ end
385
+ },
386
+ true
387
+ )
427
388
  ____exports.UnitAbility = __TS__Class()
428
389
  local UnitAbility = ____exports.UnitAbility
429
390
  UnitAbility.name = "UnitAbility"
@@ -433,6 +394,15 @@ function UnitAbility.prototype.____constructor(self, handle, typeId, owner)
433
394
  self.owner = owner
434
395
  self.u = owner.handle
435
396
  end
397
+ function UnitAbility.prototype.incrementHideCounter(self)
398
+ unitHideAbility(self.u, self.typeId, true)
399
+ end
400
+ function UnitAbility.prototype.decrementHideCounter(self)
401
+ unitHideAbility(self.u, self.typeId, false)
402
+ end
403
+ function UnitAbility.prototype.interruptCast(self)
404
+ self.owner:interruptCast(self.typeId)
405
+ end
436
406
  __TS__SetDescriptor(
437
407
  UnitAbility.prototype,
438
408
  "level",
@@ -453,8 +423,8 @@ __TS__SetDescriptor(
453
423
  get = function(self)
454
424
  return getUnitAbilityCooldownRemaining(self.u, self.typeId)
455
425
  end,
456
- set = function(self, v)
457
- startUnitAbilityCooldown(self.u, self.typeId, v)
426
+ set = function(self, cooldownRemaining)
427
+ startUnitAbilityCooldown(self.u, self.typeId, cooldownRemaining)
458
428
  end
459
429
  },
460
430
  true
@@ -479,6 +449,11 @@ end
479
449
  local function setAbilityField(_, ability, field, levelOrValue, value)
480
450
  return ____exports.Ability.prototype.setField(ability, field, levelOrValue, value)
481
451
  end
452
+ local function getAbilityCooldown(_, abilityTypeId)
453
+ return getUnitAbilityCooldownRemaining(abilityActionDummy, abilityTypeId)
454
+ end
455
+ local function doNothing()
456
+ end
482
457
  ____exports.ItemAbility = __TS__Class()
483
458
  local ItemAbility = ____exports.ItemAbility
484
459
  ItemAbility.name = "ItemAbility"
@@ -506,6 +481,13 @@ function ItemAbility.prototype.setField(self, field, levelOrValue, value)
506
481
  value
507
482
  )
508
483
  end
484
+ function ItemAbility.prototype.interruptCast(self)
485
+ local item = self.owner
486
+ local ____doAbilityActionForceDummy_4 = doAbilityActionForceDummy
487
+ local ____item_handle_3 = item.handle
488
+ local ____opt_1 = item.owner
489
+ ____doAbilityActionForceDummy_4(____item_handle_3, ____opt_1 and ____opt_1.handle, doNothing)
490
+ end
509
491
  __TS__SetDescriptor(
510
492
  ItemAbility.prototype,
511
493
  "level",
@@ -514,6 +496,27 @@ __TS__SetDescriptor(
514
496
  end},
515
497
  true
516
498
  )
499
+ __TS__SetDescriptor(
500
+ ItemAbility.prototype,
501
+ "cooldownRemaining",
502
+ {
503
+ get = function(self)
504
+ local item = self.owner
505
+ local ____doAbilityActionForceDummy_8 = doAbilityActionForceDummy
506
+ local ____item_handle_7 = item.handle
507
+ local ____opt_5 = item.owner
508
+ return ____doAbilityActionForceDummy_8(____item_handle_7, ____opt_5 and ____opt_5.handle, getAbilityCooldown, self.typeId)
509
+ end,
510
+ set = function(self, cooldownRemaining)
511
+ local item = self.owner
512
+ local ____startItemCooldown_12 = startItemCooldown
513
+ local ____item_handle_11 = item.handle
514
+ local ____opt_9 = item.owner
515
+ ____startItemCooldown_12(____item_handle_11, ____opt_9 and ____opt_9.handle, cooldownRemaining)
516
+ end
517
+ },
518
+ true
519
+ )
517
520
  __TS__ObjectDefineProperty(
518
521
  ItemAbility,
519
522
  "onCreate",
@@ -1,16 +1,57 @@
1
1
  local ____exports = {}
2
+ local restoreCooldownGroup
2
3
  local ____player = require("core.types.player")
3
4
  local Player = ____player.Player
4
5
  local ____dummy = require("objutil.dummy")
5
6
  local dummyUnitId = ____dummy.dummyUnitId
7
+ local ____utility = require("engine.internal.utility")
8
+ local findUnitItemSlot = ____utility.findUnitItemSlot
9
+ local ____blank = require("engine.object-data.entry.item-type.blank")
10
+ local BlankItemType = ____blank.BlankItemType
11
+ local ____object_2Ddata_2Dentry_2Did_2Dgenerator = require("engine.object-data.utility.object-data-entry-id-generator")
12
+ local abilityTypeIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.abilityTypeIdGenerator
13
+ local ____math = require("math")
14
+ local MINIMUM_POSITIVE_NORMALIZED_FLOAT = ____math.MINIMUM_POSITIVE_NORMALIZED_FLOAT
15
+ local ____timer = require("core.types.timer")
16
+ local Timer = ____timer.Timer
6
17
  local isItemOwned = IsItemOwned
7
18
  local isItemPowerup = IsItemPowerup
8
19
  local getItemX = GetItemX
9
20
  local getItemY = GetItemY
21
+ local setAbilityRealLevelField = BlzSetAbilityRealLevelField
22
+ local setItemIntegerField = BlzSetItemIntegerField
23
+ local getItemIntegerField = BlzGetItemIntegerField
10
24
  local setItemBooleanField = BlzSetItemBooleanField
11
25
  local setItemPosition = SetItemPosition
12
26
  local unitAddItem = UnitAddItem
27
+ local unitDropItemSlot = UnitDropItemSlot
13
28
  local unitRemoveItem = UnitRemoveItem
29
+ local unitUseItem = UnitUseItem
30
+ local unitResetCooldown = UnitResetCooldown
31
+ local COOLDOWN_STARTER_ABILITY_TYPE_ID = compiletime(function()
32
+ if not currentMap then
33
+ return 0
34
+ end
35
+ local abilityType = currentMap.objects.ability:newObject(
36
+ util.id2s(abilityTypeIdGenerator:next()),
37
+ "Absk"
38
+ )
39
+ abilityType["bsk1+0"] = 0
40
+ abilityType["bsk2+0"] = 0
41
+ abilityType["bsk3+0"] = 0
42
+ abilityType["amcs+0"] = 0
43
+ abilityType["adur+0"] = MINIMUM_POSITIVE_NORMALIZED_FLOAT
44
+ abilityType["ahdu+0"] = MINIMUM_POSITIVE_NORMALIZED_FLOAT
45
+ return util.s2id(abilityType.id)
46
+ end)
47
+ local COOLDOWN_STARTER_ITEM_TYPE_ID = compiletime(function()
48
+ local itemType = BlankItemType:create()
49
+ itemType.name = "[Warscript/Dummy] Item Cooldown Starter"
50
+ itemType.abilityTypeIds = {COOLDOWN_STARTER_ABILITY_TYPE_ID}
51
+ itemType.cooldownGroupId = COOLDOWN_STARTER_ABILITY_TYPE_ID
52
+ itemType.activelyUsed = true
53
+ return itemType.id
54
+ end)
14
55
  local dummy = assert(CreateUnit(
15
56
  Player.neutralVictim.handle,
16
57
  dummyUnitId,
@@ -18,7 +59,30 @@ local dummy = assert(CreateUnit(
18
59
  0,
19
60
  270
20
61
  ))
62
+ local cooldownStarterItem = UnitAddItemById(dummy, COOLDOWN_STARTER_ITEM_TYPE_ID)
63
+ local cooldownStarterAbility = BlzGetItemAbility(cooldownStarterItem, COOLDOWN_STARTER_ABILITY_TYPE_ID)
21
64
  ShowUnit(dummy, false)
65
+ local function startItemCooldownInternal(handle, cooldown)
66
+ local cooldownGroup = getItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP)
67
+ setItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP, COOLDOWN_STARTER_ABILITY_TYPE_ID)
68
+ setAbilityRealLevelField(cooldownStarterAbility, ABILITY_RLF_COOLDOWN, 0, cooldown)
69
+ unitResetCooldown(dummy)
70
+ unitUseItem(dummy, cooldownStarterItem)
71
+ Timer:run(restoreCooldownGroup, handle, cooldownGroup)
72
+ end
73
+ restoreCooldownGroup = function(handle, cooldownGroup)
74
+ if getItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP) == COOLDOWN_STARTER_ABILITY_TYPE_ID then
75
+ setItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP, cooldownGroup)
76
+ end
77
+ end
78
+ ---
79
+ -- @internal For use by internal systems only.
80
+ ____exports.startItemCooldown = function(handle, owner, cooldown)
81
+ ____exports.doAbilityActionForceDummy(handle, owner, startItemCooldownInternal, cooldown)
82
+ end
83
+ ---
84
+ -- @internal For use by internal systems only.
85
+ ____exports.abilityActionDummy = dummy
22
86
  ---
23
87
  -- @internal For use by internal systems only.
24
88
  ____exports.doAbilityAction = function(handle, action, ...)
@@ -45,4 +109,30 @@ ____exports.doAbilityAction = function(handle, action, ...)
45
109
  end
46
110
  return result
47
111
  end
112
+ ---
113
+ -- @internal For use by internal systems only.
114
+ ____exports.doAbilityActionForceDummy = function(handle, owner, action, ...)
115
+ if owner == nil then
116
+ return ____exports.doAbilityAction(handle, action, ...)
117
+ end
118
+ local slot = findUnitItemSlot(owner, handle)
119
+ if slot == nil then
120
+ return ____exports.doAbilityAction(handle, action, ...)
121
+ end
122
+ local isPowerup
123
+ if isItemPowerup(handle) then
124
+ setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, false)
125
+ isPowerup = true
126
+ end
127
+ unitRemoveItem(owner, handle)
128
+ unitAddItem(dummy, handle)
129
+ local result = action(handle, ...)
130
+ unitRemoveItem(dummy, handle)
131
+ unitAddItem(owner, handle)
132
+ unitDropItemSlot(owner, handle, slot)
133
+ if isPowerup then
134
+ setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
135
+ end
136
+ return result
137
+ end
48
138
  return ____exports
@@ -6,10 +6,10 @@ local Item = ____item.Item
6
6
  local ____unit = require("engine.internal.unit")
7
7
  local Unit = ____unit.Unit
8
8
  local ownerByItem = setmetatable({}, {__mode = "kv"})
9
- Unit.onItemPickup:addListener(function(unit, item)
9
+ Unit.itemPickedUpEvent:addListener(function(unit, item)
10
10
  ownerByItem[item] = unit
11
11
  end)
12
- Unit.onItemDrop:addListener(function(unit, item)
12
+ Unit.itemDroppedEvent:addListener(function(unit, item)
13
13
  ownerByItem[item] = nil
14
14
  end)
15
15
  __TS__ObjectDefineProperty(
@@ -1,4 +1,2 @@
1
1
  /** @noSelfInFile */
2
- import { Ability } from "../ability";
3
- import { Unit } from "../unit";
4
- export declare const getAbilityDuration: (ability: Ability, target?: Unit) => number;
2
+ export {};
@@ -4,6 +4,8 @@ local UnitClassification = ____unit.UnitClassification
4
4
  local ____ability = require("engine.standard.fields.ability")
5
5
  local DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD = ____ability.DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD
6
6
  local DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD = ____ability.DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD
7
+ ---
8
+ -- @internal For use by internal systems only.
7
9
  ____exports.getAbilityDuration = function(ability, target)
8
10
  local level = ability.level
9
11
  return target ~= nil and target:hasClassification(UnitClassification.RESISTANT) and DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD:getValue(ability, level) or DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD:getValue(ability, level)
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export {};
@@ -0,0 +1,86 @@
1
+ local ____exports = {}
2
+ local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
3
+ local AbilityType = ____ability_2Dtype.AbilityType
4
+ local ____dummy_2Ditem = require("engine.internal.object-data.dummy-item")
5
+ local DUMMY_ITEM_ID = ____dummy_2Ditem.DUMMY_ITEM_ID
6
+ local ____dummy_2Dunits = require("engine.internal.misc.dummy-units")
7
+ local INVENTORY_DUMMY_NATIVE_UNIT = ____dummy_2Dunits.INVENTORY_DUMMY_NATIVE_UNIT
8
+ local ____preconditions = require("utility.preconditions")
9
+ local checkNotNull = ____preconditions.checkNotNull
10
+ local ____dummy_2Dinventory = require("engine.internal.object-data.dummy-inventory")
11
+ local INVENTORY_ABILITY_TYPE_ID = ____dummy_2Dinventory.INVENTORY_ABILITY_TYPE_ID
12
+ local ____arrays = require("utility.arrays")
13
+ local map = ____arrays.map
14
+ local toLuaSet = ____arrays.toLuaSet
15
+ local createItem = CreateItem
16
+ local getAbilityId = BlzGetAbilityId
17
+ local getItemAbility = BlzGetItemAbility
18
+ local getUnitAbilityByIndex = BlzGetUnitAbilityByIndex
19
+ local itemAddAbility = BlzItemAddAbility
20
+ local setItemBooleanField = BlzSetItemBooleanField
21
+ local removeItem = RemoveItem
22
+ local unitAddAbility = UnitAddAbility
23
+ local unitAddItem = UnitAddItem
24
+ local unitDropItemSlot = UnitDropItemSlot
25
+ local unitInventorySize = UnitInventorySize
26
+ local unitRemoveAbility = UnitRemoveAbility
27
+ local unitRemoveItemFromSlot = UnitRemoveItemFromSlot
28
+ local INVENTORY_ABILITY_TYPE_IDS = postcompile(function()
29
+ return toLuaSet(AbilityType:getAllIdsByBaseIds(map({
30
+ "AInv",
31
+ "Aihn",
32
+ "Aien",
33
+ "Aion",
34
+ "Aiun"
35
+ }, fourCC)))
36
+ end)
37
+ ---
38
+ -- @internal For use by internal systems only.
39
+ ____exports.castAbility = function(nativeUnit, abilityTypeId, prepareAbility, ...)
40
+ local nativeItem = createItem(DUMMY_ITEM_ID, 0, 0)
41
+ unitAddItem(INVENTORY_DUMMY_NATIVE_UNIT, nativeItem)
42
+ itemAddAbility(nativeItem, abilityTypeId)
43
+ local nativeAbility = checkNotNull(getItemAbility(nativeItem, abilityTypeId))
44
+ if prepareAbility ~= nil then
45
+ prepareAbility(nativeAbility, ...)
46
+ end
47
+ setItemBooleanField(nativeItem, ITEM_BF_ACTIVELY_USED, true)
48
+ setItemBooleanField(nativeItem, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
49
+ local success
50
+ if unitAddItem(nativeUnit, nativeItem) then
51
+ success = true
52
+ else
53
+ local latestInventoryAbilityTypeId = 0
54
+ local nativeItemBySlot = {}
55
+ local inventorySize = unitInventorySize(nativeUnit)
56
+ if inventorySize ~= 0 then
57
+ for slot = 0, inventorySize - 1 do
58
+ nativeItemBySlot[slot] = unitRemoveItemFromSlot(nativeUnit, slot)
59
+ end
60
+ local unitNativeAbility = getUnitAbilityByIndex(nativeUnit, 0)
61
+ local i = 1
62
+ while unitNativeAbility ~= nil do
63
+ local abilityTypeId = getAbilityId(unitNativeAbility)
64
+ if INVENTORY_ABILITY_TYPE_IDS[abilityTypeId] ~= nil then
65
+ latestInventoryAbilityTypeId = abilityTypeId
66
+ end
67
+ unitNativeAbility = getUnitAbilityByIndex(nativeUnit, i)
68
+ i = i + 1
69
+ end
70
+ unitRemoveAbility(nativeUnit, latestInventoryAbilityTypeId)
71
+ end
72
+ unitAddAbility(nativeUnit, INVENTORY_ABILITY_TYPE_ID)
73
+ success = unitAddItem(nativeUnit, nativeItem)
74
+ unitRemoveAbility(nativeUnit, INVENTORY_ABILITY_TYPE_ID)
75
+ if latestInventoryAbilityTypeId ~= 0 then
76
+ unitAddAbility(nativeUnit, latestInventoryAbilityTypeId)
77
+ for slot, nativeItem in pairs(nativeItemBySlot) do
78
+ unitAddItem(nativeUnit, nativeItem)
79
+ unitDropItemSlot(nativeUnit, nativeItem, slot)
80
+ end
81
+ end
82
+ end
83
+ removeItem(nativeItem)
84
+ return success
85
+ end
86
+ return ____exports
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export {};
@@ -0,0 +1,13 @@
1
+ local ____exports = {}
2
+ local disableAbility = BlzUnitDisableAbility
3
+ ---
4
+ -- @internal For use by internal systems only.
5
+ ____exports.increaseAbilityDisableCounter = function(unit, abilityTypeId, times)
6
+ for _ = 1, times do
7
+ disableAbility(unit, abilityTypeId, true, false)
8
+ end
9
+ for _ = times, -1 do
10
+ disableAbility(unit, abilityTypeId, false, false)
11
+ end
12
+ end
13
+ return ____exports
@@ -3,7 +3,7 @@ import { Ability } from "../ability";
3
3
  import { Destructable } from "../../../core/types/destructable";
4
4
  import { Item } from "../item";
5
5
  import { Widget } from "../../../core/types/widget";
6
- import { DispatchingEvent } from "../../../event";
6
+ import { DispatchingEvent, Event } from "../../../event";
7
7
  declare module "../unit" {
8
8
  namespace Unit {
9
9
  const abilityCastingStartEvent: DispatchingEvent<[Unit, Ability]>;
@@ -141,3 +141,12 @@ declare module "../unit" {
141
141
  const abilityStopEvent: DispatchingEvent<[Unit, Ability]>;
142
142
  }
143
143
  }
144
+ declare module "../unit" {
145
+ namespace Unit {
146
+ const abilityCommandEvent: {
147
+ readonly [abilityTypeId: number]: {
148
+ readonly [orderTypeStringId: string]: Event<[Unit, Ability, string]>;
149
+ };
150
+ };
151
+ }
152
+ }
@@ -15,8 +15,15 @@ local UnitTriggerEvent = ____unit.UnitTriggerEvent
15
15
  local ____event = require("event")
16
16
  local createDispatchingEvent = ____event.createDispatchingEvent
17
17
  local DependentInitializingEvent = ____event.DependentInitializingEvent
18
+ local Event = ____event.Event
19
+ local InitializingEvent = ____event.InitializingEvent
18
20
  local ____preconditions = require("utility.preconditions")
19
21
  local checkNotNull = ____preconditions.checkNotNull
22
+ local ____lazy = require("utility.lazy")
23
+ local lazyRecord = ____lazy.lazyRecord
24
+ local eventInvoke = Event.invoke
25
+ local condition = Condition
26
+ local createTrigger = CreateTrigger
20
27
  local getItemAbility = BlzGetItemAbility
21
28
  local getSpellAbility = GetSpellAbility
22
29
  local getSpellAbilityId = GetSpellAbilityId
@@ -26,11 +33,10 @@ local getSpellTargetUnit = GetSpellTargetUnit
26
33
  local getSpellTargetX = GetSpellTargetX
27
34
  local getSpellTargetY = GetSpellTargetY
28
35
  local getTriggerUnit = GetTriggerUnit
29
- local getUnitAbility = BlzGetUnitAbility
30
- local unitAddAbility = UnitAddAbility
36
+ local triggerAddCondition = TriggerAddCondition
37
+ local triggerRegisterCommandEvent = TriggerRegisterCommandEvent
31
38
  local unitInventorySize = UnitInventorySize
32
39
  local unitItemInSlot = UnitItemInSlot
33
- local unitRemoveAbility = UnitRemoveAbility
34
40
  local function retrieveAbility(unit, ability, abilityId)
35
41
  if ability == nil then
36
42
  return __TS__New(
@@ -39,17 +45,6 @@ local function retrieveAbility(unit, ability, abilityId)
39
45
  Unit:of(unit)
40
46
  )
41
47
  end
42
- if not unitAddAbility(unit, abilityId) then
43
- if getUnitAbility(unit, abilityId) == ability then
44
- return UnitAbility:of(
45
- ability,
46
- abilityId,
47
- Unit:of(unit)
48
- )
49
- end
50
- else
51
- unitRemoveAbility(unit, abilityId)
52
- end
53
48
  for i = 0, unitInventorySize(unit) - 1 do
54
49
  local item = unitItemInSlot(unit, i)
55
50
  if getItemAbility(item, abilityId) == ability then
@@ -366,4 +361,31 @@ rawset(
366
361
  extractAbilityTypeId
367
362
  )
368
363
  )
364
+ rawset(
365
+ Unit,
366
+ "abilityCommandEvent",
367
+ lazyRecord(function(abilityTypeId)
368
+ return lazyRecord(function(orderTypeStringId)
369
+ return __TS__New(
370
+ InitializingEvent,
371
+ function(event)
372
+ local trigger = createTrigger()
373
+ triggerRegisterCommandEvent(trigger, abilityTypeId, orderTypeStringId)
374
+ triggerAddCondition(
375
+ trigger,
376
+ condition(function()
377
+ local unit = Unit:of(getTriggerUnit())
378
+ if unit ~= nil then
379
+ local ability = unit:getAbilityById(abilityTypeId)
380
+ if ability ~= nil then
381
+ eventInvoke(event, unit, ability, orderTypeStringId)
382
+ end
383
+ end
384
+ end)
385
+ )
386
+ end
387
+ )
388
+ end)
389
+ end)
390
+ )
369
391
  return ____exports
@@ -1,4 +1,3 @@
1
- /// <reference types="@typescript-to-lua/language-extensions" />
2
1
  /** @noSelfInFile */
3
2
  import { Unit } from "../unit";
4
3
  import { AbilityTypeId } from "../../object-data/entry/ability-type";
@@ -9,7 +8,8 @@ export type UnitBonusId<Brand extends string = any> = number & {
9
8
  export type UnitArmorBonusId = UnitBonusId<"armor">;
10
9
  export type UnitAttackSpeedFactorBonusId = UnitBonusId<"attackSpeedFactor">;
11
10
  export type UnitMovementSpeedFactorBonusId = UnitBonusId<"movementSpeedFactor">;
12
- export type UnitDamageBonusId = UnitBonusId<"damage">;
11
+ export type UnitAutoAttackDamageBonusId = UnitBonusId<"autoAttackDamage">;
12
+ export type UnitDamageFactorBonusId = UnitBonusId<"damageFactor">;
13
13
  export type UnitReceivedDamageFactorBonusId = UnitBonusId<"receivedDamageFactor">;
14
14
  export type UnitBonusType<Id extends UnitBonusId = UnitBonusId> = ({
15
15
  abilityTypeId: AbilityTypeId;
@@ -31,11 +31,12 @@ export declare namespace UnitBonusType {
31
31
  const ARMOR: UnitBonusType<UnitArmorBonusId>;
32
32
  const ATTACK_SPEED_FACTOR: UnitBonusType<UnitAttackSpeedFactorBonusId>;
33
33
  const MOVEMENT_SPEED_FACTOR: UnitBonusType<UnitAttackSpeedFactorBonusId>;
34
- const DAMAGE: UnitBonusType<UnitDamageBonusId>;
34
+ const AUTO_ATTACK_DAMAGE: UnitBonusType<UnitAutoAttackDamageBonusId>;
35
+ const DAMAGE_FACTOR: UnitBonusType<UnitReceivedDamageFactorBonusId>;
35
36
  const RECEIVED_DAMAGE_FACTOR: UnitBonusType<UnitReceivedDamageFactorBonusId>;
36
37
  }
37
- export declare const addUnitBonus: <Id extends UnitBonusId<any>>(unit: Unit, bonusType: UnitBonusType<Id>, value: number) => Id;
38
- export declare const removeUnitBonus: <Id extends UnitBonusId<any>>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id) => boolean;
39
- export declare const updateUnitBonus: <Id extends UnitBonusId<any>>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id, value: number) => boolean;
40
- export declare const addOrUpdateOrRemoveUnitBonus: <Id extends UnitBonusId<any>>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id | undefined, value: number) => Id | undefined;
41
- export declare const getUnitBonus: <Id extends UnitBonusId<any>>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id) => number;
38
+ export declare const addUnitBonus: <Id extends UnitBonusId>(unit: Unit, bonusType: UnitBonusType<Id>, value: number) => Id;
39
+ export declare const removeUnitBonus: <Id extends UnitBonusId>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id) => boolean;
40
+ export declare const updateUnitBonus: <Id extends UnitBonusId>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id, value: number) => boolean;
41
+ export declare const addOrUpdateOrRemoveUnitBonus: <Id extends UnitBonusId>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id | undefined, value: number) => Id | undefined;
42
+ export declare const getUnitBonus: <Id extends UnitBonusId>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id) => number;