warscript 0.0.1-dev.0a43a35 → 0.0.1-dev.0b2f1d6
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/binaryreader.d.ts +1 -0
- package/binaryreader.lua +3 -0
- package/core/types/frame.d.ts +8 -0
- package/core/types/frame.lua +93 -1
- package/core/util.d.ts +1 -1
- package/core/util.lua +6 -0
- package/engine/behavior.d.ts +2 -2
- package/engine/behavior.lua +6 -6
- package/engine/behaviour/ability/apply-buff.d.ts +3 -5
- package/engine/behaviour/ability/damage.d.ts +33 -11
- package/engine/behaviour/ability/damage.lua +89 -31
- package/engine/behaviour/ability/heal.d.ts +33 -6
- package/engine/behaviour/ability/heal.lua +89 -10
- package/engine/behaviour/ability/restore-mana.d.ts +15 -0
- package/engine/behaviour/ability/restore-mana.lua +29 -0
- package/engine/behaviour/unit.d.ts +5 -0
- package/engine/behaviour/unit.lua +20 -0
- package/engine/buff.d.ts +60 -18
- package/engine/buff.lua +239 -62
- package/engine/game-map.d.ts +7 -0
- package/engine/game-map.lua +32 -0
- package/engine/internal/ability.d.ts +3 -11
- package/engine/internal/ability.lua +9 -78
- package/engine/internal/item+owner.lua +2 -2
- package/engine/internal/unit/ability.lua +0 -14
- package/engine/internal/unit/bonus.d.ts +4 -2
- package/engine/internal/unit/bonus.lua +6 -1
- package/engine/internal/unit/item.d.ts +24 -0
- package/engine/internal/unit/item.lua +84 -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+transport.lua +4 -10
- package/engine/internal/unit-missile-launch.lua +24 -5
- package/engine/internal/unit.d.ts +24 -10
- package/engine/internal/unit.lua +113 -79
- package/engine/local-client.d.ts +7 -2
- package/engine/local-client.lua +82 -0
- package/engine/object-data/entry/item-type.d.ts +12 -0
- package/engine/object-data/entry/item-type.lua +78 -0
- package/engine/object-field/ability.d.ts +17 -0
- package/engine/object-field/ability.lua +51 -1
- 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/lualib_bundle.lua +7 -2
- 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 +2 -2
- package/patch-lua.d.ts +0 -0
- package/patch-lua.lua +10 -0
- package/property.d.ts +55 -0
- package/property.lua +374 -0
- package/utility/arrays.d.ts +4 -1
- package/utility/arrays.lua +10 -3
- package/utility/linked-set.d.ts +11 -2
- package/utility/linked-set.lua +5 -2
- package/utility/types.d.ts +1 -0
- package/core/mapbounds.d.ts +0 -8
- package/core/mapbounds.lua +0 -12
package/engine/internal/unit.lua
CHANGED
|
@@ -290,7 +290,6 @@ local function dispatch(event, idGetter, argsGetter)
|
|
|
290
290
|
return event[id]
|
|
291
291
|
end
|
|
292
292
|
if not initialized then
|
|
293
|
-
local invoke = Event.invoke
|
|
294
293
|
event:addListener(function(...)
|
|
295
294
|
local id = idGetter(...)
|
|
296
295
|
local dispatched = rawget(self, id)
|
|
@@ -328,7 +327,6 @@ local function dispatchAbility(event)
|
|
|
328
327
|
return event[id]
|
|
329
328
|
end
|
|
330
329
|
if not initialized then
|
|
331
|
-
local invoke = Event.invoke
|
|
332
330
|
event:addListener(function(unit, ability, ...)
|
|
333
331
|
local dispatched = rawget(self, ability.typeId)
|
|
334
332
|
if dispatched ~= nil then
|
|
@@ -564,17 +562,6 @@ local function retrieveAbility(unit, ability, abilityId)
|
|
|
564
562
|
____exports.Unit:of(unit)
|
|
565
563
|
)
|
|
566
564
|
end
|
|
567
|
-
if not unitAddAbility(unit, abilityId) then
|
|
568
|
-
if getUnitAbility(unit, abilityId) == ability then
|
|
569
|
-
return UnitAbility:of(
|
|
570
|
-
ability,
|
|
571
|
-
abilityId,
|
|
572
|
-
____exports.Unit:of(unit)
|
|
573
|
-
)
|
|
574
|
-
end
|
|
575
|
-
else
|
|
576
|
-
unitRemoveAbility(unit, abilityId)
|
|
577
|
-
end
|
|
578
565
|
for i = 0, unitInventorySize(unit) - 1 do
|
|
579
566
|
local item = unitItemInSlot(unit, i)
|
|
580
567
|
if getItemAbility(item, abilityId) == ability then
|
|
@@ -632,15 +619,15 @@ for ____, player in ipairs(Player.all) do
|
|
|
632
619
|
dummies[player] = dummy
|
|
633
620
|
end
|
|
634
621
|
local function delayHealthChecksCallback(unit)
|
|
635
|
-
local counter = (unit[
|
|
622
|
+
local counter = (unit[103] or 0) - 1
|
|
636
623
|
if counter ~= 0 then
|
|
637
|
-
unit[
|
|
624
|
+
unit[103] = counter
|
|
638
625
|
return
|
|
639
626
|
end
|
|
640
|
-
unit[
|
|
641
|
-
local healthBonus = unit[
|
|
627
|
+
unit[103] = nil
|
|
628
|
+
local healthBonus = unit[104]
|
|
642
629
|
if healthBonus ~= nil then
|
|
643
|
-
unit[
|
|
630
|
+
unit[104] = nil
|
|
644
631
|
local handle = unit.handle
|
|
645
632
|
BlzSetUnitMaxHP(
|
|
646
633
|
handle,
|
|
@@ -648,12 +635,17 @@ local function delayHealthChecksCallback(unit)
|
|
|
648
635
|
)
|
|
649
636
|
end
|
|
650
637
|
end
|
|
638
|
+
local nextSyncId = 1
|
|
639
|
+
local unitBySyncId = setmetatable({}, {__mode = "k"})
|
|
651
640
|
____exports.Unit = __TS__Class()
|
|
652
641
|
local Unit = ____exports.Unit
|
|
653
642
|
Unit.name = "Unit"
|
|
654
643
|
__TS__ClassExtends(Unit, Handle)
|
|
655
644
|
function Unit.prototype.____constructor(self, handle)
|
|
656
645
|
Handle.prototype.____constructor(self, handle)
|
|
646
|
+
local ____nextSyncId_0 = nextSyncId
|
|
647
|
+
nextSyncId = ____nextSyncId_0 + 1
|
|
648
|
+
self.syncId = ____nextSyncId_0
|
|
657
649
|
self._owner = Player:of(getOwningPlayer(handle))
|
|
658
650
|
assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
|
|
659
651
|
assert(unitAddAbility(handle, morphDetectAbilityId))
|
|
@@ -666,6 +658,7 @@ function Unit.prototype.____constructor(self, handle)
|
|
|
666
658
|
fourCC("Amrf")
|
|
667
659
|
))
|
|
668
660
|
end
|
|
661
|
+
unitBySyncId[self.syncId] = self
|
|
669
662
|
local ____ = self.abilities
|
|
670
663
|
end
|
|
671
664
|
function Unit.prototype.getEvent(self, event, collector)
|
|
@@ -706,6 +699,10 @@ function Unit.prototype.onDestroy(self)
|
|
|
706
699
|
if eventsToDestroy ~= nil then
|
|
707
700
|
forEach(eventsToDestroy, "destroy")
|
|
708
701
|
end
|
|
702
|
+
if getUnitAbilityLevel(handle, leaveDetectAbilityId) > 0 then
|
|
703
|
+
unitRemoveAbility(handle, leaveDetectAbilityId)
|
|
704
|
+
removeUnit(handle)
|
|
705
|
+
end
|
|
709
706
|
return Handle.prototype.onDestroy(self)
|
|
710
707
|
end
|
|
711
708
|
function Unit.prototype.addAttackHandler(self, condition, action)
|
|
@@ -747,8 +744,8 @@ function Unit.prototype.addModifier(self, property, modifier)
|
|
|
747
744
|
end}
|
|
748
745
|
end
|
|
749
746
|
function Unit.prototype.hasCombatClassification(self, combatClassification)
|
|
750
|
-
local
|
|
751
|
-
return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) &
|
|
747
|
+
local ____combatClassification_1 = combatClassification
|
|
748
|
+
return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
|
|
752
749
|
end
|
|
753
750
|
function Unit.prototype.addClassification(self, classification)
|
|
754
751
|
return unitAddType(self.handle, classification)
|
|
@@ -766,13 +763,13 @@ function Unit.prototype.isInvisibleTo(self, player)
|
|
|
766
763
|
return isUnitInvisible(self.handle, player.handle)
|
|
767
764
|
end
|
|
768
765
|
function Unit.prototype.isInRangeOf(self, x, y, range)
|
|
769
|
-
local
|
|
766
|
+
local ____temp_2
|
|
770
767
|
if type(x) == "number" then
|
|
771
|
-
|
|
768
|
+
____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
|
|
772
769
|
else
|
|
773
|
-
|
|
770
|
+
____temp_2 = isUnitInRange(self.handle, x.handle, y)
|
|
774
771
|
end
|
|
775
|
-
return
|
|
772
|
+
return ____temp_2
|
|
776
773
|
end
|
|
777
774
|
function Unit.prototype.isAllyOf(self, unit)
|
|
778
775
|
return isUnitAlly(
|
|
@@ -799,7 +796,7 @@ function Unit.prototype.queueAnimation(self, animation)
|
|
|
799
796
|
queueUnitAnimation(self.handle, animation)
|
|
800
797
|
end
|
|
801
798
|
function Unit.prototype.delayHealthChecks(self)
|
|
802
|
-
self[
|
|
799
|
+
self[103] = (self[103] or 0) + 1
|
|
803
800
|
Timer:run(delayHealthChecksCallback, self)
|
|
804
801
|
end
|
|
805
802
|
function Unit.prototype.setPosition(self, x, y)
|
|
@@ -816,14 +813,14 @@ function Unit.prototype.kill(self)
|
|
|
816
813
|
killUnit(self.handle)
|
|
817
814
|
end
|
|
818
815
|
function Unit.prototype.revive(self, x, y, doEffect)
|
|
819
|
-
local
|
|
820
|
-
local
|
|
821
|
-
local
|
|
822
|
-
if
|
|
823
|
-
|
|
816
|
+
local ____ReviveHero_5 = ReviveHero
|
|
817
|
+
local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
|
|
818
|
+
local ____doEffect_3 = doEffect
|
|
819
|
+
if ____doEffect_3 == nil then
|
|
820
|
+
____doEffect_3 = false
|
|
824
821
|
end
|
|
825
|
-
__TS__SparseArrayPush(
|
|
826
|
-
|
|
822
|
+
__TS__SparseArrayPush(____array_4, ____doEffect_3)
|
|
823
|
+
____ReviveHero_5(__TS__SparseArraySpread(____array_4))
|
|
827
824
|
end
|
|
828
825
|
function Unit.prototype.healTarget(self, target, amount)
|
|
829
826
|
if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
|
|
@@ -863,7 +860,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
|
|
|
863
860
|
return UnitDropItemSlot(self.handle, item.handle, slot)
|
|
864
861
|
end
|
|
865
862
|
function Unit.prototype.itemInSlot(self, slot)
|
|
866
|
-
return Item:of(
|
|
863
|
+
return Item:of(unitItemInSlot(self.handle, slot))
|
|
867
864
|
end
|
|
868
865
|
function Unit.prototype.addAbility(self, abilityId)
|
|
869
866
|
if unitAddAbility(self.handle, abilityId) then
|
|
@@ -993,18 +990,18 @@ function Unit.prototype.unpauseEx(self)
|
|
|
993
990
|
self:decrementStunCounter()
|
|
994
991
|
end
|
|
995
992
|
function Unit.prototype.incrementStunCounter(self)
|
|
996
|
-
local stunCounter = self[
|
|
997
|
-
if not self[
|
|
993
|
+
local stunCounter = self[102] or 0
|
|
994
|
+
if not self[101] or stunCounter >= 0 then
|
|
998
995
|
BlzPauseUnitEx(self.handle, true)
|
|
999
996
|
end
|
|
1000
|
-
self[
|
|
997
|
+
self[102] = stunCounter + 1
|
|
1001
998
|
end
|
|
1002
999
|
function Unit.prototype.decrementStunCounter(self)
|
|
1003
|
-
local stunCounter = self[
|
|
1004
|
-
if not self[
|
|
1000
|
+
local stunCounter = self[102] or 0
|
|
1001
|
+
if not self[101] or stunCounter >= 1 then
|
|
1005
1002
|
BlzPauseUnitEx(self.handle, false)
|
|
1006
1003
|
end
|
|
1007
|
-
self[
|
|
1004
|
+
self[102] = stunCounter - 1
|
|
1008
1005
|
end
|
|
1009
1006
|
function Unit.create(self, owner, id, x, y, facing, skinId)
|
|
1010
1007
|
local handle = skinId and BlzCreateUnitWithSkin(
|
|
@@ -1106,8 +1103,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
|
|
|
1106
1103
|
)
|
|
1107
1104
|
return targetCollection
|
|
1108
1105
|
end
|
|
1109
|
-
function Unit.getSelectionOf(self, player)
|
|
1110
|
-
|
|
1106
|
+
function Unit.getSelectionOf(self, player, target)
|
|
1107
|
+
if target == nil then
|
|
1108
|
+
target = {}
|
|
1109
|
+
end
|
|
1110
|
+
targetCollection = target
|
|
1111
1111
|
targetCollectionNextIndex = 1
|
|
1112
1112
|
GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
|
|
1113
1113
|
return targetCollection
|
|
@@ -1129,6 +1129,9 @@ end
|
|
|
1129
1129
|
function Unit.prototype.__tostring(self)
|
|
1130
1130
|
return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
|
|
1131
1131
|
end
|
|
1132
|
+
function Unit.getBySyncId(self, syncId)
|
|
1133
|
+
return unitBySyncId[syncId]
|
|
1134
|
+
end
|
|
1132
1135
|
__TS__SetDescriptor(
|
|
1133
1136
|
Unit.prototype,
|
|
1134
1137
|
"_deltas",
|
|
@@ -1386,17 +1389,17 @@ __TS__SetDescriptor(
|
|
|
1386
1389
|
"isTeamGlowVisible",
|
|
1387
1390
|
{
|
|
1388
1391
|
get = function(self)
|
|
1389
|
-
return not self[
|
|
1392
|
+
return not self[106]
|
|
1390
1393
|
end,
|
|
1391
1394
|
set = function(self, isTeamGlowVisible)
|
|
1392
1395
|
showUnitTeamGlow(self.handle, isTeamGlowVisible)
|
|
1393
|
-
local
|
|
1396
|
+
local ____temp_6
|
|
1394
1397
|
if not isTeamGlowVisible then
|
|
1395
|
-
|
|
1398
|
+
____temp_6 = true
|
|
1396
1399
|
else
|
|
1397
|
-
|
|
1400
|
+
____temp_6 = nil
|
|
1398
1401
|
end
|
|
1399
|
-
self[
|
|
1402
|
+
self[106] = ____temp_6
|
|
1400
1403
|
end
|
|
1401
1404
|
},
|
|
1402
1405
|
true
|
|
@@ -1406,7 +1409,7 @@ __TS__SetDescriptor(
|
|
|
1406
1409
|
"color",
|
|
1407
1410
|
{set = function(self, color)
|
|
1408
1411
|
setUnitColor(self.handle, color.handle)
|
|
1409
|
-
if self[
|
|
1412
|
+
if self[106] then
|
|
1410
1413
|
showUnitTeamGlow(self.handle, false)
|
|
1411
1414
|
end
|
|
1412
1415
|
end},
|
|
@@ -1430,14 +1433,14 @@ __TS__SetDescriptor(
|
|
|
1430
1433
|
"maxHealth",
|
|
1431
1434
|
{
|
|
1432
1435
|
get = function(self)
|
|
1433
|
-
return BlzGetUnitMaxHP(self.handle) - (self[
|
|
1436
|
+
return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
|
|
1434
1437
|
end,
|
|
1435
1438
|
set = function(self, maxHealth)
|
|
1436
|
-
if maxHealth < 1 and self[
|
|
1437
|
-
self[
|
|
1439
|
+
if maxHealth < 1 and self[103] ~= nil then
|
|
1440
|
+
self[104] = (self[104] or 0) + (1 - maxHealth)
|
|
1438
1441
|
maxHealth = 1
|
|
1439
1442
|
end
|
|
1440
|
-
BlzSetUnitMaxHP(self.handle, maxHealth + (self[
|
|
1443
|
+
BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
|
|
1441
1444
|
end
|
|
1442
1445
|
},
|
|
1443
1446
|
true
|
|
@@ -1479,10 +1482,10 @@ __TS__SetDescriptor(
|
|
|
1479
1482
|
"health",
|
|
1480
1483
|
{
|
|
1481
1484
|
get = function(self)
|
|
1482
|
-
return GetWidgetLife(self.handle) - (self[
|
|
1485
|
+
return GetWidgetLife(self.handle) - (self[105] or 0)
|
|
1483
1486
|
end,
|
|
1484
1487
|
set = function(self, health)
|
|
1485
|
-
SetWidgetLife(self.handle, health + (self[
|
|
1488
|
+
SetWidgetLife(self.handle, health + (self[105] or 0))
|
|
1486
1489
|
end
|
|
1487
1490
|
},
|
|
1488
1491
|
true
|
|
@@ -1693,17 +1696,17 @@ __TS__SetDescriptor(
|
|
|
1693
1696
|
set = function(self, isPaused)
|
|
1694
1697
|
local handle = self.handle
|
|
1695
1698
|
if isPaused and not IsUnitPaused(handle) then
|
|
1696
|
-
self[
|
|
1697
|
-
for _ = self[
|
|
1699
|
+
self[101] = true
|
|
1700
|
+
for _ = self[102] or 0, -1 do
|
|
1698
1701
|
BlzPauseUnitEx(handle, true)
|
|
1699
1702
|
end
|
|
1700
1703
|
PauseUnit(handle, true)
|
|
1701
1704
|
elseif not isPaused and IsUnitPaused(handle) then
|
|
1702
1705
|
PauseUnit(handle, false)
|
|
1703
|
-
for _ = self[
|
|
1706
|
+
for _ = self[102] or 0, -1 do
|
|
1704
1707
|
BlzPauseUnitEx(handle, false)
|
|
1705
1708
|
end
|
|
1706
|
-
self[
|
|
1709
|
+
self[101] = nil
|
|
1707
1710
|
end
|
|
1708
1711
|
end
|
|
1709
1712
|
},
|
|
@@ -2060,7 +2063,6 @@ Unit.onDecay = __TS__New(
|
|
|
2060
2063
|
Unit.onResurrect = __TS__New(
|
|
2061
2064
|
InitializingEvent,
|
|
2062
2065
|
function(event)
|
|
2063
|
-
local invoke = Event.invoke
|
|
2064
2066
|
local dead = setmetatable({}, {__mode = "k"})
|
|
2065
2067
|
____exports.Unit.deathEvent:addListener(function(unit)
|
|
2066
2068
|
dead[unit] = true
|
|
@@ -2076,10 +2078,15 @@ Unit.onResurrect = __TS__New(
|
|
|
2076
2078
|
Unit.morphEvent = __TS__New(
|
|
2077
2079
|
InitializingEvent,
|
|
2078
2080
|
function(event)
|
|
2081
|
+
local function ifNotLeft(unit)
|
|
2082
|
+
local handle = unit.handle
|
|
2083
|
+
if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
|
|
2084
|
+
invoke(event, unit)
|
|
2085
|
+
end
|
|
2086
|
+
end
|
|
2079
2087
|
____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
|
|
2080
2088
|
if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
|
|
2081
|
-
|
|
2082
|
-
Timer:run(Event.invoke, event, unit)
|
|
2089
|
+
Timer:run(ifNotLeft, unit)
|
|
2083
2090
|
end
|
|
2084
2091
|
end)
|
|
2085
2092
|
end
|
|
@@ -2117,27 +2124,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
|
|
|
2117
2124
|
Unit.onTargetCast = dispatchId(__TS__New(
|
|
2118
2125
|
InitializingEvent,
|
|
2119
2126
|
function(event)
|
|
2120
|
-
local invoke = Event.invoke
|
|
2121
2127
|
local function listener(unit, id)
|
|
2122
|
-
local
|
|
2128
|
+
local ____GetSpellTargetUnit_result_9
|
|
2123
2129
|
if GetSpellTargetUnit() then
|
|
2124
|
-
|
|
2130
|
+
____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
|
|
2125
2131
|
else
|
|
2126
|
-
local
|
|
2132
|
+
local ____GetSpellTargetItem_result_8
|
|
2127
2133
|
if GetSpellTargetItem() then
|
|
2128
|
-
|
|
2134
|
+
____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
|
|
2129
2135
|
else
|
|
2130
|
-
local
|
|
2136
|
+
local ____GetSpellTargetDestructable_result_7
|
|
2131
2137
|
if GetSpellTargetDestructable() then
|
|
2132
|
-
|
|
2138
|
+
____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
|
|
2133
2139
|
else
|
|
2134
|
-
|
|
2140
|
+
____GetSpellTargetDestructable_result_7 = nil
|
|
2135
2141
|
end
|
|
2136
|
-
|
|
2142
|
+
____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
|
|
2137
2143
|
end
|
|
2138
|
-
|
|
2144
|
+
____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
|
|
2139
2145
|
end
|
|
2140
|
-
local target =
|
|
2146
|
+
local target = ____GetSpellTargetUnit_result_9
|
|
2141
2147
|
if target then
|
|
2142
2148
|
invoke(event, unit, id, target)
|
|
2143
2149
|
end
|
|
@@ -2334,7 +2340,6 @@ Unit.autoAttackStartEvent = __TS__New(
|
|
|
2334
2340
|
)
|
|
2335
2341
|
Unit.onDamaging = (function()
|
|
2336
2342
|
local event = __TS__New(Event)
|
|
2337
|
-
local invoke = Event.invoke
|
|
2338
2343
|
local trigger = CreateTrigger()
|
|
2339
2344
|
TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
|
|
2340
2345
|
TriggerAddCondition(
|
|
@@ -2433,7 +2438,6 @@ end)()
|
|
|
2433
2438
|
Unit.onDamage = __TS__New(
|
|
2434
2439
|
InitializingEvent,
|
|
2435
2440
|
function(event)
|
|
2436
|
-
local invoke = Event.invoke
|
|
2437
2441
|
local trigger = CreateTrigger()
|
|
2438
2442
|
TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
|
|
2439
2443
|
TriggerAddCondition(
|
|
@@ -2449,6 +2453,7 @@ Unit.onDamage = __TS__New(
|
|
|
2449
2453
|
damageType = BlzGetEventDamageType(),
|
|
2450
2454
|
weaponType = BlzGetEventWeaponType(),
|
|
2451
2455
|
isAttack = BlzGetEventIsAttack(),
|
|
2456
|
+
originalAmount = GetEventDamage(),
|
|
2452
2457
|
preventDeath = damageEventPreventDeath
|
|
2453
2458
|
}
|
|
2454
2459
|
local evData = setmetatable(
|
|
@@ -2465,7 +2470,7 @@ Unit.onDamage = __TS__New(
|
|
|
2465
2470
|
invoke(event, source, target, evData)
|
|
2466
2471
|
if evData[0] ~= nil and target.health - evData.amount < 0.405 then
|
|
2467
2472
|
local bonusHealth = math.ceil(evData.amount)
|
|
2468
|
-
target[
|
|
2473
|
+
target[105] = (target[105] or 0) + bonusHealth
|
|
2469
2474
|
BlzSetUnitMaxHP(
|
|
2470
2475
|
target.handle,
|
|
2471
2476
|
BlzGetUnitMaxHP(target.handle) + bonusHealth
|
|
@@ -2479,7 +2484,7 @@ Unit.onDamage = __TS__New(
|
|
|
2479
2484
|
evData[0],
|
|
2480
2485
|
table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
|
|
2481
2486
|
)
|
|
2482
|
-
target[
|
|
2487
|
+
target[105] = (target[105] or 0) - bonusHealth
|
|
2483
2488
|
SetWidgetLife(
|
|
2484
2489
|
target.handle,
|
|
2485
2490
|
GetWidgetLife(target.handle) - bonusHealth
|
|
@@ -2499,7 +2504,7 @@ Unit.onDamage = __TS__New(
|
|
|
2499
2504
|
DestroyTrigger(trigger)
|
|
2500
2505
|
end
|
|
2501
2506
|
)
|
|
2502
|
-
Unit.
|
|
2507
|
+
Unit.itemDroppedEvent = __TS__New(
|
|
2503
2508
|
____exports.UnitTriggerEvent,
|
|
2504
2509
|
EVENT_PLAYER_UNIT_DROP_ITEM,
|
|
2505
2510
|
function()
|
|
@@ -2510,7 +2515,7 @@ Unit.onItemDrop = __TS__New(
|
|
|
2510
2515
|
return IgnoreEvent
|
|
2511
2516
|
end
|
|
2512
2517
|
)
|
|
2513
|
-
Unit.
|
|
2518
|
+
Unit.itemPickedUpEvent = __TS__New(
|
|
2514
2519
|
____exports.UnitTriggerEvent,
|
|
2515
2520
|
EVENT_PLAYER_UNIT_PICKUP_ITEM,
|
|
2516
2521
|
function()
|
|
@@ -2521,10 +2526,39 @@ Unit.onItemPickup = __TS__New(
|
|
|
2521
2526
|
return IgnoreEvent
|
|
2522
2527
|
end
|
|
2523
2528
|
)
|
|
2524
|
-
Unit.
|
|
2529
|
+
Unit.itemUsedEvent = __TS__New(
|
|
2525
2530
|
____exports.UnitTriggerEvent,
|
|
2526
2531
|
EVENT_PLAYER_UNIT_USE_ITEM,
|
|
2527
|
-
function() return ____exports.Unit:of(
|
|
2532
|
+
function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
|
|
2533
|
+
)
|
|
2534
|
+
Unit.itemStackedEvent = __TS__New(
|
|
2535
|
+
____exports.UnitTriggerEvent,
|
|
2536
|
+
EVENT_PLAYER_UNIT_STACK_ITEM,
|
|
2537
|
+
function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
|
|
2538
|
+
)
|
|
2539
|
+
__TS__ObjectDefineProperty(
|
|
2540
|
+
Unit,
|
|
2541
|
+
"itemMovedEvent",
|
|
2542
|
+
{get = function(self)
|
|
2543
|
+
local event = __TS__New(Event)
|
|
2544
|
+
for order = orderId("moveslot0"), orderId("moveslot5") do
|
|
2545
|
+
local slotTo = order - orderId("moveslot0")
|
|
2546
|
+
self.onTargetOrder[order]:addListener(function(unit, item)
|
|
2547
|
+
local slotFrom = unit.items:findSlot(item)
|
|
2548
|
+
if slotFrom ~= nil then
|
|
2549
|
+
invoke(
|
|
2550
|
+
event,
|
|
2551
|
+
unit,
|
|
2552
|
+
item,
|
|
2553
|
+
slotFrom,
|
|
2554
|
+
slotTo
|
|
2555
|
+
)
|
|
2556
|
+
end
|
|
2557
|
+
end)
|
|
2558
|
+
end
|
|
2559
|
+
rawset(self, "itemMovedEvent", event)
|
|
2560
|
+
return event
|
|
2561
|
+
end}
|
|
2528
2562
|
)
|
|
2529
2563
|
__TS__ObjectDefineProperty(
|
|
2530
2564
|
Unit,
|
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)
|
|
@@ -45,4 +45,16 @@ export declare class ItemType extends ObjectDataEntry<ItemTypeId> {
|
|
|
45
45
|
set tooltipText(tooltipText: string);
|
|
46
46
|
get tooltipExtendedText(): string;
|
|
47
47
|
set tooltipExtendedText(tooltipText: string);
|
|
48
|
+
get goldCost(): number;
|
|
49
|
+
set goldCost(goldCost: number);
|
|
50
|
+
get lumberCost(): number;
|
|
51
|
+
set lumberCost(lumberCost: number);
|
|
52
|
+
get activelyUsed(): boolean;
|
|
53
|
+
set activelyUsed(activelyUsed: boolean);
|
|
54
|
+
get perishable(): boolean;
|
|
55
|
+
set perishable(perishable: boolean);
|
|
56
|
+
get initialStackSize(): number;
|
|
57
|
+
set initialStackSize(initialStackSize: number);
|
|
58
|
+
get maximumStackSize(): number;
|
|
59
|
+
set maximumStackSize(maximumStackSize: number);
|
|
48
60
|
}
|
|
@@ -256,4 +256,82 @@ __TS__SetDescriptor(
|
|
|
256
256
|
},
|
|
257
257
|
true
|
|
258
258
|
)
|
|
259
|
+
__TS__SetDescriptor(
|
|
260
|
+
ItemType.prototype,
|
|
261
|
+
"goldCost",
|
|
262
|
+
{
|
|
263
|
+
get = function(self)
|
|
264
|
+
return self:getNumberField("igol")
|
|
265
|
+
end,
|
|
266
|
+
set = function(self, goldCost)
|
|
267
|
+
self:setNumberField("igol", goldCost)
|
|
268
|
+
end
|
|
269
|
+
},
|
|
270
|
+
true
|
|
271
|
+
)
|
|
272
|
+
__TS__SetDescriptor(
|
|
273
|
+
ItemType.prototype,
|
|
274
|
+
"lumberCost",
|
|
275
|
+
{
|
|
276
|
+
get = function(self)
|
|
277
|
+
return self:getNumberField("ilum")
|
|
278
|
+
end,
|
|
279
|
+
set = function(self, lumberCost)
|
|
280
|
+
self:setNumberField("ilum", lumberCost)
|
|
281
|
+
end
|
|
282
|
+
},
|
|
283
|
+
true
|
|
284
|
+
)
|
|
285
|
+
__TS__SetDescriptor(
|
|
286
|
+
ItemType.prototype,
|
|
287
|
+
"activelyUsed",
|
|
288
|
+
{
|
|
289
|
+
get = function(self)
|
|
290
|
+
return self:getBooleanField("iusa")
|
|
291
|
+
end,
|
|
292
|
+
set = function(self, activelyUsed)
|
|
293
|
+
self:setBooleanField("iusa", activelyUsed)
|
|
294
|
+
end
|
|
295
|
+
},
|
|
296
|
+
true
|
|
297
|
+
)
|
|
298
|
+
__TS__SetDescriptor(
|
|
299
|
+
ItemType.prototype,
|
|
300
|
+
"perishable",
|
|
301
|
+
{
|
|
302
|
+
get = function(self)
|
|
303
|
+
return self:getBooleanField("iper")
|
|
304
|
+
end,
|
|
305
|
+
set = function(self, perishable)
|
|
306
|
+
self:setBooleanField("iper", perishable)
|
|
307
|
+
end
|
|
308
|
+
},
|
|
309
|
+
true
|
|
310
|
+
)
|
|
311
|
+
__TS__SetDescriptor(
|
|
312
|
+
ItemType.prototype,
|
|
313
|
+
"initialStackSize",
|
|
314
|
+
{
|
|
315
|
+
get = function(self)
|
|
316
|
+
return self:getNumberField("iuse")
|
|
317
|
+
end,
|
|
318
|
+
set = function(self, initialStackSize)
|
|
319
|
+
self:setNumberField("iuse", initialStackSize)
|
|
320
|
+
end
|
|
321
|
+
},
|
|
322
|
+
true
|
|
323
|
+
)
|
|
324
|
+
__TS__SetDescriptor(
|
|
325
|
+
ItemType.prototype,
|
|
326
|
+
"maximumStackSize",
|
|
327
|
+
{
|
|
328
|
+
get = function(self)
|
|
329
|
+
return self:getNumberField("ista")
|
|
330
|
+
end,
|
|
331
|
+
set = function(self, maximumStackSize)
|
|
332
|
+
self:setNumberField("ista", maximumStackSize)
|
|
333
|
+
end
|
|
334
|
+
},
|
|
335
|
+
true
|
|
336
|
+
)
|
|
259
337
|
return ____exports
|