|
Патчи Если кто-то хочет выложить не свой готовый патч - не забудьте указать автора и источник.
Если кто-то хочет задать вопрос по патчу - велкам. |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
11.06.2010, 21:56 | #1 |
Администратор
|
[patch/dev]Heart of the Wild
Для спеллов 24894, 17006, 17005, 17004, 17003 раньше были ауры для повышения выносливости и силы атаки, но теперь их в дбц нет.
Просмотрел все спеллы с подобными эффектами, но ни одного подходящего не нашел, кроме классовых, но не друидовских. Выходит, что надо писать обработку без использования спеллов, т.к. их нет. 1. Менять надо базовую или итоговую выносливость при переходе в форму медведя? 2. Какие параметры у игрока для этого лучше менять? 3. Теоретически менять итоговую выносливость можно (1.02 - это коэффициент повышения выносливости от спелла 17003, т.е. 1 + 2%): при переходе в форму медведя: Код:
target->SetStat(STAT_STAMINA,uint32(floor(GetStat(STAT_STAMINA)*1.02))); Код:
target->SetStat(STAT_STAMINA,uint32(ceil(GetStat(STAT_STAMINA)/1.02))); 4. Может, есть какой-нибудь параметр, который отвечает за итоговый уровень выносливости (коэффициент)? |
11.06.2010, 22:11 | #2 |
Ученый
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
|
Это также можно решить через патч SQL-dbc, который позволяет хранить недостающие в dbc спеллы в специальной таблице. Найти патч можете во многих пользовательских репозиториях, в т.ч. моем.
Чесно говоря я незнаю, зачем близам было нужно удалять эти спеллы из dbc, может из "вредности"? Создается впечатление что суют палки в колеса... таких спеллов и не один и не два, насчитано около 10. |
12.06.2010, 01:13 | #3 | |
Пользователь
Регистрация: 08.03.2010
Сообщений: 47
Сказал(а) спасибо: 45
Поблагодарили 29 раз(а) в 13 сообщениях
|
Цитата:
Insider42 у тебя маленькая ошибка, закоментированное лишнее: SpellAuras.cpp PHP код:
Последний раз редактировалось xex; 12.06.2010 в 01:15. |
|
14.06.2010, 09:40 | #6 |
Администратор
|
Во вложении рабочий патч за исключением небольшого косяка: при прокачке талантов в форме медведя не происходит изменения выносливости.
При смене формы все станет на свои места. При прокачке талантов в других формах или вне форм все нормально. Косяк совсем незначительный, но требует правки. В патче есть условие: Код:
if (apply && target->GetTypeId() == TYPEID_PLAYER && target->getClass() == CLASS_DRUID && target->m_form && m_modifier.m_miscvalue == STAT_STAMINA) Но спеллы для прокачки таланта имеют эффект повышения интеллекта, а остальное - думми, поэтому m_modifier.m_miscvalue == STAT_STAMINA не выполняется, т.к. приходит STAT_INTELLECT. Для исправления косяка необходимо при изучении таланта каким-нибудь образом вызывать функцию пересчета коэффициента общей выносливости или каким-нибудь еще способом. Есть идеи? |
15.06.2010, 23:09 | #7 |
Администратор
|
Получил замечания по патчу, переписал его.
Небольшой косяк по-прежнему присутствует, пока не смог исправить. |
16.06.2010, 21:30 | #8 |
Администратор
|
При переходе в форму медведя и обратно общий уровень выносливости меняется правильно в зависимости количества вложенных очков в талант.
Каким образом при прокачке таланта можно пересчитать общий уровень выносливости в момент прокачки в форме медведя, если у спелла эффект dummy? |
16.06.2010, 22:26 | #9 |
Гость
Сообщений: n/a
|
HandleSpellSpecificBoosts.
Однако учитывайте, что по какой-то причине в ванильном ядре сделано так, что пассивные ауры могут вызывать HandleSpellSpecificBoosts(true) при добавлении, но при этом обделены возможностью вызова HandleSpellSpecificBoosts(false) при удалении. Последний раз редактировалось Astellar; 16.06.2010 в 22:47. |
16.06.2010, 22:59 | #10 |
Администратор
|
Изначально там располагал обработку, но изменял TOTAL_PCT.
Что именно нужно сделать в данной функции для пересчета общего уровня выносливости? |
16.06.2010, 23:02 | #11 |
Гость
Сообщений: n/a
|
Посмотрите в сторону функции HandleStatModifier, очень полезна. С её помощью вся моя реализация данного таланта умещается в 11 строчек кода. При этом работает и прокачка во время нахождения в форме, и всё остальное. Как для мишки, так и для кошки.
|
15.07.2010, 08:54 | #13 |
Пользователь
Регистрация: 07.03.2010
Сообщений: 79
Сказал(а) спасибо: 3
Поблагодарили 10 раз(а) в 8 сообщениях
|
Я для себя сделал через похожие спеллы, т.к. модернизируя показатели не достиг нужного результата.
Код:
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 970d1d2..c13b014 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -6164,7 +6164,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 = target->GetAurasByType(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE); for(Unit::AuraList::const_iterator i = mModTotalStatPct.begin(); i != mModTotalStatPct.end(); ++i) @@ -6172,10 +6172,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; - - target->CastCustomSpell(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; } } @@ -6184,6 +6200,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) target->RemoveAurasDueToSpell(spellId1); if(spellId2) @@ -8454,4 +8499,4 @@ void Aura::HandleAllowOnlyAbility(bool apply, bool Real) target->UpdateDamagePhysical(BASE_ATTACK); target->UpdateDamagePhysical(RANGED_ATTACK); target->UpdateDamagePhysical(OFF_ATTACK); -} \ No newline at end of file +} |
15.07.2010, 12:43 | #14 |
Администратор
|
Есть спеллы с нужными эффектами, но они принадлежат другим классам.
На этом форуме уже есть подобный хак, на за чем было его сюда копировать. В патче в этой теме идет суммирование модификаторов. По данным с офа получается, что модификаторы надо перемножать. |
17.07.2010, 21:44 | #15 |
MaNGOS Dev
Регистрация: 09.03.2010
Сообщений: 33
Сказал(а) спасибо: 27
Поблагодарили 26 раз(а) в 11 сообщениях
|
|
17.07.2010, 22:09 | #16 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Они раньше были.
|
17.07.2010, 23:23 | #17 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
И нет совершенно никакой проблемы их использовать сейчас, взяв из старых ДБЦ. Я уже выше писал, что патч аналогичный spell_dbc придется использовать когда-нибудь, потому что более универсального решения вряд ли можно придумать.
|
17.07.2010, 23:45 | #18 |
MaNGOS Dev
Регистрация: 09.03.2010
Сообщений: 33
Сказал(а) спасибо: 27
Поблагодарили 26 раз(а) в 11 сообщениях
|
конечно, проблем нет - как же, dbc с того времени как там были эти спеллы вообще наверно не изменились...
|
18.07.2010, 18:58 | #20 |
Администратор
|
Насчет использования близзами спеллов вне дбц в курсе.
Патч на спеллы в базе пока не принят в ядро, поэтому различные патчи на подобные спеллы имею право на существование. |
18.07.2010, 20:28 | #21 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Конечно имеют. Говорят, что молотком можно шуруп закрутить. Но по мне так шуруповертом гораздо удобнее, хотя он и сложнее устроен. И уж раз разговор идет про "принят-не принят" - такие отдельные патчи точно не имеют шансов на принятие, если таких шансов нет у патча на spell_dbc (или аналогичного). Конечно если я правильно понимаю логику Владимира - сначала искать общие решения, и только потом пилить частности.
|
18.07.2010, 22:21 | #22 |
Администратор
|
Патч имеет право на существование, поэтому он есть.
Рассмотрение многих патчей идет долгое время, так что это не показатель. Дальше лучше обсуждение по теме, а молоток и шуруп оставь при себе. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[patch/dev] Heart of the Phoenix (Сердце Феникса) | Insider42 | Патчи | 2 | 26.04.2013 13:50 |
Heart of the Wild | xmolex | Новичкам | 14 | 14.04.2010 20:22 |
[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 |