|
Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь |
|
Опции темы | Поиск в этой теме | Опции просмотра |
14.03.2010, 01:00 | #1 | |||
Новичок
Регистрация: 07.03.2010
Сообщений: 21
Сказал(а) спасибо: 99
Поблагодарили 35 раз(а) в 6 сообщениях
|
[Manual]Основы правки спеллов
mangos.ru
дата:14.04.2009 автор:danbst Внимание! Данная тема предназначена для програмистов, начинающих разбиратся в больших проектах. Сам я являюсь начинающим - поэтому запишу свои заметки (пока помню 1. Вы нашли неработающий спелл и хотите его исправить. Самый очевидный путь решения проблемы - посмотреть исходники МаНГОСа, понять как должен спел работать и исправить. Дальше перекомпилить сервер и протестировать. Если не помогло - вернутся в исходники, подумать, исправить, протестить... и так до победного конца. Так вот, данный способ в основном не помогает! 2. Начинаем гуглить на тему обнаружение ошибок. Википедия Цитата:
4. А вот Код:
Вывод текущего состояния программы с помощью расположенных в критических точках программы операторов вывода Цитата:
Изучаем все про наш спел. Для этого используем wowhead.com, thottbot.com, C.S.W.O.W.D., мангос.вики, Spell.dbc. Используем поиск на getmangos.ru, getmangos.com (опционально на thetrinitycore.org) в попытках засечь обсуждения, патчи, комментарии. Можно также выложить запрос на патч или просто спросить на форуме у знатоков - возможно их ответом и будет патч Но, как правило, такое редко случается, у знатоков своих дел предостаточно. Ставим чистый мангос - чтоб не править чужие патчи(если это не планируется), чистую базу - чтобы быстрее поднимался сервер, компилим без дополнений (в виде СД2) Первым делом - включение в конфиге логирования на уровень 3 (debug), желательно и для файла, для поиска в нем нужной информации Код:
LogSQL = 1 PidFile = "" LogLevel = 3 LogTime = 1 LogFile = "Server.log" LogTimestamp = 1 LogFileLevel = 3 LogFilter_TransportMoves = 1 LogFilter_CreatureMoves = 1 LogFilter_VisibilityChanges = 1 Врубаем метод научного тыка - в поиске по сорцам вводим ИД спелла, либо его название, либо название класса(если это классовый спел) и ходим по коду, внимательно всматриваясь и включив интуицию. Данный метод помогает редко, но помогает. Помогает также начать раздуплятся в коде (теперь вы будете понимать важность комментариев). Если предыдущий способ прямого поиска ошибочного места не привел к успеху, используем консольные сообщения для поиска. Пример(реальный). Я кастую спелл, а мне на екране клиента выводит - "Нельзя использовать сдесь". В консоли при попытке каста отображается следущее: Код:
2009-04-14 16:26:21 WORLD: got cast spell packet, spellId - 28622, cast_count: 10, unk_flags 0, data length = 10 2009-04-14 16:26:21 WORLD: got cast spell packet, spellId - 28622, cast_count: 11, unk_flags 0, data length = 10 2009-04-14 16:26:21 WORLD: got cast spell packet, spellId - 28622, cast_count: 12, unk_flags 0, data length = 10 2009-04-14 16:26:21 WORLD: got cast spell packet, spellId - 28622, cast_count: 13, unk_flags 0, data length = 10 2009-04-14 16:26:22 WORLD: got cast spell packet, spellId - 28622, cast_count: 14, unk_flags 0, data length = 10 2009-04-14 16:26:22 WORLD: got cast spell packet, spellId - 28622, cast_count: 15, unk_flags 0, data length = 10 Код:
2009-04-14 16:29:38 WORLD: got cast spell packet, spellId - 28622, cast_count: 52, unk_flags 0, data length = 10 2009-04-14 16:29:38 Sending SMSG_SPELL_START id=28622 2009-04-14 16:29:38 Sending SMSG_SPELL_GO id=28622 2009-04-14 16:29:38 Spell: Effect : 6 2009-04-14 16:29:38 Spell: Aura is: 201 2009-04-14 16:29:38 Aura: construct Spellid : 28622, Aura : 201 Duration : 60000 Target : 1 Damage : 0 2009-04-14 16:29:38 Aura 201 now is in use 2009-04-14 16:29:38 Spell: Effect : 6 2009-04-14 16:29:38 Spell: Aura is: 3 2009-04-14 16:29:38 Aura: construct Spellid : 28622, Aura : 3 Duration : 60000 Target : 1 Damage : 3260 2009-04-14 16:29:38 Aura 3 now is in use 2009-04-14 16:29:38 Spell: Effect : 6 2009-04-14 16:29:38 Spell: Aura is: 12 2009-04-14 16:29:38 Aura: construct Spellid : 28622, Aura : 12 Duration : 60000 Target : 1 Damage : 0 2009-04-14 16:29:38 Aura 12 now is in use 2009-04-14 16:29:38 WORLD: CMSG_MOVE_SET_CAN_FLY_ACK 2009-04-14 16:29:40 PeriodicTick: 449 (TypeId: 4) attacked 449 (TypeId: 4) for 3260 dmg inflicted by 28622 abs is 0 2009-04-14 16:29:40 DealDamageStart 2009-04-14 16:29:40 deal dmg:3260 to health:3729 Копируем строчку(только нужные слова, не указывайте конкретные числа!), кнтрл-F, находим кусок кода. Теперь у нас есть отправная точка. Крутим код вниз, проверяя разветления. Также переходим по функциям дальше вглубь кода до основ, пока не убедимся в их правильности(или неправильности). Если ошибочное место до сих пор не определено, начинаем использовать Цитата:
Ошибка локализована, что дальше? Нуу, багу можна приписать категорию: хак, оставленый кем-то на память; грубая очепятка, призведшая к поломке спелла; некорректная проверка; ошибка при проэктировании структуры МаНГОСа; отсуствие возможности реализации. Последние 2 категории - из разряда сложных, без досконального знания кода мангоса и С++ не обойтись. Остальные уже решать по ходу дела Если окажется, что вы знаете маловато функций Мангоса для устранения бага - самое время начать изучать код. Вот список файлов для изучения в первую очередь Код:
Player.h/Player.cpp Unit.cpp/Unit.h Spell.h/Spell.cpp SpellAuras.h/SpellAuras.cpp SpellEffects.cpp SpellHandler.cpp SpellAuraDefines.h SpellMgr.cpp/SpellMgr.h Object.h/Object.cpp SharedDefines.h - особо!!! Что еще добавить? - Если бага легко исправляется правкой ДБЦ - ни в коем случае так не делаем! Правка ДБЦ есть неправильный путь - Не тупите(особенно при вопросах на форуме. мну зафукали за тупой вопрос... теперь красное пятно осталось... недоверие...) - Просматривайте аналогичные проблемы и способы их решений - *еще может чё придумаю.. Вот так. Критика и улучшения приветствуются. А еще хотелось бы услышать мнения девов, ведь сдесь все написано новичком. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Каст триггерных спеллов | virusav | Баг-репорты | 1 | 08.12.2010 16:54 |
Маски спеллов | fedr | Новичкам | 2 | 13.09.2010 22:42 |
[dev] manual debug | partizanes | Прочая документация | 16 | 09.09.2010 09:19 |
Реализация спеллов бомб и т.д | frenk | Баг-репорты | 0 | 20.03.2010 00:32 |