Пример #1
0
    void NormalAttack(CMsgHeader aHeader)
    {
        //普通攻击
        CMsgNormalAttack aNormalAttack = aHeader as CMsgNormalAttack;

        if (localCached.firstNormalAttack == null)
        {
            localCached.firstNormalAttack = aNormalAttack;
        }
        else
        {
            if (localCached.secondNormalAttack == null)
            {
                localCached.secondNormalAttack = aNormalAttack;

                if (GetBattleRole(localCached.firstNormalAttack.suffer).group != BanBattleRole.Group.Attack)
                {
                    CMsgNormalAttack temp = localCached.firstNormalAttack;
                    localCached.firstNormalAttack  = localCached.secondNormalAttack;
                    localCached.secondNormalAttack = temp;
                }

                BanBattleProcess.Instance.list_Item.Add(new BanBattleProcess.Item(
                                                            0, 0,
                                                            localCached.firstNormalAttack.suffer,
                                                            localCached.secondNormalAttack.suffer,
                                                            localCached.firstNormalAttack.curAtt + localCached.AttExploreHurt,
                                                            localCached.secondNormalAttack.curAtt + localCached.DefExploreHurt,
                                                            localCached.attAPCount,
                                                            localCached.defAPCount,
                                                            BanBattleProcess.Period.NormalAttack, -1, -1, -1, -1, -1)
                                                        );

                localCached.firstNormalAttack  = null;
                localCached.secondNormalAttack = null;

                localCached.AttExploreHurt = 0;
                localCached.DefExploreHurt = 0;
            }
            else
            {
                #if DEBUG
                Debug.Log("can not come here");
                #endif
            }
        }
    }
Пример #2
0
    void Skill_407(CMsgHeader aHeader, List <CMsgHeader> battleInfo, int headerIndex)
    {
        //自爆技能
        //因为自爆技能的特殊,很有可能是夹在两个互殴片段之间
        //所以我们要判定是否还处于互殴阶段
        bool             Vs1 = false, Vs2 = false, Vs = false;
        CMsgNormalAttack AfterVsAttack = null;
        int maxLength = battleInfo.Count;
        int preIndex  = headerIndex - 2;

        if (headerIndex < maxLength)
        {
            int        tmp      = headerIndex;
            CMsgHeader nextItem = null;
            do
            {
                nextItem = battleInfo[tmp];

                CMsgSkillCast check = nextItem as CMsgSkillCast;
                if (check != null)
                {
                    if (check.skillType == (int)CSkill_Type.Die)
                    {
                        tmp += 1;
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    ConsoleEx.DebugLog("check = " + nextItem.GetType().ToString()); break;
                }
            } while(tmp < maxLength);


            if (nextItem.status == CMsgHeader.STATUS_ATTACK)
            {
                Vs1           = true;
                AfterVsAttack = nextItem as CMsgNormalAttack;
            }
        }

        if (preIndex >= 0)
        {
            CMsgHeader preItem = battleInfo[preIndex];
            if (preItem.status == CMsgHeader.STATUS_ATTACK)
            {
                Vs2 = true;
            }
        }
        Vs = Vs1 && Vs2;

        ///
        /// 我只对受伤队列的第一个感兴趣,后面的,登场时候血量就会减少
        ///
        CMsgSkillBlast item = aHeader as CMsgSkillBlast;

        int             nFrom;
        CMsgSkillAttack one = item.sufferArr.Value <CMsgSkillAttack>(0);

        if (item.caster == localCached.attIndex)
        {
            localCached.attCurBp = 0;
            if (Vs)
            {
                localCached.defCurBp = AfterVsAttack.curAtt;

                if (one != null)
                {
                    localCached.DefExploreHurt = one.finalAtt;
                }
            }
            else
            {
                if (one != null)
                {
                    localCached.defCurBp = one.curAtt;
                }
            }

            nFrom = localCached.attIndex;
        }
        else
        {
            if (Vs)
            {
                localCached.attCurBp = AfterVsAttack.curAtt;
                if (one != null)
                {
                    localCached.AttExploreHurt = one.finalAtt;
                }
            }
            else
            {
                if (one != null)
                {
                    localCached.attCurBp = one.curAtt;
                }
            }

            localCached.defCurBp = 0;
            nFrom = localCached.defIndex;
        }

        int skillId = item.skillId;

        BanBattleProcess.Item added = AddItemWhenSkill(localCached, item.skillType, nFrom, -1,
                                                       BanBattleProcess.Item.Extra3_Explore, skillId, item.curAngry, item);

        added.VsMiddle = Vs ? 1 : 0;
    }