示例#1
0
    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);
    }
示例#2
0
    //----------------------------------------------------------------------------

    /*!
     *  @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;
        }
    }
示例#3
0
    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];
        }
    }