warscript 0.0.1-dev.2a0c343 → 0.0.1-dev.2ad49fd

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 (150) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/frame.lua +71 -22
  4. package/core/types/player.d.ts +16 -0
  5. package/core/types/player.lua +60 -15
  6. package/core/types/playerCamera.d.ts +2 -0
  7. package/core/types/playerCamera.lua +123 -5
  8. package/core/types/sound.lua +1 -1
  9. package/core/types/tileCell.d.ts +11 -1
  10. package/core/types/tileCell.lua +97 -0
  11. package/core/types/timer.d.ts +3 -1
  12. package/core/types/timer.lua +27 -2
  13. package/decl/native.d.ts +6 -4
  14. package/destroyable.d.ts +1 -0
  15. package/destroyable.lua +9 -0
  16. package/engine/behavior.d.ts +14 -1
  17. package/engine/behavior.lua +230 -70
  18. package/engine/behaviour/ability/apply-buff.lua +5 -5
  19. package/engine/behaviour/ability/damage.d.ts +3 -0
  20. package/engine/behaviour/ability/damage.lua +8 -2
  21. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  22. package/engine/behaviour/ability/emulate-impact.lua +11 -3
  23. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  24. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  25. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  26. package/engine/behaviour/ability/restore-mana.lua +6 -6
  27. package/engine/behaviour/ability.d.ts +11 -6
  28. package/engine/behaviour/ability.lua +38 -17
  29. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  30. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  31. package/engine/behaviour/unit.d.ts +39 -3
  32. package/engine/behaviour/unit.lua +269 -6
  33. package/engine/buff.d.ts +67 -22
  34. package/engine/buff.lua +371 -182
  35. package/engine/internal/ability.d.ts +5 -1
  36. package/engine/internal/ability.lua +44 -11
  37. package/engine/internal/item/ability.lua +63 -11
  38. package/engine/internal/item+owner.lua +12 -6
  39. package/engine/internal/item.d.ts +16 -16
  40. package/engine/internal/item.lua +135 -49
  41. package/engine/internal/mechanics/cast-ability.lua +6 -3
  42. package/engine/internal/misc/frame-coordinates.lua +21 -0
  43. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  44. package/engine/internal/misc/get-terrain-z.lua +11 -0
  45. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  46. package/engine/internal/misc/player-local-handle.lua +5 -0
  47. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  48. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  49. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  50. package/engine/internal/object-data/health-bonus.lua +16 -0
  51. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  52. package/engine/internal/object-data/mana-bonus.lua +16 -0
  53. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  54. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  55. package/engine/internal/unit/ability.d.ts +35 -0
  56. package/engine/internal/unit/ability.lua +98 -9
  57. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  58. package/engine/internal/unit/allowed-targets.lua +9 -1
  59. package/engine/internal/unit/attributes.d.ts +17 -0
  60. package/engine/internal/unit/attributes.lua +46 -0
  61. package/engine/internal/unit/bonus.d.ts +6 -0
  62. package/engine/internal/unit/bonus.lua +33 -3
  63. package/engine/internal/unit/fly-height.d.ts +7 -0
  64. package/engine/internal/unit/fly-height.lua +20 -0
  65. package/engine/internal/unit/interrupts.d.ts +12 -0
  66. package/engine/internal/unit/interrupts.lua +28 -0
  67. package/engine/internal/unit/main-selected.lua +12 -27
  68. package/engine/internal/unit/order.d.ts +20 -0
  69. package/engine/internal/unit/order.lua +136 -0
  70. package/engine/internal/unit/range-event.d.ts +12 -0
  71. package/engine/internal/unit/range-event.lua +90 -0
  72. package/engine/internal/unit/scale.d.ts +7 -0
  73. package/engine/internal/unit/scale.lua +20 -0
  74. package/engine/internal/unit+ability.lua +10 -1
  75. package/engine/internal/unit+bonus.lua +3 -3
  76. package/engine/internal/unit-missile-launch.lua +52 -14
  77. package/engine/internal/unit.d.ts +24 -24
  78. package/engine/internal/unit.lua +266 -237
  79. package/engine/local-client.d.ts +2 -0
  80. package/engine/local-client.lua +30 -0
  81. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  82. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  83. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  84. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  85. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  86. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  87. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  88. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  89. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  90. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  91. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  92. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  93. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  94. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  95. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  96. package/engine/object-data/entry/ability-type.d.ts +2 -0
  97. package/engine/object-data/entry/ability-type.lua +89 -8
  98. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  99. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  100. package/engine/object-data/entry/destructible-type.lua +155 -0
  101. package/engine/object-data/entry/unit-type.d.ts +15 -2
  102. package/engine/object-data/entry/unit-type.lua +135 -33
  103. package/engine/object-field/ability.d.ts +3 -3
  104. package/engine/object-field/ability.lua +9 -8
  105. package/engine/object-field/unit.d.ts +31 -5
  106. package/engine/object-field/unit.lua +95 -0
  107. package/engine/object-field.d.ts +18 -7
  108. package/engine/object-field.lua +294 -135
  109. package/engine/random.d.ts +10 -0
  110. package/engine/random.lua +21 -0
  111. package/engine/standard/fields/ability.d.ts +2 -2
  112. package/engine/standard/fields/ability.lua +2 -2
  113. package/engine/standard/fields/unit.d.ts +12 -0
  114. package/engine/standard/fields/unit.lua +20 -0
  115. package/engine/synchronization.d.ts +11 -0
  116. package/engine/synchronization.lua +77 -0
  117. package/engine/text-tag.d.ts +36 -2
  118. package/engine/text-tag.lua +250 -10
  119. package/engine/unit.d.ts +6 -0
  120. package/engine/unit.lua +6 -0
  121. package/lualib_bundle.lua +1 -1
  122. package/net/socket.lua +1 -1
  123. package/objutil/buff.lua +10 -8
  124. package/objutil/object.lua +1 -1
  125. package/operation.lua +1 -4
  126. package/package.json +5 -5
  127. package/patch-lua.lua +15 -0
  128. package/patch-lualib.lua +1 -1
  129. package/utility/arrays.d.ts +1 -0
  130. package/utility/arrays.lua +8 -0
  131. package/utility/callback-array.d.ts +17 -0
  132. package/utility/callback-array.lua +61 -0
  133. package/utility/functions.d.ts +7 -0
  134. package/utility/functions.lua +12 -0
  135. package/utility/linked-map.d.ts +34 -0
  136. package/utility/linked-map.lua +101 -0
  137. package/utility/linked-set.d.ts +3 -1
  138. package/utility/linked-set.lua +40 -1
  139. package/utility/lua-maps.d.ts +12 -2
  140. package/utility/lua-maps.lua +37 -2
  141. package/utility/lua-sets.d.ts +1 -0
  142. package/utility/lua-sets.lua +4 -0
  143. package/utility/records.lua +20 -1
  144. package/utility/types.d.ts +3 -0
  145. package/core/types/order.d.ts +0 -25
  146. package/core/types/order.lua +0 -55
  147. /package/engine/internal/{object-data/armor-increase.d.ts → misc/frame-coordinates.d.ts} +0 -0
  148. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  149. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  150. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -0,0 +1,20 @@
