diff options
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/battle.c | 3 | ||||
-rw-r--r-- | src/map/pc.h | 2 | ||||
-rw-r--r-- | src/map/script.c | 2 | ||||
-rw-r--r-- | src/map/skill.c | 8 |
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: |