warscript 0.0.1-dev.ab8c392 → 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 (140) hide show
  1. package/attributes.d.ts +0 -1
  2. package/binaryreader.d.ts +1 -0
  3. package/binaryreader.lua +3 -0
  4. package/core/types/effect.d.ts +13 -3
  5. package/core/types/effect.lua +116 -17
  6. package/core/types/frame.d.ts +8 -1
  7. package/core/types/frame.lua +93 -1
  8. package/core/types/group.d.ts +0 -1
  9. package/core/types/image.d.ts +0 -1
  10. package/core/types/missile.d.ts +2 -2
  11. package/core/types/missile.lua +8 -2
  12. package/core/types/unit.lua +8 -0
  13. package/core/util.d.ts +1 -1
  14. package/core/util.lua +12 -0
  15. package/decl/index.d.ts +1 -0
  16. package/engine/ability.d.ts +1 -1
  17. package/engine/behavior.d.ts +10 -10
  18. package/engine/behavior.lua +6 -6
  19. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  20. package/engine/behaviour/ability/always-enabled.lua +31 -0
  21. package/engine/behaviour/ability/apply-buff.d.ts +3 -5
  22. package/engine/behaviour/ability/apply-unit-behavior.d.ts +6 -1
  23. package/engine/behaviour/ability/damage.d.ts +33 -11
  24. package/engine/behaviour/ability/damage.lua +89 -31
  25. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  26. package/engine/behaviour/ability/emulate-impact.lua +29 -0
  27. package/engine/behaviour/ability/heal.d.ts +33 -6
  28. package/engine/behaviour/ability/heal.lua +89 -10
  29. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  30. package/engine/behaviour/ability/instant-impact.lua +4 -15
  31. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  32. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  33. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  34. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  35. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  36. package/engine/behaviour/ability/restore-mana.lua +29 -0
  37. package/engine/behaviour/ability.d.ts +16 -2
  38. package/engine/behaviour/ability.lua +88 -12
  39. package/engine/behaviour/unit/stun-immunity.d.ts +0 -1
  40. package/engine/behaviour/unit.d.ts +8 -2
  41. package/engine/behaviour/unit.lua +27 -0
  42. package/engine/buff.d.ts +68 -21
  43. package/engine/buff.lua +276 -90
  44. package/engine/game-map.d.ts +7 -0
  45. package/engine/game-map.lua +32 -0
  46. package/engine/internal/ability.d.ts +16 -13
  47. package/engine/internal/ability.lua +79 -76
  48. package/engine/internal/item/ability.lua +90 -0
  49. package/engine/internal/item+owner.lua +2 -2
  50. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  51. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  52. package/engine/internal/unit/ability.d.ts +10 -1
  53. package/engine/internal/unit/ability.lua +36 -14
  54. package/engine/internal/unit/bonus.d.ts +9 -8
  55. package/engine/internal/unit/bonus.lua +6 -1
  56. package/engine/internal/unit/item.d.ts +24 -0
  57. package/engine/internal/unit/item.lua +79 -0
  58. package/engine/internal/unit/main-selected.d.ts +13 -0
  59. package/engine/internal/unit/main-selected.lua +51 -0
  60. package/engine/internal/unit+ability.lua +2 -2
  61. package/engine/internal/unit+transport.lua +4 -10
  62. package/engine/internal/unit-missile-launch.lua +25 -6
  63. package/engine/internal/unit.d.ts +58 -16
  64. package/engine/internal/unit.lua +346 -126
  65. package/engine/internal/utility.lua +12 -0
  66. package/engine/local-client.d.ts +7 -2
  67. package/engine/local-client.lua +82 -0
  68. package/engine/object-data/auxiliary/attachment-preset.d.ts +0 -1
  69. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  70. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  71. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  72. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  73. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  74. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  75. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  76. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  77. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  78. package/engine/object-data/entry/ability-type.d.ts +0 -1
  79. package/engine/object-data/entry/ability-type.lua +8 -12
  80. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  81. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  82. package/engine/object-data/entry/buff-type.d.ts +0 -1
  83. package/engine/object-data/entry/destructible-type.d.ts +0 -1
  84. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  85. package/engine/object-data/entry/item-type.d.ts +14 -1
  86. package/engine/object-data/entry/item-type.lua +91 -0
  87. package/engine/object-data/entry/lightning-type.d.ts +0 -1
  88. package/engine/object-data/entry/unit-type.d.ts +21 -2
  89. package/engine/object-data/entry/unit-type.lua +223 -49
  90. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  91. package/engine/object-data/entry/upgrade.d.ts +0 -1
  92. package/engine/object-data/entry.d.ts +2 -3
  93. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  94. package/engine/object-field/ability.d.ts +21 -1
  95. package/engine/object-field/ability.lua +51 -1
  96. package/engine/object-field.d.ts +0 -1
  97. package/engine/random.d.ts +1 -0
  98. package/engine/random.lua +9 -0
  99. package/engine/standard/entries/unit-type.d.ts +39 -1
  100. package/engine/standard/entries/unit-type.lua +39 -1
  101. package/engine/standard/fields/ability.d.ts +3 -1
  102. package/engine/standard/fields/ability.lua +3 -1
  103. package/engine/unit.d.ts +2 -0
  104. package/engine/unit.lua +11 -2
  105. package/event.d.ts +2 -3
  106. package/event.lua +9 -5
  107. package/index.d.ts +1 -0
  108. package/index.lua +1 -0
  109. package/lualib_bundle.lua +146 -42
  110. package/math/vec2.d.ts +2 -9
  111. package/math.d.ts +0 -2
  112. package/net/socket.d.ts +7 -1
  113. package/net/socket.lua +45 -4
  114. package/network.d.ts +1 -0
  115. package/network.lua +3 -2
  116. package/objutil/ability.d.ts +0 -1
  117. package/objutil/buff.d.ts +0 -1
  118. package/objutil/buff.lua +1 -1
  119. package/objutil/object.d.ts +0 -1
  120. package/objutil/unit.d.ts +0 -1
  121. package/package.json +13 -13
  122. package/patch-lua.d.ts +0 -0
  123. package/patch-lua.lua +10 -0
  124. package/property.d.ts +55 -0
  125. package/property.lua +374 -0
  126. package/string.d.ts +16 -0
  127. package/string.lua +5 -0
  128. package/util/stream.d.ts +0 -1
  129. package/utility/arrays.d.ts +11 -5
  130. package/utility/arrays.lua +34 -3
  131. package/utility/bit-set.d.ts +0 -2
  132. package/utility/lazy.d.ts +2 -0
  133. package/utility/lazy.lua +14 -0
  134. package/utility/linked-set.d.ts +11 -3
  135. package/utility/linked-set.lua +5 -2
  136. package/utility/lua-maps.d.ts +1 -2
  137. package/utility/lua-sets.d.ts +1 -2
  138. package/utility/types.d.ts +1 -0
  139. package/core/mapbounds.d.ts +0 -8
  140. 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(
@@ -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;
@@ -21,6 +21,7 @@ local AUTO_ATTACK_DAMAGE_INCREASE_DUMMY_ABILITY_TYPE_ID = ____auto_2Dattack_2Dda
21
21
  local ____movement_2Dspeed_2Dincrease_2Dfactor = require("engine.internal.object-data.movement-speed-increase-factor")
22
22
  local MOVEMENT_SPEED_INCREASE_FACTOR_ABILITY_FIELD = ____movement_2Dspeed_2Dincrease_2Dfactor.MOVEMENT_SPEED_INCREASE_FACTOR_ABILITY_FIELD
23
23
  local MOVEMENT_SPEED_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID = ____movement_2Dspeed_2Dincrease_2Dfactor.MOVEMENT_SPEED_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID
24
+ local damageFactorByUnit = {}
24
25
  local receivedDamageFactorByUnit = {}
25
26
  ____exports.UnitBonusType = {}
26
27
  local UnitBonusType = ____exports.UnitBonusType
@@ -46,13 +47,14 @@ do
46
47
  reduce = sum,
47
48
  initialValue = 0
48
49
  }
49
- UnitBonusType.DAMAGE = {
50
+ UnitBonusType.AUTO_ATTACK_DAMAGE = {
50
51
  abilityTypeId = AUTO_ATTACK_DAMAGE_INCREASE_DUMMY_ABILITY_TYPE_ID,
51
52
  field = AUTO_ATTACK_DAMAGE_INCREASE_ABILITY_FIELD,
52
53
  integer = false,
53
54
  reduce = sum,
54
55
  initialValue = 0
55
56
  }
57
+ UnitBonusType.DAMAGE_FACTOR = {reduce = product, valueByUnit = damageFactorByUnit, initialValue = 1}
56
58
  UnitBonusType.RECEIVED_DAMAGE_FACTOR = {reduce = product, valueByUnit = receivedDamageFactorByUnit, initialValue = 1}
57
59
  end
58
60
  local bonusesByUnitByBonusType = {}
@@ -180,6 +182,9 @@ end
180
182
  Unit.onDamage:addListener(
181
183
  4,
182
184
  function(source, target, event)
185
+ if source ~= nil and damageFactorByUnit[source] ~= nil then
186
+ event.amount = event.amount * damageFactorByUnit[source]
187
+ end
183
188
  if receivedDamageFactorByUnit[target] ~= nil then
184
189
  event.amount = event.amount * receivedDamageFactorByUnit[target]
185
190
  end
@@ -0,0 +1,24 @@
1
+ /** @noSelfInFile */
2
+ import { Item } from "../item";
3
+ export interface UnitItems extends ReadonlyArray<Item | undefined> {
4
+ readonly length: 0 | 1 | 2 | 3 | 4 | 5 | 6;
5
+ [0]: Item | undefined;
6
+ [1]: Item | undefined;
7
+ [2]: Item | undefined;
8
+ [3]: Item | undefined;
9
+ [4]: Item | undefined;
10
+ [5]: Item | undefined;
11
+ }
12
+ export declare class UnitItems {
13
+ constructor(handle: junit);
14
+ findSlot(item: Item): 0 | 1 | 2 | 3 | 4 | 5 | undefined;
15
+ protected __newindex(slot: number, item: Item | undefined): void;
16
+ protected __index(key: string | number): unknown;
17
+ protected __len(): number;
18
+ protected __ipairs(): LuaIterator<LuaMultiReturn<[number, Item | undefined]>, junit>;
19
+ }
20
+ declare module "../unit" {
21
+ interface Unit {
22
+ readonly items: UnitItems;
23
+ }
24
+ }
@@ -0,0 +1,79 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__New = ____lualib.__TS__New
4
+ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
5
+ local ____exports = {}
6
+ local ____item = require("engine.internal.item")
7
+ local Item = ____item.Item
8
+ local ____unit = require("engine.internal.unit")
9
+ local Unit = ____unit.Unit
10
+ local ____utility = require("engine.internal.utility")
11
+ local findUnitItemSlot = ____utility.findUnitItemSlot
12
+ local rawset = _G.rawset
13
+ local ____type = _G.type
14
+ local isItemPowerup = IsItemPowerup
15
+ local setItemBooleanField = BlzSetItemBooleanField
16
+ local unitAddItem = UnitAddItem
17
+ local unitDropItemSlot = UnitDropItemSlot
18
+ local unitInventorySize = UnitInventorySize
19
+ local unitItemInSlot = UnitItemInSlot
20
+ local unitRemoveItemFromSlot = UnitRemoveItemFromSlot
21
+ local handleByUnitItems = setmetatable({}, {__mode = "k"})
22
+ local function unitItemsNext(handle, index)
23
+ local slot = index & 7
24
+ if index >> 3 == slot then
25
+ return nil, nil
26
+ end
27
+ return index + 1, Item:of(unitItemInSlot(handle, slot))
28
+ end
29
+ ____exports.UnitItems = __TS__Class()
30
+ local UnitItems = ____exports.UnitItems
31
+ UnitItems.name = "UnitItems"
32
+ function UnitItems.prototype.____constructor(self, handle)
33
+ handleByUnitItems[self] = handle
34
+ end
35
+ function UnitItems.prototype.findSlot(self, item)
36
+ return findUnitItemSlot(handleByUnitItems[self], item.handle)
37
+ end
38
+ function UnitItems.prototype.__newindex(self, slot, item)
39
+ local handle = handleByUnitItems[self]
40
+ if slot < 1 or slot > unitInventorySize(handle) then
41
+ return
42
+ end
43
+ unitRemoveItemFromSlot(handle, slot - 1)
44
+ if item ~= nil then
45
+ local itemHandle = item.handle
46
+ local isPowerup = isItemPowerup(itemHandle)
47
+ if isPowerup then
48
+ setItemBooleanField(itemHandle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, false)
49
+ end
50
+ unitAddItem(handle, itemHandle)
51
+ unitDropItemSlot(handle, itemHandle, slot - 1)
52
+ if isPowerup then
53
+ setItemBooleanField(itemHandle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
54
+ end
55
+ end
56
+ end
57
+ function UnitItems.prototype.__index(self, key)
58
+ if ____type(key) == "number" then
59
+ return Item:of(unitItemInSlot(handleByUnitItems[self], key - 1))
60
+ end
61
+ return rawget(____exports.UnitItems.prototype, key)
62
+ end
63
+ function UnitItems.prototype.__len(self)
64
+ return unitInventorySize(handleByUnitItems[self])
65
+ end
66
+ function UnitItems.prototype.__ipairs(self)
67
+ local handle = handleByUnitItems[self]
68
+ return unitItemsNext, handle, unitInventorySize(handle) << 3
69
+ end
70
+ __TS__ObjectDefineProperty(
71
+ Unit.prototype,
72
+ "items",
73
+ {get = function(self)
74
+ local items = __TS__New(____exports.UnitItems, self.handle)
75
+ rawset(self, "items", items)
76
+ return items
77
+ end}
78
+ )
79
+ return ____exports