Пример #1
0
    // cInfo : 현재 주인공이 차고 있는 템. 인벤에 있는 템을 미리보기했을때 현재 착용하고 있는 템과의 비교를 해주기 위한 데이터다.

    void setStatLine(int transcendATTR, GameIDData descriptionData, int headerIndex, HeroPartsData hpd, GameIDData cInfo, int valueTypeIndex, string name, string format, bool useRound = true, string lastWord = "", int usePointNumLimit = -1)
    {
        GameValueType.Type valueType = hpd.valueTypeDic[valueTypeIndex];
        Xfloat[]           value     = hpd.getArrayValueByIndex(valueTypeIndex);

        int len = value.Length;

        if (len > 0 && value[0] > 0)
        {
            if (_statHeader[headerIndex] == false)
            {
                _statHeader[headerIndex] = true;
//				setStatHeader(headerIndex);
            }

            // 스탯 이름.
            sb1.Append("[fcd4a3]");
            sb1.Append(name);
            sb1.Append("[-]\n");

            // 현재 장비 스탯 정보.
            float defaultValue = GameValueType.getPartsApplyValue(value, valueType, descriptionData.reinforceLevel);

            if (descriptionData.totalPLevel > 0)
            {
                defaultValue = descriptionData.getTranscendValueByATTR(defaultValue, transcendATTR);
            }

            if (useRound)
            {
                defaultValue = Mathf.CeilToInt(defaultValue - 0.4f);
            }
            if (usePointNumLimit > -1 && defaultValue >= usePointNumLimit)
            {
                format = "{0:0}";
            }

            sb2.Append("[ffffff]");
            sb2.Append(string.Format(format, defaultValue));
            sb2.Append(lastWord + "[-]");

            // 강화 했을때 수치 변화를 알려주기 위한 녀석이다.
            if (_compareData != null)
            {
                Xfloat[] rValue        = _compareData.partsData.getArrayValueByIndex(valueTypeIndex);
                float    rDefaultValue = GameValueType.getPartsApplyValue(rValue, valueType, _compareData.reinforceLevel);

                if (_compareData.totalPLevel > 0)
                {
                    rDefaultValue = _compareData.getTranscendValueByATTR(rDefaultValue, transcendATTR);
                }

                if (useRound)
                {
                    rDefaultValue = Mathf.CeilToInt(rDefaultValue - 0.4f);
                }
                rDefaultValue = defaultValue - rDefaultValue;

                if (rDefaultValue > 0)
                {
                    sb2.Append("[ffe400] (↑");
                    sb2.Append(string.Format(format, rDefaultValue));
                    sb2.Append(lastWord + ")");
                }
                else if (rDefaultValue < 0)
                {
                    sb2.Append("[be1010] (↓");
                    sb2.Append(string.Format(format, rDefaultValue));
                    sb2.Append(lastWord + ")");
                }
            }

            // 비교할 스탯 정보.
            if (cInfo != null)
            {
                Xfloat[] cValue        = cInfo.partsData.getArrayValueByIndex(valueTypeIndex);
                float    cDefaultValue = GameValueType.getPartsApplyValue(cValue, valueType, cInfo.reinforceLevel);

                if (cInfo.totalPLevel > 0)
                {
                    cDefaultValue = cInfo.getTranscendValueByATTR(cDefaultValue, transcendATTR);
                }

                if (useRound)
                {
                    cDefaultValue = Mathf.CeilToInt(cDefaultValue - 0.4f);
                }
                cDefaultValue = defaultValue - cDefaultValue;

                if (cDefaultValue > 0)
                {
                    sb3.Append("[74f344]+");
                    sb3.Append(string.Format(format, cDefaultValue));
                    sb3.Append(lastWord);
                }
                else if (cDefaultValue < 0)
                {
                    sb3.Append("[f1290f]");
                    sb3.Append(string.Format(format, cDefaultValue));
                    sb3.Append(lastWord);
                }
            }

            sb2.Append("\n");
            sb3.Append("\n");
            sb4.Append("\n");

            if (name.Contains("\n"))
            {
                sb2.Append("\n");
                sb3.Append("\n");
                sb4.Append("\n");
            }
        }
    }
Пример #2
0
    void setDescription(bool isBookType, GameIDData showData)
    {
        UnitData baseUnit = GameManager.info.unitData[showData.unitData.baseUnitId];

        float useSp = 0;

        if (isBookType)
        {
            useSp        = baseUnit.sp;
            useSp       -= (useSp * GameManager.me.player.summonSpPercent(baseUnit));
            lbUseSp.text = Mathf.RoundToInt(useSp / GameManager.me.player.maxSp * 100.0f) + "";
        }
        else
        {
            useSp  = showData.unitData.sp;
            useSp -= (useSp * GameManager.me.player.summonSpPercent(showData.unitData));

            lbUseSp.text = Mathf.RoundToInt(useSp / GameManager.me.player.maxSp * 100.0f) + "";
        }

        sb2.Length = 0;

//		sb2.Append(string.Format("{0:0}",showData.unitData.sp));
//		lbStatSp.text = sb2.ToString();
        sb2.Length = 0;


        //======== 공격력 ========== //

        int atk = 0;

        float ap  = showData.unitData.atkPhysic;
        float am  = showData.unitData.atkMagic;
        float asd = showData.unitData.atkSpeed;
        int   aa  = 0;

        if (isBookType == false)
        {
            ap  = showData.getTranscendValueByATTR(ap, WSATTR.ATK_PHYSIC_I);
            am  = showData.getTranscendValueByATTR(am, WSATTR.ATK_MAGIC_I);
            asd = showData.getTranscendValueByATTR(asd, WSATTR.ATK_SPEED_I);
        }


        switch (showData.unitData.attackType.type)
        {
        case 10:
            aa = showData.unitData.attackType.attr[1];
            if (isBookType == false)
            {
                aa = showData.getTranscendValueByATTR(aa, WSATTR.ATK_ATTR2_I);
            }
            atk = Mathf.RoundToInt((ap + am) / asd * ((float)aa) / 500f);
            break;

        case 11:
            aa = showData.unitData.attackType.attr[2];
            if (isBookType == false)
            {
                aa = showData.getTranscendValueByATTR(aa, WSATTR.ATK_ATTR3_I);
            }
            atk = Mathf.RoundToInt((ap + am) / asd * ((float)aa) / 500f);
            break;

        case 12:
            aa = showData.unitData.attackType.attr[1];
            if (isBookType == false)
            {
                aa = showData.getTranscendValueByATTR(aa, WSATTR.ATK_ATTR2_I);
            }
            atk = Mathf.RoundToInt((ap + am) / asd * ((float)aa) / 500f);
            break;

        default:
            atk = Mathf.RoundToInt((ap + am) / asd);
            break;
        }

        sb2.Append(string.Format("{0:0}", atk));


        if (_compareData != null && isBookType == false)
        {
            int nowAtk = atk;

            ap  = _compareData.unitData.atkPhysic;
            am  = _compareData.unitData.atkMagic;
            asd = _compareData.unitData.atkSpeed;

            if (isBookType == false)
            {
                ap  = _compareData.getTranscendValueByATTR(ap, WSATTR.ATK_PHYSIC_I);
                am  = _compareData.getTranscendValueByATTR(am, WSATTR.ATK_MAGIC_I);
                asd = _compareData.getTranscendValueByATTR(asd, WSATTR.ATK_SPEED_I);
            }

            switch (_compareData.unitData.attackType.type)
            {
            case 10:
                aa = _compareData.unitData.attackType.attr[1];
                if (isBookType == false)
                {
                    aa = _compareData.getTranscendValueByATTR(aa, WSATTR.ATK_ATTR2_I);
                }
                atk = Mathf.RoundToInt((ap + am) / asd * ((float)aa) / 500f);
                break;

            case 11:
                aa  = _compareData.unitData.attackType.attr[2];
                atk = Mathf.RoundToInt((ap + am) / asd * ((float)aa) / 500f);
                if (isBookType == false)
                {
                    aa = _compareData.getTranscendValueByATTR(aa, WSATTR.ATK_ATTR3_I);
                }
                break;

            case 12:
                aa = _compareData.unitData.attackType.attr[1];
                if (isBookType == false)
                {
                    aa = _compareData.getTranscendValueByATTR(aa, WSATTR.ATK_ATTR2_I);
                }
                atk = Mathf.RoundToInt((ap + am) / asd * ((float)aa) / 500f);
                break;

            default:
                atk = Mathf.RoundToInt((ap + am) / asd);
                break;
            }

            displayDiffStat(nowAtk, atk, sb2);
        }

        lbStatAtk.text = sb2.ToString();
        sb2.Length     = 0;


        //========== DEF =============//

        float def = ((showData.unitData.defMagic > showData.unitData.defPhysic)?showData.unitData.defMagic:showData.unitData.defPhysic);

        if (isBookType == false)
        {
            if (showData.unitData.defMagic > showData.unitData.defPhysic)
            {
                def = showData.getTranscendValueByATTR(def, WSATTR.DEF_MAGIC_I);
            }
            else
            {
                def = showData.getTranscendValueByATTR(def, WSATTR.DEF_PHYSIC_I);
            }
        }

        sb2.Append(string.Format("{0:0}", def));

        if (_compareData != null && isBookType == false)
        {
            float nowDef = def;

            def = ((_compareData.unitData.defMagic > _compareData.unitData.defPhysic)?_compareData.unitData.defMagic:_compareData.unitData.defPhysic);

            if (isBookType == false)
            {
                if (_compareData.unitData.defMagic > _compareData.unitData.defPhysic)
                {
                    def = _compareData.getTranscendValueByATTR(def, WSATTR.DEF_MAGIC_I);
                }
                else
                {
                    def = _compareData.getTranscendValueByATTR(def, WSATTR.DEF_PHYSIC_I);
                }
            }

            displayDiffStat(nowDef, def, sb2);
        }


        lbStatDef.text = sb2.ToString();
        sb2.Length     = 0;



        //========== HP =============//
        float uhp = showData.unitData.hp;

        if (isBookType == false)
        {
            uhp = showData.getTranscendValueByATTR(uhp, WSATTR.HP_I);
        }

        sb2.Append(string.Format("{0:0}", uhp));       //{0:0.0} //{0:0}

        // 비교 대상 있을시.
        if (_compareData != null && isBookType == false)
        {
            float cUhp = _compareData.unitData.hp;

            if (isBookType == false)
            {
                cUhp = _compareData.getTranscendValueByATTR(cUhp, WSATTR.HP_I);
            }

            displayDiffStat(uhp, cUhp, sb2);
        }

        lbStatHP.text = sb2.ToString();
        sb2.Length    = 0;



        int slen = 0;

        if (showData.unitData.skill != null)
        {
            slen = showData.unitData.skill.Length;
        }

        _unitSkillDescriptions.Clear();

        for (int i = 0; i < slen; ++i)
        {
            if (GameManager.info.unitSkillData.ContainsKey(showData.unitData.skill[i]) && string.IsNullOrEmpty(GameManager.info.unitSkillData[showData.unitData.skill[i]].description) == false)
            {
                _unitSkillDescriptions.Add(GameManager.info.unitSkillData[showData.unitData.skill[i]].description);
            }
        }

        slen = _unitSkillDescriptions.Count;

        transcendInfo.setData(showData);

        for (int i = 0; i < slen || i < 6; ++i)
        {
            if (i < slen)
            {
                skillEffectSlot[i].gameObject.SetActive(true);

                sb.Append(_unitSkillDescriptions[i] + "[-]");

                skillEffectSlot[i].lbText.text = sb.ToString();

                sb.Length = 0;

                skillEffectSlot[i].spBg.height = Mathf.CeilToInt(skillEffectSlot[i].lbText.printedSize.y + 12);

                if (i > 0)
                {
                    _v    = skillEffectSlot[i - 1].transform.localPosition;
                    _v.y -= skillEffectSlot[i - 1].lbText.printedSize.y + 18;
                    skillEffectSlot[i].transform.localPosition = _v;
                }
                else if (i == 0)
                {
                    _v = skillEffectSlot[i].transform.localPosition;

                    if (transcendInfo.gameObject.activeSelf)
                    {
                        _v.y = -269;
                    }
                    else
                    {
                        _v.y = -167;
                    }

                    skillEffectSlot[i].transform.localPosition = _v;
                }
            }
            else
            {
                skillEffectSlot[i].gameObject.SetActive(false);
            }
        }

        _unitSkillDescriptions.Clear();
        sb.Length  = 0;
        sb2.Length = 0;
    }
Пример #3
0
    public void setDataToCharacter(Monster cha, GameIDData infoData)
    {
        int reinforcement = infoData.reinforceLevel;
        int rare          = infoData.rare;

        if (infoData.totalPLevel > 0)
        {
            cha.maxHp += Mathf.CeilToInt(infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(hpMax, valueTypeDic[BaseHeroPartsDataInfo.INDEX_HP_MAX], reinforcement), WSATTR.HPMAX_I) - 0.4f);
            cha.hp    += Mathf.CeilToInt(infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(hpMax, valueTypeDic[BaseHeroPartsDataInfo.INDEX_HP_MAX], reinforcement), WSATTR.HPMAX_I) - 0.4f);

            cha.maxSp += infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(spMax, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SP_MAX], reinforcement), WSATTR.SPMAX_I);

            cha.sp += infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(spMax, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SP_MAX], reinforcement), WSATTR.SPMAX_I);

            cha.stat.spRecovery += infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(spRecovery, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SP_RECOVERY], reinforcement), WSATTR.SP_RECOVERY_I);

            cha.maxMp += infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(mpMax, valueTypeDic[BaseHeroPartsDataInfo.INDEX_MP_MAX], reinforcement), WSATTR.MPMAX_I);

            cha.stat.mpRecovery += infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(mpRecovery, valueTypeDic[BaseHeroPartsDataInfo.INDEX_MP_RECOVERY], reinforcement), WSATTR.MP_RECOVERY_I);

            cha.mp += infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(mpMax, valueTypeDic[BaseHeroPartsDataInfo.INDEX_MP_MAX], reinforcement), WSATTR.MPMAX_I);

            cha.stat.atkPhysic += infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(atkPhysic, valueTypeDic[BaseHeroPartsDataInfo.INDEX_ATK_PHYSIC], reinforcement), WSATTR.ATK_PHYSIC_I);

            cha.stat.atkMagic += infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(atkMagic, valueTypeDic[BaseHeroPartsDataInfo.INDEX_ATK_MAGIC], reinforcement), WSATTR.ATK_MAGIC_I);

            cha.stat.defPhysic += infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(defPhysic, valueTypeDic[BaseHeroPartsDataInfo.INDEX_DEF_PHYSIC], reinforcement), WSATTR.DEF_PHYSIC_I);

            cha.stat.defMagic += infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(defMagic, valueTypeDic[BaseHeroPartsDataInfo.INDEX_DEF_MAGIC], reinforcement), WSATTR.DEF_MAGIC_I);

            IFloat tempS  = GameValueType.getPartsApplyValue(speed, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SPEED], reinforcement);
            IFloat tSpeed = infoData.getTranscendValueByATTR(tempS, WSATTR.SPEED_I);

            if (tempS > 0)
            {
                cha.stat.originalAtkSpeedRate = cha.stat.originalAtkSpeedRate * cha.stat.changeAnimationSpeed(tSpeed, tempS);
                cha.stat.speed += tSpeed;
            }

            /*
             * nowSummonSpPercent = infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(summonSpPercent,valueTypeDic[BaseHeroPartsDataInfo.INDEX_SUMMON_SP_PERCENT],reinforcement) * 0.01f, WSATTR.SUMMON_SP_PER_I);
             * cha.stat.summonSpPercent += nowSummonSpPercent;
             *
             * nowUnitHpUp = infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(unitHpUp,valueTypeDic[BaseHeroPartsDataInfo.INDEX_UNIT_HP_UP],reinforcement) * 0.01f, WSATTR.UNIT_HP_UP_I);
             * cha.stat.unitHpUp += nowUnitHpUp;
             *
             * nowUnitDefUp = infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(unitDefUp,valueTypeDic[BaseHeroPartsDataInfo.INDEX_UNIT_DEF_UP],reinforcement) * 0.01f, WSATTR.UNIT_DEF_UP_I);
             * cha.stat.unitDefUp += nowUnitDefUp;
             *
             * nowSkillSpDiscount = infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(skillSpDiscount,valueTypeDic[BaseHeroPartsDataInfo.INDEX_SKILL_SP_DISCOUNT],reinforcement) * 0.01f, WSATTR.SKILL_SP_DISCOUNT_I);
             * cha.stat.skillMpDiscount += nowSkillSpDiscount;
             *
             * nowSkillAtkUp = infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(skillAtkUp,valueTypeDic[BaseHeroPartsDataInfo.INDEX_SKILL_ATK_UP],reinforcement) * 0.01f, WSATTR.SKILL_ATK_UP_I);
             * cha.stat.skillAtkUp += nowSkillAtkUp;
             *
             * nowSkillUp = infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(skillUp,valueTypeDic[BaseHeroPartsDataInfo.INDEX_SKILL_UP],reinforcement) * 0.01f, WSATTR.SKILL_UP_I);
             * cha.stat.skillUp += nowSkillUp;
             *
             * nowSkillTimeUp = infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(skillTimeUp,valueTypeDic[BaseHeroPartsDataInfo.INDEX_SKILL_TIME_UP],reinforcement) * 0.01f, WSATTR.SKILL_TIME_UP_I);
             * cha.stat.skillTimeUp += nowSkillTimeUp;
             */


            nowSummonSpPercent        = infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(summonSpPercent, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SUMMON_SP_PERCENT], reinforcement), WSATTR.SUMMON_SP_PER_I) * 0.01f;
            cha.stat.summonSpPercent += nowSummonSpPercent;

            nowUnitHpUp        = infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(unitHpUp, valueTypeDic[BaseHeroPartsDataInfo.INDEX_UNIT_HP_UP], reinforcement), WSATTR.UNIT_HP_UP_I) * 0.01f;
            cha.stat.unitHpUp += nowUnitHpUp;

            nowUnitDefUp        = infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(unitDefUp, valueTypeDic[BaseHeroPartsDataInfo.INDEX_UNIT_DEF_UP], reinforcement), WSATTR.UNIT_DEF_UP_I) * 0.01f;
            cha.stat.unitDefUp += nowUnitDefUp;

            nowSkillSpDiscount        = infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(skillSpDiscount, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SKILL_SP_DISCOUNT], reinforcement), WSATTR.SKILL_SP_DISCOUNT_I) * 0.01f;
            cha.stat.skillMpDiscount += nowSkillSpDiscount;

            nowSkillAtkUp        = infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(skillAtkUp, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SKILL_ATK_UP], reinforcement), WSATTR.SKILL_ATK_UP_I) * 0.01f;
            cha.stat.skillAtkUp += nowSkillAtkUp;

            nowSkillUp        = infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(skillUp, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SKILL_UP], reinforcement), WSATTR.SKILL_UP_I) * 0.01f;
            cha.stat.skillUp += nowSkillUp;

            nowSkillTimeUp        = infoData.getTranscendValueByATTR(GameValueType.getPartsApplyValue(skillTimeUp, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SKILL_TIME_UP], reinforcement), WSATTR.SKILL_TIME_UP_I) * 0.01f;
            cha.stat.skillTimeUp += nowSkillTimeUp;



            IFloat tempAtkSpeed = GameValueType.getPartsApplyValue(atkSpeed, valueTypeDic[BaseHeroPartsDataInfo.INDEX_ATK_SPEED], reinforcement);

            if (tempAtkSpeed > 0)
            {
                IFloat tAtkSpeed = infoData.getTranscendValueByATTR(tempAtkSpeed, WSATTR.ATK_SPEED_I);
                cha.stat.originalAtkSpeedRate = cha.stat.originalAtkSpeedRate * cha.stat.changeAnimationSpeed(tAtkSpeed, tempAtkSpeed);

                cha.stat.atkSpeed += tAtkSpeed;
                cha.stat.atkSpeed  = MathUtil.Round(cha.stat.atkSpeed * 100.0f) * 0.01f;
            }

            cha.stat.atkRange = infoData.getTranscendValueByATTR(atkRange, WSATTR.ATK_RANGE_I);
        }
        else
        {
            cha.maxHp += Mathf.CeilToInt(GameValueType.getPartsApplyValue(hpMax, valueTypeDic[BaseHeroPartsDataInfo.INDEX_HP_MAX], reinforcement) - 0.4f);
            cha.hp    += Mathf.CeilToInt(GameValueType.getPartsApplyValue(hpMax, valueTypeDic[BaseHeroPartsDataInfo.INDEX_HP_MAX], reinforcement) - 0.4f);

            cha.maxSp += GameValueType.getPartsApplyValue(spMax, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SP_MAX], reinforcement);

            cha.sp += GameValueType.getPartsApplyValue(spMax, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SP_MAX], reinforcement);

            cha.stat.spRecovery += GameValueType.getPartsApplyValue(spRecovery, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SP_RECOVERY], reinforcement);

            cha.maxMp += GameValueType.getPartsApplyValue(mpMax, valueTypeDic[BaseHeroPartsDataInfo.INDEX_MP_MAX], reinforcement);

            cha.stat.mpRecovery += GameValueType.getPartsApplyValue(mpRecovery, valueTypeDic[BaseHeroPartsDataInfo.INDEX_MP_RECOVERY], reinforcement);

            cha.mp += GameValueType.getPartsApplyValue(mpMax, valueTypeDic[BaseHeroPartsDataInfo.INDEX_MP_MAX], reinforcement);

            cha.stat.atkPhysic += GameValueType.getPartsApplyValue(atkPhysic, valueTypeDic[BaseHeroPartsDataInfo.INDEX_ATK_PHYSIC], reinforcement);

            cha.stat.atkMagic += GameValueType.getPartsApplyValue(atkMagic, valueTypeDic[BaseHeroPartsDataInfo.INDEX_ATK_MAGIC], reinforcement);

            cha.stat.defPhysic += GameValueType.getPartsApplyValue(defPhysic, valueTypeDic[BaseHeroPartsDataInfo.INDEX_DEF_PHYSIC], reinforcement);

            cha.stat.defMagic += GameValueType.getPartsApplyValue(defMagic, valueTypeDic[BaseHeroPartsDataInfo.INDEX_DEF_MAGIC], reinforcement);

            cha.stat.speed += GameValueType.getPartsApplyValue(speed, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SPEED], reinforcement);

            nowSummonSpPercent        = GameValueType.getPartsApplyValue(summonSpPercent, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SUMMON_SP_PERCENT], reinforcement) * 0.01f;
            cha.stat.summonSpPercent += nowSummonSpPercent;

            nowUnitHpUp        = GameValueType.getPartsApplyValue(unitHpUp, valueTypeDic[BaseHeroPartsDataInfo.INDEX_UNIT_HP_UP], reinforcement) * 0.01f;
            cha.stat.unitHpUp += nowUnitHpUp;

            nowUnitDefUp        = GameValueType.getPartsApplyValue(unitDefUp, valueTypeDic[BaseHeroPartsDataInfo.INDEX_UNIT_DEF_UP], reinforcement) * 0.01f;
            cha.stat.unitDefUp += nowUnitDefUp;

            nowSkillSpDiscount        = GameValueType.getPartsApplyValue(skillSpDiscount, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SKILL_SP_DISCOUNT], reinforcement) * 0.01f;
            cha.stat.skillMpDiscount += nowSkillSpDiscount;

            nowSkillAtkUp        = GameValueType.getPartsApplyValue(skillAtkUp, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SKILL_ATK_UP], reinforcement) * 0.01f;
            cha.stat.skillAtkUp += nowSkillAtkUp;

            nowSkillUp        = GameValueType.getPartsApplyValue(skillUp, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SKILL_UP], reinforcement) * 0.01f;
            cha.stat.skillUp += nowSkillUp;

            nowSkillTimeUp        = GameValueType.getPartsApplyValue(skillTimeUp, valueTypeDic[BaseHeroPartsDataInfo.INDEX_SKILL_TIME_UP], reinforcement) * 0.01f;
            cha.stat.skillTimeUp += nowSkillTimeUp;

            cha.stat.atkSpeed += GameValueType.getPartsApplyValue(atkSpeed, valueTypeDic[BaseHeroPartsDataInfo.INDEX_ATK_SPEED], reinforcement);
            cha.stat.atkSpeed  = MathUtil.Round(cha.stat.atkSpeed * 100.0f) * 0.01f;

            cha.stat.atkRange = atkRange;
        }
    }