using System.Collections.Generic; using System.Linq; using LitJson; using UnityEngine; public class FuncNPCManager : GameSystemManager { //内政NPC Dictionary affairNpcTalkDic = new Dictionary(); public List affairTalkIndexList = new List(); public float lastAffairTalkTime; public int lastAffiarRandomIndex; //公会NPC Dictionary guildNpcTalkDic = new Dictionary(); public List guildTalkIndexList = new List(); public float lastGuildTalkTime; public int lastGuildRandomIndex; //行商特殊处理 public bool isHawkerShowNow = false; //行商状态,true 行商走出来和站岗中,false 行商走出去和外出中 public bool isHawkerStandBy = false; //行商状态,true 行商站岗中,只有true才能参与喊话;移动或者消失都为false 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(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(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; if (isHawkerStandBy) { index = Random.Range(0, guildTalkIndexList.Count); } else { if (guildTalkIndexList.Count == 1) { return -1; } index = Random.Range(1, guildTalkIndexList.Count); } if (index == lastGuildRandomIndex) { if (guildTalkIndexList.Count == 1) { //只有一个的情况 lastGuildRandomIndex = -1; return -1; } 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; } public string GetGuildTalk(int skinID) { if (guildNpcTalkDic.ContainsKey(skinID)) { return guildNpcTalkDic[skinID][Random.Range(0, guildNpcTalkDic[skinID].Length)]; } return null; } }