From 27ef6a1440b8803a6204e5bc6b627f403be5717e Mon Sep 17 00:00:00 2001 From: rud0lp20 Date: Sun, 20 May 2012 11:27:50 +0000 Subject: Fixed bugreport:5619 MO_EXTREMITYFIST should now consume all spirit sphere. Fixed bugreport:5632 SR_FALLENEMPIRE should now chain with SR_GATEOFHELL and SR_TIGERCANNON and add bonus damage. Update SR_GATEOFHELL damage formula where sp has now contribution with the damage. Fixed wrong displayed status mdef. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@16131 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/battle.c | 19 +++++++++++++++++-- src/map/pc.h | 2 +- src/map/skill.c | 3 ++- src/map/status.c | 12 ++++++++++++ src/map/unit.c | 7 +++++++ 5 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/map/battle.c b/src/map/battle.c index c6b9dcba9..36f158ff8 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2263,7 +2263,12 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo skillratio += 150; break; case SR_GATEOFHELL: - skillratio += 500 * skill_lv -100; + if( sc && sc->data[SC_COMBO] + && sc->data[SC_COMBO]->val1 == SR_FALLENEMPIRE ) + skillratio += 800 * skill_lv -100; + else + skillratio += 500 * skill_lv -100; + RE_LVL_DMOD(); break; case SR_GENTLETOUCH_QUIET: skillratio += 100 * skill_lv - 100 + sstatus->dex; @@ -2401,7 +2406,17 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo } break; case SR_GATEOFHELL: - ATK_ADD (sstatus->max_hp - status_get_hp(src));//Will have to add the consumed SP part to the formula in the future. [Rytech] + ATK_ADD (sstatus->max_hp - status_get_hp(src)); + if(sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == SR_FALLENEMPIRE){ + ATK_ADD ( (sstatus->sp * (1 + skill_lv * 2 / 10)) + 10 * status_get_lv(src) ); + }else{ + ATK_ADD ( (sstatus->max_sp * (1 + skill_lv * 2 / 10)) + 40 * status_get_lv(src) ); + } + break; + case SR_TIGERCANNON: + if( sc && sc->data[SC_COMBO] + && sc->data[SC_COMBO]->val1 == SR_FALLENEMPIRE ) + ATK_ADDRATE(10);// +10% custom value. break; } } diff --git a/src/map/pc.h b/src/map/pc.h index d06e94de3..af3a867fc 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -649,7 +649,7 @@ enum e_pc_permission { #define pc_rightside_atk(sd) ((sd)->battle_status.rhw.atk + (sd)->battle_status.lhw.atk + (sd)->battle_status.rhw.atk2 + (sd)->battle_status.lhw.atk2) #define pc_leftside_def(sd) ((sd)->battle_status.def2) #define pc_rightside_def(sd) ((sd)->battle_status.def) - #define pc_leftside_mdef(sd) ( (sd)->battle_status.mdef2 - ((sd)->battle_status.vit>>1) ) + #define pc_leftside_mdef(sd) ((sd)->battle_status.mdef2) #define pc_rightside_mdef(sd) ((sd)->battle_status.mdef) #else #define pc_leftside_atk(sd) ((sd)->battle_status.batk + (sd)->battle_status.rhw.atk + (sd)->battle_status.lhw.atk) diff --git a/src/map/skill.c b/src/map/skill.c index f4305d5f8..eaa2b3331 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -12844,7 +12844,8 @@ struct skill_condition skill_get_requirement(struct map_session_data* sd, short req.spiritball = sd->spiritball?sd->spiritball:1; break; } - } + }else if( sc->data[SC_RAISINGDRAGON] && sd->spiritball > 5) + req.spiritball = sd->spiritball; // must consume all regardless of the amount required } break; case SR_RAMPAGEBLASTER: diff --git a/src/map/status.c b/src/map/status.c index 2d777a7ec..b375a5240 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -7156,6 +7156,8 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val struct unit_data *ud = unit_bl2ud(bl); if (ud && !val3) { tick += 300 * battle_config.combo_delay_rate/100; + if(val1 == SR_FALLENEMPIRE)//TODO: better option for this bonus. [malufett] + tick += 1000; ud->attackabletime = gettick()+tick; unit_set_walkdelay(bl, gettick(), tick, 1); } @@ -8239,6 +8241,12 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val if (sd && pc_checkskill(sd, SR_DRAGONCOMBO) > 0) clif_skillinfo(sd,SR_DRAGONCOMBO, INF_SELF_SKILL); break; + case SR_FALLENEMPIRE: + if (sd){ + clif_skillinfo(sd,SR_GATEOFHELL, INF_SELF_SKILL); + clif_skillinfo(sd,SR_TIGERCANNON, INF_SELF_SKILL); + } + break; } break; case SC_RAISINGDRAGON: @@ -8618,6 +8626,10 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const if (pc_checkskill(sd, SR_DRAGONCOMBO) > 0) clif_skillinfo(sd, SR_DRAGONCOMBO, 0); break; + case SR_FALLENEMPIRE: + clif_skillinfo(sd, SR_GATEOFHELL, 0); + clif_skillinfo(sd, SR_TIGERCANNON, 0); + break; } break; diff --git a/src/map/unit.c b/src/map/unit.c index 320a66bf7..b881a3469 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -1196,6 +1196,13 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh casttime = 0; temp = 1; break; + case SR_GATEOFHELL: + case SR_TIGERCANNON: + if (sc && sc->data[SC_COMBO] && + sc->data[SC_COMBO]->val1 == SR_FALLENEMPIRE) + casttime = 0; + temp = 1; + break; case SA_SPELLBREAKER: temp = 1; break; -- cgit v1.2.3-70-g09d2