From d01b24369869ddde953776f82a8900e49b016d64 Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期六, 25 八月 2018 11:57:39 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts

---
 Fight/Actor/AI/HeroAI_KillUntilDie.cs                                            |    4 
 Fight/Actor/Skill/SoBodyControl.cs                                               |   10 +
 Utility/RuntimeLogUtility.cs                                                     |    2 
 Fight/Actor/Skill/AttackHandler.cs                                               |    4 
 System/FindPrecious/PersonalBossModel.cs                                         |   30 ++
 Fight/Actor/HeroBehaviour.cs                                                     |   23 ++
 System/SystemSetting/SystemSetting.cs                                            |   26 +-
 Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs |   23 ++
 Fight/Actor/State/SMB/SMB_Base.cs                                                |   53 ++++-
 System/FindPrecious/BossHomeWin.cs                                               |    4 
 Fight/PreFightMission.cs                                                         |    4 
 System/NewBieGuidance/NewBieCenter.cs                                            |    5 
 System/Team/TeamPrepareWin.cs                                                    |    6 
 Utility/MathUtility.cs                                                           |   15 +
 Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0428_tagPlayerRideHorse.cs   |    6 
 System/WindowJump/WindowJumpMgr.cs                                               |    6 
 Fight/GameActor/GA_Hero.cs                                                       |   20 -
 System/MainInterfacePanel/MainInterfaceWin.cs                                    |    6 
 Core/NetworkPackage/DTCFile/ServerPack/HB4_Fight/DTCB401_tagMCSkillHurtList.cs   |    2 
 System/FindPrecious/BossIntroduceBehaviour.cs                                    |    2 
 Fight/Actor/AI/HeroAI_Auto.cs                                                    |   10 
 Fight/GameActor/GActorFight.cs                                                   |   44 ++++
 Fight/GameActor/GActorPlayerBase.cs                                              |  101 ++++++++++
 System/DailyQuest/DailyQuestWin.cs                                               |   82 +++-----
 24 files changed, 359 insertions(+), 129 deletions(-)

diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0428_tagPlayerRideHorse.cs b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0428_tagPlayerRideHorse.cs
index 5e973e0..76ebf20 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0428_tagPlayerRideHorse.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0428_tagPlayerRideHorse.cs
@@ -2,7 +2,7 @@
 using TableConfig;
 using Snxxz.UI;
 
-//04 28 玩家上马#tagPlayerRideHorse
+//04 28 锟斤拷锟斤拷锟斤拷锟�#tagPlayerRideHorse
 
 
 
@@ -32,7 +32,9 @@
                 return;
             }
 
-            if (_hero == null || _hero.MovingState == E_MovingState.Ride)
+            if (_hero == null
+             || _hero.MovingState == E_MovingState.Ride
+             || _hero.IsPolyMorph)
             {
                 return;
             }
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs b/Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs
index 55c81cd..0414717 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs
@@ -191,14 +191,21 @@
 
                         if (_attacker is GA_Player)
                         {
+                            var _hero = _cTarget as GA_Hero;
+
                             if (PlayerDatas.Instance.extersion.bossState == 1)
                             {
-                                GA_Hero _hero = PlayerDatas.Instance.hero;
                                 if (_hero.SelectTarget == null
                                  || _hero.SelectTarget is GActorNpcFight)
                                 {
                                     _hero.SelectTarget = _hero.LockTarget = _attacker;
                                 }
+                            }
+
+                            if (_hero != null && _hero.MovingState == E_MovingState.Ride)
+                            {
+                                DTC0428_tagPlayerRideHorse.Send_tagPlayerRideHorse(false);
+                                _hero.SwitchHorse(0);
                             }
                         }
                     }
@@ -282,7 +289,7 @@
 
                                 if (AttackHandler.CheckPull(_attacker, _cTarget, 0))
                                 {
-                                    _cTarget.StartBeatBack(0, MathUtility.ForwardXZ(_cTarget.Pos, _attacker.Pos));
+                                    _cTarget.StartBeatBack(_attacker.ServerInstID, 0, MathUtility.ForwardXZ(_cTarget.Pos, _attacker.Pos));
                                 }
                             }
 
@@ -557,6 +564,16 @@
                 {
                     GAMgr.Instance.OnPlayerSyncCountChange();
                 }
+
+                if (_attacker is GA_Player)
+                {
+                    var _hero = _cTarget as GA_Hero;
+                    if (_hero != null && _hero.MovingState == E_MovingState.Ride)
+                    {
+                        DTC0428_tagPlayerRideHorse.Send_tagPlayerRideHorse(false);
+                        _hero.SwitchHorse(0);
+                    }
+                }
             }
             else if (_attacker.ServerInstID == PlayerDatas.Instance.PlayerId)
             {
@@ -622,7 +639,7 @@
 
                     if (AttackHandler.CheckPull(_attacker, _cTarget, 0))
                     {
-                        _cTarget.StartBeatBack(0, MathUtility.ForwardXZ(_cTarget.Pos, _attacker.Pos));
+                        _cTarget.StartBeatBack(_attacker.ServerInstID, 0, MathUtility.ForwardXZ(_cTarget.Pos, _attacker.Pos));
                     }
 
                     if (_sTarget.HurtHP != 0)
diff --git a/Core/NetworkPackage/DTCFile/ServerPack/HB4_Fight/DTCB401_tagMCSkillHurtList.cs b/Core/NetworkPackage/DTCFile/ServerPack/HB4_Fight/DTCB401_tagMCSkillHurtList.cs
index 7de5f47..a814003 100644
--- a/Core/NetworkPackage/DTCFile/ServerPack/HB4_Fight/DTCB401_tagMCSkillHurtList.cs
+++ b/Core/NetworkPackage/DTCFile/ServerPack/HB4_Fight/DTCB401_tagMCSkillHurtList.cs
@@ -217,7 +217,7 @@
 
                     if (AttackHandler.CheckPull(_attacker, _cTarget, 0))
                     {
-                        _cTarget.StartBeatBack(0, MathUtility.ForwardXZ(_cTarget.Pos, _attacker.Pos));
+                        _cTarget.StartBeatBack(_attacker.ServerInstID, 0, MathUtility.ForwardXZ(_cTarget.Pos, _attacker.Pos));
                     }
 
                     if (_sTarget.HurtHP != 0)
diff --git a/Fight/Actor/AI/HeroAI_Auto.cs b/Fight/Actor/AI/HeroAI_Auto.cs
index 908f9c8..a2b8f69 100644
--- a/Fight/Actor/AI/HeroAI_Auto.cs
+++ b/Fight/Actor/AI/HeroAI_Auto.cs
@@ -109,7 +109,7 @@
         UserInputHandler.OnCirclePanelTouched += OnActiveInterrupt;
         UserInputHandler.OnClickedFloor += OnClickFloor;
         GA_Hero.OnLockTargetChanged += OnLockTargetChanged;
-        GA_Hero.OnUserClickSkill += OnUserClickSkill;
+        HeroBehaviour.OnUserClickSkill += OnUserClickSkill;
 
         OnEnter();
     }
@@ -123,6 +123,11 @@
         }
 
         GA_Hero _hero = PlayerDatas.Instance.hero;
+
+        if (_hero.IsPolyMorph)
+        {
+            return;
+        }
 
         if (_hero.SelectTarget == _hero)
         {
@@ -216,7 +221,6 @@
 
                 break;
             case 1:// 鏆傚仠鐘舵��
-
                 if (m_NeedMoveToPos)
                 {
                     if (StatusMgr.Instance.CanMove(PlayerDatas.Instance.PlayerId))
@@ -380,7 +384,7 @@
         }
         UserInputHandler.OnCirclePanelTouched -= OnActiveInterrupt;
         UserInputHandler.OnClickedFloor -= OnClickFloor;
-        GA_Hero.OnUserClickSkill -= OnUserClickSkill;
+        HeroBehaviour.OnUserClickSkill -= OnUserClickSkill;
 
         OnExit();
     }
diff --git a/Fight/Actor/AI/HeroAI_KillUntilDie.cs b/Fight/Actor/AI/HeroAI_KillUntilDie.cs
index 0ab7acb..189ac01 100644
--- a/Fight/Actor/AI/HeroAI_KillUntilDie.cs
+++ b/Fight/Actor/AI/HeroAI_KillUntilDie.cs
@@ -57,7 +57,7 @@
 
         UserInputHandler.OnCirclePanelTouched += OnActiveInterrupt;
         UserInputHandler.OnClickedFloor += OnClickFloor;
-        GA_Hero.OnUserClickSkill += OnUserClickSkill;
+        HeroBehaviour.OnUserClickSkill += OnUserClickSkill;
         GA_Hero.OnLockTargetChanged += OnLockTargetChanged;
         HeroBehaviour.OnStartHandupAI += OnStartHandupAI;
         MapTransferUtility.s_OnHeroStartMoveToNPC += OnStartMoveToNpc;
@@ -258,7 +258,7 @@
     {
         UserInputHandler.OnCirclePanelTouched -= OnActiveInterrupt;
         UserInputHandler.OnClickedFloor -= OnClickFloor;
-        GA_Hero.OnUserClickSkill -= OnUserClickSkill;
+        HeroBehaviour.OnUserClickSkill -= OnUserClickSkill;
         GA_Hero.OnLockTargetChanged -= OnLockTargetChanged;
         HeroBehaviour.OnStartHandupAI -= OnStartHandupAI;
         MapTransferUtility.s_OnHeroStartMoveToNPC -= OnStartMoveToNpc;
diff --git a/Fight/Actor/HeroBehaviour.cs b/Fight/Actor/HeroBehaviour.cs
index a402850..b5340f3 100644
--- a/Fight/Actor/HeroBehaviour.cs
+++ b/Fight/Actor/HeroBehaviour.cs
@@ -17,6 +17,11 @@
 
     public static event UnityAction<int> onCastSkill;
 
+    /// <summary>
+    /// 褰撶敤鎴风偣鍑讳簡鎶�鑳芥寜閽�, 骞跺垏鎶�鑳藉彲浠ラ噴鏀剧殑鏃跺�欒皟鐢�
+    /// </summary>
+    public static event UnityAction<int> OnUserClickSkill;
+
     public enum E_BehaviourState
     {
         None,
@@ -75,6 +80,11 @@
          || MapArea.IsInMapArea(m_Hero.CurMapArea, MapArea.E_Type.RebornSafe))
         {
             SysNotifyMgr.Instance.ShowTip("NoFighting");
+            return;
+        }
+
+        if (m_Hero.IsPolyMorph)
+        {
             return;
         }
 
@@ -173,6 +183,11 @@
             _data.targetServerInstID = m_Hero.SelectTarget.ServerInstID;
             _data.defaultSkillID = m_WillUsedSkillID;
             m_Hero.aiHandler.currentType = E_HeroAIType.KillUntilDie;
+        }
+
+        if(OnUserClickSkill != null)
+        {
+            OnUserClickSkill(m_WillUsedSkillID);
         }
     }
 
@@ -724,6 +739,14 @@
                     // 浜虹墿, 闈炲皬鎬笉璁$畻浼ゅ,涓嶇敓鎴愬鎴风鏁版嵁
                     if (_target.ActorType == GameObjType.gotPlayer)
                     {
+                        GA_Player _player = _target as GA_Player;
+                        if (_player != null)
+                        {
+                            if (_player.MovingState == E_MovingState.Ride)
+                            {
+                                _player.SwitchHorse(0);
+                            }
+                        }
                         continue;
                     }
 
diff --git a/Fight/Actor/Skill/AttackHandler.cs b/Fight/Actor/Skill/AttackHandler.cs
index 059b4e3..ff8237b 100644
--- a/Fight/Actor/Skill/AttackHandler.cs
+++ b/Fight/Actor/Skill/AttackHandler.cs
@@ -122,7 +122,7 @@
 
             if (CheckPull(attacker, target, soConfig.bodyControlId))
             {
-                target.StartBeatBack(soConfig.bodyControlId, MathUtility.ForwardXZ(target.Pos, attacker.Pos));
+                target.StartBeatBack(attacker.ServerInstID, soConfig.bodyControlId, MathUtility.ForwardXZ(target.Pos, attacker.Pos));
             }
         }
 
@@ -1080,7 +1080,7 @@
             // 鏀诲嚮鑰呮槸鐜╁
             if (attacker.ActorType == GameObjType.gotPlayer)
             {
-                return false;
+                return _bodyControl.useForPlayer && target.CanPushedBack();
             }
             else if (attacker.ActorType == GameObjType.gotNPC)
             {
diff --git a/Fight/Actor/Skill/SoBodyControl.cs b/Fight/Actor/Skill/SoBodyControl.cs
index f269087..eb8ba01 100644
--- a/Fight/Actor/Skill/SoBodyControl.cs
+++ b/Fight/Actor/Skill/SoBodyControl.cs
@@ -7,4 +7,14 @@
 
     [Tooltip("琛ㄧ幇鐨勬椂闂�")]
     public float duration;// 绉诲姩鏃堕棿
+
+    [Tooltip("鏄惁瀵圭帺瀹剁被鍨嬬敓鏁�")]
+    public bool useForPlayer = false;
+
+    [Tooltip("鏄帹杩樻槸鎷�, 鎵撻挬鏄帹,涓嶆墦閽╂槸鎷�")]
+    public bool pushOrPull = true;
+
+    [Tooltip(@"闄愬埗浣嶇疆, 浠ラ噴鏀捐�呬负涓績鐨勫亸绉�
+               鍙互涓鸿礋鍊�")]
+    public float limitDistance = 100;
 }
\ No newline at end of file
diff --git a/Fight/Actor/State/SMB/SMB_Base.cs b/Fight/Actor/State/SMB/SMB_Base.cs
index de44069..3290439 100644
--- a/Fight/Actor/State/SMB/SMB_Base.cs
+++ b/Fight/Actor/State/SMB/SMB_Base.cs
@@ -91,6 +91,7 @@
 
     protected void AddToNpcPosList(GActorFight attacker, GActorFight target, int bodyControlId, Vector3 direction, List<NPCPos> npcPosList)
     {
+        // Debug.LogFormat("{0} attack {1} ==================== 0", attacker.GetType().ToString(), target.GetType().ToString());
         if (PreFightMission.Instance.IsFinished() == false)
         {
             return;
@@ -103,10 +104,20 @@
 
         SoBodyControl _bodyControl = ScriptableObjectLoader.LoadSoBodyControl(bodyControlId);
 
+        if (!_bodyControl.pushOrPull)
+        {
+            direction = -direction;
+        }
+
         float _distance = _bodyControl.curve.keys[_bodyControl.curve.length - 1].time;
 
         Vector3 _checkPos = target.Pos;
         Vector3 _pullPosition = _checkPos + direction * _distance;
+
+        if (!_bodyControl.pushOrPull)
+        {
+            _pullPosition = attacker.Pos + MathUtility.ForwardXZ(target.Pos, attacker.Pos) * 0.5f;
+        }
 
         _checkPos.y = 0;
         _pullPosition.y = 0;
@@ -117,24 +128,36 @@
             _pullPosition = _hit.position;
         }
 
+        // 鍙涓昏瀵艰嚧鐨勬帹閫昏緫. 濡傛灉鏄叾浠栦汉鐨勯��涓嶈
+        if (target is GActorNpcFight)
+        {
+            if (attacker is GA_Player)
+            {
+                return;
+            }
+        }
+
         if (GActor.TryGetValidPos(_pullPosition, ref _checkPos))
         {
             if (target.ActorType == GameObjType.gotPlayer)
             {
-                GActorPlayerBase _player = target as GActorPlayerBase;
-                //Debug.Log("--------------------------- 8");
-                if (_player.MovingState != E_MovingState.Ride)
+                if (target is GA_Hero)
                 {
-                    //Debug.Log("--------------------------- 9");
-                    CB402_tagCMNPCBeatBack _beatBack = new CB402_tagCMNPCBeatBack();
-                    _beatBack.ObjType = (byte)GameObjType.gotPlayer;
-                    _beatBack.Count = 1;
-                    _beatBack.NPCPosList = new CB402_tagCMNPCBeatBack.tagCMNPCPos[1];
-                    _beatBack.NPCPosList[0] = new CB402_tagCMNPCBeatBack.tagCMNPCPos();
-                    _beatBack.NPCPosList[0].ObjID = (uint)target.ServerInstID;
-                    _beatBack.NPCPosList[0].PosX = (ushort)(_checkPos.x * 2f + GA_Hero.MapOffset.x);
-                    _beatBack.NPCPosList[0].PosY = (ushort)(_checkPos.z * 2f + GA_Hero.MapOffset.x);
-                    GameNetSystem.Instance.SendInfo(_beatBack);
+                    GActorPlayerBase _player = target as GActorPlayerBase;
+                    //Debug.Log("--------------------------- 8");
+                    if (_player.MovingState != E_MovingState.Ride)
+                    {
+                        // Debug.LogFormat("{0} attack {1} ==================== 9", attacker.GetType().ToString(), target.GetType().ToString());
+                        CB402_tagCMNPCBeatBack _beatBack = new CB402_tagCMNPCBeatBack();
+                        _beatBack.ObjType = (byte)GameObjType.gotPlayer;
+                        _beatBack.Count = 1;
+                        _beatBack.NPCPosList = new CB402_tagCMNPCBeatBack.tagCMNPCPos[1];
+                        _beatBack.NPCPosList[0] = new CB402_tagCMNPCBeatBack.tagCMNPCPos();
+                        _beatBack.NPCPosList[0].ObjID = (uint)target.ServerInstID;
+                        _beatBack.NPCPosList[0].PosX = (ushort)(_checkPos.x * 2f + GA_Hero.MapOffset.x);
+                        _beatBack.NPCPosList[0].PosY = (ushort)(_checkPos.z * 2f + GA_Hero.MapOffset.z);
+                        GameNetSystem.Instance.SendInfo(_beatBack);
+                    }
                 }
                 //else
                 //{
@@ -146,8 +169,8 @@
                 NPCPos _npcPos = new NPCPos
                 {
                     objId = (int)target.ServerInstID,
-                    posX = (int)(_checkPos.x * 2f),
-                    posY = (int)(_checkPos.z * 2f)
+                    posX = (int)(_checkPos.x * 2f + GA_Hero.MapOffset.x),
+                    posY = (int)(_checkPos.z * 2f + GA_Hero.MapOffset.z)
                 };
                 npcPosList.Add(_npcPos);
             }
diff --git a/Fight/GameActor/GA_Hero.cs b/Fight/GameActor/GA_Hero.cs
index 4eac3bb..6cf8751 100644
--- a/Fight/GameActor/GA_Hero.cs
+++ b/Fight/GameActor/GA_Hero.cs
@@ -24,10 +24,6 @@
     /// 褰撳垏鎹㈤攣瀹氱洰鏍囩殑鏃跺��, 涓虹┖鐨勬椂鍊檌d=0
     /// </summary>
     public static event UnityAction<uint> OnLockTargetChanged;
-    /// <summary>
-    /// 褰撶敤鎴风偣鍑讳簡鎶�鑳芥寜閽�, 骞跺垏鎶�鑳藉彲浠ラ噴鏀剧殑鏃跺�欒皟鐢�
-    /// </summary>
-    public static event UnityAction<int> OnUserClickSkill;
     public static event UnityAction<uint, string> OnKillPlayer;
 
     private GameObject m_Light;
@@ -506,7 +502,8 @@
             && !IsDaZuo()
             && State != E_ActorState.Roll
             && !s_MapSwitching
-            && !heavenBattleModel.IsBattlePrepare;
+            && !heavenBattleModel.IsBattlePrepare
+            && !m_Beating;
     }
 
     public bool CanCastSkill()
@@ -519,7 +516,8 @@
             && State != E_ActorState.Roll
             && State != E_ActorState.Mocked
             && !s_MapSwitching
-            && !heavenBattleModel.IsBattlePrepare;
+            && !heavenBattleModel.IsBattlePrepare
+            && !m_Beating;
     }
 
     public void StopAll()
@@ -719,11 +717,6 @@
         }
 
         Behaviour.StartKillUntilDieAI();
-
-        if (OnUserClickSkill != null)
-        {
-            OnUserClickSkill(0);
-        }
     }
 
     public void CastSkill(int skillID)
