Browse Source

- 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

skotlex 19 years ago
parent
commit
aebca964db
3 changed files with 11 additions and 5 deletions
  1. 5 0
      Changelog-Trunk.txt
  2. 1 1
      conf-tmpl/battle/status.conf
  3. 5 4
      src/map/status.c

+ 5 - 0
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

+ 1 - 1
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?

+ 5 - 4
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]