少年修仙传客户端代码仓库
client_linchunjie
2019-03-26 f31a204c7332999f22efd9d6c24d73dc0a5f3fe1
6394 【前端】【2.0】剧情任务对话支持同一NPC不同任务状态的多段对话
1个文件已删除
1 文件已重命名
1个文件已添加
5个文件已修改
981 ■■■■ 已修改文件
Core/GameEngine/Model/Config/StoryMissionsConfig.cs 432 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/StoryMissionsConfig.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/TelPartialConfig/PartialStoryMissionsConfig.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/TelPartialConfig/PartialStoryMissionsConfig.cs.meta 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Lua/Gen/StoryMissionsConfigWrap.cs 402 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Lua/Gen/XLuaGenAutoRegister.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/DialogueDuidanceWin.cs 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/MainInterfacePanel/TaskModel.cs 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/StoryMissionsConfig.cs
@@ -1,240 +1,230 @@
//--------------------------------------------------------
//    [Author]:           Fish
//    [  Date ]:           Thursday, February 14, 2019
//--------------------------------------------------------
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System;
using UnityEngine;
[XLua.LuaCallCSharp]
public partial class StoryMissionsConfig
{
    public readonly int TaskID;
    public readonly int[] NpcID;
//--------------------------------------------------------
//    [Author]:           Fish
//    [  Date ]:           Tuesday, March 26, 2019
//--------------------------------------------------------
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System;
using UnityEngine;
[XLua.LuaCallCSharp]
public partial class StoryMissionsConfig
{
    public readonly int id;
    public readonly int TaskID;
    public readonly int state;
    public readonly int NpcID;
    public readonly int[] TalkNum;
    public readonly string[] content;
    public readonly string content;
    public readonly int[] Speaker1;
    public readonly int[] Speaker2;
    public readonly string[] NpcIcon;
    public readonly int TaskMusic;
    public readonly int TaskMusic;
    public StoryMissionsConfig()
    {
    }
    public StoryMissionsConfig(string input)
    {
        try
        {
            var tables = input.Split('\t');
            int.TryParse(tables[0],out id);
    public StoryMissionsConfig()
    {
    }
            int.TryParse(tables[1],out TaskID);
    public StoryMissionsConfig(string input)
    {
        try
        {
            var tables = input.Split('\t');
            int.TryParse(tables[2],out state);
            int.TryParse(tables[0],out TaskID);
            int.TryParse(tables[3],out NpcID);
            string[] NpcIDStringArray = tables[1].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            NpcID = new int[NpcIDStringArray.Length];
            for (int i=0;i<NpcIDStringArray.Length;i++)
            {
                 int.TryParse(NpcIDStringArray[i],out NpcID[i]);
            }
            string[] TalkNumStringArray = tables[2].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            string[] TalkNumStringArray = tables[4].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            TalkNum = new int[TalkNumStringArray.Length];
            for (int i=0;i<TalkNumStringArray.Length;i++)
            {
                 int.TryParse(TalkNumStringArray[i],out TalkNum[i]);
            }
            content = tables[3].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            content = tables[5];
            string[] Speaker1StringArray = tables[4].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            string[] Speaker1StringArray = tables[6].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            Speaker1 = new int[Speaker1StringArray.Length];
            for (int i=0;i<Speaker1StringArray.Length;i++)
            {
                 int.TryParse(Speaker1StringArray[i],out Speaker1[i]);
            }
            string[] Speaker2StringArray = tables[5].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            Speaker2 = new int[Speaker2StringArray.Length];
            for (int i=0;i<Speaker2StringArray.Length;i++)
            {
                 int.TryParse(Speaker2StringArray[i],out Speaker2[i]);
            }
            NpcIcon = tables[6].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            int.TryParse(tables[7],out TaskMusic);
        }
        catch (Exception ex)
        {
            DebugEx.Log(ex);
        }
    }
    static Dictionary<string, StoryMissionsConfig> configs = new Dictionary<string, StoryMissionsConfig>();
    public static StoryMissionsConfig Get(string id)
    {
        if (!inited)
        {
            Debug.Log("StoryMissionsConfig 还未完成初始化。");
            return null;
        }
        if (configs.ContainsKey(id))
        {
            return configs[id];
        }
        StoryMissionsConfig config = null;
        if (rawDatas.ContainsKey(id))
        {
            config = configs[id] = new StoryMissionsConfig(rawDatas[id]);
            rawDatas.Remove(id);
        }
        return config;
    }
    public static StoryMissionsConfig Get(int id)
    {
        return Get(id.ToString());
    }
    public static List<string> GetKeys()
    {
        var keys = new List<string>();
        keys.AddRange(configs.Keys);
        keys.AddRange(rawDatas.Keys);
        return keys;
    }
    public static List<StoryMissionsConfig> GetValues()
    {
        var values = new List<StoryMissionsConfig>();
        values.AddRange(configs.Values);
        var keys = new List<string>(rawDatas.Keys);
        foreach (var key in keys)
        {
            values.Add(Get(key));
        }
        return values;
    }
    public static bool Has(string id)
    {
        return configs.ContainsKey(id) || rawDatas.ContainsKey(id);
    }
    public static bool Has(int id)
    {
        return Has(id.ToString());
    }
    public static bool inited { get; private set; }
    protected static Dictionary<string, string> rawDatas = new Dictionary<string, string>();
    public static void Init(bool sync=false)
    {
        inited = false;
        var path = string.Empty;
        if (AssetSource.refdataFromEditor)
        {
            path = ResourcesPath.CONFIG_FODLER +"/StoryMissions.txt";
        }
        else
        {
            path = AssetVersionUtility.GetAssetFilePath("config/StoryMissions.txt");
        }
        var tempConfig = new StoryMissionsConfig();
        var preParse = tempConfig is IConfigPostProcess;
        if (sync)
        {
            var lines = File.ReadAllLines(path);
            if (!preParse)
            {
                rawDatas = new Dictionary<string, string>(lines.Length - 3);
            }
            for (int i = 3; i < lines.Length; i++)
            {
                try
                {
                    var line = lines[i];
                    var index = line.IndexOf("\t");
                    if (index == -1)
                    {
                        continue;
                    }
                    var id = line.Substring(0, index);
                    if (preParse)
                    {
                        var config = new StoryMissionsConfig(line);
                        configs[id] = config;
                        (config as IConfigPostProcess).OnConfigParseCompleted();
                    }
                    else
                    {
                        rawDatas[id] = line;
                    }
                }
                catch (System.Exception ex)
                {
                    Debug.LogError(ex);
                }
            }
            inited = true;
        }
        else
        {
            ThreadPool.QueueUserWorkItem((object _object) =>
            {
                var lines = File.ReadAllLines(path);
                if (!preParse)
                {
                    rawDatas = new Dictionary<string, string>(lines.Length - 3);
                }
                for (int i = 3; i < lines.Length; i++)
                {
                    try
                    {
                       var line = lines[i];
                        var index = line.IndexOf("\t");
                        if (index == -1)
                        {
                            continue;
                        }
                        var id = line.Substring(0, index);
                        if (preParse)
                        {
                            var config = new StoryMissionsConfig(line);
                            configs[id] = config;
                            (config as IConfigPostProcess).OnConfigParseCompleted();
                        }
                        else
                        {
                            rawDatas[id] = line;
                        }
                    }
                    catch (System.Exception ex)
                    {
                        Debug.LogError(ex);
                    }
                }
                inited = true;
            });
        }
    }
}
            int.TryParse(tables[7],out TaskMusic);
        }
        catch (Exception ex)
        {
            DebugEx.Log(ex);
        }
    }
    static Dictionary<string, StoryMissionsConfig> configs = new Dictionary<string, StoryMissionsConfig>();
    public static StoryMissionsConfig Get(string id)
    {
        if (!inited)
        {
            Debug.Log("StoryMissionsConfig 还未完成初始化。");
            return null;
        }
        if (configs.ContainsKey(id))
        {
            return configs[id];
        }
        StoryMissionsConfig config = null;
        if (rawDatas.ContainsKey(id))
        {
            config = configs[id] = new StoryMissionsConfig(rawDatas[id]);
            rawDatas.Remove(id);
        }
        return config;
    }
    public static StoryMissionsConfig Get(int id)
    {
        return Get(id.ToString());
    }
    public static List<string> GetKeys()
    {
        var keys = new List<string>();
        keys.AddRange(configs.Keys);
        keys.AddRange(rawDatas.Keys);
        return keys;
    }
    public static List<StoryMissionsConfig> GetValues()
    {
        var values = new List<StoryMissionsConfig>();
        values.AddRange(configs.Values);
        var keys = new List<string>(rawDatas.Keys);
        foreach (var key in keys)
        {
            values.Add(Get(key));
        }
        return values;
    }
    public static bool Has(string id)
    {
        return configs.ContainsKey(id) || rawDatas.ContainsKey(id);
    }
    public static bool Has(int id)
    {
        return Has(id.ToString());
    }
    public static bool inited { get; private set; }
    protected static Dictionary<string, string> rawDatas = new Dictionary<string, string>();
    public static void Init(bool sync=false)
    {
        inited = false;
        var path = string.Empty;
        if (AssetSource.refdataFromEditor)
        {
            path = ResourcesPath.CONFIG_FODLER +"/StoryMissions.txt";
        }
        else
        {
            path = AssetVersionUtility.GetAssetFilePath("config/StoryMissions.txt");
        }
        var tempConfig = new StoryMissionsConfig();
        var preParse = tempConfig is IConfigPostProcess;
        if (sync)
        {
            var lines = File.ReadAllLines(path);
            if (!preParse)
            {
                rawDatas = new Dictionary<string, string>(lines.Length - 3);
            }
            for (int i = 3; i < lines.Length; i++)
            {
                try
                {
                    var line = lines[i];
                    var index = line.IndexOf("\t");
                    if (index == -1)
                    {
                        continue;
                    }
                    var id = line.Substring(0, index);
                    if (preParse)
                    {
                        var config = new StoryMissionsConfig(line);
                        configs[id] = config;
                        (config as IConfigPostProcess).OnConfigParseCompleted();
                    }
                    else
                    {
                        rawDatas[id] = line;
                    }
                }
                catch (System.Exception ex)
                {
                    Debug.LogError(ex);
                }
            }
            inited = true;
        }
        else
        {
            ThreadPool.QueueUserWorkItem((object _object) =>
            {
                var lines = File.ReadAllLines(path);
                if (!preParse)
                {
                    rawDatas = new Dictionary<string, string>(lines.Length - 3);
                }
                for (int i = 3; i < lines.Length; i++)
                {
                    try
                    {
                       var line = lines[i];
                        var index = line.IndexOf("\t");
                        if (index == -1)
                        {
                            continue;
                        }
                        var id = line.Substring(0, index);
                        if (preParse)
                        {
                            var config = new StoryMissionsConfig(line);
                            configs[id] = config;
                            (config as IConfigPostProcess).OnConfigParseCompleted();
                        }
                        else
                        {
                            rawDatas[id] = line;
                        }
                    }
                    catch (System.Exception ex)
                    {
                        Debug.LogError(ex);
                    }
                }
                inited = true;
            });
        }
    }
}
Core/GameEngine/Model/Config/StoryMissionsConfig.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: cfc7efaf66b8710448b57f2006fe4011
timeCreated: 1550120972
timeCreated: 1553569420
licenseType: Pro
MonoImporter:
  serializedVersion: 2
