mangosR2/mangos — Issue #785: Spell takes power/reagent and goes on cooldown, but has no effect
Author: Inquisitor
Created: 2012-02-18 00:42:36+00:00
State: open
Labels: Spell, System

I have a bunch of reports that sometimes spell wastes power/reagent/cooldown, but has no effect at all.
Then I've tried to test things and found this:

1. Spell loses its effect **sometimes** when you are on various height with your target. This is sometimes very hard to detect. Anyway, you can go to Underbelly in Dalaran and try to cast spells walking all around pipes that lead from Dalaran itself to Underbelly sewers. For example, here are my adventures.
I dragged underbelly rat with `.npc follow` to pipe, then `.npc unfollow`ed it, stepped off it and casted Frostbolt of Ages (ID=11, it's pretty nice because it can fly allmost to any live target). Anyway, when you stay close to rat, you can kill it, but if step out, you'll see that [character casts spell, but nothing flies to target](http://s018.radikal.ru/i510/1202/6c/7f963c11be81.jpg). Walking a little back will make you [kill rat](http://s018.radikal.ru/i521/1202/bd/e0e155eda2db.jpg) because spell works well. One more step back will make you [not in line of sight](http://s018.radikal.ru/i513/1202/19/655e5ae876f1.jpg).

2. Most of reports came from Dalaran Arena, so I went there. I took two characters and put arena in debug mode. Then I tried to cast spell through waterfall, and it also lost it effect. Casting without waterfall was successful. So it's like this:
- casting Frostbolt of Ages **through** waterfall - [no effect](http://s018.radikal.ru/i527/1202/4e/833399894ae7.jpg)
- casting Frostbolt of Ages **without** waterfall - [it's okay](http://s017.radikal.ru/i400/1202/25/30c6bca1fb8e.jpg)
- casting Devouring Plague **through** waterfall - [no effect](http://s018.radikal.ru/i522/1202/af/ab967c7ceb25.jpg)
- casting Devouring Plague **without** waterfall - [it's okay](http://s42.radikal.ru/i097/1202/9f/23d384a920e0.jpg)

So, I've tried to find the source of problem. It happens because `Spell::CheskCast()` passes through LoS check. Then, `Spell::CheckTarget()` fails this check. Why - I don't know.

Also there were strange problem on Windows - some spells did no damage because of uninitialized AP bonus in SpellEntry - it was negative (like -1.73e...whatever), so damage became negative and then 0, but this is not related to the problem of this issue.

Any comments?

--------

Меня тут буквально завалили репортами о том, что спеллы тратят ману/реги/кд, но при этом не бьют.
Я потестил кое-что и вот результаты:

1. Спелл **иногда** теряет свой эффект, когда цель и кастер находятся на разной высоте. Вообще говоря, на разных системах это проявляется по-разному, и иногда это трудно отловить, но тем не менее, мне это удалось. Я пошёл под Даларан (там дуэлятся), но поскольку на локалхосте я был один, я просто притащил командой крысу в трубу, а потом отошёл и пульнул в неё фростболтом веков (11 айди спелла). Результат - [персонаж кастует что-то, но в крысу ничего не летит](http://s018.radikal.ru/i510/1202/6c/7f963c11be81.jpg). Отходим немного, кастуем - [полетело, и крыса считай сдохла](http://s018.radikal.ru/i521/1202/bd/e0e155eda2db.jpg). Ещё шаг назад - и теперь мы уже [кагбе не видим крысу](http://s018.radikal.ru/i513/1202/19/655e5ae876f1.jpg).

2. Вообще-то большинство жалоб было на арену Даларана. Там есть водопад, и он кажется является источником бед для юзеров. Поэтому я взял вторым окном ещё чара, просто поставил по обе стороны от водопада и попробовал кастовать. Результаты получились такие:
- каст Frostbolt of Ages **через** водопад - [эффекта нет](http://s018.radikal.ru/i527/1202/4e/833399894ae7.jpg)
- каст Frostbolt of Ages **без** водопада- [всё в порядке](http://s017.radikal.ru/i400/1202/25/30c6bca1fb8e.jpg)
- каст Devouring Plague **через** водопад- [эффекта нет](http://s018.radikal.ru/i522/1202/af/ab967c7ceb25.jpg)
- каст Devouring Plague **без** водопада - [всё в порядке](http://s42.radikal.ru/i097/1202/9f/23d384a920e0.jpg)

Ну и конечно я попробовал найти источник проблемы. Им оказался тот факт, что `Spell::CheskCast()` проходит проверку на LoS , а `Spell::CheckTarget()`, вызываемый позднее - нет. Почему - непонятно.

Ну и ещё там была проблема с виндой - спеллы отказывались бить из-за того что бонусы от АП у некоторых спеллов оказались внезапно проинициализированы как -1.73e....чего-то там, короче, дамаг становился отрицательный и занулялся в итоге. Но это никак не связано с багом потери эффекта, т. к. туда же улетают станы, фиры, и проч.

Комментарии?