summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
Diffstat (limited to 'src/map')
-rw-r--r--src/map/battle.c18
-rw-r--r--src/map/config/const.h6
-rw-r--r--src/map/map.c1
-rw-r--r--src/map/skill.c1
4 files changed, 16 insertions, 10 deletions
diff --git a/src/map/battle.c b/src/map/battle.c
index 2c74ed240..7d6517c8e 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -2077,11 +2077,13 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
break;
case GC_ROLLINGCUTTER:
skillratio += 20 * skill_lv;
+ RE_LVL_DMOD();
break;
case GC_CROSSRIPPERSLASHER:
- skillratio += 60 + 40 * skill_lv;
+ skillratio += 300 + 80 * skill_lv;
+ RE_LVL_DMOD();
if( sc && sc->data[SC_ROLLINGCUTTER] )
- skillratio += 25 * sc->data[SC_ROLLINGCUTTER]->val1;
+ skillratio += sc->data[SC_ROLLINGCUTTER]->val1 * sstatus->agi;
break;
/**
* Arch Bishop
@@ -3927,7 +3929,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
break;
case RK_DRAGONBREATH:
md.damage = ((status_get_hp(src) / 50) + (status_get_max_sp(src) / 4)) * skill_lv;
- RE_LVL_MDMOD();
+ RE_LVL_MDMOD(150);
if (sd) md.damage = md.damage * (100 + 5 * (pc_checkskill(sd,RK_DRAGONTRAINING) - 1)) / 100;
md.flag |= BF_LONG|BF_WEAPON;
break;
@@ -3946,10 +3948,12 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
* Mechanic
**/
case NC_SELFDESTRUCTION:
- md.damage = (sd?pc_checkskill(sd,NC_MAINFRAME):10) * skill_lv * (status_get_sp(src) + sstatus->vit);
- RE_LVL_MDMOD();
- if (sd) md.damage = md.damage + status_get_hp(src);
- status_set_sp(src, 0, 0);
+ {
+ short totaldef = tstatus->def2 + (short)status_get_def(target);
+ md.damage = ( (sd?pc_checkskill(sd,NC_MAINFRAME):10) + 8 ) * ( skill_lv + 1 ) * ( status_get_sp(src) + sstatus->vit );
+ RE_LVL_MDMOD(100);
+ md.damage += status_get_hp(src) - totaldef;
+ }
break;
case GN_THORNS_TRAP:
md.damage = 100 + 200 * skill_lv + sstatus->int_;
diff --git a/src/map/config/const.h b/src/map/config/const.h
index 7acc5e522..b67ed050f 100644
--- a/src/map/config/const.h
+++ b/src/map/config/const.h
@@ -87,9 +87,9 @@
#define RE_LVL_DMOD() \
if( status_get_lv(src) > 100 ) \
skillratio = skillratio * status_get_lv(src) / 100;
- #define RE_LVL_MDMOD() \
- if( status_get_lv(src) > 100 ) \
- md.damage = md.damage * status_get_lv(src) / 150;
+ #define RE_LVL_MDMOD(val) \
+ if( status_get_lv(src) > 100 && val > 0) \
+ md.damage = md.damage * status_get_lv(src) / val;
/* ranger traps special */
#define RE_LVL_TMDMOD() \
if( status_get_lv(src) > 100 ) \
diff --git a/src/map/map.c b/src/map/map.c
index 073901204..1c831c5f1 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -403,6 +403,7 @@ int map_moveblock(struct block_list *bl, int x1, int y1, unsigned int tick)
if (sc->data[SC_PROPERTYWALK] &&
sc->data[SC_PROPERTYWALK]->val3 >= skill_get_maxcount(sc->data[SC_PROPERTYWALK]->val1,sc->data[SC_PROPERTYWALK]->val2) )
status_change_end(bl,SC_PROPERTYWALK,INVALID_TIMER);
+ status_change_end(bl, SC_ROLLINGCUTTER, INVALID_TIMER); //If you move, you lose your counters.
} else
if (bl->type == BL_NPC)
npc_unsetcells((TBL_NPC*)bl);
diff --git a/src/map/skill.c b/src/map/skill.c
index dc93a498c..27997c713 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -7770,6 +7770,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
pc_setmadogear(sd, 0);
clif_skill_nodamage(src, bl, skillid, skilllv, 1);
skill_castend_damage_id(src, src, skillid, skilllv, tick, flag);
+ status_set_sp(src, 0, 0);
}
break;