Exemplo n.º 1
0
    /// <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);
    }
Exemplo n.º 2
0
    //----------------------------------------------------------------------------

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

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

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

        m_CharaLevel = nLevel;
        m_CharaLBSLv = lbsLv;

        float fLimitOverHP = 0;
        float fLimitOverATK = 0;

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

        return true;
    }
Exemplo n.º 11
0
    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;
        }
    }
Exemplo n.º 12
0
    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"));
            }
        }
    }
Exemplo n.º 13
0
    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);
    }
Exemplo n.º 14
0
    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);
    }