fix(locale): resolve Chinese monster and NPC names via Locale.mob_names and early-bind name resolver
This commit is contained in:
+19
-1
@@ -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) -> int(0 PC/1 NPC/2 怪/3 石/4 warp;net_play._entity_kind)
|
||||
var title_name_resolver: Callable = Callable() # §8.8 func(grade:int) -> String(PVP_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
|
||||
|
||||
Reference in New Issue
Block a user