temporary fix for poison condition to not apply when poof or armor hit however it should apply when armor hit

This commit is contained in:
ErikasKontenis 2020-03-15 18:59:57 +02:00
parent eda0484268
commit d9686f1d07
2 changed files with 24 additions and 14 deletions

View File

@ -432,7 +432,7 @@ CallBack* Combat::getCallback(CallBackParam_t key)
return nullptr; 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); assert(data);
CombatDamage damage = *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)) { if (g_game.combatBlockHit(damage, caster, target, params.blockedByShield, params.blockedByArmor, params.itemId != 0)) {
return; return false;
} }
if (g_game.combatChangeHealth(caster, target, damage)) { if (g_game.combatChangeHealth(caster, target, damage)) {
CombatConditionFunc(caster, target, params, &damage); CombatConditionFunc(caster, target, params, &damage);
CombatDispelFunc(caster, target, params, nullptr); 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); assert(data);
CombatDamage damage = *data; CombatDamage damage = *data;
@ -477,12 +479,14 @@ void Combat::CombatManaFunc(Creature* caster, Creature* target, const CombatPara
CombatConditionFunc(caster, target, params, nullptr); CombatConditionFunc(caster, target, params, nullptr);
CombatDispelFunc(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) { if (params.origin == ORIGIN_MELEE && data && data->value == 0) {
return; return false;
} }
for (const auto& condition : params.conditionList) { for (const auto& condition : params.conditionList) {
@ -496,17 +500,23 @@ void Combat::CombatConditionFunc(Creature* caster, Creature* target, const Comba
target->addCombatCondition(conditionCopy); 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); 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); CombatConditionFunc(caster, target, params, nullptr);
CombatDispelFunc(caster, target, params, nullptr); CombatDispelFunc(caster, target, params, nullptr);
return true;
} }
void Combat::combatTileEffects(const SpectatorVec& list, Creature* caster, Tile* tile, const CombatParams& params) 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); addDistanceEffect(caster->getPosition(), target->getPosition(), params.distanceEffect);
} }
CombatHealthFunc(caster, target, params, &damage); canCombat = CombatHealthFunc(caster, target, params, &damage);
if (params.targetCallback) { if (params.targetCallback) {
params.targetCallback->onTargetCombat(caster, target); params.targetCallback->onTargetCombat(caster, target);
} }

View File

@ -117,7 +117,7 @@ struct DunkenImpact : Impact
void handleCreature(Creature* target) final; void handleCreature(Creature* target) final;
}; };
typedef void(*COMBATFUNC)(Creature*, Creature*, const CombatParams&, CombatDamage*); typedef bool(*COMBATFUNC)(Creature*, Creature*, const CombatParams&, CombatDamage*);
class MatrixArea 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 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 bool CombatHealthFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data);
static void CombatManaFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* damage); static bool CombatManaFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* damage);
static void CombatConditionFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data); static bool CombatConditionFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data);
static void CombatDispelFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data); static bool CombatDispelFunc(Creature* caster, Creature* target, const CombatParams& params, CombatDamage* data);
static void CombatNullFunc(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); static void combatTileEffects(const SpectatorVec& list, Creature* caster, Tile* tile, const CombatParams& params);
CombatDamage getCombatDamage(Creature* creature) const; CombatDamage getCombatDamage(Creature* creature) const;