warscript 0.0.1-dev.3b2adda → 0.0.1-dev.3b93f8c

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 (149) 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/player.d.ts +16 -0
  5. package/core/types/player.lua +60 -15
  6. package/core/types/playerCamera.d.ts +2 -0
  7. package/core/types/playerCamera.lua +123 -5
  8. package/core/types/sound.lua +1 -1
  9. package/core/types/tileCell.d.ts +11 -1
  10. package/core/types/tileCell.lua +97 -0
  11. package/core/types/timer.d.ts +3 -1
  12. package/core/types/timer.lua +27 -2
  13. package/decl/native.d.ts +6 -4
  14. package/destroyable.d.ts +1 -0
  15. package/destroyable.lua +9 -0
  16. package/engine/behavior.d.ts +14 -1
  17. package/engine/behavior.lua +230 -70
  18. package/engine/behaviour/ability/apply-buff.lua +5 -5
  19. package/engine/behaviour/ability/damage.d.ts +3 -0
  20. package/engine/behaviour/ability/damage.lua +8 -2
  21. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  22. package/engine/behaviour/ability/emulate-impact.lua +11 -3
  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/restore-mana.d.ts +1 -1
  26. package/engine/behaviour/ability/restore-mana.lua +6 -6
  27. package/engine/behaviour/ability.d.ts +11 -6
  28. package/engine/behaviour/ability.lua +38 -17
  29. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  30. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  31. package/engine/behaviour/unit.d.ts +31 -5
  32. package/engine/behaviour/unit.lua +209 -31
  33. package/engine/buff.d.ts +67 -22
  34. package/engine/buff.lua +371 -182
  35. package/engine/internal/ability.d.ts +5 -1
  36. package/engine/internal/ability.lua +44 -11
  37. package/engine/internal/item/ability.lua +51 -1
  38. package/engine/internal/item+owner.lua +12 -6
  39. package/engine/internal/item.d.ts +15 -16
  40. package/engine/internal/item.lua +113 -70
  41. package/engine/internal/mechanics/cast-ability.lua +6 -3
  42. package/engine/internal/misc/frame-coordinates.lua +21 -0
  43. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  44. package/engine/internal/misc/get-terrain-z.lua +11 -0
  45. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  46. package/engine/internal/misc/player-local-handle.lua +5 -0
  47. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  48. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  49. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  50. package/engine/internal/object-data/health-bonus.lua +16 -0
  51. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  52. package/engine/internal/object-data/mana-bonus.lua +16 -0
  53. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  54. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  55. package/engine/internal/unit/ability.d.ts +35 -0
  56. package/engine/internal/unit/ability.lua +98 -9
  57. package/engine/internal/unit/attributes.d.ts +17 -0
  58. package/engine/internal/unit/attributes.lua +46 -0
  59. package/engine/internal/unit/bonus.d.ts +6 -0
  60. package/engine/internal/unit/bonus.lua +33 -3
  61. package/engine/internal/unit/fly-height.d.ts +7 -0
  62. package/engine/internal/unit/fly-height.lua +20 -0
  63. package/engine/internal/unit/interrupts.d.ts +12 -0
  64. package/engine/internal/unit/interrupts.lua +28 -0
  65. package/engine/internal/unit/item.lua +1 -1
  66. package/engine/internal/unit/main-selected.lua +12 -27
  67. package/engine/internal/unit/order.d.ts +20 -0
  68. package/engine/internal/unit/order.lua +136 -0
  69. package/engine/internal/unit/range-event.d.ts +12 -0
  70. package/engine/internal/unit/range-event.lua +90 -0
  71. package/engine/internal/unit/scale.d.ts +7 -0
  72. package/engine/internal/unit/scale.lua +20 -0
  73. package/engine/internal/unit+ability.lua +10 -1
  74. package/engine/internal/unit+bonus.lua +3 -3
  75. package/engine/internal/unit-missile-launch.lua +52 -14
  76. package/engine/internal/unit.d.ts +21 -24
  77. package/engine/internal/unit.lua +247 -240
  78. package/engine/local-client.d.ts +2 -0
  79. package/engine/local-client.lua +30 -0
  80. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  81. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  82. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  83. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  84. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  85. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  86. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  87. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  88. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  89. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  90. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  91. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  92. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  93. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  94. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  95. package/engine/object-data/entry/ability-type.d.ts +2 -0
  96. package/engine/object-data/entry/ability-type.lua +89 -8
  97. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  98. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  99. package/engine/object-data/entry/destructible-type.lua +155 -0
  100. package/engine/object-data/entry/unit-type.d.ts +15 -2
  101. package/engine/object-data/entry/unit-type.lua +135 -33
  102. package/engine/object-field/ability.d.ts +3 -3
  103. package/engine/object-field/ability.lua +9 -8
  104. package/engine/object-field/unit.d.ts +31 -5
  105. package/engine/object-field/unit.lua +95 -0
  106. package/engine/object-field.d.ts +18 -7
  107. package/engine/object-field.lua +294 -135
  108. package/engine/random.d.ts +10 -0
  109. package/engine/random.lua +21 -0
  110. package/engine/standard/fields/ability.d.ts +2 -2
  111. package/engine/standard/fields/ability.lua +2 -2
  112. package/engine/standard/fields/unit.d.ts +12 -0
  113. package/engine/standard/fields/unit.lua +20 -0
  114. package/engine/synchronization.d.ts +11 -0
  115. package/engine/synchronization.lua +77 -0
  116. package/engine/text-tag.d.ts +36 -2
  117. package/engine/text-tag.lua +250 -10
  118. package/engine/unit.d.ts +6 -0
  119. package/engine/unit.lua +6 -0
  120. package/lualib_bundle.lua +118 -47
  121. package/net/socket.lua +1 -1
  122. package/objutil/buff.lua +10 -8
  123. package/objutil/object.lua +1 -1
  124. package/operation.lua +23 -17
  125. package/package.json +5 -5
  126. package/patch-lua.lua +15 -0
  127. package/patch-lualib.lua +1 -1
  128. package/utility/arrays.d.ts +1 -0
  129. package/utility/arrays.lua +8 -0
  130. package/utility/callback-array.d.ts +17 -0
  131. package/utility/callback-array.lua +61 -0
  132. package/utility/functions.d.ts +7 -0
  133. package/utility/functions.lua +12 -0
  134. package/utility/linked-map.d.ts +34 -0
  135. package/utility/linked-map.lua +101 -0
  136. package/utility/linked-set.d.ts +3 -1
  137. package/utility/linked-set.lua +40 -1
  138. package/utility/lua-maps.d.ts +12 -2
  139. package/utility/lua-maps.lua +37 -2
  140. package/utility/lua-sets.d.ts +1 -0
  141. package/utility/lua-sets.lua +4 -0
  142. package/utility/records.lua +20 -1
  143. package/utility/types.d.ts +3 -0
  144. package/core/types/order.d.ts +0 -26
  145. package/core/types/order.lua +0 -65
  146. /package/engine/internal/{object-data/armor-increase.d.ts → misc/frame-coordinates.d.ts} +0 -0
  147. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  148. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  149. /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";
