fix(locale): resolve Chinese monster and NPC names via Locale.mob_names and early-bind name resolver

This commit is contained in:
shen
2026-09-19 19:19:55 -07:00
parent 7cbda7b3dd
commit 1637b500e5
4 changed files with 143 additions and 22 deletions
+19 -1
View File
@@ -114,7 +114,10 @@ const MAX_UPGRADES_PER_FRAME := 4
const MAX_UPGRADE_TIME_MSEC := 4
const VISIBILITY_CHECK_INTERVAL := 0.1
var _vis_accum := 0.0
var name_resolver: Callable = Callable() # func(entity_dict) -> String(怪名走 mob_proto
var name_resolver: Callable = Callable(): # func(entity_dict) -> String(怪名走 mob_proto
set(v):
name_resolver = v
_refresh_all_names()
var kind_resolver: Callable = Callable() # §8.8 func(entity_dict) -> int0 PC/1 NPC/2 怪/3 石/4 warpnet_play._entity_kind
var title_name_resolver: Callable = Callable() # §8.8 func(grade:int) -> StringPVP_LEVEL<grade> 本地化;未注入回退裸 key,seam ⑧)
var _name_color_accum := 0.0 # §8.8 头顶名字色 / 称号标签的节流刷新累加器(~2Hz)
@@ -669,6 +672,21 @@ func _display_name(d: Dictionary) -> String:
return r
return str(d.get("name", ""))
func _refresh_all_names() -> void:
if client == null or not client.has_method("get_entities"):
return
for e in client.get_entities():
var vid := int(e.get("vid", 0))
var n: Node3D = _by_vid.get(vid, null)
if n and is_instance_valid(n):
var nm := _display_name(e)
if nm != "":
var lbl := n.get_node_or_null("Label3D") as Label3D
if lbl:
lbl.text = nm
elif n.has_method("set_display_name"):
n.set_display_name(nm)
# --- §8.8 头顶名字色(CInstanceBase::GetNameColor--------------------------------
# net_world 直接持有 M2Client,能自建 name_color_index 需要的会话上下文
# net_play._attack_ctx 同款)。kind_resolver 由 game_scene 注入 net_play._entity_kind