summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDastgir Pojee <dastgirp@gmail.com>2016-10-03 19:06:46 +0530
committerhemagx <ibrahem.h.basyone@gmail.com>2016-10-22 02:22:11 +0200
commit69f3d4815c09ee07ce4ef3c5163411ba05c81731 (patch)
tree5519feea8bc27ce0e668f11ec31c7cfb3adc6ff7
parent7b6feb8f49d9c2832e505583d0ac5ebf530b8b11 (diff)
downloadhercules-69f3d4815c09ee07ce4ef3c5163411ba05c81731.tar.gz
hercules-69f3d4815c09ee07ce4ef3c5163411ba05c81731.tar.bz2
hercules-69f3d4815c09ee07ce4ef3c5163411ba05c81731.tar.xz
hercules-69f3d4815c09ee07ce4ef3c5163411ba05c81731.zip
Implemented SU_TUNAPARTY Skill.
Protects the target for 30 seconds. Tuna's Defense Power: (10+(20*(SkillLv-1)))% of Caster's MaxHP
-rw-r--r--src/map/battle.c13
-rw-r--r--src/map/skill.c1
-rw-r--r--src/map/status.c15
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...?