private void BuildSkills(int nActorSkillID) { var rSymbolObjs = GPCSkillConfig.Instance.GetActorSkill(nActorSkillID); this.Skills = new List <GPCSkill>(); if (rSymbolObjs == null) { return; } for (int i = 0; i < rSymbolObjs.Count; i++) { List <GamePlayComponent> rComps = new List <GamePlayComponent>(); for (int j = 0; j < rSymbolObjs[i].Bodies.Count; j++) { var rCompType = MainAssemblyExpand.GetType("Game.Knight." + rSymbolObjs[i].Bodies[j].Identifer.Value); var rComp = ReflectionAssist.Construct( rCompType, new Type[] { typeof(ActorGamePlayManager), typeof(List <string>) }, this, rSymbolObjs[i].Bodies[j].ToArgs()) as GamePlayComponent; rComps.Add(rComp); } GPCSkill rGPCSkill = new GPCSkill(this, rSymbolObjs[i].Head.ToArgs(), rComps); this.Skills.Add(rGPCSkill); } for (int i = 0; i < this.Skills.Count; i++) { this.Skills[i].Initialize(); } }
/// <summary> /// 导出Excel /// </summary> public void Export(ExcelFormat rExcelFormat) { string rConfigFile = UtilTool.PathCombine(this.ExcelConfigRootPath, "Excel", rExcelFormat.ExcelName); string rExportDir = UtilTool.PathCombine(this.ExcelConfigRootPath, "Text"); FileStream rStream = File.Open(rConfigFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); IExcelDataReader rExcelReader = ExcelReaderFactory.CreateOpenXmlReader(rStream); DataSet rResult = rExcelReader.AsDataSet(); DataTable rDataTable = rResult.Tables[rExcelFormat.SheetName]; if (rDataTable == null) { Debug.LogErrorFormat("Excel {0} has not sheet {1}.", rExcelFormat.ExcelName, rExcelFormat.SheetName); rExcelReader.Close(); rStream.Close(); return; } int rColumns = rDataTable.Columns.Count; int rRows = rDataTable.Rows.Count; if (rRows == 0) { Debug.LogErrorFormat("Excel {0} has empty rows.", rExcelFormat.ExcelName); rExcelReader.Close(); rStream.Close(); return; } Type rDataType = MainAssemblyExpand.GetType(rExcelFormat.ClassName); if (rDataType == null) { Debug.LogErrorFormat("Excel {0} can not find Class {1}, please check it.", rExcelFormat.ExcelName, rExcelFormat.ClassName); rExcelReader.Close(); rStream.Close(); return; } var rTitleRow = rDataTable.Rows[0]; var rFields = new Dict <string, FieldInfo>(); var rKeyIDs = new Dict <string, int>(); for (int i = 0; i < rColumns; i++) { FieldInfo rFileInfo = rDataType.GetField(rTitleRow[i].ToString()); rFields.Add(rTitleRow[i].ToString(), rFileInfo); rKeyIDs.Add(rTitleRow[i].ToString(), i); } JsonNode rDataJson = new JsonClass(); for (int i = 1; i < rRows; i++) { JsonNode rItemJson = new JsonClass(); foreach (var rPair in rFields) { string rFieldValue = rDataTable.Rows[i][rKeyIDs[rPair.Key]].ToString(); JsonParser rJsonParser = new JsonParser(rFieldValue); JsonNode rTempNode = null; try { rTempNode = rJsonParser.Parser(); } catch (Exception) { rJsonParser.isValid = false; } if (!rJsonParser.isValid) { rTempNode = new JsonData(rFieldValue); } rItemJson.Add(rPair.Key, rTempNode); } rDataJson.Add(rDataTable.Rows[i][rKeyIDs[rExcelFormat.PrimaryKey]].ToString(), rItemJson); } File.WriteAllText(UtilTool.PathCombine(rExportDir, rExcelFormat.SheetName + ".json"), rDataJson.ToString()); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); rExcelReader.Close(); rStream.Close(); }