ProjectSkyfire / SkyFire.406a

SkyFireEMU is a full featured F/OSS World of Warcraft: Cataclysm emulator written in C++. || Compatible with World of Warcraft client 4.0.6a (Build:13623) || Public DB is located on forum
http://www.projectskyfire.org
GNU General Public License v3.0
344 stars 218 forks source link

Spiritwalker's Grace not working #554

Open olivete opened 12 years ago

olivete commented 12 years ago

http://www.wowhead.com/spell=79206/spiritwalkers-grace

Not working as supposed to. Cant cast spells while moving.

Thanks alot.

Walkum commented 12 years ago

Confirm, I think that is a problem with a case cast in movement or similar thing XD.

OneB1t commented 12 years ago

no spell with cast while walking works maybe this can help? https://github.com/SkyFire/SkyFireEMU/commit/137caa1ab039d4fbf7a969ecbfd0653a32d271dd

Walkum commented 12 years ago

is already implemented, I don't know where is the problem.

OneB1t commented 12 years ago

i managed to make it work only for A and D keys dunno why QWES interrupts it... (probably client send CMSG_CANCEL_CAST)

googled this: Spells like scorch (either with passive talant like "firestarter") are interrupted by client, CMSG_CANCEL_CAST is sended to the server if you move while casting something (checked seconds ago.)

if you try to put somthing like "if (_player->CanCastWhileWalking(spellId)) return;" in WorldSession::HandleCancelCastOpcode you get spell interrupted only on client, on server it continue his casting

so i think that for firestarter and similar effect we need an custom "spell_dbc" that activate casting walk of scortch, like spiritwalker grace do.

any other ideas?

edit: working fix for spiritwalker grace but not for firestarter (we need to remove client CMSG_CANCEL_CAST by custom spell)

http://pastebin.com/qBvDqeB3

Walkum commented 12 years ago

you rlz very much OneB1t, very thanks, I'm very grateful ^^

olivete commented 12 years ago

Thanks OneB1t!!! You are helping alot!

OneB1t commented 12 years ago

if someone have idea for that custom spell (or know how to add attributes to firestarter to fix client issue please share it :-))

Siegels commented 12 years ago

I'm trying to see with WorldSession:HandleCancelCastOpcode, using your idea: adding !_player->CanCastWhileWalking(spellId)

ATM i can't start cast Scorch while walking, but i can start the cast then walk. On the client, you will see "Interrupted" but server-side the cast will continue and you will see correct damage & animation on the target after the cast time.

I need to see where are handled other client messages and maybe we will solve this (<3 fire mage)

I don't know if i'm looking at the best direction but this is a good start.

OneB1t commented 12 years ago

for Spiritwalker's Grace CMSG_CANCEL_CAST is not sended maybe we can find way to use some attribute from that spell to stop client sending that message...

Siegels commented 12 years ago

I looked at Spell.dbc and Lava Burst/Lighning Bolt and others have same attributes as Scorch. (I used SpellWork for 4.0.6a) The only difference is the "Speed", which is I think the projectile speed, Scorch doesn't have this data in Spell.dbc

Btw, the only attribute they have is: Attributes: 0x00010000 (SPELL_ATTR0_NOT_SHAPESHIFT) I don't understand the meaning of this attribute for these spells.

OneB1t commented 12 years ago

we need to adjust attribute for that Spiritwalker's Grace and firestarter

Truffy commented 12 years ago

There is an attribute to make the aura visible by the client yet i couldnt find it on skyfire.

If the aura is visible(e.g spiritwalker's grace) the client will handle it by himself. Custom spell_dbc for Firestarter(not scorch) will fix the issue.

OneB1t commented 12 years ago

is there some DBC spellfix tutorial? im totally lost in spell_dbc and all attributes and effects...

Siegels commented 12 years ago

Are you talking about SPELL_ATTR0_HIDDEN_CLIENTSIDE (0x00000080) ? This is one of Firestarter's spell attributes : 0x000001D0 = SPELL_ATTR0_ABILITY, SPELL_ATTR0_PASSIVE, SPELL_ATTR0_HIDDEN_CLIENTSIDE, SPELL_ATTR0_HIDE_IN_COMBAT_LOG

OneB1t commented 12 years ago

maybe this can help to hackfix it :D :D lets try to modify it (spellmgr.cpp i suppose?) PS: where u find that better attributes? i have only this in qsw

Attributes: 0x000001D0 (SPELL_ATTR_UNK4, SPELL_ATTR_PASSIVE, SPELL_ATTR_UNK7, SPELL_ATTR_UNK8)

Siegels commented 12 years ago

Yes, i'm trying like this: Line 2979, i'm adding: case 86914: spellInfo->Attributes = 0x00000150; // 0x000001D0 - 0x00000080 (SPELL_ATTR0_HIDDEN_CLIENTSIDE) break;

building this and trying, will take a while. After that, if it doesn't work, i will try without SPELL_ATTR0_HIDE_IN_COMBAT_LOG, and if it still doesn't work, i have not other idea.

EDIT: SpellWork give me this too, but there are some Attr defined in src/game/Miscellaneous/SharedDefines.h. I replaced by the names i found in this file

OneB1t commented 12 years ago

not working for me aura is still hidden :-( maybe try to disable SPELL_ATTR0_PASSIVE?

Siegels commented 12 years ago

Not working I don't know if modifying attributes in spellmgr really works client-side.

OneB1t commented 12 years ago

but there must be some way how blizzard handles this spell to say "dont send stopcast to server"

OneB1t commented 12 years ago

just seen one big server got this talent fixed... so there must be some way :D

OneB1t commented 12 years ago

http://translate.google.com/translate?hl=cs&sl=auto&tl=en&u=http%3A%2F%2Fru-mangos.ru%2Farchive%2Findex.php%2Ft-4714.html

someone can translate? (translate.google.com not good :-()