Esempio n. 1
0
 // 初始化任务数据(不包含核心任务数据).
 public static void InitSubData(GKToySubTaskInteract task, GKToyData data)
 {
     instance._task         = task;
     instance._interactTask = task;
     instance._data         = data;
     instance.tmpTaskId     = task.TargetID.Value;
 }
Esempio n. 2
0
        // 创建实例.
        public override GKToyBaseOverlord _CreateData(string path)
        {
            // 生成数据源.
            var       obj   = ScriptableObject.CreateInstance <GKToyExternalData>();
            GKToyData tData = new GKToyData();

            obj.data = tData.Clone() as GKToyData;
            GKEditor.CreateAsset(obj, path);
            var externalData = AssetDatabase.LoadMainAssetAtPath(path) as GKToyExternalData;

            if (null == externalData)
            {
                return(null);
            }

            string myName = Path.GetFileNameWithoutExtension(path);

            // 创建宿主.
            GameObject go          = new GameObject();
            var        tmpOverload = GK.GetOrAddComponent <GKToyBaseOverlord>(go);

            tmpOverload.internalData           = externalData;
            tmpOverload.name                   = myName;
            tmpOverload.internalData.data.name = myName;

            // 初始化首次数据.
            GKToyMakerChapterInfo.Create(this, position.min, ToyMakerBase._minWidth, ToyMakerBase._minHeight, _GetTaskLocalization("Chapter Infomation"), tmpOverload, go);
            return(tmpOverload);
        }
Esempio n. 3
0
 // 初始化任务数据(不包含核心任务数据).
 public static void InitSubData(GKToySubTaskHunting task, GKToyData data)
 {
     instance._task     = task;
     instance._huntTask = task;
     instance._data     = data;
     instance.tmpTaskId = task.TargetID.Value;
 }
        static public void SelectCom(GKToyNode node, GKToyData data)
        {
            switch (node.doubleClickType)
            {
            // Task.
            case 0:
                GKToyMakerTaskCom.PopupTaskWindow();
                GKToyMakerTaskCom.InitSubData((GKToyTask)node, data);
                break;

            // Interact Task.
            case 1:
                GKToyMakerSubInteractCom.PopupTaskWindow();
                GKToyMakerSubInteractCom.InitSubData((GKToySubTaskInteract)node, data);
                break;

            // Hunt Task.
            case 2:
                GKToyMakerSubHuntingCom.PopupTaskWindow();
                GKToyMakerSubHuntingCom.InitSubData((GKToySubTaskHunting)node, data);
                break;

            // Collect Task.
            case 4:
                GKToyMakerSubCollectCom.PopupTaskWindow();
                GKToyMakerSubCollectCom.InitSubData((GKToySubTaskCollect)node, data);
                break;

            default:
                break;
            }
        }
        /// <summary>
        /// 导出服务器数据
        /// </summary>
        /// <param name="dataType">数据类型:1-客户端,2-服务器</param>
        static public new void ExportServerData(GKToyData data, string destPath)
        {
            GameData    gameData = new GameData();
            NodeElement tmpItem;
            int         endID = 0;

            foreach (GKToyNode node in data.nodeLst.Values)
            {
                if ("GKToy.GKToyEnd" == node.className)
                {
                    endID = node.id;
                    break;
                }
            }
            if (!Directory.Exists(destPath))
            {
                GKFile.GKFileUtil.CreateDirectoryFromFileName(destPath);
            }
            bool isSpecialNode;

            foreach (GKToyNode node in data.nodeLst.Values)
            {
                isSpecialNode = false;
                tmpItem       = new NodeElement();
                if (NodeType.Group == node.nodeType || NodeType.VirtualNode == node.nodeType)
                {
                    continue;
                }
                if ("GKToy.GKToyDialogueCondition" == node.className && 0 == ((GKToyDialogueCondition)node).OutPutType.Value)
                {
                    isSpecialNode = true;
                }
                tmpItem.attrs = _GetFieldsWithAttribute(node, typeof(ExportServerAttribute), endID, node.id == endID, isSpecialNode);
                gameData.Add(tmpItem);
            }
            // 导出xml.
            XmlSerializer serializer = new XmlSerializer(typeof(GameData));
            FileStream    stream     = new FileStream(destPath, FileMode.Create);

            try
            {
                serializer.Serialize(stream, gameData);
            }
            finally
            {
                stream.Close();
            }
        }
        /// <summary>
        /// 导出服务器数据
        /// </summary>
        /// <param name="dataType">数据类型:1-客户端,2-服务器</param>
        static public new List <NodeElement> ExportServerData(GKToyData data, string destPath)
        {
            GameData           gameData    = new GameData();
            List <NodeElement> npcTalkText = new List <NodeElement>();
            NodeElement        tmpItem;
            int startId = 0;

            if (!Directory.Exists(destPath))
            {
                GKFile.GKFileUtil.CreateDirectoryFromFileName(destPath);
            }
            data.LoadNodes();
            foreach (GKToyNode node in data.nodeLst.Values)
            {
                tmpItem = new NodeElement();
                if (NodeType.Group == node.nodeType || NodeType.VirtualNode == node.nodeType || "GKToy.GKToyEnd" == node.className)
                {
                    continue;
                }
                if ("GKToy.GKToyStart" == node.className)
                {
                    if (0 < node.links.Count)
                    {
                        startId = node.links[0].next;
                    }
                    continue;
                }
                tmpItem.attrs = _GetFieldsWithAttribute(((GKToyDialogue)node).NodeID.ToString(), data.name, node, typeof(ExportServerAttribute), npcTalkText, node.id == startId);
                gameData.Add(tmpItem);
            }
            // 导出xml.
            XmlSerializer serializer = new XmlSerializer(typeof(GameData));
            FileStream    stream     = new FileStream(destPath, FileMode.Create);

            try
            {
                serializer.Serialize(stream, gameData);
            }
            finally
            {
                stream.Close();
            }
            return(npcTalkText);
        }
Esempio n. 7
0
 static void _FindSubTask(GKToyData data, GKToyNode parenNode, GKToyNode curNode, GameData subTaskData, GameData taskConfigData, Type exportType, int layer, GameData taskTextData, List <GKToyData> dfgDatas)
 {
     foreach (Link link in curNode.links)
     {
         NodeElement tmpItem = new NodeElement();
         if (!data.nodeLst.ContainsKey(link.next))
         {
             return;
         }
         curNode = (GKToyNode)data.nodeLst[link.next];
         if ("GKToyTaskEditor.GKToyTask" == curNode.className)
         {
             return;
         }
         tmpItem.attrs = _GetFieldsWithAttribute(((GKToySubTask)curNode).TargetID.ToString(), curNode, exportType, taskTextData, dfgDatas, data);
         subTaskData.Add(tmpItem);
         taskConfigData.Add(_GenerateTaskConfigData(parenNode, curNode, layer));
         _FindSubTask(data, parenNode, curNode, subTaskData, taskConfigData, exportType, layer + 1, taskTextData, dfgDatas);
     }
 }
Esempio n. 8
0
        GameObject _CreateDialogueData(string path, int taskId, string dfgType)
        {
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
            // 生成数据源.
            var       obj   = ScriptableObject.CreateInstance <GKToyExternalData>();
            GKToyData tData = new GKToyData();

            obj.data = tData.Clone() as GKToyData;
            string assetPath = string.Format("{0}{1}_{2}.Asset", path, dfgType, taskId);

            GKEditor.CreateAsset(obj, assetPath);
            var externalData = AssetDatabase.LoadMainAssetAtPath(assetPath) as GKToyExternalData;

            if (null == externalData)
            {
                return(null);
            }

            string myName = string.Format("{0}_{1}", dfgType, taskId);

            // 创建宿主.
            GameObject go          = new GameObject();
            var        tmpOverload = GK.GetOrAddComponent <GKToyBaseOverlord>(go);

            tmpOverload.internalData           = externalData;
            tmpOverload.name                   = myName;
            tmpOverload.internalData.data.name = myName;

            // 初始化首次数据.
            GKToyNode node = new GKToyStart(_GenerateGUID(tmpOverload.internalData.data.nodeGuid++));
            Type      type = node.GetType();

            node.className = string.Format("{0}.{1}", type.Namespace, type.Name);
            node.pos.x     = (_contentScrollPos.x + ToyMakerBase._minWidth * 0.5f) / Scale;
            node.pos.y     = (_contentScrollPos.y + ToyMakerBase._minHeight * 0.5f) / Scale;
            node.id        = node.ID;
            node.nodeType  = NodeType.Action;
            node.name      = "开始-1";
            node.Init(tmpOverload);
            node.comment = "";
            tmpOverload.internalData.data.nodeLst.Add(node.id, node);
            node           = new GKToyEnd(_GenerateGUID(_GenerateGUID(tmpOverload.internalData.data.nodeGuid++)));
            type           = node.GetType();
            node.className = string.Format("{0}.{1}", type.Namespace, type.Name);
            node.pos.x     = -10;
            node.pos.y     = -10;
            node.id        = node.ID;
            node.nodeType  = NodeType.Action;
            node.name      = "结束-2";
            node.Init(tmpOverload);
            node.comment = "";
            tmpOverload.internalData.data.nodeLst.Add(node.id, node);
            tmpOverload.Save();
            tmpOverload.Backup();
            string     prefabPath = string.Format("{0}{1}_{2}.prefab", path, dfgType, taskId);
            GameObject prefab;

            if (!File.Exists(prefabPath))
            {
                prefab = PrefabUtility.CreatePrefab(prefabPath, go);
            }
            else
            {
                prefab = AssetDatabase.LoadAssetAtPath <GameObject>(prefabPath);
                prefab = PrefabUtility.ReplacePrefab(go, prefab);
            }
            DestroyImmediate(go);
            return(prefab);
        }
Esempio n. 9
0
        public static void _ExportGameDataByMenuItem(int dataType, ToyMakerTaskSettings.ToyMakerTask exportSetting, GKToyData curData)
        {
            string destPath;

            // 导出路径.
            if (1 == dataType)
            {
                // 客户端.
                destPath = exportSetting._defaultClientPath;
                if (!Directory.Exists(destPath))
                {
                    do
                    {
                        destPath = EditorUtility.OpenFolderPanel(_GetLocalization("Save path"), Application.dataPath, _GetLocalization("Select save path."));
                    } while (!Directory.Exists(destPath));
                    exportSetting._defaultClientPath = destPath;
                }
                GKToyMakerTaskDataExporter.ExportClientData(curData, destPath, curData.name);
            }
            else
            {
                // 服务器.
                destPath = exportSetting._defaultServerPath;
                if (!Directory.Exists(destPath))
                {
                    do
                    {
                        destPath = EditorUtility.OpenFolderPanel(_GetLocalization("Save path"), Application.dataPath, _GetLocalization("Select save path."));
                    } while (!Directory.Exists(destPath));
                    exportSetting._defaultServerPath = destPath;
                }
                GKToyMakerTaskDataExporter.ExportServerData(curData, destPath, curData.name);
            }
        }
Esempio n. 10
0
 // 初始化任务数据(不包含核心任务数据).
 public static void InitSubData(GKToyTask task, GKToyData data)
 {
     instance._task     = task;
     instance._data     = data;
     instance.tmpTaskId = task.TaskID.Value;
 }
