warscript 0.0.1-dev.4414935 → 0.0.1-dev.459629d

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 (78) hide show
  1. package/core/types/frame.d.ts +1 -0
  2. package/core/types/frame.lua +112 -37
  3. package/core/types/handle.lua +6 -9
  4. package/core/types/item.d.ts +1 -0
  5. package/core/types/item.lua +1 -0
  6. package/core/types/player.d.ts +1 -1
  7. package/core/types/player.lua +12 -11
  8. package/core/types/sound.lua +1 -1
  9. package/engine/behaviour/ability/damage.d.ts +3 -0
  10. package/engine/behaviour/ability/damage.lua +8 -2
  11. package/engine/behaviour/ability/emulate-impact.lua +5 -4
  12. package/engine/behaviour/ability.d.ts +9 -5
  13. package/engine/behaviour/ability.lua +29 -0
  14. package/engine/buff.d.ts +49 -17
  15. package/engine/buff.lua +241 -118
  16. package/engine/internal/ability.lua +15 -15
  17. package/engine/internal/item/fields.d.ts +12 -0
  18. package/engine/internal/item/fields.lua +33 -0
  19. package/engine/internal/item.d.ts +4 -5
  20. package/engine/internal/item.lua +37 -40
  21. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  22. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  23. package/engine/internal/object-data/health-bonus.lua +16 -0
  24. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  25. package/engine/internal/object-data/mana-bonus.lua +16 -0
  26. package/engine/internal/unit/bonus.d.ts +4 -0
  27. package/engine/internal/unit/bonus.lua +23 -3
  28. package/engine/internal/unit/range-event.d.ts +12 -0
  29. package/engine/internal/unit/range-event.lua +90 -0
  30. package/engine/internal/unit+bonus.lua +3 -3
  31. package/engine/internal/unit.d.ts +1 -1
  32. package/engine/internal/unit.lua +25 -38
  33. package/engine/local-client.d.ts +5 -0
  34. package/engine/local-client.lua +56 -1
  35. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  36. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  37. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  38. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  39. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  40. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  41. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  42. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  43. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  44. package/engine/object-data/entry/ability-type.d.ts +2 -0
  45. package/engine/object-data/entry/ability-type.lua +84 -4
  46. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  47. package/engine/object-field/ability.lua +2 -2
  48. package/engine/object-field/item.d.ts +22 -0
  49. package/engine/object-field/item.lua +118 -0
  50. package/engine/object-field.d.ts +1 -1
  51. package/engine/object-field.lua +9 -7
  52. package/engine/random.d.ts +1 -0
  53. package/engine/random.lua +8 -0
  54. package/engine/standard/fields/item.d.ts +4 -0
  55. package/engine/standard/fields/item.lua +6 -0
  56. package/engine/unit.d.ts +1 -0
  57. package/engine/unit.lua +1 -0
  58. package/lualib_bundle.lua +1 -1
  59. package/math.d.ts +2 -0
  60. package/math.lua +14 -0
  61. package/network.lua +25 -1
  62. package/objutil/object.lua +1 -1
  63. package/operation.d.ts +8 -1
  64. package/operation.lua +38 -18
  65. package/package.json +4 -4
  66. package/patch-lua.lua +15 -0
  67. package/utility/linked-map.d.ts +11 -2
  68. package/utility/linked-map.lua +41 -0
  69. package/utility/linked-set.d.ts +3 -1
  70. package/utility/linked-set.lua +23 -0
  71. package/utility/random.d.ts +102 -0
  72. package/utility/random.lua +273 -0
  73. package/utility/unordered-map.d.ts +27 -0
  74. package/utility/unordered-map.lua +99 -0
  75. /package/engine/internal/object-data/{armor-increase.d.ts → armor-bonus.d.ts} +0 -0
  76. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  77. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  78. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -0,0 +1,33 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
3
+ local ____exports = {}
4
+ local ____item = require("engine.internal.item")
5
+ local Item = ____item.Item
6
+ local ____item = require("engine.standard.fields.item")
7
+ local CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD = ____item.CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD
8
+ local IS_ACTIVELY_USED_ITEM_FIELD = ____item.IS_ACTIVELY_USED_ITEM_FIELD
9
+ __TS__ObjectDefineProperty(
10
+ Item.prototype,
11
+ "canBeSold",
12
+ {
13
+ get = function(self)
14
+ return CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD:getValue(self)
15
+ end,
16
+ set = function(self, value)
17
+ CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD:setValue(self, value)
18
+ end
19
+ }
20
+ )
21
+ __TS__ObjectDefineProperty(
22
+ Item.prototype,
23
+ "isActivelyUsed",
24
+ {
25
+ get = function(self)
26
+ return IS_ACTIVELY_USED_ITEM_FIELD:getValue(self)
27
+ end,
28
+ set = function(self, value)
29
+ IS_ACTIVELY_USED_ITEM_FIELD:setValue(self, value)
30
+ end
31
+ }
32
+ )
33
+ return ____exports
@@ -8,10 +8,12 @@ import { AbilityTypeId } from "../object-data/entry/ability-type";
8
8
  import type { ItemTypeId } from "../object-data/entry/item-type";
9
9
  type DefenseType = 0 | 1 | 2 | 3 | 4 | 5;
10
10
  declare const enum ItemPropertyKey {
11
- ABILITIES = 100
11
+ ABILITIES = 100,
12
+ DEATH_TRIGGER = 101
12
13
  }
13
14
  export declare class Item extends Handle<jitem> {
14
15
  private readonly [ItemPropertyKey.ABILITIES];
16
+ private readonly [ItemPropertyKey.DEATH_TRIGGER];
15
17
  constructor(handle: jitem);
16
18
  protected onDestroy(): HandleDestructor;
17
19
  static create<T extends Item>(this: typeof Item & (new (handle: jitem) => T), id: number, x: number, y: number, skinId?: number): T;
@@ -32,8 +34,6 @@ export declare class Item extends Handle<jitem> {
32
34
  get dropsOnDeath(): boolean;
33
35
  set canBeDropped(canBeDropped: boolean);
34
36
  get canBeDropped(): boolean;
35
- set canBeSold(canBeSold: boolean);
36
- get canBeSold(): boolean;
37
37
  set perishes(perishes: boolean);
38
38
  get perishes(): boolean;
39
39
  set isPowerUp(isPowerUp: boolean);
@@ -42,8 +42,6 @@ export declare class Item extends Handle<jitem> {
42
42
  get isDead(): boolean;
43
43
  set isInvulnerable(isInvulnerable: boolean);
44
44
  get isInvulnerable(): boolean;
45
- set isActivelyUsed(isActivelyUsed: boolean);
46
- get isActivelyUsed(): boolean;
47
45
  set visible(v: boolean);
48
46
  get visible(): boolean;
49
47
  set level(v: number);
@@ -82,6 +80,7 @@ export declare class Item extends Handle<jitem> {
82
80
  static getInRect(rect: ReadonlyRect): Item[];
83
81
  static get onCreate(): Event<[Item]>;
84
82
  static get destroyEvent(): Event<[Item]>;
83
+ static readonly deathEvent: Event<[Item]>;
85
84
  static readonly chargesChangedEvent: Event<[Item]>;
86
85
  }
87
86
  export {};
@@ -27,7 +27,13 @@ local ____add_2Ditem_2Dto_2Dslot = require("engine.internal.unit.add-item-to-slo
27
27
  local SLOT_FILLER_ITEM_TYPE_ID = ____add_2Ditem_2Dto_2Dslot.SLOT_FILLER_ITEM_TYPE_ID
28
28
  local ____vec2 = require("math.vec2")
29
29
  local distance = ____vec2.distance
30
- local itemChargesChangeEvent = __TS__New(Event)
30
+ local ____timer = require("core.types.timer")
31
+ local Timer = ____timer.Timer
32
+ local createTrigger = CreateTrigger
33
+ local triggerAddCondition = TriggerAddCondition
34
+ local triggerRegisterDeathEvent = TriggerRegisterDeathEvent
35
+ local condition = Condition
36
+ local destroyTrigger = DestroyTrigger
31
37
  local itemAddAbility = BlzItemAddAbility
32
38
  local itemRemoveAbility = BlzItemRemoveAbility
33
39
  local getItemAbility = BlzGetItemAbility
@@ -52,12 +58,15 @@ local unitUseItemPoint = UnitUseItemPoint
52
58
  local unitUseItemTarget = UnitUseItemTarget
53
59
  local setItemDropOnDeath = SetItemDropOnDeath
54
60
  local setItemDroppable = SetItemDroppable
55
- local setItemPawnable = SetItemPawnable
56
- local isItemPawnable = IsItemPawnable
57
61
  local getItemIntegerField = BlzGetItemIntegerField
58
62
  local setItemBooleanField = BlzSetItemBooleanField
59
63
  local getItemBooleanField = BlzGetItemBooleanField
64
+ local getTriggerWidget = GetTriggerWidget
65
+ local saveWidgetHandle = SaveWidgetHandle
66
+ local loadItemHandle = LoadItemHandle
60
67
  local tableRemove = table.remove
68
+ local itemChargesChangeEvent = __TS__New(Event)
69
+ local itemDeathEvent = __TS__New(Event)
61
70
  _G.SetItemCharges = function(whichItem, charges)
62
71
  setItemCharges(whichItem, charges)
63
72
  invoke(
@@ -137,6 +146,25 @@ local function collectIntoTargetRange()
137
146
  targetCollectionNextIndex = targetCollectionNextIndex + 1
138
147
  end
139
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
+ )
140
168
  ____exports.Item = __TS__Class()
141
169
  local Item = ____exports.Item
142
170
  Item.name = "Item"
@@ -144,6 +172,10 @@ __TS__ClassExtends(Item, Handle)
144
172
  function Item.prototype.____constructor(self, handle)
145
173
  Handle.prototype.____constructor(self, handle)
146
174
  self[100] = doAbilityAction(handle, getItemAbilities, self)
175
+ local deathTrigger = createTrigger()
176
+ triggerRegisterDeathEvent(deathTrigger, handle)
177
+ triggerAddCondition(deathTrigger, deathTriggerCondition)
178
+ self[101] = deathTrigger
147
179
  end
148
180
  function Item.prototype.onDestroy(self)
149
181
  local owner = self.owner
@@ -155,6 +187,7 @@ function Item.prototype.onDestroy(self)
155
187
  abilities[i]:destroy()
156
188
  end
157
189
  removeItem(self.handle)
190
+ destroyTrigger(self[101])
158
191
  return Handle.prototype.onDestroy(self)
159
192
  end
160
193
  function Item.create(self, id, x, y, skinId)
@@ -356,19 +389,6 @@ __TS__SetDescriptor(
356
389
  },
357
390
  true
358
391
  )
359
- __TS__SetDescriptor(
360
- Item.prototype,
361
- "canBeSold",
362
- {
363
- get = function(self)
364
- return isItemPawnable(self.handle)
365
- end,
366
- set = function(self, canBeSold)
367
- setItemPawnable(self.handle, canBeSold)
368
- end
369
- },
370
- true
371
- )
372
392
  __TS__SetDescriptor(
373
393
  Item.prototype,
374
394
  "perishes",
@@ -427,30 +447,6 @@ __TS__SetDescriptor(
427
447
  },
428
448
  true
429
449
  )
430
- __TS__SetDescriptor(
431
- Item.prototype,
432
- "isActivelyUsed",
433
- {
434
- get = function(self)
435
- return getItemBooleanField(self.handle, ITEM_BF_ACTIVELY_USED)
436
- end,
437
- set = function(self, isActivelyUsed)
438
- local handle = self.handle
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)
450
- end
451
- },
452
- true
453
- )
454
450
  __TS__SetDescriptor(
455
451
  Item.prototype,
456
452
  "visible",
@@ -672,6 +668,7 @@ __TS__ObjectDefineProperty(
672
668
  return self.onDestroyEvent
673
669
  end}
674
670
  )
671
+ Item.deathEvent = itemDeathEvent
675
672
  Item.chargesChangedEvent = itemChargesChangeEvent
676
673
  local getManipulatedItem = GetManipulatedItem
677
674
  local trigger = CreateTrigger()
@@ -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
@@ -5,6 +5,8 @@ export type UnitBonusId<Brand extends string = any> = number & {
5
5
  readonly __unitBonusId: unique symbol;
6
6
  readonly __unitBonusIdBrand: Brand;
7
7
  };
8
+ export type UnitMaxHealthBonusId = UnitBonusId<"maxHealth">;
9
+ export type UnitMaxManaBonusId = UnitBonusId<"maxMana">;
8
10
  export type UnitArmorBonusId = UnitBonusId<"armor">;
9
11
  export type UnitAttackSpeedFactorBonusId = UnitBonusId<"attackSpeedFactor">;
10
12
  export type UnitMovementSpeedFactorBonusId = UnitBonusId<"movementSpeedFactor">;
@@ -30,6 +32,8 @@ export type UnitBonusType<Id extends UnitBonusId = UnitBonusId> = ({
30
32
  readonly __unitBonusTypeId?: Id;
31
33
  };
32
34
  export declare namespace UnitBonusType {
35
+ const HEALTH: UnitBonusType<UnitMaxHealthBonusId>;
36
+ const MANA: UnitBonusType<UnitMaxManaBonusId>;
33
37
  const ARMOR: UnitBonusType<UnitArmorBonusId>;
34
38
  const ATTACK_SPEED_FACTOR: UnitBonusType<UnitAttackSpeedFactorBonusId>;
35
39
  const MOVEMENT_SPEED_FACTOR: UnitBonusType<UnitAttackSpeedFactorBonusId>;
@@ -1,9 +1,9 @@
1
1
  local ____exports = {}
2
2
  local ____unit = require("engine.internal.unit")
3
3
  local Unit = ____unit.Unit
4
- local ____armor_2Dincrease = require("engine.internal.object-data.armor-increase")
5
- local ARMOR_BONUS_DUMMY_ABILITY_FIELD = ____armor_2Dincrease.ARMOR_BONUS_DUMMY_ABILITY_FIELD
6
- local ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID = ____armor_2Dincrease.ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID
4
+ local ____armor_2Dbonus = require("engine.internal.object-data.armor-bonus")
5
+ local ARMOR_BONUS_DUMMY_ABILITY_FIELD = ____armor_2Dbonus.ARMOR_BONUS_DUMMY_ABILITY_FIELD
6
+ local ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID = ____armor_2Dbonus.ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID
7
7
  local ____utility = require("engine.internal.utility")
8
8
  local addInternalAbility = ____utility.addInternalAbility
9
9
  local ____arrays = require("utility.arrays")
@@ -24,6 +24,12 @@ local MOVEMENT_SPEED_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID = ____movement_2Dspee
24
24
  local ____evasion_2Dprobability = require("engine.internal.object-data.evasion-probability")
25
25
  local EVASION_PROBABILITY_ABILITY_FIELD = ____evasion_2Dprobability.EVASION_PROBABILITY_ABILITY_FIELD
26
26
  local EVASION_PROBABILITY_DUMMY_ABILITY_TYPE_ID = ____evasion_2Dprobability.EVASION_PROBABILITY_DUMMY_ABILITY_TYPE_ID
27
+ local ____health_2Dbonus = require("engine.internal.object-data.health-bonus")
28
+ local HEALTH_BONUS_DUMMY_ABILITY_FIELD = ____health_2Dbonus.HEALTH_BONUS_DUMMY_ABILITY_FIELD
29
+ local HEALTH_BONUS_DUMMY_ABILITY_TYPE_ID = ____health_2Dbonus.HEALTH_BONUS_DUMMY_ABILITY_TYPE_ID
30
+ local ____mana_2Dbonus = require("engine.internal.object-data.mana-bonus")
31
+ local MANA_BONUS_DUMMY_ABILITY_FIELD = ____mana_2Dbonus.MANA_BONUS_DUMMY_ABILITY_FIELD
32
+ local MANA_BONUS_DUMMY_ABILITY_TYPE_ID = ____mana_2Dbonus.MANA_BONUS_DUMMY_ABILITY_TYPE_ID
27
33
  local ____mana_2Dregeneration_2Drate_2Dincrease_2Dfactor = require("engine.internal.object-data.mana-regeneration-rate-increase-factor")
28
34
  local MANA_REGENERATION_RATE_INCREASE_FACTOR_ABILITY_FIELD = ____mana_2Dregeneration_2Drate_2Dincrease_2Dfactor.MANA_REGENERATION_RATE_INCREASE_FACTOR_ABILITY_FIELD
29
35
  local MANA_REGENERATION_RATE_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID = ____mana_2Dregeneration_2Drate_2Dincrease_2Dfactor.MANA_REGENERATION_RATE_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID
@@ -39,6 +45,20 @@ end
39
45
  ____exports.UnitBonusType = {}
40
46
  local UnitBonusType = ____exports.UnitBonusType
41
47
  do
48
+ UnitBonusType.HEALTH = {
49
+ abilityTypeId = HEALTH_BONUS_DUMMY_ABILITY_TYPE_ID,
50
+ field = HEALTH_BONUS_DUMMY_ABILITY_FIELD,
51
+ integer = true,
52
+ reduce = sum,
53
+ initialValue = 0
54
+ }
55
+ UnitBonusType.MANA = {
56
+ abilityTypeId = MANA_BONUS_DUMMY_ABILITY_TYPE_ID,
57
+ field = MANA_BONUS_DUMMY_ABILITY_FIELD,
58
+ integer = true,
59
+ reduce = sum,
60
+ initialValue = 0
61
+ }
42
62
  UnitBonusType.ARMOR = {
43
63
  abilityTypeId = ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID,
44
64
  field = ARMOR_BONUS_DUMMY_ABILITY_FIELD,
@@ -0,0 +1,12 @@
1
+ /** @noSelfInFile */
2
+ import { Event } from "../../../event";
3
+ declare module "../unit" {
4
+ interface Unit {
5
+ readonly unitInRangeEvent: Record<number, Event<[unit: Unit, range: number, unitInRange: Unit]>>;
6
+ }
7
+ }
8
+ declare module "../unit" {
9
+ interface Unit {
10
+ readonly unitOutOfRangeEvent: Record<number, Event<[unit: Unit, range: number, unitOutOfRange: Unit]>>;
11
+ }
12
+ }
@@ -0,0 +1,90 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__New = ____lualib.__TS__New
3
+ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
4
+ local ____exports = {}
5
+ local ____event = require("event")
6
+ local Event = ____event.Event
7
+ local InitializingEvent = ____event.InitializingEvent
8
+ local TriggerEvent = ____event.TriggerEvent
9
+ local ____unit = require("engine.internal.unit")
10
+ local Unit = ____unit.Unit
11
+ local ____timer = require("core.types.timer")
12
+ local Timer = ____timer.Timer
13
+ local ____attributes = require("attributes")
14
+ local attribute = ____attributes.attribute
15
+ local ____linked_2Dmap = require("utility.linked-map")
16
+ local mutableLinkedMap = ____linked_2Dmap.mutableLinkedMap
17
+ local ____linked_2Dset = require("utility.linked-set")
18
+ local LinkedSet = ____linked_2Dset.LinkedSet
19
+ local mutableLinkedSet = ____linked_2Dset.mutableLinkedSet
20
+ local getTriggerUnit = GetTriggerUnit
21
+ local triggerRegisterUnitInRange = TriggerRegisterUnitInRange
22
+ local eventInvoke = Event.invoke
23
+ __TS__ObjectDefineProperty(
24
+ Unit.prototype,
25
+ "unitInRangeEvent",
26
+ {get = function(self)
27
+ local unit = self
28
+ local handle = self.handle
29
+ local unitInRangeEvent = setmetatable(
30
+ {},
31
+ {__index = function(self, value)
32
+ local event = __TS__New(
33
+ TriggerEvent,
34
+ function(trigger)
35
+ triggerRegisterUnitInRange(trigger, handle, value, nil)
36
+ end,
37
+ function() return unit, value, Unit:of(getTriggerUnit()) end
38
+ )
39
+ rawset(self, value, event)
40
+ return event
41
+ end}
42
+ )
43
+ rawset(self, "unitInRangeEvent", unitInRangeEvent)
44
+ return unitInRangeEvent
45
+ end}
46
+ )
47
+ local units = __TS__New(LinkedSet)
48
+ local unitsInRangeByRangeAttribute = attribute()
49
+ local function registerUnitOfRangeEvent(unit, range, unitInRange)
50
+ units:add(unit)
51
+ unit:getOrPut(unitsInRangeByRangeAttribute, mutableLinkedMap):getOrPut(range, mutableLinkedSet):add(unitInRange)
52
+ end
53
+ __TS__ObjectDefineProperty(
54
+ Unit.prototype,
55
+ "unitOutOfRangeEvent",
56
+ {get = function(self)
57
+ local unit = self
58
+ local unitOutOfRangeEvent = setmetatable(
59
+ {},
60
+ {__index = function(self, value)
61
+ local event = __TS__New(
62
+ InitializingEvent,
63
+ function()
64
+ unit.unitInRangeEvent[value]:addListener(999999, registerUnitOfRangeEvent)
65
+ end
66
+ )
67
+ rawset(self, value, event)
68
+ return event
69
+ end}
70
+ )
71
+ rawset(self, "unitOutOfRangeEvent", unitOutOfRangeEvent)
72
+ return unitOutOfRangeEvent
73
+ end}
74
+ )
75
+ Timer.onPeriod[1]:addListener(function()
76
+ for unit in pairs(units) do
77
+ local unitsInRangeByRange = unit[unitsInRangeByRangeAttribute]
78
+ if unitsInRangeByRange ~= nil then
79
+ for range, unitsInRange in pairs(unitsInRangeByRange) do
80
+ for unitInRange in pairs(unitsInRange) do
81
+ if unit:getDistanceTo(unitInRange) > range then
82
+ unitsInRange:remove(unitInRange)
83
+ eventInvoke(unit.unitOutOfRangeEvent[range], unit, range, unitInRange)
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end)
90
+ return ____exports
@@ -3,9 +3,9 @@ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
3
3
  local ____exports = {}
4
4
  local ____unit = require("engine.internal.unit")
5
5
  local Unit = ____unit.Unit
6
- local ____armor_2Dincrease = require("engine.internal.object-data.armor-increase")
7
- local ARMOR_BONUS_DUMMY_ABILITY_FIELD = ____armor_2Dincrease.ARMOR_BONUS_DUMMY_ABILITY_FIELD
8
- local ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID = ____armor_2Dincrease.ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID
6
+ local ____armor_2Dbonus = require("engine.internal.object-data.armor-bonus")
7
+ local ARMOR_BONUS_DUMMY_ABILITY_FIELD = ____armor_2Dbonus.ARMOR_BONUS_DUMMY_ABILITY_FIELD
8
+ local ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID = ____armor_2Dbonus.ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID
9
9
  local getUnitAbility = BlzGetUnitAbility
10
10
  local setAbilityRealLevelField = BlzSetAbilityRealLevelField
11
11
  local unitAddAbility = UnitAddAbility
@@ -139,6 +139,7 @@ export declare class Unit extends Handle<junit> {
139
139
  private _fields?;
140
140
  private getEvent;
141
141
  constructor(handle: junit);
142
+ private saveData;
142
143
  protected onDestroy(): HandleDestructor;
143
144
  addAttackHandler(condition: AttackHandlerCondition, action: AttackHandlerAction): AttackHandler;
144
145
  removeAttackHandler(handler: AttackHandler): boolean;
@@ -291,7 +292,6 @@ export declare class Unit extends Handle<junit> {
291
292
  set waygateDestination(v: Vec2);
292
293
  get waygateDestination(): Vec2;
293
294
  get abilities(): ReadonlyArray<UnitAbility>;
294
- get onUnitInRange(): Record<number, Event<[Unit]>>;
295
295
  get onManaEqual(): Record<number, Event<[Unit, number]>>;
296
296
  get manaEvent(): Record<Operator, Record<number, Event<[Unit]>>>;
297
297
  get targetAcquiredEvent(): Event;
@@ -385,12 +385,14 @@ local modifiers = {
385
385
  if UnitAddAbility(unit, armorBonusAbilityId) then
386
386
  assert(
387
387
  UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId),
388
- "armor bonus ability must be made permanent"
388
+ "armor bonus ability must be made permanent",
389
+ unit
389
390
  )
390
391
  end
391
392
  local ability = assert(
392
393
  BlzGetUnitAbility(unit, armorBonusAbilityId),
393
- "armor bonus ability must be existing"
394
+ "armor bonus ability must be existing",
395
+ unit
394
396
  )
395
397
  assert(
396
398
  BlzSetAbilityRealLevelField(
@@ -399,7 +401,8 @@ local modifiers = {
399
401
  0,
400
402
  BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
401
403
  ),
402
- "armor bonus ability field must be set"
404
+ "armor bonus ability field must be set",
405
+ unit
403
406
  )
404
407
  end
405
408
  }
@@ -662,7 +665,8 @@ for ____, player in ipairs(Player.all) do
662
665
  0,
663
666
  270
664
667
  ),
665
- "dummy must be created"
668
+ "dummy must be created",
669
+ player
666
670
  )
667
671
  ShowUnit(dummy, false)
668
672
  dummies[player] = dummy
@@ -708,11 +712,13 @@ function Unit.prototype.____constructor(self, handle)
708
712
  self._owner = Player:of(getOwningPlayer(handle))
709
713
  assert(
710
714
  unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId),
711
- "leave detection ability must be added"
715
+ "leave detection ability must be added",
716
+ self
712
717
  )
713
718
  assert(
714
719
  unitAddAbility(handle, morphDetectAbilityId),
715
- "morph detection ability must be added"
720
+ "morph detection ability must be added",
721
+ self
716
722
  )
717
723
  if unitAddAbility(
718
724
  handle,
@@ -723,7 +729,8 @@ function Unit.prototype.____constructor(self, handle)
723
729
  handle,
724
730
  fourCC("Amrf")
725
731
  ),
726
- "fly ability must be removed after addition"
732
+ "fly ability must be removed after addition",
733
+ self
727
734
  )
728
735
  end
729
736
  unitBySyncId[self.syncId] = self
@@ -745,13 +752,15 @@ function Unit.prototype.getEvent(self, jevent, collector)
745
752
  end
746
753
  return event
747
754
  end
755
+ function Unit.prototype.saveData(self)
756
+ local handle = self.handle
757
+ self[108] = self[108] or getUnitX(handle)
758
+ self[109] = self[109] or getUnitY(handle)
759
+ self._owner = self._owner or Player:of(getOwningPlayer(handle))
760
+ end
748
761
  function Unit.prototype.onDestroy(self)
749
762
  local handle = self.handle
750
- self[108] = getUnitX(handle)
751
- self[109] = getUnitY(handle)
752
- if not self._owner then
753
- self._owner = Player:of(getOwningPlayer(handle))
754
- end
763
+ self:saveData()
755
764
  local abilities = self.abilities
756
765
  for ____, ability in ipairs(abilities) do
757
766
  ability:destroy()
@@ -789,7 +798,8 @@ function Unit.prototype.addAttackHandler(self, condition, action)
789
798
  local handle = self.handle
790
799
  assert(
791
800
  unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId),
792
- "attack handler ability must be added"
801
+ "attack handler ability must be added",
802
+ self
793
803
  )
794
804
  end
795
805
  return handler
@@ -1979,30 +1989,6 @@ __TS__SetDescriptor(
1979
1989
  end},
1980
1990
  true
1981
1991
  )
1982
- __TS__SetDescriptor(
1983
- Unit.prototype,
1984
- "onUnitInRange",
1985
- {get = function(self)
1986
- local handle = self.handle
1987
- local onUnitInRange = setmetatable(
1988
- {},
1989
- {__index = function(self, value)
1990
- local event = __TS__New(
1991
- TriggerEvent,
1992
- function(trigger)
1993
- TriggerRegisterUnitInRangeSimple(trigger, value, handle)
1994
- end,
1995
- function() return ____exports.Unit:of(handle) end
1996
- )
1997
- rawset(self, value, event)
1998
- return event
1999
- end}
2000
- )
2001
- rawset(self, "onUnitInRange", onUnitInRange)
2002
- return onUnitInRange
2003
- end},
2004
- true
2005
- )
2006
1992
  __TS__SetDescriptor(
2007
1993
  Unit.prototype,
2008
1994
  "onManaEqual",
@@ -2801,7 +2787,8 @@ Unit.synchronize = synchronizer(
2801
2787
  return
2802
2788
  end
2803
2789
  end
2804
- unit:destroy()
2790
+ unit:saveData()
2791
+ Timer:run(unit, "destroy")
2805
2792
  end)
2806
2793
  end
2807
2794
  end)(Unit)
@@ -12,6 +12,7 @@ export declare class LocalClient {
12
12
  static get isHD(): boolean;
13
13
  static get graphicsMode(): GraphicsMode;
14
14
  static get isActive(): boolean;
15
+ static get isMinimized(): boolean;
15
16
  static pingMinimap(x: number, y: number, duration: number, ...parameters: [] | [red: number, green: number, blue: number, flashy?: boolean] | [color: Color, flashy?: boolean]): void;
16
17
  static get mouseFocusUnit(): Async<Unit> | undefined;
17
18
  static get mainSelectedUnit(): Async<Unit> | undefined;
@@ -19,5 +20,9 @@ export declare class LocalClient {
19
20
  previousMainSelectedUnit: Unit | undefined,
20
21
  newMainSelectedUnit: Unit | undefined
21
22
  ]>;
23
+ static get isInTargetingMode(): boolean;
24
+ static readonly targetingModeEnterEvent: Event<[]>;
25
+ static readonly targetingModeLeaveEvent: Event<[]>;
26
+ static readonly targetingModeStateChangeEvent: Event<[]>;
22
27
  static readonly onDisconnect: TriggerEvent<[]>;
23
28
  }