• Страница 1 из 1
  • 1
Модератор форума: Dimitro  
Нужна помощь грамотного рисовщика со спеллами в итеме
aranto2
Скаут
Здравствуйте дорогие завсегдатаи форума. Столкнулся с непосильной для меня задачей: Необходимо сделать малые символы которые бы при использовании добавляли бы в книгу заклинаний определённые спеллы, а при снятии/замене удалялись бы и эти спеллы....
Если это и для вас тоже непосильная задача, то интересно: Возможно ли вообще добавить в функции итема способность забывать определённые спеллы (в квайсе можно только выучить (триггер 6)). С меня +, и не только...

Добавлено (02.09.2015, 11:55)
---------------------------------------------
Возможно есть и триггер на забывание спелла?? Это одна из основных фишек сервера... Важно чтоб игроки обладали лишь определёнными спеллами из символа а не могли использовать все... Как вариант кастомизации персонажа в выборе нужных спеллов

Сообщение # 1 написано 02.09.2015 в 11:55
No_MaTTeR
Старший Маршал
На сколько мне известно, разучить нельзя. Хотя можешь поискать спелл "Забыть все таланты" (как-то так). Но, в принципе, я раньше интересовался этим заклинаниями и ему подобными, так ничего толкового ни в дбц, ни в базе не нашел, а значит прописка идет через ядро.
Сообщение # 2 написано 02.09.2015 в 12:11
p620
Маршал
Только с патчем в клиент.
Spell.dbc (и дочерние по необходимости), GlyphProperties.dbc.
Фактически символы именно так и работают, только добавляют пассивные невидимые способности, модифицирующие характеристики других.
Сообщение # 3 отредактировано p620 - Среда, 02.09.2015, 13:20
No_MaTTeR
Старший Маршал
p620, так, стоп, т.е. без ядра, все же, можно сделать разучивание конкретного спелла используя лишь spell.dbc? А какая тогда колонка?
Сообщение # 4 написано 02.09.2015 в 13:50
p620
Маршал
Насчёт "разучивания" не уверен, обучение возможно точно (есть такой эффект).
Но даже если для "разучивания" придется лезть в ядро - скрипт получится совсем пустяковым. Хукануть к аура-фейду, проверять, изучена ли способность, и, если да, заставлять забыть ее. В ауру же вогнать нужные флаги, чтобы не слетала при смерти, не отображалась на аурабаре и в комбатлоге (образец можно подсмотреть у любого существующего глифа (GlyphProperties.dbc, колонка 2 (референс в Spell.dbc) ) ).
Сообщение # 5 написано 02.09.2015 в 18:57
aranto2
Скаут
Цитата p620 ()
Но даже если для "разучивания" придется лезть в ядро - скрипт получится совсем пустяковым.

В ядро полезу, не проблема писал пару спеллов. Проблема в том что даже изи скрипт для меня тру т.к. я далёк от программирования и серве ещё не в той стадии развития чтобы нанимать спец. обученных людей. Был бы крайне признателен если бы вы помогли мне шаблоном) С меня плюсы по КД, для хороших людей не жалко)
З.Ы. спасибо всем поучавствовавшим в теме, надеюсь проблема разрешится в дальнейшем. Но а пока-что работаю работаю изучаю...
Сообщение # 6 отредактировано aranto2 - Среда, 02.09.2015, 21:54
p620
Маршал
В spell_generic.cpp, вне определения какого-либо класса:

Код
class spell_gen_NAME : public SpellScriptLoader
{
            public:
                spell_gen_NAME() : SpellScriptLoader("spell_gen_NAME") { }
                      
                class spell_gen_NAME_AuraScript : public AuraScript
                {
                    PrepareAuraScript(spell_gen_NAME_AuraScript);

                    void HandleFading(AuraEffect* const, AuraEffectHandleModes)
                    {
                        if(Player* player = GetTarget()->ToPlayer())
                            if(player->HasSpell(SPELL_ID)
                      player->removeSpell(SPELL_ID);
                    }
                          
                    void Register(void) OVERRIDE
                    {
                        AfterEffectRemove += AfterEffectRemoveFn(spell_gen_NAME_AuraScript::HandleFading, EFFECT_INDEX, SPELL_AURA_EFFECTTYPE, AURA_EFFECT_HANDLE_REAL);
                    }
                };

                AuraScript* GetAuraScript(void) const OVERRIDE
                {
                    return new spell_gen_NAME_AuraScript();
                }
};


(Форматирование отступов отвратительное, т.к. все писалось в окне отправки сообщения -.-)

В самый низ, внутрь загрузчика в том же файле (внутрь AddSC_generic_spell_scripts()) дописать:
Код
new spell_gen_NAME();


Подставить вместо:
NAME <- название скрипта (обычно является названием спелла или его желаемым скриптовым эффектом).
SPELL_ID <- ID заклинания, которое требуется забыть.
INDEX <- цифру от 0 до 2 (оба включительно), которая отразит номер эффекта (от 1 до 3, соответственно), за рассеиванием которого следует следить.
EFFECTTYPE <- Тип эффекта, которым является этот целевой эффект (надеюсь, понимаете, о чем идет речь).

С ядром закончили, теперь база:
В таблицу world.spell_script_names:
spell_id <- ID ауры, которая, при рассеивании, должна вызывать скрипт (который заставляет забыть указанное заклинание).
ScriptName <- spell_gen_NAME.

Далее остается .дбц.
Создавайте новые заклинания (одну ауру для символа и одно целевое заклинание, которому и нужно обучать).
Обратите внимание, что скрипт лишь заставляет забыть указанную способность, обучение оной Вы должны сделать самостоятельно, используя другие spellEffect'ы через Spell.dbc. И не забудьте зарегистрировать новый символ в GlyphProperties.dbc, а также в Item.dbc, когда тот станет уже готовым предметом.

Порядок действий получается примерно таким:
Игрок использует символ. -> Символ, будучи установленным, набросил на игрока спадающую ИСКЛЮЧИТЕЛЬНО при удалении символа ауру. -> Аура в момент наложения, посредством вызова другого заклинания, обучила игрока третьему (целевому заклинанию). -> Игрок пользуется заклинанием по своему усмотрению и счастлив.
Игрок заменяет/удаляет символ. -> Аура, которой обучил СИМВОЛ, рассеивается, вызывая скрипт из ядра, который проверяет, изучено ли игроком ЦЕЛЕВОЕ заклинание и, если да, заставляет его забыть таковое. -> Игрок не пользуется заклинанием и несчастен.

П.С: Не заморачивайтесь с "плюсами".
Сообщение # 7 отредактировано p620 - Среда, 02.09.2015, 23:05
  • Страница 1 из 1
  • 1
Поиск: