装备校验链/快捷栏/公会/好友情侣/交易仓库五项差距修复(增量 129)
- 装备校验:can_equip 按 CanEquipNow→FindEquipCell→EquipItem 精确重排, 新增 find_equip_cell() 1:1 复刻(RING/UNIQUE 占用翻转、COSTUME/BELT/DS), 帝国 antiflag 降级为 tooltip 提示,LIMIT_PCBANG/REAL_TIME* 语义与倒计时文案 - 快捷栏:死亡全槽禁用+激活守卫、变身(affect 220)技能置灰、 物品槽失配置灰(服务器回收/换武器后刷新) - 公会:GUILD_AUTH_* 权限位门控踢人/公告/技能升级,/gskillup、 被宣战应答弹窗(/war·/nowar)、资金存取行(40250 服务端已禁用仍保留 1:1) - 好友/情侣:messenger 三固定组(好友/公会/情侣),lover_login/logout/ near/far/divorce 命令事件→在线/在身边状态与离婚隐藏 - 交易/仓库:ExchangeState.last_notice(ALREADY/LESS_GOLD)结束浮层提示; 仓库改密 /safebox_change_password 三段输入;关窗补 /safebox_close·/mall_close; 仓库金钱经核实 40250 无 wire 协议,UI 定界只读 - app_flow:重连时 guild_marks_ready 重复连接加 is_connected 守卫 - 相机 look_at 零向量守卫(首帧/传送落点) - 测试:equip/love/guild 断言更新,79 项中 78 绿(game_camera_test 为 HEAD 既有失败);真服冒烟 LIVE_SMOKE PASS(192.168.21.203 全链路) - docs/CLIENT-GAP.md 同步增量 129 Co-Authored-By: Claude Code <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018kUFvQGYusuY3dkfGitmAe
This commit is contained in:
@@ -30,6 +30,7 @@ var _mobile_inventory_title: Label
|
||||
var _mobile_inventory_scroll: ScrollContainer
|
||||
var _mobile_inventory_list: VBoxContainer
|
||||
var _mobile_deposit_pending := {}
|
||||
var _change_pw_dialog: ConfirmationDialog
|
||||
|
||||
const SAFE_PAGE_SLOTS := 45
|
||||
const SAFE_WINDOW := 3
|
||||
@@ -62,6 +63,10 @@ func get_mobile_window() -> Control:
|
||||
return _root
|
||||
|
||||
func close() -> void:
|
||||
# 对齐原版 SafeboxWindow.Close():先发 /safebox_close 让服务器同步关仓
|
||||
#(CloseSafebox 命令回来后 is_safebox_open() 变 false),本地只是立即收尾。
|
||||
if client and client.has_method("safebox_close") and is_open():
|
||||
client.safebox_close()
|
||||
if item_mouse and item_mouse.has_method("unregister_owner"):
|
||||
item_mouse.unregister_owner(self)
|
||||
if item_mouse.has_method("is_attached") and item_mouse.is_attached():
|
||||
@@ -130,7 +135,9 @@ func refresh() -> void:
|
||||
_page = clampi(_page, 0, pages - 1)
|
||||
_title.text = "仓库(第 %d/%d 页)" % [_page + 1, pages]
|
||||
_page_label.text = "%d / %d" % [_page + 1, pages]
|
||||
_gold.text = "仓库金币: %d" % client.get_safebox_gold()
|
||||
# 40250 无仓库金钱存取协议(HEADER_CG_SAFEBOX_MONEY 不存在,GC 84 从不发送,
|
||||
# 原版 RefreshSafeboxMoney 也是 pass)——只读展示,通常恒 0。
|
||||
_gold.text = "仓库金币: %d(本版本不可存取)" % client.get_safebox_gold()
|
||||
for c in _list.get_children():
|
||||
c.queue_free()
|
||||
_render_grid()
|
||||
@@ -302,6 +309,67 @@ func _ask_password(kind: String) -> void:
|
||||
else:
|
||||
_password_dialog.popup_centered()
|
||||
|
||||
# 修改仓库密码:/safebox_change_password <旧> <新>(服务器两个参数各限 1..6 位)。
|
||||
func _ask_change_password() -> void:
|
||||
if not is_open():
|
||||
return
|
||||
if is_instance_valid(_change_pw_dialog):
|
||||
_change_pw_dialog.queue_free()
|
||||
_change_pw_dialog = ConfirmationDialog.new()
|
||||
_change_pw_dialog.title = "修改仓库密码"
|
||||
_change_pw_dialog.dialog_text = "旧密码 / 新密码(1~6 位)/ 再输入一次新密码"
|
||||
_change_pw_dialog.ok_button_text = "确认"
|
||||
_change_pw_dialog.cancel_button_text = "取消"
|
||||
var box := VBoxContainer.new()
|
||||
var edits: Array[LineEdit] = []
|
||||
for hint in ["旧密码", "新密码", "确认新密码"]:
|
||||
var row := HBoxContainer.new()
|
||||
var lbl := Label.new()
|
||||
lbl.text = hint
|
||||
lbl.custom_minimum_size = Vector2(96, 0)
|
||||
row.add_child(lbl)
|
||||
var edit := LineEdit.new()
|
||||
edit.secret = true
|
||||
edit.max_length = 6
|
||||
edit.placeholder_text = hint
|
||||
edit.virtual_keyboard_type = LineEdit.KEYBOARD_TYPE_NUMBER
|
||||
edit.custom_minimum_size = Vector2(360, 44) if _mobile_mode else Vector2(160, 28)
|
||||
row.add_child(edit)
|
||||
box.add_child(row)
|
||||
edits.append(edit)
|
||||
_change_pw_dialog.add_child(box)
|
||||
_change_pw_dialog.confirmed.connect(func() -> void:
|
||||
var old_pw := edits[0].text
|
||||
var new_pw := edits[1].text
|
||||
if new_pw != edits[2].text:
|
||||
if is_instance_valid(_status):
|
||||
_status.text = "两次输入的新密码不一致"
|
||||
elif old_pw.is_empty() or new_pw.is_empty() or new_pw.length() > 6 \
|
||||
or old_pw.length() > 6:
|
||||
if is_instance_valid(_status):
|
||||
_status.text = "密码须为 1~6 位"
|
||||
elif not client.safebox_change_password(old_pw, new_pw):
|
||||
if is_instance_valid(_status):
|
||||
_status.text = "修改密码请求发送失败"
|
||||
else:
|
||||
if is_instance_valid(_status):
|
||||
_status.text = "已提交修改密码请求"
|
||||
_change_pw_dialog.queue_free()
|
||||
_change_pw_dialog = null)
|
||||
_change_pw_dialog.canceled.connect(func() -> void:
|
||||
_change_pw_dialog.queue_free()
|
||||
_change_pw_dialog = null)
|
||||
if _mobile_mode:
|
||||
_change_pw_dialog.set_meta("mobile_modal", true)
|
||||
_change_pw_dialog.set_meta("mobile_title", "修改仓库密码")
|
||||
_change_pw_dialog.min_size = Vector2i(560, 320)
|
||||
_change_pw_dialog.size = Vector2i(560, 320)
|
||||
_root.add_child(_change_pw_dialog)
|
||||
if _mobile_mode:
|
||||
_change_pw_dialog.popup_centered(Vector2i(560, 320))
|
||||
else:
|
||||
_change_pw_dialog.popup_centered()
|
||||
|
||||
func _row(it: Dictionary) -> Control:
|
||||
var row := HBoxContainer.new()
|
||||
row.custom_minimum_size = Vector2(300, 0)
|
||||
@@ -368,6 +436,13 @@ func _build(parent: Node) -> void:
|
||||
next.size = Vector2(28, 24)
|
||||
next.pressed.connect(func(): _change_page(1))
|
||||
_root.add_child(next)
|
||||
var change_pw := Button.new()
|
||||
change_pw.text = "改密"
|
||||
change_pw.position = Vector2(186, 6)
|
||||
change_pw.size = Vector2(42, 24)
|
||||
change_pw.add_theme_font_size_override("font_size", 11)
|
||||
change_pw.pressed.connect(_ask_change_password)
|
||||
_root.add_child(change_pw)
|
||||
_gold = Label.new()
|
||||
_gold.text = "仓库金币: 0"
|
||||
_gold.position = Vector2(12, 30)
|
||||
|
||||
Reference in New Issue
Block a user