From 7484b1562312c4caa59915fd58a054144be90c1f Mon Sep 17 00:00:00 2001 From: Atemo Date: Tue, 27 Jan 2026 19:20:48 +0100 Subject: [PATCH 1/2] Split up Whitesmith skills (#9759) --- src/map/battle.cpp | 9 ------- src/map/map-server-generator.vcxproj | 4 +++ src/map/map-server-generator.vcxproj.filters | 12 +++++++++ src/map/map-server.vcxproj | 4 +++ src/map/map-server.vcxproj.filters | 12 +++++++++ src/map/skill.cpp | 11 -------- src/map/skills/merchant/carttermination.cpp | 26 +++++++++++++++++++ src/map/skills/merchant/carttermination.hpp | 14 ++++++++++ .../merchant/skill_factory_merchant.cpp | 6 ++++- src/map/skills/merchant/upgradeweapon.cpp | 18 +++++++++++++ src/map/skills/merchant/upgradeweapon.hpp | 13 ++++++++++ 11 files changed, 108 insertions(+), 21 deletions(-) create mode 100644 src/map/skills/merchant/carttermination.cpp create mode 100644 src/map/skills/merchant/carttermination.hpp create mode 100644 src/map/skills/merchant/upgradeweapon.cpp create mode 100644 src/map/skills/merchant/upgradeweapon.hpp diff --git a/src/map/battle.cpp b/src/map/battle.cpp index d707198bbc3..ed2b95af6b1 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -4919,15 +4919,6 @@ static int32 battle_calc_attack_skill_ratio(struct Damage* wd, block_list *src,b if (sc && sc->getSCE(SC_SHIELD_POWER))// Whats the official increase? [Rytech] skillratio += skillratio * 50 / 100; break; - case WS_CARTTERMINATION: - i = 10 * (16 - skill_lv); - if (i < 1) i = 1; - //Preserve damage ratio when max cart weight is changed. - if (sd && sd->cart_weight) - skillratio += sd->cart_weight / i * 80000 / battle_config.max_cart_weight - 100; - else if (!sd) - skillratio += 80000 / i - 100; - break; case NJ_HUUMA: #ifdef RENEWAL skillratio += -150 + 250 * skill_lv; diff --git a/src/map/map-server-generator.vcxproj b/src/map/map-server-generator.vcxproj index 98691c10e13..5132c234971 100644 --- a/src/map/map-server-generator.vcxproj +++ b/src/map/map-server-generator.vcxproj @@ -350,6 +350,7 @@ + @@ -368,6 +369,7 @@ + @@ -629,6 +631,7 @@ + @@ -647,6 +650,7 @@ + diff --git a/src/map/map-server-generator.vcxproj.filters b/src/map/map-server-generator.vcxproj.filters index c02c0791e28..40e83d70653 100644 --- a/src/map/map-server-generator.vcxproj.filters +++ b/src/map/map-server-generator.vcxproj.filters @@ -699,6 +699,9 @@ Header Files\Skills\Merchant + + Header Files\Skills\Merchant + Header Files\Skills\Merchant @@ -753,6 +756,9 @@ Header Files\Skills\Merchant + + Header Files\Skills\Merchant + Header Files\Skills\Merchant @@ -1394,6 +1400,9 @@ Source Files\Skills\Merchant + + Source Files\Skills\Merchant + Source Files\Skills\Merchant @@ -1448,6 +1457,9 @@ Source Files\Skills\Merchant + + Source Files\Skills\Merchant + Source Files\Skills\Merchant diff --git a/src/map/map-server.vcxproj b/src/map/map-server.vcxproj index cf56751fbbb..1c05d9ebb56 100644 --- a/src/map/map-server.vcxproj +++ b/src/map/map-server.vcxproj @@ -350,6 +350,7 @@ + @@ -368,6 +369,7 @@ + @@ -629,6 +631,7 @@ + @@ -647,6 +650,7 @@ + diff --git a/src/map/map-server.vcxproj.filters b/src/map/map-server.vcxproj.filters index c02c0791e28..40e83d70653 100644 --- a/src/map/map-server.vcxproj.filters +++ b/src/map/map-server.vcxproj.filters @@ -699,6 +699,9 @@ Header Files\Skills\Merchant + + Header Files\Skills\Merchant + Header Files\Skills\Merchant @@ -753,6 +756,9 @@ Header Files\Skills\Merchant + + Header Files\Skills\Merchant + Header Files\Skills\Merchant @@ -1394,6 +1400,9 @@ Source Files\Skills\Merchant + + Source Files\Skills\Merchant + Source Files\Skills\Merchant @@ -1448,6 +1457,9 @@ Source Files\Skills\Merchant + + Source Files\Skills\Merchant + Source Files\Skills\Merchant diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 6293103a553..345a4077322 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -1585,10 +1585,6 @@ int32 skill_additional_effect( block_list* src, block_list *bl, uint16 skill_id, sc_start(src,bl,SC_CURSE,5*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv)); break; - case WS_CARTTERMINATION: // Cart termination - sc_start(src,bl,SC_STUN,5*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv)); - break; - case CR_ACIDDEMONSTRATION: case GN_FIRE_EXPANSION_ACID: skill_break_equip(src,bl, EQP_WEAPON|EQP_ARMOR, 100*skill_lv, BCT_ENEMY); @@ -8711,13 +8707,6 @@ int32 skill_castend_nodamage_id (block_list *src, block_list *bl, uint16 skill_i clif_skill_nodamage(src, *bl, skill_id, skill_lv); break; - // Weapon Refining [Celest] - case WS_WEAPONREFINE: - if( sd != nullptr ){ - clif_item_refine_list( *sd ); - } - break; - case AL_TELEPORT: case ALL_ODINS_RECALL: if(sd != nullptr) diff --git a/src/map/skills/merchant/carttermination.cpp b/src/map/skills/merchant/carttermination.cpp new file mode 100644 index 00000000000..efd33f511cc --- /dev/null +++ b/src/map/skills/merchant/carttermination.cpp @@ -0,0 +1,26 @@ +// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#include "carttermination.hpp" + +#include "map/pc.hpp" +#include "map/status.hpp" + +SkillCartTermination::SkillCartTermination() : WeaponSkillImpl(WS_CARTTERMINATION) { +} + +void SkillCartTermination::calculateSkillRatio(const Damage *wd, const block_list *src, const block_list *target, uint16 skill_lv, int32 &base_skillratio, int32 mflag) const { + const map_session_data* sd = BL_CAST( BL_PC, src ); + + int32 i = 10 * (16 - skill_lv); + if (i < 1) i = 1; + //Preserve damage ratio when max cart weight is changed. + if (sd && sd->cart_weight) + base_skillratio += sd->cart_weight / i * 80000 / battle_config.max_cart_weight - 100; + else if (!sd) + base_skillratio += 80000 / i - 100; +} + +void SkillCartTermination::applyAdditionalEffects(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int32 attack_type, enum damage_lv dmg_lv) const { + sc_start(src,target,SC_STUN,5*skill_lv,skill_lv,skill_get_time2(getSkillId(),skill_lv)); +} diff --git a/src/map/skills/merchant/carttermination.hpp b/src/map/skills/merchant/carttermination.hpp new file mode 100644 index 00000000000..7a57694566a --- /dev/null +++ b/src/map/skills/merchant/carttermination.hpp @@ -0,0 +1,14 @@ +// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#pragma once + +#include "../weapon_skill_impl.hpp" + +class SkillCartTermination : public WeaponSkillImpl { +public: + SkillCartTermination(); + + void applyAdditionalEffects(block_list* src, block_list* target, uint16 skill_lv, t_tick tick, int32 attack_type, enum damage_lv dmg_lv) 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; +}; diff --git a/src/map/skills/merchant/skill_factory_merchant.cpp b/src/map/skills/merchant/skill_factory_merchant.cpp index 1039064a30c..2ad349cb56d 100644 --- a/src/map/skills/merchant/skill_factory_merchant.cpp +++ b/src/map/skills/merchant/skill_factory_merchant.cpp @@ -19,6 +19,7 @@ #include "callhomunculus.hpp" #include "decoratecart.hpp" #include "cartrevolution.hpp" +#include "carttermination.hpp" #include "changecart.hpp" #include "greed.hpp" #include "hammerfall.hpp" @@ -35,6 +36,7 @@ #include "twilightalchemy1.hpp" #include "twilightalchemy2.hpp" #include "twilightalchemy3.hpp" +#include "upgradeweapon.hpp" #include "vaporize.hpp" #include "weaponperfection.hpp" #include "weaponrepair.hpp" @@ -148,11 +150,13 @@ std::unique_ptr SkillFactoryMerchant::create(const e_skill skil case WS_CARTBOOST: return std::make_unique(skill_id); case WS_CARTTERMINATION: - return std::make_unique(skill_id); + return std::make_unique(); case WS_MELTDOWN: return std::make_unique(skill_id); case WS_OVERTHRUSTMAX: return std::make_unique(skill_id); + case WS_WEAPONREFINE: + return std::make_unique(); default: return nullptr; diff --git a/src/map/skills/merchant/upgradeweapon.cpp b/src/map/skills/merchant/upgradeweapon.cpp new file mode 100644 index 00000000000..e7bb2e2b5fe --- /dev/null +++ b/src/map/skills/merchant/upgradeweapon.cpp @@ -0,0 +1,18 @@ +// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#include "upgradeweapon.hpp" + +#include "map/clif.hpp" +#include "map/pc.hpp" + +SkillUpgradeWeapon::SkillUpgradeWeapon() : SkillImpl(WS_WEAPONREFINE) { +} + +void SkillUpgradeWeapon::castendNoDamageId(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int32& flag) const { + map_session_data* sd = BL_CAST( BL_PC, src ); + + if( sd != nullptr ){ + clif_item_refine_list( *sd ); + } +} diff --git a/src/map/skills/merchant/upgradeweapon.hpp b/src/map/skills/merchant/upgradeweapon.hpp new file mode 100644 index 00000000000..f0c1057fc92 --- /dev/null +++ b/src/map/skills/merchant/upgradeweapon.hpp @@ -0,0 +1,13 @@ +// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#pragma once + +#include "../skill_impl.hpp" + +class SkillUpgradeWeapon : public SkillImpl { +public: + SkillUpgradeWeapon(); + + void castendNoDamageId(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int32& flag) const override; +}; From e0c255a2661262f87b0e09db6b0d3c97685402bc Mon Sep 17 00:00:00 2001 From: Atemo Date: Tue, 27 Jan 2026 22:21:23 +0100 Subject: [PATCH 2/2] Split up Star Gladiator skills (#9761) --- src/map/map-server-generator.vcxproj | 10 +++++++ src/map/map-server-generator.vcxproj.filters | 30 +++++++++++++++++++ src/map/map-server.vcxproj | 10 +++++++ src/map/map-server.vcxproj.filters | 30 +++++++++++++++++++ src/map/skill.cpp | 27 ----------------- .../taekwon/feelingthesunmoonandstars.cpp | 22 ++++++++++++++ .../taekwon/feelingthesunmoonandstars.hpp | 13 ++++++++ .../taekwon/hatredofthesunmoonandstars.cpp | 20 +++++++++++++ .../taekwon/hatredofthesunmoonandstars.hpp | 13 ++++++++ .../skills/taekwon/skill_factory_taekwon.cpp | 15 ++++++++++ src/map/skills/taekwon/warmthofthemoon.cpp | 19 ++++++++++++ src/map/skills/taekwon/warmthofthemoon.hpp | 13 ++++++++ src/map/skills/taekwon/warmthofthestars.cpp | 19 ++++++++++++ src/map/skills/taekwon/warmthofthestars.hpp | 13 ++++++++ src/map/skills/taekwon/warmthofthesun.cpp | 19 ++++++++++++ src/map/skills/taekwon/warmthofthesun.hpp | 13 ++++++++ 16 files changed, 259 insertions(+), 27 deletions(-) create mode 100644 src/map/skills/taekwon/feelingthesunmoonandstars.cpp create mode 100644 src/map/skills/taekwon/feelingthesunmoonandstars.hpp create mode 100644 src/map/skills/taekwon/hatredofthesunmoonandstars.cpp create mode 100644 src/map/skills/taekwon/hatredofthesunmoonandstars.hpp create mode 100644 src/map/skills/taekwon/warmthofthemoon.cpp create mode 100644 src/map/skills/taekwon/warmthofthemoon.hpp create mode 100644 src/map/skills/taekwon/warmthofthestars.cpp create mode 100644 src/map/skills/taekwon/warmthofthestars.hpp create mode 100644 src/map/skills/taekwon/warmthofthesun.cpp create mode 100644 src/map/skills/taekwon/warmthofthesun.hpp diff --git a/src/map/map-server-generator.vcxproj b/src/map/map-server-generator.vcxproj index 5132c234971..80f5094f455 100644 --- a/src/map/map-server-generator.vcxproj +++ b/src/map/map-server-generator.vcxproj @@ -411,6 +411,8 @@ + + @@ -439,6 +441,9 @@ + + + @@ -692,6 +697,8 @@ + + @@ -720,6 +727,9 @@ + + + diff --git a/src/map/map-server-generator.vcxproj.filters b/src/map/map-server-generator.vcxproj.filters index 40e83d70653..4564467d5ca 100644 --- a/src/map/map-server-generator.vcxproj.filters +++ b/src/map/map-server-generator.vcxproj.filters @@ -882,6 +882,12 @@ Header Files\Skills\Taekwon + + Header Files\Skills\Taekwon + + + Header Files\Skills\Taekwon + Header Files\Skills\Taekwon @@ -966,6 +972,15 @@ Header Files\Skills\Taekwon + + Header Files\Skills\Taekwon + + + Header Files\Skills\Taekwon + + + Header Files\Skills\Taekwon + Header Files\Skills\Thief @@ -1583,6 +1598,12 @@ Source Files\Skills\Taekwon + + Source Files\Skills\Taekwon + + + Source Files\Skills\Taekwon + Source Files\Skills\Taekwon @@ -1667,6 +1688,15 @@ Source Files\Skills\Taekwon + + Source Files\Skills\Taekwon + + + Source Files\Skills\Taekwon + + + Source Files\Skills\Taekwon + Source Files\Skills\Thief diff --git a/src/map/map-server.vcxproj b/src/map/map-server.vcxproj index 1c05d9ebb56..7836b4a290e 100644 --- a/src/map/map-server.vcxproj +++ b/src/map/map-server.vcxproj @@ -411,6 +411,8 @@ + + @@ -439,6 +441,9 @@ + + + @@ -692,6 +697,8 @@ + + @@ -720,6 +727,9 @@ + + + diff --git a/src/map/map-server.vcxproj.filters b/src/map/map-server.vcxproj.filters index 40e83d70653..4564467d5ca 100644 --- a/src/map/map-server.vcxproj.filters +++ b/src/map/map-server.vcxproj.filters @@ -882,6 +882,12 @@ Header Files\Skills\Taekwon + + Header Files\Skills\Taekwon + + + Header Files\Skills\Taekwon + Header Files\Skills\Taekwon @@ -966,6 +972,15 @@ Header Files\Skills\Taekwon + + Header Files\Skills\Taekwon + + + Header Files\Skills\Taekwon + + + Header Files\Skills\Taekwon + Header Files\Skills\Thief @@ -1583,6 +1598,12 @@ Source Files\Skills\Taekwon + + Source Files\Skills\Taekwon + + + Source Files\Skills\Taekwon + Source Files\Skills\Taekwon @@ -1667,6 +1688,15 @@ Source Files\Skills\Taekwon + + Source Files\Skills\Taekwon + + + Source Files\Skills\Taekwon + + + Source Files\Skills\Taekwon + Source Files\Skills\Thief diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 345a4077322..d1d52affd07 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -9582,24 +9582,6 @@ int32 skill_castend_nodamage_id (block_list *src, block_list *bl, uint16 skill_i clif_skill_fail( *sd, skill_id ); break; - case SG_FEEL: - //AuronX reported you CAN memorize the same map as all three. [Skotlex] - if (sd) { - if(!sd->feel_map[skill_lv-1].index) - clif_feel_req(sd->fd,sd, skill_lv); - else - clif_feel_info(sd, skill_lv-1, 1); - } - break; - - case SG_HATE: - if (sd) { - clif_skill_nodamage(src,*bl,skill_id,skill_lv); - if (!pc_set_hate_mob(sd, skill_lv-1, bl)) - clif_skill_fail( *sd, skill_id ); - } - break; - case SJ_DOCUMENT: if (sd) { switch (skill_lv) { @@ -13335,15 +13317,6 @@ int32 skill_castend_pos2(block_list* src, int32 x, int32 y, uint16 skill_id, uin } break; - case SG_SUN_WARM: - case SG_MOON_WARM: - case SG_STAR_WARM: - skill_clear_unitgroup(src); - if ((sg = skill_unitsetting(src,skill_id,skill_lv,src->x,src->y,0))) - sc_start4(src,src,type,100,skill_lv,0,0,sg->group_id,skill_get_time(skill_id,skill_lv)); - flag|=1; - break; - case PA_GOSPEL: if (sce && sce->val4 == BCT_SELF) { diff --git a/src/map/skills/taekwon/feelingthesunmoonandstars.cpp b/src/map/skills/taekwon/feelingthesunmoonandstars.cpp new file mode 100644 index 00000000000..99e013af8f1 --- /dev/null +++ b/src/map/skills/taekwon/feelingthesunmoonandstars.cpp @@ -0,0 +1,22 @@ +// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#include "feelingthesunmoonandstars.hpp" + +#include "map/clif.hpp" +#include "map/pc.hpp" + +SkillFeelingtheSunMoonandStars::SkillFeelingtheSunMoonandStars() : SkillImpl(SG_FEEL) { +} + +void SkillFeelingtheSunMoonandStars::castendNoDamageId(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int32& flag) const { + map_session_data* sd = BL_CAST( BL_PC, src ); + + //AuronX reported you CAN memorize the same map as all three. [Skotlex] + if (sd) { + if(!sd->feel_map[skill_lv-1].index) + clif_feel_req(sd->fd,sd, skill_lv); + else + clif_feel_info(sd, skill_lv-1, 1); + } +} diff --git a/src/map/skills/taekwon/feelingthesunmoonandstars.hpp b/src/map/skills/taekwon/feelingthesunmoonandstars.hpp new file mode 100644 index 00000000000..a4e676289c8 --- /dev/null +++ b/src/map/skills/taekwon/feelingthesunmoonandstars.hpp @@ -0,0 +1,13 @@ +// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#pragma once + +#include "../skill_impl.hpp" + +class SkillFeelingtheSunMoonandStars : public SkillImpl { +public: + SkillFeelingtheSunMoonandStars(); + + void castendNoDamageId(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int32& flag) const override; +}; diff --git a/src/map/skills/taekwon/hatredofthesunmoonandstars.cpp b/src/map/skills/taekwon/hatredofthesunmoonandstars.cpp new file mode 100644 index 00000000000..af9b59f5078 --- /dev/null +++ b/src/map/skills/taekwon/hatredofthesunmoonandstars.cpp @@ -0,0 +1,20 @@ +// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#include "hatredofthesunmoonandstars.hpp" + +#include "map/clif.hpp" +#include "map/pc.hpp" + +SkillHatredoftheSunMoonandStars::SkillHatredoftheSunMoonandStars() : SkillImpl(SG_HATE) { +} + +void SkillHatredoftheSunMoonandStars::castendNoDamageId(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int32& flag) const { + map_session_data* sd = BL_CAST( BL_PC, src ); + + if (sd) { + clif_skill_nodamage(src,*target,getSkillId(),skill_lv); + if (!pc_set_hate_mob(sd, skill_lv-1, target)) + clif_skill_fail( *sd, getSkillId() ); + } +} diff --git a/src/map/skills/taekwon/hatredofthesunmoonandstars.hpp b/src/map/skills/taekwon/hatredofthesunmoonandstars.hpp new file mode 100644 index 00000000000..5cbbba94c86 --- /dev/null +++ b/src/map/skills/taekwon/hatredofthesunmoonandstars.hpp @@ -0,0 +1,13 @@ +// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#pragma once + +#include "../skill_impl.hpp" + +class SkillHatredoftheSunMoonandStars : public SkillImpl { +public: + SkillHatredoftheSunMoonandStars(); + + void castendNoDamageId(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int32& flag) const override; +}; diff --git a/src/map/skills/taekwon/skill_factory_taekwon.cpp b/src/map/skills/taekwon/skill_factory_taekwon.cpp index 4486fb92687..f82659caff3 100644 --- a/src/map/skills/taekwon/skill_factory_taekwon.cpp +++ b/src/map/skills/taekwon/skill_factory_taekwon.cpp @@ -14,6 +14,8 @@ #include "estin.hpp" #include "estun.hpp" #include "eswoo.hpp" +#include "feelingthesunmoonandstars.hpp" +#include "hatredofthesunmoonandstars.hpp" #include "highjump.hpp" #include "jumpkick.hpp" #include "kaahi.hpp" @@ -41,17 +43,30 @@ #include "spiritofthewizard.hpp" #include "stormkick.hpp" #include "turnkick.hpp" +#include "warmthofthemoon.hpp" +#include "warmthofthestars.hpp" +#include "warmthofthesun.hpp" std::unique_ptr SkillFactoryTaekwon::create(const e_skill skill_id) const { switch (skill_id) { + case SG_FEEL: + return std::make_unique(); case SG_FUSION: return std::make_unique(skill_id, true); + case SG_HATE: + return std::make_unique(); case SG_MOON_COMFORT: return std::make_unique(skill_id); + case SG_MOON_WARM: + return std::make_unique(); case SG_STAR_COMFORT: return std::make_unique(skill_id); + case SG_STAR_WARM: + return std::make_unique(); case SG_SUN_COMFORT: return std::make_unique(skill_id); + case SG_SUN_WARM: + return std::make_unique(); case SJ_BOOKOFDIMENSION: return std::make_unique(skill_id); case SJ_FALLINGSTAR: diff --git a/src/map/skills/taekwon/warmthofthemoon.cpp b/src/map/skills/taekwon/warmthofthemoon.cpp new file mode 100644 index 00000000000..5aea29470bc --- /dev/null +++ b/src/map/skills/taekwon/warmthofthemoon.cpp @@ -0,0 +1,19 @@ +// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#include "warmthofthemoon.hpp" + +#include "map/status.hpp" + +SkillWarmthoftheMoon::SkillWarmthoftheMoon() : SkillImpl(SG_MOON_WARM) { +} + +void SkillWarmthoftheMoon::castendPos2(block_list* src, int32 x, int32 y, uint16 skill_lv, t_tick tick, int32& flag) const { + sc_type type = skill_get_sc(getSkillId()); + std::shared_ptr sg; + + skill_clear_unitgroup(src); + if ((sg = skill_unitsetting(src,getSkillId(),skill_lv,src->x,src->y,0))) + sc_start4(src,src,type,100,skill_lv,0,0,sg->group_id,skill_get_time(getSkillId(),skill_lv)); + flag|=1; +} diff --git a/src/map/skills/taekwon/warmthofthemoon.hpp b/src/map/skills/taekwon/warmthofthemoon.hpp new file mode 100644 index 00000000000..b2ae0be4e14 --- /dev/null +++ b/src/map/skills/taekwon/warmthofthemoon.hpp @@ -0,0 +1,13 @@ +// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#pragma once + +#include "../skill_impl.hpp" + +class SkillWarmthoftheMoon : public SkillImpl { +public: + SkillWarmthoftheMoon(); + + void castendPos2(block_list* src, int32 x, int32 y, uint16 skill_lv, t_tick tick, int32& flag) const override; +}; diff --git a/src/map/skills/taekwon/warmthofthestars.cpp b/src/map/skills/taekwon/warmthofthestars.cpp new file mode 100644 index 00000000000..b22306abc6c --- /dev/null +++ b/src/map/skills/taekwon/warmthofthestars.cpp @@ -0,0 +1,19 @@ +// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#include "warmthofthestars.hpp" + +#include "map/status.hpp" + +SkillWarmthoftheStars::SkillWarmthoftheStars() : SkillImpl(SG_STAR_WARM) { +} + +void SkillWarmthoftheStars::castendPos2(block_list* src, int32 x, int32 y, uint16 skill_lv, t_tick tick, int32& flag) const { + sc_type type = skill_get_sc(getSkillId()); + std::shared_ptr sg; + + skill_clear_unitgroup(src); + if ((sg = skill_unitsetting(src,getSkillId(),skill_lv,src->x,src->y,0))) + sc_start4(src,src,type,100,skill_lv,0,0,sg->group_id,skill_get_time(getSkillId(),skill_lv)); + flag|=1; +} diff --git a/src/map/skills/taekwon/warmthofthestars.hpp b/src/map/skills/taekwon/warmthofthestars.hpp new file mode 100644 index 00000000000..1e76fdbfaa2 --- /dev/null +++ b/src/map/skills/taekwon/warmthofthestars.hpp @@ -0,0 +1,13 @@ +// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#pragma once + +#include "../skill_impl.hpp" + +class SkillWarmthoftheStars : public SkillImpl { +public: + SkillWarmthoftheStars(); + + void castendPos2(block_list* src, int32 x, int32 y, uint16 skill_lv, t_tick tick, int32& flag) const override; +}; diff --git a/src/map/skills/taekwon/warmthofthesun.cpp b/src/map/skills/taekwon/warmthofthesun.cpp new file mode 100644 index 00000000000..52398aead2f --- /dev/null +++ b/src/map/skills/taekwon/warmthofthesun.cpp @@ -0,0 +1,19 @@ +// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#include "warmthofthesun.hpp" + +#include "map/status.hpp" + +SkillWarmthoftheSun::SkillWarmthoftheSun() : SkillImpl(SG_SUN_WARM) { +} + +void SkillWarmthoftheSun::castendPos2(block_list* src, int32 x, int32 y, uint16 skill_lv, t_tick tick, int32& flag) const { + sc_type type = skill_get_sc(getSkillId()); + std::shared_ptr sg; + + skill_clear_unitgroup(src); + if ((sg = skill_unitsetting(src,getSkillId(),skill_lv,src->x,src->y,0))) + sc_start4(src,src,type,100,skill_lv,0,0,sg->group_id,skill_get_time(getSkillId(),skill_lv)); + flag|=1; +} diff --git a/src/map/skills/taekwon/warmthofthesun.hpp b/src/map/skills/taekwon/warmthofthesun.hpp new file mode 100644 index 00000000000..72d294fe32d --- /dev/null +++ b/src/map/skills/taekwon/warmthofthesun.hpp @@ -0,0 +1,13 @@ +// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#pragma once + +#include "../skill_impl.hpp" + +class SkillWarmthoftheSun : public SkillImpl { +public: + SkillWarmthoftheSun(); + + void castendPos2(block_list* src, int32 x, int32 y, uint16 skill_lv, t_tick tick, int32& flag) const override; +};