diff --git a/src/Abilities.cpp b/src/Abilities.cpp index fe987ed..f27b3fe 100644 --- a/src/Abilities.cpp +++ b/src/Abilities.cpp @@ -56,6 +56,11 @@ static SkillResult handleSkillDamageNDebuff(SkillData* skill, int power, ICombat return SkillResult(sizeof(sSkillResult_Damage_N_Debuff), &result); } +static SkillResult handleSkillLeech(SkillData* skill, int power, ICombatant* source, ICombatant* target) { + // TODO abilities + return SkillResult(); +} + static SkillResult handleSkillBuff(SkillData* skill, int power, ICombatant* source, ICombatant* target) { BuffStack passiveBuff = { skill->drainType == SkillDrainType::PASSIVE ? 1 : skill->durationTime[power], // ticks @@ -157,39 +162,52 @@ static std::vector handleSkill(SkillData* skill, int power, ICombat resultSize = sizeof(sSkillResult_Heal_HP); skillHandler = handleSkillHealHP; break; + case SkillType::KNOCKDOWN: + case SkillType::SLEEP: + case SkillType::SNARE: + case SkillType::STUN: + resultSize = sizeof(sSkillResult_Damage_N_Debuff); + skillHandler = handleSkillDamageNDebuff; + break; case SkillType::JUMP: case SkillType::RUN: - case SkillType::FREEDOM: - case SkillType::PHOENIX: - case SkillType::INVULNERABLE: + case SkillType::STEALTH: case SkillType::MINIMAPENEMY: case SkillType::MINIMAPTRESURE: - case SkillType::NANOSTIMPAK: + case SkillType::PHOENIX: case SkillType::PROTECTBATTERY: case SkillType::PROTECTINFECTION: case SkillType::REWARDBLOB: case SkillType::REWARDCASH: + // case SkillType::INFECTIONDAMAGE: + case SkillType::FREEDOM: + case SkillType::BOUNDINGBALL: + case SkillType::INVULNERABLE: case SkillType::STAMINA_SELF: - case SkillType::STEALTH: + case SkillType::NANOSTIMPAK: + case SkillType::BUFFHEAL: resultSize = sizeof(sSkillResult_Buff); skillHandler = handleSkillBuff; break; + case SkillType::BLOODSUCKING: + resultSize = sizeof(sSkillResult_Heal_HP); + skillHandler = handleSkillLeech; + case SkillType::RETROROCKET_SELF: + // no-op + return results; + case SkillType::PHOENIX_GROUP: + resultSize = sizeof(sSkillResult_Resurrect); + skillHandler = handleSkillResurrect; + break; + case SkillType::RECALL: + case SkillType::RECALL_GROUP: + resultSize = sizeof(sSkillResult_Move); + skillHandler = handleSkillMove; + break; case SkillType::BATTERYDRAIN: resultSize = sizeof(sSkillResult_BatteryDrain); skillHandler = handleSkillBatteryDrain; break; - case SkillType::RECALL: // still soft lock - case SkillType::RECALL_GROUP: // works for player who uses it - resultSize = sizeof(sSkillResult_Move); - skillHandler = handleSkillMove; - break; - case SkillType::PHOENIX_GROUP: // broken - resultSize = sizeof(sSkillResult_Resurrect); - skillHandler = handleSkillResurrect; - break; - case SkillType::RETROROCKET_SELF: - // no-op - return results; default: std::cout << "[WARN] Unhandled skill type " << (int)skill->skillType << std::endl; return results; diff --git a/src/Abilities.hpp b/src/Abilities.hpp index 672ac5c..f7c9daa 100644 --- a/src/Abilities.hpp +++ b/src/Abilities.hpp @@ -13,12 +13,12 @@ constexpr size_t MAX_SKILLRESULT_SIZE = sizeof(sSkillResult_BatteryDrain); enum class SkillType { DAMAGE = 1, HEAL_HP = 2, - KNOCKDOWN = 3, - SLEEP = 4, - SNARE = 5, + KNOCKDOWN = 3, // dnd + SLEEP = 4, // dnd + SNARE = 5, // dnd HEAL_STAMINA = 6, STAMINA_SELF = 7, - STUN = 8, + STUN = 8, // dnd WEAPONSLOW = 9, JUMP = 10, RUN = 11,