diff --git a/Assets/PerfectWorld/Prefab/UI/MessageBox.prefab b/Assets/PerfectWorld/Prefab/UI/MessageBox.prefab index ac34a8df7b..824b9eab6e 100644 --- a/Assets/PerfectWorld/Prefab/UI/MessageBox.prefab +++ b/Assets/PerfectWorld/Prefab/UI/MessageBox.prefab @@ -620,7 +620,7 @@ GameObject: - component: {fileID: 8250962023850685786} - component: {fileID: 7766051278568089760} m_Layer: 5 - m_Name: ButtonOk + m_Name: ButtonYes m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -927,7 +927,7 @@ MonoBehaviour: imageProgress: {fileID: 0} titleText: {fileID: 5031655611580643013} messageText: {fileID: 7448521238108099750} - okButton: {fileID: 7766051278568089760} + _yesButton: {fileID: 7766051278568089760} _noButton: {fileID: 7010901635634620631} _closeButton: {fileID: 482550456836939169} --- !u!1 &5664175764923475105 diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs index ad6a54d52b..1603aad83f 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs @@ -1349,11 +1349,12 @@ namespace BrewMonster.Scripts string message = $"Cannot find path to target position.\nPlease move manually to target location.\n\nMap Coordinates: ({mapX}, {mapZ}, ↑{mapY})"; string messageCN = $"无法找到到目标位置的路径。\n请手动移动到目标位置。\n\n地图坐标: ({mapX}, {mapZ}, ↑{mapY})"; - CECUIManager.Instance.ShowMessageBox( - "Path Not Found", // 路径未找到 - message, // English message with map coordinates - BrewMonster.MessageBoxType.YesButton - ); + // CECUIManager.Instance.ShowMessageBox( + // "Path Not Found", // 路径未找到 + // message, // English message with map coordinates + // BrewMonster.MessageBoxType.YesButton + // ); + CECUIManager.Instance.ShowMessageBoxYes("Path Not Found", message, null, null); } else { diff --git a/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs b/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs index ae80abe037..01e7cd1a7b 100644 --- a/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs +++ b/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs @@ -709,16 +709,13 @@ namespace BrewMonster.Network } // Show disconnect message box - CECUIManager.Instance?.ShowMessageBox( - title: "Disconnected", - message: "Connection to the server has been lost.", - messageBoxType: MessageBoxType.YesButton, - onClickedYes: () => + CECUIManager.Instance?.ShowMessageBoxYes("Disconnected", "Connection to the server has been lost.", null, + () => { // Return to login screen LogoutAccount(); - } - ); + }); + } public static void c2s_CmdGoto(float x, float y, float z) diff --git a/Assets/PerfectWorld/Scripts/UI/CDlgMessageBox.cs b/Assets/PerfectWorld/Scripts/UI/CDlgMessageBox.cs index 6e6d17c54b..80a16c67bc 100644 --- a/Assets/PerfectWorld/Scripts/UI/CDlgMessageBox.cs +++ b/Assets/PerfectWorld/Scripts/UI/CDlgMessageBox.cs @@ -1,8 +1,9 @@ -using System; +using System; using BrewMonster.UI; using PerfectWorld.Scripts.Common; using UnityEngine; using TMPro; +using UnityEngine.Serialization; using UnityEngine.UI; using static CECUIManager; @@ -27,16 +28,19 @@ namespace BrewMonster { [SerializeField] private TMP_Text titleText; [SerializeField] private TMP_Text messageText; - [SerializeField] private Button okButton; + [SerializeField] private Button _yesButton; [SerializeField] private Button _noButton; [SerializeField] private Button _closeButton; + private Action _onClickedYesBtn; + private Action _onClickedNoBtn; + private MessageBoxData _messageData; public override void OnEnable() { base.OnEnable(); - okButton.onClick.AddListener(OnOkClicked); + _yesButton.onClick.AddListener(OnYesClicked); _noButton.onClick.AddListener(OnNoClicked); _closeButton.onClick.AddListener(OnCloseClicked); @@ -44,59 +48,135 @@ namespace BrewMonster public override void OnDisable() { - okButton.onClick.RemoveListener(OnOkClicked); + _yesButton.onClick.RemoveListener(OnYesClicked); _noButton.onClick.RemoveListener(OnNoClicked); _closeButton.onClick.RemoveListener(OnCloseClicked); } #region Button Events - private void OnOkClicked() + private void OnYesClicked() { EventBus.Publish(new MessageBoxEvent(1,_messageData.Dlg)); - _messageData.OnClickedYes?.Invoke(); + _onClickedYesBtn?.Invoke(); Show(false); } private void OnNoClicked() { EventBus.Publish(new MessageBoxEvent(0,_messageData.Dlg)); _messageData.OnClickedNo?.Invoke(); + _onClickedNoBtn?.Invoke(); Show(false); } private void OnCloseClicked() { // treat the close button as OK button - OnOkClicked(); + OnYesClicked(); } #endregion - public void ShowMessageBox(MessageBoxData messageBoxData) + // public void ShowMessageBox(MessageBoxData messageBoxData) + // { + // _messageData = messageBoxData; + // messageBoxData.Message = EC_TextFormatter.FormatForTextMeshPro(messageBoxData.Message); + // SetName(string.IsNullOrEmpty(messageBoxData.Title) ? "" : messageBoxData.Title); + // messageText.text = string.IsNullOrEmpty(messageBoxData.Message) ? "" : messageBoxData.Message; + // + // _yesButton.gameObject.SetActive(false); + // _noButton.gameObject.SetActive(false); + // switch (_messageData.MessageBoxType) + // { + // case MessageBoxType.YesButton: + // _yesButton.gameObject.SetActive(true); + // break; + // case MessageBoxType.NoButton: + // _noButton.gameObject.SetActive(true); + // break; + // case MessageBoxType.BothYesNoButton: + // _yesButton.gameObject.SetActive(true); + // _noButton.gameObject.SetActive(true); + // break; + // } + // Show(true); + // } + + /// + /// message with title and message only + /// + /// + /// + /// + public void ShowMessageBoxGeneral(string title, string message, AUIDialog dlg) { - _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; - - okButton.gameObject.SetActive(false); + _onClickedYesBtn = null; + _onClickedYesBtn = null; + string formattedMessage = EC_TextFormatter.FormatForTextMeshPro(message); + SetName(string.IsNullOrEmpty(title) ? "" : title); + messageText.text = string.IsNullOrEmpty(formattedMessage) ? "" : formattedMessage; _noButton.gameObject.SetActive(false); - switch (_messageData.MessageBoxType) - { - case MessageBoxType.YesButton: - okButton.gameObject.SetActive(true); - break; - case MessageBoxType.NoButton: - _noButton.gameObject.SetActive(true); - break; - case MessageBoxType.BothYesNoButton: - okButton.gameObject.SetActive(true); - _noButton.gameObject.SetActive(true); - break; - } + _yesButton.gameObject.SetActive(true); Show(true); + transform.SetAsLastSibling(); + } + + /// + /// message with yes button only + /// + /// + /// + /// + /// + public void ShowMessageBoxYes(string title, string message, AUIDialog dlg, Action onClickedYes) + { + _onClickedYesBtn = onClickedYes; + string formattedMessage = EC_TextFormatter.FormatForTextMeshPro(message); + SetName(string.IsNullOrEmpty(title) ? "" : title); + messageText.text = string.IsNullOrEmpty(formattedMessage) ? "" : formattedMessage; + _noButton.gameObject.SetActive(false); + _yesButton.gameObject.SetActive(true); + Show(true); + transform.SetAsLastSibling(); + } + + /// + /// message with no button only + /// + /// + /// + /// + /// + public void ShowMessageBoxNo(string title, string message, AUIDialog dlg, Action onClickedNo) + { + _onClickedNoBtn = onClickedNo; + string formattedMessage = EC_TextFormatter.FormatForTextMeshPro(message); + SetName(string.IsNullOrEmpty(title) ? "" : title); + messageText.text = string.IsNullOrEmpty(formattedMessage) ? "" : formattedMessage; + _yesButton.gameObject.SetActive(false); + _noButton.gameObject.SetActive(true); + Show(true); + transform.SetAsLastSibling(); + } + + /// + /// message with yes and no button + /// + /// + /// + /// + /// + /// + public void ShowMessageBoxYesAndNo(string title, string message, AUIDialog dlg, Action onClickedYes, Action onClickedNo) + { + _onClickedYesBtn = onClickedYes; + _onClickedNoBtn = onClickedNo; + string formattedMessage = EC_TextFormatter.FormatForTextMeshPro(message); + SetName(string.IsNullOrEmpty(title) ? "" : title); + messageText.text = string.IsNullOrEmpty(formattedMessage) ? "" : formattedMessage; + _yesButton.gameObject.SetActive(true); + _noButton.gameObject.SetActive(true); + Show(true); + transform.SetAsLastSibling(); } } } diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgInstall.cs b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgInstall.cs index 64879f884f..79ccccb026 100644 --- a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgInstall.cs +++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgInstall.cs @@ -431,11 +431,7 @@ namespace BrewMonster if (nMoney > pHost.GetMoneyAmount()) { message = GetGameUIMan().GetStringFromTable(226); - CECUIManager.Instance.ShowMessageBox(new MessageBoxData() - { - Message = message, - Dlg = this - }); + CECUIManager.Instance.ShowMessageBoxGeneral("", message, this); return; } @@ -443,11 +439,7 @@ namespace BrewMonster if (!pIvtrA.IsEquipment()) { message = GetGameUIMan().GetStringFromTable(223); - CECUIManager.Instance.ShowMessageBox(new MessageBoxData() - { - Message = message, - Dlg = this - }); + CECUIManager.Instance.ShowMessageBoxGeneral("", message, this); return; } @@ -457,11 +449,7 @@ namespace BrewMonster if (pEquipA.GetEmptyHoleNum() <= 0) { message = GetGameUIMan().GetStringFromTable(224); - CECUIManager.Instance.ShowMessageBox(new MessageBoxData() - { - Message = message, - Dlg = this - }); + CECUIManager.Instance.ShowMessageBoxGeneral("", message, this); return; } @@ -469,11 +457,7 @@ namespace BrewMonster if (pIvtrB == null || !pIvtrB.IsEmbeddable()) { message = GetGameUIMan().GetStringFromTable(225); - CECUIManager.Instance.ShowMessageBox(new MessageBoxData() - { - Message = message, - Dlg = this - }); + CECUIManager.Instance.ShowMessageBoxGeneral("", message, this); return; } @@ -498,11 +482,7 @@ namespace BrewMonster if (nStoneLevel > nEquipLevel) { message = GetGameUIMan().GetStringFromTable(300); - CECUIManager.Instance.ShowMessageBox(new MessageBoxData() - { - Message = message, - Dlg = this - }); + CECUIManager.Instance.ShowMessageBoxGeneral("", message, this); return; } @@ -515,46 +495,28 @@ namespace BrewMonster pHost.GetPack(InventoryConst.IVTRTYPE_PACK).UnfreezeAllItems(); message = GetGameUIMan().GetStringFromTable(228); - CECUIManager.Instance.ShowMessageBox(new MessageBoxData() - { - Message = message, - Dlg = this - }); + CECUIManager.Instance.ShowMessageBoxGeneral("", message, this); } else if (pHost != null && m_Mode == InstallMode.Disenchase) { if (pEquipA.GetEmptyHoleNum() == pEquipA.GetHoleNum()) { message = GetGameUIMan().GetStringFromTable(227); - CECUIManager.Instance.ShowMessageBox(new MessageBoxData() - { - Message = message, - Dlg = this - }); + CECUIManager.Instance.ShowMessageBoxGeneral("", message, this); return; } message = GetGameUIMan().GetStringFromTable(229); - var x = new MessageBoxData() + CECUIManager.Instance.ShowMessageBoxYesAndNo("", message, this, + () => { - Message = message, - Dlg = this, - MessageBoxType = MessageBoxType.BothYesNoButton, - OnClickedYes = () => - { - UnityGameSession.c2s_CmdNPCSevClearEmbeddedChip((ushort)m_FirstInvSlot, pIvtrA.GetTemplateID()); - ClearEquiment(); - pHost.GetPack(InventoryConst.IVTRTYPE_PACK).UnfreezeAllItems(); + UnityGameSession.c2s_CmdNPCSevClearEmbeddedChip((ushort)m_FirstInvSlot, pIvtrA.GetTemplateID()); + ClearEquiment(); + pHost.GetPack(InventoryConst.IVTRTYPE_PACK).UnfreezeAllItems(); - string successMessage = GetGameUIMan().GetStringFromTable(230); - CECUIManager.Instance.ShowMessageBox(new MessageBoxData() - { - Message = successMessage, - Dlg = this - }); - } - }; - CECUIManager.Instance.ShowMessageBox(x); + string successMessage = GetGameUIMan().GetStringFromTable(230); + CECUIManager.Instance.ShowMessageBoxGeneral("", message, this); + }, null); } else { diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgNPC.cs b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgNPC.cs index 1e0668fd73..91db982774 100644 --- a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgNPC.cs +++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgNPC.cs @@ -137,7 +137,7 @@ namespace BrewMonster.UI CDLGNPC_CARDRESPAWN = 0xFFFFF49, // ¿¨ÅÆ×ªÉú CDLGNPC_QUERYCHARIOTAMOUNT = 0xFFFFF50, // Õ½³µÊýÁ¿ CDLGNPC_FLYSWORDIMPROVE = 0xFFFFF51, // ·É½£Ç¿»¯ - CDLGNPC_OPEN_FACTION_PVP = 0xFFFFF52, // ¿ªÆô°ïÅÉÂÓ¶á + CDLGNPC_OPEN_FACTION_PVP = 0xFFFFF52, // ¿ªÆô°ïÅÉÂÓ¶á CDLGNPC_FACTION_RENAME = 0xFFFFF53, CDLGNPC_GOLD_SHOP = 0xFFFFF54, CDLGNPC_PLAYER_CHANGE_GENDER = 0xFFFFF55; // ÐÞ¸ÄÐÔ±ð @@ -765,10 +765,10 @@ namespace BrewMonster.UI NPC_MAKE_SERVICE pService = (NPC_MAKE_SERVICE)pData; string serviceName = Encoding.Unicode.GetString(MemoryMarshal.AsBytes(pService.name)); m_pLst_Main.AddString(strText + serviceName); - + // Log NPC_MAKE_SERVICE data BMLogger.Log($"NPC_MAKE_SERVICE detected - ServiceID: {a_uiService[i]}, MakeServiceID: {pService.id}, Name: {serviceName}, MakeSkillID: {pService.id_make_skill}, ProduceType: {pService.produce_type}"); - + // Log pages data if (pService.pages != null) { @@ -778,7 +778,7 @@ namespace BrewMonster.UI string pageTitle = Encoding.Unicode.GetString(MemoryMarshal.AsBytes(page.page_title)); // Trim null characters and whitespace from page title pageTitle = pageTitle?.TrimEnd('\0', ' ', '\t', '\r', '\n') ?? ""; - + // Collect all non-zero goods IDs with their names // Note: id_goods contains RECIPE IDs, not item IDs List goodsInfo = new List(); @@ -804,7 +804,7 @@ namespace BrewMonster.UI // Try recipe space first DATA_TYPE dt = DATA_TYPE.DT_INVALID; object recipeData = edm.get_data_ptr(recipeId, ID_SPACE.ID_SPACE_RECIPE, ref dt); - + // Check if we got recipe data - sometimes dt is DT_INVALID but data is still RECIPE_ESSENCE RECIPE_ESSENCE? recipe = null; if (recipeData != null && recipeData is RECIPE_ESSENCE) @@ -815,11 +815,11 @@ namespace BrewMonster.UI { recipe = (RECIPE_ESSENCE)recipeData; } - + if (recipe.HasValue) { RECIPE_ESSENCE recipeValue = recipe.Value; - + // Get output item from first target (main output) if (recipeValue.targets != null && recipeValue.targets.Length > 0) { @@ -853,7 +853,7 @@ namespace BrewMonster.UI { BMLogger.LogWarning($" Recipe {recipeId}: targets is null or empty"); } - + // Get all materials if (recipeValue.materials != null) { @@ -875,7 +875,7 @@ namespace BrewMonster.UI { materialName = $"error: {ex2.Message}"; } - + string matEntry = !string.IsNullOrEmpty(materialName) ? $"{material.id} ({materialName}) x{material.num}" : $"{material.id} (unknown) x{material.num}"; @@ -894,7 +894,7 @@ namespace BrewMonster.UI { BMLogger.LogWarning($" Failed to get data for recipe ID {recipeId}: {ex.Message}\n{ex.StackTrace}"); } - + // Format: "RecipeID -> Output: ID (Name) | Materials: ID (Name) xCount, ..." string goodsEntry = $"Recipe {recipeId}"; if (!string.IsNullOrEmpty(outputItemInfo)) @@ -917,7 +917,7 @@ namespace BrewMonster.UI } } } - + // Log page if it has a title or has goods if (!string.IsNullOrEmpty(pageTitle) || goodsInfo.Count > 0) { @@ -931,22 +931,22 @@ namespace BrewMonster.UI { NPC_DECOMPOSE_SERVICE pService = (NPC_DECOMPOSE_SERVICE)pData; string serviceName = Encoding.Unicode.GetString(MemoryMarshal.AsBytes(pService.name)); - + // Log NPC_DECOMPOSE_SERVICE data BMLogger.Log($"NPC_DECOMPOSE_SERVICE detected - ServiceID: {a_uiService[i]}, DecomposeServiceID: {pService.id}, Name: {serviceName}, DecomposeSkillID: {pService.id_decompose_skill}"); - + CECHostPlayer hostPlayer = GetHostPlayer(); bool hasRequiredSkill = false; - + // TODO: Implement proper skill check when GetPassiveSkillNum() and GetPassiveSkillByIndex() are available // For now, we'll use reflection to access private GetPassiveSkillByID method or implement a workaround // The C++ code checks if player has the required decompose skill (TYPE_LIVE or TYPE_PRODUCE) try { // Try using reflection to access private GetPassiveSkillByID method - var method = typeof(CECHostPlayer).GetMethod("GetPassiveSkillByID", + var method = typeof(CECHostPlayer).GetMethod("GetPassiveSkillByID", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); - + if (method != null) { var pSkill = method.Invoke(hostPlayer, new object[] { (int)pService.id_decompose_skill, false }) as CECSkill; @@ -954,9 +954,9 @@ namespace BrewMonster.UI { int skillType = pSkill.GetType(); int skillID = pSkill.GetSkillID(); - + BMLogger.Log($" Found skill by ID (via reflection): ID={skillID}, Type={skillType}"); - + // Check if this is the required decompose skill with correct type if ((skillType == (int)CECSkill.SkillType.TYPE_LIVE || skillType == (int)CECSkill.SkillType.TYPE_PRODUCE) && @@ -999,7 +999,7 @@ namespace BrewMonster.UI m_pLst_Main.SetItemData(m_pLst_Main.GetCount() - 1, a_uiService[i]); m_pLst_Main.SetItemDataPtr(m_pLst_Main.GetCount() - 1, pData); } - + if (!hasRequiredSkill) continue; } @@ -1134,7 +1134,7 @@ namespace BrewMonster.UI // m_pLst_Main.AddString(strText + GetStringFromTable(699)); // m_pLst_Main.SetItemData(m_pLst_Main.GetCount() - 1, CDLGNPC_BATTLECHALLENGE); // } - // // if( gtime.tm_wday == 5 && gtime.tm_hour >= 18 || + // // if( gtime.tm_wday == 5 && gtime.tm_hour >= 18 || // // gtime.tm_wday == 6 || // // gtime.tm_wday == 0 ) // if (GetHostPlayer().GetFRoleID() != GNETRoles._R_UNMEMBER) @@ -1647,7 +1647,7 @@ namespace BrewMonster.UI SetDataPtr(pTalk, "ptr_talk_proc"); if (!IsShow()) Show(true); } - + // bool c(int idFunction, int iService, object pData) // { // AUIDialog pShow1 = null, pShow2 = null; @@ -1687,7 +1687,7 @@ namespace BrewMonster.UI // { // shopManager.OpenNPCShop(npcID); // } - // } + // } // } // else if (idFunction == (int)SERVICE_TYPE.NPC_INSTALL) // { @@ -1994,7 +1994,7 @@ namespace BrewMonster.UI // // return true; // } - + public void OnCommand_back(string szCommand) { NPC_ESSENCE? pCurNPCEssence = GetGameUIMan().m_pCurNPCEssence; @@ -2096,7 +2096,7 @@ namespace BrewMonster.UI if (id != pTalk.windows[i].id) continue; // TO DO: fix later - // TO DO: show popup with content is talk_text and 1 btn OK + // TO DO: show popup with content is talk_text and 1 btn OK //GetGameUIMan().MessageBox("", pTask.FormatTaskTalk(pTalk.windows[i].talk_text), // MB_OK, A3DCOLORRGBA(255, 255, 255, 160)); GetGameUIMan().EndNPCService(); @@ -3236,21 +3236,21 @@ namespace BrewMonster.UI { NPC_MAKE_SERVICE pService = (NPC_MAKE_SERVICE)pData; string serviceName = Encoding.Unicode.GetString(MemoryMarshal.AsBytes(pService.name)); - + // Log NPC_MAKE_SERVICE data when selected BMLogger.Log($"SelectListItem - NPC_MAKE_SERVICE selected - ServiceID: {iService}, MakeServiceID: {pService.id}, Name: {serviceName}, MakeSkillID: {pService.id_make_skill}, ProduceType: {pService.produce_type}"); - + idFunction = (int)SERVICE_TYPE.NPC_MAKE; } else if (DataType == DATA_TYPE.DT_NPC_DECOMPOSE_SERVICE) { NPC_DECOMPOSE_SERVICE pService = (NPC_DECOMPOSE_SERVICE)pData; string serviceName = Encoding.Unicode.GetString(MemoryMarshal.AsBytes(pService.name)); - + // Log NPC_DECOMPOSE_SERVICE data when selected BMLogger.Log($"SelectListItem - NPC_DECOMPOSE_SERVICE selected - ServiceID: {iService}, DecomposeServiceID: {pService.id}, Name: {serviceName}, DecomposeSkillID: {pService.id_decompose_skill}"); BMLogger.Log($" Note: This decompose service is being treated as idFunction={SERVICE_TYPE.NPC_DECOMPOSE}"); - + idFunction = (int)SERVICE_TYPE.NPC_DECOMPOSE; } else if (DataType == DATA_TYPE.DT_NPC_IDENTIFY_SERVICE) @@ -3342,7 +3342,7 @@ namespace BrewMonster.UI CECTaskInterface pTask; ad.m_ulCandItems = 0; opt.param = 0; - + // Check if the integer matches any enum value if (Enum.IsDefined(typeof(SERVICE_TYPE), idFunction)) { @@ -3391,7 +3391,7 @@ namespace BrewMonster.UI if (pCurNPCEssence.HasValue) { uint npcID = pCurNPCEssence.Value.id; - + // var dlgInstall =GetGameUIMan().GetDialog("Win_Enchase"); // dlgInstall.Show(true); CECUIManager.Instance.ShowUI("Win_Enchase"); @@ -3446,14 +3446,14 @@ namespace BrewMonster.UI else if (idFunction == (int)SERVICE_TYPE.NPC_MAKE) { NPC_MAKE_SERVICE pMake = (NPC_MAKE_SERVICE)pData; - + BMLogger.Log($"PopupCorrespondingServiceDialog - NPC_MAKE: produce_type={pMake.produce_type}, MakeSkillID={pMake.id_make_skill}"); - + // Dialog loading commented out - Win_Produce dialog not yet implemented // Determine which dialog to use based on produce_type //string dialogName = (pMake.produce_type == 2) ? "Win_Produce1" : "Win_Produce"; //pShow1 = m_pAUIManager.GetDialog(dialogName); - + //if (pShow1 == null) //{ // BMLogger.LogError($"NPC_MAKE: Dialog '{dialogName}' not found! Service may not work correctly."); @@ -3464,7 +3464,7 @@ namespace BrewMonster.UI //{ // // Get or set DlgProduce reference (if it exists) // // GetGameUIMan().m_pDlgProduce = (CDlgProduce*)pShow1; - // + // // // Prepare NPC service // try // { @@ -3474,7 +3474,7 @@ namespace BrewMonster.UI // { // BMLogger.LogError($"NPC_MAKE: Error calling PrepareNPCService: {ex.Message}"); // } - // + // // // Set data pointer // try // { @@ -3484,7 +3484,7 @@ namespace BrewMonster.UI // { // BMLogger.LogError($"NPC_MAKE: Error setting data pointer: {ex.Message}"); // } - // + // // // Clear material for certain produce types // if (pMake.produce_type == 1 || // pMake.produce_type == 3 || @@ -3502,10 +3502,10 @@ namespace BrewMonster.UI // BMLogger.LogError($"NPC_MAKE: Error clearing material: {ex.Message}"); // } // } - // + // // // Get inventory dialog // pShow2 = m_pAUIManager.GetDialog("Win_Inventory"); - // + // // // Update produce dialog // try // { @@ -3683,7 +3683,7 @@ namespace BrewMonster.UI pTask = GetHostPlayer().GetTaskInterface(); pTask.GetAwardCandidates(opt.param, ref ad); - + if (ad.m_ulCandItems > 1) { dialogue1 = "Win_Award"; @@ -3831,12 +3831,6 @@ namespace BrewMonster.UI return true; } - public override void CloseDialogue() - { - base.CloseDialogue(); - GetGameUIMan().EndNPCService(); - } - public void OnCommand_CANCEL(string szCommand) { int idCurFinishTask = GetGameUIMan().m_idCurFinishTask; diff --git a/Assets/PerfectWorld/Scripts/UI/GamePlay/SkillUI/CDlgSkillSubListItem.cs b/Assets/PerfectWorld/Scripts/UI/GamePlay/SkillUI/CDlgSkillSubListItem.cs index c9b184ae43..9d406a6252 100644 --- a/Assets/PerfectWorld/Scripts/UI/GamePlay/SkillUI/CDlgSkillSubListItem.cs +++ b/Assets/PerfectWorld/Scripts/UI/GamePlay/SkillUI/CDlgSkillSubListItem.cs @@ -55,11 +55,7 @@ namespace BrewMonster player.GetCurSkill() != null || player.IsFighting()) { - uiManager.ShowMessageBox(new MessageBoxData() - { - Title = "MessageBox", - Message = gameUIMan.GetStringFromTable(11327) - }); + uiManager.ShowMessageBoxGeneral("MessageBox", gameUIMan.GetStringFromTable(11327), this); } int nCondition = CECHostSkillModel.Instance.CheckLearnCondition(m_skillID); @@ -102,12 +98,14 @@ namespace BrewMonster int needSp = CECHostSkillModel.Instance.GetSkillSp(m_skillID, m_curLevel + 1); string str = GPDataTypeHelper.ReplacePercentD(GetStringFromTable(11326), needMoney, needSp); - var messagebox = uiManager.ShowMessageBox(new MessageBoxData() - { - Title = "Game_LearnSkill", - Message = str, - OnClickedYes = () => UnityGameSession.c2s_SendCmdNPCSevLearnSkill(m_skillID) - }); + // var messagebox = uiManager.ShowMessageBox(new MessageBoxData() + // { + // Title = "Game_LearnSkill", + // Message = str, + // OnClickedYes = () => UnityGameSession.c2s_SendCmdNPCSevLearnSkill(m_skillID) + // }); + var messagebox = uiManager.ShowMessageBoxYes("Game_LearnSkill", str, this, + () => UnityGameSession.c2s_SendCmdNPCSevLearnSkill(m_skillID)); messagebox.SetData((uint)m_skillID); //GetGameUIMan()->MessageBox("Game_LearnSkill", str, //GetGameUIMan()->GetStringFromTable(231), // MB_OKCANCEL, A3DCOLORRGBA(255, 255, 255, 160), &pMsgBox); diff --git a/Assets/PerfectWorld/Scripts/UI/Login/BtnBackToSelectRole.cs b/Assets/PerfectWorld/Scripts/UI/Login/BtnBackToSelectRole.cs index 0fc5bb5ada..1c13540f72 100644 --- a/Assets/PerfectWorld/Scripts/UI/Login/BtnBackToSelectRole.cs +++ b/Assets/PerfectWorld/Scripts/UI/Login/BtnBackToSelectRole.cs @@ -40,12 +40,8 @@ namespace BrewMonster.UI void OnCommandRepick() { - CECUIManager.Instance.ShowMessageBox( - title: "Thoát", - message: CECUIManager.Instance.GetInGameUIMan().GetStringFromTable(202), - messageBoxType: MessageBoxType.BothYesNoButton, - onClickedYes: OnClickYes - ); + CECUIManager.Instance.ShowMessageBoxYes("Thoát", + CECUIManager.Instance.GetInGameUIMan().GetStringFromTable(202), null, OnClickYes); } void OnClickYes() diff --git a/Assets/Scripts/CECHostPlayer.Pet.cs b/Assets/Scripts/CECHostPlayer.Pet.cs index 05d203bedf..1d733b8410 100644 --- a/Assets/Scripts/CECHostPlayer.Pet.cs +++ b/Assets/Scripts/CECHostPlayer.Pet.cs @@ -117,7 +117,8 @@ namespace BrewMonster { //pGameRun.AddFixedMessage(FIXMSG_PET_DEAD); //Debug.LogError("FIXMSG_PET_DEAD"); - pGameUI.ShowMessageBox("MessageBox", "PET_DEAD", MessageBoxType.YesButton); + // pGameUI.ShowMessageBox("MessageBox", "PET_DEAD", MessageBoxType.YesButton); + pGameUI.ShowMessageBoxYes("MessageBox", "PET_DEAD", null, null); return false; } @@ -138,7 +139,8 @@ namespace BrewMonster { string strText = ""; strText = string.Format(pGameUI.GetInGameUIMan().GetStringFromTable(10787), iLevelRequired); - pGameUI.ShowMessageBox("MessageBox", strText, MessageBoxType.YesButton); + // pGameUI.ShowMessageBox("MessageBox", strText, MessageBoxType.YesButton); + pGameUI.ShowMessageBoxYes("MessageBox", strText, null, null); } return false; } diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index 3b4364c8e5..3a28aa41aa 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -656,12 +656,16 @@ namespace BrewMonster // Duel invite: show accept/reject popup (origin MSG_PM_DUELOPT with command DUEL_RECV_REQUEST = 214) if (idOpp != 0) { - CECUIManager.Instance?.ShowMessageBox( - title: "", - message: "Bạn vừa nhận được lời thách đấu. Bạn có chấp nhận không?", - messageBoxType: MessageBoxType.BothYesNoButton, - onClickedYes: () => UnityGameSession.c2s_CmdDuelReply(true, idOpp), - onClickedNo: () => UnityGameSession.c2s_CmdDuelReply(false, idOpp)); + // CECUIManager.Instance?.ShowMessageBox( + // title: "", + // message: "Bạn vừa nhận được lời thách đấu. Bạn có chấp nhận không?", + // messageBoxType: MessageBoxType.BothYesNoButton, + // onClickedYes: () => UnityGameSession.c2s_CmdDuelReply(true, idOpp), + // onClickedNo: () => UnityGameSession.c2s_CmdDuelReply(false, idOpp)); + CECUIManager.Instance?.ShowMessageBoxYesAndNo("", + "Bạn vừa nhận được lời thách đấu. Bạn có chấp nhận không?", null, + ()=>UnityGameSession.c2s_CmdDuelReply(true, idOpp), + () => UnityGameSession.c2s_CmdDuelReply(false, idOpp)); } break; case CommandID.DUEL_PREPARE: @@ -712,12 +716,15 @@ namespace BrewMonster if (idLeader == 0) return; int seqCapture = team_seq; - CECUIManager.Instance?.ShowMessageBox( - title: "", - message: "Bạn đã nhận được lời mời tham gia tổ đội. Bạn có chấp nhận không?", - messageBoxType: MessageBoxType.BothYesNoButton, - onClickedYes: () => UnityGameSession.c2s_CmdTeamAgreeInvite(idLeader, seqCapture), - onClickedNo: () => UnityGameSession.c2s_CmdTeamRejectInvite(idLeader)); + // CECUIManager.Instance?.ShowMessageBox( + // title: "", + // message: "Bạn đã nhận được lời mời tham gia tổ đội. Bạn có chấp nhận không?", + // messageBoxType: MessageBoxType.BothYesNoButton, + // onClickedYes: () => UnityGameSession.c2s_CmdTeamAgreeInvite(idLeader, seqCapture), + // onClickedNo: () => UnityGameSession.c2s_CmdTeamRejectInvite(idLeader)); + CECUIManager.Instance?.ShowMessageBoxYesAndNo("", "Bạn đã nhận được lời mời tham gia tổ đội. Bạn có chấp nhận không?",null, + ()=>UnityGameSession.c2s_CmdTeamAgreeInvite(idLeader, seqCapture), + () => UnityGameSession.c2s_CmdTeamRejectInvite(idLeader)); } /// Called when MSG_PM_PLAYERDUELOPT (229) is received; server may send duel start to both participants. If host is one of the two ids, set duel state. diff --git a/Assets/Scripts/CECUIManager.cs b/Assets/Scripts/CECUIManager.cs index 2cb1cd265f..83bcb12aea 100644 --- a/Assets/Scripts/CECUIManager.cs +++ b/Assets/Scripts/CECUIManager.cs @@ -281,46 +281,95 @@ public class CECUIManager : MonoSingleton _uiStack.Clear(); } - - public CDlgMessageBox ShowMessageBox(MessageBoxData messageBoxData) + public CDlgMessageBox ShowMessageBoxGeneral(string title, string message, AUIDialog dlg) { var msgBox = GetInGameUIMan().GetDialog("DlgMessageBox") as CDlgMessageBox; if (msgBox != null) { - msgBox.ShowMessageBox(messageBoxData); + msgBox.ShowMessageBoxGeneral(title, message, dlg); return msgBox; } - else - { - Debug.LogError("DlgMessageBox not found in InGameUIMan"); - } + Debug.LogError("DlgMessageBox not found in InGameUIMan"); return null; } - - public CDlgMessageBox ShowMessageBox(string title, string message, MessageBoxType messageBoxType, - Action onClickedYes = null, Action onClickedNo = null) + + public CDlgMessageBox ShowMessageBoxYes(string title, string message, AUIDialog dlg, Action onClickedYes) { var msgBox = GetInGameUIMan().GetDialog("DlgMessageBox") as CDlgMessageBox; if (msgBox != null) { - msgBox.ShowMessageBox(new MessageBoxData() - { - Title = title, - Message = message, - MessageBoxType = messageBoxType, - OnClickedYes = onClickedYes, - OnClickedNo = onClickedNo - }); + msgBox.ShowMessageBoxYes(title, message, dlg, onClickedYes); return msgBox; } - else - { - Debug.LogError("DlgMessageBox not found in InGameUIMan"); - } + Debug.LogError("DlgMessageBox not found in InGameUIMan"); return null; } + public CDlgMessageBox ShowMessageBoxNo(string title, string message, AUIDialog dlg, Action onClickedNo) + { + var msgBox = GetInGameUIMan().GetDialog("DlgMessageBox") as CDlgMessageBox; + if (msgBox != null) + { + msgBox.ShowMessageBoxNo(title, message, dlg, onClickedNo); + return msgBox; + } + Debug.LogError("DlgMessageBox not found in InGameUIMan"); + + return null; + } + public CDlgMessageBox ShowMessageBoxYesAndNo(string title, string message, AUIDialog dlg, Action onClickedYes, Action onClickedNo) + { + var msgBox = GetInGameUIMan().GetDialog("DlgMessageBox") as CDlgMessageBox; + if (msgBox != null) + { + msgBox.ShowMessageBoxYesAndNo(title, message, dlg,onClickedYes, onClickedNo); + return msgBox; + } + Debug.LogError("DlgMessageBox not found in InGameUIMan"); + + return null; + } + + // public CDlgMessageBox ShowMessageBox(MessageBoxData messageBoxData) + // { + // var msgBox = GetInGameUIMan().GetDialog("DlgMessageBox") as CDlgMessageBox; + // if (msgBox != null) + // { + // msgBox.ShowMessageBox(messageBoxData); + // return msgBox; + // } + // else + // { + // Debug.LogError("DlgMessageBox not found in InGameUIMan"); + // } + // + // return null; + // } + + // public CDlgMessageBox ShowMessageBox(string title, string message, MessageBoxType messageBoxType, + // Action onClickedYes = null, Action onClickedNo = null) + // { + // var msgBox = GetInGameUIMan().GetDialog("DlgMessageBox") as CDlgMessageBox; + // if (msgBox != null) + // { + // msgBox.ShowMessageBox(new MessageBoxData() + // { + // Title = title, + // Message = message, + // MessageBoxType = messageBoxType, + // OnClickedYes = onClickedYes, + // OnClickedNo = onClickedNo + // }); + // return msgBox; + // } + // else + // { + // Debug.LogError("DlgMessageBox not found in InGameUIMan"); + // } + // + // return null; + // } public void UpdateSkillRelatedUI() { @@ -464,10 +513,8 @@ public class CECUIManager : MonoSingleton // m_pCurNPCEssence = NULL; // m_pDlgInventory->Show(false); pHost.GetPack((int)InventoryType.IVTRTYPE_PACK).UnfreezeAllItems(); - ShowMessageBox(new MessageBoxData() - { - Message = pDlg.GetStringFromTable(228) - }); + + ShowMessageBoxGeneral("",pDlg.GetStringFromTable(228), null); } }