Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
    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);
    }