Selaa lähdekoodia

Fixed some more SC_STONEWAIT issues (#7212)

Fixed PR_STRECOVERY not clearing SC_STONEWAIT
Fixed that ending SC_STONEWAIT manually still triggered SC_STONE

Thanks to @Singe-Horizontal and @aleos89
Lemongrass3110 2 vuotta sitten
vanhempi
commit
5f4fd5c98b
2 muutettua tiedostoa jossa 6 lisäystä ja 5 poistoa
  1. 4 3
      src/map/skill.cpp
  2. 2 2
      src/map/status.cpp

+ 4 - 3
src/map/skill.cpp

@@ -8803,15 +8803,16 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 			clif_skill_nodamage(src,bl,skill_id,skill_lv,0);
 			break;
 		}
-		if (tsc && tsc->opt1) {
+		if (tsc) {
 			status_change_end(bl, SC_FREEZE);
+			status_change_end(bl, SC_STONEWAIT);
 			status_change_end(bl, SC_STONE);
 			status_change_end(bl, SC_SLEEP);
 			status_change_end(bl, SC_STUN);
 			status_change_end(bl, SC_WHITEIMPRISON);
+			status_change_end(bl, SC_STASIS);
+			status_change_end(bl, SC_NETHERWORLD);
 		}
-		status_change_end(bl, SC_STASIS);
-		status_change_end(bl, SC_NETHERWORLD);
 		if(battle_check_undead(tstatus->race,tstatus->def_ele))
 			skill_addtimerskill(src, tick+1000, bl->id, 0, 0, skill_id, skill_lv, 100, flag);
 		clif_skill_nodamage(src,bl,skill_id,skill_lv,1);

+ 2 - 2
src/map/status.cpp

@@ -13434,8 +13434,8 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid)
 	if(opt_flag[SCF_ONTOUCH] && sd && !sd->state.warping && map_getcell(bl->m,bl->x,bl->y,CELL_CHKNPC))
 		npc_touch_area_allnpc(sd,bl->m,bl->x,bl->y); // Trigger on-touch event.
 
-	// Needed to be here to make sure OPT1_STONEWAIT has been cleared from the target
-	if (type == SC_STONEWAIT)
+	// Needed to be here to make sure OPT1_STONEWAIT has been cleared from the target (only on natural expiration of the stone wait timer)
+	if (type == SC_STONEWAIT && tid != INVALID_TIMER)
 		status_change_start(bl, bl, SC_STONE, 100, sce->val1, sce->val2, 0, 0, sce->val3, SCSTART_NOAVOID);
 
 	ers_free(sc_data_ers, sce);