tobmaps / TrinityCore

http://www.TrinityCore.org
GNU General Public License v2.0
38 stars 7 forks source link

Shaman Elemental T10 4P #197

Closed Ramusik closed 13 years ago

Ramusik commented 13 years ago

http://ru.wowhead.com/spell=70817 - не работает.

Я полагаю, что у него должна быть схожая механика с Символом Звездоного Огня (spell_dru_glyph_of_starfire - https://github.com/tobmaps/TrinityCore/blob/amani/src/server/scripts/Spells/spell_druid.cpp ). Также нашел реализацию на мангосе - http://getmangos.com/community/topic/12763/fixt10-elemental-shaman-4p-set-bonus/ . Надеюсь на помощь в исправлении

tobmaps commented 13 years ago

они не совсем похожи. У символа есть собственный триггер спелл для увеличения длительности, а у шока такового нет

tobmaps commented 13 years ago

Меня больше волнует

Patch 3.3.3 (2010-03-23): Tier-10 Elemental Shaman 4-Piece Set Bonus: This bonus has been slightly adjusted to account for the fact that haste now modifies Flame Shock's periodic damage ticks. The bonus now makes the shaman's Lava Burst cause Flame Shock to tick at least two additional times before expiring. 
Patch 3.3.2 (2010-01-02): Tier-10 Elemental Shaman 4-Piece Set Bonus: Redesigned. Successful Lava Burst casts now increase the duration of Flame Shock on the target by 6 seconds.

Это значит что теперь оно будет давать именно 2 тика, независимо от хаста? На вовхеде (хотя и с патча 3.3.3) писали что дает именно 6 сек всегда, кто прав? :/

tobmaps commented 13 years ago

Ещё не понятно увеличивается ли количество тиков ограниченное число раз за 1 каст шока (как у других Символов и т.д.) или же до бесконечности, т.е. постоянно пуляя лаву можно достаточно долго продержать шок на цели

Ramusik commented 13 years ago

Если подумать логически, то "минимум 2 такта" случай, когда у шамана нет хаста и шок наносит периодический урон раз в 3 секунды. Если бы близы точно делали увеличение длительности на 2 такта, то так бы и написали "Ваше заклинание "Выброс лавы" увеличивает время действия периодического эффекта "Огненный шок" на два такта.". Но раз в описании как и на русском языке, так и в английском описании заклинания упоминается фраза "минимум на ...", то стоит предположить, что с увеличением хаста будет и увеличиваться количество тактов. Так что я больше склонен к комментариям с вовхеада. Да и laise впринципе сделала такую реализацию, взяв за основу triggerAmount

tobmaps commented 13 years ago

меня вот этот коммент смущает http://wowhead.com/spell=70817#comments:id=1108496 и написан позже остальных

Просто такое ощущение что в 3.3.3 они ничего и не меняли вовсе %)

Во http://www.youtube.com/watch?v=_9jdcX_eQqw&feature=related

Ramusik commented 13 years ago

Вот еще нашел http://www.youtube.com/watch?v=dI9VIeueXdk ... там есть моменты где видно что на 6 секунд увеличивается ... с 22 секунд на 28 секунд. Хотя иногда и на 9 секунд продлевается действие, но возможно тут какие-то таланты каты способствуют

Ramusik commented 13 years ago

На твоем видео тоже видно увеличение длительности на 6 секунд ...

Ramusik commented 13 years ago

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

tobmaps commented 13 years ago

это из-за кода который ищет столкновение с коллизией для тотемов насколько я понял

На твоем видео тоже видно увеличение длительности на 6 секунд ...

ничего подобного...

скачайте хд видео и смотрите ПОкадрово!

Мои замеры: у него было ~34.5% хаст, от лавы длительность выросла на с 5.6 до 8.9, далее 0.7-4.1, 4.2-8.0, 0.3-4.3, 10.8-15.2, 7.4-11.8, 4.4-8.6, 5.4-8.8

Ramusik commented 13 years ago

Может тогда такая механика:

MaxDuration - максимальная длительность огненного шока MaxDuration / 3 - длительность 2 тактов (так как всего 6 тактов)

И тогда нужно к текущей длительности прибавить эту длительность 2 тактов, т.е. примерно так:

aura->SetDuration(uint32(aura->GetDuration() + GetSpellMaxDuration(aura->GetSpellProto()) / 3)); ??

Ramusik commented 13 years ago

Насчет тотемов - в мангосе есть такая строчка:

CreatureCreatePos pos(m_caster, m_caster->GetOrientation(), 2.0f, angle); в функции DoSummonTotem

На Тринити:

Position pos; GetSummonPosition(effIndex, pos);

Может этот параметр 2.0f и задает радиус установки тотемов?

tobmaps commented 13 years ago

Да не в радиусе дело, у них вместо GetFirstPosCollision (который в моем форке юзается) есть GetNearPos с кодом который проверяет коллизию и подправляет позицию (у нас функция есть, но код закомментирован)

Выход - либо мы правим GetFirstPosCollision делая его угло-зависимым, а не тупо ограничивая высоту в 6 метров, либо раскомментируем тот участок кода и заставляем его работать (исправит миллион проблем с баганием мобов через запрыгивания на стены или битье их сквозь стены, но и нагрузка подрастет + угроза крашей если криво запилить)

tobmaps commented 13 years ago

м, проще сделать пока по старому :) Если найдется больше подтверждений то уже и переделать... по крайней мере Шаурен мне твердить забить на тупую затею с хастом %)

А идея была такая

            // Item - Shaman T10 Elemental 4P Bonus
            case 70817:
            {
                // try to find spell Flame Shock on the target
                if (AuraEffect const* AurEff = target->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_SHAMAN, 0x10000000, 0x0, 0x0, GetGUID()))
                {
                    Aura* flameShock = AurEff->GetBase();
                    int32 curDuration = flameShock->GetDuration();
                    int32 maxDuration = GetSpellMaxDuration(flameShock->GetSpellProto());
                    float haste = 1.0f - (curDuration % maxDuration);
                    int32 bonus = int32(triggerAmount * IN_MILLISECONDS * haste);
                    int32 newDuration = curDuration + bonus;
                    if (newDuration > maxDuration)
                        newDuration = maxDuration;
                    AurEff->GetBase()->SetDuration(newDuration);
                    return true;
                }
                // if not found Flame Shock
                return false;
            }
Ramusik commented 13 years ago

Почему новая длительность не может быть больше, чем максимальная?

if (newDuration > maxDuration) newDuration = maxDuration;

Это лишнее мне кажется

tobmaps commented 13 years ago

Вот другой вариант https://gist.github.com/1046503

tobmaps commented 13 years ago

добавлю в офф репо