mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 04:37:00 +00:00
[8451] Implement talent 47236 and ranks.
Added changes base at merge of patches suggested by pasdVn and Astellar.
This commit is contained in:
parent
9c5f85d309
commit
69fbe1e82f
7 changed files with 58 additions and 23 deletions
|
|
@ -6288,10 +6288,10 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
|
|||
// Set trigger spell id, target, custom basepoints
|
||||
uint32 trigger_spell_id = auraSpellInfo->EffectTriggerSpell[triggeredByAura->GetEffIndex()];
|
||||
Unit* target = NULL;
|
||||
int32 basepoints0 = 0;
|
||||
int32 basepoints[3] = {0, 0, 0};
|
||||
|
||||
if(triggeredByAura->GetModifier()->m_auraname == SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE)
|
||||
basepoints0 = triggerAmount;
|
||||
basepoints[0] = triggerAmount;
|
||||
|
||||
Item* castItem = triggeredByAura->GetCastItemGUID() && GetTypeId()==TYPEID_PLAYER
|
||||
? ((Player*)this)->GetItemByGuid(triggeredByAura->GetCastItemGUID()) : NULL;
|
||||
|
|
@ -6329,7 +6329,7 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
|
|||
else if (auraSpellInfo->Id==43820) // Charm of the Witch Doctor (Amani Charm of the Witch Doctor trinket)
|
||||
{
|
||||
// Pct value stored in dummy
|
||||
basepoints0 = pVictim->GetCreateHealth() * auraSpellInfo->EffectBasePoints[1] / 100;
|
||||
basepoints[0] = pVictim->GetCreateHealth() * auraSpellInfo->EffectBasePoints[1] / 100;
|
||||
target = pVictim;
|
||||
break;
|
||||
}
|
||||
|
|
@ -6499,7 +6499,7 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
|
|||
{
|
||||
int32 value2 = CalculateSpellDamage((*i)->GetSpellProto(),2,(*i)->GetSpellProto()->EffectBasePoints[2],this);
|
||||
// Drain Soul
|
||||
CastCustomSpell(this, 18371, &basepoints0, NULL, NULL, true, castItem, triggeredByAura);
|
||||
CastCustomSpell(this, 18371, &basepoints[0], NULL, NULL, true, castItem, triggeredByAura);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -6545,7 +6545,7 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
|
|||
sLog.outError("Unit::HandleProcTriggerSpell: Spell %u not handled in BR", auraSpellInfo->Id);
|
||||
return false;
|
||||
}
|
||||
basepoints0 = damage * triggerAmount / 100 / 3;
|
||||
basepoints[0] = damage * triggerAmount / 100 / 3;
|
||||
target = this;
|
||||
}
|
||||
break;
|
||||
|
|
@ -6574,7 +6574,7 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
|
|||
{
|
||||
if (triggerAmount == 0)
|
||||
return false;
|
||||
basepoints0 = triggerAmount * GetMaxHealth() / 100;
|
||||
basepoints[0] = triggerAmount * GetMaxHealth() / 100;
|
||||
trigger_spell_id = 34299;
|
||||
}
|
||||
break;
|
||||
|
|
@ -6643,7 +6643,7 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
|
|||
}
|
||||
// percent stored in effect 1 (class scripts) base points
|
||||
int32 cost = originalSpell->manaCost + originalSpell->ManaCostPercentage * GetCreateMana() / 100;
|
||||
basepoints0 = cost*auraSpellInfo->CalculateSimpleValue(1)/100;
|
||||
basepoints[0] = cost*auraSpellInfo->CalculateSimpleValue(1)/100;
|
||||
trigger_spell_id = 20272;
|
||||
target = this;
|
||||
}
|
||||
|
|
@ -6732,7 +6732,7 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
|
|||
{
|
||||
if(!procSpell)
|
||||
return false;
|
||||
basepoints0 = procSpell->manaCost * 35 / 100;
|
||||
basepoints[0] = procSpell->manaCost * 35 / 100;
|
||||
trigger_spell_id = 23571;
|
||||
target = this;
|
||||
}
|
||||
|
|
@ -6746,7 +6746,7 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
|
|||
if(pVictim && pVictim->isAlive())
|
||||
pVictim->getThreatManager().modifyThreatPercent(this,-10);
|
||||
|
||||
basepoints0 = triggerAmount * GetMaxHealth() / 100;
|
||||
basepoints[0] = triggerAmount * GetMaxHealth() / 100;
|
||||
trigger_spell_id = 31616;
|
||||
target = this;
|
||||
}
|
||||
|
|
@ -6781,7 +6781,7 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
|
|||
if (!((Player*)this)->isHonorOrXPTarget(pVictim))
|
||||
return false;
|
||||
trigger_spell_id = 50475;
|
||||
basepoints0 = damage * triggerAmount / 100;
|
||||
basepoints[0] = damage * triggerAmount / 100;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -6811,7 +6811,7 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
|
|||
// This spell originally trigger 13567 - Dummy Trigger (vs dummy efect)
|
||||
case 26467:
|
||||
{
|
||||
basepoints0 = damage * 15 / 100;
|
||||
basepoints[0] = damage * 15 / 100;
|
||||
target = pVictim;
|
||||
trigger_spell_id = 26470;
|
||||
break;
|
||||
|
|
@ -6917,13 +6917,13 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
|
|||
// Bloodthirst (($m/100)% of max health)
|
||||
case 23880:
|
||||
{
|
||||
basepoints0 = int32(GetMaxHealth() * triggerAmount / 100);
|
||||
basepoints[0] = int32(GetMaxHealth() * triggerAmount / 100);
|
||||
break;
|
||||
}
|
||||
// Shamanistic Rage triggered spell
|
||||
case 30824:
|
||||
{
|
||||
basepoints0 = int32(GetTotalAttackPowerValue(BASE_ATTACK) * triggerAmount / 100);
|
||||
basepoints[0] = int32(GetTotalAttackPowerValue(BASE_ATTACK) * triggerAmount / 100);
|
||||
break;
|
||||
}
|
||||
// Enlightenment (trigger only from mana cost spells)
|
||||
|
|
@ -6933,6 +6933,34 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
|
|||
return false;
|
||||
break;
|
||||
}
|
||||
// Demonic Pact
|
||||
case 48090:
|
||||
{
|
||||
// As the spell is proced from pet's attack - find owner
|
||||
Unit* owner = GetOwner();
|
||||
if (!owner || owner->GetTypeId() != TYPEID_PLAYER)
|
||||
return false;
|
||||
|
||||
// This spell doesn't stack, but refreshes duration. So we receive current bonuses to minus them later.
|
||||
int32 curBonus = 0;
|
||||
if (Aura* aur = owner->GetAura(48090,0))
|
||||
curBonus = aur->GetModifier()->m_amount;
|
||||
int32 spellDamage = owner->SpellBaseDamageBonus(SPELL_SCHOOL_MASK_MAGIC) - curBonus;
|
||||
if(spellDamage <= 0)
|
||||
return false;
|
||||
|
||||
// percent stored in owner talent dummy
|
||||
AuraList const& dummyAuras = owner->GetAurasByType(SPELL_AURA_DUMMY);
|
||||
for (AuraList::const_iterator i = dummyAuras.begin(); i != dummyAuras.end(); ++i)
|
||||
{
|
||||
if ((*i)->GetSpellProto()->SpellIconID == 3220)
|
||||
{
|
||||
basepoints[0] = basepoints[1] = int32(spellDamage * (*i)->GetModifier()->m_amount / 100);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
// Sword and Board
|
||||
case 50227:
|
||||
{
|
||||
|
|
@ -7018,8 +7046,12 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB
|
|||
if(!target || target!=this && !target->isAlive())
|
||||
return false;
|
||||
|
||||
if(basepoints0)
|
||||
CastCustomSpell(target,trigger_spell_id,&basepoints0,NULL,NULL,true,castItem,triggeredByAura);
|
||||
if(basepoints[0] || basepoints[1] || basepoints[2])
|
||||
CastCustomSpell(target,trigger_spell_id,
|
||||
basepoints[0] ? &basepoints[0] : NULL,
|
||||
basepoints[1] ? &basepoints[1] : NULL,
|
||||
basepoints[2] ? &basepoints[2] : NULL,
|
||||
true,castItem,triggeredByAura);
|
||||
else
|
||||
CastSpell(target,trigger_spell_id,true,castItem,triggeredByAura);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue