From 65afe0491801f19d4a1a1e79cf9fa948b53d613f Mon Sep 17 00:00:00 2001 From: VuNgocHaiC7 Date: Fri, 20 Mar 2026 16:47:14 +0700 Subject: [PATCH] update money in inventory when pickup money and button confirm dlgAwarld for item_info setActive false --- .../Scripts/Network/CSNetwork/GPDataType.cs | 5 + .../Scripts/UI/DlgAward/CDlgAward.cs | 6 +- Assets/Scripts/CECHostPlayer.Inventory.cs | 29 ++- Assets/Scripts/CECHostPlayer.cs | 217 ++++++++++++++++++ 4 files changed, 254 insertions(+), 3 deletions(-) diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs index 09481fa9a6..7bc1b77fee 100644 --- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs +++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs @@ -1588,6 +1588,11 @@ namespace CSNetwork.GPDataType public byte byPackage; public byte bySlot; } + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct cmd_pickup_money + { + public int amount; + } [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct cmd_produce_start diff --git a/Assets/PerfectWorld/Scripts/UI/DlgAward/CDlgAward.cs b/Assets/PerfectWorld/Scripts/UI/DlgAward/CDlgAward.cs index 965c66e850..adf8dc319f 100644 --- a/Assets/PerfectWorld/Scripts/UI/DlgAward/CDlgAward.cs +++ b/Assets/PerfectWorld/Scripts/UI/DlgAward/CDlgAward.cs @@ -401,7 +401,9 @@ namespace BrewMonster.Scripts.UI break; } } - } + + itemInfoPanel.SetActive(false); + } void OnAwardItemClicked(string hint, bool isOn, AwardItem awardItem) { @@ -513,4 +515,4 @@ namespace BrewMonster.Scripts.UI LayoutRebuilder.ForceRebuildLayoutImmediate(parent); } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/CECHostPlayer.Inventory.cs b/Assets/Scripts/CECHostPlayer.Inventory.cs index ee6d652df0..b965df4f0e 100644 --- a/Assets/Scripts/CECHostPlayer.Inventory.cs +++ b/Assets/Scripts/CECHostPlayer.Inventory.cs @@ -196,6 +196,7 @@ namespace BrewMonster { var money = GPDataTypeHelper.FromBytes(data); SetMoneyAmount(money.amount); + m_iMaxMoney = (int)money.max_amount; EC_InventoryUI ui = GameObject.FindFirstObjectByType(); if (ui != null && ui.gameObject.activeInHierarchy) @@ -797,7 +798,33 @@ namespace BrewMonster // Add money amount private int AddMoneyAmount(int iAmount) { - m_iMoneyCnt += (uint)iAmount; + long next = (long)m_iMoneyCnt + iAmount; + if (next < 0) + { + next = 0; + } + + if(m_iMaxMoney > 0 && next > m_iMaxMoney) + { + next = m_iMaxMoney; + } + + m_iMoneyCnt = (uint)next; + + ulong amount = m_iMoneyCnt; + ulong maxAmount = m_iMaxMoney > 0 ? (ulong)m_iMaxMoney : amount; + + EC_InventoryUI ui = GameObject.FindFirstObjectByType(); + if(ui != null && ui.gameObject.activeInHierarchy) + { + ui.UpdateMoney(amount, maxAmount); + } + else + { + EC_InventoryUI.CacheMoney(amount, maxAmount); + } + + //m_iMoneyCnt += (uint)iAmount; return (int)m_iMoneyCnt; } diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index 9531539004..37320efbc2 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -544,6 +544,9 @@ namespace BrewMonster case EC_MsgDef.MSG_HST_USEITEM: OnMsgHstUseItem(Msg); break; + case EC_MsgDef.MSG_HST_PICKUPMONEY: + OnMsgHstPickupMoney(Msg); + break; case EC_MsgDef.MSG_HST_ATKRESULT: OnMsgHstAttackResult(Msg); break; case EC_MsgDef.MSG_HST_ATTACKONCE: OnMsgHstAttackOnce(Msg); break; case EC_MsgDef.MSG_HST_ATTACKED: OnMsgHstAttacked(Msg); break; @@ -612,11 +615,206 @@ namespace BrewMonster } }*/ } + + private void OnMsgHstPickupMoney(ECMSG msg) + { + var data = msg.dwParam1 as byte[]; + if (data == null || data.Length == 0) + return; + + cmd_pickup_money pCmd = GPDataTypeHelper.FromBytes(data); + AddMoneyAmount(pCmd.amount); + CECGameRun pGameRun = EC_Game.GetGameRun(); + pGameRun.AddFixedMessage((int)FixedMsg.FIXMSG_PICKUPMONEY); + BubbleText((int)BubbleTextType.BUBBLE_MONEY, (uint)pCmd.amount); + } + + private void BubbleText(int iIndex, uint dwNum, int p1 = 0) + { + bool isHost = IsHostPlayer(); + + if (isHost) + { + CECHostPlayer pHost = EC_Game.GetGameRun().GetHostPlayer(); + if (iIndex == (int)BubbleTextType.BUBBLE_EXP) + { + bool hasBookExp = pHost != null && pHost.m_ReincarnationTome.tome_active != 0; + int msgId = (int)dwNum > 0 ? + (hasBookExp ? (int)FixedMsg.FIXMSG_GOT_BOOKEXP : (int)FixedMsg.FIXMSG_GOTEXP) : + (int)FixedMsg.FIXMSG_LOSTEXP; + EC_Game.GetGameRun()?.AddFixedChannelMsg(msgId, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum); + } + + if (iIndex == (int)BubbleTextType.BUBBLE_SP) + { + EC_Game.GetGameRun()?.AddFixedChannelMsg((int)FixedMsg.FIXMSG_GOTSP, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum); + } + + if (iIndex == (int)BubbleTextType.BUBBLE_REALMEXP) + { + EC_Game.GetGameRun()?.AddFixedChannelMsg((int)FixedMsg.FIXMSG_GOT_REALMEXP, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum); + } + } + + Vector3 vPos; + if (IsInChariot()) + { + var dummy = GetDummyModel((int)PLAYERMODEL_TYPE.PLAYERMODEL_DUMMYTYPE2); + if (dummy != null) + { + // TODO + //vPos = GetPos() + g_vAxisY * (dummy.GetModelAABB().Extents.y * 2.3f); + } + else + { + vPos = EC_Utility.ToVector3(GetPos()) + g_vAxisY * (m_aabb.Extents.y * 2.5f); + } + + //CECBubbleDecal* pBubbleDecal = m_pBubbleTexts->AddDecal(vPos, CECDecal::DCID_ICONDECAL); + //CECIconDecal* pDecal = (CECIconDecal*)pBubbleDecal->GetDecal(); + + //switch (iIndex) + //{ + // case BUBBLE_DAMAGE: + + // if (!bHost) + // dwCol = A3DCOLORRGB(237, 56, 0); + + // if (p1 & 0x0001) + // pDecal->AddIcon(CECImageRes::IMG_DEADLYSTRIKE, 0, dwCol); + // else if (p1 & 0x0002) + // pDecal->AddIcon(CECImageRes::IMG_RETORT, 0, dwCol); + + // pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol); + // break; + + // case BUBBLE_EXP: + + // pDecal->AddIcon(CECImageRes::IMG_GOTEXP, 0, dwCol); + // pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol); + // // pDecal->SetScreenPos(80, 70); + // // pDecal->EnableScreenPos(true); + // break; + + // case BUBBLE_SP: + + // pDecal->AddIcon(CECImageRes::IMG_GOTSP, 0, dwCol); + // pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol); + // // pDecal->SetScreenPos(80, 90); + // // pDecal->EnableScreenPos(true); + // break; + + // case BUBBLE_MONEY: + + // pDecal->AddIcon(CECImageRes::IMG_GOTMONEY, 0, dwCol); + // pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol); + // break; + + // case BUBBLE_LEVELUP: + + // pDecal->AddIcon(CECImageRes::IMG_LEVELUP, 0, dwCol); + // break; + + // case BUBBLE_HITMISSED: + + // if (!bHost) + // dwCol = A3DCOLORRGB(237, 56, 0); + + // pDecal->AddIcon(CECImageRes::IMG_HITMISSED, 0, dwCol); + // break; + + // case BUBBLE_INVALIDHIT: + + // if (!bHost) + // dwCol = A3DCOLORRGB(237, 56, 0); + + // pDecal->AddIcon(CECImageRes::IMG_INVALIDHIT, 0, dwCol); + // break; + + // case BUBBLE_IMMUNE: + + // if (!bHost) + // dwCol = A3DCOLORRGB(237, 56, 0); + + // pDecal->AddIcon(CECImageRes::IMG_IMMUNE, 0, dwCol); + // break; + + // case BUBBLE_HPWARN: + + // dwCol = A3DCOLORRGB(255, 255, 255); + // pDecal->AddIcon(CECImageRes::IMG_HPWARN, 0, dwCol); + // break; + + // case BUBBLE_MPWARN: + + // dwCol = A3DCOLORRGB(255, 255, 255); + // pDecal->AddIcon(CECImageRes::IMG_MPWARN, 0, dwCol); + // break; + + // case BUBBLE_REBOUND: + + // pDecal->AddIcon(CECImageRes::IMG_REBOUND, 0, dwCol); + // pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol); + // break; + + // case BUBBLE_BEAT_BACK: + + // pDecal->AddIcon(CECImageRes::IMG_BEAT_BACK, 0, dwCol); + // pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol); + // break; + + // case BUBBLE_ADD: + + // dwCol = A3DCOLORRGB(126, 206, 244); + // pDecal->AddIcon(CECImageRes::IMG_ADD, 0, dwCol); + // pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol); + // break; + + // case BUBBLE_DODGE_DEBUFF: + + // if (!bHost) + // dwCol = A3DCOLORRGB(237, 56, 0); + + // pDecal->AddIcon(CECImageRes::IMG_DODGE_DEBUFF, 0, dwCol); + // break; + + // default: + // return; + } + else + { + vPos = EC_Utility.ToVector3(GetPos()) + g_vAxisY * (m_aabb.Extents.y * 2.5f); + } + } + + private bool IsInChariot() + { + CECGameRun pRun = EC_Game.GetGameRun(); + if(pRun == null) + return false; + + CECHostPlayer pHost = pRun.GetHostPlayer(); + if (pHost && pHost.GetBattleInfo().IsChariotWar() && GetShapeType() == (int)PLAYERMODEL_TYPE.PLAYERMODEL_DUMMYTYPE2 + && GetDummyModel((int)PLAYERMODEL_TYPE.PLAYERMODEL_DUMMYTYPE2)) + { + return true; + } + return false; + } + + private BATTLEINFO m_BattleInfo; + + private BATTLEINFO GetBattleInfo() + { + return m_BattleInfo; + } + private void NotifyUIUpdateTeam(bool showDialog = false) { //try //{ // var ui = EC_Game.GetGameRun()?.GetUIManager()?.GetInGameUIMan(); + // var ui = EC_Game.GetGameRun()?.GetUIManager()?.GetInGameUIMan(); // if (ui is CECGameUIMan gui) // gui.UpdateTeam(false); //} @@ -3319,6 +3517,25 @@ namespace BrewMonster LIES_DISABLEFIGHT = 0x000B, } + public enum BubbleTextType + { + BUBBLE_DAMAGE = 0, + BUBBLE_EXP, + BUBBLE_SP, + BUBBLE_MONEY, + BUBBLE_LEVELUP, + BUBBLE_HITMISSED, + BUBBLE_INVALIDHIT, + BUBBLE_IMMUNE, + BUBBLE_HPWARN, + BUBBLE_MPWARN, + BUBBLE_REBOUND, // ·´µ¯ + BUBBLE_BEAT_BACK, // ·´»÷ + BUBBLE_ADD, // ÎüѪµÄ¼ÓºÅ + BUBBLE_DODGE_DEBUFF, + BUBBLE_REALMEXP, + } + // ½øÈë»ùµØÐÅÏ¢ public struct FACTION_FORTRESS_ENTER {