Ru-MaNGOS

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

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

Патчи на рассмотрении Рассматриваемые к принятию патчи

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.02.2011, 00:14   #1
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию [patch/dev][spell=1462]Знание зверя

Спелл http://ru.wowhead.com/spell=1462 должен отображать подробности об нпц или игроке в формах животных только для кастера.

Патч:
Код:
diff --git a/src/game/Object.cpp b/src/game/Object.cpp
index 2dfa981..728555e 100644
--- a/src/game/Object.cpp
+++ b/src/game/Object.cpp
@@ -637,17 +637,45 @@ void Object::BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask *
                     *data << (m_uint32Values[index] & ~UNIT_FLAG_NOT_SELECTABLE);
                 }
                 // hide lootable animation for unallowed players
-                else if (index == UNIT_DYNAMIC_FLAGS && GetTypeId() == TYPEID_UNIT)
+                else if (index == UNIT_DYNAMIC_FLAGS)
                 {
-                    if (!target->isAllowedToLoot((Creature*)this))
-                        *data << (m_uint32Values[index] & ~(UNIT_DYNFLAG_LOOTABLE | UNIT_DYNFLAG_TAPPED_BY_PLAYER));
-                    else
+                    uint32 appendValue = m_uint32Values[index];
+
+                    // checking SPELL_AURA_EMPATHY and caster
+                    if (((Unit*)this)->isAlive())
                     {
-                        // flag only for original loot recipent
-                        if (target->GetObjectGuid() == ((Creature*)this)->GetLootRecipientGuid())
-                            *data << m_uint32Values[index];
+                        bool bIsEmpathy = false;
+                        bool bIsCaster = false;
+                        Unit::AuraList const& mAuraEmpathy = ((Unit*)this)->GetAurasByType(SPELL_AURA_EMPATHY);
+                        for(Unit::AuraList::const_iterator i = mAuraEmpathy.begin(); i != mAuraEmpathy.end(); ++i)
+                        {
+                            bIsEmpathy = true;
+                            if ((*i)->GetCasterGuid() == target->GetObjectGuid())
+                            {
+                                bIsCaster = true;
+                                break;
+                            }
+                        }
+                        if (bIsEmpathy && !bIsCaster)
+                            appendValue &= ~UNIT_DYNFLAG_SPECIALINFO;
+                    }
+
+                    if (GetTypeId() == TYPEID_UNIT)
+                    {
+                        if (!target->isAllowedToLoot((Creature*)this))
+                            *data << (appendValue & ~(UNIT_DYNFLAG_LOOTABLE | UNIT_DYNFLAG_TAPPED_BY_PLAYER));
                         else
-                            *data << (m_uint32Values[index] & ~(UNIT_DYNFLAG_TAPPED | UNIT_DYNFLAG_TAPPED_BY_PLAYER));
+                        {
+                            // flag only for original loot recipent
+                            if (target->GetObjectGuid() == ((Creature*)this)->GetLootRecipientGuid())
+                                *data << appendValue;
+                            else
+                                *data << (appendValue & ~(UNIT_DYNFLAG_TAPPED | UNIT_DYNFLAG_TAPPED_BY_PLAYER));
+                        }
+                    }
+                    else
+                    {
+                        *data << appendValue;
                     }
                 }
                 else
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index bcedb01..dc89c6c 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -3066,6 +3066,14 @@ void Aura::HandleAuraModShapeshift(bool apply, bool Real)
 
     Unit *target = GetTarget();
 
+    // remove SPELL_AURA_EMPATHY
+    Unit::AuraList const& mAuraEmpathy = target->GetAurasByType(SPELL_AURA_EMPATHY);
+    for(Unit::AuraList::const_iterator i = mAuraEmpathy.begin(); i != mAuraEmpathy.end(); ++i)
+    {
+        target->RemoveAurasByCasterSpell((*i)->GetId(), (*i)->GetCasterGUID());
+        i = mAuraEmpathy.begin();
+    }
+
     SpellShapeshiftFormEntry const* ssEntry = sSpellShapeshiftFormStore.LookupEntry(form);
     if (!ssEntry)
     {
@@ -6475,12 +6483,10 @@ void Aura::HandleShapeshiftBoosts(bool apply)
 
 void Aura::HandleAuraEmpathy(bool apply, bool /*Real*/)
 {
-    if(GetTarget()->GetTypeId() != TYPEID_UNIT)
+    if (GetTarget()->GetTypeId() != TYPEID_UNIT && GetTarget()->GetTypeId() != TYPEID_PLAYER)
         return;
 
-    CreatureInfo const * ci = ObjectMgr::GetCreatureTemplate(GetTarget()->GetEntry());
-    if(ci && ci->type == CREATURE_TYPE_BEAST)
-        GetTarget()->ApplyModUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_SPECIALINFO, apply);
+    GetTarget()->ApplyModUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_SPECIALINFO, apply);
 }
 
 void Aura::HandleAuraUntrackable(bool apply, bool /*Real*/)
Код:
Creature Type Mask = 0x00000001 (BEAST)
Skill (Id 50) "Beast Mastery"
Вложения
Тип файла: diff spell_1462.diff (4.4 Кб, 2 просмотров)
virusav вне форума   Ответить с цитированием
Старый 05.02.2011, 10:27   #2
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Поправил патч, теперь спелл работает правильно на нпц и игроков, прикрепил патч к посту.

Вопросы:
1. Почему при наведении на игрока в формах кошки, медведя и т.д. урон и броня показывают 0, а сопротивления вообще не отображаются? Где находится обработка этого момента?
2. Каким образом можно определить формы нпц/игрока, на которые можно кастовать спелл, чтобы при смене формы снимать его, если это необходимо?
virusav вне форума   Ответить с цитированием
Старый 06.02.2011, 22:00   #3
ZirO
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
Вопросы:
2. Каким образом можно определить формы нпц/игрока, на которые можно кастовать спелл, чтобы при смене формы снимать его, если это необходимо?
Вот насчёт этого пункта. Последней его части. При смене формы друидом, например с Кошка на Медведь баф слетает. Тоесть любая смена формы у друида приводит к слёту бафа, не важно в какую он потом сразу прыгнет.. Медведь, ВОрон и тд..
  Ответить с цитированием
Пользователь сказал cпасибо:
virusav (06.02.2011)
Старый 06.02.2011, 23:30   #4
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
2. Каким образом можно определить формы нпц/игрока, на которые можно кастовать спелл, чтобы при смене формы снимать его, если это необходимо?
очевидно, что по байту shapeshiftForm, это поле UNIT_FIELD_BYTES_1. но вообще где то в структуре юнита должны быть соответствующие свойства.

Цитата:
Сообщение от ZirO Посмотреть сообщение
Вот насчёт этого пункта. Последней его части. При смене формы друидом, например с Кошка на Медведь баф слетает. Тоесть любая смена формы у друида приводит к слёту бафа, не важно в какую он потом сразу прыгнет.. Медведь, ВОрон и тд..
а можно уточнить, какой баф слетает? все бафы слетают (не может быть)? наверное по флагам как то определяется, какие именно...
RomanRom2 вне форума   Ответить с цитированием
Старый 07.02.2011, 00:45   #5
ZirO
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от RomanRom2 Посмотреть сообщение
а можно уточнить, какой баф слетает? все бафы слетают (не может быть)? наверное по флагам как то определяется, какие именно...
Нет. Тут разговор только об обном бафе, который вешается при касте на игрока/НПЦ спелла Знание зверя. Хотя это работает так же и на замедляющие спеллы, когда в того же Друида в форме кота вешаешь замедление, то при переходе например в форму медведя, это замедление спадает. Этим часто на БГ игроки пользуются. Сам проверял, у меня друль есть, правда низкого уровня, но 2 формы есть Кот/Медведь.
  Ответить с цитированием
Пользователь сказал cпасибо:
RomanRom2 (07.02.2011)
Старый 09.02.2011, 21:55   #6
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Обновил патч и вложение в первом посте: добавлено удаление аур SPELL_AURA_EMPATHY при смене форм.

На текущий момент остается проблема с отображением характеристик только об игроке:
1. Урон.
2. Броня.
3. Сопротивления.

Что за это отвечает?
virusav вне форума   Ответить с цитированием
Старый 30.07.2011, 10:24   #7
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Возвращаемся к данной теме.
Каким образом можно получить информацию о сопротивлениях нпц/игрока (в UNIT_DYNFLAG_SPECIALINFO этого нет)?
virusav вне форума   Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[spell=1462]Знание зверя virusav Баг-репорты 3 29.01.2011 17:47
[10570] Store spell entry of triggering spell on triggered, original patch provided by insider42 newsbot CMaNGOS Commits 0 01.10.2010 14:20
[patch] PvP Trinket (boss spell) Insider42 Принятые патчи 1 03.07.2010 12:18
[patch]Raise of dead spell 46584 tester20 Патчи на рассмотрении 5 21.05.2010 23:45
[patch] fix spell 38736 KiriX Принятые патчи 1 03.05.2010 00:20


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


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