소스 검색

- Applied some cleanups that should correct "Infinite Endure" ending sometimes.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@11518 54d463be-8e91-2dee-dedb-b68131a5f0ec
skotlex 17 년 전
부모
커밋
8d0ac1d316
2개의 변경된 파일12개의 추가작업 그리고 3개의 파일을 삭제
  1. 3 0
      Changelog-Trunk.txt
  2. 9 3
      src/map/status.c

+ 3 - 0
Changelog-Trunk.txt

@@ -3,6 +3,9 @@ Date	Added
 AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
+2007/10/19
+	* Applied some cleanups that should correct "Infinite Endure" ending
+	  sometimes. [Skotlex]
 2007/10/18
 	* Rev. 11516 Uncommented the showwarning and showdebug from 11508. [L0ne_W0lf]
 	* Fixed the incorrect map names on the debug messages (mapid->mapindex 

+ 9 - 3
src/map/status.c

@@ -5000,6 +5000,7 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
 						status_change_start(&tsd->bl,type,10000,val1,val2,val3,val4,tick,1);
 				}
 			}
+			//val4 signals infinite endure (if val4 == 2 it is infinite endure from Berserk)
 			break;
 		case SC_AUTOBERSERK:
 			if (status->hp < status->max_hp>>2 &&
@@ -5347,7 +5348,7 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
 
 		case SC_BERSERK:
 			if (sc->data[SC_ENDURE].timer == -1 || !sc->data[SC_ENDURE].val4)
-				sc_start4(bl, SC_ENDURE, 100,10,0,0,1, tick);
+				sc_start4(bl, SC_ENDURE, 100,10,0,0,2, tick);
 			//HP healing is performing after the calc_status call.
 			//Val2 holds HP penalty
 			if (!val4) val4 = skill_get_time2(StatusSkillChangeTable[type],val1);
@@ -6214,10 +6215,12 @@ int status_change_end( struct block_list* bl , int type,int tid )
 				status_change_end(bl,SC_PROVOKE,-1);
 			break;
 
+		case SC_ENDURE:
+			if (sc->data[SC_ENDURE].val4)
+				return 0; //Do not end infinite endure.
 		case SC_DEFENDER:
 		case SC_REFLECTSHIELD:
 		case SC_AUTOGUARD:
-		case SC_ENDURE:
 		if (sd) {
 			struct map_session_data *tsd;
 			int i;
@@ -6353,8 +6356,11 @@ int status_change_end( struct block_list* bl , int type,int tid )
 			//If val2 is removed, no HP penalty (dispelled?) [Skotlex]
 			if(status->hp > 100 && sc->data[type].val2)
 				status_set_hp(bl, 100, 0); 
-			if(sc->data[SC_ENDURE].timer != -1)
+			if(sc->data[SC_ENDURE].timer != -1 && sc->data[SC_ENDURE].val4 == 2)
+			{
+				sc->data[SC_ENDURE].val4 = 0;
 				status_change_end(bl, SC_ENDURE, -1);
+			}
 			sc_start4(bl, SC_REGENERATION, 100, 10,0,0,(RGN_HP|RGN_SP),
 				skill_get_time(LK_BERSERK, sc->data[type].val1));
 			break;