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;
}
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);
}

View File

@ -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;