По поводу таблицы опыта на примере 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
...