fix: 装备属性面板避让逻辑 + 多项功能更新
- item_tooltip_view.gd: 新增 avoid_rect 属性,tooltip 与装备窗口重叠时自动推到左侧 - inventory_ui.gd: 悬停装备时传入窗口矩形作为避让区域 - 包含其他累积的功能开发和测试文件
This commit is contained in:
+39
-1
@@ -35,6 +35,8 @@ const SILENT_CODES := [
|
||||
"", "OK", "PASSIVE", "BAD_SLOT", "NO_SKILL_DATA", "GUILD_ROUTED",
|
||||
"TOGGLE_OFF", "SPECIAL_SKILL", "PRIVATE_SHOP", "RESERVED", "NO_RIDING_SKILL",
|
||||
"CANNOT_ACT", "ALREADY_CASTING",
|
||||
"POLYMORPHED", "WEARING_DRESS", "HOLDING_PICKAXE",
|
||||
"HORSE_CANNOT_USE", "GRAPHIC_CANNOT_USE",
|
||||
]
|
||||
|
||||
var client: Object # M2Client
|
||||
@@ -47,6 +49,12 @@ var in_safe := false # CInstanceBase::IsInSafe()
|
||||
var is_fishing := false # CInstanceBase::IsFishingMode()
|
||||
var is_using_skill := false # CInstanceBase::IsUsingSkill()
|
||||
var can_act := true # CanProcessNetworkStatePacket(死亡/晕眩/击退 → false)
|
||||
var polymorphed := false # CInstanceBase::IsPoly()
|
||||
var wearing_dress := false # CInstanceBase::IsWearingDress() shape 201
|
||||
var holding_pickaxe := false # CInstanceBase::IsHoldingPickAxe() weapon 29101..29110
|
||||
var horse_can_use := true # CInstanceBase::SHORSE::CanUseSkill()
|
||||
var graphic_can_use := true # CGraphicThingInstance::CanUseSkill()
|
||||
var guild_war_active := false # CPythonGuild::IsDoingGuildWar()
|
||||
var private_shop_open := false # IsOpenPrivateShop()
|
||||
var level_limit := true # m_sysIsLevelLimit
|
||||
var cooltime_check := true # m_sysIsCoolTime
|
||||
@@ -254,7 +262,21 @@ func can_use_skill() -> Dictionary:
|
||||
and _skill_level(RIDING_SKILL_INDEX) < RIDING_SKILL_MASTER_LEVEL:
|
||||
return _no("NO_RIDING_SKILL")
|
||||
|
||||
# return pkInstMain->CanUseSkill(); —— 死亡 / 晕眩 / 击退 / 施法中
|
||||
# CInstanceBase::CanUseSkill():这些是动作/模型层的硬门,发生在
|
||||
# __CheckSkillUsable(安全区、武器、箭矢、HP/SP、冷却)之前。
|
||||
if polymorphed:
|
||||
return _no("POLYMORPHED")
|
||||
if wearing_dress:
|
||||
return _no("WEARING_DRESS")
|
||||
if holding_pickaxe:
|
||||
return _no("HOLDING_PICKAXE")
|
||||
if not horse_can_use:
|
||||
return _no("HORSE_CANNOT_USE")
|
||||
if not graphic_can_use:
|
||||
return _no("GRAPHIC_CANNOT_USE")
|
||||
|
||||
# m_GraphicThingInstance::CanUseSkill() 之外的本地网络状态门——死亡 /
|
||||
# 晕眩 / 击退 / 施法中。
|
||||
if not can_act:
|
||||
return _no("CANNOT_ACT")
|
||||
|
||||
@@ -386,6 +408,22 @@ func use_skill(skill_id: int, is_active := false) -> Dictionary:
|
||||
|
||||
return _resolve_target(skill_id)
|
||||
|
||||
# CPythonPlayer::UseGuildSkill —— 公会技走独立的 CG_GUILD_USE_SKILL 入口,不经过
|
||||
# 普通目标解析;但仍受主角动作门、槽位、冷却和 ONLY_FOR_GUILD_WAR 限制。
|
||||
func use_guild_skill(skill_id: int) -> Dictionary:
|
||||
var b := can_use_skill()
|
||||
if not b.ok:
|
||||
return b
|
||||
if skill_id < 0 or skill_id >= SKILL_MAX_NUM:
|
||||
return _no("BAD_SLOT")
|
||||
if table == null or not table.has(skill_id):
|
||||
return _no("NO_SKILL_DATA")
|
||||
if _check_rest_skill_cooltime():
|
||||
return _no("WAIT_COOLTIME")
|
||||
if table.is_only_for_guild_war(skill_id) and not guild_war_active:
|
||||
return _no("ONLY_FOR_GUILD_WAR")
|
||||
return {"ok": true, "code": "OK", "target_vid": 0, "guild": true}
|
||||
|
||||
# __UseSkill 里的目标分支(PythonPlayerSkill.cpp:520-650)。
|
||||
# 判目标「类型」是否合法并回传解析到的 vid;射程外回 RESERVED(带 range_cm / charge),
|
||||
# 由调用方 __ReserveUseSkill。扇形·圆形多目标 SendAddFlyTargetingPacket 归 §3.4/§3.9。
|
||||
|
||||
Reference in New Issue
Block a user