From 746a803671be0dc9aad418333f87bdf51ee65800 Mon Sep 17 00:00:00 2001 From: rud0lp20 Date: Sat, 16 Jun 2012 19:01:56 +0000 Subject: Fixed bugreport:6038 WM_REVERBERATION behavior should now work properly. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@16312 54d463be-8e91-2dee-dedb-b68131a5f0ec --- db/pre-re/skill_db.txt | 6 +++--- db/re/skill_db.txt | 6 +++--- src/map/battle.c | 9 +++++++++ src/map/skill.c | 22 +++++++++++++++------- 4 files changed, 30 insertions(+), 13 deletions(-) diff --git a/db/pre-re/skill_db.txt b/db/pre-re/skill_db.txt index 81a832170..7b2196066 100644 --- a/db/pre-re/skill_db.txt +++ b/db/pre-re/skill_db.txt @@ -920,9 +920,9 @@ // WM Wanderer/Minstrel 2412,0,0,0,0,0,0,10,0,no,0,0,0,none,0, WM_LESSON,Lesson 2413,9,8,1,-1,0,0,5,-2:-2:-3:-3:-4,yes,0,0,0,magic,0, WM_METALICSOUND,Metallic Sound -2414,9,6,2,-1,0x3,1,5,1,yes,0,0x80,3,none,0, WM_REVERBERATION,Reverberation //CHECK May need to recode. Testing needed. -2415,0,6,1,-1,0x2,1,5,1,no,0,0,0,weapon,0, WM_REVERBERATION_MELEE,Reverberation Melee -2416,0,6,1,-1,0x2,1,5,1,no,0,0,0,magic,0, WM_REVERBERATION_MAGIC,Reverberation Magic +2414,9,6,2,-1,0x3,1,5,1,yes,0,0x80,3,none,0, WM_REVERBERATION,Reverberation +2415,0,6,1,-1,0x6,1,5,1,no,0,0,0,weapon,0, WM_REVERBERATION_MELEE,Reverberation Melee +2416,0,6,1,0,0x6,1,5,1,no,0,0,0,magic,0, WM_REVERBERATION_MAGIC,Reverberation Magic 2417,11,6,2,0,0x3,5,1,1,no,0,0,0,none,0, WM_DOMINION_IMPULSE,Dominion Impulse 2418,9,6,2,-1,0x1,0,5,1,yes,0,0,0,none,0, WM_SEVERE_RAINSTORM,Severe Rainstorm 2419,9,6,2,0,0x3,1,5,1,yes,0,0x80,5,none,0, WM_POEMOFNETHERWORLD,Poem of The Netherworld //CHECK May need to recode too. diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index d5bea16f7..d1d5e0b57 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -921,9 +921,9 @@ // WM Wanderer/Minstrel 2412,0,0,0,0,0,0,10,0,no,0,0,0,none,0, WM_LESSON,Lesson 2413,9,8,1,-1,0,0,5,-2:-2:-3:-3:-4,yes,0,0,0,magic,0, WM_METALICSOUND,Metallic Sound -2414,9,6,2,-1,0x3,1,5,1,yes,0,0x80,3,none,0, WM_REVERBERATION,Reverberation //CHECK May need to recode. Testing needed. -2415,0,6,1,-1,0x2,1,5,1,no,0,0,0,weapon,0, WM_REVERBERATION_MELEE,Reverberation Melee -2416,0,6,1,-1,0x2,1,5,1,no,0,0,0,magic,0, WM_REVERBERATION_MAGIC,Reverberation Magic +2414,9,6,2,-1,0x3,1,5,1,yes,0,0x80,3,none,0, WM_REVERBERATION,Reverberation +2415,0,6,1,-1,0x6,1,5,1,no,0,0,0,weapon,0, WM_REVERBERATION_MELEE,Reverberation Melee +2416,0,6,1,0,0x6,1,5,1,no,0,0,0,magic,0, WM_REVERBERATION_MAGIC,Reverberation Magic 2417,11,6,2,0,0x3,5,1,1,no,0,0,0,none,0, WM_DOMINION_IMPULSE,Dominion Impulse 2418,9,6,2,-1,0x1,0,5,1,yes,0,0,0,none,0, WM_SEVERE_RAINSTORM,Severe Rainstorm 2419,9,6,2,0,0x3,1,5,1,yes,0,0x80,5,none,0, WM_POEMOFNETHERWORLD,Poem of The Netherworld //CHECK May need to recode too. diff --git a/src/map/battle.c b/src/map/battle.c index 70bfbdf2c..1226175e2 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1274,6 +1274,11 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo flag.rh=1; flag.weapon=1; flag.infdef=(tstatus->mode&MD_PLANT&&skill_num!=RA_CLUSTERBOMB?1:0); + if( target->type == BL_SKILL){ + TBL_SKILL *su = (TBL_SKILL*)target; + if( su->group && su->group->skill_id == WM_REVERBERATION) + flag.infdef = 1; + } //Initial Values wd.type=0; //Normal attack @@ -2326,7 +2331,9 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo skillratio += 200 * skill_lv -100; break; case WM_REVERBERATION_MELEE: + // ATK [{(Skill Level x 100) + 300} x Caster’s Base Level / 100] skillratio += 200 + 100 * pc_checkskill(sd, WM_REVERBERATION); + RE_LVL_DMOD(100); break; case WM_SEVERE_RAINSTORM_MELEE: skillratio = 50 + 50 * skill_lv; @@ -3570,7 +3577,9 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list skillratio += 50 * skill_lv; break; case WM_REVERBERATION_MAGIC: + // MATK [{(Skill Level x 100) + 100} x Caster’s Base Level / 100] % skillratio += 100 * (sd ? pc_checkskill(sd, WM_REVERBERATION) : 1); + RE_LVL_DMOD(100); break; case SO_FIREWALK: { struct status_change * sc = status_get_sc(src); diff --git a/src/map/skill.c b/src/map/skill.c index 5fe5f551d..4d256fe4b 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -3123,7 +3123,7 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data) break; case WM_REVERBERATION_MELEE: case WM_REVERBERATION_MAGIC: - skill_attack(skill_get_type(skl->skill_id),src, src, target, skl->skill_id, skl->skill_lv, 0, SD_LEVEL); + skill_castend_damage_id(src, target, skl->skill_id, skl->skill_lv, tick, skl->flag|SD_LEVEL); // damage should split among targets break; case SC_FATALMENACE: if( src == target ) // Casters Part @@ -3245,6 +3245,7 @@ static int skill_ative_reverberation( struct block_list *bl, va_list ap) { return 0; if( su->alive && (sg = su->group) && sg->skill_id == WM_REVERBERATION ) { clif_changetraplook(bl, UNT_USED_TRAPS); + map_foreachinrange(skill_trap_splash, bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, bl, gettick()); su->limit=DIFF_TICK(gettick(),sg->tick)+1500; sg->unit_id = UNT_USED_TRAPS; } @@ -3640,8 +3641,9 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int case SR_RAMPAGEBLASTER: case SR_WINDMILL: case SR_RIDEINLIGHTNING: - case WM_REVERBERATION: case WM_SOUND_OF_DESTRUCTION: + case WM_REVERBERATION_MELEE: + case WM_REVERBERATION_MAGIC: case SO_VARETYR_SPEAR: case GN_CART_TORNADO: case GN_CARTCANNON: @@ -10416,7 +10418,7 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, short skilli val2 = 0; break; case WM_REVERBERATION: - val1 = 1; + val1 = 1 + skilllv; break; case GN_WALLOFTHORN: val1 = 1000 * skilllv; // Need official value. [LimitLine] @@ -11183,6 +11185,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns clif_changetraplook(&src->bl,UNT_USED_TRAPS); map_foreachinrange(skill_trap_splash,&src->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &src->bl,tick); sg->limit = DIFF_TICK(tick,sg->tick) + 1500; + sg->unit_id = UNT_USED_TRAPS; break; case UNT_SEVERE_RAINSTORM: @@ -13997,8 +14000,8 @@ static int skill_trap_splash (struct block_list *bl, va_list ap) clif_skill_damage(src,bl,tick,0,0,-30000,1,sg->skill_id,sg->skill_lv,5); break; case UNT_REVERBERATION: - skill_attack(BF_WEAPON,ss,src,bl,WM_REVERBERATION_MELEE,sg->skill_lv,tick,0); - skill_addtimerskill(ss,tick+200,bl->id,0,0,WM_REVERBERATION_MAGIC,sg->skill_lv,BF_MAGIC,SD_LEVEL); + skill_addtimerskill(ss,tick+50,bl->id,0,0,WM_REVERBERATION_MELEE,sg->skill_lv,BF_WEAPON,SD_LEVEL); // for proper skill delay animation when use with Dominion Impulse + skill_addtimerskill(ss,tick+250,bl->id,0,0,WM_REVERBERATION_MAGIC,sg->skill_lv,BF_MAGIC,SD_LEVEL); break; case UNT_SEVERE_RAINSTORM: skill_attack(BF_WEAPON,ss,ss,bl,WM_SEVERE_RAINSTORM_MELEE,sg->skill_lv,tick,0); @@ -14710,8 +14713,13 @@ static int skill_unit_timer_sub(DBKey key, DBData *data, va_list ap) } break; case UNT_REVERBERATION: - if( unit->val1 <= 0 ) - unit->limit = DIFF_TICK(tick + 700,group->tick); + if( unit->val1 <= 0 ){ + clif_changetraplook(bl,UNT_USED_TRAPS); + map_foreachinrange(skill_trap_splash, bl, skill_get_splash(group->skill_id, group->skill_lv), group->bl_flag, bl, tick); + group->limit = DIFF_TICK(tick,group->tick) + 1500; + unit->limit = DIFF_TICK(tick,group->tick) + 1500; + group->unit_id = UNT_USED_TRAPS; + } break; case UNT_WALLOFTHORN: if( unit->val1 <= 0 ) { -- cgit v1.2.3-70-g09d2