feat(locale): configure Chinese (zh) localization for client and align with 40250 server
This commit is contained in:
@@ -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", []))
|
||||
|
||||
Reference in New Issue
Block a user