warscript 0.0.1-dev.8fe1307 → 0.0.1-dev.96a6f7e

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 (57) hide show
  1. package/binaryreader.d.ts +1 -0
  2. package/binaryreader.lua +3 -0
  3. package/core/types/frame.d.ts +4 -0
  4. package/core/types/frame.lua +22 -1
  5. package/core/util.d.ts +1 -1
  6. package/core/util.lua +6 -0
  7. package/engine/behavior.d.ts +2 -2
  8. package/engine/behavior.lua +6 -6
  9. package/engine/behaviour/ability/apply-buff.d.ts +3 -5
  10. package/engine/behaviour/ability/damage.d.ts +33 -11
  11. package/engine/behaviour/ability/damage.lua +89 -31
  12. package/engine/behaviour/ability/heal.d.ts +33 -6
  13. package/engine/behaviour/ability/heal.lua +89 -10
  14. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  15. package/engine/behaviour/ability/restore-mana.lua +29 -0
  16. package/engine/behaviour/unit.d.ts +5 -0
  17. package/engine/behaviour/unit.lua +20 -0
  18. package/engine/buff.d.ts +60 -18
  19. package/engine/buff.lua +239 -62
  20. package/engine/game-map.d.ts +7 -0
  21. package/engine/game-map.lua +32 -0
  22. package/engine/internal/ability.d.ts +1 -11
  23. package/engine/internal/ability.lua +2 -78
  24. package/engine/internal/item+owner.lua +2 -2
  25. package/engine/internal/unit/bonus.d.ts +4 -2
  26. package/engine/internal/unit/bonus.lua +6 -1
  27. package/engine/internal/unit/item.d.ts +23 -0
  28. package/engine/internal/unit/item.lua +74 -0
  29. package/engine/internal/unit+ability.lua +2 -2
  30. package/engine/internal/unit+transport.lua +4 -10
  31. package/engine/internal/unit-missile-launch.lua +24 -5
  32. package/engine/internal/unit.d.ts +6 -4
  33. package/engine/internal/unit.lua +45 -31
  34. package/engine/object-data/entry/item-type.d.ts +12 -0
  35. package/engine/object-data/entry/item-type.lua +78 -0
  36. package/engine/object-field/ability.d.ts +17 -0
  37. package/engine/object-field/ability.lua +51 -1
  38. package/engine/unit.d.ts +1 -0
  39. package/engine/unit.lua +1 -0
  40. package/index.d.ts +1 -0
  41. package/index.lua +1 -0
  42. package/lualib_bundle.lua +7 -2
  43. package/net/socket.d.ts +7 -1
  44. package/net/socket.lua +45 -4
  45. package/network.d.ts +1 -0
  46. package/network.lua +3 -2
  47. package/objutil/buff.lua +1 -1
  48. package/package.json +2 -2
  49. package/patch-lua.d.ts +0 -0
  50. package/patch-lua.lua +10 -0
  51. package/property.d.ts +55 -0
  52. package/property.lua +374 -0
  53. package/utility/linked-set.d.ts +11 -2
  54. package/utility/linked-set.lua +5 -2
  55. package/utility/types.d.ts +1 -0
  56. package/core/mapbounds.d.ts +0 -8
  57. package/core/mapbounds.lua +0 -12
@@ -21,6 +21,7 @@ local AUTO_ATTACK_DAMAGE_INCREASE_DUMMY_ABILITY_TYPE_ID = ____auto_2Dattack_2Dda
21
21
  local ____movement_2Dspeed_2Dincrease_2Dfactor = require("engine.internal.object-data.movement-speed-increase-factor")
22
22
  local MOVEMENT_SPEED_INCREASE_FACTOR_ABILITY_FIELD = ____movement_2Dspeed_2Dincrease_2Dfactor.MOVEMENT_SPEED_INCREASE_FACTOR_ABILITY_FIELD
23
23
  local MOVEMENT_SPEED_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID = ____movement_2Dspeed_2Dincrease_2Dfactor.MOVEMENT_SPEED_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID
24
+ local damageFactorByUnit = {}
24
25
  local receivedDamageFactorByUnit = {}
25
26
  ____exports.UnitBonusType = {}
26
27
  local UnitBonusType = ____exports.UnitBonusType
@@ -46,13 +47,14 @@ do
46
47
  reduce = sum,
47
48
  initialValue = 0
48
49
  }
49
- UnitBonusType.DAMAGE = {
50
+ UnitBonusType.AUTO_ATTACK_DAMAGE = {
50
51
  abilityTypeId = AUTO_ATTACK_DAMAGE_INCREASE_DUMMY_ABILITY_TYPE_ID,
51
52
  field = AUTO_ATTACK_DAMAGE_INCREASE_ABILITY_FIELD,
52
53
  integer = false,
53
54
  reduce = sum,
54
55
  initialValue = 0
55
56
  }
57
+ UnitBonusType.DAMAGE_FACTOR = {reduce = product, valueByUnit = damageFactorByUnit, initialValue = 1}
56
58
  UnitBonusType.RECEIVED_DAMAGE_FACTOR = {reduce = product, valueByUnit = receivedDamageFactorByUnit, initialValue = 1}
57
59
  end
58
60
  local bonusesByUnitByBonusType = {}
@@ -180,6 +182,9 @@ end
180
182
  Unit.onDamage:addListener(
181
183
  4,
182
184
  function(source, target, event)
185
+ if source ~= nil and damageFactorByUnit[source] ~= nil then
186
+ event.amount = event.amount * damageFactorByUnit[source]
187
+ end
183
188
  if receivedDamageFactorByUnit[target] ~= nil then
184
189
  event.amount = event.amount * receivedDamageFactorByUnit[target]
185
190
  end
@@ -0,0 +1,23 @@
1
+ /** @noSelfInFile */
2
+ import { Item } from "../item";
3
+ export interface UnitItems extends ReadonlyArray<Item | undefined> {
4
+ readonly length: 0 | 1 | 2 | 3 | 4 | 5 | 6;
5
+ [0]: Item | undefined;
6
+ [1]: Item | undefined;
7
+ [2]: Item | undefined;
8
+ [3]: Item | undefined;
9
+ [4]: Item | undefined;
10
+ [5]: Item | undefined;
11
+ }
12
+ export declare class UnitItems {
13
+ constructor(handle: junit);
14
+ protected __newindex(slot: number, item: Item | undefined): void;
15
+ protected __index(key: string | number): unknown;
16
+ protected __len(): number;
17
+ protected __ipairs(): LuaIterator<LuaMultiReturn<[number, Item | undefined]>, junit>;
18
+ }
19
+ declare module "../unit" {
20
+ interface Unit {
21
+ readonly items: UnitItems;
22
+ }
23
+ }
@@ -0,0 +1,74 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__New = ____lualib.__TS__New
4
+ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
5
+ local ____exports = {}
6
+ local ____item = require("engine.internal.item")
7
+ local Item = ____item.Item
8
+ local ____unit = require("engine.internal.unit")
9
+ local Unit = ____unit.Unit
10
+ local rawset = _G.rawset
11
+ local ____type = _G.type
12
+ local isItemPowerup = IsItemPowerup
13
+ local setItemBooleanField = BlzSetItemBooleanField
14
+ local unitAddItem = UnitAddItem
15
+ local unitDropItemSlot = UnitDropItemSlot
16
+ local unitInventorySize = UnitInventorySize
17
+ local unitItemInSlot = UnitItemInSlot
18
+ local unitRemoveItemFromSlot = UnitRemoveItemFromSlot
19
+ local handleByUnitItems = setmetatable({}, {__mode = "k"})
20
+ local function unitItemsNext(handle, index)
21
+ local slot = index & 7
22
+ if index >> 3 == slot then
23
+ return nil, nil
24
+ end
25
+ return index + 1, Item:of(unitItemInSlot(handle, slot))
26
+ end
27
+ ____exports.UnitItems = __TS__Class()
28
+ local UnitItems = ____exports.UnitItems
29
+ UnitItems.name = "UnitItems"
30
+ function UnitItems.prototype.____constructor(self, handle)
31
+ handleByUnitItems[self] = handle
32
+ end
33
+ function UnitItems.prototype.__newindex(self, slot, item)
34
+ local handle = handleByUnitItems[self]
35
+ if slot < 1 or slot > unitInventorySize(handle) then
36
+ return
37
+ end
38
+ unitRemoveItemFromSlot(handle, slot - 1)
39
+ if item ~= nil then
40
+ local itemHandle = item.handle
41
+ local isPowerup = isItemPowerup(itemHandle)
42
+ if isPowerup then
43
+ setItemBooleanField(itemHandle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, false)
44
+ end
45
+ unitAddItem(handle, itemHandle)
46
+ unitDropItemSlot(handle, itemHandle, slot - 1)
47
+ if isPowerup then
48
+ setItemBooleanField(itemHandle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
49
+ end
50
+ end
51
+ end
52
+ function UnitItems.prototype.__index(self, key)
53
+ if ____type(key) == "number" then
54
+ return Item:of(unitItemInSlot(handleByUnitItems[self], key - 1))
55
+ end
56
+ return rawget(____exports.UnitItems.prototype, key)
57
+ end
58
+ function UnitItems.prototype.__len(self)
59
+ return unitInventorySize(handleByUnitItems[self])
60
+ end
61
+ function UnitItems.prototype.__ipairs(self)
62
+ local handle = handleByUnitItems[self]
63
+ return unitItemsNext, handle, unitInventorySize(handle) << 3
64
+ end
65
+ __TS__ObjectDefineProperty(
66
+ Unit.prototype,
67
+ "items",
68
+ {get = function(self)
69
+ local items = __TS__New(____exports.UnitItems, self.handle)
70
+ rawset(self, "items", items)
71
+ return items
72
+ end}
73
+ )
74
+ return ____exports
@@ -40,7 +40,7 @@ ItemAbility.onCreate:addListener(
40
40
  end
41
41
  end
42
42
  )
43
- Unit.onItemPickup:addListener(
43
+ Unit.itemPickedUpEvent:addListener(
44
44
  0,
45
45
  function(unit, item)
46
46
  for ____, ability in ipairs(item.abilities) do
@@ -48,7 +48,7 @@ Unit.onItemPickup:addListener(
48
48
  end
49
49
  end
50
50
  )
51
- Unit.onItemDrop:addListener(
51
+ Unit.itemDroppedEvent:addListener(
52
52
  4,
53
53
  function(unit, item)
54
54
  for ____, ability in ipairs(item.abilities) do
@@ -6,9 +6,8 @@ local ____unit = require("engine.internal.unit")
6
6
  local Unit = ____unit.Unit
7
7
  local ____event = require("event")
8
8
  local Event = ____event.Event
9
- local ____mapbounds = require("core.mapbounds")
10
- local boundMax = ____mapbounds.boundMax
11
- local boundRegion = ____mapbounds.boundRegion
9
+ local ____game_2Dmap = require("engine.game-map")
10
+ local GameMap = ____game_2Dmap.GameMap
12
11
  local eventInvoke = Event.invoke
13
12
  local tableRemove = table.remove
14
13
  local ____assert = _G.assert
@@ -58,8 +57,8 @@ triggerAddCondition(
58
57
  deboard(unit)
59
58
  end
60
59
  if not unitAlive(handle) then
61
- unit.x = boundMax.x
62
- unit.y = boundMax.y
60
+ unit.x = GameMap.worldBoundsRect.maxX
61
+ unit.y = GameMap.worldBoundsRect.maxY
63
62
  end
64
63
  local transport = Unit:of(getTransportUnit())
65
64
  transportByUnit[unit] = transport
@@ -68,11 +67,6 @@ triggerAddCondition(
68
67
  eventInvoke(onBoardEvent, unit, transport)
69
68
  end)
70
69
  )
71
- boundRegion.onUnitEnter:addListener(function(unit)
72
- if transportByUnit[unit] ~= nil and not isUnitLoaded(unit.handle) then
73
- deboard(unit)
74
- end
75
- end)
76
70
  Unit.deathEvent:addListener(function(unit)
77
71
  if transportByUnit[unit] ~= nil then
78
72
  deboard(unit)
@@ -7,14 +7,33 @@ local ____event = require("event")
7
7
  local Event = ____event.Event
8
8
  local ____timer = require("core.types.timer")
9
9
  local Timer = ____timer.Timer
10
+ local ____lua_2Dsets = require("utility.lua-sets")
11
+ local luaSetOf = ____lua_2Dsets.luaSetOf
10
12
  local autoAttackFinishEvent = __TS__New(Event)
11
13
  rawset(Unit, "autoAttackFinishEvent", autoAttackFinishEvent)
12
14
  local eventTimerByUnit = {}
13
- local function reset(source)
14
- local eventTimer = eventTimerByUnit[source]
15
- if eventTimer then
16
- eventTimer:destroy()
17
- eventTimerByUnit[source] = nil
15
+ local instantOrderIds = luaSetOf(
16
+ orderId("avatar"),
17
+ orderId("berserk"),
18
+ orderId("divineshield"),
19
+ orderId("immolation"),
20
+ orderId("moveslot0"),
21
+ orderId("moveslot1"),
22
+ orderId("moveslot2"),
23
+ orderId("moveslot3"),
24
+ orderId("moveslot4"),
25
+ orderId("moveslot5"),
26
+ orderId("unavatar"),
27
+ orderId("undivineshield"),
28
+ orderId("unimmolation")
29
+ )
30
+ local function reset(source, orderId)
31
+ if not (instantOrderIds[orderId] ~= nil) then
32
+ local eventTimer = eventTimerByUnit[source]
33
+ if eventTimer then
34
+ eventTimer:destroy()
35
+ eventTimerByUnit[source] = nil
36
+ end
18
37
  end
19
38
  end
20
39
  Unit.onImmediateOrder:addListener(reset)
@@ -42,6 +42,7 @@ export interface DamagingEvent {
42
42
  damageType: jdamagetype;
43
43
  weaponType: jweapontype;
44
44
  readonly isAttack: boolean;
45
+ readonly originalAmount: number;
45
46
  }
46
47
  export type DamageEvent = DamagingEvent & {
47
48
  preventDeath<P extends any[]>(this: DamageEvent, callback: (this: void, ...parameters: P) => any, ...parameters: P): void;
@@ -227,7 +228,7 @@ export declare class Unit extends Handle<junit> {
227
228
  isSelected(player: Player): boolean;
228
229
  explode(): void;
229
230
  kill(): void;
230
- revive(pos: Vec2, doEffect: boolean): void;
231
+ revive(x: number, y: number, doEffect?: boolean): void;
231
232
  healTarget(target: Widget, amount: number): void;
232
233
  useItem(item: Item): boolean;
233
234
  issueImmediateOrder(order: number): boolean;
@@ -322,9 +323,10 @@ export declare class Unit extends Handle<junit> {
322
323
  static readonly autoAttackStartEvent: UnitTriggerEvent<[Unit]>;
323
324
  static readonly onDamaging: Event<[source: Unit | undefined, target: Unit, event: DamagingEvent]>;
324
325
  static readonly onDamage: InitializingEvent<[source: Unit | undefined, target: Unit, event: DamageEvent], jtrigger>;
325
- static onItemDrop: UnitTriggerEvent<[Item]>;
326
- static onItemPickup: UnitTriggerEvent<[Item]>;
327
- static onItemUse: UnitTriggerEvent<[Item]>;
326
+ static itemDroppedEvent: UnitTriggerEvent<[Item]>;
327
+ static itemPickedUpEvent: UnitTriggerEvent<[Item]>;
328
+ static itemUsedEvent: UnitTriggerEvent<[Item]>;
329
+ static itemStackedEvent: UnitTriggerEvent<[Item]>;
328
330
  static get onCreate(): EventDispatcher<[Unit], [Unit]>;
329
331
  static get destroyEvent(): EventDispatcher<[Unit], [Unit]>;
330
332
  getField(field: junitintegerfield | junitrealfield): number;
@@ -7,6 +7,9 @@ local __TS__Class = ____lualib.__TS__Class
7
7
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
8
8
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
9
9
  local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
10
+ local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
11
+ local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
12
+ local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
10
13
  local __TS__InstanceOf = ____lualib.__TS__InstanceOf
11
14
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
12
15
  local Set = ____lualib.Set
@@ -279,16 +282,14 @@ function UnitTriggerEvent.prototype.____constructor(self, eventType, c)
279
282
  end
280
283
  local function dispatch(event, idGetter, argsGetter)
281
284
  local initialized = false
282
- local x = {}
283
285
  return setmetatable(
284
- x,
286
+ {},
285
287
  {
286
288
  __index = function(self, id)
287
289
  if type(id) ~= "number" then
288
290
  return event[id]
289
291
  end
290
292
  if not initialized then
291
- local invoke = Event.invoke
292
293
  event:addListener(function(...)
293
294
  local id = idGetter(...)
294
295
  local dispatched = rawget(self, id)
@@ -326,7 +327,6 @@ local function dispatchAbility(event)
326
327
  return event[id]
327
328
  end
328
329
  if not initialized then
329
- local invoke = Event.invoke
330
330
  event:addListener(function(unit, ability, ...)
331
331
  local dispatched = rawget(self, ability.typeId)
332
332
  if dispatched ~= nil then
@@ -817,8 +817,15 @@ end
817
817
  function Unit.prototype.kill(self)
818
818
  killUnit(self.handle)
819
819
  end
820
- function Unit.prototype.revive(self, pos, doEffect)
821
- ReviveHero(self.handle, pos.x, pos.y, doEffect)
820
+ function Unit.prototype.revive(self, x, y, doEffect)
821
+ local ____ReviveHero_4 = ReviveHero
822
+ local ____array_3 = __TS__SparseArrayNew(self.handle, x, y)
823
+ local ____doEffect_2 = doEffect
824
+ if ____doEffect_2 == nil then
825
+ ____doEffect_2 = false
826
+ end
827
+ __TS__SparseArrayPush(____array_3, ____doEffect_2)
828
+ ____ReviveHero_4(__TS__SparseArraySpread(____array_3))
822
829
  end
823
830
  function Unit.prototype.healTarget(self, target, amount)
824
831
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -858,7 +865,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
858
865
  return UnitDropItemSlot(self.handle, item.handle, slot)
859
866
  end
860
867
  function Unit.prototype.itemInSlot(self, slot)
861
- return Item:of(UnitItemInSlot(self.handle, slot))
868
+ return Item:of(unitItemInSlot(self.handle, slot))
862
869
  end
863
870
  function Unit.prototype.addAbility(self, abilityId)
864
871
  if unitAddAbility(self.handle, abilityId) then
@@ -1385,13 +1392,13 @@ __TS__SetDescriptor(
1385
1392
  end,
1386
1393
  set = function(self, isTeamGlowVisible)
1387
1394
  showUnitTeamGlow(self.handle, isTeamGlowVisible)
1388
- local ____temp_2
1395
+ local ____temp_5
1389
1396
  if not isTeamGlowVisible then
1390
- ____temp_2 = true
1397
+ ____temp_5 = true
1391
1398
  else
1392
- ____temp_2 = nil
1399
+ ____temp_5 = nil
1393
1400
  end
1394
- self[105] = ____temp_2
1401
+ self[105] = ____temp_5
1395
1402
  end
1396
1403
  },
1397
1404
  true
@@ -2055,7 +2062,6 @@ Unit.onDecay = __TS__New(
2055
2062
  Unit.onResurrect = __TS__New(
2056
2063
  InitializingEvent,
2057
2064
  function(event)
2058
- local invoke = Event.invoke
2059
2065
  local dead = setmetatable({}, {__mode = "k"})
2060
2066
  ____exports.Unit.deathEvent:addListener(function(unit)
2061
2067
  dead[unit] = true
@@ -2071,10 +2077,15 @@ Unit.onResurrect = __TS__New(
2071
2077
  Unit.morphEvent = __TS__New(
2072
2078
  InitializingEvent,
2073
2079
  function(event)
2080
+ local function ifNotLeft(unit)
2081
+ local handle = unit.handle
2082
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2083
+ invoke(event, unit)
2084
+ end
2085
+ end
2074
2086
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2075
2087
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
2076
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
2077
- Timer:run(Event.invoke, event, unit)
2088
+ Timer:run(ifNotLeft, unit)
2078
2089
  end
2079
2090
  end)
2080
2091
  end
@@ -2112,27 +2123,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
2112
2123
  Unit.onTargetCast = dispatchId(__TS__New(
2113
2124
  InitializingEvent,
2114
2125
  function(event)
2115
- local invoke = Event.invoke
2116
2126
  local function listener(unit, id)
2117
- local ____GetSpellTargetUnit_result_5
2127
+ local ____GetSpellTargetUnit_result_8
2118
2128
  if GetSpellTargetUnit() then
2119
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2129
+ ____GetSpellTargetUnit_result_8 = ____exports.Unit:of(GetSpellTargetUnit())
2120
2130
  else
2121
- local ____GetSpellTargetItem_result_4
2131
+ local ____GetSpellTargetItem_result_7
2122
2132
  if GetSpellTargetItem() then
2123
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2133
+ ____GetSpellTargetItem_result_7 = Item:of(GetSpellTargetItem())
2124
2134
  else
2125
- local ____GetSpellTargetDestructable_result_3
2135
+ local ____GetSpellTargetDestructable_result_6
2126
2136
  if GetSpellTargetDestructable() then
2127
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2137
+ ____GetSpellTargetDestructable_result_6 = Destructable:of(GetSpellTargetDestructable())
2128
2138
  else
2129
- ____GetSpellTargetDestructable_result_3 = nil
2139
+ ____GetSpellTargetDestructable_result_6 = nil
2130
2140
  end
2131
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2141
+ ____GetSpellTargetItem_result_7 = ____GetSpellTargetDestructable_result_6
2132
2142
  end
2133
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2143
+ ____GetSpellTargetUnit_result_8 = ____GetSpellTargetItem_result_7
2134
2144
  end
2135
- local target = ____GetSpellTargetUnit_result_5
2145
+ local target = ____GetSpellTargetUnit_result_8
2136
2146
  if target then
2137
2147
  invoke(event, unit, id, target)
2138
2148
  end
@@ -2329,7 +2339,6 @@ Unit.autoAttackStartEvent = __TS__New(
2329
2339
  )
2330
2340
  Unit.onDamaging = (function()
2331
2341
  local event = __TS__New(Event)
2332
- local invoke = Event.invoke
2333
2342
  local trigger = CreateTrigger()
2334
2343
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2335
2344
  TriggerAddCondition(
@@ -2428,7 +2437,6 @@ end)()
2428
2437
  Unit.onDamage = __TS__New(
2429
2438
  InitializingEvent,
2430
2439
  function(event)
2431
- local invoke = Event.invoke
2432
2440
  local trigger = CreateTrigger()
2433
2441
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2434
2442
  TriggerAddCondition(
@@ -2444,6 +2452,7 @@ Unit.onDamage = __TS__New(
2444
2452
  damageType = BlzGetEventDamageType(),
2445
2453
  weaponType = BlzGetEventWeaponType(),
2446
2454
  isAttack = BlzGetEventIsAttack(),
2455
+ originalAmount = GetEventDamage(),
2447
2456
  preventDeath = damageEventPreventDeath
2448
2457
  }
2449
2458
  local evData = setmetatable(
@@ -2494,7 +2503,7 @@ Unit.onDamage = __TS__New(
2494
2503
  DestroyTrigger(trigger)
2495
2504
  end
2496
2505
  )
2497
- Unit.onItemDrop = __TS__New(
2506
+ Unit.itemDroppedEvent = __TS__New(
2498
2507
  ____exports.UnitTriggerEvent,
2499
2508
  EVENT_PLAYER_UNIT_DROP_ITEM,
2500
2509
  function()
@@ -2505,7 +2514,7 @@ Unit.onItemDrop = __TS__New(
2505
2514
  return IgnoreEvent
2506
2515
  end
2507
2516
  )
2508
- Unit.onItemPickup = __TS__New(
2517
+ Unit.itemPickedUpEvent = __TS__New(
2509
2518
  ____exports.UnitTriggerEvent,
2510
2519
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2511
2520
  function()
@@ -2516,10 +2525,15 @@ Unit.onItemPickup = __TS__New(
2516
2525
  return IgnoreEvent
2517
2526
  end
2518
2527
  )
2519
- Unit.onItemUse = __TS__New(
2528
+ Unit.itemUsedEvent = __TS__New(
2520
2529
  ____exports.UnitTriggerEvent,
2521
2530
  EVENT_PLAYER_UNIT_USE_ITEM,
2522
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2531
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2532
+ )
2533
+ Unit.itemStackedEvent = __TS__New(
2534
+ ____exports.UnitTriggerEvent,
2535
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2536
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2523
2537
  )
2524
2538
  __TS__ObjectDefineProperty(
2525
2539
  Unit,
@@ -45,4 +45,16 @@ export declare class ItemType extends ObjectDataEntry<ItemTypeId> {
45
45
  set tooltipText(tooltipText: string);
46
46
  get tooltipExtendedText(): string;
47
47
  set tooltipExtendedText(tooltipText: string);
48
+ get goldCost(): number;
49
+ set goldCost(goldCost: number);
50
+ get lumberCost(): number;
51
+ set lumberCost(lumberCost: number);
52
+ get activelyUsed(): boolean;
53
+ set activelyUsed(activelyUsed: boolean);
54
+ get perishable(): boolean;
55
+ set perishable(perishable: boolean);
56
+ get initialStackSize(): number;
57
+ set initialStackSize(initialStackSize: number);
58
+ get maximumStackSize(): number;
59
+ set maximumStackSize(maximumStackSize: number);
48
60
  }
@@ -256,4 +256,82 @@ __TS__SetDescriptor(
256
256
  },
257
257
  true
258
258
  )
259
+ __TS__SetDescriptor(
260
+ ItemType.prototype,
261
+ "goldCost",
262
+ {
263
+ get = function(self)
264
+ return self:getNumberField("igol")
265
+ end,
266
+ set = function(self, goldCost)
267
+ self:setNumberField("igol", goldCost)
268
+ end
269
+ },
270
+ true
271
+ )
272
+ __TS__SetDescriptor(
273
+ ItemType.prototype,
274
+ "lumberCost",
275
+ {
276
+ get = function(self)
277
+ return self:getNumberField("ilum")
278
+ end,
279
+ set = function(self, lumberCost)
280
+ self:setNumberField("ilum", lumberCost)
281
+ end
282
+ },
283
+ true
284
+ )
285
+ __TS__SetDescriptor(
286
+ ItemType.prototype,
287
+ "activelyUsed",
288
+ {
289
+ get = function(self)
290
+ return self:getBooleanField("iusa")
291
+ end,
292
+ set = function(self, activelyUsed)
293
+ self:setBooleanField("iusa", activelyUsed)
294
+ end
295
+ },
296
+ true
297
+ )
298
+ __TS__SetDescriptor(
299
+ ItemType.prototype,
300
+ "perishable",
301
+ {
302
+ get = function(self)
303
+ return self:getBooleanField("iper")
304
+ end,
305
+ set = function(self, perishable)
306
+ self:setBooleanField("iper", perishable)
307
+ end
308
+ },
309
+ true
310
+ )
311
+ __TS__SetDescriptor(
312
+ ItemType.prototype,
313
+ "initialStackSize",
314
+ {
315
+ get = function(self)
316
+ return self:getNumberField("iuse")
317
+ end,
318
+ set = function(self, initialStackSize)
319
+ self:setNumberField("iuse", initialStackSize)
320
+ end
321
+ },
322
+ true
323
+ )
324
+ __TS__SetDescriptor(
325
+ ItemType.prototype,
326
+ "maximumStackSize",
327
+ {
328
+ get = function(self)
329
+ return self:getNumberField("ista")
330
+ end,
331
+ set = function(self, maximumStackSize)
332
+ self:setNumberField("ista", maximumStackSize)
333
+ end
334
+ },
335
+ true
336
+ )
259
337
  return ____exports
@@ -6,6 +6,9 @@ import { ObjectDataEntryId } from "../object-data/entry";
6
6
  import { LightningTypeId } from "../object-data/entry/lightning-type";
7
7
  import { CombatClassifications } from "../object-data/auxiliary/combat-classification";
8
8
  import { UnitTypeId } from "../object-data/entry/unit-type";
9
+ import { BuffResistanceType } from "../object-data/auxiliary/buff-resistance-type";
10
+ import { BuffPolarity } from "../object-data/auxiliary/buff-polarity";
11
+ import { ReadonlyNonEmptyLinkedSet } from "../../utility/linked-set";
9
12
  export declare abstract class AbilityField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType extends jabilityfield = jabilityfield> extends ObjectField<AbilityType, Ability, ValueType, NativeFieldType> {
10
13
  protected get instanceClass(): typeof Ability;
11
14
  protected getObjectDataEntryId(instance: Ability): AbilityTypeId;
@@ -107,6 +110,20 @@ export declare class AbilityAbilityTypeIdLevelField extends AbilityObjectDataEnt
107
110
  }
108
111
  export declare class AbilityUnitTypeIdLevelField extends AbilityObjectDataEntryIdLevelField<UnitTypeId> {
109
112
  }
113
+ export declare abstract class AbilityEnumLevelField<T extends number> extends AbilityLevelField<T, T, jabilityintegerlevelfield> {
114
+ protected abstract values: ReadonlyNonEmptyLinkedSet<T>;
115
+ protected get defaultValue(): T;
116
+ protected getNativeFieldById(id: number): jabilityintegerlevelfield;
117
+ protected getNativeFieldValue(instance: Ability, level: number): T;
118
+ protected setNativeFieldValue(instance: Ability, level: number, value: T): boolean;
119
+ static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<AbilityBooleanLevelField>;
120
+ }
121
+ export declare class AbilityBuffPolarityLevelField extends AbilityEnumLevelField<BuffPolarity> {
122
+ protected values: ReadonlyNonEmptyLinkedSet<BuffPolarity>;
123
+ }
124
+ export declare class AbilityBuffResistanceTypeLevelField extends AbilityEnumLevelField<BuffResistanceType> {
125
+ protected values: ReadonlyNonEmptyLinkedSet<BuffResistanceType>;
126
+ }
110
127
  export declare class AbilityCombatClassificationsLevelField extends AbilityLevelField<CombatClassifications, CombatClassifications, jabilityintegerlevelfield> {
111
128
  protected get defaultValue(): CombatClassifications;
112
129
  protected getNativeFieldById(id: number): jabilityintegerlevelfield;
@@ -13,6 +13,8 @@ local ObjectField = ____object_2Dfield.ObjectField
13
13
  local ObjectLevelField = ____object_2Dfield.ObjectLevelField
14
14
  local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
15
15
  local AbilityType = ____ability_2Dtype.AbilityType
16
+ local ____linked_2Dset = require("utility.linked-set")
17
+ local nonEmptyLinkedSetOf = ____linked_2Dset.nonEmptyLinkedSetOf
16
18
  local convertAbilityBooleanField = _G.ConvertAbilityBooleanField
17
19
  local convertAbilityIntegerField = _G.ConvertAbilityIntegerField
18
20
  local convertAbilityRealField = _G.ConvertAbilityRealField
@@ -259,7 +261,7 @@ local AbilityLevelField = ____exports.AbilityLevelField
259
261
  AbilityLevelField.name = "AbilityLevelField"
260
262
  __TS__ClassExtends(AbilityLevelField, ObjectLevelField)
261
263
  function AbilityLevelField.prototype.getLevelCount(self, entry)
262
- return __TS__InstanceOf(entry, Ability) and #entry.levels or entry.levelCount
264
+ return entry.levelCount
263
265
  end
264
266
  function AbilityLevelField.prototype.getObjectDataEntryId(self, instance)
265
267
  return instance.typeId
@@ -431,6 +433,54 @@ ____exports.AbilityUnitTypeIdLevelField = __TS__Class()
431
433
  local AbilityUnitTypeIdLevelField = ____exports.AbilityUnitTypeIdLevelField
432
434
  AbilityUnitTypeIdLevelField.name = "AbilityUnitTypeIdLevelField"
433
435
  __TS__ClassExtends(AbilityUnitTypeIdLevelField, ____exports.AbilityObjectDataEntryIdLevelField)
436
+ ____exports.AbilityEnumLevelField = __TS__Class()
437
+ local AbilityEnumLevelField = ____exports.AbilityEnumLevelField
438
+ AbilityEnumLevelField.name = "AbilityEnumLevelField"
439
+ __TS__ClassExtends(AbilityEnumLevelField, ____exports.AbilityLevelField)
440
+ function AbilityEnumLevelField.prototype.getNativeFieldById(self, id)
441
+ return convertAbilityIntegerLevelField(id)
442
+ end
443
+ function AbilityEnumLevelField.prototype.getNativeFieldValue(self, instance, level)
444
+ local value = instance:getField(self.nativeField, level)
445
+ if self.values:contains(value) then
446
+ return value
447
+ end
448
+ return self.values:first()
449
+ end
450
+ function AbilityEnumLevelField.prototype.setNativeFieldValue(self, instance, level, value)
451
+ return instance:setField(self.nativeField, level, value)
452
+ end
453
+ __TS__SetDescriptor(
454
+ AbilityEnumLevelField.prototype,
455
+ "defaultValue",
456
+ {get = function(self)
457
+ return self.values:first()
458
+ end},
459
+ true
460
+ )
461
+ __TS__ObjectDefineProperty(
462
+ AbilityEnumLevelField,
463
+ "valueChangeEvent",
464
+ {get = function(self)
465
+ return self:getOrCreateValueChangeEvent()
466
+ end}
467
+ )
468
+ ____exports.AbilityBuffPolarityLevelField = __TS__Class()
469
+ local AbilityBuffPolarityLevelField = ____exports.AbilityBuffPolarityLevelField
470
+ AbilityBuffPolarityLevelField.name = "AbilityBuffPolarityLevelField"
471
+ __TS__ClassExtends(AbilityBuffPolarityLevelField, ____exports.AbilityEnumLevelField)
472
+ function AbilityBuffPolarityLevelField.prototype.____constructor(self, ...)
473
+ AbilityBuffPolarityLevelField.____super.prototype.____constructor(self, ...)
474
+ self.values = nonEmptyLinkedSetOf(0, 1, 2)
475
+ end
476
+ ____exports.AbilityBuffResistanceTypeLevelField = __TS__Class()
477
+ local AbilityBuffResistanceTypeLevelField = ____exports.AbilityBuffResistanceTypeLevelField
478
+ AbilityBuffResistanceTypeLevelField.name = "AbilityBuffResistanceTypeLevelField"
479
+ __TS__ClassExtends(AbilityBuffResistanceTypeLevelField, ____exports.AbilityEnumLevelField)
480
+ function AbilityBuffResistanceTypeLevelField.prototype.____constructor(self, ...)
481
+ AbilityBuffResistanceTypeLevelField.____super.prototype.____constructor(self, ...)
482
+ self.values = nonEmptyLinkedSetOf(1, 2, 3)
483
+ end
434
484
  local allowedTargetCombatClassificationsByLevelByAbilityTypeId = postcompile(function()
435
485
  local allowedTargetCombatClassificationsByLevelByAbilityTypeId = {}
436
486
  for ____, abilityType in ipairs(AbilityType:getAll()) do
package/engine/unit.d.ts CHANGED
@@ -4,6 +4,7 @@ import "./internal/unit/ability";
4
4
  import "./internal/unit/allowed-targets";
5
5
  import "./internal/unit/buff";
6
6
  import "./internal/unit/expiration-timer";
7
+ import "./internal/unit/item";
7
8
  import "./internal/unit+ability";
8
9
  import "./internal/unit+damage";
9
10
  import "./internal/unit+rally";