From bb2d2bae05da9eed93e13071b0f3bb9f5e058aa8 Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期二, 16 四月 2019 19:52:14 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts

---
 System/HazyRegion/ClientHazyGrassStage.cs |  113 +++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 78 insertions(+), 35 deletions(-)

diff --git a/System/HazyRegion/ClientHazyGrassStage.cs b/System/HazyRegion/ClientHazyGrassStage.cs
index c675610..91a7968 100644
--- a/System/HazyRegion/ClientHazyGrassStage.cs
+++ b/System/HazyRegion/ClientHazyGrassStage.cs
@@ -12,9 +12,10 @@
     static Dictionary<Vector3, GA_NpcClientCollect> s_CollectNpcs = new Dictionary<Vector3, GA_NpcClientCollect>();
     static Dictionary<uint, Vector3> s_Sid2NpcPos = new Dictionary<uint, Vector3>();
     static Dictionary<uint, int> s_Sid2NpcIds = new Dictionary<uint, int>();
-    static List<GA_NpcClientFightNorm> s_ClientFightNpcs = new List<GA_NpcClientFightNorm>();
+    //static List<GA_NpcClientFightNorm> s_ClientFightNpcs = new List<GA_NpcClientFightNorm>();
+    static List<HazyGrassNpcInfo> s_NpcRefreshInfos = new List<HazyGrassNpcInfo>();
 
-    static int grassRefreshCount = 0;
+    static Dictionary<int, int> s_NpcRefreshTimes = new Dictionary<int, int>();
 
     bool mapLoadFinish = false;
     bool initedFightNpc = false;
@@ -31,16 +32,20 @@
         s_NpcInfos.Clear();
         s_Sid2NpcIds.Clear();
         s_Sid2NpcPos.Clear();
+        s_NpcRefreshTimes.Clear();
 
         mapLoadFinish = false;
         initedFightNpc = false;
-
-        grassRefreshCount = 0;
 
         var config = HazyRegionConfig.Get(hazyRegionModel.processingIncidentId);
         if (config != null)
         {
             incidentType = (HazyRegionIncidentType)config.incidentType;
+            s_NpcRefreshInfos = model.GetGrassNpcInfos(config.dungeonId);
+            foreach (var npcInfo in s_NpcRefreshInfos)
+            {
+                s_NpcRefreshTimes.Add(npcInfo.npcId, GetNpcRefreshCount(npcInfo));
+            }
         }
 
         UnloadAllNpc();
@@ -53,7 +58,6 @@
         base.OnStageLoadFinish();
 
         mapLoadFinish = true;
-        model.RefreshGrassBornTime(TimeUtility.ServerNow);
 
         InitialPlayer();
         InitializeNpc();
@@ -67,12 +71,15 @@
 
         if (mapLoadFinish)
         {
-            var used = Mathf.Max(0, (int)(TimeUtility.ServerNow - model.grassBornTime).TotalSeconds);
-            var count = used / model.grassRefreshSeconds;
-            if (count != grassRefreshCount)
+            foreach (var npcInfo in s_NpcRefreshInfos)
             {
-                RebornCollectedNpc();
-                grassRefreshCount = count;
+                var _lastCount = s_NpcRefreshTimes[npcInfo.npcId];
+                var count = GetNpcRefreshCount(npcInfo);
+                if (_lastCount != count)
+                {
+                    RebornCollectedNpc(npcInfo.npcId);
+                    s_NpcRefreshTimes[npcInfo.npcId] = count;
+                }
             }
         }
     }
@@ -86,12 +93,24 @@
         GA_NpcClientCollect.OnCollectFinished -= OnCollectFinished;
     }
 
