Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
нету такойexpdata.txt
нету такой
ага ни в с4 ни в IL такого нету, мб в базе нужно искать?Она появилась на сколько мне известно в High Five, до этого возможно была формула (нужно смотреть).
bool CCreature::ValidateLevel(void)
{
__int64 v0; // rcx@0
__int64 v1; // rbx@1
__int64 v2; // r13@1
__int64 v3; // r8@1
__int64 v4; // rdx@1
__int64 v5; // rax@1
__int64 v6; // r12@1
signed int v7; // edi@1
signed int v8; // ebp@2
signed __int64 v9; // rsi@9
bool result; // al@11
int v11; // ecx@12
__int64 i; // rax@12
signed int v13; // edx@17
char v14; // al@27
__int64 v15; // rax@29
v1 = v0;
v2 = *(_QWORD *)(*MK_FP(__GS__, 88i64) + 8i64 * (unsigned int)TlsIndex);
v3 = *(_DWORD *)(v2 + 32024);
v4 = dword_1E8EC90[v3 + 0x100000];
dword_1E8EC90[v3 + 0x100000] = v4 + 1;
qword_226F890[v4 + 1000 * v3] = (__int64)&off_ADDB10;
v5 = *(_QWORD *)(v0 + 2704);
v6 = *(_QWORD *)(v5 + 256);
v7 = *(_DWORD *)(v5 + 1956);
if ( (unsigned __int8)(*(int (__fastcall **)(__int64))(*(_QWORD *)v1 + 328i64))(v1) )
{
v8 = 85;
if ( *(_DWORD *)(*(_QWORD *)(v1 + 2704) + 120i64) > 0 )
v8 = 80;
}
else
{
v8 = 99;
}
if ( v7 >= 1 )
{
if ( v7 > v8 )
v7 = v8;
}
else
{
v7 = 1;
}
v9 = v7;
if ( v6 < qword_AC9448[v7] )
{
if ( v7 <= 1 )
{
--dword_1E8EC90[*(_DWORD *)(v2 + 32024) + 0x100000];
return 0;
}
v11 = v7 - 1;
for ( i = v7 - 1; i >= 0; --i )
{
if ( v6 >= qword_AC9450[i] )
break;
--v11;
}
CCreature::LevelDown(v1);
}
if ( v6 >= qword_AC9450[v7] )
{
v13 = v7;
if ( v7 < (signed __int64)v8 )
{
do
{
if ( v6 < qword_AC9450[v9] )
break;
++v13;
++v9;
}
while ( v9 < v8 );
}
CCreature::LevelUp(v1);
}
if ( v7 > v8 )
v7 = v8;
(*(void (__fastcall **)(__int64))(*(_QWORD *)v1 + 1656i64))(v1);
if ( v7 != *(_DWORD *)(*(_QWORD *)(v1 + 2704) + 1956i64) )
{
if ( (unsigned __int8)(*(int (__fastcall **)(__int64))(*(_QWORD *)v1 + 352i64))(v1) )
{
(*(void (__fastcall **)(__int64))(*(_QWORD *)v1 + 464i64))(v1);
CSummon::SendSummonStatusToMaster();
}
else if ( (unsigned __int8)(*(int (__fastcall **)(__int64))(*(_QWORD *)v1 + 328i64))(v1) )
{
v14 = (*(int (__fastcall **)(__int64))(*(_QWORD *)v1 + 480i64))(v1);
CDB::SendSaveCharacterInfo((struct User *)qword_149AE80, v14, 0);
if ( v7 < *(_DWORD *)(*(_QWORD *)(v1 + 2704) + 1956i64) )
{
(*(void (__fastcall **)(__int64))(*(_QWORD *)v1 + 480i64))(v1);
CDB::RequestNewbieCheck((struct User *)qword_149AE80);
}
CCreature::ValidateAllOnSIM();
LODWORD(v15) = (*(int (__fastcall **)(__int64))(*(_QWORD *)v1 + 480i64))(v1);
(*(void (__fastcall **)(__int64))(*(_QWORD *)v15 + 2912i64))(v15);
}
}
result = 1;
--dword_1E8EC90[*(_DWORD *)(v2 + 32024) + 0x100000];
return result;
}
ясно...exe/dll
По поводу таблицы опыта на примере GF, находиться в l2server.exe.
PHP:bool CCreature::ValidateLevel(void) { __int64 v0; // rcx@0 __int64 v1; // rbx@1 __int64 v2; // r13@1 __int64 v3; // r8@1 __int64 v4; // rdx@1 __int64 v5; // rax@1 __int64 v6; // r12@1 signed int v7; // edi@1 signed int v8; // ebp@2 signed __int64 v9; // rsi@9 bool result; // al@11 int v11; // ecx@12 __int64 i; // rax@12 signed int v13; // edx@17 char v14; // al@27 __int64 v15; // rax@29 v1 = v0; v2 = *(_QWORD *)(*MK_FP(__GS__, 88i64) + 8i64 * (unsigned int)TlsIndex); v3 = *(_DWORD *)(v2 + 32024); v4 = dword_1E8EC90[v3 + 0x100000]; dword_1E8EC90[v3 + 0x100000] = v4 + 1; qword_226F890[v4 + 1000 * v3] = (__int64)&off_ADDB10; v5 = *(_QWORD *)(v0 + 2704); v6 = *(_QWORD *)(v5 + 256); v7 = *(_DWORD *)(v5 + 1956); if ( (unsigned __int8)(*(int (__fastcall **)(__int64))(*(_QWORD *)v1 + 328i64))(v1) ) { v8 = 85; if ( *(_DWORD *)(*(_QWORD *)(v1 + 2704) + 120i64) > 0 ) v8 = 80; } else { v8 = 99; } if ( v7 >= 1 ) { if ( v7 > v8 ) v7 = v8; } else { v7 = 1; } v9 = v7; if ( v6 < qword_AC9448[v7] ) { if ( v7 <= 1 ) { --dword_1E8EC90[*(_DWORD *)(v2 + 32024) + 0x100000]; return 0; } v11 = v7 - 1; for ( i = v7 - 1; i >= 0; --i ) { if ( v6 >= qword_AC9450[i] ) break; --v11; } CCreature::LevelDown(v1); } if ( v6 >= qword_AC9450[v7] ) { v13 = v7; if ( v7 < (signed __int64)v8 ) { do { if ( v6 < qword_AC9450[v9] ) break; ++v13; ++v9; } while ( v9 < v8 ); } CCreature::LevelUp(v1); } if ( v7 > v8 ) v7 = v8; (*(void (__fastcall **)(__int64))(*(_QWORD *)v1 + 1656i64))(v1); if ( v7 != *(_DWORD *)(*(_QWORD *)(v1 + 2704) + 1956i64) ) { if ( (unsigned __int8)(*(int (__fastcall **)(__int64))(*(_QWORD *)v1 + 352i64))(v1) ) { (*(void (__fastcall **)(__int64))(*(_QWORD *)v1 + 464i64))(v1); CSummon::SendSummonStatusToMaster(); } else if ( (unsigned __int8)(*(int (__fastcall **)(__int64))(*(_QWORD *)v1 + 328i64))(v1) ) { v14 = (*(int (__fastcall **)(__int64))(*(_QWORD *)v1 + 480i64))(v1); CDB::SendSaveCharacterInfo((struct User *)qword_149AE80, v14, 0); if ( v7 < *(_DWORD *)(*(_QWORD *)(v1 + 2704) + 1956i64) ) { (*(void (__fastcall **)(__int64))(*(_QWORD *)v1 + 480i64))(v1); CDB::RequestNewbieCheck((struct User *)qword_149AE80); } CCreature::ValidateAllOnSIM(); LODWORD(v15) = (*(int (__fastcall **)(__int64))(*(_QWORD *)v1 + 480i64))(v1); (*(void (__fastcall **)(__int64))(*(_QWORD *)v15 + 2912i64))(v15); } } result = 1; --dword_1E8EC90[*(_DWORD *)(v2 + 32024) + 0x100000]; return result; }
Далее видим if ( v6 < qword_AC9450[v9] )
Смотрим в IDA:
Кому не понятно: значения имеют тип long
44 00 00 00 00 00 00 00 = 68
6B 01 00 00 00 00 00 00 = 363
...
ясно...
можете скинуть свой exe от HF поглядеть?
опечатался с hf. Забыл я про этот отдельный файлЯ же написал - это Gracia Final, а в HF идет уже отдельно expdata.txt