diff --git a/dist/classes/commands/ParcelCommands.d.ts b/dist/classes/commands/ParcelCommands.d.ts new file mode 100644 index 0000000..f906e8f --- /dev/null +++ b/dist/classes/commands/ParcelCommands.d.ts @@ -0,0 +1,6 @@ +import { CommandsBase } from './CommandsBase'; +import { UUID } from '../UUID'; +import { ParcelInfoReplyEvent } from '../..'; +export declare class ParcelCommands extends CommandsBase { + getParcelInfo(parcelID: UUID | string): Promise; +} diff --git a/dist/classes/commands/ParcelCommands.js b/dist/classes/commands/ParcelCommands.js new file mode 100644 index 0000000..c56b111 --- /dev/null +++ b/dist/classes/commands/ParcelCommands.js @@ -0,0 +1,60 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const CommandsBase_1 = require("./CommandsBase"); +const ParcelInfoRequest_1 = require("../messages/ParcelInfoRequest"); +const UUID_1 = require("../UUID"); +const Message_1 = require("../../enums/Message"); +const FilterResponse_1 = require("../../enums/FilterResponse"); +const Utils_1 = require("../Utils"); +const __1 = require("../.."); +class ParcelCommands extends CommandsBase_1.CommandsBase { + getParcelInfo(parcelID) { + return __awaiter(this, void 0, void 0, function* () { + if (typeof parcelID === 'string') { + parcelID = new UUID_1.UUID(parcelID); + } + const msg = new ParcelInfoRequest_1.ParcelInfoRequestMessage(); + msg.AgentData = { + AgentID: this.agent.agentID, + SessionID: this.circuit.sessionID + }; + msg.Data = { + ParcelID: parcelID + }; + this.circuit.sendMessage(msg, __1.PacketFlags.Reliable); + const parcelInfoReply = (yield this.circuit.waitForMessage(Message_1.Message.ParcelInfoReply, 10000, (packet) => { + const replyMessage = packet.message; + if (replyMessage.Data.ParcelID.equals(parcelID)) { + return FilterResponse_1.FilterResponse.Match; + } + return FilterResponse_1.FilterResponse.NoMatch; + })); + return new class { + constructor() { + this.OwnerID = parcelInfoReply.Data.OwnerID; + this.ParcelName = Utils_1.Utils.BufferToStringSimple(parcelInfoReply.Data.Name); + this.ParcelDescription = Utils_1.Utils.BufferToStringSimple(parcelInfoReply.Data.Desc); + this.Area = parcelInfoReply.Data.ActualArea; + this.BillableArea = parcelInfoReply.Data.BillableArea; + this.Flags = parcelInfoReply.Data.Flags; + this.GlobalCoordinates = new __1.Vector3([parcelInfoReply.Data.GlobalX, parcelInfoReply.Data.GlobalY, parcelInfoReply.Data.GlobalZ]); + this.RegionName = Utils_1.Utils.BufferToStringSimple(parcelInfoReply.Data.SimName); + this.SnapshotID = parcelInfoReply.Data.SnapshotID; + this.Traffic = parcelInfoReply.Data.Dwell; + this.SalePrice = parcelInfoReply.Data.SalePrice; + this.AuctionID = parcelInfoReply.Data.AuctionID; + } + }; + }); + } +} +exports.ParcelCommands = ParcelCommands; +//# sourceMappingURL=ParcelCommands.js.map \ No newline at end of file diff --git a/dist/classes/commands/ParcelCommands.js.map b/dist/classes/commands/ParcelCommands.js.map new file mode 100644 index 0000000..f8c1345 --- /dev/null +++ b/dist/classes/commands/ParcelCommands.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ParcelCommands.js","sourceRoot":"","sources":["../../../lib/classes/commands/ParcelCommands.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,iDAA4C;AAC5C,qEAAuE;AACvE,kCAA6B;AAC7B,iDAA4C;AAG5C,+DAA0D;AAC1D,oCAA+B;AAC/B,6BAAiE;AAIjE,oBAA4B,SAAQ,2BAAY;IAEtC,aAAa,CAAC,QAAuB;;YAKvC,EAAE,CAAC,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CACjC,CAAC;gBACG,QAAQ,GAAG,IAAI,WAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;YAGD,MAAM,GAAG,GAA6B,IAAI,4CAAwB,EAAE,CAAC;YAGrE,GAAG,CAAC,SAAS,GAAG;gBACZ,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;gBAC3B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;aACpC,CAAC;YACF,GAAG,CAAC,IAAI,GAAG;gBACP,QAAQ,EAAE,QAAQ;aACrB,CAAC;YAGF,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,eAAW,CAAC,QAAQ,CAAC,CAAC;YAGpD,MAAM,eAAe,GAA2B,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,iBAAO,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,MAAc,EAAkB,EAAE;gBAIlJ,MAAM,YAAY,GAA2B,MAAM,CAAC,OAAiC,CAAC;gBACtF,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAChD,CAAC;oBAGG,MAAM,CAAC,+BAAc,CAAC,KAAK,CAAC;gBAChC,CAAC;gBACD,MAAM,CAAC,+BAAc,CAAC,OAAO,CAAC;YAClC,CAAC,CAAC,CAA2B,CAAC;YAQ9B,MAAM,CAAC,IAAI;gBAAA;oBAEP,YAAO,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;oBAGvC,eAAU,GAAG,aAAK,CAAC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnE,sBAAiB,GAAG,aAAK,CAAC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC1E,SAAI,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;oBACvC,iBAAY,GAAG,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;oBACjD,UAAK,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;oBACnC,sBAAiB,GAAG,IAAI,WAAO,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC5H,eAAU,GAAI,aAAK,CAAC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACvE,eAAU,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;oBAC7C,YAAO,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;oBACrC,cAAS,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;oBAC3C,cAAS,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC/C,CAAC;aAAA,CAAC;QACN,CAAC;KAAA;CACJ;AAlED,wCAkEC"} \ No newline at end of file diff --git a/dist/enums/ParcelInfoFlags.d.ts b/dist/enums/ParcelInfoFlags.d.ts new file mode 100644 index 0000000..cb33113 --- /dev/null +++ b/dist/enums/ParcelInfoFlags.d.ts @@ -0,0 +1,3 @@ +export declare enum ParcelInfoFlags { + mature = 1, +} diff --git a/dist/enums/ParcelInfoFlags.js b/dist/enums/ParcelInfoFlags.js new file mode 100644 index 0000000..ceae249 --- /dev/null +++ b/dist/enums/ParcelInfoFlags.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var ParcelInfoFlags; +(function (ParcelInfoFlags) { + ParcelInfoFlags[ParcelInfoFlags["mature"] = 1] = "mature"; +})(ParcelInfoFlags = exports.ParcelInfoFlags || (exports.ParcelInfoFlags = {})); +//# sourceMappingURL=ParcelInfoFlags.js.map \ No newline at end of file diff --git a/dist/enums/ParcelInfoFlags.js.map b/dist/enums/ParcelInfoFlags.js.map new file mode 100644 index 0000000..140e397 --- /dev/null +++ b/dist/enums/ParcelInfoFlags.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ParcelInfoFlags.js","sourceRoot":"","sources":["../../lib/enums/ParcelInfoFlags.ts"],"names":[],"mappings":";;AAAA,IAAY,eAGX;AAHD,WAAY,eAAe;IAEvB,yDAAe,CAAA;AACnB,CAAC,EAHW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAG1B"} \ No newline at end of file diff --git a/dist/events/ParcelInfoReplyEvent.d.ts b/dist/events/ParcelInfoReplyEvent.d.ts new file mode 100644 index 0000000..df3d6ff --- /dev/null +++ b/dist/events/ParcelInfoReplyEvent.d.ts @@ -0,0 +1,15 @@ +import { ParcelInfoFlags, UUID, Vector3 } from '..'; +export declare class ParcelInfoReplyEvent { + OwnerID: UUID; + ParcelName: string; + ParcelDescription: string; + Area: number; + BillableArea: number; + Flags: ParcelInfoFlags; + GlobalCoordinates: Vector3; + RegionName: string; + SnapshotID: UUID; + Traffic: number; + SalePrice: number; + AuctionID: number; +} diff --git a/dist/events/ParcelInfoReplyEvent.js b/dist/events/ParcelInfoReplyEvent.js new file mode 100644 index 0000000..282ca25 --- /dev/null +++ b/dist/events/ParcelInfoReplyEvent.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +class ParcelInfoReplyEvent { +} +exports.ParcelInfoReplyEvent = ParcelInfoReplyEvent; +//# sourceMappingURL=ParcelInfoReplyEvent.js.map \ No newline at end of file diff --git a/dist/events/ParcelInfoReplyEvent.js.map b/dist/events/ParcelInfoReplyEvent.js.map new file mode 100644 index 0000000..167cfb6 --- /dev/null +++ b/dist/events/ParcelInfoReplyEvent.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ParcelInfoReplyEvent.js","sourceRoot":"","sources":["../../lib/events/ParcelInfoReplyEvent.ts"],"names":[],"mappings":";;AAEA;CAcC;AAdD,oDAcC"} \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts index 9e46413..2be0060 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -35,4 +35,6 @@ import { SoundFlags } from './enums/SoundFlags'; import { TeleportFlags } from './enums/TeleportFlags'; import { CompressedFlags } from './enums/CompressedFlags'; import { DecodeFlags } from './enums/DecodeFlags'; -export { Bot, LoginParameters, AssetType, HTTPAssets, ClientEvents, BVH, ChatSourceType, BotOptionFlags, UUID, Vector3, AgentFlags, CompressedFlags, ControlFlags, DecodeFlags, InstantMessageEventFlags, InventoryItemFlags, LoginFlags, MessageFlags, PacketFlags, RegionProtocolFlags, SoundFlags, TeleportFlags, ChatEvent, DisconnectEvent, FriendRequestEvent, FriendResponseEvent, GroupChatEvent, GroupChatSessionAgentListEvent, GroupChatSessionJoinEvent, GroupInviteEvent, InstantMessageEvent, InventoryOfferedEvent, LureEvent, MapInfoRangeReplyEvent, MapInfoReplyEvent, RegionInfoReplyEvent, TeleportEvent }; +import { ParcelInfoFlags } from './enums/ParcelInfoFlags'; +import { ParcelInfoReplyEvent } from './events/ParcelInfoReplyEvent'; +export { Bot, LoginParameters, AssetType, HTTPAssets, ClientEvents, BVH, ChatSourceType, BotOptionFlags, UUID, Vector3, AgentFlags, CompressedFlags, ControlFlags, DecodeFlags, InstantMessageEventFlags, InventoryItemFlags, LoginFlags, MessageFlags, ParcelInfoFlags, PacketFlags, RegionProtocolFlags, SoundFlags, TeleportFlags, ChatEvent, DisconnectEvent, FriendRequestEvent, FriendResponseEvent, GroupChatEvent, GroupChatSessionAgentListEvent, GroupChatSessionJoinEvent, GroupInviteEvent, InstantMessageEvent, InventoryOfferedEvent, LureEvent, MapInfoRangeReplyEvent, MapInfoReplyEvent, ParcelInfoReplyEvent, RegionInfoReplyEvent, TeleportEvent }; diff --git a/dist/index.js b/dist/index.js index 20c05ba..6d68134 100644 --- a/dist/index.js +++ b/dist/index.js @@ -74,4 +74,8 @@ const CompressedFlags_1 = require("./enums/CompressedFlags"); exports.CompressedFlags = CompressedFlags_1.CompressedFlags; const DecodeFlags_1 = require("./enums/DecodeFlags"); exports.DecodeFlags = DecodeFlags_1.DecodeFlags; +const ParcelInfoFlags_1 = require("./enums/ParcelInfoFlags"); +exports.ParcelInfoFlags = ParcelInfoFlags_1.ParcelInfoFlags; +const ParcelInfoReplyEvent_1 = require("./events/ParcelInfoReplyEvent"); +exports.ParcelInfoReplyEvent = ParcelInfoReplyEvent_1.ParcelInfoReplyEvent; //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map index 395ee3b..3294c64 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;AA2CtB,cA3CI,SAAG,CA2CJ;AA1CP,+DAA0D;AA2CtD,0BA3CI,iCAAe,CA2CJ;AA1CnB,yDAAoD;AA6ChD,uBA7CI,2BAAY,CA6CJ;AA5ChB,uCAAkC;AA6C9B,cA7CI,SAAG,CA6CJ;AAxCP,iDAA4C;AAqCxC,oBArCI,qBAAS,CAqCJ;AApCb,mDAA8C;AAqC1C,qBArCI,uBAAU,CAqCJ;AApCd,+EAA0E;AAiDtE,mCAjDI,mDAAwB,CAiDJ;AAhD5B,sEAAiE;AAkE7D,8BAlEI,yCAAmB,CAkEJ;AAjEvB,2DAAsD;AAqClD,yBArCI,+BAAc,CAqCJ;AApClB,2DAAsD;AAqClD,yBArCI,+BAAc,CAqCJ;AApClB,yCAAoC;AAqChC,eArCI,WAAI,CAqCJ;AApCR,+CAA0C;AAqCtC,kBArCI,iBAAO,CAqCJ;AApCX,kDAA6C;AAqDzC,oBArDI,qBAAS,CAqDJ;AApDb,gEAA2D;AA2DvD,2BA3DI,mCAAgB,CA2DJ;AA1DpB,oEAA+D;AAqD3D,6BArDI,uCAAkB,CAqDJ;AApDtB,sEAAiE;AAqD7D,8BArDI,yCAAmB,CAqDJ;AApDvB,kDAA6C;AA2DzC,oBA3DI,qBAAS,CA2DJ;AA1Db,0DAAqD;AA8DjD,wBA9DI,6BAAa,CA8DJ;AA7DjB,8DAAyD;AAgDrD,0BAhDI,iCAAe,CAgDJ;AA/CnB,4DAAuD;AAkDnD,yBAlDI,+BAAc,CAkDJ;AAjDlB,kFAA6E;AAmDzE,oCAnDI,qDAAyB,CAmDJ;AAlD7B,4FAAuF;AAiDnF,yCAjDI,+DAA8B,CAiDJ;AAhDlC,wEAAmE;AAwD/D,+BAxDI,2CAAoB,CAwDJ;AAvDxB,kEAA6D;AAsDzD,4BAtDI,qCAAiB,CAsDJ;AArDrB,4EAAuE;AAoDnE,iCApDI,+CAAsB,CAoDJ;AAnD1B,0EAAqE;AAiDjE,gCAjDI,6CAAqB,CAiDJ;AAhDzB,mDAA8C;AAyB1C,qBAzBI,uBAAU,CAyBJ;AAxBd,uDAAkD;AA0B9C,uBA1BI,2BAAY,CA0BJ;AAzBhB,mEAA8D;AA4B1D,6BA5BI,uCAAkB,CA4BJ;AA3BtB,mDAA8C;AA4B1C,qBA5BI,uBAAU,CA4BJ;AA3Bd,uDAAkD;AA4B9C,uBA5BI,2BAAY,CA4BJ;AA3BhB,qDAAgD;AA4B5C,sBA5BI,yBAAW,CA4BJ;AA3Bf,qEAAgE;AA4B5D,8BA5BI,yCAAmB,CA4BJ;AA3BvB,mDAA8C;AA4B1C,qBA5BI,uBAAU,CA4BJ;AA3Bd,yDAAoD;AA4BhD,wBA5BI,6BAAa,CA4BJ;AA3BjB,6DAAwD;AAiBpD,0BAjBI,iCAAe,CAiBJ;AAhBnB,qDAAgD;AAkB5C,sBAlBI,yBAAW,CAkBJ"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;AAAA,+BAA0B;AA6CtB,cA7CI,SAAG,CA6CJ;AA5CP,+DAA0D;AA6CtD,0BA7CI,iCAAe,CA6CJ;AA5CnB,yDAAoD;AA+ChD,uBA/CI,2BAAY,CA+CJ;AA9ChB,uCAAkC;AA+C9B,cA/CI,SAAG,CA+CJ;AA1CP,iDAA4C;AAuCxC,oBAvCI,qBAAS,CAuCJ;AAtCb,mDAA8C;AAuC1C,qBAvCI,uBAAU,CAuCJ;AAtCd,+EAA0E;AAmDtE,mCAnDI,mDAAwB,CAmDJ;AAlD5B,sEAAiE;AAqE7D,8BArEI,yCAAmB,CAqEJ;AApEvB,2DAAsD;AAuClD,yBAvCI,+BAAc,CAuCJ;AAtClB,2DAAsD;AAuClD,yBAvCI,+BAAc,CAuCJ;AAtClB,yCAAoC;AAuChC,eAvCI,WAAI,CAuCJ;AAtCR,+CAA0C;AAuCtC,kBAvCI,iBAAO,CAuCJ;AAtCX,kDAA6C;AAwDzC,oBAxDI,qBAAS,CAwDJ;AAvDb,gEAA2D;AA8DvD,2BA9DI,mCAAgB,CA8DJ;AA7DpB,oEAA+D;AAwD3D,6BAxDI,uCAAkB,CAwDJ;AAvDtB,sEAAiE;AAwD7D,8BAxDI,yCAAmB,CAwDJ;AAvDvB,kDAA6C;AA8DzC,oBA9DI,qBAAS,CA8DJ;AA7Db,0DAAqD;AAkEjD,wBAlEI,6BAAa,CAkEJ;AAjEjB,8DAAyD;AAmDrD,0BAnDI,iCAAe,CAmDJ;AAlDnB,4DAAuD;AAqDnD,yBArDI,+BAAc,CAqDJ;AApDlB,kFAA6E;AAsDzE,oCAtDI,qDAAyB,CAsDJ;AArD7B,4FAAuF;AAoDnF,yCApDI,+DAA8B,CAoDJ;AAnDlC,wEAAmE;AA4D/D,+BA5DI,2CAAoB,CA4DJ;AA3DxB,kEAA6D;AAyDzD,4BAzDI,qCAAiB,CAyDJ;AAxDrB,4EAAuE;AAuDnE,iCAvDI,+CAAsB,CAuDJ;AAtD1B,0EAAqE;AAoDjE,gCApDI,6CAAqB,CAoDJ;AAnDzB,mDAA8C;AA2B1C,qBA3BI,uBAAU,CA2BJ;AA1Bd,uDAAkD;AA4B9C,uBA5BI,2BAAY,CA4BJ;AA3BhB,mEAA8D;AA8B1D,6BA9BI,uCAAkB,CA8BJ;AA7BtB,mDAA8C;AA8B1C,qBA9BI,uBAAU,CA8BJ;AA7Bd,uDAAkD;AA8B9C,uBA9BI,2BAAY,CA8BJ;AA7BhB,qDAAgD;AA+B5C,sBA/BI,yBAAW,CA+BJ;AA9Bf,qEAAgE;AA+B5D,8BA/BI,yCAAmB,CA+BJ;AA9BvB,mDAA8C;AA+B1C,qBA/BI,uBAAU,CA+BJ;AA9Bd,yDAAoD;AA+BhD,wBA/BI,6BAAa,CA+BJ;AA9BjB,6DAAwD;AAmBpD,0BAnBI,iCAAe,CAmBJ;AAlBnB,qDAAgD;AAoB5C,sBApBI,yBAAW,CAoBJ;AAnBf,6DAAwD;AAwBpD,0BAxBI,iCAAe,CAwBJ;AAvBnB,wEAAmE;AA2C/D,+BA3CI,2CAAoB,CA2CJ"} \ No newline at end of file diff --git a/lib/classes/ClientCommands.ts b/lib/classes/ClientCommands.ts index b155722..8f4e03f 100644 --- a/lib/classes/ClientCommands.ts +++ b/lib/classes/ClientCommands.ts @@ -10,6 +10,7 @@ import {CommunicationsCommands} from './commands/CommunicationsCommands'; import {AgentCommands} from './commands/AgentCommands'; import {GroupCommands} from './commands/GroupCommands'; import {InventoryCommands} from './commands/InventoryCommands'; +import {ParcelCommands} from './commands/ParcelCommands'; export class ClientCommands { @@ -17,6 +18,7 @@ export class ClientCommands public asset: AssetCommands; public teleport: TeleportCommands; public region: RegionCommands; + public parcel: ParcelCommands; public grid: GridCommands; public comms: CommunicationsCommands; public agent: AgentCommands; @@ -29,6 +31,7 @@ export class ClientCommands this.asset = new AssetCommands(region, agent, bot); this.teleport = new TeleportCommands(region, agent, bot); this.region = new RegionCommands(region, agent, bot); + this.parcel = new ParcelCommands(region, agent, bot); this.grid = new GridCommands(region, agent, bot); this.comms = new CommunicationsCommands(region, agent, bot); this.agent = new AgentCommands(region, agent, bot); diff --git a/lib/classes/commands/ParcelCommands.ts b/lib/classes/commands/ParcelCommands.ts new file mode 100644 index 0000000..3622df2 --- /dev/null +++ b/lib/classes/commands/ParcelCommands.ts @@ -0,0 +1,79 @@ +import {CommandsBase} from './CommandsBase'; +import {ParcelInfoRequestMessage} from '../messages/ParcelInfoRequest'; +import {UUID} from '../UUID'; +import {Message} from '../../enums/Message'; +import {ParcelInfoReplyMessage} from '../messages/ParcelInfoReply'; +import {Packet} from '../Packet'; +import {FilterResponse} from '../../enums/FilterResponse'; +import {Utils} from '../Utils'; +import {PacketFlags, ParcelInfoReplyEvent, Vector3} from '../..'; + +// This class was added to provide a new "Category" of commands, since we don't have any parcel specific functionality yet. + +export class ParcelCommands extends CommandsBase +{ + async getParcelInfo(parcelID: UUID | string): Promise + { + // Since this is a userspace command, we are kind and accept the UUID as a string. + // If it's a string, then we convert to UUID. + + if (typeof parcelID === 'string') + { + parcelID = new UUID(parcelID); + } + + // Create a new ParcelInfoRequest message, which is the type that we want + const msg: ParcelInfoRequestMessage = new ParcelInfoRequestMessage(); + + // Fill the message with the correct data (see ParcelInfoRequest.ts) + msg.AgentData = { + AgentID: this.agent.agentID, + SessionID: this.circuit.sessionID + }; + msg.Data = { + ParcelID: parcelID + }; + + // Shove the message into our send queue + this.circuit.sendMessage(msg, PacketFlags.Reliable); + + // And wait for a reply. It's okay to do this after we send since we haven't yielded until this subscription is set up. + const parcelInfoReply: ParcelInfoReplyMessage = (await this.circuit.waitForMessage(Message.ParcelInfoReply, 10000, (packet: Packet): FilterResponse => + { + // This function is here as a filter to ensure we get the correct message. + // It compares every incoming ParcelInfoReplyMessage, checks the ParcelID and compares to the one we requested. + const replyMessage: ParcelInfoReplyMessage = packet.message as ParcelInfoReplyMessage; + if (replyMessage.Data.ParcelID.equals(parcelID)) + { + // We received a reply for the ParcelID that we requested info for, so return with "Finish" because we don't want any more after this. + // If we are expecting multiple replies we can reply with FilterResponse.Match which will keep the listener open. + return FilterResponse.Match; + } + return FilterResponse.NoMatch; + })) as ParcelInfoReplyMessage; + + // parcelInfoReply will now contain the message that we issued a "Finish" response for. + // In the event of an error or timeout, an exception would have been thrown and this code won't be reached. + + // Rather than simply returning the message, we convert the data into an "Event" which is supposed to be + // a bit more user friendly for the user. + + return new class implements ParcelInfoReplyEvent + { + OwnerID = parcelInfoReply.Data.OwnerID; + + // Because Data.Name is a buffer, we have a halper functino to decode it. + ParcelName = Utils.BufferToStringSimple(parcelInfoReply.Data.Name); + ParcelDescription = Utils.BufferToStringSimple(parcelInfoReply.Data.Desc); + Area = parcelInfoReply.Data.ActualArea; + BillableArea = parcelInfoReply.Data.BillableArea; + Flags = parcelInfoReply.Data.Flags; + GlobalCoordinates = new Vector3([parcelInfoReply.Data.GlobalX, parcelInfoReply.Data.GlobalY, parcelInfoReply.Data.GlobalZ]); + RegionName = Utils.BufferToStringSimple(parcelInfoReply.Data.SimName); + SnapshotID = parcelInfoReply.Data.SnapshotID; + Traffic = parcelInfoReply.Data.Dwell; + SalePrice = parcelInfoReply.Data.SalePrice; + AuctionID = parcelInfoReply.Data.AuctionID; + }; + } +} diff --git a/lib/enums/ParcelInfoFlags.ts b/lib/enums/ParcelInfoFlags.ts new file mode 100644 index 0000000..bb6a3d2 --- /dev/null +++ b/lib/enums/ParcelInfoFlags.ts @@ -0,0 +1,4 @@ +export enum ParcelInfoFlags +{ + mature = 1 << 0 +} diff --git a/lib/events/ParcelInfoReplyEvent.ts b/lib/events/ParcelInfoReplyEvent.ts new file mode 100644 index 0000000..0112a4a --- /dev/null +++ b/lib/events/ParcelInfoReplyEvent.ts @@ -0,0 +1,17 @@ +import {ParcelInfoFlags, UUID, Vector3} from '..'; + +export class ParcelInfoReplyEvent +{ + OwnerID: UUID; + ParcelName: string; + ParcelDescription: string; + Area: number; + BillableArea: number; + Flags: ParcelInfoFlags; + GlobalCoordinates: Vector3; + RegionName: string; + SnapshotID: UUID; + Traffic: number; + SalePrice: number; + AuctionID: number; +} diff --git a/lib/index.ts b/lib/index.ts index 1871c4a..d34c08d 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -39,6 +39,8 @@ import {SoundFlags} from './enums/SoundFlags'; import {TeleportFlags} from './enums/TeleportFlags'; import {CompressedFlags} from './enums/CompressedFlags'; import {DecodeFlags} from './enums/DecodeFlags'; +import {ParcelInfoFlags} from './enums/ParcelInfoFlags'; +import {ParcelInfoReplyEvent} from './events/ParcelInfoReplyEvent'; export { Bot, @@ -61,6 +63,7 @@ export { InventoryItemFlags, LoginFlags, MessageFlags, + ParcelInfoFlags, PacketFlags, RegionProtocolFlags, SoundFlags, @@ -80,6 +83,7 @@ export { LureEvent, MapInfoRangeReplyEvent, MapInfoReplyEvent, + ParcelInfoReplyEvent, RegionInfoReplyEvent, TeleportEvent };