feat(locale): configure Chinese (zh) localization for client and align with 40250 server

This commit is contained in:
shen
2026-09-19 18:47:00 -07:00
parent f22c0f8e31
commit 4a2b953a4f
315 changed files with 14997 additions and 17 deletions
+55 -9
View File
@@ -257,15 +257,40 @@ const PERCENT_APPLIES := {
}
var _descriptions: Dictionary = {}
var _item_names: Dictionary = {}
var _skill_names: Dictionary = {}
var _proto_node: Object = null
var _assets_root: String = ""
func setup(assets_root: String, lang := "en", proto_node: Object = null) -> bool:
func setup(assets_root: String, lang := "", proto_node: Object = null) -> bool:
_descriptions.clear()
_item_names.clear()
_skill_names.clear()
_assets_root = assets_root
_proto_node = proto_node
if lang.is_empty():
var LocaleScript = load("res://locale.gd")
if LocaleScript and LocaleScript.has_method("get_default_lang"):
lang = LocaleScript.get_default_lang()
else:
lang = "zh"
var names_path := assets_root.path_join("locale/locale/%s/item_names.txt" % lang)
if FileAccess.file_exists(names_path):
var nf := FileAccess.open(names_path, FileAccess.READ)
if nf:
while not nf.eof_reached():
var line := nf.get_line().strip_edges()
if line.is_empty() or line.begins_with("#") or line.begins_with("VNUM"):
continue
var tab := line.find("\t")
if tab < 0:
tab = line.find(" ")
if tab < 0:
continue
var k := line.substr(0, tab).strip_edges()
var v := line.substr(tab + 1).strip_edges()
if k.is_valid_int():
_item_names[int(k)] = v
var path := assets_root.path_join("locale/locale/%s/itemdesc.txt" % lang)
if FileAccess.file_exists(path):
var file := FileAccess.open(path, FileAccess.READ)
@@ -282,27 +307,40 @@ func setup(assets_root: String, lang := "en", proto_node: Object = null) -> bool
"description": parts[2].strip_edges() if parts.size() > 2 else "",
}
_load_skill_names(assets_root, lang)
return not _descriptions.is_empty() or not _skill_names.is_empty()
return not _descriptions.is_empty() or not _skill_names.is_empty() or not _item_names.is_empty()
func get_proto_node() -> Object:
return _proto_node
func get_stone_info(stone_vnum: int) -> Dictionary:
var name := "魂石 #%d" % stone_vnum
var name := ""
if _item_names.has(stone_vnum):
name = String(_item_names[stone_vnum])
var affect := ""
var icon_path := ""
if _proto_node and _proto_node.has_method("item"):
if name.is_empty() and _proto_node and _proto_node.has_method("item"):
var sp: Dictionary = _proto_node.item(stone_vnum)
if not sp.is_empty():
name = String(sp.get("locale_name", sp.get("name", name)))
name = String(sp.get("locale_name", sp.get("name", "")))
var sa: Array = sp.get("applies", [])
if not sa.is_empty():
var atype := int(sa[0].get("type", 0))
var aval := int(sa[0].get("value", 0))
if atype != 0 and aval != 0:
affect = format_apply_string(atype, aval)
if name.begins_with("魂石 #") and _descriptions.has(stone_vnum):
name = String(_descriptions[stone_vnum].get("name", name))
elif not affect.is_empty() or (_proto_node and _proto_node.has_method("item")):
var sp: Dictionary = _proto_node.item(stone_vnum)
if not sp.is_empty():
var sa: Array = sp.get("applies", [])
if not sa.is_empty():
var atype := int(sa[0].get("type", 0))
var aval := int(sa[0].get("value", 0))
if atype != 0 and aval != 0:
affect = format_apply_string(atype, aval)
if name.is_empty() and _descriptions.has(stone_vnum):
name = String(_descriptions[stone_vnum].get("name", ""))
if name.is_empty():
name = "魂石 #%d" % stone_vnum
return {"name": name, "affect": affect, "icon_path": icon_path}
func format_apply_string(apply_type: int, value: int) -> String:
@@ -317,7 +355,11 @@ func build_model(vnum: int, count: int, proto_data: Dictionary, instance_data: D
if vnum <= 0:
return {}
var name := String(proto_data.get("locale_name", proto_data.get("name", "物品 #%d" % vnum)))
var name: String = _item_names.get(vnum, "")
if name.is_empty():
name = String(proto_data.get("locale_name", proto_data.get("name", "")))
if name.is_empty() and _descriptions.has(vnum):
name = String(_descriptions[vnum].get("name", ""))
if name.is_empty():
name = "物品 #%d" % vnum
var sockets: Array = instance_data.get("sockets", proto_data.get("sockets", []))
@@ -530,7 +572,11 @@ func build_model(vnum: int, count: int, proto_data: Dictionary, instance_data: D
func format(vnum: int, count: int, proto_data: Dictionary, instance_data: Dictionary = {}) -> String:
if vnum <= 0:
return ""
var name := String(proto_data.get("locale_name", proto_data.get("name", "物品 #%d" % vnum)))
var name: String = _item_names.get(vnum, "")
if name.is_empty():
name = String(proto_data.get("locale_name", proto_data.get("name", "")))
if name.is_empty() and _descriptions.has(vnum):
name = String(_descriptions[vnum].get("name", ""))
if name.is_empty():
name = "物品 #%d" % vnum
var sockets: Array = instance_data.get("sockets", proto_data.get("sockets", []))