diff options
author | QAston <none@none> | 2010-07-20 01:42:14 +0200 |
---|---|---|
committer | QAston <none@none> | 2010-07-20 01:42:14 +0200 |
commit | f906976837502fa5aa81b982b901d1509f5aa0c4 (patch) | |
tree | 62f7798f963a556ea041628f8f9dbc878dd3b522 /src | |
parent | b5f7ac86eac6c300807ea2d5df4f6d2fae5bc4c8 (diff) |
*Remove assertion from packet handler. Assertions should not be put in such places because we can't trust clients nor network.
*Do not allow to charm mounted units.
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Handlers/SpellHandler.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellEffects.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 5 |
5 files changed, 10 insertions, 8 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index b659f876112..1fb662c43df 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -15204,6 +15204,10 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type) if (!charmer) return false; + // unmount players when charmed + if (GetTypeId() == TYPEID_PLAYER) + Unmount(); + assert(type != CHARM_TYPE_POSSESS || charmer->GetTypeId() == TYPEID_PLAYER); assert((type == CHARM_TYPE_VEHICLE) == IsVehicle()); diff --git a/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp b/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp index b8a4a127824..a526c61a5e7 100644 --- a/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp @@ -538,11 +538,7 @@ void WorldSession::HandleSpellClick(WorldPacket & recv_data) // TODO: Unit::SetCharmedBy: 28782 is not in world but 0 is trying to charm it! -> crash if (!unit->IsInWorld()) - { - sLog.outCrash("Spell click target %u is not in world!", unit->GetEntry()); - assert(false); return; - } SpellClickInfoMapBounds clickPair = objmgr.GetSpellClickInfoMapBounds(unit->GetEntry()); for (SpellClickInfoMap::const_iterator itr = clickPair.first; itr != clickPair.second; ++itr) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index fc87a934e97..7a70155a23e 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -3932,9 +3932,6 @@ void AuraEffect::HandleModPossessPet(AuraApplication const * aurApp, uint8 mode, if (caster->ToPlayer()->GetPet() != target) return; - if (target->IsVehicle()) //Avoid crash when mind controling vehicles due to an assert in Unit::SetCharmedBy - return; - target->SetCharmedBy(caster, CHARM_TYPE_POSSESS); } else diff --git a/src/server/game/Spells/Auras/SpellEffects.cpp b/src/server/game/Spells/Auras/SpellEffects.cpp index 3f02035dadc..0b2191d5e48 100644 --- a/src/server/game/Spells/Auras/SpellEffects.cpp +++ b/src/server/game/Spells/Auras/SpellEffects.cpp @@ -154,7 +154,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]= &Spell::EffectActivateObject, // 86 SPELL_EFFECT_ACTIVATE_OBJECT &Spell::EffectWMODamage, // 87 SPELL_EFFECT_WMO_DAMAGE &Spell::EffectWMORepair, // 88 SPELL_EFFECT_WMO_REPAIR - &Spell::EffectUnused, // 89 SPELL_EFFECT_WMO_CHANGE + &Spell::EffectUnused, // 89 SPELL_EFFECT_WMO_CHANGE // 0 intact // 1 damaged // 2 destroyed // 3 rebuilding &Spell::EffectKillCreditPersonal, // 90 SPELL_EFFECT_KILL_CREDIT Kill credit but only for single person &Spell::EffectUnused, // 91 SPELL_EFFECT_THREAT_ALL one spell: zzOLDBrainwash &Spell::EffectEnchantHeldItem, // 92 SPELL_EFFECT_ENCHANT_HELD_ITEM diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 0ab7ec07407..510be691d18 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -5391,6 +5391,9 @@ SpellCastResult Spell::CheckCast(bool strict) if (target->GetTypeId() == TYPEID_UNIT && target->ToCreature()->IsVehicle()) return SPELL_FAILED_BAD_IMPLICIT_TARGETS; + if (target->IsMounted()) + return SPELL_FAILED_CANT_BE_CHARMED; + if (target->GetCharmerGUID()) return SPELL_FAILED_CHARMED; @@ -6442,6 +6445,8 @@ bool Spell::CheckTarget(Unit* target, uint32 eff) case SPELL_AURA_AOE_CHARM: if (target->GetTypeId() == TYPEID_UNIT && target->IsVehicle()) return false; + if (target->IsMounted()) + return false; if (target->GetCharmerGUID()) return false; if (int32 damage = CalculateDamage(eff, target)) |