warscript 0.0.1-dev.ee2345e → 0.0.1-dev.f0a9ffe

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 (239) hide show
  1. package/attributes.d.ts +5 -1
  2. package/attributes.lua +8 -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 +93 -1
  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/sound.d.ts +17 -24
  16. package/core/types/sound.lua +99 -24
  17. package/core/types/timer.d.ts +8 -8
  18. package/core/types/timer.lua +25 -23
  19. package/core/types/unit.lua +8 -0
  20. package/core/util.d.ts +1 -1
  21. package/core/util.lua +18 -1
  22. package/decl/index.d.ts +1 -0
  23. package/decl/native.d.ts +844 -788
  24. package/engine/ability.d.ts +1 -1
  25. package/engine/behavior.d.ts +12 -10
  26. package/engine/behavior.lua +59 -33
  27. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  28. package/engine/behaviour/ability/always-enabled.lua +31 -0
  29. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  30. package/engine/behaviour/ability/apply-buff.lua +32 -0
  31. package/engine/behaviour/ability/apply-unit-behavior.d.ts +6 -1
  32. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  33. package/engine/behaviour/ability/damage.d.ts +39 -11
  34. package/engine/behaviour/ability/damage.lua +83 -37
  35. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  36. package/engine/behaviour/ability/emulate-impact.lua +43 -0
  37. package/engine/behaviour/ability/heal.d.ts +33 -6
  38. package/engine/behaviour/ability/heal.lua +89 -10
  39. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  40. package/engine/behaviour/ability/instant-impact.lua +4 -15
  41. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  42. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  43. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  44. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  45. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  46. package/engine/behaviour/ability/restore-mana.lua +29 -0
  47. package/engine/behaviour/ability.d.ts +27 -4
  48. package/engine/behaviour/ability.lua +152 -26
  49. package/engine/behaviour/unit/stun-immunity.d.ts +5 -4
  50. package/engine/behaviour/unit/stun-immunity.lua +43 -27
  51. package/engine/behaviour/unit.d.ts +36 -2
  52. package/engine/behaviour/unit.lua +186 -0
  53. package/engine/buff.d.ts +104 -41
  54. package/engine/buff.lua +471 -212
  55. package/engine/game-map.d.ts +7 -0
  56. package/engine/game-map.lua +32 -0
  57. package/engine/internal/ability.d.ts +20 -13
  58. package/engine/internal/ability.lua +103 -76
  59. package/engine/internal/item/ability.lua +162 -4
  60. package/engine/internal/item+owner.lua +2 -2
  61. package/engine/internal/item.d.ts +7 -4
  62. package/engine/internal/item.lua +131 -28
  63. package/engine/internal/mechanics/ability-duration.lua +1 -1
  64. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  65. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  66. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  67. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  68. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  69. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  70. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  71. package/engine/internal/object-data/evasion-probability.lua +16 -0
  72. package/engine/internal/unit/ability.d.ts +45 -1
  73. package/engine/internal/unit/ability.lua +98 -14
  74. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  75. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  76. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  77. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  78. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  79. package/engine/internal/unit/allowed-targets.lua +9 -1
  80. package/engine/internal/unit/bonus.d.ts +11 -8
  81. package/engine/internal/unit/bonus.lua +23 -1
  82. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  83. package/engine/internal/unit/ignore-events-items.lua +5 -0
  84. package/engine/internal/unit/item.d.ts +24 -0
  85. package/engine/internal/unit/item.lua +78 -0
  86. package/engine/internal/unit/main-selected.d.ts +13 -0
  87. package/engine/internal/unit/main-selected.lua +51 -0
  88. package/engine/internal/unit/order.d.ts +20 -0
  89. package/engine/internal/unit/order.lua +136 -0
  90. package/engine/internal/unit+ability.lua +2 -2
  91. package/engine/internal/unit+damage.d.ts +2 -11
  92. package/engine/internal/unit+damage.lua +10 -14
  93. package/engine/internal/unit+spellSteal.lua +1 -2
  94. package/engine/internal/unit+transport.lua +4 -10
  95. package/engine/internal/unit-missile-launch.lua +33 -7
  96. package/engine/internal/unit.d.ts +87 -22
  97. package/engine/internal/unit.lua +580 -194
  98. package/engine/internal/utility.lua +12 -0
  99. package/engine/lightning.d.ts +12 -5
  100. package/engine/lightning.lua +48 -14
  101. package/engine/local-client.d.ts +7 -2
  102. package/engine/local-client.lua +82 -0
  103. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  104. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  105. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  106. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  107. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -3
  108. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  109. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  110. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  111. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  112. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  113. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  114. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  115. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  116. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  117. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  118. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  119. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  120. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  121. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  122. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  123. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  124. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  125. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  126. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  127. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  128. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  129. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  130. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  131. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  132. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  133. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  134. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  135. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  136. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  137. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  138. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  139. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  140. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  141. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  142. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  143. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  144. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  145. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  146. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  147. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  148. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  149. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  150. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  151. package/engine/object-data/entry/ability-type/web.lua +52 -0
  152. package/engine/object-data/entry/ability-type.d.ts +19 -18
  153. package/engine/object-data/entry/ability-type.lua +90 -36
  154. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  155. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  156. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  157. package/engine/object-data/entry/buff-type.d.ts +6 -13
  158. package/engine/object-data/entry/buff-type.lua +13 -29
  159. package/engine/object-data/entry/destructible-type.d.ts +1 -2
  160. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  161. package/engine/object-data/entry/item-type.d.ts +15 -2
  162. package/engine/object-data/entry/item-type.lua +93 -2
  163. package/engine/object-data/entry/lightning-type.d.ts +1 -2
  164. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  165. package/engine/object-data/entry/sound-preset.lua +140 -0
  166. package/engine/object-data/entry/unit-type.d.ts +58 -7
  167. package/engine/object-data/entry/unit-type.lua +480 -75
  168. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  169. package/engine/object-data/entry/upgrade.d.ts +1 -2
  170. package/engine/object-data/entry/upgrade.lua +4 -4
  171. package/engine/object-data/entry.d.ts +18 -17
  172. package/engine/object-data/entry.lua +60 -32
  173. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  174. package/engine/object-field/ability.d.ts +26 -3
  175. package/engine/object-field/ability.lua +54 -1
  176. package/engine/object-field/unit.d.ts +57 -3
  177. package/engine/object-field/unit.lua +207 -7
  178. package/engine/object-field.d.ts +17 -7
  179. package/engine/object-field.lua +187 -89
  180. package/engine/random.d.ts +1 -0
  181. package/engine/random.lua +9 -0
  182. package/engine/standard/entries/buff-type.d.ts +3 -0
  183. package/engine/standard/entries/buff-type.lua +3 -0
  184. package/engine/standard/entries/sound-preset.d.ts +10 -0
  185. package/engine/standard/entries/sound-preset.lua +10 -0
  186. package/engine/standard/entries/unit-type.d.ts +39 -1
  187. package/engine/standard/entries/unit-type.lua +39 -1
  188. package/engine/standard/fields/ability.d.ts +3 -1
  189. package/engine/standard/fields/ability.lua +3 -1
  190. package/engine/standard/fields/unit.d.ts +4 -0
  191. package/engine/standard/fields/unit.lua +7 -0
  192. package/engine/text-tag.d.ts +36 -2
  193. package/engine/text-tag.lua +175 -10
  194. package/engine/unit.d.ts +4 -0
  195. package/engine/unit.lua +13 -2
  196. package/event.d.ts +2 -3
  197. package/event.lua +9 -5
  198. package/index.d.ts +1 -0
  199. package/index.lua +1 -0
  200. package/lualib_bundle.lua +146 -42
  201. package/math/vec2.d.ts +2 -9
  202. package/math.d.ts +0 -2
  203. package/net/socket.d.ts +7 -1
  204. package/net/socket.lua +45 -4
  205. package/network.d.ts +1 -0
  206. package/network.lua +3 -2
  207. package/objutil/ability.d.ts +0 -1
  208. package/objutil/buff.d.ts +0 -1
  209. package/objutil/buff.lua +2 -3
  210. package/objutil/object.d.ts +0 -1
  211. package/objutil/unit.d.ts +0 -1
  212. package/objutil/unit.lua +8 -0
  213. package/package.json +13 -14
  214. package/patch-lua.d.ts +0 -0
  215. package/patch-lua.lua +10 -0
  216. package/property.d.ts +55 -0
  217. package/property.lua +374 -0
  218. package/string.d.ts +30 -0
  219. package/string.lua +14 -0
  220. package/util/stream.d.ts +0 -1
  221. package/utility/arrays.d.ts +12 -5
  222. package/utility/arrays.lua +37 -3
  223. package/utility/bit-set.d.ts +0 -2
  224. package/utility/functions.d.ts +8 -0
  225. package/utility/functions.lua +13 -0
  226. package/utility/lazy.d.ts +2 -0
  227. package/utility/lazy.lua +14 -0
  228. package/utility/linked-set.d.ts +12 -3
  229. package/utility/linked-set.lua +8 -2
  230. package/utility/lua-maps.d.ts +5 -2
  231. package/utility/lua-maps.lua +20 -0
  232. package/utility/lua-sets.d.ts +3 -2
  233. package/utility/lua-sets.lua +7 -0
  234. package/utility/reflection.lua +11 -7
  235. package/utility/types.d.ts +1 -0
  236. package/core/mapbounds.d.ts +0 -8
  237. package/core/mapbounds.lua +0 -12
  238. package/core/types/order.d.ts +0 -25
  239. package/core/types/order.lua +0 -55
package/property.lua ADDED
@@ -0,0 +1,374 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__New = ____lualib.__TS__New
4
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
6
+ local ____exports = {}
7
+ local savePropertyValues
8
+ local ____binaryreader = require("binaryreader")
9
+ local BinaryReader = ____binaryreader.BinaryReader
10
+ local ____binarywriter = require("binarywriter")
11
+ local BinaryWriter = ____binarywriter.BinaryWriter
12
+ local ____player = require("core.types.player")
13
+ local Player = ____player.Player
14
+ local ____timer = require("core.types.timer")
15
+ local Timer = ____timer.Timer
16
+ local ____event = require("event")
17
+ local Event = ____event.Event
18
+ local file = require("file")
19
+ local ____network = require("network")
20
+ local synchronize = ____network.synchronize
21
+ local base64 = require("utility.base64")
22
+ local lzw = require("utility.lzw")
23
+ local ____preconditions = require("utility.preconditions")
24
+ local ____require = ____preconditions.require
25
+ local invoke = Event.invoke
26
+ ____exports.PersistentPropertiesConfig = __TS__Class()
27
+ local PersistentPropertiesConfig = ____exports.PersistentPropertiesConfig
28
+ PersistentPropertiesConfig.name = "PersistentPropertiesConfig"
29
+ function PersistentPropertiesConfig.prototype.____constructor(self)
30
+ end
31
+ PersistentPropertiesConfig.defaultFileName = ""
32
+ ____exports.Property = __TS__Class()
33
+ local Property = ____exports.Property
34
+ Property.name = "Property"
35
+ function Property.prototype.____constructor(self, defaultValue)
36
+ self.valueChangeEvent = __TS__New(Event)
37
+ self[0] = defaultValue
38
+ self[1] = defaultValue
39
+ end
40
+ function Property.prototype.reset(self)
41
+ if self[2] then
42
+ self[2] = nil
43
+ local defaultValue = self[0]
44
+ local oldValue = self[1]
45
+ if defaultValue ~= oldValue then
46
+ self[1] = defaultValue
47
+ invoke(self.valueChangeEvent, defaultValue, oldValue)
48
+ end
49
+ return true
50
+ end
51
+ return false
52
+ end
53
+ function Property.prototype.set(self, value)
54
+ self[2] = true
55
+ local oldValue = self[1]
56
+ self[1] = value
57
+ if value ~= oldValue then
58
+ invoke(self.valueChangeEvent, value, oldValue)
59
+ return true
60
+ end
61
+ return false
62
+ end
63
+ function Property.prototype.get(self)
64
+ return self[1]
65
+ end
66
+ __TS__SetDescriptor(
67
+ Property.prototype,
68
+ "defaultValue",
69
+ {
70
+ get = function(self)
71
+ return self[0]
72
+ end,
73
+ set = function(self, defaultValue)
74
+ local oldDefaultValue = self[0]
75
+ if defaultValue ~= oldDefaultValue then
76
+ self[0] = defaultValue
77
+ if not self[2] then
78
+ self[1] = defaultValue
79
+ invoke(self.valueChangeEvent, defaultValue, oldDefaultValue)
80
+ end
81
+ end
82
+ end
83
+ },
84
+ true
85
+ )
86
+ __TS__SetDescriptor(
87
+ Property.prototype,
88
+ "value",
89
+ {
90
+ get = function(self)
91
+ return self:get()
92
+ end,
93
+ set = function(self, value)
94
+ self:set(value)
95
+ end
96
+ },
97
+ true
98
+ )
99
+ __TS__SetDescriptor(
100
+ Property.prototype,
101
+ "isChanged",
102
+ {get = function(self)
103
+ return self[2] == true
104
+ end},
105
+ true
106
+ )
107
+ ____exports.PlayerProperty = __TS__Class()
108
+ local PlayerProperty = ____exports.PlayerProperty
109
+ PlayerProperty.name = "PlayerProperty"
110
+ function PlayerProperty.prototype.____constructor(self, defaultValue)
111
+ self.valueChangeEvent = __TS__New(Event)
112
+ self[0] = defaultValue
113
+ self[1] = {}
114
+ self[2] = {}
115
+ end
116
+ function PlayerProperty.prototype.isChanged(self, player)
117
+ return self[2][player] ~= nil
118
+ end
119
+ function PlayerProperty.prototype.reset(self, player)
120
+ if self[2][player] ~= nil then
121
+ self[2][player] = nil
122
+ local initialValue = self[0]
123
+ local oldValue = self[1][player]
124
+ self[1][player] = nil
125
+ if initialValue ~= oldValue then
126
+ invoke(self.valueChangeEvent, player, initialValue, oldValue)
127
+ end
128
+ return true
129
+ end
130
+ return false
131
+ end
132
+ function PlayerProperty.prototype.set(self, player, value)
133
+ self[2][player] = true
134
+ local oldValue = self[1][player]
135
+ self[1][player] = value
136
+ if value ~= oldValue then
137
+ invoke(self.valueChangeEvent, player, value, oldValue)
138
+ return true
139
+ end
140
+ return false
141
+ end
142
+ function PlayerProperty.prototype.get(self, player)
143
+ local ____table_PlayerPropertyPropertyKey_IS_CHANGED_BY_PLAYER_has_result_0
144
+ if self[2][player] ~= nil then
145
+ ____table_PlayerPropertyPropertyKey_IS_CHANGED_BY_PLAYER_has_result_0 = self[1][player]
146
+ else
147
+ ____table_PlayerPropertyPropertyKey_IS_CHANGED_BY_PLAYER_has_result_0 = self[0]
148
+ end
149
+ return ____table_PlayerPropertyPropertyKey_IS_CHANGED_BY_PLAYER_has_result_0
150
+ end
151
+ local NULL_VALUE = {}
152
+ local loadedValueById
153
+ local loadedValueByIdByPlayer = {}
154
+ local localValueById = {}
155
+ local persistentPropertyById = {}
156
+ local persistentPlayerPropertyById = {}
157
+ ____exports.PersistentProperty = __TS__Class()
158
+ local PersistentProperty = ____exports.PersistentProperty
159
+ PersistentProperty.name = "PersistentProperty"
160
+ __TS__ClassExtends(PersistentProperty, ____exports.Property)
161
+ function PersistentProperty.prototype.____constructor(self, id, defaultValue, valueChangeEventListener)
162
+ PersistentProperty.____super.prototype.____constructor(self, defaultValue)
163
+ self.id = id
164
+ ____require(not (persistentPropertyById[id] ~= nil) and not (persistentPlayerPropertyById[id] ~= nil))
165
+ persistentPropertyById[id] = self
166
+ if valueChangeEventListener ~= nil then
167
+ self.valueChangeEvent:addListener(valueChangeEventListener)
168
+ end
169
+ local value = loadedValueById and loadedValueById[id]
170
+ if value ~= nil then
171
+ local ____self_set_4 = self.set
172
+ local ____temp_3
173
+ if value == NULL_VALUE then
174
+ ____temp_3 = nil
175
+ else
176
+ ____temp_3 = value
177
+ end
178
+ ____self_set_4(self, ____temp_3)
179
+ end
180
+ end
181
+ function PersistentProperty.prototype.reset(self)
182
+ if PersistentProperty.____super.prototype.reset(self) then
183
+ localValueById[self.id] = nil
184
+ savePropertyValues()
185
+ return true
186
+ end
187
+ return false
188
+ end
189
+ function PersistentProperty.prototype.set(self, value)
190
+ if PersistentProperty.____super.prototype.set(self, value) then
191
+ localValueById[self.id] = value == nil and NULL_VALUE or value
192
+ savePropertyValues()
193
+ return true
194
+ end
195
+ return false
196
+ end
197
+ ____exports.PersistentPlayerProperty = __TS__Class()
198
+ local PersistentPlayerProperty = ____exports.PersistentPlayerProperty
199
+ PersistentPlayerProperty.name = "PersistentPlayerProperty"
200
+ __TS__ClassExtends(PersistentPlayerProperty, ____exports.PlayerProperty)
201
+ function PersistentPlayerProperty.prototype.____constructor(self, id, initialValue, valueChangeEventListener)
202
+ PersistentPlayerProperty.____super.prototype.____constructor(self, initialValue)
203
+ self.id = id
204
+ ____require(not (persistentPropertyById[id] ~= nil) and not (persistentPlayerPropertyById[id] ~= nil))
205
+ persistentPlayerPropertyById[id] = self
206
+ if valueChangeEventListener ~= nil then
207
+ self.valueChangeEvent:addListener(valueChangeEventListener)
208
+ end
209
+ for ____, player in ipairs(Player.all) do
210
+ local ____opt_5 = loadedValueByIdByPlayer and loadedValueByIdByPlayer[player]
211
+ local value = ____opt_5 and ____opt_5[id]
212
+ if value ~= nil then
213
+ local ____self_set_10 = self.set
214
+ local ____temp_9
215
+ if value == NULL_VALUE then
216
+ ____temp_9 = nil
217
+ else
218
+ ____temp_9 = value
219
+ end
220
+ ____self_set_10(self, player, ____temp_9)
221
+ end
222
+ end
223
+ end
224
+ function PersistentPlayerProperty.prototype.reset(self, player)
225
+ if PersistentPlayerProperty.____super.prototype.reset(self, player) then
226
+ if player.isLocal then
227
+ localValueById[self.id] = nil
228
+ end
229
+ savePropertyValues(player)
230
+ return true
231
+ end
232
+ return false
233
+ end
234
+ function PersistentPlayerProperty.prototype.set(self, player, value)
235
+ if PersistentPlayerProperty.____super.prototype.set(self, player, value) then
236
+ if player.isLocal then
237
+ localValueById[self.id] = value
238
+ end
239
+ savePropertyValues(player)
240
+ return true
241
+ end
242
+ return false
243
+ end
244
+ savePropertyValues = function(player)
245
+ if player ~= nil and not player.isLocal or loadedValueById == nil or loadedValueByIdByPlayer[Player["local"]] == nil then
246
+ return
247
+ end
248
+ local writer = __TS__New(BinaryWriter)
249
+ writer:writeUInt32(0)
250
+ local size = 0
251
+ for ____ in pairs(localValueById) do
252
+ size = size + 1
253
+ end
254
+ writer:writeUInt32(size)
255
+ for id, value in pairs(localValueById) do
256
+ writer:writeInt32(id)
257
+ if value == NULL_VALUE then
258
+ writer:writeUInt8(0)
259
+ elseif value == false then
260
+ writer:writeUInt8(1)
261
+ elseif value == true then
262
+ writer:writeUInt8(2)
263
+ elseif type(value) == "number" then
264
+ if math.type(value) == "integer" then
265
+ writer:writeUInt8(3)
266
+ writer:writeInt32(value)
267
+ else
268
+ writer:writeUInt8(4)
269
+ writer:writeFloat(value)
270
+ end
271
+ else
272
+ writer:writeUInt8(5)
273
+ writer:writeUInt32(#value)
274
+ writer:writeBytes(value)
275
+ end
276
+ end
277
+ file.write(
278
+ ____exports.PersistentPropertiesConfig.defaultFileName,
279
+ base64.encode(lzw.compress(tostring(writer)))
280
+ )
281
+ end
282
+ local function loadPropertyValues(fileData, player)
283
+ do
284
+ local function ____catch(_)
285
+ return true, {}
286
+ end
287
+ local ____try, ____hasReturned, ____returnValue = pcall(function()
288
+ local valueById = {}
289
+ local reader = __TS__New(
290
+ BinaryReader,
291
+ lzw.decompress(base64.decode(fileData))
292
+ )
293
+ reader:readUInt32()
294
+ local size = reader:readUInt32()
295
+ for _ = 1, size do
296
+ local id = reader:readInt32()
297
+ local dataType = reader:readUInt8()
298
+ if dataType == 0 then
299
+ valueById[id] = NULL_VALUE
300
+ elseif dataType == 1 then
301
+ valueById[id] = false
302
+ elseif dataType == 2 then
303
+ valueById[id] = true
304
+ elseif dataType == 3 then
305
+ valueById[id] = reader:readInt32()
306
+ elseif dataType == 4 then
307
+ valueById[id] = reader:readFloat()
308
+ elseif dataType == 5 then
309
+ valueById[id] = reader:readBytes(reader:readUInt32())
310
+ end
311
+ end
312
+ for id, value in pairs(valueById) do
313
+ local persistentProperty = persistentPropertyById[id]
314
+ if persistentProperty ~= nil then
315
+ if not persistentProperty.isChanged then
316
+ local ____persistentProperty_set_12 = persistentProperty.set
317
+ local ____temp_11
318
+ if value == NULL_VALUE then
319
+ ____temp_11 = nil
320
+ else
321
+ ____temp_11 = value
322
+ end
323
+ ____persistentProperty_set_12(persistentProperty, ____temp_11)
324
+ end
325
+ elseif player ~= nil then
326
+ local persistentPlayerProperty = persistentPlayerPropertyById[id]
327
+ if persistentPlayerProperty ~= nil then
328
+ if not persistentPlayerProperty:isChanged(player) then
329
+ local ____persistentPlayerProperty_set_15 = persistentPlayerProperty.set
330
+ local ____player_14 = player
331
+ local ____temp_13
332
+ if value == NULL_VALUE then
333
+ ____temp_13 = nil
334
+ else
335
+ ____temp_13 = value
336
+ end
337
+ ____persistentPlayerProperty_set_15(persistentPlayerProperty, ____player_14, ____temp_13)
338
+ end
339
+ elseif player.isLocal then
340
+ localValueById[id] = value
341
+ end
342
+ else
343
+ localValueById[id] = value
344
+ end
345
+ end
346
+ return true, valueById
347
+ end)
348
+ if not ____try then
349
+ ____hasReturned, ____returnValue = ____catch(____hasReturned)
350
+ end
351
+ if ____hasReturned then
352
+ return ____returnValue
353
+ end
354
+ end
355
+ end
356
+ Timer:run(function()
357
+ local data = file.read(____exports.PersistentPropertiesConfig.defaultFileName) or ""
358
+ loadedValueById = loadPropertyValues(data)
359
+ for ____, player in ipairs(Player.all) do
360
+ local ____self_16 = synchronize(player, data)
361
+ ____self_16["then"](
362
+ ____self_16,
363
+ function(____, synchronizedData)
364
+ loadedValueByIdByPlayer[player] = loadPropertyValues(synchronizedData, player)
365
+ savePropertyValues(player)
366
+ end,
367
+ function()
368
+ loadedValueByIdByPlayer[player] = {}
369
+ savePropertyValues(player)
370
+ end
371
+ )
372
+ end
373
+ end)
374
+ return ____exports
package/string.d.ts CHANGED
@@ -59,6 +59,22 @@ declare global {
59
59
  function toNumber(string: string): number;
60
60
  }
61
61
  }
