Exemple #1
0
    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);
            }
        }
    }
Exemple #2
0
        /// <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);
        }