From 015d06c16cd2cb7de629676b3b6124b3987aecd6 Mon Sep 17 00:00:00 2001 From: CuongNV <> Date: Mon, 23 Mar 2026 16:01:58 +0700 Subject: [PATCH] add filter chat --- Assets/Scripts/CECUIManager.cs | 34 ++------- Assets/Scripts/EC_GameRun.Task.cs.meta | 2 +- Assets/Scripts/EC_GameRunChat.cs | 96 ++++++++++++++++++++++++++ Assets/Scripts/EC_GameRunChat.cs.meta | 3 + 4 files changed, 106 insertions(+), 29 deletions(-) create mode 100644 Assets/Scripts/EC_GameRunChat.cs create mode 100644 Assets/Scripts/EC_GameRunChat.cs.meta diff --git a/Assets/Scripts/CECUIManager.cs b/Assets/Scripts/CECUIManager.cs index 2849c65333..b81675a27d 100644 --- a/Assets/Scripts/CECUIManager.cs +++ b/Assets/Scripts/CECUIManager.cs @@ -3,6 +3,7 @@ using BrewMonster.Network; using BrewMonster.UI; using System; using System.Collections.Generic; +using BrewMonster.PerfectWorld.Scripts.Utility.ChatFilter; using BrewMonster.Scripts.Managers; using UnityEngine; using TMPro; @@ -299,7 +300,7 @@ public class CECUIManager : MonoSingleton return null; } - + public CDlgMessageBox ShowMessageBoxYes(string title, string message, AUIDialog dlg, Action onClickedYes) { var msgBox = GetInGameUIMan().GetDialog("DlgMessageBox") as CDlgMessageBox; @@ -336,7 +337,7 @@ public class CECUIManager : MonoSingleton return null; } - + // public CDlgMessageBox ShowMessageBox(MessageBoxData messageBoxData) // { // var msgBox = GetInGameUIMan().GetDialog("DlgMessageBox") as CDlgMessageBox; @@ -467,7 +468,7 @@ public class CECUIManager : MonoSingleton // g_pGame->GetGameRun()->GetPendingLogOut().AppendForSaveConfig(new CECPendingLogoutCrossServer()); // else // g_pGame->GetGameRun()->GetPendingLogOut().AppendForSaveConfig(new CECPendingLogoutHalf()); - + EC_Game.GetGameRun().GetPendingLogOut().AppendForSaveConfig(new CECPendingLogoutHalf()); } else @@ -714,7 +715,7 @@ public class CECUIManager : MonoSingleton // { // EC_Game.GetGameRun().StartGame(0, Vector3.zero); // } - + CECShortcut pSC = EC_Game.GetGameRun().GetPoseCmdShortcuts().GetShortcut(slot); if (pSC != null) // && pObjSrc->GetDataPtr("ptr_CECShortcut") == pSC { @@ -775,29 +776,6 @@ public class CECUIManager : MonoSingleton public void FilterBadWords(ref string str) { - if (string.IsNullOrEmpty(str)) - return; - - string strLwr = str.ToLower(); - - char[] chars = str.ToCharArray(); - - foreach (string bad in gameUI.m_vecBadWords) - { - int pos = 0; - string badLwr = bad.ToLower(); - - while ((pos = strLwr.IndexOf(badLwr, pos, StringComparison.Ordinal)) >= 0) - { - for (int j = 0; j < badLwr.Length; j++) - { - chars[pos + j] = '*'; - } - - pos += badLwr.Length; - } - } - - str = new string(chars); + str = ChatFilterService.Filter(str, out var isValidWord); } } diff --git a/Assets/Scripts/EC_GameRun.Task.cs.meta b/Assets/Scripts/EC_GameRun.Task.cs.meta index 6a5196dc5d..3e02f1693a 100644 --- a/Assets/Scripts/EC_GameRun.Task.cs.meta +++ b/Assets/Scripts/EC_GameRun.Task.cs.meta @@ -1,3 +1,3 @@ fileFormatVersion: 2 -guid: 598459b2399743b5ba1eb55fd1d9611e +guid: 474cab0ba62d0eb45bdc28c5b381eb18 timeCreated: 1762861835 \ No newline at end of file diff --git a/Assets/Scripts/EC_GameRunChat.cs b/Assets/Scripts/EC_GameRunChat.cs new file mode 100644 index 0000000000..b8fb48f602 --- /dev/null +++ b/Assets/Scripts/EC_GameRunChat.cs @@ -0,0 +1,96 @@ +using System; +using System.Net; +using CSNetwork; +using CSNetwork.GPDataType; +using BrewMonster.Common; +using UnityEngine; + +// Account login info struct +public struct AccountLoginInfo +{ + public uint login_time; + public uint login_ip; + public uint current_ip; + + public void Reset() + { + login_time = 0; + login_ip = 0; + current_ip = 0; + } +} + +// Game runtime partial class +partial class CECGameRun +{ + public AccountLoginInfo m_AccountLoginInfo = new AccountLoginInfo(); + public bool m_bAccountLoginInfoShown = false; + public byte m_accountInfoFlag = 0; + public bool m_bAccountInfoShown = false; + + public void ResetAccountLoginInfo() + { + m_AccountLoginInfo.Reset(); + m_bAccountLoginInfoShown = true; + } + + public void ShowAccountLoginInfo() + { + Debug.Log("[Cuong] ShowAccountLoginInfo"); + if (!m_bAccountLoginInfoShown) + { + m_bAccountLoginInfoShown = true; + + // Assuming CECUIConfig::Instance().GetGameUI().bEnableShowIP translates to true for now + bool bEnableShowIP = true; + if (bEnableShowIP) + { + // Last login time + DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); + DateTime t = Epoch.AddSeconds(m_AccountLoginInfo.login_time).ToLocalTime(); + + string timeStr = string.Format("({0}-{1:00}-{2:00} {3:00}:{4:00})", + t.Year, t.Month, t.Day, t.Hour, t.Minute); + string textTime = string.Format("Lần đăng nhập trước: {0}", timeStr); // 9343 + + EventBus.Publish(new GameSession.ChatMessageEvent { context = textTime, channel = (byte)ChatChannel.GP_CHAT_SYSTEM }); + Debug.Log($"[Cuong] ShowAccountLoginInfo {textTime}"); + + // Last login IP + string ipStr = new IPAddress((long)m_AccountLoginInfo.login_ip).ToString(); + string textIp = string.Format("IP đăng nhập trước: {0}", ipStr); // 9344 + + EventBus.Publish(new GameSession.ChatMessageEvent { context = textIp, channel = (byte)ChatChannel.GP_CHAT_SYSTEM }); + Debug.Log($"[Cuong] ShowAccountLoginInfo {textIp}"); + + // Current login IP + string curIpStr = new IPAddress((long)m_AccountLoginInfo.current_ip).ToString(); + string textCurIp = string.Format("IP đăng nhập hiện tại: {0}", curIpStr); // 9345 + + EventBus.Publish(new GameSession.ChatMessageEvent { context = textCurIp, channel = (byte)ChatChannel.GP_CHAT_SYSTEM }); + Debug.Log($"[Cuong] ShowAccountLoginInfo {textCurIp}"); + } + } + } + + public void SetAccountInfoFlag(byte accountinfo_flag) + { + m_accountInfoFlag = accountinfo_flag; + m_bAccountInfoShown = false; + } + + public void ShowAccountInfo() + { + if (!m_bAccountInfoShown) + { + m_bAccountInfoShown = true; + bool bEnableCompleteAccount = true; + if (bEnableCompleteAccount && ((m_accountInfoFlag & 0x03) != 0)) + { + string text = "Hoàn tất thông tin tài khoản..."; // 9347 + EventBus.Publish(new GameSession.ChatMessageEvent { context = text, channel = (byte)ChatChannel.GP_CHAT_SYSTEM }); + Debug.Log($"[Cuong] ShowAccountInfo {text}"); + } + } + } +} diff --git a/Assets/Scripts/EC_GameRunChat.cs.meta b/Assets/Scripts/EC_GameRunChat.cs.meta new file mode 100644 index 0000000000..6a5196dc5d --- /dev/null +++ b/Assets/Scripts/EC_GameRunChat.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 598459b2399743b5ba1eb55fd1d9611e +timeCreated: 1762861835 \ No newline at end of file