//---------------------------------------------------------------------------- /*! @brief キャラ情報セットアップ:マスターデータ指定 @param MasterDataParamChara cMasterData キャラマスター @param int nLevel キャラレベル */ //---------------------------------------------------------------------------- public bool CharaSetupFromParam(MasterDataParamChara cMasterData, int nLevel) { m_CharaMasterDataParam = cMasterData; m_bHasCharaMasterDataParam = (null != m_CharaMasterDataParam); if (m_CharaMasterDataParam == null) { Debug.LogError("CharaSetup Error! - InstanceNone!! "); return false; } m_CharaLevel = nLevel; m_CharaLBSLv = 0; 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 = 0; m_CharaPlusDef = 0; m_CharaPlusHP = 0; // @add Developer 2015/09/03 ver300 // リンク用変数の初期化 m_LinkParam.m_CharaID = 0; m_LinkParam.m_CharaLv = 0; m_LinkParam.m_CharaPlusPow = 0; m_LinkParam.m_CharaPlusHP = 0; m_LinkParam.m_CharaLinkPoint = 0; 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 ステータス更新 * @note 売却のパラメータ表示部分のテキスト表記を更新 */ //---------------------------------------------------------------------------- void SetupSaleStatusValue() { //----------------------- // 選択してるユニットから合計金額と合計ユニットポイントを求める //----------------------- uint unTotalMoney = 0; uint unTotalUnitPoint = 0; uint unSelectCount = 0; m_WarningRarity = false; m_WarningBuildup = false; for (int i = 0; i < MAX_SALE_UNIT_COUNT; i++) { if (m_UnitSale.UnitList[i].m_UniqueId == 0) { continue; } PacketStructUnit _saleUnit = UserDataAdmin.Instance.SearchChara(m_UnitSale.UnitList[i].m_UniqueId); MasterDataParamChara _saleMaster = MasterFinder <MasterDataParamChara> .Instance.Find((int)_saleUnit.id); if (_saleUnit == null || _saleMaster == null) { continue; } unSelectCount++; //レアリティ★4以上のユニットが選択されていたら警告する。 if ((int)_saleMaster.rare >= (int)MasterDataDefineLabel.RarityType.STAR_4) { m_WarningRarity = true; } //ユニットが強化されていたら警告する。 if (_saleUnit.level > 1 || (_saleMaster.skill_limitbreak != 0 && _saleUnit.limitbreak_lv > 0) || _saleUnit.limitover_lv > 0 || _saleUnit.add_hp > 0 || _saleUnit.add_pow > 0) { m_WarningBuildup = true; } // コイン uint unUnitMoney = (uint)CharaUtil.GetStatusValue(_saleMaster, (int)_saleUnit.level, CharaUtil.VALUE.SALE); unTotalMoney += unUnitMoney; unTotalMoney += _saleUnit.add_pow * GlobalDefine.PLUS_SALE_COIN; unTotalMoney += _saleUnit.add_hp * GlobalDefine.PLUS_SALE_COIN; // ユニットポイント unTotalUnitPoint += (uint)_saleMaster.sales_unitpoint; // 限界突破によるコインとユニットポイントの計算 if (_saleUnit.limitover_lv > 0) { // 限界突破によるボーナスコイン double dLimitOverMaxLevel = CharaLimitOver.GetParam(0, _saleMaster.limit_over_type, (int)CharaLimitOver.EGET.ePARAM_LIMITOVER_MAX); double dLimitOverLevel = (double)_saleUnit.limitover_lv; //unTotalMoney += (uint)( unUnitMoney * nLimitOverLevel + unUnitMoney * ( nLimitOverLevel + 1 ) * ( GlobalDefine.LIMITOVER_BONUS * nLimitOverLevel / nLimitOverMaxLevel ) ); double dLoBounsMoney = CharaLimitOver.GetParamSaleLimitOverBouns(dLimitOverLevel, dLimitOverMaxLevel, unUnitMoney); unTotalMoney += (uint)dLoBounsMoney; // 限界突破によるボーナスユニットポイント unTotalUnitPoint += (uint)(_saleMaster.sales_unitpoint * dLimitOverLevel); } } m_UnitBGPanel.Money = (int)unTotalMoney; m_UnitBGPanel.Point = (int)unTotalUnitPoint; m_UnitBGPanel.SaleCount = (int)unSelectCount; m_UnitBGPanel.IsEnableResetButton = m_UnitBGPanel.IsActiveExecButton = IsSaleUnit(); }
/// <summary> /// パーティメンバー一覧の作成 /// </summary> void CreatePartyMemberUnitGroup() { PacketStructUnit[][] partys = UserDataAdmin.Instance.m_StructPartyAssign; PacketStructUnit[] party = new PacketStructUnit[(int)GlobalDefine.PartyCharaIndex.MAX - 1]; Array.Copy(partys[m_CurrentSelectPartyIndex], party, party.Length); // ユニット情報をコピー List <PartyMemberUnitContext> unitList = new List <PartyMemberUnitContext>(); foreach (PacketStructUnit unitData in party) { int index = unitList.Count; var model = new PartyMemberUnitListItemModel((uint)index); PartyMemberUnitContext unit = new PartyMemberUnitContext(model); unit.UnitData = unitData; if (unitData != null) { // ユニット画像 UnitIconImageProvider.Instance.Get( unitData.id, sprite => { unit.UnitImage = sprite; }, true); unit.LinkIcon = MainMenuUtil.GetLinkMark(unitData); unit.IsEnalbeSelect = true; MasterDataParamChara _master = MasterFinder <MasterDataParamChara> .Instance.Find((int)unitData.id); unit.IconSelect = MainMenuUtil.GetElementCircleSprite(_master.element); unit.IsElement = true; } else { unit.UnitImage = ResourceManager.Instance.Load("icon_empty2"); unit.IsEnalbeSelect = false; unit.IsElement = false; } SetupLinkChara(unit); unit.DidSelectItem = OnSelectPartyMemberUnit; unit.DidLongPressItem = OnSelectUnitLongPress; unitList.Add(unit); } unitList[0].PartyCharaIndex = GlobalDefine.PartyCharaIndex.LEADER; unitList[1].PartyCharaIndex = GlobalDefine.PartyCharaIndex.MOB_1; unitList[2].PartyCharaIndex = GlobalDefine.PartyCharaIndex.MOB_2; unitList[3].PartyCharaIndex = GlobalDefine.PartyCharaIndex.MOB_3; m_PartyMemberUnitGroup.Units = unitList; m_PartyMemberUnitGroup.OnClickReleaseAction = OnUnitRelease; m_PartyMemberUnitGroup.OnClickDetailAction = OnDetailWindow; m_PartyMemberUnitGroup.OnClickLinkAction = OnSelectLink; CharaUtil.setupCharaParty(ref m_PartyMemberUnitGroup.PartyInfo, party); // パーティ情報の設定 //DG0-4124 対応 if (TutorialManager.HasInstance) { UnitIconImageProvider.Instance.Tick(); } }
/// <summary> /// パーティ詳細情報の変更 /// </summary> void CreatePartyParam() { PacketStructUnit[][] partys = UserDataAdmin.Instance.m_StructPartyAssign; m_PartyParamPanel.m_CurrentIndex = m_UnitPartyCurrent; m_PartyParamPanel.PartyParams.Clear(); m_PartyParamPanel.OnChangedPartyParamAction = OnChangedPartyParam; List <MasterDataParamChara> charaMasterList = MasterFinder <MasterDataParamChara> .Instance.FindAll(); m_partyPanels.Clear(); for (int i = 0; i < partys.Length; ++i) { int index = i; var partyPanelModel = new PartyParamListItemModel((uint)index); PartyParamListItemContext paertParam = new PartyParamListItemContext(partyPanelModel); PartySelectGroupUnitContext party = m_PartySelectGroup.GetParty(i); m_partyPanels.Add(partyPanelModel); //-------------------------------------------- // パーティ情報 //-------------------------------------------- if (m_PartyParamPanel != null) { CharaUtil.setupCharaParty(ref paertParam.PartyInfo, party.PartyData); // パーティ情報の設定 paertParam.NameText = string.Format(GameTextUtil.GetText("questlast_text7"), party.Index + 1); paertParam.CostText = string.Format(GameTextUtil.GetText("questlast_text5"), paertParam.PartyInfo.m_PartyTotalCost , UserDataAdmin.Instance.m_StructPlayer.total_party); // Cost paertParam.CharmText = string.Format(GameTextUtil.GetText("questlast_text6"), paertParam.PartyInfo.m_PartyTotalCharm); // CHARM } //------------------------- // ユニット設定 //------------------------- List <PartyMemberUnitContext> unitList = new List <PartyMemberUnitContext>(); int unitDataIndex = 0; for (int pt_count = 0; pt_count < party.PartyData.Length; ++pt_count) { PacketStructUnit unitData = party.PartyData[pt_count]; PacketStructUnit linkData = party.PartyLinkData[pt_count]; var unitDataModel = new PartyMemberUnitListItemModel((uint)unitDataIndex++); PartyMemberUnitContext unit = new PartyMemberUnitContext(unitDataModel); unit.IsActiveStatus = true; unit.IsActiveParamText = true; if (unitData != null) { unit.CharaMaster = charaMasterList.Find((v) => v.fix_id == unitData.id); UnitIconImageProvider.Instance.Get( unitData.id, sprite => { unit.UnitImage = sprite; }); unit.UnitData = unitData; unitDataModel.OnLongPressed += () => { OnLongPressParamUnit(unit); }; } else { unit.OutSideCircleImage = ResourceManager.Instance.Load("icon_circle_deco", ResourceType.Common); unit.UnitImage = ResourceManager.Instance.Load("icon_empty2", ResourceType.Menu); unit.IsEnalbeSelect = true; } if (linkData != null && linkData.id > 0) { unit.LinkCharaMaster = charaMasterList.Find((v) => v.fix_id == linkData.id); UnitIconImageProvider.Instance.Get( linkData.id, sprite => { unit.LinkUnitImage = sprite; }); unit.IsEmptyLinkUnit = false; } else { unit.LinkOutSideCircleImage = ResourceManager.Instance.Load("icon_circle_deco", ResourceType.Common); unit.LinkUnitImage = ResourceManager.Instance.Load("icon_empty2", ResourceType.Menu); unit.IsEmptyLinkUnit = true; } // indexがm_UnitPartyCurrentとその前後の時にアイコンとステータスを更新する. if ((index == m_UnitPartyCurrent) || (index == m_UnitPartyCurrent - 1) || (index == m_UnitPartyCurrent + 1)) { MainMenuUtil.SetPartySelectUnitData(ref unit, unitData, linkData, party.PartyData); } else if (unit.OutSideCircleImage == null) { unit.OutSideCircleImage = ResourceManager.Instance.Load("icon_circle_deco", ResourceType.Common); } unitDataModel.OnClicked += () => { OnSelectParamUnit(unit); }; unitList.Add(unit); partyPanelModel.AddUnit(unitDataModel); } unitList[0].PartyCharaIndex = GlobalDefine.PartyCharaIndex.LEADER; unitList[1].PartyCharaIndex = GlobalDefine.PartyCharaIndex.MOB_1; unitList[2].PartyCharaIndex = GlobalDefine.PartyCharaIndex.MOB_2; unitList[3].PartyCharaIndex = GlobalDefine.PartyCharaIndex.MOB_3; paertParam.Units = unitList; //------------------------- // スキル //------------------------- int skillDataIndex = 0; if (unitList[0].UnitData.id > 0) { List <UnitSkillAtPartyContext> skillList = new List <UnitSkillAtPartyContext>(); var skillDataModel = new ListItemModel((uint)skillDataIndex++); UnitSkillAtPartyContext leaderSkill = new UnitSkillAtPartyContext(skillDataModel); leaderSkill.setupLeaderSkill(unitList[0].CharaMaster.skill_leader); skillList.Add(leaderSkill); paertParam.Skills = skillList; partyPanelModel.AddSkill(skillDataModel); #if BUILD_TYPE_DEBUG Debug.Log("*************** UnitSkillAtPartyContext *********************"); #endif } paertParam.SelectLinkAction = OnSelectLink; m_PartyParamPanel.PartyParams.Add(paertParam); } //-------------------------------------- // 主人公 //-------------------------------------- // アセットバンドルの読み込み uint currentHeroID = MasterDataUtil.GetCurrentHeroID(); AssetBundler.Create(). Set(string.Format("hero_{0:D4}", currentHeroID), (o) => { Texture2D texture = o.GetTexture2D(string.Format("tex_hero_perform_l_{0:D4}", currentHeroID), TextureWrapMode.Clamp); Texture2D texture_mask = o.GetTexture2D(string.Format("tex_hero_perform_l_{0:D4}_mask", currentHeroID), TextureWrapMode.Clamp); foreach (var paertParam in m_PartyParamPanel.PartyParams) { paertParam.HeroImage = texture; paertParam.HeroImage_mask = texture_mask; } }).Load(); }
public void setupUnit(PacketStructUnit _mainUnit, PacketStructUnit _subUnit, bool bFakeLink = false, int battleHP = 0, int battleHPMax = 0, int battleATK = -1, bool expView = true) { CharaOnce baseChara = new CharaOnce(); MasterDataParamChara _masterMain = MasterFinder <MasterDataParamChara> .Instance.Find((int)_mainUnit.id); if (_masterMain == null) { return; } MasterDataLimitOver _masterMainLO = MasterFinder <MasterDataLimitOver> .Instance.Find((int)_masterMain.limit_over_type); if (_masterMainLO == null) { return; } if (_mainUnit.link_info == (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_BASE && _subUnit != null) { baseChara.CharaSetupFromID( _mainUnit.id, (int)_mainUnit.level, (int)_mainUnit.limitbreak_lv, (int)_mainUnit.limitover_lv, (int)_mainUnit.add_pow, (int)_mainUnit.add_hp, _subUnit.id, (int)_subUnit.level, (int)_subUnit.add_pow, (int)_subUnit.add_hp, (int)_mainUnit.link_point, (int)_subUnit.limitover_lv ); } else if (bFakeLink && _subUnit != null) { baseChara.CharaSetupFromID( _mainUnit.id, (int)_mainUnit.level, (int)_mainUnit.limitbreak_lv, (int)_mainUnit.limitover_lv, (int)_mainUnit.add_pow, (int)_mainUnit.add_hp, _subUnit.id, (int)_subUnit.level, (int)_subUnit.add_pow, (int)_subUnit.add_hp, (int)0, (int)_subUnit.limitover_lv ); } else { baseChara.CharaSetupFromID( _mainUnit.id, (int)_mainUnit.level, (int)_mainUnit.limitbreak_lv, (int)_mainUnit.limitover_lv, (int)_mainUnit.add_pow, (int)_mainUnit.add_hp, 0, 0, 0, 0, 0, 0 ); } if (expView == true) { //----------------------- // 次のレベルまでの経験値を算出 //----------------------- int nNowLevelExp = CharaUtil.GetStatusValue(_masterMain, (int)_mainUnit.level, CharaUtil.VALUE.EXP); int nNextLevelExp = CharaUtil.GetStatusValue(_masterMain, (int)_mainUnit.level + 1, CharaUtil.VALUE.EXP); int nLevelupExp = nNextLevelExp - nNowLevelExp; int nNextEXP = 0; float expRatio = 0.0f; if (nLevelupExp > 0) { nNextEXP = nNextLevelExp - (int)_mainUnit.exp; expRatio = (float)(nLevelupExp - nNextEXP) / nLevelupExp; } IsViewExp = true; NextExp = nNextEXP; ExpRate = expRatio; } setParam(baseChara, _masterMain, _masterMainLO, _subUnit, battleHP, battleHPMax, battleATK); }
//---------------------------------------------------------------------------- /*! @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; }
public void setup(MasterDataParamChara _master, PacketStructUnit _mainUnit, PacketStructUnit _subUnit = null, bool bFakeLink = false, bool bPink = false) { CharaOnce baseChara = new CharaOnce(); CharaOnce prevChara = null; MasterDataLimitOver _masterMainLO = MasterFinder <MasterDataLimitOver> .Instance.Find((int)_master.limit_over_type); if (_masterMainLO == null) { return; } MasterDataSkillLimitBreak _masterMainLB = MasterFinder <MasterDataSkillLimitBreak> .Instance.Find((int)_master.skill_limitbreak); CharaName = _master.name; string noFormat = GameTextUtil.GetText("unit_status1"); CharaNo = string.Format(noFormat, _master.draw_id); Rarity = (uint)_master.rare + 1; RaceImage = MainMenuUtil.GetTextKindSprite(_master.kind, false); if (_master.sub_kind != MasterDataDefineLabel.KindType.NONE) { SubRaceImage = MainMenuUtil.GetTextKindSprite(_master.sub_kind, false); } else { SubRaceImage = null; } AttributeImage = MainMenuUtil.GetTextElementSprite(_master.element); AttributeImageColor = ColorUtil.GetElementLabelColor(_master.element); if (bPink == true) { prevChara = new CharaOnce(); prevChara.CharaSetupFromID( _mainUnit.id, (int)_mainUnit.level, (int)_mainUnit.limitbreak_lv, (int)_mainUnit.limitover_lv, (int)_mainUnit.add_pow, (int)_mainUnit.add_hp, 0, 0, 0, 0, 0, 0 ); } if (_mainUnit.link_info == (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_BASE && _subUnit != null) { baseChara.CharaSetupFromID( _mainUnit.id, (int)_mainUnit.level, (int)_mainUnit.limitbreak_lv, (int)_mainUnit.limitover_lv, (int)_mainUnit.add_pow, (int)_mainUnit.add_hp, _subUnit.id, (int)_subUnit.level, (int)_subUnit.add_pow, (int)_subUnit.add_hp, (int)_mainUnit.link_point, (int)_subUnit.limitover_lv ); } else if (bFakeLink && _subUnit != null) { baseChara.CharaSetupFromID( _mainUnit.id, (int)_mainUnit.level, (int)_mainUnit.limitbreak_lv, (int)_mainUnit.limitover_lv, (int)_mainUnit.add_pow, (int)_mainUnit.add_hp, _subUnit.id, (int)_subUnit.level, (int)_subUnit.add_pow, (int)_subUnit.add_hp, (int)0, (int)_subUnit.limitover_lv ); } else { baseChara.CharaSetupFromID( _mainUnit.id, (int)_mainUnit.level, (int)_mainUnit.limitbreak_lv, (int)_mainUnit.limitover_lv, (int)_mainUnit.add_pow, (int)_mainUnit.add_hp, 0, 0, 0, 0, 0, 0 ); } if (IsViewExp == true) { //----------------------- // 次のレベルまでの経験値を算出 //----------------------- int nNowLevelExp = CharaUtil.GetStatusValue(_master, (int)_mainUnit.level, CharaUtil.VALUE.EXP); int nNextLevelExp = CharaUtil.GetStatusValue(_master, (int)_mainUnit.level + 1, CharaUtil.VALUE.EXP); int nLevelupExp = nNextLevelExp - nNowLevelExp; int nNextEXP = nNextLevelExp - (int)_mainUnit.exp; float expRatio = 0.0f; if (nNextEXP != 0) { expRatio = (float)(nLevelupExp - nNextEXP) / nLevelupExp; } NextExp = nNextEXP; ExpRate = expRatio; } setParam(baseChara, _master, _masterMainLO, _masterMainLB, _subUnit, prevChara); }
//---------------------------------------------------------------------------- /*! * @brief ステータス更新 * @note */ //---------------------------------------------------------------------------- void SetupBlendAfterStatus() { //----------------------- // 合成時のパラメータ数値表示部分を更新 //----------------------- if (m_BaseUnit != null) { MasterDataParamChara cBaseMasterData = m_BaseUnit.master; if (cBaseMasterData != null) { CharaOnce cCharaParam = new CharaOnce(); PacketStructUnit cBaseUnit = m_BaseUnit.unit; // リンクの限界突破 int nLinkLimitOverLV = 0; PacketStructUnit cLinkUnit = CharaLinkUtil.GetLinkUnit(cBaseUnit.link_unique_id); if (cLinkUnit != null) { nLinkLimitOverLV = (int)cLinkUnit.limitover_lv; } if (cBaseUnit.link_info == (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_BASE) { cCharaParam.CharaSetupFromID(cBaseUnit.id , (int)cBaseUnit.level , (int)cBaseUnit.limitbreak_lv , 0 , (int)cBaseUnit.add_pow , (int)cBaseUnit.add_hp , cLinkUnit.id , (int)cLinkUnit.level , (int)cLinkUnit.add_pow , (int)cLinkUnit.add_hp , (int)cBaseUnit.link_point , nLinkLimitOverLV ); } else { cCharaParam.CharaSetupFromID(cBaseUnit.id , (int)cBaseUnit.level , (int)cBaseUnit.limitbreak_lv , 0 , (int)cBaseUnit.add_pow , (int)cBaseUnit.add_hp , 0 , 0 , 0 , 0 , 0 , nLinkLimitOverLV ); } m_BlendLevelMaxWarning = false; if (m_BaseUnit.level >= cBaseMasterData.level_max) { m_BlendLevelMaxWarning = true; } uint unBaseAtk = (uint)cCharaParam.m_CharaPow; uint unBaseHP = (uint)cCharaParam.m_CharaHP; //----------------------- // 合成費用を算出 // 合成費用 = ( ベースキャラレベル * 100 * 素材数 ) + ( 関連キャラのプラス値合計 * 1000 ) //----------------------- m_BlendPoint = 0; m_BlendPoint += (cBaseMasterData != null) ? (uint)cBaseMasterData.limit_over_unitpoint : 0; //----------------------- // プラス値を算出 //----------------------- uint unUnitPlusHP = (uint)cCharaParam.m_CharaPlusHP; uint unUnitPlusAtk = (uint)cCharaParam.m_CharaPlusPow; //----------------------- // ユニットが持ってる総合経験値を算出 // ※今回の合成で得られる経験値含む //----------------------- int nTotalEXP = 0;// GetTotalEXP(ref Parts, fBonusRateTotal, cBaseMasterData.element); int nTotalEXPAfter = nTotalEXP + (int)cBaseUnit.exp; //----------------------- // レベルを算出 //----------------------- uint unUnitLevelMax = (uint)cBaseMasterData.level_max; uint unUnitLevel = (uint)CharaUtil.GetLevelFromExp(cBaseMasterData, nTotalEXPAfter); //----------------------- // HPとATKを算出 //----------------------- uint unBuildUpHP = 0; uint unBuildUpAtk = 0; if (cBaseUnit.link_info == (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_BASE) { //リンク親の場合はリンクキャラの値を反映しておく CharaOnce cCharaParamBuildUp = new CharaOnce(); cCharaParamBuildUp.CharaSetupFromID(cBaseUnit.id , (int)unUnitLevel , (int)cBaseUnit.limitbreak_lv , 0 , (int)unUnitPlusAtk , (int)unUnitPlusHP , cLinkUnit.id , (int)cLinkUnit.level , (int)cLinkUnit.add_pow , (int)cLinkUnit.add_hp , (int)cBaseUnit.link_point , nLinkLimitOverLV ); unBuildUpHP = (uint)cCharaParamBuildUp.m_CharaHP; unBuildUpAtk = (uint)cCharaParamBuildUp.m_CharaPow; } else { unBuildUpHP = (uint)CharaUtil.GetStatusValue(cBaseMasterData, (int)unUnitLevel, CharaUtil.VALUE.HP); unBuildUpAtk = (uint)CharaUtil.GetStatusValue(cBaseMasterData, (int)unUnitLevel, CharaUtil.VALUE.POW); //プラス値より合成後のHPとATK値を求める unBuildUpHP += unUnitPlusHP * GlobalDefine.PLUS_RATE_HP; unBuildUpAtk += unUnitPlusAtk * GlobalDefine.PLUS_RATE_POW; } //----------------------- // HPとATKの表示形式とカラーの設定 // 強化後のHP/ATK、プラス値更新があったら色つける //----------------------- //フォーマット string strFormatUp = GameTextUtil.GetText("kyouka_text1"); //値上昇時 string strFormatMax = "{0}"; //値MAX string strFormat = "{0}"; //値変更なし string strFormatPlus = "[{0}]"; string strFormatPlusNum = "+{0}"; string strUnitPlusHP = ""; string strUnitPlusHPNum = string.Format(strFormatPlusNum, unUnitPlusHP); if (unUnitPlusHP > (uint)cCharaParam.m_CharaPlusHP) { strUnitPlusHP = string.Format(strFormatUp, strUnitPlusHPNum); } else if (unUnitPlusHP == GlobalDefine.PLUS_MAX) { strUnitPlusHP = string.Format(strFormatMax, strUnitPlusHPNum); } else if (unUnitPlusHP == 0) { strUnitPlusHP = ""; } else { strUnitPlusHP = string.Format(strFormat, strUnitPlusHPNum); } if (strUnitPlusHP != string.Empty) { strUnitPlusHP = string.Format(strFormatPlus, strUnitPlusHP); } string strUnitPlusAtk = ""; string strUnitPlusAtkum = string.Format(strFormatPlusNum, unUnitPlusAtk); if (unUnitPlusAtk > (uint)cCharaParam.m_CharaPlusPow) { strUnitPlusAtk = string.Format(strFormatUp, strUnitPlusAtkum); } else if (unUnitPlusAtk == GlobalDefine.PLUS_MAX) { strUnitPlusAtk = string.Format(strFormatMax, strUnitPlusAtkum); } else if (unUnitPlusAtk == 0) { strUnitPlusAtk = ""; } else { strUnitPlusAtk = string.Format(strFormat, strUnitPlusAtkum); } if (strUnitPlusAtk != string.Empty) { strUnitPlusAtk = string.Format(strFormatPlus, strUnitPlusAtk); } m_BlendLimitOverResult = 0; m_BlendLimitOverWarning = false; m_BlendLinkPointUpFlag = false; m_BlendLinkPointMaxFlag = false; m_BlendRarityWarning = false; m_BlendPartsSameCharacter = false; m_BlendPartsSameSkill = false; // 限界突破レベル int nLimitOverCount = 1; // ベースユニットの限界突破MAXレベル int nLimitOverMaxLevel = (int)CharaLimitOver.GetParam(0, cBaseMasterData.limit_over_type, (int)CharaLimitOver.EGET.ePARAM_LIMITOVER_MAX); // uint unBaseLinkPoint = 0; //リンクの子をベースにしている場合は親のリンクポイントを参照する if (m_BaseUnit.unit.link_info == (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_LINK) { PacketStructUnit cTmpLinkUnit = CharaLinkUtil.GetLinkUnit(m_BaseUnit.unit.link_unique_id); unBaseLinkPoint = cTmpLinkUnit.link_point; } else if (m_BaseUnit.unit.link_info == (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_BASE) { unBaseLinkPoint = m_BaseUnit.unit.link_point; } //リンクポイントが最大かどうか if (unBaseLinkPoint >= CharaLinkUtil.LINK_POINT_MAX) { m_BlendLinkPointMaxFlag = true; } // ベースユニットの限界突破レベル uint nLimitOverLevel = m_BaseUnit.unit.limitover_lv + (uint)nLimitOverCount; string strBuilupLO = ""; string strBuilupCharm = ""; bool bChangeLO = false; if (nLimitOverCount > 0 && nLimitOverMaxLevel > 0) { bChangeLO = true; // 限界突破が元々MAXの場合 if (nLimitOverMaxLevel == m_BaseUnit.limitover_lv) { m_BlendLimitOverResult = (int)CharaLimitOver.RESULT_TYPE.eValueMax; } // 限界突破の上限値を超える場合 else if (nLimitOverMaxLevel < nLimitOverLevel) { m_BlendLimitOverResult = (int)CharaLimitOver.RESULT_TYPE.eValueOver; } else { m_BlendLimitOverResult = (int)CharaLimitOver.RESULT_TYPE.ePossible; } } //限界突破LV最大チェック if (nLimitOverMaxLevel < nLimitOverLevel) { nLimitOverLevel = (uint)nLimitOverMaxLevel; } // 限界突破の加算値 float fLoHp = ((float)CharaLimitOver.GetParam((uint)nLimitOverLevel, cBaseMasterData.limit_over_type, (int)CharaLimitOver.EGET.ePARAM_HP) / 100); float fLoAtk = ((float)CharaLimitOver.GetParam((uint)nLimitOverLevel, cBaseMasterData.limit_over_type, (int)CharaLimitOver.EGET.ePARAM_ATK) / 100); // ベースユニットの元々のHPと攻撃力を算出 int nCharaHP = CharaUtil.GetStatusValue(cBaseMasterData, (int)unUnitLevel, CharaUtil.VALUE.HP); int nCharaPow = CharaUtil.GetStatusValue(cBaseMasterData, (int)unUnitLevel, CharaUtil.VALUE.POW); // 限界突破のパラメーターを反映 uint unLO_HP = (uint)(nCharaHP * fLoHp); uint unLO_Atk = (uint)(nCharaPow * fLoAtk); double dLimitOverCharm = CharaLimitOver.GetParamCharm(nLimitOverLevel, cBaseMasterData.limit_over_type); //int nLimitOverCost = (int)CharaLimitOver.GetParam(nLimitOverLevel, cBaseMasterData.limit_over_type, (int)CharaLimitOver.EGET.ePARAM_COST); string strBuildUpHP = (unBuildUpHP + unLO_HP).ToString(); string strBuildUpAtk = (unBuildUpAtk + unLO_Atk).ToString(); if (unBuildUpHP > unBaseHP || nLimitOverLevel != m_BaseUnit.limitover_lv) { strBuildUpHP = string.Format(strFormatUp, strBuildUpHP); } else if (unBuildUpHP == GlobalDefine.VALUE_MAX_HP) { strBuildUpHP = string.Format(strFormatMax, strBuildUpHP); } else { strBuildUpHP = string.Format(strFormat, strBuildUpHP); } if (unBuildUpAtk > unBaseAtk || nLimitOverLevel != m_BaseUnit.limitover_lv) { strBuildUpAtk = string.Format(strFormatUp, strBuildUpAtk); } else if (unBuildUpAtk == GlobalDefine.VALUE_MAX_POW) { strBuildUpAtk = string.Format(strFormatMax, strBuildUpAtk); } else { strBuildUpAtk = string.Format(strFormat, strBuildUpAtk); } if (bChangeLO && nLimitOverLevel != m_BaseUnit.limitover_lv) { strBuilupLO = string.Format(strFormatUp, nLimitOverLevel); strBuilupCharm = string.Format(strFormatUp, dLimitOverCharm.ToString("F1")); } else { strBuilupLO = nLimitOverLevel.ToString(); strBuilupCharm = dLimitOverCharm.ToString("F1"); } //---------------------------------------- // LVカラー //---------------------------------------- string strBuildUpLevel = ""; if (unUnitLevel == cCharaParam.m_CharaMasterDataParam.level_max) { strBuildUpLevel = string.Format(strFormatUp, GameTextUtil.GetText("unit_status18")); } else { if (unUnitLevel != (uint)cCharaParam.m_CharaLevel) { strBuildUpLevel = string.Format("{0}><color=#f90974>{1}</color>/{2}", cCharaParam.m_CharaLevel, unUnitLevel, cCharaParam.m_CharaMasterDataParam.level_max); } else { strBuildUpLevel = string.Format(GameTextUtil.GetText("unit_status17"), cCharaParam.m_CharaLevel, cCharaParam.m_CharaMasterDataParam.level_max); } } m_UnitStatusPanel.Level = strBuildUpLevel; m_UnitStatusPanel.Lo = strBuilupLO; m_UnitStatusPanel.Hp = strBuildUpHP + strUnitPlusHP; m_UnitStatusPanel.Atk = strBuildUpAtk + strUnitPlusAtk; m_UnitStatusPanel.Charm = strBuilupCharm; m_UnitBGPanel.Point = (int)m_BlendPoint; } else { #if BUILD_TYPE_DEBUG Debug.LogError("MasterData None!"); #endif } } m_UnitBGPanel.TotalPoint = (int)UserDataAdmin.Instance.m_StructPlayer.have_unit_point; }
public void setup(uint unit_id, PacketStructUnit _mainUnit, PacketStructUnit _subUnit, Image Chara, Image Shadow) { lvMax = false; charaMaster = MasterFinder <MasterDataParamChara> .Instance.Find((int)unit_id); m_UnitId = unit_id; m_mainUnit = _mainUnit; m_subUnit = _subUnit; CharaOnce charaOnce = setParam(); if (_mainUnit == null) { IsExpActive = false; linkButtonEnable = false; LinkButtonColor = Color.gray; } else { //----------------------- // 次のレベルまでの経験値を算出 //----------------------- int nNowLevelExp = CharaUtil.GetStatusValue(charaMaster, (int)_mainUnit.level, CharaUtil.VALUE.EXP); int nNextLevelExp = CharaUtil.GetStatusValue(charaMaster, (int)_mainUnit.level + 1, CharaUtil.VALUE.EXP); int nLevelupExp = nNextLevelExp - nNowLevelExp; int nNextEXP = 0; float expRatio = 0.0f; if (nLevelupExp > 0) { nNextEXP = nNextLevelExp - (int)_mainUnit.exp; expRatio = (float)(nLevelupExp - nNextEXP) / nLevelupExp; } NextExp = nNextEXP; ExpRate = expRatio; IsExpActive = true; } CharaSprite = Chara.sprite; CharaMaterial = Chara.material; ShadowSprite = Shadow.sprite; ShadowMaterial = Shadow.material; CharaSpriteWidth = CharaSprite.texture.GetUnitTextureWidth(); CharaSpriteHeight = CharaSprite.texture.GetUnitTextureHeight(); ProfileMessage = charaMaster.detail.ReplaceSpaceTag(29).NoLineBreakTag(); IsViewMaterialPanel = false; IsViewFloatWindow = false; MasterDataParamCharaEvol _evolAfter = MasterDataUtil.GetCharaEvolParamFromCharaID(unit_id); if (_evolAfter != null) { IsViewMaterialPanel = true; MaterialValue = ""; MaterialList.Clear(); MaterialLabelX = 108; if (_evolAfter.unit_id_parts1 != 0) { addMaterial(_evolAfter.unit_id_parts1); MaterialLabelX += 64; } if (_evolAfter.unit_id_parts2 != 0) { addMaterial(_evolAfter.unit_id_parts2); MaterialLabelX += 64; } if (_evolAfter.unit_id_parts3 != 0) { addMaterial(_evolAfter.unit_id_parts3); MaterialLabelX += 64; } if (_evolAfter.unit_id_parts4 != 0) { addMaterial(_evolAfter.unit_id_parts4); MaterialLabelX += 64; } } ScrollRect srect = GetComponentInChildren <ScrollRect>(); if (srect != null) { srect.verticalNormalizedPosition = 1; } }