62
+ declare global {
63
+ namespace string {
64
+ /**
65
+ * Returns the index within the string of the first occurrence of the specified substring, starting from the specified `startIndex`,
66
+ * or -1 if the string does not contain such substring.
67
+ */
68
+ function indexOf(string: string, substring: string, startIndex?: number): number;
69
+ }
70
+ interface String {
71
+ /**
72
+ * Returns the index within this string of the first occurrence of the specified substring, starting from the specified `startIndex`,
73
+ * or -1 if the string does not contain such substring.
74
+ */
75
+ indexOf(substring: string, startIndex?: number): number;
76
+ }
77
+ }
62
78
  declare global {
63
79
  interface String {
64
80
  /**
@@ -103,4 +119,18 @@ declare global {
103
119
  function isNotBlank(string: string): boolean;
104
120
  }
105
121
  }
122
+ declare global {
123
+ namespace string {
124
+ /**
125
+ * Returns the number of characters matching the given predicate.
126
+ */
127
+ function count(string: string, predicate: (char: string) => boolean): number;
128
+ }
129
+ interface String {
130
+ /**
131
+ * Returns the number of characters matching the given predicate.
132
+ */
133
+ count(predicate: (char: string) => boolean): number;
134
+ }
135
+ }
106
136
  export {};
