diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index d6ad9c05f2..046f30a080 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -37763,12 +37763,32 @@ Body: Critical: true Range: 7 Hit: Multi_Hit - HitCount: -8 + HitCount: 3 Element: Weapon - SplashArea: 1 + SplashArea: 2 CastCancel: true - AfterCastActDelay: 500 - Cooldown: 3000 + AfterCastActDelay: 300 + Cooldown: + - Level: 1 + Time: 3000 + - Level: 2 + Time: 2800 + - Level: 3 + Time: 2600 + - Level: 4 + Time: 2400 + - Level: 5 + Time: 2200 + - Level: 6 + Time: 2000 + - Level: 7 + Time: 1800 + - Level: 8 + Time: 1600 + - Level: 9 + Time: 1400 + - Level: 10 + Time: 1000 Requires: SpCost: - Level: 1 @@ -37793,7 +37813,6 @@ Body: Amount: 55 Weapon: Katar: true - State: Hidden - Id: 5288 Name: SHC_SHADOW_SENSE Description: Shadow Sense @@ -37813,7 +37832,7 @@ Body: CastCancel: true AfterCastActDelay: 500 Duration1: 3000 - Cooldown: 1500 + Cooldown: 750 Requires: SpCost: 40 Status: @@ -37889,10 +37908,10 @@ Body: Hit: Multi_Hit HitCount: 1 Element: Weapon - GiveAp: 3 + GiveAp: 1 CastCancel: true AfterCastActDelay: 500 - Cooldown: 3000 + Cooldown: 1000 Requires: SpCost: - Level: 1 diff --git a/src/map/battle.cpp b/src/map/battle.cpp index d79774cd7e..bd6cccfd6a 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -5483,7 +5483,12 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list * RE_LVL_DMOD(100); break; case SHC_SAVAGE_IMPACT: - skillratio += -100 + 350 * skill_lv + 5 * sstatus->pow; + skillratio += -100 + 60 * skill_lv + 5 * sstatus->pow; + + if( sc != nullptr && sc->getSCE( SC_SHADOW_EXCEED ) ){ + skillratio += 100 * skill_lv; + } + RE_LVL_DMOD(100); break; case SHC_ETERNAL_SLASH: @@ -6581,6 +6586,9 @@ static struct Damage initialize_weapon_data(struct block_list *src, struct block if (sd && sd->status.weapon == W_2HAXE) wd.div_ = 3; break; + case SHC_SAVAGE_IMPACT: + wd.div_ = wd.div_ + wd.miscflag; + break; } } else { bool is_long = false; diff --git a/src/map/skill.cpp b/src/map/skill.cpp index e33456b980..60e3ea950e 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -5760,6 +5760,20 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);// Trigger animation on servants. break; case SHC_SAVAGE_IMPACT: + if( sc && sc->getSCE( SC_CLOAKINGEXCEED ) ){ + skill_area_temp[0] = 2; + status_change_end( src, SC_CLOAKINGEXCEED ); + } + + // Jump to the target before attacking. + if( skill_check_unit_movepos( 5, src, bl->x, bl->y, 0, 1 ) ){ + skill_blown( src, src, 1, direction_opposite( static_cast( map_calc_dir( bl, src->x, src->y ) ) ), BLOWN_NONE ); + } + + // Trigger animation + clif_skill_nodamage(src, bl, skill_id, skill_lv, 1); + break; + case SHC_FATAL_SHADOW_CROW: { uint8 dir = map_calc_dir(bl, src->x, src->y); // dir based on target as we move player based on target location diff --git a/src/map/unit.cpp b/src/map/unit.cpp index ea7fcb670b..f905299264 100644 --- a/src/map/unit.cpp +++ b/src/map/unit.cpp @@ -2061,7 +2061,7 @@ int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill_id, ui if (!src->prev) return 0; // Warped away! - } else if( sc->getSCE(SC_CLOAKINGEXCEED) && !(sc->getSCE(SC_CLOAKINGEXCEED)->val4&4) && skill_id != GC_CLOAKINGEXCEED && skill_id != SHC_SHADOW_STAB) { + } else if( sc->getSCE(SC_CLOAKINGEXCEED) && !(sc->getSCE(SC_CLOAKINGEXCEED)->val4&4) && skill_id != GC_CLOAKINGEXCEED && skill_id != SHC_SHADOW_STAB && skill_id != SHC_SAVAGE_IMPACT ) { status_change_end(src,SC_CLOAKINGEXCEED); if (!src->prev)