warscript 0.0.1-dev.32c305a → 0.0.1-dev.3324599

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 (160) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/frame.lua +71 -22
  4. package/core/types/item.d.ts +1 -0
  5. package/core/types/item.lua +1 -0
  6. package/core/types/player.d.ts +16 -0
  7. package/core/types/player.lua +60 -15
  8. package/core/types/playerCamera.d.ts +2 -0
  9. package/core/types/playerCamera.lua +123 -5
  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 -1
  14. package/core/types/timer.lua +27 -2
  15. package/decl/native.d.ts +6 -4
  16. package/destroyable.d.ts +1 -0
  17. package/destroyable.lua +9 -0
  18. package/engine/behavior.d.ts +14 -1
  19. package/engine/behavior.lua +230 -70
  20. package/engine/behaviour/ability/apply-buff.lua +5 -5
  21. package/engine/behaviour/ability/damage.d.ts +3 -0
  22. package/engine/behaviour/ability/damage.lua +8 -2
  23. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  24. package/engine/behaviour/ability/emulate-impact.lua +2 -1
  25. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  26. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  27. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  28. package/engine/behaviour/ability/restore-mana.lua +6 -6
  29. package/engine/behaviour/ability.d.ts +11 -6
  30. package/engine/behaviour/ability.lua +37 -16
  31. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  32. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  33. package/engine/behaviour/unit.d.ts +26 -5
  34. package/engine/behaviour/unit.lua +180 -27
  35. package/engine/buff.d.ts +67 -22
  36. package/engine/buff.lua +371 -182
  37. package/engine/internal/ability.d.ts +3 -1
  38. package/engine/internal/ability.lua +34 -11
  39. package/engine/internal/item/ability.lua +51 -1
  40. package/engine/internal/item/fields.d.ts +12 -0
  41. package/engine/internal/item/fields.lua +33 -0
  42. package/engine/internal/item+owner.lua +12 -6
  43. package/engine/internal/item.d.ts +10 -15
  44. package/engine/internal/item.lua +53 -72
  45. package/engine/internal/mechanics/cast-ability.lua +6 -3
  46. package/engine/internal/misc/frame-coordinates.lua +21 -0
  47. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  48. package/engine/internal/misc/get-terrain-z.lua +11 -0
  49. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  50. package/engine/internal/misc/player-local-handle.lua +5 -0
  51. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  52. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  53. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  54. package/engine/internal/object-data/health-bonus.lua +16 -0
  55. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  56. package/engine/internal/object-data/mana-bonus.lua +16 -0
  57. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  58. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  59. package/engine/internal/unit/ability.d.ts +35 -5
  60. package/engine/internal/unit/ability.lua +96 -21
  61. package/engine/internal/unit/attributes.d.ts +17 -0
  62. package/engine/internal/unit/attributes.lua +46 -0
  63. package/engine/internal/unit/bonus.d.ts +6 -0
  64. package/engine/internal/unit/bonus.lua +33 -3
  65. package/engine/internal/unit/fly-height.d.ts +7 -0
  66. package/engine/internal/unit/fly-height.lua +20 -0
  67. package/engine/internal/unit/interrupts.d.ts +12 -0
  68. package/engine/internal/unit/interrupts.lua +28 -0
  69. package/engine/internal/unit/main-selected.lua +12 -27
  70. package/engine/internal/unit/order.d.ts +20 -0
  71. package/engine/internal/unit/order.lua +136 -0
  72. package/engine/internal/unit/range-event.d.ts +12 -0
  73. package/engine/internal/unit/range-event.lua +90 -0
  74. package/engine/internal/unit/scale.d.ts +7 -0
  75. package/engine/internal/unit/scale.lua +20 -0
  76. package/engine/internal/unit+ability.lua +10 -1
  77. package/engine/internal/unit+bonus.lua +3 -3
  78. package/engine/internal/unit-missile-launch.lua +52 -14
  79. package/engine/internal/unit.d.ts +20 -24
  80. package/engine/internal/unit.lua +232 -240
  81. package/engine/local-client.d.ts +7 -0
  82. package/engine/local-client.lua +86 -1
  83. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  84. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  85. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  86. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  87. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  88. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  89. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  90. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  91. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  92. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  93. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  94. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  95. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  96. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  97. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  98. package/engine/object-data/entry/ability-type.d.ts +2 -0
  99. package/engine/object-data/entry/ability-type.lua +89 -8
  100. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  101. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  102. package/engine/object-data/entry/destructible-type.lua +155 -0
  103. package/engine/object-data/entry/unit-type.d.ts +15 -2
  104. package/engine/object-data/entry/unit-type.lua +135 -33
  105. package/engine/object-field/ability.d.ts +3 -3
  106. package/engine/object-field/ability.lua +9 -8
  107. package/engine/object-field/item.d.ts +22 -0
  108. package/engine/object-field/item.lua +118 -0
  109. package/engine/object-field/unit.d.ts +31 -5
  110. package/engine/object-field/unit.lua +95 -0
  111. package/engine/object-field.d.ts +18 -7
  112. package/engine/object-field.lua +294 -135
  113. package/engine/random.d.ts +10 -0
  114. package/engine/random.lua +21 -0
  115. package/engine/standard/fields/ability.d.ts +2 -2
  116. package/engine/standard/fields/ability.lua +2 -2
  117. package/engine/standard/fields/item.d.ts +4 -0
  118. package/engine/standard/fields/item.lua +6 -0
  119. package/engine/standard/fields/unit.d.ts +12 -0
  120. package/engine/standard/fields/unit.lua +20 -0
  121. package/engine/synchronization.d.ts +11 -0
  122. package/engine/synchronization.lua +77 -0
  123. package/engine/text-tag.d.ts +36 -2
  124. package/engine/text-tag.lua +250 -10
  125. package/engine/unit.d.ts +6 -0
  126. package/engine/unit.lua +6 -0
  127. package/lualib_bundle.lua +1 -1
  128. package/math.d.ts +2 -0
  129. package/math.lua +14 -0
  130. package/net/socket.lua +1 -1
  131. package/objutil/buff.lua +10 -8
  132. package/objutil/object.lua +1 -1
  133. package/operation.lua +1 -4
  134. package/package.json +5 -5
  135. package/patch-lua.lua +15 -0
  136. package/patch-lualib.lua +1 -1
  137. package/utility/arrays.d.ts +1 -0
  138. package/utility/arrays.lua +8 -0
  139. package/utility/callback-array.d.ts +17 -0
  140. package/utility/callback-array.lua +61 -0
  141. package/utility/functions.d.ts +7 -0
  142. package/utility/functions.lua +12 -0
  143. package/utility/linked-map.d.ts +35 -0
  144. package/utility/linked-map.lua +107 -0
  145. package/utility/linked-set.d.ts +4 -1
  146. package/utility/linked-set.lua +46 -1
  147. package/utility/lua-maps.d.ts +12 -2
  148. package/utility/lua-maps.lua +37 -2
  149. package/utility/lua-sets.d.ts +1 -0
  150. package/utility/lua-sets.lua +4 -0
  151. package/utility/records.lua +20 -1
  152. package/utility/types.d.ts +3 -0
  153. package/utility/unordered-map.d.ts +27 -0
  154. package/utility/unordered-map.lua +94 -0
  155. package/core/types/order.d.ts +0 -26
  156. package/core/types/order.lua +0 -65
  157. /package/engine/internal/{object-data/armor-increase.d.ts → misc/frame-coordinates.d.ts} +0 -0
  158. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  159. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  160. /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
  }
@@ -232,6 +232,19 @@ ____exports.getOrderIdByAbilityTypeId = function(abilityTypeId)
232
232
  local parentTypeId = availableFields[abilityTypeId]
233
233
  return order2orderId(orders[____type(parentTypeId) == "number" and parentTypeId or abilityTypeId] or "")
234
234
  end
235
+ ---
236
+ -- @internal For use by internal systems only.
237
+ ____exports.abilityTypeHasField = function(abilityTypeId, field)
238
+ field = ____type(field) == "number" and field or getHandleId(field)
239
+ if commonFields[field] then
240
+ return true
241
+ end
242
+ local id = availableFields[abilityTypeId]
243
+ if ____type(id) == "number" then
244
+ id = availableFields[id]
245
+ end
246
+ return not not (id and id[field])
247
+ end
235
248
  ____exports.Ability = __TS__Class()
236
249
  local Ability = ____exports.Ability
237
250
  Ability.name = "Ability"
@@ -247,15 +260,7 @@ function Ability.prototype.getSnapshot(self)
247
260
  return nil
248
261
  end
249
262
  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])
263
+ return ____exports.abilityTypeHasField(self.typeId, field)
259
264
  end
260
265
  function Ability.prototype.getField(self, field, level)
261
266
  local fieldType = match(
@@ -404,16 +409,28 @@ function UnitAbility.prototype.decrementHideCounter(self)
404
409
  unitHideAbility(self.u, self.typeId, false)
405
410
  end
406
411
  function UnitAbility.prototype.incrementDisableCounter(self)
407
- unitDisableAbility(self.u, self.typeId, true, false)
412
+ local unit = self.u
413
+ local typeId = self.typeId
414
+ unitHideAbility(unit, typeId, true)
415
+ unitDisableAbility(unit, typeId, true, false)
408
416
  self.d = (self.d or 0) + 1
409
417
  end
410
418
  function UnitAbility.prototype.decrementDisableCounter(self)
411
- unitDisableAbility(self.u, self.typeId, false, false)
419
+ local unit = self.u
420
+ local typeId = self.typeId
421
+ unitDisableAbility(unit, typeId, false, false)
422
+ unitHideAbility(unit, typeId, true)
412
423
  self.d = (self.d or 0) - 1
413
424
  end
414
425
  function UnitAbility.prototype.interruptCast(self)
415
426
  self.owner:interruptCast(self.typeId)
416
427
  end
428
+ function UnitAbility.prototype.onDestroy(self)
429
+ if self.owner.state ~= 2 then
430
+ self.owner:removeAbility(self.typeId)
431
+ end
432
+ return UnitAbility.____super.prototype.onDestroy(self)
433
+ end
417
434
  __TS__SetDescriptor(
418
435
  UnitAbility.prototype,
419
436
  "isDisabled",
@@ -506,6 +523,12 @@ function ItemAbility.prototype.interruptCast(self)
506
523
  setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, true)
507
524
  end
508
525
  end
526
+ function ItemAbility.prototype.onDestroy(self)
527
+ if self.owner.state ~= 2 then
528
+ self.owner:removeAbility(self.typeId)
529
+ end
530
+ return ItemAbility.____super.prototype.onDestroy(self)
531
+ end
509
532
  __TS__SetDescriptor(
510
533
  ItemAbility.prototype,
511
534
  "level",
@@ -20,6 +20,7 @@ local ____add_2Ditem_2Dto_2Dslot = require("engine.internal.unit.add-item-to-slo
20
20
  local unitAddItemToSlot = ____add_2Ditem_2Dto_2Dslot.unitAddItemToSlot
21
21
  local isItemOwned = IsItemOwned
22
22
  local isItemPowerup = IsItemPowerup
23
+ local getItemAbility = BlzGetItemAbility
23
24
  local getItemX = GetItemX
24
25
  local getItemY = GetItemY
25
26
  local setAbilityRealLevelField = BlzSetAbilityRealLevelField
@@ -31,6 +32,8 @@ local unitAddItem = UnitAddItem
31
32
  local unitRemoveItem = UnitRemoveItem
32
33
  local unitUseItem = UnitUseItem
33
34
  local unitResetCooldown = UnitResetCooldown
35
+ local unitInventorySize = UnitInventorySize
36
+ local unitItemInSlot = UnitItemInSlot
34
37
  local COOLDOWN_STARTER_ABILITY_TYPE_ID = compiletime(function()
35
38
  if not currentMap then
36
39
  return 0
@@ -65,7 +68,7 @@ ____exports.itemAbilityDummy = assert(CreateUnit(
65
68
  270
66
69
  ))
67
70
  local cooldownStarterItem = UnitAddItemById(____exports.itemAbilityDummy, COOLDOWN_STARTER_ITEM_TYPE_ID)
68
- local cooldownStarterAbility = BlzGetItemAbility(cooldownStarterItem, COOLDOWN_STARTER_ABILITY_TYPE_ID)
71
+ local cooldownStarterAbility = getItemAbility(cooldownStarterItem, COOLDOWN_STARTER_ABILITY_TYPE_ID)
69
72
  ShowUnit(____exports.itemAbilityDummy, false)
70
73
  local function startItemCooldownInternal(handle, cooldown)
71
74
  local cooldownGroup = getItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP)
@@ -153,4 +156,51 @@ ____exports.doAbilityActionForceDummy = function(handle, owner, action, ...)
153
156
  end
154
157
  return result
155
158
  end
159
+ local depth = 0
160
+ local itemBySlot = {}
161
+ ---
162
+ -- @internal For use by internal systems only.
163
+ ____exports.doUnitAbilityAction = function(unit, abilityTypeId, action, ...)
164
+ local ____depth_0 = depth
165
+ depth = ____depth_0 + 1
166
+ local offset = 6 * ____depth_0
167
+ for slot = 0, unitInventorySize(unit) - 1 do
168
+ local item = unitItemInSlot(unit, slot)
169
+ if getItemAbility(item, abilityTypeId) ~= nil then
170
+ local isAlreadyIgnoredInEvents = ignoreEventsItems[item] ~= nil
171
+ if not isAlreadyIgnoredInEvents then
172
+ ignoreEventsItems[item] = true
173
+ end
174
+ unitRemoveItem(unit, item)
175
+ if not isAlreadyIgnoredInEvents then
176
+ ignoreEventsItems[item] = nil
177
+ end
178
+ itemBySlot[offset + slot] = item
179
+ end
180
+ end
181
+ local result = action(unit, ...)
182
+ for slot = 0, unitInventorySize(unit) - 1 do
183
+ local item = itemBySlot[offset + slot]
184
+ if item ~= nil then
185
+ local isAlreadyIgnoredInEvents = ignoreEventsItems[item] ~= nil
186
+ if not isAlreadyIgnoredInEvents then
187
+ ignoreEventsItems[item] = true
188
+ end
189
+ local isPowerup = isItemPowerup(item)
190
+ if isPowerup then
191
+ setItemBooleanField(item, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, false)
192
+ end
193
+ unitAddItemToSlot(unit, item, slot)
194
+ if isPowerup then
195
+ setItemBooleanField(item, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
196
+ end
197
+ if not isAlreadyIgnoredInEvents then
198
+ ignoreEventsItems[item] = nil
199
+ end
200
+ itemBySlot[offset + slot] = nil
201
+ end
202
+ end
203
+ depth = depth - 1
204
+ return result
205
+ end
156
206
  return ____exports
@@ -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
@@ -6,12 +6,18 @@ 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.itemPickedUpEvent:addListener(function(unit, item)
10
- ownerByItem[item] = unit
11
- end)
12
- Unit.itemDroppedEvent:addListener(function(unit, item)
13
- ownerByItem[item] = nil
14
- end)
9
+ Unit.itemPickedUpEvent:addListener(
10
+ 4,
11
+ function(unit, item)
12
+ ownerByItem[item] = unit
13
+ end
14
+ )
15
+ Unit.itemDroppedEvent:addListener(
16
+ 4,
17
+ function(unit, item)
18
+ ownerByItem[item] = nil
19
+ end
20
+ )
15
21
  __TS__ObjectDefineProperty(
16
22
  Item.prototype,
17
23
  "owner",
@@ -8,12 +8,10 @@ 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,
12
- LUA_INDEX_BY_ABILITY_TYPE_ID = 101
11
+ ABILITIES = 100
13
12
  }
14
13
  export declare class Item extends Handle<jitem> {
15
14
  private readonly [ItemPropertyKey.ABILITIES];
16
- private readonly [ItemPropertyKey.LUA_INDEX_BY_ABILITY_TYPE_ID];
17
15
  constructor(handle: jitem);
18
16
  protected onDestroy(): HandleDestructor;
19
17
  static create<T extends Item>(this: typeof Item & (new (handle: jitem) => T), id: number, x: number, y: number, skinId?: number): T;
@@ -30,22 +28,18 @@ export declare class Item extends Handle<jitem> {
30
28
  get extendedTooltip(): string;
31
29
  set iconPath(v: string);
32
30
  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;
31
+ set dropsOnDeath(dropsOnDeath: boolean);
32
+ get dropsOnDeath(): boolean;
33
+ set canBeDropped(canBeDropped: boolean);
34
+ get canBeDropped(): boolean;
35
+ set perishes(perishes: boolean);
36
+ get perishes(): boolean;
37
+ set isPowerUp(isPowerUp: boolean);
38
+ get isPowerUp(): boolean;
43
39
  get isAlive(): boolean;
44
40
  get isDead(): boolean;
45
41
  set isInvulnerable(isInvulnerable: boolean);
46
42
  get isInvulnerable(): boolean;
47
- set usable(v: boolean);
48
- get usable(): boolean;
49
43
  set visible(v: boolean);
50
44
  get visible(): boolean;
51
45
  set level(v: number);
@@ -74,6 +68,7 @@ export declare class Item extends Handle<jitem> {
74
68
  set charges(v: number);
75
69
  get charges(): number;
76
70
  consumeCharge(): boolean;
71
+ consumeCharges(count: number): boolean;
77
72
  addAbility(abilityTypeId: AbilityTypeId): ItemAbility | undefined;
78
73
  removeAbility(abilityTypeId: AbilityTypeId): boolean;
79
74
  hasAbility(abilityTypeId: AbilityTypeId): boolean;
@@ -46,9 +46,18 @@ local getItemY = GetItemY
46
46
  local getItemCharges = GetItemCharges
47
47
  local setItemCharges = SetItemCharges
48
48
  local unitRemoveAbility = UnitRemoveAbility
49
+ local unitRemoveItem = UnitRemoveItem
49
50
  local unitUseItem = UnitUseItem
50
51
  local unitUseItemPoint = UnitUseItemPoint
51
52
  local unitUseItemTarget = UnitUseItemTarget
53
+ local setItemDropOnDeath = SetItemDropOnDeath
54
+ local setItemDroppable = SetItemDroppable
55
+ local setItemPawnable = SetItemPawnable
56
+ local isItemPawnable = IsItemPawnable
57
+ local getItemIntegerField = BlzGetItemIntegerField
58
+ local setItemBooleanField = BlzSetItemBooleanField
59
+ local getItemBooleanField = BlzGetItemBooleanField
60
+ local tableRemove = table.remove
52
61
  _G.SetItemCharges = function(whichItem, charges)
53
62
  setItemCharges(whichItem, charges)
54
63
  invoke(
@@ -56,9 +65,6 @@ _G.SetItemCharges = function(whichItem, charges)
56
65
  ____exports.Item:of(whichItem)
57
66
  )
58
67
  end
59
- local getItemIntegerField = BlzGetItemIntegerField
60
- local setItemBooleanField = BlzSetItemBooleanField
61
- local getItemBooleanField = BlzGetItemBooleanField
62
68
  invoke = Event.invoke
63
69
  local enumRect = Rect:create(0, 0, 0, 0).handle
64
70
  ---
@@ -137,15 +143,13 @@ Item.name = "Item"
137
143
  __TS__ClassExtends(Item, Handle)
138
144
  function Item.prototype.____constructor(self, handle)
139
145
  Handle.prototype.____constructor(self, handle)
140
- local abilities = doAbilityAction(handle, getItemAbilities, self)
141
- self[100] = abilities
142
- local luaIndexByAbilityTypeId = {}
143
- for i = 1, #abilities do
144
- luaIndexByAbilityTypeId[abilities[i].typeId] = i
145
- end
146
- self[101] = luaIndexByAbilityTypeId
146
+ self[100] = doAbilityAction(handle, getItemAbilities, self)
147
147
  end
148
148
  function Item.prototype.onDestroy(self)
149
+ local owner = self.owner
150
+ if owner ~= nil then
151
+ unitRemoveItem(owner.handle, self.handle)
152
+ end
149
153
  local abilities = self[100]
150
154
  for i = 1, #abilities do
151
155
  abilities[i]:destroy()
@@ -157,14 +161,17 @@ function Item.create(self, id, x, y, skinId)
157
161
  return self:of(BlzCreateItemWithSkin(id, x, y, skinId or id))
158
162
  end
159
163
  function Item.prototype.consumeCharge(self)
164
+ return self:consumeCharges(1)
165
+ end
166
+ function Item.prototype.consumeCharges(self, count)
160
167
  local handle = self.handle
161
168
  local charges = getItemCharges(handle)
162
- if charges >= 2 then
163
- setItemCharges(handle, charges - 1)
169
+ if charges > count then
170
+ setItemCharges(handle, charges - count)
164
171
  invoke(itemChargesChangeEvent, self)
165
172
  return true
166
173
  end
167
- if charges == 1 then
174
+ if charges == count then
168
175
  if getItemBooleanField(handle, ITEM_BF_PERISHABLE) then
169
176
  self:destroy()
170
177
  return true
@@ -174,6 +181,7 @@ function Item.prototype.consumeCharge(self)
174
181
  invoke(itemChargesChangeEvent, self)
175
182
  return true
176
183
  end
184
+ setItemCharges(handle, 1)
177
185
  local ____doAbilityActionForceDummy_2 = doAbilityActionForceDummy
178
186
  local ____opt_0 = self.owner
179
187
  ____doAbilityActionForceDummy_2(handle, ____opt_0 and ____opt_0.handle, consumeCharge)
@@ -187,33 +195,32 @@ function Item.prototype.addAbility(self, abilityTypeId)
187
195
  if nativeAbility ~= nil then
188
196
  local ability = ItemAbility:of(nativeAbility, abilityTypeId, self)
189
197
  local abilities = self[100]
190
- local luaIndex = #abilities + 1
191
- abilities[luaIndex] = ability
192
- self[101][abilityTypeId] = luaIndex
198
+ abilities[#abilities + 1] = ability
193
199
  return ability
194
200
  end
195
201
  return nil
196
202
  end
197
203
  function Item.prototype.removeAbility(self, abilityTypeId)
198
- local luaIndexByAbilityTypeId = self[101]
199
- local luaIndex = luaIndexByAbilityTypeId[abilityTypeId]
200
- if luaIndex ~= nil and doAbilityAction(self.handle, itemRemoveAbility, abilityTypeId) then
201
- luaIndexByAbilityTypeId[abilityTypeId] = nil
202
- local abilities = self[100]
203
- abilities[luaIndex]:destroy()
204
- local abilityTypeIdsLength = #abilities
205
- for j = luaIndex, abilityTypeIdsLength do
206
- abilities[j] = abilities[j + 1]
204
+ local abilities = self[100]
205
+ for i = 1, #abilities do
206
+ if abilities[i].typeId == abilityTypeId then
207
+ local ability = abilities[i]
208
+ tableRemove(abilities, i)
209
+ ability:destroy()
210
+ return true
207
211
  end
208
212
  end
209
- return false
213
+ return doAbilityAction(self.handle, itemRemoveAbility, abilityTypeId)
210
214
  end
211
215
  function Item.prototype.hasAbility(self, abilityTypeId)
212
- return self[101][abilityTypeId] ~= nil
216
+ return doAbilityAction(self.handle, getItemAbility, abilityTypeId) ~= nil
213
217
  end
214
218
  function Item.prototype.getAbility(self, abilityTypeId)
215
- local ability = self[101][abilityTypeId] ~= nil and doAbilityAction(self.handle, getItemAbility, abilityTypeId)
216
- return ability and ItemAbility:of(ability, abilityTypeId, self) or nil
219
+ return ItemAbility:of(
220
+ doAbilityAction(self.handle, getItemAbility, abilityTypeId),
221
+ abilityTypeId,
222
+ self
223
+ )
217
224
  end
218
225
  function Item.getInRange(self, x, y, range)
219
226
  targetCollection = {}
@@ -325,65 +332,55 @@ __TS__SetDescriptor(
325
332
  )
326
333
  __TS__SetDescriptor(
327
334
  Item.prototype,
328
- "dropOnDeath",
329
- {
330
- get = function(self)
331
- return BlzGetItemBooleanField(self.handle, ITEM_BF_DROPPED_WHEN_CARRIER_DIES)
332
- end,
333
- set = function(self, v)
334
- SetItemDropOnDeath(self.handle, v)
335
- end
336
- },
337
- true
338
- )
339
- __TS__SetDescriptor(
340
- Item.prototype,
341
- "droppable",
335
+ "dropsOnDeath",
342
336
  {
343
337
  get = function(self)
344
- return BlzGetItemBooleanField(self.handle, ITEM_BF_CAN_BE_DROPPED)
338
+ return getItemBooleanField(self.handle, ITEM_BF_DROPPED_WHEN_CARRIER_DIES)
345
339
  end,
346
- set = function(self, v)
347
- SetItemDroppable(self.handle, v)
340
+ set = function(self, dropsOnDeath)
341
+ setItemDropOnDeath(self.handle, dropsOnDeath)
348
342
  end
349
343
  },
350
344
  true
351
345
  )
352
346
  __TS__SetDescriptor(
353
347
  Item.prototype,
354
- "pawnable",
348
+ "canBeDropped",
355
349
  {
356
350
  get = function(self)
357
- return IsItemPawnable(self.handle)
351
+ return getItemBooleanField(self.handle, ITEM_BF_CAN_BE_DROPPED)
358
352
  end,
359
- set = function(self, v)
360
- SetItemPawnable(self.handle, v)
353
+ set = function(self, canBeDropped)
354
+ setItemDroppable(self.handle, canBeDropped)
361
355
  end
362
356
  },
363
357
  true
364
358
  )
365
359
  __TS__SetDescriptor(
366
360
  Item.prototype,
367
- "perishable",
361
+ "perishes",
368
362
  {
369
363
  get = function(self)
370
364
  return getItemBooleanField(self.handle, ITEM_BF_PERISHABLE)
371
365
  end,
372
- set = function(self, v)
373
- BlzSetItemBooleanField(self.handle, ITEM_BF_PERISHABLE, v)
366
+ set = function(self, perishes)
367
+ local handle = self.handle
368
+ local powerUp = isItemPowerup(handle)
369
+ setItemBooleanField(handle, ITEM_BF_PERISHABLE, perishes)
370
+ setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, powerUp)
374
371
  end
375
372
  },
376
373
  true
377
374
  )
378
375
  __TS__SetDescriptor(
379
376
  Item.prototype,
380
- "powerup",
377
+ "isPowerUp",
381
378
  {
382
379
  get = function(self)
383
380
  return isItemPowerup(self.handle)
384
381
  end,
385
- set = function(self, v)
386
- setItemBooleanField(self.handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, v)
382
+ set = function(self, isPowerUp)
383
+ setItemBooleanField(self.handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, isPowerUp)
387
384
  end
388
385
  },
389
386
  true
@@ -417,22 +414,6 @@ __TS__SetDescriptor(
417
414
  },
418
415
  true
419
416
  )
420
- __TS__SetDescriptor(
421
- Item.prototype,
422
- "usable",
423
- {
424
- get = function(self)
425
- return getItemBooleanField(self.handle, ITEM_BF_ACTIVELY_USED)
426
- end,
427
- set = function(self, v)
428
- local handle = self.handle
429
- local powerup = isItemPowerup(handle)
430
- setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, v)
431
- setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, powerup)
432
- end
433
- },
434
- true
435
- )
436
417
  __TS__SetDescriptor(
437
418
  Item.prototype,
438
419
  "visible",
@@ -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
@@ -0,0 +1,21 @@
1
+ local ____exports = {}
2
+ local getLocalClientWidth = BlzGetLocalClientWidth
3
+ local getLocalClientHeight = BlzGetLocalClientHeight
4
+ ---
5
+ -- @internal For use by internal systems only.
6
+ ____exports.getFrameMinXMaxX = function()
7
+ local w = getLocalClientWidth()
8
+ local h = getLocalClientHeight()
9
+ local width4by3 = (w - h / 600 * 800) / 2
10
+ local pxtodpi = 0.6 / h
11
+ local minX = -width4by3 * pxtodpi
12
+ local maxX = minX + w * pxtodpi
13
+ return minX, maxX
14
+ end
15
+ ---
16
+ -- @internal For use by internal systems only.
17
+ ____exports.FRAME_MIN_Y = 0
18
+ ---
19
+ -- @internal For use by internal systems only.
20
+ ____exports.FRAME_MAX_Y = 0.6
21
+ return ____exports
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export {};
@@ -0,0 +1,11 @@
1
+ local ____exports = {}
2
+ local getLocationZ = GetLocationZ
3
+ local moveLocation = MoveLocation
4
+ local location = Location(0, 0)
5
+ ---
6
+ -- @internal For use by internal systems only.
7
+ ____exports.getTerrainZ = function(x, y)
8
+ moveLocation(location, x, y)
9
+ return getLocationZ(location)
10
+ end
11
+ return ____exports
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export {};
@@ -0,0 +1,5 @@
1
+ local ____exports = {}
2
+ ---
3
+ -- @internal For use by internal systems only.
4
+ ____exports.PLAYER_LOCAL_HANDLE = GetLocalPlayer()
5
+ return ____exports
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export {};
@@ -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 {};