Главная | Форум | Статьи | Фaйлы| Картинки WoW | Профиль | Регистрация | Вход

[ Новые сообщения · Правила форума · Поиск · RSS ]

WoW-Info — информационный World of Warcraft портал

Разбор кода спеллов - Форум

  • Сторінка 1 з 1
  • 1
Разбор кода спеллов
DarkensandДата: Четвер, 19.05.2011, 09:59 | Сообщение # 1



Darkensand
Главный Админ
Лучший из лучших
Группа: Администратор
Сообщений: 8083



Оффлайн
Скопипастено с мангос.ру
Перед Тем как мы начнем Обговорим особенности спелов (то что я заметил)
Обычно сам спелл вызывает так называемые эффекты которые тоже могут вызывать другие эффекты тоесть при использовании 1 спелла мы на самом деле используем их несколько
Как я понял у одного спелла может быть до 3 Эффектов (Но у каждого из этих трех эффектов может быть еще до 3 эффектов )
Очень хороший пример http://www.wowhead.com/?spell=55342 рассмотрим Spell Details
Apply Aura: Mod Total Threat (Fade) -- Накладывает на игрока ауру
Apply Aura: ?? (Aura #226) --Накладывает на игрока ауру
Trigger Spell Mirror Image -- Вызывает Другой спелл http://www.wowhead.com/?spell=58832 который уже в свою очередь вызывает еще 3 спелла
http://www.wowhead.com/?spell=58833 http://www.wowhead.com/?spell=58831 http://www.wowhead.com/?spell=58834
вот каждый из них вызывает по так называемой иллюзии Effect Summon (31216) Radius: 3 yards
(это очень сложный спелл который пока не реализован из-за плохо реализованной системы суммонов)
--------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------
Итак Начнем:
Первое что нам понадобиться это программа от Chestr называться она spell_work скачиваем под нужную версию (3.0.8 подходит для 3.0.9)
Дальше Определяемся Какой Спелл мы хотим Разобрать Узнаем его номер например на wowhead
Сразу Уточню что не всегда просто найти в коде место где именно обрабатываться спелл
Я попробую разобрать несколько спеллов
1)Возьмем Достаточно Сложный С виду Спелл Demonic Sacrifice (не удачный Пример но все же )
http://www.wowhead.com/?spell=18788 Я думаю по этой строчке очевидно что ид спелла 18788
Открываем Смотрим Снизу в описании (Spell Details)
Effect- Instakill (Хм что же это значит )
Далее запускаем программу spell_work
(уточню Программа должна находиться в папке с сервером ну или рядом с dbc файлами)
в Option Подключаем его к вашей базе данных(вроде не обязательно)
Номер Спелла (как узнать ? выделен выше красным) вставляем справа в программе в поле Search
Нажимаем на кнопку Поиск Чуть ниже в табличке высвечивается найденный Спелл и в скобках его название
(Уточнение:Если dbc файлы вынуты из русского клиента название не ВЫСВЕЧИВАЕТСЯ )
Клацаем в табличке на спелл
Слева В большом пустом поле появляется информация
(оговорю как найти в коде что либо. Открываем папку с исходниками нашм случаем надо искать в папке game нажимаем на этой папке Поиск. в Сточку Искать Текст вставляем то что нам надо найти в коде)
Что мы Здесь видим
SPELLFAMILY_GENERIC (Так называемое Семейство Спелла)
описание в enum SpellFamilyNames в SpellMgr.h
SPELL_SCHOOL_SHADOW (Тип Магии )
описание в enum SpellSchools в SharedDefines.h
SPELL_DAMAGE_CLASS_NONE(Тип повреждения магии )
все что выше нас мало интересует идем дальше
Target A (TARGET_PET) - цель на которую будет применяться заклинание
Effect: (001) SPELL_EFFECT_INSTAKILL -еффект который будет наложен
Топаем в поиск и ищем в исходниках(Game) SPELL_EFFECT_INSTAKILL (чуть выше было уточнено как это делать)
У меня нашло три файла Creature.cpp SharedDefines.h SpellEffects.cpp
Включаем Логику SPELL_EFFECT_INSTAKILL лезем в SpellEffects.cpp
И производим по тексту Поиск слова INSTAKILL
нашли ?
О теперь видим // Demonic Sacrifice
Что же тут написано?
О как Сложно .да нет же все просто (подпишу комментарии что бы все поняли)

Code
void Spell::EffectInstaKill(uint32 /*i*/)
{
if( !unitTarget || !unitTarget->isAlive() ) //Если Цель зклинания живая TARGET_PET если кто забыл
return; // возвращает значение

// Demonic Sacrifice
if(m_spellInfo->Id==18788 && unitTarget->GetTypeId()==TYPEID_UNIT)
//если Ид спелла = 18788 и цель TYPEID_UNIT(вероятно моб)
{ //если выше оба верны то выполняется то что ниже (что оба верны должны быть указывает это знач && )
uint32 entry = unitTarget->GetEntry();
//обьявляется переменнная entry которой присваиваться номер(entry цели игрока)
uint32 spellID; ///Объявляется переменная spellID
switch(entry) //То что в скобках сравнивается с значениями case XXX
{
case 416: spellID=18789; break; //imp //eсли entry = 416 то spellID=18789 (416 ентри моба 18789 спелл который будет вешаться на игрока)
case 417: spellID=18792; break; //fellhunter //тоже самое только ид разное
case 1860: spellID=18790; break; //void //тоже самое только ид разное
case 1863: spellID=18791; break; //succubus //тоже самое только ид разное
case 17252: spellID=35701; break; //fellguard //тоже самое только ид разное
default: \\если не нашло значения
}
sLog.outError("EffectInstaKill: Unhandled creature entry (%u) case.",entry);
//Вывести сообщение в консоль неизвестный номер моба
return;
m_caster->CastSpell(m_caster,spellID,true);
//кастующий - кастует спелл на себя с присвоенным spellID ранее
}

if(m_caster==unitTarget) // prevent interrupt message
если оба оба операнта равны (кастер=цели)
finish(); //закончить ? (точно не знаю) не выполнять что дальше?

m_caster->DealDamage(unitTarget, unitTarget->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
}
//Кастер наносит (цели повреждение = ее хп ) -- тоесть происходит убийство питомца
вывод: при касте заклинания с 18788 вызывается Эффект Instakill в котором происходит обработка
значений и кастуеться спелл на игрока в зависимости от суммона и происходит убийство суммона

вот еще мини разбор неправильно работающего спелла

Code
http://www.wowhead.com/?spell=53007 иногда просто пропадает.То есть нацелился на кого-то и жмёшь на скил и самого эффекта нет.Такое примерно в 25% случаев
Береш выбираешь себя потом нажимаешь кастовать спелл указатель предлагает выбрать цель выбираешь получаешь в себя демаг
Все потому что в коде с этим спелом проверка идет на выбраную цель а не на цель на которую кастуеться спелл попытался разобраться не получилось
Причем паловский похожий скил работает как надо только потому что может кастоваться на себя
и там такая же реализация
кому интересно вот кусочек кода 53007 (для новичков напишу коменты )

Code
if (m_caster->IsFriendlyTo(unitTarget)) //Если выбранная цель кастующего(но не цель каста заклинания ) дружественная то
m_caster->CastSpell(unitTarget, heal, true, 0); // кастуеться спелл на выбранную цель где heal это спелл лечения указанный чуть выше этого кода
else // иначе
m_caster->CastSpell(unitTarget, hurt, true, 0); // кастуеться спелл на выбранную цель где hurtэто спелл дмг указанный чуть выше этого кода

 
  • Сторінка 1 з 1
  • 1
Пошук:

Новые сообщения в темах
Сдам в аренду сервер и хостинг · (Хост Предложения)
Автор: redlaine
Последнее сообщение в 23:53
хаха :D · (Приколы)
Автор: [N1ke]Medved
Последнее сообщение в 18:40
Autobattle - новый боевой бот ... · (Боты для WoW)
Автор: terrikon
Последнее сообщение в 18:39
PvE руководство для Чернокнижн... · (Чернокнижник)
Автор: Darkensand
Последнее сообщение в 18:38
Пустой свиток (Часть 11) · (Истории WoW)
Автор: R_a_Z_o_R
Последнее сообщение в 18:37
Друиды в Катаклизме: Официальн... · (Друид)
Автор: Darkensand
Последнее сообщение в 18:37
[Баг 3.3.5] Фарм ледяных бадже... · (Читы для WoW)
Автор: Darkensand
Последнее сообщение в 18:35
FarmBot (Бот для фарма руды и ... · (Боты для WoW)
Автор: homma
Последнее сообщение в 18:34
Почему мы сражаемся: ролевая и... · (Воин)
Автор: Darkensand
Последнее сообщение в 18:34
Книги по Wold of Warcraft · (Истории WoW)
Автор: R_a_Z_o_R
Последнее сообщение в 18:33
Маг огня в Cataclysm · (Маг)
Автор: Darkensand
Последнее сообщение в 18:33
Как начать играть в World of W... · (Полезно знать)
Автор: Belkmondesh
Последнее сообщение в 18:32
Характеризация профессий · (Профессии)
Автор: Darkensand
Последнее сообщение в 18:31
Что значит для арканов бета те... · (Маг)
Автор: Darkensand
Последнее сообщение в 18:31

Контакты Контакты Copyright WoW-Info — World of Warcraft портал © 2025 | Условия и правила использования ресурса | Реклама / Услуги
WoW-Info портал.World of Warcraft портал — готовые сервера, сайты, картинки, аддоны, патчи, читы, баги, mangos, ArcEmu, TrinityCore, Warcraft 3, новости, Cataclysm...
Яндекс.Метрика Хостинг від uCoz