Add support for getting grid map block data via a range request
This commit is contained in:
2
dist/classes/Circuit.js.map
vendored
2
dist/classes/Circuit.js.map
vendored
File diff suppressed because one or more lines are too long
6
dist/classes/MapBlock.d.ts
vendored
Normal file
6
dist/classes/MapBlock.d.ts
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
import { UUID } from "./UUID";
|
||||
export declare class MapBlock {
|
||||
name: string;
|
||||
mapImage: UUID;
|
||||
accessFlags: number;
|
||||
}
|
||||
6
dist/classes/MapBlock.js
vendored
Normal file
6
dist/classes/MapBlock.js
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class MapBlock {
|
||||
}
|
||||
exports.MapBlock = MapBlock;
|
||||
//# sourceMappingURL=MapBlock.js.map
|
||||
1
dist/classes/MapBlock.js.map
vendored
Normal file
1
dist/classes/MapBlock.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"MapBlock.js","sourceRoot":"","sources":["../../lib/classes/MapBlock.ts"],"names":[],"mappings":";;AAEA;CAKC;AALD,4BAKC"}
|
||||
2
dist/classes/commands/GridCommands.d.ts
vendored
2
dist/classes/commands/GridCommands.d.ts
vendored
@@ -2,8 +2,10 @@ import { MapInfoReply } from '../../events/MapInfoReply';
|
||||
import { UUID } from '../UUID';
|
||||
import { CommandsBase } from './CommandsBase';
|
||||
import { RegionInfoReply } from '../../events/RegionInfoReply';
|
||||
import { MapInfoRangeReply } from '../../events/MapInfoRangeReply';
|
||||
export declare class GridCommands extends CommandsBase {
|
||||
getRegionByName(regionName: string): Promise<RegionInfoReply>;
|
||||
getRegionMapInfo(gridX: number, gridY: number): Promise<MapInfoReply>;
|
||||
getRegionMapInfoRange(minX: number, minY: number, maxX: number, maxY: number): Promise<MapInfoRangeReply>;
|
||||
name2Key(name: string): Promise<UUID>;
|
||||
}
|
||||
|
||||
69
dist/classes/commands/GridCommands.js
vendored
69
dist/classes/commands/GridCommands.js
vendored
@@ -14,6 +14,8 @@ const FilterResponse_1 = require("../../enums/FilterResponse");
|
||||
const MapNameRequest_1 = require("../messages/MapNameRequest");
|
||||
const GridLayerType_1 = require("../../enums/GridLayerType");
|
||||
const RegionInfoReply_1 = require("../../events/RegionInfoReply");
|
||||
const MapInfoRangeReply_1 = require("../../events/MapInfoRangeReply");
|
||||
const MapBlock_1 = require("../MapBlock");
|
||||
class GridCommands extends CommandsBase_1.CommandsBase {
|
||||
getRegionByName(regionName) {
|
||||
return new Promise((resolve, reject) => {
|
||||
@@ -75,15 +77,15 @@ class GridCommands extends CommandsBase_1.CommandsBase {
|
||||
msg.AgentData = {
|
||||
AgentID: this.agent.agentID,
|
||||
SessionID: circuit.sessionID,
|
||||
Flags: 65536,
|
||||
Flags: 2,
|
||||
EstateID: 0,
|
||||
Godlike: false
|
||||
};
|
||||
msg.PositionData = {
|
||||
MinX: (gridX / 256),
|
||||
MaxX: (gridX / 256),
|
||||
MinY: (gridY / 256),
|
||||
MaxY: (gridY / 256)
|
||||
MinX: gridX,
|
||||
MaxX: gridX,
|
||||
MinY: gridY,
|
||||
MaxY: gridY
|
||||
};
|
||||
circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
|
||||
circuit.waitForMessage(Message_1.Message.MapBlockReply, 10000, (packet) => {
|
||||
@@ -102,9 +104,10 @@ class GridCommands extends CommandsBase_1.CommandsBase {
|
||||
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;
|
||||
response.block = new MapBlock_1.MapBlock();
|
||||
response.block.name = Utils_1.Utils.BufferToStringSimple(data.Name);
|
||||
response.block.accessFlags = data.Access;
|
||||
response.block.mapImage = data.MapImageID;
|
||||
}
|
||||
});
|
||||
const regionHandle = Utils_1.Utils.RegionCoordinatesToHandle(gridX, gridY);
|
||||
@@ -157,6 +160,53 @@ class GridCommands extends CommandsBase_1.CommandsBase {
|
||||
});
|
||||
});
|
||||
}
|
||||
getRegionMapInfoRange(minX, minY, maxX, maxY) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const circuit = this.currentRegion.circuit;
|
||||
const response = new MapInfoRangeReply_1.MapInfoRangeReply();
|
||||
const msg = new MapBlockRequest_1.MapBlockRequestMessage();
|
||||
msg.AgentData = {
|
||||
AgentID: this.agent.agentID,
|
||||
SessionID: circuit.sessionID,
|
||||
Flags: 2,
|
||||
EstateID: 0,
|
||||
Godlike: false
|
||||
};
|
||||
msg.PositionData = {
|
||||
MinX: minX,
|
||||
MaxX: maxX,
|
||||
MinY: minY,
|
||||
MaxY: maxY
|
||||
};
|
||||
circuit.sendMessage(msg, PacketFlags_1.PacketFlags.Reliable);
|
||||
circuit.waitForMessage(Message_1.Message.MapBlockReply, 30000, (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;
|
||||
const mapBlock = new MapBlock_1.MapBlock();
|
||||
mapBlock.name = Utils_1.Utils.BufferToStringSimple(data.Name);
|
||||
mapBlock.accessFlags = data.Access;
|
||||
mapBlock.mapImage = data.MapImageID;
|
||||
response.regions.push(mapBlock);
|
||||
}
|
||||
});
|
||||
if (found) {
|
||||
return FilterResponse_1.FilterResponse.Match;
|
||||
}
|
||||
return FilterResponse_1.FilterResponse.NoMatch;
|
||||
}).then((packet) => {
|
||||
}).catch((err) => {
|
||||
if (err.message === 'Timeout') {
|
||||
resolve(response);
|
||||
}
|
||||
else {
|
||||
reject(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
name2Key(name) {
|
||||
const check = name.split('.');
|
||||
if (check.length > 1) {
|
||||
@@ -190,7 +240,8 @@ class GridCommands extends CommandsBase_1.CommandsBase {
|
||||
let found = null;
|
||||
const apr = packet.message;
|
||||
apr.Data.forEach((dataBlock) => {
|
||||
const resultName = (Utils_1.Utils.BufferToStringSimple(dataBlock.FirstName) + ' ' + Utils_1.Utils.BufferToStringSimple(dataBlock.LastName)).toLowerCase();
|
||||
const resultName = (Utils_1.Utils.BufferToStringSimple(dataBlock.FirstName) + ' ' +
|
||||
Utils_1.Utils.BufferToStringSimple(dataBlock.LastName)).toLowerCase();
|
||||
if (resultName === name) {
|
||||
found = dataBlock.AvatarID;
|
||||
}
|
||||
|
||||
2
dist/classes/commands/GridCommands.js.map
vendored
2
dist/classes/commands/GridCommands.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/events/MapInfoRangeReply.d.ts
vendored
Normal file
4
dist/events/MapInfoRangeReply.d.ts
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
import { MapBlock } from '../classes/MapBlock';
|
||||
export declare class MapInfoRangeReply {
|
||||
regions: MapBlock[];
|
||||
}
|
||||
9
dist/events/MapInfoRangeReply.js
vendored
Normal file
9
dist/events/MapInfoRangeReply.js
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class MapInfoRangeReply {
|
||||
constructor() {
|
||||
this.regions = [];
|
||||
}
|
||||
}
|
||||
exports.MapInfoRangeReply = MapInfoRangeReply;
|
||||
//# sourceMappingURL=MapInfoRangeReply.js.map
|
||||
1
dist/events/MapInfoRangeReply.js.map
vendored
Normal file
1
dist/events/MapInfoRangeReply.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"MapInfoRangeReply.js","sourceRoot":"","sources":["../../lib/events/MapInfoRangeReply.ts"],"names":[],"mappings":";;AAEA;IAAA;QAEI,YAAO,GAAe,EAAE,CAAC;IAC7B,CAAC;CAAA;AAHD,8CAGC"}
|
||||
6
dist/events/MapInfoReply.d.ts
vendored
6
dist/events/MapInfoReply.d.ts
vendored
@@ -1,8 +1,6 @@
|
||||
import { UUID } from '../classes/UUID';
|
||||
import { MapBlock } from '../classes/MapBlock';
|
||||
export declare class MapInfoReply {
|
||||
name: string;
|
||||
mapImage: UUID;
|
||||
accessFlags: number;
|
||||
block: MapBlock;
|
||||
avatars: {
|
||||
X: number;
|
||||
Y: number;
|
||||
|
||||
2
dist/events/MapInfoReply.js.map
vendored
2
dist/events/MapInfoReply.js.map
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"MapInfoReply.js","sourceRoot":"","sources":["../../lib/events/MapInfoReply.ts"],"names":[],"mappings":";;AAEA;CASC;AATD,oCASC"}
|
||||
{"version":3,"file":"MapInfoReply.js","sourceRoot":"","sources":["../../lib/events/MapInfoReply.ts"],"names":[],"mappings":";;AAEA;CAOC;AAPD,oCAOC"}
|
||||
@@ -299,8 +299,7 @@ export class Circuit
|
||||
|
||||
const keys: string[] = Object.keys(this.awaitingAck);
|
||||
|
||||
keys.forEach((seqID: string) =>
|
||||
{
|
||||
keys.forEach((seqID: string) => {
|
||||
const nSeq = parseInt(seqID, 10);
|
||||
if (oldest === -1 || this.awaitingAck[nSeq].sent < oldest)
|
||||
{
|
||||
|
||||
8
lib/classes/MapBlock.ts
Normal file
8
lib/classes/MapBlock.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import {UUID} from "./UUID";
|
||||
|
||||
export class MapBlock
|
||||
{
|
||||
name: string;
|
||||
mapImage: UUID;
|
||||
accessFlags: number;
|
||||
}
|
||||
@@ -17,6 +17,8 @@ import {FilterResponse} from '../../enums/FilterResponse';
|
||||
import {MapNameRequestMessage} from '../messages/MapNameRequest';
|
||||
import {GridLayerType} from '../../enums/GridLayerType';
|
||||
import {RegionInfoReply} from '../../events/RegionInfoReply';
|
||||
import {MapInfoRangeReply} from '../../events/MapInfoRangeReply';
|
||||
import {MapBlock} from '../MapBlock';
|
||||
export class GridCommands extends CommandsBase
|
||||
{
|
||||
getRegionByName(regionName: string)
|
||||
@@ -92,15 +94,15 @@ export class GridCommands extends CommandsBase
|
||||
msg.AgentData = {
|
||||
AgentID: this.agent.agentID,
|
||||
SessionID: circuit.sessionID,
|
||||
Flags: 65536,
|
||||
Flags: 2,
|
||||
EstateID: 0,
|
||||
Godlike: false
|
||||
};
|
||||
msg.PositionData = {
|
||||
MinX: (gridX / 256),
|
||||
MaxX: (gridX / 256),
|
||||
MinY: (gridY / 256),
|
||||
MaxY: (gridY / 256)
|
||||
MinX: gridX,
|
||||
MaxX: gridX,
|
||||
MinY: gridY,
|
||||
MaxY: gridY
|
||||
};
|
||||
circuit.sendMessage(msg, PacketFlags.Reliable);
|
||||
circuit.waitForMessage(Message.MapBlockReply, 10000, (packet: Packet): FilterResponse =>
|
||||
@@ -126,9 +128,10 @@ export class GridCommands extends CommandsBase
|
||||
{
|
||||
if (data.X === (gridX / 256) && data.Y === (gridY / 256))
|
||||
{
|
||||
response.name = Utils.BufferToStringSimple(data.Name);
|
||||
response.accessFlags = data.Access;
|
||||
response.mapImage = data.MapImageID;
|
||||
response.block = new MapBlock();
|
||||
response.block.name = Utils.BufferToStringSimple(data.Name);
|
||||
response.block.accessFlags = data.Access;
|
||||
response.block.mapImage = data.MapImageID;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -195,6 +198,65 @@ export class GridCommands extends CommandsBase
|
||||
});
|
||||
}
|
||||
|
||||
getRegionMapInfoRange(minX: number, minY: number, maxX: number, maxY: number): Promise<MapInfoRangeReply>
|
||||
{
|
||||
return new Promise<MapInfoRangeReply>((resolve, reject) =>
|
||||
{
|
||||
const circuit = this.currentRegion.circuit;
|
||||
const response = new MapInfoRangeReply();
|
||||
const msg: MapBlockRequestMessage = new MapBlockRequestMessage();
|
||||
msg.AgentData = {
|
||||
AgentID: this.agent.agentID,
|
||||
SessionID: circuit.sessionID,
|
||||
Flags: 2,
|
||||
EstateID: 0,
|
||||
Godlike: false
|
||||
};
|
||||
msg.PositionData = {
|
||||
MinX: minX,
|
||||
MaxX: maxX,
|
||||
MinY: minY,
|
||||
MaxY: maxY
|
||||
};
|
||||
circuit.sendMessage(msg, PacketFlags.Reliable);
|
||||
circuit.waitForMessage(Message.MapBlockReply, 30000, (packet: Packet): FilterResponse =>
|
||||
{
|
||||
const filterMsg = packet.message as MapBlockReplyMessage;
|
||||
let found = false;
|
||||
filterMsg.Data.forEach((data) =>
|
||||
{
|
||||
if (data.X >= minX && data.X <= maxX && data.Y >= minY && data.Y <= maxY)
|
||||
{
|
||||
found = true;
|
||||
const mapBlock = new MapBlock();
|
||||
mapBlock.name = Utils.BufferToStringSimple(data.Name);
|
||||
mapBlock.accessFlags = data.Access;
|
||||
mapBlock.mapImage = data.MapImageID;
|
||||
response.regions.push(mapBlock);
|
||||
}
|
||||
});
|
||||
if (found)
|
||||
{
|
||||
return FilterResponse.Match;
|
||||
}
|
||||
return FilterResponse.NoMatch;
|
||||
}).then((packet: Packet) =>
|
||||
{
|
||||
|
||||
}).catch((err) =>
|
||||
{
|
||||
if (err.message === 'Timeout')
|
||||
{
|
||||
resolve(response);
|
||||
}
|
||||
else
|
||||
{
|
||||
reject(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
name2Key(name: string): Promise<UUID>
|
||||
{
|
||||
const check = name.split('.');
|
||||
@@ -239,7 +301,8 @@ export class GridCommands extends CommandsBase
|
||||
const apr = packet.message as AvatarPickerReplyMessage;
|
||||
apr.Data.forEach((dataBlock) =>
|
||||
{
|
||||
const resultName = (Utils.BufferToStringSimple(dataBlock.FirstName) + ' ' + Utils.BufferToStringSimple(dataBlock.LastName)).toLowerCase();
|
||||
const resultName = (Utils.BufferToStringSimple(dataBlock.FirstName) + ' ' +
|
||||
Utils.BufferToStringSimple(dataBlock.LastName)).toLowerCase();
|
||||
if (resultName === name)
|
||||
{
|
||||
found = dataBlock.AvatarID;
|
||||
|
||||
6
lib/events/MapInfoRangeReply.ts
Normal file
6
lib/events/MapInfoRangeReply.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import {MapBlock} from '../classes/MapBlock';
|
||||
|
||||
export class MapInfoRangeReply
|
||||
{
|
||||
regions: MapBlock[] = [];
|
||||
}
|
||||
@@ -1,10 +1,8 @@
|
||||
import {UUID} from '../classes/UUID';
|
||||
import {MapBlock} from '../classes/MapBlock';
|
||||
|
||||
export class MapInfoReply
|
||||
{
|
||||
name: string;
|
||||
mapImage: UUID;
|
||||
accessFlags: number;
|
||||
block: MapBlock;
|
||||
avatars: {
|
||||
X: number,
|
||||
Y: number
|
||||
|
||||
Reference in New Issue
Block a user