Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Новичкам

Важная информация

Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.03.2010, 21:53   #1
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию Проверка возможности каста

Есть спелл http://ru.wowhead.com/?spell=53067, который в идеале требует реагенты.
При вызове
Код:
pPlayer->CastSpell(pPlayer,53067,true);
каст происходит без всякой проверки на наличие итемов.
После каста итемы не исчезают из инвентаря.

1. Есть ли какая-нибудь функция проверки возможности каста?
2. Должна ли быть проверка в ядре на требование реагентов по дбц?
virusav вне форума   Ответить с цитированием
Старый 22.03.2010, 22:17   #2
MaS0n
Модератор
 
Регистрация: 09.03.2010
Адрес: dev/null
Сообщений: 126
Сказал(а) спасибо: 44
Поблагодарили 111 раз(а) в 47 сообщениях
MaS0n Скоро придёт к известностиMaS0n Скоро придёт к известности
Отправить сообщение для MaS0n с помощью ICQ
По умолчанию

1. Да, Spell.cpp-CheckCast. Основа - различные серверные проверки для предотвращения читерства + спец-ограничения

2. Есть. Ф-ция TakeReagents() вызывается в cast после того, как проходят проверки CheckCast, CheckItems, CheckPower.

В данном случае это не работает из-за triggered = true.

Триггерные спелы не требуют реагентов или энергии, каст инстант и без учета ЛОС
MaS0n вне форума   Ответить с цитированием
Старый 22.03.2010, 22:25   #3
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

CheckCast находил, но в конференции сказали, что это не то.

В CheckCast есть вызов CheckItems.

1. Является ли данный спелл триггерным?
2. Достаточно ли будет вызова CheckCast, а после него TakeReagents?
3. Если у меня изначально есть объект Player* pPlayer, то можно ли из него вызвать
Код:
if (const SpellEntry* pSpellInfo = GetSpellStore()->LookupEntry(53067))
и CheckCast для проверки или надо еще что-то добавлять?
virusav вне форума   Ответить с цитированием
Старый 22.03.2010, 22:28   #4
MaS0n
Модератор
 
Регистрация: 09.03.2010
Адрес: dev/null
Сообщений: 126
Сказал(а) спасибо: 44
Поблагодарили 111 раз(а) в 47 сообщениях
MaS0n Скоро придёт к известностиMaS0n Скоро придёт к известности
Отправить сообщение для MaS0n с помощью ICQ
По умолчанию

Достаточно
Код:
pPlayer->CastSpell(pPlayer, 53067, false);
И спелл будет забирать реагенты
MaS0n вне форума   Ответить с цитированием
Старый 22.03.2010, 22:33   #5
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

А проверка на возможность каста и реагенты будет работать?
И вообще: является данный спелл триггерным или нет?
virusav вне форума   Ответить с цитированием
Старый 22.03.2010, 22:36   #6
MaS0n
Модератор
 
Регистрация: 09.03.2010
Адрес: dev/null
Сообщений: 126
Сказал(а) спасибо: 44
Поблагодарили 111 раз(а) в 47 сообщениях
MaS0n Скоро придёт к известностиMaS0n Скоро придёт к известности
Отправить сообщение для MaS0n с помощью ICQ
По умолчанию

Нет, триггерным он изначально не является.
Проверки будут работать в любом случае.
Триггерность задается с кастом, CastSpell/CastCustomSpell, bool triggered в описании
MaS0n вне форума   Ответить с цитированием
Старый 22.03.2010, 22:41   #7
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Встречал разные определения триггерного спелла, но четкого так и не нашел.

Ситуация: ареатриггер срабатывает при нахождении игрока в его области, игрок должен кастануть спелл, если есть реагенты.

Стоит ли городить проверку на возможность каста, чтобы ареатриггер не дергал постоянно игрока для попытки каста спелла?
Интересует нагрузка при проверке каста и постоянных попытках каста при нахождении в области ареатриггера.
virusav вне форума   Ответить с цитированием
Старый 22.03.2010, 22:49   #8
MaS0n
Модератор
 
Регистрация: 09.03.2010
Адрес: dev/null
Сообщений: 126
Сказал(а) спасибо: 44
Поблагодарили 111 раз(а) в 47 сообщениях
MaS0n Скоро придёт к известностиMaS0n Скоро придёт к известности
Отправить сообщение для MaS0n с помощью ICQ
По умолчанию

Думаю, нагрузка минимальна и доп. проверки не надо, если реагентов нет - просто не будет каста и игрок врятли это заметит вообще
MaS0n вне форума   Ответить с цитированием
Старый 22.03.2010, 23:16   #9
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Большое спасибо, обманули меня в конференции, засранцы.
virusav вне форума   Ответить с цитированием
Старый 08.11.2010, 23:28   #10
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Снова возник вопрос о проверке возможности каста.

В данном случае ситуация немного другая: надо вернуть true, только если каст спелла успешно произведен, иначе false.

Дано:
Код:
const SpellEntry* pSpellInfo = GetSpellStore()->LookupEntry(ххх)
Player* pPlayer
Item* pItem
const SpellCastTargets &pTargets
По идее, если бы CastSpell возвращал true/false, то проблема бы решалась просто, но такого нет.

Как, имея указанные выше данные, проверить возможность каста и правильно вернуть true/false?
virusav вне форума   Ответить с цитированием
Старый 09.11.2010, 00:01   #11
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

потому что каст происходит позднее из Update. Соответствеено неизвестно будет ли он реально произведен.
Конечно можно возвращать true как "возможно будет скастован если что-либо не случится"

Базовые проверки производятся для каста мобами в CreatureAI::CanCast
__________________
Так как устал объяснять знайте ICQ не пользуюсь
Vladimir вне форума   Ответить с цитированием
Старый 09.11.2010, 00:30   #12
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Кастует игрок.
Как в таком случае проверять?
virusav вне форума   Ответить с цитированием
Старый 09.11.2010, 00:34   #13
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

А смысл? Вы не получите 100% достоверного результата в точке где каст выполняется из кода, так как это только регистрация события... Как я уже написла _можно_ добавит возвращение результата предварительных проверок, но в таком случае будет 100% достоверным только false-результат, а true-результат только вероятносным что может быть все будет хорошо.
__________________
Так как устал объяснять знайте ICQ не пользуюсь
Vladimir вне форума   Ответить с цитированием
Старый 09.11.2010, 00:44   #14
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Ситуация такова: в СД2 игрок должен скастовать спелл, требующий реагенты.

Если вызвать каст спелла с triggered = false и после него вернуть true в надежде, что каст произойдет, то единственный замеченный косяк - это то, что визуально игрок становится в позу кастера, т.к. сводит руки и что-то ими шерудит, но каст не произойдет, т.к. нет реагентов, поэтому игрок будет тупо стоять и шерудить руками, что неправильно.
Если возвращать false после каста, то в случае наличия реагентов получим сообщение об ошибке (текст точно не помню), но каст произойдет.

Этого как-то можно избежать?
virusav вне форума   Ответить с цитированием
Старый 09.11.2010, 10:35   #15
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Есть какое-нибудь решение?
Если нет, то лучше после каста возвращать true с кривой анимацией или false с ложной ошибкой?
virusav вне форума   Ответить с цитированием
Старый 09.11.2010, 19:14   #16
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

Если хотите полную проверку то надо создавать объект спела и вызывать проверку как сделано для петов и энчантинга при торговле, если надо проверять реагенты то можно наверное сделать функцию проверке вещей статической как недавно было сделано для вычисления цены спела и использвать в коде спела как и раньше и разрешить вызывать извне.
__________________
Так как устал объяснять знайте ICQ не пользуюсь

Последний раз редактировалось Vladimir; 09.11.2010 в 19:23.
Vladimir вне форума   Ответить с цитированием
Старый 10.11.2010, 20:56   #17
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Проверка нужна полная.

На текущий момент получается, что надо сделать кучу проверок, потом вызвать каст спелла с той же кучей проверок или с triggered = true.

Было бы намного удобнее, если бы был метод, который выполняет каст спелла и возвращает результат.
virusav вне форума   Ответить с цитированием
Старый 11.11.2010, 23:39   #18
Inn04ka
Дево4ка снайпер
 
Аватар для Inn04ka
 
Регистрация: 08.02.2010
Сообщений: 103
Сказал(а) спасибо: 46
Поблагодарили 25 раз(а) в 13 сообщениях
Записей в дневнике: 1
Inn04ka Реально хороший человекInn04ka Реально хороший человекInn04ka Реально хороший человекInn04ka Реально хороший человекInn04ka Реально хороший человек
Отправить сообщение для Inn04ka с помощью Skype™
По умолчанию

Мало вероятно,что метод есть,точнее он есть,вопрос:лишь как его получить.Я рассмотрю такую возможность,ожидайте результат,потребуется время.
__________________
Inn04ka вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка нахождения нпц в мире 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


Текущее время: 11:38. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot