warscript 0.0.1-dev.6745db1 → 0.0.1-dev.685e1bc

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 (136) 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/item.d.ts +1 -0
  5. package/core/types/item.lua +1 -0
  6. package/core/types/player.d.ts +17 -1
  7. package/core/types/player.lua +67 -23
  8. package/core/types/playerCamera.lua +44 -0
  9. package/core/types/sound.lua +1 -1
  10. package/core/types/tileCell.d.ts +11 -1
  11. package/core/types/tileCell.lua +97 -0
  12. package/core/types/timer.d.ts +3 -2
  13. package/core/types/timer.lua +22 -2
  14. package/decl/native.d.ts +2 -2
  15. package/destroyable.d.ts +1 -0
  16. package/destroyable.lua +9 -0
  17. package/engine/behavior.d.ts +12 -1
  18. package/engine/behavior.lua +199 -65
  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 +15 -5
  30. package/engine/behaviour/unit.lua +126 -22
  31. package/engine/buff.d.ts +65 -21
  32. package/engine/buff.lua +362 -179
  33. package/engine/internal/ability.d.ts +3 -1
  34. package/engine/internal/ability.lua +41 -24
  35. package/engine/internal/item/fields.d.ts +12 -0
  36. package/engine/internal/item/fields.lua +33 -0
  37. package/engine/internal/item.d.ts +11 -14
  38. package/engine/internal/item.lua +76 -70
  39. package/engine/internal/mechanics/cast-ability.lua +6 -3
  40. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  41. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  42. package/engine/internal/object-data/health-bonus.lua +16 -0
  43. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  44. package/engine/internal/object-data/mana-bonus.lua +16 -0
  45. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  46. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  47. package/engine/internal/unit/ability.d.ts +14 -14
  48. package/engine/internal/unit/ability.lua +72 -45
  49. package/engine/internal/unit/attributes.d.ts +17 -0
  50. package/engine/internal/unit/attributes.lua +46 -0
  51. package/engine/internal/unit/bonus.d.ts +6 -0
  52. package/engine/internal/unit/bonus.lua +33 -3
  53. package/engine/internal/unit/fly-height.d.ts +7 -0
  54. package/engine/internal/unit/fly-height.lua +20 -0
  55. package/engine/internal/unit/interrupts.d.ts +12 -0
  56. package/engine/internal/unit/interrupts.lua +28 -0
  57. package/engine/internal/unit/main-selected.lua +12 -27
  58. package/engine/internal/unit/range-event.d.ts +12 -0
  59. package/engine/internal/unit/range-event.lua +90 -0
  60. package/engine/internal/unit/scale.d.ts +7 -0
  61. package/engine/internal/unit/scale.lua +20 -0
  62. package/engine/internal/unit+bonus.lua +3 -3
  63. package/engine/internal/unit-missile-launch.lua +51 -20
  64. package/engine/internal/unit.d.ts +17 -21
  65. package/engine/internal/unit.lua +170 -195
  66. package/engine/local-client.d.ts +7 -0
  67. package/engine/local-client.lua +86 -1
  68. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  69. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  70. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  71. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  72. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  73. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  74. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  75. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  76. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  77. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  78. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  79. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  80. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  81. package/engine/object-data/entry/ability-type.d.ts +2 -0
  82. package/engine/object-data/entry/ability-type.lua +88 -5
  83. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  84. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  85. package/engine/object-data/entry/destructible-type.lua +155 -0
  86. package/engine/object-data/entry/unit-type.d.ts +4 -0
  87. package/engine/object-data/entry/unit-type.lua +76 -32
  88. package/engine/object-field/ability.d.ts +3 -3
  89. package/engine/object-field/ability.lua +9 -8
  90. package/engine/object-field/item.d.ts +22 -0
  91. package/engine/object-field/item.lua +118 -0
  92. package/engine/object-field/unit.d.ts +20 -5
  93. package/engine/object-field/unit.lua +61 -0
  94. package/engine/object-field.d.ts +12 -4
  95. package/engine/object-field.lua +273 -126
  96. package/engine/random.d.ts +10 -0
  97. package/engine/random.lua +21 -0
  98. package/engine/standard/fields/ability.d.ts +2 -2
  99. package/engine/standard/fields/ability.lua +2 -2
  100. package/engine/standard/fields/item.d.ts +4 -0
  101. package/engine/standard/fields/item.lua +6 -0
  102. package/engine/standard/fields/unit.d.ts +11 -3
  103. package/engine/standard/fields/unit.lua +15 -2
  104. package/engine/synchronization.d.ts +11 -0
  105. package/engine/synchronization.lua +77 -0
  106. package/engine/text-tag.lua +3 -2
  107. package/engine/unit.d.ts +5 -0
  108. package/engine/unit.lua +5 -0
  109. package/lualib_bundle.lua +1 -1
  110. package/math.d.ts +2 -0
  111. package/math.lua +14 -0
  112. package/net/socket.lua +1 -1
  113. package/objutil/buff.lua +10 -8
  114. package/objutil/object.lua +1 -1
  115. package/operation.lua +1 -4
  116. package/package.json +5 -5
  117. package/patch-lua.lua +15 -0
  118. package/patch-lualib.lua +1 -1
  119. package/utility/arrays.d.ts +1 -0
  120. package/utility/arrays.lua +8 -0
  121. package/utility/callback-array.d.ts +17 -0
  122. package/utility/callback-array.lua +61 -0
  123. package/utility/linked-map.d.ts +35 -0
  124. package/utility/linked-map.lua +107 -0
  125. package/utility/linked-set.d.ts +4 -1
  126. package/utility/linked-set.lua +46 -1
  127. package/utility/lua-maps.d.ts +11 -2
  128. package/utility/lua-maps.lua +33 -2
  129. package/utility/records.lua +20 -1
  130. package/utility/types.d.ts +3 -0
  131. package/utility/unordered-map.d.ts +27 -0
  132. package/utility/unordered-map.lua +99 -0
  133. /package/engine/internal/object-data/{armor-increase.d.ts → armor-bonus.d.ts} +0 -0
  134. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  135. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  136. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -1,5 +1,5 @@
1
1
  /** @noSelfInFile */
2
- import { Handle } from "../../core/types/handle";
2
+ import { Handle, HandleDestructor } from "../../core/types/handle";
3
3
  import { Event } from "../../event";
4
4
  import type { Item } from "../../core/types/item";
5
5
  import type { Unit } from "./unit";
@@ -67,6 +67,7 @@ export declare class UnitAbility extends Ability {
67
67
  get cooldownRemaining(): number;
68
68
  set cooldownRemaining(cooldownRemaining: number);
69
69
  interruptCast(): void;
70
+ protected onDestroy(): HandleDestructor;
70
71
  static get onCreate(): Event<[UnitAbility]>;
71
72
  static get onDestroy(): Event<[UnitAbility]>;
72
73
  }
@@ -93,6 +94,7 @@ export declare class ItemAbility extends Ability {
93
94
  get cooldownRemaining(): number;
94
95
  set cooldownRemaining(cooldownRemaining: number);
95
96
  interruptCast(): void;
97
+ protected onDestroy(): HandleDestructor;
96
98
  static get onCreate(): Event<[ItemAbility]>;
97
99
  static get onDestroy(): Event<[ItemAbility]>;
98
100
  }
@@ -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
@@ -232,6 +230,19 @@ ____exports.getOrderIdByAbilityTypeId = function(abilityTypeId)
232
230
  local parentTypeId = availableFields[abilityTypeId]
233
231
  return order2orderId(orders[____type(parentTypeId) == "number" and parentTypeId or abilityTypeId] or "")
234
232
  end
233
+ ---
234
+ -- @internal For use by internal systems only.
235
+ ____exports.abilityTypeHasField = function(abilityTypeId, field)
236
+ field = ____type(field) == "number" and field or getHandleId(field)
237
+ if commonFields[field] then
238
+ return true
239
+ end
240
+ local id = availableFields[abilityTypeId]
241
+ if ____type(id) == "number" then
242
+ id = availableFields[id]
243
+ end
244
+ return not not (id and id[field])
245
+ end
235
246
  ____exports.Ability = __TS__Class()
236
247
  local Ability = ____exports.Ability
237
248
  Ability.name = "Ability"
@@ -247,15 +258,7 @@ function Ability.prototype.getSnapshot(self)
247
258
  return nil
248
259
  end
249
260
  function Ability.prototype.hasField(self, field)
250
- field = ____type(field) == "number" and field or getHandleId(field)
251
- if commonFields[field] then
252
- return true
253
- end
254
- local id = availableFields[self.typeId]
255
- if ____type(id) == "number" then
256
- id = availableFields[id]
257
- end
258
- return not not (id and id[field])
261
+ return ____exports.abilityTypeHasField(self.typeId, field)
259
262
  end
260
263
  function Ability.prototype.getField(self, field, level)
261
264
  local fieldType = match(
@@ -420,6 +423,12 @@ end
420
423
  function UnitAbility.prototype.interruptCast(self)
421
424
  self.owner:interruptCast(self.typeId)
422
425
  end
426
+ function UnitAbility.prototype.onDestroy(self)
427
+ if self.owner.state ~= 2 then
428
+ self.owner:removeAbility(self.typeId)
429
+ end
430
+ return UnitAbility.____super.prototype.onDestroy(self)
431
+ end
423
432
  __TS__SetDescriptor(
424
433
  UnitAbility.prototype,
425
434
  "isDisabled",
@@ -505,12 +514,20 @@ function ItemAbility.prototype.setField(self, field, levelOrValue, value)
505
514
  )
506
515
  end
507
516
  function ItemAbility.prototype.interruptCast(self)
508
- local handle = self.owner.handle
509
- local activelyUsed = getItemBooleanField(handle, ITEM_BF_ACTIVELY_USED)
510
- if activelyUsed then
511
- setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, false)
512
- 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
+ end
525
+ end
526
+ function ItemAbility.prototype.onDestroy(self)
527
+ if self.owner.state ~= 2 then
528
+ self.owner:removeAbility(self.typeId)
513
529
  end
530
+ return ItemAbility.____super.prototype.onDestroy(self)
514
531
  end
515
532
  __TS__SetDescriptor(
516
533
  ItemAbility.prototype,
@@ -526,17 +543,17 @@ __TS__SetDescriptor(
526
543
  {
527
544
  get = function(self)
528
545
  local item = self.owner
529
- local ____doAbilityActionForceDummy_4 = doAbilityActionForceDummy
530
- local ____item_handle_3 = item.handle
531
- local ____opt_1 = item.owner
532
- 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)
533
550
  end,
534
551
  set = function(self, cooldownRemaining)
535
552
  local item = self.owner
536
- local ____startItemCooldown_8 = startItemCooldown
537
- local ____item_handle_7 = item.handle
538
- local ____opt_5 = item.owner
539
- ____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)
540
557
  end
541
558
  },
542
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
@@ -9,11 +9,11 @@ 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
11
  ABILITIES = 100,
12
- LUA_INDEX_BY_ABILITY_TYPE_ID = 101
12
+ DEATH_TRIGGER = 101
13
13
  }
14
14
  export declare class Item extends Handle<jitem> {
15
15
  private readonly [ItemPropertyKey.ABILITIES];
16
- private readonly [ItemPropertyKey.LUA_INDEX_BY_ABILITY_TYPE_ID];
16
+ private readonly [ItemPropertyKey.DEATH_TRIGGER];
17
17
  constructor(handle: jitem);
18
18
  protected onDestroy(): HandleDestructor;
19
19
  static create<T extends Item>(this: typeof Item & (new (handle: jitem) => T), id: number, x: number, y: number, skinId?: number): T;
@@ -30,22 +30,18 @@ export declare class Item extends Handle<jitem> {
30
30
  get extendedTooltip(): string;
31
31
  set iconPath(v: string);
32
32
  get iconPath(): string;
33
- set dropOnDeath(v: boolean);
34
- get dropOnDeath(): boolean;
35
- set droppable(v: boolean);
36
- get droppable(): boolean;
37
- set pawnable(v: boolean);
38
- get pawnable(): boolean;
39
- set perishable(v: boolean);
40
- get perishable(): boolean;
41
- set powerup(v: boolean);
42
- 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;
43
41
  get isAlive(): boolean;
44
42
  get isDead(): boolean;
45
43
  set isInvulnerable(isInvulnerable: boolean);
46
44
  get isInvulnerable(): boolean;
47
- set usable(v: boolean);
48
- get usable(): boolean;
49
45
  set visible(v: boolean);
50
46
  get visible(): boolean;
51
47
  set level(v: number);
@@ -84,6 +80,7 @@ export declare class Item extends Handle<jitem> {
84
80
  static getInRect(rect: ReadonlyRect): Item[];
85
81
  static get onCreate(): Event<[Item]>;
86
82
  static get destroyEvent(): Event<[Item]>;
83
+ static readonly deathEvent: Event<[Item]>;
87
84
  static readonly chargesChangedEvent: Event<[Item]>;
88
85
  }
89
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,6 +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
67
+ local tableRemove = table.remove
68
+ local itemChargesChangeEvent = __TS__New(Event)
69
+ local itemDeathEvent = __TS__New(Event)
53
70
  _G.SetItemCharges = function(whichItem, charges)
54
71
  setItemCharges(whichItem, charges)
55
72
  invoke(
@@ -57,9 +74,6 @@ _G.SetItemCharges = function(whichItem, charges)
57
74
  ____exports.Item:of(whichItem)
58
75
  )
59
76
  end
60
- local getItemIntegerField = BlzGetItemIntegerField
61
- local setItemBooleanField = BlzSetItemBooleanField
62
- local getItemBooleanField = BlzGetItemBooleanField
63
77
  invoke = Event.invoke
64
78
  local enumRect = Rect:create(0, 0, 0, 0).handle
65
79
  ---
@@ -132,19 +146,36 @@ local function collectIntoTargetRange()
132
146
  targetCollectionNextIndex = targetCollectionNextIndex + 1
133
147
  end
134
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
+ )
135
168
  ____exports.Item = __TS__Class()
136
169
  local Item = ____exports.Item
137
170
  Item.name = "Item"
138
171
  __TS__ClassExtends(Item, Handle)
139
172
  function Item.prototype.____constructor(self, handle)
140
173
  Handle.prototype.____constructor(self, handle)
141
- local abilities = doAbilityAction(handle, getItemAbilities, self)
142
- self[100] = abilities
143
- local luaIndexByAbilityTypeId = {}
144
- for i = 1, #abilities do
145
- luaIndexByAbilityTypeId[abilities[i].typeId] = i
146
- end
147
- self[101] = luaIndexByAbilityTypeId
174
+ self[100] = doAbilityAction(handle, getItemAbilities, self)
175
+ local deathTrigger = createTrigger()
176
+ triggerRegisterDeathEvent(deathTrigger, handle)
177
+ triggerAddCondition(deathTrigger, deathTriggerCondition)
178
+ self[101] = deathTrigger
148
179
  end
149
180
  function Item.prototype.onDestroy(self)
150
181
  local owner = self.owner
@@ -156,6 +187,7 @@ function Item.prototype.onDestroy(self)
156
187
  abilities[i]:destroy()
157
188
  end
158
189
  removeItem(self.handle)
190
+ destroyTrigger(self[101])
159
191
  return Handle.prototype.onDestroy(self)
160
192
  end
161
193
  function Item.create(self, id, x, y, skinId)
@@ -196,33 +228,32 @@ function Item.prototype.addAbility(self, abilityTypeId)
196
228
  if nativeAbility ~= nil then
197
229
  local ability = ItemAbility:of(nativeAbility, abilityTypeId, self)
198
230
  local abilities = self[100]
199
- local luaIndex = #abilities + 1
200
- abilities[luaIndex] = ability
201
- self[101][abilityTypeId] = luaIndex
231
+ abilities[#abilities + 1] = ability
202
232
  return ability
203
233
  end
204
234
  return nil
205
235
  end
206
236
  function Item.prototype.removeAbility(self, abilityTypeId)
207
- local luaIndexByAbilityTypeId = self[101]
208
- local luaIndex = luaIndexByAbilityTypeId[abilityTypeId]
209
- if luaIndex ~= nil and doAbilityAction(self.handle, itemRemoveAbility, abilityTypeId) then
210
- luaIndexByAbilityTypeId[abilityTypeId] = nil
211
- local abilities = self[100]
212
- abilities[luaIndex]:destroy()
213
- local abilityTypeIdsLength = #abilities
214
- for j = luaIndex, abilityTypeIdsLength do
215
- abilities[j] = abilities[j + 1]
237
+ local abilities = self[100]
238
+ for i = 1, #abilities do
239
+ if abilities[i].typeId == abilityTypeId then
240
+ local ability = abilities[i]
241
+ tableRemove(abilities, i)
242
+ ability:destroy()
243
+ return true
216
244
  end
217
245
  end
218
- return false
246
+ return doAbilityAction(self.handle, itemRemoveAbility, abilityTypeId)
219
247
  end
220
248
  function Item.prototype.hasAbility(self, abilityTypeId)
221
- return self[101][abilityTypeId] ~= nil
249
+ return doAbilityAction(self.handle, getItemAbility, abilityTypeId) ~= nil
222
250
  end
223
251
  function Item.prototype.getAbility(self, abilityTypeId)
224
- local ability = self[101][abilityTypeId] ~= nil and doAbilityAction(self.handle, getItemAbility, abilityTypeId)
225
- return ability and ItemAbility:of(ability, abilityTypeId, self) or nil
252
+ return ItemAbility:of(
253
+ doAbilityAction(self.handle, getItemAbility, abilityTypeId),
254
+ abilityTypeId,
255
+ self
256
+ )
226
257
  end
227
258
  function Item.getInRange(self, x, y, range)
228
259
  targetCollection = {}
@@ -334,65 +365,55 @@ __TS__SetDescriptor(
334
365
  )
335
366
  __TS__SetDescriptor(
336
367
  Item.prototype,
337
- "dropOnDeath",
338
- {
339
- get = function(self)
340
- return BlzGetItemBooleanField(self.handle, ITEM_BF_DROPPED_WHEN_CARRIER_DIES)
341
- end,
342
- set = function(self, v)
343
- SetItemDropOnDeath(self.handle, v)
344
- end
345
- },
346
- true
347
- )
348
- __TS__SetDescriptor(
349
- Item.prototype,
350
- "droppable",
368
+ "dropsOnDeath",
351
369
  {
352
370
  get = function(self)
353
- return BlzGetItemBooleanField(self.handle, ITEM_BF_CAN_BE_DROPPED)
371
+ return getItemBooleanField(self.handle, ITEM_BF_DROPPED_WHEN_CARRIER_DIES)
354
372
  end,
355
- set = function(self, v)
356
- SetItemDroppable(self.handle, v)
373
+ set = function(self, dropsOnDeath)
374
+ setItemDropOnDeath(self.handle, dropsOnDeath)
357
375
  end
358
376
  },
359
377
  true
360
378
  )
361
379
  __TS__SetDescriptor(
362
380
  Item.prototype,
363
- "pawnable",
381
+ "canBeDropped",
364
382
  {
365
383
  get = function(self)
366
- return IsItemPawnable(self.handle)
384
+ return getItemBooleanField(self.handle, ITEM_BF_CAN_BE_DROPPED)
367
385
  end,
368
- set = function(self, v)
369
- SetItemPawnable(self.handle, v)
386
+ set = function(self, canBeDropped)
387
+ setItemDroppable(self.handle, canBeDropped)
370
388
  end
371
389
  },
372
390
  true
373
391
  )
374
392
  __TS__SetDescriptor(
375
393
  Item.prototype,
376
- "perishable",
394
+ "perishes",
377
395
  {
378
396
  get = function(self)
379
397
  return getItemBooleanField(self.handle, ITEM_BF_PERISHABLE)
380
398
  end,
381
- set = function(self, v)
382
- 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)
383
404
  end
384
405
  },
385
406
  true
386
407
  )
387
408
  __TS__SetDescriptor(
388
409
  Item.prototype,
389
- "powerup",
410
+ "isPowerUp",
390
411
  {
391
412
  get = function(self)
392
413
  return isItemPowerup(self.handle)
393
414
  end,
394
- set = function(self, v)
395
- 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)
396
417
  end
397
418
  },
398
419
  true
@@ -426,22 +447,6 @@ __TS__SetDescriptor(
426
447
  },
427
448
  true
428
449
  )
429
- __TS__SetDescriptor(
430
- Item.prototype,
431
- "usable",
432
- {
433
- get = function(self)
434
- return getItemBooleanField(self.handle, ITEM_BF_ACTIVELY_USED)
435
- end,
436
- set = function(self, v)
437
- local handle = self.handle
438
- local powerup = isItemPowerup(handle)
439
- setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, v)
440
- setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, powerup)
441
- end
442
- },
443
- true
444
- )
445
450
  __TS__SetDescriptor(
446
451
  Item.prototype,
447
452
  "visible",
@@ -663,6 +668,7 @@ __TS__ObjectDefineProperty(
663
668
  return self.onDestroyEvent
664
669
  end}
665
670
  )
671
+ Item.deathEvent = itemDeathEvent
666
672
  Item.chargesChangedEvent = itemChargesChangeEvent
667
673
  local getManipulatedItem = GetManipulatedItem
668
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
  }