Добрый вечер! Вопрос к программистам. Есть функция, которая определяет доход города (скопировано с базы ИДЫ Феанора):
Code:
//----- (005BFA00) --------------------------------------------------------
signed int __thiscall Town_GetGoldIncome(int this, char a2)
{
  signed int result; // eax@1
  int v3; // edi@1
  int v4; // esi@1
  int v5; // edx@9
  v4 = *(_DWORD *)(this + 336);
  v3 = *(_DWORD *)(this + 340);
  result = 500;
  if ( __PAIR__(
         (unsigned int)TownHallMask2 & *(_DWORD *)(this + 340),
         (unsigned int)TownHallMask & *(_DWORD *)(this + 336)) )
    result = 1000;
  if ( CityHallMask2 & v3 | CityHallMask & v4 )
    result = 2000;
  if ( CapitolMask2dword & v3 | CapitolMask & v4 )
    result = 4000;
  if ( a2 )
  {
    if ( ResSiloMask2 & v3 | (unsigned int)ResSiloMask & v4 )
    {
      v5 = *(_BYTE *)(this + 4);
      LOWORD(v5) = LOWORD(TownsResourceSilo[7 * v5 + 6]);
      result += v5;
    }
  }
  if ( __PAIR__((unsigned int)GrailMask2 & *(_DWORD *)(this + 348), (unsigned int)GrailMask & *(_DWORD *)(this + 344)) )
    result += 5000;
  return result;
}
// 66CDF0: using guessed type int TownHallMask;
// 66CDF4: using guessed type int TownHallMask2;
// 66CDF8: using guessed type int CityHallMask;
// 66CDFC: using guessed type int CityHallMask2;
// 66CE00: using guessed type int CapitolMask;
// 66CE04: using guessed type int CapitolMask2dword;
// 66CE6C: using guessed type int GrailMask2;
// 688F04: using guessed type int TownsResourceSilo[63];
 
Первый вопрос, как правильно понимать данное условие:
Code:
if ( __PAIR__(
         (unsigned int)TownHallMask2 & *(_DWORD *)(this + 340),
         (unsigned int)TownHallMask & *(_DWORD *)(this + 336)) )
 
, вижу что проверка на построенный таунхолл, но что именно происходит в условии не понимаю.
Второй вопрос, как с помощью длл добавить еще одно условие перед return result: если город Темница, и построен торговец артефактами то доход +100? У меня есть скрипт, который писал на ЕРМ, он просчитывает количество темниц, проверяет постройку здания, а потом прибавляет залото в начале хода, но хочеться научиться писать подобные штуки в Microsoft Visual C++, кроме того есть планы модифицировать под себя еще кое-какие функции, но очень нужен хоть один пример, по аналогии с которым я бы потихоньку начал разбираться дальше