import {CommandsBase} from './CommandsBase'; import {UUID} from '../UUID'; import * as Long from 'long'; import {RegionHandleRequestMessage} from '../messages/RegionHandleRequest'; import {Message} from '../../enums/Message'; import {FilterResponse} from '../../enums/FilterResponse'; import {RegionIDAndHandleReplyMessage} from '../messages/RegionIDAndHandleReply'; import {PacketFlags} from '../..'; import {IGameObject} from '../interfaces/IGameObject'; export class RegionCommands 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, (filterMsg: RegionIDAndHandleReplyMessage): FilterResponse => { if (filterMsg.ReplyBlock.RegionID.toString() === regionID.toString()) { return FilterResponse.Finish; } else { return FilterResponse.NoMatch; } }).then((responseMsg: RegionIDAndHandleReplyMessage) => { resolve(responseMsg.ReplyBlock.RegionHandle); }); }); } getObjectsInArea(minX: number, maxX: number, minY: number, maxY: number, minZ: number, maxZ: number): IGameObject[] { return this.currentRegion.objects.getObjectsInArea(minX, maxX, minY, maxY, minZ, maxZ); } }