Expose room, user and furni metadata for wired tools

- parse extra room snapshot data such as hotel time, room item limit and group context

- expose richer furni metadata including flags, dimensions and teleport targets

- expose richer user metadata including room-entry fields and ids needed by inspection tools

- keep session and room engine models aligned with the new wired monitor/inspection flow
This commit is contained in:
Lorenzune
2026-03-27 09:37:14 +01:00
parent 0b834e3b93
commit 99c4acea38
21 changed files with 386 additions and 22 deletions
@@ -24,6 +24,7 @@ export class FurnitureData implements IFurnitureData
private _purchaseCouldBeUsedForBuyout: boolean;
private _rentCouldBeUsedForBuyout: boolean;
private _availableForBuildersClub: boolean;
private _allowStack: boolean;
private _canStandOn: boolean;
private _canSitOn: boolean;
private _canLayOn: boolean;
@@ -32,7 +33,7 @@ export class FurnitureData implements IFurnitureData
private _environment: string;
private _rare: boolean;
constructor(type: FurnitureType, id: number, fullName: string, className: string, category: string, localizedName: string, description: string, revision: number, tileSizeX: number, tileSizeY: number, tileSizeZ: number, colors: number[], hadIndexedColor: boolean, colorIndex: number, adUrl: string, purchaseOfferId: number, purchaseCouldBeUsedForBuyout: boolean, rentOfferId: number, rentCouldBeUsedForBuyout: boolean, availableForBuildersClub: boolean, customParams: string, specialType: number, canStandOn: boolean, canSitOn: boolean, canLayOn: boolean, excludedfromDynamic: boolean, furniLine: string, environment: string, rare: boolean)
constructor(type: FurnitureType, id: number, fullName: string, className: string, category: string, localizedName: string, description: string, revision: number, tileSizeX: number, tileSizeY: number, tileSizeZ: number, colors: number[], hadIndexedColor: boolean, colorIndex: number, adUrl: string, purchaseOfferId: number, purchaseCouldBeUsedForBuyout: boolean, rentOfferId: number, rentCouldBeUsedForBuyout: boolean, availableForBuildersClub: boolean, customParams: string, specialType: number, allowStack: boolean, canStandOn: boolean, canSitOn: boolean, canLayOn: boolean, excludedfromDynamic: boolean, furniLine: string, environment: string, rare: boolean)
{
this._type = type;
this._id = id;
@@ -56,6 +57,7 @@ export class FurnitureData implements IFurnitureData
this._customParams = customParams;
this._specialType = specialType;
this._availableForBuildersClub = availableForBuildersClub;
this._allowStack = allowStack;
this._canStandOn = canStandOn;
this._canSitOn = canSitOn;
this._canLayOn = canLayOn;
@@ -180,6 +182,11 @@ export class FurnitureData implements IFurnitureData
return this._availableForBuildersClub;
}
public get allowStack(): boolean
{
return this._allowStack;
}
public get canStandOn(): boolean
{
return this._canStandOn;
@@ -82,8 +82,9 @@ export class FurnitureDataLoader
const className = classSplit[0];
const colorIndex = ((classSplit.length > 1) ? parseInt(classSplit[1]) : 0);
const hasColorIndex = (classSplit.length > 1);
const allowStack = this.resolveBooleanFlag(furniture.allowstack, furniture.allow_stack, furniture.allowStack);
const furnitureData = new FurnitureData(FurnitureType.FLOOR, furniture.id, furniture.classname, className, furniture.category, furniture.name, furniture.description, furniture.revision, furniture.xdim, furniture.ydim, 0, colors, hasColorIndex, colorIndex, furniture.adurl, furniture.offerid, furniture.buyout, furniture.rentofferid, furniture.rentbuyout, furniture.bc, furniture.customparams, furniture.specialtype, furniture.canstandon, furniture.cansiton, furniture.canlayon, furniture.excludeddynamic, furniture.furniline, furniture.environment, furniture.rare);
const furnitureData = new FurnitureData(FurnitureType.FLOOR, furniture.id, furniture.classname, className, furniture.category, furniture.name, furniture.description, furniture.revision, furniture.xdim, furniture.ydim, 0, colors, hasColorIndex, colorIndex, furniture.adurl, furniture.offerid, furniture.buyout, furniture.rentofferid, furniture.rentbuyout, furniture.bc, furniture.customparams, furniture.specialtype, allowStack, furniture.canstandon, furniture.cansiton, furniture.canlayon, furniture.excludeddynamic, furniture.furniline, furniture.environment, furniture.rare);
this._floorItems.set(furnitureData.id, furnitureData);
@@ -99,7 +100,8 @@ export class FurnitureDataLoader
{
if(!furniture) continue;
const furnitureData = new FurnitureData(FurnitureType.WALL, furniture.id, furniture.classname, furniture.classname, furniture.category, furniture.name, furniture.description, furniture.revision, 0, 0, 0, null, false, 0, furniture.adurl, furniture.offerid, furniture.buyout, furniture.rentofferid, furniture.rentbuyout, furniture.bc, null, furniture.specialtype, false, false, false, furniture.excludeddynamic, furniture.furniline, furniture.environment, furniture.rare);
const allowStack = this.resolveBooleanFlag(furniture.allowstack, furniture.allow_stack, furniture.allowStack);
const furnitureData = new FurnitureData(FurnitureType.WALL, furniture.id, furniture.classname, furniture.classname, furniture.category, furniture.name, furniture.description, furniture.revision, 0, 0, 0, null, false, 0, furniture.adurl, furniture.offerid, furniture.buyout, furniture.rentofferid, furniture.rentbuyout, furniture.bc, null, furniture.specialtype, allowStack, false, false, false, furniture.excludeddynamic, furniture.furniline, furniture.environment, furniture.rare);
this._wallItems.set(furnitureData.id, furnitureData);
@@ -121,4 +123,26 @@ export class FurnitureDataLoader
return;
}
}
private resolveBooleanFlag(...values: any[]): boolean
{
for(const value of values)
{
if(value === undefined || value === null) continue;
if(typeof value === 'string')
{
const normalized = value.trim().toLowerCase();
if(!normalized.length) continue;
if([ '1', 'true', 'yes' ].includes(normalized)) return true;
if([ '0', 'false', 'no' ].includes(normalized)) return false;
}
return !!value;
}
return false;
}
}