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

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
+69
View File
@@ -0,0 +1,69 @@
# item_tooltip_test —— item_proto 固定字段 + itemdesc + 实例 socket/attribute 的回归。
extends SceneTree
const ItemTooltip = preload("res://ui/item_tooltip.gd")
class FakeMobProto extends RefCounted:
func mob(vnum: int) -> Dictionary:
return {"vnum": vnum, "name": "Wolf", "locale_name": "Wolf"}
var _fail := 0
func _ck(condition: bool, message: String) -> void:
if not condition:
_fail += 1
printerr("FAIL: " + message)
func _init() -> void:
var tooltip := ItemTooltip.new()
var assets := AssetRoot.path()
_ck(tooltip.setup(assets, "en"), "itemdesc en loaded")
var proto := {
"vnum": 71114,
"name": "Wild Boar Seal",
"locale_name": "Wild Boar Seal",
"type": 2,
"values": [12, 30, 0, 0, 0, 2],
"limits": [{"type": 1, "value": 15}, {"type": 0, "value": 0}],
"applies": [{"type": 1, "value": 100}, {"type": 0, "value": 0}, {"type": 0, "value": 0}],
"refined_vnum": 71115,
"refine_set": 42,
}
var instance := {
"count": 3,
"sockets": [28030, 0, -1],
"attrs": [{"type": 5, "value": 7}],
}
var text := tooltip.format(71114, 3, proto, instance)
_ck(text.begins_with("Wild Boar Seal\n数量:3"), "title and stack count")
_ck(text.contains("This seal's magic"), "itemdesc description included")
_ck(text.contains("等级要求:15"), "limit included")
_ck(text.contains("防御力:34"), "armor value formula included")
_ck(text.contains("最大生命:+100"), "proto apply included")
_ck(text.contains("附加力量:+7"), "instance attribute included")
_ck(text.contains("孔 1#28030") and text.contains("孔 3:损坏"), "instance sockets included")
_ck(text.contains("精炼后:#71115") and text.contains("精炼套件:42"), "refine links included")
var rod_proto := {"locale_name": "Fishing Rod", "type": 13, "values": [30, 0, 120]}
var rod_text := tooltip.format(20000, 1, rod_proto, {"sockets": [120, 0, 0]})
_ck(rod_text.contains("等级:3") and rod_text.contains("经验:120 / 120") and rod_text.contains("可升级"),
"rod level and experience included")
var fish_text := tooltip.format(27800, 1, {"locale_name": "Fish", "type": 12}, {"sockets": [235, 0, 0]})
_ck(fish_text.contains("长度:2.35 cm"), "fish length included")
var ds_text := tooltip.format(12345, 1, {"locale_name": "Dragon Soul", "type": 29}, {})
_ck(ds_text.contains("龙魂石阶段:4") and ds_text.contains("龙魂石强化:4"), "dragon soul stage included")
var special := ItemTooltip.new()
_ck(special.setup(assets, "en", FakeMobProto.new()), "special tooltip sources loaded")
var book_text := special.format(50300, 1, {"locale_name": "Skill Book", "type": 17}, {"sockets": [1, 0, 0]})
_ck(book_text.begins_with("Three-Way Cut Skill Book"), "skill book title includes skill name")
var poly_text := special.format(70103, 1, {"locale_name": "Polymorph Marble", "type": 19}, {"sockets": [77, 0, 0]})
_ck(poly_text.begins_with("Wolf Polymorph Marble"), "polymorph title includes monster name")
var timed := special.format(90001, 1, {"locale_name": "Timed", "type": 18,
"limits": [{"type": 7, "value": 0}, {"type": 0, "value": 0}]},
{"sockets": [int(Time.get_unix_time_from_system()) + 65, 0, 0]})
_ck(timed.contains("剩余时间:1分5秒"), "realtime limit renders remaining time")
if _fail == 0:
print("PASS: item_tooltip_test")
quit(0)
else:
printerr("%d check(s) failed" % _fail)
quit(1)