diff options
author | Haru <haru@dotalux.com> | 2018-10-21 23:45:20 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-21 23:45:20 +0200 |
commit | b196e2b794bb96c1584c885f50e63326678ae89e (patch) | |
tree | cb6858c2f690018c9df097dd96a986ec22089fb5 /src/map/battle.c | |
parent | f275d6a7d432953d2af6b9c0fe897be5e7657e1c (diff) | |
parent | dca07b9b9e9640085412b1ceafd691727b871048 (diff) | |
download | hercules-b196e2b794bb96c1584c885f50e63326678ae89e.tar.gz hercules-b196e2b794bb96c1584c885f50e63326678ae89e.tar.bz2 hercules-b196e2b794bb96c1584c885f50e63326678ae89e.tar.xz hercules-b196e2b794bb96c1584c885f50e63326678ae89e.zip |
Merge pull request #2182 from guilherme-gm/201808-trapfix
Fixes some issues with traps
Diffstat (limited to 'src/map/battle.c')
-rw-r--r-- | src/map/battle.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/map/battle.c b/src/map/battle.c index 9d4c416b0..44241bf23 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -4339,6 +4339,8 @@ static struct Damage battle_calc_misc_attack(struct block_list *src, struct bloc } break; } + + battle->reflect_trap(target, src, &md, skill_id); return md; } @@ -6008,6 +6010,37 @@ static void battle_reflect_damage(struct block_list *target, struct block_list * #undef NORMALIZE_RDAMAGE } +/** + * Reflects damage from certain traps, if battle_config.trap_reflect is true. + * @param target : Player who triggered the trap + * @param src : Player who set the trap + * @param md : Trap damage structure + * @param skill_id : Trap skill ID + */ +static void battle_reflect_trap(struct block_list *target, struct block_list *src, struct Damage *md, uint16 skill_id) +{ + if (battle_config.trap_reflect == true) { + if (src != target) { // Don't reflect your own damage + switch (skill_id) { + case HT_CLAYMORETRAP: + case HT_LANDMINE: + case HT_FREEZINGTRAP: + case HT_BLASTMINE: + // Needs official info + //case RA_CLUSTERBOMB: + //case RA_FIRINGTRAP: + //case RA_ICEBOUNDTRAP: + //case GN_THORNS_TRAP: + //case KO_MAKIBISHI: + case MA_LANDMINE: + case MA_FREEZINGTRAP: + battle->reflect_damage(target, src, md, skill_id); + break; + } + } + } +} + static void battle_drain(struct map_session_data *sd, struct block_list *tbl, int64 rdamage, int64 ldamage, int race, int boss) { struct weapon_data *wd; @@ -7325,6 +7358,7 @@ static const struct battle_data { * Hercules **/ { "skill_trap_type", &battle_config.skill_trap_type, 0, 0, 1, }, + { "trap_reflect", &battle_config.trap_reflect, 1, 0, 1, }, { "item_restricted_consumption_type", &battle_config.item_restricted_consumption_type,1, 0, 1, }, { "unequip_restricted_equipment", &battle_config.unequip_restricted_equipment, 0, 0, 3, }, { "max_walk_path", &battle_config.max_walk_path, 17, 1, MAX_WALKPATH, }, @@ -7616,6 +7650,7 @@ void battle_defaults(void) battle->delay_damage = battle_delay_damage; battle->drain = battle_drain; battle->reflect_damage = battle_reflect_damage; + battle->reflect_trap = battle_reflect_trap; battle->attr_ratio = battle_attr_ratio; battle->attr_fix = battle_attr_fix; battle->calc_cardfix = battle_calc_cardfix; |