コード例 #1
0
        public static SkBuffInst Mount(SkPackage buffPak, SkBuffInst inst)
        {
            if (inst == null)
            {
                return(null);
            }

            int id       = inst._buff._id;
            int type     = inst._buff._type;
            int prior    = inst._buff._priority;
            int maxStack = inst._buff._stackLimit;

            List <SkBuffInst> stackBuffs = buffPak._buffs.FindAll((SkBuffInst it) => it._buff._id == id);

            if (stackBuffs.Count == 0)
            {
                if (buffPak._buffs.Exists((SkBuffInst it) => (it._buff._type == type && it._buff._priority > prior)))
                {
                    return(null);                       // Failed to add this buff because there are hi-prior buff(s)
                }
                // Unmount lo-prior buffs
                Unmount(buffPak, (SkBuffInst it) => (it._buff._type == type && it._buff._priority < prior));
            }
            else if (stackBuffs.Count >= maxStack)
            {
                // Unmount same id buffs to fit stack limit
                Unmount(buffPak, stackBuffs[0]);
            }

            buffPak._buffs.Add(inst);
            return(inst);
        }
コード例 #2
0
        // mount/unmount buff
        public static SkBuffInst MountBuff(SkEntity target, int buffId, List <int> idxList, List <float> valList)       // To save memory ,idxList should be increase step by step
        {
            int maxIdx = 0;
            int n      = idxList != null ? idxList.Count : 0;

            for (int i = 0; i < n; i++)
            {
                if (idxList[i] > maxIdx)
                {
                    maxIdx = idxList[i];
                }
            }
            SkAttribs buffAttribs = new SkAttribs(null, maxIdx + 1);

            for (int i = 0; i < n; i++)
            {
                int idx = idxList[i];
                buffAttribs.sums[idx] = buffAttribs.raws[idx] = valList[i];
            }

            //lz-2016.08.22 引导检测玩家进入buff
            Pathea.PeEntity entity = target.GetComponent <Pathea.PeEntity>();
            if (null != entity && entity.IsMainPlayer)
            {
                InGameAidData.CheckInBuff(buffId);
            }

            return(SkBuffInst.Mount(target._attribs.pack as SkPackage, SkBuffInst.Create(buffId, buffAttribs, target._attribs)));
        }
コード例 #3
0
        public static void Unmount(SkPackage buffPak, SkBuffInst inst, bool force = true)
        {
            bool ret = inst.OnDiscard(buffPak._parentAttribs);

            if (ret || force)
            {
                buffPak._buffs.Remove(inst);
            }
        }
コード例 #4
0
        static void DoEff2(SkEntity entity, SkRuntimeInfo info)
        {
            // Add code
            SkBuffInst buff = info as SkBuffInst;

            if (null != buff)
            {
                entity.OnBuffRemove(buff._buff._id);
            }
        }
コード例 #5
0
        public static SkBuffInst Create(int buffId, ISkAttribs paraCaster = null, ISkAttribs paraTarget = null)
        {
            SkBuff buff;

            if (SkBuff.s_SkBuffTbl.TryGetValue(buffId, out buff))
            {
                SkBuffInst inst = new SkBuffInst();
                inst._buff = buff;
                SkEntity caster = SkRuntimeInfo.Current != null ? SkRuntimeInfo.Current.Caster : null;
                inst._paraCaster = (paraCaster == null && caster != null) ? caster.attribs : paraCaster;
                inst._paraTarget = paraTarget;
                inst._startTime  = Time.time;
                return(inst);
            }
            return(null);
        }
コード例 #6
0
        protected override void PopOut(params int[] ids)
        {
            int n = ids.Length;

            for (int i = 0; i < n;)
            {
                if (IsBuff(ids[i]))
                {
                    SkBuffInst.Unmount(this, (SkBuffInst buffInst) => buffInst.MatchID(ids[i])); i++;
                }
                else
                {
                    Debug.LogError("[SkPackablAttribs]Unsupport id to minus:" + ids[i]);      i += 2;
                }
            }
        }
コード例 #7
0
        // Override
        protected override void PushIn(params int[] ids)
        {
            List <ItemToPack> lstItems = new List <ItemToPack>();
            int n = ids.Length;

            for (int i = 0; i < n;)
            {
                if (IsBuff(ids[i]))
                {
                    SkBuffInst.Mount(this, SkBuffInst.Create(ids[i], null, _parentAttribs)); i += 2;
                }                                                                                                                                         //Ignore cnt
                else
                {
                    lstItems.Add(new ItemToPack(ids[i], ids[i + 1])); i += 2;
                }
            }
            if (lstItems.Count > 0)
            {
                _parentAttribs.OnPutInPakAttribs(lstItems);
            }
        }
コード例 #8
0
 public static void UnmountBuff(SkEntity target, SkBuffInst inst)
 {
     SkBuffInst.Unmount(target._attribs.pack as SkPackage, inst);
 }
コード例 #9
0
 public static void UnmountBuff(SkEntity target, int buffId)
 {
     //SkPackage pack = target._attribs.pack as SkPackage;
     SkBuffInst.Unmount(target._attribs.pack as SkPackage, it => it._buff._id == buffId);
 }