Przeglądaj źródła

- Corrected SC_INCREASEAGI and SC_DECREASEAGI speed-change formula.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8656 54d463be-8e91-2dee-dedb-b68131a5f0ec
skotlex 18 lat temu
rodzic
commit
1abe796ab7
2 zmienionych plików z 15 dodań i 5 usunięć
  1. 2 0
      Changelog-Trunk.txt
  2. 13 5
      src/map/status.c

+ 2 - 0
Changelog-Trunk.txt

@@ -4,6 +4,8 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2006/09/06
+	* Corrected SC_INCREASEAGI and SC_DECREASEAGI speed-change formula.
+	  [Skotlex]
 	* Fixed Aex Aeterna ending on Soul Breaker's first half. [Skotlex]
 	* Applied Orn's modification on speed increases/reductions with increase/
 	decrease agi [Toms] 

+ 13 - 5
src/map/status.c

@@ -3142,7 +3142,7 @@ static unsigned short status_calc_agi(struct block_list *bl, struct status_chang
 	if(sc->data[SC_TRUESIGHT].timer!=-1)
 		agi += 5;
 	if(sc->data[SC_INCREASEAGI].timer!=-1)
-		agi += 2 + sc->data[SC_INCREASEAGI].val1;
+		agi += sc->data[SC_INCREASEAGI].val2;
 	if(sc->data[SC_INCREASING].timer!=-1)
 		agi += 4;	// added based on skill updates [Reddozen]
 	if(sc->data[SC_DECREASEAGI].timer!=-1)
@@ -3619,10 +3619,10 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha
 		speed -= speed * 50/100;
 	else if(sc->data[SC_SPEEDUP0].timer!=-1)
 		speed -= speed * 25/100;
-	else if(sc->data[SC_INCREASEAGI].timer!=-1)
-		speed -= (sc->data[SC_INCREASEAGI].val1 * 5)/2; //[orn]
 	else if(sc->data[SC_FUSION].timer != -1)
 		speed -= speed * 25/100;
+	else if(sc->data[SC_INCREASEAGI].timer!=-1)
+		speed -= speed * sc->data[SC_INCREASEAGI].val3/100; //[orn]
 	else if(sc->data[SC_CARTBOOST].timer!=-1)
 		speed -= speed * 20/100;
 	else if(sc->data[SC_BERSERK].timer!=-1)
@@ -3635,14 +3635,14 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha
 	//% reductions	 (they stack)
 	if(sc->data[SC_DANCING].timer!=-1 && sc->data[SC_DANCING].val3&0xFFFF)
 		speed += speed*(sc->data[SC_DANCING].val3&0xFFFF)/100;
-	if(sc->data[SC_DECREASEAGI].timer!=-1)
-		speed += (sc->data[SC_DECREASEAGI].val1 * 5)/2; //[orn]
 	if(sc->data[SC_STEELBODY].timer!=-1)
 		speed = speed * 100/75;
 	if(sc->data[SC_QUAGMIRE].timer!=-1)
 		speed = speed * 100/50;
 	if(sc->data[SC_SUITON].timer!=-1 && sc->data[SC_SUITON].val3)
 		speed = speed * 100/sc->data[SC_SUITON].val3;
+	if(sc->data[SC_DECREASEAGI].timer!=-1)
+		speed = speed * 100/sc->data[SC_DECREASEAGI].val3; //[orn]
 	if(sc->data[SC_DONTFORGETME].timer!=-1)
 		speed = speed * 100/sc->data[SC_DONTFORGETME].val3;
 	if(sc->data[SC_DEFENDER].timer!=-1)
@@ -4767,8 +4767,14 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
 	calc_flag = StatusChangeFlagTable[type];
 	if(!(flag&4)) //Do not parse val settings when loading SCs
 	switch(type){
+		case SC_INCREASEAGI:
+			val2 = 2 + val1; //Agi increase
+			val3 = (5*val1)/2; //Speed increase
+			break;
 		case SC_DECREASEAGI:
 			val2 = 2 + val1; //Agi decrease
+			val3 = 100 - (5*val1)/2; //Speed decrease
+			if (val3 < 1) val3 = 1;
 			if (sd) tick>>=1; //Half duration for players.
 			break;
 		case SC_ENDURE:
@@ -5590,6 +5596,8 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
 			break;
 		//In case the speed reduction comes loaded incorrectly,
 		//prevent division by 0.
+		case SC_INCREASEAGI:
+		case SC_DECREASEAGI:
 		case SC_DONTFORGETME:
 		case SC_CLOAKING:
 		case SC_LONGING: