From 079ecd71b24f5bf9aac653f18f76d4670bcd169e Mon Sep 17 00:00:00 2001
From: client_Hale <339726288@qq.com>
Date: 星期五, 14 九月 2018 16:17:28 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts

---
 Core/GameEngine/Model/Config/DungeonInspireConfig.cs                                |   30 +-
 System/OpenServerActivity/ImpactRankModel.cs                                        |    4 
 Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA30A_tagMCFBEncourageInfo.cs |    5 
 System/Chat/ChatCtrl.cs                                                             |    3 
 System/Dungeon/DungeonInspireWin.cs                                                 |  194 +++++++++++--------
 System/Dungeon/DungeonModel.cs                                                      |   63 +++--
 Core/GameEngine/Model/Config/DungeonInspireConfig.cs.meta                           |    2 
 System/Dungeon/DungeonFairyLandWin.cs                                               |    6 
 System/Dungeon/DungeonInspireBehaviour.cs                                           |   12 
 System/Treasure/TreasureLevelUpWin.cs                                               |    2 
 System/MainInterfacePanel/FeatureNoticeWin.cs                                       |    3 
 Utility/LanguageVerify.cs                                                           |   98 +++++++++
 System/Store/BagStoreWin.cs                                                         |    1 
 System/Store/StoreModel.cs                                                          |  121 ++++++++---
 System/Treasure/FairyTreasureCollectPanelPattern5.cs                                |    1 
 Core/NetworkPackage/ServerPack/HA3_Function/HA30A_tagMCFBEncourageInfo.cs           |   18 +
 System/MainInterfacePanel/FeatureNoticeModel.cs                                     |   20 +
 System/MainInterfacePanel/MainInterfaceWin.cs                                       |    4 
 Core/GameEngine/Model/Player/Character/PlayerBaseData.cs                            |   10 
 System/Store/StoreWin.cs                                                            |    1 
 20 files changed, 405 insertions(+), 193 deletions(-)

diff --git a/Core/GameEngine/Model/Config/DungeonInspireConfig.cs b/Core/GameEngine/Model/Config/DungeonInspireConfig.cs
index bbbf0c8..5aebec7 100644
--- a/Core/GameEngine/Model/Config/DungeonInspireConfig.cs
+++ b/Core/GameEngine/Model/Config/DungeonInspireConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:			绗簩涓栫晫
-//    [  Date ]:		   Saturday, January 06, 2018
+//    [  Date ]:		   Friday, September 14, 2018
 //--------------------------------------------------------
 
 using UnityEngine;
@@ -11,11 +11,11 @@
     
 	public partial class DungeonInspireConfig : ConfigBase {
 
-		public int ID { get ; private set ; }
-		public int DataMapId { get ; private set ; }
-		public int InspireType { get ; private set ; }
-		public int InspireCount { get ; private set ; }
-		public int MoneyCount { get ; private set ; }
+		public int ID { get ; private set ; }
+		public int DataMapId { get ; private set ; }
+		public int InspireType { get ; private set ; }
+		public int InspireCount { get ; private set ; }
+		public string MoneyCount { get ; private set; } 
 
 		public override string getKey()
         {
@@ -25,15 +25,15 @@
 		public override void Parse() {
 			try
             {
-                ID=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0; 
-			
-				DataMapId=IsNumeric(rawContents[1]) ? int.Parse(rawContents[1]):0; 
-			
-				InspireType=IsNumeric(rawContents[2]) ? int.Parse(rawContents[2]):0; 
-			
-				InspireCount=IsNumeric(rawContents[3]) ? int.Parse(rawContents[3]):0; 
-			
-				MoneyCount=IsNumeric(rawContents[4]) ? int.Parse(rawContents[4]):0; 
+                ID=IsNumeric(rawContents[0]) ? int.Parse(rawContents[0]):0; 
+			
+				DataMapId=IsNumeric(rawContents[1]) ? int.Parse(rawContents[1]):0; 
+			
+				InspireType=IsNumeric(rawContents[2]) ? int.Parse(rawContents[2]):0; 
+			
+				InspireCount=IsNumeric(rawContents[3]) ? int.Parse(rawContents[3]):0; 
+			
+				MoneyCount = rawContents[4].Trim();
             }
             catch (Exception ex)
             {
diff --git a/Core/GameEngine/Model/Config/DungeonInspireConfig.cs.meta b/Core/GameEngine/Model/Config/DungeonInspireConfig.cs.meta
index 22d92b3..9e868bd 100644
--- a/Core/GameEngine/Model/Config/DungeonInspireConfig.cs.meta
+++ b/Core/GameEngine/Model/Config/DungeonInspireConfig.cs.meta
@@ -1,6 +1,6 @@
 fileFormatVersion: 2
 guid: 413d3284263320648a52a0009e3d125f
-timeCreated: 1515213550
+timeCreated: 1536909479
 licenseType: Pro
 MonoImporter:
   serializedVersion: 2
diff --git a/Core/GameEngine/Model/Player/Character/PlayerBaseData.cs b/Core/GameEngine/Model/Player/Character/PlayerBaseData.cs
index fabc602..eaffadd 100644
--- a/Core/GameEngine/Model/Player/Character/PlayerBaseData.cs
+++ b/Core/GameEngine/Model/Player/Character/PlayerBaseData.cs
@@ -62,10 +62,8 @@
     public int BasicsDefense;//鍩虹闃插尽
     public int BasicsScoreAHit;//鍩虹鍛戒腑
     public int BasicsDodge;//鍩虹闂伩
-    public long treasurePotentialSp
-    {
-        get
-        {
+    public long treasurePotentialSp {
+        get {
             return ExAttr8 * (long)100000000 + ExAttr7;
         }
     }
@@ -76,7 +74,7 @@
     {
         AccID = _serverInfo.AccID;
         PlayerID = _serverInfo.PlayerID;
-        PlayerName = _serverInfo.PlayerName.Trim();
+        PlayerName = _serverInfo.PlayerName.Trim().Replace(" ", "");
         AccState = _serverInfo.AccState;
         GMLevel = _serverInfo.GMLevel;
         Sex = _serverInfo.Sex;
@@ -87,7 +85,7 @@
         ExpPoint = _serverInfo.ExpPoint;
         TotalExp = _serverInfo.TotalExp;
         Family = _serverInfo.Family;
-        FamilyName = _serverInfo.FamilyName.Trim();
+        FamilyName = _serverInfo.FamilyName.Trim().Replace(" ", "");
         Gold = _serverInfo.Gold;
         GoldPaper = _serverInfo.GoldPaper;
         Silver = _serverInfo.Silver;
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA30A_tagMCFBEncourageInfo.cs b/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA30A_tagMCFBEncourageInfo.cs
index 5afcbec..f3a811a 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA30A_tagMCFBEncourageInfo.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA30A_tagMCFBEncourageInfo.cs
@@ -21,7 +21,10 @@
         base.Done(vNetPack);
 
         HA30A_tagMCFBEncourageInfo vNetData = vNetPack as HA30A_tagMCFBEncourageInfo;
-        model.UpdateInspireLevel(vNetData.Cnt1, vNetData.Cnt2);
+        for (int i = 0; i < vNetData.Cnt; i++)
+        {
+            model.UpdateInspireLevel(vNetData.InfoList[i].MoneyType, vNetData.InfoList[i].EncourageCnt);
+        }
     }
 
 }
diff --git a/Core/NetworkPackage/ServerPack/HA3_Function/HA30A_tagMCFBEncourageInfo.cs b/Core/NetworkPackage/ServerPack/HA3_Function/HA30A_tagMCFBEncourageInfo.cs
index 040bfd5..a9a1afb 100644
--- a/Core/NetworkPackage/ServerPack/HA3_Function/HA30A_tagMCFBEncourageInfo.cs
+++ b/Core/NetworkPackage/ServerPack/HA3_Function/HA30A_tagMCFBEncourageInfo.cs
@@ -4,16 +4,26 @@
 //A3 0A 副本鼓舞信息通知 #tagMCFBEncourageInfo

 

 public class HA30A_tagMCFBEncourageInfo : GameNetPackBasic {

-    public byte Cnt1;    // 当前铜钱鼓舞次数

-    public byte Cnt2;    // 当前仙玉鼓舞次数

+    public byte Cnt;    // 

+    public  tagMCFBEncourageCnt[] InfoList;    // 次数信息

 

     public HA30A_tagMCFBEncourageInfo () {

         _cmd = (ushort)0xA30A;

     }

 

     public override void ReadFromBytes (byte[] vBytes) {

-        TransBytes (out Cnt1, vBytes, NetDataType.BYTE);

-        TransBytes (out Cnt2, vBytes, NetDataType.BYTE);

+        TransBytes (out Cnt, vBytes, NetDataType.BYTE);

+        InfoList = new tagMCFBEncourageCnt[Cnt];

+        for (int i = 0; i < Cnt; i ++) {

+            InfoList[i] = new tagMCFBEncourageCnt();

+            TransBytes (out InfoList[i].MoneyType, vBytes, NetDataType.BYTE);

+            TransBytes (out InfoList[i].EncourageCnt, vBytes, NetDataType.BYTE);

+        }

+    }

+

+    public struct tagMCFBEncourageCnt {

+        public byte MoneyType;        // 金钱类型

+        public byte EncourageCnt;        // 当前鼓舞次数

     }

 

 }

diff --git a/System/Chat/ChatCtrl.cs b/System/Chat/ChatCtrl.cs
index 982cd01..ce19223 100644
--- a/System/Chat/ChatCtrl.cs
+++ b/System/Chat/ChatCtrl.cs
@@ -677,7 +677,7 @@
 
     #region 缁勯槦閭�璇�
     private const string INVITE_IDENTIFY = "<i>";
-    private static Regex InviteRegex = new Regex(@INVITE_IDENTIFY, RegexOptions.Singleline);
+    public static Regex InviteRegex = new Regex(@INVITE_IDENTIFY, RegexOptions.Singleline);
     public void SendInvite(string msg)
     {
         SendChatInfo(ChatInfoType.World, StringUtility.Contact(msg, INVITE_IDENTIFY));
@@ -798,6 +798,7 @@
     #endregion
 
     #region 濂藉弸绉佽亰
+    public static Regex KillRegex = new Regex(@KILL_IDENTIFY, RegexOptions.Singleline);
     public const string KILL_IDENTIFY = "<k>";
     public void SendFriendChat(string msg, int player)
     {
diff --git a/System/Dungeon/DungeonFairyLandWin.cs b/System/Dungeon/DungeonFairyLandWin.cs
index 6bf4e8c..0048ad4 100644
--- a/System/Dungeon/DungeonFairyLandWin.cs
+++ b/System/Dungeon/DungeonFairyLandWin.cs
@@ -121,9 +121,9 @@
 
         private void DungeonEncourageEvent()
         {
-            var lv = model.dungeonCoinInspireCount + model.dungeonJadeInspireCount;
-            targetTextList[3].text = lv == 0 ? StringUtility.Contact(Language.Get("FairyLand_Func3"), "锛�", Language.Get("FairyLand_Func4"))
-                : StringUtility.Contact(Language.Get("FairyLand_Func3"), "锛�<color=#00ff00>", lv * model.dungeonInspireUper, "%</color>");
+            var level = model.GetDungeonInspireLevel();
+            targetTextList[3].text = level == 0 ? StringUtility.Contact(Language.Get("FairyLand_Func3"), "锛�", Language.Get("FairyLand_Func4"))
+                : StringUtility.Contact(Language.Get("FairyLand_Func3"), "锛�<color=#00ff00>", level * model.GetDungeonInspireUpper(31080), "%</color>");
         }
 
         private void UpdateBuf()
diff --git a/System/Dungeon/DungeonInspireBehaviour.cs b/System/Dungeon/DungeonInspireBehaviour.cs
index b3fcf2b..5c77ce0 100644
--- a/System/Dungeon/DungeonInspireBehaviour.cs
+++ b/System/Dungeon/DungeonInspireBehaviour.cs
@@ -43,7 +43,7 @@
             }
             for (int i = 0; i < _list.Count; i++)
             {
-                if (_list[i].InspireType == 1)
+                if (_list[i].InspireType == 3)
                 {
                     m_CoinConfig = _list[i];
                     break;
@@ -54,13 +54,13 @@
         private void UpdateDugeonInspireLv()
         {
             var mapId = model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
-            var lv = model.dungeonJadeInspireCount + model.dungeonCoinInspireCount;
-            m_Waggle = m_CoinConfig != null && model.dungeonCoinInspireCount < m_CoinConfig.InspireCount
-                && lv < model.GetInspireMaxCount(mapId);
+            var level = model.GetDungeonInspireLevel();
+            m_Waggle = m_CoinConfig != null && model.GetDungeonInspireLevel(3) < m_CoinConfig.InspireCount
+                && level < model.GetInspireMaxCount(mapId);
             if (m_InspireProgress != null)
             {
                 m_InspireProgress.gameObject.SetActive(PlayerDatas.Instance.baseData.MapID == DemonJarModel.DEMONJAR_MAPID);
-                m_InspireProgress.text = StringUtility.Contact(lv * 10, "%");
+                m_InspireProgress.text = StringUtility.Contact(level * 10, "%");
             }
             if (!m_Waggle)
             {
@@ -100,7 +100,7 @@
 
         private void OnInspireBtn()
         {
-            if ((model.dungeonCoinInspireCount + model.dungeonJadeInspireCount) >= model.GetInspireMaxCount(PlayerDatas.Instance.baseData.MapID))
+            if ((model.GetDungeonInspireLevel()) >= model.GetInspireMaxCount(PlayerDatas.Instance.baseData.MapID))
             {
                 SysNotifyMgr.Instance.ShowTip("Xjmj_InspireMaxLevel");
                 return;
diff --git a/System/Dungeon/DungeonInspireWin.cs b/System/Dungeon/DungeonInspireWin.cs
index 1a10c7a..97c4699 100644
--- a/System/Dungeon/DungeonInspireWin.cs
+++ b/System/Dungeon/DungeonInspireWin.cs
@@ -15,25 +15,17 @@
 
     public class DungeonInspireWin : Window
     {
-        [SerializeField]
-        Button coinInspireBtn;
-        [SerializeField]
-        GameObject coinInspireMark;
-        [SerializeField]
-        Button fairyInspireBtn;
-        [SerializeField]
-        GameObject fairyInspireMark;
-        [SerializeField]
-        Text coinInspireInfoText;
-        [SerializeField]
-        Text fairyInspireInfoText;
-        [SerializeField] Text m_InpsireLvTxt;
-        [SerializeField]
-        Button confirmBtn;
-        [SerializeField]
-        Button cancelBtn;
-        [SerializeField]
-        Button m_CloseBtn;
+        [SerializeField] Button m_CoinInspire;
+        [SerializeField] RectTransform m_CoinInspireCheck;
+        [SerializeField] Button m_FairyInspire;
+        [SerializeField] RectTransform m_FairyInspireCheck;
+        [SerializeField] Text m_CoinCost;
+        [SerializeField] Text m_FairyCost;
+        [SerializeField] Text m_InspireLevel;
+        [SerializeField] Text m_Remind;
+        [SerializeField] Button m_Confirm;
+        [SerializeField] Button m_Cancel;
+        [SerializeField] Button m_Close;
 
         DungeonModel m_Model;
         DungeonModel model
@@ -44,10 +36,10 @@
             }
         }
 
-        private bool isCoinInspire = false;
-        private bool isFairyInspire = false;
-        private DungeonInspireConfig coinInspireCfg = null;
-        private DungeonInspireConfig fairyInspireCfg = null;
+        private bool coinInspire = false;
+        private bool fairyInspire = false;
+        private DungeonInspireConfig coinInspireConfig = null;
+        private DungeonInspireConfig fairyInspireConfig = null;
         #region Built-in
         protected override void BindController()
         {
@@ -55,11 +47,11 @@
 
         protected override void AddListeners()
         {
-            coinInspireBtn.onClick.AddListener(OnCoinInspire);
-            fairyInspireBtn.onClick.AddListener(OnFairyInspire);
-            confirmBtn.onClick.AddListener(OnConfirmBtn);
-            cancelBtn.onClick.AddListener(OnCancelBtn);
-            m_CloseBtn.onClick.AddListener(CloseClick);
+            m_CoinInspire.onClick.AddListener(CoinInspire);
+            m_FairyInspire.onClick.AddListener(FairyInspire);
+            m_Confirm.onClick.AddListener(Confirm);
+            m_Cancel.onClick.AddListener(Cancel);
+            m_Close.onClick.AddListener(CloseClick);
         }
 
         protected override void OnPreOpen()
@@ -69,25 +61,30 @@
             {
                 return;
             }
-            coinInspireCfg = null;
-            fairyInspireCfg = null;
+            coinInspireConfig = null;
+            fairyInspireConfig = null;
+
             for (int i = 0; i < _list.Count; i++)
             {
-                if (_list[i].InspireType == 1)
+                if (_list[i].InspireType == 3)
                 {
-                    coinInspireCfg = _list[i];
+                    coinInspireConfig = _list[i];
                 }
-                else if (_list[i].InspireType == 2)
+                else if (_list[i].InspireType == 2
+                    || _list[i].InspireType == 1 || _list[i].InspireType == 5)
                 {
-                    fairyInspireCfg = _list[i];
+                    fairyInspireConfig = _list[i];
                 }
             }
 
-            coinInspireBtn.gameObject.SetActive(coinInspireCfg != null);
-            isCoinInspire = coinInspireCfg == null ? false : true;
-            isFairyInspire = !isCoinInspire;
-            InitData();
+            m_CoinInspire.gameObject.SetActive(coinInspireConfig != null);
+
+            coinInspire = coinInspireConfig == null ? false : true;
+            fairyInspire = !coinInspire;
+
+            Display();
             UpdateInspireType();
+            DisplayRemind();
 
             model.dungeonInspireLvEvent += DungeonEncourageEvent;
         }
@@ -96,6 +93,12 @@
 
         protected override void OnAfterOpen()
         {
+            var _list = model.GetDungeonInspire(PlayerDatas.Instance.baseData.MapID);
+            if (_list == null)
+            {
+                CloseImmediately();
+                return;
+            }
         }
 
         protected override void OnPreClose()
@@ -110,95 +113,125 @@
 
         private void DungeonEncourageEvent()
         {
-            var lv = model.dungeonCoinInspireCount + model.dungeonJadeInspireCount;
-            if (lv >= fairyInspireCfg.InspireCount && !InFairyLandGuiding())
+            var level = model.GetDungeonInspireLevel();
+            if (level >= model.GetInspireMaxCount(PlayerDatas.Instance.baseData.MapID)
+                && !InGuiding())
             {
                 CloseImmediately();
                 return;
             }
+            DisplayCost();
             UpdateInspireType();
         }
 
-        private void OnCoinInspire()
+        private void CoinInspire()
         {
-            if (!isCoinInspire)
+            if (!coinInspire)
             {
-                if (model.dungeonCoinInspireCount >= coinInspireCfg.InspireCount)
+                if (model.GetDungeonInspireLevel(3) >= coinInspireConfig.InspireCount)
                 {
                     SysNotifyMgr.Instance.ShowTip("Xjmj_CopperInspireFull");
                     return;
                 }
-                isCoinInspire = true;
-                isFairyInspire = false;
+                coinInspire = true;
+                fairyInspire = false;
             }
             else
             {
-                isCoinInspire = false;
+                coinInspire = false;
             }
             UpdateInspireType();
         }
-        private void OnFairyInspire()
+        private void FairyInspire()
         {
-            if (coinInspireCfg == null)
+            if (coinInspireConfig == null)
             {
                 return;
             }
-            isCoinInspire = false;
-            isFairyInspire = !isFairyInspire;
+            coinInspire = false;
+            fairyInspire = !fairyInspire;
             UpdateInspireType();
         }
 
-        private void OnConfirmBtn()
+        private void Confirm()
         {
-            if (isFairyInspire)
+            if (fairyInspire)
             {
-                if (PlayerDatas.Instance.baseData.GoldPaper + PlayerDatas.Instance.baseData.Gold < fairyInspireCfg.MoneyCount
-                    && !InFairyLandGuiding())
+                uint money = 0;
+                switch (fairyInspireConfig.InspireType)
                 {
-                    SysNotifyMgr.Instance.ShowTip("Xjmj_InspireNoEnoughFairy");
+                    case 1:
+                        money += PlayerDatas.Instance.baseData.Gold;
+                        break;
+                    case 2:
+                        money += PlayerDatas.Instance.baseData.GoldPaper;
+                        break;
+                    case 5:
+                        money = PlayerDatas.Instance.baseData.GoldPaper + PlayerDatas.Instance.baseData.Gold;
+                        break;
+                }
+                if (money < model.GetDungeonInspireCost(fairyInspireConfig)
+                    && !InGuiding())
+                {
+                    CloseImmediately();
+                    WindowCenter.Instance.Open<RechargeTipWin>();
                 }
                 else
                 {
-                    CA508_tagCMDoFBAction inspirepack = new CA508_tagCMDoFBAction();
-                    inspirepack.ActionType = 0;
-                    inspirepack.ActionInfo = (uint)fairyInspireCfg.InspireType;
-                    GameNetSystem.Instance.SendInfo(inspirepack);
+                    CA508_tagCMDoFBAction pak = new CA508_tagCMDoFBAction();
+                    pak.ActionType = 0;
+                    pak.ActionInfo = (uint)fairyInspireConfig.InspireType;
+                    GameNetSystem.Instance.SendInfo(pak);
                 }
             }
-            else if (isCoinInspire)
+            else if (coinInspire)
             {
-                if (PlayerDatas.Instance.baseData.Silver < coinInspireCfg.MoneyCount
-                    && !InFairyLandGuiding())
+                if (UIHelper.GetMoneyCnt(3) < (ulong)model.GetDungeonInspireCost(coinInspireConfig)
+                    && !InGuiding())
                 {
                     SysNotifyMgr.Instance.ShowTip("Xjmj_InspireNoEnoughGold");
                 }
                 else
                 {
-                    CA508_tagCMDoFBAction inspirepack = new CA508_tagCMDoFBAction();
-                    inspirepack.ActionType = 0;
-                    inspirepack.ActionInfo = (uint)coinInspireCfg.InspireType;
-                    GameNetSystem.Instance.SendInfo(inspirepack);
+                    CA508_tagCMDoFBAction pak = new CA508_tagCMDoFBAction();
+                    pak.ActionType = 0;
+                    pak.ActionInfo = (uint)coinInspireConfig.InspireType;
+                    GameNetSystem.Instance.SendInfo(pak);
                 }
             }
         }
 
-        private void OnCancelBtn()
+        private void Cancel()
         {
             CloseImmediately();
         }
 
-        private void InitData()
+        private void Display()
         {
-            if (coinInspireCfg != null)
-            {
-                coinInspireInfoText.text = Language.Get("FairyLand_Func9", coinInspireCfg.MoneyCount, coinInspireCfg.InspireCount);
-            }
-            fairyInspireInfoText.text = Language.Get("FairyLand_Func10", fairyInspireCfg.MoneyCount);
+            DisplayCost();
         }
 
-        bool InFairyLandGuiding()
+        private void DisplayCost()
         {
-            if (NewBieCenter.Instance.inGuiding && NewBieCenter.Instance.currentGuide == GeneralConfig.Instance.fairyLandGuideId)
+            if (coinInspireConfig != null)
+            {
+                m_CoinCost.text = Language.Get("FairyLand_Func9", model.GetDungeonInspireCost(coinInspireConfig), coinInspireConfig.InspireCount);
+            }
+            if (fairyInspireConfig != null)
+            {
+                m_FairyCost.text = Language.Get("FairyLand_Func10", model.GetDungeonInspireCost(fairyInspireConfig));
+            }
+        }
+
+        void DisplayRemind()
+        {
+            m_Remind.gameObject.SetActive(fairyInspireConfig != null && fairyInspireConfig.InspireType == 5);
+        }
+
+        bool InGuiding()
+        {
+            if (NewBieCenter.Instance.inGuiding
+                && NewBieCenter.Instance.currentGuide == GeneralConfig.Instance.fairyLandGuideId)
             {
                 return true;
             }
@@ -207,11 +240,12 @@
 
         private void UpdateInspireType()
         {
-            var lv = model.dungeonJadeInspireCount + model.dungeonCoinInspireCount;
-            m_InpsireLvTxt.text = lv == 0 ? Language.Get("FairyLand_Func4")
-                : Language.Get("HaveInspired", StringUtility.Contact("<color=#109d06>", lv * model.dungeonInspireUper, "%</color>"));
-            coinInspireMark.SetActive(isCoinInspire);
-            fairyInspireMark.SetActive(isFairyInspire);
+            var level = model.GetDungeonInspireLevel();
+            m_InspireLevel.text = level == 0 ? Language.Get("FairyLand_Func4")
+                : Language.Get("HaveInspired", StringUtility.Contact("<color=#109d06>", 
+                level * model.GetDungeonInspireUpper(PlayerDatas.Instance.baseData.MapID), "%</color>"));
+            m_CoinInspireCheck.gameObject.SetActive(coinInspire);
+            m_FairyInspireCheck.gameObject.SetActive(fairyInspire);
         }
     }
 
diff --git a/System/Dungeon/DungeonModel.cs b/System/Dungeon/DungeonModel.cs
index a8ea790..d839622 100644
--- a/System/Dungeon/DungeonModel.cs
+++ b/System/Dungeon/DungeonModel.cs
@@ -73,17 +73,9 @@
             set { m_DungeonResult = value; }
         }
 
-        public int dungeonCoinInspireCount {
-            get; private set;
-        }
-
-        public int dungeonJadeInspireCount {
-            get; private set;
-        }
-
-        public int dungeonInspireUper {
-            get; private set;
-        }
+        Dictionary<int, int> dungeonInspireCounts = new Dictionary<int, int>();//5-浠欑帀鎴栫粦鐜�
+        Dictionary<int, int> dungeonInspireUpperDict = new Dictionary<int, int>();
+        Dictionary<int, int> dungeonMaxInspireCountDict = new Dictionary<int, int>();
 
         Dungeon m_SelectedKylinDungeon;
         public Dungeon selectedKylinDungeon {
@@ -140,8 +132,7 @@
         public void OnBeforePlayerDataInitialize()
         {
             dungeonCountRemainTimes.Clear();
-            dungeonCoinInspireCount = 0;
-            dungeonJadeInspireCount = 0;
+            dungeonInspireCounts.Clear();
         }
 
         public void OnAfterPlayerDataInitialize()
@@ -597,6 +588,7 @@
             specialItemCollectRecord = default(Item);
             dungeonCoolDowns.Clear();
             m_Mission = default(DungeonMissionData);
+            dungeonInspireCounts.Clear();
         }
 
         public void UpdateRecords(HA320_tagMCPlayerFBInfoData.tagMCFBInfo[] _serverInfos)
@@ -690,10 +682,9 @@
             }
         }
 
-        public void UpdateInspireLevel(int coinInspireLv, int jadeInpsireLv)
+        public void UpdateInspireLevel(int type, int count)
         {
-            dungeonCoinInspireCount = coinInspireLv;
-            dungeonJadeInspireCount = jadeInpsireLv;
+            dungeonInspireCounts[type] = count;
             if (dungeonInspireLvEvent != null)
             {
                 dungeonInspireLvEvent();
@@ -1216,22 +1207,35 @@
             }
         }
 
-        public int GetInspireMaxCount(int _dataMapId)
+        public int GetDungeonInspireLevel(int moneyType = 0)//0浠h〃鎬荤瓑绾�
         {
-            List<DungeonInspireConfig> _list = GetDungeonInspire(_dataMapId);
-            int _maxCnt = 0;
-            if (_list != null)
+            var level = 0;
+            foreach (var key in dungeonInspireCounts.Keys)
             {
-                for (int i = 0; i < _list.Count; i++)
+                if (moneyType == 0 || moneyType == key)
                 {
-                    if (_list[i].InspireType == 2)
-                    {
-                        _maxCnt = _list[i].InspireCount;
-                        break;
-                    }
+                    level += dungeonInspireCounts[key];
                 }
             }
-            return _maxCnt;
+            return level;
+        }
+
+        public int GetDungeonInspireCost(DungeonInspireConfig config)
+        {
+            var level = GetDungeonInspireLevel();
+            Equation.Instance.Clear();
+            Equation.Instance.AddKeyValue("encourageLV", level);
+            return Equation.Instance.Eval<int>(config.MoneyCount);
+        }
+
+        public int GetDungeonInspireUpper(int mapId)
+        {
+            return dungeonInspireUpperDict.ContainsKey(mapId) ? dungeonInspireUpperDict[mapId] : 0;
+        }
+
+        public int GetInspireMaxCount(int _dataMapId)
+        {
+            return dungeonMaxInspireCountDict.ContainsKey(_dataMapId) ? dungeonMaxInspireCountDict[_dataMapId] : 0;
         }
 
         public Item GetLackItem(DungeonSuppliesLackWin.LackType lackType)
@@ -1363,10 +1367,11 @@
                 trialDungeonMapList.AddRange(ConfigParse.GetMultipleStr<int>(funcCfg.Numerical1));
             }
 
-            funcCfg = Config.Instance.Get<FuncConfigConfig>("InspireNum");
+            funcCfg = Config.Instance.Get<FuncConfigConfig>("FBEncourageBuff");
             if (funcCfg != null)
             {
-                dungeonInspireUper = int.Parse(funcCfg.Numerical1);
+                dungeonMaxInspireCountDict = ConfigParse.GetDic<int, int>(funcCfg.Numerical2);
+                dungeonInspireUpperDict = ConfigParse.GetDic<int, int>(funcCfg.Numerical3);
             }
 
             foreach (var _cfg in Config.Instance.GetAllValues<DungeonInspireConfig>())
diff --git a/System/MainInterfacePanel/FeatureNoticeModel.cs b/System/MainInterfacePanel/FeatureNoticeModel.cs
index acd196f..e2d44ab 100644
--- a/System/MainInterfacePanel/FeatureNoticeModel.cs
+++ b/System/MainInterfacePanel/FeatureNoticeModel.cs
@@ -99,6 +99,7 @@
                 }
                 if (OpenFuncId != FunctionList[i].FuncId || !RedPointChange)
                 {
+                    OpenFuncId = FunctionList[i].FuncId;
                     IsRedPoint = false;
                     TrailerClassification(FunctionList[i].FuncId);
                 }
@@ -223,15 +224,18 @@
         }
     }
 
-    public void WhetherToPlayTheBox()
+    public IEnumerator WhetherToPlayTheBox()
     {
+        yield return new WaitForSeconds(0.7f);
         var inDungeon = IsDungeon();
         var IsOpenMaininterface = WindowCenter.Instance.CheckOpen<MainInterfaceWin>();
+        var IsOpenOffLineOnHook = WindowCenter.Instance.CheckOpen<OffLineOnHookWin>();
         var treasureModel = ModelCenter.Instance.GetModel<TreasureModel>();
         if (NewBieCenter.Instance.inGuiding || treasureModel.newGotShowing || inDungeon || !IsOpenMaininterface
-            || treasureModel.treasureStageUpShow || WindowCenter.Instance.ExitAnyFullScreenOrMaskWin())
+            || treasureModel.treasureStageUpShow || WindowCenter.Instance.ExitAnyFullScreenOrMaskWin() ||
+            IsOpenOffLineOnHook)
         {
-            return;
+            yield break;
         }
         for (int i = 0; i < FunctionList.Count; i++)
         {
@@ -240,15 +244,19 @@
                 var functionForecastConfig = Config.Instance.Get<FunctionForecastConfig>(FunctionList[i].FuncId);
                 if (functionForecastConfig.FrameLevel <= 0)
                 {
-                    return;
+                    yield break;
                 }
-                string strKey = "FeatureNotice" + functionForecastConfig.FrameLevel+PlayerDatas.Instance.baseData.PlayerID;
+                string strKey = "FeatureNotice" + functionForecastConfig.FrameLevel + PlayerDatas.Instance.baseData.PlayerID;
                 int type = LocalSave.GetInt(strKey);
                 bool IsOpenMain = WindowCenter.Instance.CheckOpen<MainInterfaceWin>();
                 if (PlayerDatas.Instance.baseData.LV >= functionForecastConfig.FrameLevel && type == 0)
                 {
                     LocalSave.SetInt(strKey, functionForecastConfig.FrameLevel);
-                    WindowCenter.Instance.Open<FeatureNoticeWin>();
+                   var IsOpenFeatureNotice = WindowCenter.Instance.CheckOpen<FeatureNoticeWin>();
+                    if (!IsOpenFeatureNotice)
+                    {
+                        WindowCenter.Instance.Open<FeatureNoticeWin>();
+                    }              
                 }
             }
         }
diff --git a/System/MainInterfacePanel/FeatureNoticeWin.cs b/System/MainInterfacePanel/FeatureNoticeWin.cs
index 7109173..68ae3d2 100644
--- a/System/MainInterfacePanel/FeatureNoticeWin.cs
+++ b/System/MainInterfacePanel/FeatureNoticeWin.cs
@@ -370,7 +370,8 @@
                         }
                         else
                         {
-                            string str = ((float)treasure.exp / treasure.treasureStages[funcStage].exp) * 100 + "%";
+                            double dou=Math.Round((double)treasure.exp / treasure.treasureStages[funcStage].exp,2);
+                            string str = dou * 100 + "%";
                             m_Textschedule.text = string.Format(Language.Get("YGYouFB"), str);
                         }                       
                     }
diff --git a/System/MainInterfacePanel/MainInterfaceWin.cs b/System/MainInterfacePanel/MainInterfaceWin.cs
index 0bad8d4..a15fe85 100644
--- a/System/MainInterfacePanel/MainInterfaceWin.cs
+++ b/System/MainInterfacePanel/MainInterfaceWin.cs
@@ -343,7 +343,7 @@
             m_HighSettingTip.AfterOpen();
             m_ChatTip.OnAfterOpen();
             HandleAchievement();
-            featureNoticeModel.WhetherToPlayTheBox();
+            StartCoroutine(featureNoticeModel.WhetherToPlayTheBox());//鍔熻兘棰勫憡
         }
 
         protected override void OnPreClose()
@@ -892,7 +892,7 @@
             ArticleExperience();//鍏充簬缁忛獙鏉�
             if (_tCDBPlayerRefresh == PlayerDataRefresh.LV)
             {
-                featureNoticeModel.WhetherToPlayTheBox();
+                StartCoroutine(featureNoticeModel.WhetherToPlayTheBox());//鍔熻兘棰勫憡
             }
         }
 
diff --git a/System/OpenServerActivity/ImpactRankModel.cs b/System/OpenServerActivity/ImpactRankModel.cs
index 44886b9..cfbc156 100644
--- a/System/OpenServerActivity/ImpactRankModel.cs
+++ b/System/OpenServerActivity/ImpactRankModel.cs
@@ -72,8 +72,8 @@
 
         private void OnRefreshRank(int type)
         {
-            if (type >= (int)PlayerRankData.RankType.OpenServerLv
-                && type <= (int)PlayerRankData.RankType.OpenServerMount)
+            if (type >= (int)PlayerRankData.RankType.OpenServerStrengthen
+                && type <= (int)PlayerRankData.RankType.OpenServerFightPower)
             {
                 foreach (var _type in m_Redpoints.Keys)
                 {
diff --git a/System/Store/BagStoreWin.cs b/System/Store/BagStoreWin.cs
index f77059a..4dd85d6 100644
--- a/System/Store/BagStoreWin.cs
+++ b/System/Store/BagStoreWin.cs
@@ -133,6 +133,7 @@
                     {
                         shopItemCell.stateImage.gameObject.SetActive(true);
                         shopItemCell.stateImage.SetSprite(shopInfo.SalesStatus);
+                        shopItemCell.stateImage.SetNativeSize();
                     }
                     else
                     {
diff --git a/System/Store/StoreModel.cs b/System/Store/StoreModel.cs
index d40b37c..1c1ea9e 100644
--- a/System/Store/StoreModel.cs
+++ b/System/Store/StoreModel.cs
@@ -39,6 +39,7 @@
     public Dictionary<int, string> resetTimeDict { get; private set; }
     public Dictionary<int, int> showCoinsUIDict { get; private set; }
     public int[] StoreRedIdlist { get; private set;}
+    bool isLogin = true;
     public override void Init()
     {
         FuncConfigConfig buyItemHinit = Config.Instance.Get<FuncConfigConfig>("BuyItemHinit");
@@ -53,6 +54,8 @@
 
     public void OnBeforePlayerDataInitialize()
     {
+        IsMustBuyDay = false;
+        isLogin = true;
         FuncOpen.Instance.OnFuncStateChangeEvent -= FuncStateChange;
         PlayerDatas.Instance.fairyData.OnRefreshFairyMine -= RefreshServerHour;
         PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= RefreshFamilyLv;
@@ -80,13 +83,15 @@
         FuncOpen.Instance.OnFuncStateChangeEvent += FuncStateChange;
         RefreshTCBPlayerDataEvent += RefreshPlayerLv;
         TimeMgr.Instance.OnHourEvent += RefreshServerHour;
-
+        SetIsMustBuyDay();
         shoplist = null;
         CheckWeekStoreIsShopBuy(out shoplist);
         ControllerRedPoint();
         SetShopRedpoint();
         CheckShopRedpoint();
         SetJobReplaceIDDict();
+        UpdateMustBuyRedpoint();
+        isLogin = false;
     }
 
     public string GetStoreRefreshTimeByType(int type)
@@ -132,6 +137,9 @@
         switch(type)
         {
             case PlayerDataRefresh.LV:
+                CheckShopRedpoint();
+                UpdateMustBuyRedpoint();
+                break;
             case PlayerDataRefresh.VIPLv:
             case PlayerDataRefresh.Gold:
             case PlayerDataRefresh.GoldPaper:
@@ -232,6 +240,16 @@
     private void RefreshServerHour()
     {
         ControllerRedPoint();
+        if (PlayerPrefs.HasKey(MUSTBUYSAVE_KEY))
+        {
+            int day = LocalSave.GetInt(MUSTBUYSAVE_KEY);
+            if (day != TimeUtility.ServerNow.Day)
+            {
+                IsMustBuyDay = true;
+                LocalSave.SetInt(MUSTBUYSAVE_KEY, TimeUtility.ServerNow.Day);
+                UpdateMustBuyRedpoint();
+            }
+        }
         if(!PlayerDatas.Instance.fairyData.HasFairy)
         {
             PlayerPrefs.DeleteKey(UNIONSTORESAVE_KEY);
@@ -272,7 +290,12 @@
             }
 
         }
-        CheckShopRedpoint();
+    
+        if(!isLogin)
+        {
+            CheckShopRedpoint();
+            UpdateMustBuyRedpoint();
+        }
         if (RefreshBuyShopLimitEvent != null)
             RefreshBuyShopLimitEvent();
     }
@@ -658,6 +681,7 @@
         }
         SetShopRedpoint();
         CheckShopRedpoint();
+        UpdateMustBuyRedpoint();
     }
 
     public bool CheckWeekStoreIsShopBuy(out List<StoreConfig> buylist)
@@ -814,42 +838,53 @@
         foreach(var key in shopRedDict.Keys)
         {
             StoreConfig storeConfig = Config.Instance.Get<StoreConfig>(key);
-            if (storeConfig.MoneyNumber == 0)
+            if(!mustIdlist.Contains(storeConfig.ItemID))
             {
-                if(CheckShopIsCanBuy(storeConfig))
+                if (storeConfig.MoneyNumber == 0)
                 {
-                    shopRedDict[storeConfig.ID].state = RedPointState.Simple;
+                    if (CheckShopIsCanBuy(storeConfig))
+                    {
+                        shopRedDict[storeConfig.ID].state = RedPointState.Simple;
+                    }
+                    else
+                    {
+                        shopRedDict[storeConfig.ID].state = RedPointState.None;
+                    }
                 }
                 else
                 {
-                    shopRedDict[storeConfig.ID].state = RedPointState.None;
+                    if (CheckScoreStoreIsCanBuy(storeConfig))
+                    {
+                        shopRedDict[storeConfig.ID].state = RedPointState.Simple;
+                    }
+                    else
+                    {
+                        shopRedDict[storeConfig.ID].state = RedPointState.None;
+                    }
                 }
             }
-            else
-            {
-                if(CheckScoreStoreIsCanBuy(storeConfig))
-                {
-                    shopRedDict[storeConfig.ID].state = RedPointState.Simple;
-                }
-                else
-                {
-                    shopRedDict[storeConfig.ID].state = RedPointState.None;
-                }
-            }
-
-            UpdateMustBuyRedpoint(storeConfig);
+          
         }
     }
 
-    public void UpdateMustBuyRedpoint(StoreConfig storeConfig)
+    public void UpdateMustBuyRedpoint()
     {
-        if (CheckIsMustBuy(storeConfig))
+        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Store)) return;
+
+        foreach (var key in shopRedDict.Keys)
         {
-            shopRedDict[storeConfig.ID].state = RedPointState.Simple;
-        }
-        else
-        {
-            shopRedDict[storeConfig.ID].state = RedPointState.None;
+            StoreConfig storeConfig = Config.Instance.Get<StoreConfig>(key);
+            if(mustIdlist.Contains(storeConfig.ItemID))
+            {
+                if (CheckIsMustBuy(storeConfig))
+                {
+                    shopRedDict[storeConfig.ID].state = RedPointState.Simple;
+                }
+                else
+                {
+                    shopRedDict[storeConfig.ID].state = RedPointState.None;
+                }
+            }
         }
     }
 
