/// <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); } } }
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); }
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]; }
//----------------------------------------------------------------------- /*! * @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); }
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; } } }
//---------------------------------------------------------------------------- /*! * @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); }
//---------------------------------------------------------------------------- /*! * @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); }
//---------------------------------------------------------------------------- /*! @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; }
//---------------------------------------------------------------------------- /*! * @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); } } }