|
Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь |
|
Опции темы | Поиск в этой теме | Опции просмотра |
22.03.2010, 21:53 | #1 |
Администратор
|
Проверка возможности каста
Есть спелл http://ru.wowhead.com/?spell=53067, который в идеале требует реагенты.
При вызове Код:
pPlayer->CastSpell(pPlayer,53067,true); После каста итемы не исчезают из инвентаря. 1. Есть ли какая-нибудь функция проверки возможности каста? 2. Должна ли быть проверка в ядре на требование реагентов по дбц? |
22.03.2010, 22:17 | #2 |
Модератор
|
1. Да, Spell.cpp-CheckCast. Основа - различные серверные проверки для предотвращения читерства + спец-ограничения
2. Есть. Ф-ция TakeReagents() вызывается в cast после того, как проходят проверки CheckCast, CheckItems, CheckPower. В данном случае это не работает из-за triggered = true. Триггерные спелы не требуют реагентов или энергии, каст инстант и без учета ЛОС |
22.03.2010, 22:25 | #3 |
Администратор
|
CheckCast находил, но в конференции сказали, что это не то.
В CheckCast есть вызов CheckItems. 1. Является ли данный спелл триггерным? 2. Достаточно ли будет вызова CheckCast, а после него TakeReagents? 3. Если у меня изначально есть объект Player* pPlayer, то можно ли из него вызвать Код:
if (const SpellEntry* pSpellInfo = GetSpellStore()->LookupEntry(53067)) |
22.03.2010, 22:28 | #4 |
Модератор
|
Достаточно
Код:
pPlayer->CastSpell(pPlayer, 53067, false); |
22.03.2010, 22:33 | #5 |
Администратор
|
А проверка на возможность каста и реагенты будет работать?
И вообще: является данный спелл триггерным или нет? |
22.03.2010, 22:36 | #6 |
Модератор
|
Нет, триггерным он изначально не является.
Проверки будут работать в любом случае. Триггерность задается с кастом, CastSpell/CastCustomSpell, bool triggered в описании |
22.03.2010, 22:41 | #7 |
Администратор
|
Встречал разные определения триггерного спелла, но четкого так и не нашел.
Ситуация: ареатриггер срабатывает при нахождении игрока в его области, игрок должен кастануть спелл, если есть реагенты. Стоит ли городить проверку на возможность каста, чтобы ареатриггер не дергал постоянно игрока для попытки каста спелла? Интересует нагрузка при проверке каста и постоянных попытках каста при нахождении в области ареатриггера. |
22.03.2010, 22:49 | #8 |
Модератор
|
Думаю, нагрузка минимальна и доп. проверки не надо, если реагентов нет - просто не будет каста и игрок врятли это заметит вообще
|
22.03.2010, 23:16 | #9 |
Администратор
|
Большое спасибо, обманули меня в конференции, засранцы.
|
08.11.2010, 23:28 | #10 |
Администратор
|
Снова возник вопрос о проверке возможности каста.
В данном случае ситуация немного другая: надо вернуть true, только если каст спелла успешно произведен, иначе false. Дано: Код:
const SpellEntry* pSpellInfo = GetSpellStore()->LookupEntry(ххх) Player* pPlayer Item* pItem const SpellCastTargets &pTargets Как, имея указанные выше данные, проверить возможность каста и правильно вернуть true/false? |
09.11.2010, 00:01 | #11 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
потому что каст происходит позднее из Update. Соответствеено неизвестно будет ли он реально произведен.
Конечно можно возвращать true как "возможно будет скастован если что-либо не случится" Базовые проверки производятся для каста мобами в CreatureAI::CanCast
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
09.11.2010, 00:30 | #12 |
Администратор
|
Кастует игрок.
Как в таком случае проверять? |
09.11.2010, 00:34 | #13 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
А смысл? Вы не получите 100% достоверного результата в точке где каст выполняется из кода, так как это только регистрация события... Как я уже написла _можно_ добавит возвращение результата предварительных проверок, но в таком случае будет 100% достоверным только false-результат, а true-результат только вероятносным что может быть все будет хорошо.
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
09.11.2010, 00:44 | #14 |
Администратор
|
Ситуация такова: в СД2 игрок должен скастовать спелл, требующий реагенты.
Если вызвать каст спелла с triggered = false и после него вернуть true в надежде, что каст произойдет, то единственный замеченный косяк - это то, что визуально игрок становится в позу кастера, т.к. сводит руки и что-то ими шерудит, но каст не произойдет, т.к. нет реагентов, поэтому игрок будет тупо стоять и шерудить руками, что неправильно. Если возвращать false после каста, то в случае наличия реагентов получим сообщение об ошибке (текст точно не помню), но каст произойдет. Этого как-то можно избежать? |
09.11.2010, 10:35 | #15 |
Администратор
|
Есть какое-нибудь решение?
Если нет, то лучше после каста возвращать true с кривой анимацией или false с ложной ошибкой? |
09.11.2010, 19:14 | #16 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Если хотите полную проверку то надо создавать объект спела и вызывать проверку как сделано для петов и энчантинга при торговле, если надо проверять реагенты то можно наверное сделать функцию проверке вещей статической как недавно было сделано для вычисления цены спела и использвать в коде спела как и раньше и разрешить вызывать извне.
__________________
Так как устал объяснять знайте ICQ не пользуюсь Последний раз редактировалось Vladimir; 09.11.2010 в 19:23. |
10.11.2010, 20:56 | #17 |
Администратор
|
Проверка нужна полная.
На текущий момент получается, что надо сделать кучу проверок, потом вызвать каст спелла с той же кучей проверок или с triggered = true. Было бы намного удобнее, если бы был метод, который выполняет каст спелла и возвращает результат. |
11.11.2010, 23:39 | #18 |
Дево4ка снайпер
Регистрация: 08.02.2010
Сообщений: 103
Сказал(а) спасибо: 46
Поблагодарили 25 раз(а) в 13 сообщениях
Записей в дневнике: 1
|
Мало вероятно,что метод есть,точнее он есть,вопрос:лишь как его получить.Я рассмотрю такую возможность,ожидайте результат,потребуется время.
__________________
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проверка нахождения нпц в мире | virusav | Новичкам | 3 | 08.11.2010 00:08 |
[micro] Проверка ScriptDev2 скриптов | LordJZ | Tools | 22 | 06.08.2010 23:55 |
Проверка браузера | selector | Новичкам | 8 | 05.06.2010 18:42 |
[fix bug] прерывание канального каста при мисе или при уроне | Chipleo | MaNGOS 0.12 (2.4.3) | 0 | 27.04.2010 22:15 |