Esempio n. 11
0
        /// <summary>
        /// 导出客户端数据
        /// </summary>
        /// <param name="data">要导出的数据源</param>
        /// <param name="destPath"></param>
        static public void ExportClientData(GKToyData data, string destPath, string fileName)
        {
            GameData         mainTaskData   = new GameData();
            GameData         subTaskData    = new GameData();
            GameData         taskConfigData = new GameData();
            GameData         npcTalkData    = new GameData();
            GameData         taskTextData   = new GameData();
            List <GKToyData> dfgDatas       = new List <GKToyData>();
            NodeElement      tmpItem;
            Type             exportType = typeof(ExportClientAttribute);

            if (!Directory.Exists(destPath))
            {
                GKFile.GKFileUtil.CreateDirectory(destPath);
            }
            string subPath = string.Format("{0}/{1}", destPath, fileName);

            if (!Directory.Exists(subPath))
            {
                GKFile.GKFileUtil.CreateDirectory(subPath);
            }
            data.LoadNodes();
            foreach (GKToyNode node in data.nodeLst.Values)
            {
                if (NodeType.Group == node.nodeType || NodeType.VirtualNode == node.nodeType)
                {
                    continue;
                }
                if ("GKToyTaskEditor.GKToyTask" == node.className)
                {
                    tmpItem       = new NodeElement();
                    tmpItem.attrs = _GetFieldsWithAttribute(((GKToyTask)node).TaskID.ToString(), node, exportType, taskTextData, dfgDatas, data);
                    mainTaskData.Add(tmpItem);
                    _FindSubTask(data, node, node, subTaskData, taskConfigData, exportType, 1, taskTextData, dfgDatas);
                }
            }
            // 导出任务主表lua.
            string       filePath = string.Format("{0}/Task.lua", subPath);
            StreamWriter stream   = new StreamWriter(filePath, false);

            try
            {
                stream.Write(_DataToLua("Task", mainTaskData));
            }
            finally
            {
                stream.Close();
            }
            // 导出任务配置表lua.
            filePath = string.Format("{0}/TaskConfig.lua", subPath);
            stream   = new StreamWriter(filePath, false);
            try
            {
                stream.Write(_DataToLua("TaskConfig", taskConfigData));
            }
            finally
            {
                stream.Close();
            }
            // 导出子任务表lua.
            filePath = string.Format("{0}/TaskTarget.lua", subPath);
            stream   = new StreamWriter(filePath, false);
            try
            {
                stream.Write(_DataToLua("TaskTarget", subTaskData));
            }
            finally
            {
                stream.Close();
            }
            // 导出taskText lua.
            filePath = string.Format("{0}/TaskText.lua", subPath);
            stream   = new StreamWriter(filePath, false);
            try
            {
                stream.Write(_DataToLua("TaskText", taskTextData));
            }
            finally
            {
                stream.Close();
            }
            // 导出任务对话lua.
            string dfgPath = string.Format("{0}/TaskDfg", destPath);

            if (!Directory.Exists(dfgPath))
            {
                GKFile.GKFileUtil.CreateDirectoryFromFileName(dfgPath);
            }
            foreach (GKToyData dfgData in dfgDatas)
            {
                npcTalkData.AddRange(GKToyMakerDialogueDataExporter.ExportClientData(dfgData, string.Format("{0}/{1}.lua", dfgPath, dfgData.name)));
            }
            // 导出npctalk lua.
            filePath = string.Format("{0}/NpcTalk.lua", subPath);
            stream   = new StreamWriter(filePath, false);
            try
            {
                stream.Write(_DataToLua("NpcTalk", npcTalkData));
            }
            finally
            {
                stream.Close();
            }
            // prize.
        }
