From 8f916ee88cc382db1f96a60729484dc873a98eb3 Mon Sep 17 00:00:00 2001 From: VuNgocHaiC7 Date: Thu, 29 Jan 2026 13:58:15 +0700 Subject: [PATCH 1/6] use item but cooldown don't active --- .../Scripts/Managers/EC_HPWork.cs | 2 +- .../Scripts/Managers/EC_HPWorkUse.cs | 189 + .../Scripts/Managers/EC_HPWorkUse.cs.meta | 2 + .../Scripts/Managers/EC_InventoryUI.cs | 317 +- .../Managers/EC_IvtrItem/EC_IvtrDoubleExp.cs | 8 + .../Managers/EC_IvtrItem/EC_IvtrTargetItem.cs | 33 + .../Managers/EC_IvtrItem/EC_IvtrTossMat.cs | 8 + Assets/PerfectWorld/Scripts/Move/CECPlayer.cs | 6 + .../CSNetwork/C2SCommand/C2SCommandFactory.cs | 20 + .../Scripts/Network/CSNetwork/GPDataType.cs | 9 + .../Scripts/Network/CSNetwork/GameSession.cs | 9 + .../Scripts/Network/UnityGameSession.cs | 4 + .../Scripts/Objet/Shortcut/CECShortcutSet.cs | 11 + .../Scripts/UI/Dialogs/AUIDialog.cs | 17 + .../Scripts/UI/GamePlay/AUIImagePicture.cs | 28 +- .../Scripts/UI/GamePlay/CdlgQuickBar.cs | 124 + .../UI/GamePlay/SkillUI/AUIClockIcon.cs | 6 + .../Scripts/UI/Inventory/CECSCItem.cs | 242 + .../Scripts/UI/Inventory/CECSCItem.cs.meta | 2 + .../Scripts/UI/Inventory/CECSCPet.cs | 197 + .../Scripts/UI/Inventory/CECSCPet.cs.meta | 2 + Assets/PerfectWorld/UI/TaskIcon/whitebox.png | Bin 0 -> 2097 bytes .../UI/TaskIcon/whitebox.png.meta | 173 + Assets/Prefabs/UI/InventoryUI.prefab | 11568 +++++++++++++--- Assets/Scripts/CECGameRun.cs | 178 + Assets/Scripts/CECHostPlayer.cs | 539 +- 26 files changed, 11735 insertions(+), 1959 deletions(-) create mode 100644 Assets/PerfectWorld/Scripts/Managers/EC_HPWorkUse.cs create mode 100644 Assets/PerfectWorld/Scripts/Managers/EC_HPWorkUse.cs.meta create mode 100644 Assets/PerfectWorld/Scripts/UI/Inventory/CECSCItem.cs create mode 100644 Assets/PerfectWorld/Scripts/UI/Inventory/CECSCItem.cs.meta create mode 100644 Assets/PerfectWorld/Scripts/UI/Inventory/CECSCPet.cs create mode 100644 Assets/PerfectWorld/Scripts/UI/Inventory/CECSCPet.cs.meta create mode 100644 Assets/PerfectWorld/UI/TaskIcon/whitebox.png create mode 100644 Assets/PerfectWorld/UI/TaskIcon/whitebox.png.meta 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