Добрый вечер! Вопрос к программистам. Есть функция, которая определяет доход города (скопировано с базы ИДЫ Феанора):
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++, кроме того есть планы модифицировать под себя еще кое-какие функции, но очень нужен хоть один пример, по аналогии с которым я бы потихоньку начал разбираться дальше