This commit demonstrates how to add a new client command to node-metaverse.
It also shows how to add a new command category (ParcelCommands) Everything under dist/ is auto-generated with "npm run build".
This commit is contained in:
6
dist/classes/commands/ParcelCommands.d.ts
vendored
Normal file
6
dist/classes/commands/ParcelCommands.d.ts
vendored
Normal file
@@ -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<ParcelInfoReplyEvent>;
|
||||
}
|
||||
60
dist/classes/commands/ParcelCommands.js
vendored
Normal file
60
dist/classes/commands/ParcelCommands.js
vendored
Normal file
@@ -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
|
||||
1
dist/classes/commands/ParcelCommands.js.map
vendored
Normal file
1
dist/classes/commands/ParcelCommands.js.map
vendored
Normal file
@@ -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"}
|
||||
3
dist/enums/ParcelInfoFlags.d.ts
vendored
Normal file
3
dist/enums/ParcelInfoFlags.d.ts
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
export declare enum ParcelInfoFlags {
|
||||
mature = 1,
|
||||
}
|
||||
7
dist/enums/ParcelInfoFlags.js
vendored
Normal file
7
dist/enums/ParcelInfoFlags.js
vendored
Normal file
@@ -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
|
||||
1
dist/enums/ParcelInfoFlags.js.map
vendored
Normal file
1
dist/enums/ParcelInfoFlags.js.map
vendored
Normal file
@@ -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"}
|
||||
15
dist/events/ParcelInfoReplyEvent.d.ts
vendored
Normal file
15
dist/events/ParcelInfoReplyEvent.d.ts
vendored
Normal file
@@ -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;
|
||||
}
|
||||
6
dist/events/ParcelInfoReplyEvent.js
vendored
Normal file
6
dist/events/ParcelInfoReplyEvent.js
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class ParcelInfoReplyEvent {
|
||||
}
|
||||
exports.ParcelInfoReplyEvent = ParcelInfoReplyEvent;
|
||||
//# sourceMappingURL=ParcelInfoReplyEvent.js.map
|
||||
1
dist/events/ParcelInfoReplyEvent.js.map
vendored
Normal file
1
dist/events/ParcelInfoReplyEvent.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"ParcelInfoReplyEvent.js","sourceRoot":"","sources":["../../lib/events/ParcelInfoReplyEvent.ts"],"names":[],"mappings":";;AAEA;CAcC;AAdD,oDAcC"}
|
||||
4
dist/index.d.ts
vendored
4
dist/index.d.ts
vendored
@@ -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 };
|
||||
|
||||
4
dist/index.js
vendored
4
dist/index.js
vendored
@@ -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
|
||||
2
dist/index.js.map
vendored
2
dist/index.js.map
vendored
@@ -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"}
|
||||
{"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"}
|
||||
@@ -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);
|
||||
|
||||
79
lib/classes/commands/ParcelCommands.ts
Normal file
79
lib/classes/commands/ParcelCommands.ts
Normal file
@@ -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<ParcelInfoReplyEvent>
|
||||
{
|
||||
// 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;
|
||||
};
|
||||
}
|
||||
}
|
||||
4
lib/enums/ParcelInfoFlags.ts
Normal file
4
lib/enums/ParcelInfoFlags.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export enum ParcelInfoFlags
|
||||
{
|
||||
mature = 1 << 0
|
||||
}
|
||||
17
lib/events/ParcelInfoReplyEvent.ts
Normal file
17
lib/events/ParcelInfoReplyEvent.ts
Normal file
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user