From 39559c125be04c8580032e257ccd14685e1308fd Mon Sep 17 00:00:00 2001 From: Atemo Date: Tue, 24 Jan 2023 15:06:38 +0100 Subject: [PATCH] Implemented missing skills (#7552) * Implemented NPC_BLEEDING2 Copy from NPC_BLEEDING for now except * element always Neutral * differents rates * Implemented NPC_HELLJUDGEMENT2 Copy from NPC_HELLJUDGEMENT except * element neutral * skills inflicts a random status effect * Implemented NPC_WIDEFREEZE2 Copy from NPC_WIDEFREEZE * Implemented NPC_ICEBREATH2 Copy from NPC_ICEBREATH except * Chance 100% instead of 70% * Splash area 4 instead of 3 * Implemented NPC_WIDEBLEEDING2 Copy from NPC_WIDEBLEEDING * Implemented NPC_WIDECONFUSE2 Copy from NPC_WIDECONFUSE * Implemented NPC_WIDESILENCE2 Copy from NPC_WIDESILENCE * Implemented NPC_WIDESTUN2 Copy from NPC_WIDESTUN * Implemented NPC_WIDESILENCE2 Copy from NPC_WIDESILENCE * Implemented NPC_WIDESLEEP2 Copy from NPC_WIDESLEEP * Implemented NPC_WIDECURSE2 Copy from NPC_WIDECURSE * Implemented NPC_WIDESTONE2 Copy from NPC_WIDESTONE Thanks to @OptimusM, @Lemongrass3110, @aleos89 ! --- db/re/skill_db.yml | 257 +++++++++++++++++++++++++++++++++++++++++++++ src/common/mmo.hpp | 2 +- src/map/battle.cpp | 4 + src/map/skill.cpp | 41 ++++++++ src/map/skill.hpp | 28 +++++ 5 files changed, 331 insertions(+), 1 deletion(-) diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index 9af7b1cef5..82c73edb7b 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -17907,6 +17907,263 @@ Body: NoReiteration: true NoOverlap: true Status: PropertyWalk + - Id: 756 + Name: NPC_WIDEBLEEDING2 + Description: Wide Bleeding + MaxLevel: 5 + TargetType: Self + DamageFlags: + NoDamage: true + Splash: true + Flags: + IsNpc: true + ShowScale: true + Hit: Single + HitCount: 1 + SplashArea: + - Level: 1 + Area: 2 + - Level: 2 + Area: 5 + - Level: 3 + Area: 8 + - Level: 4 + Area: 11 + - Level: 5 + Area: 14 + Duration2: 108000 + Status: Bleeding + - Id: 757 + Name: NPC_WIDESILENCE2 + Description: Wide Silence + MaxLevel: 5 + TargetType: Self + DamageFlags: + NoDamage: true + Splash: true + Flags: + IsNpc: true + ShowScale: true + Hit: Single + HitCount: 1 + SplashArea: + - Level: 1 + Area: 2 + - Level: 2 + Area: 5 + - Level: 3 + Area: 8 + - Level: 4 + Area: 11 + - Level: 5 + Area: 14 + Duration2: 18000 + Status: Silence + - Id: 758 + Name: NPC_WIDESTUN2 + Description: Wide Stun + MaxLevel: 5 + TargetType: Self + DamageFlags: + NoDamage: true + Splash: true + Flags: + IsNpc: true + ShowScale: true + Hit: Single + HitCount: 1 + SplashArea: + - Level: 1 + Area: 2 + - Level: 2 + Area: 5 + - Level: 3 + Area: 8 + - Level: 4 + Area: 11 + - Level: 5 + Area: 14 + Duration2: 4500 + Status: Stun + - Id: 759 + Name: NPC_WIDESTONE2 + Description: Wide Petrify + MaxLevel: 5 + TargetType: Self + DamageFlags: + NoDamage: true + Splash: true + Flags: + IsNpc: true + ShowScale: true + Hit: Single + HitCount: 1 + SplashArea: + - Level: 1 + Area: 2 + - Level: 2 + Area: 5 + - Level: 3 + Area: 8 + - Level: 4 + Area: 11 + - Level: 5 + Area: 14 + Duration1: 100 + Duration2: 17000 + Status: StoneWait + - Id: 760 + Name: NPC_WIDESLEEP2 + Description: Wide Sleep + MaxLevel: 5 + TargetType: Self + DamageFlags: + NoDamage: true + Splash: true + Flags: + IsNpc: true + ShowScale: true + Hit: Single + HitCount: 1 + SplashArea: + - Level: 1 + Area: 2 + - Level: 2 + Area: 5 + - Level: 3 + Area: 8 + - Level: 4 + Area: 11 + - Level: 5 + Area: 14 + Duration2: 18000 + Status: Sleep + - Id: 761 + Name: NPC_WIDECURSE2 + Description: Wide Curse + MaxLevel: 5 + TargetType: Self + DamageFlags: + NoDamage: true + Splash: true + Flags: + IsNpc: true + ShowScale: true + Hit: Single + HitCount: 1 + SplashArea: + - Level: 1 + Area: 2 + - Level: 2 + Area: 5 + - Level: 3 + Area: 8 + - Level: 4 + Area: 11 + - Level: 5 + Area: 14 + Duration2: 18000 + Status: Curse + - Id: 762 + Name: NPC_WIDECONFUSE2 + Description: Wide Confusion + MaxLevel: 5 + TargetType: Self + DamageFlags: + NoDamage: true + Splash: true + Flags: + IsNpc: true + ShowScale: true + Hit: Single + HitCount: 1 + SplashArea: + - Level: 1 + Area: 2 + - Level: 2 + Area: 5 + - Level: 3 + Area: 8 + - Level: 4 + Area: 11 + - Level: 5 + Area: 14 + Duration2: 18000 + Status: Confusion + - Id: 763 + Name: NPC_WIDEFREEZE2 + Description: Wide Freeze + MaxLevel: 5 + TargetType: Self + DamageFlags: + NoDamage: true + Splash: true + Flags: + IsNpc: true + ShowScale: true + Hit: Single + HitCount: 1 + SplashArea: + - Level: 1 + Area: 2 + - Level: 2 + Area: 5 + - Level: 3 + Area: 8 + - Level: 4 + Area: 11 + - Level: 5 + Area: 14 + Duration2: 27000 + Status: Freeze + - Id: 764 + Name: NPC_BLEEDING2 + Description: Bleeding + MaxLevel: 5 + Type: Weapon + TargetType: Attack + Flags: + IsNpc: true + Range: -9 + Hit: Single + HitCount: 1 + Element: Neutral + Duration2: 108000 + Status: Bleeding + - Id: 765 + Name: NPC_ICEBREATH2 + Description: Ice Breath + MaxLevel: 10 + Type: Weapon + TargetType: Attack + Flags: + IsNpc: true + Range: 6 + Hit: Single + HitCount: 1 + Element: Water + SplashArea: 4 + ActiveInstance: 14 + Duration2: 27000 + Status: Freeze + - Id: 768 + Name: NPC_HELLJUDGEMENT2 + Description: Hell's Judgement + MaxLevel: 10 + Type: Weapon + TargetType: Self + DamageFlags: + Splash: true + Flags: + IsNpc: true + TargetTrap: true + ShowScale: true + Hit: Single + HitCount: 1 + Element: Neutral + SplashArea: 14 + Duration2: 18000 + Status: Curse - Id: 1001 Name: KN_CHARGEATK Description: Charge Attack diff --git a/src/common/mmo.hpp b/src/common/mmo.hpp index 5262f4d6d0..b01b9c5bb5 100644 --- a/src/common/mmo.hpp +++ b/src/common/mmo.hpp @@ -89,7 +89,7 @@ typedef uint32 t_itemid; #endif #define MAX_FAME 1000000000 ///Max fame points #define MAX_CART 100 ///Maximum item in cart -#define MAX_SKILL 1454 ///Maximum skill can be hold by Player, Homunculus, & Mercenary (skill list) AND skill_db limit +#define MAX_SKILL 1465 ///Maximum skill can be hold by Player, Homunculus, & Mercenary (skill list) AND skill_db limit #define DEFAULT_WALK_SPEED 150 ///Default walk speed #define MIN_WALK_SPEED 20 ///Min walk speed #define MAX_WALK_SPEED 1000 ///Max walk speed diff --git a/src/map/battle.cpp b/src/map/battle.cpp index 9629d1f42a..22378ca4d2 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -3009,10 +3009,12 @@ static bool is_attack_hitting(struct Damage* wd, struct block_list *src, struct case NPC_CURSEATTACK: case NPC_SLEEPATTACK: case NPC_BLEEDING: + case NPC_BLEEDING2: hitrate += hitrate * 20 / 100; break; case NPC_FIREBREATH: case NPC_ICEBREATH: + case NPC_ICEBREATH2: case NPC_THUNDERBREATH: case NPC_ACIDBREATH: case NPC_DARKNESSBREATH: @@ -4097,8 +4099,10 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list * case NPC_DARKNESSBREATH: case NPC_FIREBREATH: case NPC_ICEBREATH: + case NPC_ICEBREATH2: case NPC_THUNDERBREATH: case NPC_HELLJUDGEMENT: + case NPC_HELLJUDGEMENT2: case NPC_PULSESTRIKE: skillratio += 100 * (skill_lv - 1); break; diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 867bff2564..059c8bf483 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -1637,6 +1637,9 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 case NPC_BLEEDING: sc_start(src,bl,SC_BLEEDING,(20*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv)); break; + case NPC_BLEEDING2: + sc_start(src,bl,SC_BLEEDING,(50+10*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv)); + break; case NPC_CHANGEUNDEAD: sc_start(src, bl, SC_CHANGEUNDEAD, (10 * skill_lv), skill_lv, skill_get_time2(skill_id, skill_lv)); break; @@ -1646,6 +1649,9 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 case NPC_ICEBREATH: sc_start(src,bl,SC_FREEZE,70,skill_lv,skill_get_time2(skill_id,skill_lv)); break; + case NPC_ICEBREATH2: + sc_start(src,bl,SC_FREEZE,100,skill_lv,skill_get_time2(skill_id,skill_lv)); + break; case NPC_MENTALBREAKER: { //Based on observations by Tharis, Mental Breaker should do SP damage //equal to Matk*skLevel. @@ -1775,6 +1781,28 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 case NPC_HELLJUDGEMENT: sc_start(src,bl,SC_CURSE,100,skill_lv,skill_get_time2(skill_id,skill_lv)); break; + case NPC_HELLJUDGEMENT2: + switch(rnd()%6) { + case 0: + sc_start(src,bl,SC_SLEEP,100,skill_lv,skill_get_time2(skill_id,skill_lv)); + break; + case 1: + sc_start(src,bl,SC_CONFUSION,100,skill_lv,skill_get_time2(skill_id,skill_lv)); + break; + case 2: + sc_start(src,bl,SC_HALLUCINATION,100,skill_lv,skill_get_time2(skill_id,skill_lv)); + break; + case 3: + sc_start(src,bl,SC_STUN,100,skill_lv,skill_get_time2(skill_id,skill_lv)); + break; + case 4: + sc_start(src,bl,SC_FEAR,100,skill_lv,skill_get_time2(skill_id,skill_lv)); + break; + default: + sc_start(src,bl,SC_CURSE,100,skill_lv,skill_get_time2(skill_id,skill_lv)); + break; + } + break; case NPC_CRITICALWOUND: sc_start(src,bl,SC_CRITICALWOUND,100,skill_lv,skill_get_time2(skill_id,skill_lv)); break; @@ -5130,6 +5158,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case HFLI_MOON: //[orn] case HFLI_SBR44: //[orn] case NPC_BLEEDING: + case NPC_BLEEDING2: case NPC_CRITICALWOUND: case NPC_HELLPOWER: case RK_SONICWAVE: @@ -5330,6 +5359,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case NPC_DARKNESSBREATH: case NPC_FIREBREATH: case NPC_ICEBREATH: + case NPC_ICEBREATH2: case NPC_THUNDERBREATH: case AG_STORM_CANNON: case AG_CRIMSON_ARROW: @@ -5508,6 +5538,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case NPC_PULSESTRIKE: case NPC_PULSESTRIKE2: case NPC_HELLJUDGEMENT: + case NPC_HELLJUDGEMENT2: case NPC_VAMPIRE_GIFT: case NPC_MAXPAIN_ATK: case NPC_JACKFROST: @@ -8477,6 +8508,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case NC_INFRAREDSCAN: case NPC_VAMPIRE_GIFT: case NPC_HELLJUDGEMENT: + case NPC_HELLJUDGEMENT2: case NPC_PULSESTRIKE: case LG_MOONSLASHER: skill_castend_damage_id(src, src, skill_id, skill_lv, tick, flag); @@ -10445,13 +10477,21 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui break; } case NPC_WIDEBLEEDING: + case NPC_WIDEBLEEDING2: case NPC_WIDECONFUSE: + case NPC_WIDECONFUSE2: case NPC_WIDECURSE: + case NPC_WIDECURSE2: case NPC_WIDEFREEZE: + case NPC_WIDEFREEZE2: case NPC_WIDESLEEP: + case NPC_WIDESLEEP2: case NPC_WIDESILENCE: + case NPC_WIDESILENCE2: case NPC_WIDESTONE: + case NPC_WIDESTONE2: case NPC_WIDESTUN: + case NPC_WIDESTUN2: case NPC_SLOWCAST: case NPC_WIDEHELLDIGNITY: case NPC_WIDEHEALTHFEAR: @@ -19425,6 +19465,7 @@ int skill_attack_area(struct block_list *bl, va_list ap) case NPC_DARKNESSBREATH: case NPC_FIREBREATH: case NPC_ICEBREATH: + case NPC_ICEBREATH2: case NPC_THUNDERBREATH: return (int)skill_attack(atk_type,src,dsrc,bl,skill_id,skill_lv,tick,flag); default: diff --git a/src/map/skill.hpp b/src/map/skill.hpp index 9198a1b3a2..e695843ffb 100644 --- a/src/map/skill.hpp +++ b/src/map/skill.hpp @@ -1470,6 +1470,34 @@ enum e_skill { NPC_DAMAGE_HEAL, NPC_IMMUNE_PROPERTY, NPC_MOVE_COORDINATE, + NPC_WIDEBLEEDING2, + NPC_WIDESILENCE2, + NPC_WIDESTUN2, + NPC_WIDESTONE2, + NPC_WIDESLEEP2, + NPC_WIDECURSE2, + NPC_WIDECONFUSE2, + NPC_WIDEFREEZE2, + NPC_BLEEDING2, + NPC_ICEBREATH2, + NPC_ACIDBREATH2, + NPC_EVILLAND2, + NPC_HELLJUDGEMENT2, + NPC_RAINOFMETEOR, + NPC_GROUNDDRIVE, + NPC_RELIEVE_ON, + NPC_RELIEVE_OFF, + NPC_LOCKON_LASER, + NPC_LOCKON_LASER_ATK, + NPC_SEEDTRAP, + NPC_DEADLYCURSE, + NPC_RANDOMBREAK, + NPC_STRIP_SHADOW, + NPC_DEADLYCURSE2, + NPC_CANE_OF_EVIL_EYE, + NPC_CURSE_OF_RED_CUBE, + NPC_CURSE_OF_BLUE_CUBE, + NPC_KILLING_AURA, // 783 KN_CHARGEATK = 1001, CR_SHRINK,