From e39293f1294df0a500fcbc984f6fdbd9d20b8c26 Mon Sep 17 00:00:00 2001 From: aleos89 Date: Thu, 2 Jun 2016 18:39:17 -0400 Subject: [PATCH] Follow up to 19f2bc5 * Reverted parts of the Earth Quake cleanup. * Added the missing 100% damage increase for levels 5 and higher. * Corrected the hit rate to be 2x not 1.2x. * Commented out the unofficial ATK2 damage increase. --- db/pre-re/skill_db.txt | 2 +- db/pre-re/skill_unit_db.txt | 1 - db/re/skill_db.txt | 2 +- db/re/skill_unit_db.txt | 1 - src/map/battle.c | 27 ++++++++++++++++----------- src/map/skill.c | 24 ++++++++++++++---------- src/map/skill.h | 2 +- 7 files changed, 33 insertions(+), 26 deletions(-) diff --git a/db/pre-re/skill_db.txt b/db/pre-re/skill_db.txt index 9f22f5495d..b528a5af57 100644 --- a/db/pre-re/skill_db.txt +++ b/db/pre-re/skill_db.txt @@ -778,7 +778,7 @@ //**** // Additional NPC Skills (Episode 11.3) -653,0,8,4,0,0x26,5:7:9:11:13:5:7:9:11:13,10,1,no,0,0x40002,0,magic,0,0x1, NPC_EARTHQUAKE,Earthquake +653,0,8,4,0,0x6,5:7:9:11:13:5:7:9:11:13,10,1,no,0,0x40002,0,magic,0,0x0, NPC_EARTHQUAKE,Earthquake 654,6,6,1,3,0,3,10,1,no,0,0x2,14,weapon,0,0x0, NPC_FIREBREATH,Fire Breath 655,6,6,1,1,0,3,10,1,no,0,0x2,14,weapon,0,0x0, NPC_ICEBREATH,Ice Breath 656,6,6,1,4,0,3,10,1,no,0,0x2,14,weapon,0,0x0, NPC_THUNDERBREATH,Thunder Breath diff --git a/db/pre-re/skill_unit_db.txt b/db/pre-re/skill_unit_db.txt index f490e85db7..9616b0e15c 100644 --- a/db/pre-re/skill_unit_db.txt +++ b/db/pre-re/skill_unit_db.txt @@ -105,7 +105,6 @@ 538,0xbb, , 1:1:1:2:2:2:3:3:3:4,0,-1,all,0x8010 //NJ_SUITON 539,0x86, , 3, 0,1000,enemy, 0x010 //NJ_HYOUSYOURAKU 541,0x86, , 2:2:3:3:4, 0,1000,enemy, 0x010 //NJ_RAIGEKISAI -653,0xc6, , 0, 5:7:9:11:13:5:7:9:11:13, 300,enemy, 0x010 //NPC_EARTHQUAKE 670,0xc7, , 1, 5:5:5:5:5:5:5:5:5:13,1000,all,0x008 //NPC_EVILLAND //706,0xfd, , 0, 0,1000,all, 0x000 //NPC_VENOMFOG diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index eb53a89aa3..46acbc97a9 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -778,7 +778,7 @@ //**** // Additional NPC Skills (Episode 11.3) -653,0,8,4,0,0x26,5:7:9:11:13:5:7:9:11:13,10,1,no,0,0x40002,0,magic,0,0x1, NPC_EARTHQUAKE,Earthquake +653,0,8,4,0,0x6,5:7:9:11:13:5:7:9:11:13,10,1,no,0,0x40002,0,magic,0,0x0, NPC_EARTHQUAKE,Earthquake 654,6,6,1,3,0,3,10,1,no,0,0x2,14,weapon,0,0x0, NPC_FIREBREATH,Fire Breath 655,6,6,1,1,0,3,10,1,no,0,0x2,14,weapon,0,0x0, NPC_ICEBREATH,Ice Breath 656,6,6,1,4,0,3,10,1,no,0,0x2,14,weapon,0,0x0, NPC_THUNDERBREATH,Thunder Breath diff --git a/db/re/skill_unit_db.txt b/db/re/skill_unit_db.txt index 2197fd8036..038a3dae62 100644 --- a/db/re/skill_unit_db.txt +++ b/db/re/skill_unit_db.txt @@ -106,7 +106,6 @@ 538,0xbb, , 1:1:1:2:2:2:3:3:3:4,0,-1,all,0x8010 //NJ_SUITON 539,0x86, , 3, 0,1000,enemy, 0x010 //NJ_HYOUSYOURAKU 541,0x86, , 1:1:2:2:3, 0,1000,enemy, 0x010 //NJ_RAIGEKISAI -653,0xc6, , 0, 5:7:9:11:13:5:7:9:11:13, 300,enemy, 0x010 //NPC_EARTHQUAKE 670,0xc7, , 1, 5:5:5:5:5:5:5:5:5:13,1000,all,0x008 //NPC_EVILLAND //706,0xfd, , 0, 0,1000,all, 0x000 //NPC_VENOMFOG diff --git a/src/map/battle.c b/src/map/battle.c index 1513b7db77..4f404bcd83 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2526,13 +2526,15 @@ static bool is_attack_hitting(struct Damage wd, struct block_list *src, struct b case NPC_UNDEADATTACK: case NPC_TELEKINESISATTACK: case NPC_BLEEDING: + hitrate += hitrate * 20 / 100; + break; case NPC_EARTHQUAKE: case NPC_FIREBREATH: case NPC_ICEBREATH: case NPC_THUNDERBREATH: case NPC_ACIDBREATH: case NPC_DARKNESSBREATH: - hitrate += hitrate * 20 / 100; + hitrate *= 2; break; case KN_PIERCE: case ML_PIERCE: @@ -3498,9 +3500,6 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s case NPC_PULSESTRIKE: skillratio += 100 * (skill_lv - 1); break; - case NPC_EARTHQUAKE: - skillratio += 100 + 100 * skill_lv + 100 * (skill_lv / 2); - break; case RG_BACKSTAP: if(sd && sd->status.weapon == W_BOW && battle_config.backstab_bow_penalty) skillratio += (200 + 40 * skill_lv) / 2; @@ -5690,12 +5689,6 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list case PF_SOULBURN: ad.damage = tstatus->sp * 2; break; - case NPC_EARTHQUAKE: { - struct Damage wd = battle_calc_weapon_attack(src, target, skill_id, skill_lv, ad.miscflag); - - ad.damage = wd.damage; - } - break; case AB_RENOVATIO: ad.damage = status_get_lv(src) * 10 + sstatus->int_; break; @@ -5855,6 +5848,9 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list case NPC_ENERGYDRAIN: skillratio += 100 * skill_lv; break; + case NPC_EARTHQUAKE: + skillratio += 100 + 100 * skill_lv + 100 * (skill_lv / 2) + (skill_lv > 4) ? 100 : 0; + break; #ifdef RENEWAL case WZ_HEAVENDRIVE: case WZ_METEOR: @@ -6171,7 +6167,16 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list ad.damage = ad.damage * (100-mdef)/100 - mdef2; #endif } - +#if 0 // Doesn't seem to be official + if (skill_id == NPC_EARTHQUAKE) { + //Adds atk2 to the damage, should be influenced by number of hits and skill-ratio, but not mdef reductions. [Skotlex] + //Also divide the extra bonuses from atk2 based on the number in range [Kevin] + if(mflag>0) + ad.damage+= (sstatus->rhw.atk2*skillratio/100)/mflag; + else + ShowError("Zero range by %d:%s, divide per 0 avoided!\n", skill_id, skill_get_name(skill_id)); + } +#endif if(ad.damage<1) ad.damage=1; else if(sc) { //only applies when hit diff --git a/src/map/skill.c b/src/map/skill.c index a451346fbb..ad6658834e 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -3959,6 +3959,14 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data) case BS_HAMMERFALL: sc_start(src, target, status_skill2sc(skl->skill_id), skl->type, skl->skill_lv, skill_get_time2(skl->skill_id, skl->skill_lv)); break; + case NPC_EARTHQUAKE: + if( skl->type > 1 ) + skill_addtimerskill(src,tick+250,src->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag); + skill_area_temp[0] = map_foreachinrange(skill_area_sub, src, skill_get_splash(skl->skill_id, skl->skill_lv), BL_CHAR, src, skl->skill_id, skl->skill_lv, tick, BCT_ENEMY, skill_area_sub_count); + skill_area_temp[1] = src->id; + skill_area_temp[2] = 0; + map_foreachinrange(skill_area_sub, src, skill_get_splash(skl->skill_id, skl->skill_lv), splash_target(src), src, skl->skill_id, skl->skill_lv, tick, skl->flag, skill_castend_damage_id); + break; case WZ_WATERBALL: { //Get the next waterball cell to consume @@ -4658,6 +4666,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case NJ_HUUMA: case ASC_METEORASSAULT: case GS_SPREADATTACK: + case NPC_EARTHQUAKE: case NPC_PULSESTRIKE: case NPC_HELLJUDGEMENT: case NPC_VAMPIRE_GIFT: @@ -4741,6 +4750,9 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case MH_XENO_SLASHER: clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, 6); break; + case NPC_EARTHQUAKE: //FIXME: Isn't EarthQuake a ground skill after all? + skill_addtimerskill(src,tick+250,src->id,0,0,skill_id,skill_lv,2,flag|BCT_ENEMY|SD_SPLASH|1); + break; case WM_REVERBERATION_MELEE: case WM_REVERBERATION_MAGIC: skill_area_temp[1] = 0; @@ -4765,7 +4777,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint skill_area_temp[0] = map_foreachinrange(skill_area_sub, bl, (skill_id == AS_SPLASHER)?1:skill_get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, tick, BCT_ENEMY, skill_area_sub_count); // recursive invocation of skill_castend_damage_id() with flag|1 - if (battle_config.skill_wall_check) + if (battle_config.skill_wall_check && skill_id != NPC_EARTHQUAKE) map_foreachinshootrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), starget, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id); else map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), starget, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id); @@ -6841,6 +6853,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui clif_skill_nodamage(src,bl,skill_id,skill_lv,1); case SR_EARTHSHAKER: case NC_INFRAREDSCAN: + case NPC_EARTHQUAKE: case NPC_VAMPIRE_GIFT: case NPC_HELLJUDGEMENT: case NPC_PULSESTRIKE: @@ -11588,7 +11601,6 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui #ifdef RENEWAL case NJ_HUUMA: #endif - case NPC_EARTHQUAKE: case NPC_EVILLAND: case RA_ELECTRICSHOCKER: case RA_CLUSTERBOMB: @@ -12759,9 +12771,6 @@ struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16 skill_ break; } - case NPC_EARTHQUAKE: - clif_skill_damage(src, src, gettick(), status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SKILL); - break; case GC_POISONSMOKE: if( !(sc && sc->data[SC_POISONINGWEAPON]) ) return NULL; @@ -13523,11 +13532,6 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, uns skill_delunit(unit); break; - case UNT_EARTHQUAKE: - skill_attack(BF_MAGIC, ss, &unit->bl, bl, sg->skill_id, sg->skill_lv, tick, - map_foreachinrange(skill_area_sub, &unit->bl, skill_get_splash(sg->skill_id, sg->skill_lv), BL_CHAR, &unit->bl, sg->skill_id, sg->skill_lv, tick, BCT_ENEMY, skill_area_sub_count)); - break; - case UNT_SKIDTRAP: { //Knockback away from position of user during placement [Playtester] skill_blown(&unit->bl,bl,skill_get_blewcount(sg->skill_id,sg->skill_lv), diff --git a/src/map/skill.h b/src/map/skill.h index 1c876000b9..27aad09cf5 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -1965,7 +1965,7 @@ enum s_skill_unit_id { UNT_DEATHWAVE, //TODO UNT_WATERATTACK, //TODO UNT_WINDATTACK, //TODO - UNT_EARTHQUAKE, + UNT_EARTHQUAKE, //TODO UNT_EVILLAND, UNT_DARK_RUNNER, //TODO UNT_DARK_TRANSFER, //TODO