From c845207ead7f60b26fd20d9143c09f20416fede6 Mon Sep 17 00:00:00 2001 From: rud0lp20 Date: Tue, 29 May 2012 16:25:25 +0000 Subject: Fixed bugreport:5850 GN_HELLS_PLANT damage formula and behavior are now updated. Fixed bugreport:5848 RK_DRAGONTRAINING should now work normally. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@16166 54d463be-8e91-2dee-dedb-b68131a5f0ec --- db/pre-re/skill_cast_db.txt | 6 +++--- db/re/skill_cast_db.txt | 6 +++--- src/map/battle.c | 3 ++- src/map/pc.h | 2 +- src/map/script.c | 2 +- src/map/skill.c | 8 +++++++- 6 files changed, 17 insertions(+), 10 deletions(-) diff --git a/db/pre-re/skill_cast_db.txt b/db/pre-re/skill_cast_db.txt index 4fb002d67..9fe7b4872 100644 --- a/db/pre-re/skill_cast_db.txt +++ b/db/pre-re/skill_cast_db.txt @@ -1604,9 +1604,9 @@ 2488,0,0,0,10000:12000:14000:16000:18000,0,0 //-- GN_HELLS_PLANT -2490,3000:3500:4000:4500:5000,500,0,40000,0,0 -//-- GN_HELLS_PLANT_ATK //CHECK Guessing durations 1 and 2 are for stun and bleeding. -2491,0,0,0,6000,16000,0 +2490,3000:3500:4000:4500:5000,500,0,14000:21000:28000:35000:42000,0,0,0 +//-- GN_HELLS_PLANT_ATK +2491,0,0,0,20000,0,0,0 //-- GN_MANDRAGORA 2492,1000,500,0,30000,0,10000 //-- GN_SLINGITEM //CHECK Whats durations 1 and 2 used for? diff --git a/db/re/skill_cast_db.txt b/db/re/skill_cast_db.txt index 4ec24f553..14291896f 100644 --- a/db/re/skill_cast_db.txt +++ b/db/re/skill_cast_db.txt @@ -1605,9 +1605,9 @@ 2488,0,0,0,10000:12000:14000:16000:18000,0,0,0 //-- GN_HELLS_PLANT -2490,3000:3500:4000:4500:5000,500,0,40000,0,0,0 -//-- GN_HELLS_PLANT_ATK //CHECK Guessing durations 1 and 2 are for stun and bleeding. -2491,0,0,0,6000,16000,0,0 +2490,3000:3500:4000:4500:5000,500,0,14000:21000:28000:35000:42000,0,0,0 +//-- GN_HELLS_PLANT_ATK +2491,0,0,0,20000,0,0,0 //-- GN_MANDRAGORA 2492,1000,500,0,30000,0,10000,0 //-- GN_SLINGITEM //CHECK Whats durations 1 and 2 used for? 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: -- cgit v1.2.3-60-g2f50