Esempio n. 1
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);
    }