warscript 0.0.1-dev.7411206 → 0.0.1-dev.7821093

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/attributes.d.ts +0 -1
  2. package/binaryreader.d.ts +1 -0
  3. package/binaryreader.lua +3 -0
  4. package/core/types/effect.d.ts +13 -3
  5. package/core/types/effect.lua +116 -17
  6. package/core/types/frame.d.ts +8 -1
  7. package/core/types/frame.lua +93 -1
  8. package/core/types/group.d.ts +0 -1
  9. package/core/types/image.d.ts +0 -1
  10. package/core/types/missile.d.ts +2 -2
  11. package/core/types/missile.lua +8 -2
  12. package/core/types/unit.lua +8 -0
  13. package/core/util.d.ts +1 -1
  14. package/core/util.lua +12 -0
  15. package/decl/index.d.ts +1 -0
  16. package/engine/ability.d.ts +1 -1
  17. package/engine/behavior.d.ts +10 -10
  18. package/engine/behavior.lua +6 -6
  19. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  20. package/engine/behaviour/ability/always-enabled.lua +31 -0
  21. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  22. package/engine/behaviour/ability/apply-buff.lua +32 -0
  23. package/engine/behaviour/ability/apply-unit-behavior.d.ts +6 -1
  24. package/engine/behaviour/ability/damage.d.ts +33 -11
  25. package/engine/behaviour/ability/damage.lua +89 -31
  26. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  27. package/engine/behaviour/ability/emulate-impact.lua +28 -0
  28. package/engine/behaviour/ability/heal.d.ts +33 -6
  29. package/engine/behaviour/ability/heal.lua +89 -10
  30. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  31. package/engine/behaviour/ability/instant-impact.lua +4 -15
  32. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  33. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  34. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  35. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  36. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  37. package/engine/behaviour/ability/restore-mana.lua +29 -0
  38. package/engine/behaviour/ability.d.ts +22 -3
  39. package/engine/behaviour/ability.lua +134 -13
  40. package/engine/behaviour/unit/stun-immunity.d.ts +0 -1
  41. package/engine/behaviour/unit.d.ts +8 -2
  42. package/engine/behaviour/unit.lua +27 -0
  43. package/engine/buff.d.ts +73 -21
  44. package/engine/buff.lua +297 -91
  45. package/engine/game-map.d.ts +7 -0
  46. package/engine/game-map.lua +32 -0
  47. package/engine/internal/ability.d.ts +16 -13
  48. package/engine/internal/ability.lua +80 -76
  49. package/engine/internal/item/ability.lua +106 -0
  50. package/engine/internal/item+owner.lua +2 -2
  51. package/engine/internal/item.d.ts +2 -2
  52. package/engine/internal/item.lua +56 -25
  53. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  54. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  55. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  56. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  57. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  58. package/engine/internal/object-data/evasion-probability.lua +16 -0
  59. package/engine/internal/unit/ability.d.ts +10 -1
  60. package/engine/internal/unit/ability.lua +36 -14
  61. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  62. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  63. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  64. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  65. package/engine/internal/unit/bonus.d.ts +11 -8
  66. package/engine/internal/unit/bonus.lua +23 -1
  67. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  68. package/engine/internal/unit/ignore-events-items.lua +5 -0
  69. package/engine/internal/unit/item.d.ts +24 -0
  70. package/engine/internal/unit/item.lua +78 -0
  71. package/engine/internal/unit/main-selected.d.ts +13 -0
  72. package/engine/internal/unit/main-selected.lua +51 -0
  73. package/engine/internal/unit+ability.lua +2 -2
  74. package/engine/internal/unit+transport.lua +4 -10
  75. package/engine/internal/unit-missile-launch.lua +25 -6
  76. package/engine/internal/unit.d.ts +59 -16
  77. package/engine/internal/unit.lua +373 -132
  78. package/engine/internal/utility.lua +12 -0
  79. package/engine/lightning.d.ts +8 -2
  80. package/engine/lightning.lua +27 -2
  81. package/engine/local-client.d.ts +7 -2
  82. package/engine/local-client.lua +82 -0
  83. package/engine/object-data/auxiliary/attachment-preset.d.ts +0 -1
  84. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  85. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  86. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  87. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  88. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  89. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  90. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  91. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  92. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  93. package/engine/object-data/entry/ability-type.d.ts +0 -1
  94. package/engine/object-data/entry/ability-type.lua +8 -12
  95. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  96. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  97. package/engine/object-data/entry/buff-type.d.ts +0 -1
  98. package/engine/object-data/entry/destructible-type.d.ts +0 -1
  99. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  100. package/engine/object-data/entry/item-type.d.ts +14 -1
  101. package/engine/object-data/entry/item-type.lua +91 -0
  102. package/engine/object-data/entry/lightning-type.d.ts +0 -1
  103. package/engine/object-data/entry/unit-type.d.ts +21 -2
  104. package/engine/object-data/entry/unit-type.lua +223 -49
  105. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  106. package/engine/object-data/entry/upgrade.d.ts +0 -1
  107. package/engine/object-data/entry.d.ts +2 -3
  108. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  109. package/engine/object-field/ability.d.ts +26 -3
  110. package/engine/object-field/ability.lua +54 -1
  111. package/engine/object-field.d.ts +2 -3
  112. package/engine/object-field.lua +4 -0
  113. package/engine/random.d.ts +1 -0
  114. package/engine/random.lua +9 -0
  115. package/engine/standard/entries/unit-type.d.ts +39 -1
  116. package/engine/standard/entries/unit-type.lua +39 -1
  117. package/engine/standard/fields/ability.d.ts +3 -1
  118. package/engine/standard/fields/ability.lua +3 -1
  119. package/engine/unit.d.ts +3 -0
  120. package/engine/unit.lua +12 -2
  121. package/event.d.ts +2 -3
  122. package/event.lua +9 -5
  123. package/index.d.ts +1 -0
  124. package/index.lua +1 -0
  125. package/lualib_bundle.lua +146 -42
  126. package/math/vec2.d.ts +2 -9
  127. package/math.d.ts +0 -2
  128. package/net/socket.d.ts +7 -1
  129. package/net/socket.lua +45 -4
  130. package/network.d.ts +1 -0
  131. package/network.lua +3 -2
  132. package/objutil/ability.d.ts +0 -1
  133. package/objutil/buff.d.ts +0 -1
  134. package/objutil/buff.lua +1 -1
  135. package/objutil/object.d.ts +0 -1
  136. package/objutil/unit.d.ts +0 -1
  137. package/package.json +13 -14
  138. package/patch-lua.d.ts +0 -0
  139. package/patch-lua.lua +10 -0
  140. package/property.d.ts +55 -0
  141. package/property.lua +374 -0
  142. package/string.d.ts +30 -0
  143. package/string.lua +14 -0
  144. package/util/stream.d.ts +0 -1
  145. package/utility/arrays.d.ts +11 -5
  146. package/utility/arrays.lua +34 -3
  147. package/utility/bit-set.d.ts +0 -2
  148. package/utility/lazy.d.ts +2 -0
  149. package/utility/lazy.lua +14 -0
  150. package/utility/linked-set.d.ts +11 -3
  151. package/utility/linked-set.lua +5 -2
  152. package/utility/lua-maps.d.ts +1 -2
  153. package/utility/lua-sets.d.ts +1 -2
  154. package/utility/types.d.ts +1 -0
  155. package/core/mapbounds.d.ts +0 -8
  156. package/core/mapbounds.lua +0 -12
