支持 Psb Version 4 写入

This commit is contained in:
2026-03-26 09:18:54 +08:00
parent 841dc7e79d
commit c97f59f43b
3 changed files with 93 additions and 18 deletions

View File

@@ -628,14 +628,6 @@ fn create_file<'a>(
let resources: Vec<Resource> = serde_json::from_str(&data["resources"].dump())?;
let extra_resources: Vec<Resource> = serde_json::from_str(&data["extra_resources"].dump())?;
let mut psb = VirtualPsbFixed::with_json(&data)?;
if psb.header().version > 3 {
eprintln!(
"Warning: PSB version {} is higher than 3, downgrading to 3. Some features may not be supported.",
psb.header().version
);
crate::COUNTER.inc_warning();
psb.header_mut().version = 3;
}
psb.header_mut().encryption = 0; // We don't support encryption.
let folder_path = {
let mut pb = std::path::PathBuf::from(custom_filename);
@@ -651,9 +643,7 @@ fn create_file<'a>(
psb.extra_mut().push(res);
}
let psb = psb.to_psb(false);
let psb_writer = PsbWriter::new(psb, &mut writer);
psb_writer
.finish()
.map_err(|e| anyhow::anyhow!("Failed to write psb: {:?}", e))?;
psb.finish_v4(&mut writer)
.map_err(|e| anyhow::anyhow!("Failed to write PSB file: {:?}", e))?;
Ok(())
}

View File

@@ -7,7 +7,7 @@ use crate::scripts::base::*;
use crate::types::*;
use crate::utils::encoding::*;
use anyhow::Result;
use emote_psb::{PsbReader, PsbWriter};
use emote_psb::PsbReader;
use fancy_regex::Regex;
use std::collections::{HashMap, HashSet};
use std::io::{Read, Seek};
@@ -838,8 +838,7 @@ impl Script for ScnScript {
return Err(anyhow::anyhow!("Some messages were not processed."));
}
let psb = psb.to_psb(true);
let writer = PsbWriter::new(psb, file);
writer.finish().map_err(|e| {
psb.finish_v4(file).map_err(|e| {
anyhow::anyhow!("Failed to write PSB to file {}: {:?}", self.filename, e)
})?;
Ok(())
@@ -879,8 +878,7 @@ impl Script for ScnScript {
psb.from_json(&json)?;
psb.to_psb(true)
};
let writer = PsbWriter::new(psb, file);
writer.finish().map_err(|e| {
psb.finish_v4(file).map_err(|e| {
anyhow::anyhow!("Failed to write PSB to file {}: {:?}", self.filename, e)
})?;
Ok(())