Не привык бросать уже начатое. Надо бы довести его до ума.
Для Пирамиды используется тот же алгоритм определения кол-ва стеков, что и для нейтралов, а также Заброшенной шахты (т.е. Deviation нельзя взять и убрать). Просто от результирующего кол-ва Золотых големов отнимается 2 (ну, и идёт проверка, чтобы их не стало меньше одного). Для HD+ нужны другие коэффициенты devCoef[] и их нужно вычислять.
Ну вы же понимаете, что сам я их уж точно не вычислю. А кроме вас, помочь здесь могут ну еще от силы пару человек, которых вы прекрасно знаете. Но они, к сожалению, посещают данный форум уж явно реже вас. Так что помочь, кроме вас, то особо и некому...
- Код: Выделить всё
int getStacksCount(double k, char x, char y, char z)
{
__int64 devCoef[] = { 0xA, 0xB, 0xC, 0xD }; // for HD+
int n = 2;
if (k < 0.50) n = 7; else
if (k < 0.67) n = 6; else
if (k < 1.00) n = 5; else
if (k < 1.50) n = 4; else
if (k < 2.00) n = 3;
// Deviation
__int64 splitValue = (((devCoef[0] * x + devCoef[1] * y + devCoef[2] * z + devCoef[3]) >> 0x10) & 0x7FFF) % 100 + 1;
if (splitValue <= 20) --n;
if (splitValue >= 80 && n < 7) ++n;
return n;
}
В общем нужна ваша помощь в вычислении devCoef для HD+.
Ну и, наверное, надо бы проверку в getStacksCount добавить на то, вкл ли HD+. Если HD+ выкл, то брать эти коеф:
{ 0x5C6F80EB, 0xC8374AB9, 0x73D409E3, 0xBD38DECE }, а если вкл, то другие (для HD+).
Как я понимаю теперь нам нужно переприсвоить оригинальному сообщению в функции showGuardsRMB по Пирамиде первую строку с названием объекта, чтобы убрать два перевода строк и строку (Посещено). Как вообще более правильно поправить код, чтобы вывод после посещения был общей охраны (Толпа 20-49 и тп) из ARRAYTXT, как на скрине со Склепом без разбивки на отряды по ПКМ (разбивка только в диалоге при посещении)?
Поставить хук туда, где добавляется "\n\n(Visited)" и переписать сообщение на своё. Завтра гляну.
Эх, уже месяц прошел, а мы так с вами это и не сделали...