From ca99f58040d1fa4cc059913b000f2f0be4b27217 Mon Sep 17 00:00:00 2001 From: dolorous Date: Sat, 17 May 2008 18:39:21 +0000 Subject: Fix crash when attacking a friendly monster in melee if it's abjured (again). git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5103 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/fight.cc | 47 +++++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/crawl-ref/source/fight.cc b/crawl-ref/source/fight.cc index 3db36c9e9a..d479f9316d 100644 --- a/crawl-ref/source/fight.cc +++ b/crawl-ref/source/fight.cc @@ -763,32 +763,35 @@ bool melee_attack::player_attack() hit_woke_orc = true; } - // always upset monster regardless of damage - behaviour_event(def, ME_WHACK, MHITYOU); - - if (damage_done > 0) + if (def->alive()) { - int blood - = _modify_blood_amount(damage_done, attacker->damage_type()); - if (blood > defender->stat_hp()) - blood = defender->stat_hp(); + // always upset monster regardless of damage + behaviour_event(def, ME_WHACK, MHITYOU); - bleed_onto_floor(where.x, where.y, defender->id(), blood, true); - } + if (damage_done > 0) + { + int blood = + _modify_blood_amount(damage_done, attacker->damage_type()); + if (blood > defender->stat_hp()) + blood = defender->stat_hp(); - if (damage_done > 0 || !defender_visible) - player_announce_hit(); - else if (!shield_blocked && damage_done <= 0) - { - no_damage_message = - make_stringf("You %s %s.", attack_verb.c_str(), - defender->name(DESC_NOCAP_THE).c_str()); - } + bleed_onto_floor(where.x, where.y, defender->id(), blood, true); + } - player_hurt_monster(); + if (damage_done > 0 || !defender_visible) + player_announce_hit(); + else if (!shield_blocked && damage_done <= 0) + { + no_damage_message = + make_stringf("You %s %s.", attack_verb.c_str(), + defender->name(DESC_NOCAP_THE).c_str()); + } + + player_hurt_monster(); - if (damage_done) - player_exercise_combat_skills(); + if (damage_done) + player_exercise_combat_skills(); + } if (player_check_monster_died()) return (true); @@ -2626,7 +2629,7 @@ void melee_attack::player_calc_hit_damage() // are stupidly powerful) -- GDL potential_damage += slaying_bonus(PWPN_DAMAGE); damage_done = - potential_damage > 0? one_chance_in(3) + random2(potential_damage) : 0; + potential_damage > 0 ? one_chance_in(3) + random2(potential_damage) : 0; damage_done = player_apply_weapon_skill(damage_done); damage_done = player_apply_fighting_skill(damage_done, false); damage_done = player_apply_misc_modifiers(damage_done); -- cgit v1.2.3-54-g00ecf