Ver Fonte

Fixed SC_UNLIMIT & SC_CLOAKINGEXCEED effect. (thank Akinari and Akuma)

Signed-off-by: Cahyadi Ramadhan Togihon <house.bad@gmail.com>
Cahyadi Ramadhan Togihon há 11 anos atrás
pai
commit
c382dad802
2 ficheiros alterados com 16 adições e 14 exclusões
  1. 8 12
      src/map/battle.c
  2. 8 2
      src/map/status.c

+ 8 - 12
src/map/battle.c

@@ -1075,22 +1075,16 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
 			//Reduction: 6% + 6% every 20%
 			DAMAGE_SUBRATE(6 * (1+per))
 		}
-		if(sc->data[SC_GRANITIC_ARMOR]){
+		if(sc->data[SC_GRANITIC_ARMOR])
 			DAMAGE_SUBRATE(sc->data[SC_GRANITIC_ARMOR]->val2)
-		}
 		if(sc->data[SC_PAIN_KILLER]){
 			damage -= sc->data[SC_PAIN_KILLER]->val3;
 			damage = max(1,damage);
 		}
-		if( sc->data[SC_DARKCROW] && ((flag&(BF_WEAPON|BF_SHORT))==(BF_WEAPON|BF_SHORT)) ) {
-			DAMAGE_ADDRATE(30 * sc->data[SC_DARKCROW]->val1);
-		}
-		if( sc->data[SC_UNLIMIT] && (flag&(BF_WEAPON|BF_SHORT))==(BF_WEAPON|BF_LONG) ) {
-			 DAMAGE_ADDRATE(50 * sc->data[SC_UNLIMIT]->val1);
-		}
-		if((sce=sc->data[SC_MAGMA_FLOW]) && (rnd()%100 <= sce->val2) ){
+		if( sc->data[SC_DARKCROW] && ((flag&(BF_WEAPON|BF_SHORT))==(BF_WEAPON|BF_SHORT)) )
+			DAMAGE_ADDRATE(sc->data[SC_DARKCROW]->val2);
+		if( (sce=sc->data[SC_MAGMA_FLOW]) && (rnd()%100 <= sce->val2) )
 			skill_castend_damage_id(bl,src,MH_MAGMA_FLOW,sce->val1,gettick(),0);
-		}
 
 		if( damage > 0 && ((flag&(BF_WEAPON|BF_SHORT))==(BF_WEAPON|BF_SHORT)) && (sce = sc->data[SC_STONEHARDSKIN]) ) {
 			sce->val2 -= (int)cap_value(damage,INT_MIN,INT_MAX);;
@@ -1185,7 +1179,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
 			}
 		}
 
-	}
+	} //End of target SC_ check
 
 	//SC effects from caster side.
 	sc = status_get_sc(src);
@@ -1224,7 +1218,9 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
 			TBL_HOM *hd = BL_CAST(BL_HOM,src); //when attacking
 			if (hd && (rnd()%100<50) ) hom_addspiritball(hd, 10); // According to WarpPortal, this is a flat 50% chance
 		}
-	}
+		if( sc->data[SC_UNLIMIT] && (flag&(BF_WEAPON|BF_LONG))==(BF_WEAPON|BF_LONG) )
+			DAMAGE_ADDRATE(sc->data[SC_UNLIMIT]->val2);
+	} //End of caster SC_ check
 
 	//PK damage rates
 	if (battle_config.pk_mode && sd && bl->type == BL_PC && damage && map[bl->m].flag.pvp) {

+ 8 - 2
src/map/status.c

@@ -8775,8 +8775,8 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			tick_time = 3000; // [GodLesZ] tick time
 			break;
 		case SC_CLOAKINGEXCEED:
-			val2 = ( val1 + 1 ) / 2; // Hits
-			val3 = 90 + val1 * 10; // Walk speed
+			val2 = (val1 + 1) / 2; // Hits
+			val3 = (val1 - 1) * 10; // Walk speed
 			if (bl->type == BL_PC)
 				val4 |= battle_config.pc_cloak_check_type&7;
 			else
@@ -9276,6 +9276,12 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		case SC_FLASHCOMBO:
 			val2 = (20 * val1) + 20; // atk bonus
 			break;
+		case SC_DARKCROW:
+			val2 = 30 * val1;
+			break;
+		case SC_UNLIMIT:
+			val2 = 50 * val1;
+			break;
 		case SC_MONSTER_TRANSFORM:
 			if( !mobdb_checkid(val1) )
 				val1 = 1002; // Default poring