From 3870861b0a52a365d916bcdeda32090361537d7e Mon Sep 17 00:00:00 2001 From: Casper Warden <216465704+casperwardensl@users.noreply.github.com> Date: Mon, 25 Nov 2024 16:55:55 +0000 Subject: [PATCH] LLSettings/LLMesh fixes, also upload cost fix --- lib/classes/CoalescedGameObject.ts | 9 +- lib/classes/InventoryFolder.ts | 192 +++---- lib/classes/LLSettings.ts | 458 ++++++++++++++++ lib/classes/Region.ts | 25 +- lib/classes/Utils.ts | 6 +- lib/classes/commands/AssetCommands.ts | 2 +- lib/classes/llsd/LLSDNotationParser.ts | 4 + lib/classes/llsd/LLSDObject.ts | 2 + lib/classes/public/GameObject.ts | 69 +-- lib/classes/public/LLMesh.ts | 15 +- lib/index.ts | 4 + lib/tools/LLMeshTest.ts | 10 + lib/tools/LLSDSettingsTest.ts | 14 + package.json | 2 +- testing/daycycle.bin | 2 + testing/sky.bin | Bin 0 -> 1689 bytes testing/water.bin | Bin 0 -> 414 bytes tools/msg_template.json | 724 ++++++++++++------------- 18 files changed, 1011 insertions(+), 527 deletions(-) create mode 100644 lib/classes/LLSettings.ts create mode 100644 lib/tools/LLMeshTest.ts create mode 100644 lib/tools/LLSDSettingsTest.ts create mode 100644 testing/daycycle.bin create mode 100644 testing/sky.bin create mode 100644 testing/water.bin diff --git a/lib/classes/CoalescedGameObject.ts b/lib/classes/CoalescedGameObject.ts index c39f1b3..bc28650 100644 --- a/lib/classes/CoalescedGameObject.ts +++ b/lib/classes/CoalescedGameObject.ts @@ -8,6 +8,7 @@ import { Utils } from './Utils'; export class CoalescedGameObject { itemID: UUID; + assetID: UUID; size: Vector3; objects: { offset: Vector3, @@ -40,7 +41,7 @@ export class CoalescedGameObject return obj; } - async exportXMLElement(rootNode?: string): Promise + async exportXMLElement(rootNode?: string, skipResolve?: Set): Promise { const document = builder.create('CoalescedObject'); document.att('x', this.size.x); @@ -53,14 +54,14 @@ export class CoalescedGameObject ele.att('offsetx', obj.offset.x); ele.att('offsety', obj.offset.y); ele.att('offsetz', obj.offset.z); - const child = await obj.object.exportXMLElement(rootNode); + const child = await obj.object.exportXMLElement(rootNode, false, skipResolve?.has(obj.object.FullID.toString())); ele.children.push(child); } return document; } - async exportXML(rootNode?: string): Promise + async exportXML(rootNode?: string, skipResolve?: Set): Promise { - return (await this.exportXMLElement(rootNode)).end({ pretty: true, allowEmpty: true }); + return (await this.exportXMLElement(rootNode, skipResolve)).end({ pretty: true, allowEmpty: true }); } } diff --git a/lib/classes/InventoryFolder.ts b/lib/classes/InventoryFolder.ts index f03a0c0..977e9af 100644 --- a/lib/classes/InventoryFolder.ts +++ b/lib/classes/InventoryFolder.ts @@ -716,131 +716,95 @@ export class InventoryFolder }); } - uploadAsset(type: AssetType, inventoryType: InventoryType, data: Buffer, name: string, description: string, flags: InventoryItemFlags = InventoryItemFlags.None): Promise + public async uploadAsset(type: AssetType, inventoryType: InventoryType, data: Buffer, name: string, description: string, flags: InventoryItemFlags = InventoryItemFlags.None): Promise { - return new Promise((resolve, reject) => + switch (inventoryType) { - switch (inventoryType) + case InventoryType.Wearable: + case InventoryType.Bodypart: { - case InventoryType.Wearable: - case InventoryType.Bodypart: // Wearables have to be uploaded using the legacy method and then created - this.uploadInventoryAssetLegacy(type, inventoryType, data, name, description, flags).then((invItemID: UUID) => - { - this.agent.inventory.fetchInventoryItem(invItemID).then((item: InventoryItem | null) => - { - if (item === null) - { - reject(new Error('Unable to get inventory item')); - } - else - { - this.addItem(item, false).then(() => - { - resolve(item); - }); - } - }).catch((err) => - { - reject(err); - }); - }).catch((err) => - { - reject(err); - }); - return; - case InventoryType.Landmark: - case InventoryType.Notecard: - case InventoryType.Gesture: - case InventoryType.Script: - case InventoryType.LSL: - case InventoryType.Settings: - // These types must be created first and then modified - this.uploadInventoryItem(type, inventoryType, data, name, description, flags).then((invItemID: UUID) => - { - this.agent.inventory.fetchInventoryItem(invItemID).then((item: InventoryItem | null) => - { - if (item === null) - { - reject(new Error('Unable to get inventory item')); - } - else - { - this.addItem(item, false).then(() => - { - resolve(item); - }); - } - }).catch((err) => - { - reject(err); - }); - }).catch((err) => - { - reject(err); - }); - return; - } - Logger.Info('[' + name + ']'); - const httpType = Utils.AssetTypeToHTTPAssetType(type); - this.agent.currentRegion.caps.capsPostXML('NewFileAgentInventory', { - 'folder_id': new LLSD.UUID(this.folderID.toString()), - 'asset_type': httpType, - 'inventory_type': Utils.HTTPAssetTypeToCapInventoryType(httpType), - 'name': name, - 'description': description, - 'everyone_mask': PermissionMask.All, - 'group_mask': PermissionMask.All, - 'next_owner_mask': PermissionMask.All, - 'expected_upload_cost': 0 - }).then((response: any) => - { - if (response['state'] === 'upload') + const invItemID = await this.uploadInventoryAssetLegacy(type, inventoryType, data, name, description, flags); + const uploadedItem: InventoryItem | null = await this.agent.inventory.fetchInventoryItem(invItemID) + if (uploadedItem === null) { - const uploadURL = response['uploader']; - this.agent.currentRegion.caps.capsRequestUpload(uploadURL, data).then((responseUpload: any) => - { - if (responseUpload['new_inventory_item'] !== undefined) - { - const invItemID = new UUID(responseUpload['new_inventory_item'].toString()); - this.agent.inventory.fetchInventoryItem(invItemID).then((item: InventoryItem | null) => - { - if (item === null) - { - reject(new Error('Unable to get inventory item')); - } - else - { - this.addItem(item, false).then(() => - { - resolve(item); - }); - } - }).catch((err) => - { - reject(err); - }); - } - }).catch((err) => - { - reject(err); - }); - } - else if (response['error']) - { - reject(response['error']['message']); + throw new Error('Unable to get inventory item'); } else { - reject('Unable to upload asset'); + await this.addItem(uploadedItem, false); } - }).catch((err) => + return uploadedItem; + } + case InventoryType.Landmark: + case InventoryType.Notecard: + case InventoryType.Gesture: + case InventoryType.Script: + case InventoryType.LSL: + case InventoryType.Settings: { - console.log('Got err'); - console.log(err); - reject(err); - }) + // These types must be created first and then modified + const invItemID: UUID = await this.uploadInventoryItem(type, inventoryType, data, name, description, flags); + const item: InventoryItem | null = await this.agent.inventory.fetchInventoryItem(invItemID) + if (item === null) + { + throw new Error('Unable to get inventory item'); + } + else + { + await this.addItem(item, false); + } + return item; + } + } + + const uploadCost = await this.agent.currentRegion.getUploadCost(); + + Logger.Info('[' + name + ']'); + const httpType = Utils.AssetTypeToHTTPAssetType(type); + const response = await this.agent.currentRegion.caps.capsPostXML('NewFileAgentInventory', { + 'folder_id': new LLSD.UUID(this.folderID.toString()), + 'asset_type': httpType, + 'inventory_type': Utils.HTTPAssetTypeToCapInventoryType(httpType), + 'name': name, + 'description': description, + 'everyone_mask': PermissionMask.All, + 'group_mask': PermissionMask.All, + 'next_owner_mask': PermissionMask.All, + 'expected_upload_cost': uploadCost }); + + if (response['state'] === 'upload') + { + const uploadURL = response['uploader']; + const responseUpload = await this.agent.currentRegion.caps.capsRequestUpload(uploadURL, data); + if (responseUpload['new_inventory_item'] !== undefined) + { + const invItemID = new UUID(responseUpload['new_inventory_item'].toString()); + const item: InventoryItem | null = await this.agent.inventory.fetchInventoryItem(invItemID); + if (item === null) + { + throw new Error('Unable to get inventory item'); + } + else + { + await this.addItem(item, false); + } + return item; + } + else + { + throw new Error('Unable to upload asset'); + } + } + else if (response['error']) + { + throw new Error(response['error']['message']); + } + else + { + throw new Error('Unable to upload asset'); + } } checkCopyright(creatorID: UUID): void diff --git a/lib/classes/LLSettings.ts b/lib/classes/LLSettings.ts new file mode 100644 index 0000000..2906689 --- /dev/null +++ b/lib/classes/LLSettings.ts @@ -0,0 +1,458 @@ +import { LLSDNotationParser } from './llsd/LLSDNotationParser'; +import { UUID } from './UUID'; +import { Vector3 } from './Vector3'; +import { Vector2 } from './Vector2'; +import { Quaternion } from './Quaternion'; +import { Vector4 } from './Vector4'; +import { LLSDMap } from './llsd/LLSDMap'; + +interface UUIDObjectLLSD +{ + mUUID: string; +} + +interface TermConfigLLSD +{ + anisotropy?: number; + constant_term: number; + exp_scale: number; + exp_term: number; + linear_term: number; + width: number; +} + +interface HazeConfigLLSD +{ + ambient: number[]; + blue_density: number[]; + blue_horizon: number[]; + density_multiplier: number; + distance_multiplier: number; + haze_density: number; + haze_horizon: number; +} + +interface SettingsConfigLLSD +{ + absorption_config?: TermConfigLLSD[]; + bloom_id?: UUIDObjectLLSD; + cloud_color?: number[]; + cloud_id?: UUIDObjectLLSD; + cloud_pos_density1?: number[]; + cloud_pos_density2?: number[]; + cloud_scale?: number; + cloud_scroll_rate?: number[]; + cloud_shadow?: number; + cloud_variance?: number; + dome_offset?: number; + dome_radius?: number; + droplet_radius?: number; + gamma?: number; + glow?: number[]; + halo_id?: UUIDObjectLLSD; + ice_level?: number; + legacy_haze?: HazeConfigLLSD; + max_y?: number; + mie_config?: TermConfigLLSD[]; + moisture_level?: number; + moon_brightness?: number; + moon_id?: UUIDObjectLLSD; + moon_rotation?: number[]; + moon_scale?: number; + name?: string; + planet_radius?: number; + rainbow_id?: UUIDObjectLLSD; + rayleigh_config?: TermConfigLLSD[]; + sky_bottom_radius?: number; + sky_top_radius?: number; + star_brightness?: number; + sun_arc_radians?: number; + sun_id?: UUIDObjectLLSD; + sun_rotation?: number[]; + sun_scale?: number; + sunlight_color?: number[]; + type?: string; + frames?: Record, + tracks?: { + key_keyframe: number, + key_name: string + }[][], + blur_multiplier?: number; + fresnel_offset?: number; + fresnel_scale?: number; + normal_map?: UUIDObjectLLSD; + normal_scale?: number[]; + scale_above?: number; + scale_below?: number; + underwater_fog_mod?: number; + water_fog_color?: number[] + water_fog_density?: number; + wave1_direction: number[]; + wave2_direction: number[]; +} + +export interface LLSettingsHazeConfig +{ + ambient: Vector3; + blueDensity: Vector3; + blueHorizon: Vector3; + densityMultiplier: number; + distanceMultiplier: number; + hazeDensity: number; + hazeHorizon: number; +} + +export interface LLSettingsTermConfig +{ + anisotropy?: number; + constantTerm: number; + expScale: number; + expTerm: number; + linearTerm: number; + width: number; +} + +export class LLSettings +{ + public absorptionConfig?: LLSettingsTermConfig[]; + public bloomID?: UUID; + public cloudColor?: Vector3; + public cloudID?: UUID; + public cloudPosDensity1?: Vector3; + public cloudPosDensity2?: Vector3; + public cloudScale?: number; + public cloudScrollRate?: Vector2; + public cloudShadow?: number; + public cloudVariance?: number; + public domeOffset?: number; + public domeRadius?: number; + public dropletRadius?: number; + public gamma?: number; + public glow?: Vector3; + public haloID?: UUID; + public iceLevel?: number; + public legacyHaze?: LLSettingsHazeConfig; + public maxY?: number; + public mieConfig?: LLSettingsTermConfig[]; + public moistureLevel?: number; + public moonBrightness?: number; + public moonID?: UUID; + public moonRotation?: Quaternion; + public moonScale?: number; + public name?: string; + public planetRadius?: number; + public rainbowID?: UUID; + public rayleighConfig?: LLSettingsTermConfig[]; + public skyBottomRadius?: number; + public skyTopRadius?: number; + public starBrightness?: number; + public sunArcRadians?: number; + public sunID?: UUID; + public sunRotation?: Quaternion; + public sunScale?: number; + public sunlightColor?: Vector4; + public type?: string; + public tracks?: { keyKeyframe: number, keyName: string }[][]; + public frames?: Map; + public blurMultiplier?: number; + public fresnelOffset?: number; + public fresnelScale?: number; + public normalMap?: UUID; + public normalScale?: Vector3; + public scaleAbove?: number; + public scaleBelow?: number; + public underwaterFogMod?: number; + public waterFogColor?: Vector3; + public waterFogDensity?: number; + public wave1Direction?: Vector2; + public wave2Direction?: Vector2; + + public constructor(data?: string | SettingsConfigLLSD) + { + if (data) + { + let settings: SettingsConfigLLSD | null = null; + if (typeof data === 'string') + { + const result = LLSDNotationParser.parse(data); + if (!(result instanceof LLSDMap)) + { + return; + } + settings = JSON.parse(JSON.stringify(result.toJSON())) as SettingsConfigLLSD; + } + else + { + settings = data; + } + if (settings.absorption_config !== undefined) + { + this.absorptionConfig = []; + for (const conf of settings.absorption_config) + { + this.absorptionConfig.push({ + constantTerm: conf.constant_term, + expScale: conf.exp_scale, + expTerm: conf.exp_term, + linearTerm: conf.linear_term, + width: conf.width + }); + } + } + if (settings.bloom_id !== undefined) + { + this.bloomID = new UUID(settings.bloom_id.mUUID); + } + if (settings.cloud_color !== undefined) + { + this.cloudColor = new Vector3(settings.cloud_color); + } + if (settings.cloud_id !== undefined) + { + this.cloudID = new UUID(settings.cloud_id.mUUID); + } + if (settings.cloud_pos_density1 !== undefined) + { + this.cloudPosDensity1 = new Vector3(settings.cloud_pos_density1); + } + if (settings.cloud_pos_density2 !== undefined) + { + this.cloudPosDensity2 = new Vector3(settings.cloud_pos_density2); + } + if (settings.cloud_scale !== undefined) + { + this.cloudScale = settings.cloud_scale; + } + if (settings.cloud_scroll_rate !== undefined) + { + this.cloudScrollRate = new Vector2(settings.cloud_scroll_rate); + } + if (settings.cloud_shadow !== undefined) + { + this.cloudShadow = settings.cloud_shadow; + } + if (settings.cloud_variance !== undefined) + { + this.cloudVariance = settings.cloud_variance; + } + if (settings.dome_offset !== undefined) + { + this.domeOffset = settings.dome_offset; + } + if (settings.dome_radius !== undefined) + { + this.domeRadius = settings.dome_radius; + } + if (settings.droplet_radius !== undefined) + { + this.dropletRadius = settings.droplet_radius; + } + if (settings.gamma !== undefined) + { + this.gamma = settings.gamma; + } + if (settings.glow !== undefined) + { + this.glow = new Vector3(settings.glow); + } + if (settings.halo_id !== undefined) + { + this.haloID = new UUID(settings.halo_id.mUUID); + } + if (settings.ice_level !== undefined) + { + this.iceLevel = settings.ice_level; + } + if (settings.legacy_haze !== undefined) + { + this.legacyHaze = { + ambient: new Vector3(settings.legacy_haze.ambient), + blueDensity: new Vector3(settings.legacy_haze.blue_density), + blueHorizon: new Vector3(settings.legacy_haze.blue_horizon), + densityMultiplier: settings.legacy_haze.density_multiplier, + distanceMultiplier: settings.legacy_haze.distance_multiplier, + hazeDensity: settings.legacy_haze.haze_density, + hazeHorizon: settings.legacy_haze.haze_horizon + } + } + if (settings.max_y !== undefined) + { + this.maxY = settings.max_y; + } + if (settings.mie_config !== undefined) + { + this.mieConfig = []; + for (const mie of settings.mie_config) + { + this.mieConfig.push({ + anisotropy: mie.anisotropy, + constantTerm: mie.constant_term, + expScale: mie.exp_scale, + expTerm: mie.exp_term, + linearTerm: mie.linear_term, + width: mie.width + }); + } + } + if (settings.moisture_level !== undefined) + { + this.moistureLevel = settings.moisture_level; + } + if (settings.moon_brightness !== undefined) + { + this.moonBrightness = settings.moon_brightness; + } + if (settings.moon_id !== undefined) + { + this.moonID = new UUID(settings.moon_id.mUUID); + } + if (settings.moon_rotation !== undefined) + { + this.moonRotation = new Quaternion(settings.moon_rotation); + } + if (settings.moon_scale !== undefined) + { + this.moonScale = settings.moon_scale; + } + if (settings.name !== undefined) + { + this.name = settings.name; + } + if (settings.planet_radius !== undefined) + { + this.planetRadius = settings.planet_radius; + } + if (settings.rainbow_id !== undefined) + { + this.rainbowID = new UUID(settings.rainbow_id.mUUID); + } + if (settings.rayleigh_config !== undefined) + { + this.rayleighConfig = []; + for (const ray of settings.rayleigh_config) + { + this.rayleighConfig.push({ + anisotropy: ray.anisotropy, + constantTerm: ray.constant_term, + expScale: ray.exp_scale, + expTerm: ray.exp_term, + linearTerm: ray.linear_term, + width: ray.width + }); + } + } + if (settings.sky_bottom_radius !== undefined) + { + this.skyBottomRadius = settings.sky_bottom_radius; + } + if (settings.sky_top_radius !== undefined) + { + this.skyTopRadius = settings.sky_top_radius; + } + if (settings.star_brightness !== undefined) + { + this.starBrightness = settings.star_brightness; + } + if (settings.sun_arc_radians !== undefined) + { + this.sunArcRadians = settings.sun_arc_radians; + } + if (settings.sun_id !== undefined) + { + this.sunID = new UUID(settings.sun_id.mUUID); + } + if (settings.sun_rotation !== undefined) + { + this.sunRotation = new Quaternion(settings.sun_rotation); + } + if (settings.sun_scale !== undefined) + { + this.sunScale = settings.sun_scale; + } + if (settings.sunlight_color !== undefined) + { + this.sunlightColor = new Vector4(settings.sunlight_color); + } + if (settings.type !== undefined) + { + this.type = settings.type; + } + if (settings.tracks !== undefined) + { + this.tracks = []; + for (const track of settings.tracks) + { + const t: { + keyKeyframe: number, + keyName: string + }[] = []; + for (const tr of track) + { + t.push({ + keyKeyframe: tr.key_keyframe, + keyName: tr.key_name + }); + } + this.tracks.push(t); + } + } + if (settings.frames !== undefined) + { + this.frames = new Map(); + for (const keyFrame of Object.keys(settings.frames)) + { + const frame = settings.frames[keyFrame]; + this.frames.set(keyFrame, new LLSettings(frame)); + } + } + if (settings.blur_multiplier !== undefined) + { + this.blurMultiplier = settings.blur_multiplier; + } + if (settings.fresnel_offset !== undefined) + { + this.fresnelOffset = settings.fresnel_offset; + } + if (settings.fresnel_scale !== undefined) + { + this.fresnelScale = settings.fresnel_scale; + } + if (settings.normal_map !== undefined) + { + this.normalMap = new UUID(settings.normal_map.mUUID); + } + if (settings.normal_scale !== undefined) + { + this.normalScale = new Vector3(settings.normal_scale); + } + if (settings.scale_above !== undefined) + { + this.scaleAbove = settings.scale_above; + } + if (settings.scale_below !== undefined) + { + this.scaleBelow = settings.scale_below; + } + if (settings.underwater_fog_mod !== undefined) + { + this.underwaterFogMod = settings.underwater_fog_mod; + } + if (settings.water_fog_color !== undefined) + { + this.waterFogColor = new Vector3(settings.water_fog_color); + } + if (settings.water_fog_density !== undefined) + { + this.waterFogDensity = settings.water_fog_density; + } + if (settings.wave1_direction !== undefined) + { + this.wave1Direction = new Vector2(settings.wave1_direction); + } + if (settings.wave2_direction !== undefined) + { + this.wave2Direction = new Vector2(settings.wave2_direction); + } + } + } +} diff --git a/lib/classes/Region.ts b/lib/classes/Region.ts index de4f43a..ab00434 100644 --- a/lib/classes/Region.ts +++ b/lib/classes/Region.ts @@ -19,11 +19,10 @@ import * as Long from 'long'; import { Packet } from './Packet'; import { LayerDataMessage } from './messages/LayerData'; import { LayerType } from '../enums/LayerType'; -import { Subscription } from 'rxjs'; +import { Subject, Subscription } from 'rxjs'; import { BitPack } from './BitPack'; import * as builder from 'xmlbuilder'; import { SimAccessFlags } from '../enums/SimAccessFlags'; -import { Subject } from 'rxjs'; import { ParcelDwellRequestMessage } from './messages/ParcelDwellRequest'; import { ParcelDwellReplyMessage } from './messages/ParcelDwellReply'; import { Parcel } from './public/Parcel'; @@ -54,6 +53,8 @@ import { Avatar } from './public/Avatar'; import { MoneyBalanceReplyMessage } from './messages/MoneyBalanceReply'; import { BalanceUpdatedEvent } from '../events/BalanceUpdatedEvent'; import { Logger } from './Logger'; +import { EconomyDataRequestMessage } from './messages/EconomyDataRequest'; +import { EconomyDataMessage } from './messages/EconomyData'; export class Region { @@ -156,6 +157,8 @@ export class Region agents: { [key: string]: Avatar } = {}; + private uploadCost: number; + private parcelOverlayReceived: { [key: number]: Buffer } = {}; static IDCTColumn16(linein: number[], lineout: number[], column: number): void @@ -988,6 +991,24 @@ export class Region } } + public async getUploadCost(): Promise + { + if (this.uploadCost !== undefined) + { + return this.uploadCost; + } + + const msg = new EconomyDataRequestMessage(); + this.circuit.sendMessage(msg, PacketFlags.Reliable); + const economyReply = await this.circuit.waitForMessage(Message.EconomyData, 10000, (_message: EconomyDataMessage): FilterResponse => + { + return FilterResponse.Finish; + }); + + this.uploadCost = economyReply.Info.PriceUpload; + return this.uploadCost; + } + public getParcelProperties(x: number, y: number): Promise { return new Promise((resolve, reject) => diff --git a/lib/classes/Utils.ts b/lib/classes/Utils.ts index c731083..ba215d4 100644 --- a/lib/classes/Utils.ts +++ b/lib/classes/Utils.ts @@ -359,8 +359,12 @@ export class Utils return AssetType.Category; case 'mesh': return AssetType.Mesh; - + case 'settings': + return AssetType.Settings; + case 'material': + return AssetType.Material; default: + console.error('Unrecognised cap inventory type: ' + capInventoryType); return AssetType.Unknown } } diff --git a/lib/classes/commands/AssetCommands.ts b/lib/classes/commands/AssetCommands.ts index f70f168..7929516 100644 --- a/lib/classes/commands/AssetCommands.ts +++ b/lib/classes/commands/AssetCommands.ts @@ -45,6 +45,7 @@ export class AssetCommands extends CommandsBase case HTTPAssets.ASSET_MATERIAL: case HTTPAssets.ASSET_BODYPART: case HTTPAssets.ASSET_MESH: + case HTTPAssets.ASSET_SETTINGS: return this.currentRegion.caps.downloadAsset(uuid, type); case HTTPAssets.ASSET_CALLINGCARD: case HTTPAssets.ASSET_SCRIPT: @@ -58,7 +59,6 @@ export class AssetCommands extends CommandsBase case HTTPAssets.ASSET_LINK_FOLDER: case HTTPAssets.ASSET_WIDGET: case HTTPAssets.ASSET_PERSON: - case HTTPAssets.ASSET_SETTINGS: { const transferParams = Buffer.allocUnsafe(20); uuid.writeToBuffer(transferParams, 0); diff --git a/lib/classes/llsd/LLSDNotationParser.ts b/lib/classes/llsd/LLSDNotationParser.ts index 2724e89..2dd48cb 100644 --- a/lib/classes/llsd/LLSDNotationParser.ts +++ b/lib/classes/llsd/LLSDNotationParser.ts @@ -191,6 +191,10 @@ export class LLSDNotationParser public static parse(input: string): LLSDType { + if (input.startsWith('')) + { + input = input.substring(20); + } const generator = this.tokenize(input); const getToken: LLSDTokenGenerator = (): LLSDToken | undefined => { diff --git a/lib/classes/llsd/LLSDObject.ts b/lib/classes/llsd/LLSDObject.ts index 1f37821..16f3015 100644 --- a/lib/classes/llsd/LLSDObject.ts +++ b/lib/classes/llsd/LLSDObject.ts @@ -6,4 +6,6 @@ export abstract class LLSDObject } public abstract toJSON(): unknown; + + [key: string]: unknown; } diff --git a/lib/classes/public/GameObject.ts b/lib/classes/public/GameObject.ts index 6d84fa5..ea546b6 100644 --- a/lib/classes/public/GameObject.ts +++ b/lib/classes/public/GameObject.ts @@ -1602,42 +1602,45 @@ export class GameObject implements IGameObjectData } } - private async getXML(xml: XMLNode, rootPrim: GameObject, linkNum: number, rootNode?: string, skipInventory = false): Promise + private async getXML(xml: XMLNode, rootPrim: GameObject, linkNum: number, rootNode?: string, skipInventory = false, skipResolve = false): Promise { - const resolver = this.region?.resolver; - if (resolver) + if (!skipResolve) { - if (this.resolvedAt === undefined) + const resolver = this.region?.resolver; + if (resolver) { - try + if (this.resolvedAt === undefined) { - await resolver.resolveObjects([this], { includeTempObjects: true }); + try + { + await resolver.resolveObjects([this], { includeTempObjects: true }); + } + catch (e: unknown) + { + Logger.Error(e); + } } - catch (e: unknown) + if (!this.resolvedInventory && !skipInventory) { - Logger.Error(e); + try + { + await resolver.getInventory(this); + } + catch (e: unknown) + { + Logger.Error(e); + } } - } - if (!this.resolvedInventory && !skipInventory) - { - try + if (this.calculatedLandImpact === undefined) { - await resolver.getInventory(this); - } - catch (e: unknown) - { - Logger.Error(e); - } - } - if (this.calculatedLandImpact === undefined) - { - try - { - await resolver.getCosts([this]); - } - catch (e: unknown) - { - Logger.Error(e); + try + { + await resolver.getCosts([this]); + } + catch (e: unknown) + { + Logger.Error(e); + } } } } @@ -1890,25 +1893,25 @@ export class GameObject implements IGameObjectData this.region.objects.populateChildren(this); } - async exportXMLElement(rootNode?: string, skipInventory = false): Promise + async exportXMLElement(rootNode?: string, skipInventory = false, skipResolve = false): Promise { const document = builder.create('SceneObjectGroup'); let linkNum = 1; - await this.getXML(document, this, linkNum, rootNode, skipInventory); + await this.getXML(document, this, linkNum, rootNode, skipInventory, skipResolve); if (this.children && this.children.length > 0) { const otherParts = document.ele('OtherParts'); for (const child of this.children) { - await child.getXML(otherParts, this, ++linkNum, (rootNode !== undefined) ? 'Part' : undefined, skipInventory); + await child.getXML(otherParts, this, ++linkNum, (rootNode !== undefined) ? 'Part' : undefined, skipInventory, skipResolve); } } return document; } - async exportXML(rootNode?: string, skipInventory = false): Promise + async exportXML(rootNode?: string, skipInventory = false, skipResolve = false): Promise { - return (await this.exportXMLElement(rootNode, skipInventory)).end({ pretty: true, allowEmpty: true }); + return (await this.exportXMLElement(rootNode, skipInventory, skipResolve)).end({ pretty: true, allowEmpty: true }); } public toJSON(): IGameObjectData diff --git a/lib/classes/public/LLMesh.ts b/lib/classes/public/LLMesh.ts index 9e60343..e81ff1b 100644 --- a/lib/classes/public/LLMesh.ts +++ b/lib/classes/public/LLMesh.ts @@ -32,21 +32,18 @@ export class LLMesh } const startPos = parseInt(obj['position'], 10); obj = obj['result']; - if (!obj['version']) + if (obj['creator']) { - throw new Error('No version found'); + llmesh.creatorID = new UUID(obj['creator'].toString()); } - if (!obj['creator']) + if (obj['date']) { - throw new Error('Creator UUID not found'); + llmesh.date = obj['date']; } - if (obj['date'] === undefined) + if (obj['version']) { - throw new Error('Date not found'); + llmesh.version = parseInt(obj['version'], 10); } - llmesh.creatorID = new UUID(obj['creator'].toString()); - llmesh.date = obj['date']; - llmesh.version = parseInt(obj['version'], 10); for (const key of Object.keys(obj)) { const o = obj[key]; diff --git a/lib/index.ts b/lib/index.ts index 8f25c19..69830af 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -109,6 +109,7 @@ import { LLGLTFMaterial } from './classes/LLGLTFMaterial'; import { ExtendedMeshData } from './classes/public/ExtendedMeshData'; import { ReflectionProbeData } from './classes/public/ReflectionProbeData'; import { RenderMaterialData } from './classes/public/RenderMaterialData'; +import { LLSettings, LLSettingsHazeConfig, LLSettingsTermConfig } from './classes/LLSettings'; export { Bot, @@ -129,6 +130,9 @@ export { LLGestureSoundStep, LLGestureChatStep, LLGestureWaitStep, + LLSettings, + LLSettingsTermConfig, + LLSettingsHazeConfig, ParticleSystem, ExtraParams, diff --git a/lib/tools/LLMeshTest.ts b/lib/tools/LLMeshTest.ts new file mode 100644 index 0000000..62c8653 --- /dev/null +++ b/lib/tools/LLMeshTest.ts @@ -0,0 +1,10 @@ +import * as fs from 'fs'; +import { LLMesh } from '../classes/public/LLMesh'; +const fileName = '/home/tom/projects/node-libnmv/assets/ce167705-00a3-4664-8c6c-a58edf9f0001_mesh.llmesh'; + +const buf = fs.readFileSync(fileName); +LLMesh.from(buf).then((mesh: LLMesh) => +{ + console.log(mesh); +}); + diff --git a/lib/tools/LLSDSettingsTest.ts b/lib/tools/LLSDSettingsTest.ts new file mode 100644 index 0000000..c70af13 --- /dev/null +++ b/lib/tools/LLSDSettingsTest.ts @@ -0,0 +1,14 @@ +import * as fs from 'fs/promises' +import * as path from 'path'; +import { LLSettings } from '../classes/LLSettings'; + +async function test() +{ + const settings = await fs.readFile(path.join(__dirname, '..', '..', '..', 'testing', 'water.bin')); + const set = new LLSettings(settings.toString('utf-8')); + console.log(JSON.stringify(set, null, 4)); +} +test().catch((e) => +{ + console.error(e); +}); diff --git a/package.json b/package.json index 59c6d2c..7d9074f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@caspertech/node-metaverse", - "version": "0.7.40", + "version": "0.7.50", "description": "A node.js interface for Second Life.", "main": "dist/lib/index.js", "types": "dist/lib/index.d.ts", diff --git a/testing/daycycle.bin b/testing/daycycle.bin new file mode 100644 index 0000000..924bdbd --- /dev/null +++ b/testing/daycycle.bin @@ -0,0 +1,2 @@ + +{'frames':{'10818881702425669098':{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.644531,r0.644531,r0.644531],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.14],'cloud_scale':r0.33,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.41,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.79,'glow':[r37.2,r0.001,r-0.45],'halo_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'ice_level':r0,'legacy_haze':{'ambient':[r1.13672,r1.13672,r1.13672],'blue_density':[r0.624665,r1.06266,r1.75033],'blue_horizon':[r0.155225,r0.307763,r0.3604],'density_multiplier':r0.0001,'distance_multiplier':r7.5,'haze_density':r0.83,'haze_horizon':r0.28},'max_y':r10000,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r0,r0.685188,r-3.66295e-009,r0.728367],'moon_scale':r1,'planet_radius':r6360,'rainbow_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r0,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r-0.728367,r7.78755e-009,r0.685188],'sun_scale':r1,'sunlight_color':[r0.624527,r0.543457,r0.769043,r0.256348],'type':'sky'},'12254981229974049081':{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.449219,r0.449219,r0.449219],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.14],'cloud_scale':r0.33,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.41,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.79,'glow':[r38.4,r0.001,r-0],'halo_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'ice_level':r0,'legacy_haze':{'ambient':[r1.13672,r1.13672,r1.13672],'blue_density':[r0.0627451,r1.05882,r1.74902],'blue_horizon':[r0.156863,r0.305882,r0.360784],'density_multiplier':r0.0001,'distance_multiplier':r7.5,'haze_density':r0.76,'haze_horizon':r0.28},'max_y':r6148,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r0,r0.473326,r-2.73876e-008,r0.880887],'moon_scale':r1,'planet_radius':r6360,'rainbow_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r0,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r-0.880887,r1.0194e-007,r0.473326],'sun_scale':r1,'sunlight_color':[r0.623529,r0.541176,r0.764706,r0.254902],'type':'sky'},'1280110403599169915':{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.449219,r0.449219,r0.449219],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.14],'cloud_scale':r0.33,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.41,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.79,'glow':[r38.4,r0.001,r-0],'halo_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'ice_level':r0,'legacy_haze':{'ambient':[r1.13672,r1.13672,r1.13672],'blue_density':[r0.0627451,r1.05882,r1.74902],'blue_horizon':[r0.156863,r0.305882,r0.360784],'density_multiplier':r0.0001,'distance_multiplier':r7.5,'haze_density':r0.76,'haze_horizon':r0.28},'max_y':r3037,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r0,r0.229209,r-4.01884e-008,r0.973377],'moon_scale':r1,'planet_radius':r6360,'rainbow_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r0,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r-0.973377,r3.41335e-007,r0.229209],'sun_scale':r1,'sunlight_color':[r0.623529,r0.541176,r0.764706,r0.254902],'type':'sky'},'13027674788751503156':{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.285156,r0.285156,r0.285156],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.125],'cloud_scale':r0.33,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.49,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.79,'glow':[r35,r0.001,r-0.15],'halo_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'ice_level':r0,'legacy_haze':{'ambient':[r0.597656,r0.597656,r0.597656],'blue_density':[r0.145225,r0.399997,r0.800002],'blue_horizon':[r0.107676,r0.213487,r0.25],'density_multiplier':r0.0002406,'distance_multiplier':r7.5,'haze_density':r0.07,'haze_horizon':r0.28},'max_y':r3037,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r0,r-0.999895,r0.0145108,r-4.37114e-008],'moon_scale':r1,'planet_radius':r6360,'rainbow_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r0,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r0,r-0,r1],'sun_scale':r1,'sunlight_color':[r0.418116,r0.301592,r0.424971,r0.141657],'type':'sky'},'13175330718405794062':{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.449219,r0.449219,r0.449219],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.14],'cloud_scale':r0.33,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.41,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.86,'glow':[r38.4,r0.001,r-0],'halo_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'ice_level':r0,'legacy_haze':{'ambient':[r1.13672,r1.13672,r1.13672],'blue_density':[r0.0627451,r1.05882,r1.74902],'blue_horizon':[r0.156863,r0.305882,r0.360784],'density_multiplier':r0.0001,'distance_multiplier':r7.5,'haze_density':r0.76,'haze_horizon':r0.28},'max_y':r3037,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r0,r0.130535,r-4.25861e-008,r0.991444],'moon_scale':r1,'planet_radius':r6360,'rainbow_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r0,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r-0.991444,r6.46904e-007,r0.130535],'sun_scale':r1,'sunlight_color':[r0.623529,r0.541176,r0.764706,r0.254902],'type':'sky'},'13647984240551802729':{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.207031,r0.207031,r0.207031],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.125],'cloud_scale':r0.3224,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.5,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.58,'glow':[r10.4,r0.001,r-0],'halo_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'ice_level':r0,'legacy_haze':{'ambient':[r0.375,r0.375,r0.375],'blue_density':[r1.85882,r1.78824,r1.86667],'blue_horizon':[r0.0627451,r0.054902,r0.0627451],'density_multiplier':r0.0001,'distance_multiplier':r7.5,'haze_density':r0.79,'haze_horizon':r0.28},'max_y':r10000,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r0,r-0.793353,r1.85841e-008,r0.608762],'moon_scale':r1,'planet_radius':r6360,'rainbow_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r1875,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r0.608762,r-2.85202e-008,r0.793353],'sun_scale':r1,'sunlight_color':[r0.423529,r0.282353,r0.447059,r0.14902],'type':'sky'},'14424495265650454448':{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0,r0,r0],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.125],'cloud_scale':r0.33,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.49,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.79,'glow':[r10.4,r0.001,r-0],'halo_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'ice_level':r0,'legacy_haze':{'ambient':[r0.433594,r0.433594,r0.433594],'blue_density':[r1.4819,r1.20885,r1.5099],'blue_horizon':[r0.0627451,r0.054902,r0.0627451],'density_multiplier':r0.0001,'distance_multiplier':r7.5,'haze_density':r0.76,'haze_horizon':r0.28},'max_y':r8148,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r0,r-0.973379,r1.70673e-007,r0.229203],'moon_scale':r1,'planet_radius':r6360,'rainbow_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r500,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r0.229203,r-8.03772e-008,r0.973379],'sun_scale':r1,'sunlight_color':[r0.614242,r0.394467,r0.636783,r0.212261],'type':'sky'},'15604755134333563831':{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.285156,r0.285156,r0.285156],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.125],'cloud_scale':r0.33,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.49,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.79,'glow':[r35,r0.001,r-0.15],'halo_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'ice_level':r0,'legacy_haze':{'ambient':[r0.597656,r0.597656,r0.597656],'blue_density':[r0.145225,r0.399997,r0.800002],'blue_horizon':[r0.107676,r0.213487,r0.25],'density_multiplier':r0.0002406,'distance_multiplier':r7.5,'haze_density':r0.07,'haze_horizon':r0.28},'max_y':r3037,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r-0,r0.986997,r2.57888e-007,r0.160739],'moon_scale':r1,'planet_radius':r6360,'rainbow_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r0,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r-0.160739,r-8.39975e-008,r0.986997],'sun_scale':r1,'sunlight_color':[r0.418116,r0.301592,r0.424971,r0.141657],'type':'sky'},'16885261102802300252':{'blur_multiplier':r0.04,'fresnel_offset':r0.5,'fresnel_scale':r0.4,'normal_map':u822ded49-9a6c-f61c-cb89-6df54f42cdf4,'normal_scale':[r2,r2,r2],'scale_above':r0.03,'scale_below':r0.2,'type':'water','underwater_fog_mod':r0.25,'water_fog_color':[r0.0156863,r0.14902,r0.25098],'water_fog_density':r16,'wave1_direction':[r1.05,r-0.42],'wave2_direction':[r1.11,r-1.16]},'17543342858263846836':{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.207031,r0.207031,r0.207031],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.125],'cloud_scale':r0.3224,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.5,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.58,'glow':[r10.4,r0.001,r-0],'halo_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'ice_level':r0,'legacy_haze':{'ambient':[r0.375,r0.375,r0.375],'blue_density':[r1.85882,r1.78824,r1.86667],'blue_horizon':[r0.0627451,r0.054902,r0.0627451],'density_multiplier':r0.0001,'distance_multiplier':r7.5,'haze_density':r0.79,'haze_horizon':r0.28},'max_y':r10000,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r0,r-0.866025,r4.37112e-008,r0.500001],'moon_scale':r1,'planet_radius':r6360,'rainbow_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r1875,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r0.500001,r-5.04734e-008,r0.866025],'sun_scale':r1,'sunlight_color':[r0.423529,r0.282353,r0.447059,r0.14902],'type':'sky'},'3183668416795492471':{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.644531,r0.644531,r0.644531],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.125],'cloud_scale':r0.33,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.49,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.65,'glow':[r20,r0.001,r-0],'halo_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'ice_level':r0,'legacy_haze':{'ambient':[r0.84375,r0.84375,r0.84375],'blue_density':[r0.0151515,r0.255682,r0.422348],'blue_horizon':[r0.061553,r0.120028,r0.141572],'density_multiplier':r0.0002857,'distance_multiplier':r7.5,'haze_density':r0.07,'haze_horizon':r0.28},'max_y':r1778,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r0,r-0.130516,r-4.25865e-008,r0.991446],'moon_scale':r1,'planet_radius':r6360,'rainbow_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r0,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r-0,r0.991446,r6.47003e-007,r0.130516],'sun_scale':r1,'sunlight_color':[r0.623529,r0.541177,r0.764706,r0.254902],'type':'sky'},'5430810245386853725':{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.101563,r0.101563,r0.101563],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.125],'cloud_scale':r0.3224,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.5,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.79,'glow':[r35,r0.001,r-0.15],'halo_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'ice_level':r0,'legacy_haze':{'ambient':[r0.597656,r0.597656,r0.597656],'blue_density':[r1.85882,r1.78824,r1.86667],'blue_horizon':[r0.0627451,r0.054902,r0.0627451],'density_multiplier':r0.0002406,'distance_multiplier':r7.5,'haze_density':r0.07,'haze_horizon':r0.28},'max_y':r3037,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r0,r-0.258809,r-3.91909e-008,r0.965929],'moon_scale':r1,'planet_radius':r6360,'rainbow_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r0,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r-0,r0.965929,r2.92537e-007,r0.258809],'sun_scale':r1,'sunlight_color':[r0.418116,r0.282353,r0.447059,r0.14902],'type':'sky'},'5820013761256879105':{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.226154,r0.226154,r0.226154],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.125],'cloud_scale':r0.33,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.49,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.86,'glow':[r36.2,r0.001,r-2.85],'halo_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'ice_level':r0,'legacy_haze':{'ambient':[r0.972656,r0.972656,r0.972656],'blue_density':[r0.0627451,r1.05882,r1.76471],'blue_horizon':[r0.156863,r0.305882,r0.360784],'density_multiplier':r0.0001,'distance_multiplier':r7.5,'haze_density':r0.76,'haze_horizon':r0.28},'max_y':r370,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r0,r0,r-0,r1],'moon_scale':r1,'planet_radius':r6360,'rainbow_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r0,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r-0.999955,r0.00944598,r-4.37114e-008],'sun_scale':r1,'sunlight_color':[r0.623529,r0.541176,r0.764706,r0.254902],'type':'sky'},'67743201241188480':{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.386719,r0.386719,r0.386719],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.125],'cloud_scale':r0.33,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.49,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.6,'glow':[r34.8,r0.001,r-0.45],'halo_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'ice_level':r0,'legacy_haze':{'ambient':[r1.13672,r1.13672,r1.13672],'blue_density':[r0.145225,r0.399997,r0.800002],'blue_horizon':[r0.107676,r0.213487,r0.25],'density_multiplier':r0.0002406,'distance_multiplier':r7.5,'haze_density':r0.07,'haze_horizon':r0.28},'max_y':r3077,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r-0,r0.957573,r1.2648e-007,r0.288192],'moon_scale':r1,'planet_radius':r6360,'rainbow_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r0,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r-0.288192,r-7.61311e-008,r0.957573],'sun_scale':r1,'sunlight_color':[r0.714108,r0.516078,r0.72611,r0.242037],'type':'sky'},'6804406521521984815':{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0,r0,r0],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.125],'cloud_scale':r0.3224,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.5,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.58,'glow':[r10.4,r0.001,r-0],'halo_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'ice_level':r0,'legacy_haze':{'ambient':[r0.269531,r0.269531,r0.269531],'blue_density':[r1.85882,r1.78824,r1.86667],'blue_horizon':[r0.0627451,r0.054902,r0.0627451],'density_multiplier':r0.0001,'distance_multiplier':r7.5,'haze_density':r0.79,'haze_horizon':r0.28},'max_y':r10000,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r0,r-0.707107,r7.37163e-016,r0.707107],'moon_scale':r1,'planet_radius':r6360,'rainbow_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r1875,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r0.707107,r-1.47433e-015,r0.707107],'sun_scale':r1,'sunlight_color':[r0.423529,r0.282353,r0.447059,r0.14902],'type':'sky'},'6845898807570006406':{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.449219,r0.449219,r0.449219],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.14],'cloud_scale':r0.33,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.41,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.79,'glow':[r38.4,r0.001,r-0.15],'halo_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'ice_level':r0,'legacy_haze':{'ambient':[r1.13672,r1.13672,r1.13672],'blue_density':[r0.0624164,r1.05882,r1.74902],'blue_horizon':[r0.155225,r0.307763,r0.3604],'density_multiplier':r0.0001,'distance_multiplier':r7.5,'haze_density':r0.76,'haze_horizon':r0.28},'max_y':r8148,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r0,r0.584255,r-1.70894e-008,r0.81157],'moon_scale':r1,'planet_radius':r6360,'rainbow_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r0,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r-0.81157,r4.74767e-008,r0.584255],'sun_scale':r1,'sunlight_color':[r0.623529,r0.541176,r0.764706,r0.254902],'type':'sky'},'8839870252612281241':{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.449219,r0.449219,r0.449219],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r0.5,r0.5,r0.3036],'cloud_pos_density2':[r0.5,r0.5,r0.14],'cloud_scale':r0.33,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.41,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r0.79,'glow':[r38.4,r0.001,r-0],'halo_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'ice_level':r0,'legacy_haze':{'ambient':[r1.13672,r1.13672,r1.13672],'blue_density':[r0.0627451,r1.05882,r1.74902],'blue_horizon':[r0.156863,r0.305882,r0.360784],'density_multiplier':r0.0001,'distance_multiplier':r7.5,'haze_density':r0.76,'haze_horizon':r0.28},'max_y':r4519,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':ud07f6eed-b96a-47cd-b51d-400ad4a1c428,'moon_rotation':[r0,r0.354298,r-3.50083e-008,r0.935132],'moon_scale':r1,'planet_radius':r6360,'rainbow_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r0,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r-0.935132,r1.84801e-007,r0.354298],'sun_scale':r1,'sunlight_color':[r0.623529,r0.541176,r0.764706,r0.254902],'type':'sky'}},'name':'(SS) Atmos 6','tracks':[[{'key_keyframe':r0,'key_name':'16885261102802300252'}],[{'key_keyframe':r0,'key_name':'6804406521521984815'},{'key_keyframe':r0.0416666,'key_name':'13647984240551802729'},{'key_keyframe':r0.0833333,'key_name':'17543342858263846836'},{'key_keyframe':r0.166667,'key_name':'14424495265650454448'},{'key_keyframe':r0.25,'key_name':'13027674788751503156'},{'key_keyframe':r0.291667,'key_name':'15604755134333563831'},{'key_keyframe':r0.333333,'key_name':'67743201241188480'},{'key_keyframe':r0.5,'key_name':'10818881702425669098'},{'key_keyframe':r0.541666,'key_name':'6845898807570006406'},{'key_keyframe':r0.583333,'key_name':'12254981229974049081'},{'key_keyframe':r0.625,'key_name':'8839870252612281241'},{'key_keyframe':r0.666666,'key_name':'1280110403599169915'},{'key_keyframe':r0.708333,'key_name':'13175330718405794062'},{'key_keyframe':r0.75,'key_name':'5820013761256879105'},{'key_keyframe':r0.791666,'key_name':'3183668416795492471'},{'key_keyframe':r0.833333,'key_name':'5430810245386853725'}],[],[],[]],'type':'daycycle'} \ No newline at end of file diff --git a/testing/sky.bin b/testing/sky.bin new file mode 100644 index 0000000000000000000000000000000000000000..407685b7e28c25d5e341030286373a88a32b8f3e GIT binary patch literal 1689 zcmb7E+m75Q5Z&i|Mc#NZ9l-d)Xtnu*{emd6%7CZQVrXG^CY@;heGA&|>6t`P;s*<= zin^UT_4mj3-Y@1uh%2lvhW8);dH0>bxWshI_d&-nxkvKw={v#WvO-vg)ux#|Bvujo z^)xIRynVU8D7_07(r!(qrHnNdd2(hwqP=JsW6#x(e)%8y#VmG@?D=y=MjzumI71%J zwQkhZO_nO7dn&t0(H>x;pp4SP++~mXlmkIbC}w3e{hP+U~E|2df_<=&+Z%1GS%f%-``x{S&E-na?#vO zZ=F9#u?JdoirxUM%Bb6$(FwT@x-OJ-6nD~@&JBV(7{RNVPpf@;8ob3>&X|Zdu zQ*A|xEP-+71!X*Ah{6<4-mVyRllNKr2=fft2#-F8`jnbnEMr(b#msWiNAU5A78hJ9 zE^9h9N>Rn3qg@A@j*Wm?Gn8sm5vT3o?HB8FMiue)5%gs^!Z*wr2X`Kw4VZ1gkx87l zT%Q!OEq$(Q3_1F<-ND#;RLtb|-%XA&xoux@ItHFQ)hAoVn! z8g8g$42%S>rNEqvecDz}>2n#3j&+nhtjszHi&YP=TPX Nms182izUy0{SRPg5=;O9 literal 0 HcmV?d00001 diff --git a/testing/water.bin b/testing/water.bin new file mode 100644 index 0000000000000000000000000000000000000000..8e7b20b4f7fdc2c0f757e216cf82e2045415cc55 GIT binary patch literal 414 zcmZWlO>cxC5be3Y!W$Rd3c8A$rkgZ9^wd9K3_%!L6BL7}*);v{MYdl_PYiF~yf<&| z&xtX!x*M$*zPDp?ez<){omm_o7UTQL^x)9RWrvJZ7-m&XYdjKgU(VIh+v7) zD27m@=H;jq)?ASQHL7^MnSQKz*iWvWXeQ`xaPEtNhNx}Z|& z;%DT`qHz>Ef?d{P6d^7;yI#HX<2TlUv0L1SVB{~;zRxCn2!zoxDsb_`wSDD-RXY)1 z`w^1X*bu!5*-1|FiUqp^sVL2hSk+}!RKfpOBxIa>e+fdtZxbsJu6hS@KkP1)l0%;3 T{b4K)u0a1WScnyg?Z?e0$gG72 literal 0 HcmV?d00001 diff --git a/tools/msg_template.json b/tools/msg_template.json index 4e45dae..8dfbd3b 100644 --- a/tools/msg_template.json +++ b/tools/msg_template.json @@ -23,7 +23,7 @@ { "name": "NeighborBlock", "type": "Multiple", - "count": "4", + "count": 4, "params": [ { "name": "Test0", @@ -235,7 +235,7 @@ { "name": "NeighborBlock", "type": "Multiple", - "count": "4", + "count": 4, "params": [ { "name": "IP", @@ -265,7 +265,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "SimAccess", @@ -320,7 +320,7 @@ { "name": "HostName", "type": "Variable", - "size": "1" + "size": 1 } ] }, @@ -431,7 +431,7 @@ { "name": "SimName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "SimAccess", @@ -501,7 +501,7 @@ { "name": "ObjectName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "TelehubPos", @@ -568,7 +568,7 @@ { "name": "NeighborBlock", "type": "Multiple", - "count": "4", + "count": 4, "params": [ { "name": "IP", @@ -590,7 +590,7 @@ { "name": "SimName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "SimAccess", @@ -796,7 +796,7 @@ { "name": "Message", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -824,7 +824,7 @@ { "name": "SimName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "EstateID", @@ -872,7 +872,7 @@ { "name": "SimName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "RegionX", @@ -915,7 +915,7 @@ { "name": "ErrorMessage", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "AgentID", @@ -1081,7 +1081,7 @@ { "name": "AbuseRegionName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "AbuseRegionID", @@ -1091,17 +1091,17 @@ { "name": "Summary", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Details", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "VersionString", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -1129,7 +1129,7 @@ { "name": "HostName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "X", @@ -1159,7 +1159,7 @@ { "name": "Status", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -1187,7 +1187,7 @@ { "name": "HostName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "GridX", @@ -1217,7 +1217,7 @@ { "name": "Status", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -1375,7 +1375,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -1425,7 +1425,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -1470,12 +1470,12 @@ { "name": "FirstName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "LastName", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -1532,7 +1532,7 @@ { "name": "QueryText", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "QueryFlags", @@ -1547,7 +1547,7 @@ { "name": "SimName", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -1605,12 +1605,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Desc", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ActualArea", @@ -1645,7 +1645,7 @@ { "name": "SimName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "SnapshotID", @@ -1705,7 +1705,7 @@ { "name": "QueryText", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "QueryFlags", @@ -1755,7 +1755,7 @@ { "name": "QueryText", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "QueryFlags", @@ -1820,7 +1820,7 @@ { "name": "QueryText", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "QueryFlags", @@ -1835,7 +1835,7 @@ { "name": "SimName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "QueryStart", @@ -1880,7 +1880,7 @@ { "name": "QueryText", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "QueryFlags", @@ -1895,7 +1895,7 @@ { "name": "SimName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "EstateID", @@ -1962,7 +1962,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ForSale", @@ -2041,17 +2041,17 @@ { "name": "FirstName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "LastName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Group", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Online", @@ -2113,7 +2113,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "EventID", @@ -2123,7 +2123,7 @@ { "name": "Date", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "UnixTime", @@ -2197,7 +2197,7 @@ { "name": "GroupName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Members", @@ -2252,7 +2252,7 @@ { "name": "QueryText", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "QueryFlags", @@ -2307,7 +2307,7 @@ { "name": "QueryText", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "QueryFlags", @@ -2384,7 +2384,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ClassifiedFlags", @@ -2461,7 +2461,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -2561,12 +2561,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Desc", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "ParcelID", @@ -2586,7 +2586,7 @@ { "name": "SimName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "PosGlobal", @@ -2596,7 +2596,7 @@ { "name": "ParcelName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ClassifiedFlags", @@ -2656,12 +2656,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Desc", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "ParcelID", @@ -2964,7 +2964,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Auction", @@ -3134,7 +3134,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Dwell", @@ -3224,12 +3224,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Desc", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ActualArea", @@ -3264,7 +3264,7 @@ { "name": "SimName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "SnapshotID", @@ -3453,12 +3453,12 @@ { "name": "FromName", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "Subject", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "HasAttachment", @@ -3558,17 +3558,17 @@ { "name": "FromAgentName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Message", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "BinaryBucket", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -3784,7 +3784,7 @@ { "name": "Message", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -3911,7 +3911,7 @@ { "name": "SeedCapability", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "SimAccess", @@ -3966,7 +3966,7 @@ { "name": "Message", "type": "Variable", - "size": "1" + "size": 1 } ] }, @@ -4095,7 +4095,7 @@ { "name": "Reason", "type": "Variable", - "size": "1" + "size": 1 } ] }, @@ -4107,12 +4107,12 @@ { "name": "Message", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ExtraParams", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -4414,7 +4414,7 @@ { "name": "Message", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "Type", @@ -4474,7 +4474,7 @@ { "name": "Throttles", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -4646,7 +4646,7 @@ { "name": "TextureEntry", "type": "Variable", - "size": "2" + "size": 2 } ] }, @@ -4715,7 +4715,7 @@ { "name": "TypeData", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -5394,7 +5394,7 @@ { "name": "Data", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -5751,12 +5751,12 @@ { "name": "MediaURL", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "TextureEntry", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -5991,7 +5991,7 @@ { "name": "ParamData", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -6398,7 +6398,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -6443,7 +6443,7 @@ { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -7394,7 +7394,7 @@ { "name": "Filename", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -7636,17 +7636,17 @@ { "name": "SysOS", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "SysCPU", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "SysGPU", "type": "Variable", - "size": "1" + "size": 1 } ] }, @@ -7675,7 +7675,7 @@ { "name": "NetStats", "type": "Multiple", - "count": "2", + "count": 2, "params": [ { "name": "Bytes", @@ -7874,7 +7874,7 @@ { "name": "AbuseRegionName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "AbuseRegionID", @@ -7884,17 +7884,17 @@ { "name": "Summary", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Details", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "VersionString", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -7917,7 +7917,7 @@ { "name": "Message", "type": "Variable", - "size": "1" + "size": 1 } ] }, @@ -7929,12 +7929,12 @@ { "name": "Message", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ExtraParams", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -7974,7 +7974,7 @@ { "name": "Message", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -8086,7 +8086,7 @@ { "name": "FromName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "SourceID", @@ -8121,7 +8121,7 @@ { "name": "Message", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -8268,7 +8268,7 @@ { "name": "SimName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "EstateID", @@ -8355,12 +8355,12 @@ { "name": "ProductSKU", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ProductName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "MaxAgents32", @@ -8469,7 +8469,7 @@ { "name": "SimName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "EstateID", @@ -8641,7 +8641,7 @@ { "name": "SimName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "SimOwner", @@ -8780,17 +8780,17 @@ { "name": "ColoName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ProductSKU", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ProductName", "type": "Variable", - "size": "1" + "size": 1 } ] }, @@ -8959,7 +8959,7 @@ { "name": "Data", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -8999,7 +8999,7 @@ { "name": "Data", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -9034,7 +9034,7 @@ { "name": "Data", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -9114,7 +9114,7 @@ { "name": "ObjectData", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ParentID", @@ -9219,47 +9219,47 @@ { "name": "TextureEntry", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "TextureAnim", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "NameValue", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "Data", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "Text", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "TextColor", "type": "Fixed", - "size": "4" + "size": 4 }, { "name": "MediaURL", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "PSBlock", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ExtraParams", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Sound", @@ -9344,7 +9344,7 @@ { "name": "Data", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -9434,12 +9434,12 @@ { "name": "Data", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "TextureEntry", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -9518,7 +9518,7 @@ { "name": "SeedCapability", "type": "Variable", - "size": "2" + "size": 2 } ] }, @@ -9698,7 +9698,7 @@ { "name": "Params", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -9746,7 +9746,7 @@ { "name": "Params", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -9789,7 +9789,7 @@ { "name": "Data", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -9845,7 +9845,7 @@ { "name": "Filename", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "FilePath", @@ -9910,7 +9910,7 @@ { "name": "Data", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -10030,7 +10030,7 @@ { "name": "TypeData", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -10070,7 +10070,7 @@ { "name": "TextureEntry", "type": "Variable", - "size": "2" + "size": 2 } ] }, @@ -10395,27 +10395,27 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "TouchName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "SitName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "TextureID", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -10508,12 +10508,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -10626,7 +10626,7 @@ { "name": "Reason", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -10697,7 +10697,7 @@ { "name": "Reason", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -10936,27 +10936,27 @@ { "name": "AboutText", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "FLAboutText", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "BornOn", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ProfileURL", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "CharterMember", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Flags", @@ -11006,7 +11006,7 @@ { "name": "WantToText", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "SkillsMask", @@ -11016,12 +11016,12 @@ { "name": "SkillsText", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "LanguagesText", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -11071,7 +11071,7 @@ { "name": "GroupTitle", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "GroupID", @@ -11081,7 +11081,7 @@ { "name": "GroupName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "GroupInsigniaID", @@ -11148,12 +11148,12 @@ { "name": "AboutText", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "FLAboutText", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "AllowPublish", @@ -11168,7 +11168,7 @@ { "name": "ProfileURL", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -11213,7 +11213,7 @@ { "name": "WantToText", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "SkillsMask", @@ -11223,12 +11223,12 @@ { "name": "SkillsText", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "LanguagesText", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -11268,7 +11268,7 @@ { "name": "Notes", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -11313,7 +11313,7 @@ { "name": "Notes", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -11358,7 +11358,7 @@ { "name": "PickName", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -11438,27 +11438,27 @@ { "name": "Creator", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Category", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Desc", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "Date", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "DateUTC", @@ -11483,7 +11483,7 @@ { "name": "SimName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "GlobalPos", @@ -11630,7 +11630,7 @@ { "name": "QueryText", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "QueryFlags", @@ -11695,12 +11695,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Desc", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "SnapshotID", @@ -11710,17 +11710,17 @@ { "name": "User", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "OriginalName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "SimName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "PosGlobal", @@ -11795,12 +11795,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Desc", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "SnapshotID", @@ -11938,12 +11938,12 @@ { "name": "ObjectName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ObjectOwner", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Questions", @@ -12021,22 +12021,22 @@ { "name": "FirstName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "LastName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ObjectName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Message", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "ChatChannel", @@ -12058,7 +12058,7 @@ { "name": "ButtonLabel", "type": "Variable", - "size": "1" + "size": 1 } ] }, @@ -12125,7 +12125,7 @@ { "name": "ButtonLabel", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -12221,7 +12221,7 @@ { "name": "ObjectName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ObjectID", @@ -12241,12 +12241,12 @@ { "name": "Message", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "URL", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -12269,12 +12269,12 @@ { "name": "ObjectName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "SimName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "SimPosition", @@ -12312,7 +12312,7 @@ { "name": "Data", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -12520,7 +12520,7 @@ { "name": "Bitmap", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "Area", @@ -12595,22 +12595,22 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Desc", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "MusicURL", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "MediaURL", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "MediaID", @@ -12786,22 +12786,22 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Desc", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "MusicURL", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "MediaURL", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "MediaID", @@ -13157,7 +13157,7 @@ { "name": "EstateName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "EstateOwnerID", @@ -14096,17 +14096,17 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "MusicURL", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "RegionX", @@ -14482,7 +14482,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -14658,12 +14658,12 @@ { "name": "FirstName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "LastName", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -14714,7 +14714,7 @@ { "name": "GroupName", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -14757,7 +14757,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "SourceType", @@ -14782,7 +14782,7 @@ { "name": "Message", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -14815,7 +14815,7 @@ { "name": "LayerData", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -14936,7 +14936,7 @@ { "name": "Throttles", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "LocomotionState", @@ -14986,7 +14986,7 @@ { "name": "AgentTextures", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "ActiveGroupID", @@ -15054,7 +15054,7 @@ { "name": "NVPairs", "type": "Variable", - "size": "2" + "size": 2 } ] }, @@ -15523,7 +15523,7 @@ { "name": "SearchName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Type", @@ -15613,7 +15613,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Type", @@ -15723,7 +15723,7 @@ { "name": "ChannelVersion", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -15914,17 +15914,17 @@ { "name": "FromAgentName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Message", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "BinaryBucket", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -16137,7 +16137,7 @@ { "name": "Method", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Invoice", @@ -16154,7 +16154,7 @@ { "name": "Parameter", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -16199,7 +16199,7 @@ { "name": "Method", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Invoice", @@ -16216,7 +16216,7 @@ { "name": "Parameter", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -16261,7 +16261,7 @@ { "name": "Method", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Invoice", @@ -16278,7 +16278,7 @@ { "name": "Parameter", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -16313,7 +16313,7 @@ { "name": "Data", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -16359,7 +16359,7 @@ { "name": "Method", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Invoice", @@ -16376,7 +16376,7 @@ { "name": "Parameter", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -16461,7 +16461,7 @@ { "name": "MuteName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "MuteType", @@ -16516,7 +16516,7 @@ { "name": "MuteName", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -16714,12 +16714,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "CreationDate", @@ -16864,12 +16864,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "CreationDate", @@ -16934,7 +16934,7 @@ { "name": "NewName", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -16994,7 +16994,7 @@ { "name": "NewName", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -17174,7 +17174,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -17229,7 +17229,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -17449,7 +17449,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 } ] }, @@ -17546,12 +17546,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "CreationDate", @@ -17726,12 +17726,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "CreationDate", @@ -17796,7 +17796,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 } ] }, @@ -17898,12 +17898,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "CreationDate", @@ -18218,12 +18218,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "CreationDate", @@ -18401,7 +18401,7 @@ { "name": "Filename", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -18703,12 +18703,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "CreationDate", @@ -19369,12 +19369,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "CreationDate", @@ -19459,12 +19459,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -19521,7 +19521,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -19727,7 +19727,7 @@ { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -19810,7 +19810,7 @@ { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -19903,7 +19903,7 @@ { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 } ] }, @@ -19945,7 +19945,7 @@ { "name": "ItemDescription", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -20015,7 +20015,7 @@ { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 } ] }, @@ -20057,7 +20057,7 @@ { "name": "ItemDescription", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -20190,7 +20190,7 @@ { "name": "Filename", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -20384,7 +20384,7 @@ { "name": "SimName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "LocationID", @@ -20568,7 +20568,7 @@ { "name": "NVPair", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -20603,7 +20603,7 @@ { "name": "NVPair", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -20757,12 +20757,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "CreationDate", @@ -21057,7 +21057,7 @@ { "name": "AssetData", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -21118,12 +21118,12 @@ { "name": "FromAddress", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Subject", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -21161,22 +21161,22 @@ { "name": "FromAddress", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Subject", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Data", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "MailFilter", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -21199,7 +21199,7 @@ { "name": "From", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "To", @@ -21209,12 +21209,12 @@ { "name": "Subject", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Body", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -21247,7 +21247,7 @@ { "name": "Request", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -21275,7 +21275,7 @@ { "name": "Reply", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -21315,12 +21315,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Charter", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "ShowInList", @@ -21395,7 +21395,7 @@ { "name": "Message", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -21440,7 +21440,7 @@ { "name": "Charter", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "ShowInList", @@ -21964,12 +21964,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Charter", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "ShowInList", @@ -21979,7 +21979,7 @@ { "name": "MemberTitle", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "PowersMask", @@ -22144,7 +22144,7 @@ { "name": "StartDate", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Balance", @@ -22219,12 +22219,12 @@ { "name": "LastTaxDate", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "TaxDate", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -22334,7 +22334,7 @@ { "name": "StartDate", "type": "Variable", - "size": "1" + "size": 1 } ] }, @@ -22346,7 +22346,7 @@ { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Amount", @@ -22461,7 +22461,7 @@ { "name": "StartDate", "type": "Variable", - "size": "1" + "size": 1 } ] }, @@ -22473,12 +22473,12 @@ { "name": "Time", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "User", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Type", @@ -22488,7 +22488,7 @@ { "name": "Item", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Amount", @@ -22612,17 +22612,17 @@ { "name": "TerseDateID", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "StartDateTime", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "EndDateTime", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "AlreadyVoted", @@ -22632,7 +22632,7 @@ { "name": "VoteCast", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Majority", @@ -22647,7 +22647,7 @@ { "name": "ProposalText", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -22761,17 +22761,17 @@ { "name": "TerseDateID", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "StartDateTime", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "EndDateTime", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "VoteInitiator", @@ -22781,12 +22781,12 @@ { "name": "VoteType", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "VoteResult", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Majority", @@ -22801,7 +22801,7 @@ { "name": "ProposalText", "type": "Variable", - "size": "2" + "size": 2 } ] }, @@ -22818,7 +22818,7 @@ { "name": "VoteCast", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "NumVotes", @@ -22884,7 +22884,7 @@ { "name": "ProposalText", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -22935,7 +22935,7 @@ { "name": "VoteCast", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -23057,7 +23057,7 @@ { "name": "OnlineStatus", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "AgentPowers", @@ -23067,7 +23067,7 @@ { "name": "Title", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "IsOwner", @@ -23314,17 +23314,17 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Title", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Powers", @@ -23517,7 +23517,7 @@ { "name": "Title", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "RoleID", @@ -23615,17 +23615,17 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Title", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Powers", @@ -23696,7 +23696,7 @@ { "name": "Selection", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -23929,7 +23929,7 @@ { "name": "HostName", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -23985,17 +23985,17 @@ { "name": "FirstName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "LastName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "GroupTitle", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ActiveGroupID", @@ -24010,7 +24010,7 @@ { "name": "GroupName", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -24048,7 +24048,7 @@ { "name": "GroupTitle", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -24109,7 +24109,7 @@ { "name": "GroupName", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -24186,7 +24186,7 @@ { "name": "Message", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -24246,12 +24246,12 @@ { "name": "Color", "type": "Fixed", - "size": "4" + "size": 4 }, { "name": "TypeData", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -24279,7 +24279,7 @@ { "name": "Digest", "type": "Fixed", - "size": "32" + "size": 32 } ] } @@ -24387,12 +24387,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -24489,12 +24489,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -24647,12 +24647,12 @@ { "name": "DirectoryVisibility", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "EMail", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -24697,7 +24697,7 @@ { "name": "DirectoryVisibility", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -24725,7 +24725,7 @@ { "name": "NewName", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -24760,12 +24760,12 @@ { "name": "SimFilename", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ViewerFilename", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -24788,7 +24788,7 @@ { "name": "Method", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Invoice", @@ -24798,7 +24798,7 @@ { "name": "Digest", "type": "Fixed", - "size": "32" + "size": 32 } ] }, @@ -24810,7 +24810,7 @@ { "name": "Parameter", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -25038,7 +25038,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -25088,7 +25088,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Access", @@ -25250,7 +25250,7 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -25293,27 +25293,27 @@ { "name": "To", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "From", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Subject", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Msg", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "AllowPublish", @@ -25454,7 +25454,7 @@ { "name": "StringValue", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -25508,7 +25508,7 @@ { "name": "StringValue", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -25551,7 +25551,7 @@ { "name": "StringValue", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -25574,7 +25574,7 @@ { "name": "TargetIP", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "TargetPort", @@ -25645,7 +25645,7 @@ { "name": "MediaURL", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "MediaID", @@ -25667,12 +25667,12 @@ { "name": "MediaType", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "MediaDesc", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "MediaWidth", @@ -25737,7 +25737,7 @@ { "name": "Filter", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ParcelLocalID", @@ -25818,12 +25818,12 @@ { "name": "TaskName", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "OwnerName", "type": "Variable", - "size": "1" + "size": 1 } ] } @@ -25863,7 +25863,7 @@ { "name": "Token", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "ID", @@ -25873,17 +25873,17 @@ { "name": "System", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Message", "type": "Variable", - "size": "2" + "size": 2 }, { "name": "Data", "type": "Variable", - "size": "2" + "size": 2 } ] } @@ -26054,12 +26054,12 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "CreationDate", @@ -26139,15 +26139,15 @@ { "name": "Name", "type": "Variable", - "size": "1" + "size": 1 }, { "name": "Description", "type": "Variable", - "size": "1" + "size": 1 } ] } ] } -] \ No newline at end of file +]