Таблица получения опыта PTS

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

monami

Выдающийся
Местный
Сообщения
244
Розыгрыши
0
Репутация
118
Реакции
50
Баллы
1 373
Всем доброго времени суток, вопрос следующий. Где искать таблицу получения опыта чара в PTS?
 

Не знаю ПТС это как сказка о тридесятом царстве все онем говорят но негде его нету за оф я нечего не говорю )
 
По поводу таблицы опыта на примере 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
...
 
Последнее редактирование модератором:
ясно...

По поводу таблицы опыта на примере 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 от GF поглядеть?
 
Последнее редактирование модератором:
Назад
Сверху Снизу