// 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"); } } }
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; }
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; } }