From aebca964db01c04e6823c3e5c88ee3976a684b15 Mon Sep 17 00:00:00 2001 From: skotlex Date: Thu, 3 Aug 2006 01:50:40 +0000 Subject: [PATCH] - Modified yet again SC_SILENCE after iRO tests from Entwined on IRC. Silence now ONLY blocks skills from being used, it will not stop on-going casts. - Updated status_cast_cancel to also include silence (so the cast bar is cancelled if you are silenced during it) git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8086 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 5 +++++ conf-tmpl/battle/status.conf | 2 +- src/map/status.c | 9 +++++---- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 63cc62e85d..725cc344ce 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,11 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. 2006/08/02 + * Modified yet again SC_SILENCE after iRO tests from Entwined on IRC. + Silence now ONLY blocks skills from being used, it will not stop on-going + casts. [Skotlex] + * Updated status_cast_cancel to also include silence (so the cast bar is + cancelled if you are silenced during it) [Skotlex] * Updated the way SC_SILENCE works. From what I remember (from previous forum discussions) it: 1- Always blocks skills from being used. 2- Will only block a skill when the cast-bar ends IF the skill is targetted. If diff --git a/conf-tmpl/battle/status.conf b/conf-tmpl/battle/status.conf index 8d2587b27e..fae36079e6 100644 --- a/conf-tmpl/battle/status.conf +++ b/conf-tmpl/battle/status.conf @@ -29,7 +29,7 @@ // features. //-------------------------------------------------------------- -// Should skill casting be cancelled when inflicted by curse/stun/sleep/etc? +// Should skill casting be cancelled when inflicted by curse/stun/sleep/etc (includes silence)? status_cast_cancel: no // Will certain skill status-changes be removed on logout? diff --git a/src/map/status.c b/src/map/status.c index b334275e87..3c75ee2262 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -957,6 +957,7 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, int (src->type != BL_PC || ((TBL_PC*)src)->skillitem != skill_num) ) { //Skills blocked through status changes... if (!flag && ( //Blocked only from using the skill (stuff like autospell may still go through + sc->data[SC_SILENCE].timer != -1 || (sc->data[SC_MARIONETTE].timer != -1 && skill_num != CG_MARIONETTE) || (sc->data[SC_MARIONETTE2].timer != -1 && skill_num == CG_MARIONETTE) || sc->data[SC_STEELBODY].timer != -1 || @@ -964,10 +965,6 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, int )) return 0; - //Silence is a special, but weird, case. It prevents skill begin, and skill end only when there's a target. [Skotlex] - if(sc->data[SC_SILENCE].timer != -1 && flag <= (target?1:0)) - return 0; - //Skill blocking. if ( (sc->data[SC_VOLCANO].timer != -1 && skill_num == WZ_ICEWALL) || @@ -5472,6 +5469,10 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val case SC_CHASEWALK: unit_stop_attack(bl); break; + case SC_SILENCE: + if (battle_config.sc_castcancel) + unit_skillcastcancel(bl, 0); + break; } if (vd && pcdb_checkid(vd->class_)) //Only for players sprites, client crashes if they receive this for a mob o.O [Skotlex]