Bläddra i källkod

- Removed the sc_start_abort define. Since now when a status already exists, it is not modified in any way (no timer deleted, no sc->count reduced), it is completely safe to allow a simple return from within the rest of the function.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@12068 54d463be-8e91-2dee-dedb-b68131a5f0ec
skotlex 17 år sedan
förälder
incheckning
16305634d6
1 ändrade filer med 10 tillägg och 21 borttagningar
  1. 10 21
      src/map/status.c

+ 10 - 21
src/map/status.c

@@ -4998,20 +4998,9 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 				val2 |= sce->val2; // stackable ailments
 			default:
 				if(sce->val1 > val1)
-					return 1; //Return true to not mess up skill animations. [Skotlex
+					return 1; //Return true to not mess up skill animations. [Skotlex]
 		}
 	}
-	//NOTE: avoiding returning after this point, or if you must return a failure, use this to properly cleanup any existing data. 
-#define sc_start_abort(ret) \
-	do{ \
-		if((sce=sc->data[type])){ \
-			--(sc->count); \
-			sc->data[type] = NULL; \
-			if( sce->timer != INVALID_TIMER ) delete_timer(sce->timer, status_change_timer); \
-			ers_free(sc_data_ers, sce); \
-			return ret; \
-		} \
-	}while(0)
 
 	vd = status_get_viewdata(bl);
 	calc_flag = StatusChangeFlagTable[type];
@@ -5208,7 +5197,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 		case SC_WEDDING:
 		case SC_XMAS:
 		case SC_SUMMER:
-			if (!vd) sc_start_abort(0);
+			if (!vd) return 0;
 			//Store previous values as they could be removed.
 			val1 = vd->class_;
 			val2 = vd->weapon;
@@ -5439,7 +5428,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 			} else {
 				struct status_data *b_status = status_get_base_status(bl);
 				if (!b_status)
-					sc_start_abort(0);
+					return 0;
 
 				val3 = 0;
 				val2 = b_status->str>>1;
@@ -5477,7 +5466,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 			struct status_change_entry *psce = psc?psc->data[SC_MARIONETTE]:NULL;
 			int stat,max;
 			if (!psce)
-				sc_start_abort(0);
+				return 0;
 			val2 = tick /1000;
 			val3 = val4 = 0;
 			if (sd) {
@@ -5514,7 +5503,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 				val4 |= stat;
 			} else {
 				struct status_data *b_status = status_get_base_status(bl);
-				if (!b_status) sc_start_abort(0);
+				if (!b_status) return 0;
 				max = 0xFF; //Assume a 256 max parameter
 				//Str
 				stat = (psce->val3>>16)&0xFF;
@@ -5597,7 +5586,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 
 		case SC_COMA: //Coma. Sends a char to 1HP. If val2, do not zap sp
 			status_zap(bl, status->hp-1, val2?0:status->sp);
-			sc_start_abort(1);
+			return 1;
 			break;
 		case SC_CLOSECONFINE2:
 		{
@@ -5613,7 +5602,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 					sce2->timer = add_timer(gettick()+tick+1000, status_change_timer, src->id, SC_CLOSECONFINE);
 				}
 			} else //Status failed.
-				sc_start_abort(0);
+				return 0;
 		}
 			break;
 		case SC_KAITE:
@@ -5901,7 +5890,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 			if( calc_flag == SCB_NONE && StatusSkillChangeTable[type] == 0 && StatusIconChangeTable[type] == 0 )
 			{	//Status change with no calc, no icon, and no skill associated...? 
 				ShowError("UnknownStatusChange [%d]\n", type);
-				sc_start_abort(0);
+				return 0;
 			}
 	}
 	else //Special considerations when loading SC data.
@@ -6104,6 +6093,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 	else if (sd) //Send packet to self otherwise (disguised player?)
 		clif_status_load(bl,StatusIconChangeTable[type],1);
 
+	//Don't trust the previous sce assignment, in case the SC ended somewhere between there and here.
 	if((sce=sc->data[type]))
 	{// reuse old sc
 		if( sce->timer != INVALID_TIMER )
@@ -6121,7 +6111,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 	if (tick >= 0)
 		sce->timer = add_timer(gettick() + tick, status_change_timer, bl->id, type);
 	else
-		sce->timer = -1; //Infinite duration
+		sce->timer = INVALID_TIMER; //Infinite duration
 
 	if (calc_flag)
 		status_calc_bl(bl,calc_flag);
@@ -6142,7 +6132,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 			ud->state.running = unit_run(bl);
 	}
 	return 1;
-#undef sc_start_abort
 }
 /*==========================================
  * ƒXƒe�[ƒ^ƒXˆÙ�í‘S‰ð�œ