diff options
author | gvcoman <none@none> | 2008-11-05 20:51:05 -0600 |
---|---|---|
committer | gvcoman <none@none> | 2008-11-05 20:51:05 -0600 |
commit | 44bdb135f4ed5bb834795cfb928ccbb0504cf834 (patch) | |
tree | 7995df4957fb2e0e6cde895fbe3e85b7efde5fa7 /src/game/SpellHandler.cpp | |
parent | 8d331f2b10cff29ee0571f7056ad353df6a3eabd (diff) |
[svn] Implemented player on player and player on creature possession:
* Implemented packet and vision forwarding through possessed units
* Added new OnPossess script call alerting scripts on when possession is applied/removed
* Moved fall damage and fall under map calculations into the Player class
* Added new PossessedAI that is applied only while possession on creature is active
* Implemented summon possessed spell effect
* Fixed Eyes of the Beast
--HG--
branch : trunk
Diffstat (limited to 'src/game/SpellHandler.cpp')
-rw-r--r-- | src/game/SpellHandler.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/game/SpellHandler.cpp b/src/game/SpellHandler.cpp index ba1eb20c631..051e1adbc30 100644 --- a/src/game/SpellHandler.cpp +++ b/src/game/SpellHandler.cpp @@ -302,6 +302,10 @@ void WorldSession::HandleCastSpellOpcode(WorldPacket& recvPacket) return; } + // can't use our own spells when we're in possession of another unit, + if(_player->isPossessing()) + return; + // client provided targets SpellCastTargets targets; if(!targets.read(&recvPacket,_player)) @@ -348,6 +352,21 @@ void WorldSession::HandleCancelAuraOpcode( WorldPacket& recvPacket) if (!spellInfo) return; + // Remove possess aura from the possessed as well + if(_player->isPossessing()) + { + for (int i = 0; i < 3; ++i) + { + if (spellInfo->EffectApplyAuraName[i] == SPELL_AURA_MOD_POSSESS || + spellInfo->EffectApplyAuraName[i] == SPELL_AURA_MOD_POSSESS_PET) + { + _player->RemoveAurasDueToSpellByCancel(spellId); + _player->GetCharm()->RemoveAurasDueToSpellByCancel(spellId); + return; + } + } + } + // not allow remove non positive spells and spells with attr SPELL_ATTR_CANT_CANCEL if(!IsPositiveSpell(spellId) || (spellInfo->Attributes & SPELL_ATTR_CANT_CANCEL)) return; |