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)
Старый 26.03.2010, 09:10   #2
Anti
Пользователь
 
Аватар для Anti
 
Регистрация: 12.03.2010
Адрес: Беларусь
Сообщений: 54
Сказал(а) спасибо: 8
Поблагодарили 24 раз(а) в 17 сообщениях
Записей в дневнике: 1
Anti На верном пути
Отправить сообщение для Anti с помощью ICQ Отправить сообщение для Anti с помощью Skype™
По умолчанию

Тоже самое патчем, по идее будет работать.
Вложения
Тип файла: patch pot_fix.patch (2.2 Кб, 22 просмотров)
Anti вне форума  
Пользователь сказал cпасибо:
PSZ (01.04.2010)
Старый 26.03.2010, 09:51   #3
zhenya
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 85
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 17 сообщениях
zhenya Скоро придёт к известности
По умолчанию

варианты были или, а не вместе
в общем я думаю более правильно решение проблемы в void WorldSession::HandleUseItemOpcode(WorldPacket& recvPacket)
zhenya вне форума  
Пользователь сказал cпасибо:
Anti (27.03.2010)
Старый 27.03.2010, 13:24   #4
Anti
Пользователь
 
Аватар для Anti
 
Регистрация: 12.03.2010
Адрес: Беларусь
Сообщений: 54
Сказал(а) спасибо: 8
Поблагодарили 24 раз(а) в 17 сообщениях
Записей в дневнике: 1
Anti На верном пути
Отправить сообщение для Anti с помощью ICQ Отправить сообщение для Anti с помощью Skype™
По умолчанию

я видимо немного тупанул
Счяс переделаемс.

Там у меня был баг, что при юзаньи банки потом невозможно кастить. Фиксед.
Работает, но блин эрор меседж "вы больше не можете пить" - лихо! Плюсую
И кстати, я думаю все простят если не выводить еррор меседж.

Код:
        if (pItem->IsPotion() && pUser->GetLastPotionId())
            return;
Код от этого выигрывает и по сути дела нету никакой нужды что-то выводить, тк вывод для не частого действия, длящегося доли секунды, не нужен.
Вложения
Тип файла: patch pot_fix.patch (1.2 Кб, 24 просмотров)

Последний раз редактировалось Anti; 27.03.2010 в 14:20.
Anti вне форума  
2 пользователя(ей) сказали cпасибо:
PSZ (01.04.2010), Vladimir (11.05.2010)
Старый 11.05.2010, 10:33   #5
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

В [9867]. Спасибо. Специальное Anti за подготовку в виде diff-файла.
__________________
Так как устал объяснять знайте ICQ не пользуюсь
Vladimir вне форума  
 


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

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


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


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


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