Здравствуйте. Я совсем еще новичек, недавно скачал чистые исходники и начал копаться в коде. Нашел в сд2 пустой скрипт малигоса, решил потренироваться на нем, добавить ему дыхание и текст от лоскутика. Текст при пуле и смерти босса срабатывал исправно, но вот дыхание почему-то не работало. Ид спелла 56272 я взял из скрипта малигоса из исходников rsa.
Гугл, ytdb вики о таблицах базы и поиск по форуму ничего не дали. Возможно я пропустил что-то важное. Например, добавить указанный спелл в базу или что-то подобное. Помогите =( Код:
#include "precompiled.h" |
Пожалуйста, почитайте мануалы или хотя бы сырцы с которыми вы пытаетесь извращаться. вы пробуете
DoCastSpellIfCan(m_creature->getVictim(), а у спелла - SpellRange: (Id 1) "Self Only": в итоге будете всегда получать облом. |
Спасибо, изменил на m_creature. Но не помогло. Или надо было сделать что-то другое?
Стал использовать гмом этот скилл через .cast, написало, что должен находиться в другой зоне (в Хотя другие аналогичные скиллы срабатывали везде. Можно ли сделать так, чтобы данный скилл можно было использовать не только в eye of eternity? *скачал другой спеллворк. |
Спелл идет селфкастом, т.е автоматом кастится на кастера. При касте можешь указывать что хочешь, проблему это не решит. Нужен другой spellId, либо же хакать этот(ставить таргетИД другой), но вряд ли это поможет, на оффе наверное этот спелл триггерит что-то другое
|
Дело тут не в таргете, Спелл кастуется игроком, но нет визуального эффекта дыхания. Если же боссом не кастуется попробуй ввести каст вот так "m_creature->CastSpell(m_creature, SPELL_BREATH, false); ! Встречал некоторые спеллы котороые не кастуются при DoCastSpellIfCan или DoCast.
|
Хм, спасибо всем.
У меня возник другой вопрос. Писал скрипт для саурфанга, застрял на спелле Boiling Blood (72385), босс его использует не на одну цель, а на всех в радиусе видимости. Через .cast в игре то же самое. В dbc написано Targets (22,15) (TARGET_CASTER_COORDINATES,TARGET_ALL_ENEMY_IN_ARE A). Перечитал кучу информации, но так и не узнал, как исправить скилл. В готовых скриптах саурфанга тоже ничего не нашел, код в функции UpdateUI идентичен. Искал в разных исходниках файлы, в которых упоминается 72385, не нашел. Но как-то у других этот скилл работает на одну цель. Пожалуйста, объясните) Код:
Покопался в англоязычном гугле, обнаружил несколько переделанных файлов Spellmgr.cpp, где делалось что-то вроде SpellEntry* spellinfo = sSpellStore.LookupEntry(i); spellInfo->EffectImplicitTargetA[0] = TARGET_UNIT_TARGET_ENEMY; spellInfo->EffectImplicitTargetB[0] = 0; У меня такое сделать не получается, тк spellinfo можно сделать только константой. |
Пришлось изменять запись в spell.dbc, так как я не знаю, как реализовать этот спелл на чистых исходниках.
|
1. Есть в коде такая функция как LoadCustomAttribute - вроде так. Там можно менять спеллы в ядре без изменения в ДБЦ
2. Ты не правильно понял как он работает. Саурфанг вешает ауру 72385 на игрока. Та в свою очередь наносит урон в радиусе. А ты видимо подумал что кастуется на всех в радиусе Код:
if (uiBoilingBloodTimer < uiDiff) https://bitbucket.org/bolvor/icecrow...r_saurfang.cpp |
У меня почему-то нет некоторых функций, например той же SelectTarget. Скачивал исходники с https://github.com/mangos/mangos.
|
Цитата:
Цитата:
|
А, да. Ладно, функции вроде LoadCustomAttributes или других вариаций я не нашел. Разве что ткнете меня в нее носом.
Порылся в spell.cpp, нашел функцию SetTargetMap. Записал туда: Код:
case 72385: // Boiling Blood (Deathbringer Saurfang) Код:
if (m_uiBloodNovaTimer <= uiDiff) |
Нет. Там рандом идет. Кол-во рандомных целей зависит от сложности
Код:
if (uiBloodNovaTimer < uiDiff) |
Эээ, вы не путаете его со скиллом boiling blood? Это он должен просто кидаться на несколько рандомных целей, кол-во зависит от сложности.
Но blood nova 72378 кидается аналогично губительному газу тухлопуза - на рдд (минимальное кол-во зависит от сложности), если их достаточно, иначе на мили. Поэтому на саурфанге рдд и стоят с /range 12-15. У меня нет волшебной функции SelectTarget для выборки целей в радиусе или я не знаю ее аналога в мангосе. Пришлось писать объемный код. |
Смотрел код тринити, там для этого использовалась сортировка всего списка игроков по их удаленности до босса, начиная с самых дальних. Потом перебором от самых дальних находился первый игрок с дистанцией меньше положеной, кол-во игроков до этого момента сохранялось в переменной. Потом через std::advance итератор рандомно ставился между началом списка и этой переменной, так получали рандомную цель в рдд. У меня почему-то так сделать не получилось, поэтому реализовал так:
Код:
//Spell Blood Nova |
Цитата:
|
А что это такое и где? Сейчас искал по всем файлам, не нашел.
В общем, нову я сделал. Теперь застрял на blood link. Есть несколько скиллов: - 72176, этим бафаются мобы саурфанга. - 72202, какой-то непонятный dummy, который прокает от предыдущего. - 72195, этот восстанавливает энергию боссу. У меня никак не получается сделать так, чтобы при атаках мобов босс восполнял энергию. Вернее, можно сделать, чтобы босс кастовал на себя 72195 при атаках саммонов, но вроде это как-то неправильно. По мувикам с оффа от адов еще анимация идет. Читал http://ru-mangos.ru/showthread.php?t=1580 тему, просмотрел те исходники, но полезного там не нашел, мб плохо искал. Еще читал http://ru-mangos.ru/showthread.php?t=3261, но мало что там понял. |
Цитата:
|
Тип энергии можно поменять в скрипте, а в базе прописать vehicle_id = 639 и полоска энергии будет фиолетовой. Для саурфанга нужен самый минимум от вехиклов, это 2 поля в update пакете, который работает на чистом ядре.
|
Цитата:
|
Цитата:
остальное надо смотреть в самих спеллах. bool Spell::FillCustomTargetMap(SpellEffectIndex i, UnitList &targetUnitMap) Здесь можно реализовать переборку и выбор нужных таргетов в ядре. |
Цитата:
|
Спасибо всем. Доделал скиллы босса, работает, похоже на оригинал) Стал скриптовать сам эвент с мурадином и оверлордом саурфангом; пока скриптую мурадина. Возникла проблема:
В определенное время мурадин бежит на саурфанга. Но кроме него у меня там стоят 5 солдат (37830). Как заставить их бежать одновременно с мурадином в определенные координаты, для каждого солдата свои? Читал код тринити, там функцией получался список указателей на всех мобов с entry 37830, и потом уже каждому давались команды. В мангосе такую функцию я реализовать не смог. Какие есть еще возможности? |
Лист гуидов, OnCreatureCreate, при ентри 37830 заносишь в лист, перебираешь в скрипте, instance->GetCreature(guid)
Можно лист паблик сделать, а если приват, пишешь метод для доступа к нему Кстати, примеров в сд2 масса |
Движение в определенные координаты:
Код:
m_creature->GetMotionMaster()->MovePoint(0, pTrap->GetPositionX(), pTrap->GetPositionY(), pTrap->GetPositionZ()); |
Спасибо. Почти все доделал. Мурадин с 5 солдатами бегут к саурфангу, он кастует grip of agony 70572 и поднимает их в воздух. Одна проблема - этот спелл 70572 срабатывает не только на нпц, но и на игроков. Просмотрел в спеллворке, но так и не понял его механику. В гугле единственное, что нашел, это упоминание этого скилла в trinity, в таблице conditions. Там этот скилл был как-то привязан к нпц 37920, 37200, 37187 и 37830. Но я не знаю, для чего эта таблица.
В общем, вопрос: как или где нужно покопаться, чтобы скилл 70572 не использовался на игроков? |
У спелла 70572 один эффект SPELL_AURA_DUMMY, поэтому в SpellAuras.cpp в void Aura::HandleAuraDummy(bool apply, bool Real) можно добавить обработку для данного спелла, в самом начале которой написать:
Код:
if (target->GetTypeId() != TYPEID_UNIT) |
Цитата:
Targets (22, 7) (TARGET_CASTER_COORDINATES, TARGET_AREAEFFECT_INSTANT) в spell_script_target таблицу добавить нужные ентри и все. Цитата:
|
Ответ был на вопрос:
Цитата:
|
Цитата:
|
Благодарю.
Из-за отсутствия у меня вехиклов придется что-то придумать с трупом саурфанга. Да и появляющийся корабль пока не знаю, как реализовать, поэтому пока саурфанг-старший будет появляться без корабля. Так вот, я внимательно осматривал видео эвента, хотя их и не много. Например, вот. Появились вопросы по этому видео: - на 1:30 синий портал, король и джайна появляются с анимацией какого-то спелла. Может знает кто, что это за спелл? Так же они с ним уходят в конце. - примерно на 3:55 у портала, который портует по этажам, появляются какие-то две штуковины с анимацией, что это такое? - в самом конце набежали работники. Это они должны построить палатки и заспавнить торговцев? Ах да, и еще: я создал портал, из которого вылазят король с джайной. Но никак не пойму, как сделать его невидимым. Вернее, понимаю, что нужно поработать с phasemask, но никак не разберусь с механикой этих фаз. Читал тут http://wiki.ytdb.ru/index.php/Gameobject#phaseMask, но что-то до меня туго доходит. Впрочем, наверное сам научусь. |
phaseMask - это несколько другое.
Если сделать spawntimesecs отрицательным, то го не будет виден, но к нему можно будет обратиться скриптом. |
Цитата:
|
Учту. Синий портал сделал, понял, как с этим работать через spawntimesecs.
|
Почти все готово, остался только прилетающий дирижабль.
Пытаюсь в коде создать транспорт, но не получается. Код:
Transport* t = new Transport(); 1>boss_deathbringer_saurfang.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Transport::Transport(void)" (??0Transport@@QAE@XZ) в функции "void __cdecl t_test(void)" (?t_test@@YAXXZ) 1>boss_deathbringer_saurfang.obj : error LNK2001: неразрешенный внешний символ ""class SQLStorage sGOStorage" (?sGOStorage@@3VSQLStorage@@A)" 1>..\..\..\..\bin\win32_release/mangosscript.dll : fatal error LNK1120: 2 неразрешенных внешних элементов |
сделай класс Transport экспортируемым, только это вообще неправильный ход.
|
Почитал повнимательнее, в ядре нашел
Код:
const MapEntry* pMapInfo = sMapStore.LookupEntry(mapid); |
Ситуация с Кораблем в ЦЛК и чтобы НПЦ по нему ходил - это вам надо в тему http://ru-mangos.ru/showpost.php?p=23618&postcount=1
|
Спасибо, эту тему я читал. Но я не мог вообще создать пустой транспорт в цлк.
Теперь у меня другая проблема: разбираюсь с контролем леди, хочу сделать так, чтобы игроки в контроле юзали какие-то скиллы против рейда. В общем-то работает, но возникла проблема: игрок в контроле видит остальной рейд как врагов с красненькими фреймами, но рейд этого игрока не видит врагом, хотя можно его зацепить аоешкой. Что не так? Я уже и вручную ставил игроку в контроле фракцию 21, не помогает. |
вы опоздали примерно на год, дискуссии по этим спеллам активно шли тут, на YTDB и в других местах в апреле-мае прошлого года. повторяться скучновато...
|
Цитата:
Код:
if (newShipA = instance->LoadTransportInMap(m_uiTeamInInstance == ALLIANCE ? GO_SKYBREAKER_ALLIANCE : GO_HAMMER_HORDE, 0, 80000, true, 6.23f)) |
Текущее время: 01:01. Часовой пояс GMT +3. |
ru-mangos.ru - Русское сообщество MaNGOS