From 4e8feb181fefbde42f1b8f940bfb71e9782fd067 Mon Sep 17 00:00:00 2001 From: Casper Warden <216465704+casperwardensl@users.noreply.github.com> Date: Wed, 13 Dec 2017 19:55:08 +0000 Subject: [PATCH] Ping / circuit latency, break out commands, add typing function for IM, add thinkingTime and charactersPerSecond parameters to typing functions --- dist/Bot.d.ts | 25 +- dist/Bot.js | 344 ++++---------- dist/Bot.js.map | 2 +- dist/classes/Agent.d.ts | 3 - dist/classes/Agent.js | 24 - dist/classes/Agent.js.map | 2 +- dist/classes/Circuit.d.ts | 2 + dist/classes/Circuit.js | 16 +- dist/classes/Circuit.js.map | 2 +- dist/classes/ClientCommands.d.ts | 22 + dist/classes/ClientCommands.js | 24 + dist/classes/ClientCommands.js.map | 1 + dist/classes/ClientEvents.d.ts | 9 + dist/classes/ClientEvents.js | 5 + dist/classes/ClientEvents.js.map | 2 +- dist/classes/Comms.d.ts | 10 - dist/classes/Comms.js | 171 +++---- dist/classes/Comms.js.map | 2 +- dist/classes/IPAddress.js | 28 +- dist/classes/IPAddress.js.map | 2 +- dist/classes/commands/AgentCommands.d.ts | 7 + dist/classes/commands/AgentCommands.js | 32 ++ dist/classes/commands/AgentCommands.js.map | 1 + dist/classes/commands/AssetCommands.d.ts | 8 + dist/classes/commands/AssetCommands.js | 41 ++ dist/classes/commands/AssetCommands.js.map | 1 + dist/classes/commands/CommandsBase.d.ts | 11 + dist/classes/commands/CommandsBase.js | 12 + dist/classes/commands/CommandsBase.js.map | 1 + .../commands/CommunicationsCommands.d.ts | 16 + .../commands/CommunicationsCommands.js | 242 ++++++++++ .../commands/CommunicationsCommands.js.map | 1 + dist/classes/commands/GridCommands.d.ts | 9 + dist/classes/commands/GridCommands.js | 114 +++++ dist/classes/commands/GridCommands.js.map | 1 + dist/classes/commands/GroupCommands.d.ts | 5 + dist/classes/commands/GroupCommands.js | 44 ++ dist/classes/commands/GroupCommands.js.map | 1 + dist/classes/commands/NetworkCommands.d.ts | 5 + dist/classes/commands/NetworkCommands.js | 48 ++ dist/classes/commands/NetworkCommands.js.map | 1 + dist/classes/commands/RegionCommands.d.ts | 3 + dist/classes/commands/RegionCommands.js | 7 + dist/classes/commands/RegionCommands.js.map | 1 + dist/classes/commands/TeleportCommands.d.ts | 6 + dist/classes/commands/TeleportCommands.js | 65 +++ dist/classes/commands/TeleportCommands.js.map | 1 + dist/enums/InstantMessageEventFlags.d.ts | 6 + dist/enums/InstantMessageEventFlags.js | 10 + dist/enums/InstantMessageEventFlags.js.map | 1 + dist/enums/InstantMessageFlags.d.ts | 4 + dist/enums/InstantMessageFlags.js | 8 + dist/enums/InstantMessageFlags.js.map | 1 + dist/events/DisconnectEvent.d.ts | 4 + dist/events/DisconnectEvent.js | 6 + dist/events/DisconnectEvent.js.map | 1 + dist/events/FriendRequestEvent.d.ts | 2 + dist/events/FriendRequestEvent.js | 6 + dist/events/FriendRequestEvent.js.map | 1 + dist/events/GroupInviteEvent.d.ts | 2 + dist/events/GroupInviteEvent.js | 6 + dist/events/GroupInviteEvent.js.map | 1 + dist/events/InstantMessageEvent.d.ts | 11 + dist/events/InstantMessageEvent.js | 6 + dist/events/InstantMessageEvent.js.map | 1 + dist/events/LureEvent.d.ts | 1 + dist/events/LureEvent.js.map | 2 +- dist/index.d.ts | 5 +- dist/index.js | 6 + dist/index.js.map | 2 +- example/testBot.js | 72 ++- lib/Bot.ts | 437 +++++------------- lib/classes/Agent.ts | 34 -- lib/classes/Assets.ts | 4 - lib/classes/Circuit.ts | 26 +- lib/classes/ClientCommands.ts | 35 ++ lib/classes/ClientEvents.ts | 9 + lib/classes/Comms.ts | 190 +++----- lib/classes/IPAddress.ts | 34 +- lib/classes/Utils.ts | 2 +- lib/classes/commands/AgentCommands.ts | 39 ++ lib/classes/commands/AssetCommands.ts | 50 ++ lib/classes/commands/CommandsBase.ts | 20 + .../commands/CommunicationsCommands.ts | 296 ++++++++++++ lib/classes/commands/GridCommands.ts | 141 ++++++ lib/classes/commands/GroupCommands.ts | 44 ++ lib/classes/commands/NetworkCommands.ts | 50 ++ lib/classes/commands/RegionCommands.ts | 6 + lib/classes/commands/TeleportCommands.ts | 82 ++++ lib/enums/InstantMessageEventFlags.ts | 7 + lib/events/DisconnectEvent.ts | 5 + lib/events/FriendRequestEvent.ts | 4 + lib/events/GroupInviteEvent.ts | 4 + lib/events/InstantMessageEvent.ts | 13 + lib/events/LureEvent.ts | 1 + lib/index.ts | 8 +- 96 files changed, 2151 insertions(+), 935 deletions(-) create mode 100644 dist/classes/ClientCommands.d.ts create mode 100644 dist/classes/ClientCommands.js create mode 100644 dist/classes/ClientCommands.js.map create mode 100644 dist/classes/commands/AgentCommands.d.ts create mode 100644 dist/classes/commands/AgentCommands.js create mode 100644 dist/classes/commands/AgentCommands.js.map create mode 100644 dist/classes/commands/AssetCommands.d.ts create mode 100644 dist/classes/commands/AssetCommands.js create mode 100644 dist/classes/commands/AssetCommands.js.map create mode 100644 dist/classes/commands/CommandsBase.d.ts create mode 100644 dist/classes/commands/CommandsBase.js create mode 100644 dist/classes/commands/CommandsBase.js.map create mode 100644 dist/classes/commands/CommunicationsCommands.d.ts create mode 100644 dist/classes/commands/CommunicationsCommands.js create mode 100644 dist/classes/commands/CommunicationsCommands.js.map create mode 100644 dist/classes/commands/GridCommands.d.ts create mode 100644 dist/classes/commands/GridCommands.js create mode 100644 dist/classes/commands/GridCommands.js.map create mode 100644 dist/classes/commands/GroupCommands.d.ts create mode 100644 dist/classes/commands/GroupCommands.js create mode 100644 dist/classes/commands/GroupCommands.js.map create mode 100644 dist/classes/commands/NetworkCommands.d.ts create mode 100644 dist/classes/commands/NetworkCommands.js create mode 100644 dist/classes/commands/NetworkCommands.js.map create mode 100644 dist/classes/commands/RegionCommands.d.ts create mode 100644 dist/classes/commands/RegionCommands.js create mode 100644 dist/classes/commands/RegionCommands.js.map create mode 100644 dist/classes/commands/TeleportCommands.d.ts create mode 100644 dist/classes/commands/TeleportCommands.js create mode 100644 dist/classes/commands/TeleportCommands.js.map create mode 100644 dist/enums/InstantMessageEventFlags.d.ts create mode 100644 dist/enums/InstantMessageEventFlags.js create mode 100644 dist/enums/InstantMessageEventFlags.js.map create mode 100644 dist/enums/InstantMessageFlags.d.ts create mode 100644 dist/enums/InstantMessageFlags.js create mode 100644 dist/enums/InstantMessageFlags.js.map create mode 100644 dist/events/DisconnectEvent.d.ts create mode 100644 dist/events/DisconnectEvent.js create mode 100644 dist/events/DisconnectEvent.js.map create mode 100644 dist/events/FriendRequestEvent.d.ts create mode 100644 dist/events/FriendRequestEvent.js create mode 100644 dist/events/FriendRequestEvent.js.map create mode 100644 dist/events/GroupInviteEvent.d.ts create mode 100644 dist/events/GroupInviteEvent.js create mode 100644 dist/events/GroupInviteEvent.js.map create mode 100644 dist/events/InstantMessageEvent.d.ts create mode 100644 dist/events/InstantMessageEvent.js create mode 100644 dist/events/InstantMessageEvent.js.map delete mode 100644 lib/classes/Assets.ts create mode 100644 lib/classes/ClientCommands.ts create mode 100644 lib/classes/commands/AgentCommands.ts create mode 100644 lib/classes/commands/AssetCommands.ts create mode 100644 lib/classes/commands/CommandsBase.ts create mode 100644 lib/classes/commands/CommunicationsCommands.ts create mode 100644 lib/classes/commands/GridCommands.ts create mode 100644 lib/classes/commands/GroupCommands.ts create mode 100644 lib/classes/commands/NetworkCommands.ts create mode 100644 lib/classes/commands/RegionCommands.ts create mode 100644 lib/classes/commands/TeleportCommands.ts create mode 100644 lib/enums/InstantMessageEventFlags.ts create mode 100644 lib/events/DisconnectEvent.ts create mode 100644 lib/events/FriendRequestEvent.ts create mode 100644 lib/events/GroupInviteEvent.ts create mode 100644 lib/events/InstantMessageEvent.ts diff --git a/dist/Bot.d.ts b/dist/Bot.d.ts index 6776570..5e9e0ed 100644 --- a/dist/Bot.d.ts +++ b/dist/Bot.d.ts @@ -1,26 +1,19 @@ -/// -/// import { LoginParameters } from './classes/LoginParameters'; -import { UUID } from './classes/UUID'; -import * as Long from 'long'; -import { MapInfoReply } from './events/MapInfoReply'; -import { LureEvent } from './events/LureEvent'; -import { HTTPAssets } from './enums/HTTPAssets'; -import { TeleportEvent } from './events/TeleportEvent'; +import { Region } from './classes/Region'; +import { ClientEvents } from './classes/ClientEvents'; +import { ClientCommands } from './classes/ClientCommands'; export declare class Bot { private loginParams; private currentRegion; private agent; - private throttleGenCounter; - private clientEvents; + private ping; + private pingNumber; + private lastSuccessfulPing; + clientEvents: ClientEvents | null; + clientCommands: ClientCommands; constructor(login: LoginParameters); login(): Promise<{}>; + changeRegion(region: Region): Promise<{}>; close(): Promise<{}>; - setBandwidth(total: number): void; - acceptTeleport(lure: LureEvent): Promise; - getRegionHandle(regionID: UUID): Promise; - getRegionMapInfo(gridX: number, gridY: number): Promise; connectToSim(): Promise<{}>; - downloadAsset(type: HTTPAssets, uuid: UUID): Promise; - uploadAsset(type: HTTPAssets, data: Buffer, name: string, description: string): Promise; } diff --git a/dist/Bot.js b/dist/Bot.js index 4ae79bd..070522c 100644 --- a/dist/Bot.js +++ b/dist/Bot.js @@ -1,31 +1,25 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const LoginHandler_1 = require("./LoginHandler"); -const UUID_1 = require("./classes/UUID"); const PacketFlags_1 = require("./enums/PacketFlags"); const UseCircuitCode_1 = require("./classes/messages/UseCircuitCode"); const CompleteAgentMovement_1 = require("./classes/messages/CompleteAgentMovement"); const Message_1 = require("./enums/Message"); -const Region_1 = require("./classes/Region"); const LogoutRequest_1 = require("./classes/messages/LogoutRequest"); const Utils_1 = require("./classes/Utils"); const RegionHandshakeReply_1 = require("./classes/messages/RegionHandshakeReply"); const RegionProtocolFlags_1 = require("./enums/RegionProtocolFlags"); -const AgentThrottle_1 = require("./classes/messages/AgentThrottle"); const AgentDataUpdateRequest_1 = require("./classes/messages/AgentDataUpdateRequest"); -const RegionHandleRequest_1 = require("./classes/messages/RegionHandleRequest"); -const MapItemRequest_1 = require("./classes/messages/MapItemRequest"); -const GridItemType_1 = require("./enums/GridItemType"); -const MapBlockRequest_1 = require("./classes/messages/MapBlockRequest"); -const MapInfoReply_1 = require("./events/MapInfoReply"); -const TeleportLureRequest_1 = require("./classes/messages/TeleportLureRequest"); -const TeleportFlags_1 = require("./enums/TeleportFlags"); -const LLSD = require("llsd"); const TeleportEvent_1 = require("./events/TeleportEvent"); const TeleportEventType_1 = require("./enums/TeleportEventType"); +const ClientCommands_1 = require("./classes/ClientCommands"); +const DisconnectEvent_1 = require("./events/DisconnectEvent"); +const StartPingCheck_1 = require("./classes/messages/StartPingCheck"); class Bot { constructor(login) { - this.throttleGenCounter = 0; + this.ping = null; + this.pingNumber = 0; + this.lastSuccessfulPing = 0; this.clientEvents = null; this.loginParams = login; } @@ -36,12 +30,24 @@ class Bot { this.clientEvents = response.clientEvents; this.currentRegion = response.region; this.agent = response.agent; + this.clientCommands = new ClientCommands_1.ClientCommands(response.region, response.agent, this); resolve(response); }).catch((error) => { reject(error); }); }); } + changeRegion(region) { + return new Promise((resolve, reject) => { + this.currentRegion = region; + this.clientCommands = new ClientCommands_1.ClientCommands(this.currentRegion, this.agent, this); + this.connectToSim().then(() => { + resolve(); + }).catch((error) => { + reject(error); + }); + }); + } close() { return new Promise((resolve, reject) => { const circuit = this.currentRegion.circuit; @@ -59,195 +65,18 @@ class Bot { this.currentRegion.shutdown(); delete this.currentRegion; delete this.agent; - resolve(); - }); - }); - } - setBandwidth(total) { - const circuit = this.currentRegion.circuit; - const agentThrottle = new AgentThrottle_1.AgentThrottleMessage(); - agentThrottle.AgentData = { - AgentID: this.agent.agentID, - SessionID: circuit.sessionID, - CircuitCode: circuit.circuitCode - }; - const throttleData = Buffer.allocUnsafe(28); - let pos = 0; - const resendThrottle = total * 0.1; - const landThrottle = total * 0.172; - const windThrottle = total * 0.05; - const cloudThrottle = total * 0.05; - const taskThrottle = total * 0.234; - const textureThrottle = total * 0.234; - const assetThrottle = total * 0.160; - throttleData.writeFloatLE(resendThrottle, pos); - pos += 4; - throttleData.writeFloatLE(landThrottle, pos); - pos += 4; - throttleData.writeFloatLE(windThrottle, pos); - pos += 4; - throttleData.writeFloatLE(cloudThrottle, pos); - pos += 4; - throttleData.writeFloatLE(taskThrottle, pos); - pos += 4; - throttleData.writeFloatLE(textureThrottle, pos); - pos += 4; - throttleData.writeFloatLE(assetThrottle, pos); - agentThrottle.Throttle = { - GenCounter: this.throttleGenCounter++, - Throttles: throttleData - }; - circuit.sendMessage(agentThrottle, PacketFlags_1.PacketFlags.Reliable); - } - acceptTeleport(lure) { - return new Promise((resolve, reject) => { - const circuit = this.currentRegion.circuit; - const tlr = new TeleportLureRequest_1.TeleportLureRequestMessage(); - tlr.Info = { - AgentID: this.agent.agentID, - SessionID: circuit.sessionID, - LureID: lure.lureID, - TeleportFlags: TeleportFlags_1.TeleportFlags.ViaLure - }; - circuit.sendMessage(tlr, PacketFlags_1.PacketFlags.Reliable); - if (this.currentRegion.caps.eventQueueClient) { - if (this.clientEvents === null) { - reject(new Error('ClientEvents is null')); - return; + delete this.clientCommands; + if (this.ping !== null) { + clearInterval(this.ping); + this.ping = null; } - const subscription = this.clientEvents.onTeleportEvent.subscribe((e) => { - if (e.eventType === TeleportEventType_1.TeleportEventType.TeleportFailed || e.eventType === TeleportEventType_1.TeleportEventType.TeleportCompleted) { - subscription.unsubscribe(); - } - if (e.eventType === TeleportEventType_1.TeleportEventType.TeleportFailed) { - reject(e); - } - else if (e.eventType === TeleportEventType_1.TeleportEventType.TeleportCompleted) { - if (e.simIP === 'local') { - resolve(e); - return; - } - if (this.clientEvents === null) { - reject(new Error('ClientEvents is null')); - return; - } - this.currentRegion.shutdown(); - const region = new Region_1.Region(this.agent, this.clientEvents); - region.circuit.circuitCode = this.currentRegion.circuit.circuitCode; - region.circuit.secureSessionID = this.currentRegion.circuit.secureSessionID; - region.circuit.sessionID = this.currentRegion.circuit.sessionID; - region.circuit.udpBlacklist = this.currentRegion.circuit.udpBlacklist; - region.circuit.ipAddress = e.simIP; - region.circuit.port = e.simPort; - this.agent.setCurrentRegion(region); - this.currentRegion = region; - this.currentRegion.activateCaps(e.seedCapability); - this.connectToSim().then(() => { - resolve(e); - }).catch((error) => { - reject(e); - }); - } - }); - } - }); - } - getRegionHandle(regionID) { - return new Promise((resolve, reject) => { - const circuit = this.currentRegion.circuit; - const msg = new RegionHandleRequest_1.RegionHandleRequestMessage(); - msg.RequestBlock = { - RegionID: regionID, - }; - circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable); - circuit.waitForMessage(Message_1.Message.RegionIDAndHandleReply, 10000, (packet) => { - const filterMsg = packet.message; - return (filterMsg.ReplyBlock.RegionID.toString() === regionID.toString()); - }).then((packet) => { - const responseMsg = packet.message; - resolve(responseMsg.ReplyBlock.RegionHandle); - }); - }); - } - getRegionMapInfo(gridX, gridY) { - return new Promise((resolve, reject) => { - const circuit = this.currentRegion.circuit; - const response = new MapInfoReply_1.MapInfoReply(); - const msg = new MapBlockRequest_1.MapBlockRequestMessage(); - msg.AgentData = { - AgentID: this.agent.agentID, - SessionID: circuit.sessionID, - Flags: 65536, - EstateID: 0, - Godlike: true - }; - msg.PositionData = { - MinX: (gridX / 256), - MaxX: (gridX / 256), - MinY: (gridY / 256), - MaxY: (gridY / 256) - }; - circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable); - circuit.waitForMessage(Message_1.Message.MapBlockReply, 10000, (packet) => { - const filterMsg = packet.message; - let found = false; - filterMsg.Data.forEach((data) => { - if (data.X === (gridX / 256) && data.Y === (gridY / 256)) { - found = true; - } - }); - return found; - }).then((packet) => { - const responseMsg = packet.message; - responseMsg.Data.forEach((data) => { - if (data.X === (gridX / 256) && data.Y === (gridY / 256)) { - response.name = Utils_1.Utils.BufferToStringSimple(data.Name); - response.accessFlags = data.Access; - response.mapImage = data.MapImageID; - } - }); - const regionHandle = Utils_1.Utils.RegionCoordinatesToHandle(gridX, gridY); - const mi = new MapItemRequest_1.MapItemRequestMessage(); - mi.AgentData = { - AgentID: this.agent.agentID, - SessionID: circuit.sessionID, - Flags: 2, - EstateID: 0, - Godlike: false - }; - mi.RequestData = { - ItemType: GridItemType_1.GridItemType.AgentLocations, - RegionHandle: regionHandle - }; - circuit.sendMessage(mi, PacketFlags_1.PacketFlags.Reliable); - const minX = Math.floor(gridX / 256) * 256; - const maxX = minX + 256; - const minY = Math.floor(gridY / 256) * 256; - const maxY = minY + 256; - response.avatars = []; - circuit.waitForMessage(Message_1.Message.MapItemReply, 10000, (packet) => { - const filterMsg = packet.message; - let found = false; - filterMsg.Data.forEach((data) => { - if (data.X >= minX && data.X <= maxX && data.Y >= minY && data.Y <= maxY) { - found = true; - } - }); - return found; - }).then((packet2) => { - const responseMsg2 = packet2.message; - responseMsg2.Data.forEach((data) => { - response.avatars.push({ - X: data.X, - Y: data.Y - }); - }); - resolve(response); - }).catch((err) => { - reject(err); - }); - }).catch((err) => { - reject(err); + const disconnectEvent = new DisconnectEvent_1.DisconnectEvent(); + disconnectEvent.requested = true; + disconnectEvent.message = 'Logout completed'; + if (this.clientEvents) { + this.clientEvents.onDisconnected.next(disconnectEvent); + } + resolve(); }); }); } @@ -281,7 +110,9 @@ class Bot { }; return circuit.waitForAck(circuit.sendMessage(handshakeReply, PacketFlags_1.PacketFlags.Reliable), 10000); }).then(() => { - this.setBandwidth(1536000); + if (this.clientCommands !== null) { + this.clientCommands.network.setBandwidth(1536000); + } const agentRequest = new AgentDataUpdateRequest_1.AgentDataUpdateRequestMessage(); agentRequest.AgentData = { AgentID: this.agent.agentID, @@ -290,6 +121,51 @@ class Bot { circuit.sendMessage(agentRequest, PacketFlags_1.PacketFlags.Reliable); this.agent.setInitialAppearance(); this.agent.circuitActive(); + this.lastSuccessfulPing = new Date().getTime(); + this.ping = setInterval(() => { + this.pingNumber++; + if (this.pingNumber > 255) { + this.pingNumber = 0; + } + const ping = new StartPingCheck_1.StartPingCheckMessage(); + ping.PingID = { + PingID: this.pingNumber, + OldestUnacked: this.currentRegion.circuit.getOldestUnacked() + }; + circuit.sendMessage(ping, PacketFlags_1.PacketFlags.Reliable); + circuit.waitForMessage(Message_1.Message.CompletePingCheck, 10000, ((pingData, packet) => { + const cpc = packet.message; + if (cpc.PingID.PingID === pingData.pingID) { + this.lastSuccessfulPing = new Date().getTime(); + const pingTime = this.lastSuccessfulPing - pingData.timeSent; + if (this.clientEvents !== null) { + this.clientEvents.onCircuitLatency.next(pingTime); + } + return true; + } + return false; + }).bind(this, { + pingID: this.pingNumber, + timeSent: new Date().getTime() + })); + if ((new Date().getTime() - this.lastSuccessfulPing) > 60000) { + this.agent.shutdown(); + this.currentRegion.shutdown(); + delete this.currentRegion; + delete this.agent; + delete this.clientCommands; + if (this.ping !== null) { + clearInterval(this.ping); + this.ping = null; + } + const disconnectEvent = new DisconnectEvent_1.DisconnectEvent(); + disconnectEvent.requested = false; + disconnectEvent.message = 'Circuit timeout'; + if (this.clientEvents) { + this.clientEvents.onDisconnected.next(disconnectEvent); + } + } + }, 5000); circuit.subscribeToMessages([ Message_1.Message.TeleportFailed, Message_1.Message.TeleportFinish, @@ -297,9 +173,7 @@ class Bot { Message_1.Message.TeleportStart, Message_1.Message.TeleportProgress, Message_1.Message.TeleportCancel, - Message_1.Message.SoundTrigger, - Message_1.Message.AttachedSound, - Message_1.Message.AvatarAnimation + Message_1.Message.KickUser ], (packet) => { switch (packet.message.id) { case Message_1.Message.TeleportLocal: @@ -350,21 +224,24 @@ class Bot { this.clientEvents.onTeleportEvent.next(tpEvent); break; } - case Message_1.Message.SoundTrigger: + case Message_1.Message.KickUser: { - const soundTrigger = packet.message; - const soundID = soundTrigger.SoundData.SoundID; - break; - } - case Message_1.Message.AttachedSound: - { - const attachedSound = packet.message; - const soundID = attachedSound.DataBlock.SoundID; - break; - } - case Message_1.Message.AvatarAnimation: - { - const avatarAnimation = packet.message; + const kickUser = packet.message; + this.agent.shutdown(); + this.currentRegion.shutdown(); + delete this.currentRegion; + delete this.agent; + delete this.clientCommands; + if (this.ping !== null) { + clearInterval(this.ping); + this.ping = null; + } + const disconnectEvent = new DisconnectEvent_1.DisconnectEvent(); + disconnectEvent.requested = false; + disconnectEvent.message = Utils_1.Utils.BufferToStringSimple(kickUser.UserInfo.Reason); + if (this.clientEvents) { + this.clientEvents.onDisconnected.next(disconnectEvent); + } break; } } @@ -375,37 +252,6 @@ class Bot { }); }); } - downloadAsset(type, uuid) { - return this.currentRegion.caps.downloadAsset(uuid, type); - } - uploadAsset(type, data, name, description) { - return new Promise((resolve, reject) => { - if (this.agent && this.agent.inventory && this.agent.inventory.main && this.agent.inventory.main.root) { - this.currentRegion.caps.capsRequestXML('NewFileAgentInventory', { - 'folder_id': new LLSD.UUID(this.agent.inventory.main.root.toString()), - 'asset_type': type, - 'inventory_type': Utils_1.Utils.HTTPAssetTypeToInventoryType(type), - 'name': name, - 'description': description, - 'everyone_mask': (1 << 13) | (1 << 14) | (1 << 15) | (1 << 19), - 'group_mask': (1 << 13) | (1 << 14) | (1 << 15) | (1 << 19), - 'next_owner_mask': (1 << 13) | (1 << 14) | (1 << 15) | (1 << 19), - 'expected_upload_cost': 0 - }).then((response) => { - if (response['state'] === 'upload') { - const uploadURL = response['uploader']; - this.currentRegion.caps.capsRequestUpload(uploadURL, data).then((responseUpload) => { - resolve(new UUID_1.UUID(responseUpload['new_asset'].toString())); - }).catch((err) => { - reject(err); - }); - } - }).catch((err) => { - console.log(err); - }); - } - }); - } } exports.Bot = Bot; //# sourceMappingURL=Bot.js.map \ No newline at end of file diff --git a/dist/Bot.js.map b/dist/Bot.js.map index 6c5b099..125bd0e 100644 --- a/dist/Bot.js.map +++ b/dist/Bot.js.map @@ -1 +1 @@ -{"version":3,"file":"Bot.js","sourceRoot":"","sources":["../lib/Bot.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Bot.js","sourceRoot":"","sources":["../lib/Bot.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/classes/Agent.d.ts b/dist/classes/Agent.d.ts index 75cdd1b..06adb44 100644 --- a/dist/classes/Agent.d.ts +++ b/dist/classes/Agent.d.ts @@ -60,8 +60,5 @@ export declare class Agent { sendAgentUpdate(): void; shutdown(): void; onAnimState(packet: Packet): void; - private animate(anim, run); - startAnimations(anim: UUID[]): Promise; - stopAnimations(anim: UUID[]): Promise; setInitialAppearance(): void; } diff --git a/dist/classes/Agent.js b/dist/classes/Agent.js index 984cf42..a0b27b6 100644 --- a/dist/classes/Agent.js +++ b/dist/classes/Agent.js @@ -18,7 +18,6 @@ const InventorySortOrder_1 = require("../enums/InventorySortOrder"); const RezSingleAttachmentFromInv_1 = require("./messages/RezSingleAttachmentFromInv"); const AttachmentPoint_1 = require("../enums/AttachmentPoint"); const Utils_1 = require("./Utils"); -const AgentAnimation_1 = require("./messages/AgentAnimation"); class Agent { constructor(clientEvents) { this.localID = 0; @@ -90,29 +89,6 @@ class Agent { } } } - animate(anim, run) { - const circuit = this.currentRegion.circuit; - const animPacket = new AgentAnimation_1.AgentAnimationMessage(); - animPacket.AgentData = { - AgentID: this.agentID, - SessionID: circuit.sessionID - }; - animPacket.PhysicalAvatarEventList = []; - animPacket.AnimationList = []; - anim.forEach((a) => { - animPacket.AnimationList.push({ - AnimID: a, - StartAnim: run - }); - }); - return circuit.waitForAck(circuit.sendMessage(animPacket, PacketFlags_1.PacketFlags.Reliable), 10000); - } - startAnimations(anim) { - return this.animate(anim, true); - } - stopAnimations(anim) { - return this.animate(anim, false); - } setInitialAppearance() { const circuit = this.currentRegion.circuit; const wearablesRequest = new AgentWearablesRequest_1.AgentWearablesRequestMessage(); diff --git a/dist/classes/Agent.js.map b/dist/classes/Agent.js.map index 5b11048..0f87637 100644 --- a/dist/classes/Agent.js.map +++ b/dist/classes/Agent.js.map @@ -1 +1 @@ -{"version":3,"file":"Agent.js","sourceRoot":"","sources":["../../lib/classes/Agent.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Agent.js","sourceRoot":"","sources":["../../lib/classes/Agent.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/classes/Circuit.d.ts b/dist/classes/Circuit.d.ts index 6873bf7..c1a8110 100644 --- a/dist/classes/Circuit.d.ts +++ b/dist/classes/Circuit.d.ts @@ -22,6 +22,7 @@ export declare class Circuit { [key: number]: { packet: Packet; timeout: number; + sent: number; }; }; receivedPackets: { @@ -41,6 +42,7 @@ export declare class Circuit { sendPacket(packet: Packet): void; ackReceived(sequenceNumber: number): void; sendAck(sequenceNumber: number): void; + getOldestUnacked(): number; expireReceivedPacket(sequenceNumber: number): void; receivedPacket(bytes: Buffer): void; } diff --git a/dist/classes/Circuit.js b/dist/classes/Circuit.js index 13bf2d2..ba53610 100644 --- a/dist/classes/Circuit.js +++ b/dist/classes/Circuit.js @@ -133,7 +133,8 @@ class Circuit { this.awaitingAck[packet.sequenceNumber] = { packet: packet, - timeout: setTimeout(this.resend.bind(this, packet.sequenceNumber), 1000) + timeout: setTimeout(this.resend.bind(this, packet.sequenceNumber), 1000), + sent: new Date().getTime() }; } let dataToSend = Buffer.allocUnsafe(packet.getSize()); @@ -162,6 +163,19 @@ class Circuit { ]; this.sendMessage(msg, 0); } + getOldestUnacked() { + let result = 0; + let oldest = -1; + const keys = Object.keys(this.awaitingAck); + keys.forEach((seqID) => { + const nSeq = parseInt(seqID, 10); + if (oldest === -1 || this.awaitingAck[nSeq].sent < oldest) { + result = nSeq; + oldest = this.awaitingAck[nSeq].sent; + } + }); + return result; + } expireReceivedPacket(sequenceNumber) { if (this.receivedPackets[sequenceNumber]) { delete this.receivedPackets[sequenceNumber]; diff --git a/dist/classes/Circuit.js.map b/dist/classes/Circuit.js.map index b4b8119..c7a2679 100644 --- a/dist/classes/Circuit.js.map +++ b/dist/classes/Circuit.js.map @@ -1 +1 @@ -{"version":3,"file":"Circuit.js","sourceRoot":"","sources":["../../lib/classes/Circuit.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Circuit.js","sourceRoot":"","sources":["../../lib/classes/Circuit.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/classes/ClientCommands.d.ts b/dist/classes/ClientCommands.d.ts new file mode 100644 index 0000000..726c7ca --- /dev/null +++ b/dist/classes/ClientCommands.d.ts @@ -0,0 +1,22 @@ +import { Region } from './Region'; +import { Agent } from './Agent'; +import { Bot } from '../Bot'; +import { NetworkCommands } from './commands/NetworkCommands'; +import { AssetCommands } from './commands/AssetCommands'; +import { TeleportCommands } from './commands/TeleportCommands'; +import { RegionCommands } from './commands/RegionCommands'; +import { GridCommands } from './commands/GridCommands'; +import { CommunicationsCommands } from './commands/CommunicationsCommands'; +import { AgentCommands } from './commands/AgentCommands'; +import { GroupCommands } from './commands/GroupCommands'; +export declare class ClientCommands { + network: NetworkCommands; + asset: AssetCommands; + teleport: TeleportCommands; + region: RegionCommands; + grid: GridCommands; + comms: CommunicationsCommands; + agent: AgentCommands; + group: GroupCommands; + constructor(region: Region, agent: Agent, bot: Bot); +} diff --git a/dist/classes/ClientCommands.js b/dist/classes/ClientCommands.js new file mode 100644 index 0000000..d0b9c7b --- /dev/null +++ b/dist/classes/ClientCommands.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const NetworkCommands_1 = require("./commands/NetworkCommands"); +const AssetCommands_1 = require("./commands/AssetCommands"); +const TeleportCommands_1 = require("./commands/TeleportCommands"); +const RegionCommands_1 = require("./commands/RegionCommands"); +const GridCommands_1 = require("./commands/GridCommands"); +const CommunicationsCommands_1 = require("./commands/CommunicationsCommands"); +const AgentCommands_1 = require("./commands/AgentCommands"); +const GroupCommands_1 = require("./commands/GroupCommands"); +class ClientCommands { + constructor(region, agent, bot) { + this.network = new NetworkCommands_1.NetworkCommands(region, agent, bot); + this.asset = new AssetCommands_1.AssetCommands(region, agent, bot); + this.teleport = new TeleportCommands_1.TeleportCommands(region, agent, bot); + this.region = new RegionCommands_1.RegionCommands(region, agent, bot); + this.grid = new GridCommands_1.GridCommands(region, agent, bot); + this.comms = new CommunicationsCommands_1.CommunicationsCommands(region, agent, bot); + this.agent = new AgentCommands_1.AgentCommands(region, agent, bot); + this.group = new GroupCommands_1.GroupCommands(region, agent, bot); + } +} +exports.ClientCommands = ClientCommands; +//# sourceMappingURL=ClientCommands.js.map \ No newline at end of file diff --git a/dist/classes/ClientCommands.js.map b/dist/classes/ClientCommands.js.map new file mode 100644 index 0000000..1783cf4 --- /dev/null +++ b/dist/classes/ClientCommands.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ClientCommands.js","sourceRoot":"","sources":["../../lib/classes/ClientCommands.ts"],"names":[],"mappings":";;AAGA,gEAA2D;AAC3D,4DAAuD;AACvD,kEAA6D;AAC7D,8DAAyD;AACzD,0DAAqD;AACrD,8EAAyE;AACzE,4DAAuD;AACvD,4DAAuD;AAEvD;IAWI,YAAY,MAAc,EAAE,KAAY,EAAE,GAAQ;QAE9C,IAAI,CAAC,OAAO,GAAG,IAAI,iCAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,GAAG,IAAI,6BAAa,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,GAAG,IAAI,mCAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,GAAG,IAAI,+BAAc,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,GAAG,IAAI,2BAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,GAAG,IAAI,+CAAsB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,GAAG,IAAI,6BAAa,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,GAAG,IAAI,6BAAa,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;CACJ;AAtBD,wCAsBC"} \ No newline at end of file diff --git a/dist/classes/ClientEvents.d.ts b/dist/classes/ClientEvents.d.ts index 08addc3..696b6c0 100644 --- a/dist/classes/ClientEvents.d.ts +++ b/dist/classes/ClientEvents.d.ts @@ -2,8 +2,17 @@ import { LureEvent } from '../events/LureEvent'; import { ChatEvent } from '../events/ChatEvent'; import { TeleportEvent } from '../events/TeleportEvent'; import { Subject } from 'rxjs/Subject'; +import { InstantMessageEvent } from '../events/InstantMessageEvent'; +import { GroupInviteEvent } from '../events/GroupInviteEvent'; +import { FriendRequestEvent } from '../events/FriendRequestEvent'; +import { DisconnectEvent } from '../events/DisconnectEvent'; export declare class ClientEvents { onNearbyChat: Subject; + onInstantMessage: Subject; + onGroupInvite: Subject; + onFriendRequest: Subject; onLure: Subject; onTeleportEvent: Subject; + onDisconnected: Subject; + onCircuitLatency: Subject; } diff --git a/dist/classes/ClientEvents.js b/dist/classes/ClientEvents.js index 2beca29..8aeec9f 100644 --- a/dist/classes/ClientEvents.js +++ b/dist/classes/ClientEvents.js @@ -4,8 +4,13 @@ const Subject_1 = require("rxjs/Subject"); class ClientEvents { constructor() { this.onNearbyChat = new Subject_1.Subject(); + this.onInstantMessage = new Subject_1.Subject(); + this.onGroupInvite = new Subject_1.Subject(); + this.onFriendRequest = new Subject_1.Subject(); this.onLure = new Subject_1.Subject(); this.onTeleportEvent = new Subject_1.Subject(); + this.onDisconnected = new Subject_1.Subject(); + this.onCircuitLatency = new Subject_1.Subject(); } } exports.ClientEvents = ClientEvents; diff --git a/dist/classes/ClientEvents.js.map b/dist/classes/ClientEvents.js.map index 2097ce3..6bfe9b0 100644 --- a/dist/classes/ClientEvents.js.map +++ b/dist/classes/ClientEvents.js.map @@ -1 +1 @@ -{"version":3,"file":"ClientEvents.js","sourceRoot":"","sources":["../../lib/classes/ClientEvents.ts"],"names":[],"mappings":";;AAGA,0CAAqC;AAErC;IAAA;QAEI,iBAAY,GAAuB,IAAI,iBAAO,EAAa,CAAC;QAC5D,WAAM,GAAuB,IAAI,iBAAO,EAAa,CAAC;QACtD,oBAAe,GAA2B,IAAI,iBAAO,EAAiB,CAAC;IAC3E,CAAC;CAAA;AALD,oCAKC"} \ No newline at end of file +{"version":3,"file":"ClientEvents.js","sourceRoot":"","sources":["../../lib/classes/ClientEvents.ts"],"names":[],"mappings":";;AAGA,0CAAqC;AAMrC;IAAA;QAEI,iBAAY,GAAuB,IAAI,iBAAO,EAAa,CAAC;QAC5D,qBAAgB,GAAiC,IAAI,iBAAO,EAAuB,CAAC;QACpF,kBAAa,GAA8B,IAAI,iBAAO,EAAoB,CAAC;QAC3E,oBAAe,GAAgC,IAAI,iBAAO,EAAsB,CAAC;QACjF,WAAM,GAAuB,IAAI,iBAAO,EAAa,CAAC;QACtD,oBAAe,GAA2B,IAAI,iBAAO,EAAiB,CAAC;QACvE,mBAAc,GAA8B,IAAI,iBAAO,EAAmB,CAAC;QAC3E,qBAAgB,GAAoB,IAAI,iBAAO,EAAU,CAAC;IAC9D,CAAC;CAAA;AAVD,oCAUC"} \ No newline at end of file diff --git a/dist/classes/Comms.d.ts b/dist/classes/Comms.d.ts index 7044cea..87a1746 100644 --- a/dist/classes/Comms.d.ts +++ b/dist/classes/Comms.d.ts @@ -1,20 +1,10 @@ import { Circuit } from './Circuit'; import { Agent } from './Agent'; -import { ChatType } from '../enums/ChatType'; -import { UUID } from './UUID'; import { ClientEvents } from './ClientEvents'; export declare class Comms { private circuit; private agent; private clientEvents; constructor(circuit: Circuit, agent: Agent, clientEvents: ClientEvents); - nearbyChat(message: string, type: ChatType, channel?: number): void; - say(message: string, channel?: number): void; - whisper(message: string, channel?: number): void; - shout(message: string, channel?: number): void; - startTypingLocal(): void; - stopTypingLocal(): void; - typeMessage(message: string): void; shutdown(): void; - sendInstantMessage(to: UUID | string, message: string): Promise; } diff --git a/dist/classes/Comms.js b/dist/classes/Comms.js index 5421771..8a12ca3 100644 --- a/dist/classes/Comms.js +++ b/dist/classes/Comms.js @@ -1,16 +1,13 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Message_1 = require("../enums/Message"); -const ImprovedInstantMessage_1 = require("./messages/ImprovedInstantMessage"); -const ChatType_1 = require("../enums/ChatType"); const Utils_1 = require("./Utils"); -const ChatFromViewer_1 = require("./messages/ChatFromViewer"); -const PacketFlags_1 = require("../enums/PacketFlags"); const ChatEvent_1 = require("../events/ChatEvent"); -const UUID_1 = require("./UUID"); const InstantMessageDialog_1 = require("../enums/InstantMessageDialog"); const LureEvent_1 = require("../events/LureEvent"); -const Vector3_1 = require("./Vector3"); +const InstantMessageEvent_1 = require("../events/InstantMessageEvent"); +const ChatSourceType_1 = require("../enums/ChatSourceType"); +const InstantMessageEventFlags_1 = require("../enums/InstantMessageEventFlags"); class Comms { constructor(circuit, agent, clientEvents) { this.clientEvents = clientEvents; @@ -26,7 +23,18 @@ class Comms { const im = packet.message; switch (im.MessageBlock.Dialog) { case InstantMessageDialog_1.InstantMessageDialog.MessageFromAgent: - break; + { + console.log(im); + const imEvent = new InstantMessageEvent_1.InstantMessageEvent(); + imEvent.source = ChatSourceType_1.ChatSourceType.Agent; + imEvent.from = im.AgentData.AgentID; + imEvent.owner = im.AgentData.AgentID; + imEvent.fromName = Utils_1.Utils.BufferToStringSimple(im.MessageBlock.FromAgentName); + imEvent.message = Utils_1.Utils.BufferToStringSimple(im.MessageBlock.Message); + imEvent.flags = InstantMessageEventFlags_1.InstantMessageEventFlags.normal; + this.clientEvents.onInstantMessage.next(imEvent); + break; + } case InstantMessageDialog_1.InstantMessageDialog.MessageBox: break; case InstantMessageDialog_1.InstantMessageDialog.GroupInvitation: @@ -44,14 +52,36 @@ class Comms { case InstantMessageDialog_1.InstantMessageDialog.TaskInventoryDeclined: break; case InstantMessageDialog_1.InstantMessageDialog.MessageFromObject: - break; + { + console.log(im); + const imEvent = new InstantMessageEvent_1.InstantMessageEvent(); + imEvent.source = ChatSourceType_1.ChatSourceType.Object; + imEvent.owner = im.AgentData.AgentID; + imEvent.from = im.MessageBlock.ID; + imEvent.fromName = Utils_1.Utils.BufferToStringSimple(im.MessageBlock.FromAgentName); + imEvent.message = Utils_1.Utils.BufferToStringSimple(im.MessageBlock.Message); + imEvent.flags = InstantMessageEventFlags_1.InstantMessageEventFlags.normal; + this.clientEvents.onInstantMessage.next(imEvent); + break; + } case InstantMessageDialog_1.InstantMessageDialog.BusyAutoResponse: - break; + { + const imEvent = new InstantMessageEvent_1.InstantMessageEvent(); + imEvent.source = ChatSourceType_1.ChatSourceType.Agent; + imEvent.from = im.AgentData.AgentID; + imEvent.owner = im.AgentData.AgentID; + imEvent.fromName = Utils_1.Utils.BufferToStringSimple(im.MessageBlock.FromAgentName); + imEvent.message = Utils_1.Utils.BufferToStringSimple(im.MessageBlock.Message); + imEvent.flags = InstantMessageEventFlags_1.InstantMessageEventFlags.busyResponse; + this.clientEvents.onInstantMessage.next(imEvent); + break; + } case InstantMessageDialog_1.InstantMessageDialog.ConsoleAndChatHistory: break; case InstantMessageDialog_1.InstantMessageDialog.RequestTeleport: const lureEvent = new LureEvent_1.LureEvent(); const extraData = Utils_1.Utils.BufferToStringSimple(im.MessageBlock.BinaryBucket).split('|'); + lureEvent.from = im.AgentData.AgentID; lureEvent.fromName = Utils_1.Utils.BufferToStringSimple(im.MessageBlock.FromAgentName); lureEvent.lureMessage = Utils_1.Utils.BufferToStringSimple(im.MessageBlock.Message); lureEvent.regionID = im.MessageBlock.RegionID; @@ -90,9 +120,29 @@ class Comms { case InstantMessageDialog_1.InstantMessageDialog.FriendshipDeclined: break; case InstantMessageDialog_1.InstantMessageDialog.StartTyping: - break; + { + const imEvent = new InstantMessageEvent_1.InstantMessageEvent(); + imEvent.source = ChatSourceType_1.ChatSourceType.Agent; + imEvent.from = im.AgentData.AgentID; + imEvent.owner = im.AgentData.AgentID; + imEvent.fromName = Utils_1.Utils.BufferToStringSimple(im.MessageBlock.FromAgentName); + imEvent.message = ''; + imEvent.flags = InstantMessageEventFlags_1.InstantMessageEventFlags.startTyping; + this.clientEvents.onInstantMessage.next(imEvent); + break; + } case InstantMessageDialog_1.InstantMessageDialog.StopTyping: - break; + { + const imEvent = new InstantMessageEvent_1.InstantMessageEvent(); + imEvent.source = ChatSourceType_1.ChatSourceType.Agent; + imEvent.from = im.AgentData.AgentID; + imEvent.owner = im.AgentData.AgentID; + imEvent.fromName = Utils_1.Utils.BufferToStringSimple(im.MessageBlock.FromAgentName); + imEvent.message = ''; + imEvent.flags = InstantMessageEventFlags_1.InstantMessageEventFlags.finishTyping; + this.clientEvents.onInstantMessage.next(imEvent); + break; + } } break; case Message_1.Message.ChatFromSimulator: @@ -110,113 +160,18 @@ class Comms { break; case Message_1.Message.AlertMessage: const alertm = packet.message; - let alertMessage = Utils_1.Utils.BufferToStringSimple(alertm.AlertData.Message); + const alertMessage = Utils_1.Utils.BufferToStringSimple(alertm.AlertData.Message); console.log('Alert message: ' + alertMessage); alertm.AlertInfo.forEach((info) => { - let alertInfoMessage = Utils_1.Utils.BufferToStringSimple(info.Message); + const alertInfoMessage = Utils_1.Utils.BufferToStringSimple(info.Message); console.log('Alert info message: ' + alertInfoMessage); }); break; } }); } - nearbyChat(message, type, channel) { - if (channel === undefined) { - channel = 0; - } - const cfv = new ChatFromViewer_1.ChatFromViewerMessage(); - cfv.AgentData = { - AgentID: this.agent.agentID, - SessionID: this.circuit.sessionID - }; - cfv.ChatData = { - Message: Utils_1.Utils.StringToBuffer(message), - Type: type, - Channel: channel - }; - this.circuit.sendMessage(cfv, PacketFlags_1.PacketFlags.Reliable); - } - say(message, channel) { - this.nearbyChat(message, ChatType_1.ChatType.Normal, channel); - } - whisper(message, channel) { - this.nearbyChat(message, ChatType_1.ChatType.Whisper, channel); - } - shout(message, channel) { - this.nearbyChat(message, ChatType_1.ChatType.Shout, channel); - } - startTypingLocal() { - const cfv = new ChatFromViewer_1.ChatFromViewerMessage(); - cfv.AgentData = { - AgentID: this.agent.agentID, - SessionID: this.circuit.sessionID - }; - cfv.ChatData = { - Message: Buffer.allocUnsafe(0), - Type: ChatType_1.ChatType.StartTyping, - Channel: 0 - }; - this.circuit.sendMessage(cfv, PacketFlags_1.PacketFlags.Reliable); - } - stopTypingLocal() { - const cfv = new ChatFromViewer_1.ChatFromViewerMessage(); - cfv.AgentData = { - AgentID: this.agent.agentID, - SessionID: this.circuit.sessionID - }; - cfv.ChatData = { - Message: Buffer.allocUnsafe(0), - Type: ChatType_1.ChatType.StopTyping, - Channel: 0 - }; - this.circuit.sendMessage(cfv, PacketFlags_1.PacketFlags.Reliable); - } - typeMessage(message) { - this.startTypingLocal(); - this.agent.startAnimations([new UUID_1.UUID('c541c47f-e0c0-058b-ad1a-d6ae3a4584d9')]).then(() => { - const timeToWait = (message.length / 5) * 1000; - setTimeout(() => { - this.stopTypingLocal(); - this.agent.stopAnimations([new UUID_1.UUID('c541c47f-e0c0-058b-ad1a-d6ae3a4584d9')]).then(() => { - this.say(message); - }); - }, timeToWait); - }); - } shutdown() { } - sendInstantMessage(to, message) { - const circuit = this.circuit; - if (typeof to === 'string') { - to = new UUID_1.UUID(to); - } - message += '\0'; - const agentName = this.agent.firstName + ' ' + this.agent.lastName; - const im = new ImprovedInstantMessage_1.ImprovedInstantMessageMessage(); - im.AgentData = { - AgentID: this.agent.agentID, - SessionID: circuit.sessionID - }; - im.MessageBlock = { - FromGroup: false, - ToAgentID: to, - ParentEstateID: 0, - RegionID: UUID_1.UUID.zero(), - Position: Vector3_1.Vector3.getZero(), - Offline: 0, - Dialog: 0, - ID: UUID_1.UUID.zero(), - Timestamp: 0, - FromAgentName: Utils_1.Utils.StringToBuffer(agentName), - Message: Utils_1.Utils.StringToBuffer(message), - BinaryBucket: Buffer.allocUnsafe(0) - }; - im.EstateBlock = { - EstateID: 0 - }; - const sequenceNo = circuit.sendMessage(im, PacketFlags_1.PacketFlags.Reliable); - return circuit.waitForAck(sequenceNo, 10000); - } } exports.Comms = Comms; //# sourceMappingURL=Comms.js.map \ No newline at end of file diff --git a/dist/classes/Comms.js.map b/dist/classes/Comms.js.map index fc9cd0a..9df2718 100644 --- a/dist/classes/Comms.js.map +++ b/dist/classes/Comms.js.map @@ -1 +1 @@ -{"version":3,"file":"Comms.js","sourceRoot":"","sources":["../../lib/classes/Comms.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Comms.js","sourceRoot":"","sources":["../../lib/classes/Comms.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/classes/IPAddress.js b/dist/classes/IPAddress.js index 0f5d3b3..92cb3ea 100644 --- a/dist/classes/IPAddress.js +++ b/dist/classes/IPAddress.js @@ -5,19 +5,29 @@ class IPAddress { constructor(buf, pos) { this.ip = null; this.toString = () => { - return this.ip.toString(); - }; - if (buf !== undefined && buf instanceof Buffer) { - if (pos !== undefined) { - const bytes = buf.slice(pos, 4); - this.ip = ipaddr.fromByteArray(bytes); + try { + return this.ip.toString(); } - else { - if (ipaddr.isValid(buf)) { - this.ip = ipaddr.parse(buf); + catch (ignore) { + return ''; + } + }; + try { + if (buf !== undefined && buf instanceof Buffer) { + if (pos !== undefined) { + const bytes = buf.slice(pos, 4); + this.ip = ipaddr.fromByteArray(bytes); + } + else { + if (ipaddr.isValid(buf)) { + this.ip = ipaddr.parse(buf); + } } } } + catch (ignore) { + this.ip = ipaddr.parse('0.0.0.0'); + } } static zero() { return new IPAddress('0.0.0.0'); diff --git a/dist/classes/IPAddress.js.map b/dist/classes/IPAddress.js.map index 688841c..06cdbe6 100644 --- a/dist/classes/IPAddress.js.map +++ b/dist/classes/IPAddress.js.map @@ -1 +1 @@ -{"version":3,"file":"IPAddress.js","sourceRoot":"","sources":["../../lib/classes/IPAddress.ts"],"names":[],"mappings":";;AAAA,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAEpC;IAYI,YAAY,GAAqB,EAAE,GAAY;QAV/C,OAAE,GAAQ,IAAI,CAAC;QAMR,aAAQ,GAAG,GAAW,EAAE;YAE3B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC,CAAC;QAGE,EAAE,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,YAAY,MAAM,CAAC,CAC/C,CAAC;YACG,EAAE,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CACtB,CAAC;gBACG,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAChC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1C,CAAC;YACD,IAAI,CACJ,CAAC;gBACG,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CACxB,CAAC;oBACG,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAChC,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAzBD,MAAM,CAAC,IAAI;QAEP,MAAM,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAuBD,aAAa,CAAC,GAAW,EAAE,GAAW;QAElC,MAAM,KAAK,GAAe,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAChD,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAChC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAChC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAChC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;CACJ;AAtCD,8BAsCC"} \ No newline at end of file +{"version":3,"file":"IPAddress.js","sourceRoot":"","sources":["../../lib/classes/IPAddress.ts"],"names":[],"mappings":";;AAAA,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAEpC;IAmBI,YAAY,GAAqB,EAAE,GAAY;QAjB/C,OAAE,GAAQ,IAAI,CAAC;QAMR,aAAQ,GAAG,GAAW,EAAE;YAE3B,IACA,CAAC;gBACG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;YAC9B,CAAC;YACD,KAAK,CAAC,CAAC,MAAM,CAAC,CACd,CAAC;gBACG,MAAM,CAAC,EAAE,CAAC;YACd,CAAC;QACL,CAAC,CAAC;QAGE,IACA,CAAC;YACG,EAAE,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,YAAY,MAAM,CAAC,CAC/C,CAAC;gBACG,EAAE,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CACtB,CAAC;oBACG,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBAChC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC1C,CAAC;gBACD,IAAI,CACJ,CAAC;oBACG,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CACxB,CAAC;wBACG,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAChC,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QACD,KAAK,CAAC,CAAC,MAAM,CAAC,CACd,CAAC;YACG,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;IAvCD,MAAM,CAAC,IAAI;QAEP,MAAM,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAqCD,aAAa,CAAC,GAAW,EAAE,GAAW;QAElC,MAAM,KAAK,GAAe,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QAChD,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAChC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAChC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAChC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;CACJ;AApDD,8BAoDC"} \ No newline at end of file diff --git a/dist/classes/commands/AgentCommands.d.ts b/dist/classes/commands/AgentCommands.d.ts new file mode 100644 index 0000000..a97129d --- /dev/null +++ b/dist/classes/commands/AgentCommands.d.ts @@ -0,0 +1,7 @@ +import { UUID } from '../UUID'; +import { CommandsBase } from './CommandsBase'; +export declare class AgentCommands extends CommandsBase { + private animate(anim, run); + startAnimations(anim: UUID[]): Promise; + stopAnimations(anim: UUID[]): Promise; +} diff --git a/dist/classes/commands/AgentCommands.js b/dist/classes/commands/AgentCommands.js new file mode 100644 index 0000000..3e9a1ba --- /dev/null +++ b/dist/classes/commands/AgentCommands.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const AgentAnimation_1 = require("../messages/AgentAnimation"); +const PacketFlags_1 = require("../../enums/PacketFlags"); +const CommandsBase_1 = require("./CommandsBase"); +class AgentCommands extends CommandsBase_1.CommandsBase { + animate(anim, run) { + const circuit = this.currentRegion.circuit; + const animPacket = new AgentAnimation_1.AgentAnimationMessage(); + animPacket.AgentData = { + AgentID: this.agent.agentID, + SessionID: circuit.sessionID + }; + animPacket.PhysicalAvatarEventList = []; + animPacket.AnimationList = []; + anim.forEach((a) => { + animPacket.AnimationList.push({ + AnimID: a, + StartAnim: run + }); + }); + return circuit.waitForAck(circuit.sendMessage(animPacket, PacketFlags_1.PacketFlags.Reliable), 10000); + } + startAnimations(anim) { + return this.animate(anim, true); + } + stopAnimations(anim) { + return this.animate(anim, false); + } +} +exports.AgentCommands = AgentCommands; +//# sourceMappingURL=AgentCommands.js.map \ No newline at end of file diff --git a/dist/classes/commands/AgentCommands.js.map b/dist/classes/commands/AgentCommands.js.map new file mode 100644 index 0000000..88a53c9 --- /dev/null +++ b/dist/classes/commands/AgentCommands.js.map @@ -0,0 +1 @@ +{"version":3,"file":"AgentCommands.js","sourceRoot":"","sources":["../../../lib/classes/commands/AgentCommands.ts"],"names":[],"mappings":";;AACA,+DAAiE;AACjE,yDAAoD;AACpD,iDAA4C;AAE5C,mBAA2B,SAAQ,2BAAY;IAEnC,OAAO,CAAC,IAAY,EAAE,GAAY;QAGtC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,sCAAqB,EAAE,CAAC;QAC/C,UAAU,CAAC,SAAS,GAAG;YACnB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;YAC3B,SAAS,EAAE,OAAO,CAAC,SAAS;SAC/B,CAAC;QACF,UAAU,CAAC,uBAAuB,GAAG,EAAE,CAAC;QACxC,UAAU,CAAC,aAAa,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAEf,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,CAAC;gBACT,SAAS,EAAE,GAAG;aACjB,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,yBAAW,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5F,CAAC;IAED,eAAe,CAAC,IAAY;QAExB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,cAAc,CAAC,IAAY;QAEvB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;CACJ;AAjCD,sCAiCC"} \ No newline at end of file diff --git a/dist/classes/commands/AssetCommands.d.ts b/dist/classes/commands/AssetCommands.d.ts new file mode 100644 index 0000000..6e07ee7 --- /dev/null +++ b/dist/classes/commands/AssetCommands.d.ts @@ -0,0 +1,8 @@ +/// +import { CommandsBase } from './CommandsBase'; +import { HTTPAssets } from '../../enums/HTTPAssets'; +import { UUID } from '../UUID'; +export declare class AssetCommands extends CommandsBase { + downloadAsset(type: HTTPAssets, uuid: UUID): Promise; + uploadAsset(type: HTTPAssets, data: Buffer, name: string, description: string): Promise; +} diff --git a/dist/classes/commands/AssetCommands.js b/dist/classes/commands/AssetCommands.js new file mode 100644 index 0000000..176e6eb --- /dev/null +++ b/dist/classes/commands/AssetCommands.js @@ -0,0 +1,41 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const CommandsBase_1 = require("./CommandsBase"); +const UUID_1 = require("../UUID"); +const LLSD = require("llsd"); +const Utils_1 = require("../Utils"); +class AssetCommands extends CommandsBase_1.CommandsBase { + downloadAsset(type, uuid) { + return this.currentRegion.caps.downloadAsset(uuid, type); + } + uploadAsset(type, data, name, description) { + return new Promise((resolve, reject) => { + if (this.agent && this.agent.inventory && this.agent.inventory.main && this.agent.inventory.main.root) { + this.currentRegion.caps.capsRequestXML('NewFileAgentInventory', { + 'folder_id': new LLSD.UUID(this.agent.inventory.main.root.toString()), + 'asset_type': type, + 'inventory_type': Utils_1.Utils.HTTPAssetTypeToInventoryType(type), + 'name': name, + 'description': description, + 'everyone_mask': (1 << 13) | (1 << 14) | (1 << 15) | (1 << 19), + 'group_mask': (1 << 13) | (1 << 14) | (1 << 15) | (1 << 19), + 'next_owner_mask': (1 << 13) | (1 << 14) | (1 << 15) | (1 << 19), + 'expected_upload_cost': 0 + }).then((response) => { + if (response['state'] === 'upload') { + const uploadURL = response['uploader']; + this.currentRegion.caps.capsRequestUpload(uploadURL, data).then((responseUpload) => { + resolve(new UUID_1.UUID(responseUpload['new_asset'].toString())); + }).catch((err) => { + reject(err); + }); + } + }).catch((err) => { + console.log(err); + }); + } + }); + } +} +exports.AssetCommands = AssetCommands; +//# sourceMappingURL=AssetCommands.js.map \ No newline at end of file diff --git a/dist/classes/commands/AssetCommands.js.map b/dist/classes/commands/AssetCommands.js.map new file mode 100644 index 0000000..ed726f5 --- /dev/null +++ b/dist/classes/commands/AssetCommands.js.map @@ -0,0 +1 @@ +{"version":3,"file":"AssetCommands.js","sourceRoot":"","sources":["../../../lib/classes/commands/AssetCommands.ts"],"names":[],"mappings":";;AAAA,iDAA4C;AAE5C,kCAA6B;AAC7B,6BAA6B;AAC7B,oCAA+B;AAE/B,mBAA2B,SAAQ,2BAAY;IAE3C,aAAa,CAAC,IAAgB,EAAE,IAAU;QAEtC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,WAAW,CAAC,IAAgB,EAAE,IAAY,EAAE,IAAY,EAAE,WAAmB;QAEzE,MAAM,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAEzC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CACtG,CAAC;gBACG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,uBAAuB,EAAE;oBAC5D,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACrE,YAAY,EAAE,IAAI;oBAClB,gBAAgB,EAAE,aAAK,CAAC,4BAA4B,CAAC,IAAI,CAAC;oBAC1D,MAAM,EAAE,IAAI;oBACZ,aAAa,EAAE,WAAW;oBAC1B,eAAe,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC9D,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC3D,iBAAiB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;oBAChE,sBAAsB,EAAE,CAAC;iBAC5B,CAAC,CAAC,IAAI,CAAC,CAAC,QAAa,EAAE,EAAE;oBAEtB,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CACnC,CAAC;wBACG,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;wBACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,cAAmB,EAAE,EAAE;4BAEpF,OAAO,CAAC,IAAI,WAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;wBAC9D,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;4BAEb,MAAM,CAAC,GAAG,CAAC,CAAC;wBAChB,CAAC,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBAEb,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrB,CAAC,CAAC,CAAA;YACN,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AA3CD,sCA2CC"} \ No newline at end of file diff --git a/dist/classes/commands/CommandsBase.d.ts b/dist/classes/commands/CommandsBase.d.ts new file mode 100644 index 0000000..0b1f9dc --- /dev/null +++ b/dist/classes/commands/CommandsBase.d.ts @@ -0,0 +1,11 @@ +import { Region } from '../Region'; +import { Bot } from '../../Bot'; +import { Agent } from '../Agent'; +import { Circuit } from '../Circuit'; +export declare class CommandsBase { + protected currentRegion: Region; + protected agent: Agent; + protected bot: Bot; + protected circuit: Circuit; + constructor(region: Region, agent: Agent, bot: Bot); +} diff --git a/dist/classes/commands/CommandsBase.js b/dist/classes/commands/CommandsBase.js new file mode 100644 index 0000000..5d60602 --- /dev/null +++ b/dist/classes/commands/CommandsBase.js @@ -0,0 +1,12 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +class CommandsBase { + constructor(region, agent, bot) { + this.currentRegion = region; + this.agent = agent; + this.bot = bot; + this.circuit = this.currentRegion.circuit; + } +} +exports.CommandsBase = CommandsBase; +//# sourceMappingURL=CommandsBase.js.map \ No newline at end of file diff --git a/dist/classes/commands/CommandsBase.js.map b/dist/classes/commands/CommandsBase.js.map new file mode 100644 index 0000000..244af5b --- /dev/null +++ b/dist/classes/commands/CommandsBase.js.map @@ -0,0 +1 @@ +{"version":3,"file":"CommandsBase.js","sourceRoot":"","sources":["../../../lib/classes/commands/CommandsBase.ts"],"names":[],"mappings":";;AAKA;IAOI,YAAY,MAAc,EAAE,KAAY,EAAE,GAAQ;QAE9C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;IAC9C,CAAC;CACJ;AAdD,oCAcC"} \ No newline at end of file diff --git a/dist/classes/commands/CommunicationsCommands.d.ts b/dist/classes/commands/CommunicationsCommands.d.ts new file mode 100644 index 0000000..b2b4a1e --- /dev/null +++ b/dist/classes/commands/CommunicationsCommands.d.ts @@ -0,0 +1,16 @@ +import { CommandsBase } from './CommandsBase'; +import { UUID } from '../UUID'; +import { ChatType } from '../../enums/ChatType'; +export declare class CommunicationsCommands extends CommandsBase { + sendInstantMessage(to: UUID | string, message: string): Promise; + nearbyChat(message: string, type: ChatType, channel?: number): Promise; + say(message: string, channel?: number): Promise; + whisper(message: string, channel?: number): Promise; + shout(message: string, channel?: number): Promise; + startTypingLocal(): Promise; + stopTypingLocal(): Promise; + startTypingIM(to: UUID | string): Promise; + stopTypingIM(to: UUID | string): Promise; + typeInstantMessage(to: UUID | string, message: string, thinkingTime?: number, charactersPerSecond?: number): Promise; + typeLocalMessage(message: string, thinkingTime?: number, charactersPerSecond?: number): Promise; +} diff --git a/dist/classes/commands/CommunicationsCommands.js b/dist/classes/commands/CommunicationsCommands.js new file mode 100644 index 0000000..49abce3 --- /dev/null +++ b/dist/classes/commands/CommunicationsCommands.js @@ -0,0 +1,242 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const CommandsBase_1 = require("./CommandsBase"); +const UUID_1 = require("../UUID"); +const Utils_1 = require("../Utils"); +const PacketFlags_1 = require("../../enums/PacketFlags"); +const ImprovedInstantMessage_1 = require("../messages/ImprovedInstantMessage"); +const Vector3_1 = require("../Vector3"); +const ChatFromViewer_1 = require("../messages/ChatFromViewer"); +const ChatType_1 = require("../../enums/ChatType"); +const InstantMessageDialog_1 = require("../../enums/InstantMessageDialog"); +class CommunicationsCommands extends CommandsBase_1.CommandsBase { + sendInstantMessage(to, message) { + const circuit = this.circuit; + if (typeof to === 'string') { + to = new UUID_1.UUID(to); + } + const agentName = this.agent.firstName + ' ' + this.agent.lastName; + const im = new ImprovedInstantMessage_1.ImprovedInstantMessageMessage(); + im.AgentData = { + AgentID: this.agent.agentID, + SessionID: circuit.sessionID + }; + im.MessageBlock = { + FromGroup: false, + ToAgentID: to, + ParentEstateID: 0, + RegionID: UUID_1.UUID.zero(), + Position: Vector3_1.Vector3.getZero(), + Offline: 1, + Dialog: 0, + ID: UUID_1.UUID.zero(), + Timestamp: 0, + FromAgentName: Utils_1.Utils.StringToBuffer(agentName), + Message: Utils_1.Utils.StringToBuffer(message), + BinaryBucket: Buffer.allocUnsafe(0) + }; + im.EstateBlock = { + EstateID: 0 + }; + const sequenceNo = circuit.sendMessage(im, PacketFlags_1.PacketFlags.Reliable); + return circuit.waitForAck(sequenceNo, 10000); + } + nearbyChat(message, type, channel) { + if (channel === undefined) { + channel = 0; + } + const cfv = new ChatFromViewer_1.ChatFromViewerMessage(); + cfv.AgentData = { + AgentID: this.agent.agentID, + SessionID: this.circuit.sessionID + }; + cfv.ChatData = { + Message: Utils_1.Utils.StringToBuffer(message), + Type: type, + Channel: channel + }; + const sequenceNo = this.circuit.sendMessage(cfv, PacketFlags_1.PacketFlags.Reliable); + return this.circuit.waitForAck(sequenceNo, 10000); + } + say(message, channel) { + return this.nearbyChat(message, ChatType_1.ChatType.Normal, channel); + } + whisper(message, channel) { + return this.nearbyChat(message, ChatType_1.ChatType.Whisper, channel); + } + shout(message, channel) { + return this.nearbyChat(message, ChatType_1.ChatType.Shout, channel); + } + startTypingLocal() { + const cfv = new ChatFromViewer_1.ChatFromViewerMessage(); + cfv.AgentData = { + AgentID: this.agent.agentID, + SessionID: this.circuit.sessionID + }; + cfv.ChatData = { + Message: Buffer.allocUnsafe(0), + Type: ChatType_1.ChatType.StartTyping, + Channel: 0 + }; + const sequenceNo = this.circuit.sendMessage(cfv, PacketFlags_1.PacketFlags.Reliable); + return this.circuit.waitForAck(sequenceNo, 10000); + } + stopTypingLocal() { + const cfv = new ChatFromViewer_1.ChatFromViewerMessage(); + cfv.AgentData = { + AgentID: this.agent.agentID, + SessionID: this.circuit.sessionID + }; + cfv.ChatData = { + Message: Buffer.allocUnsafe(0), + Type: ChatType_1.ChatType.StopTyping, + Channel: 0 + }; + const sequenceNo = this.circuit.sendMessage(cfv, PacketFlags_1.PacketFlags.Reliable); + return this.circuit.waitForAck(sequenceNo, 10000); + } + startTypingIM(to) { + if (typeof to === 'string') { + to = new UUID_1.UUID(to); + } + const circuit = this.circuit; + const agentName = this.agent.firstName + ' ' + this.agent.lastName; + const im = new ImprovedInstantMessage_1.ImprovedInstantMessageMessage(); + im.AgentData = { + AgentID: this.agent.agentID, + SessionID: circuit.sessionID + }; + im.MessageBlock = { + FromGroup: false, + ToAgentID: to, + ParentEstateID: 0, + RegionID: UUID_1.UUID.zero(), + Position: Vector3_1.Vector3.getZero(), + Offline: 0, + Dialog: InstantMessageDialog_1.InstantMessageDialog.StartTyping, + ID: UUID_1.UUID.zero(), + Timestamp: 0, + FromAgentName: Utils_1.Utils.StringToBuffer(agentName), + Message: Utils_1.Utils.StringToBuffer(''), + BinaryBucket: Buffer.allocUnsafe(0) + }; + im.EstateBlock = { + EstateID: 0 + }; + const sequenceNo = circuit.sendMessage(im, PacketFlags_1.PacketFlags.Reliable); + return circuit.waitForAck(sequenceNo, 10000); + } + stopTypingIM(to) { + if (typeof to === 'string') { + to = new UUID_1.UUID(to); + } + const circuit = this.circuit; + const agentName = this.agent.firstName + ' ' + this.agent.lastName; + const im = new ImprovedInstantMessage_1.ImprovedInstantMessageMessage(); + im.AgentData = { + AgentID: this.agent.agentID, + SessionID: circuit.sessionID + }; + im.MessageBlock = { + FromGroup: false, + ToAgentID: to, + ParentEstateID: 0, + RegionID: UUID_1.UUID.zero(), + Position: Vector3_1.Vector3.getZero(), + Offline: 0, + Dialog: InstantMessageDialog_1.InstantMessageDialog.StopTyping, + ID: UUID_1.UUID.zero(), + Timestamp: 0, + FromAgentName: Utils_1.Utils.StringToBuffer(agentName), + Message: Utils_1.Utils.StringToBuffer(''), + BinaryBucket: Buffer.allocUnsafe(0) + }; + im.EstateBlock = { + EstateID: 0 + }; + const sequenceNo = circuit.sendMessage(im, PacketFlags_1.PacketFlags.Reliable); + return circuit.waitForAck(sequenceNo, 10000); + } + typeInstantMessage(to, message, thinkingTime, charactersPerSecond) { + return new Promise((resolve, reject) => { + if (thinkingTime === undefined) { + thinkingTime = 2000; + } + setTimeout(() => { + if (typeof to === 'string') { + to = new UUID_1.UUID(to); + } + let typeTimer = null; + this.startTypingIM(to).then(() => { + typeTimer = setInterval(() => { + this.startTypingIM(to).catch(() => { + }); + }, 5000); + if (charactersPerSecond === undefined) { + charactersPerSecond = 5; + } + const timeToWait = (message.length / charactersPerSecond) * 1000; + setTimeout(() => { + if (typeTimer !== null) { + clearInterval(typeTimer); + typeTimer = null; + } + this.stopTypingIM(to).then(() => { + this.sendInstantMessage(to, message).then(() => { + resolve(); + }).catch((err) => { + reject(err); + }); + }).catch((err) => { + reject(err); + }); + }, timeToWait); + }).catch((err) => { + if (typeTimer !== null) { + clearInterval(typeTimer); + typeTimer = null; + } + reject(err); + }); + }, thinkingTime); + }); + } + typeLocalMessage(message, thinkingTime, charactersPerSecond) { + return new Promise((resolve, reject) => { + if (thinkingTime === undefined) { + thinkingTime = 0; + } + setTimeout(() => { + this.startTypingLocal().then(() => { + this.bot.clientCommands.agent.startAnimations([new UUID_1.UUID('c541c47f-e0c0-058b-ad1a-d6ae3a4584d9')]).then(() => { + if (charactersPerSecond === undefined) { + charactersPerSecond = 5; + } + const timeToWait = (message.length / charactersPerSecond) * 1000; + setTimeout(() => { + this.stopTypingLocal().then(() => { + this.bot.clientCommands.agent.stopAnimations([new UUID_1.UUID('c541c47f-e0c0-058b-ad1a-d6ae3a4584d9')]).then(() => { + this.say(message).then(() => { + resolve(); + }).catch((err) => { + reject(err); + }); + }).catch((err) => { + reject(err); + }); + }).catch((err) => { + reject(err); + }); + }, timeToWait); + }).catch((err) => { + reject(err); + }); + }).catch((err) => { + reject(err); + }); + }, thinkingTime); + }); + } +} +exports.CommunicationsCommands = CommunicationsCommands; +//# sourceMappingURL=CommunicationsCommands.js.map \ No newline at end of file diff --git a/dist/classes/commands/CommunicationsCommands.js.map b/dist/classes/commands/CommunicationsCommands.js.map new file mode 100644 index 0000000..972e642 --- /dev/null +++ b/dist/classes/commands/CommunicationsCommands.js.map @@ -0,0 +1 @@ +{"version":3,"file":"CommunicationsCommands.js","sourceRoot":"","sources":["../../../lib/classes/commands/CommunicationsCommands.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/classes/commands/GridCommands.d.ts b/dist/classes/commands/GridCommands.d.ts new file mode 100644 index 0000000..ea2ae0d --- /dev/null +++ b/dist/classes/commands/GridCommands.d.ts @@ -0,0 +1,9 @@ +/// +import { MapInfoReply } from '../../events/MapInfoReply'; +import * as Long from 'long'; +import { UUID } from '../UUID'; +import { CommandsBase } from './CommandsBase'; +export declare class GridCommands extends CommandsBase { + getRegionHandle(regionID: UUID): Promise; + getRegionMapInfo(gridX: number, gridY: number): Promise; +} diff --git a/dist/classes/commands/GridCommands.js b/dist/classes/commands/GridCommands.js new file mode 100644 index 0000000..c5e7843 --- /dev/null +++ b/dist/classes/commands/GridCommands.js @@ -0,0 +1,114 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const MapInfoReply_1 = require("../../events/MapInfoReply"); +const RegionHandleRequest_1 = require("../messages/RegionHandleRequest"); +const Message_1 = require("../../enums/Message"); +const MapBlockRequest_1 = require("../messages/MapBlockRequest"); +const MapItemRequest_1 = require("../messages/MapItemRequest"); +const Utils_1 = require("../Utils"); +const PacketFlags_1 = require("../../enums/PacketFlags"); +const GridItemType_1 = require("../../enums/GridItemType"); +const CommandsBase_1 = require("./CommandsBase"); +class GridCommands extends CommandsBase_1.CommandsBase { + getRegionHandle(regionID) { + return new Promise((resolve, reject) => { + const circuit = this.currentRegion.circuit; + const msg = new RegionHandleRequest_1.RegionHandleRequestMessage(); + msg.RequestBlock = { + RegionID: regionID, + }; + circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable); + circuit.waitForMessage(Message_1.Message.RegionIDAndHandleReply, 10000, (packet) => { + const filterMsg = packet.message; + return (filterMsg.ReplyBlock.RegionID.toString() === regionID.toString()); + }).then((packet) => { + const responseMsg = packet.message; + resolve(responseMsg.ReplyBlock.RegionHandle); + }); + }); + } + getRegionMapInfo(gridX, gridY) { + return new Promise((resolve, reject) => { + const circuit = this.currentRegion.circuit; + const response = new MapInfoReply_1.MapInfoReply(); + const msg = new MapBlockRequest_1.MapBlockRequestMessage(); + msg.AgentData = { + AgentID: this.agent.agentID, + SessionID: circuit.sessionID, + Flags: 65536, + EstateID: 0, + Godlike: true + }; + msg.PositionData = { + MinX: (gridX / 256), + MaxX: (gridX / 256), + MinY: (gridY / 256), + MaxY: (gridY / 256) + }; + circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable); + circuit.waitForMessage(Message_1.Message.MapBlockReply, 10000, (packet) => { + const filterMsg = packet.message; + let found = false; + filterMsg.Data.forEach((data) => { + if (data.X === (gridX / 256) && data.Y === (gridY / 256)) { + found = true; + } + }); + return found; + }).then((packet) => { + const responseMsg = packet.message; + responseMsg.Data.forEach((data) => { + if (data.X === (gridX / 256) && data.Y === (gridY / 256)) { + response.name = Utils_1.Utils.BufferToStringSimple(data.Name); + response.accessFlags = data.Access; + response.mapImage = data.MapImageID; + } + }); + const regionHandle = Utils_1.Utils.RegionCoordinatesToHandle(gridX, gridY); + const mi = new MapItemRequest_1.MapItemRequestMessage(); + mi.AgentData = { + AgentID: this.agent.agentID, + SessionID: circuit.sessionID, + Flags: 2, + EstateID: 0, + Godlike: false + }; + mi.RequestData = { + ItemType: GridItemType_1.GridItemType.AgentLocations, + RegionHandle: regionHandle + }; + circuit.sendMessage(mi, PacketFlags_1.PacketFlags.Reliable); + const minX = Math.floor(gridX / 256) * 256; + const maxX = minX + 256; + const minY = Math.floor(gridY / 256) * 256; + const maxY = minY + 256; + response.avatars = []; + circuit.waitForMessage(Message_1.Message.MapItemReply, 10000, (packet) => { + const filterMsg = packet.message; + let found = false; + filterMsg.Data.forEach((data) => { + if (data.X >= minX && data.X <= maxX && data.Y >= minY && data.Y <= maxY) { + found = true; + } + }); + return found; + }).then((packet2) => { + const responseMsg2 = packet2.message; + responseMsg2.Data.forEach((data) => { + response.avatars.push({ + X: data.X, + Y: data.Y + }); + }); + resolve(response); + }).catch((err) => { + reject(err); + }); + }).catch((err) => { + reject(err); + }); + }); + } +} +exports.GridCommands = GridCommands; +//# sourceMappingURL=GridCommands.js.map \ No newline at end of file diff --git a/dist/classes/commands/GridCommands.js.map b/dist/classes/commands/GridCommands.js.map new file mode 100644 index 0000000..f818c57 --- /dev/null +++ b/dist/classes/commands/GridCommands.js.map @@ -0,0 +1 @@ +{"version":3,"file":"GridCommands.js","sourceRoot":"","sources":["../../../lib/classes/commands/GridCommands.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/classes/commands/GroupCommands.d.ts b/dist/classes/commands/GroupCommands.d.ts new file mode 100644 index 0000000..e58553d --- /dev/null +++ b/dist/classes/commands/GroupCommands.d.ts @@ -0,0 +1,5 @@ +import { CommandsBase } from './CommandsBase'; +import { UUID } from '../UUID'; +export declare class GroupCommands extends CommandsBase { + sendGroupNotice(group: UUID | string, subject: string, message: string): Promise; +} diff --git a/dist/classes/commands/GroupCommands.js b/dist/classes/commands/GroupCommands.js new file mode 100644 index 0000000..90c8419 --- /dev/null +++ b/dist/classes/commands/GroupCommands.js @@ -0,0 +1,44 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const CommandsBase_1 = require("./CommandsBase"); +const UUID_1 = require("../UUID"); +const InstantMessageDialog_1 = require("../../enums/InstantMessageDialog"); +const Utils_1 = require("../Utils"); +const PacketFlags_1 = require("../../enums/PacketFlags"); +const ImprovedInstantMessage_1 = require("../messages/ImprovedInstantMessage"); +const Vector3_1 = require("../Vector3"); +class GroupCommands extends CommandsBase_1.CommandsBase { + sendGroupNotice(group, subject, message) { + if (typeof group === 'string') { + group = new UUID_1.UUID(group); + } + const circuit = this.circuit; + const agentName = this.agent.firstName + ' ' + this.agent.lastName; + const im = new ImprovedInstantMessage_1.ImprovedInstantMessageMessage(); + im.AgentData = { + AgentID: this.agent.agentID, + SessionID: circuit.sessionID + }; + im.MessageBlock = { + FromGroup: false, + ToAgentID: group, + ParentEstateID: 0, + RegionID: UUID_1.UUID.zero(), + Position: Vector3_1.Vector3.getZero(), + Offline: 0, + Dialog: InstantMessageDialog_1.InstantMessageDialog.GroupNotice, + ID: UUID_1.UUID.zero(), + Timestamp: 0, + FromAgentName: Utils_1.Utils.StringToBuffer(agentName), + Message: Utils_1.Utils.StringToBuffer(subject + '|' + message), + BinaryBucket: Buffer.allocUnsafe(0) + }; + im.EstateBlock = { + EstateID: 0 + }; + const sequenceNo = circuit.sendMessage(im, PacketFlags_1.PacketFlags.Reliable); + return circuit.waitForAck(sequenceNo, 10000); + } +} +exports.GroupCommands = GroupCommands; +//# sourceMappingURL=GroupCommands.js.map \ No newline at end of file diff --git a/dist/classes/commands/GroupCommands.js.map b/dist/classes/commands/GroupCommands.js.map new file mode 100644 index 0000000..ecce05e --- /dev/null +++ b/dist/classes/commands/GroupCommands.js.map @@ -0,0 +1 @@ +{"version":3,"file":"GroupCommands.js","sourceRoot":"","sources":["../../../lib/classes/commands/GroupCommands.ts"],"names":[],"mappings":";;AAAA,iDAA4C;AAC5C,kCAA6B;AAC7B,2EAAsE;AACtE,oCAA+B;AAC/B,yDAAoD;AACpD,+EAAiF;AACjF,wCAAmC;AAEnC,mBAA2B,SAAQ,2BAAY;IAE3C,eAAe,CAAC,KAAoB,EAAE,OAAe,EAAE,OAAe;QAElE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAC9B,CAAC;YACG,KAAK,GAAG,IAAI,WAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QACnE,MAAM,EAAE,GAAkC,IAAI,sDAA6B,EAAE,CAAC;QAC9E,EAAE,CAAC,SAAS,GAAG;YACX,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;YAC3B,SAAS,EAAE,OAAO,CAAC,SAAS;SAC/B,CAAC;QACF,EAAE,CAAC,YAAY,GAAG;YACd,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,KAAK;YAChB,cAAc,EAAE,CAAC;YACjB,QAAQ,EAAE,WAAI,CAAC,IAAI,EAAE;YACrB,QAAQ,EAAE,iBAAO,CAAC,OAAO,EAAE;YAC3B,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,2CAAoB,CAAC,WAAW;YACxC,EAAE,EAAE,WAAI,CAAC,IAAI,EAAE;YACf,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,aAAK,CAAC,cAAc,CAAC,SAAS,CAAC;YAC9C,OAAO,EAAE,aAAK,CAAC,cAAc,CAAC,OAAO,GAAG,GAAG,GAAG,OAAO,CAAC;YACtD,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;SACtC,CAAC;QACF,EAAE,CAAC,WAAW,GAAG;YACb,QAAQ,EAAE,CAAC;SACd,CAAC;QACF,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,yBAAW,CAAC,QAAQ,CAAC,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;CACJ;AAnCD,sCAmCC"} \ No newline at end of file diff --git a/dist/classes/commands/NetworkCommands.d.ts b/dist/classes/commands/NetworkCommands.d.ts new file mode 100644 index 0000000..b724250 --- /dev/null +++ b/dist/classes/commands/NetworkCommands.d.ts @@ -0,0 +1,5 @@ +import { CommandsBase } from './CommandsBase'; +export declare class NetworkCommands extends CommandsBase { + private throttleGenCounter; + setBandwidth(total: number): void; +} diff --git a/dist/classes/commands/NetworkCommands.js b/dist/classes/commands/NetworkCommands.js new file mode 100644 index 0000000..35e8974 --- /dev/null +++ b/dist/classes/commands/NetworkCommands.js @@ -0,0 +1,48 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const CommandsBase_1 = require("./CommandsBase"); +const PacketFlags_1 = require("../../enums/PacketFlags"); +const AgentThrottle_1 = require("../messages/AgentThrottle"); +class NetworkCommands extends CommandsBase_1.CommandsBase { + constructor() { + super(...arguments); + this.throttleGenCounter = 0; + } + setBandwidth(total) { + const agentThrottle = new AgentThrottle_1.AgentThrottleMessage(); + agentThrottle.AgentData = { + AgentID: this.agent.agentID, + SessionID: this.circuit.sessionID, + CircuitCode: this.circuit.circuitCode + }; + const throttleData = Buffer.allocUnsafe(28); + let pos = 0; + const resendThrottle = total * 0.1; + const landThrottle = total * 0.172; + const windThrottle = total * 0.05; + const cloudThrottle = total * 0.05; + const taskThrottle = total * 0.234; + const textureThrottle = total * 0.234; + const assetThrottle = total * 0.160; + throttleData.writeFloatLE(resendThrottle, pos); + pos += 4; + throttleData.writeFloatLE(landThrottle, pos); + pos += 4; + throttleData.writeFloatLE(windThrottle, pos); + pos += 4; + throttleData.writeFloatLE(cloudThrottle, pos); + pos += 4; + throttleData.writeFloatLE(taskThrottle, pos); + pos += 4; + throttleData.writeFloatLE(textureThrottle, pos); + pos += 4; + throttleData.writeFloatLE(assetThrottle, pos); + agentThrottle.Throttle = { + GenCounter: this.throttleGenCounter++, + Throttles: throttleData + }; + this.circuit.sendMessage(agentThrottle, PacketFlags_1.PacketFlags.Reliable); + } +} +exports.NetworkCommands = NetworkCommands; +//# sourceMappingURL=NetworkCommands.js.map \ No newline at end of file diff --git a/dist/classes/commands/NetworkCommands.js.map b/dist/classes/commands/NetworkCommands.js.map new file mode 100644 index 0000000..f2d79eb --- /dev/null +++ b/dist/classes/commands/NetworkCommands.js.map @@ -0,0 +1 @@ +{"version":3,"file":"NetworkCommands.js","sourceRoot":"","sources":["../../../lib/classes/commands/NetworkCommands.ts"],"names":[],"mappings":";;AAAA,iDAA4C;AAC5C,yDAAoD;AACpD,6DAA+D;AAE/D,qBAA6B,SAAQ,2BAAY;IAAjD;;QAEY,uBAAkB,GAAG,CAAC,CAAC;IA2CnC,CAAC;IAzCG,YAAY,CAAC,KAAa;QAEtB,MAAM,aAAa,GAAyB,IAAI,oCAAoB,EAAE,CAAC;QACvE,aAAa,CAAC,SAAS,GAAG;YACtB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;YAC3B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;YACjC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;SACxC,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,GAAG,GAAG,CAAC,CAAC;QAEZ,MAAM,cAAc,GAAG,KAAK,GAAG,GAAG,CAAC;QACnC,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,CAAC;QACnC,MAAM,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC;QAClC,MAAM,aAAa,GAAG,KAAK,GAAG,IAAI,CAAC;QACnC,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,CAAC;QACnC,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,CAAC;QACtC,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,CAAC;QAGpC,YAAY,CAAC,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QAC/C,GAAG,IAAI,CAAC,CAAC;QACT,YAAY,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAC7C,GAAG,IAAI,CAAC,CAAC;QACT,YAAY,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAC7C,GAAG,IAAI,CAAC,CAAC;QACT,YAAY,CAAC,YAAY,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAC9C,GAAG,IAAI,CAAC,CAAC;QACT,YAAY,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAC7C,GAAG,IAAI,CAAC,CAAC;QACT,YAAY,CAAC,YAAY,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QAChD,GAAG,IAAI,CAAC,CAAC;QACT,YAAY,CAAC,YAAY,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAE9C,aAAa,CAAC,QAAQ,GAAG;YACrB,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE;YACrC,SAAS,EAAE,YAAY;SAC1B,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,yBAAW,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;CACJ;AA7CD,0CA6CC"} \ No newline at end of file diff --git a/dist/classes/commands/RegionCommands.d.ts b/dist/classes/commands/RegionCommands.d.ts new file mode 100644 index 0000000..eef6e03 --- /dev/null +++ b/dist/classes/commands/RegionCommands.d.ts @@ -0,0 +1,3 @@ +import { CommandsBase } from './CommandsBase'; +export declare class RegionCommands extends CommandsBase { +} diff --git a/dist/classes/commands/RegionCommands.js b/dist/classes/commands/RegionCommands.js new file mode 100644 index 0000000..d9380c6 --- /dev/null +++ b/dist/classes/commands/RegionCommands.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const CommandsBase_1 = require("./CommandsBase"); +class RegionCommands extends CommandsBase_1.CommandsBase { +} +exports.RegionCommands = RegionCommands; +//# sourceMappingURL=RegionCommands.js.map \ No newline at end of file diff --git a/dist/classes/commands/RegionCommands.js.map b/dist/classes/commands/RegionCommands.js.map new file mode 100644 index 0000000..fcd8f29 --- /dev/null +++ b/dist/classes/commands/RegionCommands.js.map @@ -0,0 +1 @@ +{"version":3,"file":"RegionCommands.js","sourceRoot":"","sources":["../../../lib/classes/commands/RegionCommands.ts"],"names":[],"mappings":";;AAAA,iDAA4C;AAE5C,oBAA4B,SAAQ,2BAAY;CAG/C;AAHD,wCAGC"} \ No newline at end of file diff --git a/dist/classes/commands/TeleportCommands.d.ts b/dist/classes/commands/TeleportCommands.d.ts new file mode 100644 index 0000000..84bcb1b --- /dev/null +++ b/dist/classes/commands/TeleportCommands.d.ts @@ -0,0 +1,6 @@ +import { CommandsBase } from './CommandsBase'; +import { LureEvent } from '../../events/LureEvent'; +import { TeleportEvent } from '../../events/TeleportEvent'; +export declare class TeleportCommands extends CommandsBase { + acceptTeleport(lure: LureEvent): Promise; +} diff --git a/dist/classes/commands/TeleportCommands.js b/dist/classes/commands/TeleportCommands.js new file mode 100644 index 0000000..a69da3e --- /dev/null +++ b/dist/classes/commands/TeleportCommands.js @@ -0,0 +1,65 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const CommandsBase_1 = require("./CommandsBase"); +const Region_1 = require("../Region"); +const TeleportEventType_1 = require("../../enums/TeleportEventType"); +const PacketFlags_1 = require("../../enums/PacketFlags"); +const TeleportLureRequest_1 = require("../messages/TeleportLureRequest"); +const TeleportFlags_1 = require("../../enums/TeleportFlags"); +class TeleportCommands extends CommandsBase_1.CommandsBase { + acceptTeleport(lure) { + return new Promise((resolve, reject) => { + const circuit = this.currentRegion.circuit; + const tlr = new TeleportLureRequest_1.TeleportLureRequestMessage(); + tlr.Info = { + AgentID: this.agent.agentID, + SessionID: circuit.sessionID, + LureID: lure.lureID, + TeleportFlags: TeleportFlags_1.TeleportFlags.ViaLure + }; + circuit.sendMessage(tlr, PacketFlags_1.PacketFlags.Reliable); + if (this.currentRegion.caps.eventQueueClient) { + if (this.bot.clientEvents === null) { + reject(new Error('ClientEvents is null')); + return; + } + const subscription = this.bot.clientEvents.onTeleportEvent.subscribe((e) => { + if (e.eventType === TeleportEventType_1.TeleportEventType.TeleportFailed || e.eventType === TeleportEventType_1.TeleportEventType.TeleportCompleted) { + subscription.unsubscribe(); + } + if (e.eventType === TeleportEventType_1.TeleportEventType.TeleportFailed) { + reject(e); + } + else if (e.eventType === TeleportEventType_1.TeleportEventType.TeleportCompleted) { + if (e.simIP === 'local') { + resolve(e); + return; + } + if (this.bot.clientEvents === null) { + reject(new Error('ClientEvents is null')); + return; + } + this.currentRegion.shutdown(); + const region = new Region_1.Region(this.agent, this.bot.clientEvents); + region.circuit.circuitCode = this.currentRegion.circuit.circuitCode; + region.circuit.secureSessionID = this.currentRegion.circuit.secureSessionID; + region.circuit.sessionID = this.currentRegion.circuit.sessionID; + region.circuit.udpBlacklist = this.currentRegion.circuit.udpBlacklist; + region.circuit.ipAddress = e.simIP; + region.circuit.port = e.simPort; + this.agent.setCurrentRegion(region); + this.currentRegion = region; + this.currentRegion.activateCaps(e.seedCapability); + this.bot.changeRegion(this.currentRegion).then(() => { + resolve(e); + }).catch((error) => { + reject(error); + }); + } + }); + } + }); + } +} +exports.TeleportCommands = TeleportCommands; +//# sourceMappingURL=TeleportCommands.js.map \ No newline at end of file diff --git a/dist/classes/commands/TeleportCommands.js.map b/dist/classes/commands/TeleportCommands.js.map new file mode 100644 index 0000000..521431f --- /dev/null +++ b/dist/classes/commands/TeleportCommands.js.map @@ -0,0 +1 @@ +{"version":3,"file":"TeleportCommands.js","sourceRoot":"","sources":["../../../lib/classes/commands/TeleportCommands.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/enums/InstantMessageEventFlags.d.ts b/dist/enums/InstantMessageEventFlags.d.ts new file mode 100644 index 0000000..61fdf5b --- /dev/null +++ b/dist/enums/InstantMessageEventFlags.d.ts @@ -0,0 +1,6 @@ +export declare enum InstantMessageEventFlags { + normal = 0, + busyResponse = 1, + startTyping = 2, + finishTyping = 4, +} diff --git a/dist/enums/InstantMessageEventFlags.js b/dist/enums/InstantMessageEventFlags.js new file mode 100644 index 0000000..9480234 --- /dev/null +++ b/dist/enums/InstantMessageEventFlags.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var InstantMessageEventFlags; +(function (InstantMessageEventFlags) { + InstantMessageEventFlags[InstantMessageEventFlags["normal"] = 0] = "normal"; + InstantMessageEventFlags[InstantMessageEventFlags["busyResponse"] = 1] = "busyResponse"; + InstantMessageEventFlags[InstantMessageEventFlags["startTyping"] = 2] = "startTyping"; + InstantMessageEventFlags[InstantMessageEventFlags["finishTyping"] = 4] = "finishTyping"; +})(InstantMessageEventFlags = exports.InstantMessageEventFlags || (exports.InstantMessageEventFlags = {})); +//# sourceMappingURL=InstantMessageEventFlags.js.map \ No newline at end of file diff --git a/dist/enums/InstantMessageEventFlags.js.map b/dist/enums/InstantMessageEventFlags.js.map new file mode 100644 index 0000000..637c77a --- /dev/null +++ b/dist/enums/InstantMessageEventFlags.js.map @@ -0,0 +1 @@ +{"version":3,"file":"InstantMessageEventFlags.js","sourceRoot":"","sources":["../../lib/enums/InstantMessageEventFlags.ts"],"names":[],"mappings":";;AAAA,IAAY,wBAMX;AAND,WAAY,wBAAwB;IAEhC,2EAAU,CAAA;IACV,uFAAgB,CAAA;IAChB,qFAAe,CAAA;IACf,uFAAgB,CAAA;AACpB,CAAC,EANW,wBAAwB,GAAxB,gCAAwB,KAAxB,gCAAwB,QAMnC"} \ No newline at end of file diff --git a/dist/enums/InstantMessageFlags.d.ts b/dist/enums/InstantMessageFlags.d.ts new file mode 100644 index 0000000..afd2f26 --- /dev/null +++ b/dist/enums/InstantMessageFlags.d.ts @@ -0,0 +1,4 @@ +export declare enum InstantMessageFlags { + normal = 0, + busyResponse = 1, +} diff --git a/dist/enums/InstantMessageFlags.js b/dist/enums/InstantMessageFlags.js new file mode 100644 index 0000000..ea2b9a7 --- /dev/null +++ b/dist/enums/InstantMessageFlags.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var InstantMessageFlags; +(function (InstantMessageFlags) { + InstantMessageFlags[InstantMessageFlags["normal"] = 0] = "normal"; + InstantMessageFlags[InstantMessageFlags["busyResponse"] = 1] = "busyResponse"; +})(InstantMessageFlags = exports.InstantMessageFlags || (exports.InstantMessageFlags = {})); +//# sourceMappingURL=InstantMessageFlags.js.map \ No newline at end of file diff --git a/dist/enums/InstantMessageFlags.js.map b/dist/enums/InstantMessageFlags.js.map new file mode 100644 index 0000000..cbe5b97 --- /dev/null +++ b/dist/enums/InstantMessageFlags.js.map @@ -0,0 +1 @@ +{"version":3,"file":"InstantMessageFlags.js","sourceRoot":"","sources":["../../lib/enums/InstantMessageFlags.ts"],"names":[],"mappings":";;AAAA,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAE3B,iEAAU,CAAA;IACV,6EAAgB,CAAA;AACpB,CAAC,EAJW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAI9B"} \ No newline at end of file diff --git a/dist/events/DisconnectEvent.d.ts b/dist/events/DisconnectEvent.d.ts new file mode 100644 index 0000000..d88ad49 --- /dev/null +++ b/dist/events/DisconnectEvent.d.ts @@ -0,0 +1,4 @@ +export declare class DisconnectEvent { + requested: boolean; + message: string; +} diff --git a/dist/events/DisconnectEvent.js b/dist/events/DisconnectEvent.js new file mode 100644 index 0000000..e208de5 --- /dev/null +++ b/dist/events/DisconnectEvent.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +class DisconnectEvent { +} +exports.DisconnectEvent = DisconnectEvent; +//# sourceMappingURL=DisconnectEvent.js.map \ No newline at end of file diff --git a/dist/events/DisconnectEvent.js.map b/dist/events/DisconnectEvent.js.map new file mode 100644 index 0000000..5054744 --- /dev/null +++ b/dist/events/DisconnectEvent.js.map @@ -0,0 +1 @@ +{"version":3,"file":"DisconnectEvent.js","sourceRoot":"","sources":["../../lib/events/DisconnectEvent.ts"],"names":[],"mappings":";;AAAA;CAIC;AAJD,0CAIC"} \ No newline at end of file diff --git a/dist/events/FriendRequestEvent.d.ts b/dist/events/FriendRequestEvent.d.ts new file mode 100644 index 0000000..9442731 --- /dev/null +++ b/dist/events/FriendRequestEvent.d.ts @@ -0,0 +1,2 @@ +export declare class FriendRequestEvent { +} diff --git a/dist/events/FriendRequestEvent.js b/dist/events/FriendRequestEvent.js new file mode 100644 index 0000000..ffae122 --- /dev/null +++ b/dist/events/FriendRequestEvent.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +class FriendRequestEvent { +} +exports.FriendRequestEvent = FriendRequestEvent; +//# sourceMappingURL=FriendRequestEvent.js.map \ No newline at end of file diff --git a/dist/events/FriendRequestEvent.js.map b/dist/events/FriendRequestEvent.js.map new file mode 100644 index 0000000..8732174 --- /dev/null +++ b/dist/events/FriendRequestEvent.js.map @@ -0,0 +1 @@ +{"version":3,"file":"FriendRequestEvent.js","sourceRoot":"","sources":["../../lib/events/FriendRequestEvent.ts"],"names":[],"mappings":";;AAAA;CAGC;AAHD,gDAGC"} \ No newline at end of file diff --git a/dist/events/GroupInviteEvent.d.ts b/dist/events/GroupInviteEvent.d.ts new file mode 100644 index 0000000..24654f6 --- /dev/null +++ b/dist/events/GroupInviteEvent.d.ts @@ -0,0 +1,2 @@ +export declare class GroupInviteEvent { +} diff --git a/dist/events/GroupInviteEvent.js b/dist/events/GroupInviteEvent.js new file mode 100644 index 0000000..3729a3a --- /dev/null +++ b/dist/events/GroupInviteEvent.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +class GroupInviteEvent { +} +exports.GroupInviteEvent = GroupInviteEvent; +//# sourceMappingURL=GroupInviteEvent.js.map \ No newline at end of file diff --git a/dist/events/GroupInviteEvent.js.map b/dist/events/GroupInviteEvent.js.map new file mode 100644 index 0000000..1606bb4 --- /dev/null +++ b/dist/events/GroupInviteEvent.js.map @@ -0,0 +1 @@ +{"version":3,"file":"GroupInviteEvent.js","sourceRoot":"","sources":["../../lib/events/GroupInviteEvent.ts"],"names":[],"mappings":";;AAAA;CAGC;AAHD,4CAGC"} \ No newline at end of file diff --git a/dist/events/InstantMessageEvent.d.ts b/dist/events/InstantMessageEvent.d.ts new file mode 100644 index 0000000..c8aa580 --- /dev/null +++ b/dist/events/InstantMessageEvent.d.ts @@ -0,0 +1,11 @@ +import { ChatSourceType } from '../enums/ChatSourceType'; +import { UUID } from '../classes/UUID'; +import { InstantMessageEventFlags } from '../enums/InstantMessageEventFlags'; +export declare class InstantMessageEvent { + source: ChatSourceType; + fromName: string; + from: UUID; + owner: UUID; + message: string; + flags: InstantMessageEventFlags; +} diff --git a/dist/events/InstantMessageEvent.js b/dist/events/InstantMessageEvent.js new file mode 100644 index 0000000..877c2ed --- /dev/null +++ b/dist/events/InstantMessageEvent.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +class InstantMessageEvent { +} +exports.InstantMessageEvent = InstantMessageEvent; +//# sourceMappingURL=InstantMessageEvent.js.map \ No newline at end of file diff --git a/dist/events/InstantMessageEvent.js.map b/dist/events/InstantMessageEvent.js.map new file mode 100644 index 0000000..0bd2326 --- /dev/null +++ b/dist/events/InstantMessageEvent.js.map @@ -0,0 +1 @@ +{"version":3,"file":"InstantMessageEvent.js","sourceRoot":"","sources":["../../lib/events/InstantMessageEvent.ts"],"names":[],"mappings":";;AAIA;CAQC;AARD,kDAQC"} \ No newline at end of file diff --git a/dist/events/LureEvent.d.ts b/dist/events/LureEvent.d.ts index 7db04d9..bb65fdc 100644 --- a/dist/events/LureEvent.d.ts +++ b/dist/events/LureEvent.d.ts @@ -1,6 +1,7 @@ import { UUID } from '../classes/UUID'; import { Vector3 } from '../classes/Vector3'; export declare class LureEvent { + from: UUID; fromName: string; lureMessage: string; regionID: UUID; diff --git a/dist/events/LureEvent.js.map b/dist/events/LureEvent.js.map index 3fe1d9a..b7a7e95 100644 --- a/dist/events/LureEvent.js.map +++ b/dist/events/LureEvent.js.map @@ -1 +1 @@ -{"version":3,"file":"LureEvent.js","sourceRoot":"","sources":["../../lib/events/LureEvent.ts"],"names":[],"mappings":";;AAGA;CASC;AATD,8BASC"} \ No newline at end of file +{"version":3,"file":"LureEvent.js","sourceRoot":"","sources":["../../lib/events/LureEvent.ts"],"names":[],"mappings":";;AAGA;CAUC;AAVD,8BAUC"} \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts index 112f81c..6abbbc5 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -4,4 +4,7 @@ import { ClientEvents } from './classes/ClientEvents'; import { BVH } from './classes/BVH'; import { AssetType } from './enums/AssetType'; import { HTTPAssets } from './enums/HTTPAssets'; -export { Bot, LoginParameters, AssetType, HTTPAssets, ClientEvents, BVH }; +import { InstantMessageEventFlags } from './enums/InstantMessageEventFlags'; +import { InstantMessageEvent } from './events/InstantMessageEvent'; +import { ChatSourceType } from './enums/ChatSourceType'; +export { Bot, LoginParameters, AssetType, HTTPAssets, ClientEvents, BVH, InstantMessageEvent, InstantMessageEventFlags, ChatSourceType }; diff --git a/dist/index.js b/dist/index.js index 677373c..86f5d41 100644 --- a/dist/index.js +++ b/dist/index.js @@ -12,4 +12,10 @@ const AssetType_1 = require("./enums/AssetType"); exports.AssetType = AssetType_1.AssetType; const HTTPAssets_1 = require("./enums/HTTPAssets"); exports.HTTPAssets = HTTPAssets_1.HTTPAssets; +const InstantMessageEventFlags_1 = require("./enums/InstantMessageEventFlags"); +exports.InstantMessageEventFlags = InstantMessageEventFlags_1.InstantMessageEventFlags; +const InstantMessageEvent_1 = require("./events/InstantMessageEvent"); +exports.InstantMessageEvent = InstantMessageEvent_1.InstantMessageEvent; +const ChatSourceType_1 = require("./enums/ChatSourceType"); +exports.ChatSourceType = ChatSourceType_1.ChatSourceType; //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map index afbdda7..8242095 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;AAAA,+BAA0B;AAYtB,cAZI,SAAG,CAYJ;AAXP,+DAA0D;AAYtD,0BAZI,iCAAe,CAYJ;AAXnB,yDAAoD;AAchD,uBAdI,2BAAY,CAcJ;AAbhB,uCAAkC;AAc9B,cAdI,SAAG,CAcJ;AATP,iDAA4C;AAMxC,oBANI,qBAAS,CAMJ;AALb,mDAA8C;AAM1C,qBANI,uBAAU,CAMJ"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;AAAA,+BAA0B;AAetB,cAfI,SAAG,CAeJ;AAdP,+DAA0D;AAetD,0BAfI,iCAAe,CAeJ;AAdnB,yDAAoD;AAiBhD,uBAjBI,2BAAY,CAiBJ;AAhBhB,uCAAkC;AAiB9B,cAjBI,SAAG,CAiBJ;AAZP,iDAA4C;AASxC,oBATI,qBAAS,CASJ;AARb,mDAA8C;AAS1C,qBATI,uBAAU,CASJ;AARd,+EAA0E;AAYtE,mCAZI,mDAAwB,CAYJ;AAX5B,sEAAiE;AAU7D,8BAVI,yCAAmB,CAUJ;AATvB,2DAAsD;AAWlD,yBAXI,+BAAc,CAWJ"} \ No newline at end of file diff --git a/example/testBot.js b/example/testBot.js index a6f787b..59209b1 100644 --- a/example/testBot.js +++ b/example/testBot.js @@ -13,28 +13,62 @@ const bot = new nmv.Bot(loginParameters); let resp = null; -bot.login().then((response) => +function connect() { - bot.clientEvents.onLure.subscribe((lureEvent) => + bot.login().then((response) => { - bot.getRegionMapInfo(lureEvent.gridX, lureEvent.gridY).then((regionInfo) => + bot.clientEvents.onLure.subscribe((lureEvent) => { - console.log('Auto-accepting teleport lure to ' + regionInfo.name + ' (' + regionInfo.avatars.length + ' avatar' + ((regionInfo.avatars.length === 1)?'':'s') + ' present) from ' + lureEvent.fromName + ' with message: ' + lureEvent.lureMessage); - bot.acceptTeleport(lureEvent); + bot.clientCommands.grid.getRegionMapInfo(lureEvent.gridX, lureEvent.gridY).then((regionInfo) => + { + console.log('Auto-accepting teleport lure to ' + regionInfo.name + ' (' + regionInfo.avatars.length + ' avatar' + ((regionInfo.avatars.length === 1)?'':'s') + ' present) from ' + lureEvent.fromName + ' with message: ' + lureEvent.lureMessage); + //bot.clientCommands.teleport.acceptTeleport(lureEvent); + }); }); + + bot.clientEvents.onInstantMessage.subscribe((IMEvent) => + { + if (IMEvent.source === nmv.ChatSourceType.Agent) + { + if (!(IMEvent.flags & nmv.InstantMessageEventFlags.startTyping || IMEvent.flags & nmv.InstantMessageEventFlags.finishTyping)) + { + bot.clientCommands.comms.typeInstantMessage(IMEvent.from, 'Thanks for the message! This account is a scripted agent (bot), so cannot reply to your query. Sorry!'); + } + } + }); + + bot.clientEvents.onDisconnected.subscribe((DisconnectEvent) => + { + console.log("Disconnected from simulator: "+DisconnectEvent.message); + if (!DisconnectEvent.requested) + { + setTimeout(() => + { + console.log("Reconnecting"); + connect(); + }, 5000) + } + }); + + //Establish circuit wit region + resp = response; + return bot.connectToSim(); + }).then(() => + { + // Do some stuff + //bot.clientCommands.comms.typeLocalMessage('Never fear, I am here!', 2000); + //bot.clientCommands.group.sendGroupNotice('503e8ef6-e119-ff5e-2524-24f290dd3867', 'Test', 'testy testy test'); + + // When it's time to go home, call bot.close(); + }).catch((error) => + { + console.log("Error:"); + console.error(error); + setTimeout(() => + { + connect(); + }, 5000) }); +} - //Establish circuit wit region - resp = response; - return bot.connectToSim(); -}).then(() => -{ - // Do some stuff - - // When it's time to go home, call bot.close(); -}).catch((error) => -{ - console.log("Error:"); - console.error(error); -}); - +connect(); diff --git a/lib/Bot.ts b/lib/Bot.ts index 2b05c03..2f34c81 100644 --- a/lib/Bot.ts +++ b/lib/Bot.ts @@ -2,7 +2,6 @@ import {LoginHandler} from './LoginHandler'; import {LoginResponse} from './classes/LoginResponse'; import {LoginParameters} from './classes/LoginParameters'; import {Agent} from './classes/Agent'; -import {UUID} from './classes/UUID'; import {PacketFlags} from './enums/PacketFlags'; import {UseCircuitCodeMessage} from './classes/messages/UseCircuitCode'; import {CompleteAgentMovementMessage} from './classes/messages/CompleteAgentMovement'; @@ -13,38 +12,29 @@ import {LogoutRequestMessage} from './classes/messages/LogoutRequest'; import {Utils} from './classes/Utils'; import {RegionHandshakeReplyMessage} from './classes/messages/RegionHandshakeReply'; import {RegionProtocolFlags} from './enums/RegionProtocolFlags'; -import {AgentThrottleMessage} from './classes/messages/AgentThrottle'; import {AgentDataUpdateRequestMessage} from './classes/messages/AgentDataUpdateRequest'; -import {RegionHandleRequestMessage} from './classes/messages/RegionHandleRequest'; -import {RegionIDAndHandleReplyMessage} from './classes/messages/RegionIDAndHandleReply'; -import * as Long from 'long'; -import {MapItemRequestMessage} from './classes/messages/MapItemRequest'; -import {GridItemType} from './enums/GridItemType'; -import {MapItemReplyMessage} from './classes/messages/MapItemReply'; -import {MapBlockRequestMessage} from './classes/messages/MapBlockRequest'; -import {MapBlockReplyMessage} from './classes/messages/MapBlockReply'; -import {MapInfoReply} from './events/MapInfoReply'; -import {TeleportLureRequestMessage} from './classes/messages/TeleportLureRequest'; -import {LureEvent} from './events/LureEvent'; -import {TeleportFlags} from './enums/TeleportFlags'; import {TeleportProgressMessage} from './classes/messages/TeleportProgress'; import {TeleportStartMessage} from './classes/messages/TeleportStart'; -import {SoundTriggerMessage} from './classes/messages/SoundTrigger'; -import {AttachedSoundMessage} from './classes/messages/AttachedSound'; -import {AvatarAnimationMessage} from './classes/messages/AvatarAnimation'; -import {HTTPAssets} from './enums/HTTPAssets'; -import * as LLSD from 'llsd'; import {TeleportEvent} from './events/TeleportEvent'; import {ClientEvents} from './classes/ClientEvents'; import {TeleportEventType} from './enums/TeleportEventType'; +import {ClientCommands} from './classes/ClientCommands'; +import {DisconnectEvent} from './events/DisconnectEvent'; +import {KickUserMessage} from './classes/messages/KickUser'; +import {StartPingCheckMessage} from './classes/messages/StartPingCheck'; +import {CompletePingCheckMessage} from './classes/messages/CompletePingCheck'; +import Timer = NodeJS.Timer; export class Bot { private loginParams: LoginParameters; private currentRegion: Region; private agent: Agent; - private throttleGenCounter = 0; - private clientEvents: ClientEvents | null = null; + private ping: Timer | null = null; + private pingNumber = 0; + private lastSuccessfulPing = 0; + public clientEvents: ClientEvents | null = null; + public clientCommands: ClientCommands; constructor(login: LoginParameters) { @@ -61,6 +51,7 @@ export class Bot this.clientEvents = response.clientEvents; this.currentRegion = response.region; this.agent = response.agent; + this.clientCommands = new ClientCommands(response.region, response.agent, this); resolve(response); }).catch((error: Error) => { @@ -69,6 +60,22 @@ export class Bot }); } + changeRegion(region: Region) + { + return new Promise((resolve, reject) => + { + this.currentRegion = region; + this.clientCommands = new ClientCommands(this.currentRegion, this.agent, this); + this.connectToSim().then(() => + { + resolve(); + }).catch((error) => + { + reject(error); + }); + }); + } + close() { return new Promise((resolve, reject) => @@ -92,238 +99,21 @@ export class Bot this.currentRegion.shutdown(); delete this.currentRegion; delete this.agent; - resolve(); - }); - }); - } - - setBandwidth(total: number) - { - const circuit = this.currentRegion.circuit; - const agentThrottle: AgentThrottleMessage = new AgentThrottleMessage(); - agentThrottle.AgentData = { - AgentID: this.agent.agentID, - SessionID: circuit.sessionID, - CircuitCode: circuit.circuitCode - }; - - const throttleData = Buffer.allocUnsafe(28); - let pos = 0; - - const resendThrottle = total * 0.1; - const landThrottle = total * 0.172; - const windThrottle = total * 0.05; - const cloudThrottle = total * 0.05; - const taskThrottle = total * 0.234; - const textureThrottle = total * 0.234; - const assetThrottle = total * 0.160; - - - throttleData.writeFloatLE(resendThrottle, pos); pos += 4; - throttleData.writeFloatLE(landThrottle, pos); pos += 4; - throttleData.writeFloatLE(windThrottle, pos); pos += 4; - throttleData.writeFloatLE(cloudThrottle, pos); pos += 4; - throttleData.writeFloatLE(taskThrottle, pos); pos += 4; - throttleData.writeFloatLE(textureThrottle, pos); pos += 4; - throttleData.writeFloatLE(assetThrottle, pos); - - agentThrottle.Throttle = { - GenCounter: this.throttleGenCounter++, - Throttles: throttleData - }; - circuit.sendMessage(agentThrottle, PacketFlags.Reliable); - } - - acceptTeleport(lure: LureEvent): Promise - { - return new Promise((resolve, reject) => - { - const circuit = this.currentRegion.circuit; - const tlr = new TeleportLureRequestMessage(); - tlr.Info = { - AgentID: this.agent.agentID, - SessionID: circuit.sessionID, - LureID: lure.lureID, - TeleportFlags: TeleportFlags.ViaLure - }; - circuit.sendMessage(tlr, PacketFlags.Reliable); - if (this.currentRegion.caps.eventQueueClient) - { - if (this.clientEvents === null) + delete this.clientCommands; + if (this.ping !== null) { - reject(new Error('ClientEvents is null')); - return; + clearInterval(this.ping); + this.ping = null; } - const subscription = this.clientEvents.onTeleportEvent.subscribe((e: TeleportEvent) => - { - if (e.eventType === TeleportEventType.TeleportFailed || e.eventType === TeleportEventType.TeleportCompleted) - { - subscription.unsubscribe(); - } - if (e.eventType === TeleportEventType.TeleportFailed) - { - reject(e); - } - else if (e.eventType === TeleportEventType.TeleportCompleted) - { - if (e.simIP === 'local') - { - // Local TP - no need for any other shindiggery - resolve(e); - return; - } - if (this.clientEvents === null) - { - reject(new Error('ClientEvents is null')); - return; - } - - // Successful teleport! First, rip apart circuit - this.currentRegion.shutdown(); - const region: Region = new Region(this.agent, this.clientEvents); - region.circuit.circuitCode = this.currentRegion.circuit.circuitCode; - region.circuit.secureSessionID = this.currentRegion.circuit.secureSessionID; - region.circuit.sessionID = this.currentRegion.circuit.sessionID; - region.circuit.udpBlacklist = this.currentRegion.circuit.udpBlacklist; - region.circuit.ipAddress = e.simIP; - region.circuit.port = e.simPort; - this.agent.setCurrentRegion(region); - this.currentRegion = region; - this.currentRegion.activateCaps(e.seedCapability); - this.connectToSim().then(() => - { - resolve(e); - }).catch((error) => - { - reject(e); - }); - } - }); - } - }); - } - - getRegionHandle(regionID: UUID): Promise - { - return new Promise((resolve, reject) => - { - const circuit = this.currentRegion.circuit; - const msg: RegionHandleRequestMessage = new RegionHandleRequestMessage(); - msg.RequestBlock = { - RegionID: regionID, - }; - circuit.sendMessage(msg, PacketFlags.Reliable); - circuit.waitForMessage(Message.RegionIDAndHandleReply, 10000, (packet: Packet) => - { - const filterMsg = packet.message as RegionIDAndHandleReplyMessage; - return (filterMsg.ReplyBlock.RegionID.toString() === regionID.toString()); - }).then((packet: Packet) => - { - const responseMsg = packet.message as RegionIDAndHandleReplyMessage; - resolve(responseMsg.ReplyBlock.RegionHandle); - }); - }); - } - - getRegionMapInfo(gridX: number, gridY: number): Promise - { - return new Promise((resolve, reject) => - { - const circuit = this.currentRegion.circuit; - const response = new MapInfoReply(); - const msg: MapBlockRequestMessage = new MapBlockRequestMessage(); - msg.AgentData = { - AgentID: this.agent.agentID, - SessionID: circuit.sessionID, - Flags: 65536, - EstateID: 0, - Godlike: true - }; - msg.PositionData = { - MinX: (gridX / 256), - MaxX: (gridX / 256), - MinY: (gridY / 256), - MaxY: (gridY / 256) - }; - circuit.sendMessage(msg, PacketFlags.Reliable); - circuit.waitForMessage(Message.MapBlockReply, 10000, (packet: Packet) => - { - const filterMsg = packet.message as MapBlockReplyMessage; - let found = false; - filterMsg.Data.forEach((data) => + const disconnectEvent = new DisconnectEvent(); + disconnectEvent.requested = true; + disconnectEvent.message = 'Logout completed'; + if (this.clientEvents) { - if (data.X === (gridX / 256) && data.Y === (gridY / 256)) - { - found = true; - } - }); - return found; - }).then((packet: Packet) => - { - const responseMsg = packet.message as MapBlockReplyMessage; - responseMsg.Data.forEach((data) => - { - if (data.X === (gridX / 256) && data.Y === (gridY / 256)) - { - response.name = Utils.BufferToStringSimple(data.Name); - response.accessFlags = data.Access; - response.mapImage = data.MapImageID; - } - }); - - // Now get the region handle - const regionHandle: Long = Utils.RegionCoordinatesToHandle(gridX, gridY); - - const mi = new MapItemRequestMessage(); - mi.AgentData = { - AgentID: this.agent.agentID, - SessionID: circuit.sessionID, - Flags: 2, - EstateID: 0, - Godlike: false - }; - mi.RequestData = { - ItemType: GridItemType.AgentLocations, - RegionHandle: regionHandle - }; - circuit.sendMessage(mi, PacketFlags.Reliable); - const minX = Math.floor(gridX / 256) * 256; - const maxX = minX + 256; - const minY = Math.floor(gridY / 256) * 256; - const maxY = minY + 256; - response.avatars = []; - circuit.waitForMessage(Message.MapItemReply, 10000, (packet: Packet) => - { - const filterMsg = packet.message as MapItemReplyMessage; - let found = false; - filterMsg.Data.forEach((data) => - { - // Check if avatar is within our bounds - if (data.X >= minX && data.X <= maxX && data.Y >= minY && data.Y <= maxY) - { - found = true; - } - }); - return found; - }).then((packet2: Packet) => - { - const responseMsg2 = packet2.message as MapItemReplyMessage; - responseMsg2.Data.forEach((data) => - { - response.avatars.push({ - X: data.X, - Y: data.Y - }); - }); - resolve(response); - }).catch((err) => - { - reject(err); - }); - }).catch((err) => - { - reject(err); + this.clientEvents.onDisconnected.next(disconnectEvent); + } + resolve(); }); }); } @@ -363,7 +153,10 @@ export class Bot return circuit.waitForAck(circuit.sendMessage(handshakeReply, PacketFlags.Reliable), 10000) }).then(() => { - this.setBandwidth(1536000); + if (this.clientCommands !== null) + { + this.clientCommands.network.setBandwidth(1536000); + } const agentRequest = new AgentDataUpdateRequestMessage(); agentRequest.AgentData = { @@ -374,6 +167,67 @@ export class Bot this.agent.setInitialAppearance(); this.agent.circuitActive(); + this.lastSuccessfulPing = new Date().getTime(); + this.ping = setInterval(() => + { + this.pingNumber++; + if (this.pingNumber > 255) + { + this.pingNumber = 0; + } + const ping = new StartPingCheckMessage(); + ping.PingID = { + PingID: this.pingNumber, + OldestUnacked: this.currentRegion.circuit.getOldestUnacked() + }; + circuit.sendMessage(ping, PacketFlags.Reliable); + circuit.waitForMessage(Message.CompletePingCheck, 10000, ((pingData: { + pingID: number, + timeSent: number + }, packet: Packet): boolean => + { + const cpc = packet.message as CompletePingCheckMessage; + if (cpc.PingID.PingID === pingData.pingID) + { + this.lastSuccessfulPing = new Date().getTime(); + const pingTime = this.lastSuccessfulPing - pingData.timeSent; + if (this.clientEvents !== null) + { + this.clientEvents.onCircuitLatency.next(pingTime); + } + return true; + } + return false; + }).bind(this, { + pingID: this.pingNumber, + timeSent: new Date().getTime() + })); + + if ((new Date().getTime() - this.lastSuccessfulPing) > 60000) + { + // We're dead, jim + this.agent.shutdown(); + this.currentRegion.shutdown(); + delete this.currentRegion; + delete this.agent; + delete this.clientCommands; + if (this.ping !== null) + { + clearInterval(this.ping); + this.ping = null; + } + + const disconnectEvent = new DisconnectEvent(); + disconnectEvent.requested = false; + disconnectEvent.message = 'Circuit timeout'; + if (this.clientEvents) + { + this.clientEvents.onDisconnected.next(disconnectEvent); + } + } + + }, 5000); + circuit.subscribeToMessages( [ Message.TeleportFailed, @@ -382,9 +236,7 @@ export class Bot Message.TeleportStart, Message.TeleportProgress, Message.TeleportCancel, - Message.SoundTrigger, - Message.AttachedSound, - Message.AvatarAnimation + Message.KickUser ], (packet: Packet) => { switch (packet.message.id) @@ -448,24 +300,27 @@ export class Bot this.clientEvents.onTeleportEvent.next(tpEvent); break; } - case Message.SoundTrigger: + case Message.KickUser: { - const soundTrigger = packet.message as SoundTriggerMessage; - const soundID = soundTrigger.SoundData.SoundID; - // TODO: SoundTrigger clientEvent - break; - } - case Message.AttachedSound: - { - const attachedSound = packet.message as AttachedSoundMessage; - const soundID = attachedSound.DataBlock.SoundID; - // TODO: AttachedSound clientEvent - break; - } - case Message.AvatarAnimation: - { - const avatarAnimation = packet.message as AvatarAnimationMessage; - // TODO: AvatarAnimation clientEvent + const kickUser = packet.message as KickUserMessage; + this.agent.shutdown(); + this.currentRegion.shutdown(); + delete this.currentRegion; + delete this.agent; + delete this.clientCommands; + if (this.ping !== null) + { + clearInterval(this.ping); + this.ping = null; + } + + const disconnectEvent = new DisconnectEvent(); + disconnectEvent.requested = false; + disconnectEvent.message = Utils.BufferToStringSimple(kickUser.UserInfo.Reason); + if (this.clientEvents) + { + this.clientEvents.onDisconnected.next(disconnectEvent); + } break; } } @@ -479,46 +334,4 @@ export class Bot }); }); } - - downloadAsset(type: HTTPAssets, uuid: UUID) - { - return this.currentRegion.caps.downloadAsset(uuid, type); - } - - uploadAsset(type: HTTPAssets, data: Buffer, name: string, description: string): Promise - { - return new Promise((resolve, reject) => - { - if (this.agent && this.agent.inventory && this.agent.inventory.main && this.agent.inventory.main.root) - { - this.currentRegion.caps.capsRequestXML('NewFileAgentInventory', { - 'folder_id': new LLSD.UUID(this.agent.inventory.main.root.toString()), - 'asset_type': type, - 'inventory_type': Utils.HTTPAssetTypeToInventoryType(type), - 'name': name, - 'description': description, - 'everyone_mask': (1 << 13) | (1 << 14) | (1 << 15) | (1 << 19), - 'group_mask': (1 << 13) | (1 << 14) | (1 << 15) | (1 << 19), - 'next_owner_mask': (1 << 13) | (1 << 14) | (1 << 15) | (1 << 19), - 'expected_upload_cost': 0 - }).then((response: any) => - { - if (response['state'] === 'upload') - { - const uploadURL = response['uploader']; - this.currentRegion.caps.capsRequestUpload(uploadURL, data).then((responseUpload: any) => - { - resolve(new UUID(responseUpload['new_asset'].toString())); - }).catch((err) => - { - reject(err); - }); - } - }).catch((err) => - { - console.log(err); - }) - } - }); - } } diff --git a/lib/classes/Agent.ts b/lib/classes/Agent.ts index 022c85c..996e9fd 100644 --- a/lib/classes/Agent.ts +++ b/lib/classes/Agent.ts @@ -150,39 +150,6 @@ export class Agent } } } - - private animate(anim: UUID[], run: boolean): Promise - { - - const circuit = this.currentRegion.circuit; - const animPacket = new AgentAnimationMessage(); - animPacket.AgentData = { - AgentID: this.agentID, - SessionID: circuit.sessionID - }; - animPacket.PhysicalAvatarEventList = []; - animPacket.AnimationList = []; - anim.forEach((a) => - { - animPacket.AnimationList.push({ - AnimID: a, - StartAnim: run - }); - }); - - return circuit.waitForAck(circuit.sendMessage(animPacket, PacketFlags.Reliable), 10000); - } - - startAnimations(anim: UUID[]): Promise - { - return this.animate(anim, true); - } - - stopAnimations(anim: UUID[]): Promise - { - return this.animate(anim, false); - } - setInitialAppearance() { const circuit = this.currentRegion.circuit; @@ -280,5 +247,4 @@ export class Agent }); }); } - } diff --git a/lib/classes/Assets.ts b/lib/classes/Assets.ts deleted file mode 100644 index 3866b82..0000000 --- a/lib/classes/Assets.ts +++ /dev/null @@ -1,4 +0,0 @@ -export class Assets -{ - -} \ No newline at end of file diff --git a/lib/classes/Circuit.ts b/lib/classes/Circuit.ts index 5ac629c..c4af82f 100644 --- a/lib/classes/Circuit.ts +++ b/lib/classes/Circuit.ts @@ -29,7 +29,8 @@ export class Circuit awaitingAck: { [key: number]: { packet: Packet, - timeout: number + timeout: number, + sent: number } } = {}; receivedPackets: { @@ -216,7 +217,8 @@ export class Circuit this.awaitingAck[packet.sequenceNumber] = { packet: packet, - timeout: setTimeout(this.resend.bind(this, packet.sequenceNumber), 1000) + timeout: setTimeout(this.resend.bind(this, packet.sequenceNumber), 1000), + sent: new Date().getTime() }; } let dataToSend: Buffer = Buffer.allocUnsafe(packet.getSize()); @@ -261,6 +263,26 @@ export class Circuit this.sendMessage(msg, 0); } + getOldestUnacked(): number + { + let result = 0; + let oldest = -1; + + const keys: string[] = Object.keys(this.awaitingAck); + + keys.forEach((seqID: string) => + { + const nSeq = parseInt(seqID, 10); + if (oldest === -1 || this.awaitingAck[nSeq].sent < oldest) + { + result = nSeq; + oldest = this.awaitingAck[nSeq].sent; + } + }); + + return result; + } + expireReceivedPacket(sequenceNumber: number) { // Enough time has elapsed that we can forget about this packet diff --git a/lib/classes/ClientCommands.ts b/lib/classes/ClientCommands.ts new file mode 100644 index 0000000..937886f --- /dev/null +++ b/lib/classes/ClientCommands.ts @@ -0,0 +1,35 @@ +import {Region} from './Region'; +import {Agent} from './Agent'; +import {Bot} from '../Bot'; +import {NetworkCommands} from './commands/NetworkCommands'; +import {AssetCommands} from './commands/AssetCommands'; +import {TeleportCommands} from './commands/TeleportCommands'; +import {RegionCommands} from './commands/RegionCommands'; +import {GridCommands} from './commands/GridCommands'; +import {CommunicationsCommands} from './commands/CommunicationsCommands'; +import {AgentCommands} from './commands/AgentCommands'; +import {GroupCommands} from './commands/GroupCommands'; + +export class ClientCommands +{ + public network: NetworkCommands; + public asset: AssetCommands; + public teleport: TeleportCommands; + public region: RegionCommands; + public grid: GridCommands; + public comms: CommunicationsCommands; + public agent: AgentCommands; + public group: GroupCommands; + + constructor(region: Region, agent: Agent, bot: Bot) + { + this.network = new NetworkCommands(region, agent, bot); + this.asset = new AssetCommands(region, agent, bot); + this.teleport = new TeleportCommands(region, agent, bot); + this.region = new RegionCommands(region, agent, bot); + this.grid = new GridCommands(region, agent, bot); + this.comms = new CommunicationsCommands(region, agent, bot); + this.agent = new AgentCommands(region, agent, bot); + this.group = new GroupCommands(region, agent, bot); + } +} diff --git a/lib/classes/ClientEvents.ts b/lib/classes/ClientEvents.ts index 2328b5b..fa37b6e 100644 --- a/lib/classes/ClientEvents.ts +++ b/lib/classes/ClientEvents.ts @@ -2,10 +2,19 @@ import {LureEvent} from '../events/LureEvent'; import {ChatEvent} from '../events/ChatEvent'; import {TeleportEvent} from '../events/TeleportEvent'; import {Subject} from 'rxjs/Subject'; +import {InstantMessageEvent} from '../events/InstantMessageEvent'; +import {GroupInviteEvent} from '../events/GroupInviteEvent'; +import {FriendRequestEvent} from '../events/FriendRequestEvent'; +import {DisconnectEvent} from '../events/DisconnectEvent'; export class ClientEvents { onNearbyChat: Subject = new Subject(); + onInstantMessage: Subject = new Subject(); + onGroupInvite: Subject = new Subject(); + onFriendRequest: Subject = new Subject(); onLure: Subject = new Subject(); onTeleportEvent: Subject = new Subject(); + onDisconnected: Subject = new Subject(); + onCircuitLatency: Subject = new Subject(); } diff --git a/lib/classes/Comms.ts b/lib/classes/Comms.ts index 43926d7..0e262bd 100644 --- a/lib/classes/Comms.ts +++ b/lib/classes/Comms.ts @@ -4,17 +4,15 @@ import {Packet} from './Packet'; import {Message} from '../enums/Message'; import {ChatFromSimulatorMessage} from './messages/ChatFromSimulator'; import {ImprovedInstantMessageMessage} from './messages/ImprovedInstantMessage'; -import {ChatType} from '../enums/ChatType'; import {Utils} from './Utils'; -import {ChatFromViewerMessage} from './messages/ChatFromViewer'; -import {PacketFlags} from '../enums/PacketFlags'; import {ChatEvent} from '../events/ChatEvent'; -import {UUID} from './UUID'; import {InstantMessageDialog} from '../enums/InstantMessageDialog'; import {LureEvent} from '../events/LureEvent'; import {AlertMessageMessage} from './messages/AlertMessage'; import {ClientEvents} from './ClientEvents'; -import {Vector3} from './Vector3'; +import {InstantMessageEvent} from '../events/InstantMessageEvent'; +import {ChatSourceType} from '../enums/ChatSourceType'; +import {InstantMessageEventFlags} from '../enums/InstantMessageEventFlags'; export class Comms { @@ -29,10 +27,10 @@ export class Comms this.agent = agent; this.circuit.subscribeToMessages([ - Message.ImprovedInstantMessage, - Message.ChatFromSimulator, - Message.AlertMessage - ], (packet: Packet) => + Message.ImprovedInstantMessage, + Message.ChatFromSimulator, + Message.AlertMessage + ], (packet: Packet) => { switch (packet.message.id) { @@ -41,7 +39,18 @@ export class Comms switch (im.MessageBlock.Dialog) { case InstantMessageDialog.MessageFromAgent: + { + console.log(im); + const imEvent = new InstantMessageEvent(); + imEvent.source = ChatSourceType.Agent; + imEvent.from = im.AgentData.AgentID; + imEvent.owner = im.AgentData.AgentID; + imEvent.fromName = Utils.BufferToStringSimple(im.MessageBlock.FromAgentName); + imEvent.message = Utils.BufferToStringSimple(im.MessageBlock.Message); + imEvent.flags = InstantMessageEventFlags.normal; + this.clientEvents.onInstantMessage.next(imEvent); break; + } case InstantMessageDialog.MessageBox: break; case InstantMessageDialog.GroupInvitation: @@ -59,15 +68,37 @@ export class Comms case InstantMessageDialog.TaskInventoryDeclined: break; case InstantMessageDialog.MessageFromObject: + { + console.log(im); + const imEvent = new InstantMessageEvent(); + imEvent.source = ChatSourceType.Object; + imEvent.owner = im.AgentData.AgentID; + imEvent.from = im.MessageBlock.ID; + imEvent.fromName = Utils.BufferToStringSimple(im.MessageBlock.FromAgentName); + imEvent.message = Utils.BufferToStringSimple(im.MessageBlock.Message); + imEvent.flags = InstantMessageEventFlags.normal; + this.clientEvents.onInstantMessage.next(imEvent); break; + } case InstantMessageDialog.BusyAutoResponse: + { + const imEvent = new InstantMessageEvent(); + imEvent.source = ChatSourceType.Agent; + imEvent.from = im.AgentData.AgentID; + imEvent.owner = im.AgentData.AgentID; + imEvent.fromName = Utils.BufferToStringSimple(im.MessageBlock.FromAgentName); + imEvent.message = Utils.BufferToStringSimple(im.MessageBlock.Message); + imEvent.flags = InstantMessageEventFlags.busyResponse; + this.clientEvents.onInstantMessage.next(imEvent); break; + } case InstantMessageDialog.ConsoleAndChatHistory: break; case InstantMessageDialog.RequestTeleport: const lureEvent = new LureEvent(); const extraData = Utils.BufferToStringSimple(im.MessageBlock.BinaryBucket).split('|'); - lureEvent.fromName = Utils.BufferToStringSimple(im.MessageBlock.FromAgentName); + lureEvent.from = im.AgentData.AgentID; + lureEvent.fromName = Utils.BufferToStringSimple(im.MessageBlock.FromAgentName); lureEvent.lureMessage = Utils.BufferToStringSimple(im.MessageBlock.Message); lureEvent.regionID = im.MessageBlock.RegionID; lureEvent.position = im.MessageBlock.Position; @@ -105,9 +136,29 @@ export class Comms case InstantMessageDialog.FriendshipDeclined: break; case InstantMessageDialog.StartTyping: + { + const imEvent = new InstantMessageEvent(); + imEvent.source = ChatSourceType.Agent; + imEvent.from = im.AgentData.AgentID; + imEvent.owner = im.AgentData.AgentID; + imEvent.fromName = Utils.BufferToStringSimple(im.MessageBlock.FromAgentName); + imEvent.message = ''; + imEvent.flags = InstantMessageEventFlags.startTyping; + this.clientEvents.onInstantMessage.next(imEvent); break; + } case InstantMessageDialog.StopTyping: + { + const imEvent = new InstantMessageEvent(); + imEvent.source = ChatSourceType.Agent; + imEvent.from = im.AgentData.AgentID; + imEvent.owner = im.AgentData.AgentID; + imEvent.fromName = Utils.BufferToStringSimple(im.MessageBlock.FromAgentName); + imEvent.message = ''; + imEvent.flags = InstantMessageEventFlags.finishTyping; + this.clientEvents.onInstantMessage.next(imEvent); break; + } } break; @@ -130,128 +181,21 @@ export class Comms case Message.AlertMessage: const alertm = packet.message as AlertMessageMessage; - let alertMessage = Utils.BufferToStringSimple(alertm.AlertData.Message); + const alertMessage = Utils.BufferToStringSimple(alertm.AlertData.Message); console.log('Alert message: ' + alertMessage); - alertm.AlertInfo.forEach((info) => { - let alertInfoMessage = Utils.BufferToStringSimple(info.Message); + alertm.AlertInfo.forEach((info) => + { + const alertInfoMessage = Utils.BufferToStringSimple(info.Message); console.log('Alert info message: ' + alertInfoMessage); }); break; } }); } - nearbyChat(message: string, type: ChatType, channel?: number) - { - if (channel === undefined) - { - channel = 0; - } - const cfv = new ChatFromViewerMessage(); - cfv.AgentData = { - AgentID: this.agent.agentID, - SessionID: this.circuit.sessionID - }; - cfv.ChatData = { - Message: Utils.StringToBuffer(message), - Type: type, - Channel: channel - }; - this.circuit.sendMessage(cfv, PacketFlags.Reliable); - } - say(message: string, channel?: number) - { - this.nearbyChat(message, ChatType.Normal, channel); - } - whisper(message: string, channel?: number) - { - this.nearbyChat(message, ChatType.Whisper, channel); - } - shout(message: string, channel?: number) - { - this.nearbyChat(message, ChatType.Shout, channel); - } - startTypingLocal() - { - const cfv = new ChatFromViewerMessage(); - cfv.AgentData = { - AgentID: this.agent.agentID, - SessionID: this.circuit.sessionID - }; - cfv.ChatData = { - Message: Buffer.allocUnsafe(0), - Type: ChatType.StartTyping, - Channel: 0 - }; - this.circuit.sendMessage(cfv, PacketFlags.Reliable); - } - stopTypingLocal() - { - const cfv = new ChatFromViewerMessage(); - cfv.AgentData = { - AgentID: this.agent.agentID, - SessionID: this.circuit.sessionID - }; - cfv.ChatData = { - Message: Buffer.allocUnsafe(0), - Type: ChatType.StopTyping, - Channel: 0 - }; - this.circuit.sendMessage(cfv, PacketFlags.Reliable); - } - typeMessage(message: string) - { - this.startTypingLocal(); - this.agent.startAnimations([new UUID('c541c47f-e0c0-058b-ad1a-d6ae3a4584d9')]).then(() => - { - // Average four characters per second i guess? - const timeToWait = (message.length / 5) * 1000; - setTimeout(() => - { - this.stopTypingLocal(); - this.agent.stopAnimations([new UUID('c541c47f-e0c0-058b-ad1a-d6ae3a4584d9')]).then(() => - { - this.say(message); - }); - }, timeToWait); - }); - } + shutdown() { } - sendInstantMessage(to: UUID | string, message: string): Promise - { - const circuit = this.circuit; - if (typeof to === 'string') - { - to = new UUID(to); - } - message += '\0'; - const agentName = this.agent.firstName + ' ' + this.agent.lastName; - const im: ImprovedInstantMessageMessage = new ImprovedInstantMessageMessage(); - im.AgentData = { - AgentID: this.agent.agentID, - SessionID: circuit.sessionID - }; - im.MessageBlock = { - FromGroup: false, - ToAgentID: to, - ParentEstateID: 0, - RegionID: UUID.zero(), - Position: Vector3.getZero(), - Offline: 0, - Dialog: 0, - ID: UUID.zero(), - Timestamp: 0, - FromAgentName: Utils.StringToBuffer(agentName), - Message: Utils.StringToBuffer(message), - BinaryBucket: Buffer.allocUnsafe(0) - }; - im.EstateBlock = { - EstateID: 0 - }; - const sequenceNo = circuit.sendMessage(im, PacketFlags.Reliable); - return circuit.waitForAck(sequenceNo, 10000); - } -} \ No newline at end of file +} diff --git a/lib/classes/IPAddress.ts b/lib/classes/IPAddress.ts index c03e4fe..eb36ab4 100644 --- a/lib/classes/IPAddress.ts +++ b/lib/classes/IPAddress.ts @@ -10,25 +10,39 @@ export class IPAddress } public toString = (): string => { - return this.ip.toString(); + try + { + return this.ip.toString(); + } + catch (ignore) + { + return ''; + } }; constructor(buf?: Buffer | string, pos?: number) { - if (buf !== undefined && buf instanceof Buffer) + try { - if (pos !== undefined) + if (buf !== undefined && buf instanceof Buffer) { - const bytes = buf.slice(pos, 4); - this.ip = ipaddr.fromByteArray(bytes); - } - else - { - if (ipaddr.isValid(buf)) + if (pos !== undefined) { - this.ip = ipaddr.parse(buf); + const bytes = buf.slice(pos, 4); + this.ip = ipaddr.fromByteArray(bytes); + } + else + { + if (ipaddr.isValid(buf)) + { + this.ip = ipaddr.parse(buf); + } } } } + catch (ignore) + { + this.ip = ipaddr.parse('0.0.0.0'); + } } writeToBuffer(buf: Buffer, pos: number) { diff --git a/lib/classes/Utils.ts b/lib/classes/Utils.ts index 26843a5..b5f1a2f 100644 --- a/lib/classes/Utils.ts +++ b/lib/classes/Utils.ts @@ -1,5 +1,5 @@ import * as Long from 'long'; -import {HTTPAssets} from "../enums/HTTPAssets"; +import {HTTPAssets} from '../enums/HTTPAssets'; export class Utils { diff --git a/lib/classes/commands/AgentCommands.ts b/lib/classes/commands/AgentCommands.ts new file mode 100644 index 0000000..9ede338 --- /dev/null +++ b/lib/classes/commands/AgentCommands.ts @@ -0,0 +1,39 @@ +import {UUID} from '../UUID'; +import {AgentAnimationMessage} from '../messages/AgentAnimation'; +import {PacketFlags} from '../../enums/PacketFlags'; +import {CommandsBase} from './CommandsBase'; + +export class AgentCommands extends CommandsBase +{ + private animate(anim: UUID[], run: boolean): Promise + { + + const circuit = this.currentRegion.circuit; + const animPacket = new AgentAnimationMessage(); + animPacket.AgentData = { + AgentID: this.agent.agentID, + SessionID: circuit.sessionID + }; + animPacket.PhysicalAvatarEventList = []; + animPacket.AnimationList = []; + anim.forEach((a) => + { + animPacket.AnimationList.push({ + AnimID: a, + StartAnim: run + }); + }); + + return circuit.waitForAck(circuit.sendMessage(animPacket, PacketFlags.Reliable), 10000); + } + + startAnimations(anim: UUID[]): Promise + { + return this.animate(anim, true); + } + + stopAnimations(anim: UUID[]): Promise + { + return this.animate(anim, false); + } +} diff --git a/lib/classes/commands/AssetCommands.ts b/lib/classes/commands/AssetCommands.ts new file mode 100644 index 0000000..b8d1736 --- /dev/null +++ b/lib/classes/commands/AssetCommands.ts @@ -0,0 +1,50 @@ +import {CommandsBase} from './CommandsBase'; +import {HTTPAssets} from '../../enums/HTTPAssets'; +import {UUID} from '../UUID'; +import * as LLSD from 'llsd'; +import {Utils} from '../Utils'; + +export class AssetCommands extends CommandsBase +{ + downloadAsset(type: HTTPAssets, uuid: UUID) + { + return this.currentRegion.caps.downloadAsset(uuid, type); + } + + uploadAsset(type: HTTPAssets, data: Buffer, name: string, description: string): Promise + { + return new Promise((resolve, reject) => + { + if (this.agent && this.agent.inventory && this.agent.inventory.main && this.agent.inventory.main.root) + { + this.currentRegion.caps.capsRequestXML('NewFileAgentInventory', { + 'folder_id': new LLSD.UUID(this.agent.inventory.main.root.toString()), + 'asset_type': type, + 'inventory_type': Utils.HTTPAssetTypeToInventoryType(type), + 'name': name, + 'description': description, + 'everyone_mask': (1 << 13) | (1 << 14) | (1 << 15) | (1 << 19), + 'group_mask': (1 << 13) | (1 << 14) | (1 << 15) | (1 << 19), + 'next_owner_mask': (1 << 13) | (1 << 14) | (1 << 15) | (1 << 19), + 'expected_upload_cost': 0 + }).then((response: any) => + { + if (response['state'] === 'upload') + { + const uploadURL = response['uploader']; + this.currentRegion.caps.capsRequestUpload(uploadURL, data).then((responseUpload: any) => + { + resolve(new UUID(responseUpload['new_asset'].toString())); + }).catch((err) => + { + reject(err); + }); + } + }).catch((err) => + { + console.log(err); + }) + } + }); + } +} diff --git a/lib/classes/commands/CommandsBase.ts b/lib/classes/commands/CommandsBase.ts new file mode 100644 index 0000000..424b8a8 --- /dev/null +++ b/lib/classes/commands/CommandsBase.ts @@ -0,0 +1,20 @@ +import {Region} from '../Region'; +import {Bot} from '../../Bot'; +import {Agent} from '../Agent'; +import {Circuit} from '../Circuit'; + +export class CommandsBase +{ + protected currentRegion: Region; + protected agent: Agent; + protected bot: Bot; + protected circuit: Circuit; + + constructor(region: Region, agent: Agent, bot: Bot) + { + this.currentRegion = region; + this.agent = agent; + this.bot = bot; + this.circuit = this.currentRegion.circuit; + } +} \ No newline at end of file diff --git a/lib/classes/commands/CommunicationsCommands.ts b/lib/classes/commands/CommunicationsCommands.ts new file mode 100644 index 0000000..f2db552 --- /dev/null +++ b/lib/classes/commands/CommunicationsCommands.ts @@ -0,0 +1,296 @@ +import {CommandsBase} from './CommandsBase'; +import {UUID} from '../UUID'; +import {Utils} from '../Utils'; +import {PacketFlags} from '../../enums/PacketFlags'; +import {ImprovedInstantMessageMessage} from '../messages/ImprovedInstantMessage'; +import {Vector3} from '../Vector3'; +import {ChatFromViewerMessage} from '../messages/ChatFromViewer'; +import {ChatType} from '../../enums/ChatType'; +import {InstantMessageDialog} from '../../enums/InstantMessageDialog'; +import Timer = NodeJS.Timer; + +export class CommunicationsCommands extends CommandsBase +{ + sendInstantMessage(to: UUID | string, message: string): Promise + { + const circuit = this.circuit; + if (typeof to === 'string') + { + to = new UUID(to); + } + const agentName = this.agent.firstName + ' ' + this.agent.lastName; + const im: ImprovedInstantMessageMessage = new ImprovedInstantMessageMessage(); + im.AgentData = { + AgentID: this.agent.agentID, + SessionID: circuit.sessionID + }; + im.MessageBlock = { + FromGroup: false, + ToAgentID: to, + ParentEstateID: 0, + RegionID: UUID.zero(), + Position: Vector3.getZero(), + Offline: 1, + Dialog: 0, + ID: UUID.zero(), + Timestamp: 0, + FromAgentName: Utils.StringToBuffer(agentName), + Message: Utils.StringToBuffer(message), + BinaryBucket: Buffer.allocUnsafe(0) + }; + im.EstateBlock = { + EstateID: 0 + }; + const sequenceNo = circuit.sendMessage(im, PacketFlags.Reliable); + return circuit.waitForAck(sequenceNo, 10000); + } + + nearbyChat(message: string, type: ChatType, channel?: number): Promise + { + if (channel === undefined) + { + channel = 0; + } + const cfv = new ChatFromViewerMessage(); + cfv.AgentData = { + AgentID: this.agent.agentID, + SessionID: this.circuit.sessionID + }; + cfv.ChatData = { + Message: Utils.StringToBuffer(message), + Type: type, + Channel: channel + }; + const sequenceNo = this.circuit.sendMessage(cfv, PacketFlags.Reliable); + return this.circuit.waitForAck(sequenceNo, 10000); + } + + say(message: string, channel?: number): Promise + { + return this.nearbyChat(message, ChatType.Normal, channel); + } + + whisper(message: string, channel?: number): Promise + { + return this.nearbyChat(message, ChatType.Whisper, channel); + } + + shout(message: string, channel?: number): Promise + { + return this.nearbyChat(message, ChatType.Shout, channel); + } + + startTypingLocal(): Promise + { + const cfv = new ChatFromViewerMessage(); + cfv.AgentData = { + AgentID: this.agent.agentID, + SessionID: this.circuit.sessionID + }; + cfv.ChatData = { + Message: Buffer.allocUnsafe(0), + Type: ChatType.StartTyping, + Channel: 0 + }; + const sequenceNo = this.circuit.sendMessage(cfv, PacketFlags.Reliable); + return this.circuit.waitForAck(sequenceNo, 10000); + } + + stopTypingLocal(): Promise + { + const cfv = new ChatFromViewerMessage(); + cfv.AgentData = { + AgentID: this.agent.agentID, + SessionID: this.circuit.sessionID + }; + cfv.ChatData = { + Message: Buffer.allocUnsafe(0), + Type: ChatType.StopTyping, + Channel: 0 + }; + const sequenceNo = this.circuit.sendMessage(cfv, PacketFlags.Reliable); + return this.circuit.waitForAck(sequenceNo, 10000); + } + + startTypingIM(to: UUID | string): Promise + { + if (typeof to === 'string') + { + to = new UUID(to); + } + const circuit = this.circuit; + const agentName = this.agent.firstName + ' ' + this.agent.lastName; + const im: ImprovedInstantMessageMessage = new ImprovedInstantMessageMessage(); + im.AgentData = { + AgentID: this.agent.agentID, + SessionID: circuit.sessionID + }; + im.MessageBlock = { + FromGroup: false, + ToAgentID: to, + ParentEstateID: 0, + RegionID: UUID.zero(), + Position: Vector3.getZero(), + Offline: 0, + Dialog: InstantMessageDialog.StartTyping, + ID: UUID.zero(), + Timestamp: 0, + FromAgentName: Utils.StringToBuffer(agentName), + Message: Utils.StringToBuffer(''), + BinaryBucket: Buffer.allocUnsafe(0) + }; + im.EstateBlock = { + EstateID: 0 + }; + const sequenceNo = circuit.sendMessage(im, PacketFlags.Reliable); + return circuit.waitForAck(sequenceNo, 10000); + } + + stopTypingIM(to: UUID | string): Promise + { + if (typeof to === 'string') + { + to = new UUID(to); + } + const circuit = this.circuit; + const agentName = this.agent.firstName + ' ' + this.agent.lastName; + const im: ImprovedInstantMessageMessage = new ImprovedInstantMessageMessage(); + im.AgentData = { + AgentID: this.agent.agentID, + SessionID: circuit.sessionID + }; + im.MessageBlock = { + FromGroup: false, + ToAgentID: to, + ParentEstateID: 0, + RegionID: UUID.zero(), + Position: Vector3.getZero(), + Offline: 0, + Dialog: InstantMessageDialog.StopTyping, + ID: UUID.zero(), + Timestamp: 0, + FromAgentName: Utils.StringToBuffer(agentName), + Message: Utils.StringToBuffer(''), + BinaryBucket: Buffer.allocUnsafe(0) + }; + im.EstateBlock = { + EstateID: 0 + }; + const sequenceNo = circuit.sendMessage(im, PacketFlags.Reliable); + return circuit.waitForAck(sequenceNo, 10000); + } + + typeInstantMessage(to: UUID | string, message: string, thinkingTime?: number, charactersPerSecond?: number): Promise + { + return new Promise((resolve, reject) => + { + if (thinkingTime === undefined) + { + thinkingTime = 2000; + } + setTimeout(() => + { + if (typeof to === 'string') + { + to = new UUID(to); + } + let typeTimer: Timer | null = null; + this.startTypingIM(to).then(() => + { + typeTimer = setInterval(() => + { + this.startTypingIM(to).catch(() => + { + // ignore + }); + }, 5000); + if (charactersPerSecond === undefined) + { + charactersPerSecond = 5; + } + + const timeToWait = (message.length / charactersPerSecond) * 1000; + setTimeout(() => + { + if (typeTimer !== null) + { + clearInterval(typeTimer); + typeTimer = null; + } + this.stopTypingIM(to).then(() => + { + this.sendInstantMessage(to, message).then(() => + { + resolve(); + }).catch((err) => + { + reject(err); + }); + }).catch((err) => + { + reject(err); + }); + }, timeToWait); + }).catch((err) => + { + if (typeTimer !== null) + { + clearInterval(typeTimer); + typeTimer = null; + } + reject(err); + }); + }, thinkingTime); + }); + } + + typeLocalMessage(message: string, thinkingTime?: number, charactersPerSecond?: number): Promise + { + return new Promise((resolve, reject) => + { + if (thinkingTime === undefined) + { + thinkingTime = 0; + } + setTimeout(() => + { + this.startTypingLocal().then(() => + { + this.bot.clientCommands.agent.startAnimations([new UUID('c541c47f-e0c0-058b-ad1a-d6ae3a4584d9')]).then(() => + { + if (charactersPerSecond === undefined) + { + charactersPerSecond = 5; + } + + const timeToWait = (message.length / charactersPerSecond) * 1000; + setTimeout(() => + { + this.stopTypingLocal().then(() => + { + this.bot.clientCommands.agent.stopAnimations([new UUID('c541c47f-e0c0-058b-ad1a-d6ae3a4584d9')]).then(() => + { + this.say(message).then(() => + { + resolve(); + }).catch((err) => + { + reject(err); + }); + }).catch((err) => { + reject(err); + }); + }).catch((err) => { + reject(err); + }); + }, timeToWait); + }).catch((err) => { + reject(err); + }); + }).catch((err) => { + reject(err); + }); + }, thinkingTime); + }); + } +} diff --git a/lib/classes/commands/GridCommands.ts b/lib/classes/commands/GridCommands.ts new file mode 100644 index 0000000..bb0dce7 --- /dev/null +++ b/lib/classes/commands/GridCommands.ts @@ -0,0 +1,141 @@ +import {MapInfoReply} from '../../events/MapInfoReply'; +import {Packet} from '../Packet'; +import * as Long from 'long'; +import {RegionHandleRequestMessage} from '../messages/RegionHandleRequest'; +import {MapItemReplyMessage} from '../messages/MapItemReply'; +import {Message} from '../../enums/Message'; +import {MapBlockReplyMessage} from '../messages/MapBlockReply'; +import {MapBlockRequestMessage} from '../messages/MapBlockRequest'; +import {UUID} from '../UUID'; +import {MapItemRequestMessage} from '../messages/MapItemRequest'; +import {Utils} from '../Utils'; +import {PacketFlags} from '../../enums/PacketFlags'; +import {GridItemType} from '../../enums/GridItemType'; +import {RegionIDAndHandleReplyMessage} from '../messages/RegionIDAndHandleReply'; +import {CommandsBase} from './CommandsBase'; +export class GridCommands extends CommandsBase +{ + getRegionHandle(regionID: UUID): Promise + { + return new Promise((resolve, reject) => + { + const circuit = this.currentRegion.circuit; + const msg: RegionHandleRequestMessage = new RegionHandleRequestMessage(); + msg.RequestBlock = { + RegionID: regionID, + }; + circuit.sendMessage(msg, PacketFlags.Reliable); + circuit.waitForMessage(Message.RegionIDAndHandleReply, 10000, (packet: Packet) => + { + const filterMsg = packet.message as RegionIDAndHandleReplyMessage; + return (filterMsg.ReplyBlock.RegionID.toString() === regionID.toString()); + }).then((packet: Packet) => + { + const responseMsg = packet.message as RegionIDAndHandleReplyMessage; + resolve(responseMsg.ReplyBlock.RegionHandle); + }); + }); + } + + getRegionMapInfo(gridX: number, gridY: number): Promise + { + return new Promise((resolve, reject) => + { + const circuit = this.currentRegion.circuit; + const response = new MapInfoReply(); + const msg: MapBlockRequestMessage = new MapBlockRequestMessage(); + msg.AgentData = { + AgentID: this.agent.agentID, + SessionID: circuit.sessionID, + Flags: 65536, + EstateID: 0, + Godlike: true + }; + msg.PositionData = { + MinX: (gridX / 256), + MaxX: (gridX / 256), + MinY: (gridY / 256), + MaxY: (gridY / 256) + }; + circuit.sendMessage(msg, PacketFlags.Reliable); + circuit.waitForMessage(Message.MapBlockReply, 10000, (packet: Packet) => + { + const filterMsg = packet.message as MapBlockReplyMessage; + let found = false; + filterMsg.Data.forEach((data) => + { + if (data.X === (gridX / 256) && data.Y === (gridY / 256)) + { + found = true; + } + }); + return found; + }).then((packet: Packet) => + { + const responseMsg = packet.message as MapBlockReplyMessage; + responseMsg.Data.forEach((data) => + { + if (data.X === (gridX / 256) && data.Y === (gridY / 256)) + { + response.name = Utils.BufferToStringSimple(data.Name); + response.accessFlags = data.Access; + response.mapImage = data.MapImageID; + } + }); + + // Now get the region handle + const regionHandle: Long = Utils.RegionCoordinatesToHandle(gridX, gridY); + + const mi = new MapItemRequestMessage(); + mi.AgentData = { + AgentID: this.agent.agentID, + SessionID: circuit.sessionID, + Flags: 2, + EstateID: 0, + Godlike: false + }; + mi.RequestData = { + ItemType: GridItemType.AgentLocations, + RegionHandle: regionHandle + }; + circuit.sendMessage(mi, PacketFlags.Reliable); + const minX = Math.floor(gridX / 256) * 256; + const maxX = minX + 256; + const minY = Math.floor(gridY / 256) * 256; + const maxY = minY + 256; + response.avatars = []; + circuit.waitForMessage(Message.MapItemReply, 10000, (packet: Packet) => + { + const filterMsg = packet.message as MapItemReplyMessage; + let found = false; + filterMsg.Data.forEach((data) => + { + // Check if avatar is within our bounds + if (data.X >= minX && data.X <= maxX && data.Y >= minY && data.Y <= maxY) + { + found = true; + } + }); + return found; + }).then((packet2: Packet) => + { + const responseMsg2 = packet2.message as MapItemReplyMessage; + responseMsg2.Data.forEach((data) => + { + response.avatars.push({ + X: data.X, + Y: data.Y + }); + }); + resolve(response); + }).catch((err) => + { + reject(err); + }); + }).catch((err) => + { + reject(err); + }); + }); + } +} diff --git a/lib/classes/commands/GroupCommands.ts b/lib/classes/commands/GroupCommands.ts new file mode 100644 index 0000000..9ae5fb8 --- /dev/null +++ b/lib/classes/commands/GroupCommands.ts @@ -0,0 +1,44 @@ +import {CommandsBase} from './CommandsBase'; +import {UUID} from '../UUID'; +import {InstantMessageDialog} from '../../enums/InstantMessageDialog'; +import {Utils} from '../Utils'; +import {PacketFlags} from '../../enums/PacketFlags'; +import {ImprovedInstantMessageMessage} from '../messages/ImprovedInstantMessage'; +import {Vector3} from '../Vector3'; + +export class GroupCommands extends CommandsBase +{ + sendGroupNotice(group: UUID | string, subject: string, message: string) + { + if (typeof group === 'string') + { + group = new UUID(group); + } + const circuit = this.circuit; + const agentName = this.agent.firstName + ' ' + this.agent.lastName; + const im: ImprovedInstantMessageMessage = new ImprovedInstantMessageMessage(); + im.AgentData = { + AgentID: this.agent.agentID, + SessionID: circuit.sessionID + }; + im.MessageBlock = { + FromGroup: false, + ToAgentID: group, + ParentEstateID: 0, + RegionID: UUID.zero(), + Position: Vector3.getZero(), + Offline: 0, + Dialog: InstantMessageDialog.GroupNotice, + ID: UUID.zero(), + Timestamp: 0, + FromAgentName: Utils.StringToBuffer(agentName), + Message: Utils.StringToBuffer(subject + '|' + message), + BinaryBucket: Buffer.allocUnsafe(0) + }; + im.EstateBlock = { + EstateID: 0 + }; + const sequenceNo = circuit.sendMessage(im, PacketFlags.Reliable); + return circuit.waitForAck(sequenceNo, 10000); + } +} diff --git a/lib/classes/commands/NetworkCommands.ts b/lib/classes/commands/NetworkCommands.ts new file mode 100644 index 0000000..3812b38 --- /dev/null +++ b/lib/classes/commands/NetworkCommands.ts @@ -0,0 +1,50 @@ +import {CommandsBase} from './CommandsBase'; +import {PacketFlags} from '../../enums/PacketFlags'; +import {AgentThrottleMessage} from '../messages/AgentThrottle'; + +export class NetworkCommands extends CommandsBase +{ + private throttleGenCounter = 0; + + setBandwidth(total: number) + { + const agentThrottle: AgentThrottleMessage = new AgentThrottleMessage(); + agentThrottle.AgentData = { + AgentID: this.agent.agentID, + SessionID: this.circuit.sessionID, + CircuitCode: this.circuit.circuitCode + }; + + const throttleData = Buffer.allocUnsafe(28); + let pos = 0; + + const resendThrottle = total * 0.1; + const landThrottle = total * 0.172; + const windThrottle = total * 0.05; + const cloudThrottle = total * 0.05; + const taskThrottle = total * 0.234; + const textureThrottle = total * 0.234; + const assetThrottle = total * 0.160; + + + throttleData.writeFloatLE(resendThrottle, pos); + pos += 4; + throttleData.writeFloatLE(landThrottle, pos); + pos += 4; + throttleData.writeFloatLE(windThrottle, pos); + pos += 4; + throttleData.writeFloatLE(cloudThrottle, pos); + pos += 4; + throttleData.writeFloatLE(taskThrottle, pos); + pos += 4; + throttleData.writeFloatLE(textureThrottle, pos); + pos += 4; + throttleData.writeFloatLE(assetThrottle, pos); + + agentThrottle.Throttle = { + GenCounter: this.throttleGenCounter++, + Throttles: throttleData + }; + this.circuit.sendMessage(agentThrottle, PacketFlags.Reliable); + } +} diff --git a/lib/classes/commands/RegionCommands.ts b/lib/classes/commands/RegionCommands.ts new file mode 100644 index 0000000..e52f35e --- /dev/null +++ b/lib/classes/commands/RegionCommands.ts @@ -0,0 +1,6 @@ +import {CommandsBase} from './CommandsBase'; + +export class RegionCommands extends CommandsBase +{ + +} diff --git a/lib/classes/commands/TeleportCommands.ts b/lib/classes/commands/TeleportCommands.ts new file mode 100644 index 0000000..cf1dfbc --- /dev/null +++ b/lib/classes/commands/TeleportCommands.ts @@ -0,0 +1,82 @@ +import {CommandsBase} from './CommandsBase'; +import {Region} from '../Region'; +import {LureEvent} from '../../events/LureEvent'; +import {TeleportEventType} from '../../enums/TeleportEventType'; +import {TeleportEvent} from '../../events/TeleportEvent'; +import {PacketFlags} from '../../enums/PacketFlags'; +import {TeleportLureRequestMessage} from '../messages/TeleportLureRequest'; +import {TeleportFlags} from '../../enums/TeleportFlags'; + +export class TeleportCommands extends CommandsBase +{ + acceptTeleport(lure: LureEvent): Promise + { + return new Promise((resolve, reject) => + { + const circuit = this.currentRegion.circuit; + const tlr = new TeleportLureRequestMessage(); + tlr.Info = { + AgentID: this.agent.agentID, + SessionID: circuit.sessionID, + LureID: lure.lureID, + TeleportFlags: TeleportFlags.ViaLure + }; + circuit.sendMessage(tlr, PacketFlags.Reliable); + if (this.currentRegion.caps.eventQueueClient) + { + if (this.bot.clientEvents === null) + { + reject(new Error('ClientEvents is null')); + return; + } + const subscription = this.bot.clientEvents.onTeleportEvent.subscribe((e: TeleportEvent) => + { + if (e.eventType === TeleportEventType.TeleportFailed || e.eventType === TeleportEventType.TeleportCompleted) + { + subscription.unsubscribe(); + } + if (e.eventType === TeleportEventType.TeleportFailed) + { + reject(e); + } + else if (e.eventType === TeleportEventType.TeleportCompleted) + { + if (e.simIP === 'local') + { + // Local TP - no need for any other shindiggery + resolve(e); + return; + } + + if (this.bot.clientEvents === null) + { + reject(new Error('ClientEvents is null')); + return; + } + + // Successful teleport! First, rip apart circuit + this.currentRegion.shutdown(); + const region: Region = new Region(this.agent, this.bot.clientEvents); + region.circuit.circuitCode = this.currentRegion.circuit.circuitCode; + region.circuit.secureSessionID = this.currentRegion.circuit.secureSessionID; + region.circuit.sessionID = this.currentRegion.circuit.sessionID; + region.circuit.udpBlacklist = this.currentRegion.circuit.udpBlacklist; + region.circuit.ipAddress = e.simIP; + region.circuit.port = e.simPort; + this.agent.setCurrentRegion(region); + this.currentRegion = region; + this.currentRegion.activateCaps(e.seedCapability); + + this.bot.changeRegion(this.currentRegion).then(() => + { + resolve(e); + }).catch((error) => + { + reject(error); + }); + } + }); + } + }); + } +} diff --git a/lib/enums/InstantMessageEventFlags.ts b/lib/enums/InstantMessageEventFlags.ts new file mode 100644 index 0000000..0393d9b --- /dev/null +++ b/lib/enums/InstantMessageEventFlags.ts @@ -0,0 +1,7 @@ +export enum InstantMessageEventFlags +{ + normal = 0, + busyResponse = 1, + startTyping = 2, + finishTyping = 4 +} \ No newline at end of file diff --git a/lib/events/DisconnectEvent.ts b/lib/events/DisconnectEvent.ts new file mode 100644 index 0000000..15d283f --- /dev/null +++ b/lib/events/DisconnectEvent.ts @@ -0,0 +1,5 @@ +export class DisconnectEvent +{ + requested: boolean; + message: string; +} \ No newline at end of file diff --git a/lib/events/FriendRequestEvent.ts b/lib/events/FriendRequestEvent.ts new file mode 100644 index 0000000..99e3de9 --- /dev/null +++ b/lib/events/FriendRequestEvent.ts @@ -0,0 +1,4 @@ +export class FriendRequestEvent +{ + +} \ No newline at end of file diff --git a/lib/events/GroupInviteEvent.ts b/lib/events/GroupInviteEvent.ts new file mode 100644 index 0000000..48e7ef5 --- /dev/null +++ b/lib/events/GroupInviteEvent.ts @@ -0,0 +1,4 @@ +export class GroupInviteEvent +{ + +} \ No newline at end of file diff --git a/lib/events/InstantMessageEvent.ts b/lib/events/InstantMessageEvent.ts new file mode 100644 index 0000000..8de4e51 --- /dev/null +++ b/lib/events/InstantMessageEvent.ts @@ -0,0 +1,13 @@ +import {ChatSourceType} from '../enums/ChatSourceType'; +import {UUID} from '../classes/UUID'; +import {InstantMessageEventFlags} from '../enums/InstantMessageEventFlags'; + +export class InstantMessageEvent +{ + source: ChatSourceType; + fromName: string; + from: UUID; + owner: UUID; + message: string; + flags: InstantMessageEventFlags; +} diff --git a/lib/events/LureEvent.ts b/lib/events/LureEvent.ts index da97385..c46b035 100644 --- a/lib/events/LureEvent.ts +++ b/lib/events/LureEvent.ts @@ -3,6 +3,7 @@ import {Vector3} from '../classes/Vector3'; export class LureEvent { + from: UUID; fromName: string; lureMessage: string; regionID: UUID; diff --git a/lib/index.ts b/lib/index.ts index 56b819c..04b71c7 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -8,6 +8,9 @@ import {BVH} from './classes/BVH'; import {AssetType} from './enums/AssetType'; import {HTTPAssets} from './enums/HTTPAssets'; +import {InstantMessageEventFlags} from './enums/InstantMessageEventFlags'; +import {InstantMessageEvent} from './events/InstantMessageEvent'; +import {ChatSourceType} from './enums/ChatSourceType'; export { Bot, @@ -15,5 +18,8 @@ export { AssetType, HTTPAssets, ClientEvents, - BVH + BVH, + InstantMessageEvent, + InstantMessageEventFlags, + ChatSourceType };