warscript 0.0.1-dev.3324599 → 0.0.1-dev.33b52d0

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 (278) hide show
  1. package/core/dummy.lua +4 -2
  2. package/core/types/effect.d.ts +11 -1
  3. package/core/types/effect.lua +43 -77
  4. package/core/types/frame.d.ts +16 -2
  5. package/core/types/frame.lua +81 -66
  6. package/core/types/handle.lua +9 -9
  7. package/core/types/missile.lua +8 -7
  8. package/core/types/player.d.ts +2 -1
  9. package/core/types/player.lua +18 -13
  10. package/core/types/playerColor.lua +4 -3
  11. package/core/types/sound.d.ts +1 -1
  12. package/core/types/sound.lua +13 -8
  13. package/core/types/tileCell.d.ts +7 -2
  14. package/core/types/tileCell.lua +11 -0
  15. package/core/types/unit.d.ts +5 -0
  16. package/core/types/unit.lua +5 -0
  17. package/core/util.d.ts +3 -1
  18. package/core/util.lua +109 -3
  19. package/decl/native.d.ts +706 -7
  20. package/engine/ability-type-extended-tooltip.d.ts +8 -0
  21. package/engine/ability-type-extended-tooltip.lua +44 -0
  22. package/engine/behaviour/ability/apply-unit-behavior.lua +5 -0
  23. package/engine/behaviour/ability/damage.d.ts +1 -0
  24. package/engine/behaviour/ability/damage.lua +12 -14
  25. package/engine/behaviour/ability/emulate-impact.d.ts +14 -0
  26. package/engine/behaviour/ability/emulate-impact.lua +79 -5
  27. package/engine/behaviour/ability/instant-impact.d.ts +12 -1
  28. package/engine/behaviour/ability/instant-impact.lua +17 -2
  29. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  30. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  31. package/engine/behaviour/ability.d.ts +8 -0
  32. package/engine/behaviour/ability.lua +89 -8
  33. package/engine/behaviour/unit.d.ts +1 -0
  34. package/engine/behaviour/unit.lua +1 -0
  35. package/engine/buff.d.ts +65 -54
  36. package/engine/buff.lua +318 -243
  37. package/engine/index.d.ts +2 -1
  38. package/engine/internal/ability.d.ts +7 -0
  39. package/engine/internal/ability.lua +65 -36
  40. package/engine/internal/item/owner-cache.d.ts +5 -0
  41. package/engine/internal/item/owner-cache.lua +4 -0
  42. package/engine/internal/item+owner.d.ts +2 -0
  43. package/engine/internal/item+owner.lua +27 -4
  44. package/engine/internal/item.d.ts +20 -1
  45. package/engine/internal/item.lua +146 -20
  46. package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
  47. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  48. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  49. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  50. package/engine/internal/object-data/returned-melee-damage-factor.d.ts +2 -0
  51. package/engine/internal/object-data/returned-melee-damage-factor.lua +21 -0
  52. package/engine/internal/unit/ability.lua +16 -0
  53. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  54. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  55. package/engine/internal/unit/appearance.d.ts +15 -0
  56. package/engine/internal/unit/appearance.lua +85 -0
  57. package/engine/internal/unit/bonus.d.ts +11 -0
  58. package/engine/internal/unit/bonus.lua +80 -5
  59. package/engine/internal/unit/buff.d.ts +2 -2
  60. package/engine/internal/unit/buff.lua +34 -19
  61. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  62. package/engine/internal/unit/equipment-inventory.lua +233 -0
  63. package/engine/internal/unit/expiration-timer.lua +1 -1
  64. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  65. package/engine/internal/unit/extended-inventory.lua +99 -0
  66. package/engine/internal/unit/ignore-events-items.lua +10 -1
  67. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  68. package/engine/internal/unit/inventory.lua +87 -0
  69. package/engine/internal/unit/item-container.d.ts +25 -0
  70. package/engine/internal/unit/item-container.lua +11 -0
  71. package/engine/internal/unit/item-order-events.d.ts +17 -0
  72. package/engine/internal/unit/item-order-events.lua +67 -0
  73. package/engine/internal/unit/item-slot.d.ts +27 -0
  74. package/engine/internal/unit/item-slot.lua +92 -0
  75. package/engine/internal/unit/order.d.ts +3 -3
  76. package/engine/internal/unit/order.lua +10 -10
  77. package/engine/internal/unit+ability.d.ts +2 -1
  78. package/engine/internal/unit+ability.lua +73 -2
  79. package/engine/internal/unit+damage.d.ts +9 -0
  80. package/engine/internal/unit+damage.lua +33 -0
  81. package/engine/internal/unit+rally.lua +9 -31
  82. package/engine/internal/unit-missile-data.lua +96 -68
  83. package/engine/internal/unit-missile-launch.lua +13 -13
  84. package/engine/internal/unit.d.ts +2 -10
  85. package/engine/internal/unit.lua +53 -100
  86. package/engine/lightning.lua +4 -4
  87. package/engine/local-client.d.ts +21 -0
  88. package/engine/local-client.lua +242 -57
  89. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -0
  90. package/engine/object-data/auxiliary/attachment-preset.lua +7 -0
  91. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  92. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  93. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  94. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  95. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  96. package/engine/object-data/auxiliary/item-class.lua +2 -0
  97. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  98. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  99. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  100. package/engine/object-data/auxiliary/order-type.lua +2 -0
  101. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  102. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  103. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  104. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  105. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  106. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  107. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  108. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  109. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  110. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  111. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  112. package/engine/object-data/entry/ability-type/barrage.d.ts +12 -0
  113. package/engine/object-data/entry/ability-type/barrage.lua +52 -0
  114. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  115. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  116. package/engine/object-data/entry/ability-type/blank-configurable.lua +2 -2
  117. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
  118. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
  119. package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -0
  120. package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
  121. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  122. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  123. package/engine/object-data/entry/ability-type/channel.d.ts +2 -2
  124. package/engine/object-data/entry/ability-type/channel.lua +3 -3
  125. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  126. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  127. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  128. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  129. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  130. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  131. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  132. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  133. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  134. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  135. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  136. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  137. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  138. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  139. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  140. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  141. package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
  142. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  143. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  144. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  145. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  146. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  147. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  148. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  149. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  150. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  151. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  152. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  153. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  154. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  155. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  156. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  157. package/engine/object-data/entry/ability-type/healing-modifier.d.ts +9 -0
  158. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  159. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  160. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  161. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  162. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  163. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  164. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  165. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  166. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  167. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  168. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  169. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  170. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  171. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  172. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  173. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  174. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  175. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  176. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  177. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  178. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  179. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  180. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  181. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  182. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  183. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  184. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  185. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  186. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  187. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  188. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  189. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  190. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  191. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  192. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  193. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  194. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  195. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  196. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  197. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  198. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  199. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  200. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  201. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  202. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  203. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  204. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  205. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  206. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  207. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  208. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  209. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  210. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  211. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  212. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  213. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  214. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  215. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  216. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  217. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  218. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  219. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  220. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  221. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  222. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  223. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  224. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  225. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  226. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  227. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  228. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  229. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  230. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  231. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  232. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  233. package/engine/object-data/entry/ability-type.d.ts +33 -8
  234. package/engine/object-data/entry/ability-type.lua +256 -48
  235. package/engine/object-data/entry/buff-type/applicable.lua +10 -3
  236. package/engine/object-data/entry/buff-type.d.ts +6 -2
  237. package/engine/object-data/entry/buff-type.lua +26 -0
  238. package/engine/object-data/entry/destructible-type.d.ts +6 -2
  239. package/engine/object-data/entry/destructible-type.lua +26 -0
  240. package/engine/object-data/entry/item-type.d.ts +18 -3
  241. package/engine/object-data/entry/item-type.lua +84 -0
  242. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  243. package/engine/object-data/entry/lightning-type.lua +1 -1
  244. package/engine/object-data/entry/sound-preset.d.ts +2 -2
  245. package/engine/object-data/entry/unit-type.d.ts +57 -2
  246. package/engine/object-data/entry/unit-type.lua +412 -64
  247. package/engine/object-data/entry/upgrade.d.ts +2 -2
  248. package/engine/object-data/entry.d.ts +6 -1
  249. package/engine/object-data/entry.lua +8 -0
  250. package/engine/random.lua +1 -1
  251. package/engine/standard/entries/ability-type.d.ts +3102 -7
  252. package/engine/standard/entries/ability-type.lua +0 -6
  253. package/engine/standard/entries/buff-type.d.ts +45 -0
  254. package/engine/standard/entries/buff-type.lua +43 -0
  255. package/engine/standard/entries/item-type.d.ts +1299 -0
  256. package/engine/standard/entries/item-type.lua +2 -0
  257. package/engine/standard/entries/lightning-type.d.ts +42 -15
  258. package/engine/standard/entries/lightning-type.lua +0 -14
  259. package/engine/standard/entries/unit-type.d.ts +5 -0
  260. package/engine/standard/entries/unit-type.lua +5 -0
  261. package/engine/standard/fields/ability.d.ts +2 -2
  262. package/engine/standard/fields/ability.lua +2 -2
  263. package/engine/text-tag.d.ts +13 -1
  264. package/engine/text-tag.lua +76 -37
  265. package/engine/unit.d.ts +5 -1
  266. package/engine/unit.lua +5 -1
  267. package/event.d.ts +1 -1
  268. package/network.lua +25 -1
  269. package/objutil/buff.lua +1 -1
  270. package/operation.d.ts +8 -1
  271. package/operation.lua +37 -14
  272. package/package.json +2 -22
  273. package/utility/arrays.d.ts +7 -1
  274. package/utility/arrays.lua +17 -0
  275. package/utility/random.d.ts +102 -0
  276. package/utility/random.lua +273 -0
  277. package/utility/unordered-map.lua +9 -4
  278. package/engine/internal/unit/item.lua +0 -78
