Implemented SE_ResourceTap - Coverts a percent of dmg from dmg spells(DD/DoT) to hp/mana/end.

This commit is contained in:
KayenEQ
2014-07-02 11:18:50 -04:00
parent ee6d7ae6ba
commit 4a49a11e73
4 changed files with 33 additions and 4 deletions
+1
View File
@@ -229,6 +229,7 @@ public:
bool TryDispel(uint8 caster_level, uint8 buff_level, int level_modifier);
void SpellProjectileEffect();
bool TrySpellProjectile(Mob* spell_target, uint16 spell_id);
void ResourceTap(int32 damage, uint16 spell_id);
//Buff
void BuffProcess();
+30 -2
View File
@@ -224,9 +224,11 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
dmg = (int32) (dmg * partial / 100);
//handles AAs and what not...
if(caster)
if(caster) {
dmg = caster->GetActSpellDamage(spell_id, dmg, this);
caster->ResourceTap(-dmg, spell_id);
}
dmg = -dmg;
Damage(caster, dmg, spell_id, spell.skill, false, buffslot, false);
}
@@ -3367,6 +3369,8 @@ void Mob::DoBuffTic(uint16 spell_id, int slot, uint32 ticsremaining, uint8 caste
if(caster->IsNPC())
effect_value = caster->CastToNPC()->GetActSpellDamage(spell_id, effect_value, this);
caster->ResourceTap(-effect_value, spell_id);
}
effect_value = -effect_value;
@@ -6283,4 +6287,28 @@ bool Mob::TrySpellProjectile(Mob* spell_target, uint16 spell_id){
return true;
}
void Mob::ResourceTap(int32 damage, uint16 spellid){
//'this' = caster
if (!IsValidSpell(spellid))
return;
for (int i = 0; i <= EFFECT_COUNT; i++)
{
if (spells[spellid].effectid[i] == SE_ResourceTap){
damage += (damage * spells[spellid].base[i])/100;
if (spells[spellid].max[i] && (damage > spells[spellid].max[i]))
damage = spells[spellid].max[i];
if (spells[spellid].base2[i] == 0) //HP Tap
SetHP((GetHP()+ damage));
if (spells[spellid].base2[i] == 1) //Mana Tap
SetMana(GetMana() + damage);
if (spells[spellid].base2[i] == 2 && IsClient()) //Endurance Tap
CastToClient()->SetEndurance(CastToClient()->GetEndurance() + damage);
}
}
}