public bool AddBuffLayer(int id, Hashtable buffinfo, sdActorInterface casterActor) { int iMaxLayerCount = (int)buffinfo["byAugment"]; if (iMaxLayerCount > 1) { int isShare = (int)buffinfo["IsShare"]; sdBuff layeredBuff = null; if (isShare != 0) { layeredBuff = FindBuffByCastActor(id, casterActor); } else { layeredBuff = FindBuff(id); } if (layeredBuff != null) { layeredBuff.AddLayer(); if (!layeredBuff.IsHide()) { BuffChange(buffs); } return(true); } } return(false); }
public virtual bool AddBuff(int templateId, int life, sdActorInterface casterActor) { if (GetCurrentHP() <= 0) { return(false); } Hashtable buffInfoTable = sdConfDataMgr.Instance().GetTable("buff"); Hashtable buffinfo = buffInfoTable[templateId.ToString()] as Hashtable; if (buffinfo == null) { return(false); } //闪避状态 抵挡任何减益 buff if ((int)buffinfo["IsDebuff"] == 1) { if (CheckDebuffState(HeaderProto.ECreatureActionState.CREATURE_ACTION_STATE_UNBEAT)) { return(false); } } //Buff 替换规则.. if (!CheckBuffReplace(templateId, buffinfo, casterActor)) { int iHide = (int)buffinfo["IsHide"]; if (iHide != 1) { BuffChange(buffs); } return(false); } //免疫.. if (CheckImmunity(buffinfo)) { return(false); } //无敌判断 .. //todo //尝试添加buff层数 如果成功则已经存在同样的buff 直接更新层数即可 ... if (AddBuffLayer(templateId, buffinfo, casterActor)) { return(true); } //添加一个新的buff.. sdBuff buff = new sdBuff(); buff.SetCaster(casterActor); buff.SetTemplateId(templateId); buff.SetActor(this); if (buff.IsHide()) { HideBuffs.Add(buff); } else { buffs.Add(buff); BuffChange(buffs); } buff.Start(); return(true); }