package/core/dummy.lua CHANGED
@@ -15,6 +15,8 @@ local ____preconditions = require("utility.preconditions")
15
15
  local checkNotNull = ____preconditions.checkNotNull
16
16
  local ____ability = require("engine.internal.ability")
17
17
  local getOrderIdByAbilityTypeId = ____ability.getOrderIdByAbilityTypeId
18
+ local ____unit_2Dability_2Dlevel_2Dnatives = require("engine.internal.misc.unit-ability-level-natives")
19
+ local rawSetUnitAbilityLevel = ____unit_2Dability_2Dlevel_2Dnatives.rawSetUnitAbilityLevel
18
20
  local neutralVictim = Player.neutralVictim.handle
19
21
  ____exports.InstantDummyCaster = __TS__Class()
20
22
  local InstantDummyCaster = ____exports.InstantDummyCaster
@@ -42,7 +44,7 @@ function InstantDummyCaster.prototype.prepare(self, owner, abilityId, level)
42
44
  if type(abilityId) == "number" then
43
45
  UnitAddAbility(dummy, abilityId)
44
46
  if type(level) == "number" then
45
- SetUnitAbilityLevel(dummy, abilityId, level + 1)
47
+ rawSetUnitAbilityLevel(dummy, abilityId, level + 1)
46
48
  else
