Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Баг-репорты (http://mangos.ytdb.ru/forumdisplay.php?f=27)
-   -   player on mount use teleport (http://mangos.ytdb.ru/showthread.php?t=3127)

Den 06.12.2010 22:44

player on mount use teleport
 
Есть вот такой маленький недочёт:
Если персонаж на маунте , то он не может использовать портал (городские и маговские порталы) а должен.
Вот оно самое:

Код:

if (m_caster->IsMounted() && m_caster->GetTypeId()==TYPEID_PLAYER && !m_IsTriggeredSpell &&
        !IsPassiveSpell(m_spellInfo) && !(m_spellInfo->Attributes & SPELL_ATTR_CASTABLE_WHILE_MOUNTED))
    {
        if (m_caster->IsTaxiFlying())
            return SPELL_FAILED_NOT_ON_TAXI;
        else
            return SPELL_FAILED_NOT_MOUNTED;
    }

Если закоммитить - проблеммы нет. Не могу допереть... что тогда ломается то?
А да, проверка была добавлена в 3089-й ревизии.

Vladimir 07.12.2010 03:38

Код:

m_spellInfo->Attributes & SPELL_ATTR_CASTABLE_WHILE_MOUNTED
Куча спелов не должна кастаться на маунте. Клинет это проверяет, но если не будет проверки в ядре будет возможет читинг.

Den 07.12.2010 13:00

А если сделать вот так ? (для примера порталы не все)

Код:

// not let players cast spells at mount (and let do it to creatures)
    if (m_caster->IsMounted() && m_caster->GetTypeId()==TYPEID_PLAYER && !m_IsTriggeredSpell &&
        !IsPassiveSpell(m_spellInfo) && !(m_spellInfo->Attributes & SPELL_ATTR_CASTABLE_WHILE_MOUNTED) &&
                // for players on mount use portal
        !(m_spellInfo->Id == 17609 || m_spellInfo->Id == 17610 || m_spellInfo->Id == 17611 || m_spellInfo->Id == 32270 ||        // Orgrimmar, Thunder Bluff, Undercity, Silvermoon City
        m_spellInfo->Id == 17607 || m_spellInfo->Id == 17608 || m_spellInfo->Id == 17334 || m_spellInfo->Id == 32268))      // Ironforge, Darnassus, Stormwind City, The Exodar               
    {
        if (m_caster->IsTaxiFlying())
            return SPELL_FAILED_NOT_ON_TAXI;
        else
            return SPELL_FAILED_NOT_MOUNTED;
    }

Или есть более лучший подход к этому делу ?

Vladimir 07.12.2010 14:08

Лучший подход - посмотреть на используемый атрибут и может быть найти более адекватно подходящий под проверку - т.е имеющийся, и для тех случаев, когда надо, как и данный, но неимеющийся для неадеквтных случаев.
Возможно аттрибут подобран неудачно.

Использовать списки спелов - это последнее что может быть рассмотрено как удачное решение. Когда тотально нет альтернатив.


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

ru-mangos.ru - Русское сообщество MaNGOS