فهرست منبع

Official song and dance formulas (fixes #1808)
* Fixed musical lessons not having any effect on Song of Lutie's MaxHP bonus (lesson/2)
* Song of Lutie now heals 1 HP more every 2 vit instead of 5 HP more every 10 vit
* Perfect Tablature's flee bonus in renewal is now 3*skill_lv + agi/15 + lesson/2
* Perfect Tablature's perfect dodge bonus is now (skill_lv+1)/2 + luk/30 + lesson/5
* Focus Ballet's hit bonus in renewal is now 20 + 2*skill_lv + dex/15 + lesson
* Focus Ballet's hit bonus in pre-re is now 1 + 2*skill_lv + dex/10 + lesson
* Slow Grace's ASPD decrease in renewal is now 3*skill_lv + dex/15 + lesson
* Slow Grace's ASPD decrease in pre-re is now 5 + 3*skill_lv + dex/10 + lesson
* Slow Grace's speed decrease in renewal is now 2*skill_lv + agi/20 + lesson/2
* Slow Grace's speed decrease in pre-re is now 5 + 3*skill_lv + agi/10 + lesson
* Impressive Riff's ASPD increase in pre-re is now 5 + skill_lv + agi/20 + lesson/2
* Lady Luck's critical bonus is now 10 + skill_lv + luk/10 + 0.5*lesson (not rounded down)

Playtester 8 سال پیش
والد
کامیت
182557311b
2فایلهای تغییر یافته به همراه54 افزوده شده و 36 حذف شده
  1. 49 34
      src/map/skill.c
  2. 5 2
      src/map/status.c

+ 49 - 34
src/map/skill.c

@@ -443,12 +443,12 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk
 	switch( skill_id ) {
 		case BA_APPLEIDUN:
 #ifdef RENEWAL
-			hp = 100 + 5 * skill_lv + 5 * (status_get_vit(src) / 10); // HP recovery
+			hp = 100 + 5 * skill_lv + (status_get_vit(src) / 2); // HP recovery
 #else
-			hp = 30 + 5 * skill_lv + 5 * (status_get_vit(src) / 10); // HP recovery
+			hp = 30 + 5 * skill_lv + (status_get_vit(src) / 2); // HP recovery
 #endif
-			if( sd )
-				hp += 5 * pc_checkskill(sd,BA_MUSICALLESSON);
+			if (sd)
+				hp += 5 * pc_checkskill(sd, BA_MUSICALLESSON);
 			break;
 		case PR_SANCTUARY:
 			hp = (skill_lv > 6) ? 777 : skill_lv * 100;
@@ -12628,61 +12628,76 @@ struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16 skill_
 	}
 
 	case BA_WHISTLE:
-		val1 = skill_lv +status->agi/10; // Flee increase
-		val2 = ((skill_lv+1)/2)+status->luk/10; // Perfect dodge increase
-		if(sd){
-			val1 += pc_checkskill(sd,BA_MUSICALLESSON);
-			val2 += pc_checkskill(sd,BA_MUSICALLESSON);
+#ifdef RENEWAL
+		val1 = 3 * skill_lv + status->agi / 15; // Flee increase
+#else
+		val1 = skill_lv + status->agi / 10; // Flee increase
+#endif
+		val2 = (skill_lv + 1) / 2 + status->luk / 30; // Perfect dodge increase
+		if (sd) {
+			val1 += pc_checkskill(sd, BA_MUSICALLESSON) / 2;
+			val2 += pc_checkskill(sd, BA_MUSICALLESSON) / 5;
 		}
 		break;
 	case DC_HUMMING:
-		val1 = 2*skill_lv+status->dex/10; // Hit increase
 #ifdef RENEWAL
-			val1 *= 2;
+		val1 = 20 + 2 * skill_lv + status->dex / 15; // Hit increase
+#else
+		val1 = 1 + 2 * skill_lv + status->dex / 10; // Hit increase
 #endif
-		if(sd)
-			val1 += pc_checkskill(sd,DC_DANCINGLESSON);
+		if (sd)
+			val1 += pc_checkskill(sd, DC_DANCINGLESSON);
 		break;
 	case BA_POEMBRAGI:
-		val1 = 3*skill_lv+status->dex/10; // Casting time reduction
+		val1 = 3 * skill_lv + status->dex / 10; // Casting time reduction
 		//For some reason at level 10 the base delay reduction is 50%.
-		val2 = (skill_lv<10?3*skill_lv:50)+status->int_/5; // After-cast delay reduction
-		if(sd){
-			val1 += pc_checkskill(sd,BA_MUSICALLESSON);
-			val2 += 2*pc_checkskill(sd,BA_MUSICALLESSON);
+		val2 = (skill_lv < 10 ? 3 * skill_lv : 50) + status->int_ / 5; // After-cast delay reduction
+		if (sd) {
+			val1 += pc_checkskill(sd, BA_MUSICALLESSON);
+			val2 += 2 * pc_checkskill(sd, BA_MUSICALLESSON);
 		}
 		break;
 	case DC_DONTFORGETME:
-		val1 = 30 * skill_lv + status->dex; // ASPD decrease
-		val2 = 2 * skill_lv + status->agi / 10; // Movement speed adjustment.
-		if(sd){
-			val1 += 10 * pc_checkskill(sd,DC_DANCINGLESSON);
-			val2 += (pc_checkskill(sd,DC_DANCINGLESSON) + 1) / 2; // Movement speed -1% per 2 levels
+#ifdef RENEWAL
+		val1 = 3 * skill_lv + status->dex / 15; // ASPD decrease
+		val2 = 2 * skill_lv + status->agi / 20; // Movement speed adjustment.
+#else
+		val1 = 5 + 3 * skill_lv + status->dex / 10; // ASPD decrease
+		val2 = 5 + 3 * skill_lv + status->agi / 10; // Movement speed adjustment.
+#endif		
+		if (sd) {
+			val1 += pc_checkskill(sd, DC_DANCINGLESSON);
+#ifdef RENEWAL
+			val2 += pc_checkskill(sd, DC_DANCINGLESSON) / 2;
+#else
+			val2 += pc_checkskill(sd, DC_DANCINGLESSON);
+#endif
 		}
+		val1 *= 10; //Because 10 is actually 1% aspd
 		break;
 	case DC_SERVICEFORYOU:
-		val1 = 15+skill_lv+(status->int_/10); // MaxSP percent increase
-		val2 = 20+3*skill_lv+(status->int_/10); // SP cost reduction
-		if(sd){
-			val1 += pc_checkskill(sd,DC_DANCINGLESSON)/2;
-			val2 += pc_checkskill(sd,DC_DANCINGLESSON)/2;
+		val1 = 15 + skill_lv + (status->int_ / 10); // MaxSP percent increase
+		val2 = 20 + 3 * skill_lv + (status->int_ / 10); // SP cost reduction
+		if (sd) {
+			val1 += pc_checkskill(sd, DC_DANCINGLESSON) / 2;
+			val2 += pc_checkskill(sd, DC_DANCINGLESSON) / 2;
 		}
 		break;
 	case BA_ASSASSINCROSS:
 		if (sd)
-			val1 = pc_checkskill(sd,BA_MUSICALLESSON) / 2;
+			val1 = pc_checkskill(sd, BA_MUSICALLESSON) / 2;
 #ifdef RENEWAL // ASPD increase
 		val1 += skill_lv + (status->agi / 20);
 #else
-		val1 += 10 + skill_lv + (status->agi / 10);
+		val1 += 5 + skill_lv + (status->agi / 20);
 		val1 *= 10; // ASPD works with 1000 as 100%
 #endif
 		break;
 	case DC_FORTUNEKISS:
-		val1 = 10+skill_lv+(status->luk/10); // Critical increase
-		if(sd)
-			val1 += pc_checkskill(sd,DC_DANCINGLESSON);
-		val1*=10; //Because every 10 crit is an actual cri point.
+		val1 = 10 + skill_lv + (status->luk / 10); // Critical increase
+		val1 *= 10; //Because every 10 crit is an actual cri point.
+		if (sd)
+			val1 += 5 * pc_checkskill(sd, DC_DANCINGLESSON);
 		break;
 	case BD_DRUMBATTLEFIELD:
 	#ifdef RENEWAL

+ 5 - 2
src/map/status.c

@@ -10637,10 +10637,13 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 				val1 = MOBID_PORING; // Default poring
 			break;
 		case SC_APPLEIDUN:
+		{
+			struct map_session_data * s_sd = BL_CAST(BL_PC, src);
 			val2 = (5 + 2 * val1) + (status_get_vit(src) / 10); //HP Rate: (5 + 2 * skill_lv) + (vit/10) + (BA_MUSICALLESSON level)
-			if (sd)
-				val2 += pc_checkskill(sd,BA_MUSICALLESSON);
+			if (s_sd)
+				val2 += pc_checkskill(s_sd, BA_MUSICALLESSON) / 2;
 			break;
+		}
 		case SC_EPICLESIS:
 			val2 = 5 * val1; //HP rate bonus
 			break;