Parcourir la source

Follow up r16486 a little code optimization and fixed its server crashing/halting tendency.
Follow up r16483 fixed a duplicate display animation of traps when triggered by a skill.

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

rud0lp20 il y a 13 ans
Parent
commit
1a842445c0
2 fichiers modifiés avec 10 ajouts et 11 suppressions
  1. 7 10
      src/map/battle.c
  2. 3 1
      src/map/skill.c

+ 7 - 10
src/map/battle.c

@@ -2091,19 +2091,16 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 						RE_LVL_DMOD(100);
 					break;
 				case RK_HUNDREDSPEAR:
-						skillratio += 500 + (80 * skill_lv) + (50 * pc_checkskill(sd,LK_SPIRALPIERCE));
+						skillratio += 500 + (80 * skill_lv);
 						if( sd )
 						{
 							short index = sd->equip_index[EQI_HAND_R];
-							if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON )
-							{
-								short spearwbd = 1000 - sd->inventory_data[index]->weight / 10;// Spear Weight Bonus Damage.
-								if ( spearwbd < 0 )
-									spearwbd = 0;// If weight of weapon is more then 1000, bonus is set to 0 to prevent negative value. [Rytech]
-								skillratio += spearwbd;
-							}
-						}
-						RE_LVL_DMOD(100);
+							if( index >= 0 && sd->inventory_data[index] 
+								&& sd->inventory_data[index]->type == IT_WEAPON )
+								skillratio += max(10000 - sd->inventory_data[index]->weight, 0);
+							skillratio += 50 * pc_checkskill(sd,LK_SPIRALPIERCE);
+						} // (1 + [(Caster’s Base Level - 100) / 200])
+						skillratio = skillratio * (100 + (status_get_lv(src)-100) / 2) / 100;
 					break;
 				case RK_WINDCUTTER:
 						skillratio += 50 * skill_lv;

+ 3 - 1
src/map/skill.c

@@ -2387,7 +2387,9 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
 	case RA_CLUSTERBOMB:
 	case RA_FIRINGTRAP:
 	case RA_ICEBOUNDTRAP:
-		clif_skill_damage((bl->type==BL_PC)?dsrc:src,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skillid,flag&SD_LEVEL?-1:skilllv, 5);
+		dmg.dmotion = clif_skill_damage(src,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skillid,flag&SD_LEVEL?-1:skilllv, 5);
+		if( dsrc != src ) // avoid damage display redundancy
+			break;
 	case HT_LANDMINE:
 		dmg.dmotion = clif_skill_damage(dsrc,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skillid, -1, type);
 		break;