Update messages

This commit is contained in:
Casper Warden
2023-11-04 17:51:13 +00:00
parent d75fb9d9d9
commit 1224a6e279
10 changed files with 9713 additions and 9 deletions

View File

@@ -304,6 +304,8 @@ export * from './messages/GrantGodlikePowers';
export * from './messages/GodlikeMessage';
export * from './messages/EstateOwnerMessage';
export * from './messages/GenericMessage';
export * from './messages/GenericStreamingMessage';
export * from './messages/LargeGenericMessage';
export * from './messages/MuteListRequest';
export * from './messages/UpdateMuteListEntry';
export * from './messages/RemoveMuteListEntry';
@@ -786,6 +788,8 @@ messages[<number>Message.GrantGodlikePowers] = 'GrantGodlikePowersMessage';
messages[<number>Message.GodlikeMessage] = 'GodlikeMessageMessage';
messages[<number>Message.EstateOwnerMessage] = 'EstateOwnerMessageMessage';
messages[<number>Message.GenericMessage] = 'GenericMessageMessage';
messages[<number>Message.GenericStreamingMessage] = 'GenericStreamingMessageMessage';
messages[<number>Message.LargeGenericMessage] = 'LargeGenericMessageMessage';
messages[<number>Message.MuteListRequest] = 'MuteListRequestMessage';
messages[<number>Message.UpdateMuteListEntry] = 'UpdateMuteListEntryMessage';
messages[<number>Message.RemoveMuteListEntry] = 'RemoveMuteListEntryMessage';

View File

@@ -0,0 +1,64 @@
// This file has been automatically generated by writeMessageClasses.js
import { MessageFlags } from '../../enums/MessageFlags';
import { MessageBase } from '../MessageBase';
import { Message } from '../../enums/Message';
export class GenericStreamingMessageMessage implements MessageBase
{
name = 'GenericStreamingMessage';
messageFlags = MessageFlags.Trusted | MessageFlags.FrequencyHigh;
id = Message.GenericStreamingMessage;
MethodData: {
Method: number;
};
DataBlock: {
Data: Buffer;
};
getSize(): number
{
return (this.DataBlock['Data'].length + 2) + 2;
}
// @ts-ignore
writeToBuffer(buf: Buffer, pos: number): number
{
const startPos = pos;
buf.writeUInt16LE(this.MethodData['Method'], pos);
pos += 2;
buf.writeUInt16LE(this.DataBlock['Data'].length, pos);
pos += 2;
this.DataBlock['Data'].copy(buf, pos);
pos += this.DataBlock['Data'].length;
return pos - startPos;
}
// @ts-ignore
readFromBuffer(buf: Buffer, pos: number): number
{
const startPos = pos;
let varLength = 0;
const newObjMethodData: {
Method: number
} = {
Method: 0
};
newObjMethodData['Method'] = buf.readUInt16LE(pos);
pos += 2;
this.MethodData = newObjMethodData;
const newObjDataBlock: {
Data: Buffer
} = {
Data: Buffer.allocUnsafe(0)
};
varLength = buf.readUInt16LE(pos);
pos += 2;
newObjDataBlock['Data'] = buf.slice(pos, pos + varLength);
pos += varLength;
this.DataBlock = newObjDataBlock;
return pos - startPos;
}
}

View File

@@ -0,0 +1,125 @@
// This file has been automatically generated by writeMessageClasses.js
import { UUID } from '../UUID';
import { MessageFlags } from '../../enums/MessageFlags';
import { MessageBase } from '../MessageBase';
import { Message } from '../../enums/Message';
export class LargeGenericMessageMessage implements MessageBase
{
name = 'LargeGenericMessage';
messageFlags = MessageFlags.Deprecated | MessageFlags.FrequencyLow;
id = Message.LargeGenericMessage;
AgentData: {
AgentID: UUID;
SessionID: UUID;
TransactionID: UUID;
};
MethodData: {
Method: Buffer;
Invoice: UUID;
};
ParamList: {
Parameter: Buffer;
}[];
getSize(): number
{
return (this.MethodData['Method'].length + 1) + this.calculateVarVarSize(this.ParamList, 'Parameter', 2) + 65;
}
calculateVarVarSize(block: { [key: string]: any }[], 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;
this.AgentData['AgentID'].writeToBuffer(buf, pos);
pos += 16;
this.AgentData['SessionID'].writeToBuffer(buf, pos);
pos += 16;
this.AgentData['TransactionID'].writeToBuffer(buf, pos);
pos += 16;
buf.writeUInt8(this.MethodData['Method'].length, pos++);
this.MethodData['Method'].copy(buf, pos);
pos += this.MethodData['Method'].length;
this.MethodData['Invoice'].writeToBuffer(buf, pos);
pos += 16;
const count = this.ParamList.length;
buf.writeUInt8(this.ParamList.length, pos++);
for (let i = 0; i < count; i++)
{
buf.writeUInt16LE(this.ParamList[i]['Parameter'].length, pos);
pos += 2;
this.ParamList[i]['Parameter'].copy(buf, pos);
pos += this.ParamList[i]['Parameter'].length;
}
return pos - startPos;
}
// @ts-ignore
readFromBuffer(buf: Buffer, pos: number): number
{
const startPos = pos;
let varLength = 0;
const newObjAgentData: {
AgentID: UUID,
SessionID: UUID,
TransactionID: UUID
} = {
AgentID: UUID.zero(),
SessionID: UUID.zero(),
TransactionID: UUID.zero()
};
newObjAgentData['AgentID'] = new UUID(buf, pos);
pos += 16;
newObjAgentData['SessionID'] = new UUID(buf, pos);
pos += 16;
newObjAgentData['TransactionID'] = new UUID(buf, pos);
pos += 16;
this.AgentData = newObjAgentData;
const newObjMethodData: {
Method: Buffer,
Invoice: UUID
} = {
Method: Buffer.allocUnsafe(0),
Invoice: UUID.zero()
};
varLength = buf.readUInt8(pos++);
newObjMethodData['Method'] = buf.slice(pos, pos + varLength);
pos += varLength;
newObjMethodData['Invoice'] = new UUID(buf, pos);
pos += 16;
this.MethodData = newObjMethodData;
if (pos >= buf.length)
{
return pos - startPos;
}
const count = buf.readUInt8(pos++);
this.ParamList = [];
for (let i = 0; i < count; i++)
{
const newObjParamList: {
Parameter: Buffer
} = {
Parameter: Buffer.allocUnsafe(0)
};
varLength = buf.readUInt16LE(pos);
pos += 2;
newObjParamList['Parameter'] = buf.slice(pos, pos + varLength);
pos += varLength;
this.ParamList.push(newObjParamList);
}
return pos - startPos;
}
}

View File

@@ -25,10 +25,14 @@ export class MapBlockReplyMessage implements MessageBase
Agents: number;
MapImageID: UUID;
}[];
Size: {
SizeX: number;
SizeY: number;
}[];
getSize(): number
{
return this.calculateVarVarSize(this.Data, 'Name', 1) + ((27) * this.Data.length) + 21;
return this.calculateVarVarSize(this.Data, 'Name', 1) + ((27) * this.Data.length) + ((4) * this.Size.length) + 22;
}
calculateVarVarSize(block: { [key: string]: any }[], paramName: string, extraPerVar: number): number
@@ -49,7 +53,7 @@ export class MapBlockReplyMessage implements MessageBase
pos += 16;
buf.writeUInt32LE(this.AgentData['Flags'], pos);
pos += 4;
const count = this.Data.length;
let count = this.Data.length;
buf.writeUInt8(this.Data.length, pos++);
for (let i = 0; i < count; i++)
{
@@ -68,6 +72,15 @@ export class MapBlockReplyMessage implements MessageBase
this.Data[i]['MapImageID'].writeToBuffer(buf, pos);
pos += 16;
}
count = this.Size.length;
buf.writeUInt8(this.Size.length, pos++);
for (let i = 0; i < count; i++)
{
buf.writeUInt16LE(this.Size[i]['SizeX'], pos);
pos += 2;
buf.writeUInt16LE(this.Size[i]['SizeY'], pos);
pos += 2;
}
return pos - startPos;
}
@@ -92,7 +105,7 @@ export class MapBlockReplyMessage implements MessageBase
{
return pos - startPos;
}
const count = buf.readUInt8(pos++);
let count = buf.readUInt8(pos++);
this.Data = [];
for (let i = 0; i < count; i++)
{
@@ -131,6 +144,27 @@ export class MapBlockReplyMessage implements MessageBase
pos += 16;
this.Data.push(newObjData);
}
if (pos >= buf.length)
{
return pos - startPos;
}
count = buf.readUInt8(pos++);
this.Size = [];
for (let i = 0; i < count; i++)
{
const newObjSize: {
SizeX: number,
SizeY: number
} = {
SizeX: 0,
SizeY: 0
};
newObjSize['SizeX'] = buf.readUInt16LE(pos);
pos += 2;
newObjSize['SizeY'] = buf.readUInt16LE(pos);
pos += 2;
this.Size.push(newObjSize);
}
return pos - startPos;
}
}

View File

@@ -69,10 +69,14 @@ export class ParcelPropertiesMessage implements MessageBase
RegionAllowAccessBlock: {
RegionAllowAccessOverride: boolean;
};
ParcelEnvironmentBlock: {
ParcelEnvironmentVersion: number;
RegionAllowEnvironmentOverride: boolean;
};
getSize(): number
{
return (this.ParcelData['Bitmap'].length + 2 + this.ParcelData['Name'].length + 1 + this.ParcelData['Desc'].length + 1 + this.ParcelData['MusicURL'].length + 1 + this.ParcelData['MediaURL'].length + 1) + 240;
return (this.ParcelData['Bitmap'].length + 2 + this.ParcelData['Name'].length + 1 + this.ParcelData['Desc'].length + 1 + this.ParcelData['MusicURL'].length + 1 + this.ParcelData['MediaURL'].length + 1) + 245;
}
// @ts-ignore
@@ -175,6 +179,9 @@ export class ParcelPropertiesMessage implements MessageBase
buf.writeUInt8((this.ParcelData['RegionDenyTransacted']) ? 1 : 0, pos++);
buf.writeUInt8((this.AgeVerificationBlock['RegionDenyAgeUnverified']) ? 1 : 0, pos++);
buf.writeUInt8((this.RegionAllowAccessBlock['RegionAllowAccessOverride']) ? 1 : 0, pos++);
buf.writeInt32LE(this.ParcelEnvironmentBlock['ParcelEnvironmentVersion'], pos);
pos += 4;
buf.writeUInt8((this.ParcelEnvironmentBlock['RegionAllowEnvironmentOverride']) ? 1 : 0, pos++);
return pos - startPos;
}
@@ -393,6 +400,17 @@ export class ParcelPropertiesMessage implements MessageBase
};
newObjRegionAllowAccessBlock['RegionAllowAccessOverride'] = (buf.readUInt8(pos++) === 1);
this.RegionAllowAccessBlock = newObjRegionAllowAccessBlock;
const newObjParcelEnvironmentBlock: {
ParcelEnvironmentVersion: number,
RegionAllowEnvironmentOverride: boolean
} = {
ParcelEnvironmentVersion: 0,
RegionAllowEnvironmentOverride: false
};
newObjParcelEnvironmentBlock['ParcelEnvironmentVersion'] = buf.readInt32LE(pos);
pos += 4;
newObjParcelEnvironmentBlock['RegionAllowEnvironmentOverride'] = (buf.readUInt8(pos++) === 1);
this.ParcelEnvironmentBlock = newObjParcelEnvironmentBlock;
return pos - startPos;
}
}

View File

@@ -44,10 +44,19 @@ export class RegionInfoMessage implements MessageBase
RegionInfo3: {
RegionFlagsExtended: Long;
}[];
RegionInfo5: {
ChatWhisperRange: number;
ChatNormalRange: number;
ChatShoutRange: number;
ChatWhisperOffset: number;
ChatNormalOffset: number;
ChatShoutOffset: number;
ChatFlags: number;
}[];
getSize(): number
{
return (this.RegionInfo['SimName'].length + 1) + (this.RegionInfo2['ProductSKU'].length + 1 + this.RegionInfo2['ProductName'].length + 1) + ((8) * this.RegionInfo3.length) + 96;
return (this.RegionInfo['SimName'].length + 1) + (this.RegionInfo2['ProductSKU'].length + 1 + this.RegionInfo2['ProductName'].length + 1) + ((8) * this.RegionInfo3.length) + ((28) * this.RegionInfo5.length) + 97;
}
// @ts-ignore
@@ -100,7 +109,7 @@ export class RegionInfoMessage implements MessageBase
pos += 4;
buf.writeUInt32LE(this.RegionInfo2['HardMaxObjects'], pos);
pos += 4;
const count = this.RegionInfo3.length;
let count = this.RegionInfo3.length;
buf.writeUInt8(this.RegionInfo3.length, pos++);
for (let i = 0; i < count; i++)
{
@@ -109,6 +118,25 @@ export class RegionInfoMessage implements MessageBase
buf.writeInt32LE(this.RegionInfo3[i]['RegionFlagsExtended'].high, pos);
pos += 4;
}
count = this.RegionInfo5.length;
buf.writeUInt8(this.RegionInfo5.length, pos++);
for (let i = 0; i < count; i++)
{
buf.writeFloatLE(this.RegionInfo5[i]['ChatWhisperRange'], pos);
pos += 4;
buf.writeFloatLE(this.RegionInfo5[i]['ChatNormalRange'], pos);
pos += 4;
buf.writeFloatLE(this.RegionInfo5[i]['ChatShoutRange'], pos);
pos += 4;
buf.writeFloatLE(this.RegionInfo5[i]['ChatWhisperOffset'], pos);
pos += 4;
buf.writeFloatLE(this.RegionInfo5[i]['ChatNormalOffset'], pos);
pos += 4;
buf.writeFloatLE(this.RegionInfo5[i]['ChatShoutOffset'], pos);
pos += 4;
buf.writeUInt32LE(this.RegionInfo5[i]['ChatFlags'], pos);
pos += 4;
}
return pos - startPos;
}
@@ -225,7 +253,7 @@ export class RegionInfoMessage implements MessageBase
{
return pos - startPos;
}
const count = buf.readUInt8(pos++);
let count = buf.readUInt8(pos++);
this.RegionInfo3 = [];
for (let i = 0; i < count; i++)
{
@@ -238,6 +266,47 @@ export class RegionInfoMessage implements MessageBase
pos += 8;
this.RegionInfo3.push(newObjRegionInfo3);
}
if (pos >= buf.length)
{
return pos - startPos;
}
count = buf.readUInt8(pos++);
this.RegionInfo5 = [];
for (let i = 0; i < count; i++)
{
const newObjRegionInfo5: {
ChatWhisperRange: number,
ChatNormalRange: number,
ChatShoutRange: number,
ChatWhisperOffset: number,
ChatNormalOffset: number,
ChatShoutOffset: number,
ChatFlags: number
} = {
ChatWhisperRange: 0,
ChatNormalRange: 0,
ChatShoutRange: 0,
ChatWhisperOffset: 0,
ChatNormalOffset: 0,
ChatShoutOffset: 0,
ChatFlags: 0
};
newObjRegionInfo5['ChatWhisperRange'] = buf.readFloatLE(pos);
pos += 4;
newObjRegionInfo5['ChatNormalRange'] = buf.readFloatLE(pos);
pos += 4;
newObjRegionInfo5['ChatShoutRange'] = buf.readFloatLE(pos);
pos += 4;
newObjRegionInfo5['ChatWhisperOffset'] = buf.readFloatLE(pos);
pos += 4;
newObjRegionInfo5['ChatNormalOffset'] = buf.readFloatLE(pos);
pos += 4;
newObjRegionInfo5['ChatShoutOffset'] = buf.readFloatLE(pos);
pos += 4;
newObjRegionInfo5['ChatFlags'] = buf.readUInt32LE(pos);
pos += 4;
this.RegionInfo5.push(newObjRegionInfo5);
}
return pos - startPos;
}
}

View File

@@ -304,6 +304,8 @@ export enum Message
GodlikeMessage = 4294902019,
EstateOwnerMessage = 4294902020,
GenericMessage = 4294902021,
GenericStreamingMessage = 31,
LargeGenericMessage = 4294902190,
MuteListRequest = 4294902022,
UpdateMuteListEntry = 4294902023,
RemoveMuteListEntry = 4294902024,

9214
tools/message_template.msg Executable file

File diff suppressed because it is too large Load Diff

View File

@@ -8403,6 +8403,48 @@
"size": 1
}
]
},
{
"name": "RegionInfo5",
"type": "Variable",
"count": 1,
"params": [
{
"name": "ChatWhisperRange",
"type": "F32",
"size": 1
},
{
"name": "ChatNormalRange",
"type": "F32",
"size": 1
},
{
"name": "ChatShoutRange",
"type": "F32",
"size": 1
},
{
"name": "ChatWhisperOffset",
"type": "F32",
"size": 1
},
{
"name": "ChatNormalOffset",
"type": "F32",
"size": 1
},
{
"name": "ChatShoutOffset",
"type": "F32",
"size": 1
},
{
"name": "ChatFlags",
"type": "U32",
"size": 1
}
]
}
]
},
@@ -12684,6 +12726,23 @@
"size": 1
}
]
},
{
"name": "ParcelEnvironmentBlock",
"type": "Single",
"count": 1,
"params": [
{
"name": "ParcelEnvironmentVersion",
"type": "S32",
"size": 1
},
{
"name": "RegionAllowEnvironmentOverride",
"type": "BOOL",
"size": 1
}
]
}
]
},
@@ -16275,6 +16334,104 @@
}
]
},
{
"name": "GenericStreamingMessage",
"frequency": "High",
"id": "31",
"flags": [
"Trusted",
"Unencoded"
],
"blocks": [
{
"name": "MethodData",
"type": "Single",
"count": 1,
"params": [
{
"name": "Method",
"type": "U16",
"size": 1
}
]
},
{
"name": "DataBlock",
"type": "Single",
"count": 1,
"params": [
{
"name": "Data",
"type": "Variable",
"size": "2"
}
]
}
]
},
{
"name": "LargeGenericMessage",
"frequency": "Low",
"id": "430",
"flags": [
"NotTrusted",
"Unencoded",
"UDPDeprecated"
],
"blocks": [
{
"name": "AgentData",
"type": "Single",
"count": 1,
"params": [
{
"name": "AgentID",
"type": "LLUUID",
"size": 1
},
{
"name": "SessionID",
"type": "LLUUID",
"size": 1
},
{
"name": "TransactionID",
"type": "LLUUID",
"size": 1
}
]
},
{
"name": "MethodData",
"type": "Single",
"count": 1,
"params": [
{
"name": "Method",
"type": "Variable",
"size": "1"
},
{
"name": "Invoice",
"type": "LLUUID",
"size": 1
}
]
},
{
"name": "ParamList",
"type": "Variable",
"count": 1,
"params": [
{
"name": "Parameter",
"type": "Variable",
"size": "2"
}
]
}
]
},
{
"name": "MuteListRequest",
"frequency": "Low",
@@ -25039,6 +25196,23 @@
"size": 1
}
]
},
{
"name": "Size",
"type": "Variable",
"count": 1,
"params": [
{
"name": "SizeX",
"type": "U16",
"size": 1
},
{
"name": "SizeY",
"type": "U16",
"size": 1
}
]
}
]
},

View File

@@ -68,7 +68,7 @@ function getBlocks(str)
return block;
}
fs.readFile('./msg_template.msg', (err, data) =>
fs.readFile('./message_template.msg', (err, data) =>
{
if (err)
{
@@ -81,7 +81,7 @@ fs.readFile('./msg_template.msg', (err, data) =>
//Remove all comments
const lines = msgTemplate.split('\n');
let newLines = [];
for (const line of lines)
for (let line of lines)
{
let pos = line.indexOf('//');
if (pos !== -1)