|
Патчи на рассмотрении Рассматриваемые к принятию патчи |
|
Опции темы | Поиск в этой теме | Опции просмотра |
05.02.2011, 00:14 | #1 |
Администратор
|
[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" |
05.02.2011, 10:27 | #2 |
Администратор
|
Поправил патч, теперь спелл работает правильно на нпц и игроков, прикрепил патч к посту.
Вопросы: 1. Почему при наведении на игрока в формах кошки, медведя и т.д. урон и броня показывают 0, а сопротивления вообще не отображаются? Где находится обработка этого момента? 2. Каким образом можно определить формы нпц/игрока, на которые можно кастовать спелл, чтобы при смене формы снимать его, если это необходимо? |
06.02.2011, 22:00 | #3 |
Гость
Сообщений: n/a
|
Вот насчёт этого пункта. Последней его части. При смене формы друидом, например с Кошка на Медведь баф слетает. Тоесть любая смена формы у друида приводит к слёту бафа, не важно в какую он потом сразу прыгнет.. Медведь, ВОрон и тд..
|
Пользователь сказал cпасибо: | virusav (06.02.2011) |
06.02.2011, 23:30 | #4 | |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
Цитата:
а можно уточнить, какой баф слетает? все бафы слетают (не может быть)? наверное по флагам как то определяется, какие именно... |
|
07.02.2011, 00:45 | #5 | |
Гость
Сообщений: n/a
|
Цитата:
|
|
Пользователь сказал cпасибо: | RomanRom2 (07.02.2011) |
09.02.2011, 21:55 | #6 |
Администратор
|
Обновил патч и вложение в первом посте: добавлено удаление аур SPELL_AURA_EMPATHY при смене форм.
На текущий момент остается проблема с отображением характеристик только об игроке: 1. Урон. 2. Броня. 3. Сопротивления. Что за это отвечает? |
30.07.2011, 10:24 | #7 |
Администратор
|
Возвращаемся к данной теме.
Каким образом можно получить информацию о сопротивлениях нпц/игрока (в UNIT_DYNFLAG_SPECIALINFO этого нет)? |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[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 |