private bool CheckAilmentDif(int[] anAilmentIDLH, MasterDataDefineLabel.TargetType nAilmentTargetLH, int[] anAilmentIDRH, MasterDataDefineLabel.TargetType nAilmentTargetRH) { if (null == anAilmentIDLH || null == anAilmentIDRH) { return(false); } MasterDataStatusAilmentParam cAilmentParamLH = null; MasterDataStatusAilmentParam cAilmentParamRH = null; for (int i = 0; i < anAilmentIDLH.Length; ++i) { if (0 == anAilmentIDLH[i]) // ← 2016/11/04 Developer 修正。元のプログラムでは状態異常のIDと種類を比較していた //if( MasterDataDefineLabel.AilmentType.NONE == anAilmentIDLH[i] ) { continue; } cAilmentParamLH = BattleParam.m_MasterDataCache.useAilmentParam((uint)anAilmentIDLH[i]); if (null == cAilmentParamLH) { continue; } for (int j = 0; j < anAilmentIDRH.Length; ++j) { if (0 == anAilmentIDRH[j]) // ← 2016/11/04 Developer 修正。元のプログラムでは状態異常のIDと種類を比較していた //if( MasterDataDefineLabel.AilmentType.NONE == anAilmentIDRH[j] ) { continue; } cAilmentParamRH = BattleParam.m_MasterDataCache.useAilmentParam((uint)anAilmentIDRH[j]); if (null == cAilmentParamRH) { continue; } if ((cAilmentParamLH.category != cAilmentParamRH.category) || (nAilmentTargetLH != nAilmentTargetRH)) { // 状態異常の効果が違う or 状態異常の対象が違う 場合、新規と見なす。 // ※同じ状態異常効果でも「敵にかかる」「味方にかかる」と異なる場合があるため、対象の相違をOR判定に加えている。 return(true); } } } return(false); }
//---------------------------------------------------------------------------- /*! * @brief LBS必要ターン数の短縮 * @param[in] BattleSkillActivity (activity) スキル発動情報 */ //---------------------------------------------------------------------------- public void ReduceLBSTurn(BattleSkillActivity activity) { if (activity == null) { return; } // スキルパラメータ取得 GlobalDefine.PartyCharaIndex userID = activity.m_SkillParamOwnerNum; int turn = activity.Get_BOOSTSKILL_LBS_TURN_REDUCE_VALUE(); MasterDataDefineLabel.TargetType target = activity.Get_BOOSTSKILL_LBS_TURN_REDUCE_TARGET(); // 対象情報による分岐 CharaOnce chara; switch (target) { // 発動者のみ case MasterDataDefineLabel.TargetType.SELF: // エラーチェック chara = BattleParam.m_PlayerParty.getPartyMember(userID, CharaParty.CharaCondition.SKILL_TURN1); if (chara == null) { break; } // LBS必要ターン数短縮 chara.AddCharaLimitBreak(turn); break; case MasterDataDefineLabel.TargetType.FRIEND: // 発動者の味方全員 case MasterDataDefineLabel.TargetType.ALL: // 全員 case MasterDataDefineLabel.TargetType.SELF_OTHER_FRIEND: // 発動者以外の味方全員 case MasterDataDefineLabel.TargetType.SELF_OTHER_ALL: // 発動者以外の全員 for (int num = 0; num < (int)GlobalDefine.PartyCharaIndex.MAX; ++num) { // 発動者は効果適用外 if ((GlobalDefine.PartyCharaIndex)num == userID) { if (target == MasterDataDefineLabel.TargetType.SELF_OTHER_FRIEND || target == MasterDataDefineLabel.TargetType.SELF_OTHER_ALL) { continue; } } // エラーチェック chara = BattleParam.m_PlayerParty.getPartyMember((GlobalDefine.PartyCharaIndex)num, CharaParty.CharaCondition.SKILL_TURN1); if (chara == null) { continue; } // LBS必要ターン数短縮 chara.AddCharaLimitBreak(turn); } break; // 何も処理しない case MasterDataDefineLabel.TargetType.NONE: case MasterDataDefineLabel.TargetType.OTHER: case MasterDataDefineLabel.TargetType.ENEMY: case MasterDataDefineLabel.TargetType.ENE_N_1: case MasterDataDefineLabel.TargetType.ENE_1N_1: case MasterDataDefineLabel.TargetType.ENE_R_N: case MasterDataDefineLabel.TargetType.ENE_1_N: default: break; } }
public bool m_bDelayAilment = false; //!< 遅延発動予約があるかどうか。 //--------------------------------------------------------------------- /** * @brief 状態異常の遅延発動予約。 * @param[in] nCharaIndex : スキルを発動したキャラ。 ※BattleSkillActivity.m_SkillParamOwnerNum * @param[in] acTarget : スキルのターゲット情報。 ※BattleSkillActivity.m_SkillParamTarget * @param[in] nAilmentTarget : 状態異常ターゲット。 ※BattleSkillActivity.m_statusAilment_target * @param[in] anAilment : 状態異常パラメータ配列。 ※BattleSkillActivity.m_statusAilment */ //--------------------------------------------------------------------- public void ReserveDelayAilment(GlobalDefine.PartyCharaIndex nCharaIndex, ref BattleSkillTarget[] acTarget, MasterDataDefineLabel.TargetType nAilmentTarget, ref int[] anAilmentID) { if (null == acTarget) { #if BUILD_TYPE_DEBUG Debug.LogWarning("null == acTarget"); #endif // BUILD_TYPE_DEBUG return; } if (null == anAilmentID) { #if BUILD_TYPE_DEBUG Debug.LogWarning("null == anAilment"); #endif // BUILD_TYPE_DEBUG return; } if (GlobalDefine.PartyCharaIndex.ERROR == nCharaIndex) { #if BUILD_TYPE_DEBUG // ( -1 != m_SkillParamOwnerNum )を遅延発動の有無判定に使用するので、-1指定で予約されるのはエラー扱いとする。 Debug.LogError("-1 == nCharaIndex"); #endif // BUILD_TYPE_DEBUG return; } //----------------------------------------------------------------- // 遅延発動登録可能なバッファを探す。 //----------------------------------------------------------------- int nIndex = -1; int nLen = m_acDelayAilment.Length; for (int i = 0; i < nLen; ++i) { if (null == m_acDelayAilment[i]) { nIndex = i; break; } } if (nIndex < 0) { #if BUILD_TYPE_DEBUG // 登録場所が見つからなかった。ターン毎にバッファがクリアされていないか、1ターンの総定数以上の遅延発動リクエストが来ているか。 Debug.LogWarning("ReserveDelayAilment failed. nIndex < 0"); #endif // BUILD_TYPE_DEBUG return; } //----------------------------------------------------------------- // 1件でも予約が入っている場合、発動させる状態異常が重複していないかチェック。 // ※同じ種類の状態異常は先着優先となっているため、新しい状態異常がanAilmentに存在しない場合、この予約はキャンセルする。 //----------------------------------------------------------------- if (m_bDelayAilment) { bool bNew = false; nLen = m_acDelayAilment.Length; for (int i = 0; i < nLen; ++i) { if (null == m_acDelayAilment[i]) { continue; } if (!CheckAilmentDif(m_acDelayAilment[i].m_statusAilment, m_acDelayAilment[i].m_statusAilment_target, anAilmentID, nAilmentTarget)) { continue; } // 新しい状態異常がanAilmentに含まれている。予約処理に進む。 bNew = true; break; } if (!bNew) { // 新しい状態異常が無い。予約不要。 return; } } //----------------------------------------------------------------- // 必要な情報を登録。 //----------------------------------------------------------------- m_bDelayAilment = true; m_acDelayAilment[nIndex] = new BattleSkillActivity(); m_acDelayAilment[nIndex].m_SkillParamTarget = new BattleSkillTarget[acTarget.Length]; m_acDelayAilment[nIndex].m_statusAilment = new int[anAilmentID.Length]; m_acDelayAilment[nIndex].m_SkillParamOwnerNum = nCharaIndex; m_acDelayAilment[nIndex].m_statusAilment_target = nAilmentTarget; nLen = m_acDelayAilment[nIndex].m_SkillParamTarget.Length; for (int i = 0; i < nLen; ++i) { if (null != acTarget[i]) { m_acDelayAilment[nIndex].m_SkillParamTarget[i] = new BattleSkillTarget(acTarget[i]); } } nLen = m_acDelayAilment[nIndex].m_statusAilment.Length; for (int i = 0; i < nLen; ++i) { m_acDelayAilment[nIndex].m_statusAilment[i] = anAilmentID[i]; } }