Procházet zdrojové kódy

Applied renewal skill changes: (bugreport:5302)
- Arrow Shower's attack power (50+10*SkillLvl)
- Wind Blade's MATK per hit (from 100% to 150%)
- Storm Gust's chance of freezing (65-5*SkillLvl)
- Land Mine, Blast Mine, Claymore Trap's damage formula
- Spear Quicken's ASPD (fixed 7), CRIT (3*SkillLvl) and FLEE (2*SkillLvl)
- Holy Cross's double damage with 2-handed spear
- Axe Mastery's damage increase also applies to Sword class weapons
- Spiral Pierce's weapon requirement (now allows swords)

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

xantara před 13 roky
rodič
revize
ef2e407b17
4 změnil soubory, kde provedl 57 přidání a 9 odebrání
  1. 1 1
      db/re/skill_require_db.txt
  2. 40 3
      src/map/battle.c
  3. 1 1
      src/map/skill.c
  4. 15 4
      src/map/status.c

+ 1 - 1
db/re/skill_require_db.txt

@@ -299,7 +299,7 @@
 394,0,0,12:14:16:18:20:22:24:26:28:30,0,0,0,13:14,1,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//CG_ARROWVULCAN#アロ?バルカン#
 395,0,0,30:40:50:60:70,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//CG_MOONLIT#月明りの泉に落ちる花びら#
 396,0,0,100,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//CG_MARIONETTE#マリオネットコントロ?ル#
-397,0,0,18:21:24:27:30,0,0,0,4:5,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//LK_SPIRALPIERCE#スパイラルピア?ス#
+397,0,0,18:21:24:27:30,0,0,0,2:3:4:5,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//LK_SPIRALPIERCE#スパイラルピア?ス#
 398,0,0,23,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//LK_HEADCRUSH#ヘッドクラッシュ#
 399,0,0,12:12:14:14:16:16:18:18:20:20,0,0,0,4:5,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//LK_JOINTBEAT#ジョイントビ?ト#
 400,0,0,10:25:40:55:70,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//HW_NAPALMVULCAN#ナパ?ムバルカン#

+ 40 - 3
src/map/battle.c

