Files
mtgodot-poc/project/test_game_button_money_dialog_parity.gd
T
shenandshen 66d217b313 feat(client): 完成40250客户端核心功能1:1对齐与桥梁高度采样修复
- 桥梁与静态物体高度采样修复:
  - 严格对齐 40250 CMapOutdoor::GetHeight 与 CAttributeInstance::GetHeight
  - 解析 .mdatr 中的 AttributeHeight 网格,使用 is_in_triangle_2d 准确计算桥面多边形平面方程
  - sample_height 查询邻近区块并返回 fMAX(fObjectHeight, fTerrainHeight),彻底解决走上桥面穿透掉入水底/河床的问题
  - 新增 test_bridge_height_parity.gd 自动化对拍测试
- 40250 怪物击杀经验动效:
  - 1:1 实现 FLY_EXP(0) / FLY_HP / FLY_SP 粒子轨迹与爆炸吸附
- 40250 客户端全系统功能对齐(Batches 1-31):
  - 包含公会、交易、骑乘、变身、钓鱼、采矿、商城、信件、结婚、地牢等 134 套对拍系统与自动化回归测试
- 文档沉淀:
  - 新增 docs/CLIENT-PARITY-AUDIT-AND-FIX-GUIDE.md 客户端对拍缺陷发现与修复工程指南
2026-09-19 08:51:25 -07:00

89 lines
3.3 KiB
GDScript

# test_game_button_money_dialog_parity.gd
# 检验 40250 浮动任务栏状态红点通知与金币分堆丢弃输入窗
extends SceneTree
const GameButtonMoneyDialogSystem = preload("res://game_button_money_dialog_system.gd")
func _init() -> void:
print("--- 开始测试 40250 浮动任务栏状态红点与金币分堆系统 (test_game_button_money_dialog_parity) ---")
var system = GameButtonMoneyDialogSystem.new()
var fails: int = 0
var btns = system.game_buttons
var money = system.money_dialog
# 1. 浮动任务栏按钮状态检验 (新角色: 0 播放时间,有剩余未分配点数)
btns.check_game_buttons(5, 1, 0)
if not btns.button_visible["STATUS"]:
printerr("FAIL: 有未分配属性点时 STATUS 按钮未显示!")
fails += 1
if not btns.button_visible["SKILL"]:
printerr("FAIL: 有未分配技能点时 SKILL 按钮未显示!")
fails += 1
if not btns.button_visible["HELP"]:
printerr("FAIL: 0 游戏时长角色 HELP 按钮未显示!")
fails += 1
# 老玩家分配完点数后 (stat=0, skill=0, playtime=3600)
btns.check_game_buttons(0, 0, 3600)
if btns.button_visible["STATUS"] or btns.button_visible["SKILL"] or btns.button_visible["HELP"]:
printerr("FAIL: 属性点分配完毕且为老玩家时按钮应隐藏!")
fails += 1
# 2. 观战模式按钮与 /observer_exit 指令
btns.set_observer_mode(true)
if not btns.button_visible["EXIT_OBSERVER"]:
printerr("FAIL: 观战模式下未显示 EXIT_OBSERVER 按钮!")
fails += 1
btns.click_exit_observer()
if btns.last_chat_packet_sent != "/observer_exit":
printerr("FAIL: 退出观战发送指令错误: ", btns.last_chat_packet_sent)
fails += 1
btns.set_observer_mode(false)
if btns.button_visible["EXIT_OBSERVER"]:
printerr("FAIL: 非观战模式下 EXIT_OBSERVER 按钮未隐藏!")
fails += 1
# 3. 金币分堆/丢弃输入框坐标吸附计算测试
# 屏幕 1024x768,点击位于中间 (500, 400)
# 宽度 170,高度 90 -> pos_x 应为 500 - 85 = 415, pos_y = 400 - 90 - 20 = 290
money.open_dialog(50000, 100, 500, 400, 1024, 768)
if not money.is_open:
printerr("FAIL: 金币输入框未能打开!")
fails += 1
if money.pos_x != 415 or money.pos_y != 290:
printerr("FAIL: 金币输入框坐标吸附错误: pos_x=", money.pos_x, " pos_y=", money.pos_y)
fails += 1
# 4. 边界屏幕右侧贴边吸附测试 (mouse_x = 1000)
money.open_dialog(50000, 100, 1000, 400, 1024, 768)
if money.pos_x != (1024 - 170): # 854
printerr("FAIL: 贴右边缘防越界未生效,pos_x=", money.pos_x)
fails += 1
# 5. 输入数字与截断测试 (输入 80000,超出最大 50000 -> 截断为 50000)
money.input_text("80000")
var accepted = money.on_accept()
if not accepted or money.last_accepted_value != 50000:
printerr("FAIL: 超额金币未能正确截断至 50000,实际: ", money.last_accepted_value)
fails += 1
if money.is_open:
printerr("FAIL: 接受后对话框未自动关闭!")
fails += 1
# 6. 非法字符过滤测试
money.open_dialog(1000, 1, 100, 100)
money.input_text("abc12")
var bad_accept = money.on_accept()
if bad_accept or money.last_accepted_value != 0:
printerr("FAIL: 非法非数字输入未能拦截!")
fails += 1
if fails == 0:
print("PASS: test_game_button_money_dialog_parity (8/8 全部通过)")
quit(0)
else:
printerr("FAILED: test_game_button_money_dialog_parity (", fails, " 项失败)")
quit(1)