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); }
// 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))); }
public static void Unmount(SkPackage buffPak, SkBuffInst inst, bool force = true) { bool ret = inst.OnDiscard(buffPak._parentAttribs); if (ret || force) { buffPak._buffs.Remove(inst); } }
static void DoEff2(SkEntity entity, SkRuntimeInfo info) { // Add code SkBuffInst buff = info as SkBuffInst; if (null != buff) { entity.OnBuffRemove(buff._buff._id); } }
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); }
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; } } }
// 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); } }
public static void UnmountBuff(SkEntity target, SkBuffInst inst) { SkBuffInst.Unmount(target._attribs.pack as SkPackage, inst); }
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); }