From 5a4e34c8a85737c0fa5b5775122da31155cbaef3 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 09 二月 2026 14:46:01 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts

---
 Main/System/BeautyMM/BeautyMMSkinActiveWin.cs                                              |   36 +++
 Main/System/InternalAffairs/FuncNPCManager.cs                                              |   30 ++
 Main/Utility/TimeUtility.cs                                                                |   36 +++
 Main/Core/GameEngine/Player/PlayerDatas.cs                                                 |    2 
 Main/System/Guild/GuildHawkerWin.cs                                                        |    7 
 Main/Core/NetworkPackage/ServerPack/HA5_Family/HA519_tagSCTagFamilyInfo.cs                 |   49 ++++
 Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB420_tagMCTurnFightState.cs |    7 
 Main/Core/NetworkPackage/ServerPack/HA5_Family/HA519_tagSCTagFamilyInfo.cs.meta            |   11 
 Main/System/Guild/GuildBossWin.cs                                                          |    8 
 Main/System/OtherPlayerDetail/OtherPlayerDetailWin.cs                                      |   10 
 Main/Core/NetworkPackage/ClientPack/CA6_Family/CA619_tagCSViewTagFamily.cs                 |   20 +
 Main/System/Message/RichText.cs                                                            |  126 +++++++++
 Main/System/ItemTip/ItemBatchUseWin.cs                                                     |    7 
 Main/System/Guild/GuildMemberCell.cs                                                       |    6 
 Main/System/PhantasmPavilion/AvatarCell.cs                                                 |    2 
 Main/System/Guild/PlayerFairyData.cs                                                       |    9 
 Main/System/Guild/GuildManager.cs                                                          |   58 +++-
 Main/System/BeautyMM/BeautyMMSkinCell.cs                                                   |    9 
 Main/System/ViewNPC/ViewNPCManager.cs                                                      |    2 
 Main/System/InternalAffairs/AffairBaseWin.cs                                               |   27 ++
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA519_tagSCTagFamilyInfo.cs       |   12 +
 Main/System/Guild/GuildManager.CrossServer.cs                                              |   26 --
 Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs                                  |   16 
 Main/Core/NetworkPackage/ClientPack/CA6_Family/CA619_tagCSViewTagFamily.cs.meta            |   11 
 Main/System/BeautyMM/BeautyMMManager.cs                                                    |   24 +
 Main/System/Chat/ChatPlayerOtherCell.cs                                                    |    7 
 Main/System/PhantasmPavilion/AvatarHelper.cs                                               |    8 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA519_tagSCTagFamilyInfo.cs.meta  |   11 
 Main/System/BeautyMM/BeautyMMManager.Travel.cs                                             |    4 
 Main/System/BeautyMM/BeautyMMSkinWin.cs                                                    |    8 
 Main/System/BeautyMM/BeautyMMSkinActiveWin.cs.meta                                         |   11 
 Main/Core/NetworkPackage/ClientPack/CA2_Interaction/CA212_tagCMViewPlayerInfo.cs           |    4 
 Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs                                       |    1 
 Main/System/Equip/ItemsOnFloor.cs                                                          |    4 
 Main/System/Guild/GuildPreviewWin.cs                                                       |   19 +
 Main/Core/NetworkPackage/ServerPack/HA5_Family/HA523_tagMCFamilyViewList.cs                |    8 
 Main/Config/PartialConfigs/MainLevelConfig.cs                                              |   10 
 Main/Core/NetworkPackage/ServerPack/HA7_Interaction/HA705_tagSCQueryPlayerCacheResult.cs   |   10 
 Main/Core/NetworkPackage/ServerPack/HB0_Event/HB040_tagSCTravelInfo.cs                     |    4 
 Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs         |    2 
 40 files changed, 536 insertions(+), 126 deletions(-)

diff --git a/Main/Config/PartialConfigs/MainLevelConfig.cs b/Main/Config/PartialConfigs/MainLevelConfig.cs
index 2d54cef..a5d9b02 100644
--- a/Main/Config/PartialConfigs/MainLevelConfig.cs
+++ b/Main/Config/PartialConfigs/MainLevelConfig.cs
@@ -46,12 +46,16 @@
         return waveLineupLists.Count(list => list.Length > 0);
     }
 
+    static List<int> allLevels = new List<int>();
     // 鑾峰彇鐩爣鍏冲崱鐨勭储寮�
     public static int GetToTargetLevelIndex(int targetLevel)
     {
-        var levels = GetKeys();
-        levels.Sort();
-        return levels.IndexOf(targetLevel);
+        if (allLevels.IsNullOrEmpty())
+        {
+            allLevels = GetKeys();
+            allLevels.Sort();
+        }
+        return allLevels.IndexOf(targetLevel);
 
     }
 
diff --git a/Main/Core/GameEngine/Player/PlayerDatas.cs b/Main/Core/GameEngine/Player/PlayerDatas.cs
index ea98e19..c91b3a9 100644
--- a/Main/Core/GameEngine/Player/PlayerDatas.cs
+++ b/Main/Core/GameEngine/Player/PlayerDatas.cs
@@ -236,9 +236,11 @@
                 break;
             case PlayerDataType.ExAttr1:
                 baseData.ExAttr1 = Math.Max((int)value, 10100); //鏂板彿鍒濆澶勭悊
+                Debug.LogFormat("---- 鏀跺埌鏈嶅姟绔疎xAttr1: {0}", baseData.ExAttr1);
                 break;
             case PlayerDataType.ExAttr2:
                 baseData.ExAttr2 = Math.Max((int)value, 10101); //鏂板彿鍒濆澶勭悊
+                Debug.LogFormat("---- 鏀跺埌鏈嶅姟绔疎xAttr2: {0}", baseData.ExAttr2);
                 break;
             case PlayerDataType.ExAttr3://绉板彿
                 baseData.TitleID = (int)value;
diff --git a/Main/Core/NetworkPackage/ClientPack/CA2_Interaction/CA212_tagCMViewPlayerInfo.cs b/Main/Core/NetworkPackage/ClientPack/CA2_Interaction/CA212_tagCMViewPlayerInfo.cs
index 34cad61..8c89ec2 100644
--- a/Main/Core/NetworkPackage/ClientPack/CA2_Interaction/CA212_tagCMViewPlayerInfo.cs
+++ b/Main/Core/NetworkPackage/ClientPack/CA2_Interaction/CA212_tagCMViewPlayerInfo.cs
@@ -5,7 +5,7 @@
 
 public class CA212_tagCMViewPlayerInfo : GameNetPackBasic {
     public uint PlayerID;
-    public byte EquipClassLV;    //澶т簬0涓烘煡鐪嬫寚瀹氬鐣岄樁瑁呭淇℃伅,  0涓烘煡鐪嬮粯璁や俊鎭�
+    public uint ServerID;    //鐜╁鏈嶅姟鍣↖D锛屽彂0榛樿鏈湇鐜╁
 
     public CA212_tagCMViewPlayerInfo () {
         combineCmd = (ushort)0x03FE;
@@ -14,7 +14,7 @@
 
     public override void WriteToBytes () {
         WriteBytes (PlayerID, NetDataType.DWORD);
-        WriteBytes (EquipClassLV, NetDataType.BYTE);
+        WriteBytes (ServerID, NetDataType.DWORD);
     }
 
 }
diff --git a/Main/Core/NetworkPackage/ClientPack/CA6_Family/CA619_tagCSViewTagFamily.cs b/Main/Core/NetworkPackage/ClientPack/CA6_Family/CA619_tagCSViewTagFamily.cs
new file mode 100644
index 0000000..3e19628
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CA6_Family/CA619_tagCSViewTagFamily.cs
@@ -0,0 +1,20 @@
+using UnityEngine;
+using System.Collections;
+
+// A6 19 鏌ョ湅鐩爣鍏細 #tagCSViewTagFamily
+
+public class CA619_tagCSViewTagFamily : GameNetPackBasic {
+    public uint FamilyID;
+    public uint DataServerID;    //鏁版嵁鎵�鍦ㄦ湇鍔″櫒ID
+
+    public CA619_tagCSViewTagFamily () {
+        combineCmd = (ushort)0x03FE;
+        _cmd = (ushort)0xA619;
+    }
+
+    public override void WriteToBytes () {
+        WriteBytes (FamilyID, NetDataType.DWORD);
+        WriteBytes (DataServerID, NetDataType.DWORD);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ClientPack/CA6_Family/CA619_tagCSViewTagFamily.cs.meta b/Main/Core/NetworkPackage/ClientPack/CA6_Family/CA619_tagCSViewTagFamily.cs.meta
new file mode 100644
index 0000000..a1cabda
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CA6_Family/CA619_tagCSViewTagFamily.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2bf49c967e6a89b4c93efd500fbd7583
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs
index 08d7a75..0e2adc4 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs
@@ -8,10 +8,8 @@
     //绫诲瀷
     static Dictionary<int, ulong> lastPackUIDDict = new Dictionary<int, ulong>()
     {
-#if UNITY_EDITOR
         {(int)PlayerDataType.ExAttr1, 0},
         {(int)PlayerDataType.ExAttr2, 0},
-#endif
         {(int)PlayerDataType.default26, 0},
     };
     public override void Done(GameNetPackBasic vNetPack)
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA519_tagSCTagFamilyInfo.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA519_tagSCTagFamilyInfo.cs
new file mode 100644
index 0000000..bf4e3d7
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA519_tagSCTagFamilyInfo.cs
@@ -0,0 +1,12 @@
+using UnityEngine;
+using System.Collections;
+
+// A5 19 鏌ョ湅鐩爣鍏細淇℃伅 #tagSCTagFamilyInfo
+
+public class DTCA519_tagSCTagFamilyInfo : DtcBasic {
+    public override void Done(GameNetPackBasic vNetPack) {
+        base.Done(vNetPack);
+        HA519_tagSCTagFamilyInfo vNetData = vNetPack as HA519_tagSCTagFamilyInfo;
+        GuildManager.Instance.UpdateViewFamilyInfo(vNetData);
+    }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA519_tagSCTagFamilyInfo.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA519_tagSCTagFamilyInfo.cs.meta
new file mode 100644
index 0000000..262def0
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA519_tagSCTagFamilyInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e31d54337b63cd94cb7faac99d8f1eaf
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB420_tagMCTurnFightState.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB420_tagMCTurnFightState.cs
index 83610a3..84065e7 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB420_tagMCTurnFightState.cs
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB420_tagMCTurnFightState.cs
@@ -1,6 +1,7 @@
 using UnityEngine;
 using System.Collections;
 using LitJson;
+using Codice.Client.BaseCommands;
 
 // B4 20 鍥炲悎鍒舵垬鏂楃姸鎬� #tagMCTurnFightState
 
@@ -19,7 +20,11 @@
 		if (battleField != null)
 		{
 			JsonData extendData = JsonMapper.ToObject(vNetData.Msg);
-    		battleField.OnTurnFightState(vNetData.TurnNum, vNetData.State, (int)vNetData.FuncLineID, extendData);
+			battleField.OnTurnFightState(vNetData.TurnNum, vNetData.State, (int)vNetData.FuncLineID, extendData);
+			if (vNetData.MapID == 1 && (vNetData.FuncLineID > PlayerDatas.Instance.baseData.ExAttr2))
+			{
+				Debug.LogErrorFormat("---- 鏀跺埌鏈嶅姟绔� DTCB420_tagMCTurnFightState 鐨� FuncLineID :{0} 澶т簬瀹㈡埛绔褰� ExAttr2 {1}", vNetData.FuncLineID, PlayerDatas.Instance.baseData.ExAttr2);
+			}
         }
     }
 }
diff --git a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
index 61060a4..5461f8e 100644
--- a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
+++ b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
@@ -149,6 +149,7 @@
         Register(typeof(HB162_tagSCFuncPresetSwitchInfo), typeof(DTCB162_tagSCFuncPresetSwitchInfo));
         Register(typeof(HB163_tagSCBatPresetSwitchInfo), typeof(DTCB163_tagSCBatPresetSwitchInfo));
         Register(typeof(HA001_tagBroadCastInfo), typeof(DTCA001_tagBroadCastInfo));
+        Register(typeof(HA519_tagSCTagFamilyInfo), typeof(DTCA519_tagSCTagFamilyInfo));
     }
 
     //涓诲伐绋嬫敞鍐屽皝鍖�
diff --git a/Main/Core/NetworkPackage/ServerPack/HA5_Family/HA519_tagSCTagFamilyInfo.cs b/Main/Core/NetworkPackage/ServerPack/HA5_Family/HA519_tagSCTagFamilyInfo.cs
new file mode 100644
index 0000000..6ff152f
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA5_Family/HA519_tagSCTagFamilyInfo.cs
@@ -0,0 +1,49 @@
+using UnityEngine;
+using System.Collections;
+
+// A5 19 鏌ョ湅鐩爣鍏細淇℃伅 #tagSCTagFamilyInfo
+
+public class HA519_tagSCTagFamilyInfo : GameNetPackBasic {
+    public uint FamilyID;    //瀹舵棌ID
+    public byte FamilyNameLen;
+    public string FamilyName;    //size = FamilyNameLen
+    public uint LeaderID;    //鏃忛暱ID
+    public byte LeaderNameLen;
+    public string LeaderName;    //size = LeaderNameLen
+    public uint LeaderServerID;    //浼氶暱鍖烘湇ID
+    public byte FamilyLV;    //瀹舵棌绛夌骇
+    public uint ServerID;    //鍖烘湇ID
+    public uint EmblemID;    //寰界珷ID
+    public string EmblemWord;    //寰界珷鏂囧瓧
+    public uint FightPower;    //鎬绘垬鍔涳紝姹備綑浜块儴鍒�
+    public uint FightPowerEx;    //鎬绘垬鍔涳紝鏁撮櫎浜块儴鍒�
+    public ushort BroadcastLen;    //鍏憡
+    public string Broadcast;    //size = BroadcastLen
+    public byte MemberCount;    //鎴愬憳浜烘暟
+    public uint DataServerID;    //鏁版嵁鎵�鍦ㄦ湇鍔″櫒ID
+
+    public HA519_tagSCTagFamilyInfo () {
+        _cmd = (ushort)0xA519;
+    }
+
+    public override void ReadFromBytes (byte[] vBytes) {
+        TransBytes (out FamilyID, vBytes, NetDataType.DWORD);
+        TransBytes (out FamilyNameLen, vBytes, NetDataType.BYTE);
+        TransBytes (out FamilyName, vBytes, NetDataType.Chars, FamilyNameLen);
+        TransBytes (out LeaderID, vBytes, NetDataType.DWORD);
+        TransBytes (out LeaderNameLen, vBytes, NetDataType.BYTE);
+        TransBytes (out LeaderName, vBytes, NetDataType.Chars, LeaderNameLen);
+        TransBytes (out LeaderServerID, vBytes, NetDataType.DWORD);
+        TransBytes (out FamilyLV, vBytes, NetDataType.BYTE);
+        TransBytes (out ServerID, vBytes, NetDataType.DWORD);
+        TransBytes (out EmblemID, vBytes, NetDataType.DWORD);
+        TransBytes (out EmblemWord, vBytes, NetDataType.Chars, 3);
+        TransBytes (out FightPower, vBytes, NetDataType.DWORD);
+        TransBytes (out FightPowerEx, vBytes, NetDataType.DWORD);
+        TransBytes (out BroadcastLen, vBytes, NetDataType.WORD);
+        TransBytes (out Broadcast, vBytes, NetDataType.Chars, BroadcastLen);
+        TransBytes (out MemberCount, vBytes, NetDataType.BYTE);
+        TransBytes (out DataServerID, vBytes, NetDataType.DWORD);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HA5_Family/HA519_tagSCTagFamilyInfo.cs.meta b/Main/Core/NetworkPackage/ServerPack/HA5_Family/HA519_tagSCTagFamilyInfo.cs.meta
new file mode 100644
index 0000000..686e993
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA5_Family/HA519_tagSCTagFamilyInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 487779c3213b8a94e861c50bc592c1dd
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/ServerPack/HA5_Family/HA523_tagMCFamilyViewList.cs b/Main/Core/NetworkPackage/ServerPack/HA5_Family/HA523_tagMCFamilyViewList.cs
index f643e36..41b053b 100644
--- a/Main/Core/NetworkPackage/ServerPack/HA5_Family/HA523_tagMCFamilyViewList.cs
+++ b/Main/Core/NetworkPackage/ServerPack/HA5_Family/HA523_tagMCFamilyViewList.cs
@@ -1,6 +1,6 @@
-using UnityEngine;
-using System.Collections;
-
+using UnityEngine;
+using System.Collections;
+
 // A5 23 鎼滅储瀹舵棌杩斿洖鍒楄〃 #tagMCFamilyViewList
 
 public class HA523_tagMCFamilyViewList : GameNetPackBasic {
@@ -34,6 +34,7 @@
             TransBytes (out FamilyList[i].LeaderID, vBytes, NetDataType.DWORD);
             TransBytes (out FamilyList[i].LeaderNameLen, vBytes, NetDataType.BYTE);
             TransBytes (out FamilyList[i].LeaderName, vBytes, NetDataType.Chars, FamilyList[i].LeaderNameLen);
+            TransBytes (out FamilyList[i].LeaderServerID, vBytes, NetDataType.DWORD);
             TransBytes (out FamilyList[i].FamilyLV, vBytes, NetDataType.BYTE);
             TransBytes (out FamilyList[i].JoinReview, vBytes, NetDataType.BYTE);
             TransBytes (out FamilyList[i].JoinLVMin, vBytes, NetDataType.WORD);
@@ -55,6 +56,7 @@
         public uint LeaderID;        //鏃忛暱ID
         public byte LeaderNameLen;
         public string LeaderName;        //size = LeaderNameLen
+        public uint LeaderServerID;        //鏃忛暱鏈嶅姟鍣↖D
         public byte FamilyLV;        //瀹舵棌绛夌骇
         public byte JoinReview;        //鎴愬憳鍔犲叆鏄惁闇�瑕佸鏍革紝榛樿0鑷姩鍔犲叆
         public ushort JoinLVMin;        //闄愬埗鏈�浣庡彲鍔犲叆鐨勭帺瀹剁瓑绾�
diff --git a/Main/Core/NetworkPackage/ServerPack/HA7_Interaction/HA705_tagSCQueryPlayerCacheResult.cs b/Main/Core/NetworkPackage/ServerPack/HA7_Interaction/HA705_tagSCQueryPlayerCacheResult.cs
index bebac50..b3f4928 100644
--- a/Main/Core/NetworkPackage/ServerPack/HA7_Interaction/HA705_tagSCQueryPlayerCacheResult.cs
+++ b/Main/Core/NetworkPackage/ServerPack/HA7_Interaction/HA705_tagSCQueryPlayerCacheResult.cs
@@ -1,6 +1,6 @@
-using UnityEngine;
-using System.Collections;
-
+using UnityEngine;
+using System.Collections;
+
 //A7 05 鏌ヨ鐜╁璇︾粏淇℃伅缁撴灉#tagSCQueryPlayerCacheResult
 
 public class HA705_tagSCQueryPlayerCacheResult : GameNetPackBasic {
@@ -21,6 +21,7 @@
     public string FamilyName;
     public uint FamilyEmblemID;    //浠欑洘寰界珷ID
     public string FamilyEmblemWord;    //寰界珷鏂囧瓧
+    public uint FamilyDataServerID;    //鍏細鏁版嵁鎵�鍦ㄦ湇鍔″櫒ID锛孉619鏌ョ湅鍏細鐢�
     public uint PlusDataSize;
     public string PlusData;    //鎵╁睍璁板綍	
 
@@ -46,8 +47,9 @@
         TransBytes (out FamilyName, vBytes, NetDataType.Chars, 33);
         TransBytes (out FamilyEmblemID, vBytes, NetDataType.DWORD);
         TransBytes (out FamilyEmblemWord, vBytes, NetDataType.Chars, 3);
+        TransBytes (out FamilyDataServerID, vBytes, NetDataType.DWORD);
         TransBytes (out PlusDataSize, vBytes, NetDataType.DWORD);
         TransBytes (out PlusData, vBytes, NetDataType.Chars, PlusDataSize);
     }
 
-}
+}
\ No newline at end of file
diff --git a/Main/Core/NetworkPackage/ServerPack/HB0_Event/HB040_tagSCTravelInfo.cs b/Main/Core/NetworkPackage/ServerPack/HB0_Event/HB040_tagSCTravelInfo.cs
index c08a276..623a64a 100644
--- a/Main/Core/NetworkPackage/ServerPack/HB0_Event/HB040_tagSCTravelInfo.cs
+++ b/Main/Core/NetworkPackage/ServerPack/HB0_Event/HB040_tagSCTravelInfo.cs
@@ -4,7 +4,7 @@
 // B0 40 娓稿巻淇℃伅 #tagSCTravelInfo
 
 public class HB040_tagSCTravelInfo : GameNetPackBasic {
-    public byte Energy;    //鍓╀綑浣撳姏
+    public uint Energy;    //鍓╀綑浣撳姏
     public uint EnergyTime;    //涓婃鎭㈠浣撳姏鏃堕棿鎴�
     public uint TravelCnt;    //绱娓稿巻娆℃暟
     public byte SceneryType;    //鏅绫诲瀷
@@ -20,7 +20,7 @@
     }
 
     public override void ReadFromBytes (byte[] vBytes) {
-        TransBytes (out Energy, vBytes, NetDataType.BYTE);
+        TransBytes (out Energy, vBytes, NetDataType.DWORD);
         TransBytes (out EnergyTime, vBytes, NetDataType.DWORD);
         TransBytes (out TravelCnt, vBytes, NetDataType.DWORD);
         TransBytes (out SceneryType, vBytes, NetDataType.BYTE);
diff --git a/Main/System/BeautyMM/BeautyMMManager.Travel.cs b/Main/System/BeautyMM/BeautyMMManager.Travel.cs
index 9d8a4cd..e20d061 100644
--- a/Main/System/BeautyMM/BeautyMMManager.Travel.cs
+++ b/Main/System/BeautyMM/BeautyMMManager.Travel.cs
@@ -8,7 +8,7 @@
 
 public partial class BeautyMMManager : GameSystemManager<BeautyMMManager>
 {
-    public byte m_Energy;    //鍓╀綑浣撳姏
+    public int m_Energy;    //鍓╀綑浣撳姏
     public uint m_EnergyTime;    //涓婃鎭㈠浣撳姏鏃堕棿鎴�
     public uint m_TravelCnt;    //绱娓稿巻娆℃暟
     public byte m_SceneryType;    //鏅绫诲瀷
@@ -29,7 +29,7 @@
 
     public void UpdateTravelInfo(HB040_tagSCTravelInfo netPack)
     {
-        m_Energy = netPack.Energy;
+        m_Energy = (int)netPack.Energy;
         m_EnergyTime = netPack.EnergyTime;
         m_TravelCnt = netPack.TravelCnt;
         m_SceneryType = netPack.SceneryType;
diff --git a/Main/System/BeautyMM/BeautyMMManager.cs b/Main/System/BeautyMM/BeautyMMManager.cs
index d0e8932..7fea852 100644
--- a/Main/System/BeautyMM/BeautyMMManager.cs
+++ b/Main/System/BeautyMM/BeautyMMManager.cs
@@ -92,10 +92,12 @@
     public void UpdateBeautyMMData(HB130_tagSCBeautyInfo data)
     {
         int activeMMID = 0;
+        int activeSkinID = 0;
         foreach (var beauty in data.BeautyList)
         {
-            if (DTC0403_tagPlayerLoginLoadOK.finishedLogin)
+            if (data.Count == 1)
             {
+                //data.Count == 1 鍙互鐞嗚В涓鸿В閿佸洖鎶�
                 if (beautyMMDataDict.ContainsKey(beauty.BeautyID))
                 {
                     if (beautyMMDataDict[beauty.BeautyID].State != beauty.State)
@@ -119,6 +121,22 @@
 
             foreach (var skin in beauty.SkinList)
             {
+                if (data.Count == 1)
+                {
+                    //data.Count == 1 鍙互鐞嗚В涓鸿В閿佸洖鎶�
+                    if (beautyMMSkinDataDict.ContainsKey(skin.SkinID))
+                    {
+                        if (beautyMMSkinDataDict[skin.SkinID].State != skin.State)
+                        {
+                            activeSkinID = skin.SkinID;
+                        }
+                    }
+                    else if (skin.State != 0)
+                    {
+                        activeSkinID = skin.SkinID;
+                    }
+                }
+
                 beautyMMSkinDataDict[skin.SkinID] = new BeautyMMSkinData()
                 {
                     State = skin.State,
@@ -135,6 +153,10 @@
         {
             UIManager.Instance.OpenWindow<BeautyMMActiveWin>(activeMMID);
         }
+        else if (activeSkinID > 0)
+        {
+            UIManager.Instance.OpenWindow<BeautyMMSkinActiveWin>(activeSkinID);
+        }
     }
 
     //0 鍏ㄩ儴 1 宸叉縺娲� 2 鏈縺娲�
diff --git a/Main/System/BeautyMM/BeautyMMSkinActiveWin.cs b/Main/System/BeautyMM/BeautyMMSkinActiveWin.cs
new file mode 100644
index 0000000..eacf537
--- /dev/null
+++ b/Main/System/BeautyMM/BeautyMMSkinActiveWin.cs
@@ -0,0 +1,36 @@
+
+using UnityEngine;
+using UnityEngine.UI;
+
+public class BeautyMMSkinActiveWin : UIBase
+{
+    [SerializeField] Text nameText;
+    [SerializeField] ImageEx roleImg;
+
+    [SerializeField] Text attrText;
+
+    int skinID;
+
+
+    protected override void OnPreOpen()
+    {
+        skinID = functionOrder;
+        Display();
+    }
+
+
+
+    void Display()
+    {
+        var skinConfig = BeautySkinConfig.Get(skinID);
+        nameText.text = skinConfig.Name;
+        roleImg.SetOrgSprite(skinConfig.BigRole, "BeautyMMBigRole");
+        roleImg.SetNativeSize();
+
+        string format = "{0}" + UIHelper.AppendColor(TextColType.NavyYellow, "+{1}");
+        attrText.text = PlayerPropertyConfig.GetFullDescription(skinConfig.AttrIDList[0], skinConfig.InitAttrValueList[0], format);
+    }
+
+
+
+}
diff --git a/Main/System/BeautyMM/BeautyMMSkinActiveWin.cs.meta b/Main/System/BeautyMM/BeautyMMSkinActiveWin.cs.meta
new file mode 100644
index 0000000..e3788ee
--- /dev/null
+++ b/Main/System/BeautyMM/BeautyMMSkinActiveWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 25e9d541898b482469cf32bf0533a66b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/BeautyMM/BeautyMMSkinCell.cs b/Main/System/BeautyMM/BeautyMMSkinCell.cs
index e881d73..212fbd7 100644
--- a/Main/System/BeautyMM/BeautyMMSkinCell.cs
+++ b/Main/System/BeautyMM/BeautyMMSkinCell.cs
@@ -26,10 +26,11 @@
         var skinData = BeautyMMManager.Instance.GetSkinData(skinID);
         var mmData = BeautyMMManager.Instance.GetBeautyMMData(mmID);
         var state = skinData.State;
-        if (mmData != null && mmData.State != 0 && skinConfig.UnlockWay == 1)
-        {
-            state = 1;
-        }
+        // if (mmData != null && mmData.State != 0 && skinConfig.UnlockWay == 1)
+        // {
+        //     //榛樿绛惧埌鑷繁瑙i攣
+        //     state = 1;
+        // }
         if (state != 0)
         {
             lockObj.SetActive(false);
diff --git a/Main/System/BeautyMM/BeautyMMSkinWin.cs b/Main/System/BeautyMM/BeautyMMSkinWin.cs
index 3a2ca5f..2a3027b 100644
--- a/Main/System/BeautyMM/BeautyMMSkinWin.cs
+++ b/Main/System/BeautyMM/BeautyMMSkinWin.cs
@@ -39,6 +39,7 @@
         BeautyMMManager.Instance.selectSkinID = BeautyMMManager.Instance.GetUsedSkinID(mmID);
         clothesScroller.OnRefreshCell += OnRefreshCell;
         BeautyMMManager.Instance.OnSelectSkinIDChange += OnSelectSkinIDChange;
+        BeautyMMManager.Instance.OnBeautyMMDataUpdate += OnSelectSkinIDChange;
         CreateScroller();
         Display();
     }
@@ -47,6 +48,7 @@
     {
         clothesScroller.OnRefreshCell -= OnRefreshCell;
         BeautyMMManager.Instance.OnSelectSkinIDChange -= OnSelectSkinIDChange;
+        BeautyMMManager.Instance.OnBeautyMMDataUpdate -= OnSelectSkinIDChange;
     }
 
     void OnSelectSkinIDChange()
@@ -98,15 +100,15 @@
             if (skinData.State == 0)
             {
                 attrTipText.text = Language.Get("PhantasmPavilion11");
-                attrValueText.text = UIHelper.AppendColor(TextColType.lightYellow, PlayerPropertyConfig.GetFullDescription(skinConfig.AttrIDList[0], skinConfig.InitAttrValueList[0]));
+                attrValueText.text = UIHelper.AppendColor(TextColType.NavyYellow, PlayerPropertyConfig.GetFullDescription(skinConfig.AttrIDList[0], skinConfig.InitAttrValueList[0]));
             }
             else
             {
                 attrTipText.text = Language.Get("PhantasmPavilion07");
                 var value = skinConfig.InitAttrValueList[0] + skinData.Star * skinConfig.AttrPerStarAddList[0];
 
-                attrValueText.text = UIHelper.AppendColor(TextColType.lightYellow, PlayerPropertyConfig.GetFullDescription(skinConfig.AttrIDList[0], value)) +
-                    Language.Get("PhantasmPavilion12", UIHelper.AppendColor(TextColType.Green, "+" + PlayerPropertyConfig.GetValueDescription(skinConfig.AttrIDList[0], skinConfig.AttrPerStarAddList[0])));
+                attrValueText.text = UIHelper.AppendColor(TextColType.NavyYellow, PlayerPropertyConfig.GetFullDescription(skinConfig.AttrIDList[0], value)) +
+                    Language.Get("PhantasmPavilion12", UIHelper.AppendColor(TextColType.LightGreen, "+" + PlayerPropertyConfig.GetValueDescription(skinConfig.AttrIDList[0], skinConfig.AttrPerStarAddList[0])));
             }
         }
 
diff --git a/Main/System/Chat/ChatPlayerOtherCell.cs b/Main/System/Chat/ChatPlayerOtherCell.cs
index 246a2ff..af20b9c 100644
--- a/Main/System/Chat/ChatPlayerOtherCell.cs
+++ b/Main/System/Chat/ChatPlayerOtherCell.cs
@@ -22,7 +22,7 @@
         TalkData data = hasNewPlayerInfo ? newPlayerInfo : nowData;
 
         avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)data.PlayerID, (int)data.Face, (int)data.FacePic, data.Job));
-  
+
         title.InitUI(data.RealmLV, (int)data.TitleID);
         int bubbleID = ChatBubbleHelper.GetOtherChatBubbleID(data.Job, (int)data.BubbleBox);
         m_ChatBubble.DisplayBubble(bubbleID, (int)data.PlayerID);
@@ -42,6 +42,11 @@
             }
             m_PlayerName.text = Language.Get("Chat08", RichTextMsgReplaceConfig.GetRichReplace("FAMILY", fmlv), data.Name);
         }
+        
+        avatarCell.SetListener(() =>
+        {
+            AvatarHelper.TryViewOtherPlayerInfo((int)data.PlayerID, serverID: (int)data.ServerID, viewPlayerLineupType: (int)BattlePreSetType.Arena);
+        });
     }
 
     public float GetHeight(string content, ArrayList list)
diff --git a/Main/System/Equip/ItemsOnFloor.cs b/Main/System/Equip/ItemsOnFloor.cs
index 9f378a5..b948e62 100644
--- a/Main/System/Equip/ItemsOnFloor.cs
+++ b/Main/System/Equip/ItemsOnFloor.cs
@@ -13,8 +13,8 @@
     [SerializeField] MoneyMoveByPath moneyMoveByPathCell;     //鎺夎惤鐗╅噾閽�
     [SerializeField] RectTransform defaultDropRect;     //榛樿鎺夎惤浣嶇疆
     [SerializeField] Text[] expTexts;
-    FloorItemCell[] floorItemCells = new FloorItemCell[20];    //鍖呭惈闈炶澶囩殑鎴樺埄鍝佹帀钀�
-    MoneyMoveByPath[] moneyMoveByPathArr = new MoneyMoveByPath[20];  //鎺夎惤璐у竵锛岄噾閽憋紝缁忛獙绛�
+    FloorItemCell[] floorItemCells = new FloorItemCell[100];    //鍖呭惈闈炶澶囩殑鎴樺埄鍝佹帀钀�
+    MoneyMoveByPath[] moneyMoveByPathArr = new MoneyMoveByPath[100];  //鎺夎惤璐у竵锛岄噾閽憋紝缁忛獙绛�
 
 
     void Awake()
diff --git a/Main/System/Guild/GuildBossWin.cs b/Main/System/Guild/GuildBossWin.cs
index 5b8e74f..2c51665 100644
--- a/Main/System/Guild/GuildBossWin.cs
+++ b/Main/System/Guild/GuildBossWin.cs
@@ -138,7 +138,7 @@
 
     void Display()
     {
-        endTimeText.text = Language.Get("Arena14", TimeUtility.SecondsToHMS((int)(TimeUtility.GetTodayEndTime() - TimeUtility.ServerNow).TotalSeconds));
+        endTimeText.text = Language.Get("Arena14", TimeUtility.SecondsToHMS((int)(TimeUtility.GetCommTodayEndTime(GuildManager.Instance.zoneID) - TimeUtility.GetCommServerNow(GuildManager.Instance.zoneID)).TotalSeconds));
         fightPowerText.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPower);
         headCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID,
                                                         PlayerDatas.Instance.baseData.face,
@@ -271,7 +271,7 @@
         bzAttrText.text = GetAddAttrs(bossAction);
         var layer = bossAction == null ? 0 : bossAction.Value3;
         var bzTime = bossAction == null ? 0 : bossAction.Value2;
-        int remainTime = (int)Math.Max(0, bzTime - TimeUtility.AllSeconds);
+        int remainTime = (int)Math.Max(0, bzTime - TimeUtility.GetCommServerTick(GuildManager.Instance.zoneID));
         if (remainTime == 0)
         {
             //鏃堕棿鍒颁簡 瀹㈡埛绔嚜宸辨竻0
@@ -292,7 +292,7 @@
     {
         var layerNum = action == null ? 0 : action.Value3;
         var bzTime = action == null ? 0 : action.Value2;
-        int remainTime = (int)Math.Max(0, bzTime - TimeUtility.AllSeconds);
+        int remainTime = (int)Math.Max(0, bzTime - TimeUtility.GetCommServerTick(GuildManager.Instance.zoneID));
         if (remainTime == 0)
         {
             //鏃堕棿鍒颁簡 瀹㈡埛绔嚜宸辨竻0
@@ -310,7 +310,7 @@
 
     void OnSecondEvent()
     {
-        endTimeText.text = Language.Get("Arena14", TimeUtility.SecondsToHMS((int)(TimeUtility.GetTodayEndTime() - TimeUtility.ServerNow).TotalSeconds));
+        endTimeText.text = Language.Get("Arena14", TimeUtility.SecondsToHMS((int)(TimeUtility.GetCommTodayEndTime(GuildManager.Instance.zoneID) - TimeUtility.GetCommServerNow(GuildManager.Instance.zoneID)).TotalSeconds));
         var bossAction = GuildBossManager.Instance.GetGuildBossAction();
         ShowBzInfo(bossAction);
         OtherPlayerAnimation();
diff --git a/Main/System/Guild/GuildHawkerWin.cs b/Main/System/Guild/GuildHawkerWin.cs
index c5face0..5439919 100644
--- a/Main/System/Guild/GuildHawkerWin.cs
+++ b/Main/System/Guild/GuildHawkerWin.cs
@@ -61,7 +61,8 @@
 
     void OnSecondEvent()
     {
-        timeText.text = Language.Get("Guild_74", TimeUtility.SecondsToShortDHMS((int)(TimeUtility.GetTodayEndTime() - TimeUtility.ServerNow).TotalSeconds));
+        timeText.text = Language.Get("Guild_74", TimeUtility.SecondsToShortDHMS((int)(TimeUtility.GetCommTodayEndTime(GuildManager.Instance.zoneID) -
+        TimeUtility.GetCommServerNow(GuildManager.Instance.zoneID)).TotalSeconds));
     }
 
     int index = 0;
@@ -199,9 +200,9 @@
     void OnCut()
     {
         //鐮嶄环鐨刢d闄愬埗: 鍏細娌℃湁璁板綍鑷繁鐮嶈繃浠凤紝浣嗕粖澶╂湁鐮嶄环璁板綍锛屼笖閫�鍑鸿繃鍏細
-        if (GuildManager.Instance.zhenbaogeCutState == 0 && GuildManager.Instance.needCheckCutCD && (TimeUtility.AllSeconds - PlayerDatas.Instance.baseData.leaveFamilyTime) / 60 < GuildManager.Instance.zbgChangFamilyCD )
+        if (GuildManager.Instance.zhenbaogeCutState == 0 && GuildManager.Instance.needCheckCutCD && (TimeUtility.GetCommServerTick(GuildManager.Instance.zoneID) - PlayerDatas.Instance.baseData.leaveFamilyTime) / 60 < GuildManager.Instance.zbgChangFamilyCD )
         {
-            SysNotifyMgr.Instance.ShowTip("ZhenbaogeCut1", GuildManager.Instance.zbgChangFamilyCD - (TimeUtility.AllSeconds - PlayerDatas.Instance.baseData.leaveFamilyTime) / 60);
+            SysNotifyMgr.Instance.ShowTip("ZhenbaogeCut1", GuildManager.Instance.zbgChangFamilyCD - (TimeUtility.GetCommServerTick(GuildManager.Instance.zoneID) - PlayerDatas.Instance.baseData.leaveFamilyTime) / 60);
             return;
         }
         if (GuildManager.Instance.zhenbaogeCutState == 0)
diff --git a/Main/System/Guild/GuildManager.CrossServer.cs b/Main/System/Guild/GuildManager.CrossServer.cs
index 9c96c0f..e967068 100644
--- a/Main/System/Guild/GuildManager.CrossServer.cs
+++ b/Main/System/Guild/GuildManager.CrossServer.cs
@@ -22,31 +22,7 @@
         OnRefreshCrossServerInfoEvent?.Invoke();
     }
 
-    // 鑾峰彇褰撳墠鏃堕棿, 鍏細璺ㄥ尯鍓嶅彇鏈湇鏃堕棿锛岃法鏈嶅悗鍙栬法鏈嶆椂闂�
-    public DateTime GetServerNow()
-    {
-        if (zoneID == 0)
-        {
-            return TimeUtility.ServerNow;
-        }
-        else
-        {
-            return TimeUtility.CrossServerNow;
-        }
-    }
-
-    public int GetServerTick()
-    {
-        if (zoneID == 0)
-        {
-            return TimeUtility.AllSeconds;
-        }
-        else
-        {
-            return TimeUtility.AllSecondsCrossServer;
-        }
-    }
-
+   
 
 }
 
diff --git a/Main/System/Guild/GuildManager.cs b/Main/System/Guild/GuildManager.cs
index 242ad99..ea157ed 100644
--- a/Main/System/Guild/GuildManager.cs
+++ b/Main/System/Guild/GuildManager.cs
@@ -349,7 +349,7 @@
                 punishTime = quitGuildPunishTime[Math.Min(quitCount, quitGuildPunishTime.Length - 1)];
         }
 
-        return punishTime * 60 - (TimeUtility.AllSeconds - PlayerDatas.Instance.baseData.leaveFamilyTime);
+        return punishTime * 60 - (TimeUtility.GetCommServerTick(zoneID)- PlayerDatas.Instance.baseData.leaveFamilyTime);
     }
 
 
@@ -644,28 +644,13 @@
         GameNetSystem.Instance.SendInfo(pack);
     }
 
-    public void SendFindGuildNoDecrypt(string msg, int pageIndex = 0, int pageSize = 20)
-    {
-        if (pageIndex == 0)
-        {
-            //榛樿鏌ヨ绗竴椤靛嵆浠h〃閲嶆柊寮�濮嬫煡璇紝娓呯┖涔嬪墠鐨勬暟鎹�
-            guildsDict.Clear();
-            pageIndexList.Clear();
-        }
-        var pack = new CA620_tagCMViewFamilyPage();
-        pack.Msg = msg;
-        pack.MsgLen = (byte)msg.Length;
-        pack.PageIndex = (byte)pageIndex;
-        pack.ShowCount = (byte)pageSize;
-        GameNetSystem.Instance.SendInfo(pack);
-    }
-
     public static void SetFairyViewData(FairyData data, HA523_tagMCFamilyViewList.tagMCFamilyView view)
     {
         data.Rank = view.Rank;
         data.FamilyID = (int)view.FamilyID;
         data.FamilyName = view.FamilyName;
         data.LeaderID = (int)view.LeaderID;
+        data.LeaderServerID = (int)view.LeaderServerID;
         data.LeaderName = view.LeaderName;
         data.FamilyLV = view.FamilyLV;
         data.JoinReview = view.JoinReview;
@@ -677,6 +662,43 @@
         data.MemberCount = view.MemberCount;
     }
 
+    #endregion
+
+    #region 鏌ョ湅鐩爣鍏細
+    public Dictionary<int, FairyData> viewGuildsDict = new Dictionary<int, FairyData>();
+
+    public event Action OnUpdateViewFamilyInfo;
+
+    public void UpdateViewFamilyInfo(HA519_tagSCTagFamilyInfo pack)
+    {
+        FairyData data = new FairyData();
+        SetFairyViewData(data, pack);
+        viewGuildsDict[(int)data.FamilyID] = data;
+        OnUpdateViewFamilyInfo?.Invoke();
+    }
+
+    public static void SetFairyViewData(FairyData data, HA519_tagSCTagFamilyInfo view)
+    {
+        data.FamilyID = (int)view.FamilyID;
+        data.FamilyName = view.FamilyName;
+        data.LeaderID = (int)view.LeaderID;
+        data.LeaderServerID = (int)view.LeaderServerID;
+        data.LeaderName = view.LeaderName;
+        data.FamilyLV = view.FamilyLV;
+        data.ServerID = (int)view.ServerID;
+        data.EmblemID = (int)view.EmblemID;
+        data.EmblemWord = view.EmblemWord;
+        data.totalFightPower = view.FightPowerEx * Constants.ExpPointValue + view.FightPower;
+        data.MemberCount = view.MemberCount;
+    }
+
+    public void SendViewGuild(int fairyID, int serverID)
+    {
+        var pack = new CA619_tagCSViewTagFamily();
+        pack.FamilyID = (uint)fairyID;
+        pack.DataServerID = (uint)serverID;
+        GameNetSystem.Instance.SendInfo(pack);
+    }
     #endregion
 
     #region 鐢宠鍒楄〃
@@ -1117,7 +1139,7 @@
         {
             return;
         }
-        if (TimeUtility.ServerNow.Hour < 10)
+        if (TimeUtility.GetCommServerNow(zoneID).Hour < 10)
             return;
 
         if (zhenbaogeCutState == 0)
diff --git a/Main/System/Guild/GuildMemberCell.cs b/Main/System/Guild/GuildMemberCell.cs
index 51c59fb..32cbf9c 100644
--- a/Main/System/Guild/GuildMemberCell.cs
+++ b/Main/System/Guild/GuildMemberCell.cs
@@ -9,7 +9,7 @@
 /// </summary>
 public class GuildMemberCell : CellView
 {
-    
+
     [SerializeField] AvatarCell avatarCell;
     [SerializeField] OfficialTitleCell titleCell;
     [SerializeField] Text lvText;
@@ -49,7 +49,7 @@
 
         avatarCell.AddListener(() =>
         {
-            OtherPlayerDetailManager.Instance.ViewPlayerDetail(playerID);
+            OtherPlayerDetailManager.Instance.ViewPlayerDetail(playerID, playerInfo.ServerID);
         });
 
         contribText.text = playerInfo.ContribDay + "/" + playerInfo.ContribTotal;
@@ -91,7 +91,7 @@
             showArrowImg.transform.localScale = new Vector3(1, -1, 1);
         }
     }
-    
+
     //渚嬪瓙 鍙栨暣澶勭悊锛� 1.5澶� 鏄剧ず1澶�; 鏈�澶�7澶╃壒娈婂鐞�
     //x澶�
     //x鏃�
diff --git a/Main/System/Guild/GuildPreviewWin.cs b/Main/System/Guild/GuildPreviewWin.cs
index fc4166c..bb219c9 100644
--- a/Main/System/Guild/GuildPreviewWin.cs
+++ b/Main/System/Guild/GuildPreviewWin.cs
@@ -29,6 +29,7 @@
 
     int guildID;
     int leaderID;
+    int leaderServerID;
     protected override void InitComponent()
     {
         opearteBtn.AddListener(() =>
@@ -47,7 +48,7 @@
 
         leaderAvatar.AddListener(() =>
         {
-            OtherPlayerDetailManager.Instance.ViewPlayerDetail(leaderID);
+            OtherPlayerDetailManager.Instance.ViewPlayerDetail(leaderID, leaderServerID);
         });
     }
 
@@ -67,10 +68,22 @@
 
     void Display()
     {
-        var guildInfo = GuildManager.Instance.guildsDict[guildID];
+        FairyData guildInfo = null;
+        if (GuildManager.Instance.guildsDict.ContainsKey(guildID))
+        {
+            guildInfo = GuildManager.Instance.guildsDict[guildID];
+        }
+        else
+        {
+            if (GuildManager.Instance.viewGuildsDict.ContainsKey(guildID))
+            {
+                guildInfo = GuildManager.Instance.viewGuildsDict[guildID];
+            }
+        }
         if (guildInfo == null) return;
         leaderID = guildInfo.LeaderID;
-        OtherPlayerDetailManager.Instance.ViewPlayerDetail(leaderID, (int)ViewPlayerType.viewGuildLeader);
+        leaderServerID = guildInfo.ServerID;
+        OtherPlayerDetailManager.Instance.ViewPlayerDetail(leaderID, leaderServerID, (int)ViewPlayerType.viewGuildLeader);
 
         var config = FamilyConfig.Get(guildInfo.FamilyLV);
         guildEmblem.Display(guildInfo.EmblemID, guildInfo.EmblemWord, 0.7f);
diff --git a/Main/System/Guild/PlayerFairyData.cs b/Main/System/Guild/PlayerFairyData.cs
index 4ff88c4..48909d9 100644
--- a/Main/System/Guild/PlayerFairyData.cs
+++ b/Main/System/Guild/PlayerFairyData.cs
@@ -52,7 +52,7 @@
         fairy.totalFightPower = vNetData.FightPowerEx * Constants.ExpPointValue + vNetData.FightPower;
         fairy.Broadcast = vNetData.Broadcast;
         fairy.LeaderID = (int)vNetData.LeaderID;
-        
+
         fairy.lastChangeNameTick = (int)vNetData.Extra1;
 
 
@@ -108,7 +108,7 @@
 
             }
         }
-        
+
         if (mine.FmLV == 3 && mine.PlayerID != leaderID)
         {
             mine.FmLV = 0;
@@ -216,6 +216,7 @@
     public long totalFightPower;
     public string Broadcast;
     public int LeaderID;    //鏃忛暱鐜╁ID
+    public int LeaderServerID;  //鏃忛暱鏈嶅姟鍣↖D
     public int MemberCount;
     public int lastChangeNameTick;
 
@@ -248,7 +249,7 @@
 public class FairyApply
 {
     public int PlayerID;
-    public string Name;      
+    public string Name;
     public int ReqTime;        //鐢宠鏃堕棿鎴�
     public int LV;        //绛夌骇
     public int Job;        //鑱屼笟
@@ -256,7 +257,7 @@
     public int Face;        //鍩烘湰鑴稿瀷
     public int FacePic;        //澶村儚妗�
     public int TitleID;        //绉板彿
-    public long FightPower;     
+    public long FightPower;
     public int ServerID;        //鎵�灞炲尯鏈岻D
     public int IsOnLine;        //鏄惁鍦ㄧ嚎
 }
diff --git a/Main/System/InternalAffairs/AffairBaseWin.cs b/Main/System/InternalAffairs/AffairBaseWin.cs
index e9d19ed..67b686d 100644
--- a/Main/System/InternalAffairs/AffairBaseWin.cs
+++ b/Main/System/InternalAffairs/AffairBaseWin.cs
@@ -119,6 +119,20 @@
             autoBtn.SetActive(false);
             goldRushItemBtn.SetActive(false);
         }
+
+
+        foreach (var npc in funcNPCs)
+        {
+            var key = npc.heroSkinID;
+            if (!FuncOpen.Instance.IsFuncOpen(FuncNPCManager.Instance.funcNPCToFuncID[key]))
+            {
+                npc.SetActive(false);
+            }
+            else
+            {
+                npc.SetActive(true);
+            }
+        }
     }
 
 
@@ -172,8 +186,17 @@
 
     void OnFiveSecondEvent()
     {
-        var index = FuncNPCManager.Instance.GetRandomAffairNpcTalk();
-        var talk = FuncNPCManager.Instance.GetAffairTalk(funcNPCs[index].heroSkinID);
+        var skinID = FuncNPCManager.Instance.GetRandomAffairNpcTalk();
+        var talk = FuncNPCManager.Instance.GetAffairTalk(skinID);
+        var index = 0;
+        for (int i = 0; i < funcNPCs.Length; i++)
+        {
+            if (funcNPCs[i].heroSkinID == skinID)
+            {
+                index = i;
+                break;
+            }
+        }
         if (talk != null)
         {
             talkTexts[index].text = Language.Get(talk);
diff --git a/Main/System/InternalAffairs/FuncNPCManager.cs b/Main/System/InternalAffairs/FuncNPCManager.cs
index 6d482f2..6308d2d 100644
--- a/Main/System/InternalAffairs/FuncNPCManager.cs
+++ b/Main/System/InternalAffairs/FuncNPCManager.cs
@@ -8,6 +8,7 @@
     //鍐呮斂NPC
     Dictionary<int, string[]> affairNpcTalkDic = new Dictionary<int, string[]>();
     public List<int> affairTalkIndexList = new List<int>();
+    public Dictionary<int, int> funcNPCToFuncID = new Dictionary<int, int>();
     public float lastAffairTalkTime;
     public int lastAffiarRandomIndex;
 
@@ -38,10 +39,7 @@
             affairNpcTalkDic.Add(npcID, talkList);
         }
 
-        for (int i = 0; i < affairNpcTalkDic.Count; i++)
-        {
-            affairTalkIndexList.Add(i);
-        }
+
 
         json = JsonMapper.ToObject(config.Numerical2);
         keys = json.Keys.ToList();
@@ -56,19 +54,41 @@
             guildTalkIndexList.Add(i);
         }
 
+        funcNPCToFuncID = ConfigParse.ParseIntDict(config.Numerical3);
+    }
+
+
+    void RefreshAffairTalkIndexList()
+    {
+        affairTalkIndexList.Clear();
+        foreach (var key in affairNpcTalkDic.Keys)
+        {
+            if (!FuncOpen.Instance.IsFuncOpen(funcNPCToFuncID[key]))
+            {
+                continue;
+            }
+            if (funcNPCToFuncID[key] == 54 && MinggeManager.Instance.isStartAuto)
+            {
+                //绠楀懡涓笉鍙備笌鍠婅瘽
+                continue;
+            }
+            affairTalkIndexList.Add(key);
+        }
     }
 
 
     //闅忔満鏌愪釜NPC瀵硅瘽锛屼笌涓婁竴娆¢殢鏈虹殑NPC绱㈠紩涓嶉噸澶�
