From 79d978e0102b00f83a42cc3e39814fc531d32105 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 Date: Wed, 16 Mar 2022 21:54:12 +0100 Subject: [PATCH] Cleanup for some Soul Reaper skills (#6700) --- db/re/status.yml | 8 ++++---- src/map/skill.cpp | 17 +++++------------ src/map/status.cpp | 9 +++++++++ 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/db/re/status.yml b/db/re/status.yml index 23983da23e..1dd02be4b8 100644 --- a/db/re/status.yml +++ b/db/re/status.yml @@ -6975,7 +6975,7 @@ Body: NoDispell: true NoBanishingBuster: true NoClearance: true - End: + Fail: Spirit: true Soulgolem: true Soulfalcon: true @@ -6990,7 +6990,7 @@ Body: NoDispell: true NoBanishingBuster: true NoClearance: true - End: + Fail: Spirit: true Soulgolem: true Soulshadow: true @@ -7006,7 +7006,7 @@ Body: NoDispell: true NoBanishingBuster: true NoClearance: true - End: + Fail: Spirit: true Soulgolem: true Soulshadow: true @@ -7022,7 +7022,7 @@ Body: NoDispell: true NoBanishingBuster: true NoClearance: true - End: + Fail: Spirit: true Soulshadow: true Soulfalcon: true diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 8ce6a63e45..cfb63ce995 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -9990,20 +9990,13 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case SP_SOULSHADOW: case SP_SOULFALCON: case SP_SOULFAIRY: - if (sd && !dstsd) { // Only player's can be soul linked. - clif_skill_fail(sd, skill_id, USESKILL_FAIL,0); - break; - } - if (tsc) { - if (tsc->data[skill_get_sc(skill_id)]) { // Allow refreshing an already active soul link. - clif_skill_nodamage(src, bl, skill_id, skill_lv, sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv))); - break; - } else if (tsc->data[SC_SPIRIT] || tsc->data[SC_SOULGOLEM] || tsc->data[SC_SOULSHADOW] || tsc->data[SC_SOULFALCON] || tsc->data[SC_SOULFAIRY]) { // Soul links from Soul Linker and Soul Reaper skills don't stack. - clif_skill_fail(sd, skill_id, USESKILL_FAIL, 0); - break; + if( sc_start( src, bl, type, 100, skill_lv, skill_get_time( skill_id, skill_lv ) ) ){ + clif_skill_nodamage( src, bl, skill_id, skill_lv, 1 ); + }else{ + if( sd ){ + clif_skill_fail( sd, skill_id, USESKILL_FAIL, 0 ); } } - clif_skill_nodamage(src, bl, skill_id, skill_lv, sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv))); break; case SP_SOULREVOLVE: diff --git a/src/map/status.cpp b/src/map/status.cpp index 8c79ade399..6f48696a75 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -9544,6 +9544,15 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty return 0; } break; + case SC_SOULGOLEM: + case SC_SOULSHADOW: + case SC_SOULFALCON: + case SC_SOULFAIRY: + if( sd == nullptr ){ + // Status change is only applicable for players + return 0; + } + break; } // Before overlapping fail, one must check for status cured.