using UnityEngine; using System.Collections; using System.Collections.Generic; using OfficeOpenXml; using Mono.Xml; using System.Security; public class EffectAsset { public int id; public string desc; public string effect; public string link; public int followType; public int targetType; public Vector3 rot; public float lifeTime; public static EffectAsset CreateEffectAsset(ExcelWorksheet sheet, int row) { EffectAsset effect = new EffectAsset(); int col = 1; effect.id = sheet.GetValue(row, col++); effect.desc = sheet.GetValue(row, col++); effect.effect = sheet.GetValue(row, col++); effect.link = sheet.GetValue(row, col++); effect.followType = sheet.GetValue(row, col++); effect.targetType = sheet.GetValue(row, col++); effect.rot = StringUtil.convertVector3(sheet.GetValue(row, col++)); effect.lifeTime = sheet.GetValue(row, col++); return effect; } public void SaveAssetToExcel(ref ExcelWorksheet sheet, int row) { if (sheet == null) return; int col = 1; sheet.SetValue(row, col++, this.id); sheet.SetValue(row, col++, this.desc); sheet.SetValue(row, col++, this.effect); sheet.SetValue(row, col++, this.link); sheet.SetValue(row, col++, this.followType); sheet.SetValue(row, col++, this.targetType); sheet.SetValue(row, col++, StringUtil.ConvertVector2Str(this.rot)); sheet.SetValue(row, col++, this.lifeTime); } } public class FunctionDataAsset { public int id; public string name; public BattleBuffType buffType; public Buff_Function_Type functionType; public int group; public bool canHurtStop; //是否可以伤害打断 public bool forbidMove; //是否影响动作 public bool forbidNormalAttack; //禁止普攻 public bool forbidSkill; //禁止技能释放 public bool canIgnoreDodge; //是否可以闪避 public string desc; public float intervalTime; //间隔时长 public int fromAttr; //来源属性 public string icon; //图标 public int effectId; //特效id public string word; //文字 public int iconIdx = -1; public int wordIdx = -1; public int effectIdx = -1; public static FunctionDataAsset CreateFunAsset(ExcelWorksheet sheet, int row) { FunctionDataAsset funAsset = new FunctionDataAsset(); int col = 1; funAsset.id = sheet.GetValue(row, col++); funAsset.name = sheet.GetValue(row, col++); funAsset.functionType = (Buff_Function_Type)(sheet.GetValue(row, col++)); funAsset.group = sheet.GetValue(row, col++); funAsset.buffType = (BattleBuffType)(sheet.GetValue(row, col++)); funAsset.canHurtStop = sheet.GetValue(row, col++) > 0 ? true : false; funAsset.forbidMove = sheet.GetValue(row, col++) > 0 ? true : false; funAsset.forbidNormalAttack = sheet.GetValue(row, col++) > 0 ? true : false; funAsset.forbidSkill = sheet.GetValue(row, col++) > 0 ? true : false; funAsset.canIgnoreDodge = sheet.GetValue(row, col++) > 0 ? true : false; funAsset.desc = sheet.GetValue(row, col++); funAsset.icon = sheet.GetValue(row, col++); string temp = sheet.GetValue(row, col++); int.TryParse(temp, out funAsset.effectId); funAsset.word = sheet.GetValue(row, col++); return funAsset; } public void SaveAssetToExcel(ref ExcelWorksheet sheet, int row) { if (sheet == null) return; int col = 1; sheet.SetValue(row, col++, this.id); sheet.SetValue(row, col++, this.name); sheet.SetValue(row, col++, (int)this.functionType); sheet.SetValue(row, col++, this.group); sheet.SetValue(row, col++, (int)this.buffType); sheet.SetValue(row, col++, this.canHurtStop ? 1 : 0); sheet.SetValue(row, col++, this.forbidMove?1:0); sheet.SetValue(row, col++, this.forbidNormalAttack?1:0); sheet.SetValue(row, col++, this.forbidSkill ? 1 : 0); sheet.SetValue(row, col++, this.canIgnoreDodge ? 1 : 0); sheet.SetValue(row, col++, this.desc); sheet.SetValue(row, col++, this.icon); sheet.SetValue(row, col++, this.effectId); sheet.SetValue(row, col++, this.word); } public void Copy(FunctionDataAsset from) { if (from == null) return; this.id = from.id; this.name = from.name; this.buffType = from.buffType; this.functionType = from.functionType; this.group = from.group; this.canHurtStop = from.canHurtStop; this.forbidMove = from.forbidMove; this.forbidNormalAttack = from.forbidNormalAttack; this.forbidSkill = from.forbidSkill; this.canIgnoreDodge = from.canIgnoreDodge; this.desc = from.desc; this.intervalTime = from.intervalTime; this.fromAttr = from.fromAttr; this.icon = from.icon; this.effectId = from.effectId; this.word = from.word; this.iconIdx = from.iconIdx; this.wordIdx = from.wordIdx; this.effectIdx = from.effectIdx; } } public class FrameEventParamEditor { public string name; public string val; public string valType; public int valTypeIdx = -1; public int valIdx = -1; public SecurityElement SaveCfgToXml() { SecurityElement paramNode = new SecurityElement("param"); paramNode.AddAttribute("name", this.name); paramNode.AddAttribute("value", this.val); paramNode.AddAttribute("valueType", this.valType); return paramNode; } } public class ActionEventParamEditor { public int startFrame; public int endFrame; public int eventType; public string desc; public bool bAffectBySing; public List frameParams; public ActionEventParamEditor() { } public ActionEventParamEditor(ActionEventParamEditor src) { if(src!=null) { this.startFrame = src.startFrame; this.endFrame = src.endFrame; this.eventType = src.eventType; this.desc = src.desc; this.bAffectBySing = src.bAffectBySing; if (this.frameParams == null) this.frameParams = new List(); this.frameParams.Clear(); if (src.frameParams != null) this.frameParams.AddRange(src.frameParams); } } public SecurityElement SaveCfgToXml() { SecurityElement eventNode = new SecurityElement("event"); eventNode.AddAttribute("startFrame", this.startFrame.ToString()); eventNode.AddAttribute("endFrame", this.endFrame.ToString()); eventNode.AddAttribute("type", this.eventType.ToString()); eventNode.AddAttribute("affectBySing", this.bAffectBySing.ToString()); eventNode.AddAttribute("desc", this.desc); if(this.frameParams != null) { for(int idx =0; idx < this.frameParams.Count;idx++) { FrameEventParamEditor paramData = this.frameParams[idx]; if (string.IsNullOrEmpty(paramData.val) || string.IsNullOrEmpty(paramData.valType) || string.IsNullOrEmpty(paramData.name)) continue; SecurityElement paramNode = paramData.SaveCfgToXml(); eventNode.AddChild(paramNode); } } return eventNode; } } public class ActionEventDataEditor { private int mId; public int Id { get { return mId; } } public string Name { get;set; } private int mTotalFrame = 0; public int TotalFrame { get { return mTotalFrame; } set { mTotalFrame = value; } } /// /// 性别 /// private int mGender = 2; public int Gender { get { return mGender; } set { mGender = value; } } public List ActionEventList { get; private set; } public ActionEventDataEditor(int id, int totalFrame,string name,int gender) { this.mId = id; this.mTotalFrame = totalFrame; this.Name = name; this.mGender = gender; } public void AddEvent(ActionEventParamEditor eve) { if (ActionEventList == null) { ActionEventList = new List(); } ActionEventList.Add(eve); } } public class FunctionValData { public int funId; public float val; //初始值 public float incVal; //随等级变化值 public float duration; //初始时长 public float incDuration; //随等级变化时长 public int fromAttr; //依赖那个属性进行计算 public float intervalTime; //间隔时间 public bool extendFold; public FunctionValData(int id, float val, float incVal, float dur, float incDur, int fromAttr, float intervalTime) { this.funId = id; this.val = val; this.incVal = incVal; this.duration = dur; this.incDuration = incDur; this.fromAttr = fromAttr; this.intervalTime = intervalTime; this.extendFold = true; } public FunctionValData(FunctionValData src) { if(src != null) { this.funId = src.funId; this.val = src.val; this.incVal = src.incVal; this.duration = src.duration; this.incDuration = src.duration; this.fromAttr = src.fromAttr; this.intervalTime = src.intervalTime; } } public override string ToString() { return funId + ":" + val + (incVal > 0 ? ("_" + incVal) : "") + ":" + duration + (incDuration > 0 ? ("_" + incDuration) : "") + ":" + fromAttr + ":" + intervalTime; } public void Apply(FunctionValData src) { if (src != null) { this.funId = src.funId; this.val = src.val; this.incVal = src.incVal; this.duration = src.duration; this.incDuration = src.duration; this.fromAttr = src.fromAttr; this.intervalTime = src.intervalTime; } } } public class BuffDataAsset { public int id; public string desc; public string extendFuns; public int damageType; //伤害类型 public int targetType; //目标类型 public int hitType; //命中类型 public int effectiveness; //生效率 public bool ignoreMultiHurt; //是否忽略多段伤害 public bool removeFunWhenStop; //buff移除时是否关闭对应的fun public List funList; public ActionEventDataEditor actionEventData; public ActionEventDataEditor femaleActionEventData; public bool canPerfectDodge = false; public bool canDodge = false; public bool canResist = false; public bool canCrit = false; #region 工具中使用的东西 public bool extendBaseFold = true; public bool extendFunFold = true; public bool extendFrameEventFold = true; public bool extendFemaleFrameEventFold = false; public bool extendModelPrefab = true; public Vector2 scrollPos = Vector2.zero; public RuntimeAnimatorController modelAnimator = null; public UnityEditor.Animations.AnimatorStateMachine stateMachine = null; public string[] animClipNames = null; public int animClipIdx = -1; #endregion public static BuffDataAsset CreateBuffAsset(ExcelWorksheet sheet,int row) { BuffDataAsset buffAsset = new BuffDataAsset(); int col = 1; buffAsset.id = sheet.GetValue(row, col++); buffAsset.desc = sheet.GetValue(row, col++); string funStr = sheet.GetValue(row, col++); if(!string.IsNullOrEmpty(funStr)) { string[] funStrList = funStr.Split(';'); buffAsset.funList = new List(funStrList.Length); for (int idx = 0; idx < funStrList.Length; idx++) { string[] funTemp = funStrList[idx].Split(':'); if (funTemp.Length < 2) continue; int funId = 0; float funVal = 0; float funIncVal = 0; float funDuration = 0; float funIncDuration = 0; int fromAttr = 0; float intervalTime = 0; if (funTemp.Length > 1) { float[] funValList = StringUtil.split2Float(funTemp[1], '_'); if (funValList.Length > 0) funVal = funValList[0]; if (funValList.Length > 1) funIncVal = funValList[1]; } if (funTemp.Length > 2) { float[] funDurList = StringUtil.split2Float(funTemp[2], '_'); if (funDurList.Length > 0) funDuration = funDurList[0]; if (funDurList.Length > 1) funIncDuration = funDurList[1]; } if (funTemp.Length > 3) { int.TryParse(funTemp[3], out fromAttr); } if (funTemp.Length > 4) { float.TryParse(funTemp[4], out intervalTime); } if (int.TryParse(funTemp[0], out funId)) { FunctionValData fun = new FunctionValData(funId, funVal, funIncVal, funDuration, funIncDuration, fromAttr, intervalTime); buffAsset.funList.Add(fun); } } } buffAsset.extendFuns = sheet.GetValue(row, col++); buffAsset.damageType = sheet.GetValue(row, col++); buffAsset.targetType = sheet.GetValue(row, col++); buffAsset.hitType = sheet.GetValue(row, col++); buffAsset.effectiveness = sheet.GetValue(row, col++); buffAsset.ignoreMultiHurt = sheet.GetValue(row, col++) > 0 ? true : false; buffAsset.removeFunWhenStop = sheet.GetValue(row, col++) > 0 ? true : false; buffAsset.canPerfectDodge = (buffAsset.hitType & (int)BuffHitType.Perfect_Dodge) == (int)BuffHitType.Perfect_Dodge; buffAsset.canDodge = (buffAsset.hitType & (int)BuffHitType.Dodge) == (int)BuffHitType.Dodge; buffAsset.canResist = (buffAsset.hitType & (int)BuffHitType.Resist) == (int)BuffHitType.Resist; buffAsset.canCrit = (buffAsset.hitType & (int)BuffHitType.Critical) == (int)BuffHitType.Critical; return buffAsset; } public BuffDataAsset() { } public BuffDataAsset(int buffId) { this.id = buffId; } public void Copy(BuffDataAsset src) { if (src == null) return; this.id = src.id; this.desc = src.desc; this.extendFuns = src.extendFuns; this.damageType = src.damageType; this.targetType = src.targetType; this.hitType = src.hitType; this.effectiveness = src.effectiveness; this.ignoreMultiHurt = src.ignoreMultiHurt; this.removeFunWhenStop = src.removeFunWhenStop; this.canPerfectDodge = src.canPerfectDodge; this.canDodge = src.canDodge; this.canResist = src.canResist; this.canCrit = src.canCrit; this.actionEventData = src.actionEventData; this.femaleActionEventData = src.femaleActionEventData; if (this.funList == null) this.funList = new List(); this.funList.Clear(); if(src.funList != null && src.funList.Count > 0) { for(int idx = 0; idx < src.funList.Count;idx++) { this.funList.Add(new FunctionValData(src.funList[idx])); } } } public void Apply(BuffDataAsset src) { if (src == null) return; this.id = src.id; this.desc = src.desc; this.extendFuns = src.extendFuns; this.damageType = src.damageType; this.targetType = src.targetType; this.hitType = src.hitType; this.effectiveness = src.effectiveness; this.ignoreMultiHurt = src.ignoreMultiHurt; this.removeFunWhenStop = src.removeFunWhenStop; this.canPerfectDodge = src.canPerfectDodge; this.canDodge = src.canDodge; this.canResist = src.canResist; this.canCrit = src.canCrit; this.actionEventData = src.actionEventData; this.femaleActionEventData = src.femaleActionEventData; if (src.funList != null && src.funList.Count > 0) { for (int idx = 0; idx < src.funList.Count; idx++) { FunctionValData funVal = GetFunData(src.funList[idx].funId); if(funVal == null) { funVal = new FunctionValData(src.funList[idx]); this.funList.Add(funVal); } else { funVal.Apply(src.funList[idx]); } } } for(int idx = this.funList.Count-1; idx >= 0 ;idx--) { FunctionValData val = src.GetFunData(this.funList[idx].funId); if(val == null) { this.funList.RemoveAt(idx); } } } public FunctionValData GetFunData(int id) { if (funList == null) return null; for(int idx =0; idx < funList.Count;idx++) { if (funList[idx].funId == id) return funList[idx]; } return null; } public void SaveAssetToExcel(ref ExcelWorksheet sheet, int row) { if (sheet == null) return; string funStr = ""; if(funList != null) { for(int idx =0; idx < funList.Count;idx++) { FunctionValData val = funList[idx]; if(idx == 0) { funStr = val.ToString(); } else { funStr = funStr + ";" + val.ToString(); } } } int col = 1; this.hitType = 0; if (this.canPerfectDodge) this.hitType |= (int)BuffHitType.Perfect_Dodge; if (this.canDodge) this.hitType |= (int)BuffHitType.Dodge; if (this.canResist) this.hitType |= (int)BuffHitType.Resist; if (this.canCrit) this.hitType |= (int)BuffHitType.Critical; sheet.SetValue(row, col++, this.id); sheet.SetValue(row, col++, this.desc); sheet.SetValue(row, col++, funStr); sheet.SetValue(row, col++, this.extendFuns); sheet.SetValue(row, col++, (int)this.damageType); sheet.SetValue(row, col++, (int)this.targetType); sheet.SetValue(row, col++, this.hitType); sheet.SetValue(row, col++, this.effectiveness); sheet.SetValue(row, col++, this.ignoreMultiHurt ? 1 : 0); sheet.SetValue(row, col++, this.removeFunWhenStop ? 1 : 0); } public SecurityElement SaveFrameEventToXml() { if (actionEventData == null) return null; SecurityElement buffNode = new SecurityElement("buff"); buffNode.AddAttribute("id", this.actionEventData.Id.ToString()); buffNode.AddAttribute("name", this.actionEventData.Name); buffNode.AddAttribute("endFrame", this.actionEventData.TotalFrame.ToString()); buffNode.AddAttribute("gender", this.actionEventData.Gender.ToString()); if(this.actionEventData.ActionEventList!=null) { for(int idx =0; idx < this.actionEventData.ActionEventList.Count;idx++) { ActionEventParamEditor eventData = this.actionEventData.ActionEventList[idx]; SecurityElement eventNode = eventData.SaveCfgToXml(); buffNode.AddChild(eventNode); } } return buffNode; } public SecurityElement SaveFemaleFrameEventToXml() { if (femaleActionEventData == null) return null; SecurityElement buffNode = new SecurityElement("buff"); buffNode.AddAttribute("id", this.femaleActionEventData.Id.ToString()); buffNode.AddAttribute("name", this.femaleActionEventData.Name); buffNode.AddAttribute("endFrame", this.femaleActionEventData.TotalFrame.ToString()); buffNode.AddAttribute("gender", this.femaleActionEventData.Gender.ToString()); if (this.femaleActionEventData.ActionEventList != null) { for (int idx = 0; idx < this.femaleActionEventData.ActionEventList.Count; idx++) { ActionEventParamEditor eventData = this.femaleActionEventData.ActionEventList[idx]; SecurityElement eventNode = eventData.SaveCfgToXml(); buffNode.AddChild(eventNode); } } return buffNode; } } public class SkillAsset { public int uniqueId; public int skillId; public int skillLv; public string skillName; public string skillDesc; public string skillIcon; public int skillType; public int cost; public int jobType; public int jobBranch; public int jobStage; public float fixedSingTime; public float changeSingTime; public float preCastingTime; public float castingTime; public float afterCastingTime; public float cd; public bool hide; public string levelUpDesc; public float[] PerceptionRange = new float[6]; public List buffIdList; public List buffList; public bool bAddNewBuff = false; public bool extendPerceptionFold = false; public bool extendBuffFold = true; public int iconIdx = -1; public SkillAsset() { this.skillId = 0; } public void AddNewBuff(BuffDataAsset buffData) { if (buffList == null) buffList = new List(); buffList.Add(buffData); } public void RemoveBuff(BuffDataAsset buffData) { if (buffList == null || buffData == null) return; for(int idx =0; idx < buffList.Count;idx++) { if(buffList[idx].id == buffData.id) { buffList.RemoveAt(idx); return; } } } public BuffDataAsset GetBuffData(int buffId) { if (buffList == null) return null; for(int idx =0; idx < buffList.Count;idx++) { if (buffList[idx].id == buffId) return buffList[idx]; } return null; } public void AddFunEventToBuff(int buffId, FunctionDataAsset funAsset) { BuffDataAsset buffData = GetBuffData(buffId); if (buffData == null) return; if (buffData.funList == null) buffData.funList = new List(); FunctionValData newFunVal = new FunctionValData(funAsset.id, 0, 0, 0, 0, 0, 0); buffData.funList.Add(newFunVal); } public void Copy(SkillAsset src) { if (src == null) return; this.uniqueId = src.uniqueId; this.skillId = src.skillId; this.skillLv = src.skillLv; this.skillName = src.skillName; this.skillDesc = src.skillDesc; this.skillIcon = src.skillIcon; this.skillType = src.skillType; this.cost = src.cost; this.jobType = src.jobType; this.jobBranch = src.jobBranch; this.jobStage = src.jobStage; this.fixedSingTime = src.fixedSingTime; this.changeSingTime = src.changeSingTime; this.preCastingTime = src.preCastingTime; this.castingTime = src.castingTime; this.afterCastingTime = src.afterCastingTime; this.cd = src.cd; this.hide = src.hide; this.levelUpDesc = src.levelUpDesc; for (int idx = 0; idx < src.PerceptionRange.Length; idx++) this.PerceptionRange[idx] = src.PerceptionRange[idx]; if (buffList == null) buffList = new List(); buffList.Clear(); if (src.buffList != null && src.buffList.Count > 0) { for(int idx =0; idx < src.buffList.Count;idx++) { BuffDataAsset srcBuffdata = src.buffList[idx]; BuffDataAsset buff = new BuffDataAsset(); buff.Copy(srcBuffdata); buffList.Add(buff); } } this.iconIdx = src.iconIdx; } public void Apply(SkillAsset src) { this.skillId = src.skillId; this.skillLv = src.skillLv; this.skillName = src.skillName; this.skillDesc = src.skillDesc; this.skillIcon = src.skillIcon; this.skillType = src.skillType; this.cost = src.cost; this.jobType = src.jobType; this.jobBranch = src.jobBranch; this.jobStage = src.jobStage; this.fixedSingTime = src.fixedSingTime; this.changeSingTime = src.changeSingTime; this.preCastingTime = src.preCastingTime; this.castingTime = src.castingTime; this.afterCastingTime = src.afterCastingTime; this.cd = src.cd; this.hide = src.hide; this.levelUpDesc = src.levelUpDesc; for (int idx = 0; idx < src.PerceptionRange.Length; idx++) this.PerceptionRange[idx] = src.PerceptionRange[idx]; if (src.buffList != null && src.buffList.Count > 0) { for (int idx = 0; idx < src.buffList.Count; idx++) { BuffDataAsset srcBuff = src.buffList[idx]; BuffDataAsset buff = GetBuffData(srcBuff.id); if(buff == null) { buff = new BuffDataAsset(); buff.Copy(srcBuff); buffList.Add(buff); } else { buff.Apply(srcBuff); } } } for(int idx = buffList.Count -1; idx>=0; idx--) { BuffDataAsset buff = src.GetBuffData(buffList[idx].id); if(buff == null) { this.buffList.RemoveAt(idx); } } this.iconIdx = src.iconIdx; } public static SkillAsset CreateSkillAsset(ExcelWorksheet sheet,int rowIndex) { int colIndex = 1; SkillAsset skill = new SkillAsset(); skill.uniqueId = sheet.GetValue(rowIndex, colIndex++); skill.skillId = sheet.GetValue(rowIndex, colIndex++); skill.skillName = sheet.GetValue(rowIndex, colIndex++); skill.skillDesc = sheet.GetValue(rowIndex, colIndex++); skill.skillIcon = sheet.GetValue(rowIndex, colIndex++); skill.skillLv = sheet.GetValue(rowIndex, colIndex++); skill.skillType = sheet.GetValue(rowIndex, colIndex++); skill.cost = sheet.GetValue(rowIndex, colIndex++); skill.jobType = sheet.GetValue(rowIndex, colIndex++); skill.jobBranch = sheet.GetValue(rowIndex, colIndex++); skill.jobStage = sheet.GetValue(rowIndex, colIndex++); skill.fixedSingTime = sheet.GetValue(rowIndex, colIndex++); skill.changeSingTime = sheet.GetValue(rowIndex, colIndex++); skill.preCastingTime = sheet.GetValue(rowIndex, colIndex++); skill.castingTime = sheet.GetValue(rowIndex, colIndex++); skill.afterCastingTime = sheet.GetValue(rowIndex, colIndex++); skill.cd = sheet.GetValue(rowIndex, colIndex++); string buffStr = sheet.GetValue(rowIndex, colIndex++); if (!string.IsNullOrEmpty(buffStr)) { skill.buffIdList = StringUtil.convert2IntList(buffStr, ';'); } for (int idx = 0; idx <= 5; idx++) { skill.PerceptionRange[idx] = sheet.GetValue(rowIndex, colIndex++); } skill.hide = sheet.GetValue(rowIndex, colIndex++) > 1 ? true : false; skill.levelUpDesc = sheet.GetValue(rowIndex, colIndex++); return skill; } public void SaveAssetToExcel(ref ExcelWorksheet sheet, int row) { int col = 1; Debug.Log("skillId:" + this.skillId + " LV:" + this.skillLv); this.uniqueId = this.skillId * 100 + this.skillLv; sheet.SetValue(row, col++,this.uniqueId); sheet.SetValue(row, col++, this.skillId); sheet.SetValue(row, col++, this.skillName); sheet.SetValue(row, col++, this.skillDesc); sheet.SetValue(row, col++, this.skillIcon); sheet.SetValue(row, col++, this.skillLv); sheet.SetValue(row, col++, this.skillType); sheet.SetValue(row, col++, this.cost); sheet.SetValue(row, col++, this.jobType); sheet.SetValue(row, col++, this.jobBranch); sheet.SetValue(row, col++, this.jobStage); sheet.SetValue(row, col++, string.Format("{0:F}",this.fixedSingTime)); sheet.SetValue(row, col++, string.Format("{0:F}", this.changeSingTime)); sheet.SetValue(row, col++, string.Format("{0:F}", this.preCastingTime)); sheet.SetValue(row, col++, string.Format("{0:F}", this.castingTime)); sheet.SetValue(row, col++, string.Format("{0:F}", this.afterCastingTime)); sheet.SetValue(row, col++, this.cd); string buffStr = ""; if(buffList!=null) { for(int idx =0; idx < buffList.Count;idx++) { if (idx == 0) buffStr = buffList[idx].id.ToString(); else buffStr = buffStr+";"+ buffList[idx].id.ToString(); } } sheet.SetValue(row, col++, buffStr); for(int idx =0; idx <= 5;idx++) { sheet.SetValue(row, col++, PerceptionRange[idx]); } sheet.SetValue(row, col++, this.hide ? 1: 0); sheet.SetValue(row, col++, this.levelUpDesc); } }