@@ -788,11 +781,6 @@
         }
 
         Behaviour.StartKillUntilDieAI(skillID);
-
-        if (OnUserClickSkill != null)
-        {
-            OnUserClickSkill(skillID);
-        }
     }
 
     #endregion
diff --git a/Fight/GameActor/GActorFight.cs b/Fight/GameActor/GActorFight.cs
index 40b9d2b..6dd057d 100644
--- a/Fight/GameActor/GActorFight.cs
+++ b/Fight/GameActor/GActorFight.cs
@@ -181,14 +181,26 @@
     private float m_BeatStartTime;
     protected bool m_Beating;
     private Vector3 m_BeatDirection;
+    private bool m_PushOrPull;
+    private uint m_AttackerSID;
+    private float m_LimitDistance;
 
-    public void StartBeatBack(int configID, Vector3 direction)
+    public void StartBeatBack(uint attacker, int configID, Vector3 direction)
     {
         SoBodyControl _config = ScriptableObjectLoader.LoadSoBodyControl(configID);
 
         if (_config == null || _config.curve == null)
         {
             return;
+        }
+
+        m_AttackerSID = attacker;
+        m_LimitDistance = _config.limitDistance;
+        m_PushOrPull = _config.pushOrPull;
+
+        if (!m_PushOrPull)
+        {
+            direction = -direction;
         }
 
         m_BeatDirection = direction;
@@ -237,6 +249,36 @@
         Vector3 _pos = m_StartBeatPos + _h + _v;
         Vector3 _end = _pos;
 
+        GActor _attacker = GAMgr.Instance.GetBySID(m_AttackerSID);
+
+        float _dis = MathUtility.DistanceSqrtXZ(_attacker.Pos, _end);
+
+        if (m_PushOrPull)
+        {
+            if (MathUtility.DistanceSqrtXZ(_attacker.Pos, _end) > m_LimitDistance * m_LimitDistance)
+            {
+                _end = _attacker.Pos + m_BeatDirection * m_LimitDistance;
+            }
+        }
+        else
+        {
+            Vector3 _limPos = _attacker.Pos;
+            _limPos.y = 0;
+            _limPos = _limPos - m_BeatDirection * m_LimitDistance;
+            Vector3 _dir2 = (_end - _limPos).normalized;
+
+            bool _isOp = MathUtility.OppositeDir(-m_BeatDirection, _dir2);
+            bool _isLimDis = MathUtility.DistanceSqrtXZ(_attacker.Pos, _end) < m_LimitDistance * m_LimitDistance;
+
+            if (_isOp
+             || _isLimDis)
+            {
+                _end = _attacker.Pos - m_BeatDirection * m_LimitDistance;
+                needSyncGroundHeight = true;
+                m_Beating = false;
+            }
+        }
+
         Vector3 _position = m_StartBeatPos;
         _position.y = 0;
         _end.y = 0;
diff --git a/Fight/GameActor/GActorPlayerBase.cs b/Fight/GameActor/GActorPlayerBase.cs
index 2aa1f66..d02a752 100644
--- a/Fight/GameActor/GActorPlayerBase.cs
+++ b/Fight/GameActor/GActorPlayerBase.cs
@@ -39,6 +39,7 @@
     protected HeadUpName m_HeadUpName = null;
 
     private int m_HorseActionType = 0;
+    public int nextComAtkIndex = -1;
 
     public JobSetupConfig JobSetup { get; protected set; }
 
@@ -62,8 +63,6 @@
         }
     }
 
-    public int nextComAtkIndex = -1;
-
     public void SwitchHeadNameBindNode(bool castingSkill)
     {
         // 瑙掕壊琚殣钘忕姸鎬佷笅涓嶆墽琛屽ご椤跺悕绉板垏鎹㈤�昏緫
@@ -82,6 +81,87 @@
             {
                 m_HeadUpName.target = MP_Name;
             }
+        }
+    }
+
+    public bool IsPolyMorph { get; private set; }
+    private GameObject m_SheepModel;
+    private bool m_SheepIsDefaultNpc;
+    public virtual void Polymorph(bool doOrNo)
+    {
+        IsPolyMorph = doOrNo;
+
+        if (IsPolyMorph)
+        {
+            ChangeBinderToRoot();
+
+            // 姝e湪楠戜箻鐘舵�佷笅
+            if (MovingState == E_MovingState.Ride)
+            {
+                m_HorseModel.transform.position = Constants.Special_Hide_Position;
+                SwitchHorse(0);
+                DTC0428_tagPlayerRideHorse.Send_tagPlayerRideHorse(false);
+            }
+            else
+            {
+                m_ClothesModel.transform.position = Constants.Special_Hide_Position;
+            }
+
+            m_SheepIsDefaultNpc = false;
+            var _p = InstanceResourcesLoader.LoadNpc(10101001);
+            if (_p == null)
+            {
+                _p = InstanceResourcesLoader.LoadDefaultFightNPC();
+                m_SheepIsDefaultNpc = true;
+            }
+
+            m_SheepModel = GameObjectPoolManager.Instance.RequestGameObject(_p);
+            m_SheepModel.transform.SetParent(m_Root);
+
+            var _a = m_SheepModel.GetComponent<Animator>();
+            if (_a)
+            {
+                _a.enabled = true;
+                _a.SetInteger(GAStaticDefine.Param_ActorInstID, (int)ClientInstID);
+                m_ClothesAnimator.enabled = false;
+                m_ClothesAnimator = _a;
+            }
+
+            if (ShowOrHide)
+            {
+                m_SheepModel.transform.localPosition = Vector3.zero;
+            }
+            else
+            {
+                m_SheepModel.transform.localPosition = Constants.Special_Hide_Position;
+            }
+
+            m_SheepModel.transform.localRotation = Quaternion.identity;
+        }
+        else
+        {
+            if (m_SheepModel)
+            {
+                if (m_SheepIsDefaultNpc)
+                {
+                    GameObjectPoolManager.Instance.ReleaseDefaultFightNPC(m_SheepModel);
+                }
+                else
+                {
+                    var _prefab = InstanceResourcesLoader.LoadNpc(10101001);
+                    GameObjectPoolManager.Instance.ReleaseGameObject(_prefab, m_SheepModel);
+                }
+            }
+
+            m_SheepModel = null;
+            m_ClothesModel.transform.localPosition = Vector3.zero;
+
+            ChangeBinderToClothes();
+
+            m_ClothesAnimator = m_ClothesModel.GetComponent<Animator>();
+            m_ClothesAnimator.enabled = true;
+            m_ClothesAnimator.SetInteger(GAStaticDefine.Param_ActorInstID, (int)ClientInstID);
+            m_ClothesAnimator.SetInteger(GAStaticDefine.Param_MoveState, (int)E_MovingState.Normal);
         }
     }
 
@@ -974,8 +1054,11 @@
             }
             if (ShowOrHide)
             {
-                m_ClothesModel.transform.localPosition = Vector3.zero;
-                m_ClothesModel.transform.localRotation = Quaternion.identity;
+                if (!IsPolyMorph)
+                {
+                    m_ClothesModel.transform.localPosition = Vector3.zero;
+                    m_ClothesModel.transform.localRotation = Quaternion.identity;
+                }
             }
             else
             {
@@ -987,12 +1070,18 @@
             if (m_WingModel)
             {
                 MovingState = E_MovingState.Fly;
-                m_ClothesAnimator.SetInteger(GAStaticDefine.Param_MoveState, (int)E_MovingState.Fly);
+                if (!IsPolyMorph)
+                {
+                    m_ClothesAnimator.SetInteger(GAStaticDefine.Param_MoveState, (int)E_MovingState.Fly);
+                }
             }
             else
             {
                 MovingState = E_MovingState.Normal;
-                m_ClothesAnimator.SetInteger(GAStaticDefine.Param_MoveState, (int)E_MovingState.Normal);
+                if (!IsPolyMorph)
+                {
+                    m_ClothesAnimator.SetInteger(GAStaticDefine.Param_MoveState, (int)E_MovingState.Normal);
+                }
             }
 
             SwitchHeadNameBindNode(false);
diff --git a/Fight/PreFightMission.cs b/Fight/PreFightMission.cs
index b81a26a..d618391 100644
--- a/Fight/PreFightMission.cs
+++ b/Fight/PreFightMission.cs
@@ -902,7 +902,7 @@
              _model2.clickClosed = false;
 
              m_AfterAttackType = E_AfterAttackType.RefreshRock;
-             GA_Hero.OnUserClickSkill += OnCastSkill;
+             HeroBehaviour.OnUserClickSkill += OnCastSkill;
 
              _model2.onClose = null;
 
@@ -1135,7 +1135,7 @@
 
     private void OnCastSkill(int skillID)
     {
-        GA_Hero.OnUserClickSkill -= OnCastSkill;
+        HeroBehaviour.OnUserClickSkill -= OnCastSkill;
 
         if (m_AfterAttackType == E_AfterAttackType.RefreshRock)
         {
diff --git a/System/DailyQuest/DailyQuestWin.cs b/System/DailyQuest/DailyQuestWin.cs
index b122700..31cba6c 100644
--- a/System/DailyQuest/DailyQuestWin.cs
+++ b/System/DailyQuest/DailyQuestWin.cs
@@ -525,54 +525,42 @@
             }
             else
             {
-                var unlockShowTreasure = 0;
-                if (treasureModel.TryGetUnlockShowTreasure(out unlockShowTreasure))
-                {
-                    treasureModel.treasureGotoId = gotoTreasureId;
-                    var config = Config.Instance.Get<TreasureConfig>(unlockShowTreasure);
-                    treasureModel.currentCategory = (TreasureCategory)config.Category;
-                    WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.TreasureFunc1);
-                }
-                else
-                {
-                    var config = Config.Instance.Get<TreasureConfig>(gotoTreasureId);
-                    treasureModel.selectedTreasure = gotoTreasureId;
-                    treasureModel.currentCategory = (TreasureCategory)config.Category;
+                var config = Config.Instance.Get<TreasureConfig>(gotoTreasureId);
+                treasureModel.selectedTreasure = gotoTreasureId;
+                treasureModel.currentCategory = (TreasureCategory)config.Category;
 
-                    switch (gotoTreasureId)
-                    {
-                        case 101:
-                            WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.DhszTs);
-                            break;
-                        case 102:
-                            WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.HyqTs);
-                            break;
-                        case 103:
-                            WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.GyzTs);
-                            break;
-                        case 104:
-                            WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.LqhTs);
-                            break;
-                        case 105:
-                            WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.PlyTs);
-                            break;
-                        case 106:
-                            WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.XhqTs);
-                            break;
-                        case 107:
-                            WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.DhzTs);
-                            break;
-                        case 108:
-                            WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.ZjhlTs);
-                            break;
-                        case 109:
-                            WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.YldTs);
-                            break;
-                        case 110:
-                            WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.StfTs);
-                            break;
-                    }
-
+                switch (gotoTreasureId)
+                {
+                    case 101:
+                        WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.DhszTs);
+                        break;
+                    case 102:
+                        WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.HyqTs);
+                        break;
+                    case 103:
+                        WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.GyzTs);
+                        break;
+                    case 104:
+                        WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.LqhTs);
+                        break;
+                    case 105:
+                        WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.PlyTs);
+                        break;
+                    case 106:
+                        WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.XhqTs);
+                        break;
+                    case 107:
+                        WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.DhzTs);
+                        break;
+                    case 108:
+                        WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.ZjhlTs);
+                        break;
+                    case 109:
+                        WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.YldTs);
+                        break;
+                    case 110:
+                        WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.StfTs);
+                        break;
                 }
             }
         }
diff --git a/System/FindPrecious/BossHomeWin.cs b/System/FindPrecious/BossHomeWin.cs
index a727889..b759d47 100644
--- a/System/FindPrecious/BossHomeWin.cs
+++ b/System/FindPrecious/BossHomeWin.cs
@@ -103,7 +103,7 @@
                         m_BossIntroduce.gameObject.SetActive(false);
                         m_ContainerMonster.gameObject.SetActive(true);
                         m_BossIntroduce.Dispose();
-                        UI3DModelExhibition.Instance.BeginShowNPC(model.selectedBoss, Vector3.zero, m_MonsterPortrait);
+                        UI3DModelExhibition.Instance.BeginShowNPC(model.selectedBoss, npcConfig.UIModeLOffset, npcConfig.UIModelRotation, m_MonsterPortrait);
                         m_MonsterLevel.text = Language.Get("Z1024", npcConfig.NPCLV);
                         break;
                     case 2:
@@ -192,8 +192,8 @@
                     m_BossIntroduce.gameObject.SetActive(false);
                     m_ContainerMonster.gameObject.SetActive(true);
                     m_BossIntroduce.Dispose();
-                    UI3DModelExhibition.Instance.BeginShowNPC(_bossId, Vector3.zero, m_MonsterPortrait);
                     var npcConfig = Config.Instance.Get<NPCConfig>(_bossId);
+                    UI3DModelExhibition.Instance.BeginShowNPC(_bossId, npcConfig.UIModeLOffset, npcConfig.UIModelRotation, m_MonsterPortrait);
                     m_MonsterLevel.text = Language.Get("Z1024", npcConfig.NPCLV);
                     break;
                 case 2:
diff --git a/System/FindPrecious/BossIntroduceBehaviour.cs b/System/FindPrecious/BossIntroduceBehaviour.cs
index 4e5ecf4..a2b67a4 100644
--- a/System/FindPrecious/BossIntroduceBehaviour.cs
+++ b/System/FindPrecious/BossIntroduceBehaviour.cs
@@ -88,7 +88,7 @@
             var config = Config.Instance.Get<NPCConfig>(bossId);
             m_BossName.text = config.charName;
             m_BossLevel.text = Language.Get("Z1024", config.NPCLV);
-            UI3DModelExhibition.Instance.BeginShowNPC(bossId, Vector3.zero, m_BossPortrait);
+            UI3DModelExhibition.Instance.BeginShowNPC(bossId, config.UIModeLOffset, config.UIModelRotation, m_BossPortrait);
             m_BossAbility.Display(bossId);
         }
 
diff --git a/System/FindPrecious/PersonalBossModel.cs b/System/FindPrecious/PersonalBossModel.cs
index 4abb36a..3011288 100644
--- a/System/FindPrecious/PersonalBossModel.cs
+++ b/System/FindPrecious/PersonalBossModel.cs
@@ -43,13 +43,17 @@
         public override void Init()
         {
             ParseConfig();
-            UpdateRedpoint();
-            playerPack.RefreshItemCountAct += RefreshItemCnt;
+            playerPack.RefreshItemCountAct += RefreshItemCount;
+            PlayerDatas.Instance.PlayerDataRefreshEvent += OnPlayerDataChange;
+            dungeonModel.dungeonRecordChangeEvent += OnDungeonRecordChange;
+
         }
 
         public override void UnInit()
         {
-            playerPack.RefreshItemCountAct -= RefreshItemCnt;
+            playerPack.RefreshItemCountAct -= RefreshItemCount;
+            PlayerDatas.Instance.PlayerDataRefreshEvent -= OnPlayerDataChange;
+            dungeonModel.dungeonRecordChangeEvent -= OnDungeonRecordChange;
         }
 
         public void RequestSetDungeonAction()
@@ -90,7 +94,16 @@
             return sortedBossIds[0];
         }
 
-        private void RefreshItemCnt(PackType type, int index, int id)
+
+        private void OnPlayerDataChange(PlayerDataRefresh _type, int _value)
+        {
+            if (_type == PlayerDataRefresh.VIPLv)
+            {
+                UpdateRedpoint();
+            }
+        }
+
+        private void RefreshItemCount(PackType type, int index, int id)
         {
             if (type == PackType.rptItem && id == dungeonTicket)
             {
@@ -98,6 +111,15 @@
             }
         }
 
+        private void OnDungeonRecordChange(int _id)
+        {
+            if (_id == PERSONALBOSS_MAPID)
+            {
+                UpdateRedpoint();
+            }
+        }
+
+
         public void UpdateRedpoint()
         {
             if (!FuncOpen.Instance.IsFuncOpen(76))
diff --git a/System/MainInterfacePanel/MainInterfaceWin.cs b/System/MainInterfacePanel/MainInterfaceWin.cs
index 75bb072..e92c5e9 100644
--- a/System/MainInterfacePanel/MainInterfaceWin.cs
+++ b/System/MainInterfacePanel/MainInterfaceWin.cs
@@ -457,7 +457,7 @@
                 }
             }
 
-            if (_areaType == MapArea.E_Type.Neutral && _enter)
+            if ((_areaType == MapArea.E_Type.Neutral || _areaType == MapArea.E_Type.Boss) && _enter)
             {
                 WindowCenter.Instance.Open<NeutralMarkWin>();
                 int mapID = PlayerDatas.Instance.baseData.MapID;
@@ -479,7 +479,7 @@
                 }
             }
 
-            if ((_areaType == MapArea.E_Type.Boss && _enter) || (_areaType == MapArea.E_Type.Dazuo && _enter))
+            if (_areaType == MapArea.E_Type.Boss && _enter)
             {
                 if (Vector3.Distance(m_TaskAndTeamPanel.localPosition, TaskListTipAnchor1.localPosition) < 2 && ListBossMapId.Contains(PlayerDatas.Instance.baseData.MapID))
                 {
@@ -507,7 +507,7 @@
             var inDungeon = IsDungeon();
             var isNeutralMap = GeneralConfig.Instance.neutralMaps.Contains(PlayerDatas.Instance.baseData.MapID);
 
-            if ((_areaType == MapArea.E_Type.Boss && !_enter) || (_areaType == MapArea.E_Type.Dazuo && !_enter))
+            if (_areaType == MapArea.E_Type.Boss && !_enter)
             {
                 if (Vector3.Distance(CopyOfThePanel.position, CopyOfThePosition1.position) > 2 && !inDungeon && !isNeutralMap)
                 {
diff --git a/System/NewBieGuidance/NewBieCenter.cs b/System/NewBieGuidance/NewBieCenter.cs
index 08ab7fe..8d80910 100644
--- a/System/NewBieGuidance/NewBieCenter.cs
+++ b/System/NewBieGuidance/NewBieCenter.cs
@@ -193,7 +193,10 @@
             currentGuide = 0;
             WindowCenter.Instance.CloseImmediately<NewBieWin>();
 
-            completeGuidesBuf.Add(guideRecord);
+            if (!completeGuidesBuf.Contains(guideRecord))
+            {
+                completeGuidesBuf.Add(guideRecord);
+            }
 
             var send = new CA222_tagCMSetGuideOK();
             send.GuideIndex = (byte)_id;
diff --git a/System/SystemSetting/SystemSetting.cs b/System/SystemSetting/SystemSetting.cs
index 6aed415..bf704ad 100644
--- a/System/SystemSetting/SystemSetting.cs
+++ b/System/SystemSetting/SystemSetting.cs
@@ -66,7 +66,7 @@
 
     public GameFrame GetGameFrame()
     {
-        return (GameFrame)LocalSave.GetInt(GAMEFRAME_KEY, (int)GameFrame.HalfFrame);
+        return (GameFrame)LocalSave.GetInt(GAMEFRAME_KEY, (int)GameFrame.FullFrame);
     }
 
     public void SetSystemSettingSwitch(SystemSwitch type, bool _value)
@@ -191,18 +191,18 @@
             {
                 var defaultQuality = GameQuality.High;
 
-                if (DeviceUtility.cpu >= 4 && DeviceUtility.memory > 3.5f * 1024)
-                {
-                    defaultQuality = GameQuality.High;
-                }
-                else if (DeviceUtility.cpu >= 4 && DeviceUtility.memory > 2.5f * 1024)
-                {
-                    defaultQuality = GameQuality.Medium; ;
-                }
-                else if (DeviceUtility.cpu > 1 && DeviceUtility.memory > 1.5f * 1024)
-                {
-                    defaultQuality = GameQuality.Low;
-                }
+//                 if (DeviceUtility.cpu >= 4 && DeviceUtility.memory > 3.5f * 1024)
+//                 {
+//                     defaultQuality = GameQuality.High;
+//                 }
+//                 else if (DeviceUtility.cpu >= 4 && DeviceUtility.memory > 2.5f * 1024)
+//                 {
+//                     defaultQuality = GameQuality.Medium; ;
+//                 }
+//                 else if (DeviceUtility.cpu > 1 && DeviceUtility.memory > 1.5f * 1024)
+//                 {
+//                     defaultQuality = GameQuality.Low;
+//                 }
 
                 return (GameQuality)LocalSave.GetInt(QUALITY_LEVEL_KEY, (int)defaultQuality);
             }
diff --git a/System/Team/TeamPrepareWin.cs b/System/Team/TeamPrepareWin.cs
index 9423379..08b9972 100644
--- a/System/Team/TeamPrepareWin.cs
+++ b/System/Team/TeamPrepareWin.cs
@@ -34,6 +34,7 @@
         bool rejectManual = false;
 
         TeamModel model { get { return ModelCenter.Instance.GetModel<TeamModel>(); } }
+
         #region Built-in
         protected override void BindController()
         {
@@ -48,6 +49,11 @@
 
         protected override void OnPreOpen()
         {
+            if (NewBieCenter.Instance.inGuiding)
+            {
+                NewBieCenter.Instance.FinishNewBieGuide(NewBieCenter.Instance.currentGuide);
+            }
+
             rejectManual = false;
             if (!model.myTeam.iamCaptainer)
             {
diff --git a/System/WindowJump/WindowJumpMgr.cs b/System/WindowJump/WindowJumpMgr.cs
index addcb90..d407ca0 100644
--- a/System/WindowJump/WindowJumpMgr.cs
+++ b/System/WindowJump/WindowJumpMgr.cs
@@ -216,10 +216,8 @@
                 var soulId = 0;
                 if (int.TryParse(_tagWinSearchModel.SelectActive, out soulId))
                 {
-                    var treasureModel = ModelCenter.Instance.GetModel<TreasureModel>();
-                    Treasure treasure;
-                    treasureModel.TryGetTreasure(soulId, out treasure);
-                    if (treasure == null || treasure.state != TreasureState.Collected)
+                    var soulModel = ModelCenter.Instance.GetModel<TreasureSoulModel>();
+                    if (!soulModel.IsOpenTreasureSoul(soulId))
                     {
                         return;
                     }
diff --git a/Utility/MathUtility.cs b/Utility/MathUtility.cs
index 3a162b0..ec01aa7 100644
--- a/Utility/MathUtility.cs
+++ b/Utility/MathUtility.cs
@@ -154,6 +154,21 @@
         return (target - self).normalized;
     }
 
+    public static bool IsSameDir(Vector3 vec1, Vector3 vec2)
+    {
+        vec1.y = 0;
+        vec2.y = 0;
+
+        return Vector3.Dot(vec1, vec2) > 0;
+    }
+
+    public static bool OppositeDir(Vector3 vec1, Vector3 vec2)
+    {
+        vec1.y = 0;
+        vec2.y = 0;
+
+        return Vector3.Dot(vec1, vec2) < 0;
+    }
     public static int Power(int a, int e)
     {
         int value = 1;
diff --git a/Utility/RuntimeLogUtility.cs b/Utility/RuntimeLogUtility.cs
index d38aabc..eaa22df 100644
--- a/Utility/RuntimeLogUtility.cs
+++ b/Utility/RuntimeLogUtility.cs
@@ -223,7 +223,7 @@
 
         if (GUILayout.Button("閰烽叿閰�"))
         {
-
+            PlayerDatas.Instance.hero.Polymorph(!PlayerDatas.Instance.hero.IsPolyMorph);
         }
 
         if (GUILayout.Button("鐩存帴閲嶈繛"))

--
Gitblit v1.8.0