mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 04:37:00 +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_STEALTH = 48,
|
||||
SPELL_EFFECT_DETECT = 49,
|
||||
// SPELL_EFFECT_SUMMON_OBJECT = 50,
|
||||
SPELL_EFFECT_TRANS_DOOR = 50,
|
||||
SPELL_EFFECT_FORCE_CRITICAL_HIT = 51,
|
||||
SPELL_EFFECT_GUARANTEE_HIT = 52,
|
||||
|
|
@ -572,7 +571,7 @@ enum SpellEffects
|
|||
SPELL_EFFECT_POWER_BURN = 62,
|
||||
SPELL_EFFECT_THREAT = 63,
|
||||
SPELL_EFFECT_TRIGGER_SPELL = 64,
|
||||
SPELL_EFFECT_HEALTH_FUNNEL = 65,
|
||||
SPELL_EFFECT_APPLY_AREA_AURA_RAID = 65,
|
||||
SPELL_EFFECT_POWER_FUNNEL = 66,
|
||||
SPELL_EFFECT_HEAL_MAX_HEALTH = 67,
|
||||
SPELL_EFFECT_INTERRUPT_CAST = 68,
|
||||
|
|
|
|||
|
|
@ -336,6 +336,7 @@ enum AuraType
|
|||
enum AreaAuraType
|
||||
{
|
||||
AREA_AURA_PARTY,
|
||||
AREA_AURA_RAID,
|
||||
AREA_AURA_FRIEND,
|
||||
AREA_AURA_ENEMY,
|
||||
AREA_AURA_PET,
|
||||
|
|
|
|||
|
|
@ -452,6 +452,11 @@ Unit *caster, Item* castItem) : Aura(spellproto, eff, currentBasePoints, target,
|
|||
if(target->GetTypeId() == TYPEID_UNIT && ((Creature*)target)->isTotem())
|
||||
m_modifier.m_auraname = SPELL_AURA_NONE;
|
||||
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:
|
||||
m_areaAuraType = AREA_AURA_FRIEND;
|
||||
break;
|
||||
|
|
@ -682,6 +687,41 @@ void AreaAura::Update(uint32 diff)
|
|||
}
|
||||
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:
|
||||
{
|
||||
CellPair p(MaNGOS::ComputeCellPair(caster->GetPositionX(), caster->GetPositionY()));
|
||||
|
|
@ -781,6 +821,24 @@ void AreaAura::Update(uint32 diff)
|
|||
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 )
|
||||
{
|
||||
if( tmp_target->GetGUID() != caster->GetCharmerOrOwnerGUID() )
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]=
|
|||
&Spell::EffectPowerBurn, // 62 SPELL_EFFECT_POWER_BURN
|
||||
&Spell::EffectThreat, // 63 SPELL_EFFECT_THREAT
|
||||
&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::EffectHealMaxHealth, // 67 SPELL_EFFECT_HEAL_MAX_HEALTH
|
||||
&Spell::EffectInterruptCast, // 68 SPELL_EFFECT_INTERRUPT_CAST
|
||||
|
|
|
|||
|
|
@ -182,10 +182,10 @@ SpellSpecific GetSpellSpecific(uint32 spellId)
|
|||
if ((spellInfo->SpellFamilyFlags & 0x00000820180400LL) && (spellInfo->AttributesEx3 & 0x200))
|
||||
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
|
||||
if (spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AREA_AURA_PARTY)
|
||||
if (spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AREA_AURA_RAID)
|
||||
return SPELL_AURA;
|
||||
}
|
||||
break;
|
||||
|
|
@ -1007,7 +1007,7 @@ bool SpellMgr::canStackSpellRanks(SpellEntry const *spellInfo)
|
|||
{
|
||||
// Paladin aura Spell
|
||||
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;
|
||||
// Druid form Spell
|
||||
if(spellInfo->SpellFamilyName == SPELLFAMILY_DRUID
|
||||
|
|
@ -1424,7 +1424,8 @@ SpellEntry const* SpellMgr::SelectAuraRankForPlayerLevel(SpellEntry const* spell
|
|||
{
|
||||
if( IsPositiveEffect(spellInfo->Id, i) && (
|
||||
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;
|
||||
|
|
|
|||
|
|
@ -377,6 +377,7 @@ inline bool IsAreaOfEffectSpell(SpellEntry const *spellInfo)
|
|||
inline bool IsAreaAuraEffect(uint32 effect)
|
||||
{
|
||||
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_ENEMY ||
|
||||
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
|
||||
// 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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue