Переглянути джерело

4th Improvement - Abyss Chaser (#7709)

munkrej 2 роки тому
батько
коміт
452238b523
3 змінених файлів з 130 додано та 56 видалено
  1. 111 42
      db/re/skill_db.yml
  2. 19 10
      src/map/battle.cpp
  3. 0 4
      src/map/skill.cpp

+ 111 - 42
db/re/skill_db.yml

@@ -23463,7 +23463,7 @@ Body:
     TargetType: Attack
     DamageFlags:
       Splash: true
-    Range: 1
+    Range: 2
     Hit: Single
     HitCount: 1
     Element: Weapon
@@ -38543,23 +38543,33 @@ Body:
     DamageFlags:
       Splash: true
     Hit: Single
-    HitCount: 1
+    HitCount: 2
     Element: Weapon
-    SplashArea: 2
+    SplashArea: 3
     CastCancel: true
     AfterCastActDelay: 500
     Duration1:
       - Level: 1
-        Time: 2000
+        Time: 3000
       - Level: 2
-        Time: 4000
-      - Level: 3
         Time: 6000
+      - Level: 3
+        Time: 9000
       - Level: 4
-        Time: 8000
+        Time: 12000
       - Level: 5
-        Time: 10000
-    Cooldown: 3000
+        Time: 15000
+    Cooldown:
+      - Level: 1
+        Time: 3000
+      - Level: 2
+        Time: 2100
+      - Level: 3
+        Time: 1500
+      - Level: 4
+        Time: 900
+      - Level: 5
+        Time: 300
     Requires:
       SpCost:
         - Level: 1
@@ -38587,11 +38597,19 @@ Body:
     HitCount: 1
     Element: Weapon
     CastCancel: true
-    CastTime: 1000
     AfterCastActDelay: 500
     Duration1: 20000
-    Cooldown: 2000
-    FixedCastTime: 1000
+    Cooldown:
+      - Level: 1
+        Time: 2000
+      - Level: 2
+        Time: 1750
+      - Level: 3
+        Time: 1250
+      - Level: 4
+        Time: 750
+      - Level: 5
+        Time: 250
     Requires:
       SpCost:
         - Level: 1
@@ -38619,19 +38637,19 @@ Body:
     Element: Weapon
     SplashArea:
       - Level: 1
-        Area: 1
+        Area: 2
       - Level: 2
-        Area: 1
-      - Level: 3
         Area: 2
+      - Level: 3
+        Area: 3
       - Level: 4
-        Area: 2
-      - Level: 5
         Area: 3
+      - Level: 5
+        Area: 4
     CastCancel: true
     CastTime: 1000
     AfterCastActDelay: 500
-    Cooldown: 3000
+    Cooldown: 1500
     FixedCastTime: 1000
     Requires:
       SpCost:
@@ -38659,6 +38677,17 @@ Body:
       NoDamage: true
     Hit: Single
     HitCount: 1
+    GiveAp:
+      - Level: 1
+        Amount: 4
+      - Level: 2
+        Amount: 8
+      - Level: 3
+        Amount: 12
+      - Level: 4
+        Amount: 16
+      - Level: 5
+        Amount: 20
     CastCancel: true
     Duration1:
       - Level: 1
@@ -38673,15 +38702,15 @@ Body:
         Time: 150000
     Duration2:
       - Level: 1
-        Time: 10000
+        Time: 3000
       - Level: 2
-        Time: 8000
+        Time: 2500
       - Level: 3
-        Time: 6000
+        Time: 2000
       - Level: 4
-        Time: 4000
+        Time: 1500
       - Level: 5
-        Time: 2000
+        Time: 1000
     Cooldown: 60000
     Requires:
       SpCost:
@@ -38708,7 +38737,7 @@ Body:
     CastCancel: true
     CastTime: 2000
     AfterCastActDelay: 500
-    Duration1: 60000
+    Duration1: 300000
     Cooldown: 60000
     FixedCastTime: 1000
     Requires:
@@ -38776,7 +38805,27 @@ Body:
     GiveAp: 2
     CastCancel: true
     AfterCastActDelay: 500
-    Cooldown: 2000
+    Cooldown:
+      - Level: 1
+        Time: 2000
+      - Level: 2
+        Time: 1900
+      - Level: 3
+        Time: 1700
+      - Level: 4
+        Time: 1500
+      - Level: 5
+        Time: 1300
+      - Level: 6
+        Time: 1100
+      - Level: 7
+        Time: 900
+      - Level: 8
+        Time: 700
+      - Level: 9
+        Time: 500
+      - Level: 10
+        Time: 300
     Requires:
       SpCost:
         - Level: 1
@@ -38812,8 +38861,8 @@ Body:
     CastCancel: true
     CastTime: 2000
     AfterCastActDelay: 500
-    Duration1: 4000
-    Cooldown: 4000
+    Duration1: 3000
+    Cooldown: 3000
     FixedCastTime: 1000
     Requires:
       SpCost:
@@ -38830,7 +38879,7 @@ Body:
     Unit:
       Id: Abyss_Square
       Range: 3
-      Interval: 700
+      Interval: 300
       Target: Enemy
       Flag:
         NoOverlap: true
@@ -38845,39 +38894,59 @@ Body:
       Critical: true
     Range: 9
     Hit: Multi_Hit
-    HitCount: -10
+    HitCount: 1
     Element: Weapon
-    GiveAp: 2
+    GiveAp: 1
     CastCancel: true
     AfterCastActDelay: 500
-    Cooldown: 2000
+    Cooldown:
+      - Level: 1
+        Time: 2000
+      - Level: 2
+        Time: 1800
+      - Level: 3
+        Time: 1600
+      - Level: 4
+        Time: 1400
+      - Level: 5
+        Time: 1200
+      - Level: 6
+        Time: 1000
+      - Level: 7
+        Time: 800
+      - Level: 8
+        Time: 600
+      - Level: 9
+        Time: 400
+      - Level: 10
+        Time: 200
     Requires:
       SpCost:
         - Level: 1
-          Amount: 40
+          Amount: 35
         - Level: 2
           Amount: 45
         - Level: 3
-          Amount: 50
-        - Level: 4
           Amount: 55
+        - Level: 4
+          Amount: 65
         - Level: 5
-          Amount: 60
+          Amount: 75
         - Level: 6
-          Amount: 65
+          Amount: 85
         - Level: 7
-          Amount: 70
+          Amount: 95
         - Level: 8
-          Amount: 75
+          Amount: 105
         - Level: 9
-          Amount: 80
+          Amount: 115
         - Level: 10
-          Amount: 85
+          Amount: 125
       Weapon:
         Bow: true
       Ammo:
         Arrow: true
-      AmmoAmount: 10
+      AmmoAmount: 3
   - Id: 5323
     Name: WH_ADVANCED_TRAP
     Description: Advanced Trap
@@ -40972,7 +41041,7 @@ Body:
     Range: 1
     Hit: Single
     HitCount: 1
-    SplashArea: 3
+    SplashArea: 4
     Requires:
       SpCost: 1
   - Id: 5384

+ 19 - 10
src/map/battle.cpp

@@ -4104,6 +4104,11 @@ static void battle_calc_multi_attack(struct Damage* wd, struct block_list *src,s
 			}
 			break;
 		}
+		case ABC_FRENZY_SHOT:
+			if( rnd()%100 < 5 * skill_lv ){
+				wd->div_ = 3;
+			}
+			break;
 #ifdef RENEWAL
 		case AS_POISONREACT:
 			skill_lv = pc_checkskill(sd, TF_DOUBLE);
@@ -4880,10 +4885,13 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
 			RE_LVL_DMOD(100);
 			break;
 		case SC_FATALMENACE:
-			skillratio += 120 * skill_lv + sstatus->agi / 6; // !TODO: What's the AGI bonus?
+			skillratio += 120 * skill_lv + sstatus->agi; // !TODO: What's the AGI bonus?
+
+			if( sc != nullptr && sc->getSCE( SC_ABYSS_DAGGER ) ){
+				skillratio += 30 * skill_lv;
+			}
+
 			RE_LVL_DMOD(100);
-			if (sc && sc->getSCE(SC_ABYSS_DAGGER))
-				skillratio += skillratio * 50 / 100;
 			break;
 		case SC_TRIANGLESHOT:
 			skillratio += -100 + 230 * skill_lv + 3 * sstatus->agi;
@@ -5524,18 +5532,21 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
 			RE_LVL_DMOD(100);
 			break;
 		case ABC_ABYSS_DAGGER:
-			skillratio += -100 + 550 * skill_lv + 5 * sstatus->pow;
+			skillratio += -100 + 350 * skill_lv + 5 * sstatus->pow;
 			RE_LVL_DMOD(100);
 			break;
 		case ABC_UNLUCKY_RUSH:
-			skillratio += -100 + 500 * skill_lv + 5 * sstatus->crt;
+			skillratio += -100 + 100 + 300 * skill_lv + 5 * sstatus->pow;
 			RE_LVL_DMOD(100);
 			break;
 		case ABC_CHAIN_REACTION_SHOT:
-		case ABC_CHAIN_REACTION_SHOT_ATK:// Same damage formula? [Rytech]
 			skillratio += -100 + 600 * skill_lv + 5 * sstatus->con;
 			RE_LVL_DMOD(100);
 			break;
+		case ABC_CHAIN_REACTION_SHOT_ATK:
+			skillratio += -100 + 950 * skill_lv + 5 * sstatus->con;
+			RE_LVL_DMOD(100);
+			break;
 		case ABC_DEFT_STAB:
 			skillratio += -100 + 360 * skill_lv + 5 * sstatus->pow;
 			RE_LVL_DMOD(100);
@@ -7870,7 +7881,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 						RE_LVL_DMOD(100);
 						break;
 					case ABC_ABYSS_SQUARE:
-						skillratio += -100 + 140 * skill_lv + 5 * sstatus->spl;
+						skillratio += -100 + ( 200 + 20 * pc_checkskill( sd, ABC_MAGIC_SWORD_M ) ) * skill_lv + 5 * sstatus->spl;
 						RE_LVL_DMOD(100);
 						break;
 					case TR_METALIC_FURY:
@@ -9388,9 +9399,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
 				sd->state.autocast = 0;
 			}
 
-			// It has a success chance of triggering even tho the description says nothing about it.
-			// TODO: Need to find out what the official success chance is. [Rytech]
-			if( sc->getSCE(SC_ABYSSFORCEWEAPON) && sd->abyssball > 0 && rnd() % 100 < 20 ){
+			if( sc->getSCE(SC_ABYSSFORCEWEAPON) && sd->abyssball > 0 && rnd() % 100 < 15 ){
 				uint16 skill_id = ABC_FROM_THE_ABYSS_ATK;
 				uint16 skill_lv = sc->getSCE(SC_ABYSSFORCEWEAPON)->val1;
 

+ 0 - 4
src/map/skill.cpp

@@ -4143,10 +4143,6 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
 				if (skill_area_temp[1] == bl->id && rnd()%100 < 4 * skill_lv)// Need official autocast chance. [Rytech]
 					skill_addtimerskill(src, tick + dmg.amotion, bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, 2);
 				break;
-			case ABC_FRENZY_SHOT:
-				if (rnd()%100 < 4 * skill_lv)// Need official autocast chance. [Rytech]
-					skill_addtimerskill(src, tick + dmg.amotion, bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, 2);
-				break;
 		}
 	}