+    //杩斿洖NPCID
     public int GetRandomAffairNpcTalk()
     {
+        RefreshAffairTalkIndexList();
         int index = Random.Range(0, affairTalkIndexList.Count);
         if (index == lastAffiarRandomIndex)
         {
             index = (index + 1) % affairTalkIndexList.Count;
         }
         lastAffiarRandomIndex = index;
-        return index;
+        return affairTalkIndexList[index];
     }
 
     public int GetRandomGuildNpcTalk()
diff --git a/Main/System/ItemTip/ItemBatchUseWin.cs b/Main/System/ItemTip/ItemBatchUseWin.cs
index cdeb7e4..b5ee930 100644
--- a/Main/System/ItemTip/ItemBatchUseWin.cs
+++ b/Main/System/ItemTip/ItemBatchUseWin.cs
@@ -125,9 +125,14 @@
     void OnOK()
     {
         CloseWindow();
+        if (curUseCount == 0)
+        {
+            SysNotifyMgr.Instance.ShowTip("UseItem1");
+            return;
+        }
         if (ItemLogicUtility.CheckItemCount(PackType.Item, itemID, curUseCount, 2))
         {
-            ItemLogicUtility.Instance.UseItem(PackManager.Instance.GetItemGUIDByID(itemID));
+            ItemLogicUtility.Instance.UseItem(PackManager.Instance.GetItemGUIDByID(itemID), (int)curUseCount);
         }
     }
 }
