Przeglądaj źródła

- Fixed Chase Walk having a deactivation cast time (should be instant)
- Changed status calc to allow value 0 stats; aegis allows negative values, but eA is unsigned in this regard, so ...

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@10589 54d463be-8e91-2dee-dedb-b68131a5f0ec

ultramage 18 lat temu
rodzic
commit
c0ccc85648
3 zmienionych plików z 30 dodań i 23 usunięć
  1. 3 0
      Changelog-Trunk.txt
  2. 12 12
      src/map/status.c
  3. 15 11
      src/map/unit.c

+ 3 - 0
Changelog-Trunk.txt

@@ -4,6 +4,9 @@ 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.
 
 2007/05/20
+	* Fixed Chase Walk having a deactivation cast time (should be instant)
+	* Changed status calc to allow value 0 stats; aegis allows
+	  negative values, but eA is unsigned in this regard, so ...
 	* Added positional music effect to Battle Chant / Gospel
 	- see r10588 on how to disable it if it annoys you ^^;
 2007/05/19

+ 12 - 12
src/map/status.c

@@ -3114,7 +3114,7 @@ void status_calc_bl(struct block_list *bl, unsigned long flag)
 static unsigned short status_calc_str(struct block_list *bl, struct status_change *sc, int str)
 {
 	if(!sc || !sc->count)
-		return cap_value(str,1,USHRT_MAX);
+		return cap_value(str,0,USHRT_MAX);
 
 	if(sc->data[SC_INCALLSTATUS].timer!=-1)
 		str += sc->data[SC_INCALLSTATUS].val1;
@@ -3147,13 +3147,13 @@ static unsigned short status_calc_str(struct block_list *bl, struct status_chang
 	if(sc->data[SC_SPIRIT].timer!=-1 && sc->data[SC_SPIRIT].val2 == SL_HIGH && str < 50)
 		str = 50;
 
-	return cap_value(str,1,USHRT_MAX);
+	return cap_value(str,0,USHRT_MAX);
 }
 
 static unsigned short status_calc_agi(struct block_list *bl, struct status_change *sc, int agi)
 {
 	if(!sc || !sc->count)
-		return cap_value(agi,1,USHRT_MAX);
+		return cap_value(agi,0,USHRT_MAX);
 
 	if(sc->data[SC_CONCENTRATE].timer!=-1 && sc->data[SC_QUAGMIRE].timer == -1)
 		agi += (agi-sc->data[SC_CONCENTRATE].val3)*sc->data[SC_CONCENTRATE].val2/100;
@@ -3186,13 +3186,13 @@ static unsigned short status_calc_agi(struct block_list *bl, struct status_chang
 	if(sc->data[SC_SPIRIT].timer!=-1 && sc->data[SC_SPIRIT].val2 == SL_HIGH && agi < 50)
 		agi = 50;
 
-	return cap_value(agi,1,USHRT_MAX);
+	return cap_value(agi,0,USHRT_MAX);
 }
 
 static unsigned short status_calc_vit(struct block_list *bl, struct status_change *sc, int vit)
 {
 	if(!sc || !sc->count)
-		return cap_value(vit,1,USHRT_MAX);
+		return cap_value(vit,0,USHRT_MAX);
 
 	if(sc->data[SC_INCALLSTATUS].timer!=-1)
 		vit += sc->data[SC_INCALLSTATUS].val1;
@@ -3215,13 +3215,13 @@ static unsigned short status_calc_vit(struct block_list *bl, struct status_chang
 	if(sc->data[SC_SPIRIT].timer!=-1 && sc->data[SC_SPIRIT].val2 == SL_HIGH && vit < 50)
 		vit = 50;
 
-	return cap_value(vit,1,USHRT_MAX);
+	return cap_value(vit,0,USHRT_MAX);
 }
 
 static unsigned short status_calc_int(struct block_list *bl, struct status_change *sc, int int_)
 {
 	if(!sc || !sc->count)
-		return cap_value(int_,1,USHRT_MAX);
+		return cap_value(int_,0,USHRT_MAX);
 
 	if(sc->data[SC_INCALLSTATUS].timer!=-1)
 		int_ += sc->data[SC_INCALLSTATUS].val1;
@@ -3252,13 +3252,13 @@ static unsigned short status_calc_int(struct block_list *bl, struct status_chang
 	if(sc->data[SC_SPIRIT].timer!=-1 && sc->data[SC_SPIRIT].val2 == SL_HIGH && int_ < 50)
 		int_ = 50;
 
-	return cap_value(int_,1,USHRT_MAX);
+	return cap_value(int_,0,USHRT_MAX);
 }
 
 static unsigned short status_calc_dex(struct block_list *bl, struct status_change *sc, int dex)
 {
 	if(!sc || !sc->count)
-		return cap_value(dex,1,USHRT_MAX);
+		return cap_value(dex,0,USHRT_MAX);
 
 	if(sc->data[SC_CONCENTRATE].timer!=-1 && sc->data[SC_QUAGMIRE].timer == -1)
 		dex += (dex-sc->data[SC_CONCENTRATE].val4)*sc->data[SC_CONCENTRATE].val2/100;
@@ -3294,13 +3294,13 @@ static unsigned short status_calc_dex(struct block_list *bl, struct status_chang
 	if(sc->data[SC_SPIRIT].timer!=-1 && sc->data[SC_SPIRIT].val2 == SL_HIGH && dex < 50)
 		dex  = 50;
 
-	return cap_value(dex,1,USHRT_MAX);
+	return cap_value(dex,0,USHRT_MAX);
 }
 
 static unsigned short status_calc_luk(struct block_list *bl, struct status_change *sc, int luk)
 {
 	if(!sc || !sc->count)
-		return cap_value(luk,1,USHRT_MAX);
+		return cap_value(luk,0,USHRT_MAX);
 
 	if(sc->data[SC_CURSE].timer!=-1)
 		return 0;
@@ -3321,7 +3321,7 @@ static unsigned short status_calc_luk(struct block_list *bl, struct status_chang
 	if(sc->data[SC_SPIRIT].timer!=-1 && sc->data[SC_SPIRIT].val2 == SL_HIGH && luk < 50)
 		luk = 50;
 
-	return cap_value(luk,1,USHRT_MAX);
+	return cap_value(luk,0,USHRT_MAX);
 }
 
 static unsigned short status_calc_batk(struct block_list *bl, struct status_change *sc, int batk)

+ 15 - 11
src/map/unit.c

@@ -946,35 +946,39 @@ int unit_skilluse_id2(struct block_list *src, int target_id, int skill_num, int
 	
 	switch(skill_num){
 	case ALL_RESURRECTION:
-		if(battle_check_undead(tstatus->race,tstatus->def_ele)){	
-			temp=1;
+		if(battle_check_undead(tstatus->race,tstatus->def_ele)) {	
+			temp = 1;
 			casttime = skill_castfix(src, PR_TURNUNDEAD, skill_lv);
 		} else if (!status_isdead(target))
 			return 0; //Can't cast on non-dead characters.
-		break;
+	break;
 	case MO_FINGEROFFENSIVE:
 		if(sd)
 			casttime += casttime * ((skill_lv > sd->spiritball)? sd->spiritball:skill_lv);
-		break;
+	break;
 	case MO_EXTREMITYFIST:
 		if (sc && sc->data[SC_COMBO].timer != -1 &&
-			(sc->data[SC_COMBO].val1 == MO_COMBOFINISH ||
+		   (sc->data[SC_COMBO].val1 == MO_COMBOFINISH ||
 			sc->data[SC_COMBO].val1 == CH_TIGERFIST ||
 			sc->data[SC_COMBO].val1 == CH_CHAINCRUSH))
 			casttime = 0;
 		temp = 1;
-		break;
+	break;
+	case SA_SPELLBREAKER:
+		temp = 1;
+	break;
+	case ST_CHASEWALK:
+		if (sc && sc->data[ST_CHASEWALK].timer != -1)
+			casttime = 0;
+	break;
 	case TK_RUN:
 		if (sc && sc->data[SC_RUN].timer != -1)
 			casttime = 0;
-		break;
-	case SA_SPELLBREAKER:
-		temp =1;
-		break;
+	break;
 	case KN_CHARGEATK:
 		//Taken from jA: Casttime is increased by dist/3*100%
 		casttime+= casttime * (distance_bl(src,target)-1)/3;
-		break;
+	break;
 	}
   	
 	if (!(skill_get_castnodex(skill_num, skill_lv)&2))