+    int GetNpcRefreshCount(HazyGrassNpcInfo npcInfo)
+    {
+        var used = TimeUtility.Minute * 60 + TimeUtility.Second;
+        var refreshSeconds = npcInfo.refreshMinute * 60;
+        return used / refreshSeconds;
+    }
+
     private void OnCollectFinished(uint _sid)
     {
         if (s_Sid2NpcIds.ContainsKey(_sid))
         {
             var npcId = s_Sid2NpcIds[_sid];
             Debug.Log("閲囬泦浜哊pc:--" + npcId);
+            var pak = new CA234_tagCMGetCustomSceneCollectAward();
+            pak.NPCID = (uint)npcId;
+            GameNetSystem.Instance.SendInfo(pak);
+
+            s_Sid2NpcIds.Remove(_sid);
         }
 
         if (s_Sid2NpcPos.ContainsKey(_sid))
@@ -102,6 +121,8 @@
                 s_CollectNpcs.Remove(pos);
             }
         }
+
+        RefreshMapNpcCount();
     }
 
     void InitializeNpc()
@@ -131,10 +152,14 @@
         CameraController.Instance.Apply();
     }
 
-    void RebornCollectedNpc()
+    void RebornCollectedNpc(int npcId = 0)
     {
         foreach (var npcInfo in s_NpcInfos)
         {
+            if (npcId != 0 && npcInfo.npcId != npcId)
+            {
+                continue;
+            }
             switch (npcInfo.npcType)
             {
                 case E_NpcType.Collect:
@@ -155,20 +180,38 @@
                     }
                     break;
                 case E_NpcType.Fight:
-                    if (!initedFightNpc)
-                    {
-                        var fightNpc = GAMgr.Instance.ReqClntFightNpc<GA_NpcClientFightNorm>((uint)npcInfo.npcId,
-                             E_ActorGroup.Enemy);
-                        if (fightNpc != null)
-                        {
-                            fightNpc.Pos = npcInfo.position;
-                            fightNpc.OnAttacked -= OnAttackNpc;
-                            fightNpc.OnAttacked += OnAttackNpc;
-                        }
-                        s_ClientFightNpcs.Add(fightNpc);
-                    }
+                    //if (!initedFightNpc)
+                    //{
+                    //    var fightNpc = GAMgr.Instance.ReqClntFightNpc<GA_NpcClientFightNorm>((uint)npcInfo.npcId,
+                    //         E_ActorGroup.Enemy);
+                    //    if (fightNpc != null)
+                    //    {
+                    //        fightNpc.Pos = npcInfo.position;
+                    //        fightNpc.OnAttacked -= OnAttackNpc;
+                    //        fightNpc.OnAttacked += OnAttackNpc;
+                    //    }
+                    //    s_ClientFightNpcs.Add(fightNpc);
+                    //}
                     break;
             }
+        }
+
+        RefreshMapNpcCount();
+    }
+
+    void RefreshMapNpcCount()
+    {
+        foreach (var npcInfo in s_NpcRefreshInfos)
+        {
+            var count = 0;
+            foreach (var npcId in s_Sid2NpcIds.Values)
+            {
+                if (npcId == npcInfo.npcId)
+                {
+                    count++;
+                }
+            }
+            model.RefreshMapNpcCount(npcInfo.npcId, count);
         }
     }
 
@@ -190,18 +233,18 @@
             }
         }
 
-        foreach (var _npc in s_ClientFightNpcs)
-        {
-            if (_npc != null)
-            {
-                _npc.OnAttacked -= OnAttackNpc;
-                _npc.ActorInfo.serverDie = true;
-                GAMgr.Instance.ServerDie(_npc.ServerInstID);
-                GAMgr.Instance.Release(_npc);
-            }
-        }
-
-        s_ClientFightNpcs.Clear();
+        //foreach (var _npc in s_ClientFightNpcs)
+        //{
+        //    if (_npc != null)
+        //    {
+        //        _npc.OnAttacked -= OnAttackNpc;
+        //        _npc.ActorInfo.serverDie = true;
+        //        GAMgr.Instance.ServerDie(_npc.ServerInstID);
+        //        GAMgr.Instance.Release(_npc);
+        //    }
+        //}
+        //
+        //s_ClientFightNpcs.Clear();
         s_CollectNpcs.Clear();
     }
 

--
Gitblit v1.8.0