Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Новичкам (http://mangos.ytdb.ru/forumdisplay.php?f=40)
-   -   Немножечко о талантах (http://mangos.ytdb.ru/showthread.php?t=7755)

Felzewell 11.11.2013 20:45

Немножечко о талантах
 
Доброго времени суток, если не трудно уточните пожалуйста пару вещей.
Последняя сборка CMaNGOS(4.3.4), решил реализовать талант Энханс Шамана: "Жгучее пламя"(ссылку не могу дать т.к. в МоР нету этого таланта уже) и в связи с ним столкнулся с рядом проблем:

1)Имеются ли в DBC файлах шанс на прок спелла(надеюсь правильно выразился)?
2) Талант имеет ауру "SPELL_AURA_DUMMY" т.е следовательно его надо реализовывать в SpellAura.cpp в разделе:
Код:

void Aura::HandleAuraDummy(bool apply, bool Real)
?
Или все же в SpellEffect.cpp в разделе "EffectDummy" ?
(Догадки падают именно на реализацию в SpellEffect.cpp)

Как работает талант: Опаляющий тотем() использовав спелл "Опаляющая стрела()" накладывает на врага спелл: "Жгучее пламя"(Уровень 1,2,3)(), который стакается до 5 штук и за 15 секунд наносит урон от "Опаляющая стрела" (При 5 стаках урон равен 5 опаляющим стрелам)

Будьте любезны подскажите пожалуйста правильную дорожку. Заранее спасибо.

P.S Пустые скобочки я оставил чтоб вставить ссылки на wowhead, щас нету возможности т.к. интернет еле работает((( Еще раз заранее спаибо

Amaru 11.11.2013 22:07

Для справки о dbc используй http://ru-mangos.ru/showthread.php?t=3501
А аур таланта нет прок данных, а шанс лежит в basepoints.
Насколько я помню, ауры мастера могут прокать от атак пета (тотема), так что по идее можно через HandleDummyAuraProc все сделать. Если в проке просто кастовать жгучее пламя то оно само собой будет стакаться до нужного количества раз.
То, что ты написал про HandleAuraDummy и EffectDummy тут никак не поможет, это всего лишь обработчики наложения ауры таланта и и его эффекта.
Если уж совсем невтерпеж, то можешь посмотреть как реализовано тут https://github.com/Dramacydal/murloc...ects.cpp#L1453, но это в другом варианте, хаково и неправильно.

Felzewell 12.11.2013 07:26

Спасибо за информацию, буду ковыряться, пытаться понять. а вот вопрос не по теме, как понять хаковая реализация или нет ?

Amaru 12.11.2013 10:16

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

Felzewell 12.11.2013 12:30

Понятно, спасибо еще раз... думаю я взялся сразу за сложный талант... Подскажите пожалуйста есть ли талант или спелл который проще реализовать ?

Amaru 12.11.2013 12:35

Таких полно)
Нерабочий талант подразумевает то, что стандартными механиками ядра он по какой-то причине не обрабатывается. Тут по любому нужно будет разбираться что, где и на каком этапе не работает.

Felzewell 12.11.2013 13:15

Ахах))) ясненько, в общем решил взяться за показавшийся легким на первый взгляд спелл ("Высвободить чары стихий")

По сути спелы шаманских бафов на оружие из за этого спела тригерят соответствующие спеллы т.е. если стоит Оружие языка пламени то на противника тригериться спелл: Высвободить чары огня и т.д.

в SpellEffect.cpp в разделе EffectDummy в case SPELL_FAMILY_SHAMAN
прописал следующий код:
Код:

                       
/// Unleash Elements (Fix by Felzewell)
        switch (m_spellInfo->Id)
        {
                        case 73680:                             
                {
                    if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
                        return;

                    uint32 triggered_spell_id;
                        switch (m_spellInfo->Id)
                    {
                        case 8017:        triggered_spell_id = 73684; break;    // Rockbiter Weapon
                        case 8024:        triggered_spell_id = 73683; break;    // Flametongue Weapon
                        case 8033:        triggered_spell_id = 73682; break;    // Frostbrand Weapon
                        case 8232:        triggered_spell_id = 73681; break;          // Windfury Weapon
                        case 51730: triggered_spell_id = 73685; break;    // Earthliving Weapon
                    }
                    unitTarget->CastSpell(unitTarget, triggered_spell_id, true);
                    return;
                }
        }

Но при этом спелл все равно не заработал, подтолкните пожалуйста на правильную дорожку, заранее благодарен

P.S : Не пинайте сильно, первый раз пытаюсь починить спелл)))
сори незнал как пропорционально на форуме прописать код

Amaru 12.11.2013 14:18

Ну этот код даже с точки зрения языка логики не имеет

Felzewell 12.11.2013 15:33

Понятно.... порыскав по ссылке которую вы мне дали нашел у него тоже реализацию "Высвободить чары стихий" https://github.com/Dramacydal/murloc...ects.cpp#L5306

Подскажите пожалуйста
Это тоже хаковая реализация ? просто хочу как бы... пример
Ах да параметр case должен иметь id Чар стихий(огонь, вода, и т.д)? или число используемое в case не имеет значения ?
Заранее спасибо

YuruY 12.11.2013 15:45


Felzewell 12.11.2013 16:05

Цитата:

Сообщение от YuruY (Сообщение 32252)

Сори)) Незнал))

Посмотрев код повнимательнее заметил такую функцию как GetEnchantmenId()
Именно значение EnchantmentId вставляется в case?

Как ставить оффтопик ?))

Amaru 12.11.2013 16:36

https://www.google.ru/?q=c%2B%2B+cas...q=c%2B%2B+case

Felzewell 13.11.2013 10:24

Цитата:

Сообщение от Amaru (Сообщение 32254)

Спасибо большое, наконец понял как работает switch-case,
Не могли бы вы подсказать из какого файла вы брали значение EnchantmentId, Заранее благодарен

Amaru 13.11.2013 13:58

Цитата:

Сообщение от Felzewell (Сообщение 32258)
Спасибо большое, наконец понял как работает switch-case,
Не могли бы вы подсказать из какого файла вы брали значение EnchantmentId, Заранее благодарен

SpellItemEnchantment.dbc


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

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