From b4b2f9ac968b64084d3e1701f913549b793b561f Mon Sep 17 00:00:00 2001 From: NguyenVanDat Date: Wed, 25 Feb 2026 10:26:49 +0700 Subject: [PATCH 1/2] finish clear tessera --- .../Scripts/Network/CSNetwork/GPDataType.cs | 6 ++ .../Scripts/Network/CSNetwork/GameSession.cs | 4 +- .../Scripts/UI/Dialogs/DlgInstall.cs | 88 ++++++++++--------- Assets/Scripts/CECHostPlayer.Inventory.cs | 14 +++ Assets/Scripts/CECHostPlayer.cs | 1 + 5 files changed, 69 insertions(+), 44 deletions(-) diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs index f54a2439a4..932da1b3c0 100644 --- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs +++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs @@ -2575,5 +2575,11 @@ namespace CSNetwork.GPDataType public float mp_factor; public int cur_mp; }; + [StructLayout(LayoutKind.Sequential, Pack = 1)] + public struct cmd_clear_tessera + { + public ushort equip_idx; + public uint cost; + }; } diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs index 59da4b195c..af00498530 100644 --- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs +++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs @@ -1,6 +1,5 @@ using BrewMonster; using BrewMonster.Common; -using BrewMonster.Managers; using BrewMonster.Network; using BrewMonster.Scripts.Skills; using BrewMonster.UI; @@ -1124,6 +1123,9 @@ namespace CSNetwork case CommandID.EMBED_ITEM: EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_EMBEDITEM, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader); break; + case CommandID.CLEAR_TESSERA: + EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_CLEARTESSERA, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader); + break; default: #if UNITY_EDITOR if (isDebug) diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgInstall.cs b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgInstall.cs index 7638eb5ae7..7d233e6754 100644 --- a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgInstall.cs +++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgInstall.cs @@ -424,34 +424,32 @@ namespace BrewMonster { CECHostPlayer pHost = GetHostPlayer(); string message = ""; + int nMoney = m_install_price; + if (nMoney > pHost.GetMoneyAmount()) + { + message = GetGameUIMan().GetStringFromTable(226); + CECUIManager.Instance.ShowMessageBox(new MessageBoxData() + { + Message = message, + Dlg = this + }); + return; + } + EC_IvtrItem pIvtrA = m_SelectedEquip; + if (!pIvtrA.IsEquipment()) + { + message = GetGameUIMan().GetStringFromTable(223); + CECUIManager.Instance.ShowMessageBox(new MessageBoxData() + { + Message = message, + Dlg = this + }); + return; + } + EC_IvtrEquip pEquipA = (EC_IvtrEquip)pIvtrA; if (pHost != null && m_Mode == InstallMode.Enchase) { - int nMoney = m_install_price; - if (nMoney > pHost.GetMoneyAmount()) - { - message = GetGameUIMan().GetStringFromTable(226); - CECUIManager.Instance.ShowMessageBox(new MessageBoxData() - { - Message = message, - Dlg = this - }); - return; - } - - EC_IvtrItem pIvtrA = m_SelectedEquip; - if (!pIvtrA.IsEquipment()) - { - message = GetGameUIMan().GetStringFromTable(223); - CECUIManager.Instance.ShowMessageBox(new MessageBoxData() - { - Message = message, - Dlg = this - }); - return; - } - - EC_IvtrEquip pEquipA = (EC_IvtrEquip)pIvtrA; if (m_Mode == InstallMode.Enchase) { if (pEquipA.GetEmptyHoleNum() <= 0) @@ -519,28 +517,32 @@ namespace BrewMonster Dlg = this }); } - else if (m_Mode == InstallMode.Disenchase) + } + else if (pHost != null && m_Mode == InstallMode.Disenchase) + { + if (pEquipA.GetEmptyHoleNum() == pEquipA.GetHoleNum()) { - if (pEquipA.GetEmptyHoleNum() == pEquipA.GetHoleNum()) - { - message = GetGameUIMan().GetStringFromTable(227); - CECUIManager.Instance.ShowMessageBox(new MessageBoxData() - { - Message = message, - Dlg = this - }); - return; - } - - message = GetGameUIMan().GetStringFromTable(229); - var x = new MessageBoxData() + message = GetGameUIMan().GetStringFromTable(227); + CECUIManager.Instance.ShowMessageBox(new MessageBoxData() { Message = message, - Dlg = this, - MessageBoxType = MessageBoxType.BothYesNoButton - }; - CECUIManager.Instance.ShowMessageBox(x); + Dlg = this + }); + return; } + + message = GetGameUIMan().GetStringFromTable(229); + var x = new MessageBoxData() + { + Message = message, + Dlg = this, + MessageBoxType = MessageBoxType.BothYesNoButton + }; + CECUIManager.Instance.ShowMessageBox(x); + } + else + { + BMLogger.LogError("Something go wrong with merge/reset"); } } diff --git a/Assets/Scripts/CECHostPlayer.Inventory.cs b/Assets/Scripts/CECHostPlayer.Inventory.cs index c745b5bfee..d6df0ed2b6 100644 --- a/Assets/Scripts/CECHostPlayer.Inventory.cs +++ b/Assets/Scripts/CECHostPlayer.Inventory.cs @@ -705,6 +705,20 @@ namespace BrewMonster PlayAttackEffect(pCmd.target, pCmd.skill, pCmd.level, nDamage, dwModifier & mask, 0, ref attackTime, pCmd.section); } + + public void OnMsgHstClearTessera(ECMSG Msg) + { + cmd_clear_tessera pCmd = GPDataTypeHelper.FromBytes((byte[])Msg.dwParam1); + AddMoneyAmount(-(int)pCmd.cost); + // Refresh equip's data + UnityGameSession.c2s_CmdGetItemInfo(Inventory_type.IVTRTYPE_PACK, (byte)pCmd.equip_idx); + } + // Add money amount + private int AddMoneyAmount(int iAmount) + { + m_iMoneyCnt += (uint)iAmount; + return (int)m_iMoneyCnt; + } public bool HaveHealthStones() { diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index d851a87ef9..a13acd6514 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -614,6 +614,7 @@ namespace BrewMonster case EC_MsgDef.MSG_HST_NEWTEAMMEM: OnMsgHstNewTeamMem(Msg); break; case EC_MsgDef.MSG_HST_TEAMMEMBERDATA: OnMsgHstTeamMemberData(Msg); break; case EC_MsgDef.MSG_HST_CONTINUECOMBOSKILL: OnMsgContinueComboSkill(Msg); break; + case EC_MsgDef.MSG_HST_CLEARTESSERA: OnMsgHstClearTessera(Msg); break; } /*if (bActionStartSkill) From f403b240607c74772146425c1b3ed45561b5d915 Mon Sep 17 00:00:00 2001 From: NguyenVanDat Date: Wed, 25 Feb 2026 11:12:12 +0700 Subject: [PATCH 2/2] fix message box display in line --- Assets/PerfectWorld/Scripts/UI/CDlgMessageBox.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Assets/PerfectWorld/Scripts/UI/CDlgMessageBox.cs b/Assets/PerfectWorld/Scripts/UI/CDlgMessageBox.cs index f1de87bfb4..4357f3fb8b 100644 --- a/Assets/PerfectWorld/Scripts/UI/CDlgMessageBox.cs +++ b/Assets/PerfectWorld/Scripts/UI/CDlgMessageBox.cs @@ -1,5 +1,6 @@ using System; using BrewMonster.UI; +using PerfectWorld.Scripts.Common; using UnityEngine; using TMPro; using UnityEngine.UI; @@ -73,6 +74,10 @@ namespace BrewMonster public void ShowMessageBox(MessageBoxData messageBoxData) { _messageData = messageBoxData; + // messageBoxData.Message = messageBoxData.Message? + // .Replace("\r\n", "\n") + // .Replace("\r", "\n"); + messageBoxData.Message = EC_TextFormatter.FormatForTextMeshPro(messageBoxData.Message); SetName(string.IsNullOrEmpty(messageBoxData.Title) ? "" : messageBoxData.Title); messageText.text = string.IsNullOrEmpty(messageBoxData.Message) ? "" : messageBoxData.Message;