public static float getApplyValue(Xfloat[] attr, GameValueType.Type valueType, int applyReinforceLevel)
    {
        float v = 0;

        switch (valueType)
        {
        case GameValueType.Type.Fixed:

            // 원래 적용 레벨 수치는 0보다 크다. -값으로 된 것은 현 차징시간이 최소차징시간보다 적을때의 예외상황을 위해.
            // 만들어둔것이다.
            if (applyReinforceLevel < 0)
            {
                v = attr[0] * -(applyReinforceLevel / 0.01f);                //* 0.01f);
            }
            else
            {
                v = attr[0] + (attr[1] - attr[0]) / 19f * (applyReinforceLevel - 1);
            }
            break;

        default:
            v = attr[0];
            break;
        }

        return(MathUtil.Round(v * 100.0f) / 100.0f);
    }
    public bool isSuccess(int index, int applyReinforceLevel)
    {
//#if UNITY_EDITOR
//		Debug.LogError("수정 필요");
//		return true;
//#endif

#if UNITY_EDITOR
        try
        {
            GameValueType.Type t = successValueType[index];
        }
        catch
        {
            Debug.LogError(id);
        }
#endif

        switch (successValueType[index])
        {
        case GameValueType.Type.Fixed:

            float v = 0;

            // 원래 적용 레벨 수치는 0보다 크다. -값으로 된 것은 현 차징시간이 최소차징시간보다 적을때의 예외상황을 위해.
            // 만들어둔것이다.
            if (applyReinforceLevel < 0)
            {
                v = successChance[index][0] * -(applyReinforceLevel / 100.0f);                 //* 0.01f);
            }
            else
            {
                v = successChance[index][0] + (successChance[index][1] - successChance[index][0]) / 19f * (applyReinforceLevel - 1);
            }

            return(MathUtil.RoundToInt(v) > (GameManager.inGameRandom.Range(0, 100)));

        /*
         * case GameValueType.Type.Section:
         *
         * int maxValue = successChance[index].Length - 1;
         *
         * int a = Mathf.FloorToInt((float)applyReinforceLevel / 5.0f);
         * if(a > maxValue) a = maxValue;
         * int b = a + 1;
         * if(b > maxValue) b = maxValue;
         * float c = applyReinforceLevel / 5.0f - a;
         * return (Mathf.Round( (successChance[index][a] + c * ( successChance[index][b] - successChance[index][a] ))  * 100.0f) * 0.01f) > (GameManager.inGameRandom.Range(0,100));;
         */

        default:
            return(successChance[index][0] > (GameManager.inGameRandom.Range(0, 100)));

            break;
        }
    }
    public static IFloat getApplyValue(Xfloat[] attr, GameValueType.Type valueType, int applyReinforceLevel, GameValueType.ApplyStatValue statValue, MonsterStat shooterStat)
    {
        float v = 0;

        switch (valueType)
        {
        case GameValueType.Type.Fixed:

            // 원래 적용 레벨 수치는 0보다 크다. -값으로 된 것은 현 차징시간이 최소차징시간보다 적을때의 예외상황을 위해.
            // 만들어둔것이다.
            if (applyReinforceLevel < 0)
            {
                v = attr[0] * -(applyReinforceLevel / 100.0f);                 //* 0.01f);
            }
            else
            {
                v = attr[0] + (attr[1] - attr[0]) / 19f * (applyReinforceLevel - 1);
            }
            break;

        default:
            v = attr[0];
            break;
        }



        //    → 적용되는 값 = (이 스킬을 사용하는 캐릭터의) XX 스탯 값 * N / 100
        switch (statValue)
        {
        case ApplyStatValue.AP:         //   - AP : 물리공격력 + 마법공격력.

            v = (shooterStat.atkPhysic + shooterStat.atkMagic) * v * 0.01f;

            break;

        case ApplyStatValue.DP:         //   - DP : (물리방어력 + 마법방어력) / 2.
            v = (shooterStat.defMagic + shooterStat.defPhysic) * 0.5f * v * 0.01f;
            break;

        case ApplyStatValue.HP:         //   - HP : 생명력.
            v = (float)(shooterStat.maxHp) * v * 0.01f;
            break;

        case ApplyStatValue.LV:         //   - LV : 강화 레벨.
            v = (float)(shooterStat.reinforceLevel) * v * 0.01f;
            break;

        default:

            break;
        }

        return(MathUtil.Round(v * 100.0f) / 100.0f);
    }
    public static IFloat getPartsApplyValue(Xfloat[] attr, GameValueType.Type valueType, int applyReinforceLevel)
    {
        switch (valueType)
        {
        case GameValueType.Type.Fixed:

            float v = attr[0] + (attr[1] - attr[0]) / 19f * (applyReinforceLevel - 1);
            return(MathUtil.Round(v * 100.0f) / 100.0f);

        default:
            return(attr[0]);
        }
    }
예제 #5
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");
            }
        }
    }