From d9686f1d075afcb8725981a41a04e7f66adcef9f Mon Sep 17 00:00:00 2001 From: ErikasKontenis Date: Sun, 15 Mar 2020 18:59:57 +0200 Subject: [PATCH] temporary fix for poison condition to not apply when poof or armor hit however it should apply when armor hit --- src/combat.cpp | 26 ++++++++++++++++++-------- src/combat.h | 12 ++++++------ 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/combat.cpp b/src/combat.cpp index 5d62a55..b773ba8 100644 --- a/src/combat.cpp +++ b/src/combat.cpp @@ -432,7 +432,7 @@ CallBack* Combat::getCallback(CallBackParam_t key) return nullptr; } -void Combat::CombatHealthFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data) +bool Combat::CombatHealthFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data) { assert(data); CombatDamage damage = *data; @@ -449,16 +449,18 @@ void Combat::CombatHealthFunc(Creature* caster, Creature* target, const CombatPa } if (g_game.combatBlockHit(damage, caster, target, params.blockedByShield, params.blockedByArmor, params.itemId != 0)) { - return; + return false; } if (g_game.combatChangeHealth(caster, target, damage)) { CombatConditionFunc(caster, target, params, &damage); CombatDispelFunc(caster, target, params, nullptr); } + + return true; } -void Combat::CombatManaFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data) +bool Combat::CombatManaFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data) { assert(data); CombatDamage damage = *data; @@ -477,12 +479,14 @@ void Combat::CombatManaFunc(Creature* caster, Creature* target, const CombatPara CombatConditionFunc(caster, target, params, nullptr); CombatDispelFunc(caster, target, params, nullptr); } + + return true; } -void Combat::CombatConditionFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data) +bool Combat::CombatConditionFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data) { if (params.origin == ORIGIN_MELEE && data && data->value == 0) { - return; + return false; } for (const auto& condition : params.conditionList) { @@ -496,17 +500,23 @@ void Combat::CombatConditionFunc(Creature* caster, Creature* target, const Comba target->addCombatCondition(conditionCopy); } } + + return true; } -void Combat::CombatDispelFunc(Creature*, Creature* target, const CombatParams& params, CombatDamage*) +bool Combat::CombatDispelFunc(Creature*, Creature* target, const CombatParams& params, CombatDamage*) { target->removeCombatCondition(params.dispelType); + + return true; } -void Combat::CombatNullFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage*) +bool Combat::CombatNullFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage*) { CombatConditionFunc(caster, target, params, nullptr); CombatDispelFunc(caster, target, params, nullptr); + + return true; } void Combat::combatTileEffects(const SpectatorVec& list, Creature* caster, Tile* tile, const CombatParams& params) @@ -1295,7 +1305,7 @@ bool Combat::doCombatHealth(Creature* caster, Creature* target, CombatDamage& da addDistanceEffect(caster->getPosition(), target->getPosition(), params.distanceEffect); } - CombatHealthFunc(caster, target, params, &damage); + canCombat = CombatHealthFunc(caster, target, params, &damage); if (params.targetCallback) { params.targetCallback->onTargetCombat(caster, target); } diff --git a/src/combat.h b/src/combat.h index a6b6b70..7d69b55 100644 --- a/src/combat.h +++ b/src/combat.h @@ -117,7 +117,7 @@ struct DunkenImpact : Impact void handleCreature(Creature* target) final; }; -typedef void(*COMBATFUNC)(Creature*, Creature*, const CombatParams&, CombatDamage*); +typedef bool(*COMBATFUNC)(Creature*, Creature*, const CombatParams&, CombatDamage*); class MatrixArea { @@ -352,11 +352,11 @@ class Combat static void CombatFunc(Creature* caster, const Position& pos, const AreaCombat* area, const CombatParams& params, COMBATFUNC func, CombatDamage* data); - static void CombatHealthFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data); - static void CombatManaFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* damage); - static void CombatConditionFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data); - static void CombatDispelFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data); - static void CombatNullFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data); + static bool CombatHealthFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data); + static bool CombatManaFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* damage); + static bool CombatConditionFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data); + static bool CombatDispelFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data); + static bool CombatNullFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data); static void combatTileEffects(const SpectatorVec& list, Creature* caster, Tile* tile, const CombatParams& params); CombatDamage getCombatDamage(Creature* creature) const;