Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
283 changes: 77 additions & 206 deletions src/map/battle.cpp

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions src/map/skills/acolyte/adoramus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,10 @@ int64 SkillAdoramus::splashDamage(block_list* src, block_list* target, uint16 sk

return SkillImplRecursiveDamageSplash::splashDamage(src, target, skill_lv, tick, flag);
}

void SkillAdoramus::modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const {
const status_change* sc = status_get_sc(&src);

if (sc != nullptr && sc->hasSCE(SC_ANCILLA))
element = ELE_NEUTRAL;
}
1 change: 1 addition & 0 deletions src/map/skills/acolyte/adoramus.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ class SkillAdoramus : public SkillImplRecursiveDamageSplash {
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 &skillratio, int32 mflag) const override;
int64 splashDamage(block_list* src, block_list* target, uint16 skill_lv, t_tick tick, int32 flag) const override;
void modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const override;
};
7 changes: 7 additions & 0 deletions src/map/skills/acolyte/divinusflos.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,10 @@ void SkillDivinusFlos::splashSearch(block_list* src, block_list* target, uint16

SkillImplRecursiveDamageSplash::splashSearch(src, target, skill_lv, tick, flag);
}

void SkillDivinusFlos::modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const {
const status_change* sc = status_get_sc(&src);

if (sc != nullptr && sc->hasSCE(SC_ANCILLA))
element = ELE_NEUTRAL;
}
1 change: 1 addition & 0 deletions src/map/skills/acolyte/divinusflos.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ class SkillDivinusFlos : public SkillImplRecursiveDamageSplash {

void calculateSkillRatio(const Damage* wd, const block_list* src, const block_list* target, uint16 skill_lv, int32& base_skillratio, int32 mflag) const override;
void splashSearch(block_list* src, block_list* target, uint16 skill_lv, t_tick tick, int32 flag) const override;
void modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const override;
};
7 changes: 7 additions & 0 deletions src/map/skills/archer/metallicfury.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,10 @@ void SkillMetallicFury::calculateSkillRatio(const Damage* wd, const block_list*
}
RE_LVL_DMOD(100);
}

void SkillMetallicFury::modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const {
const map_session_data* sd = BL_CAST(BL_PC, &src);

if (sd != nullptr)
element = sd->bonus.arrow_ele;
}
1 change: 1 addition & 0 deletions src/map/skills/archer/metallicfury.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@ class SkillMetallicFury : public SkillImplRecursiveDamageSplash {
SkillMetallicFury();

void calculateSkillRatio(const Damage* wd, const block_list* src, const block_list* target, uint16 skill_lv, int32& base_skillratio, int32 mflag) const override;
void modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const override;
};
7 changes: 7 additions & 0 deletions src/map/skills/archer/reverberation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,10 @@ void SkillReverberation::castendDamageId(block_list *src, block_list *target, ui
battle_consume_ammo(sd, getSkillId(), skill_lv); // Consume here since Magic/Misc attacks reset arrow_atk
}
}

void SkillReverberation::modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const {
const map_session_data* sd = BL_CAST(BL_PC, &src);

if (sd != nullptr)
element = sd->bonus.arrow_ele;
}
1 change: 1 addition & 0 deletions src/map/skills/archer/reverberation.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ class SkillReverberation : public SkillImpl {
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 &skillratio, int32 mflag) const override;
void castendDamageId(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int32& flag) const override;
void modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const override;
};
7 changes: 7 additions & 0 deletions src/map/skills/archer/rhythmicalwave.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,10 @@ void SkillRhythmicalWave::calculateSkillRatio(const Damage* wd, const block_list

RE_LVL_DMOD(100);
}

void SkillRhythmicalWave::modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const {
const map_session_data* sd = BL_CAST(BL_PC, &src);

if (sd != nullptr)
element = sd->bonus.arrow_ele;
}
1 change: 1 addition & 0 deletions src/map/skills/archer/rhythmicalwave.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ class SkillRhythmicalWave : public SkillImpl {

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 modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const override;
};
7 changes: 7 additions & 0 deletions src/map/skills/archer/soundblend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,10 @@ void SkillSoundBlend::calculateSkillRatio(const Damage* wd, const block_list* sr
skillratio += skillratio * 50 / 100;
}
}

void SkillSoundBlend::modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const {
const map_session_data* sd = BL_CAST(BL_PC, &src);

if (sd != nullptr)
element = sd->bonus.arrow_ele;
}
1 change: 1 addition & 0 deletions src/map/skills/archer/soundblend.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ class SkillSoundBlend : public SkillImpl {
void castendNoDamageId(block_list* src, block_list* target, uint16 skill_lv, t_tick tick, int32& flag) const override;
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 modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const override;
};
21 changes: 21 additions & 0 deletions src/map/skills/gunslinger/basicgrenade.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,24 @@ void SkillBasicGrenade::calculateSkillRatio(const Damage* wd, const block_list*
skillratio += 5 * sstatus->con;
RE_LVL_DMOD(100);
}

void SkillBasicGrenade::modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const {
const status_change* sc = status_get_sc(&src);

// Night Watch Grenade Fragment elementals
if( sc != nullptr ){
if( sc->hasSCE( SC_GRENADE_FRAGMENT_1 ) ){
element = ELE_WATER;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_2 ) ){
element = ELE_WIND;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_3 ) ){
element = ELE_EARTH;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_4 ) ){
element = ELE_FIRE;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_5 ) ){
element = ELE_DARK;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_6 ) ){
element = ELE_HOLY;
}
}
}
1 change: 1 addition & 0 deletions src/map/skills/gunslinger/basicgrenade.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ class SkillBasicGrenade : public WeaponSkillImpl {

void castendPos2(block_list* src, int32 x, int32 y, 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 modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const override;
};
21 changes: 21 additions & 0 deletions src/map/skills/gunslinger/grenadesdropping.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,24 @@ void SkillGrenadesDropping::calculateSkillRatio(const Damage* wd, const block_li
skillratio += 5 * sstatus->con;
RE_LVL_DMOD(100);
}

void SkillGrenadesDropping::modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const {
const status_change* sc = status_get_sc(&src);

// Night Watch Grenade Fragment elementals
if( sc != nullptr ){
if( sc->hasSCE( SC_GRENADE_FRAGMENT_1 ) ){
element = ELE_WATER;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_2 ) ){
element = ELE_WIND;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_3 ) ){
element = ELE_EARTH;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_4 ) ){
element = ELE_FIRE;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_5 ) ){
element = ELE_DARK;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_6 ) ){
element = ELE_HOLY;
}
}
}
1 change: 1 addition & 0 deletions src/map/skills/gunslinger/grenadesdropping.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ class SkillGrenadesDropping : public SkillImpl {

void castendPos2(block_list* src, int32 x, int32 y, 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 modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const override;
};
4 changes: 4 additions & 0 deletions src/map/skills/gunslinger/grounddrift.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,7 @@ void SkillGroundDrift::castendPos2(block_list* src, int32 x, int32 y, uint16 ski
// Ammo should be deleted right away.
skill_unitsetting(src, getSkillId(), skill_lv, x, y, 0);
}

void SkillGroundDrift::modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const {
element = dmg.miscflag; // element comes in flag.
}
1 change: 1 addition & 0 deletions src/map/skills/gunslinger/grounddrift.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@ class SkillGroundDrift : public SkillImpl {
void modifyDamageData(Damage& dmg, const block_list& src, const block_list& target, uint16 skill_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;
void castendPos2(block_list* src, int32 x, int32 y, uint16 skill_lv, t_tick tick, int32& flag) const override;
void modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const override;
};
21 changes: 21 additions & 0 deletions src/map/skills/gunslinger/hastyfireinthehole.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,24 @@ void SkillHastyFireInTheHole::calculateSkillRatio(const Damage* wd, const block_
skillratio += 5 * sstatus->con;
RE_LVL_DMOD(100);
}

void SkillHastyFireInTheHole::modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const {
const status_change* sc = status_get_sc(&src);

// Night Watch Grenade Fragment elementals
if( sc != nullptr ){
if( sc->hasSCE( SC_GRENADE_FRAGMENT_1 ) ){
element = ELE_WATER;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_2 ) ){
element = ELE_WIND;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_3 ) ){
element = ELE_EARTH;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_4 ) ){
element = ELE_FIRE;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_5 ) ){
element = ELE_DARK;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_6 ) ){
element = ELE_HOLY;
}
}
}
1 change: 1 addition & 0 deletions src/map/skills/gunslinger/hastyfireinthehole.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ class SkillHastyFireInTheHole : public WeaponSkillImpl {

void castendPos2(block_list* src, int32 x, int32 y, 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 modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const override;
};
7 changes: 7 additions & 0 deletions src/map/skills/gunslinger/howlingmine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,10 @@ void SkillHowlingMine::calculateSkillRatio(const Damage* wd, const block_list* s
skillratio += -100 + 200 + 200 * skill_lv;
}
}

void SkillHowlingMine::modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const {
const map_session_data* sd = BL_CAST(BL_PC, &src);

if (sd != nullptr && sd->flicker) //Force RL_H_MINE deals fire damage if activated by RL_FLICKER
element = ELE_FIRE;
}
1 change: 1 addition & 0 deletions src/map/skills/gunslinger/howlingmine.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ class SkillHowlingMine : public SkillImpl {

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 modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const override;
};
21 changes: 21 additions & 0 deletions src/map/skills/gunslinger/missionbombard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,24 @@ void SkillMissionBombard::calculateSkillRatio(const Damage* wd, const block_list
skillratio += 5 * sstatus->con;
RE_LVL_DMOD(100);
}

void SkillMissionBombard::modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const {
const status_change* sc = status_get_sc(&src);

// Night Watch Grenade Fragment elementals
if( sc != nullptr ){
if( sc->hasSCE( SC_GRENADE_FRAGMENT_1 ) ){
element = ELE_WATER;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_2 ) ){
element = ELE_WIND;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_3 ) ){
element = ELE_EARTH;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_4 ) ){
element = ELE_FIRE;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_5 ) ){
element = ELE_DARK;
}else if( sc->hasSCE( SC_GRENADE_FRAGMENT_6 ) ){
element = ELE_HOLY;
}
}
}
1 change: 1 addition & 0 deletions src/map/skills/gunslinger/missionbombard.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ class SkillMissionBombard : public WeaponSkillImpl {

void castendPos2(block_list* src, int32 x, int32 y, 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 modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const override;
};
7 changes: 7 additions & 0 deletions src/map/skills/homunculus/homunculus_steelhorn.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,10 @@ void SkillSteelHorn::calculateSkillRatio(const Damage* wd, const block_list* src
void SkillSteelHorn::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, 20 + 2 * skill_lv, skill_lv, skill_get_time(getSkillId(), skill_lv));
}

void SkillSteelHorn::modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const {
const status_change* sc = status_get_sc(&src);

if (sc != nullptr && sc->hasSCE(SC_GOLDENE_FERSE))
element = ELE_HOLY;
}
1 change: 1 addition & 0 deletions src/map/skills/homunculus/homunculus_steelhorn.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ class SkillSteelHorn : public SkillImpl {
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;
void modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const override;
};
6 changes: 6 additions & 0 deletions src/map/skills/mage/hellinferno.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,9 @@ void SkillHellInferno::castendDamageId(block_list *src, block_list *target, uint
map_foreachinrange(skill_area_sub, target, skill_get_splash(getSkillId(), skill_lv), BL_CHAR, src, getSkillId(), skill_lv, tick, flag | BCT_ENEMY | SD_SPLASH | 1, skill_castend_damage_id);
}
}

void SkillHellInferno::modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const {
if (dmg.miscflag & 2) {
element = ELE_DARK;
}
}
1 change: 1 addition & 0 deletions src/map/skills/mage/hellinferno.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ class SkillHellInferno : public SkillImpl {
void modifyDamageData(Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv) const override;
void calculateSkillRatio(const Damage *wd, const block_list *src, const block_list *target, uint16 skill_lv, int32 &skillratio, int32 mflag) const override;
void castendDamageId(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int32& flag) const override;
void modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const override;
};
24 changes: 24 additions & 0 deletions src/map/skills/mage/psychicwave.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,27 @@ void SkillPsychicWave::castendPos2(block_list* src, int32 x, int32 y, uint16 ski
flag|=1; // Set flag to 1 to prevent deleting ammo (it will be deleted on group-delete).
skill_unitsetting(src,getSkillId(),skill_lv,x,y,0);
}

