• Страница 1 из 1
  • 1
Модератор форума: Dimitro  
Форум » TrinityCore » [TrinityCore] Help » Как отредактировать урон у спелла босса? 4.3.4
Как отредактировать урон у спелла босса? 4.3.4
dyker
Капрал
Есть спелл,нужно отредактировать (понизить) урон на тот который я хочу,например на 10 что бы бил,как это сделать? версия 4.3.4

Сообщение # 1 написано 02.02.2018 в 23:11
p620
Маршал
Предоставленной Вами информации недостаточно для выработки однозначного заключения. Данная способность на восемь секунд накладывает на цель периодическую ауру-пустышку, что означает реализацию ее механики работы при помощи специального сценария в базе или даже ядре. Некоторые поля способности заполнены, но штатно использоваться, согласно ее настройкам, не могут, что, в свою очередь, еще раз намекает на использование этих параметров сценарием ядра. Скорее всего урон наносится другой способностью, применение которой предположительно вызывает сценарий данной: '75591'. В описании также присутствует ссылка на `BasePoints` первого эффекта способности '69483'. Предоставьте аналогичную информацию по этим двум способностям для получения более конкретных рекомендаций.
Сообщение # 2 написано 02.02.2018 в 23:59
dyker
Капрал
Предоставленной Вами информации недостаточно для выработки однозначного заключения. Данная способность на восемь секунд накладывает на цель периодическую ауру-пустышку, что означает реализацию ее механики работы при помощи специального сценария в базе или даже ядре. Некоторые поля способности заполнены, но штатно использоваться, согласно ее настройкам, не могут, что, в свою очередь, еще раз намекает на использование этих параметров сценарием ядра. Скорее всего урон наносится другой способностью, применение которой предположительно вызывает сценарий данной: '75591'. В описании также присутствует ссылка на `BasePoints` первого эффекта способности '69483'. Предоставьте аналогичную информацию по этим двум способностям для получения более конкретных рекомендаций.


Добавлено (03.02.2018, 09:35)
---------------------------------------------

Цитата p620 ()
Предоставленной Вами информации недостаточно для выработки однозначного заключения. Данная способность на восемь секунд накладывает на цель периодическую ауру-пустышку, что означает реализацию ее механики работы при помощи специального сценария в базе или даже ядре. Некоторые поля способности заполнены, но штатно использоваться, согласно ее настройкам, не могут, что, в свою очередь, еще раз намекает на использование этих параметров сценарием ядра. Скорее всего урон наносится другой способностью, применение которой предположительно вызывает сценарий данной: '75591'. В описании также присутствует ссылка на `BasePoints` первого эффекта способности '69483'. Предоставьте аналогичную информацию по этим двум способностям для получения более конкретных рекомендаций.


Сообщение # 3 написано 03.02.2018 в 09:35
p620
Маршал
К сожалению, однозначности все еще нет. Проблема в том, что исходная способность разными способами ссылается на две другие, различные, но идентичные по генерируемому функционалу, записи. Выглядит это примерно так:
Исходная(75592) в поле `TriggerSpell[0]` ссылается на Имплементацию_1(75591), которая наносит 20к урона и восполняет заклинателю 100к здоровья за каждую пораженную цель в радиусе '15' от исходной цели способности.
Имплементация_1 (и, скорее всего, Исходная) в своем описании ссылается на `BasePoints[0] + EffectDieSides[0]` Пустышки(69483), что в пересчете, по всей видимости, дает 14250-15270 ед. урона, что противоречит настройкам Имплементации_1.
Пустышка в поле `TriggerSpell[0]`, в свою очередь, ссылается на Имплементацию_2(69482), которая наносит уже 15к урона и восполняет заклинателю 75к здоровья, опять же, за каждую пораженную цель, но в радиусе уже '10' от исходной цели способности. Заметьте, что значения этих параметров явно противоречат таковым у Имплементации_1, однако проблема в том, что, согласно предоставленной информации, обе имплементации совершенно равнозначны, поскольку при штатной обработке Исходной способности не будет вызвана ни одна(/1). Замысел, впрочем, уже можно представить: Исходная способность, судя по всему, посылает некий снаряд средней скорости полета. Снаряд попадает в цель, которая, по истечению 8 сек., спровоцирует нанесение некоторого (неопределенного на данный момент) урона всем враждебным заклинателю целям (включая себя) в неопределенном (опять же) радиусе вокруг себя, при этом заклинатель восполнит пятикратное общему нанесенному урону количество здоровья (в общем, пример реализации стандартной механики "получил - отбежал"). Чтобы иметь возможность утверждать что-то более конкретное однозначно, необходимо дифференцировать имплементации, дабы определить, какая из них действительно используется. Сделать это можно двумя способами:
1) Вменяемо. Найти сценарий, контролирующий поведение Исходной способности (посмотреть `world.spell_script{s | _names}` на предмет наличия ключей '75592'/'69483' для начала) и просмотреть логику, в нем содержащуюся(/1).
2) Менее вменяемо. Проводить "полевые испытания" и сравнивать получаемые значения с теми, что я привел выше, таким образом, возможно, определяя, какая из двух (если используется действительно только одна) имплементаций подходит больше. Впрочем, рассчитывать на это я бы не стал(/1).

/1: Все заявления, помеченные этой сноской, основываются на предположении, что `SPELL_AURA_PERIODIC_DUMMY` не приводит при стандартной обработке ядром к срабатыванию зависимой способности (Trigger Spell), особенно учитывая, что шанс срабатывания в `.dbc` помечен как нулевой. Это, впрочем, может быть переопределено в таблице `world.spell_proc(_event)`, однако намек на то, что близзардский исходник был имплементирован особым сценарием, силы не утрачивает. Если же это не так, и этот тип аур может штатно вызвать срабатывание зависимой способности (этого я просто не помню сейчас, к сожалению) - поправить урон Исходной можно простым изменением `BasePoints[0]` Имплементации_1 (нелишним будет отметить, впрочем, что описание способности продолжит содержать несоответствующую реальности информацию).

П.С: Всю неразбериху можно было бы элегантно объяснить тем, что Пустышка - на самом деле не пустышка, а исходная для нормального уровня сложности, а оригинальная Исходная, соответственно, - для героической, однако этой теории катастрофически не хватает данных о сложности для Имплементации_2, аналогичных таковым у Имплементации_1. В этом случае косяки описания всех способностей можно было бы списать на банальные (и нередкие, кстати) проявления лени создавшего способности сотрудника Метелицы.
Сообщение # 4 отредактировано p620 - Суббота, 03.02.2018, 14:41
dyker
Капрал
p620p620
Цитата p620 ()
Метелицы


Я попробовал изменить урон с помощью этого кода:

Код
case 75592: //test
                spellInfo->Effects[EFFECT_0].BasePoints = 1;
                break;
            case 75591: //test
                spellInfo->Effects[EFFECT_0].BasePoints = 1;
                break;
            case 69483: //test
                spellInfo->Effects[EFFECT_0].BasePoints = 1;
                break;
            case 69482: //test
                spellInfo->Effects[EFFECT_0].BasePoints = 1;
                break;
            case 75117: //test
                spellInfo->Effects[EFFECT_0].BasePoints = 1;
                break;


Урон изменился да,но не достаточно,он изменился с 9000+ на 400+,а мне надо что бы был урон 10+.
Я предпологаю что нужно убрать таким кодом еще и Multiple = 5 (есть в Spellwork после BasePoints) Но какой код что бы убрать это умножение?

Код
spellInfo->Effects[EFFECT_1].Multiple = 0;
?
Сообщение # 5 отредактировано dyker - Суббота, 03.02.2018, 17:04
p620
Маршал
Этот коэффициент в данном случае отвечает за количество здоровья, восполняемого заклинателем на единицу нанесенного способностью урона; за скалирование самого урона он не отвечает. То, что Вы вставили в, я так полагаю, какой-то обработчик способностей, есть очень грубый хак, от которого, я надеюсь, после проведения своих тестов Вы избавитесь. И если урон после этого действительно не изменился надлежащим образом - наличие дополнительных настроек этих способностей где-то в базе/ядре просто гарантируется. Их нужно найти, просмотреть и, при необходимости, поправить. Начать, как я уже писал, следует отсюда:
Цитата p620 ()
(посмотреть `world.spell_script{s | _names}` на предмет наличия ключей '75592'/'69483' для начала)
П.С: Хотя в чистовых реализациях какого-либо C++ кода инструкций логического ветвления `switch` рекомендуется избегать не меньше, чем `goto` (правило к C коду не относится, там альтернатив нет), если Вы уж применяете их, делайте это эргономично: в вашем случае код можно было бы сократить раза в два, используя прием:
Код
switch(condVar)
{
    case valA:
    case valB:
    case valC:
        doSomething();
        break; // в данном случае опционален
}
Здесь используется специфика обработки данной конструкции, заключающаяся в том, что после попадания на какую-либо метку исполнение оставшегося тела switch-инструкции продолжается, пока не будет встречена инструкция `break;`. Т.е., если Вам необходимо для нескольких различных меток (ветвей) выполнить одни и те же действия - сгруппируйте их последовательно, а действия опишите только для самой последней.
Сообщение # 6 отредактировано p620 - Суббота, 03.02.2018, 18:15
dyker
Капрал
Цитата p620 ()
(посмотреть `world.spell_script{s | _names}` на предмет наличия ключей '75592'/'69483' для начала)

в этой таблице нашел только 75592. Но что мне это даст? не могу понять связь.


Вот нашел класс по этому скрипту 


Код
class spell_anhuur_divine_reckoning : public SpellScriptLoader
{
public:
    spell_anhuur_divine_reckoning() : SpellScriptLoader("spell_anhuur_divine_reckoning") { }

    class spell_anhuur_divine_reckoning_AuraScript : public AuraScript
    {
        PrepareAuraScript(spell_anhuur_divine_reckoning_AuraScript);

        void OnPeriodic(AuraEffect const* aurEff)
        {
            if (Unit* caster = GetCaster())
            {
                CustomSpellValues values;
                values.AddSpellMod(SPELLVALUE_BASE_POINT0, aurEff->GetAmount());
                caster->CastCustomSpell(GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, values, GetTarget());
            }
        }

        void Register() override
        {
            OnEffectPeriodic += AuraEffectPeriodicFn(spell_anhuur_divine_reckoning_AuraScript::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
        }
    };

    AuraScript* GetAuraScript() const override
    {
        return new spell_anhuur_divine_reckoning_AuraScript();
    }
};

Но что с ним сделать я не понимаю.)
Сообщение # 7 отредактировано dyker - Суббота, 03.02.2018, 22:07
p620
Маршал
Ну вот, собственно, и ответ. Если хотите убрать модификатор - используйте стандартный `CastSpell`, не требующий передачи дополнительных значений. Таким образом урон будет наноситься тот, который указан в `.dbc`. Я уже очень давно ничего не писал под TrinityCore, а доков на него, насколько мне известно, нет, так что за правильность ручаться не могу (нужно решение на руках иметь, чтобы убеждаться в корректности). Замените
Код
CustomSpellValues values;
values.AddSpellMod(SPELLVALUE_BASE_POINT0, aurEff->GetAmount());
caster->CastCustomSpell(GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, values, GetTarget());
на
Код
caster->CastSpell(GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, GetTarget());
Сообщение # 8 написано 03.02.2018 в 23:06
dyker
Капрал
Цитата p620 ()
CustomSpellValues values;values.AddSpellMod(SPELLVALUE_BASE_POINT0, aurEff->GetAmount());
caster->CastCustomSpell(GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, values, GetTarget());
на
Код
caster->CastSpell(GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, GetTarget());
Ошибка сборки.

Добавлено (04.02.2018, 12:51)
---------------------------------------------

Цитата p620 ()
Ну вот, собственно, и ответ.
Удачно изменил урон без заморочек через DBC и сделал патч в клиент,всё прекрасно изменилось как мне надо)
Сообщение # 9 отредактировано dyker - Воскресенье, 04.02.2018, 09:07
Форум » TrinityCore » [TrinityCore] Help » Как отредактировать урон у спелла босса? 4.3.4
  • Страница 1 из 1
  • 1
Поиск: