warscript 0.0.1-dev.ee2345e → 0.0.1-dev.ef189a5

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 (261) hide show
  1. package/attributes.d.ts +6 -1
  2. package/attributes.lua +17 -1
  3. package/binaryreader.d.ts +1 -0
  4. package/binaryreader.lua +3 -0
  5. package/config.d.ts +5 -0
  6. package/config.lua +10 -0
  7. package/core/types/effect.d.ts +14 -6
  8. package/core/types/effect.lua +131 -35
  9. package/core/types/frame.d.ts +8 -1
  10. package/core/types/frame.lua +117 -22
  11. package/core/types/group.d.ts +0 -1
  12. package/core/types/image.d.ts +0 -1
  13. package/core/types/missile.d.ts +2 -2
  14. package/core/types/missile.lua +8 -2
  15. package/core/types/player.d.ts +16 -0
  16. package/core/types/player.lua +60 -15
  17. package/core/types/playerCamera.d.ts +2 -0
  18. package/core/types/playerCamera.lua +123 -5
  19. package/core/types/sound.d.ts +17 -24
  20. package/core/types/sound.lua +99 -24
  21. package/core/types/tileCell.d.ts +11 -1
  22. package/core/types/tileCell.lua +97 -0
  23. package/core/types/timer.d.ts +9 -8
  24. package/core/types/timer.lua +45 -23
  25. package/core/types/unit.lua +8 -0
  26. package/core/util.d.ts +1 -1
  27. package/core/util.lua +18 -1
  28. package/decl/index.d.ts +1 -0
  29. package/decl/native.d.ts +846 -790
  30. package/engine/ability.d.ts +1 -1
  31. package/engine/behavior.d.ts +22 -11
  32. package/engine/behavior.lua +175 -73
  33. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  34. package/engine/behaviour/ability/always-enabled.lua +31 -0
  35. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  36. package/engine/behaviour/ability/apply-buff.lua +36 -4
  37. package/engine/behaviour/ability/apply-unit-behavior.d.ts +6 -1
  38. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  39. package/engine/behaviour/ability/damage.d.ts +39 -11
  40. package/engine/behaviour/ability/damage.lua +83 -37
  41. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  42. package/engine/behaviour/ability/emulate-impact.lua +43 -0
  43. package/engine/behaviour/ability/heal.d.ts +33 -6
  44. package/engine/behaviour/ability/heal.lua +89 -10
  45. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  46. package/engine/behaviour/ability/instant-impact.lua +4 -15
  47. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  48. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  49. package/engine/behaviour/ability/remove-buffs.d.ts +25 -0
  50. package/engine/behaviour/ability/remove-buffs.lua +49 -0
  51. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  52. package/engine/behaviour/ability/restore-mana.lua +29 -0
  53. package/engine/behaviour/ability.d.ts +29 -5
  54. package/engine/behaviour/ability.lua +154 -27
  55. package/engine/behaviour/unit/stun-immunity.d.ts +11 -6
  56. package/engine/behaviour/unit/stun-immunity.lua +53 -28
  57. package/engine/behaviour/unit.d.ts +48 -4
  58. package/engine/behaviour/unit.lua +282 -2
  59. package/engine/buff.d.ts +114 -44
  60. package/engine/buff.lua +525 -224
  61. package/engine/game-map.d.ts +7 -0
  62. package/engine/game-map.lua +32 -0
  63. package/engine/internal/ability.d.ts +23 -14
  64. package/engine/internal/ability.lua +129 -85
  65. package/engine/internal/item/ability.lua +162 -4
  66. package/engine/internal/item+owner.lua +12 -6
  67. package/engine/internal/item.d.ts +20 -19
  68. package/engine/internal/item.lua +191 -74
  69. package/engine/internal/mechanics/ability-duration.lua +1 -1
  70. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  71. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  72. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  73. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  74. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  75. package/engine/internal/misc/frame-coordinates.lua +21 -0
  76. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  77. package/engine/internal/misc/get-terrain-z.lua +11 -0
  78. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  79. package/engine/internal/misc/player-local-handle.lua +5 -0
  80. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  81. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  82. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  83. package/engine/internal/object-data/evasion-probability.lua +16 -0
  84. package/engine/internal/unit/ability.d.ts +45 -1
  85. package/engine/internal/unit/ability.lua +128 -17
  86. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  87. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  88. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  89. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  90. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  91. package/engine/internal/unit/allowed-targets.lua +9 -1
  92. package/engine/internal/unit/bonus.d.ts +11 -8
  93. package/engine/internal/unit/bonus.lua +23 -1
  94. package/engine/internal/unit/fly-height.d.ts +7 -0
  95. package/engine/internal/unit/fly-height.lua +20 -0
  96. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  97. package/engine/internal/unit/ignore-events-items.lua +5 -0
  98. package/engine/internal/unit/item.d.ts +24 -0
  99. package/engine/internal/unit/item.lua +78 -0
  100. package/engine/internal/unit/main-selected.d.ts +13 -0
  101. package/engine/internal/unit/main-selected.lua +36 -0
  102. package/engine/internal/unit/order.d.ts +20 -0
  103. package/engine/internal/unit/order.lua +136 -0
  104. package/engine/internal/unit/scale.d.ts +7 -0
  105. package/engine/internal/unit/scale.lua +20 -0
  106. package/engine/internal/unit+ability.lua +12 -3
  107. package/engine/internal/unit+damage.d.ts +2 -11
  108. package/engine/internal/unit+damage.lua +10 -14
  109. package/engine/internal/unit+spellSteal.lua +1 -2
  110. package/engine/internal/unit+transport.lua +4 -10
  111. package/engine/internal/unit-missile-launch.lua +63 -13
  112. package/engine/internal/unit.d.ts +96 -28
  113. package/engine/internal/unit.lua +648 -241
  114. package/engine/internal/utility.lua +12 -0
  115. package/engine/lightning.d.ts +12 -5
  116. package/engine/lightning.lua +48 -14
  117. package/engine/local-client.d.ts +9 -2
  118. package/engine/local-client.lua +112 -0
  119. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  120. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  121. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  122. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  123. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -3
  124. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  125. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  126. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  127. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  128. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  129. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  130. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  131. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  132. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  133. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  134. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  135. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  136. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  137. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  138. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  139. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  140. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  141. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  142. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  143. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  144. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  145. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  146. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  147. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  148. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  149. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  150. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  151. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  152. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  153. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  154. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  155. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  156. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  157. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  158. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  159. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  160. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  161. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  162. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  163. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  164. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  165. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  166. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  167. package/engine/object-data/entry/ability-type/web.lua +52 -0
  168. package/engine/object-data/entry/ability-type.d.ts +19 -18
  169. package/engine/object-data/entry/ability-type.lua +93 -36
  170. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  171. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  172. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  173. package/engine/object-data/entry/buff-type.d.ts +6 -13
  174. package/engine/object-data/entry/buff-type.lua +13 -29
  175. package/engine/object-data/entry/destructible-type.d.ts +6 -3
  176. package/engine/object-data/entry/destructible-type.lua +12 -0
  177. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  178. package/engine/object-data/entry/item-type.d.ts +15 -2
  179. package/engine/object-data/entry/item-type.lua +93 -2
  180. package/engine/object-data/entry/lightning-type.d.ts +1 -2
  181. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  182. package/engine/object-data/entry/sound-preset.lua +140 -0
  183. package/engine/object-data/entry/unit-type.d.ts +62 -7
  184. package/engine/object-data/entry/unit-type.lua +524 -75
  185. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  186. package/engine/object-data/entry/upgrade.d.ts +1 -2
  187. package/engine/object-data/entry/upgrade.lua +4 -4
  188. package/engine/object-data/entry.d.ts +18 -17
  189. package/engine/object-data/entry.lua +60 -32
  190. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  191. package/engine/object-field/ability.d.ts +28 -5
  192. package/engine/object-field/ability.lua +59 -5
  193. package/engine/object-field/unit.d.ts +69 -3
  194. package/engine/object-field/unit.lua +264 -7
  195. package/engine/object-field.d.ts +23 -7
  196. package/engine/object-field.lua +311 -124
  197. package/engine/random.d.ts +10 -0
  198. package/engine/random.lua +22 -0
  199. package/engine/standard/entries/buff-type.d.ts +3 -0
  200. package/engine/standard/entries/buff-type.lua +3 -0
  201. package/engine/standard/entries/sound-preset.d.ts +10 -0
  202. package/engine/standard/entries/sound-preset.lua +10 -0
  203. package/engine/standard/entries/unit-type.d.ts +39 -1
  204. package/engine/standard/entries/unit-type.lua +39 -1
  205. package/engine/standard/fields/ability.d.ts +5 -3
  206. package/engine/standard/fields/ability.lua +5 -3
  207. package/engine/standard/fields/unit.d.ts +6 -0
  208. package/engine/standard/fields/unit.lua +11 -0
  209. package/engine/synchronization.d.ts +11 -0
  210. package/engine/synchronization.lua +77 -0
  211. package/engine/text-tag.d.ts +36 -2
  212. package/engine/text-tag.lua +250 -10
  213. package/engine/unit.d.ts +6 -0
  214. package/engine/unit.lua +15 -2
  215. package/event.d.ts +2 -3
  216. package/event.lua +9 -5
  217. package/index.d.ts +1 -0
  218. package/index.lua +1 -0
  219. package/lualib_bundle.lua +146 -42
  220. package/math/vec2.d.ts +2 -9
  221. package/math.d.ts +0 -2
  222. package/net/socket.d.ts +7 -1
  223. package/net/socket.lua +45 -4
  224. package/network.d.ts +1 -0
  225. package/network.lua +3 -2
  226. package/objutil/ability.d.ts +0 -1
  227. package/objutil/buff.d.ts +0 -1
  228. package/objutil/buff.lua +3 -4
  229. package/objutil/object.d.ts +0 -1
  230. package/objutil/unit.d.ts +0 -1
  231. package/objutil/unit.lua +8 -0
  232. package/package.json +13 -14
  233. package/patch-lua.d.ts +0 -0
  234. package/patch-lua.lua +10 -0
  235. package/patch-lualib.lua +1 -1
  236. package/property.d.ts +55 -0
  237. package/property.lua +374 -0
  238. package/string.d.ts +30 -0
  239. package/string.lua +14 -0
  240. package/util/stream.d.ts +0 -1
  241. package/utility/arrays.d.ts +13 -5
  242. package/utility/arrays.lua +45 -3
  243. package/utility/bit-set.d.ts +0 -2
  244. package/utility/callback-array.d.ts +17 -0
  245. package/utility/callback-array.lua +61 -0
  246. package/utility/functions.d.ts +8 -0
  247. package/utility/functions.lua +13 -0
  248. package/utility/lazy.d.ts +2 -0
  249. package/utility/lazy.lua +14 -0
  250. package/utility/linked-set.d.ts +13 -3
  251. package/utility/linked-set.lua +27 -3
  252. package/utility/lua-maps.d.ts +16 -4
  253. package/utility/lua-maps.lua +53 -2
  254. package/utility/lua-sets.d.ts +3 -2
  255. package/utility/lua-sets.lua +7 -0
  256. package/utility/reflection.lua +11 -7
  257. package/utility/types.d.ts +4 -0
  258. package/core/mapbounds.d.ts +0 -8
  259. package/core/mapbounds.lua +0 -12
  260. package/core/types/order.d.ts +0 -25
  261. package/core/types/order.lua +0 -55
