Esempio n. 1
0
    //----------------------------------------------------------------------------

    /*!
     *          @brief		リンクシステム:リンクユニットの+値ボーナス
     *          @param[in]	int		(nPlusValue)	プラス値
     *          @param[in]	int		(nBonusType)	ボーナスタイプ
     *          @return		int		(nResult)		[+加算値]
     *          @note		HPとATKの+値ボーナス	※引数でまとめて受け取った方がいいかも
     */
    //----------------------------------------------------------------------------
    static public int GetLinkUnitBonusPlus(int nPlusValue, CharaUtil.VALUE nBonusType)
    {
        int nResult = 0;

        //--------------------------------
        // ボーナス値の種類による分岐
        //--------------------------------
        switch (nBonusType)
        {
        case CharaUtil.VALUE.POW: nResult = nPlusValue * GlobalDefine.PLUS_LINK_RATE_POW; break;

        case CharaUtil.VALUE.HP: nResult = nPlusValue * GlobalDefine.PLUS_LINK_RATE_HP; break;
        }

        return(nResult);
    }
Esempio n. 2
0
    //	public	const	int		VALUE_POW		= 0;	//!< キャラステータス値:攻撃
    //	public	const	int		VALUE_DEF		= 1;	//!< キャラステータス値:防御
    //	public	const	int		VALUE_HP		= 2;	//!< キャラステータス値:体力
    //	public	const	int		VALUE_EXP		= 3;	//!< キャラステータス値:レベルアップに必要な経験値
    //	public	const	int		VALUE_EXP_PARTS	= 4;	//!< キャラステータス値:素材になる時の経験値
    //	public	const	int		VALUE_SALE		= 5;	//!< キャラステータス値:売却価格
    //	public	const	int		VALUE_CRT		= 6;	//!< キャラステータス値:クリティカル威力
    //	public	const	int		VALUE_BST_PANEL	= 7;	//!< キャラステータス値:ブーストパネル威力

    /*==========================================================================*/
    /*		var																	*/
    /*==========================================================================*/
    /*==========================================================================*/
    /*		func																*/
    /*==========================================================================*/
    //----------------------------------------------------------------------------

    /*!
     *          @brief	ステータス値取得
     */
    //----------------------------------------------------------------------------
    static public int GetStatusValue(MasterDataParamChara cMaster, int nLevel, CharaUtil.VALUE nValueType)
    {
        //--------------------------------
        // 要素のmax,minを求める
        //--------------------------------
        int nValueMin = 0;
        int nValueMax = 0;

        MasterDataDefineLabel.CurveType nCurveType = MasterDataDefineLabel.CurveType.BALANCE_A;
        bool bServerCal = false;

        switch (nValueType)
        {
        case CharaUtil.VALUE.POW: nValueMin = cMaster.base_attack_min; nValueMax = cMaster.base_attack_max; nCurveType = cMaster.base_attack_curve; bServerCal = false; break;

        case CharaUtil.VALUE.DEF: nValueMin = cMaster.base_defense_min; nValueMax = cMaster.base_defense_max; nCurveType = cMaster.base_defense_curve; bServerCal = false; break;

        case CharaUtil.VALUE.HP: nValueMin = cMaster.base_hp_min; nValueMax = cMaster.base_hp_max; nCurveType = cMaster.base_hp_curve; bServerCal = false; break;

        case CharaUtil.VALUE.EXP: nValueMin = 0; nValueMax = cMaster.exp_total; nCurveType = cMaster.exp_total_curve; bServerCal = true; break;

        case CharaUtil.VALUE.EXP_PARTS: nValueMin = cMaster.blend_exp_min; nValueMax = cMaster.blend_exp_max; nCurveType = cMaster.blend_exp_curve; bServerCal = true; break;

        case CharaUtil.VALUE.SALE: nValueMin = cMaster.sales_min; nValueMax = cMaster.sales_max; nCurveType = cMaster.sales_curve; bServerCal = true; break;

        default: Debug.LogError("Status Type NG!!"); return(1);
        }

        //--------------------------------
        // レベルの最低最大が一致する場合は
        // 補間計算をせずに最低値を返す
        //--------------------------------
        if (nValueMin == nValueMax)
        {
            return(nValueMin);
        }

        //--------------------------------
        // 既に最大レベルなら最大値を返す
        //--------------------------------
        if (nLevel >= cMaster.level_max)
        {
            return(nValueMax);
        }

        //--------------------------------
        // 要素のレベル達成割合を求める
        //--------------------------------

        /*
         *                      float fLevelRate = 1.0f;
         *                      if( nLevel < cMaster.level_min )
         *                      {
         *                              Debug.LogError( "Level Range NG!!" );
         *                              fLevelRate = 0.0f;
         *                      }
         *                      else
         *                      if( cMaster.level_max > cMaster.level_min )
         *                      {
         *                              fLevelRate = 1.0f - ( (float)( cMaster.level_max - nLevel ) / (float)( cMaster.level_max - cMaster.level_min ) );
         *                      }
         */

        //--------------------------------
        // 成長曲線タイプでべき乗係数を変化
        //--------------------------------
        //float fPowerRate = 1.0f;
        //switch( nCurveType )
        //{
        //	case MasterDataDefineLabel.CURVE_NONE:		fPowerRate = 1.0f;		break;		// 補間タイプ: -
        //	case MasterDataDefineLabel.CURVE_1_A:		fPowerRate = 1.0f;		break;		// 補間タイプ:バランス:A
        //	case MasterDataDefineLabel.CURVE_1_B:		fPowerRate = 1.0f;		break;		// 補間タイプ:バランス:B
        //	case MasterDataDefineLabel.CURVE_1_C:		fPowerRate = 2.5f;		break;		// 補間タイプ:バランス:C
        //	case MasterDataDefineLabel.CURVE_2_A:		fPowerRate = 0.7f;		break;		// 補間タイプ:早熟:A
        //	case MasterDataDefineLabel.CURVE_2_B:		fPowerRate = 0.7f;		break;		// 補間タイプ:早熟:B
        //	case MasterDataDefineLabel.CURVE_2_C:		fPowerRate = 0.7f;		break;		// 補間タイプ:早熟:C
        //	case MasterDataDefineLabel.CURVE_3_A:		fPowerRate = 1.5f;		break;		// 補間タイプ:大器晩成:A
        //	case MasterDataDefineLabel.CURVE_3_B:		fPowerRate = 1.5f;		break;		// 補間タイプ:大器晩成:B
        //	case MasterDataDefineLabel.CURVE_3_C:		fPowerRate = 1.5f;		break;		// 補間タイプ:大器晩成:C
        //	default:	Debug.LogError( "CurveType Error! - " + nCurveType );	break;		// 補間タイプ:__
        //}

        //--------------------------------
        // 補間で数値算出
        //--------------------------------
        int nTotalLevelMax = cMaster.level_max - cMaster.level_min;
        int nTotalLevelNow = nLevel - cMaster.level_min;
        int nResult        = 0;

        //--------------------------------
        // サーバでも計算している項目は、
        // サーバ数値を正として同じになるように計算する
        // @change Developer 2016/06/15 v342:計算誤差修正
        //--------------------------------
        if (bServerCal == true)
        {
            #region ==== サーバでも計算する項目 ====
            //--------------------------------
            // double用の成長曲線タイプを取得
            // 上記で成長曲線タイプを取得した変数を(double)キャストしても計算が狂う
            //--------------------------------
            double dPowerRate = 1.0;
            switch (nCurveType)
            {
            case MasterDataDefineLabel.CurveType.NONE: dPowerRate = 1.0; break;               // 補間タイプ: -

            case MasterDataDefineLabel.CurveType.BALANCE_A: dPowerRate = 1.0; break;          // 補間タイプ:バランス:A

            case MasterDataDefineLabel.CurveType.BALANCE_B: dPowerRate = 1.0; break;          // 補間タイプ:バランス:B

            case MasterDataDefineLabel.CurveType.BALANCE_C: dPowerRate = 2.5; break;          // 補間タイプ:バランス:C

            case MasterDataDefineLabel.CurveType.PRECOCITY_A: dPowerRate = 0.7; break;        // 補間タイプ:早熟:A

            case MasterDataDefineLabel.CurveType.PRECOCITY_B: dPowerRate = 0.7; break;        // 補間タイプ:早熟:B

            case MasterDataDefineLabel.CurveType.PRECOCITY_C: dPowerRate = 0.7; break;        // 補間タイプ:早熟:C

            case MasterDataDefineLabel.CurveType.LATE_DEVELOPMENT_A: dPowerRate = 1.5; break; // 補間タイプ:大器晩成:A

            case MasterDataDefineLabel.CurveType.LATE_DEVELOPMENT_B: dPowerRate = 1.5; break; // 補間タイプ:大器晩成:B

            case MasterDataDefineLabel.CurveType.LATE_DEVELOPMENT_C: dPowerRate = 1.5; break; // 補間タイプ:大器晩成:C

            default: Debug.LogError("CurveType Error! - " + nCurveType); break;               // 補間タイプ:__
            }

            nResult = (int)(nValueMin + (nValueMax - nValueMin) * Math.Exp(Math.Log((double)nTotalLevelNow / (double)nTotalLevelMax) * dPowerRate));
            #endregion
        }
        else
        {
            #region ==== クライアントのみ計算する項目 ====
            //--------------------------------
            // 成長曲線タイプでべき乗係数を変化
            //--------------------------------
            float fPowerRate = 1.0f;
            switch (nCurveType)
            {
            case MasterDataDefineLabel.CurveType.NONE: fPowerRate = 1.0f; break;               // 補間タイプ: -

            case MasterDataDefineLabel.CurveType.BALANCE_A: fPowerRate = 1.0f; break;          // 補間タイプ:バランス:A

            case MasterDataDefineLabel.CurveType.BALANCE_B: fPowerRate = 1.0f; break;          // 補間タイプ:バランス:B

            case MasterDataDefineLabel.CurveType.BALANCE_C: fPowerRate = 2.5f; break;          // 補間タイプ:バランス:C

            case MasterDataDefineLabel.CurveType.PRECOCITY_A: fPowerRate = 0.7f; break;        // 補間タイプ:早熟:A

            case MasterDataDefineLabel.CurveType.PRECOCITY_B: fPowerRate = 0.7f; break;        // 補間タイプ:早熟:B

            case MasterDataDefineLabel.CurveType.PRECOCITY_C: fPowerRate = 0.7f; break;        // 補間タイプ:早熟:C

            case MasterDataDefineLabel.CurveType.LATE_DEVELOPMENT_A: fPowerRate = 1.5f; break; // 補間タイプ:大器晩成:A

            case MasterDataDefineLabel.CurveType.LATE_DEVELOPMENT_B: fPowerRate = 1.5f; break; // 補間タイプ:大器晩成:B

            case MasterDataDefineLabel.CurveType.LATE_DEVELOPMENT_C: fPowerRate = 1.5f; break; // 補間タイプ:大器晩成:C

            default: Debug.LogError("CurveType Error! - " + nCurveType); break;                // 補間タイプ:__
            }

            nResult = (int)(nValueMin + (nValueMax - nValueMin) * Mathf.Pow((float)nTotalLevelNow / (float)nTotalLevelMax, fPowerRate));
            #endregion
        }

        return(nResult);
        //		return (int)(nValueMin + ( nValueMax - nValueMin ) * Mathf.Pow( (float)nTotalLevelNow / (float)nTotalLevelMax , fPowerRate ));
        //		return (int)(nValueMin + ( nValueMax - nValueMin ) * Mathf.Pow( (float)( nLevel - 1 ) / (float)( cMaster.level_max - 1 ) , fPowerRate ));
    }
Esempio n. 3
0
    //----------------------------------------------------------------------------

    /*!
     *          @brief		リンクシステム:種族ボーナス:キャラマスター指定
     *          @param[in]	MasterDataParamChara	(cCharaMaster)	リンクユニット:キャラマスター
     *          @param[in]	int						(nBonusRace)	ボーナス種族
     *          @param[in]	int						(nBonusType)	ボーナスタイプ
     *          @return		float					(fResult)		[+%値]
     *          @note		種族・レア度毎のボーナス値を取得	※引数でまとめて受け取った方がいいかも
     */
    //----------------------------------------------------------------------------
    static public float GetLinkUnitBonusRace(MasterDataParamChara cCharaMaster, MasterDataDefineLabel.KindType nBonusRace, CharaUtil.VALUE nBonusType)
    {
        MasterDataLinkSystem[] acLinkMaster = MasterFinder <MasterDataLinkSystem> .Instance.GetAll();

        float fResult = 0.0f;

        //--------------------------------
        // エラーチェック
        //--------------------------------
        if (acLinkMaster == null ||
            cCharaMaster == null)
        {
            Debug.LogError("MasterDataLinkSystem or MasterDataParamChara Is None!");
            return(fResult);
        }

        // ボーナス種族が設定されていない場合
        if (nBonusRace <= MasterDataDefineLabel.KindType.NONE ||
            nBonusRace >= MasterDataDefineLabel.KindType.MAX)
        {
            return(fResult);
        }

        //--------------------------------
        // 副種族持ちかチェック
        //--------------------------------
        MasterDataDefineLabel.KindType[] anCharaKind = new MasterDataDefineLabel.KindType[2] {
            cCharaMaster.kind,
            cCharaMaster.sub_kind
        };
        int nStartNum = 0;
        int nEndNum   = 0;

        // 副種族が設定されていない場合
        if (anCharaKind[1] <= MasterDataDefineLabel.KindType.NONE ||
            anCharaKind[1] >= MasterDataDefineLabel.KindType.MAX)
        {
            nStartNum = LINK_BONUS_KIND;
            nEndNum   = LINK_BONUS_KIND_SUB;
        }
        else
        {
            nStartNum = LINK_BONUS_KIND_SUB;
            nEndNum   = acLinkMaster.Length;
        }

        //--------------------------------
        // ボーナス定義の確定
        //--------------------------------
        int nLinkIdx = 0;

        for (int num = nStartNum; num < nEndNum; ++num)
        {
            // ボーナス定義の種族とレア度が、リンクユニットと等しい場合
            if (acLinkMaster[num].kind == nBonusRace &&
                acLinkMaster[num].rare == cCharaMaster.rare)
            {
                nLinkIdx = num;
                break;
            }
        }

        //--------------------------------
        // ボーナス値の種類による分岐
        // ※HPは実値のため、そのまま取得する
        //--------------------------------
        switch (nBonusType)
        {
        case CharaUtil.VALUE.POW: fResult = InGameUtilBattle.GetDBRevisionValue((float)acLinkMaster[nLinkIdx].atk); break;

        case CharaUtil.VALUE.HP: fResult = (float)acLinkMaster[nLinkIdx].hp; break;

        case CharaUtil.VALUE.CRT: fResult = InGameUtilBattle.GetDBRevisionValue((float)acLinkMaster[nLinkIdx].crt); break;

        case CharaUtil.VALUE.BST_PANEL: fResult = InGameUtilBattle.GetDBRevisionValue((float)acLinkMaster[nLinkIdx].bst); break;
        }

        return(fResult);
    }
Esempio n. 4
0
    //----------------------------------------------------------------------------

    /*!
     *          @brief		リンクシステム:種族ボーナス:キャラID指定
     *          @param[in]	uint	(unLinkUnitID)	リンクユニット:キャラID
     *          @param[in]	int		(nBonusRace)	ボーナス種族
     *          @param[in]	int		(nBonusType)	ボーナスタイプ
     *          @return		float	(fResult)		[+%値]
     *          @note		種族・レア度毎のボーナス値を取得	※引数でまとめて受け取った方がいいかも
     *                                  この関数自体使わないかも(現在未使用)	2015/09/14 ver300
     */
    //----------------------------------------------------------------------------
    static public float GetLinkUnitBonusRace(uint unLinkUnitID, MasterDataDefineLabel.KindType nBonusRace, CharaUtil.VALUE nBonusType)
    {
        float fResult = 0.0f;

        // キャラマスターを取得
        MasterDataParamChara cCharaMaster = BattleParam.m_MasterDataCache.useCharaParam(unLinkUnitID);

        if (cCharaMaster == null)
        {
            return(fResult);
        }

        // 種族ボーナス
        fResult = GetLinkUnitBonusRace(cCharaMaster, nBonusRace, nBonusType);

        return(fResult);
    }
Esempio n. 5
0
    //----------------------------------------------------------------------------

    /*!
     *          @brief		リンクシステム:属性ボーナス:キャラマスター指定
     *          @param[in]	MasterDataParamChara	(cCharaMaster)	キャラマスター
     *          @param[in]	int						(nLevel)		ユニットレベル
     *          @param[in]	int						(nLoLevel)		限界突破レベル
     *          @param[in]	int						(nBonusType)	ボーナスタイプ
     *          @return		int						(nResult)		[+加算値]
     *          @note		HPとATKのボーナス値		※引数でまとめて受け取った方がいいかも
     */
    //----------------------------------------------------------------------------
    static public int GetLinkUnitBonusElement(MasterDataParamChara cCharaMaster, int nLevel, uint nLoLevel, CharaUtil.VALUE nBonusType)
    {
        MasterDataLinkSystem[] acLinkMaster = MasterFinder <MasterDataLinkSystem> .Instance.GetAll();

        int nResult = 0;

        //--------------------------------
        // エラーチェック
        //--------------------------------
        if (acLinkMaster == null ||
            cCharaMaster == null)
        {
            Debug.LogError("MasterDataLinkSystem or MasterDataParamChara Is None!");
            return(nResult);
        }

        int nLimitOverCost = (int)CharaLimitOver.GetParam(nLoLevel, cCharaMaster.limit_over_type, (int)CharaLimitOver.EGET.ePARAM_COST);

        //--------------------------------
        // 基礎値
        //--------------------------------
        float fBaseValue = 1.0f;
        float fCostValue = InGameUtilBattle.AvoidErrorMultiple((float)cCharaMaster.party_cost + nLimitOverCost, RATE_COST);
        float fRareValue = ((int)cCharaMaster.rare + 1) * ((int)cCharaMaster.rare + 1);


        fBaseValue += fCostValue + fRareValue;


        //--------------------------------
        // 属性値
        //--------------------------------
        int   nLinkNum   = 0;
        float fElemValue = 0.0f;


        // ボーナス定義の確定
        for (int num = 0; num < LINK_BONUS_KIND; ++num)
        {
            // ボーナス定義の属性と、リンクユニットの属性が等しい場合
            if (acLinkMaster[num].elem == cCharaMaster.element)
            {
                nLinkNum = num;
                break;
            }
        }

        // ボーナス値の種類による分岐
        switch (nBonusType)
        {
        case CharaUtil.VALUE.POW: fElemValue = InGameUtilBattle.GetDBRevisionValue((float)acLinkMaster[nLinkNum].atk); break;

        case CharaUtil.VALUE.HP: fElemValue = InGameUtilBattle.GetDBRevisionValue((float)acLinkMaster[nLinkNum].hp); break;
        }


        //--------------------------------
        // レベル補正
        //--------------------------------
        float fLevelCorrection = 1.0f;
        float fLevelValue      = InGameUtilBattle.AvoidErrorMultiple((float)nLevel, RATE_LEVEL);


        fLevelCorrection += fLevelValue;


        //--------------------------------
        // 最終結果:属性ボーナス値(基礎値 × 属性値 × Lv補正)※端数切捨て
        //--------------------------------
        float fWork = 0.0f;

        fWork   = InGameUtilBattle.AvoidErrorMultiple(fBaseValue, fElemValue);
        fWork   = InGameUtilBattle.AvoidErrorMultiple(fWork, fLevelCorrection);
        nResult = (int)fWork;

        return(nResult);
    }
Esempio n. 6
0
    //----------------------------------------------------------------------------

    /*!
     *          @brief		リンクシステム:属性ボーナス:キャラID指定
     *          @param[in]	uint	(unLinkUnitID)	リンクユニット:キャラID
     *          @param[in]	int		(nLevel)		ユニットレベル
     *          @param[in]	int		(nLoLevel)		限界突破レベル
     *          @param[in]	int		(nBonusType)	ボーナスタイプ
     *          @return		int		(nResult)		[+加算値]
     *          @note		HPとATKのボーナス値		※引数でまとめて受け取った方がいいかも
     */
    //----------------------------------------------------------------------------
    static public int GetLinkUnitBonusElement(uint unLinkUnitID, int nLevel, uint nLoLevel, CharaUtil.VALUE nBonusType)
    {
        int nResult = 0;

        // キャラマスターを取得
        MasterDataParamChara cCharaMaster = BattleParam.m_MasterDataCache.useCharaParam(unLinkUnitID);

        if (cCharaMaster == null)
        {
            return(nResult);
        }

        // 属性ボーナス
        nResult = GetLinkUnitBonusElement(cCharaMaster, nLevel, nLoLevel, nBonusType);

        return(nResult);
    }