Расчёт характеристик монстров

  • Автор темы Автор темы Gigi
  • Дата начала Дата начала

Gigi

Прославленный
Местный
Старожил I степени
Сообщения
287
Розыгрыши
0
Решения
2
Репутация
173
Реакции
80
Баллы
1 403
Хроники
  1. Master Class
Сборка
Mobius
Вечная проблема с расчётом статов для монстров. Может есть хоть приблизительный калькулятор или формула по имеющимся данным, на пример хп/мп, уровень, базовые статы CON/DEX/INT/MEN....(не берём в счёт умения) как то установить их P.atk / M.atk / P.def / M.def, есть ли где то связанная логика
 
MAX HP - можно еще с централа узнать.
base hp / mp - в ДАТ файле лежат.
Больше ничего ты не узнаешь как бы не старался.
Java:
    public int getConValue()
    {
        final NpcInfoHolder replayNpcInfo = getReplayNpc();
        final ServerObjectPacketHolder replayNpcInfoAsServer = getReplayNpcAsServerObject();
        final double maxHp = replayNpcInfo != null && replayNpcInfo.isHasMaxHpMask() ? replayNpcInfo.getMaximumHp() : replayNpcInfoAsServer != null ? replayNpcInfoAsServer.getMaximumHp() : _npcHolder != null ? _npcHolder.getHp() : -1;
        final double baseHp = _datHolder != null ? _datHolder.getOriginalHP() : -1;
        if (maxHp < 0d || baseHp < 0d)
        {
            return -1;
        }
        final double maxHpWithoutBonus =
                (_hpIncreaseSkill != null
                        ? maxHp - (maxHp / (DatSkillHolder.getHp4408Percent(_hpIncreaseSkill.getSkillLevel()) / 100d))
                        : maxHp)
                        / (_hpEnchantSkill == null
                            ? 1d
                            : DatSkillHolder.getHpEnchantBySkill(_hpEnchantSkill.getSkillID()));
        // 27.215 for static and 23.949 for boss
        final int returnValue = parseNpcDataFromReplay.getConStatBonusEssence(maxHpWithoutBonus, baseHp);
        return returnValue > 0 ? returnValue : -1;
    }

    public int getMenValue()
    {
        final NpcInfoHolder replayNpcInfo = getReplayNpc();
        final double maxMp = replayNpcInfo != null && replayNpcInfo.isHasMaxMpMask() ? replayNpcInfo.getMaximumMp() : -1;
        final double baseMp = _datHolder != null ? _datHolder.getOriginalMP() : -1;
        if (maxMp < 0d || baseMp < 0d)
        {
            return -1;
        }
        final double maxHpWithoutBonus = _mpIncreaseSkill != null ? maxMp - (maxMp / (DatSkillHolder.getHp4409Percent(_mpIncreaseSkill.getSkillLevel()) / 100d)) : maxMp;
        final int returnValue = parseNpcDataFromReplay.getMenStatBonusEssence(maxHpWithoutBonus, baseMp);
        return returnValue > 0 ? returnValue : -1;
    }

    public String getOriginalHp()
    {
        if (_datHolder == null)
        {
            return "1.0";
        }
        return BigDecimal.valueOf(_datHolder.getOriginalHP()).toPlainString();
    }

    public String getOriginalMp()
    {
        if (_datHolder == null)
        {
            return "1.0";
        }
        return BigDecimal.valueOf(_datHolder.getOriginalHP()).toPlainString();
    }

Java:
    public static double getHp4408Percent(int skillLevel)
    {
        return HP_BONUS_4408.length < skillLevel ? 1d : (double) Math.max(HP_BONUS_4408[skillLevel - 1], 1);
    }

    private final static int[] HP_BONUS_4409 =
            {
                    0,
                10,
                21,
                33,
                46,
                61,
                77,
                -75,
                -50,
                100,
                200,
                300,
                400,
                500,
                600,
                700,
                800,
                900,
                1000,
                1100,
            };

    public static double getHp4409Percent(int skillLevel)
    {
        return HP_BONUS_4409.length < skillLevel ? 1d : (double) Math.max(HP_BONUS_4409[skillLevel - 1], 1);
    }

    private final static Map<Integer, Double> HP_ENCHANT_BONUS = new HashMap<>();
    static
    {
        HP_ENCHANT_BONUS.put(4303, 2d);
        HP_ENCHANT_BONUS.put(4304, 3d);
        HP_ENCHANT_BONUS.put(4305, 4d);
        HP_ENCHANT_BONUS.put(4306, 5d);
        HP_ENCHANT_BONUS.put(4307, 6d);
        HP_ENCHANT_BONUS.put(4308, 7d);
        HP_ENCHANT_BONUS.put(4309, 8d);
        HP_ENCHANT_BONUS.put(4310, 9d);
        HP_ENCHANT_BONUS.put(4311, 0.5);
    }
 
С централа да понятно, всё что можно узнаю, спасибо хоть сопротивления стихиям добавили. базовый ХП даже в клинтском датнике есть. мучает атака и защита , то батонные получаются то плюшевые.

Взял птс данные делил и умножал всё что можно, но константных значений не нащупал
 
Сделай на оффе дестра с атакой 10000, и долби им интересующего моба. (есть навык мегаудар, если он еще сохранился, там статичный урон без разброса). По выхлопу значение добавляй в формулу расчета урона и вычисляй P.Def моба.
 
Сделай на оффе дестра с атакой 10000, и долби им интересующего моба. (есть навык мегаудар, если он еще сохранился, там статичный урон без разброса). По выхлопу значение добавляй в формулу расчета урона и вычисляй P.Def моба.
а смысл? Я о таком способе не писал ибо формулы у мобиуса точно не актуальные.
 
а как же учет DEX MEN CON и тд или мобы уже отличаются от персов ?насколько знаю овер дофига сборок гже это не учитывается
 
Вечная проблема с расчётом статов для монстров. Может есть хоть приблизительный калькулятор или формула по имеющимся данным, на пример хп/мп, уровень, базовые статы CON/DEX/INT/MEN....(не берём в счёт умения) как то установить их P.atk / M.atk / P.def / M.def, есть ли где то связанная логика

ее и не будет. это надо добыть исходную мат-модель игры разработчиков. так как там много переменных в подсчете мобов - жирность, особенности от локации, усиления/ослабления, скилы, использование сосок и тд. все это влияет на деф и атаку моба, а так же на эксп, получаемый с него. я пилю потихоньку базовый калькулятор, но там еще процентов 80 работы, и тема приватная. тем более никого эта тема особо не заинтересовала, и ноль полезной активности в ней на форуме. а статы у всех одинаковые, насколько помню.
 
Статы CON/DEX/INT/MEN почти у всех одинаковые кроме РБконечно, да куча чего влияет на общий итог, всякие пассивки, локации, день/ночь и т.п По сути атака и деф схожи в пачках в конкретной локации, различия дают скилы и тип монстра, маг/лучник/файтер - но как они берут и прямо пишут в датнике к прмеру что у 120 ур монстра ХП - 25ккк и можно ли как то отталкиваться с хп/мп/лвл/эксп на базовые физ-храктеристики
 
Статы CON/DEX/INT/MEN почти у всех одинаковые кроме РБконечно, да куча чего влияет на общий итог, всякие пассивки, локации, день/ночь и т.п По сути атака и деф схожи в пачках в конкретной локации, различия дают скилы и тип монстра, маг/лучник/файтер - но как они берут и прямо пишут в датнике к прмеру что у 120 ур монстра ХП - 25ккк и можно ли как то отталкиваться с хп/мп/лвл/эксп на базовые физ-храктеристики

в начальных хрониках более- менее по формулам все это рассчитано, показательная прогрессия от лвл. как в современной помойке - я хз. может уже сплошные костыли на костылях.
 
Статы CON/DEX/INT/MEN почти у всех одинаковые кроме РБконечно, да куча чего влияет на общий итог, всякие пассивки, локации, день/ночь и т.п По сути атака и деф схожи в пачках в конкретной локации, различия дают скилы и тип монстра, маг/лучник/файтер - но как они берут и прямо пишут в датнике к прмеру что у 120 ур монстра ХП - 25ккк и можно ли как то отталкиваться с хп/мп/лвл/эксп на базовые физ-храктеристики
На параметры любого существа в Л2 - влияют только два параметра. Его базовые параметры существа и модификаторы от эффектов. Ничего другого на них не влияет. Итоговое значение рассчитывается по довольно хитровыебанным формулам, которые практически нереально восстановить экспериментально, кроме самых простых. Единственный достоверный способ эти формулы восстановить - реверсить птску, благо корейцы не сильно любят их радикально менять, ввиду огромного количества легаси кода, который на них завязан. Например, если сравнивать ХФ и условный сальвейшен, то различия там буквально в десятке формул из 100+ штук, при этом, в большинстве случаев эти различия обусловлены просто введением новых характеристик. Поэтому берите ИДА, потрошите слитые ПТСки 287 протокола и тащите к себе формулы.
 
На параметры любого существа в Л2 - влияют только два параметра. Его базовые параметры существа и модификаторы от эффектов. Ничего другого на них не влияет. Итоговое значение рассчитывается по довольно хитровыебанным формулам, которые практически нереально восстановить экспериментально, кроме самых простых. Единственный достоверный способ эти формулы восстановить - реверсить птску, благо корейцы не сильно любят их радикально менять, ввиду огромного количества легаси кода, который на них завязан. Например, если сравнивать ХФ и условный сальвейшен, то различия там буквально в десятке формул из 100+ штук, при этом, в большинстве случаев эти различия обусловлены просто введением новых характеристик. Поэтому берите ИДА, потрошите слитые ПТСки 287 протокола и тащите к себе формулы.

всего два параметра, в которых куча других параметров)

про какие формулы ты говоришь, про рассчет ДПС от итоговых характеристик моба? так они и так в ядре сборки. Насколько они верны у мобиуса- это да, вопрос... Рассчет экспы/сп? они табличные. Никаких формул для рассчета характеристик моба для датапака- в птс нет, там это берется табличными значениями. Эти формулы и есть базовый калькулятор разработчиков.
 
а смысл? Я о таком способе не писал ибо формулы у мобиуса точно не актуальные.
Даже на убогих формулах можно подогнать кастомный пдеф, чтобы ДПС чара был похож на оф сервер.
 
На параметры любого существа в Л2 - влияют только два параметра. Его базовые параметры существа и модификаторы от эффектов. Ничего другого на них не влияет. Итоговое значение рассчитывается по довольно хитровыебанным формулам, которые практически нереально восстановить экспериментально, кроме самых простых. Единственный достоверный способ эти формулы восстановить - реверсить птску, благо корейцы не сильно любят их радикально менять, ввиду огромного количества легаси кода, который на них завязан. Например, если сравнивать ХФ и условный сальвейшен, то различия там буквально в десятке формул из 100+ штук, при этом, в большинстве случаев эти различия обусловлены просто введением новых характеристик. Поэтому берите ИДА, потрошите слитые ПТСки 287 протокола и тащите к себе формулы.
то есть по твоему если у моба 30 декс они чисто визуальные а статы ему не добавляют ?
 
то есть по твоему если у моба 30 декс они чисто визуальные а статы ему не добавляют ?
Т.е по моему, DEX - это один из базовых параметров существа. При этом, само значение DEX почти нигде прямо не используется, а используется модификатор его значения, который показывает смещения от дельты.
Например для DEX == 30, модификатор равен 10.

attribute_30 = 10

И влияет на кучу параметров, через формулы. Например элементарно шанс ИДЕАЛЬНО заблокировать атаку щитом - это удвоенный бонус от DEX. Конкретно для DEX 30 - 20%

1735144843500.webp
 
Последнее редактирование:
Т.е по моему, DEX - это один из базовых параметров существа. При этом, само значение DEX почти нигде прямо не используется, а используется модификатор его значения, который показывает смещения от дельты.
Например для DEX == 30, модификатор равен 10.

attribute_30 = 10

И влияет на кучу параметров, через формулы. Например элементарно шанс ИДЕАЛЬНО заблокировать атаку щитом - это удвоенный бонус от DEX. Конкретно для DEX 30 - 20%

Посмотреть вложение 82830
это что у вас за шайтан машина все куда проще что в выдумываете какую то мусорку
 
это что у вас за шайтан машина все куда проще что в выдумываете какую то мусорку
Я чуть-чуть потерял ход ваших мыслей. Можете пояснить пожалуйста свое сообщение? Что вы имеете ввиду под "шайтан машиной"? "мусорка" опять же...? Вас смутили непонятные символы в моем сообщении?
 
Т.е по моему, DEX - это один из базовых параметров существа. При этом, само значение DEX почти нигде прямо не используется, а используется модификатор его значения, который показывает смещения от дельты.
Например для DEX == 30, модификатор равен 10.

attribute_30 = 10

И влияет на кучу параметров, через формулы. Например элементарно шанс ИДЕАЛЬНО заблокировать атаку щитом - это удвоенный бонус от DEX. Конкретно для DEX 30 - 20%

Никакой из базовых параметров почти не используется напрямую. это декоративная цифра для визуализации. за ними стоят массивы множителей, которые уже являются коэффициентами усиления/ослабления. Причем они грамотно соотнесены , таким образом, что например +4 декс и -4 декс изменяют базовое значение в одинаковое количество раз. то есть сложение сопоставлено с умножением.

и там не смещение, а множитель. +30 декс это множитель(модификатор) 1,1 (+10%)

DEX modifier​

DEXmodifierDEXmodifier
211.01331.13
221.02341.14
231.03351.15
241.04361.16
251.05371.17
261.06381.18
271.07391.19
281.08401.20
291.09411.21
301.10421.22
311.11431.24
321.12

На птс добавляют, явы типа люцеры эти статы не учитывают. Ацис учитывает, например.

базовые статы нужны для просчета прохождения разных скилов/дебафов. п деф и прочие статы более высокого уровня для мобов берутся из датапака, чтобы каждый раз не считать по формулам из базовых. тем более что не прописанна броня, часто не прописанно оружие, хотя п атак как с оружием, и нет всяких пасивок, проф и т.д у моба.
То что люцера не учитывает базовые статы моба - для меня не новость, если это так, то вполне ожидаемо от дизера.
 
Последнее редактирование:
BladeRunner, у тебя какая-то каша из данных и не очень полное понимание того, как работают те вещи, про которые ты пишешь. Твои данные, которые ты приводишь, они взяты из каких источников?
Вот например таблица значений бонуса dex для ПТС ХФ.
Код:
//DEX보너스
dex_bonus_begin
    attribute_1 = -15
    attribute_2 = -14
    attribute_3 = -14
    attribute_4 = -13
    attribute_5 = -12
    attribute_6 = -11
    attribute_7 = -10
    attribute_8 = -10
    attribute_9 = -9
    attribute_10 = -8
    attribute_11 = -7
    attribute_12 = -6
    attribute_13 = -6
    attribute_14 = -5
    attribute_15 = -4
    attribute_16 = -3
    attribute_17 = -2
    attribute_18 = -1
    attribute_19 = 0
    attribute_20 = 1
    attribute_21 = 1
    attribute_22 = 2
    attribute_23 = 3
    attribute_24 = 4
    attribute_25 = 5
    attribute_26 = 6
    attribute_27 = 7
    attribute_28 = 8
    attribute_29 = 9
    attribute_30 = 10
    attribute_31 = 11
    attribute_32 = 12
    attribute_33 = 13
    attribute_34 = 14
    attribute_35 = 15
    attribute_36 = 16
    attribute_37 = 17
    attribute_38 = 18
    attribute_39 = 19
    attribute_40 = 20
    attribute_41 = 21
    attribute_42 = 22
    attribute_43 = 24
    attribute_44 = 25
    attribute_45 = 26
    attribute_46 = 27
    attribute_47 = 28
    attribute_48 = 29
    attribute_49 = 30
    attribute_50 = 32
    attribute_51 = 33
    attribute_52 = 34
    attribute_53 = 35
    attribute_54 = 36
    attribute_55 = 38
    attribute_56 = 39
    attribute_57 = 40
    attribute_58 = 41
    attribute_59 = 43
    attribute_60 = 44
    attribute_61 = 45
    attribute_62 = 47
    attribute_63 = 48
    attribute_64 = 49
    attribute_65 = 51
    attribute_66 = 52
    attribute_67 = 53
    attribute_68 = 55
    attribute_69 = 56
    attribute_70 = 57
    attribute_71 = 59
    attribute_72 = 60
    attribute_73 = 62
    attribute_74 = 63
    attribute_75 = 65
    attribute_76 = 66
    attribute_77 = 68
    attribute_78 = 69
    attribute_79 = 71
    attribute_80 = 72
    attribute_81 = 74
    attribute_82 = 75
    attribute_83 = 77
    attribute_84 = 78
    attribute_85 = 80
    attribute_86 = 82
    attribute_87 = 83
    attribute_88 = 85
    attribute_89 = 87
    attribute_90 = 88
    attribute_91 = 90
    attribute_92 = 92
    attribute_93 = 93
    attribute_94 = 95
    attribute_95 = 97
    attribute_96 = 99
    attribute_97 = 100
    attribute_98 = 102
    attribute_99 = 104
dex_bonus_end

А вот данные для ГОД, где цифры сильно выше:
Код:
//DEX보너스
dex_bonus_begin
attribute_1 = -41
attribute_2 = -39
attribute_3 = -37
attribute_4 = -35
attribute_5 = -33
attribute_6 = -30
attribute_7 = -28
attribute_8 = -26
attribute_9 = -23
attribute_10 = -21
attribute_11 = -18
attribute_12 = -16
attribute_13 = -13
attribute_14 = -10
attribute_15 = -7
attribute_16 = -4
attribute_17 = -1
attribute_18 = 2
attribute_19 = 5
attribute_20 = 8
attribute_21 = 11
attribute_22 = 15
attribute_23 = 18
attribute_24 = 22
attribute_25 = 26
attribute_26 = 29
attribute_27 = 33
attribute_28 = 37
attribute_29 = 41
attribute_30 = 45
attribute_31 = 50
attribute_32 = 54
attribute_33 = 58
attribute_34 = 63
attribute_35 = 68
attribute_36 = 72
attribute_37 = 77
attribute_38 = 82
attribute_39 = 87
attribute_40 = 92
attribute_41 = 98
attribute_42 = 103
attribute_43 = 109
attribute_44 = 114
attribute_45 = 120
attribute_46 = 126
attribute_47 = 132
attribute_48 = 138
attribute_49 = 144
attribute_50 = 150
attribute_51 = 157
attribute_52 = 164
attribute_53 = 170
attribute_54 = 177
attribute_55 = 184
attribute_56 = 191
attribute_57 = 198
attribute_58 = 206
attribute_59 = 213
attribute_60 = 221
attribute_61 = 229
attribute_62 = 236
attribute_63 = 244
attribute_64 = 252
attribute_65 = 261
attribute_66 = 269
attribute_67 = 277
attribute_68 = 286
attribute_69 = 295
attribute_70 = 303
attribute_71 = 312
attribute_72 = 321
attribute_73 = 330
attribute_74 = 340
attribute_75 = 349
attribute_76 = 358
attribute_77 = 368
attribute_78 = 378
attribute_79 = 387
attribute_80 = 397
attribute_81 = 407
attribute_82 = 417
attribute_83 = 427
attribute_84 = 437
attribute_85 = 447
attribute_86 = 458
attribute_87 = 468
attribute_88 = 478
attribute_89 = 489
attribute_90 = 499
attribute_91 = 510
attribute_92 = 520
attribute_93 = 531
attribute_94 = 542
attribute_95 = 552
attribute_96 = 563
attribute_97 = 574
attribute_98 = 584
attribute_99 = 595
attribute_100 = 606
attribute_101 = 617
attribute_102 = 628
attribute_103 = 638
attribute_104 = 649
attribute_105 = 660
attribute_106 = 670
attribute_107 = 681
attribute_108 = 692
attribute_109 = 702
attribute_110 = 713
attribute_111 = 723
attribute_112 = 734
attribute_113 = 744
attribute_114 = 754
attribute_115 = 765
attribute_116 = 775
attribute_117 = 785
attribute_118 = 795
attribute_119 = 805
attribute_120 = 815
attribute_121 = 825
attribute_122 = 834
attribute_123 = 844
attribute_124 = 854
attribute_125 = 863
attribute_126 = 872
attribute_127 = 882
attribute_128 = 891
attribute_129 = 900
attribute_130 = 909
attribute_131 = 917
attribute_132 = 926
attribute_133 = 935
attribute_134 = 943
attribute_135 = 951
attribute_136 = 960
attribute_137 = 968
attribute_138 = 976
attribute_139 = 983
attribute_140 = 991
attribute_141 = 999
attribute_142 = 1006
attribute_143 = 1014
attribute_144 = 1021
attribute_145 = 1028
attribute_146 = 1035
attribute_147 = 1042
attribute_148 = 1048
attribute_149 = 1055
attribute_150 = 1062
attribute_151 = 1068
attribute_152 = 1074
attribute_153 = 1080
attribute_154 = 1086
attribute_155 = 1092
attribute_156 = 1098
attribute_157 = 1103
attribute_158 = 1109
attribute_159 = 1114
attribute_160 = 1120
attribute_161 = 1125
attribute_162 = 1130
attribute_163 = 1135
attribute_164 = 1140
attribute_165 = 1144
attribute_166 = 1149
attribute_167 = 1154
attribute_168 = 1158
attribute_169 = 1162
attribute_170 = 1167
attribute_171 = 1171
attribute_172 = 1175
attribute_173 = 1179
attribute_174 = 1183
attribute_175 = 1186
attribute_176 = 1190
attribute_177 = 1194
attribute_178 = 1197
attribute_179 = 1201
attribute_180 = 1204
attribute_181 = 1207
attribute_182 = 1210
attribute_183 = 1213
attribute_184 = 1216
attribute_185 = 1219
attribute_186 = 1222
attribute_187 = 1225
attribute_188 = 1228
attribute_189 = 1230
attribute_190 = 1233
attribute_191 = 1235
attribute_192 = 1238
attribute_193 = 1240
attribute_194 = 1242
attribute_195 = 1245
attribute_196 = 1247
attribute_197 = 1249
attribute_198 = 1251
attribute_199 = 1253
attribute_200 = 1255
dex_bonus_end

Также вот фрагменты кода для ГОД, которые его загружает после парса лексером и собственно сама функция, которая возвращает значение:
C++:
void __fastcall CPCParamDB::SetValueByLevel(
        CPCParamDB *this,
        unsigned int nLevel,
        PCParamFieldByLevel field,
        int value)
{
  if ( nLevel <= 0xC8 )
  {
    switch ( field )
    {
      case PC_INT_BONUS:
        this->m_dIntBonus[nLevel] = ((double)value + 1000.0) / 1000.0;
        break;
      case PC_STR_BONUS:
        this->m_dStrBonus[nLevel] = ((double)value + 1000.0) / 1000.0;
        break;
      case PC_DEX_BONUS:
        this->m_dDexBonus[nLevel] = ((double)value + 1000.0) / 1000.0;
        break;
      case PC_WIT_BONUS:
        this->m_dWitBonus[nLevel] = ((double)value + 1000.0) / 1000.0;
        break;
      case PC_CON_BONUS:
        this->m_dConBonus[nLevel] = ((double)value + 1000.0) / 1000.0;
        break;
      case PC_MEN_BONUS:
        this->m_dMenBonus[nLevel] = ((double)value + 1000.0) / 1000.0;
        break;
      case PC_LUC_BONUS:
        this->m_dLucBonus[nLevel] = ((double)value + 1000.0) / 1000.0;
        break;
      case PC_CHA_BONUS:
        this->m_dChaBonus[nLevel] = ((double)value + 1000.0) / 1000.0;
        break;
      default:
        CLog::Add(
          &Log,
          LOG_ERROR,
          (wchar_t *)L"[%s][%d] Unknown field[%s] setting",
          L"pc_param.cpp",
          1824,
          _PCParamFieldByLevel[field]);
        break;
    }
  }
  else
  {
    CLog::Add(
      &Log,
      LOG_ERROR,
      (wchar_t *)L"[%s][%d] Invalid level on field[%s] setting",
      L"pc_param.cpp",
      1779,
      nLevel,
      _PCParamFieldByLevel[field]);
  }
}

long double __fastcall CCreature::DexBonusF(CCreature *this)
{
  return CPCParamDB::GetParamBonus(&g_PCParamDB, PC_DEX_BONUS, this->m_data->m_Stat.m_N[4]);
}


