Ru-MaNGOS  

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

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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.03.2013, 19:17   #1
Den
Ученый
 
Регистрация: 10.03.2010
Сообщений: 282
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
Den Скоро придёт к известностиDen Скоро придёт к известности
По умолчанию [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;
Den вне форума   Ответить с цитированием
Старый 30.03.2013, 20:00   #2
schmoozerd
MaNGOS Dev
 
Регистрация: 17.11.2011
Сообщений: 99
Сказал(а) спасибо: 35
Поблагодарили 80 раз(а) в 26 сообщениях
schmoozerd Скоро придёт к известности
По умолчанию

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)
schmoozerd вне форума   Ответить с цитированием
Старый 31.03.2013, 04:30   #3
schmoozerd
MaNGOS Dev
 
Регистрация: 17.11.2011
Сообщений: 99
Сказал(а) спасибо: 35
Поблагодарили 80 раз(а) в 26 сообщениях
schmoozerd Скоро придёт к известности
По умолчанию

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))
schmoozerd вне форума   Ответить с цитированием
Старый 03.04.2013, 10:37   #4
Den
Ученый
 
Регистрация: 10.03.2010
Сообщений: 282
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
Den Скоро придёт к известностиDen Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от schmoozerd Посмотреть сообщение
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))
Works not for all spells
Den вне форума   Ответить с цитированием
Старый 28.12.2013, 19:44   #5
Den
Ученый
 
Регистрация: 10.03.2010
Сообщений: 282
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
Den Скоро придёт к известностиDen Скоро придёт к известности
По умолчанию

Очень хорошо для проверки нужных спелов подходит атрибут 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.
Den вне форума   Ответить с цитированием
Ответ

« Removing unused constant MAX_STEALTH_DETECT_RANGE. | Следующей темы нет »
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[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


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


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