Core/GameEngine/Model/TelPartialConfig/PartialStoryMissionsConfig.cs
New file
@@ -0,0 +1,37 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public partial class StoryMissionsConfig : IConfigPostProcess
{
    static Dictionary<int, Dictionary<int, int>> m_StoryMissions =
        new Dictionary<int, Dictionary<int, int>>();
    public void OnConfigParseCompleted()
    {
        Dictionary<int, int> missons = null;
        if (!m_StoryMissions.TryGetValue(TaskID, out missons))
        {
            missons = new Dictionary<int, int>();
            m_StoryMissions.Add(TaskID, missons);
        }
        missons.Add(state, id);
    }
    public static StoryMissionsConfig GetConfig(int taskId, int state)
    {
        if (m_StoryMissions.ContainsKey(taskId))
        {
            var missions = m_StoryMissions[taskId];
            if (missions.ContainsKey(state))
            {
                var id = missions[state];
                return Get(id);
            }
        }
        return null;
    }
}
Core/GameEngine/Model/TelPartialConfig/PartialStoryMissionsConfig.cs.meta
File was renamed from Lua/Gen/StoryMissionsConfigWrap.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 6bc321e7c730e4d4d8a8b9e9d1d054d7
timeCreated: 1550122890
guid: b6c2dca6b54449d4b8c11039fd6f8c26
timeCreated: 1553570058
licenseType: Pro
MonoImporter:
  serializedVersion: 2
