igroglaz / srvmgr

https://rom2.ru
8 stars 5 forks source link

quests availability depends on skills #101

Closed igroglaz closed 3 years ago

igroglaz commented 3 years ago

Kobik: мешает отключение квестов из-за перекача. Вообще интересно было бы с этим разобраться, почему, например, когда мелких мобов перестает давать, то помимо людов-троллей-драконов остаются мыши? Каким образом игра считает их сильными? Помимо экспы у мобов есть характеристика power, но он у мышей не выделяется - довольно мал. Может считается удельная power/maxHP? Например заметил, что кода пропал квест перехвата орка, остался квест перехвата группы с пчелами. Но всё же пчелы выпадают намного раньше мышей. В общем если удастся со всем этим разобраться, то можно попробовать расширить границы доступности квестов. А то получается, что сначала ты не можешь убить моба, а когда стал готов, то тебе не дают на него квест. Остается отстреливать людоедов через белок))

you can't get quests from tavern if you have high skills

Temporary solution: 1) do not use main weapon skill (it gives bonus exp) 2) die a few time to lower exp :)

igroglaz commented 3 years ago
02:49] zhuxor:
//----- (0052D904) --------------------------------------------------------
int __thiscall sub_52D904(int this)
{
  int v2; // [esp+4h] [ebp-4h]

  v2 = *(signed __int16 *)(this + 190);
  if ( *(_BYTE *)(this + 74) == 3 )
    v2 += 25;
  if ( *(_WORD *)(this + 156) )
    v2 += 50;
  return v2;
}

[02:50] zhuxor: this + 74 = movement_type, this + 156 - мана юнита (только у кастеров)

[03:23] zhuxor: кстати, по поводу замены функции просчета таверной силы юнита
//----- (0052D904) --------------------------------------------------------
int __thiscall sub_52D904(int this)
{
  int v2; // [esp+4h] [ebp-4h]

  v2 = *(signed __int16 *)(this + 190);
  if ( *(_BYTE *)(this + 74) == 3 )
    v2 += 25;
  if ( *(_WORD *)(this + 156) )
    v2 += 50;
  return v2;
}

можно, например, использовать параметр power из data.bin, который нигде не используется
прочитать его (и любой другой) можно одной строчкой:
_DWORD unit_power = *(_DWORD *)(*(_DWORD *)(this[15] + 12) + (databin_param_id * 4))

где databin_param_id - порядковый номер параметра из датабина
т.е. для power это 47
[03:25] zhuxor:
//----- (0052D904) --------------------------------------------------------
int __thiscall sub_52D904(int this)
{
  return *(_DWORD *)(*(_DWORD *)(this[15] + 12) + (47 * 4));
}
igroglaz commented 3 years ago

https://github.com/igroglaz/srvmgr/pull/102/commits/b970a47fcceb2127e4105197636b9137328d19ae