Exemplo n.º 1
0
    sdBuff FindBuffByCastActor(int id, sdActorInterface castActor)
    {
        sdBuff buff = null;

        for (int i = 0; i < buffs.Count; i++)
        {
            buff = buffs[i];
            if (buff.GetTemplateID() == id)
            {
                if (castActor == buff.m_CasterActor || castActor == null)
                {
                    return(buff);
                }
            }
        }
        for (int i = 0; i < HideBuffs.Count; i++)
        {
            buff = HideBuffs[i];
            if (buff.GetTemplateID() == id)
            {
                if (castActor == buff.m_CasterActor || castActor == null)
                {
                    return(buff);
                }
            }
        }
        return(null);
    }
Exemplo n.º 2
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.º 3
0
    public bool RemoveBuff(int id)
    {
        bool bRet = false;

        for (int i = 0; i < HideBuffs.Count; i++)
        {
            sdBuff buff = HideBuffs[i];
            if (buff.GetTemplateID() == id)
            {
                buff.Stop(HeaderProto.EBuffEndType.BUFF_END_HAND);
                HideBuffs.RemoveAt(i);
                bRet = true;
            }
        }
        bool buffchanged = false;

        for (int i = 0; i < buffs.Count; i++)
        {
            sdBuff buff = buffs[i];
            if (buff.GetTemplateID() == id)
            {
                buff.Stop(HeaderProto.EBuffEndType.BUFF_END_HAND);
                buffs.RemoveAt(i);
                buffchanged = true;
                bRet        = true;
            }
        }
        if (buffchanged)
        {
            BuffChange(buffs);
        }
        return(bRet);
    }
Exemplo n.º 4
0
    // Update is called once per frame
    void Update()
    {
        if (actor != null)
        {
            foreach (DictionaryEntry e in actor.Property)
            {
                sdConfDataMgr.SetMemberValue(this, e.Key as string, e.Value);
            }
        }

        {
            List <sdBuff> lstBuff = actor.GetBuffs();
            if (lstBuff.Count > 0)
            {
                Hashtable table = (Hashtable)sdConfDataMgr.Instance().GetTable("buff");
                if (buff == null)
                {
                    buff = new string[lstBuff.Count];
                }
                if (buff.Length != lstBuff.Count)
                {
                    buff = new string[lstBuff.Count];
                }
                for (int i = 0; i < lstBuff.Count; i++)
                {
                    sdBuff    sbuff = lstBuff[i];
                    int       id    = sbuff.GetTemplateID();
                    Hashtable prop  = table[id.ToString()] as Hashtable;

                    buff[i] = id.ToString() + "_" +
                              prop["szName[ROLE_NAME_LEN]"] as string + "_" +
                              prop["szDescription[DESCRIPTION_LEN]"] as string;
                }
            }
            else
            {
                buff = null;
            }
        }

        STAY        = actor.CheckDebuffState(HeaderProto.ECreatureActionState.CREATURE_ACTION_STATE_STAY);
        HOLD        = actor.CheckDebuffState(HeaderProto.ECreatureActionState.CREATURE_ACTION_STATE_HOLD);
        STUN        = actor.CheckDebuffState(HeaderProto.ECreatureActionState.CREATURE_ACTION_STATE_STUN);
        LIMIT_SKILL = actor.CheckDebuffState(HeaderProto.ECreatureActionState.CREATURE_ACTION_STATE_LIMIT_SKILL);
        UNBEAT      = actor.CheckDebuffState(HeaderProto.ECreatureActionState.CREATURE_ACTION_STATE_UNBEAT);
        KNOCKBACK   = actor.CheckDebuffState(HeaderProto.ECreatureActionState.CREATURE_ACTION_STATE_KNOCKBACK);
    }
Exemplo n.º 5
0
    public void SetBuffId(sdBuff buff)
    {
        if (buff == null)
        {
            gameObject.GetComponent <UISprite>().spriteName = "";
            if (icon != null)
            {
                icon.GetComponent <UISprite>().spriteName = "";
            }

            lastTime = -1;
            if (mask != null)
            {
                mask.GetComponent <UISprite>().fillAmount = 0;
            }

            return;
        }

        gameObject.GetComponent <UISprite>().spriteName = "FightingSystem_Img_Buff";
        buffid = buff.GetTemplateID();
        Hashtable buffTable = sdConfDataMgr.Instance().GetTable("buff");
        Hashtable item      = buffTable[buffid.ToString()] as Hashtable;

        if (item != null)
        {
            if (icon != null)
            {
                icon.GetComponent <UISprite>().spriteName = item["icon"].ToString();
                if (sdConfDataMgr.Instance().BuffAtlas != null)
                {
                    icon.GetComponent <UISprite>().atlas = sdConfDataMgr.Instance().BuffAtlas;
                }
                else if (!isLoadAtlas)
                {
                    LoadBuffIcon();
                    isLoadAtlas = true;
                }
            }
            lastTime = float.Parse(item["nTotalTime"].ToString()) / 1000 - buff.GetLifeTime();
            if (mask != null)
            {
                mask.GetComponent <UISprite>().fillAmount = lastTime / (float.Parse(item["nTotalTime"].ToString()) / 1000);
            }
        }
    }
Exemplo n.º 6
0
    public virtual bool RemoveAllBuff()
    {
        bool bRet = false;

        for (int index = 0; index < HideBuffs.Count;)
        {
            sdBuff buff = HideBuffs[index];
            buff.Stop(HeaderProto.EBuffEndType.BUFF_END_DEAD);
            HideBuffs.RemoveAt(index);
            bRet = true;
        }
        for (int index = 0; index < buffs.Count;)
        {
            sdBuff buff = buffs[index];
            buff.Stop(HeaderProto.EBuffEndType.BUFF_END_DEAD);
            buffs.RemoveAt(index);
            bRet = true;
        }
        return(bRet);
    }
Exemplo n.º 7
0
    sdBuff  FindBuff(int id)
    {
        sdBuff buff = null;

        for (int i = 0; i < buffs.Count; i++)
        {
            buff = buffs[i];
            if (buff.GetTemplateID() == id)
            {
                return(buff);
            }
        }
        for (int i = 0; i < HideBuffs.Count; i++)
        {
            buff = HideBuffs[i];
            if (buff.GetTemplateID() == id)
            {
                return(buff);
            }
        }
        return(null);
    }
Exemplo n.º 8
0
    sdBuff  FindBuffByClass(int classID)
    {
        sdBuff buff = null;

        for (int i = 0; i < buffs.Count; i++)
        {
            buff = buffs[i];
            if (buff.GetClassID() == classID)
            {
                return(buff);
            }
        }
        for (int i = 0; i < HideBuffs.Count; i++)
        {
            buff = HideBuffs[i];
            if (buff.GetClassID() == classID)
            {
                return(buff);
            }
        }
        return(null);
    }
Exemplo n.º 9
0
    sdBuff  FindBuffBySwapFlag(int dwSwapFlag)
    {
        sdBuff buff = null;

        for (int i = 0; i < buffs.Count; i++)
        {
            buff = buffs[i];
            if (buff.GetSwapFlag() == dwSwapFlag)
            {
                return(buff);
            }
        }
        for (int i = 0; i < HideBuffs.Count; i++)
        {
            buff = HideBuffs[i];
            if (buff.GetSwapFlag() == dwSwapFlag)
            {
                return(buff);
            }
        }

        return(null);
    }
Exemplo n.º 10
0
    public virtual bool RemoveBuffbyProperty(int property)
    {
        bool bRet = false;

        for (int index = 0; index < HideBuffs.Count;)
        {
            sdBuff buff = HideBuffs[index];
            if (buff.GetIntProperty() == property)
            {
                buff.Stop(HeaderProto.EBuffEndType.BUFF_END_DEAD);
                HideBuffs.RemoveAt(index);
                bRet = true;
                continue;
            }
            else
            {
                ++index;
            }
        }
        for (int index = 0; index < buffs.Count;)
        {
            sdBuff buff = buffs[index];
            if (buff.GetIntProperty() == property)
            {
                buff.Stop(HeaderProto.EBuffEndType.BUFF_END_DEAD);
                buffs.RemoveAt(index);
                bRet = true;
                continue;
            }
            else
            {
                ++index;
            }
        }
        return(bRet);
    }
Exemplo n.º 11
0
    public virtual bool RemoveBuffbySubType(int subclasstype)
    {
        bool bRet = false;

        for (int index = 0; index < HideBuffs.Count;)
        {
            sdBuff buff = HideBuffs[index];
            if (buff.GetSubClass() == subclasstype)
            {
                buff.Stop(HeaderProto.EBuffEndType.BUFF_END_DEAD);
                HideBuffs.RemoveAt(index);
                bRet = true;
                continue;
            }
            else
            {
                ++index;
            }
        }
        for (int index = 0; index < buffs.Count;)
        {
            sdBuff buff = buffs[index];
            if (buff.GetSubClass() == subclasstype)
            {
                buff.Stop(HeaderProto.EBuffEndType.BUFF_END_DEAD);
                buffs.RemoveAt(index);
                bRet = true;
                continue;
            }
            else
            {
                ++index;
            }
        }
        return(bRet);
    }
Exemplo n.º 12
0
    bool    CheckBuffReplace(int id, Hashtable buffinfo, sdActorInterface castActor)
    {
        int isShare = (int)buffinfo["IsShare"];

        if (isShare != 0)
        {
            sdBuff buff = FindBuffByCastActor(id, castActor);//FindBuff(id);
            if (buff == null)
            {
                return(true);
            }
            else
            {
                int isRefresh = (int)buffinfo["IsRefresh"];
                if (isRefresh != 0)
                {
                    buff.Refresh();
                    return(false);
                }
                else
                {
                    buff.Stop(HeaderProto.EBuffEndType.BUFF_END_HAND);
                    return(true);
                }
            }
        }
        else
        {
            int    classID = (int)buffinfo["dwClassID"];
            sdBuff buff    = FindBuffByClass(classID);
            if (buff != null)
            {
                int newLevel = (int)buffinfo["byLevel"];
                int oldLevel = buff.GetLevel();
                if (newLevel > oldLevel)
                {
                    buff.Stop(HeaderProto.EBuffEndType.BUFF_END_HAND);
                    return(true);
                }
                else if (newLevel < oldLevel)
                {
                    return(false);
                }
                else
                {
                    int isRefresh = (int)buffinfo["IsRefresh"];
                    if (isRefresh != 0)
                    {
                        buff.Refresh();
                        return(false);
                    }
                    else
                    {
                        buff.Stop(HeaderProto.EBuffEndType.BUFF_END_HAND);
                        return(true);
                    }
                }
            }
            else
            {
                int dwSwapFlag = (int)buffinfo["dwSwapFlag"];
                buff = FindBuffBySwapFlag(dwSwapFlag);
                if (buff != null)
                {
                    if (buff.IsShare() != 0)
                    {
                        return(true);
                    }
                    else
                    {
                        int IsSwap = (int)buffinfo["IsSwap"];
                        if (IsSwap != 0)
                        {
                            int newLevel = (int)buffinfo["byLevel"];
                            int oldLevel = buff.GetLevel();
                            if (newLevel > oldLevel)
                            {
                                buff.Stop(HeaderProto.EBuffEndType.BUFF_END_HAND);
                                return(true);
                            }
                            else
                            {
                                return(false);
                            }
                        }
                        else
                        {
                            return(false);
                        }
                    }
                }
                else
                {
                    return(true);
                }
            }
        }
        return(false);
    }
Exemplo n.º 13
0
 //用于做触发效果.
 public void    OnBuffBorn(sdBuff buff)
 {
 }
Exemplo n.º 14
0
    public bool    CheckBuff(int type, int data)
    {
        //sdBuff[] allbuff	=	null;//m_BuffSys.
        if (type == (int)HeaderProto.ECheckBuffType.CHECK_BUFF_NONE)
        {
            return(true);
        }
        switch (type)
        {
        case (int)HeaderProto.ECheckBuffType.CHECK_BUFF_CLASS: {
            for (int i = 0; i < buffs.Count; i++)
            {
                sdBuff buff = buffs[i];
                if ((int)buff.GetProperty()["byClass"] == data)
                {
                    return(true);
                }
            }
        } break;

        case (int)HeaderProto.ECheckBuffType.CHECK_BUFF_SUB_CLASS: {
            for (int i = 0; i < buffs.Count; i++)
            {
                sdBuff buff      = buffs[i];
                int    iClass    = data / 10000;
                int    iSubClass = data % 10000;
                if ((int)buff.GetProperty()["bySubClass"] == iSubClass &&
                    (int)buff.GetProperty()["byClass"] == iClass
                    )
                {
                    return(true);
                }
            }
        } break;

        case (int)HeaderProto.ECheckBuffType.CHECK_BUFF_CLASS_ID: {
            for (int i = 0; i < buffs.Count; i++)
            {
                sdBuff buff = buffs[i];
                if ((int)buff.GetProperty()["dwClassID"] == data)
                {
                    return(true);
                }
            }
        } break;

        case (int)HeaderProto.ECheckBuffType.CHECK_BUFF_TEMPLATE_ID: {
            for (int i = 0; i < buffs.Count; i++)
            {
                sdBuff buff = buffs[i];
                if (buff.GetTemplateID() == data)
                {
                    return(true);
                }
            }
        } break;

        case (int)HeaderProto.ECheckBuffType.CHECK_BUFF_DAMAGE_PRO: {
            for (int i = 0; i < buffs.Count; i++)
            {
                sdBuff buff = buffs[i];
                if ((int)buff.GetProperty()["byProperty"] == data)
                {
                    return(true);
                }
            }
        } break;
        }
        return(false);
    }
Exemplo n.º 15
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);
    }