warscript 0.0.1-dev.c826fde → 0.0.1-dev.c86de6d

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 (137) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/frame.lua +61 -10
  4. package/core/types/handle.lua +6 -9
  5. package/core/types/item.d.ts +1 -0
  6. package/core/types/item.lua +1 -0
  7. package/core/types/player.d.ts +17 -1
  8. package/core/types/player.lua +67 -23
  9. package/core/types/playerCamera.lua +44 -0
  10. package/core/types/sound.lua +1 -1
  11. package/core/types/tileCell.d.ts +11 -1
  12. package/core/types/tileCell.lua +97 -0
  13. package/core/types/timer.d.ts +3 -2
  14. package/core/types/timer.lua +8 -2
  15. package/destroyable.d.ts +1 -0
  16. package/destroyable.lua +9 -0
  17. package/engine/behavior.d.ts +10 -2
  18. package/engine/behavior.lua +157 -76
  19. package/engine/behaviour/ability/apply-buff.lua +4 -4
  20. package/engine/behaviour/ability/damage.d.ts +3 -0
  21. package/engine/behaviour/ability/damage.lua +8 -2
  22. package/engine/behaviour/ability/emulate-impact.lua +5 -4
  23. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  24. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  25. package/engine/behaviour/ability.d.ts +11 -6
  26. package/engine/behaviour/ability.lua +31 -1
  27. package/engine/behaviour/unit/stun-immunity.d.ts +9 -5
  28. package/engine/behaviour/unit/stun-immunity.lua +17 -7
  29. package/engine/behaviour/unit.d.ts +9 -3
  30. package/engine/behaviour/unit.lua +106 -24
  31. package/engine/buff.d.ts +65 -18
  32. package/engine/buff.lua +356 -152
  33. package/engine/internal/ability.lua +15 -15
  34. package/engine/internal/item/fields.d.ts +12 -0
  35. package/engine/internal/item/fields.lua +33 -0
  36. package/engine/internal/item.d.ts +12 -13
  37. package/engine/internal/item.lua +59 -47
  38. package/engine/internal/mechanics/cast-ability.lua +6 -3
  39. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  40. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  41. package/engine/internal/object-data/health-bonus.lua +16 -0
  42. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  43. package/engine/internal/object-data/mana-bonus.lua +16 -0
  44. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  45. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  46. package/engine/internal/unit/ability.d.ts +14 -14
  47. package/engine/internal/unit/ability.lua +72 -45
  48. package/engine/internal/unit/attributes.d.ts +17 -0
  49. package/engine/internal/unit/attributes.lua +46 -0
  50. package/engine/internal/unit/bonus.d.ts +6 -0
  51. package/engine/internal/unit/bonus.lua +33 -3
  52. package/engine/internal/unit/fly-height.d.ts +7 -0
  53. package/engine/internal/unit/fly-height.lua +20 -0
  54. package/engine/internal/unit/interrupts.d.ts +12 -0
  55. package/engine/internal/unit/interrupts.lua +28 -0
  56. package/engine/internal/unit/main-selected.lua +12 -27
  57. package/engine/internal/unit/range-event.d.ts +12 -0
  58. package/engine/internal/unit/range-event.lua +90 -0
  59. package/engine/internal/unit/scale.d.ts +7 -0
  60. package/engine/internal/unit/scale.lua +20 -0
  61. package/engine/internal/unit+bonus.lua +3 -3
  62. package/engine/internal/unit-missile-launch.lua +51 -20
  63. package/engine/internal/unit.d.ts +15 -19
  64. package/engine/internal/unit.lua +160 -183
  65. package/engine/local-client.d.ts +7 -0
  66. package/engine/local-client.lua +86 -1
  67. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  68. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  69. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  70. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  71. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  72. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  73. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  74. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  75. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  76. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  77. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  78. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  79. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  80. package/engine/object-data/entry/ability-type.d.ts +2 -0
  81. package/engine/object-data/entry/ability-type.lua +88 -5
  82. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  83. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  84. package/engine/object-data/entry/destructible-type.lua +155 -0
  85. package/engine/object-data/entry/unit-type.d.ts +4 -0
  86. package/engine/object-data/entry/unit-type.lua +76 -32
  87. package/engine/object-field/ability.lua +2 -2
  88. package/engine/object-field/item.d.ts +22 -0
  89. package/engine/object-field/item.lua +118 -0
  90. package/engine/object-field/unit.d.ts +20 -5
  91. package/engine/object-field/unit.lua +61 -0
  92. package/engine/object-field.d.ts +10 -2
  93. package/engine/object-field.lua +268 -123
  94. package/engine/random.d.ts +10 -0
  95. package/engine/random.lua +21 -0
  96. package/engine/standard/fields/ability.d.ts +2 -2
  97. package/engine/standard/fields/ability.lua +2 -2
  98. package/engine/standard/fields/item.d.ts +4 -0
  99. package/engine/standard/fields/item.lua +6 -0
  100. package/engine/standard/fields/unit.d.ts +11 -3
  101. package/engine/standard/fields/unit.lua +15 -2
  102. package/engine/synchronization.d.ts +11 -0
  103. package/engine/synchronization.lua +77 -0
  104. package/engine/text-tag.lua +3 -2
  105. package/engine/unit.d.ts +5 -0
  106. package/engine/unit.lua +5 -0
  107. package/lualib_bundle.lua +1 -1
  108. package/math.d.ts +2 -0
  109. package/math.lua +14 -0
  110. package/net/socket.lua +1 -1
  111. package/network.lua +25 -1
  112. package/objutil/buff.lua +10 -8
  113. package/objutil/object.lua +1 -1
  114. package/operation.d.ts +8 -1
  115. package/operation.lua +38 -18
  116. package/package.json +5 -5
  117. package/patch-lua.lua +15 -0
  118. package/utility/arrays.d.ts +1 -0
  119. package/utility/arrays.lua +8 -0
  120. package/utility/callback-array.d.ts +5 -1
  121. package/utility/callback-array.lua +16 -1
  122. package/utility/linked-map.d.ts +35 -0
  123. package/utility/linked-map.lua +107 -0
  124. package/utility/linked-set.d.ts +4 -1
  125. package/utility/linked-set.lua +46 -1
  126. package/utility/lua-maps.d.ts +11 -2
  127. package/utility/lua-maps.lua +33 -2
  128. package/utility/random.d.ts +102 -0
  129. package/utility/random.lua +273 -0
  130. package/utility/records.lua +20 -1
  131. package/utility/types.d.ts +3 -0
  132. package/utility/unordered-map.d.ts +27 -0
  133. package/utility/unordered-map.lua +99 -0
  134. /package/engine/internal/object-data/{armor-increase.d.ts → armor-bonus.d.ts} +0 -0
  135. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  136. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  137. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -35,8 +35,6 @@ local getAbilityStringLevelField = BlzGetAbilityStringLevelField
