summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/map/skill.c17
-rw-r--r--src/map/status.c5
2 files changed, 12 insertions, 10 deletions
diff --git a/src/map/skill.c b/src/map/skill.c
index fe9703741..ae69738a6 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -8915,12 +8915,17 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case GN_MANDRAGORA:
if( flag&1 ) {
- if ( clif->skill_nodamage(bl, src, skill_id, skill_lv,
- sc_start(bl, type, 25 + 10 * skill_lv, skill_lv, skill->get_time(skill_id, skill_lv))) )
- status_zap(bl, 0, status_get_max_sp(bl) * (25 + 5 * skill_lv) / 100);
- } else
- map->foreachinrange(skill->area_sub, bl, skill->get_splash(skill_id, skill_lv), BL_CHAR,
- src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill->castend_nodamage_id);
+ int chance = 25 + 10 * skill_lv - (status_get_vit(bl) + status_get_luk(bl)) / 5;
+ if ( chance < 10 )
+ chance = 10;//Minimal chance is 10%.
+ if ( rand()%100 < chance ) {//Coded to both inflect the status and drain the target's SP only when successful. [Rytech]
+ sc_start(bl, type, 100, skill_lv, skill->get_time(skill_id, skill_lv));
+ status_zap(bl, 0, status_get_max_sp(bl) * (25 + 5 * skill_lv) / 100);
+ }
+ } else if ( sd ) {
+ map->foreachinrange(skill->area_sub, bl, skill->get_splash(skill_id, skill_lv), BL_CHAR,src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill_castend_nodamage_id);
+ clif->skill_nodamage(bl, src, skill_id, skill_lv, 1);
+ }
break;
case GN_SLINGITEM:
diff --git a/src/map/status.c b/src/map/status.c
index dbce2f7f4..bb2efb505 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -4277,7 +4277,7 @@ static unsigned short status_calc_int(struct block_list *bl, struct status_chang
if(sc->data[SC_MARIONETTE])
int_ += ((sc->data[SC_MARIONETTE]->val4)>>16)&0xFF;
if(sc->data[SC_MANDRAGORA])
- int_ -= 5 + 5 * sc->data[SC_MANDRAGORA]->val1;
+ int_ -= 4 * sc->data[SC_MANDRAGORA]->val1;
if(sc->data[SC_COCKTAIL_WARG_BLOOD])
int_ += sc->data[SC_COCKTAIL_WARG_BLOOD]->val1;
if(sc->data[SC_INSPIRATION])
@@ -6328,9 +6328,6 @@ int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int ti
tick -= 1000 * ((status->get_lv(bl) / 10) + ((sd?sd->status.job_level:0) / 5));
tick = max(tick,10000);
break;
- case SC_MANDRAGORA:
- sc_def = (st->vit+st->luk)/5;
- break;
case SC_KYOUGAKU:
tick -= 1000 * status_get_int(bl) / 20;
break;