|
Баг-репорты Описываем проблемы и ошибки работы ядра |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
03.03.2012, 19:00 | #1 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Achievement 1833
Столкнулся тут с интересной неработающей ачивкой.
Странно, должен сказать, не работающей. Прогресс считается, а выполнение не засчитывается. 1833 ачивка. В прогрессе показано, что выполнено 32 из 25, а не засчитывается. В чём может быть подвох? По коду полазил с флагами посмотрел - стандартная ачива, обработка которой в коде имеется... Правда она ещё содержит пару флагов, обработку которых я в коде так и не нашёл... |
03.03.2012, 19:45 | #2 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Т.к. ачивка имеет флаг ACHIEVEMENT_FLAG_SUMM, обратился к этому куску кода:
Код:
if (entry->flags & ACHIEVEMENT_FLAG_SUMM) { for(AchievementCriteriaEntryList::const_iterator itr = cList->begin(); itr != cList->end(); ++itr) { AchievementCriteriaEntry const* criteria = *itr; CriteriaProgressMap::const_iterator itrProgress = m_criteriaProgress.find(criteria->ID); if(itrProgress == m_criteriaProgress.end()) continue; CriteriaProgress const* progress = &itrProgress->second; count += progress->counter; // for counters, field4 contains the main count requirement if (count >= criteria->raw.count) return true; } return false; } По идее должно идти сравнение с числом, что в achievementForTestCount (код чуть выше фрагмента), а его тут нет... |
03.03.2012, 20:37 | #3 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Вариант завершения в самом цикле есть:
Код:
// for counters, field4 contains the main count requirement if (count >= criteria->raw.count) return true;
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
03.03.2012, 21:19 | #4 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Спасибо, соврал я с флагами... У данной ачивки флаги ACHIEVEMENT_FLAG_REQ_COUNT и ACHIEVEMENT_FLAG_BAR
Опять сначала - не понятно, почему не засчитывается Отдельной обработки этих флагов нет... |
05.03.2012, 12:42 | #5 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Агась... Понял, отрыл... Ачивка 1833 выполняется на основе ачивки 346 (общее число выпитых напитков). Но она имеет флаг 1 - каунтер. Собственно, когда идёт зачёт каунтера, попадаем в блок:
Код:
// nothing do for counter case if (achievement->flags & ACHIEVEMENT_FLAG_COUNTER) return; Проблемы две: Первое: таким образом работают всего ДВЕ ачивки. Хакать??? Второе: я пробовал в дебаге на лету менять флаг с 9 на 8 при обработке ачивки 346, в результате чего серв входил в вечный цикл и падал... Есть ещё у кого какие идеи? |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Неработающие Достижения\Achievement | Володимир | Корзина | 5 | 26.12.2010 09:10 |
Достижение/Achievement Крепость Утгард | Володимир | Корзина | 1 | 25.12.2010 19:32 |
[10342] Cleanup achievement code and add new commands. | newsbot | CMaNGOS Commits | 1 | 11.08.2010 08:27 |
Achievement | Alucard | Флудильня | 6 | 16.03.2010 17:08 |