瀏覽代碼

Fixed bugreport:7015 missing base aspd for High Priest wearing knuckles.
Fixed bugreport:7033 where fixed cast time reduction bonuses affect variable cast time.
Fixed bugreport:7034 stats display should now display properly when skill debuffs/buffs are used.
Fixed bugreport:6840 where Fire Cloak and Wind Curtain accidentally changed elemental damage resistance.

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

rud0lp20 12 年之前
父節點
當前提交
d4b09c6c56
共有 3 個文件被更改,包括 63 次插入16 次删除
  1. 1 1
      db/re/job_db1.txt
  2. 1 2
      src/map/skill.c
  3. 61 13
      src/map/status.c

+ 1 - 1
db/re/job_db1.txt

@@ -72,7 +72,7 @@
 // Lord Knight
 4008,	28000,150  ,500  ,300  ,440  ,530  ,490  ,560  ,590  ,690  ,540  ,590  ,490  ,490  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490  
 // High Priest
-4009,	26000,75   ,500  ,800  ,440  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470  ,470  ,640  ,2000 ,2000 ,2000 ,2000 ,480  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,640  ,490  
+4009,	26000,75   ,500  ,800  ,440  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470  ,470  ,640  ,2000 ,640  ,2000 ,2000 ,480  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,640  ,490  
 // High Wizard
 4010,	24000,55   ,500  ,900  ,540  ,580  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570  ,620  
 // Whitesmith

+ 1 - 2
src/map/skill.c

@@ -13837,9 +13837,8 @@ int skill_vfcastfix (struct block_list *bl, double time, int skill_id, int skill
 	if( !(skill_get_castnodex(skill_id, skill_lv)&1) )// reduction from status point
 		time = (1 - sqrt( ((float)(status_get_dex(bl)*2 + status_get_int(bl)) / battle_config.vcast_stat_scale) )) * time;
 	// underflow checking/capping
-	time = max(time, 0) + (1 - (float)min(fixcast_r, 100) / 100) * fixed;
+	time = max(time, 0) + (1 - (float)min(fixcast_r, 100) / 100) * max(fixed,0);
 
- //       ShowInfo("Casttime vfcastfix = %d\n",time);
 	return (int)time;
 }
 #endif

+ 61 - 13
src/map/status.c

@@ -3035,7 +3035,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
 		if( sc->data[SC_FIRE_CLOAK_OPTION] ) {
 			i = sc->data[SC_FIRE_CLOAK_OPTION]->val2;
 			sd->subele[ELE_FIRE] += i;
-			sd->subele[ELE_EARTH] -= i;
+			sd->subele[ELE_WATER] -= i;
 		}
 		if( sc->data[SC_WATER_DROP_OPTION] ) {
 			i = sc->data[SC_WATER_DROP_OPTION]->val2;
@@ -3045,7 +3045,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
 		if( sc->data[SC_WIND_CURTAIN_OPTION] ) {
 			i = sc->data[SC_WIND_CURTAIN_OPTION]->val2;
 			sd->subele[ELE_WIND] += i;
-			sd->subele[ELE_WATER] -= i;
+			sd->subele[ELE_EARTH] -= i;
 		}
 		if( sc->data[SC_STONE_SHIELD_OPTION] ) {
 			i = sc->data[SC_STONE_SHIELD_OPTION]->val2;
@@ -3526,7 +3526,11 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag)
 
 	if(flag&SCB_AGI) {
 		status->agi = status_calc_agi(bl, sc, b_status->agi);
-		flag|=SCB_FLEE;
+		flag|=SCB_FLEE
+#ifdef RENEWAL
+			|SCB_DEF2
+#endif			
+			;
 		if( bl->type&(BL_PC|BL_HOM) )
 			flag |= SCB_ASPD|SCB_DSPD;
 	}
@@ -3551,7 +3555,11 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag)
 
 	if(flag&SCB_DEX) {
 		status->dex = status_calc_dex(bl, sc, b_status->dex);
-		flag|=SCB_BATK|SCB_HIT;
+		flag|=SCB_BATK|SCB_HIT
+#ifdef RENEWAL
+			|SCB_MATK|SCB_MDEF2
+#endif
+			;
 		if( bl->type&(BL_PC|BL_HOM) )
 			flag |= SCB_ASPD;
 		if( bl->type&BL_HOM )
@@ -3560,7 +3568,11 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag)
 
 	if(flag&SCB_LUK) {
 		status->luk = status_calc_luk(bl, sc, b_status->luk);
-		flag|=SCB_BATK|SCB_CRI|SCB_FLEE2;
+		flag|=SCB_BATK|SCB_CRI|SCB_FLEE2
+#ifdef RENEWAL
+			|SCB_MATK|SCB_HIT|SCB_FLEE
+#endif
+			;
 	}
 
 	if(flag&SCB_BATK && b_status->batk) {
@@ -3601,17 +3613,33 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag)
 	}
 
 	if(flag&SCB_HIT) {
-		if (status->dex == b_status->dex)
+		if (status->dex == b_status->dex
+#ifdef RENEWAL
+			&& status->luk == b_status->luk
+#endif
+			)
 			status->hit = status_calc_hit(bl, sc, b_status->hit);
 		else
-			status->hit = status_calc_hit(bl, sc, b_status->hit +(status->dex - b_status->dex));
+			status->hit = status_calc_hit(bl, sc, b_status->hit + (status->dex - b_status->dex)
+#ifdef RENEWAL
+			 + (status->luk/3 - b_status->luk/3)
+#endif
+			 );
 	}
 
 	if(flag&SCB_FLEE) {
-		if (status->agi == b_status->agi)
+		if (status->agi == b_status->agi
+#ifdef RENEWAL
+			&& status->luk == b_status->luk
+#endif
+			)
 			status->flee = status_calc_flee(bl, sc, b_status->flee);
 		else
-			status->flee = status_calc_flee(bl, sc, b_status->flee +(status->agi - b_status->agi));
+			status->flee = status_calc_flee(bl, sc, b_status->flee +(status->agi - b_status->agi)
+#ifdef RENEWAL
+			+ (status->luk/5 - b_status->luk/5)
+#endif
+			);
 	}
 
 	if(flag&SCB_DEF)
@@ -3623,10 +3651,20 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag)
 	}
 
 	if(flag&SCB_DEF2) {
-		if (status->vit == b_status->vit)
+		if (status->vit == b_status->vit
+#ifdef RENEWAL
+			&& status->agi == b_status->agi
+#endif
+			)
 			status->def2 = status_calc_def2(bl, sc, b_status->def2);
 		else
-			status->def2 = status_calc_def2(bl, sc, b_status->def2 + (status->vit - b_status->vit));
+			status->def2 = status_calc_def2(bl, sc, b_status->def2 
+#ifdef RENEWAL
+			+ (int)( ((float)status->vit/2 + (float)b_status->vit/2) + ((float)status->agi/5 + (float)b_status->agi/5) )
+#else
+			+ (status->vit - b_status->vit)
+#endif
+		);
 	}
 
 	if(flag&SCB_MDEF)
@@ -3638,10 +3676,20 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag)
 	}
 
 	if(flag&SCB_MDEF2) {
-		if (status->int_ == b_status->int_ && status->vit == b_status->vit)
+		if (status->int_ == b_status->int_ && status->vit == b_status->vit
+#ifdef RENEWAL
+			&& status->dex == b_status->dex
+#endif
+			)
 			status->mdef2 = status_calc_mdef2(bl, sc, b_status->mdef2);
 		else
-			status->mdef2 = status_calc_mdef2(bl, sc, b_status->mdef2 +(status->int_ - b_status->int_) +((status->vit - b_status->vit)>>1));
+			status->mdef2 = status_calc_mdef2(bl, sc, b_status->mdef2 +(status->int_ - b_status->int_) 
+#ifdef RENEWAL
+			+ (int)( ((float)status->dex/5 - (float)b_status->dex/5) + ((float)status->vit/5 + (float)b_status->vit/5) )
+#else
+			+ ((status->vit - b_status->vit)>>1)
+#endif
+			);
 	}
 
 	if(flag&SCB_SPEED) {