warscript 0.0.1-dev.82b83f9 → 0.0.1-dev.833c02f

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 (108) hide show
  1. package/attributes.d.ts +5 -0
  2. package/attributes.lua +8 -1
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -0
  5. package/core/types/effect.d.ts +1 -3
  6. package/core/types/effect.lua +26 -29
  7. package/core/types/sound.d.ts +17 -24
  8. package/core/types/sound.lua +99 -24
  9. package/core/types/timer.d.ts +6 -7
  10. package/core/types/timer.lua +18 -21
  11. package/core/util.lua +6 -1
  12. package/decl/native.d.ts +840 -786
  13. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  14. package/engine/behaviour/ability/damage.d.ts +9 -3
  15. package/engine/behaviour/ability/damage.lua +26 -38
  16. package/engine/behaviour/ability/emulate-impact.lua +7 -0
  17. package/engine/behaviour/ability.d.ts +5 -1
  18. package/engine/behaviour/ability.lua +18 -4
  19. package/engine/behaviour/unit.d.ts +2 -0
  20. package/engine/buff.d.ts +51 -41
  21. package/engine/buff.lua +274 -227
  22. package/engine/internal/item.d.ts +2 -1
  23. package/engine/internal/mechanics/ability-duration.lua +1 -1
  24. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  25. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  26. package/engine/internal/unit+damage.d.ts +2 -11
  27. package/engine/internal/unit+damage.lua +10 -14
  28. package/engine/internal/unit+spellSteal.lua +1 -2
  29. package/engine/internal/unit.d.ts +19 -3
  30. package/engine/internal/unit.lua +96 -37
  31. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  32. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  33. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  34. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  35. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  36. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  37. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  38. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  39. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  40. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  41. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  42. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  43. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  44. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  45. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  46. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  47. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  48. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  49. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  50. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  51. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  52. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  53. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  54. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  55. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  56. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  57. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  58. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  59. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  60. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  61. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  62. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  63. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  64. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  65. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  66. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  67. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  68. package/engine/object-data/entry/ability-type/web.lua +52 -0
  69. package/engine/object-data/entry/ability-type.d.ts +19 -17
  70. package/engine/object-data/entry/ability-type.lua +81 -21
  71. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  72. package/engine/object-data/entry/buff-type.d.ts +6 -12
  73. package/engine/object-data/entry/buff-type.lua +13 -29
  74. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  75. package/engine/object-data/entry/item-type.d.ts +1 -1
  76. package/engine/object-data/entry/item-type.lua +4 -4
  77. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  78. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  79. package/engine/object-data/entry/sound-preset.lua +140 -0
  80. package/engine/object-data/entry/unit-type.d.ts +10 -3
  81. package/engine/object-data/entry/unit-type.lua +155 -92
  82. package/engine/object-data/entry/upgrade.d.ts +1 -1
  83. package/engine/object-data/entry/upgrade.lua +4 -4
  84. package/engine/object-data/entry.d.ts +16 -14
  85. package/engine/object-data/entry.lua +60 -32
  86. package/engine/object-field/ability.d.ts +1 -1
  87. package/engine/object-field/unit.d.ts +46 -3
  88. package/engine/object-field/unit.lua +173 -7
  89. package/engine/object-field.d.ts +9 -1
  90. package/engine/object-field.lua +158 -76
  91. package/engine/standard/entries/buff-type.d.ts +3 -0
  92. package/engine/standard/entries/buff-type.lua +3 -0
  93. package/engine/standard/entries/sound-preset.d.ts +10 -0
  94. package/engine/standard/entries/sound-preset.lua +10 -0
  95. package/objutil/buff.lua +1 -2
  96. package/objutil/unit.lua +8 -0
  97. package/package.json +2 -2
  98. package/utility/arrays.d.ts +1 -0
  99. package/utility/arrays.lua +3 -0
  100. package/utility/functions.d.ts +1 -0
  101. package/utility/functions.lua +1 -0
  102. package/utility/linked-set.d.ts +1 -0
  103. package/utility/linked-set.lua +3 -0
  104. package/utility/lua-maps.d.ts +3 -0
  105. package/utility/lua-maps.lua +16 -0
  106. package/utility/lua-sets.d.ts +1 -0
  107. package/utility/lua-sets.lua +3 -0
  108. package/utility/reflection.lua +11 -7
@@ -5,6 +5,7 @@ import { Event } from "../../event";
5
5
  import { ReadonlyRect } from "../../core/types/rect";
6
6
  import { ItemAbility } from "./ability";
7
7
  import { AbilityTypeId } from "../object-data/entry/ability-type";
8
+ import type { ItemTypeId } from "../object-data/entry/item-type";
8
9
  type DefenseType = 0 | 1 | 2 | 3 | 4 | 5;
9
10
  export declare const addAndGetAbility: (handle: jitem, abilityTypeId: AbilityTypeId) => jability | null;
10
11
  declare const enum ItemPropertyKey {
@@ -17,7 +18,7 @@ export declare class Item extends Handle<jitem> {
17
18
  constructor(handle: jitem);
18
19
  protected onDestroy(): HandleDestructor;
19
20
  static create<T extends Item>(this: typeof Item & (new (handle: jitem) => T), id: number, x: number, y: number, skinId?: number): T;
20
- get typeId(): number;
21
+ get typeId(): ItemTypeId;
21
22
  set skinId(v: number);
22
23
  get skinId(): number;
23
24
  set name(v: string);
@@ -8,6 +8,6 @@ local DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD = ____ability.DURATION_NORMAL_AB
8
8
  -- @internal For use by internal systems only.
9
9
  ____exports.getAbilityDuration = function(ability, target)
10
10
  local level = ability.level
11
- return target ~= nil and target:hasClassification(UnitClassification.RESISTANT) and DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD:getValue(ability, level) or DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD:getValue(ability, level)
11
+ return target ~= nil and (target.isHero or target:getField(UNIT_IF_LEVEL) >= 6 or target:hasClassification(UnitClassification.RESISTANT)) and DURATION_HERO_ABILITY_FLOAT_LEVEL_FIELD:getValue(ability, level) or DURATION_NORMAL_ABILITY_FLOAT_LEVEL_FIELD:getValue(ability, level)
12
12
  end
13
13
  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.damageMetadataByTarget = setmetatable({}, {__mode = "k"})
5
+ return ____exports
@@ -1,15 +1,6 @@
1
1
  /** @noSelfInFile */
2
2
  import { Widget } from "../../core/types/widget";
3
- export type AttackType = jattacktype;
4
- export declare namespace AttackType {
5
- const SPELL: jattacktype;
6
- const NORMAL: jattacktype;
7
- const PIERCE: jattacktype;
8
- const SIEGE: jattacktype;
9
- const MAGIC: jattacktype;
10
- const CHAOS: jattacktype;
11
- const HERO: jattacktype;
12
- }
3
+ import { AttackType } from "../object-data/auxiliary/attack-type";
13
4
  export type DamageType = jdamagetype;
14
5
  export declare namespace DamageType {
15
6
  const UNKNOWN: jdamagetype;
@@ -64,6 +55,6 @@ export declare namespace WeaponType {
64
55
  }
65
56
  declare module "./unit" {
66
57
  interface Unit {
67
- damageTarget(target: Widget, amount: number, attack?: boolean, ranged?: boolean, attackType?: AttackType, damageType?: DamageType, weaponType?: WeaponType): boolean;
58
+ damageTarget(target: Widget, amount: number, attack?: boolean, ranged?: boolean, attackType?: AttackType, damageType?: DamageType, weaponType?: WeaponType, metadata?: unknown): boolean;
68
59
  }
69
60
  }
@@ -7,21 +7,14 @@ local ____player = require("core.types.player")
7
7
  local Player = ____player.Player
8
8
  local ____dummy = require("objutil.dummy")
9
9
  local dummyUnitId = ____dummy.dummyUnitId
10
+ local ____attack_2Dtype = require("engine.object-data.auxiliary.attack-type")
11
+ local attackTypeToNative = ____attack_2Dtype.attackTypeToNative
12
+ local ____damage_2Dmetadata_2Dby_2Dtarget = require("engine.internal.misc.damage-metadata-by-target")
13
+ local damageMetadataByTarget = ____damage_2Dmetadata_2Dby_2Dtarget.damageMetadataByTarget
10
14
  local createUnit = CreateUnit
11
15
  local getOwningPlayer = GetOwningPlayer
12
16
  local showUnit = ShowUnit
13
17
  local unitDamageTarget = UnitDamageTarget
14
- ____exports.AttackType = {}
15
- local AttackType = ____exports.AttackType
16
- do
17
- AttackType.SPELL = ATTACK_TYPE_NORMAL
18
- AttackType.NORMAL = ATTACK_TYPE_MELEE
19
- AttackType.PIERCE = ATTACK_TYPE_PIERCE
20
- AttackType.SIEGE = ATTACK_TYPE_SIEGE
21
- AttackType.MAGIC = ATTACK_TYPE_MAGIC
22
- AttackType.CHAOS = ATTACK_TYPE_CHAOS
23
- AttackType.HERO = ATTACK_TYPE_HERO
24
- end
25
18
  ____exports.DamageType = {}
26
19
  local DamageType = ____exports.DamageType
27
20
  do
@@ -88,7 +81,7 @@ for ____, player in ipairs(Player.all) do
88
81
  showUnit(dummy, false)
89
82
  dummies[player] = dummy
90
83
  end
91
- Unit.prototype.damageTarget = function(self, target, amount, attack, ranged, attackType, damageType, weaponType)
84
+ Unit.prototype.damageTarget = function(self, target, amount, attack, ranged, attackType, damageType, weaponType, metadata)
92
85
  if attack == nil then
93
86
  attack = false
94
87
  end
@@ -96,7 +89,7 @@ Unit.prototype.damageTarget = function(self, target, amount, attack, ranged, att
96
89
  ranged = false
97
90
  end
98
91
  if attackType == nil then
99
- attackType = ____exports.AttackType.SPELL
92
+ attackType = 0
100
93
  end
101
94
  if damageType == nil then
102
95
  damageType = ____exports.DamageType.MAGIC
@@ -109,13 +102,16 @@ Unit.prototype.damageTarget = function(self, target, amount, attack, ranged, att
109
102
  if not getOwningPlayer(handle) then
110
103
  handle = dummies[__TS__InstanceOf(target, Unit) and target.owner or (self._owner or Player.neutralAggressive)]
111
104
  end
105
+ if __TS__InstanceOf(target, Unit) then
106
+ damageMetadataByTarget[target] = metadata
107
+ end
112
108
  return unitDamageTarget(
113
109
  handle,
114
110
  targetHandle,
115
111
  amount,
116
112
  attack,
117
113
  ranged,
118
- attackType,
114
+ attackTypeToNative(attackType),
119
115
  damageType,
120
116
  weaponType
121
117
  )
@@ -6,7 +6,6 @@ local ____exports = {}
6
6
  local ____unit = require("engine.internal.unit")
7
7
  local Unit = ____unit.Unit
8
8
  local ____unit_2Bdamage = require("engine.internal.unit+damage")
9
- local AttackType = ____unit_2Bdamage.AttackType
10
9
  local DamageType = ____unit_2Bdamage.DamageType
11
10
  local ____event = require("event")
12
11
  local Event = ____event.Event
@@ -33,7 +32,7 @@ local spellStealEventStack = {}
33
32
  Unit.onDamaging:addListener(function(source, target, event)
34
33
  if event.amount == 0 and source ~= nil then
35
34
  local count = countByUnit[source] or 0
36
- if count > 0 and event.attackType == AttackType.SPELL then
35
+ if count > 0 and event.attackType == 0 then
37
36
  if event.damageType == DamageType.UNKNOWN then
38
37
  spellStealEventStack[#spellStealEventStack + 1] = {
39
38
  sourceBuffIds = source.buffIds,
@@ -11,6 +11,10 @@ import { Ability, UnitAbility } from "./ability";
11
11
  import { Widget } from "../../core/types/widget";
12
12
  import type { UnitTypeId } from "../object-data/entry/unit-type";
13
13
  import { CombatClassification, CombatClassifications } from "../object-data/auxiliary/combat-classification";
14
+ import { MovementType } from "../object-data/auxiliary/movement-type";
15
+ import { UnitAttribute } from "../object-data/auxiliary/unit-attribute";
16
+ import { AttackType } from "../object-data/auxiliary/attack-type";
17
+ import { AttributesHolder } from "../../attributes";
14
18
  export type UnitClassification = junittype;
15
19
  export declare namespace UnitClassification {
16
20
  const STRUCTURE: junittype;
@@ -19,6 +23,7 @@ export declare namespace UnitClassification {
19
23
  const GROUND: junittype;
20
24
  const SUMMONED: junittype;
21
25
  const MECHANICAL: junittype;
26
+ const WORKER: junittype;
22
27
  const ANCIENT: junittype;
23
28
  const SUICIDAL: junittype;
24
29
  const TAUREN: junittype;
@@ -36,13 +41,15 @@ type AbilityDispatcherTable<T extends any[] = []> = {
36
41
  readonly [id: number]: Event<[Unit, Ability, ...T]>;
37
42
  };
38
43
  type AbilityEventDispatcher<T extends any[] = []> = Event<[Unit, Ability, ...T]> & AbilityDispatcherTable<T>;
39
- export interface DamagingEvent {
44
+ export interface DamagingEvent extends AttributesHolder {
40
45
  amount: number;
41
- attackType: jattacktype;
46
+ attackType: AttackType;
42
47
  damageType: jdamagetype;
43
48
  weaponType: jweapontype;
49
+ metadata: unknown;
44
50
  readonly isAttack: boolean;
45
51
  readonly originalAmount: number;
52
+ readonly originalMetadata: unknown;
46
53
  }
47
54
  export type DamageEvent = DamagingEvent & {
48
55
  preventDeath<P extends any[]>(this: DamageEvent, callback: (this: void, ...parameters: P) => any, ...parameters: P): void;
@@ -100,7 +107,9 @@ declare const enum UnitPropertyKey {
100
107
  DELAY_HEALTH_CHECKS_COUNTER = 103,
101
108
  DELAY_HEALTH_CHECKS_HEALTH_BONUS = 104,
102
109
  PREVENT_DEATH_HEALTH_BONUS = 105,
103
- IS_TEAM_GLOW_HIDDEN = 106
110
+ IS_TEAM_GLOW_HIDDEN = 106,
111
+ LAST_X = 107,
112
+ LAST_Y = 108
104
113
  }
105
114
  export type UnitSyncId = number & {
106
115
  readonly __unitSyncId: unique symbol;
@@ -113,6 +122,8 @@ export declare class Unit extends Handle<junit> {
113
122
  private [UnitPropertyKey.DELAY_HEALTH_CHECKS_HEALTH_BONUS]?;
114
123
  private [UnitPropertyKey.PREVENT_DEATH_HEALTH_BONUS]?;
115
124
  private [UnitPropertyKey.IS_TEAM_GLOW_HIDDEN]?;
125
+ private [UnitPropertyKey.LAST_X]?;
126
+ private [UnitPropertyKey.LAST_Y]?;
116
127
  private _owner?;
117
128
  private _timeScale?;
118
129
  private events?;
@@ -148,6 +159,7 @@ export declare class Unit extends Handle<junit> {
148
159
  isEnemyOf(unit: Unit): boolean;
149
160
  playAnimation(animation: string, rarity?: jraritycontrol): void;
150
161
  playAnimation(animation: number): void;
162
+ resetAnimation(): void;
151
163
  queueAnimation(animation: string): void;
152
164
  get weapons(): [UnitWeapon, UnitWeapon];
153
165
  get firstWeapon(): UnitWeapon;
@@ -156,6 +168,8 @@ export declare class Unit extends Handle<junit> {
156
168
  set level(v: number);
157
169
  get xp(): number;
158
170
  set xp(v: number);
171
+ get primaryAttribute(): UnitAttribute;
172
+ set primaryAttribute(primaryAttribute: UnitAttribute);
159
173
  get strengthBase(): number;
160
174
  set strengthBase(strengthBase: number);
161
175
  get strengthBonus(): number;
@@ -230,6 +244,8 @@ export declare class Unit extends Handle<junit> {
230
244
  set timeScale(v: number);
231
245
  get collisionSize(): number;
232
246
  get pathingCollisionRange(): number;
247
+ get movementType(): MovementType;
248
+ set movementType(movementType: MovementType);
233
249
  set pathing(v: boolean);
234
250
  isSelected(player: Player): boolean;
235
251
  explode(): void;
@@ -53,12 +53,17 @@ local ____math = require("math")
53
53
  local min = ____math.min
54
54
  local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
55
55
  local ignoreEventsItems = ____ignore_2Devents_2Ditems.ignoreEventsItems
56
+ local ____attack_2Dtype = require("engine.object-data.auxiliary.attack-type")
57
+ local attackTypeToNative = ____attack_2Dtype.attackTypeToNative
58
+ local nativeToAttackType = ____attack_2Dtype.nativeToAttackType
59
+ local ____damage_2Dmetadata_2Dby_2Dtarget = require("engine.internal.misc.damage-metadata-by-target")
60
+ local damageMetadataByTarget = ____damage_2Dmetadata_2Dby_2Dtarget.damageMetadataByTarget
61
+ local ____attributes = require("attributes")
62
+ local isAttribute = ____attributes.isAttribute
56
63
  local match = string.match
57
64
  local ____tostring = _G.tostring
58
65
  local setUnitAnimation = SetUnitAnimation
59
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
60
66
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
61
- local queueUnitAnimation = QueueUnitAnimation
62
67
  local getUnitIntegerField = BlzGetUnitIntegerField
63
68
  local getUnitRealField = BlzGetUnitRealField
64
69
  local getHeroStr = GetHeroStr
@@ -80,7 +85,6 @@ local getHandleId = GetHandleId
80
85
  local getUnitCurrentOrder = GetUnitCurrentOrder
81
86
  local createUnit = CreateUnit
82
87
  local killUnit = KillUnit
83
- local setUnitExploded = SetUnitExploded
84
88
  local removeUnit = RemoveUnit
85
89
  local getUnitTypeId = GetUnitTypeId
86
90
  local isHeroUnitId = IsHeroUnitId
@@ -96,8 +100,6 @@ local getSpellTargetItem = GetSpellTargetItem
96
100
  local getSpellTargetDestructable = GetSpellTargetDestructable
97
101
  local isUnitInRangeXY = IsUnitInRangeXY
98
102
  local isUnitInRange = IsUnitInRange
99
- local setResourceAmount = SetResourceAmount
100
- local getResourceAmount = GetResourceAmount
101
103
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
102
104
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
103
105
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
@@ -128,8 +130,6 @@ local isUnitType = IsUnitType
128
130
  local isUnitAlly = IsUnitAlly
129
131
  local isUnitEnemy = IsUnitEnemy
130
132
  local getOwningPlayer = GetOwningPlayer
131
- local setUnitColor = SetUnitColor
132
- local showUnitTeamGlow = BlzShowUnitTeamGlow
133
133
  ____exports.UnitClassification = {}
134
134
  local UnitClassification = ____exports.UnitClassification
135
135
  do
@@ -139,6 +139,7 @@ do
139
139
  UnitClassification.GROUND = UNIT_TYPE_GROUND
140
140
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
141
141
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
142
+ UnitClassification.WORKER = UNIT_TYPE_PEON
142
143
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
143
144
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
144
145
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -357,7 +358,14 @@ local function damageEventPreventDeath(self, callback, ...)
357
358
  rawset(self, 1 + i, (select(i, ...)))
358
359
  end
359
360
  end
360
- local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
361
+ local damageSetters = {
362
+ amount = BlzSetEventDamage,
363
+ attackType = function(attackType)
364
+ return BlzSetEventAttackType(attackTypeToNative(attackType))
365
+ end,
366
+ damageType = BlzSetEventDamageType,
367
+ weaponType = BlzSetEventWeaponType
368
+ }
361
369
  local jlimitopByOperator = {
362
370
  [0] = LESS_THAN_OR_EQUAL,
363
371
  [1] = LESS_THAN_OR_EQUAL,
@@ -639,7 +647,8 @@ local function delayHealthChecksCallback(unit)
639
647
  end
640
648
  end
641
649
  local nextSyncId = 1
642
- local unitBySyncId = setmetatable({}, {__mode = "k"})
650
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
651
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
643
652
  ____exports.Unit = __TS__Class()
644
653
  local Unit = ____exports.Unit
645
654
  Unit.name = "Unit"
@@ -680,6 +689,8 @@ function Unit.prototype.getEvent(self, event, collector)
680
689
  end
681
690
  function Unit.prototype.onDestroy(self)
682
691
  local handle = self.handle
692
+ self[107] = getUnitX(handle)
693
+ self[108] = getUnitY(handle)
683
694
  if not self._owner then
684
695
  self._owner = Player:of(getOwningPlayer(handle))
685
696
  end
@@ -790,13 +801,16 @@ function Unit.prototype.playAnimation(self, animation, rarity)
790
801
  if type(animation) == "number" then
791
802
  setUnitAnimationByIndex(self.handle, animation)
792
803
  elseif rarity then
793
- setUnitAnimationWithRarity(self.handle, animation, rarity)
804
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
794
805
  else
795
806
  setUnitAnimation(self.handle, animation)
796
807
  end
797
808
  end
809
+ function Unit.prototype.resetAnimation(self)
810
+ ResetUnitAnimation(self.handle)
811
+ end
798
812
  function Unit.prototype.queueAnimation(self, animation)
799
- queueUnitAnimation(self.handle, animation)
813
+ QueueUnitAnimation(self.handle, animation)
800
814
  end
801
815
  function Unit.prototype.delayHealthChecks(self)
802
816
  self[103] = (self[103] or 0) + 1
@@ -809,7 +823,7 @@ function Unit.prototype.isSelected(self, player)
809
823
  return IsUnitSelected(self.handle, player.handle)
810
824
  end
811
825
  function Unit.prototype.explode(self)
812
- setUnitExploded(self.handle, true)
826
+ SetUnitExploded(self.handle, true)
813
827
  killUnit(self.handle)
814
828
  end
815
829
  function Unit.prototype.kill(self)
@@ -1286,6 +1300,19 @@ __TS__SetDescriptor(
1286
1300
  },
1287
1301
  true
1288
1302
  )
1303
+ __TS__SetDescriptor(
1304
+ Unit.prototype,
1305
+ "primaryAttribute",
1306
+ {
1307
+ get = function(self)
1308
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1309
+ end,
1310
+ set = function(self, primaryAttribute)
1311
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1312
+ end
1313
+ },
1314
+ true
1315
+ )
1289
1316
  __TS__SetDescriptor(
1290
1317
  Unit.prototype,
1291
1318
  "strengthBase",
@@ -1410,7 +1437,7 @@ __TS__SetDescriptor(
1410
1437
  return not self[106]
1411
1438
  end,
1412
1439
  set = function(self, isTeamGlowVisible)
1413
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1440
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1414
1441
  local ____temp_6
1415
1442
  if not isTeamGlowVisible then
1416
1443
  ____temp_6 = true
@@ -1426,9 +1453,9 @@ __TS__SetDescriptor(
1426
1453
  Unit.prototype,
1427
1454
  "color",
1428
1455
  {set = function(self, color)
1429
- setUnitColor(self.handle, color.handle)
1456
+ SetUnitColor(self.handle, color.handle)
1430
1457
  if self[106] then
1431
- showUnitTeamGlow(self.handle, false)
1458
+ BlzShowUnitTeamGlow(self.handle, false)
1432
1459
  end
1433
1460
  end},
1434
1461
  true
@@ -1597,7 +1624,7 @@ __TS__SetDescriptor(
1597
1624
  "x",
1598
1625
  {
1599
1626
  get = function(self)
1600
- return getUnitX(self.handle)
1627
+ return self[107] or getUnitX(self.handle)
1601
1628
  end,
1602
1629
  set = function(self, v)
1603
1630
  SetUnitX(self.handle, v)
@@ -1610,7 +1637,7 @@ __TS__SetDescriptor(
1610
1637
  "y",
1611
1638
  {
1612
1639
  get = function(self)
1613
- return getUnitY(self.handle)
1640
+ return self[108] or getUnitY(self.handle)
1614
1641
  end,
1615
1642
  set = function(self, v)
1616
1643
  SetUnitY(self.handle, v)
@@ -1696,10 +1723,10 @@ __TS__SetDescriptor(
1696
1723
  "gold",
1697
1724
  {
1698
1725
  get = function(self)
1699
- return getResourceAmount(self.handle)
1726
+ return GetResourceAmount(self.handle)
1700
1727
  end,
1701
1728
  set = function(self, gold)
1702
- setResourceAmount(self.handle, gold)
1729
+ SetResourceAmount(self.handle, gold)
1703
1730
  end
1704
1731
  },
1705
1732
  true
@@ -1827,6 +1854,19 @@ __TS__SetDescriptor(
1827
1854
  end},
1828
1855
  true
1829
1856
  )
1857
+ __TS__SetDescriptor(
1858
+ Unit.prototype,
1859
+ "movementType",
1860
+ {
1861
+ get = function(self)
1862
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1863
+ end,
1864
+ set = function(self, movementType)
1865
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1866
+ end
1867
+ },
1868
+ true
1869
+ )
1830
1870
  __TS__SetDescriptor(
1831
1871
  Unit.prototype,
1832
1872
  "pathing",
@@ -2369,13 +2409,18 @@ Unit.onDamaging = (function()
2369
2409
  if source and source.typeId == dummyUnitId then
2370
2410
  source = nil
2371
2411
  end
2372
- local target = BlzGetEventDamageTarget()
2412
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2413
+ local metadata = damageMetadataByTarget[target]
2414
+ damageMetadataByTarget[target] = nil
2373
2415
  local data = {
2374
2416
  amount = GetEventDamage(),
2375
- attackType = BlzGetEventAttackType(),
2417
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2376
2418
  damageType = BlzGetEventDamageType(),
2377
2419
  weaponType = BlzGetEventWeaponType(),
2378
- isAttack = BlzGetEventIsAttack()
2420
+ metadata = metadata,
2421
+ isAttack = BlzGetEventIsAttack(),
2422
+ originalAmount = GetEventDamage(),
2423
+ originalMetadata = metadata
2379
2424
  }
2380
2425
  if data.isAttack and source then
2381
2426
  local weapon = BlzGetUnitWeaponBooleanField(source.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, 1) and (BlzGetUnitWeaponBooleanField(source.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, 0) and -1 or 1) or 0
@@ -2389,18 +2434,22 @@ Unit.onDamaging = (function()
2389
2434
  invoke(
2390
2435
  event,
2391
2436
  source,
2392
- ____exports.Unit:of(target),
2437
+ target,
2393
2438
  setmetatable(
2394
2439
  {},
2395
2440
  {
2396
2441
  __index = data,
2397
2442
  __newindex = function(self, key, value)
2398
- damageSetters[key](value)
2443
+ local damageSetter = damageSetters[key]
2444
+ if damageSetter ~= nil then
2445
+ damageSetter(value)
2446
+ end
2399
2447
  data[key] = value
2400
2448
  end
2401
2449
  }
2402
2450
  )
2403
2451
  )
2452
+ damagingEventByTarget[target] = data
2404
2453
  return
2405
2454
  end
2406
2455
  BlzSetEventDamage(0)
@@ -2408,7 +2457,7 @@ Unit.onDamaging = (function()
2408
2457
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2409
2458
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2410
2459
  local sourceOwner = source.owner.handle
2411
- local targetOwner = GetOwningPlayer(target)
2460
+ local targetOwner = target.owner.handle
2412
2461
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2413
2462
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2414
2463
  Timer:run(function()
@@ -2424,23 +2473,19 @@ Unit.onDamaging = (function()
2424
2473
  for ____, ____value in ipairs(source._attackHandlers) do
2425
2474
  local condition = ____value[1]
2426
2475
  local action = ____value[2]
2427
- if condition(
2428
- source,
2429
- ____exports.Unit:of(target),
2430
- data
2431
- ) then
2476
+ if condition(source, target, data) then
2432
2477
  action(
2433
2478
  source,
2434
- ____exports.Unit:of(target),
2479
+ target,
2435
2480
  setmetatable(
2436
2481
  {fire = function()
2437
2482
  UnitDamageTarget(
2438
2483
  source.handle,
2439
- target,
2484
+ target.handle,
2440
2485
  data.amount,
2441
2486
  true,
2442
2487
  true,
2443
- data.attackType,
2488
+ attackTypeToNative(data.attackType),
2444
2489
  data.damageType,
2445
2490
  data.weaponType
2446
2491
  )
@@ -2467,26 +2512,40 @@ Unit.onDamage = __TS__New(
2467
2512
  if source and source.typeId == dummyUnitId then
2468
2513
  source = nil
2469
2514
  end
2515
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2516
+ local damagingEvent = damagingEventByTarget[target]
2517
+ damagingEventByTarget[target] = nil
2470
2518
  local data = {
2471
2519
  amount = GetEventDamage(),
2472
- attackType = BlzGetEventAttackType(),
2520
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2473
2521
  damageType = BlzGetEventDamageType(),
2474
2522
  weaponType = BlzGetEventWeaponType(),
2523
+ metadata = damagingEvent and damagingEvent.metadata,
2475
2524
  isAttack = BlzGetEventIsAttack(),
2476
- originalAmount = GetEventDamage(),
2525
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2526
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2477
2527
  preventDeath = damageEventPreventDeath
2478
2528
  }
2529
+ if damagingEvent then
2530
+ for key, value in pairs(damagingEvent) do
2531
+ if isAttribute(key) then
2532
+ data[key] = value
2533
+ end
2534
+ end
2535
+ end
2479
2536
  local evData = setmetatable(
2480
2537
  {},
2481
2538
  {
2482
2539
  __index = data,
2483
2540
  __newindex = function(self, key, value)
2484
- damageSetters[key](value)
2541
+ local damageSetter = damageSetters[key]
2542
+ if damageSetter ~= nil then
2543
+ damageSetter(value)
2544
+ end
2485
2545
  data[key] = value
2486
2546
  end
2487
2547
  }
2488
2548
  )
2489
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2490
2549
  invoke(event, source, target, evData)
2491
2550
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2492
2551
  local bonusHealth = math.ceil(evData.amount)
@@ -12,3 +12,4 @@ export declare const enum AnimationName {
12
12
  STAND = "stand",
13
13
  WALK = "walk"
14
14
  }
15
+ export declare const isAnimationName: (value: string) => value is AnimationName;
@@ -1,2 +1,18 @@
1
1
  local ____exports = {}
2
+ local animationNames = {
3
+ attack = true,
4
+ birth = true,
5
+ death = true,
6
+ decay = true,
7
+ dissipate = true,
8
+ morph = true,
9
+ portrait = true,
10
+ sleep = true,
11
+ spell = true,
12
+ stand = true,
13
+ walk = true
14
+ }
15
+ ____exports.isAnimationName = function(value)
16
+ return animationNames[value] ~= nil
17
+ end
2
18
  return ____exports
@@ -2,13 +2,18 @@
2
2
  import { ModelNodeName } from "./model-node-name";
3
3
  import { ModelNodeQualifier } from "./model-node-qualifier";
4
4
  import { Optional } from "../../../utility/types";
5
+ import { EffectParameters } from "../../../core/types/effect";
5
6
  export type AttachmentPreset = {
6
7
  modelPath: string;
7
8
  nodeName: ModelNodeName;
8
9
  nodeQualifiers: ModelNodeQualifier[];
9
10
  };
10
- export type AttachmentPresetInput = Optional<AttachmentPreset, "nodeQualifiers"> | string;
11
- export declare const toAttachmentPreset: (attachmentPresetInput: AttachmentPresetInput) => AttachmentPreset;
11
+ export type EffectPresetWithParameters = AttachmentPreset & {
12
+ parameters?: EffectParameters;
13
+ };
14
+ export type AttachmentPresetInput<T extends AttachmentPreset = AttachmentPreset> = Optional<T, "nodeName" | "nodeQualifiers"> | string;
15
+ export type EffectPresetWithParametersInput = AttachmentPresetInput<EffectPresetWithParameters>;
16
+ export declare const toEffectPreset: (effectPresetInput: EffectPresetWithParametersInput) => EffectPresetWithParameters;
12
17
  export declare const extractAttachmentPresetInputModelPath: (attachmentPresetInput: AttachmentPresetInput | undefined) => string;
13
18
  export declare const extractAttachmentPresetInputNodeFQN: (attachmentPresetInput: AttachmentPresetInput | undefined) => string;
14
19
  export declare const splitAttachmentNodeFQN: (attachmentNodeFQN: string) => LuaMultiReturn<[attachmentNodeName: ModelNodeName, attachmentNodeQualifiers: ModelNodeQualifier[]]>;
@@ -1,9 +1,10 @@
1
1
  local ____lualib = require("lualib_bundle")
2
+ local __TS__ArrayJoin = ____lualib.__TS__ArrayJoin
2
3
  local __TS__StringSplit = ____lualib.__TS__StringSplit
3
4
  local __TS__ArraySlice = ____lualib.__TS__ArraySlice
4
5
  local ____exports = {}
5
- ____exports.toAttachmentPreset = function(attachmentPresetInput)
6
- return type(attachmentPresetInput) == "string" and ({modelPath = attachmentPresetInput, nodeName = "origin", nodeQualifiers = {}}) or ({modelPath = attachmentPresetInput.modelPath, nodeName = attachmentPresetInput.nodeName, nodeQualifiers = attachmentPresetInput.nodeQualifiers or ({})})
6
+ ____exports.toEffectPreset = function(effectPresetInput)
7
+ return type(effectPresetInput) == "string" and ({modelPath = effectPresetInput, nodeName = "origin", nodeQualifiers = {}}) or ({modelPath = effectPresetInput.modelPath, nodeName = effectPresetInput.nodeName or "origin", nodeQualifiers = effectPresetInput.nodeQualifiers or ({}), parameters = effectPresetInput.parameters})
7
8
  end
8
9
  ____exports.extractAttachmentPresetInputModelPath = function(attachmentPresetInput)
9
10
  return type(attachmentPresetInput) == "string" and attachmentPresetInput or (attachmentPresetInput and attachmentPresetInput.modelPath or "")
@@ -12,7 +13,7 @@ ____exports.extractAttachmentPresetInputNodeFQN = function(attachmentPresetInput
12
13
  if type(attachmentPresetInput) == "string" or attachmentPresetInput == nil then
13
14
  return ""
14
15
  end
15
- return table.concat(
16
+ return __TS__ArrayJoin(
16
17
  {
17
18
  attachmentPresetInput.nodeName,
18
19
  table.unpack(attachmentPresetInput.nodeQualifiers or ({}))
@@ -1,11 +1,10 @@
1
1
  /** @noSelfInFile */
2
2
  export declare const enum AttackType {
3
- NONE = "unknown",
4
- NORMAL = "normal",
5
- PIERCE = "pierce",
6
- SIEGE = "siege",
7
- SPELL = "spells",
8
- CHAOS = "chaos",
9
- MAGIC = "magic",
10
- HERO = "hero"
3
+ SPELL = 0,
4
+ NORMAL = 1,
5
+ PIERCE = 2,
6
+ SIEGE = 3,
7
+ MAGIC = 4,
8
+ CHAOS = 5,
9
+ HERO = 6
11
10
  }