@@ -73,21 +73,21 @@ __TS__SetDescriptor(
73
73
  )
74
74
  __TS__SetDescriptor(
75
75
  UnitTypeWeapon.prototype,
76
- "impactDelay",
76
+ "cooldown",
77
77
  {
78
78
  get = function(self)
79
79
  local ____self_4 = self.unitType
80
80
  return ____self_4.getNumberField(
81
81
  ____self_4,
82
- "udp" .. tostring(self.index)
82
+ ("ua" .. tostring(self.index)) .. "c"
83
83
  )
84
84
  end,
85
- set = function(self, impactDelay)
85
+ set = function(self, cooldown)
86
86
  local ____self_5 = self.unitType
87
87
  ____self_5.setNumberField(
88
88
  ____self_5,
89
- "udp" .. tostring(self.index),
90
- impactDelay
89
+ ("ua" .. tostring(self.index)) .. "c",
90
+ cooldown
91
91
  )
92
92
  end
93
93
  },
@@ -95,21 +95,42 @@ __TS__SetDescriptor(
95
95
  )
96
96
  __TS__SetDescriptor(
97
97
  UnitTypeWeapon.prototype,
98
- "missileModelPath",
98
+ "damage",
99
+ {
100
+ get = function(self)
101
+ local minimumDamage = self.damageBase + self.damageDiceCount
102
+ local maximumDamage = self.damageBase + self.damageDiceCount * self.damageDiceSideCount
103
+ return {minimumDamage, maximumDamage}
104
+ end,
105
+ set = function(self, ____bindingPattern0)
106
+ local maximumDamage
107
+ local minimumDamage
108
+ minimumDamage = ____bindingPattern0[1]
109
+ maximumDamage = ____bindingPattern0[2]
110
+ self.damageBase = minimumDamage - 1
111
+ self.damageDiceCount = 1
112
+ self.damageDiceSideCount = maximumDamage - minimumDamage + 1
113
+ end
114
+ },
115
+ true
116
+ )
117
+ __TS__SetDescriptor(
118
+ UnitTypeWeapon.prototype,
119
+ "damageBase",
99
120
  {
100
121
  get = function(self)
101
122
  local ____self_6 = self.unitType
102
- return ____self_6.getStringField(
123
+ return ____self_6.getNumberField(
103
124
  ____self_6,
104
- ("ua" .. tostring(self.index)) .. "m"
125
+ ("ua" .. tostring(self.index)) .. "b"
105
126
  )
106
127
  end,
107
- set = function(self, missileModelPath)
128
+ set = function(self, damageBase)
108
129
  local ____self_7 = self.unitType
109
- ____self_7.setStringField(
130
+ ____self_7.setNumberField(
110
131
  ____self_7,
111
- ("ua" .. tostring(self.index)) .. "m",
112
- missileModelPath
132
+ ("ua" .. tostring(self.index)) .. "b",
133
+ damageBase
113
134
  )
114
135
  end
115
136
  },
@@ -117,19 +138,107 @@ __TS__SetDescriptor(
117
138
  )
118
139
  __TS__SetDescriptor(
119
140
  UnitTypeWeapon.prototype,
120
- "range",
141
+ "damageDiceCount",
121
142
  {
122
143
  get = function(self)
123
144
  local ____self_8 = self.unitType
124
145
  return ____self_8.getNumberField(
125
146
  ____self_8,
126
- ("ua" .. tostring(self.index)) .. "r"
147
+ ("ua" .. tostring(self.index)) .. "d"
127
148
  )
128
149
  end,
129
- set = function(self, range)
150
+ set = function(self, damageDiceNumber)
130
151
  local ____self_9 = self.unitType
131
152
  ____self_9.setNumberField(
132
153
  ____self_9,
154
+ ("ua" .. tostring(self.index)) .. "d",
155
+ damageDiceNumber
156
+ )
157
+ end
158
+ },
159
+ true
160
+ )
161
+ __TS__SetDescriptor(
162
+ UnitTypeWeapon.prototype,
163
+ "damageDiceSideCount",
164
+ {
165
+ get = function(self)
166
+ local ____self_10 = self.unitType
167
+ return ____self_10.getNumberField(
168
+ ____self_10,
169
+ ("ua" .. tostring(self.index)) .. "s"
170
+ )
171
+ end,
172
+ set = function(self, damageDiceSideCount)
173
+ local ____self_11 = self.unitType
174
+ ____self_11.setNumberField(
175
+ ____self_11,
176
+ ("ua" .. tostring(self.index)) .. "s",
177
+ damageDiceSideCount
178
+ )
179
+ end
180
+ },
181
+ true
182
+ )
183
+ __TS__SetDescriptor(
184
+ UnitTypeWeapon.prototype,
185
+ "impactDelay",
186
+ {
187
+ get = function(self)
188
+ local ____self_12 = self.unitType
189
+ return ____self_12.getNumberField(
190
+ ____self_12,
191
+ "udp" .. tostring(self.index)
192
+ )
193
+ end,
194
+ set = function(self, impactDelay)
195
+ local ____self_13 = self.unitType
196
+ ____self_13.setNumberField(
197
+ ____self_13,
198
+ "udp" .. tostring(self.index),
199
+ impactDelay
200
+ )
201
+ end
202
+ },
203
+ true
204
+ )
205
+ __TS__SetDescriptor(
206
+ UnitTypeWeapon.prototype,
207
+ "missileModelPath",
208
+ {
209
+ get = function(self)
210
+ local ____self_14 = self.unitType
211
+ return ____self_14.getStringField(
212
+ ____self_14,
213
+ ("ua" .. tostring(self.index)) .. "m"
214
+ )
215
+ end,
216
+ set = function(self, missileModelPath)
217
+ local ____self_15 = self.unitType
218
+ ____self_15.setStringField(
219
+ ____self_15,
220
+ ("ua" .. tostring(self.index)) .. "m",
221
+ missileModelPath
222
+ )
223
+ end
224
+ },
225
+ true
226
+ )
227
+ __TS__SetDescriptor(
228
+ UnitTypeWeapon.prototype,
229
+ "range",
230
+ {
231
+ get = function(self)
232
+ local ____self_16 = self.unitType
233
+ return ____self_16.getNumberField(
234
+ ____self_16,
235
+ ("ua" .. tostring(self.index)) .. "r"
236
+ )
237
+ end,
238
+ set = function(self, range)
239
+ local ____self_17 = self.unitType
240
+ ____self_17.setNumberField(
241
+ ____self_17,
133
242
  ("ua" .. tostring(self.index)) .. "r",
134
243
  range
135
244
  )
@@ -142,16 +251,16 @@ __TS__SetDescriptor(
142
251
  "soundType",
143
252
  {
144
253
  get = function(self)
145
- local ____self_10 = self.unitType
146
- return ____self_10.getStringField(
147
- ____self_10,
254
+ local ____self_18 = self.unitType
255
+ return ____self_18.getStringField(
256
+ ____self_18,
148
257
  "ucs" .. tostring(self.index)
149
258
  )
150
259
  end,
151
260
  set = function(self, soundType)
152
- local ____self_11 = self.unitType
153
- ____self_11.setStringField(
154
- ____self_11,
261
+ local ____self_19 = self.unitType
262
+ ____self_19.setStringField(
263
+ ____self_19,
155
264
  "ucs" .. tostring(self.index),
156
265
  soundType
157
266
  )
@@ -164,16 +273,16 @@ __TS__SetDescriptor(
164
273
  "soundTypeSD",
165
274
  {
166
275
  get = function(self)
167
- local ____self_12 = self.unitType
168
- return ____self_12.getStringField(
169
- ____self_12,
276
+ local ____self_20 = self.unitType
277
+ return ____self_20.getStringField(
278
+ ____self_20,
170
279
  ("ucs" .. tostring(self.index)) .. ":sd"
171
280
  )
172
281
  end,
173
282
  set = function(self, soundTypeSD)
174
- local ____self_13 = self.unitType
175
- ____self_13.setStringField(
176
- ____self_13,
283
+ local ____self_21 = self.unitType
284
+ ____self_21.setStringField(
285
+ ____self_21,
177
286
  ("ucs" .. tostring(self.index)) .. ":sd",
178
287
  soundTypeSD
179
288
  )
@@ -186,16 +295,16 @@ __TS__SetDescriptor(
186
295
  "soundTypeHD",
187
296
  {
188
297
  get = function(self)
189
- local ____self_14 = self.unitType
190
- return ____self_14.getStringField(
191
- ____self_14,
298
+ local ____self_22 = self.unitType
299
+ return ____self_22.getStringField(
300
+ ____self_22,
192
301
  ("ucs" .. tostring(self.index)) .. ":hd"
193
302
  )
194
303
  end,
195
304
  set = function(self, soundTypeHD)
196
- local ____self_15 = self.unitType
197
- ____self_15.setStringField(
198
- ____self_15,
305
+ local ____self_23 = self.unitType
306
+ ____self_23.setStringField(
307
+ ____self_23,
199
308
  ("ucs" .. tostring(self.index)) .. ":hd",
200
309
  soundTypeHD
201
310
  )
@@ -1087,25 +1196,25 @@ __TS__SetDescriptor(
1087
1196
  )
1088
1197
  __TS__SetDescriptor(
1089
1198
  UnitType.prototype,
1090
- "firstWeapon",
1199
+ "weapons",
1091
1200
  {get = function(self)
1092
- return self.weapons[1]
1201
+ return getOrCreateUnitTypeWeapons(self)
1093
1202
  end},
1094
1203
  true
1095
1204
  )
1096
1205
  __TS__SetDescriptor(
1097
1206
  UnitType.prototype,
1098
- "secondWeapon",
1207
+ "firstWeapon",
1099
1208
  {get = function(self)
1100
- return self.weapons[2]
1209
+ return self.weapons[1]
1101
1210
  end},
1102
1211
  true
1103
1212
  )
1104
1213
  __TS__SetDescriptor(
1105
1214
  UnitType.prototype,
1106
- "weapons",
1215
+ "secondWeapon",
1107
1216
  {get = function(self)
1108
- return getOrCreateUnitTypeWeapons(self)
1217
+ return self.weapons[2]
1109
1218
  end},
1110
1219
  true
1111
1220
  )
@@ -1291,6 +1400,71 @@ __TS__SetDescriptor(
1291
1400
  },
1292
1401
  true
1293
1402
  )
1403
+ __TS__SetDescriptor(
1404
+ UnitType.prototype,
1405
+ "healthRegenerationRate",
1406
+ {
1407
+ get = function(self)
1408
+ return self:getNumberField("uhpr")
1409
+ end,
1410
+ set = function(self, healthRegenerationRate)
1411
+ self:setNumberField("uhpr", healthRegenerationRate)
1412
+ end
1413
+ },
1414
+ true
1415
+ )
1416
+ __TS__SetDescriptor(
1417
+ UnitType.prototype,
1418
+ "manaRegenerationRate",
1419
+ {
1420
+ get = function(self)
1421
+ return self:getNumberField("umpr")
1422
+ end,
1423
+ set = function(self, manaRegenerationRate)
1424
+ self:setNumberField("umpr", manaRegenerationRate)
1425
+ end
1426
+ },
1427
+ true
1428
+ )
1429
+ __TS__SetDescriptor(
1430
+ UnitType.prototype,
1431
+ "maximumHealth",
1432
+ {
1433
+ get = function(self)
1434
+ return self:getNumberField("uhpm")
1435
+ end,
1436
+ set = function(self, maximumHealth)
1437
+ self:setNumberField("uhpm", maximumHealth)
1438
+ end
1439
+ },
1440
+ true
1441
+ )
1442
+ __TS__SetDescriptor(
1443
+ UnitType.prototype,
1444
+ "maximumMana",
1445
+ {
1446
+ get = function(self)
1447
+ return self:getNumberField("umpm")
1448
+ end,
1449
+ set = function(self, maximumMana)
1450
+ self:setNumberField("umpm", maximumMana)
1451
+ end
1452
+ },
1453
+ true
1454
+ )
1455
+ __TS__SetDescriptor(
1456
+ UnitType.prototype,
1457
+ "initialMana",
1458
+ {
1459
+ get = function(self)
1460
+ return self:getNumberField("umpi")
1461
+ end,
1462
+ set = function(self, initialMana)
1463
+ self:setNumberField("umpi", initialMana)
1464
+ end
1465
+ },
1466
+ true
1467
+ )
1294
1468
  __TS__SetDescriptor(
1295
1469
  UnitType.prototype,
1296
1470
  "isStructure",
@@ -1385,11 +1559,11 @@ __TS__SetDescriptor(
1385
1559
  implementReadonlyNumberIndexSupplier(
1386
1560
  ____exports.UnitType,
1387
1561
  function(id)
1388
- local ____class_16 = __TS__Class()
1389
- ____class_16.name = ____class_16.name
1390
- __TS__ClassExtends(____class_16, ____exports.UnitType)
1391
- ____class_16.BASE_ID = id
1392
- return ____class_16
1562
+ local ____class_24 = __TS__Class()
1563
+ ____class_24.name = ____class_24.name
1564
+ __TS__ClassExtends(____class_24, ____exports.UnitType)
1565
+ ____class_24.BASE_ID = id
1566
+ return ____class_24
1393
1567
  end
1394
1568
  )
1395
1569
  ____exports.HeroUnitType = __TS__Class()
@@ -1450,11 +1624,11 @@ __TS__SetDescriptor(
1450
1624
  implementReadonlyNumberIndexSupplier(
1451
1625
  ____exports.HeroUnitType,
1452
1626
  function(id)
1453
- local ____class_17 = __TS__Class()
1454
- ____class_17.name = ____class_17.name
1455
- __TS__ClassExtends(____class_17, ____exports.HeroUnitType)
1456
- ____class_17.BASE_ID = id
1457
- return ____class_17
1627
+ local ____class_25 = __TS__Class()
1628
+ ____class_25.name = ____class_25.name
1629
+ __TS__ClassExtends(____class_25, ____exports.HeroUnitType)
1630
+ ____class_25.BASE_ID = id
1631
+ return ____class_25
1458
1632
  end
1459
1633
  )
1460
1634
  return ____exports
@@ -1,4 +1,3 @@
1
- /// <reference types="warpack-types/warpack" />
2
1
  /** @noSelfInFile */
3
2
  import { Upgrade, UpgradeId } from "../upgrade";
4
3
  export declare class BlankUpgrade extends Upgrade {
@@ -1,4 +1,3 @@
1
- /// <reference types="warpack-types/warpack" />
2
1
  /** @noSelfInFile */
3
2
  import { TupleOf } from "../../../utility/types";
4
3
  import { TechTreeDependency, TechTreeDependencyInput } from "../auxiliary/tech-tree-dependency";
@@ -1,4 +1,3 @@
1
- /// <reference types="warpack-types/warpack" />
2
1
  /** @noSelfInFile */
3
2
  import { AttachmentPreset, AttachmentPresetInput } from "./auxiliary/attachment-preset";
4
3
  import { MutableKeys } from "../../utility/types";
@@ -10,8 +9,8 @@ export type ObjectDataEntryConstructor<T extends ObjectDataEntry> = OmitConstruc
10
9
  export type ObjectDataEntryAbstractConstructor<T extends ObjectDataEntry> = OmitConstructor<typeof ObjectDataEntry> & (abstract new (object: WarObject) => T);
11
10
  export type ObjectDataEntryProperties<T extends ObjectDataEntry> = Partial<T[MutableKeys<T>]>;
12
11
  export type ObjectDataEntryLevelFieldValueSupplier<ValueType extends string | number | boolean | undefined | Record<string, any>, InputValueType = ValueType> = ValueType | readonly ValueType[] | ((level: number, currentValue: InputValueType) => ValueType);
13
- export declare const extractObjectDataEntryLevelFieldValue: <ValueType extends string | number | boolean | Record<string, any> | undefined, InputValueType = ValueType>(supplier: ObjectDataEntryLevelFieldValueSupplier<ValueType, InputValueType>, level: number, currentValue: InputValueType) => ValueType;
14
- export declare const extractObjectDataEntryLevelArrayFieldValue: <T extends string | number | boolean | Record<string, any> | undefined, S extends T[]>(supplier: ObjectDataEntryLevelFieldValueSupplier<S, S>, level: number, currentValue: S) => S;
12
+ export declare const extractObjectDataEntryLevelFieldValue: <ValueType extends string | number | boolean | undefined | Record<string, any>, InputValueType = ValueType>(supplier: ObjectDataEntryLevelFieldValueSupplier<ValueType, InputValueType>, level: number, currentValue: InputValueType) => ValueType;
13
+ export declare const extractObjectDataEntryLevelArrayFieldValue: <T extends string | number | boolean | undefined | Record<string, any>, S extends T[]>(supplier: ObjectDataEntryLevelFieldValueSupplier<S>, level: number, currentValue: S) => S;
15
14
  export declare abstract class ObjectDataEntry<Id extends ObjectDataEntryId = ObjectDataEntryId> {
16
15
  protected readonly object: WarObject;
17
16
  static readonly BASE_ID: ObjectDataEntryId;
@@ -1,5 +1,6 @@
1
1
  local ____lualib = require("lualib_bundle")
2
2
  local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__New = ____lualib.__TS__New
3
4
  local ____exports = {}
4
5
  local ____preconditions = require("utility.preconditions")
5
6
  local checkNotNull = ____preconditions.checkNotNull
@@ -60,4 +61,10 @@ function ObjectDataEntryIdGenerator.prototype.next(self)
60
61
  self.id = id
61
62
  return id
62
63
  end
64
+ ---
65
+ -- @internal For use by internal systems only.
66
+ ____exports.abilityTypeIdGenerator = __TS__New(
67
+ ____exports.ObjectDataEntryIdGenerator,
68
+ fourCC("A000")
69
+ )
63
70
  return ____exports
@@ -6,6 +6,9 @@ import { ObjectDataEntryId } from "../object-data/entry";
6
6
  import { LightningTypeId } from "../object-data/entry/lightning-type";
7
7
  import { CombatClassifications } from "../object-data/auxiliary/combat-classification";
8
8
  import { UnitTypeId } from "../object-data/entry/unit-type";
9
+ import { BuffResistanceType } from "../object-data/auxiliary/buff-resistance-type";
10
+ import { BuffPolarity } from "../object-data/auxiliary/buff-polarity";
11
+ import { ReadonlyNonEmptyLinkedSet } from "../../utility/linked-set";
9
12
  export declare abstract class AbilityField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType extends jabilityfield = jabilityfield> extends ObjectField<AbilityType, Ability, ValueType, NativeFieldType> {
10
13
  protected get instanceClass(): typeof Ability;
11
14
  protected getObjectDataEntryId(instance: Ability): AbilityTypeId;
@@ -42,9 +45,10 @@ export declare class AbilityStringField extends AbilityField<string, jabilitystr
42
45
  protected setNativeFieldValue(instance: Ability, value: string): boolean;
43
46
  static get valueChangeEvent(): ObjectFieldValueChangeEvent<AbilityStringField>;
44
47
  }
45
- export declare abstract class AbilityArrayField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType = unknown> extends ObjectArrayField<AbilityType, Ability, ValueType, NativeFieldType> {
48
+ export declare abstract class AbilityArrayField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType extends jabilityfield = jabilityfield> extends ObjectArrayField<AbilityType, Ability, ValueType, NativeFieldType> {
46
49
  protected get instanceClass(): typeof Ability;
47
50
  protected getObjectDataEntryId(instance: Ability): AbilityTypeId;
51
+ protected hasNativeFieldValue(instance: Ability): boolean;
48
52
  }
49
53
  export declare class AbilityStringArrayField extends AbilityArrayField<string, jabilitystringlevelfield> {
50
54
  protected get defaultValue(): string;
@@ -107,11 +111,30 @@ export declare class AbilityAbilityTypeIdLevelField extends AbilityObjectDataEnt
107
111
  }
108
112
  export declare class AbilityUnitTypeIdLevelField extends AbilityObjectDataEntryIdLevelField<UnitTypeId> {
109
113
  }
114
+ export declare abstract class AbilityEnumLevelField<T extends number> extends AbilityLevelField<T, T, jabilityintegerlevelfield> {
115
+ protected abstract values: ReadonlyNonEmptyLinkedSet<T>;
116
+ protected get defaultValue(): T;
117
+ protected getNativeFieldById(id: number): jabilityintegerlevelfield;
118
+ protected getNativeFieldValue(instance: Ability, level: number): T;
119
+ protected setNativeFieldValue(instance: Ability, level: number, value: T): boolean;
120
+ static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<AbilityBooleanLevelField>;
121
+ }
122
+ export declare class AbilityBuffPolarityLevelField extends AbilityEnumLevelField<BuffPolarity> {
123
+ protected values: ReadonlyNonEmptyLinkedSet<BuffPolarity>;
124
+ }
125
+ export declare class AbilityBuffResistanceTypeLevelField extends AbilityEnumLevelField<BuffResistanceType> {
126
+ protected values: ReadonlyNonEmptyLinkedSet<BuffResistanceType>;
127
+ }
110
128
  export declare class AbilityCombatClassificationsLevelField extends AbilityLevelField<CombatClassifications, CombatClassifications, jabilityintegerlevelfield> {
111
129
  protected get defaultValue(): CombatClassifications;
112
130
  protected getNativeFieldById(id: number): jabilityintegerlevelfield;
113
131
  protected getNativeFieldValue(instance: Ability, level: number): CombatClassifications;
114
132
  protected setNativeFieldValue(instance: Ability, level: number, value: CombatClassifications): boolean;
115
133
  }
116
- export type AbilityDependentValue<ValueType extends boolean | number | string> = ValueType | AbilityField<ValueType> | AbilityLevelField<ValueType> | ((ability: Ability) => ValueType);
117
- export declare const resolveCurrentAbilityDependentValue: <ValueType extends string | number | boolean>(ability: Ability, value: AbilityDependentValue<ValueType>) => ValueType;
134
+ export type ReadonlySubscribableAbilityDependentValue<ValueType extends boolean | number | string> = ValueType | ReadonlyObjectFieldType<AbilityField<ValueType>> | ReadonlyObjectLevelFieldType<AbilityLevelField<ValueType>>;
135
+ export type SubscribableAbilityDependentValue<ValueType extends boolean | number | string> = ValueType | AbilityField<ValueType> | AbilityLevelField<ValueType>;
136
+ export type AbilityDependentValue<ValueType extends boolean | number | string> = SubscribableAbilityDependentValue<ValueType> | ((ability: Ability) => ValueType);
137
+ export declare const resolveCurrentAbilityDependentValue: {
138
+ <ValueType extends boolean | number | string>(ability: Ability, value: AbilityDependentValue<ValueType>): ValueType;
139
+ <ValueType extends boolean | number | string>(ability: Ability, value?: AbilityDependentValue<ValueType>): ValueType | undefined;
140
+ };
@@ -13,6 +13,8 @@ local ObjectField = ____object_2Dfield.ObjectField
13
13
  local ObjectLevelField = ____object_2Dfield.ObjectLevelField
14
14
  local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
15
15
  local AbilityType = ____ability_2Dtype.AbilityType
16
+ local ____linked_2Dset = require("utility.linked-set")
17
+ local nonEmptyLinkedSetOf = ____linked_2Dset.nonEmptyLinkedSetOf
16
18
  local convertAbilityBooleanField = _G.ConvertAbilityBooleanField
17
19
  local convertAbilityIntegerField = _G.ConvertAbilityIntegerField
18
20
  local convertAbilityRealField = _G.ConvertAbilityRealField
@@ -195,6 +197,9 @@ __TS__ClassExtends(AbilityArrayField, ObjectArrayField)
195
197
  function AbilityArrayField.prototype.getObjectDataEntryId(self, instance)
196
198
  return instance.typeId
197
199
  end
200
+ function AbilityArrayField.prototype.hasNativeFieldValue(self, instance)
201
+ return instance:hasField(self.nativeField)
202
+ end
198
203
  __TS__SetDescriptor(
199
204
  AbilityArrayField.prototype,
200
205
  "instanceClass",
@@ -259,7 +264,7 @@ local AbilityLevelField = ____exports.AbilityLevelField
259
264
  AbilityLevelField.name = "AbilityLevelField"
260
265
  __TS__ClassExtends(AbilityLevelField, ObjectLevelField)
261
266
  function AbilityLevelField.prototype.getLevelCount(self, entry)
262
- return __TS__InstanceOf(entry, Ability) and #entry.levels or entry.levelCount
267
+ return entry.levelCount
263
268
  end
264
269
  function AbilityLevelField.prototype.getObjectDataEntryId(self, instance)
265
270
  return instance.typeId
@@ -431,6 +436,54 @@ ____exports.AbilityUnitTypeIdLevelField = __TS__Class()
431
436
  local AbilityUnitTypeIdLevelField = ____exports.AbilityUnitTypeIdLevelField
432
437
  AbilityUnitTypeIdLevelField.name = "AbilityUnitTypeIdLevelField"
433
438
  __TS__ClassExtends(AbilityUnitTypeIdLevelField, ____exports.AbilityObjectDataEntryIdLevelField)
439
+ ____exports.AbilityEnumLevelField = __TS__Class()
440
+ local AbilityEnumLevelField = ____exports.AbilityEnumLevelField
441
+ AbilityEnumLevelField.name = "AbilityEnumLevelField"
442
+ __TS__ClassExtends(AbilityEnumLevelField, ____exports.AbilityLevelField)
443
+ function AbilityEnumLevelField.prototype.getNativeFieldById(self, id)
444
+ return convertAbilityIntegerLevelField(id)
445
+ end
446
+ function AbilityEnumLevelField.prototype.getNativeFieldValue(self, instance, level)
447
+ local value = instance:getField(self.nativeField, level)
448
+ if self.values:contains(value) then
449
+ return value
450
+ end
451
+ return self.values:first()
452
+ end
453
+ function AbilityEnumLevelField.prototype.setNativeFieldValue(self, instance, level, value)
454
+ return instance:setField(self.nativeField, level, value)
455
+ end
456
+ __TS__SetDescriptor(
457
+ AbilityEnumLevelField.prototype,
458
+ "defaultValue",
459
+ {get = function(self)
460
+ return self.values:first()
461
+ end},
462
+ true
463
+ )
464
+ __TS__ObjectDefineProperty(
465
+ AbilityEnumLevelField,
466
+ "valueChangeEvent",
467
+ {get = function(self)
468
+ return self:getOrCreateValueChangeEvent()
469
+ end}
470
+ )
471
+ ____exports.AbilityBuffPolarityLevelField = __TS__Class()
472
+ local AbilityBuffPolarityLevelField = ____exports.AbilityBuffPolarityLevelField
473
+ AbilityBuffPolarityLevelField.name = "AbilityBuffPolarityLevelField"
474
+ __TS__ClassExtends(AbilityBuffPolarityLevelField, ____exports.AbilityEnumLevelField)
475
+ function AbilityBuffPolarityLevelField.prototype.____constructor(self, ...)
476
+ AbilityBuffPolarityLevelField.____super.prototype.____constructor(self, ...)
477
+ self.values = nonEmptyLinkedSetOf(0, 1, 2)
478
+ end
479
+ ____exports.AbilityBuffResistanceTypeLevelField = __TS__Class()
480
+ local AbilityBuffResistanceTypeLevelField = ____exports.AbilityBuffResistanceTypeLevelField
481
+ AbilityBuffResistanceTypeLevelField.name = "AbilityBuffResistanceTypeLevelField"
482
+ __TS__ClassExtends(AbilityBuffResistanceTypeLevelField, ____exports.AbilityEnumLevelField)
483
+ function AbilityBuffResistanceTypeLevelField.prototype.____constructor(self, ...)
484
+ AbilityBuffResistanceTypeLevelField.____super.prototype.____constructor(self, ...)
485
+ self.values = nonEmptyLinkedSetOf(1, 2, 3)
486
+ end
434
487
  local allowedTargetCombatClassificationsByLevelByAbilityTypeId = postcompile(function()
435
488
  local allowedTargetCombatClassificationsByLevelByAbilityTypeId = {}
436
489
  for ____, abilityType in ipairs(AbilityType:getAll()) do
@@ -1,4 +1,3 @@
1
- /// <reference types="@typescript-to-lua/language-extensions" />
2
1
  /** @noSelfInFile */
3
2
  import { DispatchingEvent } from "../event";
4
3
  import { AbstractConstructor } from "../utility/types";
@@ -17,6 +16,8 @@ declare abstract class ObjectFieldBase<ObjectDataEntryType extends ObjectDataEnt
17
16
  readonly id: ObjectFieldId;
18
17
  protected abstract getNativeFieldById(id: number): NativeFieldType;
19
18
  protected abstract getObjectDataEntryId(instance: InstanceType): ObjectDataEntryIdType<ObjectDataEntryType>;
19
+ protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
20
+ hasValue(instance: InstanceType): boolean;
20
21
  constructor(id: number);
21
22
  static create<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldConstructor<T>, id?: number): T & symbol;
22
23
  static of<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldAbstractConstructor<T>, id: number): T | undefined;
@@ -36,7 +37,6 @@ export type ReadonlyObjectFieldType<T extends ObjectField<any, any, any, any>> =
36
37
  type ReadonlyObjectFieldConstructor<T extends ObjectField> = OmitConstructor<typeof ObjectField> & (abstract new (...args: any[]) => ReadonlyObjectFieldType<T>);
37
38
  export declare abstract class ObjectField<ObjectDataEntryType extends ObjectDataEntry = ObjectDataEntry, InstanceType extends AnyNotNil = AnyNotNil, ValueType extends number | string | boolean = number | string | boolean, NativeFieldType = unknown> extends ObjectFieldBase<ObjectDataEntryType, InstanceType, ValueType, NativeFieldType> {
38
39
  protected abstract readonly defaultValue: ValueType;
39
- protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
40
40
  protected abstract getNativeFieldValue(instance: InstanceType): ValueType;
41
41
  protected abstract setNativeFieldValue(instance: InstanceType, value: ValueType): boolean;
42
42
  getValue(entry: ObjectDataEntryType | InstanceType): ValueType;
@@ -72,7 +72,6 @@ export declare abstract class ObjectArrayField<ObjectDataEntryType extends Objec
72
72
  }
73
73
  export declare abstract class ObjectLevelField<ObjectDataEntryType extends ObjectDataEntry = ObjectDataEntry, InstanceType extends AnyNotNil = AnyNotNil, ValueType extends number | string | boolean = number | string | boolean, InputValueType extends ValueType = never, NativeFieldType = unknown> extends ObjectFieldBase<ObjectDataEntryType, InstanceType, ValueType[], NativeFieldType> {
74
74
  protected abstract readonly defaultValue: ValueType;
75
- protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
76
75
  protected abstract getNativeFieldValue(instance: InstanceType, level: number): ValueType;
77
76
  protected abstract setNativeFieldValue(instance: InstanceType, level: number, value: ValueType): boolean;
78
77
  protected abstract getLevelCount(entry: ObjectDataEntryType | InstanceType): number;
@@ -46,6 +46,10 @@ end
46
46
  function ObjectFieldBase.prototype.supports(self, instance)
47
47
  return __TS__InstanceOf(instance, self.instanceClass)
48
48
  end
49
+ function ObjectFieldBase.prototype.hasValue(self, instance)
50
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
51
+ return defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
52
+ end
49
53
  function ObjectFieldBase.create(self, id)
50
54
  return __TS__New(
51
55
  self,
@@ -8,3 +8,4 @@ export declare const randomFloat: {
8
8
  (upperBound?: number): number;
9
9
  (lowerBound: number, upperBound: number): number;
10
10
  };
11
+ export declare const randomXY: (centerX: number, centerY: number, range: number) => LuaMultiReturn<[x: number, y: number]>;
package/engine/random.lua CHANGED
@@ -1,9 +1,18 @@
1
1
  local ____exports = {}
2
2
  local ____math = require("math")
3
3
  local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
4
+ local PI = ____math.PI
4
5
  local getRandomInt = GetRandomInt
5
6
  local getRandomReal = GetRandomReal
7
+ local cos = math.cos
8
+ local sin = math.sin
9
+ local sqrt = math.sqrt
6
10
  ____exports.randomAngle = function() return getRandomReal(0, 360) end
7
11
  ____exports.randomInteger = function(m, n) return n ~= nil and getRandomInt(m, n) or getRandomInt(0, m or MAXIMUM_INTEGER) end
8
12
  ____exports.randomFloat = function(m, n) return n ~= nil and getRandomReal(m, n) or getRandomReal(0, m or MAXIMUM_INTEGER) end
13
+ ____exports.randomXY = function(centerX, centerY, range)
14
+ local r = range * sqrt(getRandomReal(0, 1))
15
+ local t = getRandomReal(0, 1) * 2 * PI
16
+ return centerX + r * cos(t), centerY + r * sin(t)
17
+ end
9
18
  return ____exports