@@ -858,19 +893,41 @@
         if(mustIdlist.Contains(storeConfig.ItemID))
         {
             shopRedDict[storeConfig.ID].state = RedPointState.None;
+            IsMustBuyDay = false;
+        }
+    }
+
+    public bool IsMustBuyDay { get; private set; }
+    public void SetIsMustBuyDay()
+    {
+        if (IsMustBuyDay) return;
+
+        if (PlayerPrefs.HasKey(MUSTBUYSAVE_KEY))
+        {
+            int day = LocalSave.GetInt(MUSTBUYSAVE_KEY);
+            if (day != TimeUtility.ServerNow.Day)
+            {
+                IsMustBuyDay = true;
+                LocalSave.SetInt(MUSTBUYSAVE_KEY, TimeUtility.ServerNow.Day);
+            }
+            else
+            {
+                IsMustBuyDay = false;
+            }
+        }
+        else
+        {
+            IsMustBuyDay = true;
+            LocalSave.SetInt(MUSTBUYSAVE_KEY, TimeUtility.ServerNow.Day);
         }
     }
 
     public List<int> mustIdlist = new List<int>() { 4741};
     public bool CheckIsMustBuy(StoreConfig config)
     {
-        if(mustIdlist.Contains(config.ItemID)
-            && CheckShopIsCanBuy(config))
+        if(CheckShopIsCanBuy(config) && IsMustBuyDay)
         {
-            if(IsNewDay(MUSTBUYSAVE_KEY))
-            {
-                return true;
-            }
+            return true;
         }
         return false;
     }
diff --git a/System/Store/StoreWin.cs b/System/Store/StoreWin.cs
index d6d433b..969e3dc 100644
--- a/System/Store/StoreWin.cs
+++ b/System/Store/StoreWin.cs
@@ -307,6 +307,7 @@
                     {
                         shopItemCell.stateImage.gameObject.SetActive(true);
                         shopItemCell.stateImage.SetSprite(shopInfo.SalesStatus);
+                        shopItemCell.stateImage.SetNativeSize();
                     }
                     else
                     {
diff --git a/System/Treasure/FairyTreasureCollectPanelPattern5.cs b/System/Treasure/FairyTreasureCollectPanelPattern5.cs
index 9a5de96..8fe4798 100644
--- a/System/Treasure/FairyTreasureCollectPanelPattern5.cs
+++ b/System/Treasure/FairyTreasureCollectPanelPattern5.cs
@@ -256,6 +256,7 @@
             CameraUtility.ScreenShotCut((Texture2D _tex) =>
             {
                 TreasureStageUpTriggerWin.screenShotCut = _tex;
+                WindowJumpMgr.Instance.ClearJumpData();
                 WindowCenter.Instance.CloseImmediately<TreasureLevelUpWin>();
                 WindowCenter.Instance.Open<TreasureStageUpTriggerWin>(true);
                 WindowCenter.Instance.Open<MainInterfaceWin>();
diff --git a/System/Treasure/TreasureLevelUpWin.cs b/System/Treasure/TreasureLevelUpWin.cs
index 44c8c44..2ab9e95 100644
--- a/System/Treasure/TreasureLevelUpWin.cs
+++ b/System/Treasure/TreasureLevelUpWin.cs
@@ -1008,9 +1008,9 @@
             {
                 TreasureStageUpTriggerWin.screenShotCut = _tex;
                 WindowJumpMgr.Instance.ClearJumpData();
-                WindowCenter.Instance.Open<MainInterfaceWin>();
                 CloseImmediately();
                 WindowCenter.Instance.Open<TreasureStageUpTriggerWin>(true);
+                WindowCenter.Instance.Open<MainInterfaceWin>();
                 if (WindowCenter.Instance.CheckOpen<DialogueDuidanceWin>())
                 {
                     WindowCenter.Instance.CloseImmediately<DialogueDuidanceWin>();
diff --git a/Utility/LanguageVerify.cs b/Utility/LanguageVerify.cs
index 0782087..020538a 100644
--- a/Utility/LanguageVerify.cs
+++ b/Utility/LanguageVerify.cs
@@ -4,6 +4,7 @@
 using System.Collections.Generic;
 using System.Security.Cryptography;
 using System.Text;
+using System.Text.RegularExpressions;
 using UnityEngine;
 
 public class LanguageVerify : Singleton<LanguageVerify>
@@ -162,6 +163,7 @@
         var account = ModelCenter.Instance.GetModel<LoginModel>().sdkLoginResult.account;
         var playerId = PlayerDatas.Instance.baseData.PlayerID;
         var playerName = PlayerDatas.Instance.baseData.PlayerName;
+        var ts = System.DateTime.UtcNow - new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
 
         var tables = new Dictionary<string, string>();
         tables["game_code"] = "snxxz";
@@ -169,7 +171,7 @@
         tables["server_name"] = StringUtility.Contact("s", ServerListCenter.Instance.currentServer.region_flag);
         tables["chat_type"] = 1.ToString();
         tables["chat_channel"] = channel.ToString();
-        tables["chat_content"] = WWW.EscapeURL(UIHelper.TrimContentToServer(content));
+        tables["chat_content"] = TransferContent(ts.Ticks, content);
         tables["sender_uid"] = account;
         tables["sender_rid"] = playerId.ToString();
         tables["sender_name"] = UIHelper.ServerStringTrim(playerName);
@@ -182,7 +184,6 @@
         tables["receiver_level"] = channel == 3 ? (toPlayerLevel == 0 ? string.Empty : toPlayerLevel.ToString()) : string.Empty;
         tables["receiver_vip_level"] = string.Empty;
 
-        var ts = System.DateTime.UtcNow - new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
         tables["timestamp"] = ((long)System.Convert.ToInt64(ts.TotalSeconds)).ToString();
         tables["key"] = FileExtersion.GetStringMD5Hash(StringUtility.Contact(Sercret, tables["timestamp"]));
 
@@ -199,7 +200,7 @@
                         {
                             if (callback != null)
                             {
-                                callback(true, response.content);
+                                callback(true, DisTransfer(ts.Ticks, response.content));
                                 callback = null;
                                 return;
                             }
@@ -223,6 +224,97 @@
             });
     }
 
+    Dictionary<long, List<string>> transferContents = new Dictionary<long, List<string>>();
+
+    List<MatchString> matchs = new List<MatchString>();
+
+    const string TransferIdentify = " 0 ";
+    Regex transferRegex = new Regex(TransferIdentify, RegexOptions.Singleline);
+
+    struct MatchString
+    {
+        public int index;
+        public string value;
+    }
+
+    void AddMathcs(MatchCollection _matchs)
+    {
+        if (_matchs.Count == 0)
+        {
+            return;
+        }
+        foreach (Match match in _matchs)
+        {
+            matchs.Add(new MatchString()
+            {
+                index = match.Index,
+                value = match.Value,
+            });
+        }
+    }
+
+    string TransferContent(long tick, string content)
+    {
+        List<string> list;
+        if (!transferContents.TryGetValue(tick, out list))
+        {
+            list = new List<string>();
+            transferContents.Add(tick, list);
+        }
+        list.Clear();
+        matchs.Clear();
+        AddMathcs(WordAnalysis.Color_Start_Regex.Matches(content));
+        AddMathcs(WordAnalysis.Color_End_Regex.Matches(content));
+        AddMathcs(ImgAnalysis.FaceRegex.Matches(content));
+        AddMathcs(ChatCtrl.InviteRegex.Matches(content));
+        AddMathcs(WordAnalysis.Size_Start_Regex.Matches(content));
+        AddMathcs(WordAnalysis.Size_End_Regex.Matches(content));
+        AddMathcs(WordAnalysis.Space_Regex.Matches(content));
+        AddMathcs(ChatCtrl.KillRegex.Matches(content));
+        matchs.Sort((x, y) =>
+        {
+            return x.index.CompareTo(y.index);
+        });
+        for (int i = 0; i < matchs.Count; i++)
+        {
+            list.Add(matchs[i].value);
+        }
+        content = WordAnalysis.Color_Start_Regex.Replace(content, TransferIdentify);
+        content = WordAnalysis.Color_End_Regex.Replace(content, TransferIdentify);
+        content = ImgAnalysis.FaceRegex.Replace(content, TransferIdentify);
+        content = ChatCtrl.InviteRegex.Replace(content, TransferIdentify);
+        content = WordAnalysis.Size_Start_Regex.Replace(content, TransferIdentify);
+        content = WordAnalysis.Size_End_Regex.Replace(content, TransferIdentify);
+        content = WordAnalysis.Space_Regex.Replace(content, TransferIdentify);
+        content = ChatCtrl.KillRegex.Replace(content, TransferIdentify);
+        return content;
+    }
+
+    string DisTransfer(long tick, string content)
+    {
+        List<string> list;
+        if (!transferContents.TryGetValue(tick, out list))
+        {
+            return content;
+        }
+        var stringIndex = 0;
+        var index = 0;
+        s_StringBuilder.Length = 0;
+        foreach (Match match in transferRegex.Matches(content))
+        {
+            s_StringBuilder.Append(content.Substring(index, match.Index - index));
+            if (stringIndex < list.Count)
+            {
+                s_StringBuilder.Append(list[stringIndex]);
+                stringIndex++;
+            }
+            index = match.Index + match.Length;
+        }
+        transferContents.Remove(tick);
+        s_StringBuilder.Append(content.Substring(index, content.Length - index));
+        return s_StringBuilder.ToString();
+    }
+
     bool GetChannel(ChatInfoType type, out int channel)
     {
         channel = 0;

--
Gitblit v1.8.0