Каст заклинания на ходу
В клизме добавили возможность кастовать некоторые заклинания на ходу. Наблюдая за клиентом я думаю, что нужно отправить какой-то флаг клиенту в SMSG_CAST_GO чтобы каст у него не прерывался при движении. Кто-нибудь в курсе что это за флаг?
|
Цитата:
|
Можно подумать раньше таких спелов не было...
|
Некоторые гоблинкие мины всегда можно было кастовать на ходу.
|
Да у паладина половина спелов таких :)
|
К примеру?
|
Цитата:
Цитата:
Цитата:
Пример: http://ru.wowhead.com/spell=56641. http://ru.wowhead.com/spell=2948 + http://ru.wowhead.com/spell=86914 |
К примеру вот, квесты бк:
http://www.wowhead.com/quest=11008 http://www.wowhead.com/quest=11023 Каст идет при движении. |
Как я понял, на ограничения по движению влияет Interrupt Flags (у спеллов предоставленных Den он равен 0, и поэтому клиент нормально кастует). Но например у того же 56641 Interrupt Flags: 0x0000000F. Поэтому клиент будет слать и шлет CMSG_CANCEL_CAST при движении. Я думаю, что нужно какой-то флаг указывать в SMSG_SPELL_GO (меняющий Interrupt Flags у клиента чтоли) чтобы все ок было, но вот вопрос какой?
Есть конечно вариант захакать Spell.dbc у клиента, или забивать на CMSG_CANCEL_CAST при определенных условиях, но сами понимаете что это не тру :) |
Возможно это просто modifier? SMSG_SET_FLAT_SPELL_MODIFIER.
|
Может быть. Просто смущает следующее:
Код:
Caster: (High: Zero (0x000), Counter: 175,292,137) Если я правильно понял, SMSG_SET_FLAT_SPELL_MODIFIER позволяет менять только BasePoints, или ещё что-то? |
Если вопрос про ауру 330, использующуюся например в Spiritwalker's Grace, то я делал так.
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Цитата:
void __cdecl Spell_C_CancelCastingSpellByMovement(C_Player * player) Код:
if ( v7 >= v8 |
Хм, тогда осталось выловить ауру, которая накладывается на персов для нужных заклинаний. Всем спасибо за помощь в изысканиях :)
Хм, странно, при наличии ауры на плеере (http://ru.wowhead.com/spell=86914 к примеру) клиент все равно шлет CMSG_CANCEL_CAST. Т.е. даже если дело было б в реализации на сервере, клиент поидее все равно не должен был его слать. Что за... Add: А не, для Верного выстрела работает нормально, вот почему для таланта не хочет( |
Не кто не решил проблему с http://ru.wowhead.com/spell=86914 ?
У этой ауры в отлии от других есть значение misc Код:
Effect 0: Id 6 (SPELL_EFFECT_APPLY_AURA) Если просто игнорировать опкод отмены каста, то в клиенте визуально пропадает каст, а через время урон наносится жертве. А может кто нибудь выложить код функции Код:
CGUnit_C__HasAuraMatchingSpellClass |
Выложить можно, но понять его будет сложно, ибо там нет структур и названных переменных
Обычно это проверятся в отладчике напрямую, смотрится где и как идут переходы на выход из функции Код вот : База TOM_RUS, 4.2.2.14545 Код:
char __thiscall CGUnit_C::HasAuraMatchingSpellClass(void *this, signed int auraEffect, int a3) |
мдя... наверное проще всего было бы, если бы кто нибудь смог снифнуть момент вкачивания таланта поджигатель, по любому что то отправляется клиенту, так как с талом этим на ходу клиент не позволяет даже начать каст, серверу не чего не шлётся при кликанье по кнопке. Но на сколько я слышал в данный момент нет возможности снифать офф :(
|
Нет, я сниффал. Там ничего не шлется как и при касте спелла 75
|
хм... ну не может же просто так не работать.
100% клиент блокирует, значит что то должно влиять. Мб аура несколько раз шлётся, мб бп меняются, мб в пакете ауры дополнительная инфа о которой мы не знаем прикреплена. |
а другие талы под 330 аурой работают? как выглядит отмена каста? вы бежите, начинаете кастовать, прилетает CMSG_CANCEL_CAST, и все?
Есть 2 вида проверок, одна - срабатывающая при любом изменении движения, т.е хоть на миллиметр сдвинулись, чек идет, вторая проверка при касте Так вот при первой CMSG_CANCEL_CAST шлется, при 2 пока не обнаружил, там если ауры нету, идут SpellFailed 34, SpellFailed 53 Отладка бы помогла - расставить бряки на Spell_C_CancelSpell и посмотреть call stack, откуда ноги растут |
Вообщем всё что выяснил пока.
Есть аура 330 у ханта и шамы В сервере просто проверка на 330 ауру, и если она есть, то кастовать можно. Собственно ссылка на функцию есть выше, на скайфаер. А есть тал мага (возможно и лока тоже, пока не проверял) Так вот, вкачиваем тал мага и на сервере видит что аура у него 330 и не блочит. Дальше два варианта, которые говорят о том что клиент блочит: 1) Начинаем кастовать, и потом бежать, приходит опкод CMSG_CANCEL_CAST Если мы его просто игнорируем, то на сервере каст продолжается, и урон будет нанесён, но визуально в клиенте всё равно обрыв каста. 2) Начинаем бежать, а потом пытаемся начать кастовать - не чего не происходит, в клиенте сообщение "вы не можете этого делать на ходу" а на сервер опкод старта каста даже не приходит. То что сервер не блочит, легко проверить ещё так: Начинаем бежать и пишем .cast 2948, и чар начнёт кастовать, так как сервер пошлёт команду старта каста. Но стоит остановится и опять попытаться побежать, как каст прервётся опкодом отмены каста. Добавлено через 2 минуты Цитата:
Но основная проблема в том, что я не когда этого не делал :) И я даже не смог через IDA запустить клиент, ошибки сыпятся и не чего не выходит :) Ну что ещё видно, это то что у ханта и шамы бп = 0 для аур 330, а у мага и лока бп != 0 |
если глянуть на код проверки самой функции, там есть условие при котором возвращается 1
Код:
if ( *(_DWORD *)(*(_DWORD *)v11 + 12) == auraEffect Поправка - не misc, а value = basepoints, он же бп ПС : мб бредово звучит, я посмотрел что за дбц, мб 6 - это spellfamily, попробуйте дать тал и спелл тому классу, у кого спеллфэмили 6, в кате хз кто, в личе был прист |
да, есть запись в дбц для этого спела
Цитата:
Код:
// SpellClassOptions.dbc Family SPELLFAMILY_MAGE, flag 0x00000000 00000000 00000000 для ожога это Family SPELLFAMILY_MAGE, flag 0x00000000 00000000 00000010 ну и условие для ауры SpellClassMask = 00000000 00000000 00000010 То есть тут вроде бы всё в порядке. Кто может проверить отладкой? Или кинуть ссылочку на мануал как вов отладить под вин 7 х64 :) У приста тоже отмена каста идёт от клиента. Кстати. Если нажать правую кнопку мышки, и во время каста влево или вправо, то под талом маг побежит и каст не собьётся, то есть это как раз говорит о том что сервер не блочит. А клиент в таком случае не шлёт опкод. но если бежать так а потом попытаться кастануть то всё равно не разрешит клиент. |
в ПМ загляни, чтоб не флудить тут)
|
Распишите и тут что-ли :) Остальным тоже интересна эта проблема
|
да легко :)
Суть опущу, желающие могут взять и подебажить клиент :) В функции идет проверка двух значений, одного, который считается из номера эффекта ауры и второго, значения по адресу в какой-то структуре, возможно это клиентская структура Aura. Соотвественно начат был поиск где же устанавливается значение в этот адрес. Второе значение выставляется/изменяется только в одном месте - в функции, названной близами AuraEffectUpdateMask - внутри клиентской функции OnAuraUpdate, родителем которой является пакет хандлер SMSG_AURA_UPDATE. Там пишется значение в этот адрес, причем расчет аналогичен - по номеру эффекта ауры Шама и хант, имеют активные эффекты, для них шлется пакет SMSG_AURA_UPDATE, а маг - не имеет, это талант, и пакет для него не шлется По сути этот пакет для ауры/таланта мага служит активатором, который переводит состояние откл. в состояние вкл. |
Цитата:
кул =))) как меня, помнится, за подобное предположение на гетмангосе обо...ли... |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Текущее время: 08:16. Часовой пояс GMT +3. |
ru-mangos.ru - Русское сообщество MaNGOS