Просмотр исходного кода

Job Improvement Project - Kagerou & Oboro (#4425)

* Fixes #4424.
* kRO Changelog: http://ro.gnjoy.com/news/notice/View.asp?BBSMode=10001&seq=7081
Thanks to @Badarosk0, @OptimusM, @teededung, and @Angelic234!
Aleos 5 лет назад
Родитель
Сommit
5e8d9aafab
5 измененных файлов с 108 добавлено и 59 удалено
  1. 66 37
      db/re/skill_db.yml
  2. 8 8
      db/re/skill_tree.txt
  3. 31 10
      src/map/battle.cpp
  4. 0 2
      src/map/skill.cpp
  5. 3 2
      src/map/status.cpp

+ 66 - 37
db/re/skill_db.yml

@@ -15474,7 +15474,6 @@ Body:
         Time: 4000
       - Level: 10
         Time: 4400
-    AfterCastActDelay: 1000
     FixedCastTime:
       - Level: 1
         Time: 200
@@ -30635,26 +30634,56 @@ Body:
   - Id: 3004
     Name: KO_JYUMONJIKIRI
     Description: Cross Slash
-    MaxLevel: 5
+    MaxLevel: 10
     Type: Weapon
     TargetType: Attack
     Range:
       - Level: 1
-        Size: 3
+        Size: 4
       - Level: 2
         Size: 4
       - Level: 3
-        Size: 5
+        Size: 4
       - Level: 4
-        Size: 6
+        Size: 5
       - Level: 5
+        Size: 5
+      - Level: 6
+        Size: 5
+      - Level: 7
+        Size: 6
+      - Level: 8
+        Size: 6
+      - Level: 9
+        Size: 6
+      - Level: 10
         Size: 7
     Hit: Multi_Hit
     HitCount: -2
     Element: Weapon
     AfterCastActDelay: 500
     Duration1: 3000
-    Cooldown: 5000
+    Cooldown: # !TODO: Confirm cooldown
+      - Level: 1
+        Time: 4000
+      - Level: 2
+        Time: 3900
+      - Level: 3
+        Time: 3800
+      - Level: 4
+        Time: 3700
+      - Level: 5
+        Time: 3600
+      - Level: 6
+        Time: 3500
+      - Level: 7
+        Time: 3400
+      - Level: 8
+        Time: 3300
+      - Level: 9
+        Time: 3200
+      - Level: 10
+        Time: 3100
     FixedCastTime: -1
     Requires:
       SpCost:
@@ -30668,6 +30697,16 @@ Body:
           Amount: 16
         - Level: 5
           Amount: 18
+        - Level: 6
+          Amount: 20
+        - Level: 7
+          Amount: 22
+        - Level: 8
+          Amount: 24
+        - Level: 9
+          Amount: 26
+        - Level: 10
+          Amount: 28
   - Id: 3005
     Name: KO_SETSUDAN
     Description: Soul Cutter
@@ -30697,7 +30736,7 @@ Body:
     Description: Kunai Explosion
     MaxLevel: 5
     Type: Weapon
-    TargetType: Ground
+    TargetType: Attack
     DamageFlags:
       Splash: true
       IgnoreFlee: true
@@ -30793,7 +30832,7 @@ Body:
           Amount: 20
       Ammo:
         Kunai: true
-      AmmoAmount: 8
+      AmmoAmount: 2
   - Id: 3008
     Name: KO_MUCHANAGE
     Description: Rapid Throw
@@ -30890,52 +30929,42 @@ Body:
   - Id: 3009
     Name: KO_HUUMARANKA
     Description: Swirling Petal
-    MaxLevel: 5
+    MaxLevel: 10
     Type: Weapon
-    TargetType: Ground
+    TargetType: Attack
     DamageFlags:
       Splash: true
-    Range:
-      - Level: 1
-        Size: 9
-      - Level: 2
-        Size: 10
-      - Level: 3
-        Size: 11
-      - Level: 4
-        Size: 12
-      - Level: 5
-        Size: 13
+    Range: 11
     Hit: Multi_Hit
     HitCount: -5
     Element: Weapon
     SplashArea: 3
-    CastTime:
-      - Level: 1
-        Time: 1000
-      - Level: 2
-        Time: 1200
-      - Level: 3
-        Time: 1400
-      - Level: 4
-        Time: 1600
-      - Level: 5
-        Time: 1800
-    AfterCastActDelay: 1000
+    CastTime: 1500
+    AfterCastActDelay: 500
     Duration1: 100
     Cooldown: 3000
     FixedCastTime: -1
     Requires:
       SpCost:
         - Level: 1
-          Amount: 24
+          Amount: 22
         - Level: 2
-          Amount: 28
+          Amount: 24
         - Level: 3
-          Amount: 32
+          Amount: 26
         - Level: 4
-          Amount: 36
+          Amount: 28
         - Level: 5
+          Amount: 30
+        - Level: 6
+          Amount: 32
+        - Level: 7
+          Amount: 34
+        - Level: 8
+          Amount: 36
+        - Level: 9
+          Amount: 38
+        - Level: 10
           Amount: 40
       Weapon:
         Huuma: true

+ 8 - 8
db/re/skill_tree.txt

@@ -5601,12 +5601,12 @@
 4211,3001,1,530,5,0,0,0,0,0,0,0,0 //KO_YAMIKUMO##
 4211,3002,5,0,0,0,0,0,0,0,0,0,0 //KO_RIGHT##
 4211,3003,5,0,0,0,0,0,0,0,0,0,0 //KO_LEFT##
-4211,3004,5,3001,1,0,0,0,0,0,0,0,0 //KO_JYUMONJIKIRI##
+4211,3004,10,3001,1,0,0,0,0,0,0,0,0 //KO_JYUMONJIKIRI##
 4211,3005,5,3004,2,0,0,0,0,0,0,0,0 //KO_SETSUDAN##
 4211,3006,5,524,5,0,0,0,0,0,0,0,0 //KO_BAKURETSU##
 4211,3007,5,3006,1,0,0,0,0,0,0,0,0 //KO_HAPPOKUNAI##
 4211,3008,10,3010,3,0,0,0,0,0,0,0,0 //KO_MUCHANAGE##
-4211,3009,5,525,5,0,0,0,0,0,0,0,0 //KO_HUUMARANKA##
+4211,3009,10,525,5,0,0,0,0,0,0,0,0 //KO_HUUMARANKA##
 4211,3010,5,526,1,0,0,0,0,0,0,0,0 //KO_MAKIBISHI##
 4211,3011,5,533,10,0,0,0,0,0,0,0,0 //KO_MEIKYOUSISUI##
 4211,3012,5,531,1,0,0,0,0,0,0,0,0 //KO_ZANZOU##
@@ -5653,12 +5653,12 @@
 4212,3001,1,530,5,0,0,0,0,0,0,0,0 //KO_YAMIKUMO##
 4212,3002,5,0,0,0,0,0,0,0,0,0,0 //KO_RIGHT##
 4212,3003,5,0,0,0,0,0,0,0,0,0,0 //KO_LEFT##
-4212,3004,5,3001,1,0,0,0,0,0,0,0,0 //KO_JYUMONJIKIRI##
+4212,3004,10,3001,1,0,0,0,0,0,0,0,0 //KO_JYUMONJIKIRI##
 4212,3005,5,3004,2,0,0,0,0,0,0,0,0 //KO_SETSUDAN##
 4212,3006,5,524,5,0,0,0,0,0,0,0,0 //KO_BAKURETSU##
 4212,3007,5,3006,1,0,0,0,0,0,0,0,0 //KO_HAPPOKUNAI##
 4212,3008,10,3010,3,0,0,0,0,0,0,0,0 //KO_MUCHANAGE##
-4212,3009,5,525,5,0,0,0,0,0,0,0,0 //KO_HUUMARANKA##
+4212,3009,10,525,5,0,0,0,0,0,0,0,0 //KO_HUUMARANKA##
 4212,3010,5,526,1,0,0,0,0,0,0,0,0 //KO_MAKIBISHI##
 4212,3011,5,533,10,0,0,0,0,0,0,0,0 //KO_MEIKYOUSISUI##
 4212,3012,5,531,1,0,0,0,0,0,0,0,0 //KO_ZANZOU##
@@ -5857,12 +5857,12 @@
 4223,3001,1,530,5,0,0,0,0,0,0,0,0 //KO_YAMIKUMO##
 4223,3002,5,0,0,0,0,0,0,0,0,0,0 //KO_RIGHT##
 4223,3003,5,0,0,0,0,0,0,0,0,0,0 //KO_LEFT##
-4223,3004,5,3001,1,0,0,0,0,0,0,0,0 //KO_JYUMONJIKIRI##
+4223,3004,10,3001,1,0,0,0,0,0,0,0,0 //KO_JYUMONJIKIRI##
 4223,3005,5,3004,2,0,0,0,0,0,0,0,0 //KO_SETSUDAN##
 4223,3006,5,524,5,0,0,0,0,0,0,0,0 //KO_BAKURETSU##
 4223,3007,5,3006,1,0,0,0,0,0,0,0,0 //KO_HAPPOKUNAI##
 4223,3008,10,3010,3,0,0,0,0,0,0,0,0 //KO_MUCHANAGE##
-4223,3009,5,525,5,0,0,0,0,0,0,0,0 //KO_HUUMARANKA##
+4223,3009,10,525,5,0,0,0,0,0,0,0,0 //KO_HUUMARANKA##
 4223,3010,5,526,1,0,0,0,0,0,0,0,0 //KO_MAKIBISHI##
 4223,3011,5,533,10,0,0,0,0,0,0,0,0 //KO_MEIKYOUSISUI##
 4223,3012,5,531,1,0,0,0,0,0,0,0,0 //KO_ZANZOU##
@@ -5911,12 +5911,12 @@
 4224,3001,1,530,5,0,0,0,0,0,0,0,0 //KO_YAMIKUMO##
 4224,3002,5,0,0,0,0,0,0,0,0,0,0 //KO_RIGHT##
 4224,3003,5,0,0,0,0,0,0,0,0,0,0 //KO_LEFT##
-4224,3004,5,3001,1,0,0,0,0,0,0,0,0 //KO_JYUMONJIKIRI##
+4224,3004,10,3001,1,0,0,0,0,0,0,0,0 //KO_JYUMONJIKIRI##
 4224,3005,5,3004,2,0,0,0,0,0,0,0,0 //KO_SETSUDAN##
 4224,3006,5,524,5,0,0,0,0,0,0,0,0 //KO_BAKURETSU##
 4224,3007,5,3006,1,0,0,0,0,0,0,0,0 //KO_HAPPOKUNAI##
 4224,3008,10,3010,3,0,0,0,0,0,0,0,0 //KO_MUCHANAGE##
-4224,3009,5,525,5,0,0,0,0,0,0,0,0 //KO_HUUMARANKA##
+4224,3009,10,525,5,0,0,0,0,0,0,0,0 //KO_HUUMARANKA##
 4224,3010,5,526,1,0,0,0,0,0,0,0,0 //KO_MAKIBISHI##
 4224,3011,5,533,10,0,0,0,0,0,0,0,0 //KO_MEIKYOUSISUI##
 4224,3012,5,531,1,0,0,0,0,0,0,0,0 //KO_ZANZOU##

+ 31 - 10
src/map/battle.cpp

@@ -1899,6 +1899,15 @@ int64 battle_addmastery(struct map_session_data *sd,struct block_list *target,in
 		damage += (skill * 2);
 #endif
 
+	// Kagerou/Oboro Spirit Charm bonus
+	if (sd->spiritcharm >= MAX_SPIRITCHARM) {
+		if ((sd->spiritcharm_type == CHARM_TYPE_FIRE && status->def_ele == ELE_EARTH) ||
+			(sd->spiritcharm_type == CHARM_TYPE_WATER && status->def_ele == ELE_FIRE) ||
+			(sd->spiritcharm_type == CHARM_TYPE_LAND && status->def_ele == ELE_WIND) ||
+			(sd->spiritcharm_type == CHARM_TYPE_WIND && status->def_ele == ELE_WATER))
+			damage += damage * 30 / 100;
+	}
+
 	if(type == 0)
 		weapon = sd->weapontype1;
 	else
@@ -3337,6 +3346,8 @@ static void battle_calc_skill_base_damage(struct Damage* wd, struct block_list *
 #endif
 					sstatus->batk + sstatus->rhw.atk + (index >= 0 && sd->inventory_data[index] ?
 						sd->inventory_data[index]->atk : 0)) * (skill_lv + 5) / 5;
+				if (sc && sc->data[SC_KAGEMUSYA])
+					damagevalue += damagevalue * sc->data[SC_KAGEMUSYA]->val2 / 100;
 				ATK_ADD(wd->damage, wd->damage2, damagevalue);
 #ifdef RENEWAL
 				ATK_ADD(wd->weaponAtk, wd->weaponAtk2, damagevalue);
@@ -4029,6 +4040,9 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
 #endif
 			break;
 #ifdef RENEWAL
+		case NJ_SYURIKEN:
+			skillratio += 5 * skill_lv;
+			break;
 		case NJ_KUNAI:
 			skillratio += -100 + 100 * skill_lv;
 			break;
@@ -4499,13 +4513,18 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
 			skillratio += 700;
 			break;
 		case KO_JYUMONJIKIRI:
-			skillratio += -100 + 150 * skill_lv;
+			skillratio += -100 + 200 * skill_lv;
 			RE_LVL_DMOD(120);
 			if(tsc && tsc->data[SC_JYUMONJIKIRI])
 				skillratio += skill_lv * status_get_lv(src);
+			if (sc && sc->data[SC_KAGEMUSYA])
+				skillratio += skillratio * sc->data[SC_KAGEMUSYA]->val2 / 100;
 			break;
 		case KO_HUUMARANKA:
-			skillratio += -100 + 150 * skill_lv + sstatus->agi + sstatus->dex + (sd ? pc_checkskill(sd,NJ_HUUMA) * 100 : 0);
+			skillratio += -100 + 150 * skill_lv + sstatus->str + (sd ? pc_checkskill(sd,NJ_HUUMA) * 100 : 0);
+			RE_LVL_DMOD(100);
+			if (sc && sc->data[SC_KAGEMUSYA])
+				skillratio += skillratio * sc->data[SC_KAGEMUSYA]->val2 / 100;
 			break;
 		case KO_SETSUDAN:
 			skillratio += 100 * (skill_lv - 1);
@@ -4521,6 +4540,8 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
 			skillratio += -100 + (sd ? pc_checkskill(sd,NJ_TOBIDOUGU) : 1) * (50 + sstatus->dex / 4) * skill_lv * 4 / 10;
 			RE_LVL_DMOD(120);
 			skillratio += 10 * (sd ? sd->status.job_level : 1);
+			if (sc && sc->data[SC_KAGEMUSYA])
+				skillratio += skillratio * sc->data[SC_KAGEMUSYA]->val2 / 100;
 			break;
 		case KO_MAKIBISHI:
 			skillratio += -100 + 20 * skill_lv;
@@ -4691,10 +4712,10 @@ static int64 battle_calc_skill_constant_addition(struct Damage* wd, struct block
 			else
 				atk = sstatus->matk_min;
 			break;
-#endif
 		case NJ_SYURIKEN:
 			atk = 4 * skill_lv;
 			break;
+#endif
 #ifdef RENEWAL
 		case HT_FREEZINGTRAP:
 			if(sd)
@@ -6222,17 +6243,17 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 					case NJ_KOUENKA:
 						skillratio -= 10;
 						if(sd && sd->spiritcharm_type == CHARM_TYPE_FIRE && sd->spiritcharm > 0)
-							skillratio += 20 * sd->spiritcharm;
+							skillratio += 10 * sd->spiritcharm;
 						break;
 					case NJ_KAENSIN:
 						skillratio -= 50;
 						if(sd && sd->spiritcharm_type == CHARM_TYPE_FIRE && sd->spiritcharm > 0)
-							skillratio += 10 * sd->spiritcharm;
+							skillratio += 20 * sd->spiritcharm;
 						break;
 					case NJ_BAKUENRYU:
 						skillratio += 50 + 150 * skill_lv;
 						if(sd && sd->spiritcharm_type == CHARM_TYPE_FIRE && sd->spiritcharm > 0)
-							skillratio += 15 * sd->spiritcharm;
+							skillratio += 100 * sd->spiritcharm;
 						break;
 					case NJ_HYOUSENSOU:
 #ifdef RENEWAL
@@ -6241,12 +6262,12 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 							skillratio += 2 * skill_lv;
 #endif
 						if(sd && sd->spiritcharm_type == CHARM_TYPE_WATER && sd->spiritcharm > 0)
-							skillratio += 5 * sd->spiritcharm;
+							skillratio += 20 * sd->spiritcharm;
 						break;
 					case NJ_HYOUSYOURAKU:
 						skillratio += 50 * skill_lv;
 						if(sd && sd->spiritcharm_type == CHARM_TYPE_WATER && sd->spiritcharm > 0)
-							skillratio += 25 * sd->spiritcharm;
+							skillratio += 100 * sd->spiritcharm;
 						break;
 					case NJ_RAIGEKISAI:
 #ifdef RENEWAL
@@ -6255,12 +6276,12 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 						skillratio += 60 + 40 * skill_lv;
 #endif
 						if(sd && sd->spiritcharm_type == CHARM_TYPE_WIND && sd->spiritcharm > 0)
-							skillratio += 15 * sd->spiritcharm;
+							skillratio += 20 * sd->spiritcharm;
 						break;
 					case NJ_KAMAITACHI:
 						skillratio += 100 * skill_lv;
 						if(sd && sd->spiritcharm_type == CHARM_TYPE_WIND && sd->spiritcharm > 0)
-							skillratio += 10 * sd->spiritcharm;
+							skillratio += 100 * sd->spiritcharm;
 						break;
 					case NJ_HUUJIN:
 #ifdef RENEWAL

+ 0 - 2
src/map/skill.cpp

@@ -12478,8 +12478,6 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
 	case SO_WATER_INSIGNIA:
 	case SO_WIND_INSIGNIA:
 	case SO_EARTH_INSIGNIA:
-	case KO_HUUMARANKA:
-	case KO_BAKURETSU:
 	case KO_ZENKAI:
 	case MH_LAVA_SLIDE:
 	case MH_VOLCANIC_ASH:

+ 3 - 2
src/map/status.cpp

@@ -11600,9 +11600,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			clif_status_change(bl,EFST_ACTIVE_MONSTER_TRANSFORM,1,0,1002,0,0);
 			break;
 		case SC_KAGEMUSYA:
-			val2 = tick/1000;
+			val2 = 20; // Damage increase bonus
 			val3 = val1 * 2;
 			tick_time = 1000;
+			val4 = tick / tick_time;
 			break;
 		case SC_ZANGETSU:
 			if( status_get_hp(bl) % 2 == 0 )
@@ -14462,7 +14463,7 @@ TIMER_FUNC(status_change_timer){
 		}
 		break;
 	case SC_KAGEMUSYA:
-		if( --(sce->val2) >= 0 ) {
+		if( --(sce->val4) >= 0 ) {
 			if(!status_charge(bl, 0, 1)) break;
 			sc_timer_next(1000+tick);
 			return 0;