Пример #1
0
 private RawSkillCache()
 {
     try
     {
         this.InitFlag = false;
         s_dicTypes.Clear();
         s_dicSkills.Clear();
         s_lstHideSkills.Clear();
         var    xd = XDocument.Load(AppDomain.CurrentDomain.BaseDirectory + CFGFileName);
         string typeKey, typeName, fileName;
         typeKey = typeName = fileName = string.Empty;
         foreach (var xe in xd.Root.Element("Types").Elements("Type"))
         {
             typeKey             = xe.Attribute("name").Value;
             typeName            = xe.Attribute("typeName").Value;
             fileName            = xe.Attribute("fileName").Value;
             s_dicTypes[typeKey] = Assembly.Load(fileName).GetType(typeName, false, true);
         }
         IRawSkill skill = null;
         foreach (var xes in xd.Root.Elements("Skills"))
         {
             foreach (var xe in xes.Elements("Skill"))
             {
                 skill = BuildObj <IRawSkill>(xe);
                 if (null != skill)
                 {
                     s_dicSkills[skill.SkillCode] = skill;
                 }
             }
         }
         string hideFile = AppDomain.CurrentDomain.BaseDirectory + CFGHideFileName;
         if (File.Exists(hideFile))
         {
             xd = XDocument.Load(hideFile);
             foreach (var xes in xd.Root.Elements("Skills"))
             {
                 foreach (var xe in xes.Elements("Skill"))
                 {
                     skill = BuildObj <IRawSkill>(xe);
                     if (null != skill)
                     {
                         s_lstHideSkills.Add(skill);
                     }
                 }
             }
         }
         string cfg = ConfigurationManager.AppSettings["TRACEPlayerSkillFlag"] ?? string.Empty;
         bool   val;
         if (bool.TryParse(cfg, out val))
         {
             TRACEPlayerSkillFlag = val;
         }
         this.InitFlag = true;
     }
     catch (Exception ex)
     {
         LogUtil.Error("RawSkillCache:Init", ex);
         this.InitFlag = false;
     }
 }
Пример #2
0
        public void Load(IRawSkill rawSkill)
        {
            this._rawSkill = rawSkill;
            this._skillId  = this._owner.InnerId * 100000 + rawSkill.RawSkillId;
            IEffector effector = null;

            this._skillFlag = EnumSkillFlag.None;
            if (null != rawSkill.MainEffector)
            {
                effector          = rawSkill.MainEffector.Clone(this);
                this.MainEffector = effector;
                this._skillFlag  |= rawSkill.MainEffector.SkillFlag;
                if (effector.RedoFlag || effector.UndoFlag)
                {
                    this.RedoEffectors.Add(effector);
                }
            }
            if (null != rawSkill.SubEffectors && rawSkill.SubEffectors.Count > 0)
            {
                foreach (var item in rawSkill.SubEffectors)
                {
                    effector = item.Clone(this);
                    this.SubEffectors.Add(effector);
                    this._skillFlag |= item.SkillFlag;
                    if (effector.RedoFlag || effector.UndoFlag)
                    {
                        this.RedoEffectors.Add(effector);
                    }
                }
            }
            if (this.Owner is ISkillManager)
            {
                if (rawSkill.CastFlag)
                {
                    this._casters = ((ISkillManager)this.Owner).SkillPlayerList;
                }
                else
                {
                    this._casters = null;
                }
            }
            else if (this.Owner is ISkillPlayer)
            {
                this._casters = new List <ISkillPlayer>();
                this._casters.Add((ISkillPlayer)this.Owner);
            }
            this.CheckRedoFlag();
        }
Пример #3
0
        public void LoadSkill(ISkillOwner owner, List <string> skills)
        {
            if (null == skills || skills.Count == 0)
            {
                return;
            }
            if (RawSkillCache.Instance().TRACEPlayerSkillFlag&& owner is ISkillPlayer)
            {
                LogUtil.Info("Loading...Player[{0}] Skills[{1}] ", ((ISkillPlayer)owner).SkillPlayerId, string.Join(",", skills));
            }
            if (owner is ISkillManager)
            {
                LogUtil.Info("Loading...Manager[{0}] Skills[{1}] ", ((ISkillManager)owner).InnerId, string.Join(",", skills));
            }
            var dic = this._context.DicBuffer(1);

            dic.Clear();
            for (int i = 0; i < this._skillList.Count; i++)
            {
                dic[_skillList[i].RawSkill.RawSkillId] = i;
            }
            string    skillCode = string.Empty;
            string    args      = string.Empty;
            int       argsIdx   = 0;
            IRawSkill rawSkill  = null;
            ISkill    skill     = null;
            int       idx       = 0;

            foreach (var str in skills)
            {
                skillCode = str;
                argsIdx   = str.IndexOf('.');
                if (argsIdx >= 0)
                {
                    args      = str.Substring(argsIdx + 1);
                    skillCode = str.Substring(0, argsIdx);
                }
                if (!RawSkillCache.Instance().TryGetRawSkill(skillCode, out rawSkill))
                {
                    LogUtil.Info("No RawSkill for SkillCode:" + skillCode);
                    continue;
                }
                if (dic.TryGetValue(rawSkill.RawSkillId, out idx))
                {
                    dic[rawSkill.RawSkillId]    = -1;
                    _skillList[idx].InvalidFlag = false;
                    _skillList[idx].FitCasters();
                    continue;
                }
                skill = new Skill(this._context, owner, args);
                skill.Load(rawSkill);
                this._skillList.Add(skill);
                switch (rawSkill.TimeType)
                {
                case EnumSkillTimeType.Session:
                    _skillDic[EnumSkillTimeType.Session].Add(skill);
                    break;

                case EnumSkillTimeType.Section:
                    _skillDic[EnumSkillTimeType.Session].Add(skill);
                    _skillDic[EnumSkillTimeType.Section].Add(skill);
                    break;

                case EnumSkillTimeType.Minute:
                    _skillDic[EnumSkillTimeType.Section].Add(skill);
                    _skillDic[EnumSkillTimeType.Minute].Add(skill);
                    break;

                case EnumSkillTimeType.Round:
                    _skillDic[EnumSkillTimeType.Minute].Add(skill);
                    _skillDic[EnumSkillTimeType.Round].Add(skill);
                    break;

                case EnumSkillTimeType.PreDecide:
                    _skillDic[EnumSkillTimeType.PreDecide].Add(skill);
                    break;
                }
                this.AddOpenClip(skill);
            }
            foreach (var kvp in dic)
            {
                if (kvp.Value < 0)
                {
                    continue;
                }
                this._skillList[kvp.Value].Revoke();
            }
        }
Пример #4
0
 public bool TryGetRawSkill(string skillCode, out IRawSkill rawSkill)
 {
     return(s_dicSkills.TryGetValue(skillCode, out rawSkill));
 }