Example #1
0
    /// <summary>
    /// 外部调用的话 只针对自己的Buff
    /// </summary>
    /// <param name="buffs">Buffs.</param>
    /// <param name="bulletID">Bullet I.</param>
    public void applyBuff_Src(List <BuffCtrl> buffs, int bulletID)
    {
        //添加buff,trigger是buff的施加者
        for (int i = 0; i < buffs.Count; i++)
        {
            BuffCtrl each = buffs [i];
            //如果是指定的施加者相同并且施加者的目标包含buff的使用者
            each.owner.characterCtrl.AddBuff(each);

            // 如果是伤害buff,需要根据ID号激活,为了细分伤害
            if (each.serverData.sample.getType() == BuffType.damage)
            {
                if (bulletID == 0 || bulletID == each.bulletID || each.trigger == each.owner)
                {
                    //激活相同ID的伤害buff,0全激活
                    each.activeDamageBuff(bulletID);
                }
                else
                {
                    continue;
                }
            }
            else
            {
                each.activeOtherBuff();                                     //激活buff
            }
            each.owner.characterCtrl.BeHit(serverData.sample.CanHitBack()); //引爆伤害
        }
    }
Example #2
0
    void  subDamage(SkillCtrl skillctrl)
    {
        foreach (BuffCtrl each in buffs)
        {
            if (each.serverData.sample.getType() == BuffType.damage && each.owner == target)
            {
                int subDamage = (int)(each.serverData.serverDamage * 0.2f);
                for (int i = 0; i < 4; i++)
                {
                    BuffCtrl ctrl = new BuffCtrl();
                    ctrl.owner         = each.owner;
                    ctrl.trigger       = each.trigger;
                    ctrl.DisplayEffect = each.DisplayEffect;

                    ctrl.option                  = each.option;
                    ctrl.parentSkill             = each.parentSkill;
                    ctrl.serverData              = new BuffData(each.serverData.sid, subDamage);
                    ctrl.serverData.damageEffect = "";
                    buffs.Add(ctrl);
                }
                each.serverData.serverDamage = subDamage;
                break;
            }
        }
    }
Example #3
0
 public void removeBuff(BuffCtrl _buff)
 {
     if (_buff != null)
     {
         BuffList.Remove(_buff);
     }
 }
Example #4
0
    public void     addDamage(BuffCtrl buff)
    {
        if (damageBuff == null)
        {
            damageBuff = new List <BuffCtrl> ();
        }


        damageBuff.Add(buff);
    }
Example #5
0
 /// <summary>
 /// 加召唤兽怒气
 /// </summary>
 public void applyMonsterBuffOnly(CharacterData trigger)
 {
     //trigger是buff的施加者
     for (int i = 0; i < trigger.characterCtrl.activeAction.Skill.buffs.Count; i++)
     {
         BuffCtrl each = trigger.characterCtrl.activeAction.Skill.buffs [i];
         //如果是指定的施加者相同并且施加者的目标包含buff的使用者
         if (each.serverData.sample.getType() == BuffType.power)
         {
             each.activeOtherBuff();
         }
     }
 }
Example #6
0
    BuffCtrl copyDamageBuff(BuffCtrl orgBuff)
    {
        BuffCtrl ctrl = new BuffCtrl();

        ctrl.owner         = orgBuff.owner;
        ctrl.trigger       = orgBuff.trigger;
        ctrl.DisplayEffect = orgBuff.DisplayEffect;

        ctrl.option                  = orgBuff.option;
        ctrl.parentSkill             = orgBuff.parentSkill;
        ctrl.serverData              = new BuffData(orgBuff.serverData.sid, orgBuff.serverData.serverDamage);
        ctrl.serverData.damageEffect = orgBuff.serverData.damageEffect;
        return(ctrl);
    }
Example #7
0
 /** 重新计算BodyBuff */
 void RecalculateBodyBuff(BuffCtrl _buff)
 {
     if (_buff.serverData.sample.getDisplayType() != BuffIconType.BodyEffect)
     {
         return;
     }
     //如果是其他类型,创建bodyEffect
     if (bodyBuff != null)
     {
         bodyBuff.removeEffect();
         bodyBuff = null;
     }
     bodyBuff = _buff;
     bodyBuff.CreateDurationBuffEffect();
 }
Example #8
0
 public void AddBuff(BuffCtrl _buff)
 {
     buffs.Add(_buff);
     if (_buff.serverData.sample.getType() == BuffType.damage)
     {
         return;
     }
     if (_buff.serverData.sample.getType() != BuffType.attr_change && _buff.serverData.sample.getType() != BuffType.jinghua)
     {
         RecalculateBodyBuff(_buff);
     }
     if (_buff.serverData.sample.getType() == BuffType.jinghua)
     {
         removeAllchangeBuff();
     }
     RecalculateBuffData();
 }
Example #9
0
 /// <summary>
 /// 移除buff
 /// </summary>
 /// <param name="_buff">_buff.</param>
 public void RemoveBuff(BuffCtrl _buff)
 {
     for (int i = 0; i < buffs.Count; i++)
     {
         if (buffs[i].serverData.sid == _buff.serverData.sid)
         {
             buffs.Remove(buffs[i]);
         }
     }
     buffs.Remove(_buff);
     if (_buff.serverData.sample.getType() == BuffType.damage)
     {
         return;
     }
     removeBuffByEffect(_buff);
     RecalculateBuffData();
 }
Example #10
0
 /// <summary>
 /// 移除buff后相应的效果处理
 /// </summary>
 /// <param name="_buff">_buff.</param>
 public void removeBuffByEffect(BuffCtrl _buff)
 {
     if (_buff.serverData.sample.getType() == BuffType.vertigo)
     {
         EffectManager.Instance.CreateEffect(hitPoint, "Effect/Single/RemoveVertigo");
     }
     if (_buff.serverData.sample.getType() == BuffType.frozen)
     {
         EffectManager.Instance.CreateEffect(hitPoint, "Effect/Single/RemoveFrozen");
     }
     if (_buff.serverData.sample.getType() == BuffType.silence)
     {
         EffectManager.Instance.CreateEffect(hitPoint, "Effect/Single/RemoveSilence");
     }
     if (_buff.serverData.sample.getDisplayType() == BuffIconType.BodyEffect)
     {
         // 移除之前的bodyEffect效果
         if (bodyBuff == _buff)
         {
             bodyBuff.removeEffect();
             bodyBuff = null;
             //这里重新遍历身上的BUFF,创建特效出来
             for (int i = 0; i < buffs.Count; i++)
             {
                 if (buffs[i].serverData.sample.getType() != BuffType.attr_change)
                 {
                     RecalculateBodyBuff(buffs[i]);
                 }
             }
         }
     }
     if (_buff.serverData.sample.getTransformID() != "0")
     {
         //变形卡还原
         cardCtrl.changePicture(null);
     }
 }
Example #11
0
 public void AddBuffCtrl(BuffCtrl _buff)
 {
     buffs.Add(_buff);
 }
Example #12
0
 public void replaceBuff(BuffCtrl _buff)
 {
 }
Example #13
0
 public void addBuff(BuffCtrl _buff)
 {
     BuffList.Add(_buff);
     //	MonoBase.print ("buff add,length:" + BuffList.Count);
 }
Example #14
0
    /// <summary>
/// 远程单体攻击的细分伤害
/// </summary>
    IEnumerator subRemoteAttack()
    {
        BuffCtrl damageBuff = null;
        int      damageAll  = 0;

        //找到对应的伤害buff,单体目标肯定只有1
        foreach (BuffCtrl each in activeAction.Skill.buffs)            // 先统计所有buff伤害
        {
            if (each.serverData.sample.getType() == BuffType.damage)
            {
                //算出单次伤害
                damageAll += each.serverData.serverDamage;
            }
        }
        List <BuffCtrl> tempTotalBuffs = new List <BuffCtrl>();

        //找到对应的伤害buff,单体目标肯定只有1
        foreach (BuffCtrl each in activeAction.Skill.buffs)           // 细分累计的伤害数据
        {
            if (each.serverData.sample.getType() == BuffType.damage)
            {
                int subDamage = (int)(damageAll / activeAction.Skill.serverData.sample.getAttackNum());
                each.serverData.serverDamage = subDamage;
                damageBuff = each;
            }
            else
            {
                tempTotalBuffs.Add(each);
            }
        }
        //移除本来的,后面会补完
        activeAction.Skill.RemoveBuffCtrl(damageBuff);
        //动画表现

        for (int i = 0; i < activeAction.Skill.serverData.sample.getAttackNum(); i++)
        {
            //一颗子弹一个buff
            BuffCtrl newbuff = copyDamageBuff(damageBuff);
            activeAction.Skill.AddBuffCtrl(newbuff);
            BulletCtrl      bullet  = null;
            List <BuffCtrl> tmplist = new List <BuffCtrl> ();
            tmplist.Add(newbuff);
            //表现连击
            UiManager.Instance.battleWindow.comboBar.init(i + 1, damageAll);
            playCharacterAnim(this, "cardThrowAnim");

            if (i == activeAction.Skill.serverData.sample.getAttackNum() - 1)
            {
                //最后一个伤害补足
                tempTotalBuffs.Add(newbuff);
                newbuff.serverData.serverDamage = damageAll - damageBuff.serverData.serverDamage * (activeAction.Skill.serverData.sample.getAttackNum() - 1);
                bullet           = EffectManager.Instance.CreateBulletEffect(characterData, activeAction.Skill.targets[0], tempTotalBuffs, activeAction.Skill.serverData.sample.getBulletEffect(), true);
                newbuff.bulletID = bullet.GetInstanceID();
                yield break;
            }
            else
            {
                bullet           = EffectManager.Instance.CreateBulletEffect(characterData, activeAction.Skill.targets [0], tmplist, activeAction.Skill.serverData.sample.getBulletEffect(), false);
                newbuff.bulletID = bullet.GetInstanceID();
                yield return(new WaitForSeconds(0.2f));
            }
        }
    }
Example #15
0
    IEnumerator subMeleeAttack()
    {
        BuffCtrl damageBuff = null;
        int      damageAll  = 0;

        //找到对应的伤害buff,单体目标肯定只有1
        foreach (BuffCtrl each in activeAction.Skill.buffs)  // 先统计所有buff伤害
        {
            if (activeAction.Skill.serverData.sample.getAttackNum() > 1)
            {
                if (each.serverData.sample.getType() == BuffType.damage && each.serverData.serverDamage <= 0)
                {
                    //算出单次伤害
                    damageAll += each.serverData.serverDamage;
                }
            }
            else
            {
                if (each.serverData.sample.getType() == BuffType.damage)
                {
                    //算出单次伤害
                    damageAll += each.serverData.serverDamage;
                }
            }
        }
        foreach (BuffCtrl each in activeAction.Skill.buffs)           // 细分累计的伤害数据
        {
            if (activeAction.Skill.serverData.sample.getAttackNum() > 1)
            {
                if (each.serverData.sample.getType() == BuffType.damage && each.serverData.serverDamage <= 0)
                {
                    int subDamage = (int)(damageAll / activeAction.Skill.serverData.sample.getAttackNum());
                    each.serverData.serverDamage = subDamage;
                    damageBuff = each;
                }
            }
            else
            {
                if (each.serverData.sample.getType() == BuffType.damage)
                {
                    int subDamage = (int)(damageAll / activeAction.Skill.serverData.sample.getAttackNum());
                    each.serverData.serverDamage = subDamage;
                    damageBuff = each;
                }
            }
        }

        //原来的一个再加上复制的几个
        damageBuff.bulletID = 1;
        for (int i = 1; i < activeAction.Skill.serverData.sample.getAttackNum(); i++)
        {
            BuffCtrl ctrl = copyDamageBuff(damageBuff);
            ctrl.bulletID = i + 1;            //设置子弹id,对应攻击ID爆对应伤害
            activeAction.Skill.AddBuffCtrl(ctrl);

            if (i == activeAction.Skill.serverData.sample.getAttackNum() - 1)
            {
                //最后一个伤害补足
                ctrl.serverData.serverDamage = damageAll - damageBuff.serverData.serverDamage * (activeAction.Skill.serverData.sample.getAttackNum() - 1);
            }
        }

        cardCtrl.attackScaleDown();
        //动画表现
        List <BuffCtrl> bufftemp = null;

        for (int i = 0; i < activeAction.Skill.serverData.sample.getAttackNum(); i++)
        {
            //中途人死了中断细分攻击
            if (activeAction.Skill.targets [0].characterCtrl.state == enum_character_state.deaded || activeAction.Skill.targets [0].characterCtrl.state == enum_character_state.deading)
            {
                break;
            }

            playCharacterAnim(this, "cardHitAnim");

            if (i == 0)
            {
                for (int j = 0; j < activeAction.Skill.buffs.Count; j++)
                {
                    if (activeAction.Skill.buffs[j].serverData.sample.getDisplayType() == BuffIconType.BodyEffect ||
                        (activeAction.Skill.buffs[j].trigger == activeAction.Skill.buffs[j].owner &&
                         activeAction.Skill.buffs[j].serverData.serverDamage > 0 &&
                         activeAction.Skill.buffs[j].serverData.sample.getType() == BuffType.damage))
                    {
                        if (bufftemp == null)
                        {
                            bufftemp = new List <BuffCtrl>();
                        }
                        bufftemp.Add(activeAction.Skill.buffs[j]);
                    }
                }
            }
            if (i == 1 && bufftemp != null)
            {
                for (int m = 0; m < bufftemp.Count; m++)
                {
                    activeAction.Skill.buffs.Remove(bufftemp[m]);
                }
            }
            activeAction.Skill.applyBuff(activeAction.Skill.buffs, i + 1);
            UiManager.Instance.battleWindow.comboBar.init(i + 1, damageAll);
            yield return(new WaitForSeconds(0.3f));
        }
        StartCoroutine(cardCtrl.goBack());          //AttackAnimComplete()
        //触发反击
        BattleManager.Instance.getActiveBattleInfo().FightBack(characterData, SkillActiveType.SkillHit);
        //触发急救
        BattleManager.Instance.getActiveBattleInfo().Medical(characterData);
    }
Example #16
0
 public void RemoveBuffCtrl(BuffCtrl _buff)
 {
     buffs.Remove(_buff);
 }
Example #17
0
 public CharacterAction(enum_character_Action _action, BuffCtrl _buff)
 {
     action = _action;
     buff   = _buff;
 }
Example #18
0
    /// <summary>
    /// 根据战斗技能数据穿件buff控制列表
    /// </summary>
    /// <param name="each">战斗技能数据</param>
    public int createBuffCtrlList(BattleSkillErlang each)
    {
        //buff
        if (each.skillMsg.operationType == BattleReportService.ATTR_CHANGE || each.skillMsg.operationType == BattleReportService.BUFFER_ADD ||
            each.skillMsg.operationType == BattleReportService.BUFFER_REPLACE || each.skillMsg.operationType == BattleReportService.BUFFER_REMOVE)
        {
            //如果没有上次技能,说明第一个是buff,不合格式,跳过
            BuffCtrl newBuff = new BuffCtrl();
            if (lastSkill == null)
            {
                Debug.Log("error format!!!!!");
                return(0);
            }
            //关于Hp的buff
            if (each.skillMsg.operationType == BattleReportService.ATTR_CHANGE && each.skillMsg.valueType == StringKit.toInt(BattleReportService.HP))
            {
                each.skillMsg.skillSID = BuffSampleManager.SID_HP;
            }
            //关于怒气的buff
            if (each.skillMsg.operationType == BattleReportService.ATTR_CHANGE && each.skillMsg.valueType == StringKit.toInt(BattleReportService.ANGER))
            {
                each.skillMsg.skillSID = BuffSampleManager.SID_ANGER;
            }

            //如果伤害类型是召唤兽怒气
            if (each.skillMsg.valueType == StringKit.toInt(BattleReportService.ANGER))
            {
                newBuff.init(BattleManager.Instance.getBattleCharacterData(each.skillMsg.targets [0]), lastSkill.user, BuffManager.Instance.CreateBuffData(each.skillMsg.skillSID, each.skillMsg.damage, lastSkill.serverData.sample.getDamageEffect()), false, each.skillMsg.skillID, lastSkill);
                lastSkill.AddBuffCtrl(newBuff);
            }
            else
            {
                CharacterData buffOwner;
                if (lastSkill.serverData.sample.getType() == SkillType.HelpOther)
                {
                    //如果是援护
                    buffOwner = BattleManager.Instance.getBattleCharacterData(each.skillMsg.targets [0]);
                    newBuff.init(buffOwner, lastSkill.trigger, BuffManager.Instance.CreateBuffData(each.skillMsg.skillSID, each.skillMsg.damage, lastSkill.serverData.sample.getDamageEffect()), false, each.skillMsg.skillID, lastSkill);
                    lastSkill.triggerSkill.AddBuffCtrl(newBuff);
                    newBuff.serverData.sample.changeDamageType(BuffDamageType.beIntervene);
                }
                else if (lastSkill.serverData.sample.getType() == SkillType.GroupAttack)
                {
                    buffOwner = BattleManager.Instance.getBattleCharacterData(each.skillMsg.targets [0]);
                    newBuff.init(buffOwner, lastSkill.user, BuffManager.Instance.CreateBuffData(each.skillMsg.skillSID, each.skillMsg.damage, lastSkill.serverData.sample.getDamageEffect()), false, each.skillMsg.skillID, lastSkill);
                    lastSkill.AddBuffCtrl(newBuff);
                }
                else if (lastSkill.serverData.sample.getType() == SkillType.ComboAttack)
                {
                    buffOwner = BattleManager.Instance.getBattleCharacterData(each.skillMsg.targets [0]);
                    newBuff.init(buffOwner, lastSkill.user, BuffManager.Instance.CreateBuffData(each.skillMsg.skillSID, each.skillMsg.damage, lastSkill.serverData.sample.getDamageEffect()), false, each.skillMsg.skillID, lastSkill);
                    lastSkill.AddBuffCtrl(newBuff);
                }
                else
                {
                    //普通伤害buff
                    buffOwner = BattleManager.Instance.getBattleCharacterData(each.skillMsg.targets [0]);
//					MonoBase.print("skillMsg.skillID:"+each.skillMsg.skillID);
                    //Debug.LogError("lastSkill==="+lastSkill.serverData.sample.sid);

                    newBuff.init(buffOwner, lastSkill.user, BuffManager.Instance.CreateBuffData(each.skillMsg.skillSID, each.skillMsg.damage, lastSkill.serverData.sample.getDamageEffect()), false, each.skillMsg.skillID, lastSkill);
                    lastSkill.AddBuffCtrl(newBuff);
                    if (lastSkill.serverData.sample.getType() == SkillType.FightBack)
                    {
                        newBuff.serverData.sample.changeDamageType(BuffDamageType.beRebound);
                    }


                    if (lastBuff != null)
                    {
                        if (lastBuff.option == buff_option.Add || lastBuff.option == buff_option.active)
                        {
                            //如果上个buff操作类型是增加buff
                            //检查是否为特殊伤害类型,比如毒
                            newBuff.serverData.sample.changeDamageType(lastBuff.serverData.sample.getDamageType());
                        }
                    }
                }
            }
            //lastSkill.AddBuffCtrl(newBuff);

            //根据操作类型不同做不同操作
            switch (each.skillMsg.operationType)
            {
            case BattleReportService.ATTR_CHANGE:
                addBuff(newBuff);
                newBuff.option = buff_option.none;
                break;

            case  BattleReportService.BUFFER_REPLACE:
                newBuff.serverData.replaceID = each.skillMsg.oldSkillID;
                newBuff.option = buff_option.Replace;
                //	replaceBuff (newBuff);
                break;

            case BattleReportService.BUFFER_REMOVE:
                addBuff(newBuff);
//				MonoBase.	print(newBuff.buffData.database.buffType);
                newBuff.option = buff_option.Remove;
                break;

            case  BattleReportService.BUFFER_ADD:
                //	newBuff.buffData.IsDurationBuff = true;
                newBuff.option = buff_option.Add;
                addBuff(newBuff);

                newBuff.serverData.serverAttr_attack = each.skillMsg.getValueByEffectType(BuffEffectType.ATTACK);
                newBuff.serverData.serverAttr_defend = each.skillMsg.getValueByEffectType(BuffEffectType.DEFENSE);
                newBuff.serverData.serverAttr_magic  = each.skillMsg.getValueByEffectType(BuffEffectType.MAGIC);
                newBuff.serverData.serverAttr_dex    = each.skillMsg.getValueByEffectType(BuffEffectType.AGILE);
                break;

            case  BattleReportService.BUFFER_ABILITY:
                //	newBuff.buffData.IsDurationBuff = true;
                newBuff.option = buff_option.active;
                addBuff(newBuff);
                newBuff.serverData.serverAttr_attack = each.skillMsg.getValueByEffectType(BuffEffectType.ATTACK);
                newBuff.serverData.serverAttr_defend = each.skillMsg.getValueByEffectType(BuffEffectType.DEFENSE);
                newBuff.serverData.serverAttr_magic  = each.skillMsg.getValueByEffectType(BuffEffectType.MAGIC);
                newBuff.serverData.serverAttr_dex    = each.skillMsg.getValueByEffectType(BuffEffectType.AGILE);
                break;

            default:
                addBuff(newBuff);
                break;
            }
            lastBuff = newBuff;
            //下一个skill
            return(1);
        }
        //继续往下
        return(2);
    }