package/string.lua CHANGED
@@ -2,6 +2,7 @@ local ____exports = {}
2
2
  local ____error = _G.error
3
3
  local tonumber = _G.tonumber
4
4
  local match = string.match
5
+ local find = string.find
5
6
  local sub = string.sub
6
7
  _G.string.removePrefix = function(____string, prefix)
7
8
  local prefixLength = #prefix
@@ -17,6 +18,10 @@ end
17
18
  _G.string.toNumber = function(____string)
18
19
  return tonumber(____string) or ____error(("'" .. ____string) .. "' is not a valid representation of a number.")
19
20
  end
21
+ _G.string.indexOf = function(____string, substring, startIndex)
22
+ local index = find(____string, substring, (startIndex or 0) + 1, true)
23
+ return (index or 0) - 1
24
+ end
20
25
  _G.string.indexOfLast = function(____string, predicate)
21
26
  for i = #____string, 1, -1 do
22
27
  if predicate(sub(____string, i, i)) then
@@ -31,4 +36,13 @@ end
31
36
  _G.string.isNotBlank = function(____string)
32
37
  return (match(____string, "^%s*$")) == nil
33
38
  end
39
+ _G.string.count = function(____string, predicate)
40
+ local result = 0
41
+ for i = 1, #____string do
42
+ if predicate(sub(____string, i, i)) then
43
+ result = result + 1
44
+ end
45
+ end
46
+ return result
47
+ end
34
48
  return ____exports
package/util/stream.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- /// <reference types="@typescript-to-lua/language-extensions" />
2
1
  /** @noSelfInFile */
3
2
  export interface Stream<T> {
4
3
  toArray(): T[];
@@ -1,12 +1,11 @@
1
- /// <reference types="@typescript-to-lua/language-extensions" />
2
1
  /** @noSelfInFile */
3
2
  import { TupleOf } from "./types";
4
3
  export declare const emptyArray: <T>() => readonly T[];
5
4
  export declare const joinToString: <T>(array: readonly T[], separator: string, transform?: (element: T) => string) => string;
6
- export declare const arrayOfNotNull: <T>(...elements: readonly (T | null | undefined)[]) => T[];
5
+ export declare const arrayOfNotNull: <T>(...elements: readonly (T | undefined | null)[]) => T[];
7
6
  export declare const array: <T, N extends number>(length: N, initialize: (index: number) => T) => TupleOf<T, N>;
8
7
  export declare const toLuaSet: <T extends AnyNotNil>(array: readonly T[]) => LuaSet<T>;
9
- export declare const forEach: <T, Args extends any[]>(array: readonly T[], consumerOrKey: KeysOfType<T, (this: T, ...args: Args) => void> | ((value: T, ...args: Args) => void), ...args: Args) => void;
8
+ export declare const forEach: <T, Args extends any[]>(array: readonly T[], consumerOrKey: ((value: T, ...args: Args) => void) | KeysOfType<T, (this: T, ...args: Args) => void>, ...args: Args) => void;
10
9
  export declare const all: {
11
10
  <T>(array: readonly T[], transform: (value: T) => boolean): boolean;
12
11
  <T>(array: readonly T[], key: KeysOfType<T, boolean>): boolean;
@@ -23,6 +22,7 @@ export declare const mapToLuaSet: {
23
22
  <T, R extends AnyNotNil>(array: readonly T[], transform: (value: T) => R): LuaSet<R>;
24
23
  <T, K extends KeysOfType<T, AnyNotNil>>(array: readonly T[], key: K): LuaSet<T[K] extends AnyNotNil ? T[K] : never>;
25
24
  };
25
+ export declare const flatten: <T>(array: readonly (readonly T[])[]) => T[];
26
26
  export declare const flatMap: {
27
27
  <T, R>(array: readonly T[], transform: (value: T) => readonly R[]): R[];
28
28
  <T, K extends KeysOfType<T, readonly any[]>>(array: readonly T[], key: K): (T[K] extends readonly (infer R)[] ? R : never)[];
@@ -33,7 +33,10 @@ export declare const flatMapToLuaSet: {
33
33
  };
34
34
  export declare const mapIndexed: <T, R>(array: readonly T[], transform: (index: number, value: T) => R) => R[];
35
35
  export declare const associate: <T, K extends AnyNotNil, V>(array: readonly T[], keySelector: (value: T) => K, valueSelector: (value: T) => V) => LuaMap<K, V>;
36
- export declare const associateBy: <K extends AnyNotNil, V>(array: readonly V[], keySelector: (value: V) => K) => LuaMap<K, V>;
36
+ export declare const associateBy: {
37
+ <K extends AnyNotNil, V>(array: readonly V[], keySelector: (value: V) => K): LuaMap<K, V>;
38
+ <K extends KeysOfType<V, AnyNotNil>, V>(array: readonly V[], keySelector: K): LuaMap<V[K] extends AnyNotNil ? V[K] : never, V>;
39
+ };
37
40
  export declare const associateByIndexed: <K extends AnyNotNil, V>(array: readonly V[], keySelector: (index: number, value: V) => K) => LuaMap<K, V>;
38
41
  export declare const associateWith: <K extends AnyNotNil, V>(array: readonly K[], valueSelector: (value: K) => V) => LuaMap<K, V>;
39
42
  export declare const associateWithIndexed: <K extends AnyNotNil, V>(array: readonly K[], valueSelector: (index: number, value: K) => V) => LuaMap<K, V>;
@@ -42,10 +45,14 @@ export declare const average: (array: readonly number[]) => number;
42
45
  export declare const sum: (array: readonly number[]) => number;
43
46
  export declare const product: (array: readonly number[]) => number;
44
47
  export declare const max: (array: readonly number[]) => number;
48
+ export declare const maxBy: {
49
+ <T, Args extends any[]>(array: readonly T[], selector: (value: T, ...args: Args) => number, ...args: Args): T | undefined;
50
+ <T, K extends KeysOfType<T, number>>(array: readonly T[], key: K): T | undefined;
51
+ };
45
52
  export declare const intersperse: <T>(array: readonly T[], delimiter: T) => T[];
46
53
  export declare const zip: <T, R, V>(array: readonly T[], otherArray: readonly R[], transform: (value: T, otherValue: R) => V) => V[];
47
54
  export declare const chunked: <T>(array: readonly T[], size: number) => T[][];
48
- export declare const sortBy: <T, R>(array: T[], selector: KeysOfType<T, R> | ((value: T) => R)) => void;
55
+ export declare const sortBy: <T, R>(array: T[], selector: ((value: T) => R) | KeysOfType<T, R>) => void;
49
56
  export declare const sortedBy: {
50
57
  <T, R>(array: readonly T[], selector: (value: T) => R): T[];
51
58
  <T, K extends keyof T>(array: readonly T[], key: K): T[];
@@ -3,6 +3,8 @@ local __TS__New = ____lualib.__TS__New
3
3
  local ____exports = {}
4
4
  local ____exception = require("exception")
5
5
  local IllegalArgumentException = ____exception.IllegalArgumentException
6
+ local ____functions = require("utility.functions")
7
+ local identity = ____functions.identity
6
8
  local mathMax = math.max
7
9
  local mathMin = math.min
8
10
  local select = _G.select
@@ -120,6 +122,7 @@ ____exports.mapToLuaSet = function(array, transform)
120
122
  end
121
123
  return result
122
124
  end
125
+ ____exports.flatten = function(array) return ____exports.flatMap(array, identity) end
123
126
  ____exports.flatMap = function(array, transform)
124
127
  local result = {}
125
128
  local k = 1
@@ -178,9 +181,16 @@ ____exports.associate = function(array, keySelector, valueSelector)
178
181
  end
179
182
  ____exports.associateBy = function(array, keySelector)
180
183
  local result = {}
181
- for i = 1, #array do
182
- local value = array[i]
183
- result[keySelector(value)] = value
184
+ if type(keySelector) == "function" then
185
+ for i = 1, #array do
186
+ local value = array[i]
187
+ result[keySelector(value)] = value
188
+ end
189
+ else
190
+ for i = 1, #array do
191
+ local value = array[i]
192
+ result[value[keySelector]] = value
193
+ end
184
194
  end
185
195
  return result
186
196
  end
@@ -251,6 +261,30 @@ ____exports.max = function(array)
251
261
  end
252
262
  return mathMax(table.unpack(array))
253
263
  end
264
+ ____exports.maxBy = function(array, selector, ...)
265
+ local result = nil
266
+ local maxValue = -math.huge
267
+ if type(selector) == "function" then
268
+ for i = 1, #array do
269
+ local element = array[i]
270
+ local value = selector(element, ...)
271
+ if value > maxValue then
272
+ result = element
273
+ maxValue = value
274
+ end
275
+ end
276
+ else
277
+ for i = 1, #array do
278
+ local element = array[i]
279
+ local value = element[selector]
280
+ if value > maxValue then
281
+ result = element
282
+ maxValue = value
283
+ end
284
+ end
285
+ end
286
+ return result
287
+ end
254
288
  ____exports.intersperse = function(array, delimiter)
255
289
  local result = {}
256
290
  local length = #array
@@ -1,5 +1,3 @@
1
- /// <reference types="@warscript/language-extensions" />
2
- /// <reference types="@typescript-to-lua/language-extensions" />
3
1
  /** @noSelfInFile */
4
2
  interface IBitSet<T extends number> {
5
3
  readonly has: LuaBitwiseAndEqualsRightMethod<T>;
@@ -3,3 +3,11 @@ export declare const apply: {
3
3
  <T, ConsumerParameters extends any[]>(object: T, consumer: (value: T, ...parameters: ConsumerParameters) => void, ...parameters: ConsumerParameters): T;
4
4
  <T, ConsumerParameters extends any[], K extends KeysOfType<T, (...parameters: ConsumerParameters) => void>>(object: T, key: K, ...parameters: ConsumerParameters): T;
5
5
  };
6
+ export declare const identity: <T>(value: T) => T;
7
+ export declare const firstArgument: <T>(value: T) => T;
8
+ export declare const secondArgument: <T>(_: unknown, value: T) => T;
9
+ export declare const thirdArgument: <T>(_first: unknown, _second: unknown, value: T) => T;
10
+ export declare const increment: (value: number) => number;
11
+ export declare const or: (lhs: boolean, rhs: boolean) => boolean;
12
+ export type Transform<T, R> = (<T, R>(value: T) => R) | KeysOfType<T, R>;
13
+ export declare const transform: <T, R>(object: T, transform: Transform<T, R>) => R;
@@ -87,4 +87,17 @@ ____exports.apply = function(object, transform, ...)
87
87
  end
88
88
  return object
89
89
  end
90
+ ____exports.identity = function(value) return value end
91
+ ____exports.firstArgument = ____exports.identity
92
+ ____exports.secondArgument = function(_, value) return value end
93
+ ____exports.thirdArgument = function(_first, _second, value) return value end
94
+ ____exports.increment = function(value) return value + 1 end
95
+ ____exports["or"] = function(lhs, rhs) return lhs or rhs end
96
+ ____exports.transform = function(object, transform)
97
+ if type(transform) == "function" then
98
+ return transform(object)
99
+ else
100
+ return object[transform]
101
+ end
102
+ end
90
103
  return ____exports
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export declare const lazyRecord: <K extends keyof any, V>(initializer: (key: K) => V) => Readonly<Record<K, V>>;
@@ -0,0 +1,14 @@
1
+ local ____exports = {}
2
+ local rawset = _G.rawset
3
+ local setmetatable = _G.setmetatable
4
+ ____exports.lazyRecord = function(initializer)
5
+ return setmetatable(
6
+ {},
7
+ {__index = function(self, key)
8
+ local value = initializer(key)
9
+ rawset(self, key, value)
10
+ return value
11
+ end}
12
+ )
13
+ end
14
+ return ____exports
@@ -1,5 +1,5 @@
1
- /// <reference types="@typescript-to-lua/language-extensions" />
2
1
  /** @noSelfInFile */
2
+ import { NonEmptyArray, ReadonlyNonEmptyArray } from "./types";
3
3
  type IteratorState<T extends AnyNotNil> = {
4
4
  t: LuaMap<T, T>;
5
5
  n?: T;
@@ -19,6 +19,11 @@ export interface ReadonlyLinkedSet<T extends AnyNotNil> extends LuaPairsKeyItera
19
19
  toArray(): T[];
20
20
  sumOf(selector: ((value: T) => number) | KeysOfType<T, number>): number;
21
21
  }
22
+ export interface ReadonlyNonEmptyLinkedSet<T extends AnyNotNil> extends ReadonlyLinkedSet<T> {
23
+ first(): T;
24
+ last(): T;
25
+ toArray(): NonEmptyArray<T>;
26
+ }
22
27
  export interface LinkedSet<T extends AnyNotNil> extends LuaPairsKeyIterable<T> {
23
28
  readonly __linkedSet: unique symbol;
24
29
  }
@@ -45,6 +50,10 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
45
50
  protected __pairs(this: LinkedSet<T>): LuaIterator<T | undefined, IteratorState<T>>;
46
51
  }
47
52
  export declare const emptyLinkedSet: <T extends AnyNotNil>() => ReadonlyLinkedSet<T>;
48
- export declare const linkedSetOf: <T extends AnyNotNil>(...elements: readonly T[]) => LinkedSet<T>;
49
- export declare const linkedSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | null | undefined)[]) => LinkedSet<T>;
53
+ export declare const mutableLinkedSet: <T extends AnyNotNil>() => LinkedSet<T>;
54
+ export declare const mutableLinkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => LinkedSet<T>;
55
+ export declare const mutableLinkedSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | undefined | null)[]) => LinkedSet<T>;
56
+ export declare const linkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => ReadonlyLinkedSet<T>;
57
+ export declare const linkedSetOfNotNull: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => ReadonlyLinkedSet<T>;
58
+ export declare const nonEmptyLinkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyNonEmptyArray<T>) => ReadonlyNonEmptyLinkedSet<T>;
50
59
  export {};