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
};