/// <summary>
    /// パーティメンバー個別へのダメージ演出(ダメージ数値)
    /// </summary>
    /// <param name="member_index"></param>
    /// <param name="effect_prefab"></param>
    public void setDamageValueMember(MasterDataDefineLabel.ElementType damage_element, BattleSceneUtil.MultiInt damage_value, BattleSceneUtil.MultiInt damage_target)
    {
        if (BattleParam.IsKobetsuHP == false)
        {
            return;
        }

        for (int idx = 0; idx < damage_value.getMemberCount(); idx++)
        {
            int dmg_target = damage_target.getValue((GlobalDefine.PartyCharaIndex)idx);
            if (dmg_target > 0)
            {
                int          dmg_value   = damage_value.getValue((GlobalDefine.PartyCharaIndex)idx);
                EDAMAGE_TYPE damage_type = EDAMAGE_TYPE.eDAMAGE_TYPE_NORMAL;
                if (damage_element != MasterDataDefineLabel.ElementType.NONE)
                {
                    CharaOnce chara_once = BattleParam.m_PlayerParty.getPartyMember((GlobalDefine.PartyCharaIndex)idx, CharaParty.CharaCondition.EXIST);
                    if (chara_once != null)
                    {
                        damage_type = InGameUtilBattle.GetSkillElementAffinity(damage_element, chara_once.m_CharaMasterDataParam.element);
                    }
                }

                DrawDamageManager.showDamage(m_MemberHPTrans[idx], dmg_value, damage_type, 3.0f, getInterfaceExtentionRate() * INTERFACE_EXTENTION_DAMAGE_VALUE_OFFSET_Y + 0.14f, 2.0f);
            }
        }
    }
Ejemplo n.º 2
0
    public int execKonjoHP()
    {
        int ret_val = 0;

        if (m_KonjoHP > 0 &&
            m_EnemyHP <= 0
            )
        {
            uint[] enemy_abilitys = getEnemyAbilitys();
            if (enemy_abilitys != null)
            {
                for (int idx = 0; idx < enemy_abilitys.Length; idx++)
                {
                    MasterDataEnemyAbility master_data_enemy_ability = BattleParam.m_MasterDataCache.useEnemyAbility(enemy_abilitys[idx]);
                    if (master_data_enemy_ability != null &&
                        master_data_enemy_ability.category == MasterDataDefineLabel.EnemyAbilityType.KONJO
                        )
                    {
                        float triger_hp_rate = InGameUtilBattle.GetDBRevisionValue(master_data_enemy_ability.Get_KONJO_TRIGER_HP_RATE());
                        if (triger_hp_rate > 0)
                        {
                            int triger_hp = (int)InGameUtilBattle.AvoidErrorMultiple(m_EnemyHPMax, triger_hp_rate);
                            if (triger_hp < 1)
                            {
                                triger_hp = 1;
                            }

                            if (m_KonjoHP >= triger_hp)
                            {
                                float keep_hp_rate = InGameUtilBattle.GetDBRevisionValue(master_data_enemy_ability.Get_KONJO_KEEP_HP_RATE());
                                int   keep_hp      = (int)InGameUtilBattle.AvoidErrorMultiple(m_EnemyHPMax, keep_hp_rate);
                                if (keep_hp < 1)
                                {
                                    keep_hp = 1;
                                }

                                // 発動条件を満たした中で一番残HPが多いものを採用
                                if (keep_hp > ret_val)
                                {
                                    ret_val = keep_hp;
                                }
                            }
                        }
                    }
                }
            }

            //根性発動
            if (ret_val > 0)
            {
                SetHP(ret_val);
            }
        }

        m_KonjoHP = 0;

        return(ret_val);
    }
Ejemplo n.º 3
0
    public void setHands(int hands)
    {
        int ratex = (int)(InGameUtilBattle.GetSkillCountRate(hands) * 100.0f);

        if (ratex > 9999)
        {
            ratex = 9999;
        }

        m_Rate1000.sprite = m_RateNumberSprites[(ratex / 1000) % 10];
        m_Rate0100.sprite = m_RateNumberSprites[(ratex / 100) % 10];
        m_Rate0010.sprite = m_RateNumberSprites[(ratex / 10) % 10];
        m_Rate0001.sprite = m_RateNumberSprites[(ratex / 1) % 10];
    }