@@ -20,6 +20,15 @@ local extractObjectDataEntryLevelFieldValue = ____entry.extractObjectDataEntryLe
20
20
  local ObjectDataEntry = ____entry.ObjectDataEntry
21
21
  local ____object_2Ddata_2Dentry_2Did_2Dgenerator = require("engine.object-data.utility.object-data-entry-id-generator")
22
22
  local ObjectDataEntryIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.ObjectDataEntryIdGenerator
23
+ local ____linked_2Dset = require("utility.linked-set")
24
+ local mutableLinkedSet = ____linked_2Dset.mutableLinkedSet
25
+ local ____lua_2Dmaps = require("utility.lua-maps")
26
+ local emptyLuaMap = ____lua_2Dmaps.emptyLuaMap
27
+ local getOrPut = ____lua_2Dmaps.getOrPut
28
+ local mutableLuaMap = ____lua_2Dmaps.mutableLuaMap
29
+ local mutableWeakLuaMap = ____lua_2Dmaps.mutableWeakLuaMap
30
+ local ____arrays = require("utility.arrays")
31
+ local emptyArray = ____arrays.emptyArray
23
32
  local compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId = {}
24
33
  local defaultValueByObjectDataEntryIdByObjectFieldId = postcompile(function() return compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId end)
25
34
  local objectFieldById = {}
@@ -29,7 +38,11 @@ local idGenerator = __TS__New(
29
38
  )
30
39
  local ObjectFieldBase = __TS__Class()
31
40
  ObjectFieldBase.name = "ObjectFieldBase"
32
- function ObjectFieldBase.prototype.____constructor(self, id)
41
+ function ObjectFieldBase.prototype.____constructor(self, id, isGlobal)
42
+ if isGlobal == nil then
43
+ isGlobal = false
44
+ end
45
+ self.isGlobal = isGlobal
33
46
  self.valueByInstance = setmetatable({}, {__mode = "k"})
34
47
  if objectFieldById[id] ~= nil then
35
48
  error(
@@ -46,10 +59,15 @@ end
46
59
  function ObjectFieldBase.prototype.supports(self, instance)
47
60
  return __TS__InstanceOf(instance, self.instanceClass)
48
61
  end
49
- function ObjectFieldBase.create(self, id)
62
+ function ObjectFieldBase.prototype.hasValue(self, objectDataEntryId)
63
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
64
+ return self.isGlobal or defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[objectDataEntryId] ~= nil or self:hasNativeFieldValue(objectDataEntryId)
65
+ end
66
+ function ObjectFieldBase.create(self, id, isGlobal)
50
67
  return __TS__New(
51
68
  self,
52
- id or idGenerator:next()
69
+ id or idGenerator:next(),
70
+ isGlobal
53
71
  )
54
72
  end
55
73
  function ObjectFieldBase.of(self, id)
@@ -71,7 +89,7 @@ ____exports.ObjectField = __TS__Class()
71
89
  local ObjectField = ____exports.ObjectField
72
90
  ObjectField.name = "ObjectField"
73
91
  __TS__ClassExtends(ObjectField, ObjectFieldBase)
74
- function ObjectField.prototype.getValue(self, entry)
92
+ function ObjectField.prototype.getValue(self, entry, includeModifiers)
75
93
  if __TS__InstanceOf(entry, ObjectDataEntry) then
76
94
  local defaultValueByObjectDataEntryId = (warpack.compiletime and compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId or defaultValueByObjectDataEntryIdByObjectFieldId)[self.id]
77
95
  if defaultValueByObjectDataEntryId ~= nil then
@@ -82,22 +100,16 @@ function ObjectField.prototype.getValue(self, entry)
82
100
  end
83
101
  return self.defaultValue
84
102
  end
85
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
86
- if defaultValueByObjectDataEntryId ~= nil then
87
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
88
- if defaultValue ~= nil then
89
- local ____self_valueByInstance_entry_0 = self.valueByInstance[entry]
90
- if ____self_valueByInstance_entry_0 == nil then
91
- ____self_valueByInstance_entry_0 = defaultValue
103
+ if not includeModifiers then
104
+ local originalValueByInstance = self.originalValueByInstance
105
+ if originalValueByInstance ~= nil then
106
+ local originalValue = originalValueByInstance[entry]
107
+ if originalValue ~= nil then
108
+ return originalValue
92
109
  end
93
- return ____self_valueByInstance_entry_0
94
110
  end
95
111
  end
96
- local ____temp_1 = self:getNativeFieldValue(entry)
97
- if ____temp_1 == nil then
98
- ____temp_1 = self.defaultValue
99
- end
100
- return ____temp_1
112
+ return self:getActualValue(entry)
101
113
  end
102
114
  function ObjectField.prototype.setValue(self, entry, value)
103
115
  if __TS__InstanceOf(entry, ObjectDataEntry) then
@@ -112,37 +124,59 @@ function ObjectField.prototype.setValue(self, entry, value)
112
124
  defaultValueByObjectDataEntryId[entry.id] = value
113
125
  return true
114
126
  end
115
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
116
- if defaultValueByObjectDataEntryId ~= nil then
117
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
118
- if defaultValue ~= nil then
119
- local ____self_valueByInstance_entry_2 = self.valueByInstance[entry]
120
- if ____self_valueByInstance_entry_2 == nil then
121
- ____self_valueByInstance_entry_2 = defaultValue
122
- end
123
- local ____self_valueByInstance_entry_2_3 = ____self_valueByInstance_entry_2
124
- if ____self_valueByInstance_entry_2_3 == nil then
125
- ____self_valueByInstance_entry_2_3 = self.defaultValue
126
- end
127
- local previousValue = ____self_valueByInstance_entry_2_3
128
- if value ~= previousValue then
129
- self.valueByInstance[entry] = value
130
- self:invokeValueChangeEvent(entry, self, previousValue, value)
127
+ local modifiersByInstance = self.modifiersByInstance
128
+ if modifiersByInstance ~= nil then
129
+ local modifiers = modifiersByInstance[entry]
130
+ if modifiers ~= nil and modifiers.size ~= 0 then
131
+ local originalValueByInstance = self.originalValueByInstance
132
+ if originalValueByInstance == nil then
133
+ originalValueByInstance = mutableWeakLuaMap()
134
+ self.originalValueByInstance = originalValueByInstance
131
135
  end
132
- return true
136
+ originalValueByInstance[entry] = value
137
+ value = self:calculateActualValue(entry)
133
138
  end
134
139
  end
135
- if not self:hasNativeFieldValue(entry) then
136
- return false
140
+ return self:setActualValue(entry, value)
141
+ end
142
+ function ObjectField.prototype.applyModifier(self, instance, modifier)
143
+ local modifiersByInstance = self.modifiersByInstance
144
+ if modifiersByInstance == nil then
145
+ modifiersByInstance = mutableWeakLuaMap()
146
+ self.modifiersByInstance = modifiersByInstance
147
+ end
148
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
149
+ local originalValueByInstance = self.originalValueByInstance
150
+ if originalValueByInstance == nil then
151
+ originalValueByInstance = mutableWeakLuaMap()
152
+ self.originalValueByInstance = originalValueByInstance
153
+ end
154
+ local ____originalValueByInstance_1 = originalValueByInstance
155
+ local ____instance_2 = instance
156
+ local ____originalValueByInstance_instance_0 = originalValueByInstance[instance]
157
+ if ____originalValueByInstance_instance_0 == nil then
158
+ ____originalValueByInstance_instance_0 = self:getActualValue(instance)
159
+ end
160
+ ____originalValueByInstance_1[____instance_2] = ____originalValueByInstance_instance_0
161
+ self:setActualValue(
162
+ instance,
163
+ self:calculateActualValue(instance)
164
+ )
137
165
  end
138
- local previousValue = self:getNativeFieldValue(entry)
139
- if value ~= previousValue then
140
- if not self:setNativeFieldValue(entry, value) then
141
- return false
166
+ end
167
+ function ObjectField.prototype.removeModifier(self, instance, modifier)
168
+ local modifiersByInstance = self.modifiersByInstance
169
+ if modifiersByInstance ~= nil then
170
+ local modifiers = modifiersByInstance[instance]
171
+ if modifiers ~= nil and modifiers:remove(modifier) then
172
+ self:setActualValue(
173
+ instance,
174
+ self:calculateActualValue(instance)
175
+ )
176
+ return true
142
177
  end
143
- self:invokeValueChangeEvent(entry, self, previousValue, value)
144
178
  end
145
- return true
179
+ return false
146
180
  end
147
181
  function ObjectField.prototype.removeValue(self, entry)
148
182
  if not warpack.compiletime then
@@ -164,6 +198,74 @@ function ObjectField.prototype.trySetValue(self, entry, value)
164
198
  end
165
199
  return self:setValue(entry, value)
166
200
  end
201
+ function ObjectField.prototype.getActualValue(self, instance)
202
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
203
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
204
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
205
+ if defaultValue ~= nil or self.isGlobal then
206
+ local ____self_valueByInstance_instance_3 = self.valueByInstance[instance]
207
+ if ____self_valueByInstance_instance_3 == nil then
208
+ ____self_valueByInstance_instance_3 = defaultValue
209
+ end
210
+ local ____self_valueByInstance_instance_3_4 = ____self_valueByInstance_instance_3
211
+ if ____self_valueByInstance_instance_3_4 == nil then
212
+ ____self_valueByInstance_instance_3_4 = self.defaultValue
213
+ end
214
+ return ____self_valueByInstance_instance_3_4
215
+ end
216
+ end
217
+ local ____temp_5 = self:getNativeFieldValue(instance)
218
+ if ____temp_5 == nil then
219
+ ____temp_5 = self.defaultValue
220
+ end
221
+ return ____temp_5
222
+ end
223
+ function ObjectField.prototype.setActualValue(self, instance, value)
224
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
225
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
226
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
227
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
228
+ if defaultValue ~= nil or self.isGlobal then
229
+ local ____self_valueByInstance_instance_6 = self.valueByInstance[instance]
230
+ if ____self_valueByInstance_instance_6 == nil then
231
+ ____self_valueByInstance_instance_6 = defaultValue
232
+ end
233
+ local ____self_valueByInstance_instance_6_7 = ____self_valueByInstance_instance_6
234
+ if ____self_valueByInstance_instance_6_7 == nil then
235
+ ____self_valueByInstance_instance_6_7 = self.defaultValue
236
+ end
237
+ local previousValue = ____self_valueByInstance_instance_6_7
238
+ self.valueByInstance[instance] = value
239
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
240
+ return true
241
+ end
242
+ end
243
+ if not self:hasNativeFieldValue(objectDataEntryId) then
244
+ return false
245
+ end
246
+ local previousValue = self:getNativeFieldValue(instance)
247
+ if value ~= previousValue and not self:setNativeFieldValue(instance, value) then
248
+ return false
249
+ end
250
+ self:invokeValueChangeEvent(instance, self, previousValue, value)
251
+ return true
252
+ end
253
+ function ObjectField.prototype.calculateActualValue(self, instance)
254
+ local ____opt_8 = self.originalValueByInstance
255
+ local originalValue = ____opt_8 and ____opt_8[instance]
256
+ local ____opt_10 = self.modifiersByInstance
257
+ local modifiers = ____opt_10 and ____opt_10[instance]
258
+ if originalValue ~= nil then
259
+ local value = originalValue
260
+ if modifiers ~= nil then
261
+ for modifier in pairs(modifiers) do
262
+ value = modifier(instance, value, originalValue)
263
+ end
264
+ end
265
+ return value
266
+ end
267
+ return self.defaultValue
268
+ end
167
269
  function ObjectField.prototype.invokeValueChangeEvent(self, ...)
168
270
  self:invokeValueChangeEventRecursive(
169
271
  getClass(self),
@@ -217,37 +319,37 @@ function ObjectArrayField.prototype.getValue(self, entry, index)
217
319
  if defaultValueByObjectDataEntryId ~= nil then
218
320
  local value = defaultValueByObjectDataEntryId[entry.id]
219
321
  if value ~= nil then
220
- local ____temp_5
322
+ local ____temp_13
221
323
  if index == nil then
222
- ____temp_5 = value
324
+ ____temp_13 = value
223
325
  else
224
- local ____value_index_4 = value[index + 1]
225
- if ____value_index_4 == nil then
226
- ____value_index_4 = self.defaultValue
326
+ local ____value_index_12 = value[index + 1]
327
+ if ____value_index_12 == nil then
328
+ ____value_index_12 = self.defaultValue
227
329
  end
228
- ____temp_5 = ____value_index_4
330
+ ____temp_13 = ____value_index_12
229
331
  end
230
- return ____temp_5
332
+ return ____temp_13
231
333
  end
232
334
  end
233
335
  return index == nil and ({}) or self.defaultValue
234
336
  end
235
337
  local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
236
- if defaultValueByObjectDataEntryId ~= nil then
237
- local defaultValue = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
238
- if defaultValue ~= nil then
239
- local value = self.valueByInstance[entry] or defaultValue
240
- local ____temp_7
338
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
339
+ local defaultValue = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(entry)]
340
+ if defaultValue ~= nil or self.isGlobal then
341
+ local value = self.valueByInstance[entry] or defaultValue or emptyArray()
342
+ local ____temp_15
241
343
  if index == nil then
242
- ____temp_7 = value
344
+ ____temp_15 = value
243
345
  else
244
- local ____value_index_6 = value[index + 1]
245
- if ____value_index_6 == nil then
246
- ____value_index_6 = self.defaultValue
346
+ local ____value_index_14 = value[index + 1]
347
+ if ____value_index_14 == nil then
348
+ ____value_index_14 = self.defaultValue
247
349
  end
248
- ____temp_7 = ____value_index_6
350
+ ____temp_15 = ____value_index_14
249
351
  end
250
- return ____temp_7
352
+ return ____temp_15
251
353
  end
252
354
  end
253
355
  if index ~= nil then
@@ -292,36 +394,22 @@ function ObjectLevelField.prototype.getValue(self, entry, level)
292
394
  if defaultValueByObjectDataEntryId ~= nil then
293
395
  local valueByLevel = defaultValueByObjectDataEntryId[entry.id]
294
396
  if valueByLevel ~= nil then
295
- local ____valueByLevel_index_8 = valueByLevel[level + 1]
296
- if ____valueByLevel_index_8 == nil then
297
- ____valueByLevel_index_8 = self.defaultValue
397
+ local ____valueByLevel_index_16 = valueByLevel[level + 1]
398
+ if ____valueByLevel_index_16 == nil then
399
+ ____valueByLevel_index_16 = self.defaultValue
298
400
  end
299
- return ____valueByLevel_index_8
401
+ return ____valueByLevel_index_16
300
402
  end
301
403
  end
302
404
  return self.defaultValue
303
405
  end
304
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
305
- if defaultValueByObjectDataEntryId ~= nil then
306
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
307
- if defaultValueByLevel ~= nil then
308
- local ____opt_9 = self.valueByInstance[entry]
309
- local ____temp_11 = ____opt_9 and ____opt_9[level + 1]
310
- if ____temp_11 == nil then
311
- ____temp_11 = defaultValueByLevel[level + 1]
312
- end
313
- local ____temp_11_12 = ____temp_11
314
- if ____temp_11_12 == nil then
315
- ____temp_11_12 = self.defaultValue
316
- end
317
- return ____temp_11_12
318
- end
406
+ local ____opt_19 = self.originalValueByLevelByInstance
407
+ local ____opt_17 = ____opt_19 and ____opt_19[entry]
408
+ local originalValue = ____opt_17 and ____opt_17[level]
409
+ if originalValue ~= nil then
410
+ return originalValue
319
411
  end
320
- local ____temp_13 = self:getNativeFieldValue(entry, level)
321
- if ____temp_13 == nil then
322
- ____temp_13 = self.defaultValue
323
- end
324
- return ____temp_13
412
+ return self:getActualValue(entry, level)
325
413
  end
326
414
  function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
327
415
  if value == nil then
@@ -361,54 +449,66 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
361
449
  valueByLevel[level + 1] = value
362
450
  return true
363
451
  end
364
- local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
365
- if defaultValueByObjectDataEntryId ~= nil then
366
- local defaultValueByLevel = defaultValueByObjectDataEntryId[self:getObjectDataEntryId(entry)]
367
- if defaultValueByLevel ~= nil then
368
- local valueByLevel = self.valueByInstance[entry]
369
- if valueByLevel == nil then
370
- valueByLevel = {}
371
- self.valueByInstance[entry] = valueByLevel
372
- end
373
- local ____valueByLevel_index_14 = valueByLevel[level + 1]
374
- if ____valueByLevel_index_14 == nil then
375
- ____valueByLevel_index_14 = defaultValueByLevel[level + 1]
452
+ local modifiersByInstance = self.modifiersByInstance
453
+ if modifiersByInstance ~= nil then
454
+ local modifiers = modifiersByInstance[entry]
455
+ if modifiers ~= nil and modifiers.size ~= 0 then
456
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
457
+ if originalValueByLevelByInstance == nil then
458
+ originalValueByLevelByInstance = mutableWeakLuaMap()
459
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
376
460
  end
377
- local ____valueByLevel_index_14_15 = ____valueByLevel_index_14
378
- if ____valueByLevel_index_14_15 == nil then
379
- ____valueByLevel_index_14_15 = self.defaultValue
461
+ getOrPut(originalValueByLevelByInstance, entry, mutableLuaMap)[level] = value
462
+ value = self:calculateActualValue(entry, level)
463
+ end
464
+ end
465
+ return self:setActualValue(entry, level, value)
466
+ end
467
+ function ObjectLevelField.prototype.applyModifier(self, instance, modifier)
468
+ local modifiersByInstance = self.modifiersByInstance
469
+ if modifiersByInstance == nil then
470
+ modifiersByInstance = mutableWeakLuaMap()
471
+ self.modifiersByInstance = modifiersByInstance
472
+ end
473
+ if getOrPut(modifiersByInstance, instance, mutableLinkedSet):add(modifier) then
474
+ local originalValueByLevelByInstance = self.originalValueByLevelByInstance
475
+ if originalValueByLevelByInstance == nil then
476
+ originalValueByLevelByInstance = mutableWeakLuaMap()
477
+ self.originalValueByLevelByInstance = originalValueByLevelByInstance
478
+ end
479
+ local originalValueByLevel = getOrPut(originalValueByLevelByInstance, instance, mutableLuaMap)
480
+ local levelCount = self:getLevelCount(instance)
481
+ for level = 0, levelCount - 1 do
482
+ local ____originalValueByLevel_level_21 = originalValueByLevel[level]
483
+ if ____originalValueByLevel_level_21 == nil then
484
+ ____originalValueByLevel_level_21 = self:getActualValue(instance, level)
380
485
  end
381
- local previousValue = ____valueByLevel_index_14_15
382
- if value ~= previousValue then
383
- valueByLevel[level + 1] = value
384
- self:invokeValueChangeEvent(
385
- entry,
386
- self,
486
+ originalValueByLevel[level] = ____originalValueByLevel_level_21
487
+ self:setActualValue(
488
+ instance,
489
+ level,
490
+ self:calculateActualValue(instance, level)
491
+ )
492
+ end
493
+ end
494
+ end
495
+ function ObjectLevelField.prototype.removeModifier(self, instance, modifier)
496
+ local modifiersByInstance = self.modifiersByInstance
497
+ if modifiersByInstance ~= nil then
498
+ local modifiers = modifiersByInstance[instance]
499
+ if modifiers ~= nil and modifiers:remove(modifier) then
500
+ local levelCount = self:getLevelCount(instance)
501
+ for level = 0, levelCount - 1 do
502
+ self:setActualValue(
503
+ instance,
387
504
  level,
388
- previousValue,
389
- value
505
+ self:calculateActualValue(instance, level)
390
506
  )
391
507
  end
392
508
  return true
393
509
  end
394
510
  end
395
- if not self:hasNativeFieldValue(entry) then
396
- return false
397
- end
398
- local previousValue = self:getNativeFieldValue(entry, level)
399
- if value ~= previousValue then
400
- if not self:setNativeFieldValue(entry, level, value) then
401
- return false
402
- end
403
- self:invokeValueChangeEvent(
404
- entry,
405
- self,
406
- level,
407
- previousValue,
408
- value
409
- )
410
- end
411
- return true
511
+ return false
412
512
  end
413
513
  function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value)
414
514
  if value ~= nil then
@@ -425,6 +525,93 @@ function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value
425
525
  end
426
526
  return self:setValue(entry, levelOrValue)
427
527
  end
528
+ function ObjectLevelField.prototype.getActualValue(self, instance, level)
529
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
530
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
531
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[self:getObjectDataEntryId(instance)]
532
+ if defaultValueByLevel ~= nil or self.isGlobal then
533
+ local ____opt_22 = self.valueByInstance[instance]
534
+ local ____temp_24 = ____opt_22 and ____opt_22[level + 1]
535
+ if ____temp_24 == nil then
536
+ ____temp_24 = (defaultValueByLevel or emptyArray())[level + 1]
537
+ end
538
+ local ____temp_24_25 = ____temp_24
539
+ if ____temp_24_25 == nil then
540
+ ____temp_24_25 = self.defaultValue
541
+ end
542
+ return ____temp_24_25
543
+ end
544
+ end
545
+ local ____temp_26 = self:getNativeFieldValue(instance, level)
546
+ if ____temp_26 == nil then
547
+ ____temp_26 = self.defaultValue
548
+ end
549
+ return ____temp_26
550
+ end
551
+ function ObjectLevelField.prototype.setActualValue(self, instance, level, value)
552
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
553
+ local objectDataEntryId = self:getObjectDataEntryId(instance)
554
+ if defaultValueByObjectDataEntryId ~= nil or self.isGlobal then
555
+ local defaultValueByLevel = (defaultValueByObjectDataEntryId or emptyLuaMap())[objectDataEntryId]
556
+ if defaultValueByLevel ~= nil or self.isGlobal then
557
+ local valueByLevel = self.valueByInstance[instance]
558
+ if valueByLevel == nil then
559
+ valueByLevel = {}
560
+ self.valueByInstance[instance] = valueByLevel
561
+ end
562
+ local ____valueByLevel_index_27 = valueByLevel[level + 1]
563
+ if ____valueByLevel_index_27 == nil then
564
+ ____valueByLevel_index_27 = (defaultValueByLevel or emptyArray())[level + 1]
565
+ end
566
+ local ____valueByLevel_index_27_28 = ____valueByLevel_index_27
567
+ if ____valueByLevel_index_27_28 == nil then
568
+ ____valueByLevel_index_27_28 = self.defaultValue
569
+ end
570
+ local previousValue = ____valueByLevel_index_27_28
571
+ valueByLevel[level + 1] = value
572
+ self:invokeValueChangeEvent(
573
+ instance,
574
+ self,
575
+ level,
576
+ previousValue,
577
+ value
578
+ )
579
+ return true
580
+ end
581
+ end
582
+ if not self:hasNativeFieldValue(objectDataEntryId) then
583
+ return false
584
+ end
585
+ local previousValue = self:getNativeFieldValue(instance, level)
586
+ if value ~= previousValue and not self:setNativeFieldValue(instance, level, value) then
587
+ return false
588
+ end
589
+ self:invokeValueChangeEvent(
590
+ instance,
591
+ self,
592
+ level,
593
+ previousValue,
594
+ value
595
+ )
596
+ return true
597
+ end
598
+ function ObjectLevelField.prototype.calculateActualValue(self, instance, level)
599
+ local ____opt_31 = self.originalValueByLevelByInstance
600
+ local ____opt_29 = ____opt_31 and ____opt_31[instance]
601
+ local originalValue = ____opt_29 and ____opt_29[level]
602
+ local ____opt_33 = self.modifiersByInstance
603
+ local modifiers = ____opt_33 and ____opt_33[instance]
604
+ if originalValue ~= nil then
605
+ local value = originalValue
606
+ if modifiers ~= nil then
607
+ for modifier in pairs(modifiers) do
608
+ value = modifier(instance, level, value, originalValue)
609
+ end
610
+ end
611
+ return value
612
+ end
613
+ return self.defaultValue
614
+ end
428
615
  function ObjectLevelField.prototype.invokeValueChangeEvent(self, ...)
429
616
  self:invokeValueChangeEventRecursive(
430
617
  getClass(self),
@@ -1,4 +1,5 @@
1
1
  /** @noSelfInFile */
2
+ import { ReadonlyNonEmptyArray } from "../utility/types";
2
3
  export declare const randomAngle: () => number;
3
4
  export declare const randomInteger: {
4
5
  (upperBound?: number): number;
@@ -8,3 +9,12 @@ export declare const randomFloat: {
8
9
  (upperBound?: number): number;
9
10
  (lowerBound: number, upperBound: number): number;
10
11
  };
12
+ export declare const randomXY: (centerX: number, centerY: number, range: number) => LuaMultiReturn<[x: number, y: number]>;
13
+ export declare const randomElement: {
14
+ <T>(array: ReadonlyNonEmptyArray<T>): T;
15
+ <T>(array: ReadonlyArray<T>): T | undefined;
16
+ };
17
+ export declare const random: {
18
+ <T>(element: T, ...elements: T[]): T;
19
+ <T>(...elements: T[]): T | undefined;
20
+ };
package/engine/random.lua CHANGED
@@ -1,9 +1,31 @@
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 select = _G.select
8
+ local cos = math.cos
9
+ local sin = math.sin
10
+ local sqrt = math.sqrt
6
11
  ____exports.randomAngle = function() return getRandomReal(0, 360) end
7
12
  ____exports.randomInteger = function(m, n) return n ~= nil and getRandomInt(m, n) or getRandomInt(0, m or MAXIMUM_INTEGER) end
8
13
  ____exports.randomFloat = function(m, n) return n ~= nil and getRandomReal(m, n) or getRandomReal(0, m or MAXIMUM_INTEGER) end
14
+ ____exports.randomXY = function(centerX, centerY, range)
15
+ local r = range * sqrt(getRandomReal(0, 1))
16
+ local t = getRandomReal(0, 1) * 2 * PI
17
+ return centerX + r * cos(t), centerY + r * sin(t)
18
+ end
19
+ ____exports.randomElement = function(array)
20
+ return array[getRandomInt(1, #array)]
21
+ end
22
+ ____exports.random = function(...)
23
+ return (select(
24
+ getRandomInt(
25
+ 1,
26
+ select("#", ...)
27
+ ),
28
+ ...
29
+ ))
30
+ end
9
31
  return ____exports
@@ -0,0 +1,3 @@
1
+ /** @noSelfInFile */
2
+ import { StandardBuffTypeId } from "../../object-data/entry/buff-type";
3
+ export declare const CHEMICAL_RAGE_BUFF_TYPE_ID: StandardBuffTypeId;
@@ -0,0 +1,3 @@
1
+ local ____exports = {}
2
+ ____exports.CHEMICAL_RAGE_BUFF_TYPE_ID = fourCC("BNcr")
3
+ return ____exports
@@ -0,0 +1,10 @@
1
+ /** @noSelfInFile */
2
+ import { StandardSoundPresetId } from "../../object-data/entry/sound-preset";
3
+ export declare const ABOMINATION_PISSED_SOUND_PRESET_ID: StandardSoundPresetId;
4
+ export declare const ABOMINATION_READY_SOUND_PRESET_ID: StandardSoundPresetId;
5
+ export declare const ABOMINATION_WAR_CRY_SOUND_PRESET_ID: StandardSoundPresetId;
6
+ export declare const AXE_MEDIUM_CHOP_WOOD_SOUND_PRESET_ID: StandardSoundPresetId;
7
+ export declare const IMPALE_SOUND_PRESET_ID: StandardSoundPresetId;
8
+ export declare const IMPALE_HIT_SOUND_PRESET_ID: StandardSoundPresetId;
9
+ export declare const IMPALE_LAND_SOUND_PRESET_ID: StandardSoundPresetId;
10
+ export declare const IMPALE_CAST_SOUND_PRESET_ID: StandardSoundPresetId;
@@ -0,0 +1,10 @@
1
+ local ____exports = {}
2
+ ____exports.ABOMINATION_PISSED_SOUND_PRESET_ID = "AbominationPissed"
3
+ ____exports.ABOMINATION_READY_SOUND_PRESET_ID = "AbominationReady"
4
+ ____exports.ABOMINATION_WAR_CRY_SOUND_PRESET_ID = "AbominationWarcry"
5
+ ____exports.AXE_MEDIUM_CHOP_WOOD_SOUND_PRESET_ID = "AxeMediumChopWood"
6
+ ____exports.IMPALE_SOUND_PRESET_ID = "Impale"
7
+ ____exports.IMPALE_HIT_SOUND_PRESET_ID = "ImpaleHit"
8
+ ____exports.IMPALE_LAND_SOUND_PRESET_ID = "ImpaleLand"
9
+ ____exports.IMPALE_CAST_SOUND_PRESET_ID = "ImpaleCast"
10
+ return ____exports