From 02fd17c0e79e2a2f756354c070c0a1cf574b70f9 Mon Sep 17 00:00:00 2001 From: gsemaj Date: Sun, 13 Aug 2023 18:27:18 -0700 Subject: [PATCH] Implement leech --- src/Abilities.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Abilities.cpp b/src/Abilities.cpp index 8646dff..5087a15 100644 --- a/src/Abilities.cpp +++ b/src/Abilities.cpp @@ -85,8 +85,26 @@ static SkillResult handleSkillDamageNDebuff(SkillData* skill, int power, ICombat } static SkillResult handleSkillLeech(SkillData* skill, int power, ICombatant* source, ICombatant* target) { - // TODO abilities - return SkillResult(); + EntityRef sourceRef = source->getRef(); + int heal = skill->values[0][power]; + int healed = source->heal(sourceRef, heal); + int damage = heal * 2; + int dealt = target->takeDamage(sourceRef, damage); + + sSkillResult_Leech result{}; + + result.Damage.eCT = target->getCharType(); + result.Damage.iID = target->getID(); + result.Damage.bProtected = dealt <= 0; + result.Damage.iDamage = dealt; + result.Damage.iHP = target->getCurrentHP(); + + result.Heal.eCT = result.Damage.eCT; + result.Heal.iID = result.Damage.iID; + result.Heal.iHealHP = healed; + result.Heal.iHP = source->getCurrentHP(); + + return SkillResult(sizeof(sSkillResult_Leech), &result); } static SkillResult handleSkillBuff(SkillData* skill, int power, ICombatant* source, ICombatant* target) {