Pārlūkot izejas kodu

* Removed unconditional redundant status change checks before status_change_end calls (follow up to r12890).

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14671 54d463be-8e91-2dee-dedb-b68131a5f0ec
ai4rei 14 gadi atpakaļ
vecāks
revīzija
a7810e9646
6 mainītis faili ar 61 papildinājumiem un 122 dzēšanām
  1. 1 0
      Changelog-Trunk.txt
  2. 1 1
      src/map/atcommand.c
  3. 29 61
      src/map/map.c
  4. 10 20
      src/map/pc.c
  5. 18 36
      src/map/skill.c
  6. 2 4
      src/map/status.c

+ 1 - 0
Changelog-Trunk.txt

@@ -1,6 +1,7 @@
 Date	Added
 
 2011/01/14
+	* Removed unconditional redundant status change checks before status_change_end calls (follow up to r12890). [Ai4rei]
 	* Replaced remaining occurences of '-1' with 'INVALID_TIMER', where appropriate (follow up to r12998). [Ai4rei]
 	* Removed 'gui' plug-in (support plug-in for 3rd party eAthena GUI front-ends) (topic:262934). [Ai4rei]
 2011/01/13

+ 1 - 1
src/map/atcommand.c

@@ -7615,7 +7615,7 @@ static int atcommand_mutearea_sub(struct block_list *bl,va_list ap)
 		pl_sd->status.manner -= time;
 		if (pl_sd->status.manner < 0)
 			sc_start(&pl_sd->bl,SC_NOCHAT,100,0,0);
-		else if (pl_sd->sc.data[SC_NOCHAT])
+		else
 			status_change_end(&pl_sd->bl, SC_NOCHAT, INVALID_TIMER);
 	}
 	return 0;

+ 29 - 61
src/map/map.c

@@ -393,19 +393,11 @@ int map_moveblock(struct block_list *bl, int x1, int y1, unsigned int tick)
 	//TODO: Perhaps some outs of bounds checking should be placed here?
 	if (bl->type&BL_CHAR) {
 		skill_unit_move(bl,tick,2);
-		sc = status_get_sc(bl);
-		if (sc && sc->count) {
-			if (sc->data[SC_CLOSECONFINE])
-				status_change_end(bl, SC_CLOSECONFINE, INVALID_TIMER);
-			if (sc->data[SC_CLOSECONFINE2])
-				status_change_end(bl, SC_CLOSECONFINE2, INVALID_TIMER);
-//			if (sc->data[SC_BLADESTOP]) //Won't stop when you are knocked away, go figure...
-//				status_change_end(bl, SC_BLADESTOP, INVALID_TIMER);
-			if (sc->data[SC_TATAMIGAESHI])
-				status_change_end(bl, SC_TATAMIGAESHI, INVALID_TIMER);
-			if (sc->data[SC_MAGICROD])
-				status_change_end(bl, SC_MAGICROD, INVALID_TIMER);
-		}
+		status_change_end(bl, SC_CLOSECONFINE, INVALID_TIMER);
+		status_change_end(bl, SC_CLOSECONFINE2, INVALID_TIMER);
+//		status_change_end(bl, SC_BLADESTOP, INVALID_TIMER); //Won't stop when you are knocked away, go figure...
+		status_change_end(bl, SC_TATAMIGAESHI, INVALID_TIMER);
+		status_change_end(bl, SC_MAGICROD, INVALID_TIMER);
 	} else
 	if (bl->type == BL_NPC)
 		npc_unsetcells((TBL_NPC*)bl);
@@ -1580,64 +1572,40 @@ int map_quit(struct map_session_data *sd)
 	if( sd->sc.count )
 	{
 		//Status that are not saved...
-		if(sd->sc.data[SC_BOSSMAPINFO])
-			status_change_end(&sd->bl, SC_BOSSMAPINFO, INVALID_TIMER);
-		if(sd->sc.data[SC_AUTOTRADE])
-			status_change_end(&sd->bl, SC_AUTOTRADE, INVALID_TIMER);
-		if(sd->sc.data[SC_SPURT])
-			status_change_end(&sd->bl, SC_SPURT, INVALID_TIMER);
-		if(sd->sc.data[SC_BERSERK])
-			status_change_end(&sd->bl, SC_BERSERK, INVALID_TIMER);
-		if(sd->sc.data[SC_TRICKDEAD])
-			status_change_end(&sd->bl, SC_TRICKDEAD, INVALID_TIMER);
-		if(sd->sc.data[SC_GUILDAURA])
-			status_change_end(&sd->bl, SC_GUILDAURA, INVALID_TIMER);
+		status_change_end(&sd->bl, SC_BOSSMAPINFO, INVALID_TIMER);
+		status_change_end(&sd->bl, SC_AUTOTRADE, INVALID_TIMER);
+		status_change_end(&sd->bl, SC_SPURT, INVALID_TIMER);
+		status_change_end(&sd->bl, SC_BERSERK, INVALID_TIMER);
+		status_change_end(&sd->bl, SC_TRICKDEAD, INVALID_TIMER);
+		status_change_end(&sd->bl, SC_GUILDAURA, INVALID_TIMER);
 		if(sd->sc.data[SC_ENDURE] && sd->sc.data[SC_ENDURE]->val4)
 			status_change_end(&sd->bl, SC_ENDURE, INVALID_TIMER); //No need to save infinite endure.
-		if(sd->sc.data[SC_WEIGHT50])
-			status_change_end(&sd->bl, SC_WEIGHT50, INVALID_TIMER);
-		if(sd->sc.data[SC_WEIGHT90])
-			status_change_end(&sd->bl, SC_WEIGHT90, INVALID_TIMER);
+		status_change_end(&sd->bl, SC_WEIGHT50, INVALID_TIMER);
+		status_change_end(&sd->bl, SC_WEIGHT90, INVALID_TIMER);
 		if (battle_config.debuff_on_logout&1) {
-			if(sd->sc.data[SC_ORCISH])
-				status_change_end(&sd->bl, SC_ORCISH, INVALID_TIMER);
-			if(sd->sc.data[SC_STRIPWEAPON])
-				status_change_end(&sd->bl, SC_STRIPWEAPON, INVALID_TIMER);
-			if(sd->sc.data[SC_STRIPARMOR])
-				status_change_end(&sd->bl, SC_STRIPARMOR, INVALID_TIMER);
-			if(sd->sc.data[SC_STRIPSHIELD])
-				status_change_end(&sd->bl, SC_STRIPSHIELD, INVALID_TIMER);
-			if(sd->sc.data[SC_STRIPHELM])
-				status_change_end(&sd->bl, SC_STRIPHELM, INVALID_TIMER);
-			if(sd->sc.data[SC_EXTREMITYFIST])
-				status_change_end(&sd->bl, SC_EXTREMITYFIST, INVALID_TIMER);
-			if(sd->sc.data[SC_EXPLOSIONSPIRITS])
-				status_change_end(&sd->bl, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_ORCISH, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_STRIPWEAPON, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_STRIPARMOR, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_STRIPSHIELD, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_STRIPHELM, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_EXTREMITYFIST, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
 			if(sd->sc.data[SC_REGENERATION] && sd->sc.data[SC_REGENERATION]->val4)
 				status_change_end(&sd->bl, SC_REGENERATION, INVALID_TIMER);
 			//TO-DO Probably there are way more NPC_type negative status that are removed
-			if(sd->sc.data[SC_CHANGEUNDEAD])
-				status_change_end(&sd->bl, SC_CHANGEUNDEAD, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_CHANGEUNDEAD, INVALID_TIMER);
 			// Both these statuses are removed on logout. [L0ne_W0lf]
-			if(sd->sc.data[SC_SLOWCAST])
-				status_change_end(&sd->bl, SC_SLOWCAST, INVALID_TIMER);
-			if(sd->sc.data[SC_CRITICALWOUND])
-				status_change_end(&sd->bl, SC_CRITICALWOUND, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_SLOWCAST, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_CRITICALWOUND, INVALID_TIMER);
 		}
 		if (battle_config.debuff_on_logout&2)
 		{
-			if(sd->sc.data[SC_MAXIMIZEPOWER])
-				status_change_end(&sd->bl, SC_MAXIMIZEPOWER, INVALID_TIMER);
-			if(sd->sc.data[SC_MAXOVERTHRUST])
-				status_change_end(&sd->bl, SC_MAXOVERTHRUST, INVALID_TIMER);
-			if(sd->sc.data[SC_STEELBODY])
-				status_change_end(&sd->bl, SC_STEELBODY, INVALID_TIMER);
-			if(sd->sc.data[SC_PRESERVE])
-				status_change_end(&sd->bl, SC_PRESERVE, INVALID_TIMER);
-			if(sd->sc.data[SC_KAAHI])
-				status_change_end(&sd->bl, SC_KAAHI, INVALID_TIMER);
-			if(sd->sc.data[SC_SPIRIT])
-				status_change_end(&sd->bl, SC_SPIRIT, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_MAXIMIZEPOWER, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_MAXOVERTHRUST, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_STEELBODY, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_PRESERVE, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_KAAHI, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_SPIRIT, INVALID_TIMER);
 		}
 	}
 	

+ 10 - 20
src/map/pc.c

@@ -4101,18 +4101,12 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y
 		{ // Cancel some map related stuff.
 			if (sd->sc.data[SC_JAILED])
 				return 1; //You may not get out!
-			if (sd->sc.data[SC_BOSSMAPINFO])
-				status_change_end(&sd->bl, SC_BOSSMAPINFO, INVALID_TIMER);
-			if (sd->sc.data[SC_WARM])
-				status_change_end(&sd->bl, SC_WARM, INVALID_TIMER);
-			if (sd->sc.data[SC_SUN_COMFORT])
-				status_change_end(&sd->bl, SC_SUN_COMFORT, INVALID_TIMER);
-			if (sd->sc.data[SC_MOON_COMFORT])
-				status_change_end(&sd->bl, SC_MOON_COMFORT, INVALID_TIMER);
-			if (sd->sc.data[SC_STAR_COMFORT])
-				status_change_end(&sd->bl, SC_STAR_COMFORT, INVALID_TIMER);
-			if (sd->sc.data[SC_MIRACLE])
-				status_change_end(&sd->bl, SC_MIRACLE, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_BOSSMAPINFO, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_WARM, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_SUN_COMFORT, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_MOON_COMFORT, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_STAR_COMFORT, INVALID_TIMER);
+			status_change_end(&sd->bl, SC_MIRACLE, INVALID_TIMER);
 			if (sd->sc.data[SC_KNOWLEDGE]) {
 				struct status_change_entry *sce = sd->sc.data[SC_KNOWLEDGE];
 				if (sce->timer != INVALID_TIMER)
@@ -7241,8 +7235,7 @@ int pc_unequipitem(struct map_session_data *sd,int n,int flag)
 		sd->status.weapon = sd->weapontype2;
 		pc_calcweapontype(sd);
 		clif_changelook(&sd->bl,LOOK_WEAPON,sd->status.weapon);
-		if(sd->sc.data[SC_DANCING]) //When unequipping, stop dancing. [Skotlex]
-			status_change_end(&sd->bl, SC_DANCING, INVALID_TIMER);
+		status_change_end(&sd->bl, SC_DANCING, INVALID_TIMER); //When unequipping, stop dancing. [Skotlex]
 	}
 	if(sd->status.inventory[n].equip & EQP_HAND_L) {
 		sd->status.shield = sd->weapontype2 = 0;
@@ -7272,10 +7265,8 @@ int pc_unequipitem(struct map_session_data *sd,int n,int flag)
 
 	if(sd->status.inventory[n].equip & EQP_ARMOR) {
 		// On Armor Change...
-		if( sd->sc.data[SC_BENEDICTIO] )
-			status_change_end(&sd->bl, SC_BENEDICTIO, INVALID_TIMER);
-		if( sd->sc.data[SC_ARMOR_RESIST] )
-			status_change_end(&sd->bl, SC_ARMOR_RESIST, INVALID_TIMER);
+		status_change_end(&sd->bl, SC_BENEDICTIO, INVALID_TIMER);
+		status_change_end(&sd->bl, SC_ARMOR_RESIST, INVALID_TIMER);
 	}
 
 	if( sd->state.autobonus&sd->status.inventory[n].equip )
@@ -7735,8 +7726,7 @@ int map_night_timer(int tid, unsigned int tick, int id, intptr data)
 void pc_setstand(struct map_session_data *sd){
 	nullpo_retv(sd);
 
-	if(sd->sc.data[SC_TENSIONRELAX])
-		status_change_end(&sd->bl, SC_TENSIONRELAX, INVALID_TIMER);
+	status_change_end(&sd->bl, SC_TENSIONRELAX, INVALID_TIMER);
 
 	//Reset sitting tick.
 	sd->ssregen.tick.hp = sd->ssregen.tick.sp = 0;

+ 18 - 36
src/map/skill.c

@@ -2338,8 +2338,7 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr data)
 					} else {
 						struct status_change *sc = status_get_sc(src);
 						if(sc) {
-							if(sc->data[SC_MAGICPOWER])
-								status_change_end(src, SC_MAGICPOWER, INVALID_TIMER);
+							status_change_end(src, SC_MAGICPOWER, INVALID_TIMER);
 							if(sc->data[SC_SPIRIT] &&
 								sc->data[SC_SPIRIT]->val2 == SL_WIZARD &&
 								sc->data[SC_SPIRIT]->val3 == skl->skill_id)
@@ -2662,16 +2661,14 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 
 	case MO_INVESTIGATE:
 		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-		if (sc && sc->data[SC_BLADESTOP])
-			status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
+		status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
 		break;
 
 	case RG_BACKSTAP:
 		{
 			int dir = map_calc_dir(src, bl->x, bl->y), t_dir = unit_getdir(bl);
 			if ((!check_distance_bl(src, bl, 0) && !map_check_dir(dir, t_dir)) || bl->type == BL_SKILL) {
-				if (sc && sc->data[SC_HIDING])
-					status_change_end(src, SC_HIDING, INVALID_TIMER);
+				status_change_end(src, SC_HIDING, INVALID_TIMER);
 				skill_attack(BF_WEAPON, src, src, bl, skillid, skilllv, tick, flag);
 				dir = dir < 4 ? dir+4 : dir-4; // change direction [Celest]
 				unit_setdir(bl,dir);
@@ -2688,14 +2685,12 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 			for (i = 1; i < sd->spiritball_old; i++)
 				skill_addtimerskill(src, tick + i * 200, bl->id, 0, 0, skillid, skilllv, BF_WEAPON, flag);
 		}
-		if (sc && sc->data[SC_BLADESTOP])
-			status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
+		status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
 		break;
 
 	case MO_CHAINCOMBO:
 		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
-		if (sc && sc->data[SC_BLADESTOP])
-			status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
+		status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
 		break;
 
 	case NJ_ISSEN:
@@ -2991,8 +2986,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 	break;
 
 	case SL_SMA:
-		if (sc && sc->data[SC_SMA])
-			status_change_end(src, SC_SMA, INVALID_TIMER);
+		status_change_end(src, SC_SMA, INVALID_TIMER);
 	case SL_STIN:
 	case SL_STUN:
 		if (sd && !battle_config.allow_es_magic_pc && bl->type != BL_MOB) {
@@ -3065,8 +3059,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 			if (unit_movepos(src, x, y, 0, 0))
 				clif_slide(src,src->x,src->y);
 		}
-		if (sc && sc->data[SC_HIDING])
-			status_change_end(src, SC_HIDING, INVALID_TIMER);
+		status_change_end(src, SC_HIDING, INVALID_TIMER);
 		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
 		break;
 	case 0:
@@ -3698,8 +3691,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 	case NJ_BUNSINJYUTSU:
 		clif_skill_nodamage(src,bl,skillid,skilllv,
 			sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
-		if (tsc && tsc->data[SC_NEN])
-			status_change_end(bl, SC_NEN, INVALID_TIMER);
+		status_change_end(bl, SC_NEN, INVALID_TIMER);
 		break;
 /* Was modified to only affect targetted char.	[Skotlex]
 	case HP_ASSUMPTIO:
@@ -3804,12 +3796,10 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 
 		if( tsc && tsc->count )
 		{
-			if( tsc->data[SC_FREEZE] )
-				status_change_end(bl, SC_FREEZE, INVALID_TIMER);
+			status_change_end(bl, SC_FREEZE, INVALID_TIMER);
 			if( tsc->data[SC_STONE] && tsc->opt1 == OPT1_STONE )
 				status_change_end(bl, SC_STONE, INVALID_TIMER);
-			if( tsc->data[SC_SLEEP] )
-				status_change_end(bl, SC_SLEEP, INVALID_TIMER);
+			status_change_end(bl, SC_SLEEP, INVALID_TIMER);
 		}
 
 		if( dstmd )
@@ -4642,8 +4632,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 	case AM_CP_HELM:
 		{
 			enum sc_type scid = (sc_type)(SC_STRIPWEAPON + (skillid - AM_CP_WEAPON));
-			if(tsc && tsc->data[scid])
-				status_change_end(bl, scid, INVALID_TIMER);
+			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)));
 		}
@@ -5226,12 +5215,10 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 			unit_skillcastcancel(bl,0);
 
 			if(tsc && tsc->count){
-				if(tsc->data[SC_FREEZE])
-					status_change_end(bl, SC_FREEZE, INVALID_TIMER);
+				status_change_end(bl, SC_FREEZE, INVALID_TIMER);
 				if(tsc->data[SC_STONE] && tsc->opt1 == OPT1_STONE)
 					status_change_end(bl, SC_STONE, INVALID_TIMER);
-				if(tsc->data[SC_SLEEP])
-					status_change_end(bl, SC_SLEEP, INVALID_TIMER);
+				status_change_end(bl, SC_SLEEP, INVALID_TIMER);
 			}
 
 			if(dstmd)
@@ -5298,8 +5285,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 				break;
 			}
 			for (i=0; i<4; i++) {
-				if(tsc->data[SC_STRIPWEAPON + i])
-					status_change_end(bl, (sc_type)(SC_STRIPWEAPON + i), INVALID_TIMER);
+				status_change_end(bl, (sc_type)(SC_STRIPWEAPON + i), INVALID_TIMER);
 				sc_start(bl,(sc_type)(SC_CP_WEAPON + i),100,skilllv,skilltime);
 			}
 			clif_skill_nodamage(src,bl,skillid,skilllv,1);
@@ -5985,10 +5971,8 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr data)
 		sc = &sd->sc;
 		if (sc->count)
 		{	//End states
-			if (sc->data[SC_EXPLOSIONSPIRITS])
-				status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
-			if (sc->data[SC_BLADESTOP])
-				status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
+			status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
+			status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
 		}
 		if (target && target->m == src->m)
 		{	//Move character to target anyway.
@@ -6409,8 +6393,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
 			unit_movepos(src, x, y, 1, 0);
 			clif_slide(src,x,y);
 		}
-		if (sc && sc->data[SC_HIDING])
-			status_change_end(src, SC_HIDING, INVALID_TIMER);
+		status_change_end(src, SC_HIDING, INVALID_TIMER);
 		break;
 	case AM_SPHEREMINE:
 	case AM_CANNIBALIZE:
@@ -6579,8 +6562,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
 		return 1;
 	}
 
-	if (sc && sc->data[SC_MAGICPOWER])
-		status_change_end(src, SC_MAGICPOWER, INVALID_TIMER);
+	status_change_end(src, SC_MAGICPOWER, INVALID_TIMER);
 
 	if( sd )
 	{

+ 2 - 4
src/map/status.c

@@ -5001,8 +5001,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 		//TO-DO Blessing and Agi up should do 1 damage against players on Undead Status, even on PvM
 		//but cannot be plagiarized (this requires aegis investigation on packets and official behavior) [Brainstorm]
 		if ((!undead_flag && status->race!=RC_DEMON) || bl->type == BL_PC) {
-			if (sc->data[SC_CURSE])
-				status_change_end(bl, SC_CURSE, INVALID_TIMER);
+			status_change_end(bl, SC_CURSE, INVALID_TIMER);
 			if (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE)
 				status_change_end(bl, SC_STONE, INVALID_TIMER);
 		}
@@ -7395,8 +7394,7 @@ int status_change_clear_buffs (struct block_list* bl, int type)
 	if (type&2) //Debuffs
 	for( i = SC_COMMON_MIN; i <= SC_COMMON_MAX; i++ )
 	{
-		if(sc->data[i])
-			status_change_end(bl, (sc_type)i, INVALID_TIMER);
+		status_change_end(bl, (sc_type)i, INVALID_TIMER);
 	}
 
 	for( i = SC_COMMON_MAX+1; i < SC_MAX; i++ )