47
49
  level(UnitAbility:of(
48
50
  checkNotNull(BlzGetUnitAbility(dummy, abilityId)),
@@ -56,7 +58,7 @@ function InstantDummyCaster.prototype.prepare(self, owner, abilityId, level)
56
58
  end
57
59
  if __TS__ArrayIsArray(level) then
58
60
  for i = 1, #abilityId do
59
- SetUnitAbilityLevel(dummy, abilityId[i], level[i] + 1)
61
+ rawSetUnitAbilityLevel(dummy, abilityId[i], level[i] + 1)
60
62
  end
61
63
  else
62
64
  local abilities = {}
@@ -5,7 +5,9 @@ import { PlayerColor } from "./playerColor";
5
5
  declare const enum EffectPropertyKey {
6
6
  COLOR = 100,
7
7
  PITCH = 101,
8
- ROLL = 102
8
+ ROLL = 102,
9
+ BLEND_TIME = 103,
10
+ TIME_SCALE = 104
9
11
  }
10
12
  export type EffectParameters = {
11
13
  readonly delay?: number;
@@ -21,7 +23,15 @@ export declare class Effect extends Handle<jeffect> {
21
23
  private [EffectPropertyKey.COLOR]?;
22
24
  private [EffectPropertyKey.PITCH]?;
23
25
  private [EffectPropertyKey.ROLL]?;
26
+ private [EffectPropertyKey.BLEND_TIME]?;
27
+ private [EffectPropertyKey.TIME_SCALE]?;
24
28
  protected onDestroy(): HandleDestructor;
29
+ setAnimation(animation: string): void;
30
+ queueAnimation(animation: string): void;
31
+ get blendTime(): number;
32
+ set blendTime(blendTime: number);
33
+ get timeScale(): number;
34
+ set timeScale(timeScale: number);
25
35
  get color(): PlayerColor;
26
36
  set color(color: PlayerColor);
27
37
  get scale(): number;
@@ -15,25 +15,22 @@ local ____timer = require("core.types.timer")
15
15
  local Timer = ____timer.Timer
16
16
  local ____unit = require("engine.internal.unit")
17
17
  local Unit = ____unit.Unit
18
- local ____pairs = _G.pairs
19
- local select = _G.select
20
- local mathRad = math.rad
21
18
  local addSpecialEffect = AddSpecialEffect
22
19
  local addSpecialEffectTarget = AddSpecialEffectTarget
23
20
  local destroyEffect = DestroyEffect
21
+ local getLocationZ = GetLocationZ
24
22
  local getSpecialEffectScale = BlzGetSpecialEffectScale
25
- local playSpecialEffect = BlzPlaySpecialEffect
26
- local setSpecialEffectScale = BlzSetSpecialEffectScale
23
+ local moveLocation = MoveLocation
24
+ local queueSpecialEffectAnimation = BlzQueueSpecialEffectAnimation
25
+ local setSpecialEffectAnimation = BlzSetSpecialEffectAnimation
26
+ local setSpecialEffectAnimationBlendTime = BlzSetSpecialEffectAnimationBlendTime
27
+ local setSpecialEffectTimeScale = BlzSetSpecialEffectTimeScale
28
+ local setSpecialEffectColorByPlayer = BlzSetSpecialEffectColorByPlayer
27
29
  local setSpecialEffectPitch = BlzSetSpecialEffectPitch
28
30
  local setSpecialEffectRoll = BlzSetSpecialEffectRoll
29
- local setSpecialEffectColorByPlayer = BlzSetSpecialEffectColorByPlayer
30
- local specialEffectAddSubAnimation = BlzSpecialEffectAddSubAnimation
31
- local specialEffectClearSubAnimations = BlzSpecialEffectClearSubAnimations
32
- local specialEffectRemoveSubAnimation = BlzSpecialEffectRemoveSubAnimation
31
+ local setSpecialEffectScale = BlzSetSpecialEffectScale
33
32
  local setSpecialEffectZ = BlzSetSpecialEffectZ
34
- local getLocationZ = GetLocationZ
35
- local getUnitZ = BlzGetUnitZ
36
- local moveLocation = MoveLocation
33
+ local mathRad = math.rad
37
34
  local location = Location(0, 0)
38
35
  local function setSpecialEffectPitchDegrees(effect, pitch)
39
36
  setSpecialEffectPitch(
@@ -47,71 +44,6 @@ local function setSpecialEffectRollDegrees(effect, roll)
47
44
  -mathRad(roll)
48
45
  )
49
46
  end
50
- local animTypeByAnimationName = {
51
- attack = ANIM_TYPE_ATTACK,
52
- birth = ANIM_TYPE_BIRTH,
53
- death = ANIM_TYPE_DEATH,
54
- decay = ANIM_TYPE_DECAY,
55
- dissipate = ANIM_TYPE_DISSIPATE,
56
- morph = ANIM_TYPE_MORPH,
57
- portrait = ANIM_TYPE_PORTRAIT,
58
- sleep = ANIM_TYPE_SLEEP,
59
- spell = ANIM_TYPE_SPELL,
60
- stand = ANIM_TYPE_STAND,
61
- walk = ANIM_TYPE_WALK
62
- }
63
- local subAnimTypeByAnimationQualifier = {
64
- alternate = SUBANIM_TYPE_ROOTED,
65
- alternateex = SUBANIM_TYPE_ALTERNATE_EX,
66
- chain = SUBANIM_TYPE_CHAINLIGHTNING,
67
- channel = SUBANIM_TYPE_CHANNEL,
68
- complete = SUBANIM_TYPE_COMPLETE,
69
- critical = SUBANIM_TYPE_CRITICAL,
70
- defend = SUBANIM_TYPE_DEFEND,
71
- drain = SUBANIM_TYPE_DRAIN,
72
- eattree = SUBANIM_TYPE_EATTREE,
73
- fast = SUBANIM_TYPE_FAST,
74
- fill = SUBANIM_TYPE_FILL,
75
- flail = SUBANIM_TYPE_FLAIL,
76
- flesh = SUBANIM_TYPE_FLESH,
77
- fifth = SUBANIM_TYPE_FIFTH,
78
- fire = SUBANIM_TYPE_FIRE,
79
- first = SUBANIM_TYPE_FIRST,
80
- five = SUBANIM_TYPE_FIVE,
81
- four = SUBANIM_TYPE_FOUR,
82
- fourth = SUBANIM_TYPE_FOURTH,
83
- gold = SUBANIM_TYPE_GOLD,
84
- hit = SUBANIM_TYPE_HIT,
85
- large = SUBANIM_TYPE_LARGE,
86
- left = SUBANIM_TYPE_LEFT,
87
- light = SUBANIM_TYPE_LIGHT,
88
- looping = SUBANIM_TYPE_LOOPING,
89
- lumber = SUBANIM_TYPE_LUMBER,
90
- medium = SUBANIM_TYPE_MEDIUM,
91
- moderate = SUBANIM_TYPE_MODERATE,
92
- off = SUBANIM_TYPE_OFF,
93
- one = SUBANIM_TYPE_ONE,
94
- puke = SUBANIM_TYPE_PUKE,
95
- ready = SUBANIM_TYPE_READY,
96
- right = SUBANIM_TYPE_RIGHT,
97
- second = SUBANIM_TYPE_SECOND,
98
- severe = SUBANIM_TYPE_SEVERE,
99
- slam = SUBANIM_TYPE_SLAM,
100
- small = SUBANIM_TYPE_SMALL,
101
- spiked = SUBANIM_TYPE_SPIKED,
102
- spin = SUBANIM_TYPE_SPIN,
103
- swim = SUBANIM_TYPE_SWIM,
104
- talk = SUBANIM_TYPE_TALK,
105
- third = SUBANIM_TYPE_THIRD,
106
- three = SUBANIM_TYPE_THREE,
107
- throw = SUBANIM_TYPE_THROW,
108
- two = SUBANIM_TYPE_TWO,
109
- turn = SUBANIM_TYPE_TURN,
110
- victory = SUBANIM_TYPE_VICTORY,
111
- work = SUBANIM_TYPE_WORK,
112
- wounded = SUBANIM_TYPE_WOUNDED,
113
- upgrade = SUBANIM_TYPE_UPGRADE
114
- }
115
47
  local function setSpecialEffectColor(effect, color)
116
48
  local dummyColor = dummyPlayer.color
117
49
  dummyPlayer.color = color
@@ -178,6 +110,12 @@ function Effect.prototype.onDestroy(self)
178
110
  destroyEffect(self.handle)
179
111
  return Handle.prototype.onDestroy(self)
180
112
  end
113
+ function Effect.prototype.setAnimation(self, animation)
114
+ setSpecialEffectAnimation(self.handle, animation)
115
+ end
116
+ function Effect.prototype.queueAnimation(self, animation)
117
+ queueSpecialEffectAnimation(self.handle, animation)
118
+ end
181
119
  function Effect.create(self, modelPath, xOrWidget, yOrAttachmentPoint, parameters)
182
120
  local effect = self:of(addSpecialEffectInternal(modelPath, xOrWidget, yOrAttachmentPoint, parameters))
183
121
  if parameters ~= nil then
@@ -210,6 +148,34 @@ function Effect.flash(self, modelPath, xOrWidget, yOrOrAttachmentPoint, paramete
210
148
  parameters
211
149
  )
212
150
  end
151
+ __TS__SetDescriptor(
152
+ Effect.prototype,
153
+ "blendTime",
154
+ {
155
+ get = function(self)
156
+ return self[103] or 0
157
+ end,
158
+ set = function(self, blendTime)
159
+ setSpecialEffectAnimationBlendTime(self.handle, blendTime)
160
+ self[103] = blendTime
161
+ end
162
+ },
163
+ true
164
+ )
165
+ __TS__SetDescriptor(
166
+ Effect.prototype,
167
+ "timeScale",
168
+ {
169
+ get = function(self)
170
+ return self[104] or 1
171
+ end,
172
+ set = function(self, timeScale)
173
+ setSpecialEffectTimeScale(self.handle, timeScale)
174
+ self[104] = timeScale
175
+ end
176
+ },
177
+ true
178
+ )
213
179
  __TS__SetDescriptor(
214
180
  Effect.prototype,
215
181
  "color",
@@ -80,6 +80,7 @@ export declare class Frame extends Handle<jframehandle> {
80
80
  get onMouseLeave(): FrameEvent;
81
81
  get onMouseUp(): FrameEvent;
82
82
  get onMouseWheel(): FrameEvent<[number]>;
83
+ private trackMouseLocally;
83
84
  get mouseEnterLocalEvent(): Event;
84
85
  get mouseLeaveLocalEvent(): Event;
85
86
  get popupMenuItemChangeEvent(): FrameEvent<[
@@ -136,8 +137,21 @@ export declare class Frame extends Handle<jframehandle> {
136
137
  static get onMouseUp(): Event<[Player, jmousebuttontype, number, number]>;
137
138
  private static onMouseDownEvent?;
138
139
  static get onMouseDown(): Event<[Player, jmousebuttontype, number, number]>;
139
- static get onMouseMove(): Event<[player: Player, x: number, y: number]>;
140
- static get onMouseMoveLocal(): Event<[x: number, y: number]>;
140
+ /**
141
+ * Synchronized native mouse movement of every player. Each movement of every player's
142
+ * cursor is sent over the network, so with several players moving their mice this floods
143
+ * the network and raises the latency for everyone. Prefer {@link mouseMoveLocalEvent} and
144
+ * synchronize the needed coordinates explicitly, only when they matter (e.g. on a click).
145
+ */
146
+ static get mouseMoveEvent(): Event<[player: Player, x: number, y: number]>;
147
+ /**
148
+ * Fires on the local client when the world point under the cursor changes, whether the
149
+ * cursor or the camera moved. Polls the local cursor position every 1/64 second and sends
150
+ * nothing over the network. The point is the camera ray's intersection with the terrain,
151
+ * so it ignores units and doodads under the cursor. It is also computed while the cursor
152
+ * is over the UI; check {@link isMouseOnWorld} where that matters.
153
+ */
154
+ static get mouseMoveLocalEvent(): Event<[x: number, y: number]>;
141
155
  static createSimple<T extends Frame>(this: FrameSubclass<T>, name: string, parent?: Frame, createContext?: number): T;
142
156
  static create<T extends Frame>(this: FrameSubclass<T>, name: string, parent: Frame, priority?: number, createContext?: number): T;
143
157
  static createByType<T extends Frame>(this: FrameSubclass<T>, typeName: "BACKDROP" | "BUTTON" | "CHATDISPLAY" | "CHECKBOX" | "CONTROL" | "DIALOG" | "EDITBOX" | "FRAME" | "GLUEBUTTON" | "GLUECHECKBOX" | "GLUETEXTBUTTON" | "HIGHLIGHT" | "LISTBOX" | "MENU" | "POPUPMENU" | "SCROLLBAR" | "SLIDER" | "TEXT" | "TEXTAREA" | "TEXTBUTTON", name: string, parent: Frame, inherits?: string, createContext?: number): T;
@@ -21,9 +21,6 @@ local FRAME_MIN_Y = ____frame_2Dcoordinates.FRAME_MIN_Y
21
21
  local getFrameMinXMaxX = ____frame_2Dcoordinates.getFrameMinXMaxX
22
22
  local ____playerCamera = require("core.types.playerCamera")
23
23
  local frameCoordinatesToWorld = ____playerCamera.frameCoordinatesToWorld
24
- local worldCoordinatesToFrame = ____playerCamera.worldCoordinatesToFrame
25
- local ____get_2Dterrain_2Dz = require("engine.internal.misc.get-terrain-z")
26
- local getTerrainZ = ____get_2Dterrain_2Dz.getTerrainZ
27
24
  local ____lua_2Dsets = require("utility.lua-sets")
28
25
  local mutableLuaSet = ____lua_2Dsets.mutableLuaSet
29
26
  local ____socket = require("net.socket")
@@ -39,8 +36,13 @@ local frameIsVisible = BlzFrameIsVisible
39
36
  local frameSetEnable = BlzFrameSetEnable
40
37
  local frameSetScale = BlzFrameSetScale
41
38
  local getHandleId = GetHandleId
39
+ local getLocalClientHeight = BlzGetLocalClientHeight
40
+ local getMouseScreenPosX = BlzGetMouseScreenPosX
41
+ local getMouseScreenPosY = BlzGetMouseScreenPosY
42
42
  local getOriginFrame = BlzGetOriginFrame
43
43
  local location = Location
44
+ local pixelToFrameX = BlzPixelToFrameX
45
+ local pixelToFrameY = BlzPixelToFrameY
44
46
  local ____rawget = _G.rawget
45
47
  local rawset = _G.rawset
46
48
  local invoke = Event.invoke
@@ -142,6 +144,55 @@ do
142
144
  FramePoint.BOTTOM_RIGHT = FRAMEPOINT_BOTTOMRIGHT
143
145
  end
144
146
  local tooltipByFrame = setmetatable({}, {__mode = "k"})
147
+ local isMouseInsideLocallyByFrame = mutableLuaMap()
148
+ local mouseEnterLocalEventByFrame = mutableLuaMap()
149
+ local mouseLeaveLocalEventByFrame = mutableLuaMap()
150
+ local isLocalMouseTrackingStarted = false
151
+ --- Reused across ticks to avoid per-tick allocations: only the first `leftFrameCount` /
152
+ -- `enteredFrameCount` entries are meaningful, stale entries beyond them are never read and are
153
+ -- kept collectable by the weak values mode.
154
+ local leftFrames = setmetatable({}, {__mode = "v"})
155
+ local enteredFrames = setmetatable({}, {__mode = "v"})
156
+ --- All frames share a single poll which invokes every mouse leave event before any mouse enter
157
+ -- event within the same tick. With a poll per event, the invocation order would depend on the
158
+ -- event creation order instead, breaking listeners relying on the natural "leave the old frame,
159
+ -- then enter the new frame" order.
160
+ local function startLocalMouseTracking()
161
+ if isLocalMouseTrackingStarted then
162
+ return
163
+ end
164
+ isLocalMouseTrackingStarted = true
165
+ Timer.onPeriod[1 / 64]:addListener(function()
166
+ local leftFrameCount = 0
167
+ local enteredFrameCount = 0
168
+ for frame, wasMouseInside in pairs(isMouseInsideLocallyByFrame) do
169
+ local tooltip = tooltipByFrame[frame]
170
+ local isMouseInside = tooltip ~= nil and tooltip.visible
171
+ if isMouseInside ~= wasMouseInside then
172
+ isMouseInsideLocallyByFrame[frame] = isMouseInside
173
+ if isMouseInside then
174
+ enteredFrames[enteredFrameCount + 1] = frame
175
+ enteredFrameCount = enteredFrameCount + 1
176
+ else
177
+ leftFrames[leftFrameCount + 1] = frame
178
+ leftFrameCount = leftFrameCount + 1
179
+ end
180
+ end
181
+ end
182
+ for i = 1, leftFrameCount do
183
+ local event = mouseLeaveLocalEventByFrame[leftFrames[i]]
184
+ if event ~= nil then
185
+ Event.invoke(event)
186
+ end
187
+ end
188
+ for i = 1, enteredFrameCount do
189
+ local event = mouseEnterLocalEventByFrame[enteredFrames[i]]
190
+ if event ~= nil then
191
+ Event.invoke(event)
192
+ end
193
+ end
194
+ end)
195
+ end
145
196
  local keyByAsyncInitOriginFrameType = luaMapOf(ORIGIN_FRAME_PORTRAIT_HP_TEXT, "hp", ORIGIN_FRAME_PORTRAIT_MANA_TEXT, "mana")
146
197
  local asyncInitOriginFrameTypeByKey = luaMapInvert(keyByAsyncInitOriginFrameType)
147
198
  local seenAsyncInitOriginFrameTypes = mutableLuaSet()
@@ -198,6 +249,18 @@ function Frame.prototype.getEvent(self, eventType, c)
198
249
  end
199
250
  return self.events[eventId]
200
251
  end
252
+ function Frame.prototype.trackMouseLocally(self)
253
+ if not (tooltipByFrame[self] ~= nil) then
254
+ ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = self
255
+ local tooltip = ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent == self and ____exports.Frame:createByType("SIMPLEFRAME", "", ____exports.Frame.CONSOLE_UI) or ____exports.Frame:createByType("FRAME", "", ____exports.Frame.GAME_UI)
256
+ ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = ____exports.Frame.CONSOLE_UI
257
+ self:setTooltip(tooltip)
258
+ end
259
+ if not (isMouseInsideLocallyByFrame[self] ~= nil) then
260
+ isMouseInsideLocallyByFrame[self] = false
261
+ startLocalMouseTracking()
262
+ end
263
+ end
201
264
  function Frame.prototype.hide(self)
202
265
  self.hideCounter = self.hideCounter + 1
203
266
  if self.hideCounter > 0 then
@@ -673,24 +736,8 @@ __TS__SetDescriptor(
673
736
  "mouseEnterLocalEvent",
674
737
  {get = function(self)
675
738
  local event = __TS__New(Event)
676
- if not (tooltipByFrame[self] ~= nil) then
677
- ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = self
678
- local tooltip = ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent == self and ____exports.Frame:createByType("SIMPLEFRAME", "", ____exports.Frame.CONSOLE_UI) or ____exports.Frame:createByType("FRAME", "", ____exports.Frame.GAME_UI)
679
- ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = ____exports.Frame.CONSOLE_UI
680
- self:setTooltip(tooltip)
681
- end
682
- local isMouseInside = false
683
- Timer.onPeriod[1 / 64]:addListener(function()
684
- local tooltip = tooltipByFrame[self]
685
- if tooltip and tooltip.visible then
686
- if not isMouseInside then
687
- isMouseInside = true
688
- Event.invoke(event)
689
- end
690
- else
691
- isMouseInside = false
692
- end
693
- end)
739
+ self:trackMouseLocally()
740
+ mouseEnterLocalEventByFrame[self] = event
694
741
  rawset(self, "mouseEnterLocalEvent", event)
695
742
  return event
696
743
  end},
@@ -701,24 +748,8 @@ __TS__SetDescriptor(
701
748
  "mouseLeaveLocalEvent",
702
749
  {get = function(self)
703
750
  local event = __TS__New(Event)
704
- if not (tooltipByFrame[self] ~= nil) then
705
- ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = self
706
- local tooltip = ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent == self and ____exports.Frame:createByType("SIMPLEFRAME", "", ____exports.Frame.CONSOLE_UI) or ____exports.Frame:createByType("FRAME", "", ____exports.Frame.GAME_UI)
707
- ____exports.Frame.SIMPLE_FRAME_TEST_CHILD.parent = ____exports.Frame.CONSOLE_UI
708
- self:setTooltip(tooltip)
709
- end
710
- local isMouseInside = false
711
- Timer.onPeriod[1 / 64]:addListener(function()
712
- local tooltip = tooltipByFrame[self]
713
- if tooltip and tooltip.visible then
714
- isMouseInside = true
715
- else
716
- if isMouseInside then
717
- isMouseInside = false
718
- Event.invoke(event)
719
- end
720
- end
721
- end)
751
+ self:trackMouseLocally()
752
+ mouseLeaveLocalEventByFrame[self] = event
722
753
  rawset(self, "mouseLeaveLocalEvent", event)
723
754
  return event
724
755
  end},
@@ -959,7 +990,7 @@ __TS__ObjectDefineProperty(
959
990
  )
960
991
  __TS__ObjectDefineProperty(
961
992
  Frame,
962
- "onMouseMove",
993
+ "mouseMoveEvent",
963
994
  {get = function(self)
964
995
  local event = __TS__New(
965
996
  TriggerEvent,
@@ -973,48 +1004,32 @@ __TS__ObjectDefineProperty(
973
1004
  ) end,
974
1005
  function() return Player:of(GetTriggerPlayer()), BlzGetTriggerPlayerMouseX(), BlzGetTriggerPlayerMouseY() end
975
1006
  )
976
- rawset(____exports.Frame, "onMouseMove", event)
1007
+ rawset(____exports.Frame, "mouseMoveEvent", event)
977
1008
  return event
978
1009
  end}
979
1010
  )
980
1011
  __TS__ObjectDefineProperty(
981
1012
  Frame,
982
- "onMouseMoveLocal",
1013
+ "mouseMoveLocalEvent",
983
1014
  {get = function(self)
984
- local invoke = Event.invoke
985
1015
  local event = __TS__New(Event)
986
- local syncX = 0
987
- local syncY = 0
988
- local syncFrameX = 0
989
- local syncFrameY = 0
990
- local lastX = syncX
991
- local lastY = syncY
992
- self.onMouseMove:addListener(function(player, x, y)
993
- if player.isLocal then
994
- syncX = x
995
- syncY = y
996
- syncFrameX, syncFrameY = worldCoordinatesToFrame(
997
- x,
998
- y,
999
- getTerrainZ(x, y)
1000
- )
1001
- lastX = x
1002
- lastY = y
1003
- invoke(event, x, y)
1004
- end
1005
- end)
1016
+ local lastX = 0
1017
+ local lastY = 0
1006
1018
  Timer.onPeriod[1 / 64]:addListener(function()
1007
- if syncX == 0 and syncY == 0 then
1019
+ if getLocalClientHeight() == 0 then
1008
1020
  return
1009
1021
  end
1010
- local x, y, ____, isDefinite = frameCoordinatesToWorld(syncFrameX, syncFrameY)
1022
+ local x, y, ____, isDefinite = frameCoordinatesToWorld(
1023
+ pixelToFrameX(getMouseScreenPosX()),
1024
+ pixelToFrameY(getMouseScreenPosY())
1025
+ )
1011
1026
  if isDefinite and (x ~= lastX or y ~= lastY) then
1012
1027
  lastX = x
1013
1028
  lastY = y
1014
1029
  invoke(event, x, y)
1015
1030
  end
1016
1031
  end)
1017
- rawset(____exports.Frame, "onMouseMoveLocal", event)
1032
+ rawset(____exports.Frame, "mouseMoveLocalEvent", event)
1018
1033
  return event
1019
1034
  end}
1020
1035
  )
@@ -15,6 +15,8 @@ local ____exception = require("exception")
15
15
  local IllegalStateException = ____exception.IllegalStateException
16
16
  local ____attributes = require("attributes")
17
17
  local AttributesHolder = ____attributes.AttributesHolder
18
+ local ____preconditions = require("utility.preconditions")
19
+ local checkNotNull = ____preconditions.checkNotNull
18
20
  local getHandleId = GetHandleId
19
21
  local onCreateEventByHandleConstructor = {}
20
22
  local onDestroyEventByHandleConstructor = {}
@@ -58,6 +60,9 @@ function Handle.invokeOnCreateEvent(self, clazz, handle)
58
60
  Event.invoke(onCreateEvent, handle)
59
61
  end
60
62
  end
63
+ function Handle.isWrapped(self, handle)
64
+ return self.memoized[getHandleId(handle)] ~= nil
65
+ end
61
66
  function Handle.prototype.__tostring(self)
62
67
  return (self.constructor.name .. "@") .. tostring(getHandleId(self.handle))
63
68
  end
@@ -66,17 +71,12 @@ function Handle.prototype.onDestroy(self, ...)
66
71
  return nil
67
72
  end
68
73
  function Handle.prototype.destroy(self, ...)
74
+ if self[0] == 2 or self[0] == 3 then
75
+ return nil
76
+ end
69
77
  local clazz = self.constructor
70
78
  local id = getHandleId(self.handle)
71
- if not clazz.memoized[id] then
72
- error(
73
- __TS__New(
74
- IllegalStateException,
75
- "Double-destroy run for handle " .. tostring(id)
76
- ),
77
- 0
78
- )
79
- end
79
+ checkNotNull(clazz.memoized[id])
80
80
  self[0] = 2
81
81
  if self.onDestroyEvent then
82
82
  Event.invoke(self.onDestroyEvent)
@@ -25,6 +25,7 @@ local getHandleId = GetHandleId
25
25
  local getUnitX = GetUnitX
26
26
  local getUnitY = GetUnitY
27
27
  local safeCall = warpack.safeCall
28
+ local UPDATE_PERIOD = 1 / 64
28
29
  local head
29
30
  local next = {}
30
31
  local previous = {}
@@ -56,15 +57,15 @@ function Missile.launch(self, config, source, target, onArrival, ...)
56
57
  local data = MISSILE_DATA_BY_UNIT_TYPE_ID[source.typeId]
57
58
  local launchX = data.launchOffsetX
58
59
  local launchY = data.launchOffsetY
59
- local projectileVisOffsetX = data.launchVisualOffsetX
60
- local projectileVisOffsetY = data.launchVisualOffsetY
61
60
  local angle = rad(source.facing - 90)
62
61
  local s = sin(angle)
63
62
  local c = cos(angle)
64
63
  offsetX = offsetX + (c * launchX - s * launchY)
65
64
  offsetY = offsetY + (s * launchX + c * launchY)
66
- visualOffsetX = visualOffsetX + (c * projectileVisOffsetX - s * projectileVisOffsetY)
67
- visualOffsetY = visualOffsetY + (s * projectileVisOffsetX + c * projectileVisOffsetY)
65
+ local projectileVisOffsetX = data.launchVisualOffsetX
66
+ local projectileVisOffsetY = data.launchVisualOffsetY
67
+ visualOffsetX = visualOffsetX + (c * projectileVisOffsetY - s * projectileVisOffsetX)
68
+ visualOffsetY = visualOffsetY + (s * projectileVisOffsetY + c * projectileVisOffsetX)
68
69
  visualOffsetZ = visualOffsetZ + data.launchOffsetZ
69
70
  end
70
71
  local ____opt_7 = config.targetOffset
@@ -101,8 +102,8 @@ function Missile.launch(self, config, source, target, onArrival, ...)
101
102
  if config.scale then
102
103
  setSpecialEffectScale(effect, config.scale)
103
104
  end
104
- local acceleration = (config.acceleration or 0) / 128
105
- local speed = config.speed / 128 + acceleration / 2
105
+ local acceleration = (config.acceleration or 0) * UPDATE_PERIOD * UPDATE_PERIOD
106
+ local speed = config.speed * UPDATE_PERIOD + acceleration / 2
106
107
  local arcVAcceleration = 0
107
108
  local arcVSpeed = 0
108
109
  if config.arc then
@@ -226,7 +227,7 @@ function Missile.prototype.destroy(self)
226
227
  previous[self] = nil
227
228
  next[self] = nil
228
229
  end
229
- Timer.onPeriod[1 / 64]:addListener(function()
230
+ Timer.onPeriod[UPDATE_PERIOD]:addListener(function()
230
231
  local missile = head
231
232
  while missile do
232
233
  local nextMissile = next[missile]
@@ -28,6 +28,7 @@ export declare class Player extends Handle<jplayer> {
28
28
  static readonly neutralExtra: Player;
29
29
  private static events;
30
30
  readonly id: number;
31
+ readonly slotState: jplayerslotstate;
31
32
  constructor(handle: jplayer);
32
33
  onDestroy(): HandleDestructor;
33
34
  toString(): string;
@@ -45,11 +46,11 @@ export declare class Player extends Handle<jplayer> {
45
46
  get isUser(): boolean;
46
47
  get isPlaying(): boolean;
47
48
  get controller(): jmapcontrol;
48
- get slotState(): jplayerslotstate;
49
49
  clearSelection(): void;
50
50
  selectSingle(unit: Unit): void;
51
51
  select(unit: Unit): void;
52
52
  deselect(unit: Unit): void;
53
+ setRaceSkin(racePreference: jracepreference): void;
53
54
  forceUIKey(key: string): void;
54
55
  forceUICancel(): void;
55
56
  isAllyOf(other: Player): boolean;
@@ -31,12 +31,13 @@ local getPlayerName = GetPlayerName
31
31
  local getPlayerTechCount = GetPlayerTechCount
32
32
  local getPlayerTechMaxAllowed = GetPlayerTechMaxAllowed
33
33
  local getTriggerPlayer = GetTriggerPlayer
34
+ local playerNative = _G.Player
35
+ local setPlayerAbilityAvailable = SetPlayerAbilityAvailable
34
36
  local setPlayerAlliance = SetPlayerAlliance
37
+ local setPlayerRaceSkin = SetPlayerRaceSkin
35
38
  local setPlayerTechMaxAllowed = SetPlayerTechMaxAllowed
36
39
  local setPlayerTechResearched = SetPlayerTechResearched
37
- local setPlayerAbilityAvailable = SetPlayerAbilityAvailable
38
40
  local triggerRegisterPlayerAllianceChange = TriggerRegisterPlayerAllianceChange
39
- local playerNative = _G.Player
40
41
  local nativeByPlayerAllianceType = {
41
42
  [0] = ALLIANCE_PASSIVE,
42
43
  [1] = ALLIANCE_RESCUABLE,
@@ -56,6 +57,7 @@ Player.name = "Player"
56
57
  __TS__ClassExtends(Player, Handle)
57
58
  function Player.prototype.____constructor(self, handle)
58
59
  Handle.prototype.____constructor(self, handle)
60
+ self.slotState = GetPlayerSlotState(self.handle)
59
61
  self.id = GetPlayerId(handle)
60
62
  end
61
63
  function Player.prototype.onDestroy(self)
@@ -88,6 +90,9 @@ function Player.prototype.deselect(self, unit)
88
90
  SelectUnit(unit.handle, false)
89
91
  end
90
92
  end
93
+ function Player.prototype.setRaceSkin(self, racePreference)
94
+ setPlayerRaceSkin(self.handle, racePreference)
95
+ end
91
96
  function Player.prototype.forceUIKey(self, key)
92
97
  if self.isLocal then
93
98
  ForceUIKey(key)
@@ -364,7 +369,7 @@ __TS__SetDescriptor(
364
369
  Player.prototype,
365
370
  "isUser",
366
371
  {get = function(self)
367
- return GetPlayerController(self.handle) == MAP_CONTROL_USER
372
+ return self.controller == MAP_CONTROL_USER
368
373
  end},
369
374
  true
370
375
  )
@@ -372,7 +377,7 @@ __TS__SetDescriptor(
372
377
  Player.prototype,
373
378
  "isPlaying",
374
379
  {get = function(self)
375
- return GetPlayerSlotState(self.handle) == PLAYER_SLOT_STATE_PLAYING
380
+ return self.slotState == PLAYER_SLOT_STATE_PLAYING
376
381
  end},
377
382
  true
378
383
  )
@@ -380,15 +385,9 @@ __TS__SetDescriptor(
380
385
  Player.prototype,
381
386
  "controller",
382
387
  {get = function(self)
383
- return GetPlayerController(self.handle)
384
- end},
385
- true
386
- )
387
- __TS__SetDescriptor(
388
- Player.prototype,
389
- "slotState",
390
- {get = function(self)
391
- return GetPlayerSlotState(self.handle)
388
+ local controller = GetPlayerController(self.handle)
389
+ rawset(self, "controller", controller)
390
+ return controller
392
391
  end},
393
392
  true
394
393
  )
@@ -490,4 +489,10 @@ __TS__ObjectDefineProperty(
490
489
  end}
491
490
  )
492
491
  Player.colorChangedEvent = playerColorChangedEvent
492
+ ____exports.Player.onLeave:addListener(
493
+ 999999,
494
+ function(player)
495
+ rawset(player, "slotState", PLAYER_SLOT_STATE_LEFT)
496
+ end
497
+ )
493
498
  return ____exports