/// <summary> /// ベースユニットとして選択できるか /// </summary> /// <param name="_unit"></param> /// <returns></returns> private bool CheckBaseUnit(PacketStructUnit _unit) { UnitGridParam unit = UserDataAdmin.Instance.SearchUnitGridParam(_unit.unique_id); if (unit == null) { return(false); } if (unit.master == null) { return(false); } MasterDataLimitOver cLimitOver = MasterDataUtil.GetLimitOverFromID(unit.master.limit_over_type); if (cLimitOver == null) { return(false); } if (unit.limitover_lv >= cLimitOver.limit_over_max) { return(false); } return(true); }
//---------------------------------------------------------------------------- /*! * @brief 限界突破パラメーター取得 */ //---------------------------------------------------------------------------- static public double GetParamCharm(uint nLimitOverLevel, int nLimitOverType) { if (nLimitOverType == 0) { return(0); } MasterDataLimitOver cLimitOverMaster = MasterDataUtil.GetLimitOverFromID(nLimitOverType); if (cLimitOverMaster == null) { return(0); } // 成長タイプ MasterDataDefineLabel.LimitOverCurveType nGrowType = cLimitOverMaster.limit_grow; // 限界突破の最大値 int fLimitOverMax = cLimitOverMaster.limit_over_max; //-------------------------------- // 成長曲線タイプでべき乗係数を変化 //-------------------------------- float fRate = 1.0f; switch (nGrowType) { case MasterDataDefineLabel.LimitOverCurveType.NONE: fRate = 0.0f; break; case MasterDataDefineLabel.LimitOverCurveType.NORMAL: fRate = 1.0f; break; case MasterDataDefineLabel.LimitOverCurveType.PRECOCITY: fRate = 0.7f; break; case MasterDataDefineLabel.LimitOverCurveType.LATE_DEVELOPMENT: fRate = 1.5f; break; } int nMaxRate = 0; double dParamRate = 0; nMaxRate = cLimitOverMaster.limit_over_max_charm; if (nLimitOverLevel > 0) { double dRate = Math.Floor(nMaxRate * Mathf.Pow((float)nLimitOverLevel / (float)fLimitOverMax, fRate) * 10); dParamRate = dRate / 10; if (dParamRate > nMaxRate) { dParamRate = nMaxRate; } } return(dParamRate); }
private void setParam(CharaOnce baseChara, MasterDataParamChara _masterMain, MasterDataLimitOver _masterMainLO, PacketStructUnit _subUnit = null, int battleHP = 0, int battleHPMax = 0, int battleATK = -1) { /** * メインユニット情報 */ { string levelFormat = GameTextUtil.GetText("unit_status17"); Level = string.Format(levelFormat, baseChara.m_CharaLevel, _masterMain.level_max); } if (battleHPMax != 0) { Hp = string.Format(GameTextUtil.GetText("unit_status_battle1"), battleHP, battleHPMax); } else { if (baseChara.m_CharaPlusHP != 0) { Hp = string.Format(GameTextUtil.GetText("unit_status19"), baseChara.m_CharaHP, baseChara.m_CharaPlusHP); } else { Hp = string.Format("{0}", baseChara.m_CharaHP); } } if (battleATK >= 0) { Atk = string.Format(GameTextUtil.GetText("unit_status_battle2"), battleATK); } else { if (baseChara.m_CharaPlusPow != 0) { Atk = string.Format(GameTextUtil.GetText("unit_status19"), baseChara.m_CharaPow, baseChara.m_CharaPlusPow); } else { Atk = string.Format("{0}", baseChara.m_CharaPow); } } int _cost = _masterMain.party_cost; if (_subUnit != null) { _cost += CharaLinkUtil.GetLinkUnitCost(_subUnit.id); } Cost = _cost.ToString(); Charm = string.Format(GameTextUtil.GetText("kyouka_text1"), baseChara.m_CharaCharm.ToString("F1")); Lo = baseChara.m_CharaLimitOver.ToString(); LoMax = _masterMainLO.limit_over_max.ToString(); }
/*==========================================================================*/ /* func */ /*==========================================================================*/ //---------------------------------------------------------------------------- /*! * @brief 限界突破パラメーター取得 */ //---------------------------------------------------------------------------- static public float GetParam(uint nLimitOverLevel, int nLimitOverType, int nLimitOverParam) { if (nLimitOverType <= 0) { return(0); } // nLimitOverTypeはFixIDとして値を受け取っています MasterDataLimitOver cLimitOverMaster = MasterDataUtil.GetLimitOverFromID(nLimitOverType); if (cLimitOverMaster == null) { return(0); } // 成長タイプ MasterDataDefineLabel.LimitOverCurveType nGrowType = cLimitOverMaster.limit_grow; //-------------------------------- // 成長曲線タイプでべき乗係数を変化 //-------------------------------- float fRate = 1.0f; switch (nGrowType) { case MasterDataDefineLabel.LimitOverCurveType.NONE: fRate = 0.0f; break; case MasterDataDefineLabel.LimitOverCurveType.NORMAL: fRate = 1.0f; break; case MasterDataDefineLabel.LimitOverCurveType.PRECOCITY: fRate = 0.7f; break; case MasterDataDefineLabel.LimitOverCurveType.LATE_DEVELOPMENT: fRate = 1.5f; break; } int nMaxRate = 0; float nParamRate = 0; // 限界突破の最大値 int fLimitOverMax = cLimitOverMaster.limit_over_max; switch (nLimitOverParam) { case (int)EGET.ePARAM_HP: // HP上昇値 nMaxRate = cLimitOverMaster.limit_over_max_hp; if (nLimitOverLevel > 0) { nParamRate = (nMaxRate * Mathf.Pow((float)nLimitOverLevel / (float)fLimitOverMax, fRate)); } break; case (int)EGET.ePARAM_ATK: // ATK上昇値 nMaxRate = cLimitOverMaster.limit_over_max_atk; if (nLimitOverLevel > 0) { nParamRate = (nMaxRate * Mathf.Pow((float)nLimitOverLevel / (float)fLimitOverMax, fRate)); } break; case (int)EGET.ePARAM_COST: // COST上昇値 nMaxRate = cLimitOverMaster.limit_over_max_cost; if (nLimitOverLevel > 0) { nParamRate = (int)(nMaxRate * Mathf.Pow((float)nLimitOverLevel / (float)fLimitOverMax, fRate)); } break; case (int)EGET.ePARAM_LIMITOVER_MAX: // 限界突破最大値 nParamRate = fLimitOverMax; break; } return(nParamRate); }
public void GetLimitOverFromID() { MasterDataLimitOver resMasterDataLimitOver = MasterDataUtil.GetLimitOverFromID(GetLimitOverFromID_limit_over_type); Debug.Log("GetLimitOverFromID(" + GetLimitOverFromID_limit_over_type + ") " + System.Text.RegularExpressions.Regex.Unescape(JsonMapper.ToJson(resMasterDataLimitOver))); }
public void setup(MasterDataParamChara _chara, MasterDataParamCharaEvol _evolve = null, Texture2D _charaTexture = null, bool nameView = true) { charaMaster = _chara; evolMaster = _evolve; charaTexture = _charaTexture; limitOverMaster = MasterFinder <MasterDataLimitOver> .Instance.Find((int)charaMaster.limit_over_type); IsViewNamePanel = nameView; IsViewMaterialPanel = false; IsViewFloatWindow = false; if (evolMaster != null) { IsViewMaterialPanel = true; MaterialValue = ""; MaterialList.Clear(); MaterialLabelX = -190; if (evolMaster.unit_id_parts1 != 0) { addMaterial(evolMaster.unit_id_parts1); MaterialLabelX += 64; } if (evolMaster.unit_id_parts2 != 0) { addMaterial(evolMaster.unit_id_parts2); MaterialLabelX += 64; } if (evolMaster.unit_id_parts3 != 0) { addMaterial(evolMaster.unit_id_parts3); MaterialLabelX += 64; } if (evolMaster.unit_id_parts4 != 0) { addMaterial(evolMaster.unit_id_parts4); MaterialLabelX += 64; } } charaOnce = new CharaOnce(); charaOnce.CharaSetupFromID( charaMaster.fix_id, (int)charaMaster.level_max, (int)0, (int)limitOverMaster.limit_over_max, 0, 0, 0, 0, 0, 0, 0, 0 ); Level = string.Format(GameTextUtil.GetText("unit_status16"), charaOnce.m_CharaLevel, charaMaster.level_max); Hp = charaOnce.m_CharaHP.ToString(); HpPlus = ""; Atk = charaOnce.m_CharaPow.ToString(); AtkPlus = ""; Cost = charaMaster.party_cost.ToString(); LimitOver = string.Format(GameTextUtil.GetText("unit_status16"), limitOverMaster.limit_over_max, limitOverMaster.limit_over_max); Charm = charaOnce.m_CharaCharm.ToString("F1"); ProfileMessage = charaMaster.detail.ReplaceSpaceTag(29).NoLineBreakTag(); }
public void setupUnit(uint unit_id, PacketStructUnit _mainUnit, PacketStructUnit _subUnit) { MasterDataParamChara _masterMain = MasterFinder <MasterDataParamChara> .Instance.Find((int)unit_id); if (_masterMain == null) { return; } MasterDataLimitOver _masterMainLO = MasterFinder <MasterDataLimitOver> .Instance.Find((int)_masterMain.limit_over_type); if (_masterMainLO == null) { return; } CHARALINK_TYPE linkType = CHARALINK_TYPE.CHARALINK_TYPE_NONE; CharaOnce m_CharaParam = new CharaOnce(); if (_mainUnit == null) { m_CharaParam.CharaSetupFromID( unit_id, _masterMain.level_max, 0, _masterMainLO.limit_over_max, 0, 0, 0, 0, 0, 0, 0, 0 ); } else { PacketStructUnit _parentUnit = null; if (_mainUnit.link_info == (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_LINK) { _parentUnit = UserDataAdmin.Instance.SearchChara(_mainUnit.link_unique_id); } if (_mainUnit.link_info == (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_BASE && _subUnit != null) { m_CharaParam.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 (_mainUnit.link_info == (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_LINK && _parentUnit != null) { m_CharaParam.CharaSetupFromID( _mainUnit.id, (int)_mainUnit.level, (int)_mainUnit.limitbreak_lv, (int)_mainUnit.limitover_lv, (int)_mainUnit.add_pow, (int)_mainUnit.add_hp, _parentUnit.id, (int)_parentUnit.level, (int)_parentUnit.add_pow, (int)_parentUnit.add_hp, (int)_parentUnit.link_point, (int)_parentUnit.limitover_lv ); } else { m_CharaParam.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 ); } linkType = (CHARALINK_TYPE)_mainUnit.link_info; } switch (linkType) { case CHARALINK_TYPE.CHARALINK_TYPE_BASE: case CHARALINK_TYPE.CHARALINK_TYPE_NONE: SetLinkEffectInfo(m_CharaParam, _masterMain, false); setActiveGray(true); break; case CHARALINK_TYPE.CHARALINK_TYPE_LINK: SetLinkEffectInfo(m_CharaParam, _masterMain, true); setActiveGray(false); break; } }
public void setupChara(uint unit_id, StatusType _type, uint limitover_lv = 0, uint plus_pow = 0, uint plus_hp = 0) { MasterDataParamChara _masterMain = MasterFinder <MasterDataParamChara> .Instance.Find((int)unit_id); if (_masterMain == null) { return; } MasterDataLimitOver _masterMainLO = MasterFinder <MasterDataLimitOver> .Instance.Find((int)_masterMain.limit_over_type); if (_masterMainLO == null) { return; } CharaOnce baseChara = new CharaOnce(); if (_type == StatusType.LV_1) { baseChara.CharaSetupFromID( unit_id, (int)1, (int)0, (int)limitover_lv, (int)plus_pow, (int)plus_hp, 0, 0, 0, 0, 0, 0 ); } else { int _limitBreakLevel = 0; if (_masterMain.skill_limitbreak != 0) { MasterDataSkillLimitBreak _masterLimitBreak = MasterFinder <MasterDataSkillLimitBreak> .Instance.Find((int)_masterMain.skill_limitbreak); _limitBreakLevel = _masterLimitBreak.level_max; } baseChara.CharaSetupFromID( unit_id, (int)_masterMain.level_max, (int)_limitBreakLevel, (int)_masterMainLO.limit_over_max, (int)GlobalDefine.PLUS_MAX, (int)GlobalDefine.PLUS_MAX, 0, 0, 0, 0, 0, 0 ); } setParam(baseChara, _masterMain, _masterMainLO); }
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 setupUnit(PacketStructUnit _mainUnit, PacketStructUnit _subUnit, LinkParamType _type) { 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; } CHARALINK_TYPE linkType = CHARALINK_TYPE.CHARALINK_TYPE_NONE; PacketStructUnit _parentUnit = null; if (_mainUnit.link_info == (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_LINK) { _parentUnit = UserDataAdmin.Instance.SearchChara(_mainUnit.link_unique_id); } m_CharaParam = new CharaOnce(); m_CharaLOParam = null; MasterDataParamChara _masterSub = null; if (_mainUnit.link_info == (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_BASE && _subUnit != null) { m_CharaParam.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 ); _masterSub = MasterFinder <MasterDataParamChara> .Instance.Find((int)_subUnit.id); if (_masterSub != null) { IconSelect = MainMenuUtil.GetElementCircleSprite(_masterSub.element); } } else if (_mainUnit.link_info == (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_LINK && _parentUnit != null) { m_CharaParam.CharaSetupFromID( _mainUnit.id, (int)_mainUnit.level, (int)_mainUnit.limitbreak_lv, (int)_mainUnit.limitover_lv, (int)_mainUnit.add_pow, (int)_mainUnit.add_hp, _parentUnit.id, (int)_parentUnit.level, (int)_parentUnit.add_pow, (int)_parentUnit.add_hp, (int)_parentUnit.link_point, (int)_parentUnit.limitover_lv ); } else { m_CharaParam.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 ); } linkType = (CHARALINK_TYPE)_mainUnit.link_info; IsViewParent = false; AllClear(); switch (_type) { case LinkParamType.Link: switch (linkType) { case CHARALINK_TYPE.CHARALINK_TYPE_BASE: AddUnitDataLink(m_CharaParam, _masterMain); AddRaceBonus(_masterSub); AddLinkSkill(_masterSub, (uint)m_CharaParam.m_LinkParam.m_CharaLinkPoint); AddLinkPassive(_masterSub); setActiveGray(false); break; case CHARALINK_TYPE.CHARALINK_TYPE_LINK: SetLinkParent(m_CharaParam); setActiveGray(false); break; case CHARALINK_TYPE.CHARALINK_TYPE_NONE: SetLinkNone(); break; } break; case LinkParamType.LinkEffect: if (_masterMain.link_enable == MasterDataDefineLabel.BoolType.ENABLE) { switch (linkType) { case CHARALINK_TYPE.CHARALINK_TYPE_BASE: case CHARALINK_TYPE.CHARALINK_TYPE_NONE: AddLinkEffectInfo(m_CharaParam, _masterMain, false); AddRaceBonus(_masterMain); AddLinkSkill(_masterMain, 0); AddLinkPassive(_masterMain); setActiveGray(true); break; case CHARALINK_TYPE.CHARALINK_TYPE_LINK: AddLinkEffectInfo(m_CharaParam, _masterMain, true); AddRaceBonus(_masterMain); AddLinkSkill(_masterMain, (uint)m_CharaParam.m_LinkParam.m_CharaLinkPoint); AddLinkPassive(_masterMain); setActiveGray(false); break; } } else { SetLinkDisable(); } break; } }
private void setParam(CharaOnce baseChara, MasterDataParamChara _masterMain, MasterDataLimitOver _masterMainLO, MasterDataSkillLimitBreak _masterMainLB, PacketStructUnit _subUnit = null, CharaOnce prevUnit = null) { /** * メインユニット情報 */ { string levelFormat = GameTextUtil.GetText("unit_status17"); Level = string.Format(levelFormat, baseChara.m_CharaLevel, _masterMain.level_max); } { if (baseChara.m_CharaPlusHP != 0) { Hp = string.Format(GameTextUtil.GetText("unit_status19"), baseChara.m_CharaHP, baseChara.m_CharaPlusHP); } else { Hp = string.Format("{0}", baseChara.m_CharaHP); } } { if (baseChara.m_CharaPlusPow != 0) { Atk = string.Format(GameTextUtil.GetText("unit_status19"), baseChara.m_CharaPow, baseChara.m_CharaPlusPow); } else { Atk = string.Format("{0}", baseChara.m_CharaPow); } } int _cost = _masterMain.party_cost; if (_subUnit != null) { _cost += CharaLinkUtil.GetLinkUnitCost(_subUnit.id); } Cost = _cost.ToString(); Charm = baseChara.m_CharaCharm.ToString("F1"); int limitBreakSkill = 0; int limitBreakSkillMax = 0; if (_masterMainLB != null) { limitBreakSkill = baseChara.m_CharaLBSLv + 1; limitBreakSkillMax = _masterMainLB.level_max + 1; } Aslv = limitBreakSkill.ToString(); AslvMax = limitBreakSkillMax.ToString(); Lo = baseChara.m_CharaLimitOver.ToString(); LoMax = _masterMainLO.limit_over_max.ToString(); if (prevUnit != null) { if (baseChara.m_CharaHP > prevUnit.m_CharaHP) { Hp = string.Format(GameTextUtil.GetText("kyouka_text1"), Hp); } if (baseChara.m_CharaPow > prevUnit.m_CharaPow) { Atk = string.Format(GameTextUtil.GetText("kyouka_text1"), Atk); } if (_cost > prevUnit.m_CharaMasterDataParam.party_cost) { Cost = string.Format(GameTextUtil.GetText("kyouka_text1"), Cost); } if (baseChara.m_CharaCharm > prevUnit.m_CharaCharm) { Charm = string.Format(GameTextUtil.GetText("kyouka_text1"), baseChara.m_CharaCharm.ToString("F1")); } } }
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); }
private CharaOnce setParam() { int mainLv; int mainLOLv; limitOverMaster = MasterFinder <MasterDataLimitOver> .Instance.Find((int)charaMaster.limit_over_type); CharaOnce charaOnce = new CharaOnce(); if (m_mainUnit == null) { mainLv = 1; mainLOLv = 0; if (lvMax == true) { mainLv = charaMaster.level_max; mainLOLv = limitOverMaster.limit_over_max; } charaOnce.CharaSetupFromID( m_UnitId, mainLv, 0, mainLOLv, 0, 0, 0, 0, 0, 0, 0, 0 ); } else { mainLv = (int)m_mainUnit.level; mainLOLv = (int)m_mainUnit.limitover_lv; if (lvMax == true) { mainLv = charaMaster.level_max; mainLOLv = limitOverMaster.limit_over_max; } if (m_mainUnit.link_info == (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_BASE && m_subUnit != null) { charaOnce.CharaSetupFromID( m_UnitId, mainLv, (int)m_mainUnit.limitbreak_lv, mainLOLv, (int)m_mainUnit.add_pow, (int)m_mainUnit.add_hp, m_subUnit.id, (int)m_subUnit.level, (int)m_subUnit.add_pow, (int)m_subUnit.add_hp, (int)m_mainUnit.link_point, (int)m_subUnit.limitover_lv ); } else { charaOnce.CharaSetupFromID( charaMaster.fix_id, mainLv, (int)m_mainUnit.limitbreak_lv, mainLOLv, (int)m_mainUnit.add_pow, (int)m_mainUnit.add_hp, 0, 0, 0, 0, 0, 0 ); } } Level = string.Format(GameTextUtil.GetText("unit_status16"), charaOnce.m_CharaLevel, charaMaster.level_max); Hp = charaOnce.m_CharaHP.ToString(); if (charaOnce.m_CharaPlusHP != 0) { Hp = string.Format(GameTextUtil.GetText("unit_status19"), charaOnce.m_CharaHP, charaOnce.m_CharaPlusHP); } Atk = charaOnce.m_CharaPow.ToString(); if (charaOnce.m_CharaPlusPow != 0) { Atk = string.Format(GameTextUtil.GetText("unit_status19"), charaOnce.m_CharaPow, charaOnce.m_CharaPlusPow); } int _cost = charaMaster.party_cost; if (m_subUnit != null) { _cost += CharaLinkUtil.GetLinkUnitCost(m_subUnit.id); } Cost = _cost.ToString(); LimitOver = string.Format(GameTextUtil.GetText("unit_status16"), charaOnce.m_CharaLimitOver, limitOverMaster.limit_over_max); Charm = charaOnce.m_CharaCharm.ToString("F1"); if (lvMax == true) { Level = string.Format(GameTextUtil.GetText("kyouka_text1"), Level); Hp = string.Format(GameTextUtil.GetText("kyouka_text1"), Hp); Atk = string.Format(GameTextUtil.GetText("kyouka_text1"), Atk); Cost = string.Format(GameTextUtil.GetText("kyouka_text1"), Cost); LimitOver = string.Format(GameTextUtil.GetText("kyouka_text1"), LimitOver); Charm = string.Format(GameTextUtil.GetText("kyouka_text1"), Charm); } return(charaOnce); }