From 01cd8af03ddf1f26b4e0ef641c37d4a8fe5ca54d Mon Sep 17 00:00:00 2001 From: Atemo Date: Thu, 16 Apr 2026 13:30:20 +0200 Subject: [PATCH 1/4] 6th rebalance - Cardinal (#9986) * Arbitrium Reworks skill, removes single-target damage, area damage will deal damage for 2 hits. - Changes base damage from 10000% MATK to 9500% MATK per hit based on level 10. - Reduces skill cooldown from 1 second to 0.75 seconds. - Since single-target damage is removed, the status ailment [quiet] also be removed from the skill. * Petitio - Increases base damage from 10500% ATK to 12000% ATK based on level 10. * Effligo - When equipping mace, damage type is changed to long ranged physical. - Increases base damage from 16500%/18000%(demon, undead) ATK to 18000%/20000%(demon, undead) ATK based on level 10. * Pneumaticus Procella - Reduces AP consumption from 20 to 15 based on level 10. --- db/re/skill_db.yml | 13 ++++++++----- src/map/battle.cpp | 7 ++++--- src/map/skills/acolyte/arbitrium.cpp | 19 ++++++------------- src/map/skills/acolyte/arbitrium.hpp | 4 +--- src/map/skills/acolyte/effligo.cpp | 7 +++++-- src/map/skills/acolyte/petitio.cpp | 5 ++++- 6 files changed, 28 insertions(+), 27 deletions(-) diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index a4b6b581c6a..889bde6d155 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -36951,15 +36951,18 @@ Body: MaxLevel: 10 Type: Magic TargetType: Attack + DamageFlags: + Splash: true Range: 9 - Hit: Single - HitCount: 1 + Hit: Multi_Hit + HitCount: 2 Element: Holy + SplashArea: 4 GiveAp: 2 CastTime: 4000 AfterCastActDelay: 500 Duration1: 20000 - Cooldown: 1000 + Cooldown: 750 FixedCastTime: 1500 Requires: SpCost: @@ -37116,7 +37119,7 @@ Body: FixedCastTime: 1500 Requires: SpCost: 150 - ApCost: 20 + ApCost: 15 Unit: Id: Pneumaticus_Procella Range: @@ -43548,7 +43551,7 @@ Body: Type: Weapon TargetType: Attack Range: 2 - Hit: Multi_hit + Hit: Multi_Hit HitCount: -2 GiveAp: 3 Element: Weapon diff --git a/src/map/battle.cpp b/src/map/battle.cpp index 4b83c3e65da..0fdf544a703 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -2707,10 +2707,11 @@ static int32 battle_range_type(const block_list* src, const block_list* target, case SS_SHIMIRU: // 11 cell cast range. case SKE_STAR_LIGHT_KICK: // 7 cell cast range. return BF_SHORT; - case CD_PETITIO: { // Skill range is 2 but damage is melee with books and ranged with mace. - const map_session_data* sd = BL_CAST(BL_PC,src); + case CD_EFFLIGO: // Skill range is 2 but damage is melee with books and ranged with mace. + case CD_PETITIO: { + const map_session_data* sd = BL_CAST(BL_PC, src); - if (sd && (sd->status.weapon == W_MACE || sd->status.weapon == W_2HMACE)) + if (sd != nullptr && (sd->status.weapon == W_MACE || sd->status.weapon == W_2HMACE)) return BF_LONG; break; diff --git a/src/map/skills/acolyte/arbitrium.cpp b/src/map/skills/acolyte/arbitrium.cpp index 9502a2052af..0e98c892550 100644 --- a/src/map/skills/acolyte/arbitrium.cpp +++ b/src/map/skills/acolyte/arbitrium.cpp @@ -8,28 +8,21 @@ #include "map/pc.hpp" #include "map/status.hpp" -SkillArbitrium::SkillArbitrium() : SkillImpl(CD_ARBITRIUM) { -} - -void SkillArbitrium::castendDamageId(block_list* src, block_list* target, uint16 skill_lv, t_tick tick, int32& flag) const { - skill_attack(BF_MAGIC, src, src, target, getSkillId(), skill_lv, tick, flag); +SkillArbitrium::SkillArbitrium() : SkillImplRecursiveDamageSplash(CD_ARBITRIUM) { } void SkillArbitrium::calculateSkillRatio(const Damage* wd, const block_list* src, const block_list* target, uint16 skill_lv, int32& skillratio, int32 mflag) const { const map_session_data* sd = BL_CAST(BL_PC, src); const status_data* sstatus = status_get_status_data(*src); - skillratio += -100 + 1000 * skill_lv + 10 * sstatus->spl; - skillratio += 10 * pc_checkskill(sd, CD_FIDUS_ANIMUS) * skill_lv; - RE_LVL_DMOD(100); -} + skillratio += -100 + 950 * skill_lv; + skillratio += 10 * sstatus->spl; // TODO : spl ratio has changed ? + skillratio += 35 * pc_checkskill(sd, CD_FIDUS_ANIMUS) * skill_lv; -void SkillArbitrium::applyAdditionalEffects(block_list* src, block_list* target, uint16 skill_lv, t_tick tick, int32 attack_type, enum damage_lv dmg_lv) const { - // Target is Deep Silenced by chance and is then dealt a 2nd splash hit. - sc_start(src, target, SC_HANDICAPSTATE_DEEPSILENCE, 20 + 5 * skill_lv, skill_lv, skill_get_time(getSkillId(), skill_lv)); - skill_castend_damage_id(src, target, CD_ARBITRIUM_ATK, skill_lv, tick, SD_LEVEL); + RE_LVL_DMOD(100); } +// TODO : CD_ARBITRIUM_ATK is no longer used ? SkillArbitriumAttack::SkillArbitriumAttack() : SkillImplRecursiveDamageSplash(CD_ARBITRIUM_ATK) { } diff --git a/src/map/skills/acolyte/arbitrium.hpp b/src/map/skills/acolyte/arbitrium.hpp index 7c6a0992ee1..3b251236a6c 100644 --- a/src/map/skills/acolyte/arbitrium.hpp +++ b/src/map/skills/acolyte/arbitrium.hpp @@ -5,13 +5,11 @@ #include "../skill_impl.hpp" -class SkillArbitrium : public SkillImpl { +class SkillArbitrium : public SkillImplRecursiveDamageSplash { public: SkillArbitrium(); - void castendDamageId(block_list* src, block_list* target, uint16 skill_lv, t_tick tick, int32& flag) const override; void calculateSkillRatio(const Damage* wd, const block_list* src, const block_list* target, uint16 skill_lv, int32& base_skillratio, int32 mflag) const override; - void applyAdditionalEffects(block_list* src, block_list* target, uint16 skill_lv, t_tick tick, int32 attack_type, enum damage_lv dmg_lv) const override; }; class SkillArbitriumAttack : public SkillImplRecursiveDamageSplash { diff --git a/src/map/skills/acolyte/effligo.cpp b/src/map/skills/acolyte/effligo.cpp index 6fa9075c80e..bf73b3f73b5 100644 --- a/src/map/skills/acolyte/effligo.cpp +++ b/src/map/skills/acolyte/effligo.cpp @@ -23,11 +23,14 @@ void SkillEffligo::calculateSkillRatio(const Damage* wd, const block_list* src, const status_data* sstatus = status_get_status_data(*src); const status_data* tstatus = status_get_status_data(*target); - skillratio += -100 + 1650 * skill_lv + 7 * sstatus->pow; + skillratio += -100 + 1800 * skill_lv; + skillratio += 7 * sstatus->pow; skillratio += 8 * pc_checkskill(sd, CD_MACE_BOOK_M); + if (tstatus->race == RC_UNDEAD || tstatus->race == RC_DEMON) { - skillratio += 150 * skill_lv; + skillratio += 200 * skill_lv; skillratio += 7 * pc_checkskill(sd, CD_MACE_BOOK_M); } + RE_LVL_DMOD(100); } diff --git a/src/map/skills/acolyte/petitio.cpp b/src/map/skills/acolyte/petitio.cpp index a31a04ba645..a03c8902dd6 100644 --- a/src/map/skills/acolyte/petitio.cpp +++ b/src/map/skills/acolyte/petitio.cpp @@ -16,7 +16,10 @@ void SkillPetitio::calculateSkillRatio(const Damage* wd, const block_list* src, const map_session_data* sd = BL_CAST(BL_PC, src); const status_data* sstatus = status_get_status_data(*src); - skillratio += -100 + (1050 + pc_checkskill(sd, CD_MACE_BOOK_M) * 50) * skill_lv + 5 * sstatus->pow; + skillratio += -100 + 1200 * skill_lv; + skillratio += pc_checkskill(sd, CD_MACE_BOOK_M) * 50 * skill_lv; + skillratio += 5 * sstatus->pow; + RE_LVL_DMOD(100); } From ddaf23cfd2d08ff7e46002a83b83467b4311f4db Mon Sep 17 00:00:00 2001 From: idk-whoami <60462533+idk-whoami@users.noreply.github.com> Date: Thu, 16 Apr 2026 18:31:59 +0700 Subject: [PATCH 2/4] Added new 9 kRO etc items (#9996) 1002834 (Ground Essence of the Rift) 1002835 (Ground Rune Ore Shard) 1002836 (Ground Rune of Rift) 1002837 (Rift Volcanic Essence) 1002838 (Rift Volcano Rune Shard) 1002839 (Rift Volcano Rune) 1002840 (Fixed Crack) 1002841 (Dimensional Land Card Shard) 1002842 (Dimensional Volcano Card Shard) --- db/re/item_db_etc.yml | 45 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/db/re/item_db_etc.yml b/db/re/item_db_etc.yml index 045c46f10aa..035c7c13c92 100644 --- a/db/re/item_db_etc.yml +++ b/db/re/item_db_etc.yml @@ -102030,6 +102030,51 @@ Body: Weight: 10 Trade: NoDrop: true + - Id: 1002834 + AegisName: ABI_Ground_Essence + Name: Ground Essence of the Rift # !todo check english name + Type: Etc + Weight: 10 + - Id: 1002835 + AegisName: ABI_Ground_Rune_Ore + Name: Ground Rune Ore Shard # !todo check english name + Type: Etc + Weight: 1 + - Id: 1002836 + AegisName: ABI_Ground_Rune + Name: Ground Rune of Rift # !todo check english name + Type: Etc + Weight: 10 + - Id: 1002837 + AegisName: ABI_Lava_Essence + Name: Rift Volcanic Essence # !todo check english name + Type: Etc + Weight: 10 + - Id: 1002838 + AegisName: ABI_Lava_Rune_Ore + Name: Rift Volcano Rune Shard # !todo check english name + Type: Etc + Weight: 1 + - Id: 1002839 + AegisName: ABI_Lava_Rune + Name: Rift Volcano Rune # !todo check english name + Type: Etc + Weight: 10 + - Id: 1002840 + AegisName: ABI_Fixed_Crack + Name: Fixed Crack # !todo check english name + Type: Etc + Weight: 10 + - Id: 1002841 + AegisName: aegis_1002841 + Name: Dimensional Land Card Shard # !todo check english name + Type: Etc + Weight: 10 + - Id: 1002842 + AegisName: aegis_1002842 + Name: Dimensional Volcano Card Shard # !todo check english name + Type: Etc + Weight: 10 - Id: 1200000 AegisName: IDTest_arrow Name: IDTest arrow From 2942963145be2c435cef40255aeda15adb7bdf97 Mon Sep 17 00:00:00 2001 From: idk-whoami <60462533+idk-whoami@users.noreply.github.com> Date: Thu, 16 Apr 2026 18:34:39 +0700 Subject: [PATCH 3/4] Added new 9 jRO costume items (#9994) 401294 (Costume Tulip Hairpin (Yellow)) 401295 (Costume Nymph's Ear) 401300 (Costume Light Green Feather Hat) 401303 (Costume Ruck Keeper) 420774 (Costume Poporin Bubble Pipe) 420775 (Costume Petal Twin) 420776 (Costume Petal Twin (No Decoration)) 480772 (Costume Angel's Gift) 480773 (Costume Blooming Staff Pink) --- db/re/item_db_equip.yml | 76 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/db/re/item_db_equip.yml b/db/re/item_db_equip.yml index ce503a613d9..f629fde6195 100644 --- a/db/re/item_db_equip.yml +++ b/db/re/item_db_equip.yml @@ -180688,6 +180688,38 @@ Body: Costume_Head_Top: true ArmorLevel: 1 View: 2814 + - Id: 401294 + AegisName: aegis_401294 + Name: Costume Tulip Hairpin (Yellow) # !todo check english name + Type: Armor + Locations: + Costume_Head_Top: true + ArmorLevel: 1 + View: 499 + - Id: 401295 + AegisName: C_Nymph_Ear + Name: Costume Nymph's Ear + Type: Armor + Locations: + Costume_Head_Mid: true + ArmorLevel: 1 + View: 2818 + - Id: 401300 + AegisName: C_LG_Feather_Hat + Name: Costume Light Green Feather Hat # !todo check english name + Type: Armor + Locations: + Costume_Head_Top: true + ArmorLevel: 1 + View: 2819 + - Id: 401303 + AegisName: C_Ruck_Keeper + Name: Costume Ruck Keeper + Type: Armor + Locations: + Costume_Head_Top: true + ArmorLevel: 1 + View: 2822 - Id: 410000 AegisName: Resonate_Taego_J Name: Ancient Resonance @@ -189744,6 +189776,30 @@ Body: Costume_Head_Low: true ArmorLevel: 1 View: 2816 + - Id: 420774 + AegisName: aegis_420774 + Name: Costume Poporin Bubble Pipe + Type: Armor + Locations: + Costume_Head_Low: true + ArmorLevel: 1 + View: 2753 + - Id: 420775 + AegisName: C_Petal_Twin + Name: Costume Petal Twin + Type: Armor + Locations: + Costume_Head_Low: true + ArmorLevel: 1 + View: 2820 + - Id: 420776 + AegisName: C_Petal_Twin_N + Name: Costume Petal Twin (No Decoration) + Type: Armor + Locations: + Costume_Head_Low: true + ArmorLevel: 1 + View: 2821 - Id: 430001 AegisName: C_Helm_Of_Ra Name: Costume Hat of the Sun God @@ -219762,6 +219818,26 @@ Body: Costume_Garment: true ArmorLevel: 1 View: 301 + - Id: 480772 + AegisName: C_Angel_Gift + Name: Costume Angel's Gift + Type: Armor + Locations: + Costume_Garment: true + ArmorLevel: 1 + View: 302 + Script: | + hateffect HAT_EF_C_ANGEL_GIFT,true; + UnEquipScript: | + hateffect HAT_EF_C_ANGEL_GIFT,false; + - Id: 480773 + AegisName: C_Sakura_Rod_PK + Name: Costume Blooming Staff Pink # !todo check english name + Type: Armor + Locations: + Costume_Garment: true + ArmorLevel: 1 + View: 303 - Id: 490004 AegisName: Atker_Ring Name: Attacker Booster Ring From cb46bd2a155310cf21abc48afed4f21290a02c06 Mon Sep 17 00:00:00 2001 From: idk-whoami <60462533+idk-whoami@users.noreply.github.com> Date: Thu, 16 Apr 2026 18:36:53 +0700 Subject: [PATCH 4/4] Corrected classes restrictions and trade restrictions of item (Full Penetration Shadow) (#9995) 24661 (Full Penetration Shadow Earring) 24662 (Full Penetration Shadow Pendant) 24663 (Full Penetration Shadow Armor) 24664 (Full Penetration Shadow Shoes) --- db/re/item_db_equip.yml | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/db/re/item_db_equip.yml b/db/re/item_db_equip.yml index f629fde6195..f3ece41059a 100644 --- a/db/re/item_db_equip.yml +++ b/db/re/item_db_equip.yml @@ -133619,6 +133619,11 @@ Body: Type: ShadowGear Locations: Shadow_Right_Accessory: true + Trade: + NoDrop: true + NoSell: true + NoMail: true + NoAuction: true Refineable: true Script: | .@r = getrefine(); @@ -133635,11 +133640,13 @@ Body: AegisName: S_FullPene_Pendant Name: Full Penetration Shadow Pendant Type: ShadowGear - Jobs: - All: true - Novice: false Locations: Shadow_Left_Accessory: true + Trade: + NoDrop: true + NoSell: true + NoMail: true + NoAuction: true Refineable: true Script: | .@r = getrefine(); @@ -133658,6 +133665,11 @@ Body: Type: ShadowGear Locations: Shadow_Armor: true + Trade: + NoDrop: true + NoSell: true + NoMail: true + NoAuction: true Refineable: true Script: | .@r = getrefine(); @@ -133674,11 +133686,13 @@ Body: AegisName: S_FullPene_Shoes Name: Full Penetration Shadow Shoes Type: ShadowGear - Jobs: - All: true - Novice: false Locations: Shadow_Shoes: true + Trade: + NoDrop: true + NoSell: true + NoMail: true + NoAuction: true Refineable: true Script: | .@r = getrefine();