long double __fastcall CPCParamDB::GetParamBonus(CPCParamDB *this, PCParamFieldByLevel field, int nLevel)
{
  int v3; // edx
  int v4; // edx
  int v5; // edx
  int v6; // edx
  int v7; // edx
  int v8; // edx
  int v9; // edx

  if ( field == PC_LEVEL_BONUS )
    return this->m_dLevelBonus[nLevel];
  v3 = field - 1;
  if ( !v3 )
    return this->m_dIntBonus[nLevel];
  v4 = v3 - 1;
  if ( !v4 )
    return this->m_dStrBonus[nLevel];
  v5 = v4 - 1;
  if ( !v5 )
    return this->m_dDexBonus[nLevel];
  v6 = v5 - 1;
  if ( !v6 )
    return this->m_dWitBonus[nLevel];
  v7 = v6 - 1;
  if ( !v7 )
    return this->m_dConBonus[nLevel];
  v8 = v7 - 1;
  if ( !v8 )
    return this->m_dMenBonus[nLevel];
  v9 = v8 - 1;
  if ( !v9 )
    return this->m_dLucBonus[nLevel];
  if ( v9 == 1 )
    return this->m_dChaBonus[nLevel];
  return DOUBLE_1_0;
}
 
BladeRunner, у тебя какая-то каша из данных и не очень полное понимание того, как работают те вещи, про которые ты пишешь. Твои данные, которые ты приводишь, они взяты из каких источников?
Вот например таблица значений бонуса dex для ПТС ХФ.
Код:
//DEX보너스
dex_bonus_begin
    attribute_1 = -15
    attribute_2 = -14
    attribute_3 = -14
    attribute_4 = -13
    attribute_5 = -12
    attribute_6 = -11
    .....
    return this->m_dChaBonus[nLevel];
  return DOUBLE_1_0;
}


Ща башка не варит, в куске кода на незнакомом языке разбираться) но ты суть основную не заметил, я ж тебе написал...
я привел табличку от ИЛа и ближайших хроник. это реверс различных разработчиков, которые работали с Ла2. и по этим данным как я понимаю строились многие эмуляторы.
Далее обрати внимание, то что я привел - совпадает с твоей табличкой для ХФ. по крайней мере основная рабочая часть в используемых значениях в стоковой игре. просто у тебя представлено в виде дельты, а в моей табличке - в виде множителя. у тебя х% + к 100% базовым, а у меня сразу множитель *1,х. результат тот же самый .
Причем тут опять хорошо видим, что узкоглазые - говнари в плане баланса. Так как представление в виде множителей - гораздо ближе к верной модели построения баланса, так как оно очевиднее показывает изменение характеристик класса/чара от изначально болванки. Например тебе надо сбалансировать два чара. один ты оставляешь исходным, а второму вдвое повышаешь атаку, но вдвое понижаешь п деф. и перемножая 2*0,5 ты получаешь единицу - равный итоговый баланс. А допустим если п деф 10, а п атак 100, то если ты пользуешься дельтами, то у тебя по одному параметру изменение в 2 раза дает 5 пунктов, а по другому - 50. и визуально они совершенно не бьются, хотя в относительных пропорциях они равны. и ты уже не можешь дальше анализировать и сравнивать эти дельты, в последующих изменениях, так как они содержат абсолютные значения, а тебе для подстройки и корректного сравнения при изменниие на следующих иттерациях - нужны относительные.
И кстати именно поэтому нцсофт обосрались с параметром декса, и он меньше всего влияет на чара при изменении татушками. так как они понапихали кучу связанных характеристик в него, но не верно учли их весовые действия. так как видать сравнивали абсолютные прибавки в циферках, а не фактический коэффициент усиления.

то что ты щас рассказал - лишний раз подтверждает мое мнение, что баланс в ЛА2 делали тупые долбоебы, судя по тому как и какими формулировками они пользовались. и я когда разгребаю это говно - все больше и больше плююсь.

ЗЫ а в годе и последующих хрониках им надо было сильнее раздувать статы чара, потому они просто стали умножать коэффициенты.
 
Последнее редактирование:
Назад
Сверху Снизу