@@ -55,16 +55,19 @@ export declare class UnrecognizedAbility extends Ability {
55
55
  export declare class UnitAbility extends Ability {
56
56
  readonly owner: Unit;
57
57
  private readonly u;
58
+ private d?;
58
59
  constructor(handle: jability, typeId: number, owner: Unit);
59
60
  incrementHideCounter(): void;
60
61
  decrementHideCounter(): void;
61
62
  incrementDisableCounter(): void;
62
63
  decrementDisableCounter(): void;
64
+ get isDisabled(): boolean;
63
65
  get level(): number;
64
66
  set level(v: number);
65
67
  get cooldownRemaining(): number;
66
68
  set cooldownRemaining(cooldownRemaining: number);
67
69
  interruptCast(): void;
70
+ protected onDestroy(): HandleDestructor;
68
71
  static get onCreate(): Event<[UnitAbility]>;
69
72
  static get onDestroy(): Event<[UnitAbility]>;
70
73
  }
@@ -91,6 +94,7 @@ export declare class ItemAbility extends Ability {
91
94
  get cooldownRemaining(): number;
92
95
  set cooldownRemaining(cooldownRemaining: number);
93
96
  interruptCast(): void;
97
+ protected onDestroy(): HandleDestructor;
94
98
  static get onCreate(): Event<[ItemAbility]>;
95
99
  static get onDestroy(): Event<[ItemAbility]>;
96
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,14 +409,36 @@ 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)
416
+ self.d = (self.d or 0) + 1
408
417
  end
409
418
  function UnitAbility.prototype.decrementDisableCounter(self)
410
- 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)
423
+ self.d = (self.d or 0) - 1
411
424
  end
412
425
  function UnitAbility.prototype.interruptCast(self)
413
426
  self.owner:interruptCast(self.typeId)
414
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
434
+ __TS__SetDescriptor(
435
+ UnitAbility.prototype,
436
+ "isDisabled",
437
+ {get = function(self)
438
+ return self.d ~= nil and self.d > 0
439
+ end},
440
+ true
441
+ )
415
442
  __TS__SetDescriptor(
416
443
  UnitAbility.prototype,
417
444
  "level",
@@ -496,6 +523,12 @@ function ItemAbility.prototype.interruptCast(self)
496
523
  setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, true)
497
524
  end
498
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
499
532
  __TS__SetDescriptor(
500
533
  ItemAbility.prototype,
501
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
@@ -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",
@@ -7,14 +7,11 @@ import { ItemAbility } from "./ability";
7
7
  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
- export declare const addAndGetAbility: (handle: jitem, abilityTypeId: AbilityTypeId) => jability | null;
11
10
  declare const enum ItemPropertyKey {
12
- ABILITIES = 100,
13
- LUA_INDEX_BY_ABILITY_TYPE_ID = 101
11
+ ABILITIES = 100
14
12
  }
15
13
  export declare class Item extends Handle<jitem> {
16
14
  private readonly [ItemPropertyKey.ABILITIES];
17
- private readonly [ItemPropertyKey.LUA_INDEX_BY_ABILITY_TYPE_ID];
18
15
  constructor(handle: jitem);
19
16
  protected onDestroy(): HandleDestructor;
20
17
  static create<T extends Item>(this: typeof Item & (new (handle: jitem) => T), id: number, x: number, y: number, skinId?: number): T;
@@ -31,22 +28,22 @@ export declare class Item extends Handle<jitem> {
31
28
  get extendedTooltip(): string;
32
29
  set iconPath(v: string);
33
30
  get iconPath(): string;
34
- set dropOnDeath(v: boolean);
35
- get dropOnDeath(): boolean;
36
- set droppable(v: boolean);
37
- get droppable(): boolean;
38
- set pawnable(v: boolean);
39
- get pawnable(): boolean;
40
- set perishable(v: boolean);
41
- get perishable(): boolean;
42
- set powerup(v: boolean);
43
- get powerup(): boolean;
31
+ set dropsOnDeath(dropsOnDeath: boolean);
32
+ get dropsOnDeath(): boolean;
33
+ set canBeDropped(canBeDropped: boolean);
34
+ get canBeDropped(): boolean;
35
+ set canBeSold(canBeSold: boolean);
36
+ get canBeSold(): boolean;
37
+ set perishes(perishes: boolean);
38
+ get perishes(): boolean;
39
+ set isPowerUp(isPowerUp: boolean);
40
+ get isPowerUp(): boolean;
44
41
  get isAlive(): boolean;
45
42
  get isDead(): boolean;
46
43
  set isInvulnerable(isInvulnerable: boolean);
47
44
  get isInvulnerable(): boolean;
48
- set usable(v: boolean);
49
- get usable(): boolean;
45
+ set isActivelyUsed(isActivelyUsed: boolean);
46
+ get isActivelyUsed(): boolean;
50
47
  set visible(v: boolean);
51
48
  get visible(): boolean;
52
49
  set level(v: number);
@@ -75,6 +72,7 @@ export declare class Item extends Handle<jitem> {
75
72
  set charges(v: number);
76
73
  get charges(): number;
77
74
  consumeCharge(): boolean;
75
+ consumeCharges(count: number): boolean;
78
76
  addAbility(abilityTypeId: AbilityTypeId): ItemAbility | undefined;
79
77
  removeAbility(abilityTypeId: AbilityTypeId): boolean;
80
78
  hasAbility(abilityTypeId: AbilityTypeId): boolean;
@@ -84,5 +82,6 @@ export declare class Item extends Handle<jitem> {
84
82
  static getInRect(rect: ReadonlyRect): Item[];
85
83
  static get onCreate(): Event<[Item]>;
86
84
  static get destroyEvent(): Event<[Item]>;
85
+ static readonly chargesChangedEvent: Event<[Item]>;
87
86
  }
88
87
  export {};
@@ -1,14 +1,18 @@
1
1
  local ____lualib = require("lualib_bundle")
2
+ local __TS__New = ____lualib.__TS__New
2
3
  local __TS__Class = ____lualib.__TS__Class
3
4
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
5
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
6
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
6
7
  local __TS__Delete = ____lualib.__TS__Delete
7
8
  local ____exports = {}
9
+ local invoke
8
10
  local ____handle = require("core.types.handle")
9
11
  local Handle = ____handle.Handle
10
12
  local ____color = require("core.types.color")
11
13
  local Color = ____color.Color
14
+ local ____event = require("event")
15
+ local Event = ____event.Event
12
16
  local ____rect = require("core.types.rect")
13
17
  local Rect = ____rect.Rect
14
18
  local ____ability = require("engine.internal.ability")
@@ -23,6 +27,7 @@ local ____add_2Ditem_2Dto_2Dslot = require("engine.internal.unit.add-item-to-slo
23
27
  local SLOT_FILLER_ITEM_TYPE_ID = ____add_2Ditem_2Dto_2Dslot.SLOT_FILLER_ITEM_TYPE_ID
24
28
  local ____vec2 = require("math.vec2")
25
29
  local distance = ____vec2.distance
30
+ local itemChargesChangeEvent = __TS__New(Event)
26
31
  local itemAddAbility = BlzItemAddAbility
27
32
  local itemRemoveAbility = BlzItemRemoveAbility
28
33
  local getItemAbility = BlzGetItemAbility
@@ -40,10 +45,30 @@ local getItemX = GetItemX
40
45
  local getItemY = GetItemY
41
46
  local getItemCharges = GetItemCharges
42
47
  local setItemCharges = SetItemCharges
48
+ local unitRemoveAbility = UnitRemoveAbility
49
+ local unitRemoveItem = UnitRemoveItem
50
+ local unitUseItem = UnitUseItem
51
+ local unitUseItemPoint = UnitUseItemPoint
52
+ local unitUseItemTarget = UnitUseItemTarget
53
+ local setItemDropOnDeath = SetItemDropOnDeath
54
+ local setItemDroppable = SetItemDroppable
55
+ local setItemPawnable = SetItemPawnable
56
+ local isItemPawnable = IsItemPawnable
43
57
  local getItemIntegerField = BlzGetItemIntegerField
44
58
  local setItemBooleanField = BlzSetItemBooleanField
45
59
  local getItemBooleanField = BlzGetItemBooleanField
60
+ local tableRemove = table.remove
61
+ _G.SetItemCharges = function(whichItem, charges)
62
+ setItemCharges(whichItem, charges)
63
+ invoke(
64
+ itemChargesChangeEvent,
65
+ ____exports.Item:of(whichItem)
66
+ )
67
+ end
68
+ invoke = Event.invoke
46
69
  local enumRect = Rect:create(0, 0, 0, 0).handle
70
+ ---
71
+ -- @internal For use by internal systems only.
47
72
  ____exports.addAndGetAbility = function(handle, abilityTypeId)
48
73
  if itemAddAbility(handle, abilityTypeId) then
49
74
  return getItemAbility(handle, abilityTypeId)
@@ -69,6 +94,23 @@ local function getItemAbilities(handle, item)
69
94
  end
70
95
  return abilities
71
96
  end
97
+ local function consumeCharge(handle)
98
+ do
99
+ local i = 0
100
+ local ability = getItemAbilityByIndex(handle, i)
101
+ while ability ~= nil do
102
+ unitRemoveAbility(
103
+ itemAbilityDummy,
104
+ getAbilityId(ability)
105
+ )
106
+ do
107
+ i = i + 1
108
+ ability = getItemAbilityByIndex(handle, i)
109
+ end
110
+ end
111
+ end
112
+ return unitUseItem(itemAbilityDummy, handle) or unitUseItemPoint(itemAbilityDummy, handle, 0, 0) or unitUseItemTarget(itemAbilityDummy, handle, itemAbilityDummy)
113
+ end
72
114
  local targetCollection
73
115
  local targetCollectionNextIndex
74
116
  local centerX
@@ -101,15 +143,13 @@ Item.name = "Item"
101
143
  __TS__ClassExtends(Item, Handle)
102
144
  function Item.prototype.____constructor(self, handle)
103
145
  Handle.prototype.____constructor(self, handle)
104
- local abilities = doAbilityAction(handle, getItemAbilities, self)
105
- self[100] = abilities
106
- local luaIndexByAbilityTypeId = {}
107
- for i = 1, #abilities do
108
- luaIndexByAbilityTypeId[abilities[i].typeId] = i
109
- end
110
- self[101] = luaIndexByAbilityTypeId
146
+ self[100] = doAbilityAction(handle, getItemAbilities, self)
111
147
  end
112
148
  function Item.prototype.onDestroy(self)
149
+ local owner = self.owner
150
+ if owner ~= nil then
151
+ unitRemoveItem(owner.handle, self.handle)
152
+ end
113
153
  local abilities = self[100]
114
154
  for i = 1, #abilities do
115
155
  abilities[i]:destroy()
@@ -121,40 +161,31 @@ function Item.create(self, id, x, y, skinId)
121
161
  return self:of(BlzCreateItemWithSkin(id, x, y, skinId or id))
122
162
  end
123
163
  function Item.prototype.consumeCharge(self)
164
+ return self:consumeCharges(1)
165
+ end
166
+ function Item.prototype.consumeCharges(self, count)
124
167
  local handle = self.handle
125
168
  local charges = getItemCharges(handle)
126
- if charges >= 2 then
127
- setItemCharges(handle, charges - 1)
169
+ if charges > count then
170
+ setItemCharges(handle, charges - count)
171
+ invoke(itemChargesChangeEvent, self)
128
172
  return true
129
173
  end
130
- if charges == 1 then
174
+ if charges == count then
131
175
  if getItemBooleanField(handle, ITEM_BF_PERISHABLE) then
132
176
  self:destroy()
133
177
  return true
134
178
  end
179
+ if not getItemBooleanField(handle, ITEM_BF_ACTIVELY_USED) then
180
+ setItemCharges(handle, 0)
181
+ invoke(itemChargesChangeEvent, self)
182
+ return true
183
+ end
184
+ setItemCharges(handle, 1)
135
185
  local ____doAbilityActionForceDummy_2 = doAbilityActionForceDummy
136
186
  local ____opt_0 = self.owner
137
- ____doAbilityActionForceDummy_2(
138
- handle,
139
- ____opt_0 and ____opt_0.handle,
140
- function()
141
- do
142
- local i = 0
143
- local ability = getItemAbilityByIndex(handle, i)
144
- while ability ~= nil do
145
- UnitRemoveAbility(
146
- itemAbilityDummy,
147
- getAbilityId(ability)
148
- )
149
- do
150
- i = i + 1
151
- ability = getItemAbilityByIndex(handle, i)
152
- end
153
- end
154
- end
155
- UnitUseItem(itemAbilityDummy, handle)
156
- end
157
- )
187
+ ____doAbilityActionForceDummy_2(handle, ____opt_0 and ____opt_0.handle, consumeCharge)
188
+ invoke(itemChargesChangeEvent, self)
158
189
  return true
159
190
  end
160
191
  return false
@@ -164,33 +195,32 @@ function Item.prototype.addAbility(self, abilityTypeId)
164
195
  if nativeAbility ~= nil then
165
196
  local ability = ItemAbility:of(nativeAbility, abilityTypeId, self)
166
197
  local abilities = self[100]
167
- local luaIndex = #abilities + 1
168
- abilities[luaIndex] = ability
169
- self[101][abilityTypeId] = luaIndex
198
+ abilities[#abilities + 1] = ability
170
199
  return ability
171
200
  end
172
201
  return nil
173
202
  end
174
203
  function Item.prototype.removeAbility(self, abilityTypeId)
175
- local luaIndexByAbilityTypeId = self[101]
176
- local luaIndex = luaIndexByAbilityTypeId[abilityTypeId]
177
- if luaIndex ~= nil and doAbilityAction(self.handle, itemRemoveAbility, abilityTypeId) then
178
- luaIndexByAbilityTypeId[abilityTypeId] = nil
179
- local abilities = self[100]
180
- abilities[luaIndex]:destroy()
181
- local abilityTypeIdsLength = #abilities
182
- for j = luaIndex, abilityTypeIdsLength do
183
- 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
184
211
  end
185
212
  end
186
- return false
213
+ return doAbilityAction(self.handle, itemRemoveAbility, abilityTypeId)
187
214
  end
188
215
  function Item.prototype.hasAbility(self, abilityTypeId)
189
- return self[101][abilityTypeId] ~= nil
216
+ return doAbilityAction(self.handle, getItemAbility, abilityTypeId) ~= nil
190
217
  end
191
218
  function Item.prototype.getAbility(self, abilityTypeId)
192
- local ability = self[101][abilityTypeId] ~= nil and doAbilityAction(self.handle, getItemAbility, abilityTypeId)
193
- 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
+ )
194
224
  end
195
225
  function Item.getInRange(self, x, y, range)
196
226
  targetCollection = {}
@@ -302,65 +332,68 @@ __TS__SetDescriptor(
302
332
  )
303
333
  __TS__SetDescriptor(
304
334
  Item.prototype,
305
- "dropOnDeath",
335
+ "dropsOnDeath",
306
336
  {
307
337
  get = function(self)
308
- return BlzGetItemBooleanField(self.handle, ITEM_BF_DROPPED_WHEN_CARRIER_DIES)
338
+ return getItemBooleanField(self.handle, ITEM_BF_DROPPED_WHEN_CARRIER_DIES)
309
339
  end,
310
- set = function(self, v)
311
- SetItemDropOnDeath(self.handle, v)
340
+ set = function(self, dropsOnDeath)
341
+ setItemDropOnDeath(self.handle, dropsOnDeath)
312
342
  end
313
343
  },
314
344
  true
315
345
  )
316
346
  __TS__SetDescriptor(
317
347
  Item.prototype,
318
- "droppable",
348
+ "canBeDropped",
319
349
  {
320
350
  get = function(self)
321
- return BlzGetItemBooleanField(self.handle, ITEM_BF_CAN_BE_DROPPED)
351
+ return getItemBooleanField(self.handle, ITEM_BF_CAN_BE_DROPPED)
322
352
  end,
323
- set = function(self, v)
324
- SetItemDroppable(self.handle, v)
353
+ set = function(self, canBeDropped)
354
+ setItemDroppable(self.handle, canBeDropped)
325
355
  end
326
356
  },
327
357
  true
328
358
  )
329
359
  __TS__SetDescriptor(
330
360
  Item.prototype,
331
- "pawnable",
361
+ "canBeSold",
332
362
  {
333
363
  get = function(self)
334
- return IsItemPawnable(self.handle)
364
+ return isItemPawnable(self.handle)
335
365
  end,
336
- set = function(self, v)
337
- SetItemPawnable(self.handle, v)
366
+ set = function(self, canBeSold)
367
+ setItemPawnable(self.handle, canBeSold)
338
368
  end
339
369
  },
340
370
  true
341
371
  )
342
372
  __TS__SetDescriptor(
343
373
  Item.prototype,
344
- "perishable",
374
+ "perishes",
345
375
  {
346
376
  get = function(self)
347
377
  return getItemBooleanField(self.handle, ITEM_BF_PERISHABLE)
348
378
  end,
349
- set = function(self, v)
350
- BlzSetItemBooleanField(self.handle, ITEM_BF_PERISHABLE, v)
379
+ set = function(self, perishes)
380
+ local handle = self.handle
381
+ local powerUp = isItemPowerup(handle)
382
+ setItemBooleanField(handle, ITEM_BF_PERISHABLE, perishes)
383
+ setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, powerUp)
351
384
  end
352
385
  },
353
386
  true
354
387
  )
355
388
  __TS__SetDescriptor(
356
389
  Item.prototype,
357
- "powerup",
390
+ "isPowerUp",
358
391
  {
359
392
  get = function(self)
360
393
  return isItemPowerup(self.handle)
361
394
  end,
362
- set = function(self, v)
363
- setItemBooleanField(self.handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, v)
395
+ set = function(self, isPowerUp)
396
+ setItemBooleanField(self.handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, isPowerUp)
364
397
  end
365
398
  },
366
399
  true
@@ -396,16 +429,24 @@ __TS__SetDescriptor(
396
429
  )
397
430
  __TS__SetDescriptor(
398
431
  Item.prototype,
399
- "usable",
432
+ "isActivelyUsed",
400
433
  {
401
434
  get = function(self)
402
435
  return getItemBooleanField(self.handle, ITEM_BF_ACTIVELY_USED)
403
436
  end,
404
- set = function(self, v)
437
+ set = function(self, isActivelyUsed)
405
438
  local handle = self.handle
406
- local powerup = isItemPowerup(handle)
407
- setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, v)
408
- setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, powerup)
439
+ local powerUp = isItemPowerup(handle)
440
+ local perishes = getItemBooleanField(handle, ITEM_BF_PERISHABLE)
441
+ local dropsOnDeath = getItemBooleanField(handle, ITEM_BF_DROPPED_WHEN_CARRIER_DIES)
442
+ local canBeDropped = getItemBooleanField(handle, ITEM_BF_CAN_BE_DROPPED)
443
+ local canBeSold = isItemPawnable(handle)
444
+ setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, isActivelyUsed)
445
+ setItemPawnable(handle, canBeSold)
446
+ setItemDroppable(handle, canBeDropped)
447
+ setItemDropOnDeath(handle, dropsOnDeath)
448
+ setItemBooleanField(handle, ITEM_BF_PERISHABLE, perishes)
449
+ setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, powerUp)
409
450
  end
410
451
  },
411
452
  true
@@ -604,6 +645,7 @@ __TS__SetDescriptor(
604
645
  end,
605
646
  set = function(self, v)
606
647
  setItemCharges(self.handle, v)
648
+ invoke(itemChargesChangeEvent, self)
607
649
  end
608
650
  },
609
651
  true
@@ -630,6 +672,7 @@ __TS__ObjectDefineProperty(
630
672
  return self.onDestroyEvent
631
673
  end}
632
674
  )
675
+ Item.chargesChangedEvent = itemChargesChangeEvent
633
676
  local getManipulatedItem = GetManipulatedItem
634
677
  local trigger = CreateTrigger()
635
678
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_PICKUP_ITEM)
@@ -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