@caspertech/node-metaverse 0.7.40 → 0.7.51

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 (459) hide show
  1. package/dist/examples/Camera/Camera.js +3 -14
  2. package/dist/examples/Camera/Camera.js.map +1 -1
  3. package/dist/examples/ExampleBot.js +66 -87
  4. package/dist/examples/ExampleBot.js.map +1 -1
  5. package/dist/examples/Friends/Friends.js +29 -44
  6. package/dist/examples/Friends/Friends.js.map +1 -1
  7. package/dist/examples/Grid/Name2Key.js +25 -36
  8. package/dist/examples/Grid/Name2Key.js.map +1 -1
  9. package/dist/examples/Groups/Group.js +42 -55
  10. package/dist/examples/Groups/Group.js.map +1 -1
  11. package/dist/examples/Groups/GroupChat.js +55 -68
  12. package/dist/examples/Groups/GroupChat.js.map +1 -1
  13. package/dist/examples/InstantMessages/InstantMessages.js +8 -21
  14. package/dist/examples/InstantMessages/InstantMessages.js.map +1 -1
  15. package/dist/examples/Inventory/Inventory.js +80 -97
  16. package/dist/examples/Inventory/Inventory.js.map +1 -1
  17. package/dist/examples/MFA/MFA.js +24 -40
  18. package/dist/examples/MFA/MFA.js.map +1 -1
  19. package/dist/examples/Money/Money.js +28 -41
  20. package/dist/examples/Money/Money.js.map +1 -1
  21. package/dist/examples/Objects/TaskInventory.js +13 -24
  22. package/dist/examples/Objects/TaskInventory.js.map +1 -1
  23. package/dist/examples/Region/Agents.js +6 -17
  24. package/dist/examples/Region/Agents.js.map +1 -1
  25. package/dist/examples/Region/Estate.js +9 -20
  26. package/dist/examples/Region/Estate.js.map +1 -1
  27. package/dist/examples/Region/Parcels.js +12 -23
  28. package/dist/examples/Region/Parcels.js.map +1 -1
  29. package/dist/examples/Region/Region.js +2 -13
  30. package/dist/examples/Region/Region.js.map +1 -1
  31. package/dist/examples/Region/Settings.js +15 -0
  32. package/dist/examples/Region/Settings.js.map +1 -0
  33. package/dist/examples/Teleports/Teleports.js +22 -35
  34. package/dist/examples/Teleports/Teleports.js.map +1 -1
  35. package/dist/lib/Bot.d.ts +14 -14
  36. package/dist/lib/Bot.js +217 -231
  37. package/dist/lib/Bot.js.map +1 -1
  38. package/dist/lib/LoginHandler.d.ts +3 -3
  39. package/dist/lib/LoginHandler.js +106 -116
  40. package/dist/lib/LoginHandler.js.map +1 -1
  41. package/dist/lib/classes/Agent.d.ts +23 -35
  42. package/dist/lib/classes/Agent.js +96 -108
  43. package/dist/lib/classes/Agent.js.map +1 -1
  44. package/dist/lib/classes/AssetMap.d.ts +18 -95
  45. package/dist/lib/classes/AssetMap.js +86 -16
  46. package/dist/lib/classes/AssetMap.js.map +1 -1
  47. package/dist/lib/classes/AssetRegistry.d.ts +31 -0
  48. package/dist/lib/classes/AssetRegistry.js +26 -0
  49. package/dist/lib/classes/AssetRegistry.js.map +1 -0
  50. package/dist/lib/classes/AssetTypeRegistry.d.ts +21 -0
  51. package/dist/lib/classes/AssetTypeRegistry.js +81 -0
  52. package/dist/lib/classes/AssetTypeRegistry.js.map +1 -0
  53. package/dist/lib/classes/BVH.js.map +1 -1
  54. package/dist/lib/classes/BVHJoint.js.map +1 -1
  55. package/dist/lib/classes/BVHJointKeyframe.d.ts +1 -1
  56. package/dist/lib/classes/BatchQueue.d.ts +2 -2
  57. package/dist/lib/classes/BatchQueue.js +66 -80
  58. package/dist/lib/classes/BatchQueue.js.map +1 -1
  59. package/dist/lib/classes/BatchQueue.spec.js +17 -26
  60. package/dist/lib/classes/BatchQueue.spec.js.map +1 -1
  61. package/dist/lib/classes/BinaryReader.d.ts +66 -0
  62. package/dist/lib/classes/BinaryReader.js +304 -0
  63. package/dist/lib/classes/BinaryReader.js.map +1 -0
  64. package/dist/lib/classes/BinaryReader.spec.d.ts +1 -0
  65. package/dist/lib/classes/BinaryReader.spec.js +241 -0
  66. package/dist/lib/classes/BinaryReader.spec.js.map +1 -0
  67. package/dist/lib/classes/BinaryWriter.d.ts +34 -0
  68. package/dist/lib/classes/BinaryWriter.js +192 -0
  69. package/dist/lib/classes/BinaryWriter.js.map +1 -0
  70. package/dist/lib/classes/BinaryWriter.spec.d.ts +1 -0
  71. package/dist/lib/classes/BinaryWriter.spec.js +328 -0
  72. package/dist/lib/classes/BinaryWriter.spec.js.map +1 -0
  73. package/dist/lib/classes/BitPack.d.ts +2 -2
  74. package/dist/lib/classes/BitPack.js +1 -1
  75. package/dist/lib/classes/BitPack.js.map +1 -1
  76. package/dist/lib/classes/BuildMap.d.ts +6 -6
  77. package/dist/lib/classes/BuildMap.js.map +1 -1
  78. package/dist/lib/classes/Caps.d.ts +18 -24
  79. package/dist/lib/classes/Caps.js +278 -297
  80. package/dist/lib/classes/Caps.js.map +1 -1
  81. package/dist/lib/classes/Circuit.d.ts +20 -28
  82. package/dist/lib/classes/Circuit.js +104 -91
  83. package/dist/lib/classes/Circuit.js.map +1 -1
  84. package/dist/lib/classes/ClientCommands.d.ts +3 -3
  85. package/dist/lib/classes/ClientCommands.js.map +1 -1
  86. package/dist/lib/classes/ClientEvents.d.ts +41 -32
  87. package/dist/lib/classes/ClientEvents.js +65 -0
  88. package/dist/lib/classes/ClientEvents.js.map +1 -1
  89. package/dist/lib/classes/CoalescedGameObject.d.ts +2 -2
  90. package/dist/lib/classes/CoalescedGameObject.js +37 -49
  91. package/dist/lib/classes/CoalescedGameObject.js.map +1 -1
  92. package/dist/lib/classes/Color4.d.ts +2 -2
  93. package/dist/lib/classes/Color4.js +42 -42
  94. package/dist/lib/classes/Color4.js.map +1 -1
  95. package/dist/lib/classes/Comms.d.ts +3 -3
  96. package/dist/lib/classes/Comms.js +236 -236
  97. package/dist/lib/classes/Comms.js.map +1 -1
  98. package/dist/lib/classes/ConcurrentQueue.d.ts +3 -3
  99. package/dist/lib/classes/ConcurrentQueue.js +16 -11
  100. package/dist/lib/classes/ConcurrentQueue.js.map +1 -1
  101. package/dist/lib/classes/EventQueueClient.d.ts +6 -6
  102. package/dist/lib/classes/EventQueueClient.js +189 -201
  103. package/dist/lib/classes/EventQueueClient.js.map +1 -1
  104. package/dist/lib/classes/GroupBan.d.ts +3 -3
  105. package/dist/lib/classes/GroupBan.js.map +1 -1
  106. package/dist/lib/classes/GroupMember.d.ts +2 -2
  107. package/dist/lib/classes/GroupRole.d.ts +2 -2
  108. package/dist/lib/classes/IPAddress.d.ts +3 -2
  109. package/dist/lib/classes/IPAddress.js +14 -13
  110. package/dist/lib/classes/IPAddress.js.map +1 -1
  111. package/dist/lib/classes/Inventory.d.ts +7 -15
  112. package/dist/lib/classes/Inventory.js +69 -80
  113. package/dist/lib/classes/Inventory.js.map +1 -1
  114. package/dist/lib/classes/InventoryFolder.d.ts +11 -11
  115. package/dist/lib/classes/InventoryFolder.js +544 -626
  116. package/dist/lib/classes/InventoryFolder.js.map +1 -1
  117. package/dist/lib/classes/InventoryItem.d.ts +15 -11
  118. package/dist/lib/classes/InventoryItem.js +494 -486
  119. package/dist/lib/classes/InventoryItem.js.map +1 -1
  120. package/dist/lib/classes/InventoryTypeRegistry.d.ts +19 -0
  121. package/dist/lib/classes/InventoryTypeRegistry.js +69 -0
  122. package/dist/lib/classes/InventoryTypeRegistry.js.map +1 -0
  123. package/dist/lib/classes/LLGLTFMaterial.d.ts +1 -1
  124. package/dist/lib/classes/LLGLTFMaterial.js +2 -2
  125. package/dist/lib/classes/LLGLTFMaterial.js.map +1 -1
  126. package/dist/lib/classes/LLGLTFMaterial.spec.js +17 -18
  127. package/dist/lib/classes/LLGLTFMaterial.spec.js.map +1 -1
  128. package/dist/lib/classes/LLGLTFMaterialOverride.d.ts +1 -1
  129. package/dist/lib/classes/LLGLTFMaterialOverride.js +119 -118
  130. package/dist/lib/classes/LLGLTFMaterialOverride.js.map +1 -1
  131. package/dist/lib/classes/LLGLTFMaterialOverride.spec.js +70 -71
  132. package/dist/lib/classes/LLGLTFMaterialOverride.spec.js.map +1 -1
  133. package/dist/lib/classes/LLGesture.d.ts +1 -1
  134. package/dist/lib/classes/LLGesture.js +1 -1
  135. package/dist/lib/classes/LLGesture.js.map +1 -1
  136. package/dist/lib/classes/LLGestureAnimationStep.d.ts +1 -1
  137. package/dist/lib/classes/LLGestureAnimationStep.js.map +1 -1
  138. package/dist/lib/classes/LLGestureChatStep.js.map +1 -1
  139. package/dist/lib/classes/LLGestureSoundStep.d.ts +1 -1
  140. package/dist/lib/classes/LLGestureSoundStep.js.map +1 -1
  141. package/dist/lib/classes/LLGestureStep.d.ts +1 -1
  142. package/dist/lib/classes/LLGestureWaitStep.js.map +1 -1
  143. package/dist/lib/classes/LLLindenText.d.ts +2 -4
  144. package/dist/lib/classes/LLLindenText.js +12 -8
  145. package/dist/lib/classes/LLLindenText.js.map +1 -1
  146. package/dist/lib/classes/LLSettings.d.ts +98 -83
  147. package/dist/lib/classes/LLSettings.js +240 -83
  148. package/dist/lib/classes/LLSettings.js.map +1 -1
  149. package/dist/lib/classes/LLSettings.spec.d.ts +1 -0
  150. package/dist/lib/classes/LLSettings.spec.js +27 -0
  151. package/dist/lib/classes/LLSettings.spec.js.map +1 -0
  152. package/dist/lib/classes/LLWearable.d.ts +4 -8
  153. package/dist/lib/classes/LLWearable.js +1 -1
  154. package/dist/lib/classes/LLWearable.js.map +1 -1
  155. package/dist/lib/classes/Logger.d.ts +3 -3
  156. package/dist/lib/classes/Logger.js +1 -1
  157. package/dist/lib/classes/Logger.js.map +1 -1
  158. package/dist/lib/classes/LoginParameters.js.map +1 -1
  159. package/dist/lib/classes/LoginResponse.d.ts +4 -9
  160. package/dist/lib/classes/LoginResponse.js +120 -113
  161. package/dist/lib/classes/LoginResponse.js.map +1 -1
  162. package/dist/lib/classes/MapBlock.d.ts +2 -2
  163. package/dist/lib/classes/MessageBase.d.ts +5 -5
  164. package/dist/lib/classes/MessageClasses.js.map +1 -1
  165. package/dist/lib/classes/ObjectResolver.d.ts +6 -6
  166. package/dist/lib/classes/ObjectResolver.js +127 -152
  167. package/dist/lib/classes/ObjectResolver.js.map +1 -1
  168. package/dist/lib/classes/ObjectStoreFull.d.ts +9 -9
  169. package/dist/lib/classes/ObjectStoreFull.js +176 -192
  170. package/dist/lib/classes/ObjectStoreFull.js.map +1 -1
  171. package/dist/lib/classes/ObjectStoreLite.d.ts +29 -31
  172. package/dist/lib/classes/ObjectStoreLite.js +485 -494
  173. package/dist/lib/classes/ObjectStoreLite.js.map +1 -1
  174. package/dist/lib/classes/Packet.d.ts +2 -2
  175. package/dist/lib/classes/Packet.js +2 -2
  176. package/dist/lib/classes/Packet.js.map +1 -1
  177. package/dist/lib/classes/ParticleSystem.js +1 -1
  178. package/dist/lib/classes/ParticleSystem.js.map +1 -1
  179. package/dist/lib/classes/PrimFacesHelper.d.ts +14 -0
  180. package/dist/lib/classes/PrimFacesHelper.js +75 -0
  181. package/dist/lib/classes/PrimFacesHelper.js.map +1 -0
  182. package/dist/lib/classes/Quaternion.d.ts +31 -6
  183. package/dist/lib/classes/Quaternion.js +236 -48
  184. package/dist/lib/classes/Quaternion.js.map +1 -1
  185. package/dist/lib/classes/Region.d.ts +23 -22
  186. package/dist/lib/classes/Region.js +453 -515
  187. package/dist/lib/classes/Region.js.map +1 -1
  188. package/dist/lib/classes/TarArchive.d.ts +1 -1
  189. package/dist/lib/classes/TarArchive.js.map +1 -1
  190. package/dist/lib/classes/TarFile.js +1 -1
  191. package/dist/lib/classes/TarFile.js.map +1 -1
  192. package/dist/lib/classes/TarReader.d.ts +1 -2
  193. package/dist/lib/classes/TarReader.js +15 -17
  194. package/dist/lib/classes/TarReader.js.map +1 -1
  195. package/dist/lib/classes/TarWriter.d.ts +1 -1
  196. package/dist/lib/classes/TarWriter.js +51 -68
  197. package/dist/lib/classes/TarWriter.js.map +1 -1
  198. package/dist/lib/classes/TextureEntry.d.ts +2 -3
  199. package/dist/lib/classes/TextureEntry.js +12 -12
  200. package/dist/lib/classes/TextureEntry.js.map +1 -1
  201. package/dist/lib/classes/TextureEntryFace.d.ts +4 -4
  202. package/dist/lib/classes/TextureEntryFace.js.map +1 -1
  203. package/dist/lib/classes/UUID.d.ts +2 -2
  204. package/dist/lib/classes/UUID.js +28 -28
  205. package/dist/lib/classes/UUID.js.map +1 -1
  206. package/dist/lib/classes/Utils.d.ts +2 -11
  207. package/dist/lib/classes/Utils.js +72 -328
  208. package/dist/lib/classes/Utils.js.map +1 -1
  209. package/dist/lib/classes/Vector2.d.ts +35 -6
  210. package/dist/lib/classes/Vector2.js +192 -28
  211. package/dist/lib/classes/Vector2.js.map +1 -1
  212. package/dist/lib/classes/Vector3.d.ts +38 -6
  213. package/dist/lib/classes/Vector3.js +229 -48
  214. package/dist/lib/classes/Vector3.js.map +1 -1
  215. package/dist/lib/classes/Vector4.d.ts +36 -6
  216. package/dist/lib/classes/Vector4.js +225 -21
  217. package/dist/lib/classes/Vector4.js.map +1 -1
  218. package/dist/lib/classes/Wearable.d.ts +1 -1
  219. package/dist/lib/classes/Zerocoder.js +2 -2
  220. package/dist/lib/classes/Zerocoder.js.map +1 -1
  221. package/dist/lib/classes/commands/AgentCommands.d.ts +7 -5
  222. package/dist/lib/classes/commands/AgentCommands.js +60 -76
  223. package/dist/lib/classes/commands/AgentCommands.js.map +1 -1
  224. package/dist/lib/classes/commands/AssetCommands.d.ts +5 -10
  225. package/dist/lib/classes/commands/AssetCommands.js +176 -179
  226. package/dist/lib/classes/commands/AssetCommands.js.map +1 -1
  227. package/dist/lib/classes/commands/CommandsBase.d.ts +4 -4
  228. package/dist/lib/classes/commands/CommandsBase.js.map +1 -1
  229. package/dist/lib/classes/commands/CommunicationsCommands.d.ts +3 -3
  230. package/dist/lib/classes/commands/CommunicationsCommands.js +350 -426
  231. package/dist/lib/classes/commands/CommunicationsCommands.js.map +1 -1
  232. package/dist/lib/classes/commands/FriendCommands.d.ts +9 -10
  233. package/dist/lib/classes/commands/FriendCommands.js +238 -236
  234. package/dist/lib/classes/commands/FriendCommands.js.map +1 -1
  235. package/dist/lib/classes/commands/GridCommands.d.ts +3 -3
  236. package/dist/lib/classes/commands/GridCommands.js +299 -336
  237. package/dist/lib/classes/commands/GridCommands.js.map +1 -1
  238. package/dist/lib/classes/commands/GroupCommands.d.ts +2 -2
  239. package/dist/lib/classes/commands/GroupCommands.js +293 -336
  240. package/dist/lib/classes/commands/GroupCommands.js.map +1 -1
  241. package/dist/lib/classes/commands/InventoryCommands.d.ts +4 -4
  242. package/dist/lib/classes/commands/InventoryCommands.js +54 -69
  243. package/dist/lib/classes/commands/InventoryCommands.js.map +1 -1
  244. package/dist/lib/classes/commands/MovementCommands.d.ts +2 -2
  245. package/dist/lib/classes/commands/MovementCommands.js +23 -38
  246. package/dist/lib/classes/commands/MovementCommands.js.map +1 -1
  247. package/dist/lib/classes/commands/NetworkCommands.js +35 -46
  248. package/dist/lib/classes/commands/NetworkCommands.js.map +1 -1
  249. package/dist/lib/classes/commands/ParcelCommands.d.ts +4 -4
  250. package/dist/lib/classes/commands/ParcelCommands.js +64 -77
  251. package/dist/lib/classes/commands/ParcelCommands.js.map +1 -1
  252. package/dist/lib/classes/commands/RegionCommands.d.ts +11 -10
  253. package/dist/lib/classes/commands/RegionCommands.js +1126 -1211
  254. package/dist/lib/classes/commands/RegionCommands.js.map +1 -1
  255. package/dist/lib/classes/commands/TeleportCommands.d.ts +8 -8
  256. package/dist/lib/classes/commands/TeleportCommands.js +58 -58
  257. package/dist/lib/classes/commands/TeleportCommands.js.map +1 -1
  258. package/dist/lib/classes/interfaces/IGameObjectData.d.ts +18 -20
  259. package/dist/lib/classes/interfaces/ILandBlock.d.ts +2 -2
  260. package/dist/lib/classes/interfaces/IObjectStore.d.ts +12 -12
  261. package/dist/lib/classes/interfaces/IResolveJob.d.ts +2 -2
  262. package/dist/lib/classes/interfaces/ITreeBoundingBox.d.ts +2 -2
  263. package/dist/lib/classes/llsd/LLSD.d.ts +12 -0
  264. package/dist/lib/classes/llsd/LLSD.js +128 -0
  265. package/dist/lib/classes/llsd/LLSD.js.map +1 -0
  266. package/dist/lib/classes/llsd/LLSD.spec.d.ts +1 -0
  267. package/dist/lib/classes/llsd/LLSD.spec.js +249 -0
  268. package/dist/lib/classes/llsd/LLSD.spec.js.map +1 -0
  269. package/dist/lib/classes/llsd/LLSDArray.d.ts +26 -3
  270. package/dist/lib/classes/llsd/LLSDArray.js +182 -6
  271. package/dist/lib/classes/llsd/LLSDArray.js.map +1 -1
  272. package/dist/lib/classes/llsd/LLSDBinary.d.ts +7 -0
  273. package/dist/lib/classes/llsd/LLSDBinary.js +114 -0
  274. package/dist/lib/classes/llsd/LLSDBinary.js.map +1 -0
  275. package/dist/lib/classes/llsd/LLSDInteger.d.ts +9 -0
  276. package/dist/lib/classes/llsd/LLSDInteger.js +25 -0
  277. package/dist/lib/classes/llsd/LLSDInteger.js.map +1 -0
  278. package/dist/lib/classes/llsd/LLSDMap.d.ts +16 -5
  279. package/dist/lib/classes/llsd/LLSDMap.js +197 -16
  280. package/dist/lib/classes/llsd/LLSDMap.js.map +1 -1
  281. package/dist/lib/classes/llsd/LLSDNotation.d.ts +11 -0
  282. package/dist/lib/classes/llsd/LLSDNotation.js +271 -0
  283. package/dist/lib/classes/llsd/LLSDNotation.js.map +1 -0
  284. package/dist/lib/classes/llsd/LLSDReal.d.ts +10 -0
  285. package/dist/lib/classes/llsd/LLSDReal.js +71 -0
  286. package/dist/lib/classes/llsd/LLSDReal.js.map +1 -0
  287. package/dist/lib/classes/llsd/LLSDToken.d.ts +1 -1
  288. package/dist/lib/classes/llsd/LLSDTokenContainer.d.ts +2 -2
  289. package/dist/lib/classes/llsd/LLSDTokenGenerator.d.ts +1 -1
  290. package/dist/lib/classes/llsd/LLSDTokenSpec.d.ts +1 -1
  291. package/dist/lib/classes/llsd/LLSDTokenType.d.ts +18 -18
  292. package/dist/lib/classes/llsd/LLSDTokenType.js +18 -18
  293. package/dist/lib/classes/llsd/LLSDTokenType.js.map +1 -1
  294. package/dist/lib/classes/llsd/LLSDType.d.ts +6 -3
  295. package/dist/lib/classes/llsd/LLSDURI.d.ts +7 -0
  296. package/dist/lib/classes/llsd/LLSDURI.js +19 -0
  297. package/dist/lib/classes/llsd/LLSDURI.js.map +1 -0
  298. package/dist/lib/classes/llsd/LLSDXML.d.ts +5 -0
  299. package/dist/lib/classes/llsd/LLSDXML.js +245 -0
  300. package/dist/lib/classes/llsd/LLSDXML.js.map +1 -0
  301. package/dist/lib/classes/messages/ObjectUpdate.d.ts +4 -5
  302. package/dist/lib/classes/messages/ObjectUpdate.js +115 -115
  303. package/dist/lib/classes/messages/ObjectUpdate.js.map +1 -1
  304. package/dist/lib/classes/messages/SimStats.d.ts +3 -2
  305. package/dist/lib/classes/messages/SimStats.js +17 -17
  306. package/dist/lib/classes/messages/SimStats.js.map +1 -1
  307. package/dist/lib/classes/public/Avatar.d.ts +4 -4
  308. package/dist/lib/classes/public/Avatar.js +39 -33
  309. package/dist/lib/classes/public/Avatar.js.map +1 -1
  310. package/dist/lib/classes/public/AvatarQueryResult.d.ts +4 -4
  311. package/dist/lib/classes/public/AvatarQueryResult.js.map +1 -1
  312. package/dist/lib/classes/public/ExtendedMeshData.d.ts +1 -1
  313. package/dist/lib/classes/public/ExtendedMeshData.js.map +1 -1
  314. package/dist/lib/classes/public/ExtraParams.d.ts +6 -6
  315. package/dist/lib/classes/public/ExtraParams.js +36 -39
  316. package/dist/lib/classes/public/ExtraParams.js.map +1 -1
  317. package/dist/lib/classes/public/ExtraParams.spec.js +2 -11
  318. package/dist/lib/classes/public/ExtraParams.spec.js.map +1 -1
  319. package/dist/lib/classes/public/FlexibleData.js.map +1 -1
  320. package/dist/lib/classes/public/Friend.js.map +1 -1
  321. package/dist/lib/classes/public/GameObject.d.ts +23 -21
  322. package/dist/lib/classes/public/GameObject.js +1294 -1306
  323. package/dist/lib/classes/public/GameObject.js.map +1 -1
  324. package/dist/lib/classes/public/GameObject.spec.js +8 -18
  325. package/dist/lib/classes/public/GameObject.spec.js.map +1 -1
  326. package/dist/lib/classes/public/LLMesh.d.ts +5 -7
  327. package/dist/lib/classes/public/LLMesh.js +194 -216
  328. package/dist/lib/classes/public/LLMesh.js.map +1 -1
  329. package/dist/lib/classes/public/LightData.js.map +1 -1
  330. package/dist/lib/classes/public/LightImageData.js.map +1 -1
  331. package/dist/lib/classes/public/Material.js +45 -56
  332. package/dist/lib/classes/public/Material.js.map +1 -1
  333. package/dist/lib/classes/public/MeshData.js.map +1 -1
  334. package/dist/lib/classes/public/Parcel.d.ts +4 -4
  335. package/dist/lib/classes/public/Parcel.js +1 -2
  336. package/dist/lib/classes/public/Parcel.js.map +1 -1
  337. package/dist/lib/classes/public/ReflectionProbeData.d.ts +1 -1
  338. package/dist/lib/classes/public/ReflectionProbeData.js.map +1 -1
  339. package/dist/lib/classes/public/RegionEnvironment.d.ts +14 -13
  340. package/dist/lib/classes/public/RegionEnvironment.js +94 -53
  341. package/dist/lib/classes/public/RegionEnvironment.js.map +1 -1
  342. package/dist/lib/classes/public/RegionEnvironmentSky.d.ts +2 -0
  343. package/dist/lib/classes/public/RegionEnvironmentSky.js +7 -0
  344. package/dist/lib/classes/public/RegionEnvironmentSky.js.map +1 -0
  345. package/dist/lib/classes/public/RegionEnvironmentWater.d.ts +2 -0
  346. package/dist/lib/classes/public/RegionEnvironmentWater.js +7 -0
  347. package/dist/lib/classes/public/RegionEnvironmentWater.js.map +1 -0
  348. package/dist/lib/classes/public/RenderMaterialData.js.map +1 -1
  349. package/dist/lib/classes/public/RenderMaterialParam.d.ts +1 -1
  350. package/dist/lib/classes/public/SculptData.js.map +1 -1
  351. package/dist/lib/classes/public/TextureAnim.js +2 -1
  352. package/dist/lib/classes/public/TextureAnim.js.map +1 -1
  353. package/dist/lib/classes/public/interfaces/GlobalPosition.d.ts +1 -1
  354. package/dist/lib/classes/public/interfaces/LLPhysicsConvex.d.ts +1 -1
  355. package/dist/lib/classes/public/interfaces/LLSkin.d.ts +1 -1
  356. package/dist/lib/classes/public/interfaces/LLSubMesh.d.ts +3 -5
  357. package/dist/lib/classes/public/interfaces/MapLocation.d.ts +3 -3
  358. package/dist/lib/classes/public/interfaces/RegionEnvironmentSkyLLSD.d.ts +26 -0
  359. package/dist/lib/classes/public/interfaces/RegionEnvironmentSkyLLSD.js +3 -0
  360. package/dist/lib/classes/public/interfaces/RegionEnvironmentSkyLLSD.js.map +1 -0
  361. package/dist/lib/classes/public/interfaces/RegionEnvironmentWaterLLSD.d.ts +15 -0
  362. package/dist/lib/classes/public/interfaces/RegionEnvironmentWaterLLSD.js +3 -0
  363. package/dist/lib/classes/public/interfaces/RegionEnvironmentWaterLLSD.js.map +1 -0
  364. package/dist/lib/classes/public/interfaces/SkyPreset.d.ts +3 -3
  365. package/dist/lib/classes/public/interfaces/WaterPreset.d.ts +4 -4
  366. package/dist/lib/deviceToken.json +1 -0
  367. package/dist/lib/enums/AssetType.d.ts +6 -4
  368. package/dist/lib/enums/AssetType.js +5 -3
  369. package/dist/lib/enums/AssetType.js.map +1 -1
  370. package/dist/lib/enums/AttachmentPoint.d.ts +0 -1
  371. package/dist/lib/enums/AttachmentPoint.js +0 -1
  372. package/dist/lib/enums/AttachmentPoint.js.map +1 -1
  373. package/dist/lib/enums/InventoryType.d.ts +3 -5
  374. package/dist/lib/enums/InventoryType.js +2 -4
  375. package/dist/lib/enums/InventoryType.js.map +1 -1
  376. package/dist/lib/enums/LayerType.d.ts +1 -1
  377. package/dist/lib/enums/LayerType.js +1 -1
  378. package/dist/lib/events/AvatarPropertiesReplyEvent.d.ts +1 -1
  379. package/dist/lib/events/BalanceUpdatedEvent.d.ts +2 -2
  380. package/dist/lib/events/BulkUpdateInventoryEvent.d.ts +2 -2
  381. package/dist/lib/events/BulkUpdateInventoryEvent.js.map +1 -1
  382. package/dist/lib/events/ChatEvent.d.ts +5 -5
  383. package/dist/lib/events/FriendOnlineEvent.d.ts +1 -1
  384. package/dist/lib/events/FriendRemovedEvent.d.ts +1 -1
  385. package/dist/lib/events/FriendRequestEvent.d.ts +1 -1
  386. package/dist/lib/events/FriendResponseEvent.d.ts +1 -1
  387. package/dist/lib/events/FriendRightsEvent.d.ts +2 -2
  388. package/dist/lib/events/GroupChatClosedEvent.d.ts +1 -1
  389. package/dist/lib/events/GroupChatEvent.d.ts +1 -1
  390. package/dist/lib/events/GroupChatSessionAgentListEvent.d.ts +1 -1
  391. package/dist/lib/events/GroupChatSessionJoinEvent.d.ts +1 -1
  392. package/dist/lib/events/GroupInviteEvent.d.ts +1 -1
  393. package/dist/lib/events/GroupNoticeEvent.d.ts +1 -1
  394. package/dist/lib/events/GroupProfileReplyEvent.d.ts +2 -2
  395. package/dist/lib/events/InstantMessageEvent.d.ts +3 -3
  396. package/dist/lib/events/InventoryOfferedEvent.d.ts +3 -3
  397. package/dist/lib/events/InventoryResponseEvent.d.ts +1 -1
  398. package/dist/lib/events/LandStatsEvent.d.ts +4 -4
  399. package/dist/lib/events/LandStatsEvent.js.map +1 -1
  400. package/dist/lib/events/LureEvent.d.ts +2 -2
  401. package/dist/lib/events/MapInfoRangeReplyEvent.d.ts +1 -1
  402. package/dist/lib/events/MapInfoReplyEvent.d.ts +2 -2
  403. package/dist/lib/events/NewObjectEvent.d.ts +2 -2
  404. package/dist/lib/events/ObjectKilledEvent.d.ts +2 -2
  405. package/dist/lib/events/ObjectPhysicsDataEvent.d.ts +1 -1
  406. package/dist/lib/events/ObjectResolvedEvent.d.ts +1 -1
  407. package/dist/lib/events/ObjectUpdatedEvent.d.ts +2 -2
  408. package/dist/lib/events/ParcelInfoReplyEvent.d.ts +3 -3
  409. package/dist/lib/events/ParcelPropertiesEvent.d.ts +3 -3
  410. package/dist/lib/events/RegionInfoReplyEvent.d.ts +2 -2
  411. package/dist/lib/events/ScriptDialogEvent.d.ts +1 -1
  412. package/dist/lib/events/SelectedObjectEvent.d.ts +1 -1
  413. package/dist/lib/events/TeleportEvent.d.ts +1 -1
  414. package/dist/lib/index.d.ts +6 -8
  415. package/dist/lib/index.js +4 -7
  416. package/dist/lib/index.js.map +1 -1
  417. package/dist/lib/tsm/common.d.ts +1 -1
  418. package/dist/lib/tsm/common.js +3 -1
  419. package/dist/lib/tsm/common.js.map +1 -1
  420. package/dist/lib/tsm/mat2.d.ts +8 -8
  421. package/dist/lib/tsm/mat2.js +8 -7
  422. package/dist/lib/tsm/mat2.js.map +1 -1
  423. package/dist/lib/tsm/mat3.d.ts +7 -7
  424. package/dist/lib/tsm/mat3.js +8 -7
  425. package/dist/lib/tsm/mat3.js.map +1 -1
  426. package/dist/lib/tsm/mat4.d.ts +9 -9
  427. package/dist/lib/tsm/mat4.js +8 -7
  428. package/dist/lib/tsm/mat4.js.map +1 -1
  429. package/dist/lib/tsm/quat.d.ts +19 -19
  430. package/dist/lib/tsm/quat.js +69 -68
  431. package/dist/lib/tsm/quat.js.map +1 -1
  432. package/dist/lib/tsm/vec2.d.ts +13 -13
  433. package/dist/lib/tsm/vec2.js +30 -29
  434. package/dist/lib/tsm/vec2.js.map +1 -1
  435. package/dist/lib/tsm/vec3.d.ts +16 -16
  436. package/dist/lib/tsm/vec3.js +48 -47
  437. package/dist/lib/tsm/vec3.js.map +1 -1
  438. package/dist/lib/tsm/vec4.d.ts +22 -22
  439. package/dist/lib/tsm/vec4.js +94 -93
  440. package/dist/lib/tsm/vec4.js.map +1 -1
  441. package/eslint.config.mjs +104 -0
  442. package/examples/Inventory/Inventory.ts +4 -2
  443. package/examples/Money/Money.ts +6 -6
  444. package/examples/Objects/TaskInventory.ts +4 -3
  445. package/examples/Region/Settings.ts +19 -0
  446. package/package.json +10 -9
  447. package/.eslintrc +0 -224
  448. package/dist/lib/classes/llsd/LLSDNotationParser.d.ts +0 -9
  449. package/dist/lib/classes/llsd/LLSDNotationParser.js +0 -177
  450. package/dist/lib/classes/llsd/LLSDNotationParser.js.map +0 -1
  451. package/dist/lib/classes/llsd/LLSDNotationParser.spec.js +0 -167
  452. package/dist/lib/classes/llsd/LLSDNotationParser.spec.js.map +0 -1
  453. package/dist/lib/enums/AssetTypeLL.d.ts +0 -27
  454. package/dist/lib/enums/AssetTypeLL.js +0 -32
  455. package/dist/lib/enums/AssetTypeLL.js.map +0 -1
  456. package/dist/lib/enums/HTTPAssets.d.ts +0 -24
  457. package/dist/lib/enums/HTTPAssets.js +0 -29
  458. package/dist/lib/enums/HTTPAssets.js.map +0 -1
  459. /package/dist/{lib/classes/llsd/LLSDNotationParser.spec.d.ts → examples/Region/Settings.d.ts} +0 -0
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.RegionCommands = void 0;
13
4
  const LLSD = require("@caspertech/llsd");
@@ -34,34 +25,35 @@ const Utils_1 = require("../Utils");
34
25
  const UUID_1 = require("../UUID");
35
26
  const Vector3_1 = require("../Vector3");
36
27
  const CommandsBase_1 = require("./CommandsBase");
28
+ const PrimFacesHelper_1 = require("../PrimFacesHelper");
29
+ const Logger_1 = require("../Logger");
30
+ const AssetType_1 = require("../../enums/AssetType");
37
31
  class RegionCommands extends CommandsBase_1.CommandsBase {
38
- getRegionHandle(regionID) {
39
- return __awaiter(this, void 0, void 0, function* () {
40
- const circuit = this.currentRegion.circuit;
41
- const msg = new RegionHandleRequest_1.RegionHandleRequestMessage();
42
- msg.RequestBlock = {
43
- RegionID: regionID,
44
- };
45
- circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
46
- const responseMsg = yield circuit.waitForMessage(Message_1.Message.RegionIDAndHandleReply, 10000, (filterMsg) => {
47
- if (filterMsg.ReplyBlock.RegionID.toString() === regionID.toString()) {
48
- return FilterResponse_1.FilterResponse.Finish;
49
- }
50
- else {
51
- return FilterResponse_1.FilterResponse.NoMatch;
52
- }
53
- });
54
- return responseMsg.ReplyBlock.RegionHandle;
32
+ async getRegionHandle(regionID) {
33
+ const { circuit } = this.currentRegion;
34
+ const msg = new RegionHandleRequest_1.RegionHandleRequestMessage();
35
+ msg.RequestBlock = {
36
+ RegionID: regionID,
37
+ };
38
+ circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
39
+ const responseMsg = await circuit.waitForMessage(Message_1.Message.RegionIDAndHandleReply, 10000, (filterMsg) => {
40
+ if (filterMsg.ReplyBlock.RegionID.toString() === regionID.toString()) {
41
+ return FilterResponse_1.FilterResponse.Finish;
42
+ }
43
+ else {
44
+ return FilterResponse_1.FilterResponse.NoMatch;
45
+ }
55
46
  });
47
+ return responseMsg.ReplyBlock.RegionHandle;
56
48
  }
57
- waitForHandshake(timeout = 10000) {
49
+ async waitForHandshake(timeout = 10000) {
58
50
  return new Promise((resolve, reject) => {
59
51
  if (this.currentRegion.handshakeComplete) {
60
52
  resolve();
61
53
  }
62
54
  else {
63
- let handshakeSubscription;
64
- let timeoutTimer;
55
+ let handshakeSubscription = undefined;
56
+ let timeoutTimer = undefined;
65
57
  handshakeSubscription = this.currentRegion.handshakeCompleteEvent.subscribe(() => {
66
58
  if (timeoutTimer !== undefined) {
67
59
  clearTimeout(timeoutTimer);
@@ -98,7 +90,7 @@ class RegionCommands extends CommandsBase_1.CommandsBase {
98
90
  }
99
91
  });
100
92
  }
101
- estateMessage(method, params) {
93
+ async estateMessage(method, params) {
102
94
  const msg = new EstateOwnerMessage_1.EstateOwnerMessageMessage();
103
95
  msg.AgentData = {
104
96
  AgentID: this.agent.agentID,
@@ -118,10 +110,10 @@ class RegionCommands extends CommandsBase_1.CommandsBase {
118
110
  const sequenceID = this.circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
119
111
  return this.circuit.waitForAck(sequenceID, 10000);
120
112
  }
121
- restartRegion(secs) {
113
+ async restartRegion(secs) {
122
114
  return this.estateMessage('restart', [String(secs)]);
123
115
  }
124
- simulatorMessage(message) {
116
+ async simulatorMessage(message) {
125
117
  return this.estateMessage('simulatormessage', [
126
118
  '-1',
127
119
  '-1',
@@ -130,56 +122,54 @@ class RegionCommands extends CommandsBase_1.CommandsBase {
130
122
  message
131
123
  ]);
132
124
  }
133
- cancelRestart() {
125
+ async cancelRestart() {
134
126
  return this.restartRegion(-1);
135
127
  }
136
128
  getAvatarsInRegion() {
137
- return Object.values(this.currentRegion.agents);
129
+ return Array.from(this.currentRegion.agents.values());
138
130
  }
139
- deselectObjects(objects) {
140
- return __awaiter(this, void 0, void 0, function* () {
141
- const selectLimit = 255;
142
- if (objects.length > selectLimit) {
143
- for (let x = 0; x < objects.length; x += selectLimit) {
144
- const selectList = [];
145
- for (let y = 0; y < selectLimit; y++) {
146
- if (x + y < objects.length) {
147
- selectList.push(objects[x + y]);
148
- }
131
+ async deselectObjects(objects) {
132
+ const selectLimit = 255;
133
+ if (objects.length > selectLimit) {
134
+ for (let x = 0; x < objects.length; x += selectLimit) {
135
+ const selectList = [];
136
+ for (let y = 0; y < selectLimit; y++) {
137
+ if (x + y < objects.length) {
138
+ selectList.push(objects[x + y]);
149
139
  }
150
- yield this.deselectObjects(selectList);
151
140
  }
152
- return;
141
+ await this.deselectObjects(selectList);
153
142
  }
154
- else {
155
- const deselectObject = new ObjectDeselect_1.ObjectDeselectMessage();
156
- deselectObject.AgentData = {
157
- AgentID: this.agent.agentID,
158
- SessionID: this.circuit.sessionID
159
- };
160
- deselectObject.ObjectData = [];
161
- const uuidMap = {};
162
- let skipped = 0;
163
- for (const obj of objects) {
164
- if (!(obj instanceof GameObject_1.GameObject)) {
165
- skipped++;
166
- continue;
167
- }
168
- const uuidStr = obj.FullID.toString();
169
- if (!uuidMap[uuidStr]) {
170
- uuidMap[uuidStr] = obj;
171
- deselectObject.ObjectData.push({
172
- ObjectLocalID: obj.ID
173
- });
174
- }
175
- }
176
- if (skipped > 0) {
177
- console.log('Skipped ' + String(skipped) + ' bad objects during deselection');
143
+ return;
144
+ }
145
+ else {
146
+ const deselectObject = new ObjectDeselect_1.ObjectDeselectMessage();
147
+ deselectObject.AgentData = {
148
+ AgentID: this.agent.agentID,
149
+ SessionID: this.circuit.sessionID
150
+ };
151
+ deselectObject.ObjectData = [];
152
+ const uuidMap = new Set();
153
+ let skipped = 0;
154
+ for (const obj of objects) {
155
+ if (!(obj instanceof GameObject_1.GameObject)) {
156
+ skipped++;
157
+ continue;
158
+ }
159
+ const uuidStr = obj.FullID.toString();
160
+ if (!uuidMap.has(uuidStr)) {
161
+ uuidMap.add(uuidStr);
162
+ deselectObject.ObjectData.push({
163
+ ObjectLocalID: obj.ID
164
+ });
178
165
  }
179
- const sequenceID = this.circuit.sendMessage(deselectObject, PacketFlags_1.PacketFlags.Reliable);
180
- return this.circuit.waitForAck(sequenceID, 10000);
181
166
  }
182
- });
167
+ if (skipped > 0) {
168
+ console.log('Skipped ' + String(skipped) + ' bad objects during deselection');
169
+ }
170
+ const sequenceID = this.circuit.sendMessage(deselectObject, PacketFlags_1.PacketFlags.Reliable);
171
+ return this.circuit.waitForAck(sequenceID, 10000);
172
+ }
183
173
  }
184
174
  countObjects() {
185
175
  return this.currentRegion.objects.getNumberOfObjects();
@@ -195,152 +185,612 @@ class RegionCommands extends CommandsBase_1.CommandsBase {
195
185
  exportSettings() {
196
186
  return this.currentRegion.exportXML();
197
187
  }
198
- getTerrain() {
199
- return __awaiter(this, void 0, void 0, function* () {
200
- yield this.currentRegion.waitForTerrain();
201
- const buf = Buffer.allocUnsafe(262144);
202
- let pos = 0;
203
- for (let x = 0; x < 256; x++) {
204
- for (let y = 0; y < 256; y++) {
205
- buf.writeFloatLE(this.currentRegion.terrain[x][y], pos);
206
- pos = pos + 4;
207
- }
188
+ async getTerrain() {
189
+ await this.currentRegion.waitForTerrain();
190
+ const buf = Buffer.allocUnsafe(262144);
191
+ let pos = 0;
192
+ for (let x = 0; x < 256; x++) {
193
+ for (let y = 0; y < 256; y++) {
194
+ buf.writeFloatLE(this.currentRegion.terrain[x][y], pos);
195
+ pos = pos + 4;
208
196
  }
209
- return buf;
210
- });
197
+ }
198
+ return buf;
211
199
  }
212
- selectObjects(objects) {
213
- return __awaiter(this, void 0, void 0, function* () {
214
- const selectLimit = 255;
215
- if (objects.length > selectLimit) {
216
- for (let x = 0; x < objects.length; x += selectLimit) {
217
- const selectList = [];
218
- for (let y = 0; y < selectLimit; y++) {
219
- if (x + y < objects.length) {
220
- selectList.push(objects[x + y]);
200
+ async selectObjects(objects) {
201
+ const selectLimit = 255;
202
+ if (objects.length > selectLimit) {
203
+ for (let x = 0; x < objects.length; x += selectLimit) {
204
+ const selectList = [];
205
+ for (let y = 0; y < selectLimit; y++) {
206
+ if (x + y < objects.length) {
207
+ selectList.push(objects[x + y]);
208
+ }
209
+ }
210
+ await this.selectObjects(selectList);
211
+ }
212
+ return;
213
+ }
214
+ else {
215
+ const selectObject = new ObjectSelect_1.ObjectSelectMessage();
216
+ selectObject.AgentData = {
217
+ AgentID: this.agent.agentID,
218
+ SessionID: this.circuit.sessionID
219
+ };
220
+ selectObject.ObjectData = [];
221
+ const uuidMap = new Map();
222
+ let skipped = 0;
223
+ for (const obj of objects) {
224
+ if (!(obj instanceof GameObject_1.GameObject)) {
225
+ skipped++;
226
+ continue;
227
+ }
228
+ const uuidStr = obj.FullID.toString();
229
+ if (!uuidMap.has(uuidStr)) {
230
+ uuidMap.set(uuidStr, obj);
231
+ selectObject.ObjectData.push({
232
+ ObjectLocalID: obj.ID
233
+ });
234
+ }
235
+ }
236
+ if (skipped > 0) {
237
+ console.log('Skipped ' + String(skipped) + ' bad objects during deselection');
238
+ }
239
+ this.circuit.sendMessage(selectObject, PacketFlags_1.PacketFlags.Reliable);
240
+ try {
241
+ await this.circuit.waitForMessage(Message_1.Message.ObjectProperties, 10000, (propertiesMessage) => {
242
+ let found = false;
243
+ for (const objData of propertiesMessage.ObjectData) {
244
+ const objDataUUID = objData.ObjectID.toString();
245
+ const obj = uuidMap.get(objDataUUID);
246
+ if (obj !== undefined) {
247
+ obj.creatorID = objData.CreatorID;
248
+ obj.creationDate = objData.CreationDate;
249
+ obj.baseMask = objData.BaseMask;
250
+ obj.ownerMask = objData.OwnerMask;
251
+ obj.groupMask = objData.GroupMask;
252
+ obj.everyoneMask = objData.EveryoneMask;
253
+ obj.nextOwnerMask = objData.NextOwnerMask;
254
+ obj.ownershipCost = objData.OwnershipCost;
255
+ obj.saleType = objData.SaleType;
256
+ obj.salePrice = objData.SalePrice;
257
+ obj.aggregatePerms = objData.AggregatePerms;
258
+ obj.aggregatePermTextures = objData.AggregatePermTextures;
259
+ obj.aggregatePermTexturesOwner = objData.AggregatePermTexturesOwner;
260
+ obj.category = objData.Category;
261
+ obj.inventorySerial = objData.InventorySerial;
262
+ obj.itemID = objData.ItemID;
263
+ obj.folderID = objData.FolderID;
264
+ obj.fromTaskID = objData.FromTaskID;
265
+ obj.groupID = objData.GroupID;
266
+ obj.OwnerID = objData.OwnerID;
267
+ obj.lastOwnerID = objData.LastOwnerID;
268
+ obj.name = Utils_1.Utils.BufferToStringSimple(objData.Name);
269
+ obj.description = Utils_1.Utils.BufferToStringSimple(objData.Description);
270
+ obj.touchName = Utils_1.Utils.BufferToStringSimple(objData.TouchName);
271
+ obj.sitName = Utils_1.Utils.BufferToStringSimple(objData.SitName);
272
+ obj.textureID = Utils_1.Utils.BufferToStringSimple(objData.TextureID);
273
+ obj.resolvedAt = new Date().getTime() / 1000;
274
+ uuidMap.delete(objDataUUID);
275
+ found = true;
221
276
  }
222
277
  }
223
- yield this.selectObjects(selectList);
278
+ if (Object.keys(uuidMap).length === 0) {
279
+ return FilterResponse_1.FilterResponse.Finish;
280
+ }
281
+ if (!found) {
282
+ return FilterResponse_1.FilterResponse.NoMatch;
283
+ }
284
+ else {
285
+ return FilterResponse_1.FilterResponse.Match;
286
+ }
287
+ });
288
+ }
289
+ catch (_error) {
290
+ }
291
+ }
292
+ }
293
+ getName() {
294
+ return this.currentRegion.regionName;
295
+ }
296
+ async resolveObject(object, options) {
297
+ return this.currentRegion.resolver.resolveObjects([object], options);
298
+ }
299
+ async resolveObjects(objects, options) {
300
+ return this.currentRegion.resolver.resolveObjects(objects, options);
301
+ }
302
+ async fetchObjectInventory(object) {
303
+ return this.currentRegion.resolver.getInventory(object);
304
+ }
305
+ async fetchObjectInventories(objects) {
306
+ return this.currentRegion.resolver.getInventories(objects);
307
+ }
308
+ async fetchObjectCost(object) {
309
+ return this.currentRegion.resolver.getCosts([object]);
310
+ }
311
+ async fetchObjectCosts(objects) {
312
+ return this.currentRegion.resolver.getCosts(objects);
313
+ }
314
+ async buildObjectNew(obj, map, callback, costOnly = false, skipMove = false) {
315
+ const buildMap = new BuildMap_1.BuildMap(map, callback, costOnly);
316
+ this.gatherAssets(obj, buildMap);
317
+ const bomTextures = [
318
+ '5a9f4a74-30f2-821c-b88d-70499d3e7183',
319
+ 'ae2de45c-d252-50b8-5c6e-19f39ce79317',
320
+ '24daea5f-0539-cfcf-047f-fbc40b2786ba',
321
+ '52cc6bb6-2ee5-e632-d3ad-50197b1dcb8a',
322
+ '43529ce8-7faa-ad92-165a-bc4078371687',
323
+ '09aac1fb-6bce-0bee-7d44-caac6dbb6c63',
324
+ 'ff62763f-d60a-9855-890b-0c96f8f8cd98',
325
+ '8e915e25-31d1-cc95-ae08-d58a47488251',
326
+ '9742065b-19b5-297c-858a-29711d539043',
327
+ '03642e83-2bd1-4eb9-34b4-4c47ed586d2d',
328
+ 'edd51b77-fc10-ce7a-4b3d-011dfc349e4f',
329
+ 'c228d1cf-4b5d-4ba8-84f4-899a0796aa97'
330
+ ];
331
+ for (const bomTexture of bomTextures) {
332
+ buildMap.assetMap.textures.delete(bomTexture);
333
+ }
334
+ await callback(map);
335
+ if (costOnly) {
336
+ return null;
337
+ }
338
+ let agentPos = new Vector3_1.Vector3([128, 128, 2048]);
339
+ try {
340
+ const agentLocalID = this.currentRegion.agent.localID;
341
+ const agentObject = this.currentRegion.objects.getObjectByLocalID(agentLocalID);
342
+ if (agentObject.Position !== undefined) {
343
+ agentPos = new Vector3_1.Vector3(agentObject.Position);
344
+ }
345
+ else {
346
+ throw new Error('Agent position is undefined');
347
+ }
348
+ }
349
+ catch (_error) {
350
+ console.warn('Unable to find avatar location, rezzing at ' + agentPos.toString());
351
+ }
352
+ agentPos.z += 2.0;
353
+ buildMap.rezLocation = agentPos;
354
+ const campos = new Vector3_1.Vector3(agentPos);
355
+ campos.z += 2.0;
356
+ this.currentRegion.clientCommands.agent.setCamera(campos, agentPos, 10, new Vector3_1.Vector3([-1.0, 0, 0]), new Vector3_1.Vector3([0.0, 1.0, 0]));
357
+ if (buildMap.primsNeeded > 0) {
358
+ buildMap.primReservoir = await this.createPrims(buildMap.primsNeeded, agentPos);
359
+ }
360
+ let storedPosition = undefined;
361
+ if (skipMove) {
362
+ storedPosition = obj.Position;
363
+ obj.Position = new Vector3_1.Vector3(buildMap.rezLocation);
364
+ }
365
+ const parts = [];
366
+ parts.push(async () => {
367
+ return {
368
+ index: 1,
369
+ object: await this.buildPart(obj, Vector3_1.Vector3.getZero(), Quaternion_1.Quaternion.getIdentity(), buildMap, true)
370
+ };
371
+ });
372
+ if (obj.children) {
373
+ if (obj.Position === undefined) {
374
+ obj.Position = Vector3_1.Vector3.getZero();
375
+ }
376
+ if (obj.Rotation === undefined) {
377
+ obj.Rotation = Quaternion_1.Quaternion.getIdentity();
378
+ }
379
+ let childIndex = 2;
380
+ for (const child of obj.children) {
381
+ if (child.Position !== undefined && child.Rotation !== undefined) {
382
+ const index = childIndex++;
383
+ parts.push(async () => {
384
+ return {
385
+ index,
386
+ object: await this.buildPart(child, new Vector3_1.Vector3(obj.Position), new Quaternion_1.Quaternion(obj.Rotation), buildMap, false)
387
+ };
388
+ });
224
389
  }
225
- return;
390
+ }
391
+ }
392
+ let results = {
393
+ results: [],
394
+ errors: []
395
+ };
396
+ results = await Utils_1.Utils.promiseConcurrent(parts, 5, 0);
397
+ if (results.errors.length > 0) {
398
+ for (const err of results.errors) {
399
+ console.error(err);
400
+ }
401
+ }
402
+ let rootObj = null;
403
+ for (const childObject of results.results) {
404
+ if (childObject.object.isMarkedRoot) {
405
+ rootObj = childObject.object;
406
+ break;
407
+ }
408
+ }
409
+ if (rootObj === null) {
410
+ throw new Error('Failed to find root prim..');
411
+ }
412
+ const childPrims = [];
413
+ results.results.sort((a, b) => {
414
+ return a.index - b.index;
415
+ });
416
+ for (const childObject of results.results) {
417
+ if (childObject.object !== rootObj) {
418
+ childPrims.push(childObject.object);
419
+ }
420
+ }
421
+ try {
422
+ await rootObj.linkFrom(childPrims);
423
+ }
424
+ catch (err) {
425
+ console.error('Link failed:');
426
+ console.error(err);
427
+ }
428
+ if (storedPosition !== undefined) {
429
+ obj.Position = storedPosition;
430
+ }
431
+ return rootObj;
432
+ }
433
+ async getObjectByLocalID(id, resolve, waitFor = 0) {
434
+ let obj = null;
435
+ try {
436
+ obj = this.currentRegion.objects.getObjectByLocalID(id);
437
+ }
438
+ catch (error) {
439
+ if (waitFor > 0) {
440
+ obj = await this.waitForObjectByLocalID(id, waitFor);
226
441
  }
227
442
  else {
228
- const selectObject = new ObjectSelect_1.ObjectSelectMessage();
229
- selectObject.AgentData = {
230
- AgentID: this.agent.agentID,
231
- SessionID: this.circuit.sessionID
232
- };
233
- selectObject.ObjectData = [];
234
- const uuidMap = {};
235
- let skipped = 0;
236
- for (const obj of objects) {
237
- if (!(obj instanceof GameObject_1.GameObject)) {
238
- skipped++;
239
- continue;
443
+ throw (error);
444
+ }
445
+ }
446
+ if (resolve) {
447
+ await this.currentRegion.resolver.resolveObjects([obj], {});
448
+ }
449
+ return obj;
450
+ }
451
+ async getObjectByUUID(id, resolve, waitFor = 0) {
452
+ let obj = null;
453
+ try {
454
+ obj = this.currentRegion.objects.getObjectByUUID(id);
455
+ }
456
+ catch (error) {
457
+ if (waitFor > 0) {
458
+ obj = await this.waitForObjectByUUID(id, waitFor);
459
+ }
460
+ else {
461
+ throw (error);
462
+ }
463
+ }
464
+ if (resolve) {
465
+ await this.currentRegion.resolver.resolveObjects([obj], {});
466
+ }
467
+ return obj;
468
+ }
469
+ async findObjectsByName(pattern, minX, maxX, minY, maxY, minZ, maxZ) {
470
+ let objects = [];
471
+ if (minX !== undefined && maxX !== undefined && minY !== undefined && maxY !== undefined && minZ !== undefined && maxZ !== undefined) {
472
+ objects = await this.getObjectsInArea(minX, maxX, minY, maxY, minZ, maxZ, true);
473
+ }
474
+ else {
475
+ objects = await this.getAllObjects({ resolve: true });
476
+ }
477
+ const idCheck = {};
478
+ const matches = [];
479
+ const it = function (go) {
480
+ if (go.name !== undefined) {
481
+ let match = false;
482
+ if (pattern instanceof RegExp) {
483
+ if (pattern.test(go.name)) {
484
+ match = true;
240
485
  }
241
- const uuidStr = obj.FullID.toString();
242
- if (!uuidMap[uuidStr]) {
243
- uuidMap[uuidStr] = obj;
244
- selectObject.ObjectData.push({
245
- ObjectLocalID: obj.ID
246
- });
486
+ }
487
+ else {
488
+ match = micromatch.isMatch(go.name, pattern, { nocase: true });
489
+ }
490
+ if (match) {
491
+ const fullID = go.FullID.toString();
492
+ if (!idCheck[fullID]) {
493
+ matches.push(go);
494
+ idCheck[fullID] = true;
247
495
  }
248
496
  }
249
- if (skipped > 0) {
250
- console.log('Skipped ' + String(skipped) + ' bad objects during deselection');
497
+ }
498
+ if (go.children && go.children.length > 0) {
499
+ for (const child of go.children) {
500
+ it(child);
251
501
  }
252
- this.circuit.sendMessage(selectObject, PacketFlags_1.PacketFlags.Reliable);
253
- try {
254
- yield this.circuit.waitForMessage(Message_1.Message.ObjectProperties, 10000, (propertiesMessage) => {
255
- let found = false;
256
- for (const objData of propertiesMessage.ObjectData) {
257
- const objDataUUID = objData.ObjectID.toString();
258
- if (uuidMap[objDataUUID] !== undefined) {
259
- const obj = uuidMap[objDataUUID];
260
- obj.creatorID = objData.CreatorID;
261
- obj.creationDate = objData.CreationDate;
262
- obj.baseMask = objData.BaseMask;
263
- obj.ownerMask = objData.OwnerMask;
264
- obj.groupMask = objData.GroupMask;
265
- obj.everyoneMask = objData.EveryoneMask;
266
- obj.nextOwnerMask = objData.NextOwnerMask;
267
- obj.ownershipCost = objData.OwnershipCost;
268
- obj.saleType = objData.SaleType;
269
- obj.salePrice = objData.SalePrice;
270
- obj.aggregatePerms = objData.AggregatePerms;
271
- obj.aggregatePermTextures = objData.AggregatePermTextures;
272
- obj.aggregatePermTexturesOwner = objData.AggregatePermTexturesOwner;
273
- obj.category = objData.Category;
274
- obj.inventorySerial = objData.InventorySerial;
275
- obj.itemID = objData.ItemID;
276
- obj.folderID = objData.FolderID;
277
- obj.fromTaskID = objData.FromTaskID;
278
- obj.groupID = objData.GroupID;
279
- obj.OwnerID = objData.OwnerID;
280
- obj.lastOwnerID = objData.LastOwnerID;
281
- obj.name = Utils_1.Utils.BufferToStringSimple(objData.Name);
282
- obj.description = Utils_1.Utils.BufferToStringSimple(objData.Description);
283
- obj.touchName = Utils_1.Utils.BufferToStringSimple(objData.TouchName);
284
- obj.sitName = Utils_1.Utils.BufferToStringSimple(objData.SitName);
285
- obj.textureID = Utils_1.Utils.BufferToStringSimple(objData.TextureID);
286
- obj.resolvedAt = new Date().getTime() / 1000;
287
- delete uuidMap[objDataUUID];
288
- found = true;
289
- }
290
- }
291
- if (Object.keys(uuidMap).length === 0) {
292
- return FilterResponse_1.FilterResponse.Finish;
293
- }
294
- if (!found) {
295
- return FilterResponse_1.FilterResponse.NoMatch;
296
- }
297
- else {
298
- return FilterResponse_1.FilterResponse.Match;
299
- }
300
- });
502
+ }
503
+ };
504
+ for (const go of objects) {
505
+ it(go);
506
+ }
507
+ return matches;
508
+ }
509
+ async getParcelAt(x, y) {
510
+ return this.currentRegion.getParcelProperties(x, y);
511
+ }
512
+ async getParcels() {
513
+ return this.currentRegion.getParcels();
514
+ }
515
+ async getAllObjects(options) {
516
+ const objs = this.currentRegion.objects.getAllObjects();
517
+ if (options.resolve === true) {
518
+ await this.currentRegion.resolver.resolveObjects(objs, options);
519
+ }
520
+ return objs;
521
+ }
522
+ async getObjectsInArea(minX, maxX, minY, maxY, minZ, maxZ, resolve = false) {
523
+ const objs = this.currentRegion.objects.getObjectsInArea(minX, maxX, minY, maxY, minZ, maxZ);
524
+ if (resolve) {
525
+ await this.currentRegion.resolver.resolveObjects(objs, {});
526
+ }
527
+ return objs;
528
+ }
529
+ async pruneObjects(checkList) {
530
+ let uuids = [];
531
+ let objects = [];
532
+ const stillAlive = {};
533
+ const checkObjects = async (uuidList, objectList) => {
534
+ const objRef = {};
535
+ for (const obj of objectList) {
536
+ objRef[obj.FullID.toString()] = obj;
537
+ }
538
+ const result = await this.currentRegion.caps.capsPostXML('GetObjectCost', {
539
+ 'object_ids': uuidList
540
+ });
541
+ for (const u of Object.keys(result)) {
542
+ stillAlive[u] = objRef[u];
543
+ }
544
+ };
545
+ for (const o of checkList) {
546
+ if (o.FullID !== undefined) {
547
+ uuids.push(new LLSD.UUID(o.FullID));
548
+ objects.push(o);
549
+ if (uuids.length > 256) {
550
+ await checkObjects(uuids, objects);
551
+ uuids = [];
552
+ objects = [];
301
553
  }
302
- catch (error) {
554
+ }
555
+ }
556
+ if (uuids.length > 0) {
557
+ await checkObjects(uuids, objects);
558
+ }
559
+ const deadObjects = [];
560
+ for (const o of checkList) {
561
+ let found = false;
562
+ if (o.FullID !== undefined) {
563
+ const fullID = o.FullID.toString();
564
+ if (stillAlive[fullID] !== undefined) {
565
+ found = true;
303
566
  }
304
567
  }
305
- });
568
+ if (!found) {
569
+ deadObjects.push(o);
570
+ }
571
+ }
572
+ return deadObjects;
306
573
  }
307
- getName() {
308
- return this.currentRegion.regionName;
574
+ setPersist(persist) {
575
+ this.currentRegion.objects.setPersist(persist);
309
576
  }
310
- resolveObject(object, options) {
311
- return __awaiter(this, void 0, void 0, function* () {
312
- return this.currentRegion.resolver.resolveObjects([object], options);
313
- });
577
+ async grabObject(localID, grabOffset = Vector3_1.Vector3.getZero(), uvCoordinate = Vector3_1.Vector3.getZero(), stCoordinate = Vector3_1.Vector3.getZero(), faceIndex = 0, position = Vector3_1.Vector3.getZero(), normal = Vector3_1.Vector3.getZero(), binormal = Vector3_1.Vector3.getZero()) {
578
+ if (localID instanceof UUID_1.UUID) {
579
+ const obj = this.currentRegion.objects.getObjectByUUID(localID);
580
+ localID = obj.ID;
581
+ }
582
+ const msg = new ObjectGrab_1.ObjectGrabMessage();
583
+ msg.AgentData = {
584
+ AgentID: this.agent.agentID,
585
+ SessionID: this.circuit.sessionID
586
+ };
587
+ msg.ObjectData = {
588
+ LocalID: localID,
589
+ GrabOffset: grabOffset
590
+ };
591
+ msg.SurfaceInfo = [
592
+ {
593
+ UVCoord: uvCoordinate,
594
+ STCoord: stCoordinate,
595
+ FaceIndex: faceIndex,
596
+ Position: position,
597
+ Normal: normal,
598
+ Binormal: binormal
599
+ }
600
+ ];
601
+ const seqID = this.circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
602
+ return this.circuit.waitForAck(seqID, 10000);
314
603
  }
315
- resolveObjects(objects, options) {
316
- return __awaiter(this, void 0, void 0, function* () {
317
- return this.currentRegion.resolver.resolveObjects(objects, options);
318
- });
604
+ async deGrabObject(localID, _grabOffset = Vector3_1.Vector3.getZero(), uvCoordinate = Vector3_1.Vector3.getZero(), stCoordinate = Vector3_1.Vector3.getZero(), faceIndex = 0, position = Vector3_1.Vector3.getZero(), normal = Vector3_1.Vector3.getZero(), binormal = Vector3_1.Vector3.getZero()) {
605
+ if (localID instanceof UUID_1.UUID) {
606
+ const obj = this.currentRegion.objects.getObjectByUUID(localID);
607
+ localID = obj.ID;
608
+ }
609
+ const msg = new ObjectDeGrab_1.ObjectDeGrabMessage();
610
+ msg.AgentData = {
611
+ AgentID: this.agent.agentID,
612
+ SessionID: this.circuit.sessionID
613
+ };
614
+ msg.ObjectData = {
615
+ LocalID: localID
616
+ };
617
+ msg.SurfaceInfo = [
618
+ {
619
+ UVCoord: uvCoordinate,
620
+ STCoord: stCoordinate,
621
+ FaceIndex: faceIndex,
622
+ Position: position,
623
+ Normal: normal,
624
+ Binormal: binormal
625
+ }
626
+ ];
627
+ const seqID = this.circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
628
+ return this.circuit.waitForAck(seqID, 10000);
319
629
  }
320
- fetchObjectInventory(object) {
321
- return __awaiter(this, void 0, void 0, function* () {
322
- return this.currentRegion.resolver.getInventory(object);
323
- });
630
+ async dragGrabbedObject(localID, grabPosition, grabOffset = Vector3_1.Vector3.getZero(), uvCoordinate = Vector3_1.Vector3.getZero(), stCoordinate = Vector3_1.Vector3.getZero(), faceIndex = 0, position = Vector3_1.Vector3.getZero(), normal = Vector3_1.Vector3.getZero(), binormal = Vector3_1.Vector3.getZero()) {
631
+ if (!(localID instanceof UUID_1.UUID)) {
632
+ const obj = this.currentRegion.objects.getObjectByLocalID(localID);
633
+ localID = obj.FullID;
634
+ }
635
+ const msg = new ObjectGrabUpdate_1.ObjectGrabUpdateMessage();
636
+ msg.AgentData = {
637
+ AgentID: this.agent.agentID,
638
+ SessionID: this.circuit.sessionID
639
+ };
640
+ msg.ObjectData = {
641
+ ObjectID: localID,
642
+ GrabOffsetInitial: grabOffset,
643
+ GrabPosition: grabPosition,
644
+ TimeSinceLast: 0
645
+ };
646
+ msg.SurfaceInfo = [
647
+ {
648
+ UVCoord: uvCoordinate,
649
+ STCoord: stCoordinate,
650
+ FaceIndex: faceIndex,
651
+ Position: position,
652
+ Normal: normal,
653
+ Binormal: binormal
654
+ }
655
+ ];
656
+ const seqID = this.circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
657
+ return this.circuit.waitForAck(seqID, 10000);
324
658
  }
325
- fetchObjectInventories(objects) {
326
- return __awaiter(this, void 0, void 0, function* () {
327
- return this.currentRegion.resolver.getInventories(objects);
328
- });
659
+ async touchObject(localID, grabOffset = Vector3_1.Vector3.getZero(), uvCoordinate = Vector3_1.Vector3.getZero(), stCoordinate = Vector3_1.Vector3.getZero(), faceIndex = 0, position = Vector3_1.Vector3.getZero(), normal = Vector3_1.Vector3.getZero(), binormal = Vector3_1.Vector3.getZero()) {
660
+ if (localID instanceof UUID_1.UUID) {
661
+ const obj = this.currentRegion.objects.getObjectByUUID(localID);
662
+ localID = obj.ID;
663
+ }
664
+ await this.grabObject(localID, grabOffset, uvCoordinate, stCoordinate, faceIndex, position, normal, binormal);
665
+ return this.deGrabObject(localID, grabOffset, uvCoordinate, stCoordinate, faceIndex, position, normal, binormal);
329
666
  }
330
- fetchObjectCost(object) {
331
- return __awaiter(this, void 0, void 0, function* () {
332
- return this.currentRegion.resolver.getCosts([object]);
333
- });
667
+ async rezPrims(count) {
668
+ let agentPos = new Vector3_1.Vector3([128, 128, 2048]);
669
+ try {
670
+ const agentLocalID = this.currentRegion.agent.localID;
671
+ const agentObject = this.currentRegion.objects.getObjectByLocalID(agentLocalID);
672
+ if (agentObject.Position !== undefined) {
673
+ agentPos = new Vector3_1.Vector3(agentObject.Position);
674
+ }
675
+ else {
676
+ throw new Error('Agent position is undefined');
677
+ }
678
+ }
679
+ catch (_error) {
680
+ console.warn('Unable to find avatar location, rezzing at ' + agentPos.toString());
681
+ }
682
+ agentPos.z += 2.0;
683
+ const campos = new Vector3_1.Vector3(agentPos);
684
+ campos.z += 2.0;
685
+ this.currentRegion.clientCommands.agent.setCamera(campos, agentPos, 10, new Vector3_1.Vector3([-1.0, 0, 0]), new Vector3_1.Vector3([0.0, 1.0, 0]));
686
+ return this.createPrims(count, agentPos);
334
687
  }
335
- fetchObjectCosts(objects) {
336
- return __awaiter(this, void 0, void 0, function* () {
337
- return this.currentRegion.resolver.getCosts(objects);
688
+ async createPrims(count, position) {
689
+ return new Promise((resolve, reject) => {
690
+ const gatheredPrims = [];
691
+ let objSub = undefined;
692
+ let timeout = setTimeout(() => {
693
+ if (objSub !== undefined) {
694
+ objSub.unsubscribe();
695
+ objSub = undefined;
696
+ }
697
+ if (timeout !== undefined) {
698
+ clearTimeout(timeout);
699
+ timeout = undefined;
700
+ }
701
+ reject(new Error('Failed to gather ' + count + ' prims - only gathered ' + gatheredPrims.length));
702
+ }, 30000);
703
+ objSub = this.currentRegion.clientEvents.onNewObjectEvent.subscribe((evt) => {
704
+ (async () => {
705
+ if (evt.object.resolvedAt === undefined) {
706
+ await this.resolveObject(evt.object, {});
707
+ }
708
+ if (evt.createSelected && !evt.object.claimedForBuild) {
709
+ if (evt.object.itemID === undefined || evt.object.itemID.isZero()) {
710
+ if (evt.object.PCode === PCode_1.PCode.Prim &&
711
+ evt.object.Material === 3 &&
712
+ evt.object.PathCurve === 16 &&
713
+ evt.object.ProfileCurve === 1 &&
714
+ evt.object.PathBegin === 0 &&
715
+ evt.object.PathEnd === 1 &&
716
+ evt.object.PathScaleX === 1 &&
717
+ evt.object.PathScaleY === 1 &&
718
+ evt.object.PathShearX === 0 &&
719
+ evt.object.PathShearY === 0 &&
720
+ evt.object.PathTwist === 0 &&
721
+ evt.object.PathTwistBegin === 0 &&
722
+ evt.object.PathRadiusOffset === 0 &&
723
+ evt.object.PathTaperX === 0 &&
724
+ evt.object.PathTaperY === 0 &&
725
+ evt.object.PathRevolutions === 1 &&
726
+ evt.object.PathSkew === 0 &&
727
+ evt.object.ProfileBegin === 0 &&
728
+ evt.object.ProfileHollow === 0) {
729
+ evt.object.claimedForBuild = true;
730
+ gatheredPrims.push(evt.object);
731
+ if (gatheredPrims.length === count) {
732
+ if (objSub !== undefined) {
733
+ objSub.unsubscribe();
734
+ objSub = undefined;
735
+ }
736
+ if (timeout !== undefined) {
737
+ clearTimeout(timeout);
738
+ timeout = undefined;
739
+ }
740
+ resolve(gatheredPrims);
741
+ }
742
+ }
743
+ }
744
+ }
745
+ })().catch((_e) => {
746
+ });
747
+ });
748
+ for (let x = 0; x < count; x++) {
749
+ const msg = new ObjectAdd_1.ObjectAddMessage();
750
+ msg.AgentData = {
751
+ AgentID: this.agent.agentID,
752
+ SessionID: this.circuit.sessionID,
753
+ GroupID: UUID_1.UUID.zero()
754
+ };
755
+ msg.ObjectData = {
756
+ PCode: PCode_1.PCode.Prim,
757
+ Material: 3,
758
+ AddFlags: PrimFlags_1.PrimFlags.CreateSelected,
759
+ PathCurve: 16,
760
+ ProfileCurve: 1,
761
+ PathBegin: 0,
762
+ PathEnd: 0,
763
+ PathScaleX: 100,
764
+ PathScaleY: 100,
765
+ PathShearX: 0,
766
+ PathShearY: 0,
767
+ PathTwist: 0,
768
+ PathTwistBegin: 0,
769
+ PathRadiusOffset: 0,
770
+ PathTaperX: 0,
771
+ PathTaperY: 0,
772
+ PathRevolutions: 0,
773
+ PathSkew: 0,
774
+ ProfileBegin: 0,
775
+ ProfileEnd: 0,
776
+ ProfileHollow: 0,
777
+ BypassRaycast: 1,
778
+ RayStart: position,
779
+ RayEnd: position,
780
+ RayTargetID: UUID_1.UUID.zero(),
781
+ RayEndIsIntersection: 0,
782
+ Scale: new Vector3_1.Vector3([0.5, 0.5, 0.5]),
783
+ Rotation: Quaternion_1.Quaternion.getIdentity(),
784
+ State: 0
785
+ };
786
+ this.circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
787
+ }
338
788
  });
339
789
  }
340
- waitForObjectByLocalID(localID, timeout) {
790
+ async waitForObjectByLocalID(localID, timeout) {
341
791
  return new Promise((resolve, reject) => {
342
792
  let tmr = null;
343
- const subscription = this.currentRegion.clientEvents.onNewObjectEvent.subscribe((event) => __awaiter(this, void 0, void 0, function* () {
793
+ const subscription = this.currentRegion.clientEvents.onNewObjectEvent.subscribe((event) => {
344
794
  if (event.localID === localID) {
345
795
  if (tmr !== null) {
346
796
  clearTimeout(tmr);
@@ -348,17 +798,17 @@ class RegionCommands extends CommandsBase_1.CommandsBase {
348
798
  subscription.unsubscribe();
349
799
  resolve(event.object);
350
800
  }
351
- }));
801
+ });
352
802
  tmr = setTimeout(() => {
353
803
  subscription.unsubscribe();
354
804
  reject(new Error('Timeout'));
355
805
  }, timeout);
356
806
  });
357
807
  }
358
- waitForObjectByUUID(objectID, timeout) {
808
+ async waitForObjectByUUID(objectID, timeout) {
359
809
  return new Promise((resolve, reject) => {
360
810
  let tmr = null;
361
- const subscription = this.currentRegion.clientEvents.onNewObjectEvent.subscribe((event) => __awaiter(this, void 0, void 0, function* () {
811
+ const subscription = this.currentRegion.clientEvents.onNewObjectEvent.subscribe((event) => {
362
812
  if (event.objectID.equals(objectID)) {
363
813
  if (tmr !== null) {
364
814
  clearTimeout(tmr);
@@ -366,1122 +816,587 @@ class RegionCommands extends CommandsBase_1.CommandsBase {
366
816
  subscription.unsubscribe();
367
817
  resolve(event.object);
368
818
  }
369
- }));
819
+ });
370
820
  tmr = setTimeout(() => {
371
821
  subscription.unsubscribe();
372
822
  reject(new Error('Timeout'));
373
823
  }, timeout);
374
824
  });
375
825
  }
376
- buildPart(obj_1, posOffset_1, rotOffset_1, buildMap_1) {
377
- return __awaiter(this, arguments, void 0, function* (obj, posOffset, rotOffset, buildMap, markRoot = false) {
378
- const objectPosition = new Vector3_1.Vector3(obj.Position);
379
- const objectRotation = new Quaternion_1.Quaternion(obj.Rotation);
380
- const objectScale = new Vector3_1.Vector3(obj.Scale);
381
- let finalPos = Vector3_1.Vector3.getZero();
382
- let finalRot = Quaternion_1.Quaternion.getIdentity();
383
- if (posOffset.x === 0.0 && posOffset.y === 0.0 && posOffset.z === 0.0 && objectPosition !== undefined) {
384
- finalPos = new Vector3_1.Vector3(objectPosition);
385
- finalRot = new Quaternion_1.Quaternion(objectRotation);
386
- }
387
- else {
388
- const adjustedPos = new Vector3_1.Vector3(objectPosition).multiplyByTSMQuat(new Quaternion_1.Quaternion(rotOffset));
389
- finalPos = new Vector3_1.Vector3(new Vector3_1.Vector3(posOffset).add(adjustedPos));
390
- const baseRot = new Quaternion_1.Quaternion(rotOffset);
391
- finalRot = new Quaternion_1.Quaternion(baseRot.multiply(new Quaternion_1.Quaternion(objectRotation)));
392
- }
393
- let object = null;
394
- let rezzedMesh = false;
395
- if (obj.extraParams !== undefined && obj.extraParams.meshData !== null) {
396
- if (buildMap.assetMap.mesh[obj.extraParams.meshData.meshData.toString()] !== undefined) {
397
- const meshEntry = buildMap.assetMap.mesh[obj.extraParams.meshData.meshData.toString()];
398
- const rezLocation = new Vector3_1.Vector3(buildMap.rezLocation);
399
- rezLocation.z += (objectScale.z / 2);
400
- if (meshEntry.item !== null) {
401
- try {
402
- object = yield meshEntry.item.rezInWorld(rezLocation);
403
- }
404
- catch (err) {
405
- console.error('Failed to rez object ' + obj.name + ' in-world');
406
- console.error(err);
407
- }
408
- rezzedMesh = true;
409
- }
410
- else {
411
- console.error('Unable to rez mesh item from inventory - item is null');
412
- }
413
- }
414
- }
415
- else if (buildMap.primReservoir.length > 0) {
416
- const newPrim = buildMap.primReservoir.shift();
417
- if (newPrim !== undefined) {
418
- object = newPrim;
826
+ async buildPart(obj, posOffset, rotOffset, buildMap, markRoot = false) {
827
+ const objectPosition = new Vector3_1.Vector3(obj.Position);
828
+ const objectRotation = new Quaternion_1.Quaternion(obj.Rotation);
829
+ const objectScale = new Vector3_1.Vector3(obj.Scale);
830
+ let finalPos = Vector3_1.Vector3.getZero();
831
+ let finalRot = Quaternion_1.Quaternion.getIdentity();
832
+ if (posOffset.x === 0.0 && posOffset.y === 0.0 && posOffset.z === 0.0 && objectPosition !== undefined) {
833
+ finalPos = new Vector3_1.Vector3(objectPosition);
834
+ finalRot = new Quaternion_1.Quaternion(objectRotation);
835
+ }
836
+ else {
837
+ const adjustedPos = new Vector3_1.Vector3(objectPosition).multiplyQuaternion(new Quaternion_1.Quaternion(rotOffset));
838
+ finalPos = new Vector3_1.Vector3(new Vector3_1.Vector3(posOffset).add(adjustedPos));
839
+ const baseRot = new Quaternion_1.Quaternion(rotOffset);
840
+ finalRot = new Quaternion_1.Quaternion(baseRot.multiply(new Quaternion_1.Quaternion(objectRotation)));
841
+ }
842
+ let object = null;
843
+ let rezzedMesh = false;
844
+ if (obj.extraParams?.meshData !== null && obj.extraParams?.meshData.type === SculptType_1.SculptType.Mesh) {
845
+ const meshEntry = buildMap.assetMap.mesh.get(obj.extraParams.meshData.meshData.toString());
846
+ if (meshEntry !== undefined) {
847
+ const rezLocation = new Vector3_1.Vector3(buildMap.rezLocation);
848
+ rezLocation.z += (objectScale.z / 2);
849
+ if (meshEntry.item !== undefined) {
419
850
  try {
420
- yield object.setShape(obj.PathCurve, obj.ProfileCurve, obj.PathBegin, obj.PathEnd, obj.PathScaleX, obj.PathScaleY, obj.PathShearX, obj.PathShearY, obj.PathTwist, obj.PathTwistBegin, obj.PathRadiusOffset, obj.PathTaperX, obj.PathTaperY, obj.PathRevolutions, obj.PathSkew, obj.ProfileBegin, obj.ProfileEnd, obj.ProfileHollow);
851
+ object = await meshEntry.item.rezInWorld(rezLocation);
852
+ rezzedMesh = true;
421
853
  }
422
854
  catch (err) {
423
- console.error('Error setting shape on ' + obj.name);
855
+ console.error('Failed to rez object ' + obj.name + ' in-world');
424
856
  console.error(err);
425
857
  }
426
858
  }
859
+ else {
860
+ console.error('Unable to rez mesh item from inventory - item is null');
861
+ }
427
862
  }
428
- else {
429
- console.error('Exhausted prim reservoir!!');
430
- }
431
- if (object === null) {
432
- console.error('Failed to acquire prim for build');
433
- throw new Error('Failed to acquire prim for build');
434
- }
435
- if (markRoot) {
436
- object.isMarkedRoot = true;
863
+ }
864
+ if (!rezzedMesh && buildMap.primReservoir.length > 0) {
865
+ const newPrim = buildMap.primReservoir.shift();
866
+ if (newPrim !== undefined) {
867
+ object = newPrim;
868
+ try {
869
+ await object.setShape(obj.PathCurve, obj.ProfileCurve, obj.PathBegin, obj.PathEnd, obj.PathScaleX, obj.PathScaleY, obj.PathShearX, obj.PathShearY, obj.PathTwist, obj.PathTwistBegin, obj.PathRadiusOffset, obj.PathTaperX, obj.PathTaperY, obj.PathRevolutions, obj.PathSkew, obj.ProfileBegin, obj.ProfileEnd, obj.ProfileHollow);
870
+ }
871
+ catch (err) {
872
+ console.error('Error setting shape on ' + obj.name);
873
+ console.error(err);
874
+ }
437
875
  }
438
- try {
439
- yield object.setGeometry(finalPos, finalRot, objectScale);
876
+ }
877
+ else if (!rezzedMesh) {
878
+ console.error('Exhausted prim reservoir!!');
879
+ }
880
+ if (object === null) {
881
+ console.error('Failed to acquire prim for build');
882
+ throw new Error('Failed to acquire prim for build');
883
+ }
884
+ if (markRoot) {
885
+ object.isMarkedRoot = true;
886
+ }
887
+ try {
888
+ await object.setGeometry(finalPos, finalRot, objectScale);
889
+ }
890
+ catch (err) {
891
+ console.error('Error setting geometry on ' + obj.name);
892
+ console.error(err);
893
+ }
894
+ if (obj.extraParams.sculptData !== null) {
895
+ if (obj.extraParams.sculptData.type !== SculptType_1.SculptType.Mesh) {
896
+ const oldTextureID = obj.extraParams.sculptData.texture.toString();
897
+ const item = buildMap.assetMap.textures.get(oldTextureID);
898
+ if (item?.item) {
899
+ obj.extraParams.sculptData.texture = item.item.assetID;
900
+ }
440
901
  }
441
- catch (err) {
442
- console.error('Error setting geometry on ' + obj.name);
443
- console.error(err);
902
+ }
903
+ if (obj.extraParams.lightImageData !== null) {
904
+ const oldTextureID = obj.extraParams.lightImageData.texture.toString();
905
+ const item = buildMap.assetMap.textures.get(oldTextureID);
906
+ if (item?.item) {
907
+ obj.extraParams.lightImageData.texture = item.item.assetID;
444
908
  }
445
- if (obj.extraParams.sculptData !== null) {
446
- if (obj.extraParams.sculptData.type !== SculptType_1.SculptType.Mesh) {
447
- const oldTextureID = obj.extraParams.sculptData.texture.toString();
448
- const item = buildMap.assetMap.textures[oldTextureID];
449
- if (item !== null && item !== undefined && item.item !== null) {
450
- obj.extraParams.sculptData.texture = item.item.assetID;
451
- }
909
+ }
910
+ if (obj.extraParams.renderMaterialData !== null) {
911
+ for (const entry of obj.extraParams.renderMaterialData.params) {
912
+ const oldTextureID = entry.textureUUID.toString();
913
+ const item = buildMap.assetMap.gltfMaterials.get(oldTextureID);
914
+ if (item?.item) {
915
+ entry.textureUUID = item.item.assetID;
452
916
  }
453
917
  }
454
- if (rezzedMesh) {
455
- obj.extraParams.meshData = object.extraParams.meshData;
456
- obj.extraParams.sculptData = object.extraParams.sculptData;
918
+ }
919
+ if (rezzedMesh) {
920
+ obj.extraParams.meshData = object.extraParams.meshData;
921
+ obj.extraParams.sculptData = object.extraParams.sculptData;
922
+ }
923
+ try {
924
+ await object.setExtraParams(obj.extraParams);
925
+ }
926
+ catch (err) {
927
+ if (err instanceof Error) {
928
+ throw (err);
457
929
  }
458
- try {
459
- yield object.setExtraParams(obj.extraParams);
930
+ else if (typeof err === 'string') {
931
+ throw new Error(err);
460
932
  }
461
- catch (err) {
462
- if (err instanceof Error) {
463
- throw (err);
933
+ else {
934
+ throw new Error('Error setting ExtraParams on ' + obj.name);
935
+ }
936
+ }
937
+ if (obj.TextureEntry !== undefined) {
938
+ const materialUpload = {
939
+ 'FullMaterialsPerFace': []
940
+ };
941
+ let defaultMaterial = null;
942
+ const materialFaces = {};
943
+ if (obj.TextureEntry.defaultTexture !== undefined && obj.TextureEntry.defaultTexture !== null) {
944
+ const { materialID } = obj.TextureEntry.defaultTexture;
945
+ if (!materialID.isZero()) {
946
+ const storedMat = buildMap.assetMap.materials.get(materialID.toString());
947
+ if (storedMat?.item) {
948
+ defaultMaterial = {
949
+ ID: object.ID,
950
+ Material: storedMat.item.toLLSDObject()
951
+ };
952
+ }
464
953
  }
465
- else if (typeof err === 'string') {
466
- throw new Error(err);
954
+ }
955
+ for (let face = 0; face < obj.TextureEntry.faces.length; face++) {
956
+ const { materialID } = obj.TextureEntry.faces[face];
957
+ if (!materialID.isZero()) {
958
+ const storedMat = buildMap.assetMap.materials.get(materialID.toString());
959
+ if (storedMat?.item) {
960
+ materialUpload.FullMaterialsPerFace.push({
961
+ Face: face,
962
+ ID: object.ID,
963
+ Material: storedMat.item.toLLSDObject()
964
+ });
965
+ materialFaces[face] = {
966
+ added: true,
967
+ complete: false
968
+ };
969
+ }
467
970
  }
468
- else {
469
- throw new Error('Error setting ExtraParams on ' + obj.name);
971
+ }
972
+ if (defaultMaterial) {
973
+ Logger_1.Logger.Info('Inserting script to determine face count..');
974
+ const helper = new PrimFacesHelper_1.PrimFacesHelper(this.bot, object);
975
+ const sides = await helper.getFaces();
976
+ Logger_1.Logger.Info(String(sides) + ' faces');
977
+ for (let side = 0; side < sides; side++) {
978
+ if (!materialFaces[side]) {
979
+ materialUpload.FullMaterialsPerFace.push({
980
+ Face: side,
981
+ ...defaultMaterial
982
+ });
983
+ materialFaces[side] = {
984
+ added: true,
985
+ complete: false
986
+ };
987
+ }
470
988
  }
471
989
  }
472
- if (obj.TextureEntry !== undefined) {
473
- const materialUpload = {
474
- 'FullMaterialsPerFace': []
990
+ if (Object.keys(materialFaces).length > 0) {
991
+ const zipped = await Utils_1.Utils.deflate(Buffer.from(LLSD.LLSD.formatBinary(materialUpload).octets));
992
+ const newMat = {
993
+ 'Zipped': new LLSD.Binary(Array.from(zipped), 'BASE64')
475
994
  };
476
- const materialFaces = {};
477
- if (obj.TextureEntry.defaultTexture !== undefined && obj.TextureEntry.defaultTexture !== null) {
478
- const materialID = obj.TextureEntry.defaultTexture.materialID;
479
- if (!materialID.isZero()) {
480
- const storedMat = buildMap.assetMap.materials[materialID.toString()];
481
- if (storedMat !== null && storedMat !== undefined) {
482
- materialUpload.FullMaterialsPerFace.push({
483
- ID: object.ID,
484
- Material: storedMat.toLLSDObject()
485
- });
486
- materialFaces[-1] = true;
995
+ const result = await this.currentRegion.caps.capsPutXML('RenderMaterials', newMat);
996
+ if (result.Zipped) {
997
+ const resultUnzipped = await Utils_1.Utils.inflate(Buffer.from(result.Zipped.octets));
998
+ const binData = new LLSD.Binary(Array.from(resultUnzipped), 'BASE64');
999
+ const llsdResult = LLSD.LLSD.parseBinary(binData);
1000
+ for (const result2 of llsdResult.result) {
1001
+ const face = result2.Face;
1002
+ if (materialFaces[face] !== undefined) {
1003
+ materialFaces[face].complete = true;
487
1004
  }
488
1005
  }
489
- }
490
- for (let face = 0; face < obj.TextureEntry.faces.length; face++) {
491
- const materialID = obj.TextureEntry.faces[face].materialID;
492
- if (!materialID.isZero()) {
493
- const storedMat = buildMap.assetMap.materials[materialID.toString()];
494
- if (storedMat !== null && storedMat !== undefined) {
495
- materialUpload.FullMaterialsPerFace.push({
496
- Face: face,
497
- ID: object.ID,
498
- Material: storedMat.toLLSDObject()
499
- });
500
- materialFaces[face] = true;
1006
+ for (const face of Object.keys(materialFaces)) {
1007
+ if (!materialFaces[face].complete) {
1008
+ console.error('Failed to update material on face ' + String(face));
501
1009
  }
502
1010
  }
503
1011
  }
504
- if (Object.keys(materialFaces).length > 0) {
505
- const zipped = yield Utils_1.Utils.deflate(Buffer.from(LLSD.LLSD.formatBinary(materialUpload).octets));
506
- const newMat = {
507
- 'Zipped': new LLSD.Binary(Array.from(zipped), 'BASE64')
508
- };
509
- this.currentRegion.caps.capsPutXML('RenderMaterials', newMat).then(() => {
510
- }).catch((err) => {
511
- console.error(err);
512
- });
513
- try {
514
- let complete = false;
515
- do {
516
- complete = true;
517
- yield object.waitForTextureUpdate(10000);
518
- for (const materialFace of Object.keys(materialFaces)) {
519
- const entry = object.TextureEntry;
520
- if (entry === undefined) {
521
- complete = false;
522
- }
523
- else if (parseInt(materialFace, 10) === -1) {
524
- const def = entry.defaultTexture;
525
- if (def === undefined || def === null) {
526
- complete = false;
527
- }
528
- else {
529
- if (def.materialID.equals(UUID_1.UUID.zero())) {
530
- complete = false;
531
- }
532
- }
533
- }
534
- else {
535
- const fc = parseInt(materialFace, 10);
536
- const thisFace = entry.faces[fc];
537
- if (thisFace === undefined) {
538
- complete = false;
539
- }
540
- else {
541
- if (thisFace.materialID.equals(UUID_1.UUID.zero())) {
542
- complete = false;
543
- }
544
- }
545
- }
546
- }
547
- } while (!complete);
548
- }
549
- catch (error) {
550
- console.error(obj.name + ':Timed out while waiting for RenderMaterials update');
551
- }
552
- if (object.TextureEntry !== undefined) {
553
- for (let face = 0; face < object.TextureEntry.faces.length; face++) {
554
- const oldFace = obj.TextureEntry.faces[face];
555
- if (!oldFace.materialID.isZero()) {
556
- obj.TextureEntry.faces[face].materialID = object.TextureEntry.faces[face].materialID;
557
- if (obj.TextureEntry.defaultTexture !== null) {
558
- if (oldFace.materialID.equals(obj.TextureEntry.defaultTexture.materialID)) {
559
- obj.TextureEntry.defaultTexture.materialID = obj.TextureEntry.faces[face].materialID;
560
- }
561
- }
562
- }
563
- }
564
- if (obj.TextureEntry.defaultTexture !== null && object.TextureEntry.defaultTexture !== null) {
565
- obj.TextureEntry.defaultTexture.materialID = object.TextureEntry.defaultTexture.materialID;
566
- }
567
- }
1012
+ }
1013
+ if (obj.TextureEntry.defaultTexture !== null) {
1014
+ const oldTextureID = obj.TextureEntry.defaultTexture.textureID.toString();
1015
+ const item = buildMap.assetMap.textures.get(oldTextureID);
1016
+ if (item?.item) {
1017
+ obj.TextureEntry.defaultTexture.textureID = item.item.assetID;
568
1018
  }
569
- if (obj.TextureEntry.defaultTexture !== null) {
570
- const oldTextureID = obj.TextureEntry.defaultTexture.textureID.toString();
571
- const item = buildMap.assetMap.textures[oldTextureID];
572
- if (item !== null && item !== undefined && item.item !== null) {
573
- obj.TextureEntry.defaultTexture.textureID = item.item.assetID;
574
- }
1019
+ }
1020
+ for (const j of obj.TextureEntry.faces) {
1021
+ const oldTextureID = j.textureID.toString();
1022
+ const item = buildMap.assetMap.textures.get(oldTextureID);
1023
+ if (item?.item) {
1024
+ j.textureID = item.item.assetID;
575
1025
  }
576
- for (const j of obj.TextureEntry.faces) {
577
- const oldTextureID = j.textureID.toString();
578
- const item = buildMap.assetMap.textures[oldTextureID];
579
- if (item !== null && item !== undefined && item.item !== null) {
580
- j.textureID = item.item.assetID;
581
- }
1026
+ }
1027
+ try {
1028
+ await object.setTextureEntry(obj.TextureEntry);
1029
+ }
1030
+ catch (error) {
1031
+ console.error('Error setting TextureEntry on ' + obj.name);
1032
+ console.error(error);
1033
+ }
1034
+ }
1035
+ if (obj.name !== undefined) {
1036
+ try {
1037
+ await object.setName(obj.name);
1038
+ }
1039
+ catch (error) {
1040
+ if (error instanceof Error) {
1041
+ throw error;
582
1042
  }
583
- try {
584
- yield object.setTextureEntry(obj.TextureEntry);
1043
+ else if (typeof error === 'string') {
1044
+ throw new Error(error);
585
1045
  }
586
- catch (error) {
587
- console.error('Error setting TextureEntry on ' + obj.name);
588
- console.error(error);
1046
+ else {
1047
+ throw new Error('Error setting name on ' + obj.name);
589
1048
  }
590
1049
  }
591
- if (obj.name !== undefined) {
592
- try {
593
- yield object.setName(obj.name);
594
- }
595
- catch (error) {
596
- if (error instanceof Error) {
597
- throw error;
598
- }
599
- else if (typeof error === 'string') {
600
- throw new Error(error);
601
- }
602
- else {
603
- throw new Error('Error setting name on ' + obj.name);
604
- }
605
- }
1050
+ }
1051
+ if (obj.description !== undefined) {
1052
+ try {
1053
+ await object.setDescription(obj.description);
606
1054
  }
607
- if (obj.description !== undefined) {
608
- try {
609
- yield object.setDescription(obj.description);
1055
+ catch (error) {
1056
+ if (error instanceof Error) {
1057
+ throw error;
610
1058
  }
611
- catch (error) {
612
- if (error instanceof Error) {
613
- throw error;
614
- }
615
- else if (typeof error === 'string') {
616
- throw new Error(error);
617
- }
618
- else {
619
- throw new Error('Error setting name on ' + obj.name);
620
- }
1059
+ else if (typeof error === 'string') {
1060
+ throw new Error(error);
1061
+ }
1062
+ else {
1063
+ throw new Error('Error setting name on ' + obj.name);
621
1064
  }
622
1065
  }
623
- for (const invItem of obj.inventory) {
624
- try {
625
- if (invItem.inventoryType === InventoryType_1.InventoryType.Object && invItem.assetID.isZero()) {
626
- invItem.assetID = invItem.itemID;
627
- }
628
- switch (invItem.inventoryType) {
629
- case InventoryType_1.InventoryType.Clothing:
630
- {
631
- if (buildMap.assetMap.clothing[invItem.assetID.toString()] !== undefined) {
632
- const item = buildMap.assetMap.clothing[invItem.assetID.toString()].item;
633
- if (item !== null) {
634
- yield object.dropInventoryIntoContents(item);
635
- yield object.updateInventory();
636
- for (const taskItem of object.inventory) {
637
- if (taskItem.name === item.name) {
638
- taskItem.permissions = invItem.permissions;
639
- yield taskItem.renameInTask(object, invItem.name);
640
- }
641
- }
1066
+ }
1067
+ const fixedInventory = [...obj.inventory];
1068
+ for (const invItem of fixedInventory) {
1069
+ try {
1070
+ if (invItem.inventoryType === InventoryType_1.InventoryType.Object && invItem.assetID.isZero()) {
1071
+ invItem.assetID = invItem.itemID;
1072
+ }
1073
+ switch (invItem.inventoryType) {
1074
+ case InventoryType_1.InventoryType.Settings:
1075
+ {
1076
+ const item = buildMap.assetMap.settings.get(invItem.assetID.toString());
1077
+ if (item?.item) {
1078
+ await object.dropInventoryIntoContents(item.item);
1079
+ await object.updateInventory();
1080
+ for (const taskItem of object.inventory) {
1081
+ if (taskItem.name === item.item.name) {
1082
+ taskItem.permissions.nextOwnerMask = invItem.permissions.nextOwnerMask;
1083
+ await taskItem.rename(invItem.name);
642
1084
  }
643
1085
  }
644
- break;
645
1086
  }
646
- case InventoryType_1.InventoryType.Settings:
647
- {
648
- if (buildMap.assetMap.settings[invItem.assetID.toString()] !== undefined) {
649
- const item = buildMap.assetMap.settings[invItem.assetID.toString()].item;
650
- if (item !== null) {
651
- yield object.dropInventoryIntoContents(item);
652
- yield object.updateInventory();
653
- for (const taskItem of object.inventory) {
654
- if (taskItem.name === item.name) {
655
- taskItem.permissions = invItem.permissions;
656
- yield taskItem.renameInTask(object, invItem.name);
657
- }
658
- }
1087
+ break;
1088
+ }
1089
+ case InventoryType_1.InventoryType.Wearable:
1090
+ {
1091
+ const item = buildMap.assetMap.wearables.get(invItem.assetID.toString());
1092
+ if (item?.item) {
1093
+ await object.dropInventoryIntoContents(item.item);
1094
+ await object.updateInventory();
1095
+ for (const taskItem of object.inventory) {
1096
+ if (taskItem.name === item.item.name) {
1097
+ taskItem.permissions.nextOwnerMask = invItem.permissions.nextOwnerMask;
1098
+ await taskItem.rename(invItem.name);
659
1099
  }
660
1100
  }
661
- break;
662
1101
  }
663
- case InventoryType_1.InventoryType.Wearable:
664
- case InventoryType_1.InventoryType.Bodypart:
665
- {
666
- if (buildMap.assetMap.bodyparts[invItem.assetID.toString()] !== undefined) {
667
- const item = buildMap.assetMap.bodyparts[invItem.assetID.toString()].item;
668
- if (item !== null) {
669
- yield object.dropInventoryIntoContents(item);
670
- yield object.updateInventory();
671
- for (const taskItem of object.inventory) {
672
- if (taskItem.name === item.name) {
673
- taskItem.permissions = invItem.permissions;
674
- yield taskItem.renameInTask(object, invItem.name);
675
- }
676
- }
1102
+ break;
1103
+ }
1104
+ case InventoryType_1.InventoryType.Notecard:
1105
+ {
1106
+ const item = buildMap.assetMap.notecards.get(invItem.assetID.toString());
1107
+ if (item?.item) {
1108
+ await object.dropInventoryIntoContents(item.item);
1109
+ await object.updateInventory();
1110
+ for (const taskItem of object.inventory) {
1111
+ if (taskItem.name === item.item.name) {
1112
+ taskItem.permissions.nextOwnerMask = invItem.permissions.nextOwnerMask;
1113
+ await taskItem.rename(invItem.name);
677
1114
  }
678
1115
  }
679
- break;
680
1116
  }
681
- case InventoryType_1.InventoryType.Notecard:
682
- {
683
- if (buildMap.assetMap.notecards[invItem.assetID.toString()] !== undefined) {
684
- const item = buildMap.assetMap.notecards[invItem.assetID.toString()].item;
685
- if (item !== null) {
686
- yield object.dropInventoryIntoContents(item);
687
- yield object.updateInventory();
688
- for (const taskItem of object.inventory) {
689
- if (taskItem.name === item.name) {
690
- taskItem.permissions = invItem.permissions;
691
- yield taskItem.renameInTask(object, invItem.name);
692
- }
693
- }
1117
+ break;
1118
+ }
1119
+ case InventoryType_1.InventoryType.Sound:
1120
+ {
1121
+ const item = buildMap.assetMap.sounds.get(invItem.assetID.toString());
1122
+ if (item?.item) {
1123
+ await object.dropInventoryIntoContents(item.item);
1124
+ await object.updateInventory();
1125
+ for (const taskItem of object.inventory) {
1126
+ if (taskItem.name === item.item.name) {
1127
+ taskItem.permissions.nextOwnerMask = invItem.permissions.nextOwnerMask;
1128
+ await taskItem.rename(invItem.name);
694
1129
  }
695
1130
  }
696
- break;
697
1131
  }
698
- case InventoryType_1.InventoryType.Sound:
699
- {
700
- if (buildMap.assetMap.sounds[invItem.assetID.toString()] !== undefined) {
701
- const item = buildMap.assetMap.sounds[invItem.assetID.toString()].item;
702
- if (item !== null) {
703
- yield object.dropInventoryIntoContents(item);
704
- yield object.updateInventory();
705
- for (const taskItem of object.inventory) {
706
- if (taskItem.name === item.name) {
707
- taskItem.permissions = invItem.permissions;
708
- yield taskItem.renameInTask(object, invItem.name);
709
- }
710
- }
1132
+ break;
1133
+ }
1134
+ case InventoryType_1.InventoryType.Gesture:
1135
+ {
1136
+ const item = buildMap.assetMap.gestures.get(invItem.assetID.toString());
1137
+ if (item?.item) {
1138
+ await object.dropInventoryIntoContents(item.item);
1139
+ await object.updateInventory();
1140
+ for (const taskItem of object.inventory) {
1141
+ if (taskItem.name === item.item.name) {
1142
+ taskItem.permissions.nextOwnerMask = invItem.permissions.nextOwnerMask;
1143
+ await taskItem.rename(invItem.name);
711
1144
  }
712
1145
  }
713
- break;
714
1146
  }
715
- case InventoryType_1.InventoryType.Gesture:
716
- {
717
- if (buildMap.assetMap.gestures[invItem.assetID.toString()] !== undefined) {
718
- const item = buildMap.assetMap.gestures[invItem.assetID.toString()].item;
719
- if (item !== null) {
720
- yield object.dropInventoryIntoContents(item);
721
- yield object.updateInventory();
722
- for (const taskItem of object.inventory) {
723
- if (taskItem.name === item.name) {
724
- taskItem.permissions = invItem.permissions;
725
- yield taskItem.renameInTask(object, invItem.name);
1147
+ break;
1148
+ }
1149
+ case InventoryType_1.InventoryType.LSL:
1150
+ {
1151
+ const item = buildMap.assetMap.scripts.get(invItem.assetID.toString());
1152
+ if (item?.item) {
1153
+ await object.dropInventoryIntoContents(item.item);
1154
+ await object.updateInventory();
1155
+ for (const taskItem of object.inventory) {
1156
+ if (taskItem.name === item.item.name) {
1157
+ taskItem.permissions = invItem.permissions;
1158
+ await taskItem.rename(invItem.name);
1159
+ if (taskItem.type === AssetType_1.AssetType.LSLText) {
1160
+ let compileQueue = buildMap.assetMap.scriptsToCompile.get(object.FullID.toString());
1161
+ if (compileQueue === undefined) {
1162
+ compileQueue = {
1163
+ gameObject: object,
1164
+ scripts: []
1165
+ };
726
1166
  }
1167
+ compileQueue.scripts.push({
1168
+ item: taskItem,
1169
+ oldAssetID: invItem.assetID,
1170
+ shouldStart: invItem.scriptRunning === true,
1171
+ mono: invItem.scriptMono !== false
1172
+ });
1173
+ buildMap.assetMap.scriptsToCompile.set(object.FullID.toString(), compileQueue);
727
1174
  }
728
1175
  }
729
1176
  }
730
- break;
731
1177
  }
732
- case InventoryType_1.InventoryType.Script:
733
- case InventoryType_1.InventoryType.LSL:
734
- {
735
- if (buildMap.assetMap.scripts[invItem.assetID.toString()] !== undefined) {
736
- const item = buildMap.assetMap.scripts[invItem.assetID.toString()].item;
737
- if (item !== null) {
738
- yield object.dropInventoryIntoContents(item);
739
- yield object.updateInventory();
740
- for (const taskItem of object.inventory) {
741
- if (taskItem.name === item.name) {
742
- taskItem.permissions = invItem.permissions;
743
- yield taskItem.renameInTask(object, invItem.name);
744
- }
745
- }
1178
+ break;
1179
+ }
1180
+ case InventoryType_1.InventoryType.Material:
1181
+ {
1182
+ const item = buildMap.assetMap.gltfMaterials.get(invItem.assetID.toString());
1183
+ if (item?.item) {
1184
+ await object.dropInventoryIntoContents(item.item);
1185
+ await object.updateInventory();
1186
+ for (const taskItem of object.inventory) {
1187
+ if (taskItem.name === item.item.name) {
1188
+ taskItem.permissions.nextOwnerMask = invItem.permissions.nextOwnerMask;
1189
+ await taskItem.rename(invItem.name);
746
1190
  }
747
1191
  }
748
- break;
749
1192
  }
750
- case InventoryType_1.InventoryType.Animation:
751
- {
752
- if (buildMap.assetMap.animations[invItem.assetID.toString()] !== undefined) {
753
- const item = buildMap.assetMap.animations[invItem.assetID.toString()].item;
754
- if (item !== null) {
755
- yield object.dropInventoryIntoContents(item);
756
- yield object.updateInventory();
757
- for (const taskItem of object.inventory) {
758
- if (taskItem.name === item.name) {
759
- taskItem.permissions = invItem.permissions;
760
- yield taskItem.renameInTask(object, invItem.name);
761
- }
762
- }
1193
+ break;
1194
+ }
1195
+ case InventoryType_1.InventoryType.Animation:
1196
+ {
1197
+ const item = buildMap.assetMap.animations.get(invItem.assetID.toString());
1198
+ if (item?.item) {
1199
+ await object.dropInventoryIntoContents(item.item);
1200
+ await object.updateInventory();
1201
+ for (const taskItem of object.inventory) {
1202
+ if (taskItem.name === item.item.name) {
1203
+ taskItem.permissions = invItem.permissions;
1204
+ await taskItem.rename(invItem.name);
763
1205
  }
764
1206
  }
765
- break;
766
1207
  }
767
- case InventoryType_1.InventoryType.Object:
768
- {
769
- if (buildMap.assetMap.objects[invItem.itemID.toString()] !== undefined) {
770
- const inventoryItem = buildMap.assetMap.objects[invItem.itemID.toString()];
771
- if (inventoryItem !== null) {
772
- yield object.dropInventoryIntoContents(inventoryItem);
773
- yield object.updateInventory();
774
- for (const taskItem of object.inventory) {
775
- if (taskItem.name === inventoryItem.name) {
776
- taskItem.permissions = invItem.permissions;
777
- yield taskItem.renameInTask(object, invItem.name);
778
- }
779
- }
780
- }
781
- else {
782
- console.error('Unable to drop object: item is null');
1208
+ break;
1209
+ }
1210
+ case InventoryType_1.InventoryType.Object:
1211
+ {
1212
+ const inventoryItem = buildMap.assetMap.objects.get(invItem.itemID.toString());
1213
+ if (inventoryItem?.item) {
1214
+ await object.dropInventoryIntoContents(inventoryItem.item);
1215
+ await object.updateInventory();
1216
+ for (const taskItem of object.inventory) {
1217
+ if (taskItem.name === inventoryItem.item.name) {
1218
+ taskItem.permissions.nextOwnerMask = invItem.permissions.nextOwnerMask;
1219
+ await taskItem.rename(invItem.name);
783
1220
  }
784
1221
  }
785
- break;
786
1222
  }
787
- case InventoryType_1.InventoryType.Texture:
788
- case InventoryType_1.InventoryType.Snapshot:
789
- {
790
- if (buildMap.assetMap.textures[invItem.assetID.toString()] !== undefined) {
791
- const texItem = buildMap.assetMap.textures[invItem.assetID.toString()];
792
- if (texItem.item !== null) {
793
- yield object.dropInventoryIntoContents(texItem.item);
794
- yield object.updateInventory();
795
- for (const taskItem of object.inventory) {
796
- if (taskItem.name === texItem.item.name) {
797
- taskItem.permissions = invItem.permissions;
798
- yield taskItem.renameInTask(object, invItem.name);
799
- }
800
- }
801
- }
802
- else {
803
- console.error('Unable to drop object: item is null');
1223
+ break;
1224
+ }
1225
+ case InventoryType_1.InventoryType.Texture:
1226
+ case InventoryType_1.InventoryType.Snapshot:
1227
+ {
1228
+ const texItem = buildMap.assetMap.textures.get(invItem.assetID);
1229
+ if (texItem?.item) {
1230
+ await object.dropInventoryIntoContents(texItem.item);
1231
+ await object.updateInventory();
1232
+ for (const taskItem of object.inventory) {
1233
+ if (taskItem.name === texItem.item.name) {
1234
+ taskItem.permissions.nextOwnerMask = invItem.permissions.nextOwnerMask;
1235
+ await taskItem.rename(invItem.name);
804
1236
  }
805
1237
  }
806
- break;
807
1238
  }
808
- default:
809
- console.error('Unsupported inventory type: ' + invItem.inventoryType);
810
1239
  break;
811
- }
812
- }
813
- catch (error) {
814
- console.error(error);
1240
+ }
1241
+ default:
1242
+ console.error('Unsupported inventory type: ' + invItem.inventoryType);
1243
+ break;
815
1244
  }
816
1245
  }
817
- return object;
818
- });
1246
+ catch (error) {
1247
+ console.error(error);
1248
+ }
1249
+ }
1250
+ return object;
819
1251
  }
820
1252
  gatherAssets(obj, buildMap) {
821
1253
  if (obj.extraParams !== undefined) {
822
1254
  if (obj.extraParams.meshData !== null) {
823
- if (buildMap.assetMap.mesh[obj.extraParams.meshData.meshData.toString()] === undefined) {
824
- buildMap.assetMap.mesh[obj.extraParams.meshData.meshData.toString()] = {
825
- name: obj.name || 'Object',
826
- description: obj.description || '(no description)',
827
- item: null
828
- };
829
- }
1255
+ buildMap.assetMap.mesh.request(obj.extraParams.meshData.meshData, {
1256
+ name: obj.name ?? 'Object',
1257
+ description: obj.description ?? '(no description)'
1258
+ });
830
1259
  }
831
1260
  else {
832
1261
  buildMap.primsNeeded++;
833
1262
  }
834
1263
  if (obj.extraParams.sculptData !== null) {
835
1264
  if (obj.extraParams.sculptData.type !== SculptType_1.SculptType.Mesh) {
836
- if (buildMap.assetMap.textures[obj.extraParams.sculptData.texture.toString()] === undefined) {
837
- buildMap.assetMap.textures[obj.extraParams.sculptData.texture.toString()] = {
838
- item: null
839
- };
840
- }
1265
+ buildMap.assetMap.textures.request(obj.extraParams.sculptData.texture);
841
1266
  }
842
1267
  }
843
- if (obj.TextureEntry !== undefined) {
844
- for (const j of obj.TextureEntry.faces) {
845
- const textureID = j.textureID;
846
- if (buildMap.assetMap.textures[textureID.toString()] === undefined) {
847
- buildMap.assetMap.textures[textureID.toString()] = {
848
- item: null
849
- };
850
- }
851
- const materialID = j.materialID;
852
- if (!materialID.isZero()) {
853
- if (buildMap.assetMap.materials[materialID.toString()] === undefined) {
854
- buildMap.assetMap.materials[materialID.toString()] = null;
855
- }
856
- }
857
- }
858
- if (obj.TextureEntry.defaultTexture !== null) {
859
- const textureID = obj.TextureEntry.defaultTexture.textureID;
860
- if (buildMap.assetMap.textures[textureID.toString()] === undefined) {
861
- buildMap.assetMap.textures[textureID.toString()] = {
862
- item: null
863
- };
864
- }
865
- const materialID = obj.TextureEntry.defaultTexture.materialID;
866
- if (!materialID.isZero()) {
867
- if (buildMap.assetMap.materials[materialID.toString()] === undefined) {
868
- buildMap.assetMap.materials[materialID.toString()] = null;
869
- }
870
- }
871
- }
1268
+ if (obj.extraParams.lightImageData != null && !obj.extraParams.lightImageData.texture.isZero()) {
1269
+ buildMap.assetMap.textures.request(obj.extraParams.lightImageData.texture);
872
1270
  }
873
- if (obj.inventory !== undefined) {
874
- for (const j of obj.inventory) {
875
- const assetID = j.assetID;
876
- switch (j.inventoryType) {
877
- case InventoryType_1.InventoryType.Animation:
878
- {
879
- if (buildMap.assetMap.animations[assetID.toString()] === undefined) {
880
- buildMap.assetMap.animations[assetID.toString()] = {
881
- name: j.name,
882
- description: j.description,
883
- item: null
884
- };
885
- }
886
- break;
887
- }
888
- case InventoryType_1.InventoryType.Wearable:
889
- case InventoryType_1.InventoryType.Bodypart:
890
- {
891
- if (buildMap.assetMap.bodyparts[assetID.toString()] === undefined) {
892
- buildMap.assetMap.bodyparts[assetID.toString()] = {
893
- name: j.name,
894
- description: j.description,
895
- item: null
896
- };
897
- }
898
- break;
899
- }
900
- case InventoryType_1.InventoryType.CallingCard:
901
- {
902
- if (buildMap.assetMap.callingcards[assetID.toString()] === undefined) {
903
- buildMap.assetMap.callingcards[assetID.toString()] = {
904
- name: j.name,
905
- description: j.description,
906
- item: null
907
- };
908
- }
909
- break;
910
- }
911
- case InventoryType_1.InventoryType.Clothing:
912
- {
913
- if (buildMap.assetMap.clothing[assetID.toString()] === undefined) {
914
- buildMap.assetMap.clothing[assetID.toString()] = {
915
- name: j.name,
916
- description: j.description,
917
- item: null
918
- };
919
- }
920
- break;
921
- }
922
- case InventoryType_1.InventoryType.Gesture:
923
- {
924
- if (buildMap.assetMap.gestures[assetID.toString()] === undefined) {
925
- buildMap.assetMap.gestures[assetID.toString()] = {
926
- name: j.name,
927
- description: j.description,
928
- item: null
929
- };
930
- }
931
- break;
932
- }
933
- case InventoryType_1.InventoryType.Script:
934
- case InventoryType_1.InventoryType.LSL:
935
- {
936
- if (buildMap.assetMap.scripts[assetID.toString()] === undefined) {
937
- buildMap.assetMap.scripts[assetID.toString()] = {
938
- name: j.name,
939
- description: j.description,
940
- item: null
941
- };
942
- }
943
- break;
944
- }
945
- case InventoryType_1.InventoryType.Texture:
946
- case InventoryType_1.InventoryType.Snapshot:
947
- {
948
- if (buildMap.assetMap.textures[assetID.toString()] === undefined) {
949
- buildMap.assetMap.textures[assetID.toString()] = {
950
- name: j.name,
951
- description: j.description,
952
- item: null
953
- };
954
- }
955
- break;
956
- }
957
- case InventoryType_1.InventoryType.Notecard:
958
- {
959
- if (buildMap.assetMap.notecards[assetID.toString()] === undefined) {
960
- buildMap.assetMap.notecards[assetID.toString()] = {
961
- name: j.name,
962
- description: j.description,
963
- item: null
964
- };
965
- }
966
- break;
967
- }
968
- case InventoryType_1.InventoryType.Sound:
969
- {
970
- if (buildMap.assetMap.sounds[assetID.toString()] === undefined) {
971
- buildMap.assetMap.sounds[assetID.toString()] = {
972
- name: j.name,
973
- description: j.description,
974
- item: null
975
- };
976
- }
977
- break;
978
- }
979
- case InventoryType_1.InventoryType.Object:
980
- {
981
- if (buildMap.assetMap.objects[assetID.toString()] === undefined) {
982
- buildMap.assetMap.objects[assetID.toString()] = null;
983
- }
984
- break;
985
- }
986
- case InventoryType_1.InventoryType.Settings:
987
- {
988
- if (buildMap.assetMap.settings[assetID.toString()] === undefined) {
989
- buildMap.assetMap.settings[assetID.toString()] = {
990
- name: j.name,
991
- description: j.description,
992
- item: null
993
- };
994
- }
995
- break;
996
- }
997
- default:
998
- console.error('Unsupported inventory type: ' + j.inventoryType);
999
- break;
1271
+ if (obj.extraParams.renderMaterialData != null) {
1272
+ for (const item of obj.extraParams.renderMaterialData.params) {
1273
+ if (!item.textureUUID.isZero()) {
1274
+ buildMap.assetMap.gltfMaterials.request(item.textureUUID);
1000
1275
  }
1001
1276
  }
1002
1277
  }
1003
1278
  }
1004
- if (obj.children) {
1005
- for (const child of obj.children) {
1006
- this.gatherAssets(child, buildMap);
1007
- }
1008
- }
1009
- }
1010
- buildObjectNew(obj_1, map_1, callback_1) {
1011
- return __awaiter(this, arguments, void 0, function* (obj, map, callback, costOnly = false, skipMove = false) {
1012
- const buildMap = new BuildMap_1.BuildMap(map, callback, costOnly);
1013
- this.gatherAssets(obj, buildMap);
1014
- const bomTextures = [
1015
- '5a9f4a74-30f2-821c-b88d-70499d3e7183',
1016
- 'ae2de45c-d252-50b8-5c6e-19f39ce79317',
1017
- '24daea5f-0539-cfcf-047f-fbc40b2786ba',
1018
- '52cc6bb6-2ee5-e632-d3ad-50197b1dcb8a',
1019
- '43529ce8-7faa-ad92-165a-bc4078371687',
1020
- '09aac1fb-6bce-0bee-7d44-caac6dbb6c63',
1021
- 'ff62763f-d60a-9855-890b-0c96f8f8cd98',
1022
- '8e915e25-31d1-cc95-ae08-d58a47488251',
1023
- '9742065b-19b5-297c-858a-29711d539043',
1024
- '03642e83-2bd1-4eb9-34b4-4c47ed586d2d',
1025
- 'edd51b77-fc10-ce7a-4b3d-011dfc349e4f',
1026
- 'c228d1cf-4b5d-4ba8-84f4-899a0796aa97'
1027
- ];
1028
- for (const bomTexture of bomTextures) {
1029
- if (buildMap.assetMap.textures[bomTexture] !== undefined) {
1030
- delete buildMap.assetMap.textures[bomTexture];
1279
+ if (obj.TextureEntry !== undefined) {
1280
+ for (const j of obj.TextureEntry.faces) {
1281
+ const { textureID } = j;
1282
+ buildMap.assetMap.textures.request(textureID);
1283
+ const { materialID } = j;
1284
+ if (!materialID.isZero()) {
1285
+ buildMap.assetMap.materials.request(materialID);
1031
1286
  }
1032
1287
  }
1033
- yield callback(map);
1034
- if (costOnly) {
1035
- return null;
1036
- }
1037
- let agentPos = new Vector3_1.Vector3([128, 128, 2048]);
1038
- try {
1039
- const agentLocalID = this.currentRegion.agent.localID;
1040
- const agentObject = this.currentRegion.objects.getObjectByLocalID(agentLocalID);
1041
- if (agentObject.Position !== undefined) {
1042
- agentPos = new Vector3_1.Vector3(agentObject.Position);
1043
- }
1044
- else {
1045
- throw new Error('Agent position is undefined');
1288
+ if (obj.TextureEntry.defaultTexture !== null) {
1289
+ const { textureID } = obj.TextureEntry.defaultTexture;
1290
+ buildMap.assetMap.textures.request(textureID);
1291
+ const { materialID } = obj.TextureEntry.defaultTexture;
1292
+ if (!materialID.isZero()) {
1293
+ buildMap.assetMap.materials.request(materialID);
1046
1294
  }
1047
1295
  }
1048
- catch (error) {
1049
- console.warn('Unable to find avatar location, rezzing at ' + agentPos.toString());
1050
- }
1051
- agentPos.z += 2.0;
1052
- buildMap.rezLocation = agentPos;
1053
- const campos = new Vector3_1.Vector3(agentPos);
1054
- campos.z += 2.0;
1055
- yield this.currentRegion.clientCommands.agent.setCamera(campos, agentPos, 10, new Vector3_1.Vector3([-1.0, 0, 0]), new Vector3_1.Vector3([0.0, 1.0, 0]));
1056
- if (buildMap.primsNeeded > 0) {
1057
- buildMap.primReservoir = yield this.createPrims(buildMap.primsNeeded, agentPos);
1058
- }
1059
- let storedPosition = undefined;
1060
- if (skipMove) {
1061
- storedPosition = obj.Position;
1062
- obj.Position = new Vector3_1.Vector3(buildMap.rezLocation);
1063
- }
1064
- const parts = [];
1065
- parts.push(() => __awaiter(this, void 0, void 0, function* () {
1066
- return {
1067
- index: 1,
1068
- object: yield this.buildPart(obj, Vector3_1.Vector3.getZero(), Quaternion_1.Quaternion.getIdentity(), buildMap, true)
1069
- };
1070
- }));
1071
- if (obj.children) {
1072
- if (obj.Position === undefined) {
1073
- obj.Position = Vector3_1.Vector3.getZero();
1074
- }
1075
- if (obj.Rotation === undefined) {
1076
- obj.Rotation = Quaternion_1.Quaternion.getIdentity();
1077
- }
1078
- let childIndex = 2;
1079
- for (const child of obj.children) {
1080
- if (child.Position !== undefined && child.Rotation !== undefined) {
1081
- const index = childIndex++;
1082
- parts.push(() => __awaiter(this, void 0, void 0, function* () {
1083
- return {
1084
- index,
1085
- object: yield this.buildPart(child, new Vector3_1.Vector3(obj.Position), new Quaternion_1.Quaternion(obj.Rotation), buildMap, false)
1086
- };
1087
- }));
1088
- }
1089
- }
1090
- }
1091
- let results = {
1092
- results: [],
1093
- errors: []
1094
- };
1095
- results = yield Utils_1.Utils.promiseConcurrent(parts, 5, 0);
1096
- if (results.errors.length > 0) {
1097
- for (const err of results.errors) {
1098
- console.error(err);
1099
- }
1100
- }
1101
- let rootObj = null;
1102
- for (const childObject of results.results) {
1103
- if (childObject.object.isMarkedRoot) {
1104
- rootObj = childObject.object;
1105
- break;
1106
- }
1107
- }
1108
- if (rootObj === null) {
1109
- throw new Error('Failed to find root prim..');
1110
- }
1111
- const childPrims = [];
1112
- results.results.sort((a, b) => {
1113
- return a.index - b.index;
1114
- });
1115
- for (const childObject of results.results) {
1116
- if (childObject.object !== rootObj) {
1117
- childPrims.push(childObject.object);
1118
- }
1119
- }
1120
- try {
1121
- yield rootObj.linkFrom(childPrims);
1122
- }
1123
- catch (err) {
1124
- console.error('Link failed:');
1125
- console.error(err);
1126
- }
1127
- if (storedPosition !== undefined) {
1128
- obj.Position = storedPosition;
1129
- }
1130
- return rootObj;
1131
- });
1132
- }
1133
- createPrims(count, position) {
1134
- return new Promise((resolve, reject) => {
1135
- const gatheredPrims = [];
1136
- let objSub = undefined;
1137
- let timeout = setTimeout(() => {
1138
- if (objSub !== undefined) {
1139
- objSub.unsubscribe();
1140
- objSub = undefined;
1141
- }
1142
- if (timeout !== undefined) {
1143
- clearTimeout(timeout);
1144
- timeout = undefined;
1145
- }
1146
- reject(new Error('Failed to gather ' + count + ' prims - only gathered ' + gatheredPrims.length));
1147
- }, 30000);
1148
- objSub = this.currentRegion.clientEvents.onNewObjectEvent.subscribe((evt) => __awaiter(this, void 0, void 0, function* () {
1149
- if (!evt.object.resolvedAt) {
1150
- yield this.resolveObject(evt.object, {});
1151
- }
1152
- if (evt.createSelected && !evt.object.claimedForBuild) {
1153
- if (evt.object.itemID === undefined || evt.object.itemID.isZero()) {
1154
- if (evt.object.PCode === PCode_1.PCode.Prim &&
1155
- evt.object.Material === 3 &&
1156
- evt.object.PathCurve === 16 &&
1157
- evt.object.ProfileCurve === 1 &&
1158
- evt.object.PathBegin === 0 &&
1159
- evt.object.PathEnd === 1 &&
1160
- evt.object.PathScaleX === 1 &&
1161
- evt.object.PathScaleY === 1 &&
1162
- evt.object.PathShearX === 0 &&
1163
- evt.object.PathShearY === 0 &&
1164
- evt.object.PathTwist === 0 &&
1165
- evt.object.PathTwistBegin === 0 &&
1166
- evt.object.PathRadiusOffset === 0 &&
1167
- evt.object.PathTaperX === 0 &&
1168
- evt.object.PathTaperY === 0 &&
1169
- evt.object.PathRevolutions === 1 &&
1170
- evt.object.PathSkew === 0 &&
1171
- evt.object.ProfileBegin === 0 &&
1172
- evt.object.ProfileHollow === 0) {
1173
- evt.object.claimedForBuild = true;
1174
- gatheredPrims.push(evt.object);
1175
- if (gatheredPrims.length === count) {
1176
- if (objSub !== undefined) {
1177
- objSub.unsubscribe();
1178
- objSub = undefined;
1179
- }
1180
- if (timeout !== undefined) {
1181
- clearTimeout(timeout);
1182
- timeout = undefined;
1183
- }
1184
- resolve(gatheredPrims);
1185
- }
1296
+ }
1297
+ if (obj.inventory !== undefined) {
1298
+ const invList = [...obj.inventory];
1299
+ for (const j of invList) {
1300
+ const { assetID } = j;
1301
+ switch (j.inventoryType) {
1302
+ case InventoryType_1.InventoryType.Animation:
1303
+ {
1304
+ buildMap.assetMap.animations.request(assetID, {
1305
+ name: j.name,
1306
+ description: j.description
1307
+ });
1308
+ break;
1186
1309
  }
1187
- }
1188
- }
1189
- }));
1190
- for (let x = 0; x < count; x++) {
1191
- const msg = new ObjectAdd_1.ObjectAddMessage();
1192
- msg.AgentData = {
1193
- AgentID: this.agent.agentID,
1194
- SessionID: this.circuit.sessionID,
1195
- GroupID: UUID_1.UUID.zero()
1196
- };
1197
- msg.ObjectData = {
1198
- PCode: PCode_1.PCode.Prim,
1199
- Material: 3,
1200
- AddFlags: PrimFlags_1.PrimFlags.CreateSelected,
1201
- PathCurve: 16,
1202
- ProfileCurve: 1,
1203
- PathBegin: 0,
1204
- PathEnd: 0,
1205
- PathScaleX: 100,
1206
- PathScaleY: 100,
1207
- PathShearX: 0,
1208
- PathShearY: 0,
1209
- PathTwist: 0,
1210
- PathTwistBegin: 0,
1211
- PathRadiusOffset: 0,
1212
- PathTaperX: 0,
1213
- PathTaperY: 0,
1214
- PathRevolutions: 0,
1215
- PathSkew: 0,
1216
- ProfileBegin: 0,
1217
- ProfileEnd: 0,
1218
- ProfileHollow: 0,
1219
- BypassRaycast: 1,
1220
- RayStart: position,
1221
- RayEnd: position,
1222
- RayTargetID: UUID_1.UUID.zero(),
1223
- RayEndIsIntersection: 0,
1224
- Scale: new Vector3_1.Vector3([0.5, 0.5, 0.5]),
1225
- Rotation: Quaternion_1.Quaternion.getIdentity(),
1226
- State: 0
1227
- };
1228
- this.circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
1229
- }
1230
- });
1231
- }
1232
- getObjectByLocalID(id_1, resolve_1) {
1233
- return __awaiter(this, arguments, void 0, function* (id, resolve, waitFor = 0) {
1234
- let obj = null;
1235
- try {
1236
- obj = this.currentRegion.objects.getObjectByLocalID(id);
1237
- }
1238
- catch (error) {
1239
- if (waitFor > 0) {
1240
- obj = yield this.waitForObjectByLocalID(id, waitFor);
1241
- }
1242
- else {
1243
- throw (error);
1244
- }
1245
- }
1246
- if (resolve) {
1247
- yield this.currentRegion.resolver.resolveObjects([obj], {});
1248
- }
1249
- return obj;
1250
- });
1251
- }
1252
- getObjectByUUID(id_1, resolve_1) {
1253
- return __awaiter(this, arguments, void 0, function* (id, resolve, waitFor = 0) {
1254
- let obj = null;
1255
- try {
1256
- obj = this.currentRegion.objects.getObjectByUUID(id);
1257
- }
1258
- catch (error) {
1259
- if (waitFor > 0) {
1260
- obj = yield this.waitForObjectByUUID(id, waitFor);
1261
- }
1262
- else {
1263
- throw (error);
1264
- }
1265
- }
1266
- if (resolve) {
1267
- yield this.currentRegion.resolver.resolveObjects([obj], {});
1268
- }
1269
- return obj;
1270
- });
1271
- }
1272
- findObjectsByName(pattern, minX, maxX, minY, maxY, minZ, maxZ) {
1273
- return __awaiter(this, void 0, void 0, function* () {
1274
- let objects = [];
1275
- if (minX !== undefined && maxX !== undefined && minY !== undefined && maxY !== undefined && minZ !== undefined && maxZ !== undefined) {
1276
- objects = yield this.getObjectsInArea(minX, maxX, minY, maxY, minZ, maxZ, true);
1277
- }
1278
- else {
1279
- objects = yield this.getAllObjects({ resolve: true });
1280
- }
1281
- const idCheck = {};
1282
- const matches = [];
1283
- const it = function (go) {
1284
- if (go.name !== undefined) {
1285
- let match = false;
1286
- if (pattern instanceof RegExp) {
1287
- if (pattern.test(go.name)) {
1288
- match = true;
1310
+ case InventoryType_1.InventoryType.Wearable:
1311
+ {
1312
+ buildMap.assetMap.wearables.request(assetID, {
1313
+ name: j.name,
1314
+ description: j.description,
1315
+ assetType: j.type
1316
+ });
1317
+ break;
1289
1318
  }
1290
- }
1291
- else {
1292
- match = micromatch.isMatch(go.name, pattern, { nocase: true });
1293
- }
1294
- if (match) {
1295
- const fullID = go.FullID.toString();
1296
- if (!idCheck[fullID]) {
1297
- matches.push(go);
1298
- idCheck[fullID] = true;
1319
+ case InventoryType_1.InventoryType.CallingCard:
1320
+ {
1321
+ buildMap.assetMap.callingcards.request(assetID, {
1322
+ name: j.name,
1323
+ description: j.description
1324
+ });
1325
+ break;
1299
1326
  }
1300
- }
1301
- }
1302
- if (go.children && go.children.length > 0) {
1303
- for (const child of go.children) {
1304
- it(child);
1305
- }
1306
- }
1307
- };
1308
- for (const go of objects) {
1309
- it(go);
1310
- }
1311
- return matches;
1312
- });
1313
- }
1314
- getParcelAt(x, y) {
1315
- return this.currentRegion.getParcelProperties(x, y);
1316
- }
1317
- getParcels() {
1318
- return this.currentRegion.getParcels();
1319
- }
1320
- getAllObjects(options) {
1321
- return __awaiter(this, void 0, void 0, function* () {
1322
- const objs = yield this.currentRegion.objects.getAllObjects();
1323
- if (options.resolve) {
1324
- yield this.currentRegion.resolver.resolveObjects(objs, options);
1325
- }
1326
- return objs;
1327
- });
1328
- }
1329
- getObjectsInArea(minX_1, maxX_1, minY_1, maxY_1, minZ_1, maxZ_1) {
1330
- return __awaiter(this, arguments, void 0, function* (minX, maxX, minY, maxY, minZ, maxZ, resolve = false) {
1331
- const objs = yield this.currentRegion.objects.getObjectsInArea(minX, maxX, minY, maxY, minZ, maxZ);
1332
- if (resolve) {
1333
- yield this.currentRegion.resolver.resolveObjects(objs, {});
1334
- }
1335
- return objs;
1336
- });
1337
- }
1338
- pruneObjects(checkList) {
1339
- return __awaiter(this, void 0, void 0, function* () {
1340
- let uuids = [];
1341
- let objects = [];
1342
- const stillAlive = {};
1343
- const checkObjects = (uuidList, objectList) => __awaiter(this, void 0, void 0, function* () {
1344
- const objRef = {};
1345
- for (const obj of objectList) {
1346
- objRef[obj.FullID.toString()] = obj;
1347
- }
1348
- const result = yield this.currentRegion.caps.capsPostXML('GetObjectCost', {
1349
- 'object_ids': uuidList
1350
- });
1351
- for (const u of Object.keys(result)) {
1352
- stillAlive[u] = objRef[u];
1353
- }
1354
- });
1355
- for (const o of checkList) {
1356
- if (o.FullID) {
1357
- uuids.push(new LLSD.UUID(o.FullID));
1358
- objects.push(o);
1359
- if (uuids.length > 256) {
1360
- yield checkObjects(uuids, objects);
1361
- uuids = [];
1362
- objects = [];
1363
- }
1327
+ case InventoryType_1.InventoryType.Gesture:
1328
+ {
1329
+ buildMap.assetMap.gestures.request(assetID, {
1330
+ name: j.name,
1331
+ description: j.description
1332
+ });
1333
+ break;
1334
+ }
1335
+ case InventoryType_1.InventoryType.LSL:
1336
+ {
1337
+ buildMap.assetMap.scripts.request(assetID, {
1338
+ name: j.name,
1339
+ description: j.description
1340
+ });
1341
+ break;
1342
+ }
1343
+ case InventoryType_1.InventoryType.Texture:
1344
+ case InventoryType_1.InventoryType.Snapshot:
1345
+ {
1346
+ buildMap.assetMap.textures.request(assetID, {
1347
+ name: j.name,
1348
+ description: j.description
1349
+ });
1350
+ break;
1351
+ }
1352
+ case InventoryType_1.InventoryType.Notecard:
1353
+ {
1354
+ buildMap.assetMap.notecards.request(assetID, {
1355
+ name: j.name,
1356
+ description: j.description
1357
+ });
1358
+ break;
1359
+ }
1360
+ case InventoryType_1.InventoryType.Sound:
1361
+ {
1362
+ buildMap.assetMap.sounds.request(assetID, {
1363
+ name: j.name,
1364
+ description: j.description
1365
+ });
1366
+ break;
1367
+ }
1368
+ case InventoryType_1.InventoryType.Object:
1369
+ {
1370
+ buildMap.assetMap.objects.request(assetID);
1371
+ break;
1372
+ }
1373
+ case InventoryType_1.InventoryType.Settings:
1374
+ {
1375
+ buildMap.assetMap.settings.request(assetID, {
1376
+ name: j.name,
1377
+ description: j.description
1378
+ });
1379
+ break;
1380
+ }
1381
+ case InventoryType_1.InventoryType.Material:
1382
+ {
1383
+ buildMap.assetMap.gltfMaterials.request(assetID, {
1384
+ name: j.name,
1385
+ description: j.description
1386
+ });
1387
+ break;
1388
+ }
1389
+ default:
1390
+ console.error('Unsupported inventory type: ' + j.inventoryType);
1391
+ break;
1364
1392
  }
1365
1393
  }
1366
- if (uuids.length > 0) {
1367
- yield checkObjects(uuids, objects);
1368
- }
1369
- const deadObjects = [];
1370
- for (const o of checkList) {
1371
- let found = false;
1372
- if (o.FullID) {
1373
- const fullID = o.FullID.toString();
1374
- if (stillAlive[fullID]) {
1375
- found = true;
1376
- }
1377
- }
1378
- if (!found) {
1379
- deadObjects.push(o);
1380
- }
1394
+ }
1395
+ if (obj.children) {
1396
+ for (const child of obj.children) {
1397
+ this.gatherAssets(child, buildMap);
1381
1398
  }
1382
- return deadObjects;
1383
- });
1384
- }
1385
- setPersist(persist) {
1386
- this.currentRegion.objects.setPersist(persist);
1387
- }
1388
- grabObject(localID_1) {
1389
- return __awaiter(this, arguments, void 0, function* (localID, grabOffset = Vector3_1.Vector3.getZero(), uvCoordinate = Vector3_1.Vector3.getZero(), stCoordinate = Vector3_1.Vector3.getZero(), faceIndex = 0, position = Vector3_1.Vector3.getZero(), normal = Vector3_1.Vector3.getZero(), binormal = Vector3_1.Vector3.getZero()) {
1390
- if (localID instanceof UUID_1.UUID) {
1391
- const obj = this.currentRegion.objects.getObjectByUUID(localID);
1392
- localID = obj.ID;
1393
- }
1394
- const msg = new ObjectGrab_1.ObjectGrabMessage();
1395
- msg.AgentData = {
1396
- AgentID: this.agent.agentID,
1397
- SessionID: this.circuit.sessionID
1398
- };
1399
- msg.ObjectData = {
1400
- LocalID: localID,
1401
- GrabOffset: grabOffset
1402
- };
1403
- msg.SurfaceInfo = [
1404
- {
1405
- UVCoord: uvCoordinate,
1406
- STCoord: stCoordinate,
1407
- FaceIndex: faceIndex,
1408
- Position: position,
1409
- Normal: normal,
1410
- Binormal: binormal
1411
- }
1412
- ];
1413
- const seqID = this.circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
1414
- return this.circuit.waitForAck(seqID, 10000);
1415
- });
1416
- }
1417
- deGrabObject(localID_1) {
1418
- return __awaiter(this, arguments, void 0, function* (localID, _grabOffset = Vector3_1.Vector3.getZero(), uvCoordinate = Vector3_1.Vector3.getZero(), stCoordinate = Vector3_1.Vector3.getZero(), faceIndex = 0, position = Vector3_1.Vector3.getZero(), normal = Vector3_1.Vector3.getZero(), binormal = Vector3_1.Vector3.getZero()) {
1419
- if (localID instanceof UUID_1.UUID) {
1420
- const obj = this.currentRegion.objects.getObjectByUUID(localID);
1421
- localID = obj.ID;
1422
- }
1423
- const msg = new ObjectDeGrab_1.ObjectDeGrabMessage();
1424
- msg.AgentData = {
1425
- AgentID: this.agent.agentID,
1426
- SessionID: this.circuit.sessionID
1427
- };
1428
- msg.ObjectData = {
1429
- LocalID: localID
1430
- };
1431
- msg.SurfaceInfo = [
1432
- {
1433
- UVCoord: uvCoordinate,
1434
- STCoord: stCoordinate,
1435
- FaceIndex: faceIndex,
1436
- Position: position,
1437
- Normal: normal,
1438
- Binormal: binormal
1439
- }
1440
- ];
1441
- const seqID = this.circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
1442
- return this.circuit.waitForAck(seqID, 10000);
1443
- });
1444
- }
1445
- dragGrabbedObject(localID_1, grabPosition_1) {
1446
- return __awaiter(this, arguments, void 0, function* (localID, grabPosition, grabOffset = Vector3_1.Vector3.getZero(), uvCoordinate = Vector3_1.Vector3.getZero(), stCoordinate = Vector3_1.Vector3.getZero(), faceIndex = 0, position = Vector3_1.Vector3.getZero(), normal = Vector3_1.Vector3.getZero(), binormal = Vector3_1.Vector3.getZero()) {
1447
- if (!(localID instanceof UUID_1.UUID)) {
1448
- const obj = this.currentRegion.objects.getObjectByLocalID(localID);
1449
- localID = obj.FullID;
1450
- }
1451
- const msg = new ObjectGrabUpdate_1.ObjectGrabUpdateMessage();
1452
- msg.AgentData = {
1453
- AgentID: this.agent.agentID,
1454
- SessionID: this.circuit.sessionID
1455
- };
1456
- msg.ObjectData = {
1457
- ObjectID: localID,
1458
- GrabOffsetInitial: grabOffset,
1459
- GrabPosition: grabPosition,
1460
- TimeSinceLast: 0
1461
- };
1462
- msg.SurfaceInfo = [
1463
- {
1464
- UVCoord: uvCoordinate,
1465
- STCoord: stCoordinate,
1466
- FaceIndex: faceIndex,
1467
- Position: position,
1468
- Normal: normal,
1469
- Binormal: binormal
1470
- }
1471
- ];
1472
- const seqID = this.circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
1473
- return this.circuit.waitForAck(seqID, 10000);
1474
- });
1475
- }
1476
- touchObject(localID_1) {
1477
- return __awaiter(this, arguments, void 0, function* (localID, grabOffset = Vector3_1.Vector3.getZero(), uvCoordinate = Vector3_1.Vector3.getZero(), stCoordinate = Vector3_1.Vector3.getZero(), faceIndex = 0, position = Vector3_1.Vector3.getZero(), normal = Vector3_1.Vector3.getZero(), binormal = Vector3_1.Vector3.getZero()) {
1478
- if (localID instanceof UUID_1.UUID) {
1479
- const obj = this.currentRegion.objects.getObjectByUUID(localID);
1480
- localID = obj.ID;
1481
- }
1482
- yield this.grabObject(localID, grabOffset, uvCoordinate, stCoordinate, faceIndex, position, normal, binormal);
1483
- return this.deGrabObject(localID, grabOffset, uvCoordinate, stCoordinate, faceIndex, position, normal, binormal);
1484
- });
1399
+ }
1485
1400
  }
1486
1401
  }
1487
1402
  exports.RegionCommands = RegionCommands;