private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromPath) { if (CheckResModified(importedAssets) || CheckResModified(deletedAssets) || CheckResModified(movedAssets)) { string path = System.IO.Path.Combine(RESOURCE_BUFF_CONFIG_FOLDER, "BUFF.xml"); TextReader tr = new StreamReader(path); string text = tr.ReadToEnd(); if (text == null) { Debug.LogError("Player level config file not exist"); return; } else { XmlSpreadSheetReader.ReadSheet(text); XmlSpreadSheet sheet = XmlSpreadSheetReader.Output; string[] keys = XmlSpreadSheetReader.Keys; object[] levelIds = sheet[keys[0]]; List <BuffConfigData> tempList = new List <BuffConfigData>(); for (int i = 0; i < levelIds.Length; i++) { if (0 == i || 1 == i) { continue; } BuffConfigData data = new BuffConfigData(); data._buffID = Convert.ToInt32(sheet["buffid"][i]); data._iconID = Convert.ToString(sheet["IconID"][i]); //data._buffLv = Convert.ToInt32(sheet["bufflevel"][i]); //data._durativeTime = Convert.ToSingle(sheet["DurativeNum"]); data._buffName = Convert.ToString(sheet["buffname"][i]); data._buffEffMount = Convert.ToString(sheet["BuffEffMount"][i]); string prefabpath = Convert.ToString(sheet["BuffEffect"][i]); string pathRes = System.IO.Path.Combine(ASSET_BUFF_RES_CONFIG_FOLDER, prefabpath + ".prefab"); data._buffEffect = (GameObject)AssetDatabase.LoadAssetAtPath(pathRes, typeof(GameObject)); data._buffSound = Convert.ToString(sheet["BuffSound"][i]); tempList.Add(data); } CreateConfigDataBase(tempList); } } }
/// <summary> /// 创建buff,更加通用的处理逻辑 /// 也许并不创建Buff /// </summary> /// <returns>The buff.</returns> /// <param name="param">Parameter.</param> public RtBufData createBuff(BuffCtorParamEx param) { #if DEBUG Utils.Assert(param.cfg == null, "param.cfg == null"); #endif int casterID = param.fromNpcId; int tarID = param.toNpcId; int buffID = param.cfg.Param1; float customDur = param.cfg.Param2 * Consts.OneThousand; DotHotDurType durType = (DotHotDurType)Enum.ToObject(typeof(DotHotDurType), param.cfg.Param3); int Layers = param.cfg.Param4; SkBufferModel bfModel = Core.Data.getIModelConfig <SkBufferModel>(); BuffConfigData BuffCfg = bfModel.get(buffID); List <RtBufData> TarBuff = new List <RtBufData>(); foreach (RtBufData buf in OnWork.Values) { if (buf != null && buf.HangUpNpcID == tarID) { TarBuff.Add(buf); } } /// /// 1. 判定要创建的buff是否有Group ID 作为主键 的冲突, /// 但是释放者的ID必须不相同 /// //buff的分组 List <RtBufData> Conflict = new List <RtBufData>(); int groupId = BuffCfg.BuffGroup; foreach (RtBufData buf in TarBuff) { if (buf != null) { if (buf.CastorNpcID != casterID && buf.BuffCfg.BuffGroup == groupId) { Conflict.Add(buf); } } } //删除冲突 if (Conflict.Count > 0) { int cnt = Conflict.Count; for (int i = 0; i < cnt; ++i) { RtBufData d = Conflict[i]; rmBuff(d.ID, d.HangUpNpcID); } } /// /// 2. 判定Buff ID和CasterID 作为主键来决定是否有冲突 /// Conflict.Clear(); foreach (RtBufData buf in TarBuff) { if (buf != null) { if (buf.CastorNpcID == casterID && buf.BuffCfg.ID == buffID) { Conflict.Add(buf); } } } int confcnt = Conflict.Count; bool hasConflict = confcnt > 0; RtBufData createOne = null; if (hasConflict) { //不删除冲突 for (int i = 0; i < confcnt; ++i) { RtBufData d = Conflict[i]; //冲突的buff时间处理, switch (durType) { //刷新Buff的时间 case DotHotDurType.Fixture: d.setCustomeDuration(d.BuffCfg.Duration); break; case DotHotDurType.Increase: d.setCustomeDurAddtion(customDur); break; case DotHotDurType.Leaveit: break; } //冲突的Buff的层数处理 d.setMoreLayer(Layers); } createOne = Conflict[0]; } else { //创建Buff BuffCtorParam ctor = new BuffCtorParam() { bufNum = buffID, fromNpcId = casterID, toNpcId = param.toNpcId, //buff的起源 origin = OriginOfBuff.BornWithSkill, //初始的层数(默认1) initLayer = 1, //等级(忽略) level = -1, //自定义duration(默认填-1F) duration = Consts.USE_BUFF_CONFIG_DURATION, }; createOne = createBuff(ctor); } return(createOne); }