warscript 0.0.1-dev.d30161d → 0.0.1-dev.d63794c

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 (72) hide show
  1. package/core/types/effect.d.ts +13 -3
  2. package/core/types/effect.lua +116 -17
  3. package/core/types/frame.d.ts +6 -0
  4. package/core/types/frame.lua +91 -1
  5. package/core/util.d.ts +1 -1
  6. package/core/util.lua +12 -0
  7. package/engine/behavior.d.ts +2 -2
  8. package/engine/behavior.lua +6 -6
  9. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  10. package/engine/behaviour/ability/always-enabled.lua +31 -0
  11. package/engine/behaviour/ability/apply-buff.d.ts +3 -5
  12. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  13. package/engine/behaviour/ability/emulate-impact.lua +29 -0
  14. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  15. package/engine/behaviour/ability/instant-impact.lua +4 -19
  16. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  17. package/engine/behaviour/ability/on-command-impact.lua +18 -0
  18. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  19. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  20. package/engine/behaviour/ability.d.ts +9 -2
  21. package/engine/behaviour/ability.lua +47 -33
  22. package/engine/behaviour/unit.d.ts +5 -0
  23. package/engine/behaviour/unit.lua +20 -0
  24. package/engine/buff.d.ts +38 -12
  25. package/engine/buff.lua +171 -79
  26. package/engine/internal/ability.d.ts +16 -13
  27. package/engine/internal/ability.lua +87 -76
  28. package/engine/internal/item/ability.lua +32 -0
  29. package/engine/internal/item+owner.lua +2 -2
  30. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  31. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  32. package/engine/internal/unit/ability.d.ts +10 -1
  33. package/engine/internal/unit/ability.lua +36 -14
  34. package/engine/internal/unit/bonus.d.ts +4 -2
  35. package/engine/internal/unit/bonus.lua +6 -1
  36. package/engine/internal/unit/item.d.ts +24 -0
  37. package/engine/internal/unit/item.lua +79 -0
  38. package/engine/internal/unit/main-selected.d.ts +13 -0
  39. package/engine/internal/unit/main-selected.lua +51 -0
  40. package/engine/internal/unit+ability.lua +2 -2
  41. package/engine/internal/unit-missile-launch.lua +24 -5
  42. package/engine/internal/unit.d.ts +25 -10
  43. package/engine/internal/unit.lua +123 -71
  44. package/engine/internal/utility.lua +12 -0
  45. package/engine/local-client.d.ts +7 -2
  46. package/engine/local-client.lua +82 -0
  47. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  48. package/engine/object-data/entry/item-type.d.ts +12 -0
  49. package/engine/object-data/entry/item-type.lua +78 -0
  50. package/engine/object-field/ability.d.ts +21 -1
  51. package/engine/object-field/ability.lua +51 -1
  52. package/engine/standard/fields/ability.d.ts +2 -0
  53. package/engine/standard/fields/ability.lua +2 -0
  54. package/engine/unit.d.ts +2 -0
  55. package/engine/unit.lua +2 -0
  56. package/index.d.ts +1 -0
  57. package/index.lua +1 -0
  58. package/net/socket.d.ts +7 -1
  59. package/net/socket.lua +45 -4
  60. package/network.d.ts +1 -0
  61. package/network.lua +3 -2
  62. package/objutil/buff.lua +1 -1
  63. package/package.json +2 -2
  64. package/patch-lua.d.ts +0 -0
  65. package/patch-lua.lua +10 -0
  66. package/utility/arrays.d.ts +8 -1
  67. package/utility/arrays.lua +34 -3
  68. package/utility/lazy.d.ts +2 -0
  69. package/utility/lazy.lua +14 -0
  70. package/utility/linked-set.d.ts +11 -2
  71. package/utility/linked-set.lua +5 -2
  72. package/utility/types.d.ts +1 -0
@@ -2,7 +2,6 @@ local ____lualib = require("lualib_bundle")
2
2
  local __TS__ArrayMap = ____lualib.__TS__ArrayMap
3
3
  local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
4
4
  local __TS__Class = ____lualib.__TS__Class