1
+ /** @noSelfInFile */
2
+ import { Widget } from "../../../core/types/widget";
3
+ export declare const enum OrderType {
4
+ IMMEDIATE = 0,
5
+ POINT = 1,
6
+ TARGET = 2
7
+ }
8
+ declare module "../unit" {
9
+ interface Unit {
10
+ readonly currentOrderType: OrderType;
11
+ readonly currentOrderId: number;
12
+ readonly currentOrderStartTime: number;
13
+ readonly currentOrderStartX: number;
14
+ readonly currentOrderStartY: number;
15
+ readonly currentOrderTargetX: number;
16
+ readonly currentOrderTargetY: number;
17
+ readonly currentOrderTarget?: Widget;
18
+ issueOrder(...order: [orderType: OrderType.IMMEDIATE, orderId: number] | [orderType: OrderType.POINT, orderId: number, x: number, y: number] | [orderType: OrderType.TARGET, orderId: number, target: Widget]): boolean;
19
+ }
20
+ }
@@ -0,0 +1,136 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
3
+ local ____exports = {}
4
+ local ____attributes = require("attributes")
5
+ local attribute = ____attributes.attribute
6
+ local ____unit = require("engine.internal.unit")
7
+ local Unit = ____unit.Unit
8
+ local ____game = require("core.game")
9
+ local elapsedTime = ____game.elapsedTime
10
+ local getUnitCurrentOrder = GetUnitCurrentOrder
11
+ local issueImmediateOrderById = IssueImmediateOrderById
12
+ local issuePointOrderById = IssuePointOrderById
13
+ local issueTargetOrderById = IssueTargetOrderById
14
+ local unitLastOrderTypeAttribute = attribute()
15
+ local unitLastOrderIdAttribute = attribute()
16
+ local unitLastOrderStartTimeAttribute = attribute()
17
+ local unitLastOrderStartXAttribute = attribute()
18
+ local unitLastOrderStartYAttribute = attribute()
19
+ local unitLastOrderTargetXAttribute = attribute()
20
+ local unitLastOrderTargetYAttribute = attribute()
21
+ local unitLastOrderTargetAttribute = attribute()
22
+ Unit.onImmediateOrder:addListener(
23
+ 4,
24
+ function(unit, orderId)
25
+ unit[unitLastOrderTypeAttribute] = 0
26
+ unit[unitLastOrderIdAttribute] = orderId
27
+ unit[unitLastOrderStartTimeAttribute] = elapsedTime()
28
+ unit[unitLastOrderStartXAttribute] = unit.x
29
+ unit[unitLastOrderStartYAttribute] = unit.y
30
+ unit[unitLastOrderTargetXAttribute] = nil
31
+ unit[unitLastOrderTargetYAttribute] = nil
32
+ unit[unitLastOrderTargetAttribute] = nil
33
+ end
34
+ )
35
+ Unit.onPointOrder:addListener(
36
+ 4,
37
+ function(unit, orderId, x, y)
38
+ unit[unitLastOrderTypeAttribute] = 1
39
+ unit[unitLastOrderIdAttribute] = orderId
40
+ unit[unitLastOrderStartTimeAttribute] = elapsedTime()
41
+ unit[unitLastOrderStartXAttribute] = unit.x
42
+ unit[unitLastOrderStartYAttribute] = unit.y
43
+ unit[unitLastOrderTargetXAttribute] = x
44
+ unit[unitLastOrderTargetYAttribute] = y
45
+ unit[unitLastOrderTargetAttribute] = nil
46
+ end
47
+ )
48
+ Unit.onTargetOrder:addListener(
49
+ 4,
50
+ function(unit, orderId, target)
51
+ unit[unitLastOrderTypeAttribute] = 2
52
+ unit[unitLastOrderIdAttribute] = orderId
53
+ unit[unitLastOrderStartTimeAttribute] = elapsedTime()
54
+ unit[unitLastOrderStartXAttribute] = unit.x
55
+ unit[unitLastOrderStartYAttribute] = unit.y
56
+ unit[unitLastOrderTargetXAttribute] = target.x
57
+ unit[unitLastOrderTargetYAttribute] = target.y
58
+ unit[unitLastOrderTargetAttribute] = target
59
+ end
60
+ )
61
+ local function toUndefinedIfCurrentOrderDoesNotMatchLast(unit, value)
62
+ local currentOrderId = getUnitCurrentOrder(unit.handle)
63
+ local lastOrderId = unit[unitLastOrderIdAttribute]
64
+ local ____temp_0
65
+ if currentOrderId == lastOrderId or currentOrderId == orderId("patrolAI") and lastOrderId == orderId("patrol") then
66
+ ____temp_0 = value
67
+ else
68
+ ____temp_0 = nil
69
+ end
70
+ return ____temp_0
71
+ end
72
+ __TS__ObjectDefineProperty(
73
+ Unit.prototype,
74
+ "currentOrderType",
75
+ {get = function(self)
76
+ return toUndefinedIfCurrentOrderDoesNotMatchLast(self, self[unitLastOrderTypeAttribute]) or 0
77
+ end}
78
+ )
79
+ __TS__ObjectDefineProperty(
80
+ Unit.prototype,
81
+ "currentOrderId",
82
+ {get = function(self)
83
+ return toUndefinedIfCurrentOrderDoesNotMatchLast(self, self[unitLastOrderIdAttribute]) or 0
84
+ end}
85
+ )
86
+ __TS__ObjectDefineProperty(
87
+ Unit.prototype,
88
+ "currentOrderStartTime",
89
+ {get = function(self)
90
+ return toUndefinedIfCurrentOrderDoesNotMatchLast(self, self[unitLastOrderStartTimeAttribute]) or 0
91
+ end}
92
+ )
93
+ __TS__ObjectDefineProperty(
94
+ Unit.prototype,
95
+ "currentOrderStartX",
96
+ {get = function(self)
97
+ return toUndefinedIfCurrentOrderDoesNotMatchLast(self, self[unitLastOrderStartXAttribute]) or 0
98
+ end}
99
+ )
100
+ __TS__ObjectDefineProperty(
101
+ Unit.prototype,
102
+ "currentOrderStartY",
103
+ {get = function(self)
104
+ return toUndefinedIfCurrentOrderDoesNotMatchLast(self, self[unitLastOrderStartYAttribute]) or 0
105
+ end}
106
+ )
107
+ __TS__ObjectDefineProperty(
108
+ Unit.prototype,
109
+ "currentOrderTargetX",
110
+ {get = function(self)
111
+ return toUndefinedIfCurrentOrderDoesNotMatchLast(self, self[unitLastOrderTargetXAttribute]) or 0
112
+ end}
113
+ )
114
+ __TS__ObjectDefineProperty(
115
+ Unit.prototype,
116
+ "currentOrderTargetY",
117
+ {get = function(self)
118
+ return toUndefinedIfCurrentOrderDoesNotMatchLast(self, self[unitLastOrderTargetYAttribute]) or 0
119
+ end}
120
+ )
121
+ __TS__ObjectDefineProperty(
122
+ Unit.prototype,
123
+ "currentOrderTarget",
124
+ {get = function(self)
125
+ return toUndefinedIfCurrentOrderDoesNotMatchLast(self, self[unitLastOrderTargetAttribute])
126
+ end}
127
+ )
128
+ local issueOrderByType = {
129
+ [0] = issueImmediateOrderById,
130
+ [1] = issuePointOrderById,
131
+ [2] = function(unitHandle, orderId, widget) return issueTargetOrderById(unitHandle, orderId, widget.handle) end
132
+ }
133
+ Unit.prototype.issueOrder = function(self, orderType, orderId, xOrTarget, y)
134
+ return issueOrderByType[orderType](self.handle, orderId, xOrTarget, y)
135
+ end
136
+ return ____exports
@@ -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
@@ -0,0 +1,7 @@
1
+ /** @noSelfInFile */
2
+ declare module "../unit" {
3
+ interface Unit {
4
+ scale: number;
5
+ }
6
+ }
7
+ export {};
@@ -0,0 +1,20 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
3
+ local ____exports = {}
4
+ local ____unit = require("engine.internal.unit")
5
+ local Unit = ____unit.Unit
6
+ local ____unit = require("engine.standard.fields.unit")
7
+ local SCALING_VALUE_UNIT_FIELD = ____unit.SCALING_VALUE_UNIT_FIELD
8
+ __TS__ObjectDefineProperty(
9
+ Unit.prototype,
10
+ "scale",
11
+ {
12
+ get = function(self)
13
+ return SCALING_VALUE_UNIT_FIELD:getValue(self)
14
+ end,
15
+ set = function(self, value)
16
+ SCALING_VALUE_UNIT_FIELD:setValue(self, value)
17
+ end
18
+ }
19
+ )
20
+ return ____exports
@@ -7,8 +7,8 @@ local UnitAbility = ____ability.UnitAbility
7
7
  local ____unit = require("engine.internal.unit")
8
8
  local Unit = ____unit.Unit
9
9
  local ____event = require("event")
10
- local Event = ____event.Event
11
10
  local createDispatchingEvent = ____event.createDispatchingEvent
11
+ local Event = ____event.Event
12
12
  local abilityGainedEvent = createDispatchingEvent(
13
13
  __TS__New(Event),
14
14
  function(unit, ability) return ability.typeId end
@@ -40,6 +40,15 @@ ItemAbility.onCreate:addListener(
40
40
  end
41
41
  end
42
42
  )
43
+ ItemAbility.destroyEvent:addListener(
44
+ 4,
45
+ function(ability)
46
+ local unit = ability.owner.owner
47
+ if unit ~= nil then
48
+ Event.invoke(abilityLostEvent, unit, ability)
49
+ end
50
+ end
51
+ )
43
52
  Unit.itemPickedUpEvent:addListener(
44
53
  0,
45
54
  function(unit, item)
@@ -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
@@ -9,9 +9,18 @@ local ____timer = require("core.types.timer")
9
9
  local Timer = ____timer.Timer
10
10
  local ____lua_2Dsets = require("utility.lua-sets")
11
11
  local luaSetOf = ____lua_2Dsets.luaSetOf
12
+ local ____attributes = require("attributes")
13
+ local attribute = ____attributes.attribute
14
+ local ____linked_2Dset = require("utility.linked-set")
15
+ local LinkedSet = ____linked_2Dset.LinkedSet
16
+ local ____math = require("math")
17
+ local ceil = ____math.ceil
12
18
  local autoAttackFinishEvent = __TS__New(Event)
13
19
  rawset(Unit, "autoAttackFinishEvent", autoAttackFinishEvent)
14
- local eventTimerByUnit = {}
20
+ local units = __TS__New(LinkedSet)
21
+ local targetAttribute = attribute()
22
+ local impactDelayAttribute = attribute()
23
+ local passedTimeAttribute = attribute()
15
24
  local instantOrderIds = luaSetOf(
16
25
  orderId("avatar"),
17
26
  orderId("berserk"),
@@ -27,25 +36,54 @@ local instantOrderIds = luaSetOf(
27
36
  orderId("undivineshield"),
28
37
  orderId("unimmolation")
29
38
  )
30
- local function reset(source, orderId)
39
+ ---
40
+ -- @internal For use by internal systems only.
41
+ ____exports.resetAutoAttackTimer = function(unit)
42
+ if units:remove(unit) then
43
+ unit[targetAttribute] = nil
44
+ unit[impactDelayAttribute] = nil
45
+ unit[passedTimeAttribute] = nil
46
+ end
47
+ end
48
+ local function reset(unit, orderId)
31
49
  if not (instantOrderIds[orderId] ~= nil) then
32
- local eventTimer = eventTimerByUnit[source]
33
- if eventTimer then
34
- eventTimer:destroy()
35
- eventTimerByUnit[source] = nil
36
- end
50
+ ____exports.resetAutoAttackTimer(unit)
37
51
  end
38
52
  end
39
53
  Unit.onImmediateOrder:addListener(reset)
40
54
  Unit.onPointOrder:addListener(reset)
41
55
  Unit.onTargetOrder:addListener(reset)
42
- local function timerCallback(source, target)
43
- eventTimerByUnit[source] = nil
44
- Event.invoke(autoAttackFinishEvent, source, target)
56
+ local timerPeriod = 1 / 64
57
+ local function invokeEvent(unit)
58
+ units:remove(unit)
59
+ local target = unit[targetAttribute]
60
+ unit[targetAttribute] = nil
61
+ unit[impactDelayAttribute] = nil
62
+ unit[passedTimeAttribute] = nil
63
+ Event.invoke(autoAttackFinishEvent, unit, target)
64
+ end
65
+ local function checkUnit(unit)
66
+ local passedTime = unit[passedTimeAttribute] + timerPeriod
67
+ local impactDelay = unit[impactDelayAttribute]
68
+ if passedTime >= impactDelay and ceil(passedTime / 0.02) >= ceil(impactDelay / 0.02) then
69
+ invokeEvent(unit)
70
+ else
71
+ unit[passedTimeAttribute] = passedTime
72
+ end
45
73
  end
46
- Unit.autoAttackStartEvent:addListener(function(source, target)
47
- local attackPoint = source.weapons[1].impactDelay
48
- local timer = Timer:simple(attackPoint, timerCallback, source, target)
49
- eventTimerByUnit[source] = timer
74
+ Timer.onPeriod[timerPeriod]:addListener(function()
75
+ units:forEach(checkUnit)
50
76
  end)
77
+ Unit.autoAttackStartEvent:addListener(
78
+ 999999,
79
+ function(source, target)
80
+ if source[targetAttribute] ~= nil then
81
+ invokeEvent(source)
82
+ end
83
+ source[targetAttribute] = target
84
+ source[impactDelayAttribute] = (source:chooseWeapon(target) or source.firstWeapon).impactDelay
85
+ source[passedTimeAttribute] = -timerPeriod
86
+ units:add(source)
87
+ end
88
+ )
51
89
  return ____exports
@@ -80,10 +80,14 @@ export declare class UnitWeapon {
80
80
  readonly unit: Unit;
81
81
  readonly index: 0 | 1;
82
82
  constructor(unit: Unit, index: 0 | 1);
83
+ get isEnabled(): boolean;
84
+ set isEnabled(isEnabled: boolean);
83
85
  get cooldown(): number;
84
86
  set cooldown(cooldown: number);
85
87
  get damage(): [minimumDamage: number, maximumDamage: number];
86
88
  set damage([minimumDamage, maximumDamage]: [number, number]);
89
+ get allowedTargetCombatClassifications(): CombatClassifications;
90
+ set allowedTargetCombatClassifications(allowedTargetCombatClassifications: CombatClassifications);
87
91
  get damageBase(): number;
88
92
  set damageBase(damageBase: number);
89
93
  get damageDiceCount(): number;
@@ -105,12 +109,13 @@ declare const enum UnitPropertyKey {
105
109
  SYNC_ID = 100,
106
110
  IS_PAUSED = 101,
107
111
  STUN_COUNTER = 102,
108
- DELAY_HEALTH_CHECKS_COUNTER = 103,
109
- DELAY_HEALTH_CHECKS_HEALTH_BONUS = 104,
110
- PREVENT_DEATH_HEALTH_BONUS = 105,
111
- IS_TEAM_GLOW_HIDDEN = 106,
112
- LAST_X = 107,
113
- LAST_Y = 108
112
+ FORCE_STUN_COUNTER = 103,
113
+ DELAY_HEALTH_CHECKS_COUNTER = 104,
114
+ DELAY_HEALTH_CHECKS_HEALTH_BONUS = 105,
115
+ PREVENT_DEATH_HEALTH_BONUS = 106,
116
+ IS_TEAM_GLOW_HIDDEN = 107,
117
+ LAST_X = 108,
118
+ LAST_Y = 109
114
119
  }
115
120
  export type UnitSyncId = number & {
116
121
  readonly __unitSyncId: unique symbol;
@@ -119,6 +124,7 @@ export declare class Unit extends Handle<junit> {
119
124
  readonly syncId: UnitSyncId;
120
125
  private [UnitPropertyKey.IS_PAUSED]?;
121
126
  private [UnitPropertyKey.STUN_COUNTER]?;
127
+ private [UnitPropertyKey.FORCE_STUN_COUNTER]?;
122
128
  private [UnitPropertyKey.DELAY_HEALTH_CHECKS_COUNTER]?;
123
129
  private [UnitPropertyKey.DELAY_HEALTH_CHECKS_HEALTH_BONUS]?;
124
130
  private [UnitPropertyKey.PREVENT_DEATH_HEALTH_BONUS]?;
@@ -133,6 +139,7 @@ export declare class Unit extends Handle<junit> {
133
139
  private _fields?;
134
140
  private getEvent;
135
141
  constructor(handle: junit);
142
+ private saveData;
136
143
  protected onDestroy(): HandleDestructor;
137
144
  addAttackHandler(condition: AttackHandlerCondition, action: AttackHandlerAction): AttackHandler;
138
145
  removeAttackHandler(handler: AttackHandler): boolean;
@@ -158,29 +165,23 @@ export declare class Unit extends Handle<junit> {
158
165
  isInRangeOf(unit: Unit, range: number): boolean;
159
166
  isAllyOf(unit: Unit): boolean;
160
167
  isEnemyOf(unit: Unit): boolean;
161
- playAnimation(animation: string, rarity?: jraritycontrol): void;
162
- playAnimation(animation: number): void;
168
+ playAnimation(...parameters: [animation: number] | [animation: string, rarity?: jraritycontrol]): void;
163
169
  resetAnimation(): void;
164
170
  queueAnimation(animation: string): void;
165
171
  get weapons(): [UnitWeapon, UnitWeapon];
166
172
  get firstWeapon(): UnitWeapon;
167
173
  get secondWeapon(): UnitWeapon;
174
+ chooseWeapon(target: Unit): UnitWeapon | undefined;
168
175
  get level(): number;
169
176
  set level(v: number);
170
177
  get xp(): number;
171
178
  set xp(v: number);
172
179
  get primaryAttribute(): UnitAttribute;
173
180
  set primaryAttribute(primaryAttribute: UnitAttribute);
174
- get strengthBase(): number;
175
- set strengthBase(strengthBase: number);
176
181
  get strengthBonus(): number;
177
182
  get strength(): number;
178
- get agilityBase(): number;
179
- set agilityBase(agilityBase: number);
180
183
  get agilityBonus(): number;
181
184
  get agility(): number;
182
- get intelligenceBase(): number;
183
- set intelligenceBase(intelligenceBase: number);
184
185
  get intelligenceBonus(): number;
185
186
  get intelligence(): number;
186
187
  get name(): string;
@@ -214,8 +215,6 @@ export declare class Unit extends Handle<junit> {
214
215
  set facing(v: number);
215
216
  get speed(): number;
216
217
  set speed(v: number);
217
- get flyHeight(): number;
218
- set flyHeight(v: number);
219
218
  get x(): number;
220
219
  set x(v: number);
221
220
  get y(): number;
@@ -239,8 +238,6 @@ export declare class Unit extends Handle<junit> {
239
238
  get isInvulnerable(): boolean;
240
239
  get vertexColor(): Color;
241
240
  set vertexColor(v: Color);
242
- get scale(): number;
243
- set scale(v: number);
244
241
  get timeScale(): number;
245
242
  set timeScale(v: number);
246
243
  get collisionSize(): number;
@@ -264,18 +261,17 @@ export declare class Unit extends Handle<junit> {
264
261
  dropItemTarget(item: Item, target: Widget): boolean;
265
262
  dropItemSlot(item: Item, slot: number): boolean;
266
263
  itemInSlot(slot: number): Item | null;
267
- addAbility(abilityId: number): UnitAbility | null;
264
+ addAbility(abilityId: number): UnitAbility | undefined;
268
265
  makeAbilityPermanent(abilityId: number, permanent: true): boolean;
269
266
  setAbilityLevel(abilityId: number, level: number): number;
270
267
  getAbilityLevel(abilityId: number): number;
271
268
  hasAbility(abilityId: number): boolean;
272
- getAbilityById(abilityId: number): UnitAbility | undefined;
273
- removeAbility(abilityId: number): boolean;
269
+ getAbility(abilityId: number): UnitAbility | undefined;
270
+ removeAbility(abilityTypeId: number): boolean;
274
271
  hideAbility(abilityId: number, flag: boolean): void;
275
272
  getAbilityRemainingCooldown(abilityId: number): number;
276
273
  startAbilityCooldown(abilityId: number, cooldown: number): void;
277
274
  endAbilityCooldown(abilityId: number): void;
278
- interruptAttack(): void;
279
275
  interruptCast(abilityId: number): void;
280
276
  getDistanceTo(target: Unit | Vec2): number;
281
277
  getCollisionDistanceTo(...target: [Unit] | [targetX: number, targetY: number]): number;
@@ -289,12 +285,13 @@ export declare class Unit extends Handle<junit> {
289
285
  unpauseEx(): void;
290
286
  incrementStunCounter(): void;
291
287
  decrementStunCounter(): void;
288
+ incrementForceStunCounter(): void;
289
+ decrementForceStunCounter(): void;
292
290
  set waygateActive(v: boolean);
293
291
  get waygateActive(): boolean;
294
292
  set waygateDestination(v: Vec2);
295
293
  get waygateDestination(): Vec2;
296
294
  get abilities(): ReadonlyArray<UnitAbility>;
297
- get onUnitInRange(): Record<number, Event<[Unit]>>;
298
295
  get onManaEqual(): Record<number, Event<[Unit, number]>>;
299
296
  get manaEvent(): Record<Operator, Record<number, Event<[Unit]>>>;
300
297
  get targetAcquiredEvent(): Event;
@@ -313,6 +310,7 @@ export declare class Unit extends Handle<junit> {
313
310
  static getInCollisionRange(x: number, y: number, range: number, predicate?: (unit: Unit) => boolean): Unit[];
314
311
  static getInSector(pos: Vec2, range: number, offsetAngle: number, centralAngle: number): Unit[];
315
312
  static getSelectionOf(player: Player, target?: Unit[]): Unit[];
313
+ static readonly levelChangedEvent: UnitTriggerEvent<[]>;
316
314
  static readonly deathEvent: UnitTriggerEvent<[Unit]>;
317
315
  static readonly onDecay: UnitTriggerEvent<[]>;
318
316
  static readonly onResurrect: InitializingEvent<[Unit], void>;
@@ -350,7 +348,8 @@ export declare class Unit extends Handle<junit> {
350
348
  static itemDroppedEvent: UnitTriggerEvent<[Item]>;
351
349
  static itemPickedUpEvent: UnitTriggerEvent<[Item]>;
352
350
  static itemUsedEvent: UnitTriggerEvent<[Item]>;
353
- static itemStackedEvent: UnitTriggerEvent<[Item]>;
351
+ static itemStackedEvent: UnitTriggerEvent<[target: Item, source: Item]>;
352
+ static get itemChargesChangedEvent(): Event<[unit: Unit, item: Item]>;
354
353
  static get itemUseOrderEvent(): Event<[unit: Unit, item: Item]>;
355
354
  static get itemMoveOrderEvent(): Event<[
356
355
  unit: Unit,
@@ -369,5 +368,6 @@ export declare class Unit extends Handle<junit> {
369
368
  setField(field: junitstringfield, value: string): boolean;
370
369
  toString(): string;
371
370
  static getBySyncId(syncId: UnitSyncId): Unit | undefined;
371
+ static synchronize: (player: Player, object: Unit | undefined) => Promise<Unit | undefined>;
372
372
  }
373
373
  export {};