Fix multilang support for select in scn file

This commit is contained in:
2025-09-20 20:22:16 +08:00
parent e794d558a8
commit e7cd7b9f1a
2 changed files with 33 additions and 5 deletions

View File

@@ -171,6 +171,16 @@ impl PsbValueFixed {
}
}
/// Sets the value of this PSB value to a new integer.
pub fn set_i64(&mut self, value: i64) {
*self = PsbValueFixed::Number(PsbNumber::Integer(value));
}
/// Sets the value of this PSB value to a new object
pub fn set_obj(&mut self, value: PsbObjectFixed) {
*self = PsbValueFixed::Object(value);
}
/// Sets the value of this PSB value to a new string.
pub fn set_str(&mut self, value: &str) {
match self {
@@ -730,6 +740,12 @@ pub struct PsbObjectFixed {
}
impl PsbObjectFixed {
pub fn new() -> Self {
Self {
values: HashMap::new(),
}
}
/// Creates a new empty PSB object.
pub fn to_psb(self, warn_on_none: bool) -> PsbObject {
let mut hash_map = HashMap::new();

View File

@@ -677,11 +677,21 @@ impl Script for ScnScript {
if cur_mes.is_none() {
cur_mes = mes.next();
}
if select["language"].is_list()
if self.language_index != 0
&& {
while select["language"].len() <= self.language_index {
select["language"][self.language_index] =
select["language"][0].clone();
// TenShiSouZou
// first block is null
if select["language"].len() == 0 {
select["language"].push_member(PsbValueFixed::Null);
continue;
}
let mut obj = PsbObjectFixed::new();
obj["text"].set_str("");
obj["speechtext"].set_str("");
obj["searchtext"].set_str("");
obj["textlength"].set_i64(0);
select["language"][self.language_index].set_obj(obj);
}
true
}
@@ -702,10 +712,12 @@ impl Script for ScnScript {
}
}
lang_obj["text"].set_string(text.replace("\n", "\\n"));
lang_obj["speechtext"].set_string(get_save_message(&text, true));
lang_obj["searchtext"].set_string(get_save_message(&text, false));
lang_obj["textlength"].set_i64(text.chars().count() as i64);
continue;
}
}
if select["text"].is_string() {
} else if select["text"].is_string() {
let m = match cur_mes.take() {
Some(m) => m,
None => {