diff options
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/battle.c | 13 | ||||
-rw-r--r-- | src/map/skill.c | 1 | ||||
-rw-r--r-- | src/map/status.c | 15 |
3 files changed, 24 insertions, 5 deletions
diff --git a/src/map/battle.c b/src/map/battle.c index 001da3edd..f7ac60031 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3206,6 +3206,19 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam status_change_end(bl, SC_KYRIE, INVALID_TIMER); } + if ((sce = sc->data[SC_TUNAPARTY]) != NULL && damage > 0) { + clif->specialeffect(bl, 336, AREA); + sce->val2 -= (int)cap_value(damage, INT_MIN, INT_MAX); + if (sce->val2 >= 0) { + damage = 0; + } else { + damage = -sce->val2; + } + if (sce->val2 <= 0) { + status_change_end(bl, SC_TUNAPARTY, INVALID_TIMER); + } + } + if( sc->data[SC_MEIKYOUSISUI] && rnd()%100 < 40 ) // custom value damage = 0; diff --git a/src/map/skill.c b/src/map/skill.c index 333e15de5..4acc3da15 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -5968,6 +5968,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin case PR_KYRIE: case MER_KYRIE: + case SU_TUNAPARTY: clif->skill_nodamage(bl, bl, skill_id, -1, sc_start(src, bl, type, 100, skill_lv, skill->get_time(skill_id, skill_lv))); break; diff --git a/src/map/status.c b/src/map/status.c index 7d94d729b..27bbafb74 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -734,6 +734,7 @@ void initChangeTables(void) status->set_sc(SU_SCAROFTAROU, SC_BITESCAR, SI_BITESCAR, SCB_NONE); status->set_sc(SU_ARCLOUSEDASH, SC_ARCLOUSEDASH, SI_ARCLOUSEDASH, SCB_AGI | SCB_SPEED); add_sc(SU_LUNATICCARROTBEAT, SC_STUN); + status->set_sc(SU_TUNAPARTY, SC_TUNAPARTY, SI_TUNAPARTY, SCB_NONE); // Elemental Spirit summoner's 'side' status changes. status->set_sc( EL_CIRCLE_OF_FIRE , SC_CIRCLE_OF_FIRE_OPTION, SI_CIRCLE_OF_FIRE_OPTION, SCB_NONE ); @@ -7552,6 +7553,7 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t return 0; break; case SC_KYRIE: + case SC_TUNAPARTY: if (bl->type == BL_MOB) return 0; break; @@ -9811,11 +9813,14 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t val4 = 0; break; case SC_ARCLOUSEDASH: -+ val2 = 15 + 5 * val1; // AGI -+ val3 = 25; // Move speed increase -+ if (sd && (sd->class_&MAPID_BASEMASK) == MAPID_SUMMONER) -+ val4 = 10; // Ranged ATK increase -+ break; + val2 = 15 + 5 * val1; // AGI + val3 = 25; // Move speed increase + if (sd && (sd->class_&MAPID_BASEMASK) == MAPID_SUMMONER) + val4 = 10; // Ranged ATK increase + break; + case SC_TUNAPARTY: + val2 = (st->max_hp * (val1 * 10) / 100); // %Max HP to absorb + break; default: if (calc_flag == SCB_NONE && status->dbs->SkillChangeTable[type] == 0 && status->dbs->IconChangeTable[type] == 0) { //Status change with no calc, no icon, and no skill associated...? |