|
Патчи на рассмотрении Рассматриваемые к принятию патчи |
|
Опции темы | Поиск в этой теме | Опции просмотра |
30.03.2013, 19:17 | #1 |
Ученый
Регистрация: 10.03.2010
Адрес: Бобруйск
Сообщений: 284
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
|
[patch] Check cast melee spell
Hi.
Melee spell cast to in front target and laterally. Constant M_PI_F not fit, rather, its value is not correct. Ближние спелы кастуются перед целью и сбоку. А, у нас стоя спиной к цели, можно бить ее любым ближним спелам. Константа M_PI_F не подходит, скорее ее значение не верно. Код:
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 9d72290..89763ae 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -5048,6 +5048,14 @@ SpellCastResult Spell::CheckCast(bool strict) // check if target is in combat if (non_caster_target && m_spellInfo->HasAttribute(SPELL_ATTR_EX_NOT_IN_COMBAT_TARGET) && target->isInCombat()) return SPELL_FAILED_TARGET_AFFECTING_COMBAT; + + // check that the target was in front caster + if (m_caster->IsNonMeleeSpellCasted(false)) + { + float orientationCaster = 3.3f; + if (!m_caster->HasInArc(orientationCaster, target)) + return SPELL_FAILED_UNIT_NOT_INFRONT; + } } // zone check uint32 zone, area; |
30.03.2013, 20:00 | #2 |
MaNGOS Dev
Регистрация: 17.11.2011
Сообщений: 99
Сказал(а) спасибо: 35
Поблагодарили 80 раз(а) в 26 сообщениях
|
hmm, you suggest a diff to the (rather natural PI) by 0.15, this is roughly 1/40 of a circle, so a _very_ small glitch (2 degrees on each side of the cone)
This appears strange to me And isn't there already an IsInFront check in another place that might need replacement/ adjustment? Also a small note: I think HasInArc should not work on point-to-point, but rather on box-to-box mechanic (which would autoamatically work as a bigger angle would) |
31.03.2013, 04:30 | #3 |
MaNGOS Dev
Регистрация: 17.11.2011
Сообщений: 99
Сказал(а) спасибо: 35
Поблагодарили 80 раз(а) в 26 сообщениях
|
the related place of this check is at this line:
Код:
if ((m_spellInfo->Attributes == (SPELL_ATTR_UNK4 | SPELL_ATTR_NOT_SHAPESHIFT | SPELL_ATTR_UNK18 | SPELL_ATTR_STOP_ATTACK_TARGET)) && !target->HasInArc(M_PI_F, m_caster)) |
03.04.2013, 10:37 | #4 |
Ученый
Регистрация: 10.03.2010
Адрес: Бобруйск
Сообщений: 284
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
|
|
28.12.2013, 19:44 | #5 |
Ученый
Регистрация: 10.03.2010
Адрес: Бобруйск
Сообщений: 284
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
|
Очень хорошо для проверки нужных спелов подходит атрибут SPELL_ATTR_EX_UNK27
Код:
@@ -4420,11 +4420,19 @@ SpellCastResult Spell::CheckCast(bool strict) } // check if target is in combat if (non_caster_target && m_spellInfo->HasAttribute(SPELL_ATTR_EX_NOT_IN_COMBAT_TARGET) && target->isInCombat()) return SPELL_FAILED_TARGET_AFFECTING_COMBAT; + + // check melee spell that the target was in front caster + if (m_spellInfo->HasAttribute(SPELL_ATTR_EX_UNK9) || m_spellInfo->HasAttribute(SPELL_ATTR_EX_UNK27)) + { + if (!m_caster->HasInArc(M_PI_F, target)) + return SPELL_FAILED_UNIT_NOT_INFRONT; + } } + // zone check uint32 zone, area; m_caster->GetZoneAndAreaId(zone, area); SpellCastResult locRes = sSpellMgr.GetSpellAllowedInLocationError(m_spellInfo, m_caster->GetMapId(), zone, area, Последний раз редактировалось Den; 28.12.2013 в 20:09. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[patch] Check cast Killing Spree | Den | Принятые патчи | 1 | 21.05.2013 17:53 |
[patch] Check cast Distract | Den | Принятые патчи | 3 | 17.10.2012 23:22 |
[patch] Check cast spells Disarm. | Den | Патчи на рассмотрении | 1 | 15.10.2012 09:38 |
[11478] Prevent overwrite main target at spell cast check for TARGET_PET | newsbot | CMaNGOS Commits | 0 | 12.05.2011 21:10 |
[10636] Implement server side check combo points req. for spell cast. | newsbot | CMaNGOS Commits | 11 | 22.10.2010 08:33 |