mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
Raid wide auras, untested
This commit is contained in:
parent
d7f8a60835
commit
7c73afbd22
7 changed files with 69 additions and 9 deletions
|
|
@ -556,7 +556,6 @@ enum SpellEffects
|
||||||
SPELL_EFFECT_TRADE_SKILL = 47,
|
SPELL_EFFECT_TRADE_SKILL = 47,
|
||||||
SPELL_EFFECT_STEALTH = 48,
|
SPELL_EFFECT_STEALTH = 48,
|
||||||
SPELL_EFFECT_DETECT = 49,
|
SPELL_EFFECT_DETECT = 49,
|
||||||
// SPELL_EFFECT_SUMMON_OBJECT = 50,
|
|
||||||
SPELL_EFFECT_TRANS_DOOR = 50,
|
SPELL_EFFECT_TRANS_DOOR = 50,
|
||||||
SPELL_EFFECT_FORCE_CRITICAL_HIT = 51,
|
SPELL_EFFECT_FORCE_CRITICAL_HIT = 51,
|
||||||
SPELL_EFFECT_GUARANTEE_HIT = 52,
|
SPELL_EFFECT_GUARANTEE_HIT = 52,
|
||||||
|
|
@ -572,7 +571,7 @@ enum SpellEffects
|
||||||
SPELL_EFFECT_POWER_BURN = 62,
|
SPELL_EFFECT_POWER_BURN = 62,
|
||||||
SPELL_EFFECT_THREAT = 63,
|
SPELL_EFFECT_THREAT = 63,
|
||||||
SPELL_EFFECT_TRIGGER_SPELL = 64,
|
SPELL_EFFECT_TRIGGER_SPELL = 64,
|
||||||
SPELL_EFFECT_HEALTH_FUNNEL = 65,
|
SPELL_EFFECT_APPLY_AREA_AURA_RAID = 65,
|
||||||
SPELL_EFFECT_POWER_FUNNEL = 66,
|
SPELL_EFFECT_POWER_FUNNEL = 66,
|
||||||
SPELL_EFFECT_HEAL_MAX_HEALTH = 67,
|
SPELL_EFFECT_HEAL_MAX_HEALTH = 67,
|
||||||
SPELL_EFFECT_INTERRUPT_CAST = 68,
|
SPELL_EFFECT_INTERRUPT_CAST = 68,
|
||||||
|
|
|
||||||
|
|
@ -336,6 +336,7 @@ enum AuraType
|
||||||
enum AreaAuraType
|
enum AreaAuraType
|
||||||
{
|
{
|
||||||
AREA_AURA_PARTY,
|
AREA_AURA_PARTY,
|
||||||
|
AREA_AURA_RAID,
|
||||||
AREA_AURA_FRIEND,
|
AREA_AURA_FRIEND,
|
||||||
AREA_AURA_ENEMY,
|
AREA_AURA_ENEMY,
|
||||||
AREA_AURA_PET,
|
AREA_AURA_PET,
|
||||||
|
|
|
||||||
|
|
@ -452,6 +452,11 @@ Unit *caster, Item* castItem) : Aura(spellproto, eff, currentBasePoints, target,
|
||||||
if(target->GetTypeId() == TYPEID_UNIT && ((Creature*)target)->isTotem())
|
if(target->GetTypeId() == TYPEID_UNIT && ((Creature*)target)->isTotem())
|
||||||
m_modifier.m_auraname = SPELL_AURA_NONE;
|
m_modifier.m_auraname = SPELL_AURA_NONE;
|
||||||
break;
|
break;
|
||||||
|
case SPELL_EFFECT_APPLY_AREA_AURA_RAID:
|
||||||
|
m_areaAuraType = AREA_AURA_RAID;
|
||||||
|
if(target->GetTypeId() == TYPEID_UNIT && ((Creature*)target)->isTotem())
|
||||||
|
m_modifier.m_auraname = SPELL_AURA_NONE;
|
||||||
|
break;
|
||||||
case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND:
|
case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND:
|
||||||
m_areaAuraType = AREA_AURA_FRIEND;
|
m_areaAuraType = AREA_AURA_FRIEND;
|
||||||
break;
|
break;
|
||||||
|
|
@ -682,6 +687,41 @@ void AreaAura::Update(uint32 diff)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case AREA_AURA_RAID:
|
||||||
|
{
|
||||||
|
Group *pGroup = NULL;
|
||||||
|
|
||||||
|
if (owner->GetTypeId() == TYPEID_PLAYER)
|
||||||
|
pGroup = ((Player*)owner)->GetGroup();
|
||||||
|
|
||||||
|
if( pGroup)
|
||||||
|
{
|
||||||
|
uint8 subgroup = ((Player*)owner)->GetSubGroup();
|
||||||
|
for(GroupReference *itr = pGroup->GetFirstMember(); itr != NULL; itr = itr->next())
|
||||||
|
{
|
||||||
|
Player* Target = itr->getSource();
|
||||||
|
if(Target && Target->isAlive() && caster->IsFriendlyTo(Target))
|
||||||
|
{
|
||||||
|
if(caster->IsWithinDistInMap(Target, m_radius))
|
||||||
|
targets.push_back(Target);
|
||||||
|
Pet *pet = Target->GetPet();
|
||||||
|
if(pet && pet->isAlive() && caster->IsWithinDistInMap(pet, m_radius))
|
||||||
|
targets.push_back(pet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// add owner
|
||||||
|
if( owner != caster && caster->IsWithinDistInMap(owner, m_radius) )
|
||||||
|
targets.push_back(owner);
|
||||||
|
// add caster's pet
|
||||||
|
Unit* pet = caster->GetPet();
|
||||||
|
if( pet && caster->IsWithinDistInMap(pet, m_radius))
|
||||||
|
targets.push_back(pet);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case AREA_AURA_FRIEND:
|
case AREA_AURA_FRIEND:
|
||||||
{
|
{
|
||||||
CellPair p(MaNGOS::ComputeCellPair(caster->GetPositionX(), caster->GetPositionY()));
|
CellPair p(MaNGOS::ComputeCellPair(caster->GetPositionX(), caster->GetPositionY()));
|
||||||
|
|
@ -781,6 +821,24 @@ void AreaAura::Update(uint32 diff)
|
||||||
tmp_target->RemoveAura(tmp_spellId, tmp_effIndex);
|
tmp_target->RemoveAura(tmp_spellId, tmp_effIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if( m_areaAuraType == AREA_AURA_RAID) // TODO: fix me!
|
||||||
|
{
|
||||||
|
// not check group if target == owner or target == pet
|
||||||
|
if (caster->GetCharmerOrOwnerGUID() != tmp_target->GetGUID() && caster->GetGUID() != tmp_target->GetCharmerOrOwnerGUID())
|
||||||
|
{
|
||||||
|
Player* check = caster->GetCharmerOrOwnerPlayerOrPlayerItself();
|
||||||
|
|
||||||
|
Group *pGroup = check ? check->GetGroup() : NULL;
|
||||||
|
if( pGroup )
|
||||||
|
{
|
||||||
|
Player* checkTarget = tmp_target->GetCharmerOrOwnerPlayerOrPlayerItself();
|
||||||
|
if(!checkTarget)
|
||||||
|
tmp_target->RemoveAura(tmp_spellId, tmp_effIndex);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
tmp_target->RemoveAura(tmp_spellId, tmp_effIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if( m_areaAuraType == AREA_AURA_PET || m_areaAuraType == AREA_AURA_OWNER )
|
else if( m_areaAuraType == AREA_AURA_PET || m_areaAuraType == AREA_AURA_OWNER )
|
||||||
{
|
{
|
||||||
if( tmp_target->GetGUID() != caster->GetCharmerOrOwnerGUID() )
|
if( tmp_target->GetGUID() != caster->GetCharmerOrOwnerGUID() )
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]=
|
||||||
&Spell::EffectPowerBurn, // 62 SPELL_EFFECT_POWER_BURN
|
&Spell::EffectPowerBurn, // 62 SPELL_EFFECT_POWER_BURN
|
||||||
&Spell::EffectThreat, // 63 SPELL_EFFECT_THREAT
|
&Spell::EffectThreat, // 63 SPELL_EFFECT_THREAT
|
||||||
&Spell::EffectTriggerSpell, // 64 SPELL_EFFECT_TRIGGER_SPELL
|
&Spell::EffectTriggerSpell, // 64 SPELL_EFFECT_TRIGGER_SPELL
|
||||||
&Spell::EffectUnused, // 65 SPELL_EFFECT_HEALTH_FUNNEL unused
|
&Spell::EffectApplyAreaAura, // 65 SPELL_EFFECT_APPLY_AREA_AURA_RAID
|
||||||
&Spell::EffectUnused, // 66 SPELL_EFFECT_POWER_FUNNEL unused
|
&Spell::EffectUnused, // 66 SPELL_EFFECT_POWER_FUNNEL unused
|
||||||
&Spell::EffectHealMaxHealth, // 67 SPELL_EFFECT_HEAL_MAX_HEALTH
|
&Spell::EffectHealMaxHealth, // 67 SPELL_EFFECT_HEAL_MAX_HEALTH
|
||||||
&Spell::EffectInterruptCast, // 68 SPELL_EFFECT_INTERRUPT_CAST
|
&Spell::EffectInterruptCast, // 68 SPELL_EFFECT_INTERRUPT_CAST
|
||||||
|
|
|
||||||
|
|
@ -182,10 +182,10 @@ SpellSpecific GetSpellSpecific(uint32 spellId)
|
||||||
if ((spellInfo->SpellFamilyFlags & 0x00000820180400LL) && (spellInfo->AttributesEx3 & 0x200))
|
if ((spellInfo->SpellFamilyFlags & 0x00000820180400LL) && (spellInfo->AttributesEx3 & 0x200))
|
||||||
return SPELL_JUDGEMENT;
|
return SPELL_JUDGEMENT;
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 3; i++) // TODO: fix it for WotLK!!!
|
||||||
{
|
{
|
||||||
// only paladin auras have this
|
// only paladin auras have this
|
||||||
if (spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AREA_AURA_PARTY)
|
if (spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AREA_AURA_RAID)
|
||||||
return SPELL_AURA;
|
return SPELL_AURA;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -1007,7 +1007,7 @@ bool SpellMgr::canStackSpellRanks(SpellEntry const *spellInfo)
|
||||||
{
|
{
|
||||||
// Paladin aura Spell
|
// Paladin aura Spell
|
||||||
if(spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN
|
if(spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN
|
||||||
&& spellInfo->Effect[i]==SPELL_EFFECT_APPLY_AREA_AURA_PARTY)
|
&& spellInfo->Effect[i]==SPELL_EFFECT_APPLY_AREA_AURA_RAID)
|
||||||
return false;
|
return false;
|
||||||
// Druid form Spell
|
// Druid form Spell
|
||||||
if(spellInfo->SpellFamilyName == SPELLFAMILY_DRUID
|
if(spellInfo->SpellFamilyName == SPELLFAMILY_DRUID
|
||||||
|
|
@ -1424,7 +1424,8 @@ SpellEntry const* SpellMgr::SelectAuraRankForPlayerLevel(SpellEntry const* spell
|
||||||
{
|
{
|
||||||
if( IsPositiveEffect(spellInfo->Id, i) && (
|
if( IsPositiveEffect(spellInfo->Id, i) && (
|
||||||
spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AURA ||
|
spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AURA ||
|
||||||
spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AREA_AURA_PARTY
|
spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AREA_AURA_PARTY ||
|
||||||
|
spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AREA_AURA_RAID
|
||||||
) )
|
) )
|
||||||
{
|
{
|
||||||
needRankSelection = true;
|
needRankSelection = true;
|
||||||
|
|
|
||||||
|
|
@ -377,6 +377,7 @@ inline bool IsAreaOfEffectSpell(SpellEntry const *spellInfo)
|
||||||
inline bool IsAreaAuraEffect(uint32 effect)
|
inline bool IsAreaAuraEffect(uint32 effect)
|
||||||
{
|
{
|
||||||
if( effect == SPELL_EFFECT_APPLY_AREA_AURA_PARTY ||
|
if( effect == SPELL_EFFECT_APPLY_AREA_AURA_PARTY ||
|
||||||
|
effect == SPELL_EFFECT_APPLY_AREA_AURA_RAID ||
|
||||||
effect == SPELL_EFFECT_APPLY_AREA_AURA_FRIEND ||
|
effect == SPELL_EFFECT_APPLY_AREA_AURA_FRIEND ||
|
||||||
effect == SPELL_EFFECT_APPLY_AREA_AURA_ENEMY ||
|
effect == SPELL_EFFECT_APPLY_AREA_AURA_ENEMY ||
|
||||||
effect == SPELL_EFFECT_APPLY_AREA_AURA_PET ||
|
effect == SPELL_EFFECT_APPLY_AREA_AURA_PET ||
|
||||||
|
|
|
||||||
|
|
@ -66,8 +66,8 @@ enum LoginResult
|
||||||
|
|
||||||
// we need to stick to 1 version or half of the stuff will work for someone
|
// we need to stick to 1 version or half of the stuff will work for someone
|
||||||
// others will not and opposite
|
// others will not and opposite
|
||||||
// will only support WoW and WoW:TBC 3.0.3 client build 9149, 9155, 9183...
|
// will only support WoW and WoW:TBC 3.0.3 client build 9155, 9174, 9183...
|
||||||
|
|
||||||
#define EXPECTED_MANGOS_CLIENT_BUILD {9149, 9155, 9183, 0}
|
#define EXPECTED_MANGOS_CLIENT_BUILD {9155, 9174, 9183, 0}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue