|
Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь |
|
Опции темы | Поиск в этой теме | Опции просмотра |
12.04.2010, 20:03 | #1 |
Пользователь
Регистрация: 07.03.2010
Сообщений: 79
Сказал(а) спасибо: 3
Поблагодарили 10 раз(а) в 8 сообщениях
|
Heart of the Wild
Решил покопать друидовский талант Heart of the Wild. Вижу, что он имеет DUMMY эффект, причем m_spellInfo->SpellFamilyName равно SPELLFAMILY_GENERIC, а не SPELLFAMILY_DRUID. Понимаю, что реализовывать талант в SPELLFAMILY_GENERIC не следует, но спелл имеет только два эффекта: один Apply Aura: Mod Total Stat для интеллекта и второй DUMMY, для выносливости в облике медведя и лютого медведя и силы атаки в облике кошки. Как быть, где реализовывать выносливость и силу атаки?
|
12.04.2010, 20:09 | #2 | |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Цитата:
1) Реализуется данный спелл в двух местах кода: Для первого эффекта - Apply Aura: Mod Total Stat Для второго эффекта - DUMMY (скорее всего, в аурах) 2) SPELLFAMILY_GENERIC - это не место рализации, а способ определения спелла по типу в "кейсе" (case). И будет данный спелл работать именно в этом "кейсе" и никогда не сработает, если ты поместишь его в SPELLFAMILY_DRUID. Вот так Щас ещё глянул, вторая часть спелла, вероятнее всего, должны быть реализована в Unit.cpp при смене формы - ну это уже надо глубже копать, возможны варианты... P.S: Где смотрел инфу о спелле вообще? P.P.S: Нормальная тема... перенёс туда, где ей больше подходит быть. |
|
12.04.2010, 20:20 | #3 | |
Пользователь
Регистрация: 07.03.2010
Сообщений: 79
Сказал(а) спасибо: 3
Поблагодарили 10 раз(а) в 8 сообщениях
|
Можно поподробнее. Насколько я знаю ауры - это ауры, а dummy - это dummy.
Цитата:
Инфу смотрел в spell_work (правда под 3.3.2). Сейчас есть кусок кода для таланта в SpellAuras.cpp в void Aura::HandleShapeshiftBoosts(bool apply), но разве это правильно? Последний раз редактировалось xmolex; 12.04.2010 в 20:31. |
|
12.04.2010, 20:37 | #4 | |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Цитата:
2) Ага. Всё верно, если бы так сразу и написал. Однако это ничего не меняет. Если спелл (пусть и друлевский) имеет фамилинейм SPELLFAMILY_GENERIC - значит он должен быть помещён в кейс SPELLFAMILY_GENERIC иначе не будет обрабатываться вообще. 3) Смотрел по старым ДБЦ? Если да, то они могли устареть 4) Совершенно верно - там и нужно обрабатывать. Кусок кода проверяет наличие ауры таланта на персе при превращении и в зависимости от того, в кого тюлень перекидывается вешает тот или иной эффект. А что именно сейчас не работает? |
|
12.04.2010, 20:42 | #5 | |
Пользователь
Регистрация: 07.03.2010
Сообщений: 79
Сказал(а) спасибо: 3
Поблагодарили 10 раз(а) в 8 сообщениях
|
Цитата:
4) Тогда получается, что в DUMMY у нас просто так заворачивается, не совсем правильно как-то. Ладно, будем в HandleShapeshiftBoosts править. Не работает "Также повышает выносливость в облике медведя и лютого медведя на 2%, а в облике кошки – силу атаки на 2%." после 3.3.3. |
|
12.04.2010, 20:58 | #6 | |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Цитата:
А по описанию, как именно изменился спелл? 2) Думми указывает на то, что это серверный скрипт. Думми эффект может содержать сведения в себе, например, количество урона, процент чего либо, номер спелла и т.д. и т.п. И эти данные можно использовать (как это и делается в уже реализованном куске кода). Но сам по себе думми указывает именно на серверный СКРИПТ, а не стандартный обработчик (вам ведь известно, что подавляющее большинство спеллов обрабатывается стандартными обработчиками и под каждый конкретный спелл не пишется свой код; код (скрипт) в ядре пишется только для спеллов-исключенией, так вот все думми-эффекты - исключения и требуют своего отдельного кода (обработчика/скрипта)) Проверь, существуют ли в новых ДБЦ спеллы 24900 и 24899 |
|
12.04.2010, 21:00 | #7 |
Пользователь
Регистрация: 07.03.2010
Сообщений: 79
Сказал(а) спасибо: 3
Поблагодарили 10 раз(а) в 8 сообщениях
|
|
12.04.2010, 21:32 | #9 |
Пользователь
Регистрация: 07.03.2010
Сообщений: 79
Сказал(а) спасибо: 3
Поблагодарили 10 раз(а) в 8 сообщениях
|
Аналогичных спеллов нет, по крайней мере парсер с wowhead.com спеллов с аналогичными эффектами не нашел.
А обработчик в unit.cpp в каком месте стоит делать? |
12.04.2010, 22:01 | #10 | |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Цитата:
Где реализовать? Да я вообще так - на вскидку сказал! Тут смотреть надо внимательно что к чему, с ходу не ответить... |
|
13.04.2010, 07:00 | #11 |
Пользователь
Регистрация: 07.03.2010
Сообщений: 79
Сказал(а) спасибо: 3
Поблагодарили 10 раз(а) в 8 сообщениях
|
Всю ночь перекапывал DBC, вообщем спеллов похоже точно нет. Правда искал не по названию, а по аттрибутам, т.к. в 3.3.3 названий похоже нет, либо pjDbcEditer.exe их не может отобразить. Оговорюсь, что сравнивал DBC 3.3.2 и 3.3.3 enGB.
Последний раз редактировалось xmolex; 13.04.2010 в 07:08. |
13.04.2010, 18:41 | #12 |
Пользователь
Регистрация: 07.03.2010
Сообщений: 79
Сказал(а) спасибо: 3
Поблагодарили 10 раз(а) в 8 сообщениях
|
В связи с тем, что спеллов больше нет, как тогда лучше реализовать его? Вернее где. Если реализовать в HandleShapeshiftBoosts, то код будет белой вороной среди других спеллов в HandleShapeshiftBoosts и, соответственно, в ядро всеравно не добавят. Если в EffectDummy в кейсе SPELLFAMILY_GENERIC, тоже не верно и не добавят. Так где его реализовать?
|
14.04.2010, 19:01 | #13 |
Пользователь
Регистрация: 07.03.2010
Сообщений: 79
Сказал(а) спасибо: 3
Поблагодарили 10 раз(а) в 8 сообщениях
|
Вообщем, для себя реализовал так:
Код:
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 4e8df4f..34b8237 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -5867,7 +5867,6 @@ void Aura::HandleShapeshiftBoosts(bool apply) { case FORM_CAT: spellId1 = 3025; - HotWSpellId = 24900; MasterShaperSpellId = 48420; break; case FORM_TREE: @@ -5884,13 +5883,11 @@ void Aura::HandleShapeshiftBoosts(bool apply) case FORM_BEAR: spellId1 = 1178; spellId2 = 21178; - HotWSpellId = 24899; MasterShaperSpellId = 48418; break; case FORM_DIREBEAR: spellId1 = 9635; spellId2 = 21178; - HotWSpellId = 24899; MasterShaperSpellId = 48418; break; case FORM_BATTLESTANCE: @@ -6015,7 +6012,7 @@ void Aura::HandleShapeshiftBoosts(bool apply) } // Heart of the Wild - if (HotWSpellId) + if (form == FORM_CAT || form == FORM_BEAR || form == FORM_DIREBEAR) { Unit::AuraList const& mModTotalStatPct = m_target->GetAurasByType(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE); for(Unit::AuraList::const_iterator i = mModTotalStatPct.begin(); i != mModTotalStatPct.end(); ++i) @@ -6023,10 +6020,26 @@ void Aura::HandleShapeshiftBoosts(bool apply) if ((*i)->GetSpellProto()->SpellIconID == 240 && (*i)->GetModifier()->m_miscvalue == 3) { int32 HotWMod = (*i)->GetModifier()->m_amount; - if(GetModifier()->m_miscvalue == FORM_CAT) - HotWMod /= 2; - - m_target->CastCustomSpell(m_target, HotWSpellId, &HotWMod, NULL, NULL, true, NULL, this); + HotWMod /= 2; + + if (form == FORM_CAT) + { + if (HotWMod == 2) {HotWSpellId = 30902;} + else if (HotWMod == 4) {HotWSpellId = 30903;} + else if (HotWMod == 6) {HotWSpellId = 30904;} + else if (HotWMod == 8) {HotWSpellId = 30905;} + else if (HotWMod == 10) {HotWSpellId = 30906;} + } + else + { + if (HotWMod == 2) {HotWSpellId = 19255;} + else if (HotWMod == 4) {HotWSpellId = 19256;} + else if (HotWMod == 6) {HotWSpellId = 19257;} + else if (HotWMod == 8) {HotWSpellId = 19258;} + else if (HotWMod == 10) {HotWSpellId = 19259;} + } + + m_target->CastCustomSpell(m_target, HotWSpellId, NULL, NULL, NULL, true, NULL, this); break; } } @@ -6035,6 +6048,35 @@ void Aura::HandleShapeshiftBoosts(bool apply) } else { + // Heart of the Wild (delete aura) + if (form == FORM_CAT || form == FORM_BEAR || form == FORM_DIREBEAR) + { + Unit::AuraList const& mModTotalStatPct = m_target->GetAurasByType(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE); + for(Unit::AuraList::const_iterator i = mModTotalStatPct.begin(); i != mModTotalStatPct.end(); ++i) + { + if ((*i)->GetSpellProto()->SpellIconID == 240 && (*i)->GetModifier()->m_miscvalue == 3) + { + int32 HotWMod = (*i)->GetModifier()->m_amount / 2; + if (form == FORM_CAT) + { + if (HotWMod == 2) {HotWSpellId = 30902;} + else if (HotWMod == 4) {HotWSpellId = 30903;} + else if (HotWMod == 6) {HotWSpellId = 30904;} + else if (HotWMod == 8) {HotWSpellId = 30905;} + else if (HotWMod == 10) {HotWSpellId = 30906;} + } + else + { + if (HotWMod == 2) {HotWSpellId = 19255;} + else if (HotWMod == 4) {HotWSpellId = 19256;} + else if (HotWMod == 6) {HotWSpellId = 19257;} + else if (HotWMod == 8) {HotWSpellId = 19258;} + else if (HotWMod == 10) {HotWSpellId = 19259;} + } + m_target->RemoveAurasDueToSpell(HotWSpellId); + } + } + } if(spellId1) m_target->RemoveAurasDueToSpell(spellId1); if(spellId2) Если кто-то всеже порекомендует, где реализовать обработку, чтобы патч могли принять, буду благодарен. |
14.04.2010, 20:10 | #14 | |
Пользователь
|
Цитата:
Код:
switch (HotWMod) { case 2: HotWSpellId = 19255; break; case 4: HotWSpellId = 19256; break; case 6: HotWSpellId = 19257; break; case 8: HotWSpellId = 19258; break; case 10: HotWSpellId = 19259; break; } |
|
14.04.2010, 20:22 | #15 |
Пользователь
Регистрация: 07.03.2010
Сообщений: 79
Сказал(а) спасибо: 3
Поблагодарили 10 раз(а) в 8 сообщениях
|
Можно, но насколько мне известно case работает медленнее, чем if else, а раз это всеравно хаковая реализация, пусть будет быстрее.
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[patch/dev] Heart of the Phoenix (Сердце Феникса) | Insider42 | Патчи | 2 | 26.04.2013 13:50 |
[patch/dev]Heart of the Wild | virusav | Патчи | 21 | 18.07.2010 22:21 |
[patch] Реализация бонуса к Death Coil от Sigil of the Vengeful Heart | Warlord123 | Патчи на рассмотрении | 0 | 15.03.2010 14:01 |
[9523] Stacking Auras from dual wild weapons. | newsbot | CMaNGOS Commits | 0 | 06.03.2010 13:11 |