Skip to content

Instantly share code, notes, and snippets.

@cydh
Created November 15, 2019 00:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cydh/d8355f95042d080bbd04bd7b32de673f to your computer and use it in GitHub Desktop.
Save cydh/d8355f95042d080bbd04bd7b32de673f to your computer and use it in GitHub Desktop.
swapped reflect damage calculation after GVG/BG damage adjustment
src/map/battle.cpp | 42 +++++++++++++++++++++---------------------
1 file changed, 21 insertions(+), 21 deletions(-)
diff --git a/src/map/battle.cpp b/src/map/battle.cpp
index 64cf60bce..ac9c041c3 100644
--- a/src/map/battle.cpp
+++ b/src/map/battle.cpp
@@ -5032,27 +5032,6 @@ struct block_list *battle_check_devotion(struct block_list *bl) {
static void battle_calc_attack_gvg_bg(struct Damage* wd, struct block_list *src,struct block_list *target,uint16 skill_id,uint16 skill_lv)
{
if( wd->damage + wd->damage2 ) { //There is a total damage value
- if( src != target && //Don't reflect your own damage (Grand Cross)
- (!skill_id || skill_id ||
- (src->type == BL_SKILL && (skill_id == SG_SUN_WARM || skill_id == SG_MOON_WARM || skill_id == SG_STAR_WARM))) ) {
- int64 damage = wd->damage + wd->damage2, rdamage = 0;
- struct map_session_data *tsd = BL_CAST(BL_PC, target);
- struct status_data *sstatus = status_get_status_data(src);
- t_tick tick = gettick(), rdelay = 0;
-
- rdamage = battle_calc_return_damage(target, src, &damage, wd->flag, skill_id, false);
- if( rdamage > 0 ) { //Item reflect gets calculated before any mapflag reducing is applicated
- struct block_list *d_bl = battle_check_devotion(src);
-
- rdelay = clif_damage(src, (!d_bl) ? src : d_bl, tick, wd->amotion, sstatus->dmotion, rdamage, 1, DMG_ENDURE, 0, false);
- if( tsd )
- battle_drain(tsd, src, rdamage, rdamage, sstatus->race, sstatus->class_);
- //Use Reflect Shield to signal this kind of skill trigger [Skotlex]
- battle_delay_damage(tick, wd->amotion, target, (!d_bl) ? src : d_bl, 0, CR_REFLECTSHIELD, 0, rdamage, ATK_DEF, rdelay, true, false);
- skill_additional_effect(target, (!d_bl) ? src : d_bl, CR_REFLECTSHIELD, 1, BF_WEAPON|BF_SHORT|BF_NORMAL, ATK_DEF, tick);
- }
- }
-
struct map_data *mapdata = map_getmapdata(target->m);
if(!wd->damage2) {
@@ -5080,6 +5059,27 @@ static void battle_calc_attack_gvg_bg(struct Damage* wd, struct block_list *src,
if(wd->damage > 1 && wd->damage2 < 1) wd->damage2 = 1;
wd->damage-=wd->damage2;
}
+
+ if( src != target && //Don't reflect your own damage (Grand Cross)
+ (!skill_id || skill_id ||
+ (src->type == BL_SKILL && (skill_id == SG_SUN_WARM || skill_id == SG_MOON_WARM || skill_id == SG_STAR_WARM))) ) {
+ int64 damage = wd->damage + wd->damage2, rdamage = 0;
+ struct map_session_data *tsd = BL_CAST(BL_PC, target);
+ struct status_data *sstatus = status_get_status_data(src);
+ t_tick tick = gettick(), rdelay = 0;
+
+ rdamage = battle_calc_return_damage(target, src, &damage, wd->flag, skill_id, false);
+ if( rdamage > 0 ) { //Item reflect gets calculated before any mapflag reducing is applicated
+ struct block_list *d_bl = battle_check_devotion(src);
+
+ rdelay = clif_damage(src, (!d_bl) ? src : d_bl, tick, wd->amotion, sstatus->dmotion, rdamage, 1, DMG_ENDURE, 0, false);
+ if( tsd )
+ battle_drain(tsd, src, rdamage, rdamage, sstatus->race, sstatus->class_);
+ //Use Reflect Shield to signal this kind of skill trigger [Skotlex]
+ battle_delay_damage(tick, wd->amotion, target, (!d_bl) ? src : d_bl, 0, CR_REFLECTSHIELD, 0, rdamage, ATK_DEF, rdelay, true, false);
+ skill_additional_effect(target, (!d_bl) ? src : d_bl, CR_REFLECTSHIELD, 1, BF_WEAPON|BF_SHORT|BF_NORMAL, ATK_DEF, tick);
+ }
+ }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment