Переглянути джерело

Follow up r16560 Chemical Protection skills are now to its official behavior.(bugreport:6396)

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16567 54d463be-8e91-2dee-dedb-b68131a5f0ec
rud0lp20 12 роки тому
батько
коміт
9b0ba363d0
1 змінених файлів з 13 додано та 11 видалено
  1. 13 11
      src/map/skill.c

+ 13 - 11
src/map/skill.c

@@ -6177,7 +6177,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 	case AM_CP_HELM:
 		{
 			unsigned int equip[] = {EQP_WEAPON, EQP_SHIELD, EQP_ARMOR, EQP_HEAD_TOP};
-			enum sc_type scid = (sc_type)(SC_STRIPWEAPON + (skillid - AM_CP_WEAPON));
 
 			if( sd && ( bl->type != BL_PC || ( dstsd && pc_checkequip(dstsd,equip[skillid - AM_CP_WEAPON]) < 0 ) ) ){
 				clif_skill_fail(sd,skillid,USESKILL_FAIL_LEVEL,0);
@@ -6185,7 +6184,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 				return 0;
 			}
 
-			status_change_end(bl, scid, INVALID_TIMER);
 			clif_skill_nodamage(src,bl,skillid,skilllv,
 				sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
 		}
@@ -6883,15 +6881,19 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 	// Full Chemical Protection
 	case CR_FULLPROTECTION:
 		{
-			int i, skilltime;
-			skilltime = skill_get_time(skillid,skilllv);
-			if (!tsc) {
-				clif_skill_nodamage(src,bl,skillid,skilllv,0);
-				break;
-			}
-			for (i=0; i<4; i++) {
-				status_change_end(bl, (sc_type)(SC_STRIPWEAPON + i), INVALID_TIMER);
+			unsigned int equip[] = {EQP_WEAPON, EQP_SHIELD, EQP_ARMOR, EQP_HEAD_TOP};
+			int i, s = 0, skilltime = skill_get_time(skillid,skilllv);
+
+			for (i=0 ; i<4; i++) {
+				if( bl->type != BL_PC || ( dstsd && pc_checkequip(dstsd,equip[i]) < 0 ) )
+					continue;
 				sc_start(bl,(sc_type)(SC_CP_WEAPON + i),100,skilllv,skilltime);
+				s++;
+			}
+			if( sd && !s ){
+				clif_skill_fail(sd,skillid,USESKILL_FAIL_LEVEL,0);
+				map_freeblock_unlock(); // Don't consume item requirements
+				return 0;
 			}
 			clif_skill_nodamage(src,bl,skillid,skilllv,1);
 		}
@@ -8794,7 +8796,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 					status_change_end(bl, SC_MARIONETTE, INVALID_TIMER);
 					status_change_end(bl, SC_HARMONIZE, INVALID_TIMER);
 			}
-			if( skill_area_temp[2] > 0){
+			if( skill_area_temp[2] == 1 ){
 				clif_skill_damage(src,src,tick, status_get_amotion(src), 0, -30000, 1, skillid, skilllv, 6);
 				sc_start(src, SC_STOP, 100, skilllv, skill_get_time(skillid, skilllv));
 			}