void SkillPsychicWave::modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const {
const status_change* sc = status_get_sc(&src);

if( sc != nullptr && !sc->empty() ) {
static const std::vector<sc_type> types = {
SC_HEATER_OPTION,
SC_COOLER_OPTION,
SC_BLAST_OPTION,
SC_CURSED_SOIL_OPTION,
SC_FLAMETECHNIC_OPTION,
SC_COLD_FORCE_OPTION,
SC_GRACE_BREEZE_OPTION,
SC_EARTH_CARE_OPTION,
SC_DEEP_POISONING_OPTION
};
for( sc_type type : types ){
if( sc->hasSCE( type ) ){
element = sc->getSCE( type )->val3;
break;
}
}
}
}
1 change: 1 addition & 0 deletions src/map/skills/mage/psychicwave.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ class SkillPsychicWave : public SkillImpl {
void modifyDamageData(Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv) const override;
void calculateSkillRatio(const Damage *wd, const block_list *src, const block_list *target, uint16 skill_lv, int32 &skillratio, int32 mflag) const override;
void castendPos2(block_list* src, int32 x, int32 y, uint16 skill_lv, t_tick tick, int32& flag) const override;
void modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const override;
};
8 changes: 8 additions & 0 deletions src/map/skills/merchant/armcannon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

#include <config/core.hpp>

#include "map/pc.hpp"
#include "map/status.hpp"

SkillArmCannon::SkillArmCannon() : SkillImplRecursiveDamageSplash(NC_ARMSCANNON) {
Expand All @@ -31,3 +32,10 @@ void SkillArmCannon::splashSearch(block_list* src, block_list* target, uint16 sk

SkillImplRecursiveDamageSplash::splashSearch(src, target, skill_lv, tick, flag);
}

void SkillArmCannon::modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const {
const map_session_data* sd = BL_CAST(BL_PC, &src);

if (sd != nullptr && sd->state.arrow_atk > 0)
element = sd->bonus.arrow_ele;
}
1 change: 1 addition & 0 deletions src/map/skills/merchant/armcannon.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ class SkillArmCannon : public SkillImplRecursiveDamageSplash {
void calculateSkillRatio(const Damage* wd, const block_list* src, const block_list* target, uint16 skill_lv, int32& base_skillratio, int32 mflag) const override;
int32 getSplashTarget(block_list* src) const override;
void splashSearch(block_list* src, block_list* target, uint16 skill_lv, t_tick tick, int32 flag) const override;
void modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const override;
};
7 changes: 7 additions & 0 deletions src/map/skills/merchant/cartcannon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,10 @@ void SkillCartCannon::splashSearch(block_list* src, block_list* target, uint16 s

SkillImplRecursiveDamageSplash::splashSearch(src, target, skill_lv, tick, flag);
}

void SkillCartCannon::modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const {
const map_session_data* sd = BL_CAST(BL_PC, &src);

if (sd != nullptr && sd->state.arrow_atk > 0)
element = sd->bonus.arrow_ele;
}
1 change: 1 addition & 0 deletions src/map/skills/merchant/cartcannon.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ class SkillCartCannon : public SkillImplRecursiveDamageSplash {
void calculateSkillRatio(const Damage *wd, const block_list *src, const block_list *target, uint16 skill_lv, int32 &skillratio, int32 mflag) const override;
void modifyHitRate(int16& hit_rate, const block_list* src, const block_list* target, uint16 skill_lv) const override;
void splashSearch(block_list* src, block_list* target, uint16 skill_lv, t_tick tick, int32 flag) const override;
void modifyElement(const Damage& dmg, const block_list& src, const block_list& target, uint16 skill_lv, int32& element, int32 flag) const override;
};
Loading
Loading