浏览代码

Fixed bugreport:7105 where pierce defense must ignore def and add (def/2) as additional ATK damage.
Fixed bugreport:7148 where r17072 broke the ability of smiths to forge weapons.

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

rud0lp20 12 年之前
父节点
当前提交
74e46ab011
共有 3 个文件被更改,包括 8 次插入9 次删除
  1. 5 6
      src/map/battle.c
  2. 2 2
      src/map/clif.c
  3. 1 1
      src/map/clif.h

+ 5 - 6
src/map/battle.c

@@ -3226,24 +3226,23 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 			/**
 			* RE DEF Reduction
 			* Damage = Attack * (4000+eDEF)/(4000+eDEF) - sDEF
-			* Icepick no longer bypasses defense, but gains 1 atk per def/2
+			* Pierce defence gains 1 atk per def/2
 			**/
 
 			ATK_ADD2(
 				flag.pdef ?(def1/2):0,
 				flag.pdef2?(def1/2):0
 			);
-			if( !flag.idef )
+			if( !flag.idef && !flag.pdef )
 				wd.damage = wd.damage * (4000+def1) / (4000+10*def1) - vit_def;
-			if( flag.lh && !flag.idef2 )
+			if( flag.lh && !flag.idef2 && !flag.pdef2 )
 				wd.damage2 = wd.damage2 * (4000+def1) / (4000+10*def1) - vit_def;
 
-
 			#else
 				if (def1 > 100) def1 = 100;
 				ATK_RATE2(
-					flag.idef ?100:(flag.pdef ? (def1+vit_def) : (100-def1)),
-			 		flag.idef2?100:(flag.pdef2? (def1+vit_def) : (100-def1))
+					flag.idef ?100:(flag.pdef ? (int64)flag.pdef*(def1+vit_def) : (100-def1)),
+			 		flag.idef2?100:(flag.pdef2? (int64)flag.pdef2*(def1+vit_def) : (100-def1))
 				);
 				ATK_ADD2(
 					flag.idef ||flag.pdef ?0:-vit_def,

+ 2 - 2
src/map/clif.c

@@ -5239,7 +5239,7 @@ void clif_skill_estimation(struct map_session_data *sd,struct block_list *dst)
 /// 018d <packet len>.W { <name id>.W { <material id>.W }*3 }*
 /// material id:
 ///     unused by the client
-void clif_skill_produce_mix_list(struct map_session_data *sd, uint16 skill_id , int trigger)
+void clif_skill_produce_mix_list(struct map_session_data *sd, int skill_id , int trigger)
 {
 	int i,c,view,fd;
 	nullpo_retv(sd);
@@ -5255,7 +5255,7 @@ void clif_skill_produce_mix_list(struct map_session_data *sd, uint16 skill_id ,
 
 	for(i=0,c=0;i<MAX_SKILL_PRODUCE_DB;i++){
 		if( skill_can_produce_mix(sd,skill_produce_db[i].nameid, trigger, 1) &&
-			( skill_id > 0 && skill_produce_db[i].req_skill == skill_id )
+			( skill_id > 0 && skill_produce_db[i].req_skill == skill_id || skill_id < 0 )
 			){
 			if((view = itemdb_viewid(skill_produce_db[i].nameid)) > 0)
 				WFIFOW(fd,c*8+ 4)= view;

+ 1 - 1
src/map/clif.h

@@ -442,7 +442,7 @@ void clif_skill_estimation(struct map_session_data *sd,struct block_list *dst);
 void clif_skill_warppoint(struct map_session_data* sd, uint16 skill_id, uint16 skill_lv, unsigned short map1, unsigned short map2, unsigned short map3, unsigned short map4);
 void clif_skill_memomessage(struct map_session_data* sd, int type);
 void clif_skill_teleportmessage(struct map_session_data *sd, int type);
-void clif_skill_produce_mix_list(struct map_session_data *sd, uint16 skill_id, int trigger);
+void clif_skill_produce_mix_list(struct map_session_data *sd, int skill_id, int trigger);
 void clif_cooking_list(struct map_session_data *sd, int trigger, uint16 skill_id, int qty, int list_type);
 
 void clif_produceeffect(struct map_session_data* sd,int flag,int nameid);