diff --git a/Main/System/Message/RichText.cs b/Main/System/Message/RichText.cs
index 360a4da..26b20bd 100644
--- a/Main/System/Message/RichText.cs
+++ b/Main/System/Message/RichText.cs
@@ -504,8 +504,26 @@
             {
                 font = FontUtility.preferred;
             }
+
+            // 娣诲姞 null 妫�鏌�
+            if (font == null || rectTransform == null || cachedTextGeneratorForLayout == null || string.IsNullOrEmpty(m_OutputText))
+            {
+                return 0f;
+            }
+
             var settings = GetGenerationSettings(Vector2.zero);
-            return cachedTextGeneratorForLayout.GetPreferredWidth(m_OutputText, settings) / pixelsPerUnit;
+
+            float width = 0f;
+            try
+            {
+                width = cachedTextGeneratorForLayout.GetPreferredWidth(m_OutputText, settings) / pixelsPerUnit;
+            }
+            catch (Exception ex)
+            {
+                Debug.LogError($"GetPreferredWidth failed: {ex.Message}");
+                width = 0f;
+            }
+            return width;
         }
     }
 
@@ -517,9 +535,26 @@
             {
                 font = FontUtility.preferred;
             }
+
+            // 娣诲姞 null 妫�鏌�
+            if (font == null || rectTransform == null || cachedTextGeneratorForLayout == null || string.IsNullOrEmpty(m_OutputText))
+            {
+                return 0f;
+            }
+
             var settings = GetGenerationSettings(new Vector2(rectTransform.rect.size.x, 0.0f));
-            float _height = cachedTextGeneratorForLayout.GetPreferredHeight(m_OutputText, settings) / pixelsPerUnit;
-            return _height;
+
+            float height = 0f;
+            try
+            {
+                height = cachedTextGeneratorForLayout.GetPreferredHeight(m_OutputText, settings) / pixelsPerUnit;
+            }
+            catch (Exception ex)
+            {
+                Debug.LogError($"GetPreferredHeight failed: {ex.Message}");
+                height = 0f;
+            }
+            return height;
         }
     }
     #endregion
@@ -666,6 +701,9 @@
 
     private Dictionary<int, Match> matchDics = new Dictionary<int, Match>();
 
+    // 瀛楃瀹藉害缂撳瓨锛岄伩鍏嶉噸澶嶈绠楃浉鍚屽瓧绗�
+    private Dictionary<string, float> charWidthCache = new Dictionary<string, float>();
+
     private bool IsModifySize(int _index,out int _size)
     {
         _size = 0;
@@ -724,6 +762,14 @@
         {
             font = FontUtility.preferred;
         }
+
+        // 娣诲姞 null 妫�鏌�
+        if (font == null || rectTransform == null || cachedTextGeneratorForLayout == null)
+        {
+            Debug.LogWarning("SetFitterSize: font, rectTransform or cachedTextGeneratorForLayout is null");
+            return;
+        }
+
         var settings = GetGenerationSettings(Vector2.zero);
 
         float cache = 0;
@@ -732,6 +778,7 @@
         float ratio = GetResolutionRatio();
 
         matchDics.Clear();
+        charWidthCache.Clear();
 
         foreach (Match match in ImgAnalysis.Unity_Img_Regex.Matches(fitterText))
         {
@@ -802,7 +849,8 @@
                 }
                 else
                 {
-                    cache = cachedTextGeneratorForLayout.GetPreferredWidth(match.Value, settings) * ratio;
+                    cache = GetCharWidthCached(match.Value, settings, ratio);
+
                     if (width + cache > (rectTransform.rect.width - 5))
                     {
                         CacluHrefAndImgIndex(Mathf.Max(0, i - 1));
@@ -820,19 +868,16 @@
             else
             {
                 var _size = 0;
-                var _cacheFontSize = fontSize;
+                // 涓嶅啀淇敼 fontSize锛屼娇鐢ㄤ复鏃� TextGenerator 璁$畻涓嶅悓瀛楀彿鐨勫搴�
                 if (_modifySize && IsModifySize(i, out _size))
                 {
-                    fontSize = _size;
-                    settings = GetGenerationSettings(Vector2.zero);
-                    cache = cachedTextGeneratorForLayout.GetPreferredWidth(fitterText[i].ToString(), settings) * ratio;
-                    fontSize = _cacheFontSize;
-                    settings = GetGenerationSettings(Vector2.zero);
+                    cache = GetCharWidthWithCustomSize(fitterText[i], _size, ratio);
                 }
                 else
                 {
-                    cache = cachedTextGeneratorForLayout.GetPreferredWidth(fitterText[i].ToString(), settings) * ratio;
+                    cache = GetCharWidthCached(fitterText[i].ToString(), settings, ratio);
                 }
+
                 if (width + cache > (rectTransform.rect.width - 5))
                 {
                     CacluHrefAndImgIndex(Mathf.Max(0, i - 1));
@@ -850,6 +895,65 @@
         m_OutputText = textBuilder.ToString();
     }
 
+    /// <summary>
+    /// 鑾峰彇瀛楃瀹藉害锛堝甫缂撳瓨锛�
+    /// </summary>
+    private float GetCharWidthCached(string charStr, TextGenerationSettings settings, float ratio)
+    {
+        string cacheKey = $"{fontSize}_{charStr}";
+
+        if (charWidthCache.ContainsKey(cacheKey))
+        {
+            return charWidthCache[cacheKey];
+        }
+
+        float width = 0;
+        try
+        {
+            width = cachedTextGeneratorForLayout.GetPreferredWidth(charStr, settings) * ratio;
+        }
+        catch (Exception ex)
+        {
+            Debug.LogError($"GetPreferredWidth failed for '{charStr}': {ex.Message}");
+            width = 0;
+        }
+
+        charWidthCache[cacheKey] = width;
+        return width;
+    }
+
+    /// <summary>
+    /// 浣跨敤鑷畾涔夊瓧鍙疯绠楀瓧绗﹀搴︼紙涓嶄慨鏀瑰師濮� Text 缁勪欢鐨� fontSize锛�
+    /// </summary>
+    private float GetCharWidthWithCustomSize(char c, int customFontSize, float ratio)
+    {
+        string charStr = c.ToString();
+        string cacheKey = $"{customFontSize}_{charStr}";
+
+        if (charWidthCache.ContainsKey(cacheKey))
+        {
+            return charWidthCache[cacheKey];
+        }
+
+        float width = 0;
+        try
+        {
+            // 鍒涘缓涓存椂鐨� TextGenerationSettings锛屼娇鐢ㄨ嚜瀹氫箟瀛楀彿
+            TextGenerationSettings tempSettings = GetGenerationSettings(Vector2.zero);
+            tempSettings.fontSize = customFontSize;
+
+            width = cachedTextGeneratorForLayout.GetPreferredWidth(charStr, tempSettings) * ratio;
+        }
+        catch (Exception ex)
+        {
+            Debug.LogError($"GetPreferredWidth failed for '{charStr}' with fontSize {customFontSize}: {ex.Message}");
+            width = 0;
+        }
+
+        charWidthCache[cacheKey] = width;
+        return width;
+    }
+
     private void CacluHrefAndImgIndex(int index)
     {
         for (int i = 0; i < m_ImgList.Count; i++)
diff --git a/Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs b/Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs
index 14d202c..7223cd5 100644
--- a/Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs
+++ b/Main/System/OtherPlayerDetail/OtherPlayerDetailManager.cs
@@ -49,8 +49,8 @@
         return viewPlayerData;
     }
 
-    // 鍚戞湇鍔$璇锋眰鍏朵粬鐜╁鏁版嵁
-    public void ViewPlayerDetail(int playerId, int viewType = (int)ViewPlayerType.viewPlayerData, int viewBattlePreSetType = (int)BattlePreSetType.Story)
+    // 鍚戞湇鍔$璇锋眰鍏朵粬鐜╁鏁版嵁 serverID鍙�0榛樿鏈湇鐜╁
+    public void ViewPlayerDetail(int playerId, int serverID, int viewType = (int)ViewPlayerType.viewPlayerData, int viewBattlePreSetType = (int)BattlePreSetType.Story)
     {
         // 鑷繁涓嶈兘鏌ョ湅鑷繁鐨勪俊鎭�
         if (playerId == PlayerDatas.Instance.baseData.PlayerID)
@@ -58,11 +58,11 @@
 
         viewPlayerType = viewType;
         viewPreSetType = viewBattlePreSetType;
-        ViewRoleParticulars(playerId);
+        ViewRoleParticulars(playerId, serverID);
     }
 
     // 鍚戞湇鍔$璇锋眰鐜╁鏁版嵁
-    void ViewRoleParticulars(int playerID)
+    void ViewRoleParticulars(int playerID, int serverID)
     {
         if (playerID <= 0)
             return;
@@ -81,6 +81,7 @@
 
         CA212_tagCMViewPlayerInfo pak = new CA212_tagCMViewPlayerInfo();
         pak.PlayerID = (uint)playerID;
+        pak.ServerID = (uint)serverID;
         GameNetSystem.Instance.SendInfo(pak);
     }
     public void OnRevRoleEquip(HA705_tagSCQueryPlayerCacheResult package)
@@ -110,6 +111,7 @@
         viewPlayerData.FamilyID = (int)package.FamilyID;
         viewPlayerData.FamilyName = UIHelper.ServerStringTrim(package.FamilyName);
         viewPlayerData.FamilyEmblemID = (int)package.FamilyEmblemID;
+        viewPlayerData.FamilyDataServerID = (int)package.FamilyDataServerID;
         viewPlayerData.FamilyEmblemWord = UIHelper.ServerStringTrim(package.FamilyEmblemWord);
 
 
@@ -132,10 +134,11 @@
     {
         if (viewPlayerType == (int)ViewPlayerType.viewPlayerData)
         {
-            if (!UIManager.Instance.IsOpened<OtherPlayerDetailWin>())
+            if (UIManager.Instance.IsOpened<OtherPlayerDetailWin>())
             {
-                UIManager.Instance.OpenWindow<OtherPlayerDetailWin>(viewPreSetType);
+                UIManager.Instance.CloseWindow<OtherPlayerDetailWin>();
             }
+            UIManager.Instance.OpenWindow<OtherPlayerDetailWin>(viewPreSetType);
         }
 
         OnRevPackage?.Invoke(viewPlayerType, playerID);
@@ -402,6 +405,7 @@
         public int ServerID;
         public long FightPower;
         public int FamilyID;
+        public int FamilyDataServerID;  //鍏細鏁版嵁鎵�鍦ㄦ湇鍔″櫒ID锛孉619鏌ョ湅鍏細鐢�
         public string FamilyName;
         public int FamilyEmblemID;
         public string FamilyEmblemWord;
diff --git a/Main/System/OtherPlayerDetail/OtherPlayerDetailWin.cs b/Main/System/OtherPlayerDetail/OtherPlayerDetailWin.cs
index 86fc9e7..5334d56 100644
--- a/Main/System/OtherPlayerDetail/OtherPlayerDetailWin.cs
+++ b/Main/System/OtherPlayerDetail/OtherPlayerDetailWin.cs
@@ -50,24 +50,24 @@
 
     protected override void OnPreOpen()
     {
-        GuildManager.Instance.OnRefreshFairyList += OnRefreshFairyList;
+        GuildManager.Instance.OnUpdateViewFamilyInfo += OnUpdateViewFamilyInfo;
         funcPresetID = OtherPlayerDetailManager.Instance.GetFuncPresetID(manager.viewPlayer, functionOrder, (int)FuncPresetType.Global);
         Display();
     }
 
     protected override void OnPreClose()
     {
-        GuildManager.Instance.OnRefreshFairyList -= OnRefreshFairyList;
+        GuildManager.Instance.OnUpdateViewFamilyInfo -= OnUpdateViewFamilyInfo;
     }
 
-    private void OnRefreshFairyList()
+    private void OnUpdateViewFamilyInfo()
     {
         if (viewPlayerData == null)
         {
             return;
         }
 
-        if (!GuildManager.Instance.guildsDict.ContainsKey(viewPlayerData.FamilyID))
+        if (!GuildManager.Instance.viewGuildsDict.ContainsKey(viewPlayerData.FamilyID))
         {
             return;
         }
@@ -268,7 +268,7 @@
             SysNotifyMgr.Instance.ShowTip("GuildTip01");
             return;
         }
-        GuildManager.Instance.SendFindGuildNoDecrypt(viewPlayerData.FamilyID.ToString());
+        GuildManager.Instance.SendViewGuild(viewPlayerData.FamilyID, viewPlayerData.FamilyDataServerID);
     }
 
     private void OnClickMM()
diff --git a/Main/System/PhantasmPavilion/AvatarCell.cs b/Main/System/PhantasmPavilion/AvatarCell.cs
index c76f52e..43edb69 100644
--- a/Main/System/PhantasmPavilion/AvatarCell.cs
+++ b/Main/System/PhantasmPavilion/AvatarCell.cs
@@ -247,7 +247,7 @@
             {
                 return;
             }
-            AvatarHelper.TryViewOtherPlayerInfo(avatarModel.playerID, (int)ViewPlayerType.viewPlayerData);
+            AvatarHelper.TryViewOtherPlayerInfo(avatarModel.playerID);
         });
     }
 
diff --git a/Main/System/PhantasmPavilion/AvatarHelper.cs b/Main/System/PhantasmPavilion/AvatarHelper.cs
index 6c6b7c6..b2c7411 100644
--- a/Main/System/PhantasmPavilion/AvatarHelper.cs
+++ b/Main/System/PhantasmPavilion/AvatarHelper.cs
@@ -2,13 +2,13 @@
 
 public static class AvatarHelper
 {
-    public static void TryViewOtherPlayerInfo(int _playerId, int viewType = (int)ViewPlayerType.viewPlayerData, int viewPlayerLineupType = (int)BattlePreSetType.Story)
+    //serverID鍙�0榛樿鏈湇鐜╁
+    public static void TryViewOtherPlayerInfo(int playerId, int serverID = 0, int viewType = (int)ViewPlayerType.viewPlayerData, int viewPlayerLineupType = (int)BattlePreSetType.Story)
     {
-        if (_playerId == PlayerDatas.Instance.PlayerId || UIManager.Instance.IsOpened<OtherPlayerDetailWin>())
+        if (playerId == PlayerDatas.Instance.PlayerId || UIManager.Instance.IsOpened<OtherPlayerDetailWin>())
             return;
-        OtherPlayerDetailManager.Instance.ViewPlayerDetail(_playerId, viewType, viewPlayerLineupType);
+        OtherPlayerDetailManager.Instance.ViewPlayerDetail(playerId, serverID, viewType, viewPlayerLineupType);
     }
-
     public static AvatarModel GetAvatarModel(int playerId, int face, int facePic, int job = 0)
     {
         bool isMyself = playerId == PlayerDatas.Instance.PlayerId;
diff --git a/Main/System/ViewNPC/ViewNPCManager.cs b/Main/System/ViewNPC/ViewNPCManager.cs
index 5c0382f..4a0e255 100644
--- a/Main/System/ViewNPC/ViewNPCManager.cs
+++ b/Main/System/ViewNPC/ViewNPCManager.cs
@@ -67,7 +67,7 @@
             {
                 case BattleConst.ArenaBattleField:
                     int playerId = (int)ArenaManager.Instance.atkPlayerId;
-                    OtherPlayerDetailManager.Instance.ViewPlayerDetail(playerId, (int)ViewPlayerType.viewArenaBattleEnemyHero, (int)BattlePreSetType.Arena);
+                    OtherPlayerDetailManager.Instance.ViewPlayerDetail(playerId, 0, (int)ViewPlayerType.viewArenaBattleEnemyHero, (int)BattlePreSetType.Arena);
                     break;
             }
             return;
diff --git a/Main/Utility/TimeUtility.cs b/Main/Utility/TimeUtility.cs
index ed856e8..ef8a4a1 100644
--- a/Main/Utility/TimeUtility.cs
+++ b/Main/Utility/TimeUtility.cs
@@ -547,4 +547,40 @@
     {
         return (int)(GetTodayEndTime() - ServerNow).TotalSeconds;
     }
+
+    #region 璺ㄦ湇鍜屾湰鏈嶅叕鐢ㄦ帴鍙�
+    //褰撴湁鐨勫姛鑳戒細浠庢湰鏈嶅姛鑳藉彉鎴愯法鏈嶅姛鑳界殑鏃跺�欑粺涓�鐢ㄨ繖浜涙帴鍙e鐞嗘椂闂�
+    //鍚勮嚜鐨勫姛鑳戒紶鑷繁鐨剒oneID
+
+    // 鑾峰彇褰撳墠鏃堕棿, 鍏細璺ㄥ尯鍓嶅彇鏈湇鏃堕棿锛岃法鏈嶅悗鍙栬法鏈嶆椂闂�
+    public static DateTime GetCommServerNow(int zoneID = 0)
+    {
+        if (zoneID == 0)
+        {
+            return ServerNow;
+        }
+        else
+        {
+            return CrossServerNow;
+        }
+    }
+
+    public static int GetCommServerTick(int zoneID = 0)
+    {
+        if (zoneID == 0)
+        {
+            return AllSeconds;
+        }
+        else
+        {
+            return AllSecondsCrossServer;
+        }
+    }
+
+    public static DateTime GetCommTodayEndTime(int zoneID = 0)
+    {
+        var now = GetCommServerNow(zoneID).AddDays(1);
+        return new DateTime(now.Year, now.Month, now.Day);
+    }
+    #endregion
 }

--
Gitblit v1.8.0