Esempio n. 12
0
        /// <summary>
        /// 在实例中读取带有特定Attribute的属性
        /// </summary>
        /// <param name="obj">读取的实例</param>
        /// <param name="attribute">Attribute</param>
        /// <returns>属性列表</returns>
        protected static List <NodeAttr> _GetFieldsWithAttribute(string id, object obj, Type attribute, GameData taskTextData, List <GKToyData> dfgDatas, GKToyData nodeData)
        {
            if (!obj.GetType().IsClass)
            {
                return(null);
            }
            Type type = obj.GetType();

            object[]        attrs;
            List <NodeAttr> fields = new List <NodeAttr>();

            // 读取所有属性.
            type = obj.GetType();
            List <PropertyInfo> allProperties = new List <PropertyInfo>();

            do
            {
                allProperties.AddRange(type.GetProperties(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly));
                type = type.BaseType;
            } while (null != type || typeof(GKToyNode) == type);
            foreach (PropertyInfo property in allProperties)
            {
                attrs = property.GetCustomAttributes(attribute, true);
                if (0 != attrs.Length)
                {
                    object val      = property.GetValue(obj, null);
                    Type   propType = val.GetType();
                    // 存储译文.
                    if (taskTextProps.Contains(property.Name))
                    {
                        string textId = string.Format("{0}_{1}", property.Name, id);
                        string valStr = _DealWithAttributes(val, propType);
                        // id替换.
                        if (replaceProps.Contains(property.Name))
                        {
                            int start = valStr.IndexOf("[");
                            int end   = valStr.IndexOf("]");
                            if (-1 < start && 0 < end - start - 1)
                            {
                                string       name      = valStr.Substring(start + 1, end - start - 1);
                                PropertyInfo innerPorp = obj.GetType().GetProperty(name);
                                if (null != innerPorp)
                                {
                                    object innerVal  = innerPorp.GetValue(obj, null);
                                    Type   innerType = innerVal.GetType();
                                    valStr = valStr.Replace(name, _DealWithAttributes(innerVal, innerType));
                                }
                            }
                        }
                        fields.Add(new NodeAttr(property.Name, textId));
                        taskTextData.Add(_GenerateTaskTextData(textId, valStr));
                    }
                    else if ("PreTask" == property.Name)
                    {
                        string    valStr = "";
                        GKToyTask task   = (GKToyTask)obj;
                        if (0 < task.preTaskIds.Count)
                        {
                            for (int i = 0; i < task.preTaskIds.Count; ++i)
                            {
                                if (i < task.preSeperator.Count)
                                {
                                    valStr = string.Format("{0}{1}{2}", valStr, ((GKToyTask)nodeData.nodeLst[task.preTaskIds[i]]).TaskID, task.preSeperator[i]);
                                }
                                else
                                {
                                    valStr = string.Format("{0}{1}", valStr, ((GKToyTask)nodeData.nodeLst[task.preTaskIds[i]]).TaskID);
                                }
                            }
                        }
                        fields.Add(new NodeAttr(property.Name, valStr));
                    }
                    else if ("NextTask" == property.Name)
                    {
                        string    valStr    = "";
                        GKToyTask task      = (GKToyTask)obj;
                        bool      seperator = false;
                        if (0 < task.nextTaskIds.Count)
                        {
                            foreach (int next in task.nextTaskIds)
                            {
                                if (seperator)
                                {
                                    valStr = string.Format("{0},{1}", valStr, ((GKToyTask)nodeData.nodeLst[next]).TaskID);
                                }
                                else
                                {
                                    valStr    = string.Format("{0}{1}", valStr, ((GKToyTask)nodeData.nodeLst[next]).TaskID);
                                    seperator = true;
                                }
                            }
                        }
                        fields.Add(new NodeAttr(property.Name, valStr));
                    }
                    // 处理对话.
                    else if (dfgProps.Contains(property.Name))
                    {
                        dfgDatas.Add(((GKToySharedGameObject)val).Value.GetComponent <GKToyBaseOverlord>().internalData.data);
                    }
                    else
                    {
                        attrs = property.GetCustomAttributes(typeof(XmlElementAttribute), true);
                        if (0 != attrs.Length)
                        {
                            fields.Add(new NodeAttr(((XmlElementAttribute)attrs[0]).ElementName, _DealWithAttributes(val, propType)));
                        }
                        else
                        {
                            fields.Add(new NodeAttr(property.Name, _DealWithAttributes(val, propType)));
                        }
                    }
                }
            }
            if (0 == fields.Count)
            {
                return(null);
            }
            else
            {
                return(fields);
            }
        }