Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Патчи > Принятые патчи

Важная информация

Принятые патчи Иногда выкладывают патчи, которые потом в итоге все-таки принимают в ядро.

Повод для гордости.

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.03.2010, 08:02   #1
zhenya
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 85
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 17 сообщениях
zhenya Скоро придёт к известности
По умолчанию [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.
zhenya вне форума  
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)
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[9867] Prevent another potion drink until combat end. newsbot CMaNGOS Commits 0 11.05.2010 10:50


Текущее время: 15:53. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot