You've already forked Nitro_Render_V3
mirror of
https://github.com/duckietm/Nitro_Render_V3.git
synced 2026-06-19 15:06:20 +00:00
Merge pull request #90 from medievalshell/feat/live-furnidata-reload
feat(session): live furnidata reload via mergeFurnitureDataFromUrl + feat(mentions) improved
This commit is contained in:
@@ -9,6 +9,7 @@ export interface ISessionDataManager
|
|||||||
{
|
{
|
||||||
init(): Promise<void>;
|
init(): Promise<void>;
|
||||||
getAllFurnitureData(): IFurnitureData[];
|
getAllFurnitureData(): IFurnitureData[];
|
||||||
|
mergeFurnitureDataFromUrl(url: string): Promise<IFurnitureData[]>;
|
||||||
applyFurnitureDataOverrides(url: string): Promise<void>;
|
applyFurnitureDataOverrides(url: string): Promise<void>;
|
||||||
clearFurnitureDataOverrides(): void;
|
clearFurnitureDataOverrides(): void;
|
||||||
getFloorItemData(id: number): IFurnitureData;
|
getFloorItemData(id: number): IFurnitureData;
|
||||||
|
|||||||
@@ -224,6 +224,21 @@ export class SessionDataManager implements ISessionDataManager
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mergia a runtime un chunk furnidata (es. custom/imported.json5) nelle Map
|
||||||
|
// esistenti, SENZA reload del client. Ritorna gli entry aggiunti cosi il
|
||||||
|
// chiamante puo' aggiornare anche il RoomContentLoader. Fa comparire i furni
|
||||||
|
// appena importati nel catalogo in tempo reale.
|
||||||
|
public async mergeFurnitureDataFromUrl(url: string): Promise<IFurnitureData[]>
|
||||||
|
{
|
||||||
|
if(!url || !url.length) return [];
|
||||||
|
|
||||||
|
const added = await this._furnitureData.mergeFromUrl(url);
|
||||||
|
|
||||||
|
if(added && added.length) GetEventDispatcher().dispatchEvent(new NitroEvent(NitroEventType.SESSION_DATA_UPDATED));
|
||||||
|
|
||||||
|
return added;
|
||||||
|
}
|
||||||
|
|
||||||
public async applyFurnitureDataOverrides(url: string): Promise<void>
|
public async applyFurnitureDataOverrides(url: string): Promise<void>
|
||||||
{
|
{
|
||||||
if(!url || !url.length)
|
if(!url || !url.length)
|
||||||
|
|||||||
@@ -37,9 +37,38 @@ export class FurnitureDataLoader
|
|||||||
if(responseData.wallitemtypes) this.parseWallItems(responseData.wallitemtypes);
|
if(responseData.wallitemtypes) this.parseWallItems(responseData.wallitemtypes);
|
||||||
}
|
}
|
||||||
|
|
||||||
private parseFloorItems(data: any): void
|
// Ri-carica un singolo chunk furnidata (es. custom/imported.json5) e
|
||||||
|
// mergia i suoi entry nelle Map esistenti. Ritorna gli entry aggiunti/aggiornati
|
||||||
|
// cosi il chiamante puo' aggiornare anche il RoomContentLoader senza reload.
|
||||||
|
public async mergeFromUrl(url: string): Promise<IFurnitureData[]>
|
||||||
{
|
{
|
||||||
if(!data || !data.furnitype) return;
|
if(!url || !url.length) return [];
|
||||||
|
|
||||||
|
let responseData: any;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
responseData = await loadGamedata(url);
|
||||||
|
}
|
||||||
|
catch(err)
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
const added: IFurnitureData[] = [];
|
||||||
|
|
||||||
|
if(responseData.roomitemtypes) added.push(...this.parseFloorItems(responseData.roomitemtypes));
|
||||||
|
|
||||||
|
if(responseData.wallitemtypes) added.push(...this.parseWallItems(responseData.wallitemtypes));
|
||||||
|
|
||||||
|
return added;
|
||||||
|
}
|
||||||
|
|
||||||
|
private parseFloorItems(data: any): IFurnitureData[]
|
||||||
|
{
|
||||||
|
const added: IFurnitureData[] = [];
|
||||||
|
|
||||||
|
if(!data || !data.furnitype) return added;
|
||||||
|
|
||||||
for(const furniture of data.furnitype)
|
for(const furniture of data.furnitype)
|
||||||
{
|
{
|
||||||
@@ -76,13 +105,19 @@ export class FurnitureDataLoader
|
|||||||
|
|
||||||
this._floorItems.set(furnitureData.id, furnitureData);
|
this._floorItems.set(furnitureData.id, furnitureData);
|
||||||
|
|
||||||
|
added.push(furnitureData);
|
||||||
|
|
||||||
this.updateLocalizations(furnitureData);
|
this.updateLocalizations(furnitureData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return added;
|
||||||
}
|
}
|
||||||
|
|
||||||
private parseWallItems(data: any): void
|
private parseWallItems(data: any): IFurnitureData[]
|
||||||
{
|
{
|
||||||
if(!data || !data.furnitype) return;
|
const added: IFurnitureData[] = [];
|
||||||
|
|
||||||
|
if(!data || !data.furnitype) return added;
|
||||||
|
|
||||||
for(const furniture of data.furnitype)
|
for(const furniture of data.furnitype)
|
||||||
{
|
{
|
||||||
@@ -93,8 +128,12 @@ export class FurnitureDataLoader
|
|||||||
|
|
||||||
this._wallItems.set(furnitureData.id, furnitureData);
|
this._wallItems.set(furnitureData.id, furnitureData);
|
||||||
|
|
||||||
|
added.push(furnitureData);
|
||||||
|
|
||||||
this.updateLocalizations(furnitureData);
|
this.updateLocalizations(furnitureData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return added;
|
||||||
}
|
}
|
||||||
|
|
||||||
private updateLocalizations(furniture: FurnitureData): void
|
private updateLocalizations(furniture: FurnitureData): void
|
||||||
|
|||||||
Reference in New Issue
Block a user