From 7b270b403ea24811305631d55da5f9d30252ca85 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Sun, 2 Oct 2016 21:03:02 +0530 Subject: Implemented SU_SCRATCH: Max Level: 3 Attack Increases by 50+(50+Level)% Base Level >= 30: Activates a Chance to cast skill again. Every 30 Base Level: Increases the chance to cast skill again. --- src/map/battle.c | 3 +++ src/map/skill.c | 14 ++++++++++++-- src/map/status.c | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/map/battle.c b/src/map/battle.c index fabad4460..538f47bb0 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1671,6 +1671,9 @@ int battle_calc_skillratio(int attack_type, struct block_list *src, struct block case SU_BITE: skillratio += 100; break; + case SU_SCRATCH: + skillratio += -50 + 50 * skill_lv; + break; /** * Arch Bishop **/ diff --git a/src/map/skill.c b/src/map/skill.c index 637c8cdc9..5efe74825 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1415,6 +1415,12 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 case MH_XENO_SLASHER: sc_start2(src, bl, SC_BLOODING, 10 * skill_lv, skill_lv, src->id, skill->get_time(skill_id,skill_lv)); break; + /** + * Summoner + */ + case SU_SCRATCH: + sc_start2(src, bl, SC_BLOODING, (skill_lv * 3), skill_lv, src->id, skill->get_time(skill_id, skill_lv)); // TODO: What's the chance/time? + break; default: skill->additional_effect_unknown(src, bl, &skill_id, &skill_lv, &attack_type, &dmg_lv, &tick); break; @@ -4020,7 +4026,8 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1 case KO_BAKURETSU: case GN_ILLUSIONDOPING: case MH_XENO_SLASHER: - if( flag&1 ) {//Recursive invocation + case SU_SCRATCH: + if (flag&1) { //Recursive invocation // skill->area_temp[0] holds number of targets in area // skill->area_temp[1] holds the id of the original target // skill->area_temp[2] counts how many targets have already been processed @@ -4035,15 +4042,18 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1 break; heal = skill->attack(skill->get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, sflag); - if( skill_id == NPC_VAMPIRE_GIFT && heal > 0 ) { + if (skill_id == NPC_VAMPIRE_GIFT && heal > 0) { clif->skill_nodamage(NULL, src, AL_HEAL, heal, 1); status->heal(src,heal,0,0); } + if (skill_id == SU_SCRATCH && status->get_lv(src) >= 30 && (rnd() % 100 < (int)(status->get_lv(src) / 30) + 10)) // TODO: Need activation chance. + skill->addtimerskill(src, tick + skill->get_delay(skill_id, skill_lv), bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag); } else { switch ( skill_id ) { case NJ_BAKUENRYU: case LG_EARTHDRIVE: case GN_CARTCANNON: + case SU_SCRATCH: clif->skill_nodamage(src,bl,skill_id,skill_lv,1); break; case SR_TIGERCANNON: diff --git a/src/map/status.c b/src/map/status.c index a2a9a5e24..cde02d2bc 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -723,6 +723,7 @@ void initChangeTables(void) * Summoner */ status->set_sc(SU_HIDE, SC_SUHIDE, SI_SUHIDE, SCB_SPEED); + add_sc(SU_SCRATCH, SC_BLOODING); // 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 ); -- cgit v1.2.3-70-g09d2