Lua/Gen/StoryMissionsConfigWrap.cs
File was deleted
Lua/Gen/XLuaGenAutoRegister.cs
@@ -583,9 +583,6 @@
            translator.DelayWrapLoader(typeof(StoreConfig), StoreConfigWrap.__Register);
        
        
            translator.DelayWrapLoader(typeof(StoryMissionsConfig), StoryMissionsConfigWrap.__Register);
            translator.DelayWrapLoader(typeof(SuccessConfig), SuccessConfigWrap.__Register);
        
        
System/MainInterfacePanel/DialogueDuidanceWin.cs
@@ -29,13 +29,13 @@
        [SerializeField] Text m_ContentText;
        [SerializeField] Text m_NextText;
        [SerializeField] List<int> MysteriousTaskID = new List<int>();//新添神秘任务
        Dictionary<int, string> PlayerIcon = new Dictionary<int, string>();
        private int storyMissionsID = 0;//剧情任务ID
        private int taskCount = 0;//获取对话总条数
        private int[] sPeaker;//对话对应半身像(0为主角/1为NPC)
        private int nowTaskNum = 0;//获取当前的任务
        private int typesPeaker = -1;
        int[] sPeaker;//对话对应半身像(0为主角/1为NPC)
        int taskIndex = 0;//获取当前的任务
        int typesPeaker = -1;
        public static int storyMissionId = 0;
        private float timeType = 0f;
        TaskModel m_TaskModel;
@@ -77,8 +77,7 @@
            m_NextText.text = string.Format(Language.Get("TaskContinueCount"), AwaitSecond);
            IsCloseWindow();
            typesPeaker = -1;
            storyMissionsID = taskmodel._TaskNow;
            var config = StoryMissionsConfig.Get(storyMissionsID);
            var config = StoryMissionsConfig.Get(storyMissionId);
            if (config.TaskMusic != 0)
            {
                SoundPlayer.Instance.PlayNpcAudio(config.TaskMusic);
@@ -87,22 +86,11 @@
            {
                return;
            }
            if (config.NpcID[0] == taskmodel.NPCid)
            {
                taskCount = config.TalkNum[0];
                sPeaker = config.Speaker1;
                IsMultistage = 0;
            }
            else
            {
                taskCount = config.TalkNum[0];
                sPeaker = config.Speaker2;
                IsMultistage = 1;
            }
            //taskCount = config.TalkNum;
            //sPeaker = config.Speaker;
            nowTaskNum = 0;
            ShowDialogSelect(sPeaker[0], nowTaskNum);
            sPeaker = config.Speaker1;
            taskIndex = config.TalkNum[0];
            ShowDialogSelect(sPeaker[0], taskIndex);
        }
        private void IsCloseWindow()
@@ -134,11 +122,6 @@
        protected override void OnAfterClose()
        {
            if (MysteriousTaskID.Contains(storyMissionsID))
            {
                mainModel.MysteriousTaskID = storyMissionsID;
                CoroutineMgr.Instance.OnMysteriousTask();
            }
            bool _bool = IsDungeon();
            if (_bool)
            {
@@ -197,17 +180,20 @@
        private void OnClickMarkRay()
        {
            timeType = 0;
            var config = StoryMissionsConfig.Get(storyMissionsID);
            var config = StoryMissionsConfig.Get(storyMissionId);
            if (config == null)
            {
                return;
            }
            nowTaskNum += 1;
            if (taskCount - 1 >= nowTaskNum)//下一条
            taskIndex += 1;
            var end = config.TalkNum.Length > 1 ? config.TalkNum[1] : config.TalkNum[0];
            if (taskIndex <= end)//下一条
            {
                ShowDialogSelect(sPeaker[nowTaskNum], nowTaskNum);
                ShowDialogSelect(sPeaker[taskIndex], taskIndex);
            }
            if (taskCount - 1 < nowTaskNum)//最后一条
            else//最后一条
            {
                SessionEnd(TaskType.OK);
                Close();
@@ -223,7 +209,7 @@
        }
        private void OnClickSKIPButton()
        {
            var config = StoryMissionsConfig.Get(storyMissionsID);
            var config = StoryMissionsConfig.Get(storyMissionId);
            if (config != null)
            {
                SessionEnd(TaskType.OK);
@@ -251,7 +237,7 @@
                m_PlayerNameText.text = PlayerDatas.Instance.baseData.PlayerName;
                string platercContentKey = StoryMissionsConfig.Get(storyMissionsID).content[IsMultistage];
                string platercContentKey = StoryMissionsConfig.Get(storyMissionId).content;
                var config = TASKINFOConfig.Get(string.Format(platercContentKey, stepNum));
                if (config != null)
                {
@@ -270,15 +256,15 @@
                    m_BaseboardImageNPC.SetActive(true);
                    m_BaseboardImagePlayer.SetActive(false);
                }
                var configStoryMissions = StoryMissionsConfig.Get(storyMissionsID);
                var configStoryMissions = StoryMissionsConfig.Get(storyMissionId);
                if (configStoryMissions == null)
                {
                    return;
                }
                int npcId = configStoryMissions.NpcID[IsMultistage];
                int npcId = configStoryMissions.NpcID;
                var npcConfig = NPCConfig.Get(npcId);
                m_NPCNameText.text = npcConfig.charName;
                string npcContentKey = configStoryMissions.content[IsMultistage];
                string npcContentKey = configStoryMissions.content;
                var taskInfo = TASKINFOConfig.Get(string.Format(npcContentKey, stepNum));
                if (taskInfo == null)
                {
@@ -288,9 +274,7 @@
                {
                    m_ContentText_Npc.text = taskInfo.show_writing;
                }
                string npcIcon = configStoryMissions.NpcIcon[IsMultistage];
                var data = new UI3DNPCExhibitionData()
                {
                    npcId = npcId,
System/MainInterfacePanel/TaskModel.cs
@@ -353,25 +353,24 @@
        {
            return;
        }
        var config = StoryMissionsConfig.Get(taskID);
        var state = GetQuestState(taskID);
        var config = StoryMissionsConfig.GetConfig(taskID, state);
        bool IsOpenMain = WindowCenter.Instance.IsOpen<MainInterfaceWin>();
        var treasureStageUpShow = ModelCenter.Instance.GetModel<TreasureModel>().treasureStageUpShow;
        if (config != null)
        {
            for (int i = 0; i < config.NpcID.Length; i++)
            {
                if (NPCid == config.NpcID[i])
                {
                    if (!WindowCenter.Instance.IsOpen<DialogueDuidanceWin>() && IsOpenMain
                        && !treasureStageUpShow && !WindowCenter.Instance.ExistAnyFullScreenOrMaskWin())
                    {
                        WindowCenter.Instance.Close<MainInterfaceWin>();
                        WindowCenter.Instance.Open<DialogueDuidanceWin>();
                    }
                    return;
                }
        {
            if (NPCid == config.NpcID)
            {
                if (!WindowCenter.Instance.IsOpen<DialogueDuidanceWin>() && IsOpenMain
                     && !WindowCenter.Instance.ExistAnyFullScreenOrMaskWin())
                {
                    WindowCenter.Instance.Close<MainInterfaceWin>();
                    DialogueDuidanceWin.storyMissionId = config.id;
                    WindowCenter.Instance.Open<DialogueDuidanceWin>();
                }
                return;
            }
            if (!WindowCenter.Instance.IsOpen<TaskBoxBGMWin>() && IsOpenMain && !treasureStageUpShow)
            if (!WindowCenter.Instance.IsOpen<TaskBoxBGMWin>() && IsOpenMain)
            {
                WindowCenter.Instance.Close<MainInterfaceWin>();
                WindowCenter.Instance.Open<TaskBoxBGMWin>();
@@ -390,7 +389,7 @@
        }
        else
        {
            if (!WindowCenter.Instance.IsOpen<TaskBoxBGMWin>() && IsOpenMain && !treasureStageUpShow)
            if (!WindowCenter.Instance.IsOpen<TaskBoxBGMWin>() && IsOpenMain)
            {
                WindowCenter.Instance.Close<MainInterfaceWin>();
                WindowCenter.Instance.Open<TaskBoxBGMWin>();