This commit is contained in:
KayenEQ
2013-12-15 01:15:01 -08:00
8 changed files with 79 additions and 26 deletions
+12
View File
@@ -1574,6 +1574,10 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
newbon->MeleeMitigation -= effect_value;
break;
case SE_IncreaseHitDmgTaken:
newbon->MeleeMitigation += effect_value;
break;
case SE_CriticalHitChance:
{
@@ -2689,6 +2693,8 @@ uint8 Mob::IsFocusEffect(uint16 spell_id,int effect_index, bool AA,uint32 aa_eff
return focusImprovedDamage2;
case SE_Empathy:
return focusAdditionalDamage;
case SE_ReduceHeal:
return focusReduceHeal;
case SE_HealRate2:
return focusHealRate;
case SE_IncreaseSpellPower:
@@ -3006,6 +3012,12 @@ void Mob::NegateSpellsBonuses(uint16 spell_id)
aabonuses.MeleeMitigation = effect_value;
break;
case SE_IncreaseHitDmgTaken:
spellbonuses.MeleeMitigation = effect_value;
itembonuses.MeleeMitigation = effect_value;
aabonuses.MeleeMitigation = effect_value;
break;
case SE_CriticalHitChance:
{
for(int e = 0; e < HIGHEST_SKILL+1; e++)
+1
View File
@@ -73,6 +73,7 @@ typedef enum { //focus types
focusBlockNextSpell,
focusHealRate,
focusAdditionalDamage,
focusReduceHeal,
focusSpellEffectiveness,
focusIncreaseNumHits,
focusCriticalHealRate,
+1
View File
@@ -237,6 +237,7 @@ int32 Client::Additional_Heal(uint16 spell_id)
heal_amt += GetFocusEffect(focusAdditionalHeal, spell_id);
heal_amt += GetFocusEffect(focusAdditionalHeal2, spell_id);
heal_amt -= GetFocusEffect(focusReduceHeal, spell_id);
if (heal_amt){
int duration = CalcBuffDuration(this, this, spell_id);
+1
View File
@@ -2868,6 +2868,7 @@ int32 Merc::Additional_Heal(uint16 spell_id)
heal_amt += GetFocusEffect(focusAdditionalHeal, spell_id);
heal_amt += GetFocusEffect(focusAdditionalHeal2, spell_id);
heal_amt -= GetFocusEffect(focusReduceHeal, spell_id);
if (heal_amt){
int duration = CalcBuffDuration(this, this, spell_id);
+4 -4
View File
@@ -3176,7 +3176,7 @@ void Mob::TrySpellTrigger(Mob *target, uint32 spell_id)
if(MakeRandomInt(0, trig_chance) <= spells[spell_id].base[i])
{
// If we trigger an effect then its over.
SpellFinished(spells[spell_id].base2[i], target);
SpellFinished(spells[spell_id].base2[i], target, 10, 0, -1, spells[spell_id].ResistDiff);
break;
}
else
@@ -3197,7 +3197,7 @@ void Mob::TrySpellTrigger(Mob *target, uint32 spell_id)
{
if(MakeRandomInt(0, 100) <= spells[spell_id].base[i])
{
SpellFinished(spells[spell_id].base2[i], target);
SpellFinished(spells[spell_id].base2[i], target, 10, 0, -1, spells[spell_id].ResistDiff);
}
}
}
@@ -3213,12 +3213,12 @@ void Mob::TryApplyEffect(Mob *target, uint32 spell_id)
for(int i = 0; i < EFFECT_COUNT; i++)
{
if (spells[spell_id].effectid[i] == SE_ApplyEffect)
if (spells[spell_id].effectid[i] == SE_ApplyEffect || spells[spell_id].effectid[i] == SE_ApplyEffect2)
{
if(MakeRandomInt(0, 100) <= spells[spell_id].base[i])
{
if(target)
SpellFinished(spells[spell_id].base2[i], target);
SpellFinished(spells[spell_id].base2[i], target, 10, 0, -1, spells[spell_id].ResistDiff);
}
}
}
+31
View File
@@ -2804,6 +2804,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
case SE_SpellVulnerability:
case SE_SpellTrigger:
case SE_ApplyEffect:
case SE_ApplyEffect2:
case SE_Twincast:
case SE_DelayDeath:
case SE_InterruptCasting:
@@ -2892,6 +2893,9 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
case SE_ChannelChanceItems:
case SE_CriticalHealRate:
case SE_IncreaseNumHits:
case SE_CastonFocusEffect:
case SE_ReduceHeal:
case SE_IncreaseHitDmgTaken:
{
break;
}
@@ -4266,6 +4270,14 @@ int16 Client::CalcAAFocus(focusType type, uint32 aa_ID, uint16 spell_id)
break;
}
case SE_ReduceHeal:
{
if(type == focusReduceHeal)
value = base1;
break;
}
case SE_CriticalHealRate:
{
if (type == focusCriticalHealRate)
@@ -4351,6 +4363,7 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo
int lvldiff = 0;
bool LimitSpellSkill = false;
bool SpellSkill_Found = false;
uint32 Caston_spell_id = 0;
for (int i = 0; i < EFFECT_COUNT; i++) {
@@ -4511,6 +4524,11 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo
return 0;
break;
case SE_CastonFocusEffect:
if (focus_spell.base[i] > 0)
Caston_spell_id = focus_spell.base[i];
break;
//handle effects
case SE_ImprovedDamage:
// No Spell used this, its handled by different spell effect IDs.
@@ -4732,6 +4750,14 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo
break;
}
case SE_ReduceHeal:
{
if(type == focusReduceHeal)
value = focus_spell.base[i];
break;
}
case SE_CriticalHealRate:
{
if (type == focusCriticalHealRate)
@@ -4799,6 +4825,11 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo
if ((LimitSpellSkill) && (!SpellSkill_Found))
return 0;
if (Caston_spell_id){
if(IsValidSpell(Caston_spell_id) && (Caston_spell_id != spell_id))
SpellFinished(Caston_spell_id, this, 10, 0, -1, spells[Caston_spell_id].ResistDiff);
}
return(value*lvlModifier/100);
}