|
Принятые патчи Иногда выкладывают патчи, которые потом в итоге все-таки принимают в ядро.
Повод для гордости. |
|
Опции темы | Поиск в этой теме | Опции просмотра |
22.04.2012, 21:49 | #1 |
Администратор
|
REMOVE_REQ_SOURCE_ITEM
В `quest_template` есть поля `ReqSourceIdX`, в которых указываются вспомогательные итемы, необходимые для выполнения квеста.
Итемы из этих полей с bonding=4 должны удаляться из инвентаря и банка в следующих ситуациях: 1. Квест сдан. 2. Игрок отказался от квеста. На текущий момент итемы не забираются вообще. Ревизия ядра: 11973. Патч во вложении, копия: http://paste2.org/p/1990165 Гетмангос не работает в обычном режиме, поэтому обсуждение патча пока здесь. Заметил, что в функции DestroyItemCount есть несколько одинаковых кусков кода, повторяющихся для каждого места хранения итемов, но пока не стал выносить их в отдельную функцию. Интересуют мнения: 1. Данный патч. 2. Оптимизация DestroyItemCount для избавления от повторяющихся кусков кода. |
23.04.2012, 00:55 | #2 |
MaNGOS Dev
Регистрация: 17.11.2011
Сообщений: 99
Сказал(а) спасибо: 35
Поблагодарили 80 раз(а) в 26 сообщениях
|
Код:
- if (const Quest *pQuest = sObjectMgr.GetQuestTemplate(quest)) |
23.04.2012, 09:18 | #3 |
Администратор
|
Опечатка, в других версиях патча проверка есть.
Должно быть так: Код:
const Quest *pQuest = sObjectMgr.GetQuestTemplate(quest); if (pQuest) { if (pQuest->HasSpecialFlag(QUEST_SPECIAL_FLAG_TIMED)) _player->RemoveTimedQuest(quest); for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i) { if (pQuest->ReqSourceId[i]) { ItemPrototype const* iProto = ObjectMgr::GetItemPrototype(pQuest->ReqSourceId[i]); if (iProto && iProto->Bonding == BIND_QUEST_ITEM) _player->DestroyItemCount(pQuest->ReqSourceId[i], pQuest->ReqSourceCount[i], true, false, true); } } } |