5
- local __TS__New = ____lualib.__TS__New
6
5
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
7
6
  local __TS__InstanceOf = ____lualib.__TS__InstanceOf
8
7
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
@@ -11,7 +10,9 @@ local ____exports = {}
11
10
  local ____handle = require("core.types.handle")
12
11
  local Handle = ____handle.Handle
13
12
  local ____ability = require("engine.internal.item.ability")
13
+ local abilityActionDummy = ____ability.abilityActionDummy
14
14
  local doAbilityAction = ____ability.doAbilityAction
15
+ local doAbilityActionForceDummy = ____ability.doAbilityActionForceDummy
15
16
  local getUnitAbilityLevel = GetUnitAbilityLevel
16
17
  local setUnitAbilityLevel = SetUnitAbilityLevel
17
18
  local setAbilityIntegerField = BlzSetAbilityIntegerField
@@ -33,7 +34,7 @@ local getAbilityStringLevelField = BlzGetAbilityStringLevelField
33
34
  local getUnitAbilityCooldownRemaining = BlzGetUnitAbilityCooldownRemaining
34
35
  local startUnitAbilityCooldown = BlzStartUnitAbilityCooldown
35
36
  local getHandleId = GetHandleId
36
- local getItemAbility = BlzGetItemAbility
37
+ local unitHideAbility = BlzUnitHideAbility
37
38
  local match = string.match
38
39
  local ____type = _G.type
39
40
  local ____tostring = _G.tostring
@@ -151,55 +152,6 @@ local orders = postcompile(function()
151
152
  end
152
153
  return orders
153
154
  end)
154
- local RealFields = __TS__Class()
155
- RealFields.name = "RealFields"
156
- function RealFields.prototype.____constructor(self, handle)
157
- self.handle = handle
158
- end
159
- function RealFields.prototype.set(self, field, value)
160
- return BlzSetAbilityRealField(self.handle, field, value)
161
- end
162
- function RealFields.prototype.get(self, field)
163
- return BlzGetAbilityRealField(self.handle, field)
164
- end
165
- function RealFields.prototype.has(self, field)
166
- local handle = self.handle
167
- return BlzSetAbilityRealField(
168
- handle,
169
- field,
170
- BlzGetAbilityRealField(handle, field)
171
- )
172
- end
173
- local RealLevelFields = __TS__Class()
174
- RealLevelFields.name = "RealLevelFields"
175
- function RealLevelFields.prototype.____constructor(self, handle, level)
176
- self.handle = handle
177
- self.level = level
178
- end
179
- function RealLevelFields.prototype.set(self, field, value)
180
- return BlzSetAbilityRealLevelField(self.handle, field, self.level, value)
181
- end
182
- function RealLevelFields.prototype.get(self, field)
183
- return BlzGetAbilityRealLevelField(self.handle, field, self.level)
184
- end
185
- function RealLevelFields.prototype.has(self, field)
186
- local handle = self.handle
187
- return BlzSetAbilityRealLevelField(
188
- handle,
189
- field,
190
- 0,
191
- BlzGetAbilityRealLevelField(handle, field, 0)
192
- )
193
- end
194
- local realLevelMetatable = {__index = self}
195
- local levelDescriptors = {realFields = function(self, handle, level)
196
- return __TS__New(RealLevelFields, handle, level)
197
- end}
198
- local levelMetatable = {__index = function(self, key)
199
- local fields = levelDescriptors[key](levelDescriptors, self.handle, self.level)
200
- rawset(self, key, fields)
201
- return fields
202
- end}
203
155
  local fieldGetters = {
204
156
  abilityintegerfield = function(ability, field)
205
157
  return getAbilityIntegerField(ability.handle, field)
@@ -346,43 +298,26 @@ __TS__SetDescriptor(
346
298
  )
347
299
  __TS__SetDescriptor(
348
300
  Ability.prototype,
349
- "orderId",
301
+ "orderTypeStringId",
350
302
  {get = function(self)
351
303
  local field = orderIdFieldByParentTypeId[self.parentTypeId]
352
- return order2orderId(field ~= nil and getAbilityStringLevelField(self.handle, ABILITY_SLF_BASE_ORDER_ID_NCL6, self.level) or (orders[self.parentTypeId] or ""))
304
+ return field ~= nil and getAbilityStringLevelField(self.handle, field, self.level) or (orders[self.parentTypeId] or "")
353
305
  end},
354
306
  true
355
307
  )
356
308
  __TS__SetDescriptor(
357
309
  Ability.prototype,
358
- "realFields",
310
+ "orderTypeId",
359
311
  {get = function(self)
360
- local realFields = __TS__New(RealFields, self.handle)
361
- rawset(self, "realFields", realFields)
362
- return realFields
312
+ return order2orderId(self.orderTypeStringId)
363
313
  end},
364
314
  true
365
315
  )
366
316
  __TS__SetDescriptor(
367
317
  Ability.prototype,
368
- "levels",
318
+ "levelCount",
369
319
  {get = function(self)
370
- local handle = self.handle
371
- local levels = setmetatable(
372
- {},
373
- {
374
- __len = function(self)
375
- return BlzGetAbilityIntegerField(handle, ABILITY_IF_LEVELS)
376
- end,
377
- __index = function(self, i)
378
- local level = setmetatable({handle = handle, level = i - 1}, levelMetatable)
379
- self[i] = level
380
- return level
381
- end
382
- }
383
- )
384
- rawset(self, "levels", levels)
385
- return levels
320
+ return self:getField(ABILITY_IF_LEVELS)
386
321
  end},
387
322
  true
388
323
  )
@@ -393,6 +328,17 @@ __TS__SetDescriptor(
393
328
  end},
394
329
  true
395
330
  )
331
+ __TS__SetDescriptor(
332
+ Ability.prototype,
333
+ "cooldownRemaining",
334
+ {
335
+ get = function(self)
336
+ end,
337
+ set = function(self, cooldownRemaining)
338
+ end
339
+ },
340
+ true
341
+ )
396
342
  __TS__ObjectDefineProperty(
397
343
  Ability,
398
344
  "onCreate",
@@ -416,6 +362,8 @@ function UnrecognizedAbility.prototype.____constructor(self, typeId, owner)
416
362
  UnrecognizedAbility.____super.prototype.____constructor(self, nil, typeId)
417
363
  self.owner = owner
418
364
  end
365
+ function UnrecognizedAbility.prototype.interruptCast(self)
366
+ end
419
367
  __TS__SetDescriptor(
420
368
  UnrecognizedAbility.prototype,
421
369
  "level",
@@ -424,6 +372,18 @@ __TS__SetDescriptor(
424
372
  end},
425
373
  true
426
374
  )
375
+ __TS__SetDescriptor(
376
+ UnrecognizedAbility.prototype,
377
+ "cooldownRemaining",
378
+ {
379
+ get = function(self)
380
+ return 0
381
+ end,
382
+ set = function(self, _)
383
+ end
384
+ },
385
+ true
386
+ )
427
387
  ____exports.UnitAbility = __TS__Class()
428
388
  local UnitAbility = ____exports.UnitAbility
429
389
  UnitAbility.name = "UnitAbility"
@@ -433,6 +393,15 @@ function UnitAbility.prototype.____constructor(self, handle, typeId, owner)
433
393
  self.owner = owner
434
394
  self.u = owner.handle
435
395
  end
396
+ function UnitAbility.prototype.incrementHideCounter(self)
397
+ unitHideAbility(self.u, self.typeId, true)
398
+ end
399
+ function UnitAbility.prototype.decrementHideCounter(self)
400
+ unitHideAbility(self.u, self.typeId, false)
401
+ end
402
+ function UnitAbility.prototype.interruptCast(self)
403
+ self.owner:interruptCast(self.typeId)
404
+ end
436
405
  __TS__SetDescriptor(
437
406
  UnitAbility.prototype,
438
407
  "level",
@@ -453,8 +422,8 @@ __TS__SetDescriptor(
453
422
  get = function(self)
454
423
  return getUnitAbilityCooldownRemaining(self.u, self.typeId)
455
424
  end,
456
- set = function(self, v)
457
- startUnitAbilityCooldown(self.u, self.typeId, v)
425
+ set = function(self, cooldownRemaining)
426
+ startUnitAbilityCooldown(self.u, self.typeId, cooldownRemaining)
458
427
  end
459
428
  },
460
429
  true
@@ -479,6 +448,14 @@ end
479
448
  local function setAbilityField(_, ability, field, levelOrValue, value)
480
449
  return ____exports.Ability.prototype.setField(ability, field, levelOrValue, value)
481
450
  end
451
+ local function getAbilityCooldown(_, abilityTypeId)
452
+ return getUnitAbilityCooldownRemaining(abilityActionDummy, abilityTypeId)
453
+ end
454
+ local function startAbilityCooldown(_, abilityTypeId, cooldown)
455
+ startUnitAbilityCooldown(abilityActionDummy, abilityTypeId, cooldown)
456
+ end
457
+ local function doNothing()
458
+ end
482
459
  ____exports.ItemAbility = __TS__Class()
483
460
  local ItemAbility = ____exports.ItemAbility
484
461
  ItemAbility.name = "ItemAbility"
@@ -506,6 +483,13 @@ function ItemAbility.prototype.setField(self, field, levelOrValue, value)
506
483
  value
507
484
  )
508
485
  end
486
+ function ItemAbility.prototype.interruptCast(self)
487
+ local item = self.owner
488
+ local ____doAbilityActionForceDummy_4 = doAbilityActionForceDummy
489
+ local ____item_handle_3 = item.handle
490
+ local ____opt_1 = item.owner
491
+ ____doAbilityActionForceDummy_4(____item_handle_3, ____opt_1 and ____opt_1.handle, doNothing)
492
+ end
509
493
  __TS__SetDescriptor(
510
494
  ItemAbility.prototype,
511
495
  "level",
@@ -514,6 +498,33 @@ __TS__SetDescriptor(
514
498
  end},
515
499
  true
516
500
  )
501
+ __TS__SetDescriptor(
502
+ ItemAbility.prototype,
503
+ "cooldownRemaining",
504
+ {
505
+ get = function(self)
506
+ local item = self.owner
507
+ local ____doAbilityActionForceDummy_8 = doAbilityActionForceDummy
508
+ local ____item_handle_7 = item.handle
509
+ local ____opt_5 = item.owner
510
+ return ____doAbilityActionForceDummy_8(____item_handle_7, ____opt_5 and ____opt_5.handle, getAbilityCooldown, self.typeId)
511
+ end,
512
+ set = function(self, cooldownRemaining)
513
+ local item = self.owner
514
+ local ____doAbilityActionForceDummy_12 = doAbilityActionForceDummy
515
+ local ____item_handle_11 = item.handle
516
+ local ____opt_9 = item.owner
517
+ ____doAbilityActionForceDummy_12(
518
+ ____item_handle_11,
519
+ ____opt_9 and ____opt_9.handle,
520
+ startAbilityCooldown,
521
+ self.typeId,
522
+ cooldownRemaining
523
+ )
524
+ end
525
+ },
526
+ true
527
+ )
517
528
  __TS__ObjectDefineProperty(
518
529
  ItemAbility,
519
530
  "onCreate",
@@ -3,6 +3,8 @@ local ____player = require("core.types.player")
3
3
  local Player = ____player.Player
4
4
  local ____dummy = require("objutil.dummy")
5
5
  local dummyUnitId = ____dummy.dummyUnitId
6
+ local ____utility = require("engine.internal.utility")
7
+ local findUnitItemSlot = ____utility.findUnitItemSlot
6
8
  local isItemOwned = IsItemOwned
7
9
  local isItemPowerup = IsItemPowerup
8
10
  local getItemX = GetItemX
@@ -10,6 +12,7 @@ local getItemY = GetItemY
10
12
  local setItemBooleanField = BlzSetItemBooleanField
11
13
  local setItemPosition = SetItemPosition
12
14
  local unitAddItem = UnitAddItem
15
+ local unitDropItemSlot = UnitDropItemSlot
13
16
  local unitRemoveItem = UnitRemoveItem
14
17
  local dummy = assert(CreateUnit(
15
18
  Player.neutralVictim.handle,
@@ -21,6 +24,9 @@ local dummy = assert(CreateUnit(
21
24
  ShowUnit(dummy, false)
22
25
  ---
23
26
  -- @internal For use by internal systems only.
27
+ ____exports.abilityActionDummy = dummy
28
+ ---
29
+ -- @internal For use by internal systems only.
24
30
  ____exports.doAbilityAction = function(handle, action, ...)
25
31
  local isOwned = isItemOwned(handle)
26
32
  local isPowerup
@@ -45,4 +51,30 @@ ____exports.doAbilityAction = function(handle, action, ...)
45
51
  end
46
52
  return result
47
53
  end
54
+ ---
55
+ -- @internal For use by internal systems only.
56
+ ____exports.doAbilityActionForceDummy = function(handle, owner, action, ...)
57
+ if owner == nil then
58
+ return ____exports.doAbilityAction(handle, action, ...)
59
+ end
60
+ local slot = findUnitItemSlot(owner, handle)
61
+ if slot == nil then
62
+ return ____exports.doAbilityAction(handle, action, ...)
63
+ end
64
+ local isPowerup
65
+ if isItemPowerup(handle) then
66
+ setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, false)
67
+ isPowerup = true
68
+ end
69
+ unitRemoveItem(owner, handle)
70
+ unitAddItem(dummy, handle)
71
+ local result = action(handle, ...)
72
+ unitRemoveItem(dummy, handle)
73
+ unitAddItem(owner, handle)
74
+ unitDropItemSlot(owner, handle, slot)
75
+ if isPowerup then
76
+ setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
77
+ end
78
+ return result
79
+ end
48
80
  return ____exports
@@ -6,10 +6,10 @@ local Item = ____item.Item
6
6
  local ____unit = require("engine.internal.unit")
7
7
  local Unit = ____unit.Unit
8
8
  local ownerByItem = setmetatable({}, {__mode = "kv"})
9
- Unit.onItemPickup:addListener(function(unit, item)
9
+ Unit.itemPickedUpEvent:addListener(function(unit, item)
10
10
  ownerByItem[item] = unit
11
11
  end)
12
- Unit.onItemDrop:addListener(function(unit, item)
12
+ Unit.itemDroppedEvent:addListener(function(unit, item)
13
13
  ownerByItem[item] = nil
14
14
  end)
15
15
  __TS__ObjectDefineProperty(
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export {};
@@ -0,0 +1,13 @@
1
+ local ____exports = {}
2
+ local disableAbility = BlzUnitDisableAbility
3
+ ---
4
+ -- @internal For use by internal systems only.
5
+ ____exports.increaseAbilityDisableCounter = function(unit, abilityTypeId, times)
6
+ for _ = 1, times do
7
+ disableAbility(unit, abilityTypeId, true, false)
8
+ end
9
+ for _ = times, -1 do
10
+ disableAbility(unit, abilityTypeId, false, false)
11
+ end
12
+ end
13
+ return ____exports
@@ -3,7 +3,7 @@ import { Ability } from "../ability";
3
3
  import { Destructable } from "../../../core/types/destructable";
4
4
  import { Item } from "../item";
5
5
  import { Widget } from "../../../core/types/widget";
6
- import { DispatchingEvent } from "../../../event";
6
+ import { DispatchingEvent, Event } from "../../../event";
7
7
  declare module "../unit" {
8
8
  namespace Unit {
9
9
  const abilityCastingStartEvent: DispatchingEvent<[Unit, Ability]>;
@@ -141,3 +141,12 @@ declare module "../unit" {
141
141
  const abilityStopEvent: DispatchingEvent<[Unit, Ability]>;
142
142
  }
143
143
  }
144
+ declare module "../unit" {
145
+ namespace Unit {
146
+ const abilityCommandEvent: {
147
+ readonly [abilityTypeId: number]: {
148
+ readonly [orderTypeStringId: string]: Event<[Unit, Ability, string]>;
149
+ };
150
+ };
151
+ }
152
+ }
@@ -15,8 +15,15 @@ local UnitTriggerEvent = ____unit.UnitTriggerEvent
15
15
  local ____event = require("event")
16
16
  local createDispatchingEvent = ____event.createDispatchingEvent
17
17
  local DependentInitializingEvent = ____event.DependentInitializingEvent
18
+ local Event = ____event.Event
19
+ local InitializingEvent = ____event.InitializingEvent
18
20
  local ____preconditions = require("utility.preconditions")
19
21
  local checkNotNull = ____preconditions.checkNotNull
22
+ local ____lazy = require("utility.lazy")
23
+ local lazyRecord = ____lazy.lazyRecord
24
+ local eventInvoke = Event.invoke
25
+ local condition = Condition
26
+ local createTrigger = CreateTrigger
20
27
  local getItemAbility = BlzGetItemAbility
21
28
  local getSpellAbility = GetSpellAbility
22
29
  local getSpellAbilityId = GetSpellAbilityId
@@ -26,11 +33,10 @@ local getSpellTargetUnit = GetSpellTargetUnit
26
33
  local getSpellTargetX = GetSpellTargetX
27
34
  local getSpellTargetY = GetSpellTargetY
28
35
  local getTriggerUnit = GetTriggerUnit
29
- local getUnitAbility = BlzGetUnitAbility
30
- local unitAddAbility = UnitAddAbility
36
+ local triggerAddCondition = TriggerAddCondition
37
+ local triggerRegisterCommandEvent = TriggerRegisterCommandEvent
31
38
  local unitInventorySize = UnitInventorySize
32
39
  local unitItemInSlot = UnitItemInSlot
33
- local unitRemoveAbility = UnitRemoveAbility
34
40
  local function retrieveAbility(unit, ability, abilityId)
35
41
  if ability == nil then
36
42
  return __TS__New(
@@ -39,17 +45,6 @@ local function retrieveAbility(unit, ability, abilityId)
39
45
  Unit:of(unit)
40
46
  )
41
47
  end
42
- if not unitAddAbility(unit, abilityId) then
43
- if getUnitAbility(unit, abilityId) == ability then
44
- return UnitAbility:of(
45
- ability,
46
- abilityId,
47
- Unit:of(unit)
48
- )
49
- end
50
- else
51
- unitRemoveAbility(unit, abilityId)
52
- end
53
48
  for i = 0, unitInventorySize(unit) - 1 do
54
49
  local item = unitItemInSlot(unit, i)
55
50
  if getItemAbility(item, abilityId) == ability then
@@ -366,4 +361,31 @@ rawset(
366
361
  extractAbilityTypeId
367
362
  )
368
363
  )
364
+ rawset(
365
+ Unit,
366
+ "abilityCommandEvent",
367
+ lazyRecord(function(abilityTypeId)
368
+ return lazyRecord(function(orderTypeStringId)
369
+ return __TS__New(
370
+ InitializingEvent,
371
+ function(event)
372
+ local trigger = createTrigger()
373
+ triggerRegisterCommandEvent(trigger, abilityTypeId, orderTypeStringId)
374
+ triggerAddCondition(
375
+ trigger,
376
+ condition(function()
377
+ local unit = Unit:of(getTriggerUnit())
378
+ if unit ~= nil then
379
+ local ability = unit:getAbilityById(abilityTypeId)
380
+ if ability ~= nil then
381
+ eventInvoke(event, unit, ability, orderTypeStringId)
382
+ end
383
+ end
384
+ end)
385
+ )
386
+ end
387
+ )
388
+ end)
389
+ end)
390
+ )
369
391
  return ____exports
@@ -8,7 +8,8 @@ export type UnitBonusId<Brand extends string = any> = number & {
8
8
  export type UnitArmorBonusId = UnitBonusId<"armor">;
9
9
  export type UnitAttackSpeedFactorBonusId = UnitBonusId<"attackSpeedFactor">;
10
10
  export type UnitMovementSpeedFactorBonusId = UnitBonusId<"movementSpeedFactor">;
11
- export type UnitDamageBonusId = UnitBonusId<"damage">;
11
+ export type UnitAutoAttackDamageBonusId = UnitBonusId<"autoAttackDamage">;
12
+ export type UnitDamageFactorBonusId = UnitBonusId<"damageFactor">;
12
13
  export type UnitReceivedDamageFactorBonusId = UnitBonusId<"receivedDamageFactor">;
13
14
  export type UnitBonusType<Id extends UnitBonusId = UnitBonusId> = ({
14
15
  abilityTypeId: AbilityTypeId;
@@ -30,7 +31,8 @@ export declare namespace UnitBonusType {
30
31
  const ARMOR: UnitBonusType<UnitArmorBonusId>;
31
32
  const ATTACK_SPEED_FACTOR: UnitBonusType<UnitAttackSpeedFactorBonusId>;
32
33
  const MOVEMENT_SPEED_FACTOR: UnitBonusType<UnitAttackSpeedFactorBonusId>;
33
- const DAMAGE: UnitBonusType<UnitDamageBonusId>;
34
+ const AUTO_ATTACK_DAMAGE: UnitBonusType<UnitAutoAttackDamageBonusId>;
35
+ const DAMAGE_FACTOR: UnitBonusType<UnitReceivedDamageFactorBonusId>;
34
36
  const RECEIVED_DAMAGE_FACTOR: UnitBonusType<UnitReceivedDamageFactorBonusId>;
35
37
  }
36
38
  export declare const addUnitBonus: <Id extends UnitBonusId>(unit: Unit, bonusType: UnitBonusType<Id>, value: number) => Id;
@@ -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,24 @@
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
+ findSlot(item: Item): 0 | 1 | 2 | 3 | 4 | 5 | undefined;
15
+ protected __newindex(slot: number, item: Item | undefined): void;
16
+ protected __index(key: string | number): unknown;
17
+ protected __len(): number;
18
+ protected __ipairs(): LuaIterator<LuaMultiReturn<[number, Item | undefined]>, junit>;
19
+ }
20
+ declare module "../unit" {
21
+ interface Unit {
22
+ readonly items: UnitItems;
23
+ }
24
+ }
@@ -0,0 +1,79 @@
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 ____utility = require("engine.internal.utility")
11
+ local findUnitItemSlot = ____utility.findUnitItemSlot
12
+ local rawset = _G.rawset
13
+ local ____type = _G.type
14
+ local isItemPowerup = IsItemPowerup
15
+ local setItemBooleanField = BlzSetItemBooleanField
16
+ local unitAddItem = UnitAddItem
17
+ local unitDropItemSlot = UnitDropItemSlot
18
+ local unitInventorySize = UnitInventorySize
19
+ local unitItemInSlot = UnitItemInSlot
20
+ local unitRemoveItemFromSlot = UnitRemoveItemFromSlot
21
+ local handleByUnitItems = setmetatable({}, {__mode = "k"})
22
+ local function unitItemsNext(handle, index)
23
+ local slot = index & 7
24
+ if index >> 3 == slot then
25
+ return nil, nil
26
+ end
27
+ return index + 1, Item:of(unitItemInSlot(handle, slot))
28
+ end
29
+ ____exports.UnitItems = __TS__Class()
30
+ local UnitItems = ____exports.UnitItems
31
+ UnitItems.name = "UnitItems"
32
+ function UnitItems.prototype.____constructor(self, handle)
33
+ handleByUnitItems[self] = handle
34
+ end
35
+ function UnitItems.prototype.findSlot(self, item)
36
+ return findUnitItemSlot(handleByUnitItems[self], item.handle)
37
+ end
38
+ function UnitItems.prototype.__newindex(self, slot, item)
39
+ local handle = handleByUnitItems[self]
40
+ if slot < 1 or slot > unitInventorySize(handle) then
41
+ return
42
+ end
43
+ unitRemoveItemFromSlot(handle, slot - 1)
44
+ if item ~= nil then
45
+ local itemHandle = item.handle
46
+ local isPowerup = isItemPowerup(itemHandle)
47
+ if isPowerup then
48
+ setItemBooleanField(itemHandle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, false)
49
+ end
50
+ unitAddItem(handle, itemHandle)
51
+ unitDropItemSlot(handle, itemHandle, slot - 1)
52
+ if isPowerup then
53
+ setItemBooleanField(itemHandle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
54
+ end
55
+ end
56
+ end
57
+ function UnitItems.prototype.__index(self, key)
58
+ if ____type(key) == "number" then
59
+ return Item:of(unitItemInSlot(handleByUnitItems[self], key - 1))
60
+ end
61
+ return rawget(____exports.UnitItems.prototype, key)
62
+ end
63
+ function UnitItems.prototype.__len(self)
64
+ return unitInventorySize(handleByUnitItems[self])
65
+ end
66
+ function UnitItems.prototype.__ipairs(self)
67
+ local handle = handleByUnitItems[self]
68
+ return unitItemsNext, handle, unitInventorySize(handle) << 3
69
+ end
70
+ __TS__ObjectDefineProperty(
71
+ Unit.prototype,
72
+ "items",
73
+ {get = function(self)
74
+ local items = __TS__New(____exports.UnitItems, self.handle)
75
+ rawset(self, "items", items)
76
+ return items
77
+ end}
78
+ )
79
+ return ____exports
@@ -0,0 +1,13 @@
1
+ /** @noSelfInFile */
2
+ import { Player } from "../../../core/types/player";
3
+ import { Event } from "../../../event";
4
+ declare module "../unit" {
5
+ namespace Unit {
6
+ const mainSelectedUnitChangeEvent: Event<[Player]>;
7
+ }
8
+ }
9
+ declare module "../unit" {
10
+ namespace Unit {
11
+ const getMainSelectedOf: (player: Player) => Unit | undefined;
12
+ }
13
+ }
@@ -0,0 +1,51 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__New = ____lualib.__TS__New
3
+ local ____exports = {}
4
+ local ____player = require("core.types.player")
5
+ local Player = ____player.Player
6
+ local ____math = require("math")
7
+ local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
8
+ local MINIMUM_INTEGER = ____math.MINIMUM_INTEGER
9
+ local ____local_2Dclient = require("engine.local-client")
10
+ local LocalClient = ____local_2Dclient.LocalClient
11
+ local ____unit = require("engine.internal.unit")
12
+ local Unit = ____unit.Unit
13
+ local ____event = require("event")
14
+ local Event = ____event.Event
15
+ local mainSelectedUnitChangeEvent = __TS__New(Event)
16
+ rawset(Unit, "mainSelectedUnitChangeEvent", mainSelectedUnitChangeEvent)
17
+ local mainSelectedUnitByPlayer = {}
18
+ local syncSlider = BlzCreateFrameByType(
19
+ "SLIDER",
20
+ "UnitSyncId",
21
+ BlzGetOriginFrame(ORIGIN_FRAME_WORLD_FRAME, 0),
22
+ "",
23
+ 0
24
+ )
25
+ BlzFrameSetMinMaxValue(syncSlider, MINIMUM_INTEGER, MAXIMUM_INTEGER)
26
+ LocalClient.mainSelectedUnitChangeEvent:addListener(function()
27
+ local ____opt_0 = LocalClient.mainSelectedUnit
28
+ local syncId = ____opt_0 and ____opt_0.syncId
29
+ BlzFrameSetValue(syncSlider, syncId or 0)
30
+ end)
31
+ local trg = CreateTrigger()
32
+ BlzTriggerRegisterFrameEvent(trg, syncSlider, FRAMEEVENT_SLIDER_VALUE_CHANGED)
33
+ TriggerAddAction(
34
+ trg,
35
+ function()
36
+ local player = Player:of(GetTriggerPlayer())
37
+ local mainSelectedUnit = Unit:getBySyncId(BlzGetTriggerFrameValue())
38
+ if mainSelectedUnit ~= mainSelectedUnitByPlayer[player] then
39
+ mainSelectedUnitByPlayer[player] = mainSelectedUnit
40
+ Event.invoke(mainSelectedUnitChangeEvent, player)
41
+ end
42
+ end
43
+ )
44
+ rawset(
45
+ Unit,
46
+ "getMainSelectedOf",
47
+ function(player)
48
+ return mainSelectedUnitByPlayer[player]
49
+ end
50
+ )
51
+ return ____exports