35
35
  local getUnitAbilityCooldownRemaining = BlzGetUnitAbilityCooldownRemaining
36
36
  local startUnitAbilityCooldown = BlzStartUnitAbilityCooldown
37
37
  local getHandleId = GetHandleId
38
- local getItemBooleanField = BlzGetItemBooleanField
39
- local setItemBooleanField = BlzSetItemBooleanField
40
38
  local unitHideAbility = BlzUnitHideAbility
41
39
  local unitDisableAbility = BlzUnitDisableAbility
42
40
  local match = string.match
@@ -516,11 +514,13 @@ function ItemAbility.prototype.setField(self, field, levelOrValue, value)
516
514
  )
517
515
  end
518
516
  function ItemAbility.prototype.interruptCast(self)
519
- local handle = self.owner.handle
520
- local activelyUsed = getItemBooleanField(handle, ITEM_BF_ACTIVELY_USED)
521
- if activelyUsed then
522
- setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, false)
523
- setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, true)
517
+ local item = self.owner
518
+ local itemHandle = item.handle
519
+ local ____opt_1 = item.owner
520
+ local itemOwnerHandle = ____opt_1 and ____opt_1.handle
521
+ local cooldownRemaining = doAbilityActionForceDummy(itemHandle, itemOwnerHandle, getAbilityCooldown, self.typeId)
522
+ if cooldownRemaining == 0 then
523
+ startItemCooldown(itemHandle, itemOwnerHandle, 0.015625)
524
524
  end
525
525
  end
526
526
  function ItemAbility.prototype.onDestroy(self)
@@ -543,17 +543,17 @@ __TS__SetDescriptor(
543
543
  {
544
544
  get = function(self)
545
545
  local item = self.owner
546
- local ____doAbilityActionForceDummy_4 = doAbilityActionForceDummy
547
- local ____item_handle_3 = item.handle
548
- local ____opt_1 = item.owner
549
- return ____doAbilityActionForceDummy_4(____item_handle_3, ____opt_1 and ____opt_1.handle, getAbilityCooldown, self.typeId)
546
+ local ____doAbilityActionForceDummy_6 = doAbilityActionForceDummy
547
+ local ____item_handle_5 = item.handle
548
+ local ____opt_3 = item.owner
549
+ return ____doAbilityActionForceDummy_6(____item_handle_5, ____opt_3 and ____opt_3.handle, getAbilityCooldown, self.typeId)
550
550
  end,
551
551
  set = function(self, cooldownRemaining)
552
552
  local item = self.owner
553
- local ____startItemCooldown_8 = startItemCooldown
554
- local ____item_handle_7 = item.handle
555
- local ____opt_5 = item.owner
556
- ____startItemCooldown_8(____item_handle_7, ____opt_5 and ____opt_5.handle, cooldownRemaining)
553
+ local ____startItemCooldown_10 = startItemCooldown
554
+ local ____item_handle_9 = item.handle
555
+ local ____opt_7 = item.owner
556
+ ____startItemCooldown_10(____item_handle_9, ____opt_7 and ____opt_7.handle, cooldownRemaining)
557
557
  end
558
558
  },
559
559
  true
@@ -0,0 +1,12 @@
1
+ /** @noSelfInFile */
2
+ declare module "../item" {
3
+ interface Item {
4
+ canBeSold: boolean;
5
+ }
6
+ }
7
+ declare module "../item" {
8
+ interface Item {
9
+ isActivelyUsed: boolean;
10
+ }
11
+ }
12
+ export {};
@@ -0,0 +1,33 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
3
+ local ____exports = {}
4
+ local ____item = require("engine.internal.item")
5
+ local Item = ____item.Item
6
+ local ____item = require("engine.standard.fields.item")
7
+ local CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD = ____item.CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD
8
+ local IS_ACTIVELY_USED_ITEM_FIELD = ____item.IS_ACTIVELY_USED_ITEM_FIELD
9
+ __TS__ObjectDefineProperty(
10
+ Item.prototype,
11
+ "canBeSold",
12
+ {
13
+ get = function(self)
14
+ return CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD:getValue(self)
15
+ end,
16
+ set = function(self, value)
17
+ CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD:setValue(self, value)
18
+ end
19
+ }
20
+ )
21
+ __TS__ObjectDefineProperty(
22
+ Item.prototype,
23
+ "isActivelyUsed",
24
+ {
25
+ get = function(self)
26
+ return IS_ACTIVELY_USED_ITEM_FIELD:getValue(self)
27
+ end,
28
+ set = function(self, value)
29
+ IS_ACTIVELY_USED_ITEM_FIELD:setValue(self, value)
30
+ end
31
+ }
32
+ )
33
+ return ____exports
@@ -8,10 +8,12 @@ import { AbilityTypeId } from "../object-data/entry/ability-type";
8
8
  import type { ItemTypeId } from "../object-data/entry/item-type";
9
9
  type DefenseType = 0 | 1 | 2 | 3 | 4 | 5;
10
10
  declare const enum ItemPropertyKey {
11
- ABILITIES = 100
11
+ ABILITIES = 100,
12
+ DEATH_TRIGGER = 101
12
13
  }
13
14
  export declare class Item extends Handle<jitem> {
14
15
  private readonly [ItemPropertyKey.ABILITIES];
16
+ private readonly [ItemPropertyKey.DEATH_TRIGGER];
15
17
  constructor(handle: jitem);
16
18
  protected onDestroy(): HandleDestructor;
17
19
  static create<T extends Item>(this: typeof Item & (new (handle: jitem) => T), id: number, x: number, y: number, skinId?: number): T;
@@ -28,22 +30,18 @@ export declare class Item extends Handle<jitem> {
28
30
  get extendedTooltip(): string;
29
31
  set iconPath(v: string);
30
32
  get iconPath(): string;
31
- set dropOnDeath(v: boolean);
32
- get dropOnDeath(): boolean;
33
- set droppable(v: boolean);
34
- get droppable(): boolean;
35
- set pawnable(v: boolean);
36
- get pawnable(): boolean;
37
- set perishable(v: boolean);
38
- get perishable(): boolean;
39
- set powerup(v: boolean);
40
- get powerup(): boolean;
33
+ set dropsOnDeath(dropsOnDeath: boolean);
34
+ get dropsOnDeath(): boolean;
35
+ set canBeDropped(canBeDropped: boolean);
36
+ get canBeDropped(): boolean;
37
+ set perishes(perishes: boolean);
38
+ get perishes(): boolean;
39
+ set isPowerUp(isPowerUp: boolean);
40
+ get isPowerUp(): boolean;
41
41
  get isAlive(): boolean;
42
42
  get isDead(): boolean;
43
43
  set isInvulnerable(isInvulnerable: boolean);
44
44
  get isInvulnerable(): boolean;
45
- set usable(v: boolean);
46
- get usable(): boolean;
47
45
  set visible(v: boolean);
48
46
  get visible(): boolean;
49
47
  set level(v: number);
@@ -82,6 +80,7 @@ export declare class Item extends Handle<jitem> {
82
80
  static getInRect(rect: ReadonlyRect): Item[];
83
81
  static get onCreate(): Event<[Item]>;
84
82
  static get destroyEvent(): Event<[Item]>;
83
+ static readonly deathEvent: Event<[Item]>;
85
84
  static readonly chargesChangedEvent: Event<[Item]>;
86
85
  }
87
86
  export {};
@@ -27,7 +27,13 @@ local ____add_2Ditem_2Dto_2Dslot = require("engine.internal.unit.add-item-to-slo
27
27
  local SLOT_FILLER_ITEM_TYPE_ID = ____add_2Ditem_2Dto_2Dslot.SLOT_FILLER_ITEM_TYPE_ID
28
28
  local ____vec2 = require("math.vec2")
29
29
  local distance = ____vec2.distance
30
- local itemChargesChangeEvent = __TS__New(Event)
30
+ local ____timer = require("core.types.timer")
31
+ local Timer = ____timer.Timer
32
+ local createTrigger = CreateTrigger
33
+ local triggerAddCondition = TriggerAddCondition
34
+ local triggerRegisterDeathEvent = TriggerRegisterDeathEvent
35
+ local condition = Condition
36
+ local destroyTrigger = DestroyTrigger
31
37
  local itemAddAbility = BlzItemAddAbility
32
38
  local itemRemoveAbility = BlzItemRemoveAbility
33
39
  local getItemAbility = BlzGetItemAbility
@@ -50,7 +56,17 @@ local unitRemoveItem = UnitRemoveItem
50
56
  local unitUseItem = UnitUseItem
51
57
  local unitUseItemPoint = UnitUseItemPoint
52
58
  local unitUseItemTarget = UnitUseItemTarget
59
+ local setItemDropOnDeath = SetItemDropOnDeath
60
+ local setItemDroppable = SetItemDroppable
61
+ local getItemIntegerField = BlzGetItemIntegerField
62
+ local setItemBooleanField = BlzSetItemBooleanField
63
+ local getItemBooleanField = BlzGetItemBooleanField
64
+ local getTriggerWidget = GetTriggerWidget
65
+ local saveWidgetHandle = SaveWidgetHandle
66
+ local loadItemHandle = LoadItemHandle
53
67
  local tableRemove = table.remove
68
+ local itemChargesChangeEvent = __TS__New(Event)
69
+ local itemDeathEvent = __TS__New(Event)
54
70
  _G.SetItemCharges = function(whichItem, charges)
55
71
  setItemCharges(whichItem, charges)
56
72
  invoke(
@@ -58,9 +74,6 @@ _G.SetItemCharges = function(whichItem, charges)
58
74
  ____exports.Item:of(whichItem)
59
75
  )
60
76
  end
61
- local getItemIntegerField = BlzGetItemIntegerField
62
- local setItemBooleanField = BlzSetItemBooleanField
63
- local getItemBooleanField = BlzGetItemBooleanField
64
77
  invoke = Event.invoke
65
78
  local enumRect = Rect:create(0, 0, 0, 0).handle
66
79
  ---
@@ -133,6 +146,25 @@ local function collectIntoTargetRange()
133
146
  targetCollectionNextIndex = targetCollectionNextIndex + 1
134
147
  end
135
148
  end
149
+ local hashtable = InitHashtable()
150
+ local deathTriggerCondition = condition(function()
151
+ saveWidgetHandle(
152
+ hashtable,
153
+ 1,
154
+ 1,
155
+ getTriggerWidget()
156
+ )
157
+ local item = ____exports.Item:of(loadItemHandle(hashtable, 1, 1))
158
+ if item ~= nil then
159
+ invoke(itemDeathEvent, item)
160
+ end
161
+ end)
162
+ itemDeathEvent:addListener(
163
+ 999999,
164
+ function(item)
165
+ Timer:run(item, "destroy")
166
+ end
167
+ )
136
168
  ____exports.Item = __TS__Class()
137
169
  local Item = ____exports.Item
138
170
  Item.name = "Item"
@@ -140,6 +172,10 @@ __TS__ClassExtends(Item, Handle)
140
172
  function Item.prototype.____constructor(self, handle)
141
173
  Handle.prototype.____constructor(self, handle)
142
174
  self[100] = doAbilityAction(handle, getItemAbilities, self)
175
+ local deathTrigger = createTrigger()
176
+ triggerRegisterDeathEvent(deathTrigger, handle)
177
+ triggerAddCondition(deathTrigger, deathTriggerCondition)
178
+ self[101] = deathTrigger
143
179
  end
144
180
  function Item.prototype.onDestroy(self)
145
181
  local owner = self.owner
@@ -151,6 +187,7 @@ function Item.prototype.onDestroy(self)
151
187
  abilities[i]:destroy()
152
188
  end
153
189
  removeItem(self.handle)
190
+ destroyTrigger(self[101])
154
191
  return Handle.prototype.onDestroy(self)
155
192
  end
156
193
  function Item.create(self, id, x, y, skinId)
@@ -328,65 +365,55 @@ __TS__SetDescriptor(
328
365
  )
329
366
  __TS__SetDescriptor(
330
367
  Item.prototype,
331
- "dropOnDeath",
332
- {
333
- get = function(self)
334
- return BlzGetItemBooleanField(self.handle, ITEM_BF_DROPPED_WHEN_CARRIER_DIES)
335
- end,
336
- set = function(self, v)
337
- SetItemDropOnDeath(self.handle, v)
338
- end
339
- },
340
- true
341
- )
342
- __TS__SetDescriptor(
343
- Item.prototype,
344
- "droppable",
368
+ "dropsOnDeath",
345
369
  {
346
370
  get = function(self)
347
- return BlzGetItemBooleanField(self.handle, ITEM_BF_CAN_BE_DROPPED)
371
+ return getItemBooleanField(self.handle, ITEM_BF_DROPPED_WHEN_CARRIER_DIES)
348
372
  end,
349
- set = function(self, v)
350
- SetItemDroppable(self.handle, v)
373
+ set = function(self, dropsOnDeath)
374
+ setItemDropOnDeath(self.handle, dropsOnDeath)
351
375
  end
352
376
  },
353
377
  true
354
378
  )
355
379
  __TS__SetDescriptor(
356
380
  Item.prototype,
357
- "pawnable",
381
+ "canBeDropped",
358
382
  {
359
383
  get = function(self)
360
- return IsItemPawnable(self.handle)
384
+ return getItemBooleanField(self.handle, ITEM_BF_CAN_BE_DROPPED)
361
385
  end,
362
- set = function(self, v)
363
- SetItemPawnable(self.handle, v)
386
+ set = function(self, canBeDropped)
387
+ setItemDroppable(self.handle, canBeDropped)
364
388
  end
365
389
  },
366
390
  true
367
391
  )
368
392
  __TS__SetDescriptor(
369
393
  Item.prototype,
370
- "perishable",
394
+ "perishes",
371
395
  {
372
396
  get = function(self)
373
397
  return getItemBooleanField(self.handle, ITEM_BF_PERISHABLE)
374
398
  end,
375
- set = function(self, v)
376
- BlzSetItemBooleanField(self.handle, ITEM_BF_PERISHABLE, v)
399
+ set = function(self, perishes)
400
+ local handle = self.handle
401
+ local powerUp = isItemPowerup(handle)
402
+ setItemBooleanField(handle, ITEM_BF_PERISHABLE, perishes)
403
+ setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, powerUp)
377
404
  end
378
405
  },
379
406
  true
380
407
  )
381
408
  __TS__SetDescriptor(
382
409
  Item.prototype,
383
- "powerup",
410
+ "isPowerUp",
384
411
  {
385
412
  get = function(self)
386
413
  return isItemPowerup(self.handle)
387
414
  end,
388
- set = function(self, v)
389
- setItemBooleanField(self.handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, v)
415
+ set = function(self, isPowerUp)
416
+ setItemBooleanField(self.handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, isPowerUp)
390
417
  end
391
418
  },
392
419
  true
@@ -420,22 +447,6 @@ __TS__SetDescriptor(
420
447
  },
421
448
  true
422
449
  )
423
- __TS__SetDescriptor(
424
- Item.prototype,
425
- "usable",
426
- {
427
- get = function(self)
428
- return getItemBooleanField(self.handle, ITEM_BF_ACTIVELY_USED)
429
- end,
430
- set = function(self, v)
431
- local handle = self.handle
432
- local powerup = isItemPowerup(handle)
433
- setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, v)
434
- setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, powerup)
435
- end
436
- },
437
- true
438
- )
439
450
  __TS__SetDescriptor(
440
451
  Item.prototype,
441
452
  "visible",
@@ -657,6 +668,7 @@ __TS__ObjectDefineProperty(
657
668
  return self.onDestroyEvent
658
669
  end}
659
670
  )
671
+ Item.deathEvent = itemDeathEvent
660
672
  Item.chargesChangedEvent = itemChargesChangeEvent
661
673
  local getManipulatedItem = GetManipulatedItem
662
674
  local trigger = CreateTrigger()
@@ -74,9 +74,12 @@ ____exports.castAbility = function(nativeUnit, abilityTypeId, prepareAbility, ..
74
74
  unitRemoveAbility(nativeUnit, INVENTORY_ABILITY_TYPE_ID)
75
75
  if latestInventoryAbilityTypeId ~= 0 then
76
76
  unitAddAbility(nativeUnit, latestInventoryAbilityTypeId)
77
- for slot, nativeItem in pairs(nativeItemBySlot) do
78
- unitAddItem(nativeUnit, nativeItem)
79
- unitDropItemSlot(nativeUnit, nativeItem, slot)
77
+ for slot = 0, inventorySize - 1 do
78
+ local nativeItem = nativeItemBySlot[slot]
79
+ if nativeItem ~= nil then
80
+ unitAddItem(nativeUnit, nativeItem)
81
+ unitDropItemSlot(nativeUnit, nativeItem, slot)
82
+ end
80
83
  end
81
84
  end
82
85
  end
@@ -1,6 +1,6 @@
1
1
  local ____exports = {}
2
- local ____attribute_2Dincrease = require("engine.object-data.entry.ability-type.attribute-increase")
3
- local AttributeBonusAbilityType = ____attribute_2Dincrease.AttributeBonusAbilityType
2
+ local ____attribute_2Dbonus = require("engine.object-data.entry.ability-type.attribute-bonus")
3
+ local AttributeBonusAbilityType = ____attribute_2Dbonus.AttributeBonusAbilityType
4
4
  ---
5
5
  -- @internal For use by internal systems.
6
6
  ____exports.ATTRIBUTE_BONUS_DUMMY_ABILITY_TYPE_ID = compiletime(function()
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export {};
@@ -0,0 +1,16 @@
1
+ local ____exports = {}
2
+ local ____health_2Dbonus = require("engine.object-data.entry.ability-type.health-bonus")
3
+ local HealthBonusAbilityType = ____health_2Dbonus.HealthBonusAbilityType
4
+ ---
5
+ -- @internal For use by internal systems only.
6
+ ____exports.HEALTH_BONUS_DUMMY_ABILITY_TYPE_ID = compiletime(function()
7
+ local abilityType = HealthBonusAbilityType:create()
8
+ abilityType.isInternal = true
9
+ abilityType.isButtonVisible = false
10
+ abilityType.healthBonus = 0
11
+ return abilityType.id
12
+ end)
13
+ ---
14
+ -- @internal For use by internal systems only.
15
+ ____exports.HEALTH_BONUS_DUMMY_ABILITY_FIELD = ABILITY_ILF_MAX_LIFE_GAINED
16
+ return ____exports
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export {};
@@ -0,0 +1,16 @@
1
+ local ____exports = {}
2
+ local ____mana_2Dbonus = require("engine.object-data.entry.ability-type.mana-bonus")
3
+ local ManaBonusAbilityType = ____mana_2Dbonus.ManaBonusAbilityType
4
+ ---
5
+ -- @internal For use by internal systems only.
6
+ ____exports.MANA_BONUS_DUMMY_ABILITY_TYPE_ID = compiletime(function()
7
+ local abilityType = ManaBonusAbilityType:create()
8
+ abilityType.isInternal = true
9
+ abilityType.isButtonVisible = false
10
+ abilityType.manaBonus = 0
11
+ return abilityType.id
12
+ end)
13
+ ---
14
+ -- @internal For use by internal systems only.
15
+ ____exports.MANA_BONUS_DUMMY_ABILITY_FIELD = ABILITY_ILF_MAX_MANA_GAINED
16
+ return ____exports
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export {};
@@ -0,0 +1,16 @@
1
+ local ____exports = {}
2
+ local ____mana_2Dregeneration = require("engine.object-data.entry.ability-type.mana-regeneration")
3
+ local ManaRegenerationAbilityType = ____mana_2Dregeneration.ManaRegenerationAbilityType
4
+ ---
5
+ -- @internal For use by internal systems.
6
+ ____exports.MANA_REGENERATION_RATE_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID = compiletime(function()
7
+ local abilityType = ManaRegenerationAbilityType:create()
8
+ abilityType.isInternal = true
9
+ abilityType.isButtonVisible = false
10
+ abilityType.manaRegenerationRateIncreaseFactor = 4
11
+ return abilityType.id
12
+ end)
13
+ ---
14
+ -- @internal For use by internal systems.
15
+ ____exports.MANA_REGENERATION_RATE_INCREASE_FACTOR_ABILITY_FIELD = ABILITY_RLF_MANA_REGENERATION_BONUS_AS_FRACTION_OF_NORMAL
16
+ return ____exports
@@ -133,55 +133,55 @@ declare module "../unit" {
133
133
  }
134
134
  declare module "../unit" {
135
135
  namespace Unit {
136
- const abilityImpactEvent: DispatchingEvent<[Unit, Ability]>;
136
+ const abilityChannelingFinishEvent: DispatchingEvent<[Unit, Ability]>;
137
137
  }
138
138
  }
139
139
  declare module "../unit" {
140
140
  namespace Unit {
141
- const abilityWidgetTargetImpactEvent: DispatchingEvent<[Unit, Ability, Widget]>;
141
+ const abilityStopEvent: DispatchingEvent<[Unit, Ability]>;
142
142
  }
143
143
  }
144
144
  declare module "../unit" {
145
145
  namespace Unit {
146
- const abilityUnitTargetImpactEvent: DispatchingEvent<[Unit, Ability, Unit]>;
146
+ const abilityCommandEvent: {
147
+ readonly [abilityTypeId: number]: {
148
+ readonly [orderTypeStringId: string]: Event<[Unit, Ability, string]>;
149
+ };
150
+ };
147
151
  }
148
152
  }
149
153
  declare module "../unit" {
150
154
  namespace Unit {
151
- const abilityItemTargetImpactEvent: DispatchingEvent<[Unit, Ability, Item]>;
155
+ const abilityImpactEvent: DispatchingEvent<[Unit, Ability]>;
152
156
  }
153
157
  }
154
158
  declare module "../unit" {
155
159
  namespace Unit {
156
- const abilityDestructibleTargetImpactEvent: DispatchingEvent<[Unit, Ability, Destructable]>;
160
+ const abilityWidgetTargetImpactEvent: DispatchingEvent<[Unit, Ability, Widget]>;
157
161
  }
158
162
  }
159
163
  declare module "../unit" {
160
164
  namespace Unit {
161
- const abilityPointTargetImpactEvent: DispatchingEvent<[Unit, Ability, number, number]>;
165
+ const abilityUnitTargetImpactEvent: DispatchingEvent<[Unit, Ability, Unit]>;
162
166
  }
163
167
  }
164
168
  declare module "../unit" {
165
169
  namespace Unit {
166
- const abilityNoTargetImpactEvent: DispatchingEvent<[Unit, Ability]>;
170
+ const abilityItemTargetImpactEvent: DispatchingEvent<[Unit, Ability, Item]>;
167
171
  }
168
172
  }
169
173
  declare module "../unit" {
170
174
  namespace Unit {
171
- const abilityChannelingFinishEvent: DispatchingEvent<[Unit, Ability]>;
175
+ const abilityDestructibleTargetImpactEvent: DispatchingEvent<[Unit, Ability, Destructable]>;
172
176
  }
173
177
  }
174
178
  declare module "../unit" {
175
179
  namespace Unit {
176
- const abilityStopEvent: DispatchingEvent<[Unit, Ability]>;
180
+ const abilityPointTargetImpactEvent: DispatchingEvent<[Unit, Ability, number, number]>;
177
181
  }
178
182
  }
179
183
  declare module "../unit" {
180
184
  namespace Unit {
181
- const abilityCommandEvent: {
182
- readonly [abilityTypeId: number]: {
183
- readonly [orderTypeStringId: string]: Event<[Unit, Ability, string]>;
184
- };
185
- };
185
+ const abilityNoTargetImpactEvent: DispatchingEvent<[Unit, Ability]>;
186
186
  }
187
187
  }
@@ -22,7 +22,12 @@ local checkNotNull = ____preconditions.checkNotNull
22
22
  local ____lazy = require("utility.lazy")
23
23
  local lazyRecord = ____lazy.lazyRecord
24
24
  local ____timer = require("core.types.timer")
25
+ local consumeZeroTimerCallback = ____timer.consumeZeroTimerCallback
25
26
  local Timer = ____timer.Timer
27
+ local ____lua_2Dsets = require("utility.lua-sets")
28
+ local luaSetOf = ____lua_2Dsets.luaSetOf
29
+ local ____attributes = require("attributes")
30
+ local attribute = ____attributes.attribute
26
31
  local eventInvoke = Event.invoke
27
32
  local condition = Condition
28
33
  local createTrigger = CreateTrigger
@@ -347,10 +352,65 @@ rawset(
347
352
  extractAbilityTypeId
348
353
  )
349
354
  )
355
+ local internalAbilityChannelingFinishEvent = __TS__New(UnitTriggerEvent, EVENT_PLAYER_UNIT_SPELL_FINISH, collectUnitAbilityEventParameters)
356
+ rawset(
357
+ Unit,
358
+ "abilityChannelingFinishEvent",
359
+ createDispatchingEvent(internalAbilityChannelingFinishEvent, extractAbilityTypeId)
360
+ )
361
+ local internalAbilityStopEvent = __TS__New(UnitTriggerEvent, EVENT_PLAYER_UNIT_SPELL_ENDCAST, collectUnitAbilityEventParameters)
362
+ rawset(
363
+ Unit,
364
+ "abilityStopEvent",
365
+ createDispatchingEvent(internalAbilityStopEvent, extractAbilityTypeId)
366
+ )
367
+ rawset(
368
+ Unit,
369
+ "abilityCommandEvent",
370
+ lazyRecord(function(abilityTypeId)
371
+ return lazyRecord(function(orderTypeStringId)
372
+ return __TS__New(
373
+ InitializingEvent,
374
+ function(event)
375
+ local trigger = createTrigger()
376
+ triggerRegisterCommandEvent(trigger, abilityTypeId, orderTypeStringId)
377
+ triggerAddCondition(
378
+ trigger,
379
+ condition(function()
380
+ local unit = Unit:of(getTriggerUnit())
381
+ if unit ~= nil then
382
+ local ability = unit:getAbility(abilityTypeId)
383
+ if ability ~= nil then
384
+ eventInvoke(event, unit, ability, orderTypeStringId)
385
+ end
386
+ end
387
+ end)
388
+ )
389
+ end
390
+ )
391
+ end)
392
+ end)
393
+ )
350
394
  local internalAbilityImpactEvent = __TS__New(Event)
351
- internalAbilityChannelingStartEvent:addListener(function(...)
352
- Timer:run(eventInvoke, internalAbilityImpactEvent, ...)
353
- end)
395
+ local impactCallbackIdAttribute = attribute()
396
+ local function invokeImpactEvent(unit, ability, ...)
397
+ ability[impactCallbackIdAttribute] = nil
398
+ eventInvoke(internalAbilityImpactEvent, unit, ability, ...)
399
+ end
400
+ internalAbilityChannelingStartEvent:addListener(
401
+ 999999,
402
+ function(unit, ability, ...)
403
+ ability[impactCallbackIdAttribute] = Timer:run(invokeImpactEvent, unit, ability, ...)
404
+ end
405
+ )
406
+ local function consumeImpactCallback(_, ability)
407
+ local impactCallbackId = ability[impactCallbackIdAttribute]
408
+ if impactCallbackId ~= nil then
409
+ consumeZeroTimerCallback(impactCallbackId)
410
+ end
411
+ end
412
+ internalAbilityChannelingFinishEvent:addListener(999999, consumeImpactCallback)
413
+ internalAbilityStopEvent:addListener(999999, consumeImpactCallback)
354
414
  rawset(
355
415
  Unit,
356
416
  "abilityImpactEvent",
@@ -407,47 +467,14 @@ rawset(
407
467
  extractAbilityTypeId
408
468
  )
409
469
  )
410
- rawset(
411
- Unit,
412
- "abilityChannelingFinishEvent",
413
- createDispatchingEvent(
414
- __TS__New(UnitTriggerEvent, EVENT_PLAYER_UNIT_SPELL_FINISH, collectUnitAbilityEventParameters),
415
- extractAbilityTypeId
416
- )
417
- )
418
- rawset(
419
- Unit,
420
- "abilityStopEvent",
421
- createDispatchingEvent(
422
- __TS__New(UnitTriggerEvent, EVENT_PLAYER_UNIT_SPELL_ENDCAST, collectUnitAbilityEventParameters),
423
- extractAbilityTypeId
424
- )
425
- )
426
- rawset(
427
- Unit,
428
- "abilityCommandEvent",
429
- lazyRecord(function(abilityTypeId)
430
- return lazyRecord(function(orderTypeStringId)
431
- return __TS__New(
432
- InitializingEvent,
433
- function(event)
434
- local trigger = createTrigger()
435
- triggerRegisterCommandEvent(trigger, abilityTypeId, orderTypeStringId)
436
- triggerAddCondition(
437
- trigger,
438
- condition(function()
439
- local unit = Unit:of(getTriggerUnit())
440
- if unit ~= nil then
441
- local ability = unit:getAbility(abilityTypeId)
442
- if ability ~= nil then
443
- eventInvoke(event, unit, ability, orderTypeStringId)
444
- end
445
- end
446
- end)
447
- )
448
- end
449
- )
450
- end)
451
- end)
470
+ local spellEffectOnlyAbilityTypeIds = luaSetOf(fourCC("AAns"))
471
+ internalAbilityChannelingStartEvent:addListener(
472
+ -999999,
473
+ function(unit, ability)
474
+ if spellEffectOnlyAbilityTypeIds[ability.parentTypeId] ~= nil then
475
+ eventInvoke(internalAbilityChannelingFinishEvent, unit, ability)
476
+ eventInvoke(internalAbilityStopEvent, unit, ability)
477
+ end
478
+ end
452
479
  )
453
480
  return ____exports
@@ -0,0 +1,17 @@
1
+ /** @noSelfInFile */
2
+ declare module "../unit" {
3
+ interface Unit {
4
+ strengthBase: number;
5
+ }
6
+ }
7
+ declare module "../unit" {
8
+ interface Unit {
9
+ agilityBase: number;
10
+ }
11
+ }
12
+ declare module "../unit" {
13
+ interface Unit {
14
+ intelligenceBase: number;
15
+ }
16
+ }
17
+ export {};