feat: 提交资源

This commit is contained in:
han_han9
2025-10-28 21:55:41 +08:00
parent 591f398085
commit 55c4fcd9ae
2146 changed files with 172747 additions and 456 deletions

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "f7c4440c-c8da-402d-b2fb-9e8608fa3dca",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "c20136b0-1489-4c36-b935-aecc9c99eaa9",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,9 @@
/**
* 自动生成的Bean类型定义
* 请勿手动修改此文件
* 生成时间: 2025-10-13T13:51:42.231Z
*/
import { ConfigParseUtils } from "./ConfigParseUtils";
// 没有找到Bean定义

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "793d74d0-b0fc-446a-a36e-7ea0476da99a",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,257 @@
import { Vec2, Vec3, Vec4, Color, Size, Rect, Quat, Mat4 } from 'cc';
import LogUtils from '@max-studio/core/utils/LogUtils';
/**
* 配置表解析工具类
* 提供通用的数据类型解析函数
*
* ⚠️ 此文件由配置表生成器自动生成,请勿手动修改!
* 如需修改,请编辑 configs/plugins/ConfigTableGenerator.ts 中的 generateConfigParseUtils 方法
*/
export class ConfigParseUtils {
/**
* 解析Vec2类型
*/
public static parseVec2(value: any): Vec2 {
if (typeof value === 'string') {
const parts = value.split(',').map(v => Number.parseFloat(v.trim()) || 0);
return new Vec2(parts[0] || 0, parts[1] || 0);
}
return new Vec2(0, 0);
}
/**
* 解析Vec3类型
*/
public static parseVec3(value: any): Vec3 {
if (typeof value === 'string') {
const parts = value.split(',').map(v => Number.parseFloat(v.trim()) || 0);
return new Vec3(parts[0] || 0, parts[1] || 0, parts[2] || 0);
}
return new Vec3(0, 0, 0);
}
/**
* 解析Vec4类型
*/
public static parseVec4(value: any): Vec4 {
if (typeof value === 'string') {
const parts = value.split(',').map(v => Number.parseFloat(v.trim()) || 0);
return new Vec4(parts[0] || 0, parts[1] || 0, parts[2] || 0, parts[3] || 0);
}
return new Vec4(0, 0, 0, 0);
}
/**
* 解析Color类型
*/
public static parseColor(value: any): Color {
if (typeof value === 'string') {
if (value.startsWith('#')) {
// 十六进制颜色
const hex = value.slice(1);
const r = Number.parseInt(hex.substring(0, 2), 16);
const g = Number.parseInt(hex.substring(2, 4), 16);
const b = Number.parseInt(hex.substring(4, 6), 16);
const a = hex.length > 6 ? Number.parseInt(hex.substring(6, 8), 16) : 255;
return new Color(r, g, b, a);
} else {
// 逗号分隔的RGBA值
const parts = value.split(',').map(v => Number.parseFloat(v.trim()) || 0);
return new Color(parts[0] || 0, parts[1] || 0, parts[2] || 0, parts[3] !== undefined ? parts[3] : 255);
}
}
return new Color(0, 0, 0, 255);
}
/**
* 解析Size类型
*/
public static parseSize(value: any): Size {
if (typeof value === 'string') {
const parts = value.split(',').map(v => Number.parseFloat(v.trim()) || 0);
return new Size(parts[0] || 0, parts[1] || 0);
}
return new Size(0, 0);
}
/**
* 解析Rect类型
*/
public static parseRect(value: any): Rect {
if (typeof value === 'string') {
const parts = value.split(',').map(v => Number.parseFloat(v.trim()) || 0);
return new Rect(parts[0] || 0, parts[1] || 0, parts[2] || 0, parts[3] || 0);
}
return new Rect(0, 0, 0, 0);
}
/**
* 解析Quat类型
*/
public static parseQuat(value: any): Quat {
if (typeof value === 'string') {
const parts = value.split(',').map(v => Number.parseFloat(v.trim()) || 0);
return new Quat(parts[0] || 0, parts[1] || 0, parts[2] || 0, parts[3] !== undefined ? parts[3] : 1);
}
return new Quat(0, 0, 0, 1);
}
/**
* 解析Mat4类型
*/
public static parseMat4(value: any): Mat4 {
if (typeof value === 'string') {
const parts = value.split(',').map(v => Number.parseFloat(v.trim()) || 0);
const mat = new Mat4();
try {
mat.set(
parts[0], parts[1], parts[2], parts[3],
parts[4], parts[5], parts[6], parts[7],
parts[8], parts[9], parts[10], parts[11],
parts[12], parts[13], parts[14], parts[15]
);
} catch (err) {
LogUtils.error('ConfigParseUtils', '解析Mat4失败:', err);
}
return mat;
}
return new Mat4();
}
/**
* 解析布尔值
*/
static parseBoolean(value: any): boolean {
if (typeof value === 'boolean') {
return value;
}
if (typeof value === 'string') {
const lowerValue = value.toLowerCase();
return lowerValue === 'true' || lowerValue === '1' || lowerValue === 'yes';
}
if (typeof value === 'number') {
return value !== 0;
}
return false;
}
/**
* 解析整数
*/
public static parseInt(value: string | number): number {
if (typeof value === 'number') return Math.floor(value);
if (typeof value === 'string') return Number.parseInt(value.trim()) || 0;
return 0;
}
/**
* 解析浮点数
*/
static parseFloat(value: any): number {
return Number.parseFloat(value) || 0;
}
/**
* 解析字符串
*/
static parseString(value: any): string {
return String(value || '');
}
/**
* 解析字符串数组
*/
static parseStringArray(value: any): string[] {
if (Array.isArray(value)) {
return value.map(item => String(item || ''));
}
if (typeof value === 'string') {
return value.split(',').map(item => item.trim()).filter(item => item.length > 0);
}
return [];
}
/**
* 解析数字数组
*/
static parseNumberArray(value: any): number[] {
if (Array.isArray(value)) {
return value.map(item => Number.parseFloat(item) || 0);
}
if (typeof value === 'string') {
return value.split(',').map(item => Number.parseFloat(item.trim()) || 0);
}
return [];
}
/**
* 深度冻结对象,确保所有嵌套属性都不可修改
*/
public static deepFreeze<T>(obj: T): T {
if (obj === null || typeof obj !== 'object') {
return obj;
}
// 检查是否为 ArrayBuffer views 或其他不可冻结的对象
if (ArrayBuffer.isView(obj) || obj instanceof ArrayBuffer) {
return obj;
}
// 检查是否为 Date、RegExp 等内置对象
if (obj instanceof Date || obj instanceof RegExp) {
return obj;
}
try {
// 递归冻结所有属性(先冻结子对象)
Object.getOwnPropertyNames(obj).forEach(prop => {
const value = (obj as any)[prop];
if (value !== null && typeof value === 'object') {
this.deepFreeze(value);
}
});
// 最后冻结对象本身
Object.freeze(obj);
// 对于数组,还需要防止索引赋值
if (Array.isArray(obj)) {
Object.seal(obj);
}
} catch (err) {
// 如果冻结失败,记录警告但不中断程序
LogUtils.warn('ConfigParseUtils', '无法冻结对象:', obj, err);
}
return obj;
}
/**
* 创建配置数据的只读代理,提供更好的错误提示
*/
public static createReadonlyProxy<T extends object>(obj: T, configName: string = '配置数据'): T {
return new Proxy(obj, {
set(target, property, value) {
const errorMsg = `❌ 禁止修改${configName}的属性 "${String(property)}"!配置数据在运行时应保持不可变。`;
LogUtils.error('ConfigParseUtils', errorMsg);
throw new Error(errorMsg);
},
defineProperty(target, property, descriptor) {
const errorMsg = `❌ 禁止定义${configName}的属性 "${String(property)}"!配置数据在运行时应保持不可变。`;
LogUtils.error('ConfigParseUtils', errorMsg);
throw new Error(errorMsg);
},
deleteProperty(target, property) {
const errorMsg = `❌ 禁止删除${configName}的属性 "${String(property)}"!配置数据在运行时应保持不可变。`;
LogUtils.error('ConfigParseUtils', errorMsg);
throw new Error(errorMsg);
}
});
}
}
// 导出便捷的解析函数
export const { parseVec2, parseVec3, parseVec4, parseColor, parseSize, parseRect, parseQuat, parseMat4, parseBoolean, parseInt, parseFloat, parseString, parseStringArray, parseNumberArray, deepFreeze, createReadonlyProxy } = ConfigParseUtils;

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "e6350dd1-e9ea-4a64-9823-a20c6bf82990",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,16 @@
/**
* 自动生成的枚举类型定义
* 请勿手动修改此文件
* 生成时间: 2025-10-13T13:51:42.230Z
*/
export enum DressSourceType {
/** 无 */
NONE = 0,
/** 插槽 */
SLOT = 1,
/** 挂点静态图 */
SOCKET_TEX = 2,
/** 挂点动画 */
SOCKET_SPINE = 3
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "e46d8a30-83a4-4635-951a-84486ebeec96",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,166 @@
import { Color } from 'cc';
import { ConfigParseUtils } from './ConfigParseUtils';
/**
* PetConfig数据结构
*/
export class PetConfigData {
private _id: number;
private _key: string;
private _bundle: string;
private _path: string;
private _name: string;
private _color: Color;
private _desc: string;
/** id */
public get id(): number {
return this._id;
}
/** key */
public get key(): string {
return this._key;
}
/** bundle */
public get bundle(): string {
return this._bundle;
}
/** 资源路径 */
public get path(): string {
return this._path;
}
/** 宠物名称 */
public get name(): string {
return this._name;
}
/** 颜色 */
public get color(): Color {
return ConfigParseUtils.createReadonlyProxy(ConfigParseUtils.deepFreeze(this._color), '颜色');
}
/** 描述 */
public get desc(): string {
return this._desc;
}
public constructor(
id: number,
key: string,
bundle: string,
path: string,
name: string,
color: Color,
desc: string
) {
this._id = id;
this._key = key;
this._bundle = bundle;
this._path = path;
this._name = name;
this._color = color;
this._desc = desc;
}
}
/**
* 解析配置数据
*/
export function parsePetConfigData(data: any): PetConfigData {
return new PetConfigData(
ConfigParseUtils.parseInt(data.id),
ConfigParseUtils.parseString(data.key),
ConfigParseUtils.parseString(data.bundle),
ConfigParseUtils.parseString(data.path),
ConfigParseUtils.parseString(data.name),
ConfigParseUtils.parseColor(data.color),
ConfigParseUtils.parseString(data.desc)
);
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "0b58225d-8d7f-429c-af23-1548e8acb583",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,88 @@
import { JsonAsset } from "cc";
import { ResManager } from "@max-studio/core/res/ResManager";
import { singleton, Singleton } from "@max-studio/core/Singleton";
import LogUtils from "@max-studio/core/utils/LogUtils";
import { ConfigParseUtils } from "./ConfigParseUtils";
import { PetConfigData, parsePetConfigData } from "./PetConfigData";
/**
* PetConfig配置管理器
*
* ⚠️ 此文件由配置表生成器自动生成,请勿手动修改!
* 如需修改请编辑对应的Excel配置文件然后重新生成
*/
@singleton()
export class PetConfigManager extends Singleton {
private configList: readonly PetConfigData[] = [];
private configMap = new Map<number, PetConfigData>();
private isLoaded = false;
protected async onInit(): Promise<void> {
await this.loadConfig();
}
private async loadConfig(): Promise<void> {
try {
const asset = await ResManager.getInstance().loadAsset<JsonAsset>(
"generated/data/PetConfig",
JsonAsset,
"configs",
);
this.parseConfig(<any>asset.json);
this.isLoaded = true;
} catch (err) {
LogUtils.error(
"PetConfigManager",
"加载 PetConfig 配置失败:",
err,
);
}
}
private parseConfig(data: any[]): void {
this.configList = Object.freeze(
data.map((item) => {
const config = parsePetConfigData(item);
const frozenConfig = ConfigParseUtils.deepFreeze(config);
return ConfigParseUtils.createReadonlyProxy(
frozenConfig,
"PetConfigData配置",
);
}),
);
this.configMap.clear();
for (const config of this.configList) {
this.configMap.set(config.id, config);
}
// 深度冻结配置映射,防止运行时修改
ConfigParseUtils.deepFreeze(this.configMap);
}
public getConfig(id: number): PetConfigData | null {
if (!this.isLoaded) {
LogUtils.warn(
"PetConfigManager",
"PetConfig 配置尚未加载完成,请等待加载完成",
);
return null;
}
return this.configMap.get(id) || null;
}
public getAllConfigs(): PetConfigData[] {
if (!this.isLoaded) {
LogUtils.warn(
"PetConfigManager",
"PetConfig 配置尚未加载完成,请等待加载完成",
);
return [];
}
return [...this.configList];
}
public isConfigLoaded(): boolean {
return this.isLoaded;
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "a2093a8e-f81a-4bf2-a7a8-6bb20c02484c",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,130 @@
import { ConfigParseUtils } from './ConfigParseUtils';
import { DressSourceType } from './Enums';
/**
* PetPartConfig数据结构
*/
export class PetPartConfigData {
private _id: number;
private _name: string;
private _bundle: string;
private _path: string;
private _sourceType: DressSourceType;
/** id */
public get id(): number {
return this._id;
}
/** 装扮名称 */
public get name(): string {
return this._name;
}
/** bundle */
public get bundle(): string {
return this._bundle;
}
/** 资源路径 */
public get path(): string {
return this._path;
}
/** 资源类型 */
public get sourceType(): DressSourceType {
return this._sourceType;
}
public constructor(
id: number,
name: string,
bundle: string,
path: string,
sourceType: DressSourceType
) {
this._id = id;
this._name = name;
this._bundle = bundle;
this._path = path;
this._sourceType = sourceType;
}
}
/**
* 解析配置数据
*/
export function parsePetPartConfigData(data: any): PetPartConfigData {
return new PetPartConfigData(
ConfigParseUtils.parseInt(data.id),
ConfigParseUtils.parseString(data.name),
ConfigParseUtils.parseString(data.bundle),
ConfigParseUtils.parseString(data.path),
data.sourceType as DressSourceType
);
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "eb6f0ae1-9c7b-4d26-a8b1-b96d2e65631f",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,88 @@
import { JsonAsset } from "cc";
import { ResManager } from "@max-studio/core/res/ResManager";
import { singleton, Singleton } from "@max-studio/core/Singleton";
import LogUtils from "@max-studio/core/utils/LogUtils";
import { ConfigParseUtils } from "./ConfigParseUtils";
import { PetPartConfigData, parsePetPartConfigData } from "./PetPartConfigData";
/**
* PetPartConfig配置管理器
*
* ⚠️ 此文件由配置表生成器自动生成,请勿手动修改!
* 如需修改请编辑对应的Excel配置文件然后重新生成
*/
@singleton()
export class PetPartConfigManager extends Singleton {
private configList: readonly PetPartConfigData[] = [];
private configMap = new Map<number, PetPartConfigData>();
private isLoaded = false;
protected async onInit(): Promise<void> {
await this.loadConfig();
}
private async loadConfig(): Promise<void> {
try {
const asset = await ResManager.getInstance().loadAsset<JsonAsset>(
"generated/data/PetPartConfig",
JsonAsset,
"configs",
);
this.parseConfig(<any>asset.json);
this.isLoaded = true;
} catch (err) {
LogUtils.error(
"PetPartConfigManager",
"加载 PetPartConfig 配置失败:",
err,
);
}
}
private parseConfig(data: any[]): void {
this.configList = Object.freeze(
data.map((item) => {
const config = parsePetPartConfigData(item);
const frozenConfig = ConfigParseUtils.deepFreeze(config);
return ConfigParseUtils.createReadonlyProxy(
frozenConfig,
"PetPartConfigData配置",
);
}),
);
this.configMap.clear();
for (const config of this.configList) {
this.configMap.set(config.id, config);
}
// 深度冻结配置映射,防止运行时修改
ConfigParseUtils.deepFreeze(this.configMap);
}
public getConfig(id: number): PetPartConfigData | null {
if (!this.isLoaded) {
LogUtils.warn(
"PetPartConfigManager",
"PetPartConfig 配置尚未加载完成,请等待加载完成",
);
return null;
}
return this.configMap.get(id) || null;
}
public getAllConfigs(): PetPartConfigData[] {
if (!this.isLoaded) {
LogUtils.warn(
"PetPartConfigManager",
"PetPartConfig 配置尚未加载完成,请等待加载完成",
);
return [];
}
return [...this.configList];
}
public isConfigLoaded(): boolean {
return this.isLoaded;
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "de6a1d46-109e-47ff-bb2a-f9b9f1241e30",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,11 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "b1244b32-aba4-4cbf-b889-ab355071147c",
"files": [],
"subMetas": {},
"userData": {
"bundleName": "config-data"
}
}

View File

@@ -0,0 +1,186 @@
[
{
"id": 1001,
"key": "chenghuang",
"bundle": "pet-spine",
"path": "ChengHuang",
"color": "#00000000"
},
{
"id": 1002,
"key": "dangkang",
"bundle": "pet-spine",
"path": "DangKang",
"color": "#00000000"
},
{
"id": 1003,
"key": "shuoshu",
"bundle": "pet-spine",
"path": "ShuoShu"
},
{
"id": 1004,
"key": "jiuwei",
"bundle": "pet-spine",
"path": "JiuWei",
"name": "精卫"
},
{
"id": 1005,
"key": "qiongqi",
"bundle": "pet-spine",
"path": "QiongQi",
"name": "穷奇"
},
{
"id": 1006,
"key": "tiangou",
"bundle": "pet-spine",
"path": "TianGou"
},
{
"id": 1007,
"key": "xiangliu",
"bundle": "pet-spine",
"path": "XiangLiu"
},
{
"id": 1008,
"key": "lili",
"bundle": "pet-spine",
"path": "LiLi"
},
{
"id": 1009,
"key": "yugong",
"bundle": "pet-spine",
"path": "YuGong"
},
{
"id": 1010,
"key": "yutu",
"bundle": "pet-spine",
"path": "YuTu"
},
{
"id": 1011,
"key": "zhurong",
"bundle": "pet-spine",
"path": "ZhuRong"
},
{
"id": 1012,
"key": "changyou",
"bundle": "pet-spine",
"path": "Changyou"
},
{
"id": 1013,
"key": "dijiang",
"bundle": "pet-spine",
"path": "Dijiang"
},
{
"id": 1014,
"key": "jili",
"bundle": "pet-spine",
"path": "Jili"
},
{
"id": 1015,
"key": "shusi",
"bundle": "pet-spine",
"path": "Shusi"
},
{
"id": 1016,
"key": "wanv",
"bundle": "pet-spine",
"path": "Wanv"
},
{
"id": 1017,
"key": "xuangui",
"bundle": "pet-spine",
"path": "Xuangui"
},
{
"id": 1018,
"key": "yingyu",
"bundle": "pet-spine",
"path": "Yingyu"
},
{
"id": 1019,
"key": "yunque",
"bundle": "pet-spine",
"path": "Yunque"
},
{
"id": 1020,
"key": "pangding",
"bundle": "pet-spine",
"path": "PangDing"
},
{
"id": 1021,
"key": "shanyuan",
"bundle": "pet-spine",
"path": "ShanYuan"
},
{
"id": 1022,
"key": "zhuyin",
"bundle": "pet-spine",
"path": "ZhuYin"
},
{
"id": 1023,
"key": "yingwu",
"bundle": "pet-spine",
"path": "YingWu"
},
{
"id": 1024,
"key": "linghu",
"bundle": "pet-spine",
"path": "LingHu"
},
{
"id": 1025,
"key": "bailuwang",
"bundle": "pet-spine",
"path": "BaiLuWang"
},
{
"id": 1026,
"key": "xuanwu",
"bundle": "pet-spine",
"path": "XuanWu"
},
{
"id": 1027,
"key": "fengyou",
"bundle": "pet-spine",
"path": "FengYou"
},
{
"id": 1028,
"key": "nianshou",
"bundle": "pet-spine",
"path": "NianShou"
},
{
"id": 1029,
"key": "fenghuang",
"bundle": "pet-spine",
"path": "FengHuang"
},
{
"id": 1030,
"key": "touzishe",
"bundle": "pet-spine",
"path": "TouZiShe"
}
]

View File

@@ -0,0 +1,11 @@
{
"ver": "2.0.1",
"importer": "json",
"imported": true,
"uuid": "8a6207a1-9fdc-4802-8675-7024480c1f31",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}

View File

@@ -0,0 +1,399 @@
[
{
"id": 20001,
"name": "舞狮套装",
"bundle": "pet-spine",
"sourceType": "1"
},
{
"id": 20002,
"name": "可爱熊套装",
"bundle": "pet-spine",
"sourceType": "1"
},
{
"id": 20003,
"name": "格格套装",
"bundle": "pet-spine",
"sourceType": "1"
},
{
"id": 20004,
"name": "关二爷套装",
"bundle": "pet-spine",
"sourceType": "1"
},
{
"id": 20501,
"name": "舞狮玲珑球",
"bundle": "pet-spine",
"path": "bag_20501",
"sourceType": "1"
},
{
"id": 20502,
"name": "舞狮帽",
"bundle": "pet-spine",
"path": "hat_20502",
"sourceType": "4"
},
{
"id": 20503,
"name": "无",
"bundle": "pet-spine",
"path": "eye_23001",
"sourceType": "1"
},
{
"id": 20504,
"name": "舞狮领带",
"bundle": "pet-spine",
"path": "tie_20504",
"sourceType": "1"
},
{
"id": 20506,
"name": "可爱熊挎包",
"bundle": "pet-spine",
"path": "bag_20506",
"sourceType": "2"
},
{
"id": 20507,
"name": "可爱熊头饰",
"bundle": "pet-spine",
"path": "hat_20507",
"sourceType": "1"
},
{
"id": 20508,
"name": "可爱熊面饰",
"bundle": "pet-spine",
"path": "eye_20508",
"sourceType": "1"
},
{
"id": 20509,
"name": "可爱熊围兜",
"bundle": "pet-spine",
"path": "tie_20509",
"sourceType": "1"
},
{
"id": 20511,
"name": "关公盾牌",
"bundle": "pet-spine",
"path": "bag_20511",
"sourceType": "3"
},
{
"id": 20512,
"name": "关公帽",
"bundle": "pet-spine",
"path": "hat_20512",
"sourceType": "3"
},
{
"id": 20513,
"name": "关公眉毛",
"bundle": "pet-spine",
"path": "eye_20513",
"sourceType": "3"
},
{
"id": 20514,
"name": "关公胡须",
"bundle": "pet-spine",
"path": "tie_20514",
"sourceType": "3"
},
{
"id": 20515,
"name": "青龙刀",
"bundle": "pet-spine",
"path": "yanyuedao",
"sourceType": "3"
},
{
"id": 20516,
"name": "格格扇子",
"bundle": "pet-spine",
"path": "bag_20516",
"sourceType": "1"
},
{
"id": 20517,
"name": "格格帽",
"bundle": "pet-spine",
"path": "hat_20517",
"sourceType": "4"
},
{
"id": 20518,
"bundle": "pet-spine",
"sourceType": "1"
},
{
"id": 20519,
"name": "格格围巾",
"bundle": "pet-spine",
"path": "tie_20519",
"sourceType": "1"
},
{
"id": 20520,
"bundle": "pet-spine",
"sourceType": "1"
},
{
"id": 21001,
"name": "公文背包",
"bundle": "pet-spine",
"path": "bag_21001",
"sourceType": "1"
},
{
"id": 21002,
"name": "旅行背包(蓝)",
"bundle": "pet-spine",
"path": "bag_21001",
"sourceType": "2"
},
{
"id": 21003,
"name": "旅行背包(动画)",
"bundle": "pet-spine",
"path": "bag_21001",
"sourceType": "2"
},
{
"id": 21004,
"name": "睡眠抱枕",
"bundle": "pet-spine",
"path": "bag_21004",
"sourceType": "2"
},
{
"id": 21005,
"name": "手枪配饰",
"bundle": "pet-spine",
"path": "bag_21005",
"sourceType": "1"
},
{
"id": 21006,
"name": "游侠钱袋",
"bundle": "pet-spine",
"path": "bag_21006",
"sourceType": "2"
},
{
"id": 21007,
"name": "熊猫挎包",
"bundle": "pet-spine",
"path": "bag_21007",
"sourceType": "2"
},
{
"id": 22001,
"name": "魔术帽",
"bundle": "pet-spine",
"path": "hat_22001",
"sourceType": "1"
},
{
"id": 22002,
"name": "魔术帽(变色)",
"bundle": "pet-spine",
"path": "hat_22001",
"sourceType": "2"
},
{
"id": 22003,
"name": "魔术帽(动画)",
"bundle": "pet-spine",
"path": "hat_22001",
"sourceType": "2"
},
{
"id": 22004,
"bundle": "pet-spine",
"path": "hat_22001",
"sourceType": "2"
},
{
"id": 22005,
"name": "制服帽",
"bundle": "pet-spine",
"path": "hat_22006",
"sourceType": "1"
},
{
"id": 22006,
"name": "休闲帽",
"bundle": "pet-spine",
"path": "hat_22003",
"sourceType": "1"
},
{
"id": 22007,
"name": "牛仔帽",
"bundle": "pet-spine",
"path": "hat_22007",
"sourceType": "1"
},
{
"id": 23001,
"name": "太阳镜(粉)",
"bundle": "pet-spine",
"path": "eye_23001",
"sourceType": "1"
},
{
"id": 23002,
"name": "简框眼镜",
"bundle": "pet-spine",
"path": "eye_23002",
"sourceType": "1"
},
{
"id": 23003,
"name": "墨镜",
"bundle": "pet-spine",
"path": "eye_23003",
"sourceType": "1"
},
{
"id": 23004,
"name": "圆框饰品",
"bundle": "pet-spine",
"path": "eye_23004",
"sourceType": "1"
},
{
"id": 23005,
"name": "爱心镜框",
"bundle": "pet-spine",
"path": "eye_23005",
"sourceType": "1"
},
{
"id": 23006,
"name": "竹子墨镜",
"bundle": "pet-spine",
"path": "eye_23006",
"sourceType": "1"
},
{
"id": 23007,
"name": "睡眠面罩",
"bundle": "pet-spine",
"path": "eye_23007",
"sourceType": "1"
},
{
"id": 23008,
"name": "搞怪眼镜",
"bundle": "pet-spine",
"path": "eye_23008",
"sourceType": "1"
},
{
"id": 23009,
"name": "游侠眼饰",
"bundle": "pet-spine",
"path": "eye_23009",
"sourceType": "1"
},
{
"id": 23010,
"name": "爱心镜框2",
"bundle": "pet-spine",
"path": "eye_23005",
"sourceType": "1"
},
{
"id": 23011,
"name": "墨镜2",
"bundle": "pet-spine",
"path": "eye_23003",
"sourceType": "1"
},
{
"id": 23012,
"name": "粉色眼镜2",
"bundle": "pet-spine",
"path": "eye_23001",
"sourceType": "1"
},
{
"id": 24001,
"name": "粉蝴蝶结",
"bundle": "pet-spine",
"path": "tie_24001",
"sourceType": "1"
},
{
"id": 24002,
"name": "紫蝴蝶结",
"bundle": "pet-spine",
"path": "tie_24002",
"sourceType": "1"
},
{
"id": 24003,
"name": "制服领结",
"bundle": "pet-spine",
"path": "tie_24004",
"sourceType": "1"
},
{
"id": 24004,
"name": "熊猫领结",
"bundle": "pet-spine",
"path": "tie_24003",
"sourceType": "1"
},
{
"id": 24005,
"name": "制服领带",
"bundle": "pet-spine",
"path": "tie_24005",
"sourceType": "1"
},
{
"id": 24006,
"name": "金项链",
"bundle": "pet-spine",
"path": "tie_24006",
"sourceType": "1"
},
{
"id": 24007,
"name": "牛仔围巾",
"bundle": "pet-spine",
"path": "tie_24007",
"sourceType": "1"
},
{
"id": 25001,
"name": "闪闪糖葫芦",
"bundle": "pet-spine",
"path": "tanghulu",
"sourceType": "0"
},
{
"id": 25002,
"name": "青龙刀",
"bundle": "pet-spine",
"path": "yanyuedao",
"sourceType": "3"
},
{
"id": 25003,
"name": "爱心信件",
"bundle": "pet-spine",
"path": "qingshu",
"sourceType": "0"
}
]

View File

@@ -0,0 +1,11 @@
{
"ver": "2.0.1",
"importer": "json",
"imported": true,
"uuid": "2dfc8295-5211-42cf-85cb-64addd429a7e",
"files": [
".json"
],
"subMetas": {},
"userData": {}
}