mirror of
https://github.com/mangosfour/server.git
synced 2025-12-21 19:37:02 +00:00
Merge branch 'master' into 310
Conflicts: src/game/Unit.cpp
This commit is contained in:
commit
17d86309fa
22 changed files with 373 additions and 190 deletions
|
|
@ -365,6 +365,8 @@ m_updated(false), m_isRemovedOnShapeLost(true), m_in_use(false)
|
|||
m_isPassive = IsPassiveSpell(GetId());
|
||||
m_positive = IsPositiveEffect(GetId(), m_effIndex);
|
||||
|
||||
m_isSingleTargetAura = IsSingleTargetSpell(m_spellProto);
|
||||
|
||||
m_applyTime = time(NULL);
|
||||
|
||||
int32 damage;
|
||||
|
|
@ -3489,52 +3491,56 @@ void Aura::HandleAuraModStun(bool apply, bool Real)
|
|||
|
||||
void Aura::HandleModStealth(bool apply, bool Real)
|
||||
{
|
||||
if(apply)
|
||||
Unit* pTarget = m_target;
|
||||
|
||||
if (apply)
|
||||
{
|
||||
// drop flag at stealth in bg
|
||||
m_target->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_IMMUNE_OR_LOST_SELECTION);
|
||||
pTarget->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_IMMUNE_OR_LOST_SELECTION);
|
||||
|
||||
// only at real aura add
|
||||
if(Real)
|
||||
if (Real)
|
||||
{
|
||||
m_target->SetStandFlags(UNIT_STAND_FLAGS_CREEP);
|
||||
if(m_target->GetTypeId()==TYPEID_PLAYER)
|
||||
m_target->SetFlag(PLAYER_FIELD_BYTES2, 0x2000);
|
||||
pTarget->SetStandFlags(UNIT_STAND_FLAGS_CREEP);
|
||||
|
||||
if (pTarget->GetTypeId()==TYPEID_PLAYER)
|
||||
pTarget->SetFlag(PLAYER_FIELD_BYTES2, 0x2000);
|
||||
|
||||
// apply only if not in GM invisibility (and overwrite invisibility state)
|
||||
if(m_target->GetVisibility()!=VISIBILITY_OFF)
|
||||
if (pTarget->GetVisibility()!=VISIBILITY_OFF)
|
||||
{
|
||||
m_target->SetVisibility(VISIBILITY_GROUP_NO_DETECT);
|
||||
m_target->SetVisibility(VISIBILITY_GROUP_STEALTH);
|
||||
pTarget->SetVisibility(VISIBILITY_GROUP_NO_DETECT);
|
||||
pTarget->SetVisibility(VISIBILITY_GROUP_STEALTH);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// only at real aura remove
|
||||
if(Real)
|
||||
if (Real)
|
||||
{
|
||||
// if last SPELL_AURA_MOD_STEALTH and no GM invisibility
|
||||
if(!m_target->HasAuraType(SPELL_AURA_MOD_STEALTH) && m_target->GetVisibility()!=VISIBILITY_OFF)
|
||||
if (!pTarget->HasAuraType(SPELL_AURA_MOD_STEALTH) && pTarget->GetVisibility()!=VISIBILITY_OFF)
|
||||
{
|
||||
m_target->RemoveStandFlags(UNIT_STAND_FLAGS_CREEP);
|
||||
if(m_target->GetTypeId()==TYPEID_PLAYER)
|
||||
m_target->RemoveFlag(PLAYER_FIELD_BYTES2, 0x2000);
|
||||
pTarget->RemoveStandFlags(UNIT_STAND_FLAGS_CREEP);
|
||||
|
||||
if (pTarget->GetTypeId()==TYPEID_PLAYER)
|
||||
pTarget->RemoveFlag(PLAYER_FIELD_BYTES2, 0x2000);
|
||||
|
||||
// restore invisibility if any
|
||||
if(m_target->HasAuraType(SPELL_AURA_MOD_INVISIBILITY))
|
||||
if (pTarget->HasAuraType(SPELL_AURA_MOD_INVISIBILITY))
|
||||
{
|
||||
m_target->SetVisibility(VISIBILITY_GROUP_NO_DETECT);
|
||||
m_target->SetVisibility(VISIBILITY_GROUP_INVISIBILITY);
|
||||
pTarget->SetVisibility(VISIBILITY_GROUP_NO_DETECT);
|
||||
pTarget->SetVisibility(VISIBILITY_GROUP_INVISIBILITY);
|
||||
}
|
||||
else
|
||||
m_target->SetVisibility(VISIBILITY_ON);
|
||||
pTarget->SetVisibility(VISIBILITY_ON);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Master of Subtlety
|
||||
Unit::AuraList const& mDummyAuras = m_target->GetAurasByType(SPELL_AURA_DUMMY);
|
||||
Unit::AuraList const& mDummyAuras = pTarget->GetAurasByType(SPELL_AURA_DUMMY);
|
||||
for(Unit::AuraList::const_iterator i = mDummyAuras.begin();i != mDummyAuras.end(); ++i)
|
||||
{
|
||||
if ((*i)->GetSpellProto()->SpellIconID == 2114)
|
||||
|
|
@ -3542,10 +3548,10 @@ void Aura::HandleModStealth(bool apply, bool Real)
|
|||
if (apply)
|
||||
{
|
||||
int32 bp = (*i)->GetModifier()->m_amount;
|
||||
m_target->CastCustomSpell(m_target,31665,&bp,NULL,NULL,true);
|
||||
pTarget->CastCustomSpell(pTarget,31665,&bp,NULL,NULL,true);
|
||||
}
|
||||
else
|
||||
m_target->CastSpell(m_target,31666,true);
|
||||
pTarget->CastSpell(pTarget,31666,true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -6747,3 +6753,21 @@ void Aura::HandlePhase(bool apply, bool Real)
|
|||
m_target->SetVisibility(m_target->GetVisibility());
|
||||
}
|
||||
|
||||
void Aura::UnregisterSingleCastAura()
|
||||
{
|
||||
if (IsSingleTarget())
|
||||
{
|
||||
Unit* caster = NULL;
|
||||
caster = GetCaster();
|
||||
if(caster)
|
||||
{
|
||||
caster->GetSingleCastAuras().remove(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
sLog.outError("Couldn't find the caster of the single target aura, may crash later!");
|
||||
assert(false);
|
||||
}
|
||||
m_isSingleTargetAura = false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue