diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs
index 74af8952da..b98021b878 100644
--- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWork.cs
@@ -601,7 +601,7 @@ namespace BrewMonster.Scripts
case CECHPWork.Host_work_ID.WORK_TRACEOBJECT: pWork = new CECHPWorkTrace(this); break;
case CECHPWork.Host_work_ID.WORK_HACKOBJECT: pWork = new CECHPWorkMelee(this); break;
case CECHPWork.Host_work_ID.WORK_SPELLOBJECT: pWork = new CECHPWorkSpell(this); break;
- //case CECHPWork.Host_work_ID.WORK_USEITEM: pWork = new CECHPWorkUse(this); break;
+ case CECHPWork.Host_work_ID.WORK_USEITEM: pWork = new CECHPWorkUse(this); break;
//case CECHPWork.Host_work_ID.WORK_DEAD: pWork = new CECHPWorkDead(this); break;
//case CECHPWork.Host_work_ID.WORK_FOLLOW: pWork = new CECHPWorkFollow(this); break;
case CECHPWork.Host_work_ID.WORK_FLYOFF: pWork = new CECHPWorkFly(this); break;
diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkUse.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkUse.cs
new file mode 100644
index 0000000000..32631d021e
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkUse.cs
@@ -0,0 +1,189 @@
+using BrewMonster.Scripts;
+using BrewMonster.Scripts.Managers;
+using CSNetwork.GPDataType;
+using UnityEngine;
+
+namespace BrewMonster.Scripts
+{
+ ///
+ /// Host player work: Use item
+ /// 主角玩家工作:使用物品
+ ///
+ public class CECHPWorkUse : CECHPWork
+ {
+ // Fields / 字段
+ private int m_idItem; // Item template ID / 物品模板ID
+ private int m_idTarget; // Target object ID / 目标对象ID
+ private bool m_bWorkForMonsterSpirit; // Is this work for monster spirit gathering? / 是否为命轮采集工作
+ private CECCounter m_UseTimeCnt; // Use time counter / 使用时间计数器
+
+ ///
+ /// Constructor / 构造函数
+ ///
+ public CECHPWorkUse(CECHPWorkMan pWorkMan) : base(Host_work_ID.WORK_USEITEM, pWorkMan)
+ {
+ m_dwMask = Work_mask.MASK_USEITEM;
+ m_dwTransMask = Work_mask.MASK_STAND | Work_mask.MASK_MOVETOPOS;
+ Reset();
+ }
+
+ ///
+ /// Reset work / 重置工作
+ ///
+ public override void Reset()
+ {
+ base.Reset();
+
+ m_idItem = 0;
+ m_idTarget = 0;
+ m_bWorkForMonsterSpirit = false;
+
+ if (m_UseTimeCnt == null)
+ m_UseTimeCnt = new CECCounter();
+
+ m_UseTimeCnt.SetPeriod(100);
+ m_UseTimeCnt.Reset();
+ }
+
+ ///
+ /// Copy work data / 复制工作数据
+ ///
+ public override bool CopyData(CECHPWork pWork)
+ {
+ if (!base.CopyData(pWork))
+ return false;
+
+ CECHPWorkUse pSrc = pWork as CECHPWorkUse;
+ if (pSrc == null)
+ return false;
+
+ m_idItem = pSrc.m_idItem;
+ m_idTarget = pSrc.m_idTarget;
+ m_bWorkForMonsterSpirit = pSrc.m_bWorkForMonsterSpirit;
+
+ m_UseTimeCnt.SetPeriod(pSrc.m_UseTimeCnt.GetPeriod());
+ m_UseTimeCnt.SetCounter(pSrc.m_UseTimeCnt.GetCounter());
+
+ return true;
+ }
+
+ ///
+ /// On first tick / 第一帧执行
+ ///
+ protected override void OnFirstTick()
+ {
+ if (m_pHost == null)
+ return;
+
+ m_pHost.m_iMoveMode = (int)MoveMode.MOVE_STAND;
+
+ EC_IvtrItem pItem = EC_IvtrItem.CreateItem(m_idItem, 0, 1);
+ if (pItem == null)
+ return;
+
+ if (m_bWorkForMonsterSpirit)
+ {
+ // Play gather monster spirit action / 播放采集命轮动作
+ // TODO: Implement PlayGatherMonsterSpiritAction if needed
+ // m_pHost.PlayGatherMonsterSpiritAction();
+ Debug.Log($"[CECHPWorkUse] Playing gather monster spirit action for item {m_idItem}");
+ }
+ else
+ {
+ // Play start use item action / 播放开始使用物品动作
+ // TODO: Implement PlayStartUseItemAction if needed
+ // m_pHost.PlayStartUseItemAction(m_idItem);
+ Debug.Log($"[CECHPWorkUse] Playing start use item action for item {m_idItem}");
+ }
+ }
+
+ ///
+ /// Work is cancelled / 工作被取消
+ ///
+ public override void Cancel()
+ {
+ if (m_idTarget != 0 && m_pHost != null)
+ {
+ m_pHost.TurnFaceTo(0);
+ }
+
+ base.Cancel();
+
+ // TODO: Implement AP_ActionEvent if needed
+ // AP_ActionEvent(AP_EVENT_STOPUSEITEM);
+ Debug.Log("[CECHPWorkUse] Work cancelled - STOPUSEITEM event");
+ }
+
+ ///
+ /// Set parameters / 设置参数
+ ///
+ /// Item template ID / 物品模板ID
+ /// Use time in milliseconds / 使用时间(毫秒)
+ /// Target object ID / 目标对象ID
+ /// Is for monster spirit gathering / 是否为命轮采集
+ public void SetParams(int idItem, float dwUseTime, int idTarget, bool bWorkForMonsterSpirit)
+ {
+ m_idItem = idItem;
+ m_idTarget = idTarget;
+ m_bWorkForMonsterSpirit = bWorkForMonsterSpirit;
+
+ m_UseTimeCnt.SetPeriod(dwUseTime);
+ m_UseTimeCnt.Reset();
+ }
+
+ ///
+ /// Tick routine / 每帧更新
+ ///
+ public override bool Tick(float dwDeltaTime)
+ {
+ base.Tick(dwDeltaTime);
+
+ // Update use time counter / 更新使用时间计数器
+ if (m_UseTimeCnt.IncCounter(dwDeltaTime))
+ {
+ m_UseTimeCnt.Reset(true);
+ m_bFinished = true;
+ }
+
+ // Turn face to target if needed / 如果有目标则面向目标
+ if (m_idTarget != 0 && m_pHost != null)
+ {
+ m_pHost.TurnFaceTo(m_idTarget);
+ }
+
+ return true;
+ }
+
+ ///
+ /// Get item template ID / 获取物品模板ID
+ ///
+ public int GetItem()
+ {
+ return m_idItem;
+ }
+
+ ///
+ /// Get target object ID / 获取目标对象ID
+ ///
+ public int GetTarget()
+ {
+ return m_idTarget;
+ }
+
+ ///
+ /// Is this work for monster spirit gathering? / 是否为命轮采集工作
+ ///
+ public bool IsWorkForMonsterSpirit()
+ {
+ return m_bWorkForMonsterSpirit;
+ }
+
+ ///
+ /// Get use time counter / 获取使用时间计数器
+ ///
+ public CECCounter GetUseTimeCnt()
+ {
+ return m_UseTimeCnt;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkUse.cs.meta b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkUse.cs.meta
new file mode 100644
index 0000000000..025f99e9b7
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkUse.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 965c8f617755486429a9f1bb88521065
\ No newline at end of file
diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs b/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs
index 8b0b0af771..b8b3e9b0f9 100644
--- a/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs
@@ -134,6 +134,71 @@ namespace BrewMonster.Scripts.Managers
{
RefreshAll();
}
+
+ UpdateCooldownOverlays();
+ }
+
+ ///
+ /// Update all cooldown overlays
+ /// 更新所有冷却遮罩
+ ///
+ public void UpdateCooldownOverlays()
+ {
+ // Update inventory pack cooldowns
+ // 更新背包冷却
+ UpdatePackageCooldowns(inventoryPackButtons, PKG_INVENTORY);
+
+ // Equipment pack doesn't typically have cooldowns but update anyway
+ // 装备栏通常没有冷却但也更新
+ UpdatePackageCooldowns(equipmentPackButtons, PKG_EQUIPMENT);
+ }
+
+ ///
+ /// Update cooldown overlays for a specific package
+ /// 更新特定包裹的冷却遮罩
+ ///
+ private void UpdatePackageCooldowns(List