summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/map/battle.c3
-rw-r--r--src/map/pc.h2
-rw-r--r--src/map/script.c2
-rw-r--r--src/map/skill.c8
4 files changed, 11 insertions, 4 deletions
diff --git a/src/map/battle.c b/src/map/battle.c
index 978b45792..2c74ed240 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -3955,7 +3955,8 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
md.damage = 100 + 200 * skill_lv + sstatus->int_;
break;
case GN_HELLS_PLANT_ATK:
- md.damage = sstatus->int_ * 4 * skill_lv * (10 / (10 - pc_checkskill(sd,AM_CANNIBALIZE)));//Need accurate official formula. [Rytech]
+ //[{( Hell Plant Skill Level x Caster’s Base Level ) x 10 } + {( Caster’s INT x 7 ) / 2 } x { 18 + ( Caster’s Job Level / 4 )] x ( 5 / ( 10 - Summon Flora Skill Level ))
+ md.damage = ( skill_lv * status_get_lv(src) * 10 ) + ( sstatus->int_ * 7 / 2 ) * ( 18 + (sd?sd->status.job_level:0) / 4 ) * ( 5 / (10 - (sd?pc_checkskill(sd,AM_CANNIBALIZE):0)) );
break;
}
diff --git a/src/map/pc.h b/src/map/pc.h
index af3a867fc..ab2ea732c 100644
--- a/src/map/pc.h
+++ b/src/map/pc.h
@@ -613,7 +613,7 @@ enum e_pc_permission {
#define pc_ischasewalk(sd) ( (sd)->sc.option&OPTION_CHASEWALK )
#define pc_iscarton(sd) ( (sd)->sc.option&OPTION_CART )
#define pc_isfalcon(sd) ( (sd)->sc.option&OPTION_FALCON )
-#define pc_isriding(sd) ( (sd)->sc.option&OPTION_RIDING || (sd)->sc.option&OPTION_DRAGON )
+#define pc_isriding(sd) ( (sd)->sc.option&OPTION_RIDING )
#define pc_isinvisible(sd) ( (sd)->sc.option&OPTION_INVISIBLE )
#define pc_is50overweight(sd) ( (sd)->weight*100 >= (sd)->max_weight*battle_config.natural_heal_weight_rate )
#define pc_is90overweight(sd) ( (sd)->weight*10 >= (sd)->max_weight*9 )
diff --git a/src/map/script.c b/src/map/script.c
index 8dc7ea3da..5b38a0daf 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -7865,7 +7865,7 @@ BUILDIN_FUNC(checkriding)
if( sd == NULL )
return 0;// no player attached, report source
- if( pc_isriding(sd) || pc_isridingwug(sd) )
+ if( pc_isriding(sd) || pc_isridingwug(sd) || sd->sc.option&OPTION_DRAGON )
script_pushint(st, 1);
else
script_pushint(st, 0);
diff --git a/src/map/skill.c b/src/map/skill.c
index e25510a64..066b732f7 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -1337,6 +1337,10 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
sd->itemid = -1;
}
break;
+ case GN_HELLS_PLANT_ATK:
+ sc_start(bl, SC_STUN, 5 + 5 * skilllv, skilllv, skill_get_time2(skillid, skilllv));
+ sc_start(bl, SC_BLEEDING, 20 + 10 * skilllv, skilllv, skill_get_time2(skillid, skilllv));
+ break;
case EL_WIND_SLASH: // Non confirmed rate.
sc_start(bl, SC_BLEEDING, 25, skilllv, skill_get_time(skillid,skilllv));
break;
@@ -10049,6 +10053,7 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, short skilli
break;
case WZ_QUAGMIRE: //The target changes to "all" if used in a gvg map. [Skotlex]
case AM_DEMONSTRATION:
+ case GN_HELLS_PLANT:
if (map_flag_vs(src->m) && battle_config.vs_traps_bctall
&& (src->type&battle_config.vs_traps_bctall))
target = BCT_ALL;
@@ -11186,7 +11191,8 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
case UNT_HELLS_PLANT:
if( battle_check_target(&src->bl,bl,BCT_ENEMY) > 0 )
skill_attack(skill_get_type(GN_HELLS_PLANT_ATK), ss, &src->bl, bl, GN_HELLS_PLANT_ATK, sg->skill_lv, tick, 0);
- sg->limit = DIFF_TICK(tick, sg->tick) + 100;
+ if( ss != bl) //The caster is the only one who can step on the Plants, without destroying them
+ sg->limit = DIFF_TICK(tick, sg->tick) + 100;
break;
case UNT_CLOUD_KILL: