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 } } }
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; }