mirror of
https://github.com/mangosfour/server.git
synced 2025-12-15 19:37:02 +00:00
[10957] Implement auras SPELL_AURA_MOD_DISARM_OFFHAND (254) and SPELL_AURA_MOD_DISARM_RANGED (278).
Thanks to Qsa prepare for mangos. Note: single unsure case: is block chance must be show or set to 0 in shield disarm time. Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
parent
883e88fad5
commit
4fe41fb335
9 changed files with 76 additions and 30 deletions
|
|
@ -304,7 +304,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS]=
|
|||
&Aura::HandleNULL, //251 SPELL_AURA_MOD_ENEMY_DODGE
|
||||
&Aura::HandleModCombatSpeedPct, //252 SPELL_AURA_SLOW_ALL
|
||||
&Aura::HandleNoImmediateEffect, //253 SPELL_AURA_MOD_BLOCK_CRIT_CHANCE implemented in Unit::CalculateMeleeDamage
|
||||
&Aura::HandleNULL, //254 SPELL_AURA_MOD_DISARM_SHIELD disarm Shield
|
||||
&Aura::HandleAuraModDisarm, //254 SPELL_AURA_MOD_DISARM_OFFHAND also disarm shield
|
||||
&Aura::HandleNoImmediateEffect, //255 SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT implemented in Unit::SpellDamageBonusTaken
|
||||
&Aura::HandleNoReagentUseAura, //256 SPELL_AURA_NO_REAGENT_USE Use SpellClassMask for spell select
|
||||
&Aura::HandleNULL, //257 SPELL_AURA_MOD_TARGET_RESIST_BY_SPELL_CLASS Use SpellClassMask for spell select
|
||||
|
|
@ -328,7 +328,7 @@ pAuraHandler AuraHandler[TOTAL_AURAS]=
|
|||
&Aura::HandleNoImmediateEffect, //275 SPELL_AURA_MOD_IGNORE_SHAPESHIFT Use SpellClassMask for spell select
|
||||
&Aura::HandleNULL, //276 mod damage % mechanic?
|
||||
&Aura::HandleNoImmediateEffect, //277 SPELL_AURA_MOD_MAX_AFFECTED_TARGETS Use SpellClassMask for spell select
|
||||
&Aura::HandleNULL, //278 SPELL_AURA_MOD_DISARM_RANGED disarm ranged weapon
|
||||
&Aura::HandleAuraModDisarm, //278 SPELL_AURA_MOD_DISARM_RANGED disarm ranged weapon
|
||||
&Aura::HandleNULL, //279 visual effects? 58836 and 57507
|
||||
&Aura::HandleModTargetArmorPct, //280 SPELL_AURA_MOD_TARGET_ARMOR_PCT
|
||||
&Aura::HandleNoImmediateEffect, //281 SPELL_AURA_MOD_HONOR_GAIN implemented in Player::RewardHonor
|
||||
|
|
@ -3939,16 +3939,41 @@ void Aura::HandleAuraModDisarm(bool apply, bool Real)
|
|||
|
||||
Unit *target = GetTarget();
|
||||
|
||||
if(!apply && target->HasAuraType(SPELL_AURA_MOD_DISARM))
|
||||
if(!apply && target->HasAuraType(GetModifier()->m_auraname))
|
||||
return;
|
||||
|
||||
// not sure for it's correctness
|
||||
if(apply)
|
||||
target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISARMED);
|
||||
else
|
||||
target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISARMED);
|
||||
uint32 flags;
|
||||
uint32 field;
|
||||
WeaponAttackType attack_type;
|
||||
|
||||
switch (GetModifier()->m_auraname)
|
||||
{
|
||||
default:
|
||||
case SPELL_AURA_MOD_DISARM:
|
||||
{
|
||||
field = UNIT_FIELD_FLAGS;
|
||||
flags = UNIT_FLAG_DISARMED;
|
||||
attack_type = BASE_ATTACK;
|
||||
break;
|
||||
}
|
||||
case SPELL_AURA_MOD_DISARM_OFFHAND:
|
||||
{
|
||||
field = UNIT_FIELD_FLAGS_2;
|
||||
flags = UNIT_FLAG2_DISARM_OFFHAND;
|
||||
attack_type = OFF_ATTACK;
|
||||
break;
|
||||
}
|
||||
case SPELL_AURA_MOD_DISARM_RANGED:
|
||||
{
|
||||
field = UNIT_FIELD_FLAGS_2;
|
||||
flags = UNIT_FLAG2_DISARM_RANGED;
|
||||
attack_type = RANGED_ATTACK;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
target->ApplyModFlag(field, flags, apply);
|
||||
|
||||
// only at real add/remove aura
|
||||
if (target->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
|
|
@ -3957,11 +3982,11 @@ void Aura::HandleAuraModDisarm(bool apply, bool Real)
|
|||
return;
|
||||
|
||||
if (apply)
|
||||
target->SetAttackTime(BASE_ATTACK,BASE_ATTACK_TIME);
|
||||
target->SetAttackTime(attack_type, BASE_ATTACK_TIME);
|
||||
else
|
||||
((Player *)target)->SetRegularAttackTime();
|
||||
|
||||
target->UpdateDamagePhysical(BASE_ATTACK);
|
||||
target->UpdateDamagePhysical(attack_type);
|
||||
}
|
||||
|
||||
void Aura::HandleAuraModStun(bool apply, bool Real)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue