完善客户端功能并同步差距文档

This commit is contained in:
shenlei
2026-09-03 18:40:01 +09:00
parent f93a172296
commit 13ccb8d02d
135 changed files with 21881 additions and 1259 deletions
+110
View File
@@ -0,0 +1,110 @@
# text_tail_test —— §8.8 头顶「称号 / 等级 / 公会名」子标签 1:1:
# GetTitleColorg_akD3DXClrTitle)、RefreshTextTail 的 TITLE_NONE / 越界分支、
# UpdateTextTailLevel 的 "Lv %d" + s_kLevelColor、RegisterCharacterTextTail 的
# dwGuildID!=0 / "Noname" 兜底、AttachTextTail 的 110/10 高度、EnablePKTitle 开关。
# godot --headless --path project --script text_tail_test.gd
# 退出码 0 = 全过。
extends SceneTree
const TextTail = preload("res://text_tail.gd")
const EntityRules = preload("res://entity_rules.gd")
var _fail := 0
func _ck(c: bool, m: String) -> void:
if not c:
_fail += 1
printerr("FAIL: " + m)
func _init() -> void:
_run()
if _fail == 0:
print("PASS: text_tail_test (§8.8 GetTitleColor / RefreshTextTail / UpdateTextTailLevel 1:1)")
quit(0)
else:
printerr("%d check(s) failed" % _fail)
quit(1)
func _run() -> void:
# --- 0. 常量(InstanceBase.h / PythonTextTail.cpp------------------------
_ck(TextTail.TITLE_NUM == 9, "TITLE_NUM == 9")
_ck(TextTail.TITLE_NONE == 4, "TITLE_NONE == 4")
_ck(TextTail.GUILD_NAME_FALLBACK == "Noname", "guild fallback == \"Noname\"")
# s_kLevelColor = D3DXCOLOR(152/255, 255/255, 51/255, 1)
_ck(TextTail.LEVEL_COLOR.is_equal_approx(Color8(152, 255, 51)), "LEVEL_COLOR == (152,255,51)")
# c_TextTail_Guild_Name_Color = 0xFFEFD3FF -> RGB (239,211,255)
_ck(TextTail.GUILD_NAME_COLOR.is_equal_approx(Color8(239, 211, 255)), "GUILD_NAME_COLOR == 0xEFD3FF")
# --- 1. GetTitleColorg_akD3DXClrTitle[grade]introloading TITLE_COLOR_DICT
_ck(TextTail.title_color(0).is_equal_approx(Color8(0, 204, 255)), "title_color(0) == GOOD_4 (0,204,255)")
_ck(TextTail.title_color(1).is_equal_approx(Color8(0, 144, 255)), "title_color(1) == GOOD_3 (0,144,255)")
_ck(TextTail.title_color(2).is_equal_approx(Color8(92, 110, 255)), "title_color(2) == GOOD_2 (92,110,255)")
_ck(TextTail.title_color(3).is_equal_approx(Color8(155, 155, 255)), "title_color(3) == GOOD_1 (155,155,255)")
_ck(TextTail.title_color(4).is_equal_approx(Color8(255, 255, 255)), "title_color(4) == NORMAL (255,255,255)")
_ck(TextTail.title_color(5).is_equal_approx(Color8(207, 117, 0)), "title_color(5) == EVIL_1 (207,117,0)")
_ck(TextTail.title_color(6).is_equal_approx(Color8(235, 83, 0)), "title_color(6) == EVIL_2 (235,83,0)")
_ck(TextTail.title_color(7).is_equal_approx(Color8(227, 0, 0)), "title_color(7) == EVIL_3 (227,0,0)")
_ck(TextTail.title_color(8).is_equal_approx(Color8(255, 0, 0)), "title_color(8) == EVIL_4 (255,0,0)")
# uGrade >= TITLE_NUM -> 白(GetTitleColor 的 s_kD3DXClrTitleDefault
_ck(TextTail.title_color(9).is_equal_approx(Color(1, 1, 1)), "title_color(9) -> white")
_ck(TextTail.title_color(-1).is_equal_approx(Color(1, 1, 1)), "title_color(-1) -> white")
# --- 2. title_name_key / level_text / text_tail_height 字面 ---------------
_ck(TextTail.title_name_key(0) == "PVP_LEVEL0", "title_name_key(0) == PVP_LEVEL0")
_ck(TextTail.title_name_key(8) == "PVP_LEVEL8", "title_name_key(8) == PVP_LEVEL8")
_ck(TextTail.level_text(1) == "Lv 1", "level_text(1) == \"Lv 1\"")
_ck(TextTail.level_text(99) == "Lv 99", "level_text(99) == \"Lv 99\"")
_ck(TextTail.text_tail_height(true) == 110.0, "text_tail_height(mounted) == 110")
_ck(TextTail.text_tail_height(false) == 10.0, "text_tail_height(on foot) == 10")
# --- 3. RefreshTextTail 称号分支(按 GetAlignmentGrade------------------
TextTail.set_pk_title_enabled(true)
# alignment 0 -> grade 4 == TITLE_NONE -> 不显示(DetachTitle
var t_none := TextTail.refresh_title(0)
_ck(int(t_none["grade"]) == 4, "align 0 -> grade 4")
_ck(not t_none["show_title"], "grade TITLE_NONE -> show_title false")
# alignment 12000 -> grade 0 -> 显示 GOOD_4
var t_good := TextTail.refresh_title(12000)
_ck(int(t_good["grade"]) == 0 and t_good["show_title"], "align 12000 -> grade 0, show_title true")
_ck(t_good["name_key"] == "PVP_LEVEL0", "grade 0 name_key == PVP_LEVEL0")
_ck(t_good["color"].is_equal_approx(Color8(0, 204, 255)), "grade 0 title colour GOOD_4")
# alignment -12001 -> grade 8 -> EVIL_4
var t_evil := TextTail.refresh_title(-12001)
_ck(int(t_evil["grade"]) == 8 and t_evil["show_title"], "align -12001 -> grade 8, show_title true")
_ck(t_evil["color"].is_equal_approx(Color8(255, 0, 0)), "grade 8 title colour EVIL_4")
# grade 3align 1000)显示,grade 5align -1)显示
_ck(TextTail.refresh_title(1000)["show_title"], "grade 3 shows title")
_ck(TextTail.refresh_title(-1)["show_title"], "grade 5 shows title")
# --- 4. UpdateTextTailLevel / AttachLevel ------------------------------
var lv := TextTail.refresh_level(42)
_ck(lv["show_level"] and lv["text"] == "Lv 42", "level 42 -> \"Lv 42\"")
_ck(lv["color"].is_equal_approx(Color8(152, 255, 51)), "level colour == s_kLevelColor")
# m_dwLevel 0 -> AttachTextTail 不调 UpdateTextTailLevel
_ck(not TextTail.refresh_level(0)["show_level"], "level 0 -> no level tag")
# --- 5. RegisterCharacterTextTail 公会名分支 --------------------------
# dwGuildID == 0 -> 不建标签
_ck(not TextTail.refresh_guild(0, "Whatever")["show_guild"], "guild id 0 -> no guild tag")
# guild != 0 且解出名字
var g_ok := TextTail.refresh_guild(7, "RedKnights")
_ck(g_ok["show_guild"] and g_ok["name"] == "RedKnights", "guild 7 -> resolved name")
_ck(g_ok["color"].is_equal_approx(Color8(239, 211, 255)), "guild name colour")
# guild != 0 但 GetGuildName 失败(空串)-> "Noname"
var g_no := TextTail.refresh_guild(7, "")
_ck(g_no["show_guild"] and g_no["name"] == "Noname", "guild name lookup fail -> \"Noname\"")
# --- 6. EnablePKTitle(FALSE)AttachTitle / AttachLevel 早退 ------------
TextTail.set_pk_title_enabled(false)
_ck(not TextTail.is_pk_title_enabled(), "pk title disabled")
_ck(not TextTail.refresh_title(12000)["show_title"], "pk-title off -> title suppressed")
_ck(not TextTail.refresh_level(42)["show_level"], "pk-title off -> level suppressed")
# 公会名不受 bPKTitleEnable 影响(RegisterCharacterTextTail 里没这判)
_ck(TextTail.refresh_guild(7, "RedKnights")["show_guild"], "pk-title off -> guild name still shown")
# 还原静态状态,避免污染同进程后续测试
TextTail.set_pk_title_enabled(true)
_ck(TextTail.refresh_title(12000)["show_title"], "restore: pk title on again")
# --- 7. grade 与 entity_rules.alignment_grade 一致 --------------------
for a in [15000, 9000, 5000, 2000, 500, -500, -5000, -9000, -15000]:
_ck(int(TextTail.refresh_title(a)["grade"]) == EntityRules.alignment_grade(a),
"grade matches alignment_grade(%d)" % a)