From fa636a5f99312f0c50d9809bd32f461487d9b954 Mon Sep 17 00:00:00 2001 From: ErikasKontenis Date: Fri, 13 Mar 2020 21:52:32 +0200 Subject: [PATCH] Revert "fix poison condition to be applied from poison monsters only when you can't block it porperly" This reverts commit dca9e61345cc16b7d31117da0049ad8ea7e92ac9. --- src/combat.cpp | 25 +++++++++++++++++++++++-- src/combat.h | 2 +- src/creature.cpp | 17 ----------------- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/combat.cpp b/src/combat.cpp index 25d81b2..5d62a55 100644 --- a/src/combat.cpp +++ b/src/combat.cpp @@ -886,7 +886,26 @@ bool Combat::closeAttack(Creature* attacker, Creature* target, fightMode_t fight combatDamage.value = totalDamage; combatDamage.origin = ORIGIN_MELEE; - Combat::doCombatHealth(attacker, target, combatDamage, combatParams); + bool hit = Combat::doCombatHealth(attacker, target, combatDamage, combatParams); + + if (Monster* monster = attacker->getMonster()) { + int32_t poison = monster->mType->info.poison; + if (poison) { + int32_t randTest = rand(); + + if (hit || ((-totalDamage > defense) && (randTest == 5 * (randTest / 5)))) { + poison = normal_random(poison / 2, poison); + if (poison) { + ConditionDamage* condition = static_cast(Condition::createCondition(CONDITIONID_COMBAT, CONDITION_POISON, 0, 0)); + condition->setParam(CONDITION_PARAM_OWNER, attacker->getID()); + condition->setParam(CONDITION_PARAM_CYCLE, poison); + condition->setParam(CONDITION_PARAM_COUNT, 3); + condition->setParam(CONDITION_PARAM_MAX_COUNT, 3); + target->addCombatCondition(condition); + } + } + } + } if (Player* player = attacker->getPlayer()) { // skills advancing @@ -1264,7 +1283,7 @@ void Combat::postWeaponEffects(Player* player, Item* weapon) } } -void Combat::doCombatHealth(Creature* caster, Creature* target, CombatDamage& damage, const CombatParams& params) +bool Combat::doCombatHealth(Creature* caster, Creature* target, CombatDamage& damage, const CombatParams& params) { bool canCombat = !params.aggressive || (caster != target && Combat::canDoCombat(caster, target) == RETURNVALUE_NOERROR); if ((caster == target || canCombat) && params.impactEffect != CONST_ME_NONE) { @@ -1281,6 +1300,8 @@ void Combat::doCombatHealth(Creature* caster, Creature* target, CombatDamage& da params.targetCallback->onTargetCombat(caster, target); } } + + return canCombat; } void Combat::doCombatHealth(Creature* caster, const Position& position, const AreaCombat* area, CombatDamage& damage, const CombatParams& params) diff --git a/src/combat.h b/src/combat.h index 66c5f53..a6b6b70 100644 --- a/src/combat.h +++ b/src/combat.h @@ -293,7 +293,7 @@ class Combat static void getAttackValue(Creature* creature, uint32_t& attackValue, uint32_t& skillValue, uint8_t& skill); - static void doCombatHealth(Creature* caster, Creature* target, CombatDamage& damage, const CombatParams& params); + static bool doCombatHealth(Creature* caster, Creature* target, CombatDamage& damage, const CombatParams& params); static void doCombatHealth(Creature* caster, const Position& position, const AreaCombat* area, CombatDamage& damage, const CombatParams& params); static void doCombatMana(Creature* caster, Creature* target, CombatDamage& damage, const CombatParams& params); diff --git a/src/creature.cpp b/src/creature.cpp index c03a200..ad329a0 100644 --- a/src/creature.cpp +++ b/src/creature.cpp @@ -825,23 +825,6 @@ BlockType_t Creature::blockHit(Creature* attacker, CombatType_t combatType, int3 if (attacker) { attacker->onAttackedCreature(this); attacker->onAttackedCreatureBlockHit(blockType); - - if (Monster* monster = attacker->getMonster()) { - int32_t poison = monster->mType->info.poison; - if (poison) { - if (blockType == BLOCK_NONE || blockType == BLOCK_ARMOR) { - poison = normal_random(poison / 2, poison); - if (poison) { - ConditionDamage* condition = static_cast(Condition::createCondition(CONDITIONID_COMBAT, CONDITION_POISON, 0, 0)); - condition->setParam(CONDITION_PARAM_OWNER, attacker->getID()); - condition->setParam(CONDITION_PARAM_CYCLE, poison); - condition->setParam(CONDITION_PARAM_COUNT, 3); - condition->setParam(CONDITION_PARAM_MAX_COUNT, 3); - addCombatCondition(condition); - } - } - } - } } onAttacked();