@@ -892,12 +892,20 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int
 		weapon = sd->weapontype2;
 	switch(weapon)
 	{
-		case W_DAGGER:
 		case W_1HSWORD:
+			#if REMODE
+				if((skill = pc_checkskill(sd,AM_AXEMASTERY)) > 0)
+					damage += (skill * 3);
+			#endif
+		case W_DAGGER:
 			if((skill = pc_checkskill(sd,SM_SWORD)) > 0)
 				damage += (skill * 4);
 			break;
 		case W_2HSWORD:
+			#if REMODE
+				if((skill = pc_checkskill(sd,AM_AXEMASTERY)) > 0)
+					damage += (skill * 3);
+			#endif
 			if((skill = pc_checkskill(sd,SM_TWOHAND)) > 0)
 				damage += (skill * 4);
 			break;
@@ -1617,7 +1625,11 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 					break;
 				case AC_SHOWER:
 				case MA_SHOWER:
-					skillratio += 5*skill_lv-25;
+					#if REMODE
+						skillratio += 50+10*skill_lv;
+					#else
+						skillratio += -25+5*skill_lv;
+					#endif
 					break;
 				case AC_CHARGEARROW:
 				case MA_CHARGEARROW:
@@ -1718,8 +1730,15 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
 					break;
 				case NPC_DARKCROSS:
 				case CR_HOLYCROSS:
-					skillratio += 35*skill_lv;
+				{
+					int ratio = 35*skill_lv;
+					#if REMODE
+						if(sd && sd->status.weapon == W_2HSPEAR)
+							ratio *= 2;
+					#endif
+					skillratio += ratio;
 					break;
+				}
 				case AM_DEMONSTRATION:
 					skillratio += 20*skill_lv;
 					break;
@@ -3063,6 +3082,11 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 					case NJ_RAIGEKISAI:
 						skillratio += 60 + 40*skill_lv;
 						break;
+				#if REMODE
+					case NJ_HUUJIN:
+						skillratio += 50;
+						break;
+				#endif
 					case NJ_KAMAITACHI:
 					case NPC_ENERGYDRAIN:
 						skillratio += 100*skill_lv;
@@ -3472,6 +3496,18 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
 
 	switch( skill_num )
 	{
+#if REMODE
+	case HT_LANDMINE:
+	case MA_LANDMINE:
+	case HT_BLASTMINE:
+	case HT_CLAYMORETRAP:
+		{
+			int level = sd?sd->status.base_level:status_get_lv(src);
+			md.damage = skill_lv*sstatus->dex*(3+level/100)*(1+sstatus->int_/35);
+			md.damage+= md.damage*(rand()%20-10)/100;
+			md.damage+= 40*(sd?pc_checkskill(sd,RA_RESEARCHTRAP):0);
+		}
+#else
 	case HT_LANDMINE:
 	case MA_LANDMINE:
 		md.damage=skill_lv*(sstatus->dex+75)*(100+sstatus->int_)/100;
@@ -3482,6 +3518,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
 	case HT_CLAYMORETRAP:
 		md.damage=skill_lv*(sstatus->dex/2+75)*(100+sstatus->int_)/100;
 		break;
+#endif
 	case HT_BLITZBEAT:
 	case SN_FALCONASSAULT:
 		//Blitz-beat Damage.

+ 1 - 1
src/map/skill.c

@@ -829,7 +829,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
 	 * Storm Gust counter was dropped in renewal
 	 **/
 	#if REMODE
-		sc_start(bl,SC_FREEZE,20+(5*skilllv),skilllv,skill_get_time2(skillid,skilllv));
+		sc_start(bl,SC_FREEZE,65-(5*skilllv),skilllv,skill_get_time2(skillid,skilllv));
 	#else
 		 //Tharis pointed out that this is normal freeze chance with a base of 300%
 		if(tsc->sg_counter >= 3 &&

+ 15 - 4
src/map/status.c

@@ -246,7 +246,7 @@ void initChangeTables(void)
 	add_sc( CR_DEVOTION          , SC_DEVOTION        );
 	set_sc( CR_PROVIDENCE        , SC_PROVIDENCE      , SI_PROVIDENCE      , SCB_ALL );
 	set_sc( CR_DEFENDER          , SC_DEFENDER        , SI_DEFENDER        , SCB_SPEED|SCB_ASPD );
-	set_sc( CR_SPEARQUICKEN      , SC_SPEARQUICKEN    , SI_SPEARQUICKEN    , SCB_ASPD );
+	set_sc( CR_SPEARQUICKEN      , SC_SPEARQUICKEN    , SI_SPEARQUICKEN    , SCB_ASPD|SCB_CRI|SCB_FLEE );
 	set_sc( MO_STEELBODY         , SC_STEELBODY       , SI_STEELBODY       , SCB_DEF|SCB_MDEF|SCB_ASPD|SCB_SPEED );
 	add_sc( MO_BLADESTOP         , SC_BLADESTOP_WAIT  );
 	add_sc( MO_BLADESTOP         , SC_BLADESTOP       );
@@ -1604,6 +1604,8 @@ int status_base_amotion_pc(struct map_session_data* sd, struct status_data* stat
 		sd->sc.data[i=SC_ASPDPOTION1] ||
 		sd->sc.data[i=SC_ASPDPOTION0] )
 			amotion -= sd->sc.data[i]->val1*10;
+		if( sd->sc.data[SC_SPEARQUICKEN] )
+			amotion -= 70;
 	}
 #endif
  	return amotion;
@@ -4135,7 +4137,10 @@ static signed short status_calc_critical(struct block_list *bl, struct status_ch
 		critical += 100;
 	if(sc->data[SC__UNLUCKY])
 		critical -= critical * sc->data[SC__UNLUCKY]->val2 / 100;
-
+#if REMODE
+	if (sc->data[SC_SPEARQUICKEN])
+		critical += 3*sc->data[SC_SPEARQUICKEN]->val1*10;
+#endif
 
 	return (short)cap_value(critical,10,SHRT_MAX);
 }
@@ -4241,7 +4246,10 @@ static signed short status_calc_flee(struct block_list *bl, struct status_change
 		flee += flee * sc->data[SC_ZEPHYR]->val2 / 100;
 	if( sc->data[SC_MARSHOFABYSS] )
 		flee -= (9 * sc->data[SC_MARSHOFABYSS]->val3 / 10 + sc->data[SC_MARSHOFABYSS]->val2 / 10) * (bl->type == BL_MOB ? 2 : 1);
-
+#if REMODE
+	if( sc->data[SC_SPEARQUICKEN] )
+		flee += 2 * sc->data[SC_SPEARQUICKEN]->val1;
+#endif
 
 	return (short)cap_value(flee,1,SHRT_MAX);
 }
@@ -4674,9 +4682,11 @@ static short status_calc_aspd_rate(struct block_list *bl, struct status_change *
 			max < sc->data[SC_ADRENALINE]->val3)
 			max = sc->data[SC_ADRENALINE]->val3;
 		
+#if isOFF(REMODE)
 		if(sc->data[SC_SPEARQUICKEN] &&
 			max < sc->data[SC_SPEARQUICKEN]->val2)
 			max = sc->data[SC_SPEARQUICKEN]->val2;
+#endif
 
 		if(sc->data[SC_GATLINGFEVER] &&
 			max < sc->data[SC_GATLINGFEVER]->val2)
@@ -6469,10 +6479,11 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 		case SC_MERC_QUICKEN:
 			val2 = 300;
 			break;
-
+#if isOFF(REMODE)
 		case SC_SPEARQUICKEN:
 			val2 = 200+10*val1;
 			break;
+#endif
 		case SC_DANCING:
 			//val1 : Skill ID + LV
 			//val2 : Skill Group of the Dance.