warscript 0.0.1-dev.4414935 → 0.0.1-dev.459629d
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/frame.d.ts +1 -0
- package/core/types/frame.lua +112 -37
- package/core/types/handle.lua +6 -9
- package/core/types/item.d.ts +1 -0
- package/core/types/item.lua +1 -0
- package/core/types/player.d.ts +1 -1
- package/core/types/player.lua +12 -11
- package/core/types/sound.lua +1 -1
- package/engine/behaviour/ability/damage.d.ts +3 -0
- package/engine/behaviour/ability/damage.lua +8 -2
- package/engine/behaviour/ability/emulate-impact.lua +5 -4
- package/engine/behaviour/ability.d.ts +9 -5
- package/engine/behaviour/ability.lua +29 -0
- package/engine/buff.d.ts +49 -17
- package/engine/buff.lua +241 -118
- package/engine/internal/ability.lua +15 -15
- package/engine/internal/item/fields.d.ts +12 -0
- package/engine/internal/item/fields.lua +33 -0
- package/engine/internal/item.d.ts +4 -5
- package/engine/internal/item.lua +37 -40
- package/engine/internal/object-data/attribute-bonus.lua +2 -2
- package/engine/internal/object-data/health-bonus.d.ts +2 -0
- package/engine/internal/object-data/health-bonus.lua +16 -0
- package/engine/internal/object-data/mana-bonus.d.ts +2 -0
- package/engine/internal/object-data/mana-bonus.lua +16 -0
- package/engine/internal/unit/bonus.d.ts +4 -0
- package/engine/internal/unit/bonus.lua +23 -3
- package/engine/internal/unit/range-event.d.ts +12 -0
- package/engine/internal/unit/range-event.lua +90 -0
- package/engine/internal/unit+bonus.lua +3 -3
- package/engine/internal/unit.d.ts +1 -1
- package/engine/internal/unit.lua +25 -38
- package/engine/local-client.d.ts +5 -0
- package/engine/local-client.lua +56 -1
- package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
- package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
- package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
- package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
- package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
- package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
- package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
- package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
- package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
- package/engine/object-data/entry/ability-type.d.ts +2 -0
- package/engine/object-data/entry/ability-type.lua +84 -4
- package/engine/object-data/entry/buff-type/applicable.lua +113 -109
- package/engine/object-field/ability.lua +2 -2
- package/engine/object-field/item.d.ts +22 -0
- package/engine/object-field/item.lua +118 -0
- package/engine/object-field.d.ts +1 -1
- package/engine/object-field.lua +9 -7
- package/engine/random.d.ts +1 -0
- package/engine/random.lua +8 -0
- package/engine/standard/fields/item.d.ts +4 -0
- package/engine/standard/fields/item.lua +6 -0
- package/engine/unit.d.ts +1 -0
- package/engine/unit.lua +1 -0
- package/lualib_bundle.lua +1 -1
- package/math.d.ts +2 -0
- package/math.lua +14 -0
- package/network.lua +25 -1
- package/objutil/object.lua +1 -1
- package/operation.d.ts +8 -1
- package/operation.lua +38 -18
- package/package.json +4 -4
- package/patch-lua.lua +15 -0
- package/utility/linked-map.d.ts +11 -2
- package/utility/linked-map.lua +41 -0
- package/utility/linked-set.d.ts +3 -1
- package/utility/linked-set.lua +23 -0
- package/utility/random.d.ts +102 -0
- package/utility/random.lua +273 -0
- package/utility/unordered-map.d.ts +27 -0
- package/utility/unordered-map.lua +99 -0
- /package/engine/internal/object-data/{armor-increase.d.ts → armor-bonus.d.ts} +0 -0
- /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
- /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
- /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
3
|
+
local ____exports = {}
|
|
4
|
+
local ____item = require("engine.internal.item")
|
|
5
|
+
local Item = ____item.Item
|
|
6
|
+
local ____item = require("engine.standard.fields.item")
|
|
7
|
+
local CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD = ____item.CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD
|
|
8
|
+
local IS_ACTIVELY_USED_ITEM_FIELD = ____item.IS_ACTIVELY_USED_ITEM_FIELD
|
|
9
|
+
__TS__ObjectDefineProperty(
|
|
10
|
+
Item.prototype,
|
|
11
|
+
"canBeSold",
|
|
12
|
+
{
|
|
13
|
+
get = function(self)
|
|
14
|
+
return CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD:getValue(self)
|
|
15
|
+
end,
|
|
16
|
+
set = function(self, value)
|
|
17
|
+
CAN_BE_SOLD_TO_MERCHANTS_ITEM_FIELD:setValue(self, value)
|
|
18
|
+
end
|
|
19
|
+
}
|
|
20
|
+
)
|
|
21
|
+
__TS__ObjectDefineProperty(
|
|
22
|
+
Item.prototype,
|
|
23
|
+
"isActivelyUsed",
|
|
24
|
+
{
|
|
25
|
+
get = function(self)
|
|
26
|
+
return IS_ACTIVELY_USED_ITEM_FIELD:getValue(self)
|
|
27
|
+
end,
|
|
28
|
+
set = function(self, value)
|
|
29
|
+
IS_ACTIVELY_USED_ITEM_FIELD:setValue(self, value)
|
|
30
|
+
end
|
|
31
|
+
}
|
|
32
|
+
)
|
|
33
|
+
return ____exports
|
|
@@ -8,10 +8,12 @@ import { AbilityTypeId } from "../object-data/entry/ability-type";
|
|
|
8
8
|
import type { ItemTypeId } from "../object-data/entry/item-type";
|
|
9
9
|
type DefenseType = 0 | 1 | 2 | 3 | 4 | 5;
|
|
10
10
|
declare const enum ItemPropertyKey {
|
|
11
|
-
ABILITIES = 100
|
|
11
|
+
ABILITIES = 100,
|
|
12
|
+
DEATH_TRIGGER = 101
|
|
12
13
|
}
|
|
13
14
|
export declare class Item extends Handle<jitem> {
|
|
14
15
|
private readonly [ItemPropertyKey.ABILITIES];
|
|
16
|
+
private readonly [ItemPropertyKey.DEATH_TRIGGER];
|
|
15
17
|
constructor(handle: jitem);
|
|
16
18
|
protected onDestroy(): HandleDestructor;
|
|
17
19
|
static create<T extends Item>(this: typeof Item & (new (handle: jitem) => T), id: number, x: number, y: number, skinId?: number): T;
|
|
@@ -32,8 +34,6 @@ export declare class Item extends Handle<jitem> {
|
|
|
32
34
|
get dropsOnDeath(): boolean;
|
|
33
35
|
set canBeDropped(canBeDropped: boolean);
|
|
34
36
|
get canBeDropped(): boolean;
|
|
35
|
-
set canBeSold(canBeSold: boolean);
|
|
36
|
-
get canBeSold(): boolean;
|
|
37
37
|
set perishes(perishes: boolean);
|
|
38
38
|
get perishes(): boolean;
|
|
39
39
|
set isPowerUp(isPowerUp: boolean);
|
|
@@ -42,8 +42,6 @@ export declare class Item extends Handle<jitem> {
|
|
|
42
42
|
get isDead(): boolean;
|
|
43
43
|
set isInvulnerable(isInvulnerable: boolean);
|
|
44
44
|
get isInvulnerable(): boolean;
|
|
45
|
-
set isActivelyUsed(isActivelyUsed: boolean);
|
|
46
|
-
get isActivelyUsed(): boolean;
|
|
47
45
|
set visible(v: boolean);
|
|
48
46
|
get visible(): boolean;
|
|
49
47
|
set level(v: number);
|
|
@@ -82,6 +80,7 @@ export declare class Item extends Handle<jitem> {
|
|
|
82
80
|
static getInRect(rect: ReadonlyRect): Item[];
|
|
83
81
|
static get onCreate(): Event<[Item]>;
|
|
84
82
|
static get destroyEvent(): Event<[Item]>;
|
|
83
|
+
static readonly deathEvent: Event<[Item]>;
|
|
85
84
|
static readonly chargesChangedEvent: Event<[Item]>;
|
|
86
85
|
}
|
|
87
86
|
export {};
|
package/engine/internal/item.lua
CHANGED
|
@@ -27,7 +27,13 @@ local ____add_2Ditem_2Dto_2Dslot = require("engine.internal.unit.add-item-to-slo
|
|
|
27
27
|
local SLOT_FILLER_ITEM_TYPE_ID = ____add_2Ditem_2Dto_2Dslot.SLOT_FILLER_ITEM_TYPE_ID
|
|
28
28
|
local ____vec2 = require("math.vec2")
|
|
29
29
|
local distance = ____vec2.distance
|
|
30
|
-
local
|
|
30
|
+
local ____timer = require("core.types.timer")
|
|
31
|
+
local Timer = ____timer.Timer
|
|
32
|
+
local createTrigger = CreateTrigger
|
|
33
|
+
local triggerAddCondition = TriggerAddCondition
|
|
34
|
+
local triggerRegisterDeathEvent = TriggerRegisterDeathEvent
|
|
35
|
+
local condition = Condition
|
|
36
|
+
local destroyTrigger = DestroyTrigger
|
|
31
37
|
local itemAddAbility = BlzItemAddAbility
|
|
32
38
|
local itemRemoveAbility = BlzItemRemoveAbility
|
|
33
39
|
local getItemAbility = BlzGetItemAbility
|
|
@@ -52,12 +58,15 @@ local unitUseItemPoint = UnitUseItemPoint
|
|
|
52
58
|
local unitUseItemTarget = UnitUseItemTarget
|
|
53
59
|
local setItemDropOnDeath = SetItemDropOnDeath
|
|
54
60
|
local setItemDroppable = SetItemDroppable
|
|
55
|
-
local setItemPawnable = SetItemPawnable
|
|
56
|
-
local isItemPawnable = IsItemPawnable
|
|
57
61
|
local getItemIntegerField = BlzGetItemIntegerField
|
|
58
62
|
local setItemBooleanField = BlzSetItemBooleanField
|
|
59
63
|
local getItemBooleanField = BlzGetItemBooleanField
|
|
64
|
+
local getTriggerWidget = GetTriggerWidget
|
|
65
|
+
local saveWidgetHandle = SaveWidgetHandle
|
|
66
|
+
local loadItemHandle = LoadItemHandle
|
|
60
67
|
local tableRemove = table.remove
|
|
68
|
+
local itemChargesChangeEvent = __TS__New(Event)
|
|
69
|
+
local itemDeathEvent = __TS__New(Event)
|
|
61
70
|
_G.SetItemCharges = function(whichItem, charges)
|
|
62
71
|
setItemCharges(whichItem, charges)
|
|
63
72
|
invoke(
|
|
@@ -137,6 +146,25 @@ local function collectIntoTargetRange()
|
|
|
137
146
|
targetCollectionNextIndex = targetCollectionNextIndex + 1
|
|
138
147
|
end
|
|
139
148
|
end
|
|
149
|
+
local hashtable = InitHashtable()
|
|
150
|
+
local deathTriggerCondition = condition(function()
|
|
151
|
+
saveWidgetHandle(
|
|
152
|
+
hashtable,
|
|
153
|
+
1,
|
|
154
|
+
1,
|
|
155
|
+
getTriggerWidget()
|
|
156
|
+
)
|
|
157
|
+
local item = ____exports.Item:of(loadItemHandle(hashtable, 1, 1))
|
|
158
|
+
if item ~= nil then
|
|
159
|
+
invoke(itemDeathEvent, item)
|
|
160
|
+
end
|
|
161
|
+
end)
|
|
162
|
+
itemDeathEvent:addListener(
|
|
163
|
+
999999,
|
|
164
|
+
function(item)
|
|
165
|
+
Timer:run(item, "destroy")
|
|
166
|
+
end
|
|
167
|
+
)
|
|
140
168
|
____exports.Item = __TS__Class()
|
|
141
169
|
local Item = ____exports.Item
|
|
142
170
|
Item.name = "Item"
|
|
@@ -144,6 +172,10 @@ __TS__ClassExtends(Item, Handle)
|
|
|
144
172
|
function Item.prototype.____constructor(self, handle)
|
|
145
173
|
Handle.prototype.____constructor(self, handle)
|
|
146
174
|
self[100] = doAbilityAction(handle, getItemAbilities, self)
|
|
175
|
+
local deathTrigger = createTrigger()
|
|
176
|
+
triggerRegisterDeathEvent(deathTrigger, handle)
|
|
177
|
+
triggerAddCondition(deathTrigger, deathTriggerCondition)
|
|
178
|
+
self[101] = deathTrigger
|
|
147
179
|
end
|
|
148
180
|
function Item.prototype.onDestroy(self)
|
|
149
181
|
local owner = self.owner
|
|
@@ -155,6 +187,7 @@ function Item.prototype.onDestroy(self)
|
|
|
155
187
|
abilities[i]:destroy()
|
|
156
188
|
end
|
|
157
189
|
removeItem(self.handle)
|
|
190
|
+
destroyTrigger(self[101])
|
|
158
191
|
return Handle.prototype.onDestroy(self)
|
|
159
192
|
end
|
|
160
193
|
function Item.create(self, id, x, y, skinId)
|
|
@@ -356,19 +389,6 @@ __TS__SetDescriptor(
|
|
|
356
389
|
},
|
|
357
390
|
true
|
|
358
391
|
)
|
|
359
|
-
__TS__SetDescriptor(
|
|
360
|
-
Item.prototype,
|
|
361
|
-
"canBeSold",
|
|
362
|
-
{
|
|
363
|
-
get = function(self)
|
|
364
|
-
return isItemPawnable(self.handle)
|
|
365
|
-
end,
|
|
366
|
-
set = function(self, canBeSold)
|
|
367
|
-
setItemPawnable(self.handle, canBeSold)
|
|
368
|
-
end
|
|
369
|
-
},
|
|
370
|
-
true
|
|
371
|
-
)
|
|
372
392
|
__TS__SetDescriptor(
|
|
373
393
|
Item.prototype,
|
|
374
394
|
"perishes",
|
|
@@ -427,30 +447,6 @@ __TS__SetDescriptor(
|
|
|
427
447
|
},
|
|
428
448
|
true
|
|
429
449
|
)
|
|
430
|
-
__TS__SetDescriptor(
|
|
431
|
-
Item.prototype,
|
|
432
|
-
"isActivelyUsed",
|
|
433
|
-
{
|
|
434
|
-
get = function(self)
|
|
435
|
-
return getItemBooleanField(self.handle, ITEM_BF_ACTIVELY_USED)
|
|
436
|
-
end,
|
|
437
|
-
set = function(self, isActivelyUsed)
|
|
438
|
-
local handle = self.handle
|
|
439
|
-
local powerUp = isItemPowerup(handle)
|
|
440
|
-
local perishes = getItemBooleanField(handle, ITEM_BF_PERISHABLE)
|
|
441
|
-
local dropsOnDeath = getItemBooleanField(handle, ITEM_BF_DROPPED_WHEN_CARRIER_DIES)
|
|
442
|
-
local canBeDropped = getItemBooleanField(handle, ITEM_BF_CAN_BE_DROPPED)
|
|
443
|
-
local canBeSold = isItemPawnable(handle)
|
|
444
|
-
setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, isActivelyUsed)
|
|
445
|
-
setItemPawnable(handle, canBeSold)
|
|
446
|
-
setItemDroppable(handle, canBeDropped)
|
|
447
|
-
setItemDropOnDeath(handle, dropsOnDeath)
|
|
448
|
-
setItemBooleanField(handle, ITEM_BF_PERISHABLE, perishes)
|
|
449
|
-
setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, powerUp)
|
|
450
|
-
end
|
|
451
|
-
},
|
|
452
|
-
true
|
|
453
|
-
)
|
|
454
450
|
__TS__SetDescriptor(
|
|
455
451
|
Item.prototype,
|
|
456
452
|
"visible",
|
|
@@ -672,6 +668,7 @@ __TS__ObjectDefineProperty(
|
|
|
672
668
|
return self.onDestroyEvent
|
|
673
669
|
end}
|
|
674
670
|
)
|
|
671
|
+
Item.deathEvent = itemDeathEvent
|
|
675
672
|
Item.chargesChangedEvent = itemChargesChangeEvent
|
|
676
673
|
local getManipulatedItem = GetManipulatedItem
|
|
677
674
|
local trigger = CreateTrigger()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
local ____exports = {}
|
|
2
|
-
local
|
|
3
|
-
local AttributeBonusAbilityType =
|
|
2
|
+
local ____attribute_2Dbonus = require("engine.object-data.entry.ability-type.attribute-bonus")
|
|
3
|
+
local AttributeBonusAbilityType = ____attribute_2Dbonus.AttributeBonusAbilityType
|
|
4
4
|
---
|
|
5
5
|
-- @internal For use by internal systems.
|
|
6
6
|
____exports.ATTRIBUTE_BONUS_DUMMY_ABILITY_TYPE_ID = compiletime(function()
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
local ____exports = {}
|
|
2
|
+
local ____health_2Dbonus = require("engine.object-data.entry.ability-type.health-bonus")
|
|
3
|
+
local HealthBonusAbilityType = ____health_2Dbonus.HealthBonusAbilityType
|
|
4
|
+
---
|
|
5
|
+
-- @internal For use by internal systems only.
|
|
6
|
+
____exports.HEALTH_BONUS_DUMMY_ABILITY_TYPE_ID = compiletime(function()
|
|
7
|
+
local abilityType = HealthBonusAbilityType:create()
|
|
8
|
+
abilityType.isInternal = true
|
|
9
|
+
abilityType.isButtonVisible = false
|
|
10
|
+
abilityType.healthBonus = 0
|
|
11
|
+
return abilityType.id
|
|
12
|
+
end)
|
|
13
|
+
---
|
|
14
|
+
-- @internal For use by internal systems only.
|
|
15
|
+
____exports.HEALTH_BONUS_DUMMY_ABILITY_FIELD = ABILITY_ILF_MAX_LIFE_GAINED
|
|
16
|
+
return ____exports
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
local ____exports = {}
|
|
2
|
+
local ____mana_2Dbonus = require("engine.object-data.entry.ability-type.mana-bonus")
|
|
3
|
+
local ManaBonusAbilityType = ____mana_2Dbonus.ManaBonusAbilityType
|
|
4
|
+
---
|
|
5
|
+
-- @internal For use by internal systems only.
|
|
6
|
+
____exports.MANA_BONUS_DUMMY_ABILITY_TYPE_ID = compiletime(function()
|
|
7
|
+
local abilityType = ManaBonusAbilityType:create()
|
|
8
|
+
abilityType.isInternal = true
|
|
9
|
+
abilityType.isButtonVisible = false
|
|
10
|
+
abilityType.manaBonus = 0
|
|
11
|
+
return abilityType.id
|
|
12
|
+
end)
|
|
13
|
+
---
|
|
14
|
+
-- @internal For use by internal systems only.
|
|
15
|
+
____exports.MANA_BONUS_DUMMY_ABILITY_FIELD = ABILITY_ILF_MAX_MANA_GAINED
|
|
16
|
+
return ____exports
|
|
@@ -5,6 +5,8 @@ export type UnitBonusId<Brand extends string = any> = number & {
|
|
|
5
5
|
readonly __unitBonusId: unique symbol;
|
|
6
6
|
readonly __unitBonusIdBrand: Brand;
|
|
7
7
|
};
|
|
8
|
+
export type UnitMaxHealthBonusId = UnitBonusId<"maxHealth">;
|
|
9
|
+
export type UnitMaxManaBonusId = UnitBonusId<"maxMana">;
|
|
8
10
|
export type UnitArmorBonusId = UnitBonusId<"armor">;
|
|
9
11
|
export type UnitAttackSpeedFactorBonusId = UnitBonusId<"attackSpeedFactor">;
|
|
10
12
|
export type UnitMovementSpeedFactorBonusId = UnitBonusId<"movementSpeedFactor">;
|
|
@@ -30,6 +32,8 @@ export type UnitBonusType<Id extends UnitBonusId = UnitBonusId> = ({
|
|
|
30
32
|
readonly __unitBonusTypeId?: Id;
|
|
31
33
|
};
|
|
32
34
|
export declare namespace UnitBonusType {
|
|
35
|
+
const HEALTH: UnitBonusType<UnitMaxHealthBonusId>;
|
|
36
|
+
const MANA: UnitBonusType<UnitMaxManaBonusId>;
|
|
33
37
|
const ARMOR: UnitBonusType<UnitArmorBonusId>;
|
|
34
38
|
const ATTACK_SPEED_FACTOR: UnitBonusType<UnitAttackSpeedFactorBonusId>;
|
|
35
39
|
const MOVEMENT_SPEED_FACTOR: UnitBonusType<UnitAttackSpeedFactorBonusId>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
local ____exports = {}
|
|
2
2
|
local ____unit = require("engine.internal.unit")
|
|
3
3
|
local Unit = ____unit.Unit
|
|
4
|
-
local
|
|
5
|
-
local ARMOR_BONUS_DUMMY_ABILITY_FIELD =
|
|
6
|
-
local ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID =
|
|
4
|
+
local ____armor_2Dbonus = require("engine.internal.object-data.armor-bonus")
|
|
5
|
+
local ARMOR_BONUS_DUMMY_ABILITY_FIELD = ____armor_2Dbonus.ARMOR_BONUS_DUMMY_ABILITY_FIELD
|
|
6
|
+
local ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID = ____armor_2Dbonus.ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID
|
|
7
7
|
local ____utility = require("engine.internal.utility")
|
|
8
8
|
local addInternalAbility = ____utility.addInternalAbility
|
|
9
9
|
local ____arrays = require("utility.arrays")
|
|
@@ -24,6 +24,12 @@ local MOVEMENT_SPEED_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID = ____movement_2Dspee
|
|
|
24
24
|
local ____evasion_2Dprobability = require("engine.internal.object-data.evasion-probability")
|
|
25
25
|
local EVASION_PROBABILITY_ABILITY_FIELD = ____evasion_2Dprobability.EVASION_PROBABILITY_ABILITY_FIELD
|
|
26
26
|
local EVASION_PROBABILITY_DUMMY_ABILITY_TYPE_ID = ____evasion_2Dprobability.EVASION_PROBABILITY_DUMMY_ABILITY_TYPE_ID
|
|
27
|
+
local ____health_2Dbonus = require("engine.internal.object-data.health-bonus")
|
|
28
|
+
local HEALTH_BONUS_DUMMY_ABILITY_FIELD = ____health_2Dbonus.HEALTH_BONUS_DUMMY_ABILITY_FIELD
|
|
29
|
+
local HEALTH_BONUS_DUMMY_ABILITY_TYPE_ID = ____health_2Dbonus.HEALTH_BONUS_DUMMY_ABILITY_TYPE_ID
|
|
30
|
+
local ____mana_2Dbonus = require("engine.internal.object-data.mana-bonus")
|
|
31
|
+
local MANA_BONUS_DUMMY_ABILITY_FIELD = ____mana_2Dbonus.MANA_BONUS_DUMMY_ABILITY_FIELD
|
|
32
|
+
local MANA_BONUS_DUMMY_ABILITY_TYPE_ID = ____mana_2Dbonus.MANA_BONUS_DUMMY_ABILITY_TYPE_ID
|
|
27
33
|
local ____mana_2Dregeneration_2Drate_2Dincrease_2Dfactor = require("engine.internal.object-data.mana-regeneration-rate-increase-factor")
|
|
28
34
|
local MANA_REGENERATION_RATE_INCREASE_FACTOR_ABILITY_FIELD = ____mana_2Dregeneration_2Drate_2Dincrease_2Dfactor.MANA_REGENERATION_RATE_INCREASE_FACTOR_ABILITY_FIELD
|
|
29
35
|
local MANA_REGENERATION_RATE_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID = ____mana_2Dregeneration_2Drate_2Dincrease_2Dfactor.MANA_REGENERATION_RATE_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID
|
|
@@ -39,6 +45,20 @@ end
|
|
|
39
45
|
____exports.UnitBonusType = {}
|
|
40
46
|
local UnitBonusType = ____exports.UnitBonusType
|
|
41
47
|
do
|
|
48
|
+
UnitBonusType.HEALTH = {
|
|
49
|
+
abilityTypeId = HEALTH_BONUS_DUMMY_ABILITY_TYPE_ID,
|
|
50
|
+
field = HEALTH_BONUS_DUMMY_ABILITY_FIELD,
|
|
51
|
+
integer = true,
|
|
52
|
+
reduce = sum,
|
|
53
|
+
initialValue = 0
|
|
54
|
+
}
|
|
55
|
+
UnitBonusType.MANA = {
|
|
56
|
+
abilityTypeId = MANA_BONUS_DUMMY_ABILITY_TYPE_ID,
|
|
57
|
+
field = MANA_BONUS_DUMMY_ABILITY_FIELD,
|
|
58
|
+
integer = true,
|
|
59
|
+
reduce = sum,
|
|
60
|
+
initialValue = 0
|
|
61
|
+
}
|
|
42
62
|
UnitBonusType.ARMOR = {
|
|
43
63
|
abilityTypeId = ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID,
|
|
44
64
|
field = ARMOR_BONUS_DUMMY_ABILITY_FIELD,
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** @noSelfInFile */
|
|
2
|
+
import { Event } from "../../../event";
|
|
3
|
+
declare module "../unit" {
|
|
4
|
+
interface Unit {
|
|
5
|
+
readonly unitInRangeEvent: Record<number, Event<[unit: Unit, range: number, unitInRange: Unit]>>;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
declare module "../unit" {
|
|
9
|
+
interface Unit {
|
|
10
|
+
readonly unitOutOfRangeEvent: Record<number, Event<[unit: Unit, range: number, unitOutOfRange: Unit]>>;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__New = ____lualib.__TS__New
|
|
3
|
+
local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
4
|
+
local ____exports = {}
|
|
5
|
+
local ____event = require("event")
|
|
6
|
+
local Event = ____event.Event
|
|
7
|
+
local InitializingEvent = ____event.InitializingEvent
|
|
8
|
+
local TriggerEvent = ____event.TriggerEvent
|
|
9
|
+
local ____unit = require("engine.internal.unit")
|
|
10
|
+
local Unit = ____unit.Unit
|
|
11
|
+
local ____timer = require("core.types.timer")
|
|
12
|
+
local Timer = ____timer.Timer
|
|
13
|
+
local ____attributes = require("attributes")
|
|
14
|
+
local attribute = ____attributes.attribute
|
|
15
|
+
local ____linked_2Dmap = require("utility.linked-map")
|
|
16
|
+
local mutableLinkedMap = ____linked_2Dmap.mutableLinkedMap
|
|
17
|
+
local ____linked_2Dset = require("utility.linked-set")
|
|
18
|
+
local LinkedSet = ____linked_2Dset.LinkedSet
|
|
19
|
+
local mutableLinkedSet = ____linked_2Dset.mutableLinkedSet
|
|
20
|
+
local getTriggerUnit = GetTriggerUnit
|
|
21
|
+
local triggerRegisterUnitInRange = TriggerRegisterUnitInRange
|
|
22
|
+
local eventInvoke = Event.invoke
|
|
23
|
+
__TS__ObjectDefineProperty(
|
|
24
|
+
Unit.prototype,
|
|
25
|
+
"unitInRangeEvent",
|
|
26
|
+
{get = function(self)
|
|
27
|
+
local unit = self
|
|
28
|
+
local handle = self.handle
|
|
29
|
+
local unitInRangeEvent = setmetatable(
|
|
30
|
+
{},
|
|
31
|
+
{__index = function(self, value)
|
|
32
|
+
local event = __TS__New(
|
|
33
|
+
TriggerEvent,
|
|
34
|
+
function(trigger)
|
|
35
|
+
triggerRegisterUnitInRange(trigger, handle, value, nil)
|
|
36
|
+
end,
|
|
37
|
+
function() return unit, value, Unit:of(getTriggerUnit()) end
|
|
38
|
+
)
|
|
39
|
+
rawset(self, value, event)
|
|
40
|
+
return event
|
|
41
|
+
end}
|
|
42
|
+
)
|
|
43
|
+
rawset(self, "unitInRangeEvent", unitInRangeEvent)
|
|
44
|
+
return unitInRangeEvent
|
|
45
|
+
end}
|
|
46
|
+
)
|
|
47
|
+
local units = __TS__New(LinkedSet)
|
|
48
|
+
local unitsInRangeByRangeAttribute = attribute()
|
|
49
|
+
local function registerUnitOfRangeEvent(unit, range, unitInRange)
|
|
50
|
+
units:add(unit)
|
|
51
|
+
unit:getOrPut(unitsInRangeByRangeAttribute, mutableLinkedMap):getOrPut(range, mutableLinkedSet):add(unitInRange)
|
|
52
|
+
end
|
|
53
|
+
__TS__ObjectDefineProperty(
|
|
54
|
+
Unit.prototype,
|
|
55
|
+
"unitOutOfRangeEvent",
|
|
56
|
+
{get = function(self)
|
|
57
|
+
local unit = self
|
|
58
|
+
local unitOutOfRangeEvent = setmetatable(
|
|
59
|
+
{},
|
|
60
|
+
{__index = function(self, value)
|
|
61
|
+
local event = __TS__New(
|
|
62
|
+
InitializingEvent,
|
|
63
|
+
function()
|
|
64
|
+
unit.unitInRangeEvent[value]:addListener(999999, registerUnitOfRangeEvent)
|
|
65
|
+
end
|
|
66
|
+
)
|
|
67
|
+
rawset(self, value, event)
|
|
68
|
+
return event
|
|
69
|
+
end}
|
|
70
|
+
)
|
|
71
|
+
rawset(self, "unitOutOfRangeEvent", unitOutOfRangeEvent)
|
|
72
|
+
return unitOutOfRangeEvent
|
|
73
|
+
end}
|
|
74
|
+
)
|
|
75
|
+
Timer.onPeriod[1]:addListener(function()
|
|
76
|
+
for unit in pairs(units) do
|
|
77
|
+
local unitsInRangeByRange = unit[unitsInRangeByRangeAttribute]
|
|
78
|
+
if unitsInRangeByRange ~= nil then
|
|
79
|
+
for range, unitsInRange in pairs(unitsInRangeByRange) do
|
|
80
|
+
for unitInRange in pairs(unitsInRange) do
|
|
81
|
+
if unit:getDistanceTo(unitInRange) > range then
|
|
82
|
+
unitsInRange:remove(unitInRange)
|
|
83
|
+
eventInvoke(unit.unitOutOfRangeEvent[range], unit, range, unitInRange)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end)
|
|
90
|
+
return ____exports
|
|
@@ -3,9 +3,9 @@ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
|
3
3
|
local ____exports = {}
|
|
4
4
|
local ____unit = require("engine.internal.unit")
|
|
5
5
|
local Unit = ____unit.Unit
|
|
6
|
-
local
|
|
7
|
-
local ARMOR_BONUS_DUMMY_ABILITY_FIELD =
|
|
8
|
-
local ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID =
|
|
6
|
+
local ____armor_2Dbonus = require("engine.internal.object-data.armor-bonus")
|
|
7
|
+
local ARMOR_BONUS_DUMMY_ABILITY_FIELD = ____armor_2Dbonus.ARMOR_BONUS_DUMMY_ABILITY_FIELD
|
|
8
|
+
local ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID = ____armor_2Dbonus.ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID
|
|
9
9
|
local getUnitAbility = BlzGetUnitAbility
|
|
10
10
|
local setAbilityRealLevelField = BlzSetAbilityRealLevelField
|
|
11
11
|
local unitAddAbility = UnitAddAbility
|
|
@@ -139,6 +139,7 @@ export declare class Unit extends Handle<junit> {
|
|
|
139
139
|
private _fields?;
|
|
140
140
|
private getEvent;
|
|
141
141
|
constructor(handle: junit);
|
|
142
|
+
private saveData;
|
|
142
143
|
protected onDestroy(): HandleDestructor;
|
|
143
144
|
addAttackHandler(condition: AttackHandlerCondition, action: AttackHandlerAction): AttackHandler;
|
|
144
145
|
removeAttackHandler(handler: AttackHandler): boolean;
|
|
@@ -291,7 +292,6 @@ export declare class Unit extends Handle<junit> {
|
|
|
291
292
|
set waygateDestination(v: Vec2);
|
|
292
293
|
get waygateDestination(): Vec2;
|
|
293
294
|
get abilities(): ReadonlyArray<UnitAbility>;
|
|
294
|
-
get onUnitInRange(): Record<number, Event<[Unit]>>;
|
|
295
295
|
get onManaEqual(): Record<number, Event<[Unit, number]>>;
|
|
296
296
|
get manaEvent(): Record<Operator, Record<number, Event<[Unit]>>>;
|
|
297
297
|
get targetAcquiredEvent(): Event;
|
package/engine/internal/unit.lua
CHANGED
|
@@ -385,12 +385,14 @@ local modifiers = {
|
|
|
385
385
|
if UnitAddAbility(unit, armorBonusAbilityId) then
|
|
386
386
|
assert(
|
|
387
387
|
UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId),
|
|
388
|
-
"armor bonus ability must be made permanent"
|
|
388
|
+
"armor bonus ability must be made permanent",
|
|
389
|
+
unit
|
|
389
390
|
)
|
|
390
391
|
end
|
|
391
392
|
local ability = assert(
|
|
392
393
|
BlzGetUnitAbility(unit, armorBonusAbilityId),
|
|
393
|
-
"armor bonus ability must be existing"
|
|
394
|
+
"armor bonus ability must be existing",
|
|
395
|
+
unit
|
|
394
396
|
)
|
|
395
397
|
assert(
|
|
396
398
|
BlzSetAbilityRealLevelField(
|
|
@@ -399,7 +401,8 @@ local modifiers = {
|
|
|
399
401
|
0,
|
|
400
402
|
BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
|
|
401
403
|
),
|
|
402
|
-
"armor bonus ability field must be set"
|
|
404
|
+
"armor bonus ability field must be set",
|
|
405
|
+
unit
|
|
403
406
|
)
|
|
404
407
|
end
|
|
405
408
|
}
|
|
@@ -662,7 +665,8 @@ for ____, player in ipairs(Player.all) do
|
|
|
662
665
|
0,
|
|
663
666
|
270
|
|
664
667
|
),
|
|
665
|
-
"dummy must be created"
|
|
668
|
+
"dummy must be created",
|
|
669
|
+
player
|
|
666
670
|
)
|
|
667
671
|
ShowUnit(dummy, false)
|
|
668
672
|
dummies[player] = dummy
|
|
@@ -708,11 +712,13 @@ function Unit.prototype.____constructor(self, handle)
|
|
|
708
712
|
self._owner = Player:of(getOwningPlayer(handle))
|
|
709
713
|
assert(
|
|
710
714
|
unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId),
|
|
711
|
-
"leave detection ability must be added"
|
|
715
|
+
"leave detection ability must be added",
|
|
716
|
+
self
|
|
712
717
|
)
|
|
713
718
|
assert(
|
|
714
719
|
unitAddAbility(handle, morphDetectAbilityId),
|
|
715
|
-
"morph detection ability must be added"
|
|
720
|
+
"morph detection ability must be added",
|
|
721
|
+
self
|
|
716
722
|
)
|
|
717
723
|
if unitAddAbility(
|
|
718
724
|
handle,
|
|
@@ -723,7 +729,8 @@ function Unit.prototype.____constructor(self, handle)
|
|
|
723
729
|
handle,
|
|
724
730
|
fourCC("Amrf")
|
|
725
731
|
),
|
|
726
|
-
"fly ability must be removed after addition"
|
|
732
|
+
"fly ability must be removed after addition",
|
|
733
|
+
self
|
|
727
734
|
)
|
|
728
735
|
end
|
|
729
736
|
unitBySyncId[self.syncId] = self
|
|
@@ -745,13 +752,15 @@ function Unit.prototype.getEvent(self, jevent, collector)
|
|
|
745
752
|
end
|
|
746
753
|
return event
|
|
747
754
|
end
|
|
755
|
+
function Unit.prototype.saveData(self)
|
|
756
|
+
local handle = self.handle
|
|
757
|
+
self[108] = self[108] or getUnitX(handle)
|
|
758
|
+
self[109] = self[109] or getUnitY(handle)
|
|
759
|
+
self._owner = self._owner or Player:of(getOwningPlayer(handle))
|
|
760
|
+
end
|
|
748
761
|
function Unit.prototype.onDestroy(self)
|
|
749
762
|
local handle = self.handle
|
|
750
|
-
self
|
|
751
|
-
self[109] = getUnitY(handle)
|
|
752
|
-
if not self._owner then
|
|
753
|
-
self._owner = Player:of(getOwningPlayer(handle))
|
|
754
|
-
end
|
|
763
|
+
self:saveData()
|
|
755
764
|
local abilities = self.abilities
|
|
756
765
|
for ____, ability in ipairs(abilities) do
|
|
757
766
|
ability:destroy()
|
|
@@ -789,7 +798,8 @@ function Unit.prototype.addAttackHandler(self, condition, action)
|
|
|
789
798
|
local handle = self.handle
|
|
790
799
|
assert(
|
|
791
800
|
unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId),
|
|
792
|
-
"attack handler ability must be added"
|
|
801
|
+
"attack handler ability must be added",
|
|
802
|
+
self
|
|
793
803
|
)
|
|
794
804
|
end
|
|
795
805
|
return handler
|
|
@@ -1979,30 +1989,6 @@ __TS__SetDescriptor(
|
|
|
1979
1989
|
end},
|
|
1980
1990
|
true
|
|
1981
1991
|
)
|
|
1982
|
-
__TS__SetDescriptor(
|
|
1983
|
-
Unit.prototype,
|
|
1984
|
-
"onUnitInRange",
|
|
1985
|
-
{get = function(self)
|
|
1986
|
-
local handle = self.handle
|
|
1987
|
-
local onUnitInRange = setmetatable(
|
|
1988
|
-
{},
|
|
1989
|
-
{__index = function(self, value)
|
|
1990
|
-
local event = __TS__New(
|
|
1991
|
-
TriggerEvent,
|
|
1992
|
-
function(trigger)
|
|
1993
|
-
TriggerRegisterUnitInRangeSimple(trigger, value, handle)
|
|
1994
|
-
end,
|
|
1995
|
-
function() return ____exports.Unit:of(handle) end
|
|
1996
|
-
)
|
|
1997
|
-
rawset(self, value, event)
|
|
1998
|
-
return event
|
|
1999
|
-
end}
|
|
2000
|
-
)
|
|
2001
|
-
rawset(self, "onUnitInRange", onUnitInRange)
|
|
2002
|
-
return onUnitInRange
|
|
2003
|
-
end},
|
|
2004
|
-
true
|
|
2005
|
-
)
|
|
2006
1992
|
__TS__SetDescriptor(
|
|
2007
1993
|
Unit.prototype,
|
|
2008
1994
|
"onManaEqual",
|
|
@@ -2801,7 +2787,8 @@ Unit.synchronize = synchronizer(
|
|
|
2801
2787
|
return
|
|
2802
2788
|
end
|
|
2803
2789
|
end
|
|
2804
|
-
unit:
|
|
2790
|
+
unit:saveData()
|
|
2791
|
+
Timer:run(unit, "destroy")
|
|
2805
2792
|
end)
|
|
2806
2793
|
end
|
|
2807
2794
|
end)(Unit)
|
package/engine/local-client.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export declare class LocalClient {
|
|
|
12
12
|
static get isHD(): boolean;
|
|
13
13
|
static get graphicsMode(): GraphicsMode;
|
|
14
14
|
static get isActive(): boolean;
|
|
15
|
+
static get isMinimized(): boolean;
|
|
15
16
|
static pingMinimap(x: number, y: number, duration: number, ...parameters: [] | [red: number, green: number, blue: number, flashy?: boolean] | [color: Color, flashy?: boolean]): void;
|
|
16
17
|
static get mouseFocusUnit(): Async<Unit> | undefined;
|
|
17
18
|
static get mainSelectedUnit(): Async<Unit> | undefined;
|
|
@@ -19,5 +20,9 @@ export declare class LocalClient {
|
|
|
19
20
|
previousMainSelectedUnit: Unit | undefined,
|
|
20
21
|
newMainSelectedUnit: Unit | undefined
|
|
21
22
|
]>;
|
|
23
|
+
static get isInTargetingMode(): boolean;
|
|
24
|
+
static readonly targetingModeEnterEvent: Event<[]>;
|
|
25
|
+
static readonly targetingModeLeaveEvent: Event<[]>;
|
|
26
|
+
static readonly targetingModeStateChangeEvent: Event<[]>;
|
|
22
27
|
static readonly onDisconnect: TriggerEvent<[]>;
|
|
23
28
|
}
|