|
Принятые патчи Иногда выкладывают патчи, которые потом в итоге все-таки принимают в ядро.
Повод для гордости. |
|
Опции темы | Поиск в этой теме | Опции просмотра |
26.03.2010, 08:02 | #1 |
Пользователь
Регистрация: 12.03.2010
Сообщений: 85
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 17 сообщениях
|
[9867][patch] Potions
в общем как я понял проблема возникает когда пьют бутылочки макросом и можно выпить > 1. ( кд бутылочек выставляется в spell::finish, так что есть потенциальная возможность выпить 2 бутылочку до того как каст 1ой дошел до spell::finish ).
фикс в Player.h после Код:
void SetLastPotionId(uint32 item_id) { m_lastPotionId = item_id; } Код:
uint32 GetLastPotionId() { return m_lastPotionId; } Spell.cpp в после Код:
SpellCastResult Spell::CheckCast(bool strict) ... else return SPELL_FAILED_NOT_READY; } Код:
// cooldown for potions set in spell::finish so we can use 2 potion before sendcooldownevent // after sendcooldown in spell::finish m_lastPotionId sets to 0 if (m_caster->GetTypeId() == TYPEID_PLAYER && ((Player*)m_caster)->GetLastPotionId() != 0) return SPELL_FAILED_NOT_READY; void WorldSession::HandleUseItemOpcode(WorldPacket& recvPacket) Код:
if (pUser->isInCombat()) { for(int i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i) { if (SpellEntry const *spellInfo = sSpellStore.LookupEntry(proto->Spells[i].SpellId)) { if (IsNonCombatSpell(spellInfo)) { pUser->SendEquipError(EQUIP_ERR_NOT_IN_COMBAT,pItem,NULL); return; } } } } Код:
if (pUser->isInCombat()) { for(int i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i) { if (SpellEntry const *spellInfo = sSpellStore.LookupEntry(proto->Spells[i].SpellId)) { if (IsNonCombatSpell(spellInfo)) { pUser->SendEquipError(EQUIP_ERR_NOT_IN_COMBAT,pItem,NULL); return; } } } // todo may be find better error. if (pItem->IsPotion() && pUser->GetLastPotionId()) { pUser->SendEquipError(EQUIP_ERR_OBJECT_IS_BUSY,pItem,NULL); return; } } Последний раз редактировалось zhenya; 26.03.2010 в 08:09. |
8 пользователя(ей) сказали cпасибо: | Anti (27.03.2010), ANTOMA (26.03.2010), Den (26.03.2010), Feel the Power (27.03.2010), Hantet (26.03.2010), PSZ (26.03.2010), Vladimir (11.05.2010), Кот ДаWINчи (27.03.2010) |
26.03.2010, 09:51 | #3 |
Пользователь
Регистрация: 12.03.2010
Сообщений: 85
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 17 сообщениях
|
варианты были или, а не вместе
в общем я думаю более правильно решение проблемы в void WorldSession::HandleUseItemOpcode(WorldPacket& recvPacket) |
Пользователь сказал cпасибо: | Anti (27.03.2010) |
27.03.2010, 13:24 | #4 |
Пользователь
Регистрация: 12.03.2010
Адрес: Беларусь
Сообщений: 54
Сказал(а) спасибо: 8
Поблагодарили 24 раз(а) в 17 сообщениях
Записей в дневнике: 1
|
я видимо немного тупанул
Счяс переделаемс. Там у меня был баг, что при юзаньи банки потом невозможно кастить. Фиксед. Работает, но блин эрор меседж "вы больше не можете пить" - лихо! Плюсую И кстати, я думаю все простят если не выводить еррор меседж. Код:
if (pItem->IsPotion() && pUser->GetLastPotionId()) return; Последний раз редактировалось Anti; 27.03.2010 в 14:20. |
11.05.2010, 10:33 | #5 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
В [9867]. Спасибо. Специальное Anti за подготовку в виде diff-файла.
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[9867] Prevent another potion drink until combat end. | newsbot | CMaNGOS Commits | 0 | 11.05.2010 10:50 |