Ru-MaNGOS

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

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

Патчи Если кто-то хочет выложить не свой готовый патч - не забудьте указать автора и источник.

Если кто-то хочет задать вопрос по патчу - велкам.

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.06.2010, 21:56   #1
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию [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)));
Прогонял цикл до 100000 случайных вычислений: расчеты везде сошлись.

4. Может, есть какой-нибудь параметр, который отвечает за итоговый уровень выносливости (коэффициент)?
virusav вне форума   Ответить с цитированием
Старый 11.06.2010, 22:11   #2
Insider42
Ученый
 
Регистрация: 15.03.2010
Сообщений: 261
Сказал(а) спасибо: 84
Поблагодарили 257 раз(а) в 96 сообщениях
Insider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранитаInsider42 Как самоцвет среди гранита
По умолчанию

Это также можно решить через патч SQL-dbc, который позволяет хранить недостающие в dbc спеллы в специальной таблице. Найти патч можете во многих пользовательских репозиториях, в т.ч. моем.
Чесно говоря я незнаю, зачем близам было нужно удалять эти спеллы из dbc, может из "вредности"? Создается впечатление что суют палки в колеса... таких спеллов и не один и не два, насчитано около 10.
Insider42 вне форума   Ответить с цитированием
Старый 11.06.2010, 22:22   #3
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Требуется решение, которое приняли бы в ядро и которое можно было бы использовать для подобных спеллов.
virusav вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
KiriX (15.06.2010)
Старый 12.06.2010, 01:13   #4
xex
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 47
Сказал(а) спасибо: 45
Поблагодарили 29 раз(а) в 13 сообщениях
xex На верном пути
По умолчанию

Цитата:
Сообщение от Insider42 Посмотреть сообщение
Это также можно решить через патч SQL-dbc, который позволяет хранить недостающие в dbc спеллы в специальной таблице. Найти патч можете во многих пользовательских репозиториях, в т.ч. моем.
Чесно говоря я незнаю, зачем близам было нужно удалять эти спеллы из dbc, может из "вредности"? Создается впечатление что суют палки в колеса... таких спеллов и не один и не два, насчитано около 10.
Ага, тоже его использую. Всё пашет. Автор Wowka321.
Insider42 у тебя маленькая ошибка, закоментированное лишнее:
SpellAuras.cpp
PHP код:
                        int32 HotWMod = (*i)->GetModifier()->m_amount;
// we should give 10% bonus instead 20% in all forms
//                        if(GetModifier()->m_miscvalue == FORM_CAT)
// we should give 10% bonus instead 20% in all forms
                            
HotWMod /= 2

Последний раз редактировалось xex; 12.06.2010 в 01:15.
xex вне форума   Ответить с цитированием
Старый 12.06.2010, 22:00   #5
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
Требуется решение, которое приняли бы в ядро и которое можно было бы использовать для подобных спеллов.
Это или аналогичное решение когда-либо придется принять в ядро, поскольку число таких спеллов будет явно только возрастать...
rsa вне форума   Ответить с цитированием
Старый 14.06.2010, 09:40   #6
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

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

Косяк совсем незначительный, но требует правки.
В патче есть условие:
Код:
if (apply && target->GetTypeId() == TYPEID_PLAYER && target->getClass() == CLASS_DRUID && target->m_form && m_modifier.m_miscvalue == STAT_STAMINA)
В форме медведя при прокачке талантов apply = false, его, по идее, вообще можно убрать.
Но спеллы для прокачки таланта имеют эффект повышения интеллекта, а остальное - думми, поэтому m_modifier.m_miscvalue == STAT_STAMINA не выполняется, т.к. приходит STAT_INTELLECT.

Для исправления косяка необходимо при изучении таланта каким-нибудь образом вызывать функцию пересчета коэффициента общей выносливости или каким-нибудь еще способом.

Есть идеи?
Вложения
Тип файла: diff heart_of_the_wild+-.diff (4.4 Кб, 14 просмотров)
virusav вне форума   Ответить с цитированием
Старый 15.06.2010, 23:09   #7
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Получил замечания по патчу, переписал его.
Небольшой косяк по-прежнему присутствует, пока не смог исправить.
Вложения
Тип файла: diff heart_of_the_wild_v2.diff (4.1 Кб, 17 просмотров)
virusav вне форума   Ответить с цитированием
Старый 16.06.2010, 21:30   #8
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

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

Каким образом при прокачке таланта можно пересчитать общий уровень выносливости в момент прокачки в форме медведя, если у спелла эффект dummy?
virusav вне форума   Ответить с цитированием
Старый 16.06.2010, 22:26   #9
Astellar
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
...Каким образом при прокачке таланта...
HandleSpellSpecificBoosts.

Однако учитывайте, что по какой-то причине в ванильном ядре сделано так, что пассивные ауры могут вызывать HandleSpellSpecificBoosts(true) при добавлении, но при этом обделены возможностью вызова HandleSpellSpecificBoosts(false) при удалении.

Последний раз редактировалось Astellar; 16.06.2010 в 22:47.
  Ответить с цитированием
Старый 16.06.2010, 22:59   #10
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Изначально там располагал обработку, но изменял TOTAL_PCT.
Что именно нужно сделать в данной функции для пересчета общего уровня выносливости?
virusav вне форума   Ответить с цитированием
Старый 16.06.2010, 23:02   #11
Astellar
Гость
 
Сообщений: n/a
По умолчанию

Посмотрите в сторону функции HandleStatModifier, очень полезна. С её помощью вся моя реализация данного таланта умещается в 11 строчек кода. При этом работает и прокачка во время нахождения в форме, и всё остальное. Как для мишки, так и для кошки.
  Ответить с цитированием
Старый 16.06.2010, 23:13   #12
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Поделись патчем на данный талант для обучения на конкретном примере.
virusav вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
KiriX (17.06.2010)
Старый 15.07.2010, 08:54   #13
xmolex
Пользователь
 
Регистрация: 07.03.2010
Сообщений: 79
Сказал(а) спасибо: 3
Поблагодарили 10 раз(а) в 8 сообщениях
xmolex На верном пути
По умолчанию

Я для себя сделал через похожие спеллы, т.к. модернизируя показатели не достиг нужного результата.
Код:
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
+}
xmolex вне форума   Ответить с цитированием
Старый 15.07.2010, 12:43   #14
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

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

В патче в этой теме идет суммирование модификаторов.
По данным с офа получается, что модификаторы надо перемножать.
virusav вне форума   Ответить с цитированием
Старый 17.07.2010, 21:44   #15
Laise
MaNGOS Dev
 
Аватар для Laise
 
Регистрация: 09.03.2010
Сообщений: 33
Сказал(а) спасибо: 27
Поблагодарили 26 раз(а) в 11 сообщениях
Laise На верном пути
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
По данным с офа получается, что модификаторы надо перемножать.
По данным с оффа, используются старые спеллы которых нет в дбс
Laise вне форума   Ответить с цитированием
Старый 17.07.2010, 22:09   #16
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Они раньше были.
LordJZ вне форума   Ответить с цитированием
Старый 17.07.2010, 23:23   #17
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

И нет совершенно никакой проблемы их использовать сейчас, взяв из старых ДБЦ. Я уже выше писал, что патч аналогичный spell_dbc придется использовать когда-нибудь, потому что более универсального решения вряд ли можно придумать.
rsa вне форума   Ответить с цитированием
Старый 17.07.2010, 23:45   #18
Laise
MaNGOS Dev
 
Аватар для Laise
 
Регистрация: 09.03.2010
Сообщений: 33
Сказал(а) спасибо: 27
Поблагодарили 26 раз(а) в 11 сообщениях
Laise На верном пути
По умолчанию

Цитата:
Сообщение от rsa Посмотреть сообщение
И нет совершенно никакой проблемы их использовать сейчас, взяв из старых ДБЦ. Я уже выше писал, что патч аналогичный spell_dbc придется использовать когда-нибудь, потому что более универсального решения вряд ли можно придумать.
конечно, проблем нет - как же, dbc с того времени как там были эти спеллы вообще наверно не изменились...
Laise вне форума   Ответить с цитированием
Старый 18.07.2010, 12:47   #19
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от Laise Посмотреть сообщение
конечно, проблем нет - как же, dbc с того времени как там были эти спеллы вообще наверно не изменились...
И что? Ну изменились. Формат записи в spell_dbc поменять - плевое дело...
rsa вне форума   Ответить с цитированием
Старый 18.07.2010, 18:58   #20
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Насчет использования близзами спеллов вне дбц в курсе.

Патч на спеллы в базе пока не принят в ядро, поэтому различные патчи на подобные спеллы имею право на существование.
virusav вне форума   Ответить с цитированием
Старый 18.07.2010, 20:28   #21
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Конечно имеют. Говорят, что молотком можно шуруп закрутить. Но по мне так шуруповертом гораздо удобнее, хотя он и сложнее устроен. И уж раз разговор идет про "принят-не принят" - такие отдельные патчи точно не имеют шансов на принятие, если таких шансов нет у патча на spell_dbc (или аналогичного). Конечно если я правильно понимаю логику Владимира - сначала искать общие решения, и только потом пилить частности.
rsa вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
DiffuSer (18.07.2010), xex (19.07.2010)
Старый 18.07.2010, 22:21   #22
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Патч имеет право на существование, поэтому он есть.
Рассмотрение многих патчей идет долгое время, так что это не показатель.

Дальше лучше обсуждение по теме, а молоток и шуруп оставь при себе.
virusav вне форума   Ответить с цитированием
Ответ


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

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


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


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


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