warscript 0.0.1-dev.ed60fea → 0.0.1-dev.ee6f224

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 (174) hide show
  1. package/attributes.d.ts +5 -0
  2. package/attributes.lua +8 -1
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -0
  5. package/core/types/effect.d.ts +1 -3
  6. package/core/types/effect.lua +26 -29
  7. package/core/types/frame.lua +24 -21
  8. package/core/types/player.lua +3 -1
  9. package/core/types/playerCamera.d.ts +2 -0
  10. package/core/types/playerCamera.lua +123 -5
  11. package/core/types/sound.d.ts +17 -24
  12. package/core/types/sound.lua +99 -24
  13. package/core/types/tileCell.d.ts +9 -0
  14. package/core/types/tileCell.lua +92 -0
  15. package/core/types/timer.d.ts +8 -8
  16. package/core/types/timer.lua +39 -23
  17. package/core/util.lua +6 -1
  18. package/decl/native.d.ts +846 -790
  19. package/engine/behavior.d.ts +5 -0
  20. package/engine/behavior.lua +106 -27
  21. package/engine/behaviour/ability/apply-buff.d.ts +5 -0
  22. package/engine/behaviour/ability/apply-buff.lua +32 -0
  23. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  24. package/engine/behaviour/ability/damage.d.ts +9 -3
  25. package/engine/behaviour/ability/damage.lua +26 -38
  26. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  27. package/engine/behaviour/ability/emulate-impact.lua +18 -3
  28. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  29. package/engine/behaviour/ability/restore-mana.lua +6 -6
  30. package/engine/behaviour/ability.d.ts +7 -2
  31. package/engine/behaviour/ability.lua +42 -24
  32. package/engine/behaviour/unit/stun-immunity.d.ts +5 -3
  33. package/engine/behaviour/unit/stun-immunity.lua +43 -27
  34. package/engine/behaviour/unit.d.ts +32 -0
  35. package/engine/behaviour/unit.lua +185 -4
  36. package/engine/buff.d.ts +57 -44
  37. package/engine/buff.lua +273 -221
  38. package/engine/internal/ability.d.ts +7 -1
  39. package/engine/internal/ability.lua +49 -11
  40. package/engine/internal/item/ability.lua +82 -14
  41. package/engine/internal/item+owner.lua +12 -6
  42. package/engine/internal/item.d.ts +8 -7
  43. package/engine/internal/item.lua +153 -51
  44. package/engine/internal/mechanics/ability-duration.lua +1 -1
  45. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  46. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  47. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  48. package/engine/internal/misc/frame-coordinates.lua +21 -0
  49. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  50. package/engine/internal/misc/get-terrain-z.lua +11 -0
  51. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  52. package/engine/internal/misc/player-local-handle.lua +5 -0
  53. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  54. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  55. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  56. package/engine/internal/object-data/evasion-probability.lua +16 -0
  57. package/engine/internal/unit/ability.d.ts +35 -0
  58. package/engine/internal/unit/ability.lua +63 -1
  59. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  60. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  61. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  62. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  63. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  64. package/engine/internal/unit/allowed-targets.lua +9 -1
  65. package/engine/internal/unit/bonus.d.ts +2 -0
  66. package/engine/internal/unit/bonus.lua +17 -0
  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.lua +3 -4
  70. package/engine/internal/unit/order.d.ts +20 -0
  71. package/engine/internal/unit/order.lua +136 -0
  72. package/engine/internal/unit+ability.lua +10 -1
  73. package/engine/internal/unit+damage.d.ts +2 -11
  74. package/engine/internal/unit+damage.lua +10 -14
  75. package/engine/internal/unit+spellSteal.lua +1 -2
  76. package/engine/internal/unit-missile-launch.lua +9 -2
  77. package/engine/internal/unit.d.ts +33 -10
  78. package/engine/internal/unit.lua +274 -113
  79. package/engine/lightning.d.ts +12 -5
  80. package/engine/lightning.lua +48 -14
  81. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  82. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  83. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  84. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  85. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  86. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  87. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  88. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  89. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  90. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  91. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  92. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  93. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  94. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  95. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  96. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  97. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  98. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  99. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  100. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  101. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  102. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  103. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  104. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  105. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  106. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  107. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  108. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  109. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  110. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  111. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  112. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  113. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  114. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  115. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  116. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  117. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  118. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  119. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  120. package/engine/object-data/entry/ability-type/web.lua +52 -0
  121. package/engine/object-data/entry/ability-type.d.ts +19 -17
  122. package/engine/object-data/entry/ability-type.lua +82 -24
  123. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  124. package/engine/object-data/entry/buff-type.d.ts +6 -12
  125. package/engine/object-data/entry/buff-type.lua +13 -29
  126. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  127. package/engine/object-data/entry/item-type.d.ts +1 -1
  128. package/engine/object-data/entry/item-type.lua +4 -4
  129. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  130. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  131. package/engine/object-data/entry/sound-preset.lua +140 -0
  132. package/engine/object-data/entry/unit-type.d.ts +21 -5
  133. package/engine/object-data/entry/unit-type.lua +214 -93
  134. package/engine/object-data/entry/upgrade.d.ts +1 -1
  135. package/engine/object-data/entry/upgrade.lua +4 -4
  136. package/engine/object-data/entry.d.ts +16 -14
  137. package/engine/object-data/entry.lua +60 -32
  138. package/engine/object-field/ability.d.ts +4 -4
  139. package/engine/object-field/ability.lua +7 -6
  140. package/engine/object-field/unit.d.ts +57 -3
  141. package/engine/object-field/unit.lua +207 -7
  142. package/engine/object-field.d.ts +17 -6
  143. package/engine/object-field.lua +188 -92
  144. package/engine/random.d.ts +9 -0
  145. package/engine/random.lua +13 -0
  146. package/engine/standard/entries/buff-type.d.ts +3 -0
  147. package/engine/standard/entries/buff-type.lua +3 -0
  148. package/engine/standard/entries/sound-preset.d.ts +10 -0
  149. package/engine/standard/entries/sound-preset.lua +10 -0
  150. package/engine/standard/fields/unit.d.ts +4 -0
  151. package/engine/standard/fields/unit.lua +7 -0
  152. package/engine/text-tag.d.ts +36 -2
  153. package/engine/text-tag.lua +249 -10
  154. package/engine/unit.d.ts +2 -0
  155. package/engine/unit.lua +2 -0
  156. package/objutil/buff.lua +1 -2
  157. package/objutil/unit.lua +8 -0
  158. package/package.json +2 -2
  159. package/patch-lualib.lua +1 -1
  160. package/utility/arrays.d.ts +1 -0
  161. package/utility/arrays.lua +3 -0
  162. package/utility/callback-array.d.ts +13 -0
  163. package/utility/callback-array.lua +46 -0
  164. package/utility/functions.d.ts +8 -0
  165. package/utility/functions.lua +13 -0
  166. package/utility/linked-set.d.ts +1 -0
  167. package/utility/linked-set.lua +3 -0
  168. package/utility/lua-maps.d.ts +15 -2
  169. package/utility/lua-maps.lua +53 -2
  170. package/utility/lua-sets.d.ts +2 -0
  171. package/utility/lua-sets.lua +7 -0
  172. package/utility/reflection.lua +11 -7
  173. package/core/types/order.d.ts +0 -25
  174. package/core/types/order.lua +0 -55
@@ -2,6 +2,7 @@ local ____lualib = require("lualib_bundle")
2
2
  local __TS__Class = ____lualib.__TS__Class
3
3
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
4
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
+ local __TS__InstanceOf = ____lualib.__TS__InstanceOf
5
6
  local ____exports = {}
6
7
  local ____unit = require("engine.internal.unit")
7
8
  local Unit = ____unit.Unit
@@ -19,7 +20,7 @@ local mapIndexed = ____arrays.mapIndexed
19
20
  local ____attachment_2Dpreset = require("engine.object-data.auxiliary.attachment-preset")
20
21
  local extractAttachmentPresetInputModelPath = ____attachment_2Dpreset.extractAttachmentPresetInputModelPath
21
22
  local extractAttachmentPresetInputNodeFQN = ____attachment_2Dpreset.extractAttachmentPresetInputNodeFQN
22
- local toAttachmentPreset = ____attachment_2Dpreset.toAttachmentPreset
23
+ local toEffectPreset = ____attachment_2Dpreset.toEffectPreset
23
24
  local ____combat_2Dclassification = require("engine.object-data.auxiliary.combat-classification")
24
25
  local combatClassificationsToStringArray = ____combat_2Dclassification.combatClassificationsToStringArray
25
26
  local stringArrayToCombatClassifications = ____combat_2Dclassification.stringArrayToCombatClassifications
@@ -33,11 +34,16 @@ local ____object_2Ddata_2Dentry_2Did_2Dgenerator = require("engine.object-data.u
33
34
  local abilityTypeIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.abilityTypeIdGenerator
34
35
  local ____upgrade = require("engine.object-data.entry.upgrade")
35
36
  local Upgrade = ____upgrade.Upgrade
37
+ local ____sound = require("core.types.sound")
38
+ local isSoundLabelCustom = ____sound.isSoundLabelCustom
39
+ local Sound3D = ____sound.Sound3D
40
+ local SoundSettings = ____sound.SoundSettings
36
41
  local castAnimationFQNByAbilityTypeId = {}
37
42
  local isButtonVisibleFalseAbilityTypes = {}
38
43
  local casterCastingEffectPresetsByAbilityTypeId = {}
39
44
  local casterChannelingEffectPresetsByAbilityTypeId = {}
40
45
  local targetCastingEffectPresetsByAbilityTypeId = {}
46
+ local targetEffectSoundPresetByAbilityTypeId = {}
41
47
  ____exports.AbilityType = __TS__Class()
42
48
  local AbilityType = ____exports.AbilityType
43
49
  AbilityType.name = "AbilityType"
@@ -113,7 +119,7 @@ __TS__SetDescriptor(
113
119
  return casterCastingEffectPresetsByAbilityTypeId[self.id] or ({})
114
120
  end,
115
121
  set = function(self, casterCastingEffectPresets)
116
- casterCastingEffectPresetsByAbilityTypeId[self.id] = map(casterCastingEffectPresets, toAttachmentPreset)
122
+ casterCastingEffectPresetsByAbilityTypeId[self.id] = map(casterCastingEffectPresets, toEffectPreset)
117
123
  end
118
124
  },
119
125
  true
@@ -126,7 +132,7 @@ __TS__SetDescriptor(
126
132
  return casterChannelingEffectPresetsByAbilityTypeId[self.id] or ({})
127
133
  end,
128
134
  set = function(self, casterChannelingEffectPresets)
129
- casterChannelingEffectPresetsByAbilityTypeId[self.id] = map(casterChannelingEffectPresets, toAttachmentPreset)
135
+ casterChannelingEffectPresetsByAbilityTypeId[self.id] = map(casterChannelingEffectPresets, toEffectPreset)
130
136
  end
131
137
  },
132
138
  true
@@ -271,10 +277,10 @@ __TS__SetDescriptor(
271
277
  "lightningTypeIds",
272
278
  {
273
279
  get = function(self)
274
- return self:getObjectDataEntryIdsField("alig")
280
+ return self:getObjectDataEntryNumericIdsField("alig")
275
281
  end,
276
282
  set = function(self, lightningTypeIds)
277
- self:setObjectDataEntryIdsField("alig", lightningTypeIds)
283
+ self:setObjectDataEntryNumericIdsField("alig", lightningTypeIds)
278
284
  end
279
285
  },
280
286
  true
@@ -365,7 +371,7 @@ __TS__SetDescriptor(
365
371
  return targetCastingEffectPresetsByAbilityTypeId[self.id] or ({})
366
372
  end,
367
373
  set = function(self, targetCastingEffectPresets)
368
- targetCastingEffectPresetsByAbilityTypeId[self.id] = map(targetCastingEffectPresets, toAttachmentPreset)
374
+ targetCastingEffectPresetsByAbilityTypeId[self.id] = map(targetCastingEffectPresets, toEffectPreset)
369
375
  end
370
376
  },
371
377
  true
@@ -508,7 +514,7 @@ __TS__SetDescriptor(
508
514
  "techTreeDependencies",
509
515
  {
510
516
  get = function(self)
511
- local techTreeDependencyIds = self:getObjectDataEntryIdsField("areq")
517
+ local techTreeDependencyIds = self:getObjectDataEntryNumericIdsField("areq")
512
518
  local techTreeDependencyInternalLevels = self:getNumbersField("arqa")
513
519
  return mapIndexed(
514
520
  techTreeDependencyIds,
@@ -528,7 +534,7 @@ __TS__SetDescriptor(
528
534
  map(techTreeDependencies, extractTechTreeDependencyInputLevel),
529
535
  function(techTreeDependencyLevel) return techTreeDependencyLevel + 1 end
530
536
  )
531
- self:setObjectDataEntryIdsField("areq", techTreeDependencyIds)
537
+ self:setObjectDataEntryNumericIdsField("areq", techTreeDependencyIds)
532
538
  self:setNumbersField("arqa", techTreeDependencyInternalLevels)
533
539
  end
534
540
  },
@@ -718,26 +724,40 @@ __TS__SetDescriptor(
718
724
  )
719
725
  __TS__SetDescriptor(
720
726
  AbilityType.prototype,
721
- "soundPresetName",
727
+ "casterEffectSoundPresetId",
722
728
  {
723
729
  get = function(self)
724
- return self:getStringField("aefs")
730
+ local casterEffectSoundPresetId = self:getStringField("aefs")
731
+ return casterEffectSoundPresetId ~= "" and casterEffectSoundPresetId or nil
725
732
  end,
726
- set = function(self, soundPresetName)
727
- self:setStringField("aefs", soundPresetName)
733
+ set = function(self, casterEffectSoundPresetId)
734
+ self:setStringField("aefs", casterEffectSoundPresetId or "")
728
735
  end
729
736
  },
730
737
  true
731
738
  )
732
739
  __TS__SetDescriptor(
733
740
  AbilityType.prototype,
734
- "loopingSoundPresetName",
741
+ "casterEffectLoopingSoundPresetId",
735
742
  {
736
743
  get = function(self)
737
744
  return self:getStringField("aefl")
738
745
  end,
739
- set = function(self, loopingSoundPresetName)
740
- self:setStringField("aefl", loopingSoundPresetName)
746
+ set = function(self, casterEffectLoopingSoundPresetId)
747
+ self:setStringField("aefl", casterEffectLoopingSoundPresetId)
748
+ end
749
+ },
750
+ true
751
+ )
752
+ __TS__SetDescriptor(
753
+ AbilityType.prototype,
754
+ "targetEffectSoundPresetId",
755
+ {
756
+ get = function(self)
757
+ return targetEffectSoundPresetByAbilityTypeId[self.id]
758
+ end,
759
+ set = function(self, targetEffectSoundPresetId)
760
+ targetEffectSoundPresetByAbilityTypeId[self.id] = targetEffectSoundPresetId
741
761
  end
742
762
  },
743
763
  true
@@ -796,10 +816,10 @@ __TS__SetDescriptor(
796
816
  "buffTypeIds",
797
817
  {
798
818
  get = function(self)
799
- return self:getObjectDataEntryIdsLevelField("abuf")
819
+ return self:getObjectDataEntryNumericIdsLevelField("abuf")
800
820
  end,
801
821
  set = function(self, buffTypeIds)
802
- self:setObjectDataEntryIdsLevelField("abuf", buffTypeIds)
822
+ self:setObjectDataEntryNumericIdsLevelField("abuf", buffTypeIds)
803
823
  end
804
824
  },
805
825
  true
@@ -848,10 +868,10 @@ __TS__SetDescriptor(
848
868
  "effectBuffTypeIds",
849
869
  {
850
870
  get = function(self)
851
- return self:getObjectDataEntryIdsLevelField("aeff")
871
+ return self:getObjectDataEntryNumericIdsLevelField("aeff")
852
872
  end,
853
873
  set = function(self, effectBuffTypeIds)
854
- self:setObjectDataEntryIdsLevelField("aeff", effectBuffTypeIds)
874
+ self:setObjectDataEntryNumericIdsLevelField("aeff", effectBuffTypeIds)
855
875
  end
856
876
  },
857
877
  true
@@ -959,13 +979,37 @@ for abilityTypeId, animationFQN in pairs(postcompile(function() return castAnima
959
979
  4,
960
980
  function(caster, ability)
961
981
  if ability:getField(ABILITY_RLF_CASTING_TIME) ~= 0 then
962
- Timer:run(function()
963
- caster:playAnimation(animationFQN)
964
- end)
982
+ Timer:run(caster, "playAnimation", animationFQN)
965
983
  end
966
984
  end
967
985
  )
968
986
  end
987
+ for abilityTypeId, soundPresetId in pairs(postcompile(function() return targetEffectSoundPresetByAbilityTypeId end)) do
988
+ if soundPresetId ~= nil then
989
+ Unit.abilityWidgetTargetChannelingStartEvent[abilityTypeId]:addListener(
990
+ 4,
991
+ function(caster, ability, target)
992
+ if __TS__InstanceOf(target, Unit) then
993
+ Sound3D:playFromLabel(soundPresetId, SoundSettings.Ability, target)
994
+ else
995
+ Sound3D:playFromLabel(soundPresetId, SoundSettings.Ability, target.x, target.y)
996
+ end
997
+ end
998
+ )
999
+ Unit.abilityPointTargetChannelingStartEvent[abilityTypeId]:addListener(
1000
+ 4,
1001
+ function(caster, ability, x, y)
1002
+ Sound3D:playFromLabel(soundPresetId, SoundSettings.Ability, x, y)
1003
+ end
1004
+ )
1005
+ end
1006
+ end
1007
+ Unit.abilityChannelingStartEvent:addListener(function(caster, ability)
1008
+ local soundPresetId = ability:getField(ABILITY_SF_EFFECT_SOUND)
1009
+ if isSoundLabelCustom(soundPresetId) then
1010
+ Sound3D:playFromLabel(soundPresetId, SoundSettings.Ability, caster)
1011
+ end
1012
+ end)
969
1013
  local casterCastingEffectModelPathsByAbilityTypeId = postcompile(function()
970
1014
  return mapValues(
971
1015
  casterCastingEffectPresetsByAbilityTypeId,
@@ -978,10 +1022,17 @@ local casterCastingEffectAttachmentPointsByAbilityTypeId = postcompile(function(
978
1022
  function(casterCastingEffectPresets) return map(casterCastingEffectPresets, extractAttachmentPresetInputNodeFQN) end
979
1023
  )
980
1024
  end)
1025
+ local casterCastingEffectParametersByAbilityTypeId = postcompile(function()
1026
+ return mapValues(
1027
+ casterCastingEffectPresetsByAbilityTypeId,
1028
+ function(casterCastingEffectPresets) return map(casterCastingEffectPresets, "parameters") end
1029
+ )
1030
+ end)
981
1031
  local casterCastingEffectsByCaster = {}
982
1032
  local function handleAbilityCastingStartEvent(caster, ability)
983
1033
  local effectModelPaths = casterCastingEffectModelPathsByAbilityTypeId[ability.typeId]
984
1034
  local attachmentPoints = casterCastingEffectAttachmentPointsByAbilityTypeId[ability.typeId]
1035
+ local parameters = casterCastingEffectParametersByAbilityTypeId[ability.typeId]
985
1036
  local effects = {}
986
1037
  if effectModelPaths ~= nil then
987
1038
  for i = 1, #effectModelPaths do
@@ -990,7 +1041,7 @@ local function handleAbilityCastingStartEvent(caster, ability)
990
1041
  if attachmentPoint == nil or attachmentPoint == "" then
991
1042
  attachmentPoint = "origin"
992
1043
  end
993
- effects[i] = Effect:createTarget(effectModelPath, caster, attachmentPoint)
1044
+ effects[i] = Effect:create(effectModelPath, caster, attachmentPoint, parameters and parameters[i])
994
1045
  end
995
1046
  end
996
1047
  casterCastingEffectsByCaster[caster] = effects
@@ -1021,10 +1072,17 @@ local casterChannelingEffectAttachmentPointsByAbilityTypeId = postcompile(functi
1021
1072
  function(casterChannelingEffectPresets) return map(casterChannelingEffectPresets, extractAttachmentPresetInputNodeFQN) end
1022
1073
  )
1023
1074
  end)
1075
+ local casterChannelingEffectParametersByAbilityTypeId = postcompile(function()
1076
+ return mapValues(
1077
+ casterChannelingEffectPresetsByAbilityTypeId,
1078
+ function(casterChannelingEffectPresets) return map(casterChannelingEffectPresets, "parameters") end
1079
+ )
1080
+ end)
1024
1081
  local casterChannelingEffectsByCaster = {}
1025
1082
  local function handleAbilityChannelingStartEvent(caster, ability)
1026
1083
  local effectModelPaths = casterChannelingEffectModelPathsByAbilityTypeId[ability.typeId]
1027
1084
  local attachmentPoints = casterChannelingEffectAttachmentPointsByAbilityTypeId[ability.typeId]
1085
+ local parameters = casterChannelingEffectParametersByAbilityTypeId[ability.typeId]
1028
1086
  local effects = {}
1029
1087
  if effectModelPaths ~= nil then
1030
1088
  for i = 1, #effectModelPaths do
@@ -1033,7 +1091,7 @@ local function handleAbilityChannelingStartEvent(caster, ability)
1033
1091
  if attachmentPoint == nil or attachmentPoint == "" then
1034
1092
  attachmentPoint = "origin"
1035
1093
  end
1036
- effects[i] = Effect:createTarget(effectModelPath, caster, attachmentPoint)
1094
+ effects[i] = Effect:create(effectModelPath, caster, attachmentPoint, parameters and parameters[i])
1037
1095
  end
1038
1096
  end
1039
1097
  casterChannelingEffectsByCaster[caster] = effects
@@ -10,8 +10,8 @@ local ____exports = {}
10
10
  local preparePhysicalPositiveApplicatorAbility
11
11
  local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
12
12
  local AbilityType = ____ability_2Dtype.AbilityType
13
- local ____cripple = require("engine.object-data.entry.ability-type.cripple")
14
- local CrippleAbilityType = ____cripple.CrippleAbilityType
13
+ local ____curse = require("engine.object-data.entry.ability-type.curse")
14
+ local CurseAbilityType = ____curse.CurseAbilityType
15
15
  local ____searing_2Darrows = require("engine.object-data.entry.ability-type.searing-arrows")
16
16
  local SearingArrowsAbilityType = ____searing_2Darrows.SearingArrowsAbilityType
17
17
  local ____slow_2Dpoison = require("engine.object-data.entry.ability-type.slow-poison")
@@ -30,7 +30,6 @@ local ____arrays = require("utility.arrays")
30
30
  local chunked = ____arrays.chunked
31
31
  local map = ____arrays.map
32
32
  local max = ____arrays.max
33
- local toLuaSet = ____arrays.toLuaSet
34
33
  local ____blood_2Dlust = require("engine.object-data.entry.ability-type.blood-lust")
35
34
  local BloodLustAbilityType = ____blood_2Dlust.BloodLustAbilityType
36
35
  local ____berserk = require("engine.object-data.entry.ability-type.berserk")
@@ -43,22 +42,11 @@ local ____permanent_2Dimmolation = require("engine.object-data.entry.ability-typ
43
42
  local PermanentImmolationAbilityType = ____permanent_2Dimmolation.PermanentImmolationAbilityType
44
43
  local ____cast_2Dability = require("engine.internal.mechanics.cast-ability")
45
44
  local castAbility = ____cast_2Dability.castAbility
46
- local createItem = CreateItem
47
- local getAbilityId = BlzGetAbilityId
48
- local getItemAbility = BlzGetItemAbility
49
- local getOwningPlayer = GetOwningPlayer
50
- local getUnitAbilityByIndex = BlzGetUnitAbilityByIndex
51
- local itemAddAbility = BlzItemAddAbility
52
- local removeItem = RemoveItem
53
45
  local setAbilityIntegerField = BlzSetAbilityIntegerField
54
46
  local setAbilityRealLevelField = BlzSetAbilityRealLevelField
55
- local setItemBooleanField = BlzSetItemBooleanField
56
47
  local setPlayerTechResearched = SetPlayerTechResearched
57
48
  local unitAddAbility = UnitAddAbility
58
- local unitAddItem = UnitAddItem
59
49
  local unitDisableAbility = BlzUnitDisableAbility
60
- local unitDropItemSlot = UnitDropItemSlot
61
- local unitInventorySize = UnitInventorySize
62
50
  local unitRemoveAbility = UnitRemoveAbility
63
51
  local compiletimeApplicableBuffTypes = {}
64
52
  ____exports.ApplicableBuffType = __TS__Class()
@@ -86,7 +74,7 @@ local applicatorAbilityTypeIdByApplicatorTypeByApplicableBuffTypeId, applicatorU
86
74
  abilityType.buttonPositionY = -11
87
75
  abilityType.casterAttachmentPresets = {}
88
76
  abilityType.targetEffectPresets = {}
89
- abilityType.soundPresetName = ""
77
+ abilityType.casterEffectSoundPresetId = nil
90
78
  abilityType.learnLevelMinimum = 6
91
79
  abilityType.race = "other"
92
80
  abilityType.shouldCheckTechTreeDependencies = false
@@ -113,12 +101,10 @@ local applicatorAbilityTypeIdByApplicatorTypeByApplicableBuffTypeId, applicatorU
113
101
  local applicatorAbilityTypeIdByApplicatorType = {}
114
102
  if applicableBuffType.resistanceType == 1 or applicableBuffType.resistanceType == nil then
115
103
  if applicableBuffType.polarity == 2 or applicableBuffType.polarity == nil then
116
- local applicatorAbilityType = prepareAbilityType(CrippleAbilityType, applicableBuffType)
117
- applicatorAbilityType.movementSpeedDecreaseFactor = 0
118
- applicatorAbilityType.attackSpeedDecreaseFactor = 0
119
- applicatorAbilityType.damageDecreaseFactor = 0
104
+ local applicatorAbilityType = prepareAbilityType(CurseAbilityType, applicableBuffType)
105
+ applicatorAbilityType.missProbability = 0
120
106
  applicatorAbilityType.buffTypeIds = {applicableBuffType.id}
121
- applicatorAbilityTypeIdByApplicatorType[852189] = applicatorAbilityType.id
107
+ applicatorAbilityTypeIdByApplicatorType[852190] = applicatorAbilityType.id
122
108
  end
123
109
  if applicableBuffType.polarity == 1 or applicableBuffType.polarity == nil then
124
110
  local applicatorAbilityType = prepareAbilityType(BloodLustAbilityType, applicableBuffType)
@@ -135,6 +121,10 @@ local applicatorAbilityTypeIdByApplicatorTypeByApplicableBuffTypeId, applicatorU
135
121
  applicatorAbilityType.damagePerSecond = 0
136
122
  applicatorAbilityType.movementSpeedDecreaseFactor = 0
137
123
  applicatorAbilityType.attackSpeedDecreaseFactor = 0
124
+ applicatorAbilityType.isDamageStacking = false
125
+ applicatorAbilityType.isMovementSpeedFactorStacking = false
126
+ applicatorAbilityType.isAttackSpeedFactorStacking = false
127
+ applicatorAbilityType.isAbleToKill = false
138
128
  applicatorAbilityType.buffTypeIds = {applicableBuffType.id, applicableBuffType.id}
139
129
  applicatorAbilityTypeIdByApplicatorType[852173] = applicatorAbilityType.id
140
130
  end
@@ -142,6 +132,7 @@ local applicatorAbilityTypeIdByApplicatorTypeByApplicableBuffTypeId, applicatorU
142
132
  local applicatorAbilityType = prepareAbilityType(BerserkAbilityType, applicableBuffType)
143
133
  applicatorAbilityType.attackSpeedIncreaseFactor = 0
144
134
  applicatorAbilityType.movementSpeedIncreaseFactor = 0
135
+ applicatorAbilityType.receivedDamageIncreaseFactor = 0
145
136
  applicatorAbilityType.buffTypeIds = {applicableBuffType.id}
146
137
  if applicatorAbilityType.levelCount > 1 then
147
138
  multilevelPhysicalPositiveApplicatorAbilityTypes[#multilevelPhysicalPositiveApplicatorAbilityTypes + 1] = applicatorAbilityType
@@ -204,15 +195,6 @@ local EVASION_ABILITY_TYPE_IDS = postcompile(function()
204
195
  "AIcs"
205
196
  }, fourCC))
206
197
  end)
207
- local INVENTORY_ABILITY_TYPE_IDS = postcompile(function()
208
- return toLuaSet(AbilityType:getAllIdsByBaseIds(map({
209
- "AInv",
210
- "Aihn",
211
- "Aien",
212
- "Aion",
213
- "Aiun"
214
- }, fourCC)))
215
- end)
216
198
  local SEARING_ARROWS_DUMMY_ABILITY_TYPE_ID = compiletime(function()
217
199
  local abilityType = SearingArrowsAbilityType:create()
218
200
  abilityType.isInternal = true
@@ -244,8 +226,8 @@ Unit.abilityCastingStartEvent[SEARING_ARROWS_DUMMY_ABILITY_TYPE_ID]:addListener(
244
226
  )
245
227
  ---
246
228
  -- @internal For use by internal systems only.
247
- ____exports.internalApplyBuff = function(unit, applicableBuffTypeId, polarity, resistanceType, level, duration, spellStealPriority, learnLevelMinimum, movementSpeedIncreaseFactor)
248
- local applicatorType = polarity == 1 and (resistanceType == 1 and 852101 or 852100) or (polarity == 2 and (resistanceType == 1 and 852189 or 852173) or 0)
229
+ ____exports.internalApplyBuff = function(unit, applicableBuffTypeId, polarity, resistanceType, level, duration, spellStealPriority, learnLevelMinimum, missProbability)
230
+ local applicatorType = polarity == 1 and (resistanceType == 1 and 852101 or 852100) or (polarity == 2 and (resistanceType == 1 and 852190 or 852173) or 0)
249
231
  local ____opt_1 = applicatorAbilityTypeIdByApplicatorTypeByApplicableBuffTypeId[applicableBuffTypeId]
250
232
  local applicatorAbilityTypeId = ____opt_1 and ____opt_1[applicatorType]
251
233
  if applicatorAbilityTypeId == nil then
@@ -267,8 +249,7 @@ ____exports.internalApplyBuff = function(unit, applicableBuffTypeId, polarity, r
267
249
  applicatorAbilityTypeId,
268
250
  preparePhysicalPositiveApplicatorAbility,
269
251
  level,
270
- duration or 0,
271
- movementSpeedIncreaseFactor
252
+ duration or 0
272
253
  )
273
254
  if level ~= nil and level > 0 then
274
255
  local upgradeId = applicatorUpgradeIdByApplicatorAbilityTypeId[applicatorAbilityTypeId]
@@ -298,6 +279,9 @@ ____exports.internalApplyBuff = function(unit, applicableBuffTypeId, polarity, r
298
279
  ability:setField(ABILITY_RLF_DURATION_HERO, level, actualDuration)
299
280
  ability:setField(ABILITY_IF_PRIORITY, spellStealPriority or 0)
300
281
  ability:setField(ABILITY_IF_REQUIRED_LEVEL, learnLevelMinimum or 6)
282
+ if missProbability ~= nil and applicatorType == 852190 then
283
+ ability:setField(ABILITY_RLF_CHANCE_TO_MISS_CRS, missProbability)
284
+ end
301
285
  end,
302
286
  applicatorType,
303
287
  unit
@@ -309,16 +293,13 @@ ____exports.internalApplyBuff = function(unit, applicableBuffTypeId, polarity, r
309
293
  end
310
294
  return success
311
295
  end
312
- preparePhysicalPositiveApplicatorAbility = function(ability, level, duration, movementSpeedIncreaseFactor)
296
+ preparePhysicalPositiveApplicatorAbility = function(ability, level, duration)
313
297
  if level == nil then
314
298
  setAbilityIntegerField(ability, ABILITY_IF_LEVELS, 1)
315
299
  level = 1
316
300
  end
317
301
  setAbilityRealLevelField(ability, ABILITY_RLF_DURATION_NORMAL, level, duration)
318
302
  setAbilityRealLevelField(ability, ABILITY_RLF_DURATION_HERO, level, duration)
319
- if movementSpeedIncreaseFactor ~= nil then
320
- setAbilityRealLevelField(ability, ABILITY_RLF_MOVEMENT_SPEED_INCREASE_BSK1, level, movementSpeedIncreaseFactor)
321
- end
322
303
  end
323
304
  ---
324
305
  -- @internal For use by internal systems only.
@@ -3,12 +3,16 @@ import { TupleOf } from "../../../utility/types";
3
3
  import { AttachmentPreset, AttachmentPresetInput } from "../auxiliary/attachment-preset";
4
4
  import { Race } from "../auxiliary/race";
5
5
  import { SoundPresetName } from "../auxiliary/sound-preset-name";
6
- import { ObjectDataEntry, ObjectDataEntryId } from "../entry";
6
+ import { ObjectDataEntry, ObjectDataEntryConstructor, ObjectDataEntryId } from "../entry";
7
7
  import { LightningTypeId } from "./lightning-type";
8
- export type BuffTypeId = ObjectDataEntryId & {
8
+ export type BuffTypeId = ObjectDataEntryId & number & {
9
9
  readonly __buffTypeId: unique symbol;
10
10
  };
11
+ export type StandardBuffTypeId = BuffTypeId & {
12
+ readonly __standardBuffTypeId: unique symbol;
13
+ };
11
14
  export declare abstract class BuffType<Id extends BuffTypeId = BuffTypeId> extends ObjectDataEntry<Id> {
15
+ static readonly [id: StandardBuffTypeId]: ObjectDataEntryConstructor<BuffType>;
12
16
  private static readonly idGenerator;
13
17
  protected static generateId(): number;
14
18
  protected static getObjectData(map: WarMap): WarObjects;
@@ -51,13 +55,3 @@ export declare abstract class BuffType<Id extends BuffTypeId = BuffTypeId> exten
51
55
  get tooltipExtendedText(): string;
52
56
  set tooltipExtendedText(tooltipText: string);
53
57
  }
54
- declare const AvatarBuffType_base: typeof BuffType;
55
- export declare class AvatarBuffType extends AvatarBuffType_base {
56
- }
57
- declare const DevotionAuraBuffType_base: typeof BuffType;
58
- export declare class DevotionAuraBuffType extends DevotionAuraBuffType_base {
59
- }
60
- declare const DivineShieldBuffType_base: typeof BuffType;
61
- export declare class DivineShieldBuffType extends DivineShieldBuffType_base {
62
- }
63
- export {};
@@ -6,6 +6,8 @@ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
6
6
  local ____exports = {}
7
7
  local ____arrays = require("utility.arrays")
8
8
  local array = ____arrays.array
9
+ local ____reflection = require("utility.reflection")
10
+ local implementReadonlyNumberIndexSupplier = ____reflection.implementReadonlyNumberIndexSupplier
9
11
  local ____entry = require("engine.object-data.entry")
10
12
  local ObjectDataEntry = ____entry.ObjectDataEntry
11
13
  local ____object_2Ddata_2Dentry_2Did_2Dgenerator = require("engine.object-data.utility.object-data-entry-id-generator")
@@ -94,10 +96,10 @@ __TS__SetDescriptor(
94
96
  "lightningTypeIds",
95
97
  {
96
98
  get = function(self)
97
- return self:getObjectDataEntryIdsField("flig")
99
+ return self:getObjectDataEntryNumericIdsField("flig")
98
100
  end,
99
101
  set = function(self, lightningTypeIds)
100
- self:setObjectDataEntryIdsField("flig", lightningTypeIds)
102
+ self:setObjectDataEntryNumericIdsField("flig", lightningTypeIds)
101
103
  end
102
104
  },
103
105
  true
@@ -285,32 +287,14 @@ __TS__SetDescriptor(
285
287
  },
286
288
  true
287
289
  )
288
- local function makeBaseBuffType(id)
289
- local BaseBuffType = __TS__Class()
290
- BaseBuffType.name = "BaseBuffType"
291
- __TS__ClassExtends(BaseBuffType, ____exports.BuffType)
292
- BaseBuffType.BASE_ID = id
293
- return BaseBuffType
294
- end
295
- ____exports.AvatarBuffType = __TS__Class()
296
- local AvatarBuffType = ____exports.AvatarBuffType
297
- AvatarBuffType.name = "AvatarBuffType"
298
- __TS__ClassExtends(
299
- AvatarBuffType,
300
- makeBaseBuffType(fourCC("BHav"))
301
- )
302
- ____exports.DevotionAuraBuffType = __TS__Class()
303
- local DevotionAuraBuffType = ____exports.DevotionAuraBuffType
304
- DevotionAuraBuffType.name = "DevotionAuraBuffType"
305
- __TS__ClassExtends(
306
- DevotionAuraBuffType,
307
- makeBaseBuffType(fourCC("BHad"))
308
- )
309
- ____exports.DivineShieldBuffType = __TS__Class()
310
- local DivineShieldBuffType = ____exports.DivineShieldBuffType
311
- DivineShieldBuffType.name = "DivineShieldBuffType"
312
- __TS__ClassExtends(
313
- DivineShieldBuffType,
314
- makeBaseBuffType(fourCC("BHds"))
290
+ implementReadonlyNumberIndexSupplier(
291
+ ____exports.BuffType,
292
+ function(id)
293
+ local ____class_0 = __TS__Class()
294
+ ____class_0.name = ____class_0.name
295
+ __TS__ClassExtends(____class_0, ____exports.BuffType)
296
+ ____class_0.BASE_ID = id
297
+ return ____class_0
298
+ end
315
299
  )
316
300
  return ____exports
@@ -2,7 +2,7 @@
2
2
  import { ArmorSoundType } from "../auxiliary/armor-sound-type";
3
3
  import { CombatClassifications } from "../auxiliary/combat-classification";
4
4
  import { ObjectDataEntry, ObjectDataEntryId } from "../entry";
5
- export type DestructibleTypeId = ObjectDataEntryId & {
5
+ export type DestructibleTypeId = ObjectDataEntryId & number & {
6
6
  readonly __destructibleTypeId: unique symbol;
7
7
  };
8
8
  export declare abstract class DestructibleType extends ObjectDataEntry<DestructibleTypeId> {
@@ -2,7 +2,7 @@
2
2
  import { ArmorSoundType } from "../auxiliary/armor-sound-type";
3
3
  import { ObjectDataEntry, ObjectDataEntryId } from "../entry";
4
4
  import type { AbilityTypeId } from "./ability-type";
5
- export type ItemTypeId = ObjectDataEntryId & {
5
+ export type ItemTypeId = ObjectDataEntryId & number & {
6
6
  readonly __itemTypeId: unique symbol;
7
7
  };
8
8
  export declare class ItemType extends ObjectDataEntry<ItemTypeId> {
@@ -27,10 +27,10 @@ __TS__SetDescriptor(
27
27
  "abilityTypeIds",
28
28
  {
29
29
  get = function(self)
30
- return self:getObjectDataEntryIdsField("iabi")
30
+ return self:getObjectDataEntryNumericIdsField("iabi")
31
31
  end,
32
32
  set = function(self, abilityTypeIds)
33
- self:setObjectDataEntryIdsField("iabi", abilityTypeIds)
33
+ self:setObjectDataEntryNumericIdsField("iabi", abilityTypeIds)
34
34
  end
35
35
  },
36
36
  true
@@ -261,10 +261,10 @@ __TS__SetDescriptor(
261
261
  "cooldownGroupId",
262
262
  {
263
263
  get = function(self)
264
- return self:getObjectDataEntryIdField("icid")
264
+ return self:getObjectDataEntryNumericIdField("icid")
265
265
  end,
266
266
  set = function(self, cooldownGroupId)
267
- self:setObjectDataEntryIdField("icid", cooldownGroupId)
267
+ self:setObjectDataEntryNumericIdField("icid", cooldownGroupId)
268
268
  end
269
269
  },
270
270
  true
@@ -1,7 +1,7 @@
1
1
  /** @noSelfInFile */
2
2
  import { ObjectDataEntry, ObjectDataEntryConstructor, ObjectDataEntryId } from "../entry";
3
3
  import { Color } from "../../../core/types/color";
4
- export type LightningTypeId = ObjectDataEntryId & {
4
+ export type LightningTypeId = ObjectDataEntryId & number & {
5
5
  readonly __lightningTypeId: unique symbol;
6
6
  };
7
7
  export type StandardLightningTypeId = LightningTypeId & {
@@ -0,0 +1,33 @@
1
+ /** @noSelfInFile */
2
+ import { ObjectDataEntry, ObjectDataEntryId } from "../entry";
3
+ import { SoundEax } from "../auxiliary/sound-eax";
4
+ export type SoundPresetId = ObjectDataEntryId & string & {
5
+ readonly __soundPresetId: unique symbol;
6
+ };
7
+ export type StandardSoundPresetId = SoundPresetId & {
8
+ readonly __standardSoundPresetId: unique symbol;
9
+ };
10
+ export declare class SoundPreset extends ObjectDataEntry<SoundPresetId> {
11
+ static readonly BASE_ID: SoundPresetId;
12
+ private static nextId;
13
+ protected static generateId(): string;
14
+ protected static getObjectData(map: WarMap): WarObjects;
15
+ get filePaths(): string[];
16
+ set filePaths(filePaths: string[]);
17
+ get volume(): number;
18
+ set volume(volume: number);
19
+ get pitch(): number;
20
+ set pitch(pitch: number);
21
+ get priority(): number;
22
+ set priority(priority: number);
23
+ get channel(): number;
24
+ set channel(channel: number);
25
+ get minimumDistance(): number;
26
+ set minimumDistance(minimumDistance: number);
27
+ get maximumDistance(): number;
28
+ set maximumDistance(maximumDistance: number);
29
+ get distanceCutoff(): number;
30
+ set distanceCutoff(distanceCutoff: number);
31
+ get eax(): SoundEax;
32
+ set eax(eax: SoundEax);
33
+ }