Ejemplo n.º 4
0
    //-----------------------------------------------------------------------

    /*!
     *  @brief		HPの指定割合以下
     */
    //-----------------------------------------------------------------------
    private bool checkTimingHPRateUnder(int check_hp)
    {
        //--------------------------------
        // HP割合をみる
        //--------------------------------
        float fRate    = (float)InGameUtilBattle.GetDBRevisionValue(check_hp);
        int   nEnemyHP = (int)InGameUtilBattle.AvoidErrorMultiple(m_BattleEnemy.m_EnemyHPMax, fRate);

        //--------------------------------
        //	指定割合"以下"でない物は通さない
        //--------------------------------
        if (m_BattleEnemy.m_EnemyHP > nEnemyHP)
        {
            return(false);
        }

        return(true);
    }
Ejemplo n.º 5
0
    void Update()
    {
        //----------------------------------------
        // インスタンスのチェック
        //----------------------------------------
        if (SceneObjReferGameMain.Instance == null)
        {
            return;
        }

        if (m_Window == null ||
            m_WindowPos == null ||
            m_CharaIcon == null
            //		||   m_Collision   == null
            //		||   m_Caption     == null
            //		||   m_Race        == null
            //		||   m_Type        == null
            //		||   m_Week        == null
            //		||   m_Rare        == null
            //		||   m_LabelTarget == null
            )
        {
            return;
        }

        //----------------------------------------
        // ターゲットマークがついている敵なのかチェック
        //----------------------------------------
        bool isTarget = false;

        if (BattleParam.m_TargetEnemyWindow == BattleParam.m_TargetEnemyCurrent)
        {
            isTarget = true;
        }

        //----------------------------------------
        // ターゲットウィンドウに表示する対象が設定されているかチェック
        //----------------------------------------
        if (m_TargetID == InGameDefine.SELECT_NONE)
        {
            //----------------------------------------
            // ターゲットウィンドウを閉じている時の処理
            //----------------------------------------
            m_TargetID = BattleParam.m_TargetEnemyWindow;
            if (m_TargetID != InGameDefine.SELECT_NONE &&
                m_SetUpInfo == false)
            {
                BattleEnemy enemy = BattleParam.m_EnemyParam[m_TargetID];
                if (enemy != null)
                {
                    MasterDataParamChara charaParam = enemy.getMasterDataParamChara();
                    if (charaParam != null)
                    {
                        // 名前
                        Caption = charaParam.name;
                        // 種族
                        Item_race_title = GameTextUtil.GetText("WORD_UNIT_KIND");
                        Item_race       = GameTextUtil.GetKindToText(enemy.getKind(), enemy.getKindSub());
                        // 属性
                        Item_type_title = GameTextUtil.GetText("WORD_UNIT_ELEMENT");
                        Item_type       = GameTextUtil.GetText(GameTextUtil.GetElemToTextKey(charaParam.element));
                        // 弱点
                        Item_week_title = GameTextUtil.GetText("WORD_UNIT_WEEK");
                        MasterDataDefineLabel.ElementType week = InGameUtilBattle.GetElementAffinity(charaParam.element);
                        Item_week = GameTextUtil.GetText(GameTextUtil.GetElemToTextKey(week));
                        // レア
                        Item_rare_title = GameTextUtil.GetText("WORD_RARE_JP");
                        Item_rare       = GameTextUtil.GetText(GameTextUtil.GetRareToTextKey(charaParam.rare));

                        // 状態異常アイコンの設定
                        SetAilmentIcon(enemy);

                        // キャラアイコンの設定
                        UnitIconImageProvider.Instance.Get(
                            charaParam.fix_id,
                            sprite => { Chara_icon = sprite; });
                    }

                    // 特性情報の設定
                    SetAbilityInformation(enemy);

                    // ターゲットボタンの状態を設定
                    SetTargetButton(isTarget);

                    // ウィンドウの有効化
                    UnityUtil.SetObjectEnabledOnce(m_WindowPos, true);

                    m_SetUpInfo = true;

                    // 表示位置へ移動
                    gameObject.transform.localPosition = m_DispPos;

                    m_bTouchReleaseAfterWindowOpen = false;

                    //-----------------------------------------------------
                    // 初期状態:基本情報から開始。
                    //-----------------------------------------------------
                    ChangeState(ESTATE.eSTATE_PAGE_BASIC);
                    return;
                }
            }
        }
        else
        {
            //----------------------------------------
            // ターゲットウィンドウを開いている時の処理
            //----------------------------------------


            //-------------------------------------------------------------
            // 閉じるボタン押下によるウィンドウ閉じる処理。
            //-------------------------------------------------------------
            bool dispChange = false;

            // 閉じる。
            if (dispChange == true)
            {
                //---------------------------------------------------------
                // ページ情報クリアのため、状態解除。
                //---------------------------------------------------------
                ChangeState(ESTATE.eSTATE_NULL);

                UnityUtil.SetUILabelValue(m_AbilityDetailObj[ABILITY_LABEL], "");               // ここでクリアしておかないと、別の敵でスクロールバーの表示判定がうまく機能しない
                m_SetUpInfo = false;
                m_TargetID  = InGameDefine.SELECT_NONE;
                UnityUtil.SetObjectEnabledOnce(m_WindowPos, false);
                UnityUtil.SetObjectEnabledOnce(m_Collision, false);
                UnityUtil.SetObjectEnabledOnce(this.gameObject, false);
                return;
            }


            //-------------------------------------------------------------
            // 状態更新。
            //-------------------------------------------------------------
            switch (m_eState)
            {
            case ESTATE.eSTATE_PAGE_BASIC: State_PageBasicUpdate(); break;

            case ESTATE.eSTATE_PAGE_STATUS: State_PageStatusAilmentUpdate(); break;

            case ESTATE.eSTATE_PAGE_ABILITY: State_PageAbilityUpdate(); break;
            }
        }
    }
Ejemplo n.º 6
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);
    }
Ejemplo n.º 7
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);
    }
Ejemplo n.º 8
0
    //----------------------------------------------------------------------------
    /*!
		@brief	キャラ情報セットアップ:マスターデータ指定
		@param	MasterDataParamChara	cMasterData		キャラマスター
		@param	int						nLevel			キャラレベル
		@param	int						lbsLv			リミットブレイクスキルレベル
		@param	int						nPlusPow		プラス値:攻撃
		@param	int						nPlusHP			プラス値:体力
		@param	int						nLOLevel		プラス値:限界突破値
		@note
	*/
    //----------------------------------------------------------------------------
    public bool CharaSetupFromParam(MasterDataParamChara cMasterData, int nLevel, int lbsLv, int nPlusPow, int nPlusHP, int nLOLevel)
    {
        m_CharaMasterDataParam = cMasterData;
        m_bHasCharaMasterDataParam = (null != m_CharaMasterDataParam);

        if (m_CharaMasterDataParam == null)
        {
            Debug.LogError("CharaSetup Error! - InstanceNone!! ");
            return false;
        }

        // @change Developer 2015/09/03 ver300
        #region ==== 通常処理 ====
        int nPlusValuePow = 0;
        int nPlusValueHP = 0;

        m_CharaLevel = nLevel;
        m_CharaLBSLv = lbsLv;

        float fLimitOverHP = 0;
        float fLimitOverATK = 0;

        #region ==== スキルレベルまるめ処理 ====
        MasterDataSkillLimitBreak cSkillLimitBreak = BattleParam.m_MasterDataCache.useSkillLimitBreak(cMasterData.skill_limitbreak);
        if (cSkillLimitBreak != null)
        {
            if (lbsLv > cSkillLimitBreak.level_max)
            {
                m_CharaLBSLv = cSkillLimitBreak.level_max;
            }
        }
        #endregion

        #region ==== リミットオーバーまるめ処理 ====
        MasterDataLimitOver _masterMainLO = MasterFinder<MasterDataLimitOver>.Instance.Find((int)cMasterData.limit_over_type);
        if (_masterMainLO != null)
        {
            if (nLOLevel > _masterMainLO.limit_over_max)
            {
                nLOLevel = _masterMainLO.limit_over_max;
            }
        }
        #endregion

        m_CharaPow = CharaUtil.GetStatusValue(m_CharaMasterDataParam, nLevel, CharaUtil.VALUE.POW);
        m_CharaDef = CharaUtil.GetStatusValue(m_CharaMasterDataParam, nLevel, CharaUtil.VALUE.DEF);
        m_CharaHP = CharaUtil.GetStatusValue(m_CharaMasterDataParam, nLevel, CharaUtil.VALUE.HP);
        m_CharaLimitBreak = 0;
        m_CharaPlusPow = nPlusPow;
        m_CharaPlusDef = 0;
        m_CharaPlusHP = nPlusHP;
        m_CharaLimitOver = nLOLevel;
        m_CharaCharm = CharaLimitOver.GetParamCharm((uint)nLOLevel, cMasterData.limit_over_type);
        // レベルMAXなら限界突破の値を追加

        float fLimitOverAddHp = CharaLimitOver.GetParam((uint)nLOLevel, cMasterData.limit_over_type, (int)CharaLimitOver.EGET.ePARAM_HP);
        float fLimitOverAddAtk = CharaLimitOver.GetParam((uint)nLOLevel, cMasterData.limit_over_type, (int)CharaLimitOver.EGET.ePARAM_ATK);


        fLimitOverHP = m_CharaHP * (fLimitOverAddHp / 100);
        fLimitOverATK = m_CharaPow * (fLimitOverAddAtk / 100);

        // プラス値を算出
        nPlusValuePow = m_CharaPlusPow * GlobalDefine.PLUS_RATE_POW;
        nPlusValueHP = m_CharaPlusHP * GlobalDefine.PLUS_RATE_HP;
        #endregion

        // @add Developer 2015/09/03 ver300
        #region ==== リンクシステム処理 ====
        int nElemValuePow = 0;
        int nElemValueHP = 0;
        int nRaceValuePow = 0;
        int nRaceValueHP = 0;
        int nLinkPlusValuePow = 0;
        int nLinkPlusValueHP = 0;
        double nLinkCharm = 0;
        // リンク中の場合
        //MasterDataParamChara cLinkCharaMaster = BattleParam.m_MasterDataCache.useCharaParam(m_LinkParam.m_CharaID);
        MasterDataParamChara cLinkCharaMaster = m_LinkParam.m_cCharaMasterDataParam;
        if (cLinkCharaMaster != null)
        {
            float fWork = 0.0f;

            // 属性ボーナスを加算
            nElemValuePow = CharaLinkUtil.GetLinkUnitBonusElement(cLinkCharaMaster, m_LinkParam.m_CharaLv, (uint)m_LinkParam.m_CharaLOLevel, CharaUtil.VALUE.POW);
            nElemValueHP = CharaLinkUtil.GetLinkUnitBonusElement(cLinkCharaMaster, m_LinkParam.m_CharaLv, (uint)m_LinkParam.m_CharaLOLevel, CharaUtil.VALUE.HP);

            // 種族ボーナス:攻撃力の+%値を算出
            fWork = CharaLinkUtil.GetLinkUnitBonusRace(cLinkCharaMaster, cLinkCharaMaster.kind, CharaUtil.VALUE.POW);           // %値取得(メイン)
            fWork += CharaLinkUtil.GetLinkUnitBonusRace(cLinkCharaMaster, cLinkCharaMaster.sub_kind, CharaUtil.VALUE.POW);          // %値取得(サブ)
            fWork = InGameUtilBattle.GetDBRevisionValue(fWork);                                                                 // 数値変換
            nRaceValuePow = (int)InGameUtilBattle.AvoidErrorMultiple((float)m_CharaPow, fWork);                                         // 増加量

            // 種族ボーナス:体力の実値を取得
            nRaceValueHP = (int)CharaLinkUtil.GetLinkUnitBonusRace(cLinkCharaMaster, cLinkCharaMaster.kind, CharaUtil.VALUE.HP);        // 実値取得(メイン)
            nRaceValueHP += (int)CharaLinkUtil.GetLinkUnitBonusRace(cLinkCharaMaster, cLinkCharaMaster.sub_kind, CharaUtil.VALUE.HP);       // 実値取得(サブ)

            // +値の算出
            nLinkPlusValuePow = CharaLinkUtil.GetLinkUnitBonusPlus(m_LinkParam.m_CharaPlusPow, CharaUtil.VALUE.POW);
            nLinkPlusValueHP = CharaLinkUtil.GetLinkUnitBonusPlus(m_LinkParam.m_CharaPlusHP, CharaUtil.VALUE.HP);
            nLinkCharm = CharaLimitOver.GetParamCharm((uint)m_LinkParam.m_CharaLOLevel, cLinkCharaMaster.limit_over_type);
        }
        else
        {
            // リンク用変数の初期化
            m_LinkParam.Setup();
        }
        #endregion

#if BUILD_TYPE_DEBUG
        DebugBattleLog.writeText(DebugBattleLog.StrOpe + "キャラ基本情報"
            + "[" + cMasterData.name + "]"
            + " FixID:" + cMasterData.fix_id
            + " DrawID:" + cMasterData.draw_id
            + " LV:" + m_CharaLevel.ToString()
            + " SkillLV:" + m_CharaLBSLv.ToString()
            + " LimOverLv:" + m_CharaLimitOver.ToString()
            + " PlusPow:" + m_CharaPlusPow.ToString()
            + " PlusHp:" + m_CharaPlusHP.ToString()
            + " 属性:" + cMasterData.element.ToString()
            + " 種族1:" + cMasterData.kind.ToString()
            + " 種族2:" + cMasterData.sub_kind.ToString()
        );

        DebugBattleLog.writeText(DebugBattleLog.StrOpe + "  HP(" + (m_CharaHP + nPlusValueHP + nElemValueHP + nRaceValueHP + nLinkPlusValueHP + (int)fLimitOverHP).ToString() + ")"
            + " = LV(" + m_CharaHP.ToString() + ")"
            + " + PlusHP(" + nPlusValueHP.ToString() + ")"
            + " + LinkElem(" + nElemValueHP.ToString() + ")"
            + " + LinkRace(" + nRaceValueHP.ToString() + ")"
            + " + LinkPlus(" + nLinkPlusValueHP.ToString() + ")"
            + " + LimitOver(" + ((int)fLimitOverHP).ToString() + ")"
            );
        DebugBattleLog.writeText(DebugBattleLog.StrOpe + "  POW(" + (m_CharaPow + nPlusValuePow + nElemValuePow + nRaceValuePow + nLinkPlusValuePow + (int)fLimitOverATK).ToString() + ")"
            + " = LV(" + m_CharaPow.ToString() + ")"
            + " + PlusPow(" + nPlusValuePow.ToString() + ")"
            + " + LinkElem(" + nElemValuePow.ToString() + ")"
            + " + LinkRace(" + nRaceValuePow.ToString() + ")"
            + " + LinkPlus(" + nLinkPlusValuePow.ToString() + ")"
            + " + LimitOver(" + ((int)fLimitOverATK).ToString() + ")"
            );

        const int ADD_SKILL_COUNT_LIMIT = 50;	// スキル連結数の上限

        if (cMasterData.skill_leader != 0)
        {
            DebugBattleLog.writeText(DebugBattleLog.StrOpe + "   リーダースキル(fixid:" + cMasterData.skill_leader.ToString(), false);
            MasterDataSkillLeader master_data = BattleParam.m_MasterDataCache.useSkillLeader(cMasterData.skill_leader);
            if (master_data == null)
            {
                DebugBattleLog.writeText(DebugBattleLog.StrOpe + "ERROR!(存在しないfix_id))");
            }
            else
            {
                DebugBattleLog.writeText(DebugBattleLog.StrOpe + ")[" + master_data.name + "]" + master_data.detail);
            }
        }

        if (cMasterData.skill_limitbreak != 0)
        {
            DebugBattleLog.writeText(DebugBattleLog.StrOpe + "   リミブレスキル(fixid:" + cMasterData.skill_limitbreak.ToString(), false);
            MasterDataSkillLimitBreak master_data = BattleParam.m_MasterDataCache.useSkillLimitBreak(cMasterData.skill_limitbreak);
            if (master_data == null)
            {
                DebugBattleLog.writeText(DebugBattleLog.StrOpe + "ERROR!(存在しないfix_id))");
            }
            else
            {
                int loop_limit = ADD_SKILL_COUNT_LIMIT;
                int add_fix_id = master_data.add_fix_id;
                while (add_fix_id != 0)
                {
                    DebugBattleLog.writeText(DebugBattleLog.StrOpe + "+" + add_fix_id.ToString(), false);
                    MasterDataSkillLimitBreak add_master_data = BattleParam.m_MasterDataCache.useSkillLimitBreak((uint)add_fix_id);
                    if (add_master_data == null)
                    {
                        DebugBattleLog.writeText(DebugBattleLog.StrOpe + "ERROR!(存在しないfix_id))");
                        break;
                    }

                    add_fix_id = add_master_data.add_fix_id;
                    loop_limit--;
                    if (loop_limit <= 0)
                    {
                        DebugBattleLog.writeText(DebugBattleLog.StrOpe + "ERROR!(無限ループ))");
                    }
                }

                DebugBattleLog.writeText(DebugBattleLog.StrOpe + ")[" + master_data.name + "]" + master_data.detail);
            }
        }

        if (cMasterData.skill_active0 != 0)
        {
            DebugBattleLog.writeText(DebugBattleLog.StrOpe + "   ノーマルスキル1(fixid:" + cMasterData.skill_active0.ToString(), false);
            MasterDataSkillActive master_data = BattleParam.m_MasterDataCache.useSkillActive(cMasterData.skill_active0);
            if (master_data == null)
            {
                DebugBattleLog.writeText(DebugBattleLog.StrOpe + "ERROR!(存在しないfix_id))");
            }
            else
            {
                DebugBattleLog.writeText(DebugBattleLog.StrOpe + ")[" + master_data.name + "]" + master_data.detail);
            }
        }

        if (cMasterData.skill_active1 != 0)
        {
            DebugBattleLog.writeText(DebugBattleLog.StrOpe + "   ノーマルスキル2(fixid:" + cMasterData.skill_active1.ToString(), false);
            MasterDataSkillActive master_data = BattleParam.m_MasterDataCache.useSkillActive(cMasterData.skill_active1);
            if (master_data == null)
            {
                DebugBattleLog.writeText(DebugBattleLog.StrOpe + "ERROR!(存在しないfix_id))");
            }
            else
            {
                DebugBattleLog.writeText(DebugBattleLog.StrOpe + ")[" + master_data.name + "]" + master_data.detail);
            }
        }

        if (cMasterData.skill_passive != 0)
        {
            DebugBattleLog.writeText(DebugBattleLog.StrOpe + "   パッシブスキル(fixid:" + cMasterData.skill_passive.ToString(), false);
            MasterDataSkillPassive master_data = BattleParam.m_MasterDataCache.useSkillPassive(cMasterData.skill_passive);
            if (master_data == null)
            {
                DebugBattleLog.writeText(DebugBattleLog.StrOpe + "ERROR!(存在しないfix_id))");
            }
            else
            {
                int loop_limit = ADD_SKILL_COUNT_LIMIT;
                int add_fix_id = master_data.add_fix_id;
                while (add_fix_id != 0)
                {
                    DebugBattleLog.writeText(DebugBattleLog.StrOpe + "+" + add_fix_id.ToString(), false);
                    MasterDataSkillPassive add_master_data = BattleParam.m_MasterDataCache.useSkillPassive((uint)add_fix_id);
                    if (add_master_data == null)
                    {
                        DebugBattleLog.writeText(DebugBattleLog.StrOpe + "ERROR!(存在しないfix_id))");
                        break;
                    }

                    add_fix_id = add_master_data.add_fix_id;
                    loop_limit--;
                    if (loop_limit <= 0)
                    {
                        DebugBattleLog.writeText(DebugBattleLog.StrOpe + "ERROR!(無限ループ))");
                    }
                }

                DebugBattleLog.writeText(DebugBattleLog.StrOpe + ")[" + master_data.name + "]" + master_data.detail);
            }
        }

        if (cLinkCharaMaster != null)
        {
            DebugBattleLog.writeText(DebugBattleLog.StrOpe + " リンクキャラ"
                + "[" + cLinkCharaMaster.name + "]"
                + " FixID:" + cLinkCharaMaster.fix_id
                + " DrawID:" + cLinkCharaMaster.draw_id
                + " LV:" + m_LinkParam.m_CharaLv.ToString()
                + " LimOverLv:" + m_LinkParam.m_CharaLOLevel.ToString()
                + " PlusPow:" + m_LinkParam.m_CharaPlusPow.ToString()
                + " PlusHp:" + m_LinkParam.m_CharaPlusHP.ToString()
                + " LinkPoint:" + m_LinkParam.m_CharaLinkPoint.ToString()
            );

            if (cLinkCharaMaster.link_skill_active != 0)
            {
                DebugBattleLog.writeText(DebugBattleLog.StrOpe + "    リンクスキル(fixid:" + cLinkCharaMaster.link_skill_active.ToString(), false);
                MasterDataSkillActive master_data = BattleParam.m_MasterDataCache.useSkillActive(cLinkCharaMaster.link_skill_active);
                if (master_data == null)
                {
                    DebugBattleLog.writeText(DebugBattleLog.StrOpe + "ERROR!(存在しないfix_id))");
                }
                else
                {
                    DebugBattleLog.writeText(DebugBattleLog.StrOpe + ")[" + master_data.name + "]" + master_data.detail);
                }
            }

            if (cLinkCharaMaster.link_skill_passive != 0)
            {
                DebugBattleLog.writeText(DebugBattleLog.StrOpe + "    リンクパッシブスキル(fixid:" + cLinkCharaMaster.link_skill_passive.ToString(), false);
                MasterDataSkillPassive master_data = BattleParam.m_MasterDataCache.useSkillPassive(cLinkCharaMaster.link_skill_passive);
                if (master_data == null)
                {
                    DebugBattleLog.writeText(DebugBattleLog.StrOpe + "ERROR!(存在しないfix_id))");
                }
                else
                {
                    int loop_limit = ADD_SKILL_COUNT_LIMIT;
                    int add_fix_id = master_data.add_fix_id;
                    while (add_fix_id != 0)
                    {
                        DebugBattleLog.writeText(DebugBattleLog.StrOpe + "+" + add_fix_id.ToString(), false);
                        MasterDataSkillPassive add_master_data = BattleParam.m_MasterDataCache.useSkillPassive((uint)add_fix_id);
                        if (add_master_data == null)
                        {
                            DebugBattleLog.writeText(DebugBattleLog.StrOpe + "ERROR!(存在しないfix_id))");
                            break;
                        }

                        add_fix_id = add_master_data.add_fix_id;
                        loop_limit--;
                        if (loop_limit <= 0)
                        {
                            DebugBattleLog.writeText(DebugBattleLog.StrOpe + "ERROR!(無限ループ))");
                        }
                    }

                    DebugBattleLog.writeText(DebugBattleLog.StrOpe + ")[" + master_data.name + "]" + master_data.detail);
                }
            }
        }
#endif //BUILD_TYPE_DEBUG


        // 攻撃力、体力の増加値を加算
        m_CharaPow += nPlusValuePow + nElemValuePow + nRaceValuePow + nLinkPlusValuePow + (int)fLimitOverATK;
        m_CharaHP += nPlusValueHP + nElemValueHP + nRaceValueHP + nLinkPlusValueHP + (int)fLimitOverHP;
        m_CharaCharm += nLinkCharm;

        if (m_CharaPow > GlobalDefine.VALUE_MAX_POW)
        {
            m_CharaPow = GlobalDefine.VALUE_MAX_POW;
        }

        if (m_CharaHP > GlobalDefine.VALUE_MAX_HP)
        {
            m_CharaHP = GlobalDefine.VALUE_MAX_HP;
        }

        return true;
    }
Ejemplo n.º 9
0
    //----------------------------------------------------------------------------

    /*!
     *  @brief		アクティブスキルの発動情報からリンクスキルの発動情報作成
     */
    //----------------------------------------------------------------------------
    public void ActivityLinkSkill(SkillRequestParam active_skill_request_param)
    {
        m_SkillRequestLink.clearRequest();

        //--------------------------------
        // スキル情報の選定完了
        //--------------------------------
        int link_skill_num = CheckLinkSkillNum(active_skill_request_param, m_SkillOwner);

        if (link_skill_num <= 0)
        {
            return;
        }

        //--------------------------------
        // リンクスキル発動情報設定
        //--------------------------------
        int  nSkillPower = 0;
        uint unRandMin   = 0;
        uint unRandMax   = 0;

        for (int num = 0; num < (int)GlobalDefine.PartyCharaIndex.MAX; ++num)
        {
            if (m_SkillOwner[num] == false)
            {
                continue;
            }

            // リンクキャラを取得
            CharaOnce            baseChara      = BattleParam.m_PlayerParty.getPartyMember((GlobalDefine.PartyCharaIndex)num, CharaParty.CharaCondition.SKILL_ACTIVE);
            MasterDataParamChara linkCharaParam = BattleParam.m_MasterDataCache.useCharaParam(baseChara.m_LinkParam.m_CharaID);
            if (linkCharaParam == null)
            {
                continue;
            }

            // リンクキャラのリンクスキルを取得
            MasterDataSkillActive skillActiveParam = BattleParam.m_MasterDataCache.useSkillActive(linkCharaParam.link_skill_active);
            if (skillActiveParam == null)
            {
                continue;
            }

            // リンクスキルを構築
            BattleSkillActivity skillActivity = new BattleSkillActivity();
            if (skillActivity != null)
            {
                // 共通情報を設定
                skillActivity.m_SkillParamOwnerNum = (GlobalDefine.PartyCharaIndex)num;      // 発動者(パーティキャラ)
                skillActivity.m_SkillParamFieldID  = InGameDefine.SELECT_NONE;               // フィールドID(ブーストパネルの影響は受けない)
                skillActivity.m_SkillParamSkillID  = skillActiveParam.fix_id;                // ノーマルスキルID
                skillActivity.m_SkillType          = ESKILLTYPE.eLINK;                       // 発動スキルの種類

                skillActivity.m_Element = skillActiveParam.skill_element;                    // 基本情報:属性
                skillActivity.m_Type    = skillActiveParam.skill_type;                       // 基本情報:スキルタイプ
                skillActivity.m_Effect  = skillActiveParam.effect;                           // 基本情報:エフェクト

                skillActivity.m_skill_chk_atk_combo = MasterDataDefineLabel.BoolType.ENABLE; // 攻撃情報:攻撃側:コンボレートの影響

                // @change Developer v320 リンクスキル振れ幅対応
                if (skillActiveParam.Is_skill_active())
                {
                    // 振れ幅が設定してある場合
                    if (skillActiveParam.skill_value_rand != 0)
                    {
                        nSkillPower = skillActiveParam.skill_value + skillActiveParam.skill_value_rand;
                        if (nSkillPower < 0)
                        {
                            nSkillPower = 0;
                        }

                        // 最小値と最大値を確定:基準値より高い場合
                        if (nSkillPower > skillActiveParam.skill_value)
                        {
                            unRandMin = (uint)skillActiveParam.skill_value;
                            unRandMax = (uint)nSkillPower;
                        }
                        else
                        {
                            unRandMin = (uint)nSkillPower;
                            unRandMax = (uint)skillActiveParam.skill_value;
                        }

                        // スキル威力確定:振れ幅算出
                        skillActivity.m_skill_power = (int)RandManager.GetRand(unRandMin, unRandMax + 1);

                        // 効果値によるエフェクトの切り替え
                        skillActivity.m_Effect = InGameUtilBattle.SetSkillEffectToValue(skillActivity.m_Effect, skillActivity.m_Type, skillActivity.m_skill_power);
                    }
                    else
                    {
                        skillActivity.m_skill_power = skillActiveParam.skill_value;
                    }
                }

                // クリティカル判定
                if (BattleSceneUtil.checkChancePercent(skillActiveParam.skill_critical_odds))
                {
                    skillActivity.m_bCritical = true;
                }
                else
                {
                    skillActivity.m_bCritical = false;
                }

                m_SkillRequestLink.addSkillRequest(skillActivity);
            }
        }
    }