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();
}
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 моба.
Вечная проблема с расчётом статов для монстров. Может есть хоть приблизительный калькулятор или формула по имеющимся данным, на пример хп/мп, уровень, базовые статы CON/DEX/INT/MEN....(не берём в счёт умения) как то установить их P.atk / M.atk / P.def / M.def, есть ли где то связанная логика
Статы CON/DEX/INT/MEN почти у всех одинаковые кроме РБконечно, да куча чего влияет на общий итог, всякие пассивки, локации, день/ночь и т.п По сути атака и деф схожи в пачках в конкретной локации, различия дают скилы и тип монстра, маг/лучник/файтер - но как они берут и прямо пишут в датнике к прмеру что у 120 ур монстра ХП - 25ккк и можно ли как то отталкиваться с хп/мп/лвл/эксп на базовые физ-храктеристики
На параметры любого существа в Л2 - влияют только два параметра. Его базовые параметры существа и модификаторы от эффектов. Ничего другого на них не влияет. Итоговое значение рассчитывается по довольно хитровыебанным формулам, которые практически нереально восстановить экспериментально, кроме самых простых. Единственный достоверный способ эти формулы восстановить - реверсить птску, благо корейцы не сильно любят их радикально менять, ввиду огромного количества легаси кода, который на них завязан. Например, если сравнивать ХФ и условный сальвейшен, то различия там буквально в десятке формул из 100+ штук, при этом, в большинстве случаев эти различия обусловлены просто введением новых характеристик. Поэтому берите ИДА, потрошите слитые ПТСки 287 протокола и тащите к себе формулы.Статы CON/DEX/INT/MEN почти у всех одинаковые кроме РБконечно, да куча чего влияет на общий итог, всякие пассивки, локации, день/ночь и т.п По сути атака и деф схожи в пачках в конкретной локации, различия дают скилы и тип монстра, маг/лучник/файтер - но как они берут и прямо пишут в датнике к прмеру что у 120 ур монстра ХП - 25ккк и можно ли как то отталкиваться с хп/мп/лвл/эксп на базовые физ-храктеристики
На параметры любого существа в Л2 - влияют только два параметра. Его базовые параметры существа и модификаторы от эффектов. Ничего другого на них не влияет. Итоговое значение рассчитывается по довольно хитровыебанным формулам, которые практически нереально восстановить экспериментально, кроме самых простых. Единственный достоверный способ эти формулы восстановить - реверсить птску, благо корейцы не сильно любят их радикально менять, ввиду огромного количества легаси кода, который на них завязан. Например, если сравнивать ХФ и условный сальвейшен, то различия там буквально в десятке формул из 100+ штук, при этом, в большинстве случаев эти различия обусловлены просто введением новых характеристик. Поэтому берите ИДА, потрошите слитые ПТСки 287 протокола и тащите к себе формулы.
Даже на убогих формулах можно подогнать кастомный пдеф, чтобы ДПС чара был похож на оф сервер.а смысл? Я о таком способе не писал ибо формулы у мобиуса точно не актуальные.
то есть по твоему если у моба 30 декс они чисто визуальные а статы ему не добавляют ?На параметры любого существа в Л2 - влияют только два параметра. Его базовые параметры существа и модификаторы от эффектов. Ничего другого на них не влияет. Итоговое значение рассчитывается по довольно хитровыебанным формулам, которые практически нереально восстановить экспериментально, кроме самых простых. Единственный достоверный способ эти формулы восстановить - реверсить птску, благо корейцы не сильно любят их радикально менять, ввиду огромного количества легаси кода, который на них завязан. Например, если сравнивать ХФ и условный сальвейшен, то различия там буквально в десятке формул из 100+ штук, при этом, в большинстве случаев эти различия обусловлены просто введением новых характеристик. Поэтому берите ИДА, потрошите слитые ПТСки 287 протокола и тащите к себе формулы.
На птс добавляют, явы типа люцеры эти статы не учитывают. Ацис учитывает, например.то есть по твоему если у моба 30 декс они чисто визуальные а статы ему не добавляют ?
Т.е по моему, DEX - это один из базовых параметров существа. При этом, само значение DEX почти нигде прямо не используется, а используется модификатор его значения, который показывает смещения от дельты.то есть по твоему если у моба 30 декс они чисто визуальные а статы ему не добавляют ?
это что у вас за шайтан машина все куда проще что в выдумываете какую то мусоркуТ.е по моему, 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%
DEX | modifier | DEX | modifier |
21 | 1.01 | 33 | 1.13 |
22 | 1.02 | 34 | 1.14 |
23 | 1.03 | 35 | 1.15 |
24 | 1.04 | 36 | 1.16 |
25 | 1.05 | 37 | 1.17 |
26 | 1.06 | 38 | 1.18 |
27 | 1.07 | 39 | 1.19 |
28 | 1.08 | 40 | 1.20 |
29 | 1.09 | 41 | 1.21 |
30 | 1.10 | 42 | 1.22 |
31 | 1.11 | 43 | 1.24 |
32 | 1.12 |
На птс добавляют, явы типа люцеры эти статы не учитывают. Ацис учитывает, например.
//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
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; }
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?