From ebabfd8807a7251b92480075dfa828762afbed47 Mon Sep 17 00:00:00 2001 From: Atemo Date: Wed, 1 Nov 2023 15:47:54 +0100 Subject: [PATCH] Implemented DK_DRAGONIC_BREATH (#7985) Deals normal long ranged physical damage to the target. Can only be used when riding dragon. Deals additional damage depends on user's MaxHP and MaxSP. Affected by Hit/Flee calculation. Ignores physical defense. Damage property depends on weapon property. Affected by attack modifiers (such as race modifier). Recovers 2 AP. When using while under Dragonic Aura buff, increases influence of MaxHP and MaxSP in skill damage. Fixed casting time : 0.5 seconds (based on level 10). Variable Casting time : 2 seconds (based on level 10). Cooldown: 0.5 seconds (based on level 10). Global cool time : 0.15 seconds (based on level 10). Co-authored-by: Lemongrass3110 Credit to @datawulf --- db/re/skill_db.yml | 79 ++++++++++++++++++++++++++++++++++++++++++++ db/re/skill_tree.yml | 7 ++++ src/map/battle.cpp | 9 +++++ src/map/skill.cpp | 2 ++ 4 files changed, 97 insertions(+) diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index c4207eac08..764fbe4531 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -41389,6 +41389,85 @@ Body: SplashArea: 6 Requires: SpCost: 1 + - Id: 6001 + Name: DK_DRAGONIC_BREATH + Description: Dragonic Breath + MaxLevel: 10 + Type: Weapon + TargetType: Attack + DamageFlags: + Splash: true + IgnoreDefense: true + Flags: + TargetTrap: true + Range: 9 + GiveAp: 2 + Hit: Multi_Hit + HitCount: -2 + Element: Weapon + SplashArea: + - Level: 1 + Area: 3 + - Level: 2 + Area: 3 + - Level: 3 + Area: 3 + - Level: 4 + Area: 3 + - Level: 5 + Area: 3 + - Level: 6 + Area: 4 + - Level: 7 + Area: 4 + - Level: 8 + Area: 4 + - Level: 9 + Area: 4 + - Level: 10 + Area: 4 + CastCancel: true + CastTime: + - Level: 4 + Time: 1000 + - Level: 5 + Time: 1000 + - Level: 6 + Time: 1000 + - Level: 7 + Time: 1500 + - Level: 8 + Time: 1500 + - Level: 9 + Time: 2000 + - Level: 10 + Time: 2000 + AfterCastActDelay: 150 + FixedCastTime: 500 + Cooldown: 500 + Requires: + SpCost: + - Level: 1 + Amount: 61 + - Level: 2 + Amount: 64 + - Level: 3 + Amount: 67 + - Level: 4 + Amount: 70 + - Level: 5 + Amount: 73 + - Level: 6 + Amount: 76 + - Level: 7 + Amount: 79 + - Level: 8 + Amount: 82 + - Level: 9 + Amount: 85 + - Level: 10 + Amount: 88 + State: Ridingdragon - Id: 6002 Name: MT_SPARK_BLASTER Description: Spark Blaster diff --git a/db/re/skill_tree.yml b/db/re/skill_tree.yml index b7c422d40e..02d5d441cd 100644 --- a/db/re/skill_tree.yml +++ b/db/re/skill_tree.yml @@ -6683,6 +6683,13 @@ Body: Requires: - Name: DK_TWOHANDDEF Level: 5 + - Name: DK_DRAGONIC_BREATH + MaxLevel: 10 + Requires: + - Name: RK_DRAGONBREATH + Level: 10 + - Name: RK_DRAGONBREATH_WATER + Level: 10 - Name: DK_DRAGONIC_AURA MaxLevel: 10 Requires: diff --git a/src/map/battle.cpp b/src/map/battle.cpp index ddd83d59bf..5a9ccce8a6 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -5405,6 +5405,15 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list * if (sc && sc->getSCE(SC_GIANTGROWTH) && rnd()%100 < 30) skillratio *= 2; break; + case DK_DRAGONIC_BREATH: + skillratio += -100 + 50 + 350 * skill_lv; + skillratio += 5 * sstatus->pow; + //TODO: needs official HP/SP scaling [Muh] + skillratio += sstatus->max_hp / 500 + status_get_max_sp(src) / 40; + if (sc && sc->getSCE(SC_DRAGONIC_AURA)) + skillratio += sstatus->max_hp / 500 + status_get_max_sp(src) / 40; + RE_LVL_DMOD(100); + break; case IQ_OLEUM_SANCTUM: skillratio += -100 + 500 + 2000 * skill_lv + 5 * sstatus->pow; RE_LVL_DMOD(100); diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 1c0d965a33..a952f1941a 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -5616,6 +5616,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case DK_SERVANT_W_DEMOL: case DK_MADNESS_CRUSHER: case DK_HACKANDSLASHER: + case DK_DRAGONIC_BREATH: case AG_CRIMSON_ARROW_ATK: case AG_DESTRUCTIVE_HURRICANE: case AG_SOUL_VC_STRIKE: @@ -5735,6 +5736,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case GN_CARTCANNON: case SU_SCRATCH: case BO_MAYHEMIC_THORNS: + case DK_DRAGONIC_BREATH: case DK_HACKANDSLASHER: case MT_SPARK_BLASTER: clif_skill_nodamage(src,bl,skill_id,skill_lv,1);