From 5a279e45cfd9e951788569f5ffc522952bf545e4 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 27 十一月 2025 00:04:10 +0800
Subject: [PATCH] 0312 内政NPC聊天

---
 Main/System/InternalAffairs/AffairBaseWin.cs       |   34 +++++++++++
 Main/System/InternalAffairs/FuncNPCManager.cs      |   92 ++++++++++++++++++++++++++++++
 Main/System/Hero/UIHeroController.cs               |    2 
 Main/System/HeroUI/HeroSkinModel.cs                |    5 +
 Main/Main.cs                                       |    1 
 Main/System/InternalAffairs/FuncNPCManager.cs.meta |   11 +++
 Main/Component/UI/Common/LayoutElementSizeClamp.cs |    3 
 7 files changed, 145 insertions(+), 3 deletions(-)

diff --git a/Main/Component/UI/Common/LayoutElementSizeClamp.cs b/Main/Component/UI/Common/LayoutElementSizeClamp.cs
index fc3752b..25a82f5 100644
--- a/Main/Component/UI/Common/LayoutElementSizeClamp.cs
+++ b/Main/Component/UI/Common/LayoutElementSizeClamp.cs
@@ -7,7 +7,8 @@
 // Preferred Width 鍜� Height 鍙互涓嶅嬀閫�
 // 锛侊紒锛佸繀椤诲嬀閫� Clamp Enable
 // Clamp涓� Min閰嶆渶灏� 鍜� Max閰嶆渶澶�
-// Target 閰嶇洰鏍囷紝姣斿鑴氭湰鍙互鎸傝浇鏂囧瓧缁勪欢涓婏紝鐩爣涔熸寚鍚戞枃瀛楃粍浠�
+// Target 閰嶇洰鏍囷紝姣斿鑴氭湰鍙互鎸傝浇鏂囧瓧缁勪欢涓婏紝鐩爣涔熸寚鍚戞枃瀛楃粍浠讹紝鏂囨湰鍚屾椂閰岰ontentSizeFitter锛�
+// 鐖剁粍浠跺悓鏃堕厤ContentSizeFitterlayout妯珫閮借
 [ExecuteAlways]
 public class LayoutElementSizeClamp : LayoutElement
 {
diff --git a/Main/Main.cs b/Main/Main.cs
index 6270a62..26670dd 100644
--- a/Main/Main.cs
+++ b/Main/Main.cs
@@ -91,6 +91,7 @@
         managers.Add(HorseManager.Instance);
         managers.Add(PhantasmPavilionManager.Instance);
         managers.Add(AttributeManager.Instance);
+        managers.Add(FuncNPCManager.Instance);
 
         foreach (var manager in managers)
         {
diff --git a/Main/System/Hero/UIHeroController.cs b/Main/System/Hero/UIHeroController.cs
index 2ad5cd7..4712be1 100644
--- a/Main/System/Hero/UIHeroController.cs
+++ b/Main/System/Hero/UIHeroController.cs
@@ -13,7 +13,7 @@
 	protected Spine.AnimationState spineAnimationState;
 	private GameObject instanceGO;
 
-	private Action onComplete;
+	public Action onComplete;
 	public void Create(int _skinID, float scale = 0.8f, Action _onComplete = null, string motionName = "idle", bool isLh = false)
 	{
 		if (skinID == _skinID)
diff --git a/Main/System/HeroUI/HeroSkinModel.cs b/Main/System/HeroUI/HeroSkinModel.cs
index 0bd73d6..9d24b54 100644
--- a/Main/System/HeroUI/HeroSkinModel.cs
+++ b/Main/System/HeroUI/HeroSkinModel.cs
@@ -18,5 +18,10 @@
         heroModel.PlayAnimation(actionName, true);
         heroModel.SetEnabled(enable);
     }
+
+    public UIHeroController GetModel()
+    {
+        return heroModel;
+    }
 }
 
diff --git a/Main/System/InternalAffairs/AffairBaseWin.cs b/Main/System/InternalAffairs/AffairBaseWin.cs
index ea0da2f..e30ea39 100644
--- a/Main/System/InternalAffairs/AffairBaseWin.cs
+++ b/Main/System/InternalAffairs/AffairBaseWin.cs
@@ -1,5 +1,6 @@
 using System.Collections;
 using System.Collections.Generic;
+using Cysharp.Threading.Tasks;
 using UnityEngine;
 using UnityEngine.UI;
 
@@ -19,6 +20,12 @@
     [SerializeField] Text autoText;
     [SerializeField] GameObject flowAutoEffect;
     [SerializeField] Button autoBtn;
+
+    //NPC瀵硅瘽鐩稿叧
+
+    [SerializeField] HeroSkinModel[] funcNPCs;
+    [SerializeField] Transform[] talkRects;
+    [SerializeField] Text[] talkTexts;
 
     protected override void InitComponent()
     {
@@ -50,6 +57,7 @@
         GoldRushManager.Instance.OnAutoWorkingEvent += OnAutoWorkingEvent;
         GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
         PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshEvent;
+        GlobalTimeEvent.Instance.fiveSecondEvent += OnFiveSecondEvent;
         
         Display();
         if (GoldRushManager.Instance.openAutoGoldRush)
@@ -64,6 +72,7 @@
         GoldRushManager.Instance.OnAutoWorkingEvent -= OnAutoWorkingEvent;
         GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
         PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshEvent;
+        GlobalTimeEvent.Instance.fiveSecondEvent -= OnFiveSecondEvent;
     }
 
     protected override void OnOpen()
@@ -133,8 +142,31 @@
     void PlayerDataRefreshEvent(PlayerDataType type)
     {
         if (type == PlayerDataType.GoldRush)
-        { 
+        {
             RefreshGoldRushMoney();
         }
     }
+
+    void OnFiveSecondEvent()
+    {
+        var index = FuncNPCManager.Instance.GetRandomAffairNpcTalk();
+        var talk = FuncNPCManager.Instance.GetAffairTalk(funcNPCs[index].heroSkinID);
+        if (talk != null)
+        {
+            talkTexts[index].text = Language.Get(talk);
+            talkRects[index].SetActive(true);
+        }
+
+        var npc = funcNPCs[index].GetModel();
+        npc.PlayAnimation("hanhua", true);
+        Talk(index).Forget();
+    }
+
+    async UniTask Talk(int index)
+    {
+        await UniTask.Delay(4500);
+        talkRects[index].SetActive(false);
+        var npc = funcNPCs[index].GetModel();
+        npc.PlayAnimation("idle", true);
+    }
 }
\ No newline at end of file
diff --git a/Main/System/InternalAffairs/FuncNPCManager.cs b/Main/System/InternalAffairs/FuncNPCManager.cs
new file mode 100644
index 0000000..e2d3b72
--- /dev/null
+++ b/Main/System/InternalAffairs/FuncNPCManager.cs
@@ -0,0 +1,92 @@
+锘縰sing System.Collections.Generic;
+using System.Linq;
+using Codice.Client.Common;
+using LitJson;
+using UnityEngine;
+
+public class FuncNPCManager : GameSystemManager<FuncNPCManager>
+{
+    //鍐呮斂NPC
+    Dictionary<int, string[]> affairNpcTalkDic = new Dictionary<int, string[]>();
+    public List<int> affairTalkIndexList = new List<int>();
+    public float lastAffairTalkTime;
+    public int lastAffiarRandomIndex;
+
+    //鍏細NPC
+    Dictionary<int, string[]> guildNpcTalkDic = new Dictionary<int, string[]>();
+    public List<int> guildTalkIndexList = new List<int>();
+    public float lastGuildTalkTime;
+    public int lastGuildRandomIndex;
+
+
+    public override void Init()
+    {
+        ParseConfig();
+    }
+    void ParseConfig()
+    {
+        var config = FuncConfigConfig.Get("FuncNPC");
+        var json = JsonMapper.ToObject(config.Numerical1);
+        var keys = json.Keys.ToList();
+        foreach (var key in keys)
+        {
+            var npcID = int.Parse(key);
+            var talkList = JsonMapper.ToObject<string[]>(json[key].ToJson());
+            affairNpcTalkDic.Add(npcID, talkList);
+        }
+
+        for (int i = 0; i < affairNpcTalkDic.Count; i++)
+        {
+            affairTalkIndexList.Add(i);
+        }
+
+        json = JsonMapper.ToObject(config.Numerical2);
+        keys = json.Keys.ToList();
+        foreach (var key in keys)
+        {
+            var npcID = int.Parse(key);
+            var talkList = JsonMapper.ToObject<string[]>(json[key].ToJson());
+            guildNpcTalkDic.Add(npcID, talkList);
+        }
+        for (int i = 0; i < guildNpcTalkDic.Count; i++)
+        {
+            guildTalkIndexList.Add(i);
+        }
+
+    }
+
+
+    //闅忔満鏌愪釜NPC瀵硅瘽锛屼笌涓婁竴娆¢殢鏈虹殑NPC绱㈠紩涓嶉噸澶�
+    public int GetRandomAffairNpcTalk()
+    {
+        int index = Random.Range(0, affairTalkIndexList.Count);
+        if (index == lastAffiarRandomIndex)
+        {
+            index = (index + 1) % affairTalkIndexList.Count;
+        }
+        lastAffiarRandomIndex = index;
+        return index;
+    }
+
+    public int GetRandomGuildNpcTalk()
+    {
+        int index = Random.Range(0, guildTalkIndexList.Count);
+        if (index == lastGuildRandomIndex)
+        {
+            index = (index + 1) % guildTalkIndexList.Count;
+        }
+        lastGuildRandomIndex = index;
+        return index;
+    }
+
+    public string GetAffairTalk(int skinID)
+    {
+        if (affairNpcTalkDic.ContainsKey(skinID))
+        {
+
+            return affairNpcTalkDic[skinID][Random.Range(0, affairNpcTalkDic[skinID].Length)];
+        }
+        return null;
+    }
+}
+
diff --git a/Main/System/InternalAffairs/FuncNPCManager.cs.meta b/Main/System/InternalAffairs/FuncNPCManager.cs.meta
new file mode 100644
index 0000000..ac48c76
--- /dev/null
+++ b/Main/System/InternalAffairs/FuncNPCManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: efdf806ad153a4d4bae560014fc20efd
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

--
Gitblit v1.8.0