warscript 0.0.1-dev.b026cc2 → 0.0.1-dev.b37c533
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.
- package/core/types/effect.d.ts +13 -3
- package/core/types/effect.lua +116 -17
- package/core/types/frame.d.ts +6 -0
- package/core/types/frame.lua +89 -1
- package/core/util.d.ts +1 -1
- package/core/util.lua +12 -0
- package/engine/behavior.d.ts +2 -2
- package/engine/behavior.lua +6 -6
- package/engine/behaviour/ability/always-enabled.d.ts +7 -0
- package/engine/behaviour/ability/always-enabled.lua +31 -0
- package/engine/behaviour/ability/apply-buff.d.ts +3 -5
- package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
- package/engine/behaviour/ability/emulate-impact.lua +28 -0
- package/engine/behaviour/ability/instant-impact.d.ts +2 -2
- package/engine/behaviour/ability/instant-impact.lua +4 -19
- package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
- package/engine/behaviour/ability/on-command-impact.lua +25 -0
- package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
- package/engine/behaviour/ability/remove-buffs.lua +28 -0
- package/engine/behaviour/ability.d.ts +14 -3
- package/engine/behaviour/ability.lua +79 -33
- package/engine/behaviour/unit.d.ts +5 -0
- package/engine/behaviour/unit.lua +20 -0
- package/engine/buff.d.ts +38 -12
- package/engine/buff.lua +171 -79
- package/engine/internal/ability.d.ts +16 -13
- package/engine/internal/ability.lua +82 -76
- package/engine/internal/item/ability.lua +106 -0
- package/engine/internal/item+owner.lua +2 -2
- package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
- package/engine/internal/misc/ability-disable-counter.lua +13 -0
- package/engine/internal/unit/ability.d.ts +10 -1
- package/engine/internal/unit/ability.lua +36 -14
- package/engine/internal/unit/bonus.d.ts +4 -2
- package/engine/internal/unit/bonus.lua +6 -1
- package/engine/internal/unit/ignore-events-items.d.ts +2 -0
- package/engine/internal/unit/ignore-events-items.lua +5 -0
- package/engine/internal/unit/item.d.ts +24 -0
- package/engine/internal/unit/item.lua +128 -0
- package/engine/internal/unit/main-selected.d.ts +13 -0
- package/engine/internal/unit/main-selected.lua +51 -0
- package/engine/internal/unit+ability.lua +2 -2
- package/engine/internal/unit-missile-launch.lua +24 -5
- package/engine/internal/unit.d.ts +25 -10
- package/engine/internal/unit.lua +153 -81
- package/engine/internal/utility.lua +12 -0
- package/engine/local-client.d.ts +7 -2
- package/engine/local-client.lua +82 -0
- package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
- package/engine/object-data/entry/ability-type.lua +8 -12
- package/engine/object-data/entry/item-type.d.ts +14 -0
- package/engine/object-data/entry/item-type.lua +91 -0
- package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
- package/engine/object-field/ability.d.ts +26 -3
- package/engine/object-field/ability.lua +54 -1
- package/engine/object-field.d.ts +2 -2
- package/engine/object-field.lua +4 -0
- package/engine/standard/fields/ability.d.ts +2 -0
- package/engine/standard/fields/ability.lua +2 -0
- package/engine/unit.d.ts +2 -0
- package/engine/unit.lua +2 -0
- package/index.d.ts +1 -0
- package/index.lua +1 -0
- package/net/socket.d.ts +7 -1
- package/net/socket.lua +45 -4
- package/network.d.ts +1 -0
- package/network.lua +3 -2
- package/objutil/buff.lua +1 -1
- package/package.json +1 -1
- package/patch-lua.d.ts +0 -0
- package/patch-lua.lua +10 -0
- package/utility/arrays.d.ts +8 -1
- package/utility/arrays.lua +34 -3
- package/utility/lazy.d.ts +2 -0
- package/utility/lazy.lua +14 -0
- package/utility/linked-set.d.ts +11 -2
- package/utility/linked-set.lua +5 -2
- package/utility/types.d.ts +1 -0
package/engine/internal/unit.lua
CHANGED
|
@@ -51,6 +51,8 @@ local ____arrays = require("utility.arrays")
|
|
|
51
51
|
local forEach = ____arrays.forEach
|
|
52
52
|
local ____math = require("math")
|
|
53
53
|
local min = ____math.min
|
|
54
|
+
local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
|
|
55
|
+
local ignoreEventsItems = ____ignore_2Devents_2Ditems.ignoreEventsItems
|
|
54
56
|
local match = string.match
|
|
55
57
|
local ____tostring = _G.tostring
|
|
56
58
|
local setUnitAnimation = SetUnitAnimation
|
|
@@ -562,17 +564,6 @@ local function retrieveAbility(unit, ability, abilityId)
|
|
|
562
564
|
____exports.Unit:of(unit)
|
|
563
565
|
)
|
|
564
566
|
end
|
|
565
|
-
if not unitAddAbility(unit, abilityId) then
|
|
566
|
-
if getUnitAbility(unit, abilityId) == ability then
|
|
567
|
-
return UnitAbility:of(
|
|
568
|
-
ability,
|
|
569
|
-
abilityId,
|
|
570
|
-
____exports.Unit:of(unit)
|
|
571
|
-
)
|
|
572
|
-
end
|
|
573
|
-
else
|
|
574
|
-
unitRemoveAbility(unit, abilityId)
|
|
575
|
-
end
|
|
576
567
|
for i = 0, unitInventorySize(unit) - 1 do
|
|
577
568
|
local item = unitItemInSlot(unit, i)
|
|
578
569
|
if getItemAbility(item, abilityId) == ability then
|
|
@@ -630,15 +621,15 @@ for ____, player in ipairs(Player.all) do
|
|
|
630
621
|
dummies[player] = dummy
|
|
631
622
|
end
|
|
632
623
|
local function delayHealthChecksCallback(unit)
|
|
633
|
-
local counter = (unit[
|
|
624
|
+
local counter = (unit[103] or 0) - 1
|
|
634
625
|
if counter ~= 0 then
|
|
635
|
-
unit[
|
|
626
|
+
unit[103] = counter
|
|
636
627
|
return
|
|
637
628
|
end
|
|
638
|
-
unit[
|
|
639
|
-
local healthBonus = unit[
|
|
629
|
+
unit[103] = nil
|
|
630
|
+
local healthBonus = unit[104]
|
|
640
631
|
if healthBonus ~= nil then
|
|
641
|
-
unit[
|
|
632
|
+
unit[104] = nil
|
|
642
633
|
local handle = unit.handle
|
|
643
634
|
BlzSetUnitMaxHP(
|
|
644
635
|
handle,
|
|
@@ -646,12 +637,17 @@ local function delayHealthChecksCallback(unit)
|
|
|
646
637
|
)
|
|
647
638
|
end
|
|
648
639
|
end
|
|
640
|
+
local nextSyncId = 1
|
|
641
|
+
local unitBySyncId = setmetatable({}, {__mode = "k"})
|
|
649
642
|
____exports.Unit = __TS__Class()
|
|
650
643
|
local Unit = ____exports.Unit
|
|
651
644
|
Unit.name = "Unit"
|
|
652
645
|
__TS__ClassExtends(Unit, Handle)
|
|
653
646
|
function Unit.prototype.____constructor(self, handle)
|
|
654
647
|
Handle.prototype.____constructor(self, handle)
|
|
648
|
+
local ____nextSyncId_0 = nextSyncId
|
|
649
|
+
nextSyncId = ____nextSyncId_0 + 1
|
|
650
|
+
self.syncId = ____nextSyncId_0
|
|
655
651
|
self._owner = Player:of(getOwningPlayer(handle))
|
|
656
652
|
assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
|
|
657
653
|
assert(unitAddAbility(handle, morphDetectAbilityId))
|
|
@@ -664,6 +660,7 @@ function Unit.prototype.____constructor(self, handle)
|
|
|
664
660
|
fourCC("Amrf")
|
|
665
661
|
))
|
|
666
662
|
end
|
|
663
|
+
unitBySyncId[self.syncId] = self
|
|
667
664
|
local ____ = self.abilities
|
|
668
665
|
end
|
|
669
666
|
function Unit.prototype.getEvent(self, event, collector)
|
|
@@ -749,8 +746,8 @@ function Unit.prototype.addModifier(self, property, modifier)
|
|
|
749
746
|
end}
|
|
750
747
|
end
|
|
751
748
|
function Unit.prototype.hasCombatClassification(self, combatClassification)
|
|
752
|
-
local
|
|
753
|
-
return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) &
|
|
749
|
+
local ____combatClassification_1 = combatClassification
|
|
750
|
+
return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
|
|
754
751
|
end
|
|
755
752
|
function Unit.prototype.addClassification(self, classification)
|
|
756
753
|
return unitAddType(self.handle, classification)
|
|
@@ -768,13 +765,13 @@ function Unit.prototype.isInvisibleTo(self, player)
|
|
|
768
765
|
return isUnitInvisible(self.handle, player.handle)
|
|
769
766
|
end
|
|
770
767
|
function Unit.prototype.isInRangeOf(self, x, y, range)
|
|
771
|
-
local
|
|
768
|
+
local ____temp_2
|
|
772
769
|
if type(x) == "number" then
|
|
773
|
-
|
|
770
|
+
____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
|
|
774
771
|
else
|
|
775
|
-
|
|
772
|
+
____temp_2 = isUnitInRange(self.handle, x.handle, y)
|
|
776
773
|
end
|
|
777
|
-
return
|
|
774
|
+
return ____temp_2
|
|
778
775
|
end
|
|
779
776
|
function Unit.prototype.isAllyOf(self, unit)
|
|
780
777
|
return isUnitAlly(
|
|
@@ -801,7 +798,7 @@ function Unit.prototype.queueAnimation(self, animation)
|
|
|
801
798
|
queueUnitAnimation(self.handle, animation)
|
|
802
799
|
end
|
|
803
800
|
function Unit.prototype.delayHealthChecks(self)
|
|
804
|
-
self[
|
|
801
|
+
self[103] = (self[103] or 0) + 1
|
|
805
802
|
Timer:run(delayHealthChecksCallback, self)
|
|
806
803
|
end
|
|
807
804
|
function Unit.prototype.setPosition(self, x, y)
|
|
@@ -818,14 +815,14 @@ function Unit.prototype.kill(self)
|
|
|
818
815
|
killUnit(self.handle)
|
|
819
816
|
end
|
|
820
817
|
function Unit.prototype.revive(self, x, y, doEffect)
|
|
821
|
-
local
|
|
822
|
-
local
|
|
823
|
-
local
|
|
824
|
-
if
|
|
825
|
-
|
|
818
|
+
local ____ReviveHero_5 = ReviveHero
|
|
819
|
+
local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
|
|
820
|
+
local ____doEffect_3 = doEffect
|
|
821
|
+
if ____doEffect_3 == nil then
|
|
822
|
+
____doEffect_3 = false
|
|
826
823
|
end
|
|
827
|
-
__TS__SparseArrayPush(
|
|
828
|
-
|
|
824
|
+
__TS__SparseArrayPush(____array_4, ____doEffect_3)
|
|
825
|
+
____ReviveHero_5(__TS__SparseArraySpread(____array_4))
|
|
829
826
|
end
|
|
830
827
|
function Unit.prototype.healTarget(self, target, amount)
|
|
831
828
|
if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
|
|
@@ -865,7 +862,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
|
|
|
865
862
|
return UnitDropItemSlot(self.handle, item.handle, slot)
|
|
866
863
|
end
|
|
867
864
|
function Unit.prototype.itemInSlot(self, slot)
|
|
868
|
-
return Item:of(
|
|
865
|
+
return Item:of(unitItemInSlot(self.handle, slot))
|
|
869
866
|
end
|
|
870
867
|
function Unit.prototype.addAbility(self, abilityId)
|
|
871
868
|
if unitAddAbility(self.handle, abilityId) then
|
|
@@ -934,8 +931,15 @@ function Unit.prototype.interruptAttack(self)
|
|
|
934
931
|
unitInterruptAttack(self.handle)
|
|
935
932
|
end
|
|
936
933
|
function Unit.prototype.interruptCast(self, abilityId)
|
|
937
|
-
|
|
938
|
-
unitDisableAbility(
|
|
934
|
+
local handle = self.handle
|
|
935
|
+
unitDisableAbility(handle, abilityId, true, false)
|
|
936
|
+
Timer:run(
|
|
937
|
+
unitDisableAbility,
|
|
938
|
+
handle,
|
|
939
|
+
abilityId,
|
|
940
|
+
false,
|
|
941
|
+
false
|
|
942
|
+
)
|
|
939
943
|
end
|
|
940
944
|
function Unit.prototype.getDistanceTo(self, target)
|
|
941
945
|
local handle = self.handle
|
|
@@ -995,18 +999,18 @@ function Unit.prototype.unpauseEx(self)
|
|
|
995
999
|
self:decrementStunCounter()
|
|
996
1000
|
end
|
|
997
1001
|
function Unit.prototype.incrementStunCounter(self)
|
|
998
|
-
local stunCounter = self[
|
|
999
|
-
if not self[
|
|
1002
|
+
local stunCounter = self[102] or 0
|
|
1003
|
+
if not self[101] or stunCounter >= 0 then
|
|
1000
1004
|
BlzPauseUnitEx(self.handle, true)
|
|
1001
1005
|
end
|
|
1002
|
-
self[
|
|
1006
|
+
self[102] = stunCounter + 1
|
|
1003
1007
|
end
|
|
1004
1008
|
function Unit.prototype.decrementStunCounter(self)
|
|
1005
|
-
local stunCounter = self[
|
|
1006
|
-
if not self[
|
|
1009
|
+
local stunCounter = self[102] or 0
|
|
1010
|
+
if not self[101] or stunCounter >= 1 then
|
|
1007
1011
|
BlzPauseUnitEx(self.handle, false)
|
|
1008
1012
|
end
|
|
1009
|
-
self[
|
|
1013
|
+
self[102] = stunCounter - 1
|
|
1010
1014
|
end
|
|
1011
1015
|
function Unit.create(self, owner, id, x, y, facing, skinId)
|
|
1012
1016
|
local handle = skinId and BlzCreateUnitWithSkin(
|
|
@@ -1108,8 +1112,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
|
|
|
1108
1112
|
)
|
|
1109
1113
|
return targetCollection
|
|
1110
1114
|
end
|
|
1111
|
-
function Unit.getSelectionOf(self, player)
|
|
1112
|
-
|
|
1115
|
+
function Unit.getSelectionOf(self, player, target)
|
|
1116
|
+
if target == nil then
|
|
1117
|
+
target = {}
|
|
1118
|
+
end
|
|
1119
|
+
targetCollection = target
|
|
1113
1120
|
targetCollectionNextIndex = 1
|
|
1114
1121
|
GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
|
|
1115
1122
|
return targetCollection
|
|
@@ -1131,6 +1138,9 @@ end
|
|
|
1131
1138
|
function Unit.prototype.__tostring(self)
|
|
1132
1139
|
return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
|
|
1133
1140
|
end
|
|
1141
|
+
function Unit.getBySyncId(self, syncId)
|
|
1142
|
+
return unitBySyncId[syncId]
|
|
1143
|
+
end
|
|
1134
1144
|
__TS__SetDescriptor(
|
|
1135
1145
|
Unit.prototype,
|
|
1136
1146
|
"_deltas",
|
|
@@ -1388,17 +1398,17 @@ __TS__SetDescriptor(
|
|
|
1388
1398
|
"isTeamGlowVisible",
|
|
1389
1399
|
{
|
|
1390
1400
|
get = function(self)
|
|
1391
|
-
return not self[
|
|
1401
|
+
return not self[106]
|
|
1392
1402
|
end,
|
|
1393
1403
|
set = function(self, isTeamGlowVisible)
|
|
1394
1404
|
showUnitTeamGlow(self.handle, isTeamGlowVisible)
|
|
1395
|
-
local
|
|
1405
|
+
local ____temp_6
|
|
1396
1406
|
if not isTeamGlowVisible then
|
|
1397
|
-
|
|
1407
|
+
____temp_6 = true
|
|
1398
1408
|
else
|
|
1399
|
-
|
|
1409
|
+
____temp_6 = nil
|
|
1400
1410
|
end
|
|
1401
|
-
self[
|
|
1411
|
+
self[106] = ____temp_6
|
|
1402
1412
|
end
|
|
1403
1413
|
},
|
|
1404
1414
|
true
|
|
@@ -1408,7 +1418,7 @@ __TS__SetDescriptor(
|
|
|
1408
1418
|
"color",
|
|
1409
1419
|
{set = function(self, color)
|
|
1410
1420
|
setUnitColor(self.handle, color.handle)
|
|
1411
|
-
if self[
|
|
1421
|
+
if self[106] then
|
|
1412
1422
|
showUnitTeamGlow(self.handle, false)
|
|
1413
1423
|
end
|
|
1414
1424
|
end},
|
|
@@ -1432,14 +1442,14 @@ __TS__SetDescriptor(
|
|
|
1432
1442
|
"maxHealth",
|
|
1433
1443
|
{
|
|
1434
1444
|
get = function(self)
|
|
1435
|
-
return BlzGetUnitMaxHP(self.handle) - (self[
|
|
1445
|
+
return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
|
|
1436
1446
|
end,
|
|
1437
1447
|
set = function(self, maxHealth)
|
|
1438
|
-
if maxHealth < 1 and self[
|
|
1439
|
-
self[
|
|
1448
|
+
if maxHealth < 1 and self[103] ~= nil then
|
|
1449
|
+
self[104] = (self[104] or 0) + (1 - maxHealth)
|
|
1440
1450
|
maxHealth = 1
|
|
1441
1451
|
end
|
|
1442
|
-
BlzSetUnitMaxHP(self.handle, maxHealth + (self[
|
|
1452
|
+
BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
|
|
1443
1453
|
end
|
|
1444
1454
|
},
|
|
1445
1455
|
true
|
|
@@ -1481,10 +1491,10 @@ __TS__SetDescriptor(
|
|
|
1481
1491
|
"health",
|
|
1482
1492
|
{
|
|
1483
1493
|
get = function(self)
|
|
1484
|
-
return GetWidgetLife(self.handle) - (self[
|
|
1494
|
+
return GetWidgetLife(self.handle) - (self[105] or 0)
|
|
1485
1495
|
end,
|
|
1486
1496
|
set = function(self, health)
|
|
1487
|
-
SetWidgetLife(self.handle, health + (self[
|
|
1497
|
+
SetWidgetLife(self.handle, health + (self[105] or 0))
|
|
1488
1498
|
end
|
|
1489
1499
|
},
|
|
1490
1500
|
true
|
|
@@ -1695,17 +1705,17 @@ __TS__SetDescriptor(
|
|
|
1695
1705
|
set = function(self, isPaused)
|
|
1696
1706
|
local handle = self.handle
|
|
1697
1707
|
if isPaused and not IsUnitPaused(handle) then
|
|
1698
|
-
self[
|
|
1699
|
-
for _ = self[
|
|
1708
|
+
self[101] = true
|
|
1709
|
+
for _ = self[102] or 0, -1 do
|
|
1700
1710
|
BlzPauseUnitEx(handle, true)
|
|
1701
1711
|
end
|
|
1702
1712
|
PauseUnit(handle, true)
|
|
1703
1713
|
elseif not isPaused and IsUnitPaused(handle) then
|
|
1704
1714
|
PauseUnit(handle, false)
|
|
1705
|
-
for _ = self[
|
|
1715
|
+
for _ = self[102] or 0, -1 do
|
|
1706
1716
|
BlzPauseUnitEx(handle, false)
|
|
1707
1717
|
end
|
|
1708
|
-
self[
|
|
1718
|
+
self[101] = nil
|
|
1709
1719
|
end
|
|
1710
1720
|
end
|
|
1711
1721
|
},
|
|
@@ -2124,25 +2134,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
|
|
|
2124
2134
|
InitializingEvent,
|
|
2125
2135
|
function(event)
|
|
2126
2136
|
local function listener(unit, id)
|
|
2127
|
-
local
|
|
2137
|
+
local ____GetSpellTargetUnit_result_9
|
|
2128
2138
|
if GetSpellTargetUnit() then
|
|
2129
|
-
|
|
2139
|
+
____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
|
|
2130
2140
|
else
|
|
2131
|
-
local
|
|
2141
|
+
local ____GetSpellTargetItem_result_8
|
|
2132
2142
|
if GetSpellTargetItem() then
|
|
2133
|
-
|
|
2143
|
+
____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
|
|
2134
2144
|
else
|
|
2135
|
-
local
|
|
2145
|
+
local ____GetSpellTargetDestructable_result_7
|
|
2136
2146
|
if GetSpellTargetDestructable() then
|
|
2137
|
-
|
|
2147
|
+
____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
|
|
2138
2148
|
else
|
|
2139
|
-
|
|
2149
|
+
____GetSpellTargetDestructable_result_7 = nil
|
|
2140
2150
|
end
|
|
2141
|
-
|
|
2151
|
+
____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
|
|
2142
2152
|
end
|
|
2143
|
-
|
|
2153
|
+
____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
|
|
2144
2154
|
end
|
|
2145
|
-
local target =
|
|
2155
|
+
local target = ____GetSpellTargetUnit_result_9
|
|
2146
2156
|
if target then
|
|
2147
2157
|
invoke(event, unit, id, target)
|
|
2148
2158
|
end
|
|
@@ -2314,10 +2324,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
|
|
|
2314
2324
|
____exports.UnitTriggerEvent,
|
|
2315
2325
|
EVENT_PLAYER_UNIT_ISSUED_ORDER,
|
|
2316
2326
|
function()
|
|
2317
|
-
local
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2327
|
+
local handle = getOrderedUnit()
|
|
2328
|
+
if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
|
|
2329
|
+
local unit = ____exports.Unit:of(handle)
|
|
2330
|
+
if unit.state == 1 then
|
|
2331
|
+
return unit, getIssuedOrderId()
|
|
2332
|
+
end
|
|
2321
2333
|
end
|
|
2322
2334
|
return IgnoreEvent
|
|
2323
2335
|
end
|
|
@@ -2452,6 +2464,7 @@ Unit.onDamage = __TS__New(
|
|
|
2452
2464
|
damageType = BlzGetEventDamageType(),
|
|
2453
2465
|
weaponType = BlzGetEventWeaponType(),
|
|
2454
2466
|
isAttack = BlzGetEventIsAttack(),
|
|
2467
|
+
originalAmount = GetEventDamage(),
|
|
2455
2468
|
preventDeath = damageEventPreventDeath
|
|
2456
2469
|
}
|
|
2457
2470
|
local evData = setmetatable(
|
|
@@ -2468,7 +2481,7 @@ Unit.onDamage = __TS__New(
|
|
|
2468
2481
|
invoke(event, source, target, evData)
|
|
2469
2482
|
if evData[0] ~= nil and target.health - evData.amount < 0.405 then
|
|
2470
2483
|
local bonusHealth = math.ceil(evData.amount)
|
|
2471
|
-
target[
|
|
2484
|
+
target[105] = (target[105] or 0) + bonusHealth
|
|
2472
2485
|
BlzSetUnitMaxHP(
|
|
2473
2486
|
target.handle,
|
|
2474
2487
|
BlzGetUnitMaxHP(target.handle) + bonusHealth
|
|
@@ -2482,7 +2495,7 @@ Unit.onDamage = __TS__New(
|
|
|
2482
2495
|
evData[0],
|
|
2483
2496
|
table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
|
|
2484
2497
|
)
|
|
2485
|
-
target[
|
|
2498
|
+
target[105] = (target[105] or 0) - bonusHealth
|
|
2486
2499
|
SetWidgetLife(
|
|
2487
2500
|
target.handle,
|
|
2488
2501
|
GetWidgetLife(target.handle) - bonusHealth
|
|
@@ -2502,32 +2515,91 @@ Unit.onDamage = __TS__New(
|
|
|
2502
2515
|
DestroyTrigger(trigger)
|
|
2503
2516
|
end
|
|
2504
2517
|
)
|
|
2505
|
-
Unit.
|
|
2518
|
+
Unit.itemDroppedEvent = __TS__New(
|
|
2506
2519
|
____exports.UnitTriggerEvent,
|
|
2507
2520
|
EVENT_PLAYER_UNIT_DROP_ITEM,
|
|
2508
2521
|
function()
|
|
2509
2522
|
local unit = getTriggerUnit()
|
|
2510
|
-
|
|
2511
|
-
|
|
2523
|
+
local item = getManipulatedItem()
|
|
2524
|
+
if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
|
|
2525
|
+
return ____exports.Unit:of(unit), Item:of(item)
|
|
2512
2526
|
end
|
|
2513
2527
|
return IgnoreEvent
|
|
2514
2528
|
end
|
|
2515
2529
|
)
|
|
2516
|
-
Unit.
|
|
2530
|
+
Unit.itemPickedUpEvent = __TS__New(
|
|
2517
2531
|
____exports.UnitTriggerEvent,
|
|
2518
2532
|
EVENT_PLAYER_UNIT_PICKUP_ITEM,
|
|
2519
2533
|
function()
|
|
2520
2534
|
local unit = getTriggerUnit()
|
|
2521
|
-
|
|
2522
|
-
|
|
2535
|
+
local item = getManipulatedItem()
|
|
2536
|
+
if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
|
|
2537
|
+
return ____exports.Unit:of(unit), Item:of(item)
|
|
2523
2538
|
end
|
|
2524
2539
|
return IgnoreEvent
|
|
2525
2540
|
end
|
|
2526
2541
|
)
|
|
2527
|
-
Unit.
|
|
2542
|
+
Unit.itemUsedEvent = __TS__New(
|
|
2528
2543
|
____exports.UnitTriggerEvent,
|
|
2529
2544
|
EVENT_PLAYER_UNIT_USE_ITEM,
|
|
2530
|
-
function()
|
|
2545
|
+
function()
|
|
2546
|
+
local unit = getTriggerUnit()
|
|
2547
|
+
local item = getManipulatedItem()
|
|
2548
|
+
if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
|
|
2549
|
+
return ____exports.Unit:of(unit), Item:of(item)
|
|
2550
|
+
end
|
|
2551
|
+
return IgnoreEvent
|
|
2552
|
+
end
|
|
2553
|
+
)
|
|
2554
|
+
Unit.itemStackedEvent = __TS__New(
|
|
2555
|
+
____exports.UnitTriggerEvent,
|
|
2556
|
+
EVENT_PLAYER_UNIT_STACK_ITEM,
|
|
2557
|
+
function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
|
|
2558
|
+
)
|
|
2559
|
+
__TS__ObjectDefineProperty(
|
|
2560
|
+
Unit,
|
|
2561
|
+
"itemUseOrderEvent",
|
|
2562
|
+
{get = function(self)
|
|
2563
|
+
local event = __TS__New(Event)
|
|
2564
|
+
for order = orderId("useslot0"), orderId("useslot5") do
|
|
2565
|
+
local slot = order - orderId("useslot0")
|
|
2566
|
+
local function listener(unit)
|
|
2567
|
+
local item = unit.items[slot + 1]
|
|
2568
|
+
if item ~= nil then
|
|
2569
|
+
invoke(event, unit, item)
|
|
2570
|
+
end
|
|
2571
|
+
end
|
|
2572
|
+
self.onImmediateOrder[order]:addListener(listener)
|
|
2573
|
+
self.onTargetOrder[order]:addListener(listener)
|
|
2574
|
+
self.onPointOrder[order]:addListener(listener)
|
|
2575
|
+
end
|
|
2576
|
+
rawset(self, "itemUseOrderEvent", event)
|
|
2577
|
+
return event
|
|
2578
|
+
end}
|
|
2579
|
+
)
|
|
2580
|
+
__TS__ObjectDefineProperty(
|
|
2581
|
+
Unit,
|
|
2582
|
+
"itemMoveOrderEvent",
|
|
2583
|
+
{get = function(self)
|
|
2584
|
+
local event = __TS__New(Event)
|
|
2585
|
+
for order = orderId("moveslot0"), orderId("moveslot5") do
|
|
2586
|
+
local slotTo = order - orderId("moveslot0")
|
|
2587
|
+
self.onTargetOrder[order]:addListener(function(unit, item)
|
|
2588
|
+
local slotFrom = unit.items:findSlot(item)
|
|
2589
|
+
if slotFrom ~= nil then
|
|
2590
|
+
invoke(
|
|
2591
|
+
event,
|
|
2592
|
+
unit,
|
|
2593
|
+
item,
|
|
2594
|
+
slotFrom,
|
|
2595
|
+
slotTo
|
|
2596
|
+
)
|
|
2597
|
+
end
|
|
2598
|
+
end)
|
|
2599
|
+
end
|
|
2600
|
+
rawset(self, "itemMoveOrderEvent", event)
|
|
2601
|
+
return event
|
|
2602
|
+
end}
|
|
2531
2603
|
)
|
|
2532
2604
|
__TS__ObjectDefineProperty(
|
|
2533
2605
|
Unit,
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
local ____exports = {}
|
|
2
2
|
local getUnitAbility = BlzGetUnitAbility
|
|
3
3
|
local unitAddAbility = UnitAddAbility
|
|
4
|
+
local unitInventorySize = UnitInventorySize
|
|
5
|
+
local unitItemInSlot = UnitItemInSlot
|
|
4
6
|
local unitMakeAbilityPermanent = UnitMakeAbilityPermanent
|
|
5
7
|
---
|
|
6
8
|
-- @internal For use by internal systems only.
|
|
@@ -10,4 +12,14 @@ ____exports.addInternalAbility = function(unit, abilityTypeId)
|
|
|
10
12
|
end
|
|
11
13
|
return getUnitAbility(unit, abilityTypeId)
|
|
12
14
|
end
|
|
15
|
+
---
|
|
16
|
+
-- @internal For use by internal systems only.
|
|
17
|
+
____exports.findUnitItemSlot = function(unit, item)
|
|
18
|
+
for slot = 0, unitInventorySize(unit) - 1 do
|
|
19
|
+
if item == unitItemInSlot(unit, slot) then
|
|
20
|
+
return slot
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
return nil
|
|
24
|
+
end
|
|
13
25
|
return ____exports
|
package/engine/local-client.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** @noSelfInFile */
|
|
2
2
|
import { Unit } from "../core/types/unit";
|
|
3
3
|
import { Async } from "../core/types/async";
|
|
4
|
-
import { TriggerEvent } from "../event";
|
|
4
|
+
import { Event, TriggerEvent } from "../event";
|
|
5
5
|
import { GraphicsMode } from "./index";
|
|
6
6
|
export declare class LocalClient {
|
|
7
7
|
private constructor();
|
|
@@ -11,6 +11,11 @@ export declare class LocalClient {
|
|
|
11
11
|
static get isHD(): boolean;
|
|
12
12
|
static get graphicsMode(): GraphicsMode;
|
|
13
13
|
static get isActive(): boolean;
|
|
14
|
-
static get mouseFocusUnit(): Async<Unit
|
|
14
|
+
static get mouseFocusUnit(): Async<Unit> | undefined;
|
|
15
|
+
static get mainSelectedUnit(): Async<Unit> | undefined;
|
|
16
|
+
static get mainSelectedUnitChangeEvent(): Event<[
|
|
17
|
+
previousMainSelectedUnit: Unit | undefined,
|
|
18
|
+
newMainSelectedUnit: Unit | undefined
|
|
19
|
+
]>;
|
|
15
20
|
static readonly onDisconnect: TriggerEvent<[]>;
|
|
16
21
|
}
|
package/engine/local-client.lua
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
|
|
2
3
|
local __TS__Class = ____lualib.__TS__Class
|
|
3
4
|
local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
4
5
|
local __TS__New = ____lualib.__TS__New
|
|
@@ -6,13 +7,25 @@ local ____exports = {}
|
|
|
6
7
|
local ____unit = require("core.types.unit")
|
|
7
8
|
local Unit = ____unit.Unit
|
|
8
9
|
local ____event = require("event")
|
|
10
|
+
local Event = ____event.Event
|
|
9
11
|
local TriggerEvent = ____event.TriggerEvent
|
|
12
|
+
local ____frame = require("core.types.frame")
|
|
13
|
+
local Frame = ____frame.Frame
|
|
14
|
+
local ____player = require("core.types.player")
|
|
15
|
+
local Player = ____player.Player
|
|
16
|
+
local ____timer = require("core.types.timer")
|
|
17
|
+
local Timer = ____timer.Timer
|
|
10
18
|
local loadTOCFile = BlzLoadTOCFile
|
|
11
19
|
local getLocalClientWidth = BlzGetLocalClientWidth
|
|
12
20
|
local getLocalClientHeight = BlzGetLocalClientHeight
|
|
13
21
|
local isLocalClientActive = BlzIsLocalClientActive
|
|
22
|
+
local isHeroUnitId = IsHeroUnitId
|
|
23
|
+
local getHandleId = GetHandleId
|
|
14
24
|
local getMouseFocusUnit = BlzGetMouseFocusUnit
|
|
25
|
+
local getUnitRealField = BlzGetUnitRealField
|
|
26
|
+
local getUnitTypeId = GetUnitTypeId
|
|
15
27
|
local getLocale = BlzGetLocale
|
|
28
|
+
local tableSort = table.sort
|
|
16
29
|
local tocPath = "_warscript\\IsHD.toc"
|
|
17
30
|
compiletime(function()
|
|
18
31
|
if currentMap then
|
|
@@ -21,6 +34,29 @@ compiletime(function()
|
|
|
21
34
|
currentMap:addFileString("_HD.w3mod\\" .. tocPath, fdfPath .. "\r\n")
|
|
22
35
|
end
|
|
23
36
|
end)
|
|
37
|
+
local selectionButtons
|
|
38
|
+
Timer:run(function()
|
|
39
|
+
selectionButtons = __TS__ArrayMap(
|
|
40
|
+
Frame:byName("SimpleInfoPanelUnitDetail").parent:getChild(5):getChild(0).children,
|
|
41
|
+
function(____, frame) return frame:getChild(1) end
|
|
42
|
+
)
|
|
43
|
+
end)
|
|
44
|
+
local localSelectedUnits = {}
|
|
45
|
+
local indexByLocalSelectedUnit = {}
|
|
46
|
+
local function compareUnitsSelectionPriority(a, b)
|
|
47
|
+
local aHandle = a.handle
|
|
48
|
+
local bHandle = b.handle
|
|
49
|
+
local priorityDelta = getUnitRealField(bHandle, UNIT_RF_PRIORITY) - getUnitRealField(aHandle, UNIT_RF_PRIORITY)
|
|
50
|
+
if priorityDelta ~= 0 then
|
|
51
|
+
return priorityDelta < 0
|
|
52
|
+
end
|
|
53
|
+
local aTypeId = getUnitTypeId(aHandle)
|
|
54
|
+
local bTypeId = getUnitTypeId(bHandle)
|
|
55
|
+
local orderDelta = (isHeroUnitId(aTypeId) and getHandleId(aHandle) or aTypeId) - (isHeroUnitId(bTypeId) and getHandleId(bHandle) or bTypeId)
|
|
56
|
+
return (orderDelta ~= 0 and orderDelta or indexByLocalSelectedUnit[a] - indexByLocalSelectedUnit[b]) < 0
|
|
57
|
+
end
|
|
58
|
+
local mainSelectedUnitChangeEvent
|
|
59
|
+
local previousMainSelectedUnit
|
|
24
60
|
____exports.LocalClient = __TS__Class()
|
|
25
61
|
local LocalClient = ____exports.LocalClient
|
|
26
62
|
LocalClient.name = "LocalClient"
|
|
@@ -69,6 +105,52 @@ __TS__ObjectDefineProperty(
|
|
|
69
105
|
return Unit:of(getMouseFocusUnit())
|
|
70
106
|
end}
|
|
71
107
|
)
|
|
108
|
+
__TS__ObjectDefineProperty(
|
|
109
|
+
LocalClient,
|
|
110
|
+
"mainSelectedUnit",
|
|
111
|
+
{get = function(self)
|
|
112
|
+
Unit:getSelectionOf(Player["local"], localSelectedUnits)
|
|
113
|
+
for i = 1, #localSelectedUnits do
|
|
114
|
+
indexByLocalSelectedUnit[localSelectedUnits[i]] = i
|
|
115
|
+
end
|
|
116
|
+
tableSort(localSelectedUnits, compareUnitsSelectionPriority)
|
|
117
|
+
local mainSelectedUnitIndex
|
|
118
|
+
if selectionButtons and #localSelectedUnits > 1 then
|
|
119
|
+
local maxButtonWidth = 0
|
|
120
|
+
for i = 0, #selectionButtons - 1 do
|
|
121
|
+
local width = selectionButtons[i + 1].width
|
|
122
|
+
if width > maxButtonWidth then
|
|
123
|
+
maxButtonWidth = width
|
|
124
|
+
mainSelectedUnitIndex = i
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
local mainSelectedUnit = localSelectedUnits[(mainSelectedUnitIndex or 0) + 1]
|
|
129
|
+
for i = 1, #localSelectedUnits do
|
|
130
|
+
indexByLocalSelectedUnit[localSelectedUnits[i]] = nil
|
|
131
|
+
localSelectedUnits[i] = nil
|
|
132
|
+
end
|
|
133
|
+
if mainSelectedUnitChangeEvent ~= nil and mainSelectedUnit ~= previousMainSelectedUnit then
|
|
134
|
+
local previousPreviousMainSelectedUnit = previousMainSelectedUnit
|
|
135
|
+
previousMainSelectedUnit = mainSelectedUnit
|
|
136
|
+
Event.invoke(mainSelectedUnitChangeEvent, previousPreviousMainSelectedUnit, previousMainSelectedUnit)
|
|
137
|
+
end
|
|
138
|
+
return mainSelectedUnit
|
|
139
|
+
end}
|
|
140
|
+
)
|
|
141
|
+
__TS__ObjectDefineProperty(
|
|
142
|
+
LocalClient,
|
|
143
|
+
"mainSelectedUnitChangeEvent",
|
|
144
|
+
{get = function(self)
|
|
145
|
+
if mainSelectedUnitChangeEvent == nil then
|
|
146
|
+
mainSelectedUnitChangeEvent = __TS__New(Event)
|
|
147
|
+
Timer.onPeriod[1 / 64]:addListener(function()
|
|
148
|
+
local _ = ____exports.LocalClient.mainSelectedUnit
|
|
149
|
+
end)
|
|
150
|
+
end
|
|
151
|
+
return mainSelectedUnitChangeEvent
|
|
152
|
+
end}
|
|
153
|
+
)
|
|
72
154
|
LocalClient.onDisconnect = __TS__New(
|
|
73
155
|
TriggerEvent,
|
|
74
156
|
function(trigger)
|
|
@@ -4,5 +4,9 @@ export declare const enum SoundPresetName {
|
|
|
4
4
|
ABOMINATION_PISSED = "AbominationPissed",
|
|
5
5
|
ABOMINATION_READY = "AbominationReady",
|
|
6
6
|
ABOMINATION_WAR_CRY = "AbominationWarcry",
|
|
7
|
-
AXE_MEDIUM_CHOP_WOOD = "AxeMediumChopWood"
|
|
7
|
+
AXE_MEDIUM_CHOP_WOOD = "AxeMediumChopWood",
|
|
8
|
+
IMPALE = "Impale",
|
|
9
|
+
IMPALE_HIT = "ImpaleHit",
|
|
10
|
+
IMPALE_LAND = "ImpaleLand",
|
|
11
|
+
IMPALE_CAST = "ImpaleCast"
|
|
8
12
|
}
|