From d9a9a024f6ef47c48679629fa508dcb6793a8dce Mon Sep 17 00:00:00 2001 From: Playtester Date: Sun, 16 Nov 2014 18:06:53 +0100 Subject: [PATCH] Magnum Break damage fixed - The 20% fire damage bonus now only applies if the base damage is at least 1 (#108) (Note: The fix does not work for player damage in renewal.) - Targets two cells away will now only take 100%+10%*level damage (#108) --- src/map/battle.c | 7 +++++-- src/map/skill.c | 10 ++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/map/battle.c b/src/map/battle.c index da5c3d0c27..1a912f4f69 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2621,7 +2621,7 @@ static struct Damage battle_calc_element_damage(struct Damage wd, struct block_l } if (is_attack_left_handed(src, skill_id) && wd.damage2 > 0) wd.damage2 = battle_attr_fix(src, target, wd.damage2, left_element ,tstatus->def_ele, tstatus->ele_lv); - if (sc && sc->data[SC_WATK_ELEMENT]) { + if (sc && sc->data[SC_WATK_ELEMENT] && (wd.damage || wd.damage2)) { // Descriptions indicate this means adding a percent of a normal attack in another element. [Skotlex] int64 damage = battle_calc_base_damage(sstatus, &sstatus->rhw, sc, tstatus->size, sd, (is_skill_using_arrow(src, skill_id)?2:0)) * sc->data[SC_WATK_ELEMENT]->val2 / 100; @@ -3194,7 +3194,10 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s break; case SM_MAGNUM: case MS_MAGNUM: - skillratio += 20*skill_lv; + if(wd.miscflag == 1) + skillratio += 20*skill_lv; //Inner 3x3 circle takes 100%+20%*level damage [Playtester] + else + skillratio += 10*skill_lv; //Outer 5x5 circle takes 100%+10%*level damage [Playtester] break; case MC_MAMMONITE: skillratio += 50*skill_lv; diff --git a/src/map/skill.c b/src/map/skill.c index 88fb1b77ad..a9b61b9dd8 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -4356,8 +4356,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case NPC_SPLASHATTACK: flag |= SD_PREAMBLE; // a fake packet will be sent for the first target to be hit case AS_SPLASHER: - case SM_MAGNUM: - case MS_MAGNUM: case HT_BLITZBEAT: case AC_SHOWER: case MA_SHOWER: @@ -4471,6 +4469,14 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint if(!map_getcell(bl->m, bl->x, bl->y, CELL_CHKLANDPROTECTOR)) // Nothing should happen if the target is on Land Protector skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag); break; + + case SM_MAGNUM: + case MS_MAGNUM: + if( flag&1 ) { + //Damage depends on distance, so add it to flag if it is > 1 + skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag|distance_bl(src, bl)); + } + break; case KN_BRANDISHSPEAR: case ML_BRANDISH: