用nodejs 写了个小工具,来强行把.skel的版本从3.8.75改成3.8.99,注意,这是个临时方案,最好还是要求美术重新导出!但是资源量太大,暂时先这么用着吧,工具代码如下:
modifyVersion(file:string):void{
if(!fs.existsSync(file)){
return;
}
let buffer:Buffer=fs.readFileSync(file);
let skeleton_hash: { index: number, value: string } = this.readString(buffer, 0);
// this.log(skeleton_hash.value, skeleton_hash.index);
//改写版本号
this.writeVertion(buffer,skeleton_hash.index);
//将文件重新写入
fs.writeFileSync(file,buffer);
}
readString(buffer: Buffer, index: number): { index: number, value: string } {
let result: { index: number, value: number } = this.readVarint(buffer, index, true);
index = result.index;
let len: number = result.value;
if (len == 0) {
return { index: index, value: "" };
}
let start:number=index;
let end:number=index+len-1;
let str: string = buffer.toString("utf8", start, end);
return { index: end, value: str };
}
//写入版本号
writeVertion(buffer:Buffer,index:number){
let result: { index: number, value: number } = this.readVarint(buffer, index, true);
index = result.index;
let len: number = result.value;
if (len == 0) {
return { index: index, value: "" };
}
let start:number=index;
let end:number=index+len-1;
let version: string = buffer.toString("utf8", start, end);
if(version=="3.8.75"){
buffer.write("3.8.99",start);
}else{
this.warn("不是目标版本:"+version);
}
}
readVarint(buffer: Buffer, index: number, optimizePositive: boolean = false): { index: number, value: number } {
let b = buffer[index];
index++;
let value = b & 0x7F;
if (b & 0x80) {
b = buffer[index];
index++;
value |= (b & 0x7F) << 7;
if (b & 0x80) {
b = buffer[index];
index++;
value |= (b & 0x7F) << 14;
if (b & 0x80) {
b = buffer[index];
index++;
value |= (b & 0x7F) << 21;
if (b & 0x80) {
value |= (buffer[index] & 0x7F) << 28;
index++;
}
}
}
}
if (!optimizePositive) value = ((value >> 1) ^ -(value & 1));
return { index: index, value: value };
}