// This file has been automatically generated by writeMessageClasses.js import { UUID } from '../UUID'; import { Vector3 } from '../Vector3'; import * as Long from 'long'; import { MessageFlags } from '../../enums/MessageFlags'; import type { MessageBase } from '../MessageBase'; import { Message } from '../../enums/Message'; import type { PCode } from '../../enums/PCode'; export class ObjectUpdateMessage implements MessageBase { name = 'ObjectUpdate'; messageFlags = MessageFlags.Trusted | MessageFlags.Zerocoded | MessageFlags.FrequencyHigh; id = Message.ObjectUpdate; RegionData: { RegionHandle: Long; TimeDilation: number; }; ObjectData: { ID: number; State: number; FullID: UUID; CRC: number; PCode: PCode; Material: number; ClickAction: number; Scale: Vector3; ObjectData: Buffer; ParentID: number; UpdateFlags: number; PathCurve: number; ProfileCurve: number; PathBegin: number; PathEnd: number; PathScaleX: number; PathScaleY: number; PathShearX: number; PathShearY: number; PathTwist: number; PathTwistBegin: number; PathRadiusOffset: number; PathTaperX: number; PathTaperY: number; PathRevolutions: number; PathSkew: number; ProfileBegin: number; ProfileEnd: number; ProfileHollow: number; TextureEntry: Buffer; TextureAnim: Buffer; NameValue: Buffer; Data: Buffer; Text: Buffer; TextColor: Buffer; MediaURL: Buffer; PSBlock: Buffer; ExtraParams: Buffer; Sound: UUID; OwnerID: UUID; Gain: number; Flags: number; Radius: number; JointType: number; JointPivot: Vector3; JointAxisOrAnchor: Vector3; }[]; getSize(): number { return this.calculateVarVarSize(this.ObjectData, 'ObjectData', 1) + this.calculateVarVarSize(this.ObjectData, 'TextureEntry', 2) + this.calculateVarVarSize(this.ObjectData, 'TextureAnim', 1) + this.calculateVarVarSize(this.ObjectData, 'NameValue', 2) + this.calculateVarVarSize(this.ObjectData, 'Data', 2) + this.calculateVarVarSize(this.ObjectData, 'Text', 1) + this.calculateVarVarSize(this.ObjectData, 'MediaURL', 1) + this.calculateVarVarSize(this.ObjectData, 'PSBlock', 1) + this.calculateVarVarSize(this.ObjectData, 'ExtraParams', 1) + ((141) * this.ObjectData.length) + 11; } calculateVarVarSize(block: Record[], paramName: string, extraPerVar: number): number { let size = 0; for (const bl of block) { size += bl[paramName].length + extraPerVar; } return size; } // @ts-ignore writeToBuffer(buf: Buffer, pos: number): number { const startPos = pos; buf.writeInt32LE(this.RegionData.RegionHandle.low, pos); pos += 4; buf.writeInt32LE(this.RegionData.RegionHandle.high, pos); pos += 4; buf.writeUInt16LE(this.RegionData.TimeDilation, pos); pos += 2; const count = this.ObjectData.length; buf.writeUInt8(this.ObjectData.length, pos++); for (let i = 0; i < count; i++) { buf.writeUInt32LE(this.ObjectData[i].ID, pos); pos += 4; buf.writeUInt8(this.ObjectData[i].State, pos++); this.ObjectData[i].FullID.writeToBuffer(buf, pos); pos += 16; buf.writeUInt32LE(this.ObjectData[i].CRC, pos); pos += 4; buf.writeUInt8(this.ObjectData[i].PCode, pos++); buf.writeUInt8(this.ObjectData[i].Material, pos++); buf.writeUInt8(this.ObjectData[i].ClickAction, pos++); this.ObjectData[i].Scale.writeToBuffer(buf, pos, false); pos += 12; buf.writeUInt8(this.ObjectData[i].ObjectData.length, pos++); this.ObjectData[i].ObjectData.copy(buf, pos); pos += this.ObjectData[i].ObjectData.length; buf.writeUInt32LE(this.ObjectData[i].ParentID, pos); pos += 4; buf.writeUInt32LE(this.ObjectData[i].UpdateFlags, pos); pos += 4; buf.writeUInt8(this.ObjectData[i].PathCurve, pos++); buf.writeUInt8(this.ObjectData[i].ProfileCurve, pos++); buf.writeUInt16LE(this.ObjectData[i].PathBegin, pos); pos += 2; buf.writeUInt16LE(this.ObjectData[i].PathEnd, pos); pos += 2; buf.writeUInt8(this.ObjectData[i].PathScaleX, pos++); buf.writeUInt8(this.ObjectData[i].PathScaleY, pos++); buf.writeUInt8(this.ObjectData[i].PathShearX, pos++); buf.writeUInt8(this.ObjectData[i].PathShearY, pos++); buf.writeInt8(this.ObjectData[i].PathTwist, pos++); buf.writeInt8(this.ObjectData[i].PathTwistBegin, pos++); buf.writeInt8(this.ObjectData[i].PathRadiusOffset, pos++); buf.writeInt8(this.ObjectData[i].PathTaperX, pos++); buf.writeInt8(this.ObjectData[i].PathTaperY, pos++); buf.writeUInt8(this.ObjectData[i].PathRevolutions, pos++); buf.writeInt8(this.ObjectData[i].PathSkew, pos++); buf.writeUInt16LE(this.ObjectData[i].ProfileBegin, pos); pos += 2; buf.writeUInt16LE(this.ObjectData[i].ProfileEnd, pos); pos += 2; buf.writeUInt16LE(this.ObjectData[i].ProfileHollow, pos); pos += 2; buf.writeUInt16LE(this.ObjectData[i].TextureEntry.length, pos); pos += 2; this.ObjectData[i].TextureEntry.copy(buf, pos); pos += this.ObjectData[i].TextureEntry.length; buf.writeUInt8(this.ObjectData[i].TextureAnim.length, pos++); this.ObjectData[i].TextureAnim.copy(buf, pos); pos += this.ObjectData[i].TextureAnim.length; buf.writeUInt16LE(this.ObjectData[i].NameValue.length, pos); pos += 2; this.ObjectData[i].NameValue.copy(buf, pos); pos += this.ObjectData[i].NameValue.length; buf.writeUInt16LE(this.ObjectData[i].Data.length, pos); pos += 2; this.ObjectData[i].Data.copy(buf, pos); pos += this.ObjectData[i].Data.length; buf.writeUInt8(this.ObjectData[i].Text.length, pos++); this.ObjectData[i].Text.copy(buf, pos); pos += this.ObjectData[i].Text.length; this.ObjectData[i].TextColor.copy(buf, pos); pos += 4; buf.writeUInt8(this.ObjectData[i].MediaURL.length, pos++); this.ObjectData[i].MediaURL.copy(buf, pos); pos += this.ObjectData[i].MediaURL.length; buf.writeUInt8(this.ObjectData[i].PSBlock.length, pos++); this.ObjectData[i].PSBlock.copy(buf, pos); pos += this.ObjectData[i].PSBlock.length; buf.writeUInt8(this.ObjectData[i].ExtraParams.length, pos++); this.ObjectData[i].ExtraParams.copy(buf, pos); pos += this.ObjectData[i].ExtraParams.length; this.ObjectData[i].Sound.writeToBuffer(buf, pos); pos += 16; this.ObjectData[i].OwnerID.writeToBuffer(buf, pos); pos += 16; buf.writeFloatLE(this.ObjectData[i].Gain, pos); pos += 4; buf.writeUInt8(this.ObjectData[i].Flags, pos++); buf.writeFloatLE(this.ObjectData[i].Radius, pos); pos += 4; buf.writeUInt8(this.ObjectData[i].JointType, pos++); this.ObjectData[i].JointPivot.writeToBuffer(buf, pos, false); pos += 12; this.ObjectData[i].JointAxisOrAnchor.writeToBuffer(buf, pos, false); pos += 12; } return pos - startPos; } // @ts-ignore readFromBuffer(buf: Buffer, pos: number): number { const startPos = pos; let varLength = 0; const newObjRegionData: { RegionHandle: Long, TimeDilation: number } = { RegionHandle: Long.ZERO, TimeDilation: 0 }; newObjRegionData.RegionHandle = new Long(buf.readInt32LE(pos), buf.readInt32LE(pos + 4)); pos += 8; newObjRegionData.TimeDilation = buf.readUInt16LE(pos); pos += 2; this.RegionData = newObjRegionData; if (pos >= buf.length) { return pos - startPos; } const count = buf.readUInt8(pos++); this.ObjectData = []; for (let i = 0; i < count; i++) { const newObjObjectData: { ID: number, State: number, FullID: UUID, CRC: number, PCode: number, Material: number, ClickAction: number, Scale: Vector3, ObjectData: Buffer, ParentID: number, UpdateFlags: number, PathCurve: number, ProfileCurve: number, PathBegin: number, PathEnd: number, PathScaleX: number, PathScaleY: number, PathShearX: number, PathShearY: number, PathTwist: number, PathTwistBegin: number, PathRadiusOffset: number, PathTaperX: number, PathTaperY: number, PathRevolutions: number, PathSkew: number, ProfileBegin: number, ProfileEnd: number, ProfileHollow: number, TextureEntry: Buffer, TextureAnim: Buffer, NameValue: Buffer, Data: Buffer, Text: Buffer, TextColor: Buffer, MediaURL: Buffer, PSBlock: Buffer, ExtraParams: Buffer, Sound: UUID, OwnerID: UUID, Gain: number, Flags: number, Radius: number, JointType: number, JointPivot: Vector3, JointAxisOrAnchor: Vector3 } = { ID: 0, State: 0, FullID: UUID.zero(), CRC: 0, PCode: 0, Material: 0, ClickAction: 0, Scale: Vector3.getZero(), ObjectData: Buffer.allocUnsafe(0), ParentID: 0, UpdateFlags: 0, PathCurve: 0, ProfileCurve: 0, PathBegin: 0, PathEnd: 0, PathScaleX: 0, PathScaleY: 0, PathShearX: 0, PathShearY: 0, PathTwist: 0, PathTwistBegin: 0, PathRadiusOffset: 0, PathTaperX: 0, PathTaperY: 0, PathRevolutions: 0, PathSkew: 0, ProfileBegin: 0, ProfileEnd: 0, ProfileHollow: 0, TextureEntry: Buffer.allocUnsafe(0), TextureAnim: Buffer.allocUnsafe(0), NameValue: Buffer.allocUnsafe(0), Data: Buffer.allocUnsafe(0), Text: Buffer.allocUnsafe(0), TextColor: Buffer.allocUnsafe(0), MediaURL: Buffer.allocUnsafe(0), PSBlock: Buffer.allocUnsafe(0), ExtraParams: Buffer.allocUnsafe(0), Sound: UUID.zero(), OwnerID: UUID.zero(), Gain: 0, Flags: 0, Radius: 0, JointType: 0, JointPivot: Vector3.getZero(), JointAxisOrAnchor: Vector3.getZero() }; newObjObjectData.ID = buf.readUInt32LE(pos); pos += 4; newObjObjectData.State = buf.readUInt8(pos++); newObjObjectData.FullID = new UUID(buf, pos); pos += 16; newObjObjectData.CRC = buf.readUInt32LE(pos); pos += 4; newObjObjectData.PCode = buf.readUInt8(pos++); newObjObjectData.Material = buf.readUInt8(pos++); newObjObjectData.ClickAction = buf.readUInt8(pos++); newObjObjectData.Scale = new Vector3(buf, pos, false); pos += 12; varLength = buf.readUInt8(pos++); newObjObjectData.ObjectData = buf.slice(pos, pos + varLength); pos += varLength; newObjObjectData.ParentID = buf.readUInt32LE(pos); pos += 4; newObjObjectData.UpdateFlags = buf.readUInt32LE(pos); pos += 4; newObjObjectData.PathCurve = buf.readUInt8(pos++); newObjObjectData.ProfileCurve = buf.readUInt8(pos++); newObjObjectData.PathBegin = buf.readUInt16LE(pos); pos += 2; newObjObjectData.PathEnd = buf.readUInt16LE(pos); pos += 2; newObjObjectData.PathScaleX = buf.readUInt8(pos++); newObjObjectData.PathScaleY = buf.readUInt8(pos++); newObjObjectData.PathShearX = buf.readUInt8(pos++); newObjObjectData.PathShearY = buf.readUInt8(pos++); newObjObjectData.PathTwist = buf.readInt8(pos++); newObjObjectData.PathTwistBegin = buf.readInt8(pos++); newObjObjectData.PathRadiusOffset = buf.readInt8(pos++); newObjObjectData.PathTaperX = buf.readInt8(pos++); newObjObjectData.PathTaperY = buf.readInt8(pos++); newObjObjectData.PathRevolutions = buf.readUInt8(pos++); newObjObjectData.PathSkew = buf.readInt8(pos++); newObjObjectData.ProfileBegin = buf.readUInt16LE(pos); pos += 2; newObjObjectData.ProfileEnd = buf.readUInt16LE(pos); pos += 2; newObjObjectData.ProfileHollow = buf.readUInt16LE(pos); pos += 2; varLength = buf.readUInt16LE(pos); pos += 2; newObjObjectData.TextureEntry = buf.slice(pos, pos + varLength); pos += varLength; varLength = buf.readUInt8(pos++); newObjObjectData.TextureAnim = buf.slice(pos, pos + varLength); pos += varLength; varLength = buf.readUInt16LE(pos); pos += 2; newObjObjectData.NameValue = buf.slice(pos, pos + varLength); pos += varLength; varLength = buf.readUInt16LE(pos); pos += 2; newObjObjectData.Data = buf.slice(pos, pos + varLength); pos += varLength; varLength = buf.readUInt8(pos++); newObjObjectData.Text = buf.slice(pos, pos + varLength); pos += varLength; newObjObjectData.TextColor = buf.slice(pos, pos + 4); pos += 4; varLength = buf.readUInt8(pos++); newObjObjectData.MediaURL = buf.slice(pos, pos + varLength); pos += varLength; varLength = buf.readUInt8(pos++); newObjObjectData.PSBlock = buf.slice(pos, pos + varLength); pos += varLength; varLength = buf.readUInt8(pos++); newObjObjectData.ExtraParams = buf.slice(pos, pos + varLength); pos += varLength; newObjObjectData.Sound = new UUID(buf, pos); pos += 16; newObjObjectData.OwnerID = new UUID(buf, pos); pos += 16; newObjObjectData.Gain = buf.readFloatLE(pos); pos += 4; newObjObjectData.Flags = buf.readUInt8(pos++); newObjObjectData.Radius = buf.readFloatLE(pos); pos += 4; newObjObjectData.JointType = buf.readUInt8(pos++); newObjObjectData.JointPivot = new Vector3(buf, pos, false); pos += 12; newObjObjectData.JointAxisOrAnchor = new Vector3(buf, pos, false); pos += 12; this.ObjectData.push(newObjObjectData); } return pos - startPos; } }